{"version":3,"file":"mediasfu-angular.mjs","sources":["../../../projects/mediasfu-angular/src/lib/methods/utils/validate-alphanumeric.service.ts","../../../projects/mediasfu-angular/src/lib/producers/producer-emits/join-con-room.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/socket-receive-methods/join-consume-room.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/socket-receive-methods/producer-closed.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/signal-new-consumer-transport.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/socket-receive-methods/new-pipe-producer.service.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/mini-card/mini-card.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/card-video-display/card-video-display.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/card-video-display/card-video-display.component.html","../../../projects/mediasfu-angular/src/lib/methods/utils/get-overlay-position.util.ts","../../../projects/mediasfu-angular/src/lib/consumers/control-media.service.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/video-card/video-card.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/video-card/video-card.component.html","../../../projects/mediasfu-angular/src/lib/components/display-components/audio-card/audio-card.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/audio-card/audio-card.component.html","../../../projects/mediasfu-angular/src/lib/consumers/add-videos-grid.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/auto-adjust.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/calculate-rows-and-columns.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/change-vids.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/check-grid.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/check-permission.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/check-screen-share.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/close-and-resize.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/compare-active-names.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/compare-screen-states.service.ts","../../../projects/mediasfu-angular/src/lib/sockets/socket-manager.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/connect-ips.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/connect-local-ips.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/connect-recv-transport.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/connect-send-transport.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/connect-send-transport-audio.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/connect-send-transport-screen.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/connect-send-transport-video.service.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/mini-audio/mini-audio.component.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/mini-audio-player/mini-audio-player.component.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/mini-audio-player/mini-audio-player.component.html","../../../projects/mediasfu-angular/src/lib/consumers/consumer-resume.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/create-send-transport.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/disconnect-send-transport-audio.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/disconnect-send-transport-video.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/disconnect-send-transport-screen.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/disp-streams.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/generate-page-content.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/get-estimate.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/get-piped-producers-alt.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/get-producers-piped.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/get-videos.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/mix-streams.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/on-screen-changes.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/prepopulate-user-media.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/process-consumer-transports.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/process-consumer-transports-audio.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/readjust.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/receive-all-piped-transports.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/reorder-streams.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/re-port.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/request-screen-share.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/resume-pause-audio-streams.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/resume-pause-streams.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/resume-send-transport-audio.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/re-update-inter.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/start-share-screen.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/stop-share-screen.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/stream-success-audio.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/stream-success-audio-switch.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/stream-success-screen.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/stream-success-video.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/switch-user-audio.service.ts","../../../projects/mediasfu-angular/src/lib/methods/stream-methods/click-video.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/switch-user-video.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/switch-user-video-alt.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/trigger.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/update-mini-cards-grid.service.ts","../../../projects/mediasfu-angular/src/lib/consumers/update-participant-audio-decibels.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/producer/a-params.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/producer/h-params.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/producer/screen-params.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/producer/v-params.service.ts","../../../projects/mediasfu-angular/src/lib/methods/background-methods/launch-background.service.ts","../../../projects/mediasfu-angular/src/lib/methods/breakout-room-methods/launch-breakout-rooms.service.ts","../../../projects/mediasfu-angular/src/lib/methods/breakout-room-methods/breakout-room-updated.service.ts","../../../projects/mediasfu-angular/src/lib/methods/co-host-methods/launch-co-host.service.ts","../../../projects/mediasfu-angular/src/lib/methods/co-host-methods/modify-co-host-settings.service.ts","../../../projects/mediasfu-angular/src/lib/methods/display-settings-methods/launch-display-settings.service.ts","../../../projects/mediasfu-angular/src/lib/methods/display-settings-methods/modify-display-settings.service.ts","../../../projects/mediasfu-angular/src/lib/methods/exit-methods/launch-confirm-exit.service.ts","../../../projects/mediasfu-angular/src/lib/methods/exit-methods/confirm-exit.service.ts","../../../projects/mediasfu-angular/src/lib/methods/media-settings-methods/launch-media-settings.service.ts","../../../projects/mediasfu-angular/src/lib/methods/menu-methods/launch-menu-modal.service.ts","../../../projects/mediasfu-angular/src/lib/methods/message-methods/launch-messages.service.ts","../../../projects/mediasfu-angular/src/lib/methods/message-methods/send-message.service.ts","../../../projects/mediasfu-angular/src/lib/methods/participants-methods/launch-participants.service.ts","../../../projects/mediasfu-angular/src/lib/methods/participants-methods/message-participants.service.ts","../../../projects/mediasfu-angular/src/lib/methods/participants-methods/mute-participants.service.ts","../../../projects/mediasfu-angular/src/lib/methods/participants-methods/remove-participants.service.ts","../../../projects/mediasfu-angular/src/lib/methods/polls-methods/handle-create-poll.service.ts","../../../projects/mediasfu-angular/src/lib/methods/polls-methods/handle-end-poll.service.ts","../../../projects/mediasfu-angular/src/lib/methods/polls-methods/handle-vote-poll.service.ts","../../../projects/mediasfu-angular/src/lib/methods/polls-methods/launch-poll.service.ts","../../../projects/mediasfu-angular/src/lib/methods/polls-methods/poll-updated.service.ts","../../../projects/mediasfu-angular/src/lib/methods/recording-methods/check-pause-state.service.ts","../../../projects/mediasfu-angular/src/lib/methods/recording-methods/check-resume-state.service.ts","../../../projects/mediasfu-angular/src/lib/methods/recording-methods/confirm-recording.service.ts","../../../projects/mediasfu-angular/src/lib/methods/recording-methods/launch-recording.service.ts","../../../projects/mediasfu-angular/src/lib/methods/recording-methods/record-pause-timer.service.ts","../../../projects/mediasfu-angular/src/lib/methods/recording-methods/record-update-timer.service.ts","../../../projects/mediasfu-angular/src/lib/methods/recording-methods/record-resume-timer.service.ts","../../../projects/mediasfu-angular/src/lib/methods/recording-methods/record-start-timer.service.ts","../../../projects/mediasfu-angular/src/lib/methods/recording-methods/start-recording.service.ts","../../../projects/mediasfu-angular/src/lib/methods/recording-methods/stop-recording.service.ts","../../../projects/mediasfu-angular/src/lib/methods/recording-methods/update-recording.service.ts","../../../projects/mediasfu-angular/src/lib/methods/requests-methods/launch-requests.service.ts","../../../projects/mediasfu-angular/src/lib/methods/requests-methods/respond-to-requests.service.ts","../../../projects/mediasfu-angular/src/lib/methods/settings-methods/launch-settings.service.ts","../../../projects/mediasfu-angular/src/lib/methods/settings-methods/modify-settings.service.ts","../../../projects/mediasfu-angular/src/lib/methods/stream-methods/click-audio.service.ts","../../../projects/mediasfu-angular/src/lib/methods/stream-methods/click-chat.service.ts","../../../projects/mediasfu-angular/src/lib/methods/stream-methods/click-screen-share.service.ts","../../../projects/mediasfu-angular/src/lib/methods/stream-methods/switch-audio.service.ts","../../../projects/mediasfu-angular/src/lib/methods/stream-methods/switch-video.service.ts","../../../projects/mediasfu-angular/src/lib/methods/stream-methods/switch-video-alt.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/join-room-on-media-sfu.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/format-number.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/generate-random-messages.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/generate-random-participants.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/generate-random-polls.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/generate-random-request-list.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/generate-random-waiting-room-list.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/get-modal-position.util.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/sleep.util.ts","../../../projects/mediasfu-angular/src/lib/methods/waiting-methods/launch-waiting.service.ts","../../../projects/mediasfu-angular/src/lib/methods/waiting-methods/respond-to-waiting.service.ts","../../../projects/mediasfu-angular/src/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.ts","../../../projects/mediasfu-angular/src/lib/methods/whiteboard-methods/capture-canvas-stream.service.ts","../../../projects/mediasfu-angular/src/lib/producer-client/producer-client-emits/create-device-client.service.ts","../../../projects/mediasfu-angular/src/lib/producers/producer-emits/join-room.service.ts","../../../projects/mediasfu-angular/src/lib/producer-client/producer-client-emits/join-room-client.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/producer/video-capture-constraints.service.ts","../../../projects/mediasfu-angular/src/lib/producer-client/producer-client-emits/update-room-parameters-client.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/check-limits-and-make-request.service.ts","../../../projects/mediasfu-angular/src/lib/producers/producer-emits/join-local-room.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/all-members.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/all-members-rest.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/all-waiting-room-members.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/ban-participant.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/control-media-host.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/disconnect.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/disconnect-user-self.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/get-domains.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/host-request-response.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/meeting-ended.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/meeting-still-there.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/meeting-time-remaining.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/participant-requested.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/person-joined.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/producer-media-closed.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/producer-media-paused.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/producer-media-resumed.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/re-initiate-recording.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/receive-message.service.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/sound-player.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/recording-notice.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/room-record-params.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/screen-producer-id.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/start-records.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/stopped-recording.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/time-left-recording.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/update-consuming-domains.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/update-media-settings.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/updated-co-host.service.ts","../../../projects/mediasfu-angular/src/lib/producers/socket-receive-methods/user-waiting.service.ts","../../../projects/mediasfu-angular/src/lib/components/background-components/background-modal/background-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/background-components/background-modal/background-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/breakout-components/room-list/room-list.component.ts","../../../projects/mediasfu-angular/src/lib/components/breakout-components/room-list/room-list.component.html","../../../projects/mediasfu-angular/src/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/breakout-components/breakout-rooms-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/breakout-components/breakout-rooms-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/co-host-components/co-host-modal/co-host-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/co-host-components/co-host-modal/co-host-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/display-components/alert-component/alert.component.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/alert-component/alert.component.component.html","../../../projects/mediasfu-angular/src/lib/components/display-components/audio-grid/audio-grid.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/control-buttons-component/control-buttons-component.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.html","../../../projects/mediasfu-angular/src/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/flexible-grid/flexible-grid.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/flexible-video/flexible-video.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/loading-modal/loading-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/main-aspect-component/main-aspect-component.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/main-container-component/main-container-component.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/main-grid-component/main-grid-component.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/main-screen-component/main-screen-component.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/mini-card-audio/mini-card-audio.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/other-grid-component/other-grid-component.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/pagination/pagination.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-settings-components/display-settings-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-settings-components/display-settings-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/menu-components/custom-buttons/custom-buttons.component.ts","../../../projects/mediasfu-angular/src/lib/components/menu-components/custom-buttons/custom-buttons.component.html","../../../projects/mediasfu-angular/src/lib/components/menu-components/meeting-id-component/meeting-id-component.component.ts","../../../projects/mediasfu-angular/src/lib/components/menu-components/meeting-id-component/meeting-id-component.component.html","../../../projects/mediasfu-angular/src/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.ts","../../../projects/mediasfu-angular/src/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.html","../../../projects/mediasfu-angular/src/lib/components/menu-components/share-buttons-component/share-buttons-component.component.ts","../../../projects/mediasfu-angular/src/lib/components/menu-components/share-buttons-component/share-buttons-component.component.html","../../../projects/mediasfu-angular/src/lib/components/menu-components/menu-modal/menu-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/menu-components/menu-modal/menu-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/message-components/message-panel/message-panel.component.ts","../../../projects/mediasfu-angular/src/lib/components/message-components/message-panel/message-panel.component.html","../../../projects/mediasfu-angular/src/lib/components/message-components/messages-modal/messages-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/message-components/messages-modal/messages-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.html","../../../projects/mediasfu-angular/src/lib/methods/utils/create-room-on-media-sfu.service.ts","../../../projects/mediasfu-angular/src/lib/components/misc-components/pre-join-page/pre-join-page.component.ts","../../../projects/mediasfu-angular/src/lib/components/misc-components/pre-join-page/pre-join-page.component.html","../../../projects/mediasfu-angular/src/lib/components/misc-components/share-event-modal/share-event-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/misc-components/share-event-modal/share-event-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/misc-components/welcome-page/welcome-page.component.ts","../../../projects/mediasfu-angular/src/lib/components/misc-components/welcome-page/welcome-page.component.html","../../../projects/mediasfu-angular/src/lib/components/participants-components/participant-list-item/participant-list-item.component.ts","../../../projects/mediasfu-angular/src/lib/components/participants-components/participant-list-item/participant-list-item.component.html","../../../projects/mediasfu-angular/src/lib/components/participants-components/participant-list/participant-list.component.ts","../../../projects/mediasfu-angular/src/lib/components/participants-components/participant-list/participant-list.component.html","../../../projects/mediasfu-angular/src/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.ts","../../../projects/mediasfu-angular/src/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.html","../../../projects/mediasfu-angular/src/lib/components/participants-components/participant-list-others/participant-list-others.component.ts","../../../projects/mediasfu-angular/src/lib/components/participants-components/participant-list-others/participant-list-others.component.html","../../../projects/mediasfu-angular/src/lib/components/participants-components/participants-modal/participants-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/participants-components/participants-modal/participants-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/polls-components/poll-modal/poll-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/polls-components/poll-modal/poll-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/recording-components/standard-panel-component/standard-panel-component.component.ts","../../../projects/mediasfu-angular/src/lib/components/recording-components/standard-panel-component/standard-panel-component.component.html","../../../projects/mediasfu-angular/src/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.ts","../../../projects/mediasfu-angular/src/lib/components/recording-components/advanced-panel-component/advanced-panel-component.component.html","../../../projects/mediasfu-angular/src/lib/components/recording-components/recording-modal/recording-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/recording-components/recording-modal/recording-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/requests-components/render-request-component/render-request-component.component.ts","../../../projects/mediasfu-angular/src/lib/components/requests-components/render-request-component/render-request-component.component.html","../../../projects/mediasfu-angular/src/lib/components/requests-components/requests-modal/requests-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/requests-components/requests-modal/requests-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/screenboard-components/screenboard/screenboard.component.ts","../../../projects/mediasfu-angular/src/lib/components/screenboard-components/screenboard/screenboard.component.html","../../../projects/mediasfu-angular/src/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/waiting-components/waiting-room-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/waiting-components/waiting-room-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.ts","../../../projects/mediasfu-angular/src/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.html","../../../projects/mediasfu-angular/src/lib/components/whiteboard-components/whiteboard/whiteboard.component.ts","../../../projects/mediasfu-angular/src/lib/components/whiteboard-components/whiteboard/whiteboard.component.html","../../../projects/mediasfu-angular/src/lib/@types/types.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/initial-values.util.ts","../../../projects/mediasfu-angular/src/lib/consumers/receive-room-messages.service.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/control-widgets/menu-widget.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/control-widgets/message-widget.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/control-widgets/menu-record-widget.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/control-widgets/record-timer-widget.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/control-widgets/menu-participants-widget.component.ts","../../../projects/mediasfu-angular/src/lib/components/display-components/control-widgets/screenshare-widget.component.ts","../../../projects/mediasfu-angular/src/lib/methods/utils/create-response-join-room.util.ts","../../../projects/mediasfu-angular/src/lib/components/mediasfu-components/mediasfu-generic.component.ts","../../../projects/mediasfu-angular/src/lib/components/mediasfu-components/mediasfu-broadcast.component.ts","../../../projects/mediasfu-angular/src/lib/components/mediasfu-components/mediasfu-webinar.component.ts","../../../projects/mediasfu-angular/src/lib/components/mediasfu-components/mediasfu-conference.component.ts","../../../projects/mediasfu-angular/src/lib/components/mediasfu-components/mediasfu-chat.component.ts","../../../projects/mediasfu-angular/src/mediasfu-angular.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nexport interface ValidateAlphanumericOptions {\r\n  str: string;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ValidateAlphanumericType = (options: ValidateAlphanumericOptions) => Promise<boolean>;\r\n\r\n/**\r\n * Service to validate if a given string contains only alphanumeric characters.\r\n *\r\n * @class ValidateAlphanumeric\r\n *\r\n * @example\r\n * ```typescript\r\n * const validator = new ValidateAlphanumeric();\r\n * validator.validateAlphanumeric({ str: 'abc123' }).then(isValid => console.log(isValid)); // true\r\n * validator.validateAlphanumeric({ str: 'abc 123!' }).then(isValid => console.log(isValid)); // false\r\n * ```\r\n *\r\n * @param {ValidateAlphanumericOptions} options - Contains the string to validate.\r\n * @param {string} options.str - The input string that needs to be validated.\r\n * @returns {Promise<boolean>} - A promise resolving to `true` if the input string is alphanumeric, otherwise `false`.\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ValidateAlphanumeric {\r\n  /**\r\n   * Validates if the given string contains only alphanumeric characters.\r\n   *\r\n   * @param {ValidateAlphanumericOptions} options - The options containing the string to validate.\r\n   * @param {string} options.str - The string to be validated.\r\n   * @returns {Promise<boolean>} - A promise that resolves to `true` if the string is alphanumeric, otherwise `false`.\r\n   */\r\n  async validateAlphanumeric({ str }: ValidateAlphanumericOptions): Promise<boolean> {\r\n    let code, i, len;\r\n\r\n    for (i = 0, len = str.length; i < len; i++) {\r\n      code = str.charCodeAt(i);\r\n      if (\r\n        !(code > 47 && code < 58) && // numeric (0-9)\r\n        !(code > 64 && code < 91) && // upper alpha (A-Z)\r\n        !(code > 96 && code < 123)\r\n      ) {\r\n        // lower alpha (a-z)\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { ValidateAlphanumeric } from '../../methods/utils/validate-alphanumeric.service';\r\nimport { RtpCapabilities } from 'mediasoup-client/lib/types';\r\n\r\nexport interface JoinConRoomOptions {\r\n  socket: Socket;\r\n  roomName: string;\r\n  islevel: string;\r\n  member: string;\r\n  sec: string;\r\n  apiUserName: string;\r\n}\r\n\r\nexport interface JoinConRoomResponse {\r\n  success: boolean;\r\n  rtpCapabilities: RtpCapabilities | null;\r\n  reason?: string;\r\n  banned?: boolean;\r\n  suspended?: boolean;\r\n  noAdmin?: boolean;\r\n  [key: string]: any;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type JoinConRoomType = (options: JoinConRoomOptions) => Promise<JoinConRoomResponse>;\r\n\r\n/**\r\n * Joins a conference room with the provided options and performs validation checks.\r\n *\r\n * @param {JoinConRoomOptions} options - Contains:\r\n *   - socket: Socket instance for communication.\r\n *   - roomName: Name of the room to join.\r\n *   - islevel: User level within the room.\r\n *   - member: Member identifier.\r\n *   - sec: Security token.\r\n *   - apiUserName: API username for authentication.\r\n *\r\n * - **Validation**:\r\n *   - Checks that `roomName`, `apiUserName`, and `member` are alphanumeric.\r\n *   - Ensures `roomName` starts with 's' or 'p' and meets length requirements.\r\n *   - Verifies `sec`, `islevel`, and `apiUserName` comply with length and format expectations.\r\n *\r\n * - **Response Handling**:\r\n *   - Resolves to the server's response data upon a successful join.\r\n *   - Rejects with specific reasons if the user is banned, suspended, or if the room host is not present.\r\n *\r\n * @returns {Promise<JoinConRoomResponse>} Resolves with the join response data, or rejects with error details.\r\n * @throws {Error} Throws validation errors or issues encountered while joining the room.\r\n *\r\n * @example\r\n * ```typescript\r\n * const joinOptions = {\r\n *   socket: mySocket,\r\n *   roomName: 'sMyRoom',\r\n *   islevel: '1',\r\n *   member: 'participant123',\r\n *   sec: '64-character-long-secret-key-here...',\r\n *   apiUserName: 'apiUser123',\r\n * };\r\n * joinConRoom(joinOptions)\r\n *   .then(response => console.log('Joined room:', response))\r\n *   .catch(error => console.error('Failed to join room:', error));\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class JoinConRoom {\r\n  constructor(private validateAlphanumeric: ValidateAlphanumeric) {}\r\n\r\n  /**\r\n   * Joins a conference room using the provided options.\r\n   *\r\n   * @param {JoinConRoomOptions} options - The options for joining the conference room.\r\n   * @param {Socket} options.socket - The socket instance to use for communication.\r\n   * @param {string} options.roomName - The name of the room to join.\r\n   * @param {string} options.islevel - The level of the user.\r\n   * @param {string} options.member - The member identifier.\r\n   * @param {string} options.sec - The security token.\r\n   * @param {string} options.apiUserName - The API username.\r\n   * @returns {Promise<JoinConRoomResponse>} A promise that resolves with the response of the join operation.\r\n   *\r\n   * @throws {Error} If any of the required parameters are missing or invalid.\r\n   * @throws {Error} If the user is banned, suspended, or if the host has not joined the room yet.\r\n   */\r\n  async joinConRoom({\r\n    socket,\r\n    roomName,\r\n    islevel,\r\n    member,\r\n    sec,\r\n    apiUserName,\r\n  }: JoinConRoomOptions): Promise<object> {\r\n    return new Promise((resolve, reject) => {\r\n      // Validate inputs\r\n      if (!(sec && roomName && islevel && apiUserName && member)) {\r\n        const validationError = {\r\n          success: false,\r\n          rtpCapabilities: null,\r\n          reason: 'Missing required parameters',\r\n        };\r\n        reject(validationError);\r\n        return;\r\n      }\r\n\r\n      // Validate alphanumeric for roomName, apiUserName, and member\r\n      try {\r\n        this.validateAlphanumeric.validateAlphanumeric({ str: roomName });\r\n        this.validateAlphanumeric.validateAlphanumeric({ str: apiUserName });\r\n        this.validateAlphanumeric.validateAlphanumeric({ str: member });\r\n      } catch (error) {\r\n        const validationError = {\r\n          success: false,\r\n          rtpCapabilities: null,\r\n          reason: 'Invalid roomName or apiUserName or member',\r\n        };\r\n        reject(validationError);\r\n        return;\r\n      }\r\n\r\n      // Validate roomName starts with 's' or 'p'\r\n      if (!(roomName.startsWith('s') || roomName.startsWith('p'))) {\r\n        const validationError = {\r\n          success: false,\r\n          rtpCapabilities: null,\r\n          reason: 'Invalid roomName, must start with s or p',\r\n        };\r\n        reject(validationError);\r\n        return;\r\n      }\r\n\r\n      // Validate other conditions for sec, roomName, islevel, apiUserName\r\n      if (\r\n        !(\r\n          sec.length === 64 &&\r\n          roomName.length >= 8 &&\r\n          islevel.length === 1 &&\r\n          apiUserName.length >= 6 &&\r\n          (islevel === '0' || islevel === '1' || islevel === '2')\r\n        )\r\n      ) {\r\n        const validationError = {\r\n          success: false,\r\n          rtpCapabilities: null,\r\n          reason: 'Invalid roomName or islevel or apiUserName or secret',\r\n        };\r\n        reject(validationError);\r\n        return;\r\n      }\r\n\r\n      socket.emit(\r\n        'joinConRoom',\r\n        { roomName, islevel, member, sec, apiUserName },\r\n        async (data: any) => {\r\n          try {\r\n            // Check if rtpCapabilities is null\r\n            if (data.rtpCapabilities === null) {\r\n              // Check if banned, suspended, or noAdmin\r\n              if (data.banned) {\r\n                throw new Error('User is banned.');\r\n              }\r\n              if (data.suspended) {\r\n                throw new Error('User is suspended.');\r\n              }\r\n              if (data.noAdmin) {\r\n                throw new Error('Host has not joined the room yet.');\r\n              }\r\n\r\n              // Resolve with the data received from the 'joinConRoom' event\r\n              resolve(data);\r\n            } else {\r\n              // Resolve with the data received from the 'joinConRoom' event\r\n              resolve(data);\r\n            }\r\n          } catch (error) {\r\n            // Handle errors during the joinConRoom process\r\n            console.log('Error joining room:', error);\r\n            reject(error);\r\n          }\r\n        },\r\n      );\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { JoinConRoom } from '../../producers/producer-emits/join-con-room.service';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  ReceiveAllPipedTransportsType,\r\n  ReceiveAllPipedTransportsParameters,\r\n  CreateDeviceClientType,\r\n} from '../../@types/types';\r\nimport { Device, RtpCapabilities } from 'mediasoup-client/lib/types';\r\n\r\nexport interface JoinConsumeRoomParameters extends ReceiveAllPipedTransportsParameters {\r\n  roomName: string;\r\n  islevel: string;\r\n  member: string;\r\n  device: Device | null;\r\n  updateDevice: (device: Device | null) => void;\r\n  receiveAllPipedTransports: ReceiveAllPipedTransportsType;\r\n  createDeviceClient: CreateDeviceClientType;\r\n\r\n  // mediasfu functions\r\n  [key: string]: any;\r\n}\r\nexport interface JoinConsumeRoomOptions {\r\n  remote_sock: Socket;\r\n  apiToken: string;\r\n  apiUserName: string;\r\n  parameters: JoinConsumeRoomParameters;\r\n}\r\n\r\ninterface JoinConsumeRoomResponse {\r\n  success: boolean;\r\n  rtpCapabilities?: RtpCapabilities;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type JoinConsumeRoomType = (\r\n  options: JoinConsumeRoomOptions,\r\n) => Promise<JoinConsumeRoomResponse>;\r\n\r\n\r\n/**\r\n * @service JoinConsumeRoom\r\n * @description Service to join a media consumption room, setup device, and manage piped transports.\r\n *\r\n * @method joinConsumeRoom\r\n * Joins a consumption room by sending a request to the server and performing necessary device and transport setup.\r\n *\r\n * @param {JoinConsumeRoomOptions} options - Options for joining the consumption room.\r\n * @param {Socket} options.remote_sock - The remote socket used for joining the room.\r\n * @param {string} options.apiToken - API token for authentication.\r\n * @param {string} options.apiUserName - API username for authentication.\r\n * @param {JoinConsumeRoomParameters} options.parameters - Parameters required for the function.\r\n *\r\n * @returns {Promise<JoinConsumeRoomResponse>} A promise that resolves with the result of the join request.\r\n *\r\n * @example\r\n * ```typescript\r\n * const joinConsumeRoomResponse = await joinConsumeRoomService.joinConsumeRoom({\r\n *   remote_sock: mySocket,\r\n *   apiToken: 'apiToken123',\r\n *   apiUserName: 'myUser',\r\n *   parameters: {\r\n *     roomName: 'room1',\r\n *     islevel: '2',\r\n *     member: 'JohnDoe',\r\n *     device: null,\r\n *     updateDevice: updateDeviceFunction,\r\n *     receiveAllPipedTransports: receiveAllPipedTransportsFunction,\r\n *     createDeviceClient: createDeviceClientFunction,\r\n *   }\r\n * });\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class JoinConsumeRoom {\r\n  constructor(private JoinConRoomService: JoinConRoom) {}\r\n\r\n  /**\r\n   * Joins a consumption room by sending a request to the server and handles the necessary setup.\r\n   * @param {Object} options - The options object containing necessary variables.\r\n   * @param {any} options.remote_sock - The remote socket information.\r\n   * @param {string} options.apiToken - The API token for authentication.\r\n   * @param {string} options.apiUserName - The API username for authentication.\r\n   * @param {any} options.parameters - Additional parameters required for the function.\r\n   * @returns {Promise<any>} - A promise that resolves with data related to the success of joining the room.\r\n   */\r\n  joinConsumeRoom = async ({\r\n    remote_sock,\r\n    apiToken,\r\n    apiUserName,\r\n    parameters,\r\n  }: JoinConsumeRoomOptions): Promise<JoinConsumeRoomResponse> => {\r\n    let {\r\n      roomName,\r\n      islevel,\r\n      member,\r\n      device,\r\n      updateDevice,\r\n\r\n      //Mediasfu functions\r\n      receiveAllPipedTransports,\r\n      createDeviceClient,\r\n    } = parameters;\r\n\r\n    try {\r\n      // Join the consumption room\r\n      const data: any = await this.JoinConRoomService.joinConRoom({\r\n        socket: remote_sock,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec: apiToken,\r\n        apiUserName,\r\n      });\r\n\r\n      if (data && data.success) {\r\n        // Setup media device if not already set\r\n        if (!device) {\r\n          if (data.rtpCapabilities) {\r\n            const device_ = await createDeviceClient({\r\n              rtpCapabilities: data.rtpCapabilities,\r\n            });\r\n\r\n            if (device_) {\r\n              updateDevice(device_);\r\n            }\r\n          }\r\n        }\r\n\r\n        // Receive all piped transports\r\n        await receiveAllPipedTransports({ nsock: remote_sock, parameters });\r\n      }\r\n\r\n      return data;\r\n    } catch (error) {\r\n      console.log('Error in joinConsumeRoom:', error);\r\n      throw new Error('Failed to join the consumption room or set up necessary components.');\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Transport, CloseAndResizeParameters, CloseAndResizeType } from '../../@types/types';\r\n\r\nexport interface ProducerClosedParameters extends CloseAndResizeParameters {\r\n  consumerTransports: Transport[];\r\n  screenId?: string;\r\n  updateConsumerTransports: (transports: Transport[]) => void;\r\n\r\n  // mediasfu functions\r\n  closeAndResize: CloseAndResizeType;\r\n  getUpdatedAllParams: () => ProducerClosedParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ProducerClosedOptions {\r\n  remoteProducerId: string;\r\n  parameters: ProducerClosedParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ProducerClosedType = (options: ProducerClosedOptions) => Promise<void>;\r\n\r\n/**\r\n * @service ProducerClosed\r\n * @description Service to manage the closing of a producer, including resizing video elements and updating consumer transports.\r\n *\r\n * @method producerClosed\r\n * Closes a specific producer by its ID, adjusts any associated video elements, and updates the list of consumer transports.\r\n *\r\n * @param {ProducerClosedOptions} options - Options for closing the specified producer.\r\n * @param {string} options.remoteProducerId - Unique ID for the producer to close.\r\n * @param {ProducerClosedParameters} options.parameters - Parameters to configure the producer closure and related updates.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the producer has been closed and relevant updates have been made.\r\n *\r\n * @example\r\n * ```typescript\r\n * await producerClosedService.producerClosed({\r\n *   remoteProducerId: 'producer123',\r\n *   parameters: {\r\n *     consumerTransports: currentTransports,\r\n *     screenId: 'screen123',\r\n *     updateConsumerTransports: updateTransportList,\r\n *     closeAndResize: closeAndResizeFunction,\r\n *     getUpdatedAllParams: getUpdatedParamsFunction,\r\n *   }\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ProducerClosed {\r\n  /**\r\n   * Handles the closing of a producer and resizes video elements.\r\n   * @param {Object} options - The options object containing necessary variables.\r\n   * @param {string} options.remoteProducerId - The ID of the remote producer.\r\n   * @param {any} options.parameters - Additional parameters required for the function.\r\n   * @returns {Promise<void>}\r\n   */\r\n  producerClosed = async ({\r\n    remoteProducerId,\r\n    parameters,\r\n  }: ProducerClosedOptions): Promise<void> => {\r\n    let {\r\n      consumerTransports,\r\n      screenId,\r\n      updateConsumerTransports,\r\n\r\n      // mediasfu functions\r\n      closeAndResize,\r\n    } = parameters;\r\n\r\n    // Handle producer closed\r\n    const producerToClose = consumerTransports.find(\r\n      (transportData: any) => transportData.producerId === remoteProducerId,\r\n    );\r\n\r\n    if (!producerToClose) {\r\n      return;\r\n    }\r\n\r\n    // Check if the ID of the producer to close is == screenId\r\n    let kind: string = producerToClose.consumer.kind;\r\n\r\n    if (producerToClose.producerId == screenId) {\r\n      kind = 'screenshare';\r\n    }\r\n    try {\r\n      await producerToClose['consumerTransport'].close();\r\n    } catch (error) {\r\n      console.error('Error closing consumerTransport:', error);\r\n    }\r\n\r\n    try {\r\n      producerToClose.consumer.close();\r\n    } catch (error) {\r\n      console.error('Error closing consumer:', error);\r\n    }\r\n\r\n    consumerTransports = consumerTransports.filter(\r\n      (transportData: any) => transportData.producerId !== remoteProducerId,\r\n    );\r\n    updateConsumerTransports(consumerTransports);\r\n\r\n    // Close and resize the videos\r\n    await closeAndResize({ producerId: remoteProducerId, kind: kind, parameters: parameters });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  ReorderStreamsParameters,\r\n  ReorderStreamsType,\r\n  ConnectRecvTransportType,\r\n  ConnectRecvTransportParameters,\r\n  CreateWebRTCTransportResponse,\r\n} from '../@types/types';\r\nimport { Device, DtlsParameters } from 'mediasoup-client/lib/types';\r\n\r\nexport interface SignalNewConsumerTransportParameters\r\n  extends ReorderStreamsParameters,\r\n    ConnectRecvTransportParameters {\r\n  device: Device | null;\r\n  consumingTransports: string[];\r\n  lock_screen: boolean;\r\n  updateConsumingTransports: (transports: string[]) => void;\r\n  connectRecvTransport: ConnectRecvTransportType;\r\n  reorderStreams: ReorderStreamsType;\r\n  getUpdatedAllParams: () => SignalNewConsumerTransportParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface SignalNewConsumerTransportOptions {\r\n  remoteProducerId: string;\r\n  islevel: string;\r\n  nsock: Socket;\r\n  parameters: SignalNewConsumerTransportParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type SignalNewConsumerTransportType = (\r\n  options: SignalNewConsumerTransportOptions,\r\n) => Promise<string[] | void>;\r\n\r\n/**\r\n   * Signals the creation of a new consumer transport.\r\n   *\r\n   * @param {Object} options - The options for signaling a new consumer transport.\r\n   * @param {string} options.remoteProducerId - The ID of the remote producer.\r\n   * @param {boolean} options.islevel - Indicates the level of the consumer.\r\n   * @param {any} options.nsock - The socket instance for communication.\r\n   * @param {SignalNewConsumerTransportOptions} options.parameters - The parameters for the transport.\r\n   *\r\n   * @returns {Promise<string[] | void>} A promise that resolves to an array of consuming transports or void.\r\n   *\r\n   * @throws Will throw an error if the signaling process fails.\r\n   *\r\n   * @example\r\n   * const options = {\r\n   *   remoteProducerId: 'producer-id',\r\n   *   islevel: true,\r\n   *   nsock: socketInstance,\r\n   *   parameters: {\r\n   *     device: mediaDevice,\r\n   *     consumingTransports: [],\r\n   *     lock_screen: false,\r\n   *     updateConsumingTransports: updateFunction,\r\n   *     connectRecvTransport: connectFunction,\r\n   *     reorderStreams: reorderFunction,\r\n   *     getUpdatedAllParams: getUpdatedParamsFunction,\r\n   *   },\r\n   * };\r\n   *\r\n   * signalNewConsumerTransport(options)\r\n   *   .then(consumingTransports => {\r\n   *     console.log('Consuming Transports:', consumingTransports);\r\n   *   })\r\n   *   .catch(error => {\r\n   *     console.error('Error signaling new consumer transport:', error);\r\n   *   });\r\n   */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SignalNewConsumerTransport {\r\n\r\n  signalNewConsumerTransport = async ({\r\n    remoteProducerId,\r\n    islevel,\r\n    nsock,\r\n    parameters,\r\n  }: SignalNewConsumerTransportOptions): Promise<string[] | void> => {\r\n    try {\r\n      let {\r\n        device,\r\n        consumingTransports,\r\n        lock_screen,\r\n        updateConsumingTransports,\r\n        connectRecvTransport,\r\n        reorderStreams,\r\n      } = parameters;\r\n\r\n      // Get updated parameters\r\n      const updatedParams = parameters.getUpdatedAllParams();\r\n      device = updatedParams.device;\r\n      consumingTransports = updatedParams.consumingTransports;\r\n\r\n      // Check if already consuming\r\n      if (consumingTransports.includes(remoteProducerId)) {\r\n        return consumingTransports;\r\n      }\r\n\r\n      // Add remote producer ID to consumingTransports array\r\n      consumingTransports.push(remoteProducerId);\r\n      updateConsumingTransports(consumingTransports);\r\n\r\n      // Emit createWebRtcTransport event to signal a new consumer\r\n      nsock.emit(\r\n        'createWebRtcTransport',\r\n        { consumer: true, islevel },\r\n        async ({ params }: { params: CreateWebRTCTransportResponse }) => {\r\n          if (params.error) {\r\n            // Handle error\r\n            return;\r\n          }\r\n\r\n          try {\r\n            // Create a new receiving transport using the received parameters\r\n            if (!device) {\r\n              throw new Error('Device is not initialized');\r\n            }\r\n            const consumerTransport = device.createRecvTransport({ ...params });\r\n\r\n            // Handle 'connect' event for the consumer transport\r\n            consumerTransport.on(\r\n              'connect',\r\n              async (\r\n                { dtlsParameters }: { dtlsParameters: DtlsParameters },\r\n                callback: () => void,\r\n                errback: (error: any) => void,\r\n              ) => {\r\n                try {\r\n                  // Emit transport-recv-connect event to signal connection\r\n                  nsock.emit('transport-recv-connect', {\r\n                    dtlsParameters,\r\n                    serverConsumerTransportId: params.id,\r\n                  });\r\n                  callback();\r\n                } catch (error) {\r\n                  errback(error);\r\n                }\r\n              },\r\n            );\r\n\r\n            // Listen for connection state change\r\n            consumerTransport.on('connectionstatechange', async (state: string) => {\r\n              switch (state) {\r\n                case 'connecting':\r\n                  // Handle connecting state\r\n                  break;\r\n\r\n                case 'connected':\r\n                  // Handle connected state\r\n                  break;\r\n\r\n                case 'failed':\r\n                  // Handle failed state\r\n                  consumerTransport.close();\r\n\r\n                  // Reorder streams based on conditions\r\n                  if (lock_screen) {\r\n                    await reorderStreams({ add: true, parameters });\r\n                  } else {\r\n                    await reorderStreams({ add: false, parameters });\r\n                  }\r\n                  break;\r\n\r\n                default:\r\n                  break;\r\n              }\r\n            });\r\n\r\n            // Connect the receiving transport\r\n            await connectRecvTransport({\r\n              consumerTransport,\r\n              remoteProducerId,\r\n              serverConsumerTransportId: params.id,\r\n              nsock,\r\n              parameters,\r\n            });\r\n          } catch (error) {\r\n            console.log(error, 'createRecvTransport error');\r\n            // Handle error\r\n            return;\r\n          }\r\n        },\r\n      );\r\n    } catch (error) {\r\n      console.log(error, 'signalNewConsumerTransport error');\r\n      // Handle error\r\n      return;\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SignalNewConsumerTransport } from '../signal-new-consumer-transport.service';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  ReorderStreamsParameters,\r\n  ReorderStreamsType,\r\n  SignalNewConsumerTransportParameters,\r\n  ConnectRecvTransportParameters,\r\n  ConnectRecvTransportType,\r\n  ShowAlert,\r\n} from '../../@types/types';\r\nimport { Device } from 'mediasoup-client/lib/types';\r\n\r\nexport interface NewPipeProducerParameters\r\n  extends ReorderStreamsParameters,\r\n    SignalNewConsumerTransportParameters,\r\n    ConnectRecvTransportParameters {\r\n  first_round: boolean;\r\n  shareScreenStarted: boolean;\r\n  shared: boolean;\r\n  landScaped: boolean;\r\n  showAlert?: ShowAlert;\r\n  isWideScreen: boolean;\r\n  updateFirst_round: (firstRound: boolean) => void;\r\n  updateLandScaped: (landScaped: boolean) => void;\r\n  device: Device | null;\r\n  consumingTransports: string[];\r\n  lock_screen: boolean;\r\n  updateConsumingTransports: (transports: string[]) => void;\r\n\r\n  // mediasfu functions\r\n  connectRecvTransport: ConnectRecvTransportType;\r\n  reorderStreams: ReorderStreamsType;\r\n  getUpdatedAllParams: () => NewPipeProducerParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface NewPipeProducerOptions {\r\n  producerId: string;\r\n  islevel: string;\r\n  nsock: Socket;\r\n  parameters: NewPipeProducerParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type NewPipeProducerType = (options: NewPipeProducerOptions) => Promise<void>;\r\n\r\n/**\r\n * @service NewPipeProducer\r\n * @description Service to manage new pipe producer events, update state, and handle screen orientation for optimal experience.\r\n *\r\n * @method newPipeProducer\r\n * Handles the setup of a new pipe producer and manages user notifications or orientation changes as needed.\r\n *\r\n * @param {NewPipeProducerOptions} options - Options for setting up a new pipe producer.\r\n * @param {string} options.producerId - Unique ID for the new producer.\r\n * @param {string} options.islevel - Level designation for the producer.\r\n * @param {Socket} options.nsock - The socket used for communication.\r\n * @param {NewPipeProducerParameters} options.parameters - Parameters to configure the new pipe producer.\r\n *\r\n * @returns {Promise<void>} A promise that completes when the new pipe producer is set up.\r\n *\r\n * @example\r\n * ```typescript\r\n * await newPipeProducerService.newPipeProducer({\r\n *   producerId: 'producer123',\r\n *   islevel: '2',\r\n *   nsock: mySocket,\r\n *   parameters: {\r\n *     first_round: true,\r\n *     shareScreenStarted: false,\r\n *     shared: false,\r\n *     landScaped: false,\r\n *     showAlert: alertFunction,\r\n *     isWideScreen: true,\r\n *     updateFirst_round: updateFirstRoundFunction,\r\n *     updateLandScaped: updateLandScapedFunction,\r\n *     device: myDevice,\r\n *     consumingTransports: [],\r\n *     connectRecvTransport: connectRecvTransportFunction,\r\n *     reorderStreams: reorderStreamsFunction,\r\n *     getUpdatedAllParams: getUpdatedParamsFunction,\r\n *   }\r\n * });\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class NewPipeProducer {\r\n  constructor(private signalNewConsumerTransportService: SignalNewConsumerTransport) {}\r\n\r\n  /**\r\n   * Handles new pipe producer events and updates relevant states.\r\n   * @param {Object} options - The options object containing necessary variables.\r\n   * @param {string} options.producerId - The ID of the producer.\r\n   * @param {string} options.islevel - The level of the producer.\r\n   * @param {any} options.nsock - The socket object.\r\n   * @param {any} options.parameters - Additional parameters required for the function.\r\n   * @returns {Promise<void>}\r\n   */\r\n  newPipeProducer = async ({\r\n    producerId,\r\n    islevel,\r\n    nsock,\r\n    parameters,\r\n  }: NewPipeProducerOptions): Promise<void> => {\r\n    let {\r\n      first_round,\r\n      shareScreenStarted,\r\n      shared,\r\n      landScaped,\r\n      showAlert,\r\n      isWideScreen,\r\n      updateFirst_round,\r\n      updateLandScaped,\r\n    } = parameters;\r\n\r\n    try {\r\n      // Perform signaling for new consumer transport\r\n      await this.signalNewConsumerTransportService.signalNewConsumerTransport({\r\n        remoteProducerId: producerId,\r\n        islevel: islevel,\r\n        nsock: nsock,\r\n        parameters: parameters,\r\n      });\r\n\r\n      first_round = false;\r\n      if (shareScreenStarted || shared) {\r\n        if (!isWideScreen) {\r\n          if (!landScaped) {\r\n            if (showAlert) {\r\n              showAlert({\r\n                message: 'Please rotate your device to landscape mode for better experience',\r\n                type: 'success',\r\n                duration: 3000,\r\n              });\r\n            }\r\n            landScaped = true;\r\n            updateLandScaped(landScaped);\r\n          }\r\n        }\r\n\r\n        first_round = true;\r\n        updateFirst_round(first_round);\r\n      }\r\n    } catch (error) {\r\n      console.error('Error in newPipeProducer:', error);\r\n      throw new Error('Failed to handle new pipe producer event.');\r\n    }\r\n  };\r\n}\r\n","import { Component, Input, Inject, Optional } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nexport interface MiniCardOptions {\r\n  initials?: string;\r\n  fontSize?: number;\r\n  customStyle?: Partial<CSSStyleDeclaration>;\r\n  imageSource?: string;\r\n  roundedImage?: boolean;\r\n  imageStyle?: Partial<CSSStyleDeclaration>;\r\n}\r\n\r\nexport type MiniCardType = (options: MiniCardOptions) => HTMLElement;\r\n\r\n/**\r\n * MiniCard component displays a customizable card with an image or initials.\r\n *\r\n * @component\r\n * @selector app-mini-card\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @template\r\n * ```html\r\n * <div class=\"mini-card\" [ngStyle]=\"getMergedCardStyles()\">\r\n *   <div *ngIf=\"imageSource; else noImage\" class=\"image-container\">\r\n *     <img [src]=\"imageSource\" alt=\"Profile\" [ngStyle]=\"getMergedImageStyles()\" />\r\n *   </div>\r\n *   <ng-template #noImage>\r\n *     <div class=\"initials\" [ngStyle]=\"getInitialsStyle()\">{{ initials }}</div>\r\n *   </ng-template>\r\n * </div>\r\n * ```\r\n *\r\n * @styleUrls ['./mini-card.component.css']\r\n *\r\n * @inputs\r\n * - `initials` (string): Initials to display if no image is provided.\r\n * - `fontSize` (number): Font size for initials text, default is 14.\r\n * - `customStyle` (CSSStyleDeclaration): Custom styles for the card.\r\n * - `imageSource` (string): Source URL for the image.\r\n * - `roundedImage` (boolean): Whether the image should be rounded, default is false.\r\n * - `imageStyle` (CSSStyleDeclaration): Custom styles for the image.\r\n *\r\n * @constructor\r\n * - Optionally accepts injected values for each input property.\r\n *\r\n * @methods\r\n * - `getMergedCardStyles()`: Returns merged styles for the card.\r\n * - `getMergedImageStyles()`: Returns merged styles for the image.\r\n * - `getInitialsStyle()`: Returns styles for the initials text.\r\n *\r\n * @example\r\n * ```html\r\n * <app-mini-card initials=\"AB\" fontSize=\"20\" [roundedImage]=\"true\" imageSource=\"/path/to/image.jpg\"></app-mini-card>\r\n * ```\r\n */\r\n\r\n@Component({\r\n    selector: 'app-mini-card',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div class=\"mini-card\" [ngStyle]=\"getMergedCardStyles()\">\r\n      <div *ngIf=\"imageSource; else noImage\" class=\"image-container\">\r\n        <img [src]=\"imageSource\" alt=\"Profile\" [ngStyle]=\"getMergedImageStyles()\" />\r\n      </div>\r\n      <ng-template #noImage>\r\n        <div class=\"initials\" [ngStyle]=\"getInitialsStyle()\">{{ initials }}</div>\r\n      </ng-template>\r\n    </div>\r\n  `,\r\n    styleUrls: ['./mini-card.component.css']\r\n})\r\nexport class MiniCard {\r\n  @Input() initials!: string;\r\n  @Input() fontSize = 14;\r\n  @Input() customStyle: Partial<CSSStyleDeclaration> = {};\r\n  @Input() imageSource!: string;\r\n  @Input() roundedImage = false;\r\n  @Input() imageStyle: Partial<CSSStyleDeclaration> = {};\r\n\r\n  constructor(\r\n    @Optional() @Inject('initials') injectedInitials: string,\r\n    @Optional() @Inject('fontSize') injectedFontSize: number,\r\n    @Optional() @Inject('customStyle') injectedCustomStyle: Partial<CSSStyleDeclaration>,\r\n    @Optional() @Inject('imageSource') injectedImageSource: string,\r\n    @Optional() @Inject('roundedImage') injectedRoundedImage: boolean,\r\n    @Optional() @Inject('imageStyle') injectedImageStyle: Partial<CSSStyleDeclaration>,\r\n  ) {\r\n    this.initials = injectedInitials || this.initials || '';\r\n    this.fontSize = injectedFontSize || this.fontSize || 14;\r\n    this.customStyle = injectedCustomStyle || this.customStyle || {};\r\n    this.imageSource = injectedImageSource || this.imageSource || '';\r\n    this.roundedImage = injectedRoundedImage || this.roundedImage || true;\r\n    this.imageStyle = injectedImageStyle || this.imageStyle || {};\r\n  }\r\n\r\n  getMergedCardStyles() {\r\n    return {\r\n      'font-size': this.fontSize + 'px',\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n      borderRadius: '0',\r\n      width: '100%',\r\n      height: '100%',\r\n      color: 'black',\r\n      fontFamily: \"'Nunito', sans-serif\",\r\n      overflow: 'hidden',\r\n      border: '2px solid black',\r\n      ...this.customStyle,\r\n    };\r\n  }\r\n\r\n  getMergedImageStyles() {\r\n    return {\r\n      width: '60%',\r\n      height: '60%',\r\n      objectFit: 'cover',\r\n      ...(this.roundedImage ? { borderRadius: '50%' } : {}),\r\n      ...this.imageStyle,\r\n    };\r\n  }\r\n\r\n  getInitialsStyle() {\r\n    return {\r\n      textAlign: 'center',\r\n      'font-size': this.fontSize + 'px',\r\n    };\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  Input,\r\n  OnInit,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  ViewChild,\r\n  ElementRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { EventType } from '../../../@types/types';\r\n\r\nexport interface CardVideoDisplayOptions {\r\n  remoteProducerId: string;\r\n  eventType: string;\r\n  forceFullDisplay: boolean;\r\n  videoStream: MediaStream | null;\r\n  backgroundColor: string;\r\n  doMirror?: boolean;\r\n}\r\n\r\nexport type CardVideoDisplayType = (options: CardVideoDisplayOptions) => HTMLElement;\r\n\r\n/**\r\n * CardVideoDisplay component displays a video stream with options for full display, mirroring, and background color customization.\r\n *\r\n * @selector app-card-video-display\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @inputs\r\n * - `remoteProducerId` (string): Identifier for the remote producer.\r\n * - `eventType` (EventType): Type of event, such as 'webinar'. Default is 'webinar'.\r\n * - `forceFullDisplay` (boolean): Forces full video display if true. Default is false.\r\n * - `videoStream` (MediaStream | null): The media stream to display in the video element.\r\n * - `backgroundColor` (string): Background color for the video container. Default is 'transparent'.\r\n * - `doMirror` (boolean): Mirrors the video if true. Default is false.\r\n *\r\n * @methods\r\n * - `ngOnInit()`: Initializes the video stream and sets the container style on component load.\r\n * - `ngOnChanges(changes: SimpleChanges)`: Updates the video stream or container style when inputs change.\r\n * - `updateVideoStream()`: Assigns the video stream to the video element if it differs from the current stream.\r\n * - `setVideoContainerStyle()`: Sets the style of the video container based on the provided background color.\r\n * - `getBaseVideoContainerStyle()`: Returns base styles for the video container.\r\n * - `getVideoStyle()`: Returns styles for the video element, including optional mirroring and sizing.\r\n *\r\n * @example\r\n * ```html\r\n * <app-card-video-display\r\n *  [remoteProducerId]=\"producerId\"\r\n * [eventType]=\"'conference'\"\r\n * [forceFullDisplay]=\"true\"\r\n * [videoStream]=\"stream\"\r\n * [backgroundColor]=\"'black'\"\r\n * [doMirror]=\"true\">\r\n * </app-card-video-display>\r\n * ```\r\n **/\r\n\r\n\r\n@Component({\r\n    selector: 'app-card-video-display',\r\n    imports: [CommonModule],\r\n    templateUrl: './card-video-display.component.html',\r\n    styleUrls: ['./card-video-display.component.css']\r\n})\r\nexport class CardVideoDisplay implements OnInit, OnChanges {\r\n  @Input() remoteProducerId = '';\r\n  @Input() eventType: EventType = 'webinar';\r\n  @Input() forceFullDisplay = false;\r\n  @Input() videoStream: MediaStream | null = null;\r\n  @Input() backgroundColor = 'transparent';\r\n  @Input() doMirror = false;\r\n\r\n  @ViewChild('videoElement', { static: true }) videoElement!: ElementRef<HTMLVideoElement>;\r\n\r\n  videoContainerStyle: any;\r\n\r\n  ngOnInit() {\r\n    this.updateVideoStream();\r\n    this.setVideoContainerStyle();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['videoStream'] && this.videoStream) {\r\n      const currentStream = changes['videoStream'].currentValue;\r\n      const previousStream = changes['videoStream'].previousValue;\r\n\r\n      if (\r\n        !previousStream ||\r\n        currentStream.id !== previousStream.id ||\r\n        currentStream.active !== previousStream.active\r\n      ) {\r\n        this.updateVideoStream();\r\n      }\r\n    }\r\n\r\n    if (\r\n      changes['backgroundColor'] &&\r\n      changes['backgroundColor'].currentValue !== changes['backgroundColor'].previousValue\r\n    ) {\r\n      this.setVideoContainerStyle();\r\n    }\r\n  }\r\n\r\n  updateVideoStream() {\r\n    if (this.videoElement && this.videoStream) {\r\n      const videoElement = this.videoElement.nativeElement;\r\n\r\n      // Update the video element's srcObject only if it has changed\r\n      if (videoElement.srcObject !== this.videoStream) {\r\n        videoElement.srcObject = this.videoStream;\r\n      }\r\n    }\r\n  }\r\n\r\n  setVideoContainerStyle() {\r\n    this.videoContainerStyle = {\r\n      ...this.getBaseVideoContainerStyle(),\r\n      backgroundColor: this.backgroundColor,\r\n    };\r\n  }\r\n\r\n  getBaseVideoContainerStyle() {\r\n    return {\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n      width: '100%',\r\n      height: '100%',\r\n      backgroundColor: 'black',\r\n    };\r\n  }\r\n\r\n  getVideoStyle() {\r\n    const baseStyles: any = {\r\n      width: this.forceFullDisplay ? '100%' : 'auto',\r\n      height: '100%',\r\n      maxWidth: '100%',\r\n      maxHeight: '100%',\r\n      objectFit: this.forceFullDisplay ? 'cover' : 'contain',\r\n      backgroundColor: this.backgroundColor,\r\n    };\r\n\r\n    if (this.doMirror) {\r\n      baseStyles.transform = 'rotateY(180deg)';\r\n    }\r\n\r\n    return baseStyles;\r\n  }\r\n}\r\n","<div [ngStyle]=\"videoContainerStyle\">\r\n  <video #videoElement autoplay muted playsinline [ngStyle]=\"getVideoStyle()\"></video>\r\n</div>\r\n","import { OverlayPositionStyle } from '../../@types/types';\r\n\r\nexport interface GetOverlayPositionOptions {\r\n  position: string;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type GetOverlayPositionType = (options: GetOverlayPositionOptions) => OverlayPositionStyle;\r\n\r\n/**\r\n * Gets the style for positioning an overlay based on the specified position.\r\n *\r\n * @param {GetOverlayPositionOptions} options - Contains the desired position for the overlay.\r\n * @param {string} options.position - The position for the overlay ('topLeft', 'topRight', 'bottomLeft', 'bottomRight').\r\n * @returns {OverlayPositionStyle} - Style object defining the overlay position.\r\n *\r\n * @example\r\n * ```typescript\r\n * const topLeftPosition = getOverlayPosition({ position: 'topLeft' });\r\n * // Output: { top: 0, left: 0 }\r\n *\r\n * const bottomRightPosition = getOverlayPosition({ position: 'bottomRight' });\r\n * // Output: { bottom: 0, right: 0 }\r\n * ```\r\n */\r\n\r\n\r\nexport function getOverlayPosition({ position }: GetOverlayPositionOptions): OverlayPositionStyle {\r\n  switch (position) {\r\n    case 'topLeft':\r\n      return { top: 0, left: 0 };\r\n    case 'topRight':\r\n      return { top: 0, right: 0 };\r\n    case 'bottomLeft':\r\n      return { bottom: 0, left: 0 };\r\n    case 'bottomRight':\r\n      return { bottom: 0, right: 0 };\r\n    default:\r\n      return {};\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { Socket } from 'socket.io-client';\r\nimport { CoHostResponsibility, Participant, ShowAlert } from '../@types/types';\r\n\r\nexport interface ControlMediaOptions {\r\n  participantId: string;\r\n  participantName: string;\r\n  type: 'audio' | 'video' | 'screenshare' | 'all';\r\n  socket: Socket;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  participants: Participant[];\r\n  member: string;\r\n  islevel: string;\r\n  showAlert?: ShowAlert;\r\n  coHost: string;\r\n  roomName: string;\r\n}\r\n// Export the type definition for the function\r\nexport type ControlMediaType = (options: ControlMediaOptions) => Promise<void>;\r\n\r\n  /**\r\n   * Controls the media of a participant in a media session if certain conditions are met.\r\n   *\r\n   * @param {ControlMediaOptions} options - The options for controlling media.\r\n   * @param {string} options.participantId - The ID of the participant to control.\r\n   * @param {string} options.participantName - The name of the participant to control.\r\n   * @param {'audio' | 'video' | 'screenshare' | 'all'} options.type - The type of media to control.\r\n   * @param {Socket} options.socket - The socket instance for communication.\r\n   * @param {CoHostResponsibility[]} options.coHostResponsibility - List of co-host responsibilities.\r\n   * @param {Participant[]} options.participants - List of participants in the session.\r\n   * @param {string} options.member - The current member attempting to control media.\r\n   * @param {string} options.islevel - The level of the current member.\r\n   * @param {Function} [options.showAlert] - Optional function to show alerts.\r\n   * @param {string} options.coHost - The co-host information.\r\n   * @param {string} options.roomName - The name of the room.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the media control operation is complete.\r\n   *\r\n   * @throws Will log an error message if the operation fails.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const options = {\r\n   *   participantId: '12345',\r\n   *   participantName: 'John Doe',\r\n   *   type: 'audio',\r\n   *   socket: socketInstance,\r\n   *   coHostResponsibility: [{ name: 'media', value: true }],\r\n   *   participants: participantList,\r\n   *   member: 'currentMember',\r\n   *   islevel: '2',\r\n   *   showAlert: showAlertFunction,\r\n   *   coHost: 'coHostName',\r\n   *   roomName: 'Room A',\r\n   * };\r\n   *\r\n   * controlMediaService.controlMedia(options)\r\n   *   .then(() => {\r\n   *     console.log('Media control action completed');\r\n   *   })\r\n   *   .catch((error) => {\r\n   *     console.error('Error controlling media:', error);\r\n   *   });\r\n   * ```\r\n   */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ControlMedia {\r\n  /**\r\n   * Controls the media of a participant in a media session if certain conditions are met.\r\n   *\r\n   * @param {Object} options - The options for controlling media.\r\n   * @param {string} options.participantId - The ID of the participant to control.\r\n   * @param {string} options.participantName - The name of the participant to control.\r\n   * @param {string} options.type - The type of media to control.\r\n   * @param {Socket} options.socket - The socket instance for communication.\r\n   * @param {Array} options.coHostResponsibility - List of co-host responsibilities.\r\n   * @param {Array} options.participants - List of participants in the session.\r\n   * @param {string} options.member - The current member attempting to control media.\r\n   * @param {string} options.islevel - The level of the current member.\r\n   * @param {Function} [options.showAlert] - Optional function to show alerts.\r\n   * @param {string} options.coHost - The co-host information.\r\n   * @param {string} options.roomName - The name of the room.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the media control operation is complete.\r\n   */\r\n\r\n  async controlMedia({\r\n    participantId,\r\n    participantName,\r\n    type,\r\n    socket,\r\n    coHostResponsibility,\r\n    participants,\r\n    member,\r\n    islevel,\r\n    showAlert,\r\n    coHost,\r\n    roomName,\r\n  }: ControlMediaOptions): Promise<void> {\r\n    try {\r\n      // Destructure parameters\r\n      let mediaValue = false;\r\n\r\n      try {\r\n        mediaValue =\r\n          coHostResponsibility.find((item: any) => item.name === 'media')?.value ?? false;\r\n      } catch {\r\n        /* handle error */\r\n      }\r\n\r\n      let participant = participants.find((obj: any) => obj.name === participantName);\r\n\r\n      if (islevel === '2' || (coHost === member && mediaValue === true)) {\r\n        // Check if the participant is not muted and is not a host\r\n        if (\r\n          participant &&\r\n          ((!participant.muted && participant.islevel !== '2' && type == 'audio') ||\r\n            (participant.islevel !== '2' && type == 'video' && participant['videoOn']))\r\n        ) {\r\n          // Emit controlMedia event to the server\r\n          socket.emit('controlMedia', { participantId, participantName, type, roomName });\r\n        }\r\n      } else {\r\n        // Display an alert if the participant is not allowed to mute other participants\r\n        if (showAlert) {\r\n          showAlert({\r\n            message: 'You are not allowed to control media for other participants.',\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.log('controlMedia error', error);\r\n      // throw error;\r\n    }\r\n  }\r\n}\r\n","import { Component, Input, OnInit, OnDestroy, Inject, Optional } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  faMicrophone,\r\n  faMicrophoneSlash,\r\n  faVideo,\r\n  faVideoSlash,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { CardVideoDisplay } from '../card-video-display/card-video-display.component';\r\nimport { getOverlayPosition } from '../../../methods/utils/get-overlay-position.util';\r\nimport { ControlMedia } from '../../../consumers/control-media.service';\r\nimport {\r\n  Participant,\r\n  AudioDecibels,\r\n  CoHostResponsibility,\r\n  ShowAlert,\r\n  EventType,\r\n  CustomComponent,\r\n} from '../../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface VideoCardParameters {\r\n  socket: Socket;\r\n  roomName: string;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  showAlert?: ShowAlert;\r\n  coHost: string;\r\n  participants: Participant[];\r\n  member: string;\r\n  islevel: string;\r\n  audioDecibels: AudioDecibels[];\r\n\r\n  // mediasfu functions\r\n  getUpdatedAllParams: () => VideoCardParameters;\r\n  // [key: string]: any;\r\n}\r\n\r\nexport interface VideoCardOptions {\r\n  customStyle?: Partial<CSSStyleDeclaration>;\r\n  name: string;\r\n  barColor?: string;\r\n  textColor?: string;\r\n  imageSource: string;\r\n  roundedImage?: boolean;\r\n  imageStyle?: Partial<CSSStyleDeclaration>;\r\n  remoteProducerId: string;\r\n  eventType: EventType;\r\n  forceFullDisplay?: boolean;\r\n  videoStream: MediaStream | null;\r\n  showControls?: boolean;\r\n  showInfo?: boolean;\r\n  videoInfoComponent?: HTMLElement | CustomComponent;\r\n  videoControlsComponent?: HTMLElement | CustomComponent;\r\n  controlsPosition?: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';\r\n  infoPosition?: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';\r\n  participant: Participant;\r\n  backgroundColor: string;\r\n  audioDecibels: AudioDecibels[];\r\n  doMirror?: boolean;\r\n  parameters: VideoCardParameters;\r\n}\r\n\r\nexport type VideoCardType = (options: VideoCardOptions) => HTMLElement;\r\n\r\n/**\r\n * VideoCard component represents a customizable video display card with participant controls for toggling audio and video.\r\n * It also animates an audio waveform if sound is detected in the participant's audio stream.\r\n *\r\n * @selector app-video-card\r\n * @standalone true\r\n * @imports [CommonModule, FontAwesomeModule, CardVideoDisplay]\r\n *\r\n * @example\r\n * ```html\r\n * <app-video-card\r\n *   [name]=\"participant.name\"\r\n *   [videoStream]=\"videoStream\"\r\n *   [audioDecibels]=\"audioDecibels\"\r\n *   [participant]=\"participant\"\r\n *   [parameters]=\"videoCardParameters\"\r\n * ></app-video-card>\r\n * ```\r\n *\r\n * @input {Partial<CSSStyleDeclaration>} customStyle - Styles for the card container.\r\n * @input {string} name - Name of the participant displayed on the card.\r\n * @input {string} barColor - Color of the waveform bars. Default is 'red'.\r\n * @input {string} textColor - Color of the name text. Default is 'white'.\r\n * @input {string} imageSource - Source URL of the participant's image.\r\n * @input {boolean} roundedImage - Whether the image should have rounded corners.\r\n * @input {Partial<CSSStyleDeclaration>} imageStyle - Additional styles for the image.\r\n * @input {string} remoteProducerId - ID of the remote media producer.\r\n * @input {EventType} eventType - Type of event (used for internal logic).\r\n * @input {boolean} forceFullDisplay - Forces full display if true.\r\n * @input {MediaStream | null} videoStream - Stream of the video to be displayed.\r\n * @input {boolean} showControls - Determines if the controls are displayed. Default is true.\r\n * @input {boolean} showInfo - Determines if info (e.g., participant name) is shown. Default is true.\r\n * @input {HTMLElement | CustomComponent} videoInfoComponent - Custom component for video info display.\r\n * @input {HTMLElement | CustomComponent} videoControlsComponent - Custom component for video controls.\r\n * @input {'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'} controlsPosition - Position of controls overlay.\r\n * @input {'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'} infoPosition - Position of info overlay.\r\n * @input {Participant} participant - Participant data object.\r\n * @input {string} backgroundColor - Background color of the video card.\r\n * @input {AudioDecibels[]} audioDecibels - Audio decibel data for animating waveform.\r\n * @input {boolean} doMirror - If true, mirrors the video display.\r\n * @input {VideoCardParameters} parameters - Additional parameters including socket and alert configuration.\r\n *\r\n * @property {number[]} waveformAnimations - Array representing animation states for waveform bars.\r\n * @property {boolean} showWaveform - Flag to toggle waveform animation. Default is true.\r\n * @property {any} interval - Interval reference for audio decibel checks.\r\n * @property {IconDefinition} faMicrophone - FontAwesome icon for microphone.\r\n * @property {IconDefinition} faMicrophoneSlash - FontAwesome icon for muted microphone.\r\n * @property {IconDefinition} faVideo - FontAwesome icon for video.\r\n * @property {IconDefinition} faVideoSlash - FontAwesome icon for video off.\r\n *\r\n * @method ngOnInit - Lifecycle hook to initialize audio decibel interval check.\r\n * @method ngOnDestroy - Lifecycle hook to clear intervals.\r\n * @method animateWaveform - Starts audio waveform animation.\r\n * @method resetWaveform - Resets waveform animations.\r\n * @method getAnimationDuration - Returns animation duration for given bar index.\r\n * @method toggleAudio - Toggles participant's audio status.\r\n * @method toggleVideo - Toggles participant's video status.\r\n * @method renderControls - Renders the control buttons (audio and video) based on participant status.\r\n * @method getOverlayPosition - Returns overlay position styles based on the input position string.\r\n * @method isCustomComponent - Checks if a component is a custom component.\r\n * @method isFunctionComponent - Checks if a component is a function component.\r\n */\r\n\r\n\r\n@Component({\r\n    selector: 'app-video-card',\r\n    imports: [CommonModule, FontAwesomeModule, CardVideoDisplay],\r\n    templateUrl: './video-card.component.html',\r\n    styleUrls: ['./video-card.component.css']\r\n})\r\nexport class VideoCard implements OnInit, OnDestroy {\r\n  @Input() customStyle: Partial<CSSStyleDeclaration> = {};\r\n  @Input() name!: string;\r\n  @Input() barColor = 'red';\r\n  @Input() textColor = 'white';\r\n  @Input() imageSource!: string;\r\n  @Input() roundedImage = false;\r\n  @Input() imageStyle: Partial<CSSStyleDeclaration> = {};\r\n  @Input() remoteProducerId!: string;\r\n  @Input() eventType!: EventType;\r\n  @Input() forceFullDisplay!: boolean;\r\n  @Input() videoStream: MediaStream | null = null;\r\n  @Input() showControls = true;\r\n  @Input() showInfo = true;\r\n  @Input() videoInfoComponent?: HTMLElement | CustomComponent;\r\n  @Input() videoControlsComponent?: HTMLElement | CustomComponent;\r\n  @Input() controlsPosition: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' = 'topLeft';\r\n  @Input() infoPosition: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' = 'topRight';\r\n  @Input() participant!: Participant;\r\n  @Input() backgroundColor!: string;\r\n  @Input() audioDecibels: AudioDecibels[] = [];\r\n  @Input() doMirror!: boolean;\r\n  @Input() parameters!: VideoCardParameters;\r\n\r\n  waveformAnimations: number[] = Array.from({ length: 9 }, () => 0);\r\n  showWaveform = true;\r\n  interval: any;\r\n\r\n  faMicrophone = faMicrophone;\r\n  faMicrophoneSlash = faMicrophoneSlash;\r\n  faVideo = faVideo;\r\n  faVideoSlash = faVideoSlash;\r\n\r\n  constructor(\r\n    private controlMediaService: ControlMedia,\r\n    @Optional() @Inject('customStyle') injectedCustomStyle: Partial<CSSStyleDeclaration>,\r\n    @Optional() @Inject('name') injectedName: string,\r\n    @Optional() @Inject('barColor') injectedBarColor: string,\r\n    @Optional() @Inject('textColor') injectedTextColor: string,\r\n    @Optional() @Inject('imageSource') injectedImageSource: string,\r\n    @Optional() @Inject('roundedImage') injectedRoundedImage: boolean,\r\n    @Optional() @Inject('imageStyle') injectedImageStyle: Partial<CSSStyleDeclaration>,\r\n    @Optional() @Inject('remoteProducerId') injectedRemoteProducerId: string,\r\n    @Optional() @Inject('eventType') injectedEventType: EventType,\r\n    @Optional() @Inject('forceFullDisplay') injectedForceFullDisplay: boolean,\r\n    @Optional() @Inject('videoStream') injectedVideoStream: MediaStream | null,\r\n    @Optional() @Inject('showControls') injectedShowControls: boolean,\r\n    @Optional() @Inject('showInfo') injectedShowInfo: boolean,\r\n    @Optional() @Inject('videoInfoComponent') injectedVideoInfoComponent: HTMLElement,\r\n    @Optional() @Inject('videoControlsComponent') injectedVideoControlsComponent: HTMLElement,\r\n    @Optional()\r\n    @Inject('controlsPosition')\r\n    injectedControlsPosition: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight',\r\n    @Optional()\r\n    @Inject('infoPosition')\r\n    injectedInfoPosition: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight',\r\n    @Optional() @Inject('participant') injectedParticipant: Participant,\r\n    @Optional() @Inject('backgroundColor') injectedBackgroundColor: string,\r\n    @Optional() @Inject('audioDecibels') injectedAudioDecibels: AudioDecibels[],\r\n    @Optional() @Inject('doMirror') injectedDoMirror: boolean,\r\n    @Optional() @Inject('parameters') injectedParameters: VideoCardParameters,\r\n  ) {\r\n    this.customStyle = injectedCustomStyle || this.customStyle;\r\n    this.name = injectedName || this.name;\r\n    this.barColor = injectedBarColor || this.barColor;\r\n    this.textColor = injectedTextColor || this.textColor;\r\n    this.imageSource = injectedImageSource || this.imageSource;\r\n    this.roundedImage = injectedRoundedImage || this.roundedImage;\r\n    this.imageStyle = injectedImageStyle || this.imageStyle;\r\n    this.remoteProducerId = injectedRemoteProducerId || this.remoteProducerId;\r\n    this.eventType = injectedEventType || this.eventType;\r\n    this.forceFullDisplay = injectedForceFullDisplay || this.forceFullDisplay;\r\n    this.videoStream = injectedVideoStream || this.videoStream;\r\n    this.showControls = injectedShowControls != null ? injectedShowControls : this.showControls;\r\n    this.showInfo = injectedShowInfo != null ? injectedShowInfo : this.showInfo;\r\n    this.videoInfoComponent = injectedVideoInfoComponent || this.videoInfoComponent;\r\n    this.videoControlsComponent = injectedVideoControlsComponent || this.videoControlsComponent;\r\n    this.controlsPosition = injectedControlsPosition || this.controlsPosition;\r\n    this.infoPosition = injectedInfoPosition || this.infoPosition;\r\n    this.participant = injectedParticipant || this.participant;\r\n    this.backgroundColor = injectedBackgroundColor || this.backgroundColor;\r\n    this.audioDecibels = injectedAudioDecibels || this.audioDecibels;\r\n    this.doMirror = injectedDoMirror || this.doMirror;\r\n    this.parameters = injectedParameters || this.parameters;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.interval = setInterval(() => {\r\n      const params = this.parameters.getUpdatedAllParams();\r\n      const { audioDecibels, participants } = params;\r\n      const existingEntry =\r\n        audioDecibels && audioDecibels.find((entry: AudioDecibels) => entry.name === this.name);\r\n      const participantEntry =\r\n        participants && participants.find((p: Participant) => p.name === this.name);\r\n      if (\r\n        existingEntry &&\r\n        existingEntry.averageLoudness > 127.5 &&\r\n        participantEntry &&\r\n        !participantEntry.muted\r\n      ) {\r\n        this.animateWaveform();\r\n      } else {\r\n        this.resetWaveform();\r\n      }\r\n    }, 1000);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    clearInterval(this.interval);\r\n  }\r\n\r\n  animateWaveform() {\r\n    this.waveformAnimations.forEach((_, index) => {\r\n      setInterval(() => this.animateBar(index), this.getAnimationDuration(index) * 2);\r\n    });\r\n  }\r\n\r\n  animateBar(index: number) {\r\n    this.waveformAnimations[index] = 1;\r\n    setTimeout(() => {\r\n      this.waveformAnimations[index] = 0;\r\n    }, this.getAnimationDuration(index));\r\n  }\r\n\r\n  resetWaveform() {\r\n    this.waveformAnimations.fill(0);\r\n  }\r\n\r\n  getAnimationDuration(index: number): number {\r\n    const durations = [474, 433, 407, 458, 400, 427, 441, 419, 487];\r\n    return durations[index] || 0;\r\n  }\r\n\r\n  async toggleAudio() {\r\n    if (this.participant && !this.participant.muted) {\r\n      const params = this.parameters;\r\n      await this.controlMediaService.controlMedia({\r\n        participantId: this.participant.id || '',\r\n        participantName: this.participant.name,\r\n        type: 'audio',\r\n        socket: params.socket,\r\n        roomName: params.roomName,\r\n        coHostResponsibility: params.coHostResponsibility,\r\n        showAlert: params.showAlert,\r\n        coHost: params.coHost,\r\n        participants: params.participants,\r\n        member: params.member,\r\n        islevel: params.islevel,\r\n      });\r\n    }\r\n  }\r\n\r\n  async toggleVideo() {\r\n    if (this.participant) {\r\n      const params = this.parameters.getUpdatedAllParams();\r\n      await this.controlMediaService.controlMedia({\r\n        participantId: this.participant.id || '',\r\n        participantName: this.participant.name,\r\n        type: 'video',\r\n        socket: params.socket,\r\n        roomName: params.roomName,\r\n        coHostResponsibility: params.coHostResponsibility,\r\n        showAlert: params.showAlert,\r\n        coHost: params.coHost,\r\n        participants: params.participants,\r\n        member: params.member,\r\n        islevel: params.islevel,\r\n      });\r\n    }\r\n  }\r\n\r\n  renderControls() {\r\n    if (!this.showControls) {\r\n      return null;\r\n    }\r\n\r\n    if (this.videoControlsComponent) {\r\n      return this.videoControlsComponent;\r\n    }\r\n\r\n    return `\r\n      <div class=\"overlayControls\">\r\n        <button class=\"controlButton\" (click)=\"toggleAudio()\">\r\n          <fa-icon [icon]=\"participant?.muted ? faMicrophoneSlash : faMicrophone\" [style.color]=\"participant?.muted ? 'red' : 'green'\"></fa-icon>\r\n        </button>\r\n        <button class=\"controlButton\" (click)=\"toggleVideo()\">\r\n          <fa-icon [icon]=\"participant?.videoOn ? faVideo : faVideoSlash\" [style.color]=\"participant?.videoOn ? 'green' : 'red'\"></fa-icon>\r\n        </button>\r\n      </div>\r\n    `;\r\n  }\r\n\r\n  getOverlayPosition(position: string) {\r\n    return getOverlayPosition({ position });\r\n  }\r\n\r\n  isCustomComponent(\r\n    comp: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent),\r\n  ): comp is CustomComponent {\r\n    return (\r\n      typeof (comp as CustomComponent).component !== 'function' &&\r\n      (comp as CustomComponent).component !== undefined\r\n    );\r\n  }\r\n\r\n  isFunctionComponent(\r\n    comp: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent),\r\n  ): comp is () => HTMLElement | CustomComponent {\r\n    return typeof comp === 'function';\r\n  }\r\n}\r\n","<div\r\n  [ngStyle]=\"customStyle\"\r\n  [style.backgroundColor]=\"backgroundColor\"\r\n  class=\"video-card\"\r\n>\r\n  <app-card-video-display\r\n    [remoteProducerId]=\"remoteProducerId\"\r\n    [eventType]=\"eventType\"\r\n    [forceFullDisplay]=\"forceFullDisplay\"\r\n    [videoStream]=\"videoStream\"\r\n    [backgroundColor]=\"backgroundColor\"\r\n    [doMirror]=\"doMirror\"\r\n  ></app-card-video-display>\r\n\r\n  <div\r\n    *ngIf=\"showInfo\"\r\n    [ngClass]=\"showControls ? 'overlayWeb' : 'overlayWebAlt'\"\r\n    [ngStyle]=\"getOverlayPosition(infoPosition)\"\r\n  >\r\n    <div class=\"nameColumn\">\r\n      <span class=\"nameText\" [style.color]=\"textColor\">{{\r\n        participant.name\r\n      }}</span>\r\n    </div>\r\n    <div *ngIf=\"showWaveform\" class=\"waveformWeb\">\r\n      <div\r\n        *ngFor=\"let animation of waveformAnimations; let i = index\"\r\n        class=\"bar\"\r\n        [ngStyle]=\"{\r\n          height: animation === 0 ? '1px' : '16px',\r\n          backgroundColor: barColor\r\n        }\"\r\n      ></div>\r\n    </div>\r\n  </div>\r\n\r\n  <div\r\n    *ngIf=\"showControls\"\r\n    class=\"overlayControls\"\r\n    [ngStyle]=\"getOverlayPosition(controlsPosition)\"\r\n  >\r\n    <ng-container *ngIf=\"!videoControlsComponent\">\r\n      <div class=\"overlayControls\">\r\n        <button class=\"controlButton\" (click)=\"toggleAudio()\">\r\n          <fa-icon\r\n            [icon]=\"participant.muted ? faMicrophoneSlash : faMicrophone\"\r\n            [style.color]=\"participant.muted ? 'red' : 'green'\"\r\n          ></fa-icon>\r\n        </button>\r\n        <button class=\"controlButton\" (click)=\"toggleVideo()\">\r\n          <fa-icon\r\n            [icon]=\"participant['videoOn'] ? faVideo : faVideoSlash\"\r\n            [style.color]=\"participant['videoOn'] ? 'green' : 'red'\"\r\n          ></fa-icon>\r\n        </button>\r\n      </div>\r\n    </ng-container>\r\n    <ng-container *ngIf=\"videoControlsComponent\">\r\n      <ng-container *ngIf=\"isCustomComponent(videoControlsComponent)\">\r\n        <ng-container\r\n          *ngComponentOutlet=\"\r\n            videoControlsComponent.component;\r\n            injector: videoControlsComponent.injector\r\n          \"\r\n        ></ng-container>\r\n      </ng-container>\r\n      <ng-container *ngIf=\"!isCustomComponent(videoControlsComponent)\">\r\n        <div [innerHTML]=\"videoControlsComponent.outerHTML\"></div>\r\n      </ng-container>\r\n    </ng-container>\r\n  </div>\r\n</div>\r\n","import { Component, Input, OnInit, OnDestroy, NgZone, Inject, Optional } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  faVideo,\r\n  faVideoSlash,\r\n  faMicrophone,\r\n  faMicrophoneSlash,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { getOverlayPosition } from '../../../methods/utils/get-overlay-position.util';\r\nimport { ControlMedia } from '../../../consumers/control-media.service';\r\nimport { MiniCard } from '../mini-card/mini-card.component';\r\nimport {\r\n  Participant,\r\n  ControlsPosition,\r\n  InfoPosition,\r\n  AudioDecibels,\r\n  ControlMediaOptions,\r\n  ShowAlert,\r\n  CoHostResponsibility,\r\n  CustomComponent,\r\n} from '../../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface AudioCardParameters {\r\n  audioDecibels: AudioDecibels[];\r\n  participants: Participant[];\r\n  socket: Socket;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  roomName: string;\r\n  showAlert?: ShowAlert;\r\n  coHost: string;\r\n  islevel: string;\r\n  member: string;\r\n  eventType: string;\r\n\r\n  // mediasfu functions\r\n  getUpdatedAllParams(): AudioCardParameters;\r\n}\r\n\r\nexport interface AudioCardOptions {\r\n  controlUserMedia?: (options: ControlMediaOptions) => Promise<void>;\r\n  customStyle?: Partial<CSSStyleDeclaration>; // Use Partial to allow specific CSS properties\r\n  name: string; // Required field for name\r\n  barColor?: string; // Optional color for audio bar\r\n  textColor?: string; // Optional color for text\r\n  imageSource?: string; // Optional URL for image source\r\n  roundedImage?: boolean; // Optional flag for rounded image\r\n  imageStyle?: Partial<CSSStyleDeclaration>; // Use Partial for CSS style type safety\r\n  showControls?: boolean; // Toggle to show/hide controls\r\n  showInfo?: boolean; // Toggle to show/hide info section\r\n  videoInfoComponent?: HTMLElement | CustomComponent; // Custom component for participant information\r\n  videoControlsComponent?: HTMLElement | CustomComponent; // Custom component for video controls\r\n  controlsPosition?: ControlsPosition; // Custom control positioning\r\n  infoPosition?: InfoPosition; // Custom info positioning\r\n  participant: Participant; // Required participant object reference\r\n  backgroundColor?: string; // Optional background color\r\n  audioDecibels?: AudioDecibels; // Optional audio decibels info\r\n  parameters: AudioCardParameters; // Required parameters object for configurations\r\n}\r\n\r\nexport type AudioCardType = (options: AudioCardOptions) => HTMLElement;\r\n\r\n/**\r\n * AudioCard component renders an audio card for participants with customizable options and media controls.\r\n * It shows audio waveform animations, video/audio toggle buttons, and additional info based on injected or passed properties.\r\n *\r\n * @selector app-audio-card\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule, MiniCard\r\n *\r\n * @inputs\r\n * - `controlUserMedia` (function): Optional function to control media actions for a participant.\r\n * - `customStyle` (Partial<CSSStyleDeclaration>): Custom CSS styles for the audio card.\r\n * - `name` (string): Name of the participant.\r\n * - `barColor` (string): Color for the audio bar. Default is 'red'.\r\n * - `textColor` (string): Text color. Default is 'white'.\r\n * - `imageSource` (string): Image source URL for participant.\r\n * - `roundedImage` (boolean): Toggle for rounded image style.\r\n * - `imageStyle` (Partial<CSSStyleDeclaration>): Custom styles for the image.\r\n * - `showControls` (boolean): Toggle for displaying media controls. Default is true.\r\n * - `showInfo` (boolean): Toggle for displaying info section. Default is true.\r\n * - `videoInfoComponent` (HTMLElement | CustomComponent): Custom component for participant info.\r\n * - `videoControlsComponent` (HTMLElement | CustomComponent): Custom component for video controls.\r\n * - `controlsPosition` (ControlsPosition): Position for controls on the card. Default is 'topLeft'.\r\n * - `infoPosition` (InfoPosition): Position for the info section. Default is 'topRight'.\r\n * - `participant` (Participant | null): Participant object reference.\r\n * - `backgroundColor` (string): Background color for the card.\r\n * - `audioDecibels` (AudioDecibels): Optional audio decibel levels for the participant.\r\n * - `parameters` (AudioCardParameters): Required object with configuration parameters.\r\n *\r\n * @methods\r\n * - `ngOnInit()`: Initializes the component, sets default media control behavior, and activates audio waveform animations.\r\n * - `ngOnDestroy()`: Clears the animation interval.\r\n * - `animateBar(index: number)`: Animates the audio bar at a specified index.\r\n * - `animateWaveform()`: Triggers animations across the waveform bars.\r\n * - `resetWaveform()`: Resets waveform animations to default.\r\n * - `getAnimationDuration(index: number)`: Retrieves the animation duration for a bar by index.\r\n * - `toggleAudio()`: Toggles audio for the participant if media control function is defined.\r\n * - `toggleVideo()`: Toggles video for the participant if media control function is defined.\r\n * - `renderControls()`: Returns `showControls` to render or hide media controls.\r\n * - `combineStyles(baseStyle: any, additionalStyles: any)`: Combines base and additional styles for inline styling.\r\n * - `getOverlayPosition(position: string)`: Retrieves calculated overlay position for elements.\r\n * - `isCustomComponent(comp: HTMLElement | CustomComponent)`: Type guard for identifying custom components.\r\n * - `isFunctionComponent(comp: HTMLElement | CustomComponent)`: Type guard for identifying function components.\r\n *\r\n * @example\r\n * ```html\r\n * <app-audio-card\r\n *  [controlUserMedia]=\"controlMediaFunction\"\r\n * [name]=\"participantName\"\r\n * [barColor]=\"'blue'\"\r\n * [textColor]=\"'black'\"\r\n * [imageSource]=\"participantImageURL\"\r\n * [roundedImage]=\"true\"\r\n * [showControls]=\"true\"\r\n * [participant]=\"participant\"\r\n * [parameters]=\"audioCardParameters\">\r\n * </app-audio-card>\r\n * ```\r\n *\r\n **/\r\n@Component({\r\n    selector: 'app-audio-card',\r\n    imports: [CommonModule, FontAwesomeModule, MiniCard],\r\n    templateUrl: './audio-card.component.html',\r\n    styleUrls: ['./audio-card.component.css']\r\n})\r\n\r\nexport class AudioCard implements OnInit, OnDestroy {\r\n  @Input() controlUserMedia?: (options: ControlMediaOptions) => Promise<void>;\r\n  @Input() customStyle: Partial<CSSStyleDeclaration> = {};\r\n  @Input() name = '';\r\n  @Input() barColor = 'red';\r\n  @Input() textColor = 'white';\r\n  @Input() imageSource = '';\r\n  @Input() roundedImage = false;\r\n  @Input() imageStyle: Partial<CSSStyleDeclaration> = {};\r\n  @Input() showControls = true;\r\n  @Input() showInfo = true;\r\n  @Input() videoInfoComponent?: HTMLElement | CustomComponent; // Custom component for participant information\r\n  @Input() videoControlsComponent?: HTMLElement | CustomComponent; // Custom component for video controls\r\n  @Input() controlsPosition = 'topLeft';\r\n  @Input() infoPosition = 'topRight';\r\n  @Input() participant: Participant | null = null;\r\n  @Input() backgroundColor = '';\r\n  @Input() audioDecibels: any;\r\n  @Input() parameters!: AudioCardParameters;\r\n\r\n  faVideo = faVideo;\r\n  faVideoSlash = faVideoSlash;\r\n  faMicrophone = faMicrophone;\r\n  faMicrophoneSlash = faMicrophoneSlash;\r\n\r\n  waveformAnimations: number[] = Array.from({ length: 9 }, () => 0);\r\n  showWaveform = true;\r\n  interval: any;\r\n\r\n  constructor(\r\n    private ngZone: NgZone,\r\n    private controlMediaService: ControlMedia,\r\n    @Optional()\r\n    @Inject('controlUserMedia')\r\n    injectedControlUserMedia: (options: ControlMediaOptions) => Promise<void>,\r\n    @Optional() @Inject('customStyle') injectedCustomStyle: Partial<CSSStyleDeclaration>,\r\n    @Optional() @Inject('name') injectedName: string,\r\n    @Optional() @Inject('barColor') injectedBarColor: string,\r\n    @Optional() @Inject('textColor') injectedTextColor: string,\r\n    @Optional() @Inject('imageSource') injectedImageSource: string,\r\n    @Optional() @Inject('roundedImage') injectedRoundedImage: boolean,\r\n    @Optional() @Inject('imageStyle') injectedImageStyle: Partial<CSSStyleDeclaration>,\r\n    @Optional() @Inject('showControls') injectedShowControls: boolean,\r\n    @Optional() @Inject('showInfo') injectedShowInfo: boolean,\r\n    @Optional()\r\n    @Inject('videoInfoComponent')\r\n    injectedVideoInfoComponent: HTMLElement | CustomComponent,\r\n    @Optional()\r\n    @Inject('videoControlsComponent')\r\n    injectedVideoControlsComponent: HTMLElement | CustomComponent,\r\n    @Optional() @Inject('controlsPosition') injectedControlsPosition: ControlsPosition,\r\n    @Optional() @Inject('infoPosition') injectedInfoPosition: InfoPosition,\r\n    @Optional() @Inject('participant') injectedParticipant: Participant | null,\r\n    @Optional() @Inject('backgroundColor') injectedBackgroundColor: string,\r\n    @Optional() @Inject('audioDecibels') injectedAudioDecibels: AudioDecibels,\r\n    @Optional() @Inject('parameters') injectedParameters: AudioCardParameters,\r\n  ) {\r\n    this.controlUserMedia = injectedControlUserMedia || this.controlUserMedia;\r\n    this.customStyle = injectedCustomStyle || this.customStyle;\r\n    this.name = injectedName || this.name;\r\n    this.barColor = injectedBarColor || this.barColor;\r\n    this.textColor = injectedTextColor || this.textColor;\r\n    this.imageSource = injectedImageSource || this.imageSource;\r\n    this.roundedImage = injectedRoundedImage || this.roundedImage;\r\n    this.imageStyle = injectedImageStyle || this.imageStyle;\r\n    this.showControls = injectedShowControls != null ? injectedShowControls : this.showControls;\r\n    this.showInfo = injectedShowInfo != null ? injectedShowInfo : this.showInfo;\r\n    this.videoInfoComponent = injectedVideoInfoComponent || this.videoInfoComponent;\r\n    this.videoControlsComponent = injectedVideoControlsComponent || this.videoControlsComponent;\r\n    this.controlsPosition = injectedControlsPosition || this.controlsPosition;\r\n    this.infoPosition = injectedInfoPosition || this.infoPosition;\r\n    this.participant = injectedParticipant || this.participant;\r\n    this.backgroundColor = injectedBackgroundColor || this.backgroundColor;\r\n    this.audioDecibels = injectedAudioDecibels || this.audioDecibels;\r\n    this.parameters = injectedParameters || this.parameters;\r\n  }\r\n\r\n  ngOnInit() {\r\n    if (!this.controlUserMedia) {\r\n      this.controlUserMedia = async (options: ControlMediaOptions) => {\r\n        await this.controlMediaService.controlMedia(options);\r\n      };\r\n    }\r\n\r\n    if (this.parameters) {\r\n      this.ngZone.runOutsideAngular(() => {\r\n        this.interval = setInterval(() => {\r\n          const { audioDecibels, participants } = this.parameters.getUpdatedAllParams();\r\n          const existingEntry = audioDecibels.find((entry: any) => entry.name == this.name);\r\n          this.participant = participants.find((p: Participant) => p.name == this.name) || null;\r\n\r\n          if (\r\n            existingEntry &&\r\n            existingEntry.averageLoudness > 127.5 &&\r\n            this.participant &&\r\n            !this.participant.muted\r\n          ) {\r\n            this.animateWaveform();\r\n          } else {\r\n            this.resetWaveform();\r\n          }\r\n        }, 1000);\r\n      });\r\n    }\r\n\r\n    if (this.participant?.muted) {\r\n      this.showWaveform = false;\r\n    } else {\r\n      this.showWaveform = true;\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    clearInterval(this.interval);\r\n  }\r\n\r\n  animateBar(index: number) {\r\n    this.waveformAnimations[index] = 1;\r\n    setTimeout(() => {\r\n      this.waveformAnimations[index] = 0;\r\n    }, this.getAnimationDuration(index));\r\n  }\r\n\r\n  animateWaveform() {\r\n    this.waveformAnimations.forEach((_, index) => {\r\n      setInterval(() => this.animateBar(index), this.getAnimationDuration(index) * 2);\r\n    });\r\n  }\r\n\r\n  resetWaveform() {\r\n    this.waveformAnimations.fill(0);\r\n  }\r\n\r\n  getAnimationDuration(index: number): number {\r\n    const durations = [474, 433, 407, 458, 400, 427, 441, 419, 487];\r\n    return durations[index] || 0;\r\n  }\r\n\r\n  async toggleAudio() {\r\n    if (this.participant && !this.participant.muted) {\r\n      await this.controlUserMedia?.({\r\n        participantId: this.participant.id || '',\r\n        participantName: this.participant.name,\r\n        type: 'audio',\r\n        socket: this.parameters.socket,\r\n        coHostResponsibility: this.parameters.coHostResponsibility,\r\n        roomName: this.parameters.roomName,\r\n        showAlert: this.parameters.showAlert,\r\n        coHost: this.parameters.coHost,\r\n        islevel: this.parameters.islevel,\r\n        member: this.parameters.member,\r\n        participants: this.parameters.participants,\r\n      });\r\n    }\r\n  }\r\n\r\n  async toggleVideo() {\r\n    if (this.participant) {\r\n      await this.controlUserMedia?.({\r\n        participantId: this.participant.id || '',\r\n        participantName: this.participant.name,\r\n        type: 'video',\r\n        socket: this.parameters.socket,\r\n        coHostResponsibility: this.parameters.coHostResponsibility,\r\n        roomName: this.parameters.roomName,\r\n        showAlert: this.parameters.showAlert,\r\n        coHost: this.parameters.coHost,\r\n        islevel: this.parameters.islevel,\r\n        member: this.parameters.member,\r\n        participants: this.parameters.participants,\r\n      });\r\n    }\r\n  }\r\n\r\n  renderControls() {\r\n    return this.showControls;\r\n  }\r\n\r\n  // Helper method to combine styles\r\n  combineStyles(baseStyle: any, additionalStyles: any) {\r\n    return { ...baseStyle, ...additionalStyles };\r\n  }\r\n\r\n  getOverlayPosition(position: string) {\r\n    return getOverlayPosition({ position });\r\n  }\r\n\r\n  isCustomComponent(\r\n    comp: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent),\r\n  ): comp is CustomComponent {\r\n    return (\r\n      typeof (comp as CustomComponent).component !== 'function' &&\r\n      (comp as CustomComponent).component !== undefined\r\n    );\r\n  }\r\n\r\n  isFunctionComponent(\r\n    comp: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent),\r\n  ): comp is () => HTMLElement | CustomComponent {\r\n    return typeof comp === 'function';\r\n  }\r\n}\r\n","<div\r\n  class=\"card\"\r\n  [ngStyle]=\"customStyle\"\r\n  [style.backgroundColor]=\"backgroundColor\"\r\n>\r\n  <ng-container *ngIf=\"imageSource; else noImage\">\r\n    <div class=\"imageContainer\">\r\n      <img\r\n        [src]=\"imageSource\"\r\n        [ngStyle]=\"\r\n          combineStyles(imageStyle, {\r\n            'border-radius': roundedImage ? '20%' : '0'\r\n          })\r\n        \"\r\n        class=\"backgroundImage\"\r\n      />\r\n    </div>\r\n  </ng-container>\r\n  <ng-template #noImage>\r\n    <div style=\"width: 100%; height: 100%\">\r\n      <app-mini-card [initials]=\"name\" [fontSize]=\"20\" [ngStyle]=\"{ 'border': parameters.eventType === 'broadcast' ? '2px solid black' : '0px solid black' }\"></app-mini-card>\r\n    </div>\r\n  </ng-template>\r\n\r\n  <ng-container *ngIf=\"showInfo\">\r\n    <div\r\n      class=\"overlay\"\r\n      [ngStyle]=\"getOverlayPosition(infoPosition)\"\r\n      [ngClass]=\"showControls ? 'overlayWeb' : 'overlayWebAlt'\"\r\n    >\r\n      <div class=\"nameColumn\">\r\n        <p [ngStyle]=\"{ color: textColor }\" class=\"nameText\">{{ name }}</p>\r\n      </div>\r\n      <div *ngIf=\"showWaveform\" class=\"waveformWeb\">\r\n        <div\r\n          *ngFor=\"let animation of waveformAnimations\"\r\n          [ngStyle]=\"{\r\n            height: animation === 0 ? '1px' : '12px',\r\n            backgroundColor: barColor\r\n          }\"\r\n          class=\"bar\"\r\n        ></div>\r\n      </div>\r\n    </div>\r\n  </ng-container>\r\n\r\n  <ng-container *ngIf=\"renderControls()\">\r\n    <div\r\n      class=\"overlayControls\"\r\n      [ngStyle]=\"getOverlayPosition(controlsPosition)\"\r\n    >\r\n      <ng-container *ngIf=\"!videoControlsComponent\">\r\n        <button class=\"controlButton\" (click)=\"toggleAudio()\">\r\n          <fa-icon\r\n            [icon]=\"participant?.muted ? faMicrophoneSlash : faMicrophone\"\r\n            [style.color]=\"participant?.muted ? 'red' : 'green'\"\r\n          ></fa-icon>\r\n        </button>\r\n        <button class=\"controlButton\" (click)=\"toggleVideo()\">\r\n          <fa-icon\r\n            [icon]=\"participant?.['videoOn'] ? faVideo : faVideoSlash\"\r\n            [style.color]=\"participant?.['videoOn'] ? 'green' : 'red'\"\r\n          ></fa-icon>\r\n        </button>\r\n      </ng-container>\r\n      <ng-container *ngIf=\"videoControlsComponent\">\r\n        <ng-container *ngIf=\"isCustomComponent(videoControlsComponent)\">\r\n          <ng-container\r\n            *ngComponentOutlet=\"\r\n              videoControlsComponent.component;\r\n              injector: videoControlsComponent.injector\r\n            \"\r\n          ></ng-container>\r\n        </ng-container>\r\n        <ng-container *ngIf=\"!isCustomComponent(videoControlsComponent)\">\r\n          <div [innerHTML]=\"videoControlsComponent.outerHTML\"></div>\r\n        </ng-container>\r\n      </ng-container>\r\n    </div>\r\n  </ng-container>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { MiniCard } from '../components/display-components/mini-card/mini-card.component';\r\nimport { VideoCard } from '../components/display-components/video-card/video-card.component';\r\nimport { AudioCard } from '../components/display-components/audio-card/audio-card.component';\r\nimport {\r\n  Participant,\r\n  Stream,\r\n  UpdateMiniCardsGridType,\r\n  UpdateMiniCardsGridParameters,\r\n  AudioCardParameters,\r\n  EventType,\r\n  CustomMediaComponent,\r\n} from '../@types/types';\r\n\r\nexport interface AddVideosGridParameters\r\n  extends UpdateMiniCardsGridParameters,\r\n    AudioCardParameters {\r\n  eventType: EventType;\r\n  updateAddAltGrid: (addAltGrid: boolean) => void;\r\n  ref_participants: Participant[];\r\n  islevel: string;\r\n  videoAlreadyOn: boolean;\r\n  localStreamVideo: MediaStream | null;\r\n  keepBackground: boolean;\r\n  virtualStream: MediaStream | null;\r\n  forceFullDisplay: boolean;\r\n  otherGridStreams: CustomMediaComponent[][];\r\n  updateOtherGridStreams: (otherGridStreams: CustomMediaComponent[][]) => void;\r\n\r\n  // mediasfu functions\r\n  updateMiniCardsGrid: UpdateMiniCardsGridType;\r\n  getUpdatedAllParams: () => AddVideosGridParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface AddVideosGridOptions {\r\n  mainGridStreams: (Stream | Participant)[];\r\n  altGridStreams: (Stream | Participant)[];\r\n  numtoadd: number;\r\n  numRows: number;\r\n  numCols: number;\r\n  actualRows: number;\r\n  lastrowcols: number;\r\n  removeAltGrid: boolean;\r\n  parameters: AddVideosGridParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type AddVideosGridType = (options: AddVideosGridOptions) => Promise<void>;\r\n\r\n/**\r\n * @service AddVideosGrid\r\n * @description Service to manage and update video and audio components on a grid in the user interface. This service helps organize and configure participants and streams into different grid layouts.\r\n *\r\n * @method addVideosGrid\r\n * Adds video and audio cards to the main and alternate grids based on the parameters and configuration options provided.\r\n *\r\n * @param {AddVideosGridOptions} options - Configuration options for setting up the grid.\r\n * @param {(Stream | Participant)[]} options.mainGridStreams - Streams or participants to display on the main grid.\r\n * @param {(Stream | Participant)[]} options.altGridStreams - Streams or participants to display on the alternate grid.\r\n * @param {number} options.numtoadd - The number of items to add to the grid.\r\n * @param {number} options.numRows - The number of rows for the main grid.\r\n * @param {number} options.numCols - The number of columns for the main grid.\r\n * @param {number} options.actualRows - The actual rows currently displayed.\r\n * @param {number} options.lastrowcols - The number of columns in the last row of the grid.\r\n * @param {boolean} options.removeAltGrid - Whether to remove the alternate grid layout.\r\n * @param {AddVideosGridParameters} options.parameters - Additional parameters for updating the grid, controlling appearance, and handling events.\r\n *\r\n * @returns {Promise<void>} A promise that resolves once the grid layout is updated.\r\n *\r\n * @example\r\n * ```typescript\r\n * await addVideosGridService.addVideosGrid({\r\n *   mainGridStreams: [...],\r\n *   altGridStreams: [...],\r\n *   numtoadd: 4,\r\n *   numRows: 2,\r\n *   numCols: 2,\r\n *   actualRows: 2,\r\n *   lastrowcols: 2,\r\n *   removeAltGrid: false,\r\n *   parameters: {\r\n *     eventType: 'webinar',\r\n *     updateAddAltGrid: (value) => {},\r\n *     ref_participants: participantsList,\r\n *     islevel: '1',\r\n *     videoAlreadyOn: true,\r\n *     localStreamVideo: localStream,\r\n *     keepBackground: true,\r\n *     virtualStream: virtualStream,\r\n *     forceFullDisplay: false,\r\n *     otherGridStreams: otherStreamsArray,\r\n *     updateOtherGridStreams: (newStreams) => {},\r\n *     updateMiniCardsGrid: (params) => {},\r\n *     getUpdatedAllParams: () => ({ /* updated parameters * / }),\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AddVideosGrid {\r\n  addVideosGrid = async ({\r\n    mainGridStreams,\r\n    altGridStreams,\r\n    numtoadd,\r\n    numRows,\r\n    numCols,\r\n    actualRows,\r\n    lastrowcols,\r\n    removeAltGrid,\r\n    parameters,\r\n  }: AddVideosGridOptions): Promise<void> => {\r\n    let { getUpdatedAllParams } = parameters;\r\n    parameters = { ...parameters, ...getUpdatedAllParams() };\r\n\r\n    let {\r\n      eventType,\r\n      updateAddAltGrid,\r\n      ref_participants,\r\n      islevel,\r\n      videoAlreadyOn,\r\n      localStreamVideo,\r\n      keepBackground,\r\n      virtualStream,\r\n      forceFullDisplay,\r\n      otherGridStreams,\r\n      updateOtherGridStreams,\r\n      updateMiniCardsGrid,\r\n    } = parameters;\r\n\r\n    let newComponents: { component: any; inputs: any }[][] = [[], []];\r\n    let participant: any;\r\n    let remoteProducerId = '';\r\n    let participant_ = null;\r\n\r\n    numtoadd = mainGridStreams.length;\r\n\r\n    if (removeAltGrid) {\r\n      updateAddAltGrid(false);\r\n    }\r\n\r\n    // Add participants to the main grid\r\n    for (let i = 0; i < numtoadd; i++) {\r\n      participant = mainGridStreams[i];\r\n      remoteProducerId = participant.producerId;\r\n\r\n      let pseudoName = !remoteProducerId || remoteProducerId === '';\r\n\r\n      if (pseudoName) {\r\n        participant_ = participant;\r\n        remoteProducerId = await participant.name;\r\n\r\n        if (\r\n          Object.prototype.hasOwnProperty.call(participant, 'audioID') &&\r\n          participant.audioID != null &&\r\n          participant.audioID !== ''\r\n        ) {\r\n          newComponents[0].push({\r\n            component: AudioCard,\r\n            inputs: {\r\n              name: participant.name,\r\n              barColor: 'red',\r\n              textColor: 'white',\r\n              customStyle: {\r\n                backgroundColor: 'transparent',\r\n                border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n              },\r\n              controlsPosition: 'topLeft',\r\n              infoPosition: 'topRight',\r\n              showWaveform: true,\r\n              roundedImage: true,\r\n              parameters,\r\n              backgroundColor: 'transparent',\r\n              showControls: eventType !== 'chat',\r\n              participant,\r\n            },\r\n          });\r\n        } else {\r\n          newComponents[0].push({\r\n            component: MiniCard,\r\n            inputs: {\r\n              initials: participant.name,\r\n              fontSize: 20,\r\n              customStyle: {\r\n                backgroundColor: 'transparent',\r\n                border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n              },\r\n            },\r\n          });\r\n        }\r\n      } else {\r\n        if (remoteProducerId === 'youyou' || remoteProducerId === 'youyouyou') {\r\n          let name = 'You';\r\n          if (islevel === '2' && eventType !== 'chat') {\r\n            name = 'You (Host)';\r\n          }\r\n\r\n          if (!videoAlreadyOn) {\r\n            name = 'You';\r\n            if (islevel == '2' && eventType != 'chat') {\r\n              name = 'You (Host)';\r\n            }\r\n\r\n            newComponents[0].push({\r\n              component: MiniCard,\r\n              inputs: {\r\n                initials: name,\r\n                fontSize: 20,\r\n                customStyle: {\r\n                  backgroundColor: 'transparent',\r\n                  border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n                },\r\n              },\r\n            });\r\n          } else {\r\n            participant = {\r\n              id: 'youyouyou',\r\n              stream: keepBackground && virtualStream ? virtualStream : localStreamVideo,\r\n              name: 'youyouyou',\r\n              muted: true,\r\n            };\r\n            participant_ = {\r\n              id: 'youyou',\r\n              videoID: 'youyou',\r\n              name: 'youyouyou',\r\n              stream: keepBackground && virtualStream ? virtualStream : localStreamVideo,\r\n            };\r\n            remoteProducerId = 'youyouyou';\r\n\r\n            newComponents[0].push({\r\n              component: VideoCard,\r\n              inputs: {\r\n                videoStream: participant.stream ? participant.stream : null,\r\n                remoteProducerId: participant.stream ? participant.stream.id : null,\r\n                eventType,\r\n                forceFullDisplay: eventType == 'webinar' ? false : forceFullDisplay,\r\n                customStyle: {\r\n                  border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n                },\r\n                participant: participant,\r\n                backgroundColor: 'transparent',\r\n                showControls: false,\r\n                showInfo: false,\r\n                name: participant.name,\r\n                doMirror: true,\r\n                parameters,\r\n              },\r\n            });\r\n          }\r\n        } else {\r\n          participant_ = ref_participants.find((obj: any) => obj.videoID === remoteProducerId);\r\n          if (participant_) {\r\n            newComponents[0].push({\r\n              component: VideoCard,\r\n              inputs: {\r\n                videoStream: participant.stream ? participant.stream : null,\r\n                remoteProducerId,\r\n                eventType,\r\n                forceFullDisplay,\r\n                customStyle: {\r\n                  border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n                },\r\n                participant: participant_,\r\n                backgroundColor: 'transparent',\r\n                showControls: eventType !== 'chat',\r\n                showInfo: true,\r\n                name: participant_.name,\r\n                doMirror: false,\r\n                parameters,\r\n              },\r\n            });\r\n          }\r\n        }\r\n      }\r\n\r\n      if (i === numtoadd - 1) {\r\n        otherGridStreams[0] = newComponents[0];\r\n\r\n        await updateMiniCardsGrid({\r\n          rows: numRows,\r\n          cols: numCols,\r\n          defal: true,\r\n          actualRows: actualRows,\r\n          parameters,\r\n        });\r\n\r\n        updateOtherGridStreams(otherGridStreams);\r\n        await updateMiniCardsGrid({\r\n          rows: numRows,\r\n          cols: numCols,\r\n          defal: true,\r\n          actualRows,\r\n          parameters,\r\n        });\r\n      }\r\n    }\r\n\r\n    // Handle the alternate grid streams\r\n    if (!removeAltGrid) {\r\n      for (let i = 0; i < altGridStreams.length; i++) {\r\n        participant = altGridStreams[i];\r\n        remoteProducerId = participant.producerId;\r\n\r\n        let participant_;\r\n        let pseudoName = false;\r\n\r\n        //check if there is .name in the participant object and if it is null\r\n        if (\r\n          Object.prototype.hasOwnProperty.call(participant, 'producerId') &&\r\n          participant.producerId != null &&\r\n          participant.producerId !== ''\r\n        ) {\r\n          //actual video\r\n          pseudoName = false;\r\n        } else {\r\n          pseudoName = true;\r\n        }\r\n\r\n        if (pseudoName) {\r\n          participant_ = participant;\r\n          remoteProducerId = await participant.name;\r\n\r\n          if (\r\n            Object.prototype.hasOwnProperty.call(participant, 'audioID') &&\r\n            participant.audioID != null &&\r\n            participant.audioID !== ''\r\n          ) {\r\n            newComponents[1].push({\r\n              component: AudioCard,\r\n              inputs: {\r\n                name: participant.name,\r\n                barColor: 'red',\r\n                textColor: 'white',\r\n                customStyle: {\r\n                  backgroundColor: 'transparent',\r\n                  border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n                },\r\n                controlsPosition: 'topLeft',\r\n                infoPosition: 'topRight',\r\n                showWaveform: true,\r\n                roundedImage: true,\r\n                parameters,\r\n                backgroundColor: 'transparent',\r\n                showControls: eventType !== 'chat',\r\n                participant,\r\n              },\r\n            });\r\n          } else {\r\n            newComponents[1].push({\r\n              component: MiniCard,\r\n              inputs: {\r\n                initials: participant.name,\r\n                fontSize: 20,\r\n                customStyle: {\r\n                  backgroundColor: 'transparent',\r\n                  border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n                },\r\n              },\r\n            });\r\n          }\r\n        } else {\r\n          participant_ = ref_participants.find((obj: any) => obj.videoID === remoteProducerId);\r\n          newComponents[1].push({\r\n            component: VideoCard,\r\n            inputs: {\r\n              videoStream: participant_ && participant_['stream'] ? participant_['stream'] : null,\r\n              remoteProducerId,\r\n              eventType,\r\n              forceFullDisplay,\r\n              customStyle: {\r\n                border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n              },\r\n              participant: participant_,\r\n              backgroundColor: 'transparent',\r\n              showControls: eventType !== 'chat',\r\n              showInfo: true,\r\n              name: participant.name,\r\n              doMirror: false,\r\n              parameters,\r\n            },\r\n          });\r\n        }\r\n\r\n        if (i === numtoadd - 1) {\r\n          otherGridStreams[1] = newComponents[1];\r\n\r\n          await updateMiniCardsGrid({\r\n            rows: 1,\r\n            cols: lastrowcols,\r\n            defal: false,\r\n            actualRows,\r\n            parameters,\r\n          });\r\n\r\n          updateOtherGridStreams(otherGridStreams);\r\n          await updateMiniCardsGrid({\r\n            rows: 1,\r\n            cols: lastrowcols,\r\n            defal: false,\r\n            actualRows,\r\n            parameters,\r\n          });\r\n        }\r\n      }\r\n    } else {\r\n      updateAddAltGrid(false);\r\n      otherGridStreams[1] = [];\r\n\r\n      await updateMiniCardsGrid({\r\n        rows: 0,\r\n        cols: 0,\r\n        defal: false,\r\n        actualRows: actualRows,\r\n        parameters,\r\n      });\r\n\r\n      updateOtherGridStreams(otherGridStreams);\r\n      await updateMiniCardsGrid({\r\n        rows: 0,\r\n        cols: 0,\r\n        defal: false,\r\n        actualRows,\r\n        parameters,\r\n      });\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EventType } from '../@types/types';\r\n\r\nexport interface AutoAdjustOptions {\r\n  n: number;\r\n  eventType: EventType;\r\n  shareScreenStarted: boolean;\r\n  shared: boolean;\r\n}\r\n\r\nexport type AutoAdjustType = (options: AutoAdjustOptions) => Promise<number[]>;\r\n\r\n/**\r\n * @service AutoAdjust\r\n * @description Service to auto-adjust layout values based on the event type, number of participants, and sharing conditions. Useful for dynamically adjusting UI elements in different event settings.\r\n *\r\n * @method autoAdjust\r\n * Dynamically calculates and adjusts layout values (e.g., grid columns) based on conditions such as event type, participant count, and sharing status.\r\n *\r\n * @param {AutoAdjustOptions} options - Configuration options for the auto-adjustment.\r\n * @param {number} options.n - Number of participants in the event.\r\n * @param {EventType} options.eventType - Type of event (e.g., 'broadcast', 'chat', 'conference').\r\n * @param {boolean} options.shareScreenStarted - Indicates whether screen sharing is active.\r\n * @param {boolean} options.shared - Indicates if another resource is currently shared.\r\n *\r\n * @returns {Promise<number[]>} A promise resolving to an array of two adjusted layout values.\r\n *\r\n * @example\r\n * ```typescript\r\n * const [primaryLayout, secondaryLayout] = await autoAdjustService.autoAdjust({\r\n *   n: 5,\r\n *   eventType: 'conference',\r\n *   shareScreenStarted: false,\r\n *   shared: false,\r\n * });\r\n * console.log(primaryLayout, secondaryLayout); // Adjusted layout values based on inputs\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AutoAdjust {\r\n  /**\r\n   * Adjusts values based on the provided options.\r\n   *\r\n   * @param {AutoAdjustOptions} options - The options for auto adjustment.\r\n   * @param {number} options.n - The number of participants.\r\n   * @param {string} options.eventType - The type of event (e.g., 'broadcast', 'chat', 'conference').\r\n   * @param {boolean} options.shareScreenStarted - Indicates if screen sharing has started.\r\n   * @param {boolean} options.shared - Indicates if something is shared.\r\n   *\r\n   * @returns {Promise<number[]>} A promise that resolves to an array containing the adjusted values.\r\n   */\r\n  async autoAdjust({\r\n    n,\r\n    eventType,\r\n    shareScreenStarted,\r\n    shared,\r\n  }: AutoAdjustOptions): Promise<number[]> {\r\n    // Default values\r\n    let val1 = 6;\r\n    let val2 = 12 - val1;\r\n\r\n    // Calculate percentage values\r\n\r\n    // Adjust values based on eventType and other conditions\r\n    if (eventType === 'broadcast') {\r\n      val1 = 0;\r\n      val2 = 12 - val1;\r\n    } else if (\r\n      eventType === 'chat' ||\r\n      (eventType === 'conference' && !(shareScreenStarted || shared))\r\n    ) {\r\n      val1 = 12;\r\n      val2 = 12 - val1;\r\n    } else {\r\n      if (shareScreenStarted || shared) {\r\n        val2 = 10;\r\n        val1 = 12 - val2;\r\n      } else {\r\n        // Adjust values based on the number of participants (n)\r\n        if (n === 0) {\r\n          val1 = 1;\r\n          val2 = 12 - val1;\r\n        } else if (n >= 1 && n < 4) {\r\n          val1 = 4;\r\n          val2 = 12 - val1;\r\n        } else if (n >= 4 && n < 6) {\r\n          val1 = 6;\r\n          val2 = 12 - val1;\r\n        } else if (n >= 6 && n < 9) {\r\n          val1 = 6;\r\n          val2 = 12 - val1;\r\n        } else if (n >= 9 && n < 12) {\r\n          val1 = 6;\r\n          val2 = 12 - val1;\r\n        } else if (n >= 12 && n < 20) {\r\n          val1 = 8;\r\n          val2 = 12 - val1;\r\n        } else if (n >= 20 && n < 50) {\r\n          val1 = 8;\r\n          val2 = 12 - val1;\r\n        } else {\r\n          val1 = 10;\r\n          val2 = 12 - val1;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Return an array with adjusted values\r\n    return [val1, val2];\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nexport interface CalculateRowsAndColumnsOptions {\r\n  n: number;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type CalculateRowsAndColumnsType = (\r\n  options: CalculateRowsAndColumnsOptions,\r\n) => [number, number];\r\n\r\n/**\r\n * @service CalculateRowsAndColumns\r\n * @description Service to calculate the optimal number of rows and columns needed to display a given number of items in a grid. Useful for dynamically determining grid layout in responsive designs.\r\n *\r\n * @method calculateRowsAndColumns\r\n * Calculates the optimal number of rows and columns to display a specified number of items in a compact grid format.\r\n *\r\n * @param {CalculateRowsAndColumnsOptions} options - Configuration options for row and column calculation.\r\n * @param {number} options.n - The number of items to display in the grid.\r\n *\r\n * @returns {[number, number]} A tuple where the first value is the number of rows and the second is the number of columns.\r\n *\r\n * @example\r\n * ```typescript\r\n * const [rows, cols] = calculateRowsAndColumnsService.calculateRowsAndColumns({ n: 10 });\r\n * console.log(rows, cols); // Outputs optimized rows and columns for displaying 10 items\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CalculateRowsAndColumns {\r\n  /**\r\n   * Calculates the number of rows and columns needed to display a given number of items in a grid.\r\n   *\r\n   * @param {CalculateRowsAndColumnsOptions} options - The options for calculating rows and columns.\r\n   * @param {number} options.n - The number of items to display.\r\n   * @returns {[number, number]} A tuple containing the number of rows and columns.\r\n   */\r\n  calculateRowsAndColumns({ n }: CalculateRowsAndColumnsOptions): [number, number] {\r\n    // Calculate the square root of n\r\n    const sqrt = Math.sqrt(n);\r\n\r\n    // Initialize columns based on the floor of the square root\r\n    let cols = Math.floor(sqrt);\r\n\r\n    // Calculate the number of rows needed to display n videos\r\n    let rows = Math.ceil(n / cols);\r\n\r\n    // Calculate the product of rows and columns\r\n    let prod = rows * cols;\r\n\r\n    // Adjust rows and columns until the product is greater than or equal to n\r\n    while (prod < n) {\r\n      if (cols < rows) {\r\n        cols++;\r\n      } else {\r\n        rows++;\r\n      }\r\n      prod = rows * cols;\r\n    }\r\n\r\n    // Return an array with the calculated number of rows and columns\r\n    return [rows, cols];\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  Stream,\r\n  Participant,\r\n  DispStreamsType,\r\n  DispStreamsParameters,\r\n  AudioDecibels,\r\n  MixStreamsType,\r\n  BreakoutParticipant,\r\n  EventType,\r\n} from '../@types/types';\r\n\r\nexport interface ChangeVidsParameters extends DispStreamsParameters {\r\n  allVideoStreams: (Stream | Participant)[];\r\n  p_activeNames: string[];\r\n  activeNames: string[];\r\n  dispActiveNames: string[];\r\n  shareScreenStarted: boolean;\r\n  shared: boolean;\r\n  newLimitedStreams: (Stream | Participant)[];\r\n  non_alVideoStreams: Participant[];\r\n  ref_participants: Participant[];\r\n  participants: Participant[];\r\n  eventType: EventType;\r\n  islevel: string;\r\n  member: string;\r\n  sortAudioLoudness: boolean;\r\n  audioDecibels: AudioDecibels[];\r\n  mixed_alVideoStreams: (Stream | Participant)[];\r\n  non_alVideoStreams_muted: Participant[];\r\n  remoteProducerId?: string;\r\n  localStreamVideo: MediaStream | null;\r\n  oldAllStreams: (Stream | Participant)[];\r\n  screenPageLimit: number;\r\n  meetingDisplayType: string;\r\n  meetingVideoOptimized: boolean;\r\n  recordingVideoOptimized: boolean;\r\n  recordingDisplayType: 'video' | 'media' | 'all';\r\n  paginatedStreams: (Stream | Participant)[][];\r\n  itemPageLimit: number;\r\n  doPaginate: boolean;\r\n  prevDoPaginate: boolean;\r\n  currentUserPage: number;\r\n  breakoutRooms: BreakoutParticipant[][];\r\n  hostNewRoom: number;\r\n  breakOutRoomStarted: boolean;\r\n  breakOutRoomEnded: boolean;\r\n  virtualStream: MediaStream | null;\r\n  mainRoomsLength: number;\r\n  memberRoom: number;\r\n  updateP_activeNames: (names: string[]) => void;\r\n  updateActiveNames: (names: string[]) => void;\r\n  updateDispActiveNames: (names: string[]) => void;\r\n  updateNewLimitedStreams: (streams: (Stream | Participant)[]) => void;\r\n  updateNon_alVideoStreams: (participants: Participant[]) => void;\r\n  updateRef_participants: (participants: Participant[]) => void;\r\n  updateSortAudioLoudness: (sort: boolean) => void;\r\n  updateMixed_alVideoStreams: (streams: (Stream | Participant)[]) => void;\r\n  updateNon_alVideoStreams_muted: (participants: Participant[]) => void;\r\n  updatePaginatedStreams: (streams: (Stream | Participant)[][]) => void;\r\n  updateDoPaginate: (paginate: boolean) => void;\r\n  updatePrevDoPaginate: (paginate: boolean) => void;\r\n  updateCurrentUserPage: (page: number) => void;\r\n  updateNumberPages: (pages: number) => void;\r\n  updateMainRoomsLength: (length: number) => void;\r\n  updateMemberRoom: (room: number) => void;\r\n\r\n  // mediasfu functions\r\n  mixStreams: MixStreamsType;\r\n  dispStreams: DispStreamsType;\r\n  getUpdatedAllParams: () => ChangeVidsParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ChangeVidsOptions {\r\n  screenChanged?: boolean;\r\n  parameters: ChangeVidsParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ChangeVidsType = (options: ChangeVidsOptions) => Promise<void>;\r\n\r\n  /**\r\n   * Asynchronously changes the video streams based on the provided options.\r\n   *\r\n   * @param {Object} options - The options for changing video streams.\r\n   * @param {boolean} [options.screenChanged=false] - Indicates if the screen has changed.\r\n   * @param {ChangeVidsOptions} options.parameters - The parameters for changing video streams.\r\n   * @returns {Promise<void>} A promise that resolves when the video streams have been changed.\r\n   *\r\n   * @typedef {Object} ChangeVidsOptions\r\n   * @property {Function} getUpdatedAllParams - Function to get updated parameters.\r\n   * @property {Array} allVideoStreams - Array of all video streams.\r\n   * @property {Array} p_activeNames - Array of active participant names.\r\n   * @property {Array} activeNames - Array of active names.\r\n   * @property {Array} dispActiveNames - Array of displayed active names.\r\n   * @property {boolean} shareScreenStarted - Indicates if screen sharing has started.\r\n   * @property {boolean} shared - Indicates if the screen is shared.\r\n   * @property {Array} newLimitedStreams - Array of new limited streams.\r\n   * @property {Array} non_alVideoStreams - Array of non-al video streams.\r\n   * @property {Array} ref_participants - Array of reference participants.\r\n   * @property {Array} participants - Array of participants.\r\n   * @property {string} eventType - Type of the event.\r\n   * @property {string} islevel - Level of the participant.\r\n   * @property {string} member - Name of the member.\r\n   * @property {boolean} sortAudioLoudness - Indicates if audio loudness should be sorted.\r\n   * @property {Array} audioDecibels - Array of audio decibels.\r\n   * @property {Array} mixed_alVideoStreams - Array of mixed al video streams.\r\n   * @property {Array} non_alVideoStreams_muted - Array of muted non-al video streams.\r\n   * @property {string} remoteProducerId - ID of the remote producer.\r\n   * @property {Object} localStreamVideo - Local stream video object.\r\n   * @property {Array} oldAllStreams - Array of old all streams.\r\n   * @property {number} screenPageLimit - Limit of streams per screen page.\r\n   * @property {string} meetingDisplayType - Type of meeting display.\r\n   * @property {boolean} meetingVideoOptimized - Indicates if meeting video is optimized.\r\n   * @property {boolean} recordingVideoOptimized - Indicates if recording video is optimized.\r\n   * @property {string} recordingDisplayType - Type of recording display.\r\n   * @property {Array} paginatedStreams - Array of paginated streams.\r\n   * @property {number} itemPageLimit - Limit of items per page.\r\n   * @property {boolean} doPaginate - Indicates if pagination should be done.\r\n   * @property {boolean} prevDoPaginate - Indicates if pagination was previously done.\r\n   * @property {number} currentUserPage - Current user page number.\r\n   * @property {Array} breakoutRooms - Array of breakout rooms.\r\n   * @property {number} hostNewRoom - Index of the new room for the host.\r\n   * @property {boolean} breakOutRoomStarted - Indicates if breakout room has started.\r\n   * @property {boolean} breakOutRoomEnded - Indicates if breakout room has ended.\r\n   * @property {Object} virtualStream - Virtual stream object.\r\n   * @property {number} mainRoomsLength - Length of main rooms.\r\n   * @property {string} memberRoom - Room of the member.\r\n   * @property {Function} updateP_activeNames - Function to update active participant names.\r\n   * @property {Function} updateActiveNames - Function to update active names.\r\n   * @property {Function} updateDispActiveNames - Function to update displayed active names.\r\n   * @property {Function} updateNewLimitedStreams - Function to update new limited streams.\r\n   * @property {Function} updateNon_alVideoStreams - Function to update non-al video streams.\r\n   * @property {Function} updateRef_participants - Function to update reference participants.\r\n   * @property {Function} updateSortAudioLoudness - Function to update audio loudness sorting.\r\n   * @property {Function} updateMixed_alVideoStreams - Function to update mixed al video streams.\r\n   * @property {Function} updateNon_alVideoStreams_muted - Function to update muted non-al video streams.\r\n   * @property {Function} updatePaginatedStreams - Function to update paginated streams.\r\n   * @property {Function} updateDoPaginate - Function to update pagination status.\r\n   * @property {Function} updatePrevDoPaginate - Function to update previous pagination status.\r\n   * @property {Function} updateCurrentUserPage - Function to update current user page.\r\n   * @property {Function} updateNumberPages - Function to update number of pages.\r\n   * @property {Function} updateMainRoomsLength - Function to update main rooms length.\r\n   * @property {Function} updateMemberRoom - Function to update member room.\r\n   * @property {Function} mixStreams - Function to mix streams.\r\n   * @property {Function} dispStreams - Function to display streams.\r\n   *\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * await changeVidsService.changeVids({\r\n   *   screenChanged: true,\r\n   *   parameters: {\r\n   *     allVideoStreams: [], // Your array of video streams\r\n   *     p_activeNames: [], // Active participant names\r\n   *     activeNames: [], // Names of active streams\r\n   *     dispActiveNames: [], // Names of displayed active streams\r\n   *     shareScreenStarted: false,\r\n   *     shared: false,\r\n   *     newLimitedStreams: [], // New limited streams\r\n   *     non_alVideoStreams: [], // Non-audio video streams\r\n   *     ref_participants: [], // Reference participants\r\n   *     participants: [], // All participants\r\n   *     eventType: 'conference', // Type of event\r\n   *     islevel: '1', // Level of the participant\r\n   *     member: 'John Doe', // Member's name\r\n   *     sortAudioLoudness: true,\r\n   *     audioDecibels: [], // Audio decibel levels\r\n   *     mixed_alVideoStreams: [], // Mixed audio/video streams\r\n   *     non_alVideoStreams_muted: [], // Muted non-audio video streams\r\n   *     remoteProducerId: 'abc123',\r\n   *     localStreamVideo: null, // Local video stream\r\n   *     oldAllStreams: [], // Previous streams\r\n   *     screenPageLimit: 4, // Limit of streams per screen\r\n   *     meetingDisplayType: 'grid', // Type of display\r\n   *     meetingVideoOptimized: true, // Video optimization status\r\n   *     recordingVideoOptimized: false, // Recording optimization status\r\n   *     recordingDisplayType: 'video', // Recording display type\r\n   *     paginatedStreams: [], // Paginated streams\r\n   *     itemPageLimit: 2, // Items per page limit\r\n   *     doPaginate: true, // Pagination flag\r\n   *     prevDoPaginate: false, // Previous pagination state\r\n   *     currentUserPage: 1, // Current page number\r\n   *     breakoutRooms: [], // Breakout room information\r\n   *     hostNewRoom: 0, // Host room number\r\n   *     breakOutRoomStarted: false, // Breakout room status\r\n   *     breakOutRoomEnded: false, // Breakout room end status\r\n   *     virtualStream: null, // Virtual stream\r\n   *     mainRoomsLength: 3, // Number of main rooms\r\n   *     memberRoom: 1, // Member's room number\r\n   *     updateP_activeNames: (names) => {}, // Update function for active names\r\n   *     updateActiveNames: (names) => {}, // Update function for all names\r\n   *     updateDispActiveNames: (names) => {}, // Update function for displayed names\r\n   *     updateNewLimitedStreams: (streams) => {}, // Update function for limited streams\r\n   *     updateNon_alVideoStreams: (participants) => {}, // Update function for non-audio streams\r\n   *     updateRef_participants: (participants) => {}, // Update function for reference participants\r\n   *     updateSortAudioLoudness: (sort) => {}, // Update function for sorting audio\r\n   *     updateMixed_alVideoStreams: (streams) => {}, // Update function for mixed streams\r\n   *     updateNon_alVideoStreams_muted: (participants) => {}, // Update function for muted streams\r\n   *     updatePaginatedStreams: (streams) => {}, // Update function for paginated streams\r\n   *     updateDoPaginate: (paginate) => {}, // Update function for pagination\r\n   *     updatePrevDoPaginate: (paginate) => {}, // Update function for previous pagination\r\n   *     updateCurrentUserPage: (page) => {}, // Update function for current page\r\n   *     updateNumberPages: (pages) => {}, // Update function for number of pages\r\n   *     updateMainRoomsLength: (length) => {}, // Update function for main room length\r\n   *     updateMemberRoom: (room) => {}, // Update function for member's room\r\n   *     mixStreams: async ({ streams, displayType }) => {}, // Function to mix streams\r\n   *     dispStreams: async ({ streams, displayType }) => {}, // Function to display streams\r\n   *   },\r\n   * });\r\n   * ```\r\n   */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ChangeVids {\r\n\r\n  changeVids = async ({ screenChanged = false, parameters }: ChangeVidsOptions): Promise<void> => {\r\n    let { getUpdatedAllParams } = parameters;\r\n    parameters = getUpdatedAllParams();\r\n\r\n    let {\r\n      allVideoStreams,\r\n      p_activeNames,\r\n      activeNames,\r\n      dispActiveNames,\r\n      shareScreenStarted,\r\n      shared,\r\n      newLimitedStreams,\r\n      non_alVideoStreams,\r\n      ref_participants,\r\n      participants,\r\n      eventType,\r\n      islevel,\r\n      member,\r\n      sortAudioLoudness,\r\n      audioDecibels,\r\n      mixed_alVideoStreams,\r\n      non_alVideoStreams_muted,\r\n      remoteProducerId,\r\n      localStreamVideo,\r\n      oldAllStreams,\r\n      screenPageLimit,\r\n      meetingDisplayType,\r\n      meetingVideoOptimized,\r\n      recordingVideoOptimized,\r\n      recordingDisplayType,\r\n      paginatedStreams,\r\n      itemPageLimit,\r\n      doPaginate,\r\n      prevDoPaginate,\r\n      currentUserPage,\r\n\r\n      breakoutRooms,\r\n      hostNewRoom,\r\n      breakOutRoomStarted,\r\n      breakOutRoomEnded,\r\n      virtualStream,\r\n      mainRoomsLength,\r\n      memberRoom,\r\n\r\n      updateP_activeNames,\r\n      updateActiveNames,\r\n      updateDispActiveNames,\r\n      updateNewLimitedStreams,\r\n      updateNon_alVideoStreams,\r\n      updateRef_participants,\r\n      updateSortAudioLoudness,\r\n      updateMixed_alVideoStreams,\r\n      updateNon_alVideoStreams_muted,\r\n      updatePaginatedStreams,\r\n      updateDoPaginate,\r\n      updatePrevDoPaginate,\r\n      updateCurrentUserPage,\r\n      updateNumberPages,\r\n\r\n      updateMainRoomsLength,\r\n      updateMemberRoom,\r\n\r\n      // mediasfu functions\r\n      mixStreams,\r\n      dispStreams,\r\n    } = parameters;\r\n\r\n    try {\r\n      let alVideoStreams = [...allVideoStreams];\r\n      p_activeNames = [...activeNames];\r\n\r\n      let streame;\r\n\r\n      if (shareScreenStarted || shared) {\r\n        alVideoStreams = [...newLimitedStreams];\r\n        activeNames = [];\r\n      }\r\n\r\n      activeNames = [];\r\n      dispActiveNames = [];\r\n      ref_participants = participants;\r\n\r\n      let temp = alVideoStreams;\r\n\r\n      await Promise.all(\r\n        temp.map(async (stream) => {\r\n          let participant = ref_participants.find((obj) => obj.videoID === stream.producerId);\r\n          if (!participant && stream.producerId !== 'youyou' && stream.producerId !== 'youyouyou') {\r\n            alVideoStreams = alVideoStreams.filter((obj) => obj.producerId !== stream.producerId);\r\n          }\r\n        }),\r\n      );\r\n\r\n      if (eventType === 'broadcast' || eventType === 'chat') {\r\n        sortAudioLoudness = false;\r\n      }\r\n\r\n      if (shareScreenStarted || shared) {\r\n        non_alVideoStreams = [];\r\n        non_alVideoStreams_muted = [];\r\n        mixed_alVideoStreams = [];\r\n      } else {\r\n        if (alVideoStreams.length > screenPageLimit) {\r\n          alVideoStreams = alVideoStreams.filter(\r\n            (obj) => obj.producerId !== 'youyou' && obj.producerId !== 'youyouyou',\r\n          );\r\n\r\n          ref_participants = ref_participants.sort((a, b) =>\r\n            (a.muted ?? false) > (b.muted ?? false) ? 1 : -1,\r\n          );\r\n\r\n          let temp: (Stream | Participant)[] = [];\r\n          await Promise.all(\r\n            ref_participants.map((participant) => {\r\n              let stream = alVideoStreams.find((obj) => obj.producerId === participant.videoID);\r\n              if (stream) {\r\n                temp.push(stream);\r\n              }\r\n            }),\r\n          );\r\n\r\n          alVideoStreams = temp;\r\n\r\n          let youyou = allVideoStreams.find((obj) => obj.producerId === 'youyou');\r\n          if (!youyou) {\r\n            let youyouyou = allVideoStreams.find((obj) => obj.producerId === 'youyouyou');\r\n            if (youyouyou) {\r\n              alVideoStreams.unshift(youyouyou);\r\n            }\r\n          } else {\r\n            if (youyou) {\r\n              alVideoStreams.unshift(youyou);\r\n            }\r\n          }\r\n        }\r\n\r\n        const admin = participants.filter((participant) => participant.islevel === '2');\r\n        let adminName = '';\r\n        if (admin.length > 0) {\r\n          adminName = admin[0].name || '';\r\n        }\r\n\r\n        non_alVideoStreams = [];\r\n\r\n        await Promise.all(\r\n          ref_participants.map(async (participant) => {\r\n            let stream = alVideoStreams.find((obj) => obj.producerId === participant.videoID);\r\n            if (eventType !== 'chat' && eventType !== 'conference') {\r\n              if (\r\n                !stream &&\r\n                participant.name !== member &&\r\n                !participant['muted'] &&\r\n                participant.name !== adminName\r\n              ) {\r\n                non_alVideoStreams.push(participant);\r\n              }\r\n            } else {\r\n              if (!stream && participant.name !== member && !participant['muted']) {\r\n                non_alVideoStreams.push(participant);\r\n              }\r\n            }\r\n          }),\r\n        );\r\n\r\n        if (sortAudioLoudness) {\r\n          non_alVideoStreams.sort((a, b) => {\r\n            const avgLoudnessA =\r\n              audioDecibels.find((obj) => obj.name === a.name)?.averageLoudness || 127;\r\n            const avgLoudnessB =\r\n              audioDecibels.find((obj) => obj.name === b.name)?.averageLoudness || 127;\r\n            return avgLoudnessB - avgLoudnessA;\r\n          });\r\n\r\n          if (\r\n            !(meetingDisplayType === 'video' && meetingVideoOptimized) ||\r\n            !(recordingVideoOptimized && recordingDisplayType === 'video')\r\n          ) {\r\n            mixed_alVideoStreams = await mixStreams({\r\n              alVideoStreams,\r\n              non_alVideoStreams,\r\n              ref_participants,\r\n            });\r\n          }\r\n        }\r\n\r\n        non_alVideoStreams_muted = [];\r\n        await Promise.all(\r\n          ref_participants.map(async (participant) => {\r\n            let stream = alVideoStreams.find((obj) => obj.producerId === participant.videoID);\r\n            if (eventType !== 'chat' && eventType !== 'conference') {\r\n              if (\r\n                !stream &&\r\n                participant.name !== member &&\r\n                participant['muted'] &&\r\n                participant.name !== adminName\r\n              ) {\r\n                non_alVideoStreams_muted.push(participant);\r\n              }\r\n            } else {\r\n              if (!stream && participant.name !== member && participant['muted']) {\r\n                non_alVideoStreams_muted.push(participant);\r\n              }\r\n            }\r\n          }),\r\n        );\r\n      }\r\n\r\n      if (eventType === 'conference' && islevel !== '2') {\r\n        let host = participants.find((obj) => obj.islevel === '2');\r\n        if (host) {\r\n          if (host.videoID) {\r\n            remoteProducerId = host.videoID;\r\n          }\r\n          if (islevel === '2') {\r\n            host['stream'] = virtualStream || localStreamVideo;\r\n          } else {\r\n            let hostVideo = alVideoStreams.find((obj) => obj.producerId === remoteProducerId);\r\n            if (!hostVideo) {\r\n              streame = oldAllStreams.find((streame) => streame.producerId === remoteProducerId);\r\n              if (streame) {\r\n                alVideoStreams = alVideoStreams.filter((obj) => obj.producerId !== host.videoID);\r\n                non_alVideoStreams = non_alVideoStreams.filter((obj) => obj.name !== host.name);\r\n                non_alVideoStreams_muted = non_alVideoStreams_muted.filter(\r\n                  (obj) => obj.name !== host.name,\r\n                );\r\n                if (sortAudioLoudness) {\r\n                  mixed_alVideoStreams = mixed_alVideoStreams.filter(\r\n                    (obj) => obj.name !== host.name,\r\n                  );\r\n                  non_alVideoStreams_muted = non_alVideoStreams_muted.filter(\r\n                    (obj) => obj.name !== host.name,\r\n                  );\r\n                  if (meetingDisplayType == 'video' && meetingVideoOptimized) {\r\n                    alVideoStreams.unshift(streame);\r\n                  } else {\r\n                    mixed_alVideoStreams.unshift(streame);\r\n                  }\r\n                } else {\r\n                  alVideoStreams.unshift(streame);\r\n                }\r\n              } else {\r\n                await Promise.all(\r\n                  ref_participants.map(async (participant) => {\r\n                    let stream = alVideoStreams.find(\r\n                      (obj) =>\r\n                        obj.producerId == participant.videoID && participant.name == host.name,\r\n                    );\r\n                    if (stream) {\r\n                      if (sortAudioLoudness) {\r\n                        mixed_alVideoStreams = mixed_alVideoStreams.filter(\r\n                          (obj) => obj.name !== host.name,\r\n                        );\r\n                        non_alVideoStreams_muted = non_alVideoStreams_muted.filter(\r\n                          (obj) => obj.name !== host.name,\r\n                        );\r\n                        mixed_alVideoStreams.unshift(participant);\r\n                      } else {\r\n                        non_alVideoStreams = non_alVideoStreams.filter(\r\n                          (obj) => obj.name !== host.name,\r\n                        );\r\n                        non_alVideoStreams.unshift(participant);\r\n                        return;\r\n                      }\r\n                    }\r\n                  }),\r\n                );\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      let allStreamsPaged: (Stream | Participant)[] = [];\r\n      if (sortAudioLoudness) {\r\n        if (meetingDisplayType === 'video') {\r\n          if (meetingVideoOptimized) {\r\n            allStreamsPaged = [...alVideoStreams];\r\n          } else {\r\n            allStreamsPaged = [...mixed_alVideoStreams];\r\n          }\r\n        } else if (meetingDisplayType === 'media') {\r\n          allStreamsPaged = [...mixed_alVideoStreams];\r\n        } else if (meetingDisplayType === 'all') {\r\n          allStreamsPaged = [...mixed_alVideoStreams, ...non_alVideoStreams_muted];\r\n        }\r\n      } else {\r\n        if (meetingDisplayType === 'video') {\r\n          allStreamsPaged = [...alVideoStreams];\r\n        } else if (meetingDisplayType === 'media') {\r\n          allStreamsPaged = [...alVideoStreams, ...non_alVideoStreams];\r\n        } else if (meetingDisplayType === 'all') {\r\n          allStreamsPaged = [...alVideoStreams, ...non_alVideoStreams, ...non_alVideoStreams_muted];\r\n        }\r\n      }\r\n\r\n      paginatedStreams = [];\r\n      let limit = itemPageLimit;\r\n\r\n      if (shareScreenStarted || shared) {\r\n        limit = screenPageLimit;\r\n      }\r\n\r\n      let firstPage: (Stream | Participant)[] = [];\r\n      let page: (Stream | Participant)[] = [];\r\n      let limit_ = limit + 1;\r\n\r\n      if (eventType === 'conference' && !shared && !shareScreenStarted) {\r\n        limit_ = limit_ - 1;\r\n      }\r\n\r\n      // Create pagination\r\n      let memberInRoom = false;\r\n      let filterHost = false;\r\n      if (breakOutRoomStarted && !breakOutRoomEnded) {\r\n        let tempBreakoutRooms = JSON.parse(JSON.stringify(breakoutRooms));\r\n        let host = participants.find((obj) => obj.islevel == '2');\r\n        for (let room of tempBreakoutRooms) {\r\n          try {\r\n            let currentStreams = [];\r\n            const roomIndex = tempBreakoutRooms.indexOf(room);\r\n            if (hostNewRoom != -1 && roomIndex == hostNewRoom) {\r\n              if (host) {\r\n                if (!room.map((obj: any) => obj.name).includes(host.name)) {\r\n                  room = [...room, { name: host.name, breakRoom: roomIndex }];\r\n                  filterHost = true;\r\n                }\r\n              }\r\n            }\r\n            for (let participant of room) {\r\n              if (participant.name == member && !memberInRoom) {\r\n                memberInRoom = true;\r\n                memberRoom = participant.breakRoom;\r\n                updateMemberRoom(memberRoom);\r\n              }\r\n              let streams = allStreamsPaged.filter((stream) => {\r\n                if (\r\n                  (Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n                    stream.producerId != null &&\r\n                    stream.producerId !== '') ||\r\n                  (Object.prototype.hasOwnProperty.call(stream, 'audioID') &&\r\n                    stream['audioID'] != null &&\r\n                    stream['audioID'] !== '')\r\n                ) {\r\n                  let producerId = stream.producerId || stream['audioID'];\r\n                  let matchingParticipant = ref_participants.find(\r\n                    (obj) =>\r\n                      obj['audioID'] === producerId ||\r\n                      obj.videoID === producerId ||\r\n                      ((producerId == 'youyou' || producerId == 'youyouyou') &&\r\n                        member == participant.name),\r\n                  );\r\n                  return (\r\n                    (matchingParticipant && matchingParticipant.name === participant.name) ||\r\n                    (participant.name == member &&\r\n                      (producerId == 'youyou' || producerId == 'youyouyou'))\r\n                  );\r\n                } else {\r\n                  return (\r\n                    Object.prototype.hasOwnProperty.call(stream, 'name') &&\r\n                    stream.name == participant.name\r\n                  );\r\n                }\r\n              });\r\n              for (let stream of streams) {\r\n                if (currentStreams.length < limit_) {\r\n                  currentStreams.push(stream);\r\n                }\r\n              }\r\n            }\r\n            paginatedStreams.push(currentStreams);\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        }\r\n\r\n        let remainingStreams = allStreamsPaged.filter((stream) => {\r\n          if (\r\n            (Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== '') ||\r\n            (Object.prototype.hasOwnProperty.call(stream, 'audioID') &&\r\n              stream['audioID'] != null &&\r\n              stream['audioID'] !== '')\r\n          ) {\r\n            let producerId = stream.producerId || stream['audioID'];\r\n            let matchingParticipant = ref_participants.find(\r\n              (obj) =>\r\n                obj['audioID'] === producerId ||\r\n                obj.videoID === producerId ||\r\n                ((producerId == 'youyou' || producerId == 'youyouyou') && member == obj.name),\r\n            );\r\n            return (\r\n              matchingParticipant &&\r\n              !breakoutRooms\r\n                .flat()\r\n                .map((obj) => obj.name)\r\n                .includes(matchingParticipant.name) &&\r\n              (!filterHost || matchingParticipant.name != host?.name)\r\n            );\r\n          } else {\r\n            return (\r\n              !breakoutRooms\r\n                .flat()\r\n                .map((obj) => obj.name)\r\n                .includes(stream.name ?? '') &&\r\n              (!filterHost || stream.name != host?.name)\r\n            );\r\n          }\r\n        });\r\n\r\n        if (memberInRoom) {\r\n          let memberStream = allStreamsPaged.find((stream) => {\r\n            if (\r\n              Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== ''\r\n            ) {\r\n              return stream.producerId == 'youyou' || stream.producerId == 'youyouyou';\r\n            }\r\n            return false; // Add a return statement here\r\n          });\r\n          if (memberStream && !remainingStreams.includes(memberStream)) {\r\n            remainingStreams.unshift(memberStream);\r\n          }\r\n        }\r\n        let remainingPaginatedStreams = [];\r\n\r\n        if (remainingStreams.length > 0) {\r\n          firstPage = remainingStreams.slice(0, limit_);\r\n          remainingPaginatedStreams.push(firstPage);\r\n          for (let i = limit_; i < remainingStreams.length; i += limit) {\r\n            page = remainingStreams.slice(i, i + limit);\r\n            remainingPaginatedStreams.push(page);\r\n          }\r\n        }\r\n\r\n        mainRoomsLength = remainingPaginatedStreams.length;\r\n        updateMainRoomsLength(mainRoomsLength);\r\n        // Add the remaining streams to the beginning of the paginatedStreams\r\n        for (let i = remainingPaginatedStreams.length - 1; i >= 0; i--) {\r\n          paginatedStreams.unshift(remainingPaginatedStreams[i]);\r\n        }\r\n      } else {\r\n        firstPage = allStreamsPaged.slice(0, limit_);\r\n        paginatedStreams.push(firstPage);\r\n\r\n        for (let i = limit_; i < allStreamsPaged.length; i += limit) {\r\n          page = allStreamsPaged.slice(i, i + limit);\r\n          paginatedStreams.push(page);\r\n        }\r\n      }\r\n\r\n      // State updates\r\n      updateP_activeNames(p_activeNames);\r\n      updateActiveNames(activeNames);\r\n      updateDispActiveNames(dispActiveNames);\r\n      updateNewLimitedStreams(newLimitedStreams);\r\n      updateNon_alVideoStreams(non_alVideoStreams);\r\n      updateRef_participants(ref_participants);\r\n      updateSortAudioLoudness(sortAudioLoudness);\r\n      updateMixed_alVideoStreams(mixed_alVideoStreams);\r\n      updateNon_alVideoStreams_muted(non_alVideoStreams_muted);\r\n      updatePaginatedStreams(paginatedStreams);\r\n\r\n      prevDoPaginate = doPaginate;\r\n      doPaginate = false;\r\n      updatePrevDoPaginate(prevDoPaginate);\r\n      updateDoPaginate(doPaginate);\r\n\r\n      let isActive = false;\r\n\r\n      if (paginatedStreams.length > 1) {\r\n        if (!shareScreenStarted && !shared) {\r\n          doPaginate = true;\r\n        }\r\n        updateDoPaginate(doPaginate);\r\n\r\n        if (currentUserPage > paginatedStreams.length - 1) {\r\n          if (breakOutRoomStarted && !breakOutRoomEnded) {\r\n            currentUserPage = 0;\r\n          } else {\r\n            currentUserPage = paginatedStreams.length - 1;\r\n          }\r\n        } else if (currentUserPage == 0) {\r\n          isActive = true;\r\n        }\r\n        updateCurrentUserPage(currentUserPage);\r\n        updateNumberPages(paginatedStreams.length - 1);\r\n\r\n        if (screenChanged) {\r\n          await dispStreams({\r\n            lStreams: paginatedStreams[0],\r\n            ind: 0,\r\n            parameters,\r\n          });\r\n        } else {\r\n          await dispStreams({\r\n            lStreams: paginatedStreams[0],\r\n            ind: 0,\r\n            auto: true,\r\n            parameters,\r\n          });\r\n        }\r\n\r\n        if (!isActive) {\r\n          const currentPageBreak = currentUserPage - mainRoomsLength;\r\n          await dispStreams({\r\n            lStreams: paginatedStreams[currentUserPage],\r\n            ind: currentUserPage,\r\n            parameters,\r\n            breakRoom: currentPageBreak,\r\n            inBreakRoom: currentPageBreak >= 0,\r\n          });\r\n        }\r\n      } else {\r\n        currentUserPage = 0;\r\n        updateCurrentUserPage(currentUserPage);\r\n\r\n        if (screenChanged) {\r\n          await dispStreams({\r\n            lStreams: paginatedStreams[0],\r\n            ind: 0,\r\n            parameters,\r\n          });\r\n        } else {\r\n          await dispStreams({\r\n            lStreams: paginatedStreams[0],\r\n            ind: 0,\r\n            auto: true,\r\n            parameters,\r\n          });\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.log('changeVids error', error);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nexport interface CheckGridOptions {\r\n  rows: number;\r\n  cols: number;\r\n  actives: number;\r\n}\r\n\r\nexport type CheckGridType = (\r\n  options: CheckGridOptions,\r\n) => Promise<[boolean, number, number, number, number, number, number] | void>;\r\n\r\n  /**\r\n   * Checks the grid configuration and calculates various parameters based on the number of rows, columns, and active elements.\r\n   *\r\n   * @param {CheckGridOptions} options - The options for checking the grid.\r\n   * @param {number} options.rows - The number of rows in the grid.\r\n   * @param {number} options.cols - The number of columns in the grid.\r\n   * @param {number} options.actives - The number of active elements in the grid.\r\n   * @returns {Promise<[boolean, number, number, number, number, number, number] | void>} A promise that resolves to a tuple containing:\r\n   * - `removeAltGrid` (boolean): Indicates whether to remove the alternate grid.\r\n   * - `numtoadd` (number): The number of elements to add.\r\n   * - `numRows` (number): The number of rows.\r\n   * - `numCols` (number): The number of columns.\r\n   * - `remainingVideos` (number): The number of remaining videos.\r\n   * - `actualRows` (number): The actual number of rows.\r\n   * - `lastrowcols` (number): The number of columns in the last row.\r\n   *\r\n   * If an error occurs, it logs the error to the console.\r\n   *\r\n   *   *\r\n   * @example\r\n   * ```typescript\r\n   * const options = {\r\n   *   rows: 3,\r\n   *   cols: 4,\r\n   *   actives: 10,\r\n   * };\r\n   *\r\n   * const result = await checkGridService.checkGrid(options);\r\n   * console.log(result);\r\n   * // Output could be: [false, 2, 3, 4, 2, 3, 2]\r\n   * ```\r\n   */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CheckGrid {\r\n\r\n  async checkGrid({\r\n    rows,\r\n    cols,\r\n    actives,\r\n  }: CheckGridOptions): Promise<[boolean, number, number, number, number, number, number] | void> {\r\n    try {\r\n      let numRows = 0;\r\n      let numCols = 0;\r\n      let lastrow = 0;\r\n      let lastrowcols = 0;\r\n      let remainingVideos = 0;\r\n      let numtoadd = 0;\r\n      let actualRows = 0;\r\n      let removeAltGrid = false;\r\n\r\n      if (rows * cols !== actives) {\r\n        if (rows * cols > actives) {\r\n          const res = actives - (rows - 1) * cols;\r\n          if (cols * 0.5 < res) {\r\n            lastrow = rows;\r\n            lastrowcols = res;\r\n            remainingVideos = lastrowcols;\r\n          } else {\r\n            lastrowcols = res + cols;\r\n            lastrow = rows - 1;\r\n            remainingVideos = lastrowcols;\r\n          }\r\n\r\n          numRows = lastrow - 1;\r\n          numCols = cols;\r\n          numtoadd = (lastrow - 1) * numCols;\r\n          actualRows = lastrow;\r\n\r\n          removeAltGrid = false;\r\n        }\r\n      } else {\r\n        // Perfect fit\r\n        numCols = cols;\r\n        numRows = rows;\r\n        lastrow = rows;\r\n        lastrowcols = cols;\r\n        remainingVideos = 0;\r\n        numtoadd = lastrow * numCols;\r\n        actualRows = lastrow;\r\n        removeAltGrid = true;\r\n      }\r\n\r\n      return [removeAltGrid, numtoadd, numRows, numCols, remainingVideos, actualRows, lastrowcols];\r\n    } catch (error) {\r\n      console.log('checkGrid error', error);\r\n      throw error;\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface CheckPermissionOptions {\r\n  audioSetting: string;\r\n  videoSetting: string;\r\n  screenshareSetting: string;\r\n  chatSetting: string;\r\n  permissionType: 'audioSetting' | 'videoSetting' | 'screenshareSetting' | 'chatSetting';\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type CheckPermissionType = (options: CheckPermissionOptions) => Promise<number>;\r\n\r\n  /**\r\n   * Checks the permission based on the provided settings.\r\n   *\r\n   * @param {CheckPermissionOptions} options - The options for checking permissions.\r\n   * @param {string} options.permissionType - The type of permission to check. Can be \"audioSetting\", \"videoSetting\", \"screenshareSetting\", or \"chatSetting\".\r\n   * @param {string} options.audioSetting - The setting for audio permission. Can be \"allow\", \"approval\", or other.\r\n   * @param {string} options.videoSetting - The setting for video permission. Can be \"allow\", \"approval\", or other.\r\n   * @param {string} options.screenshareSetting - The setting for screenshare permission. Can be \"allow\", \"approval\", or other.\r\n   * @param {string} options.chatSetting - The setting for chat permission. Can be \"allow\", \"approval\", or other.\r\n   * @returns {Promise<number>} - Returns 0 if the setting is \"allow\", 1 if the setting is \"approval\", and 2 for other settings or invalid permission types.\r\n   * @throws Will throw an error if an unexpected error occurs during the permission check.\r\n   *\r\n   * @example\r\n   * const options = {\r\n   *   permissionType: 'videoSetting',\r\n   *   audioSetting: 'allow',\r\n   *   videoSetting: 'approval',\r\n   *   screenshareSetting: 'deny',\r\n   *   chatSetting: 'allow',\r\n   * };\r\n   *\r\n   * const result = await checkPermissionService.checkPermission(options);\r\n   * console.log(result);\r\n   * // Output: 1 (since videoSetting is 'approval')\r\n   */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CheckPermission {\r\n  /**\r\n   * Checks the permission based on the provided settings.\r\n   *\r\n   * @param {CheckPermissionOptions} options - The options for checking permissions.\r\n   * @param {string} options.permissionType - The type of permission to check. Can be \"audioSetting\", \"videoSetting\", \"screenshareSetting\", or \"chatSetting\".\r\n   * @param {string} options.audioSetting - The setting for audio permission. Can be \"allow\", \"approval\", or other.\r\n   * @param {string} options.videoSetting - The setting for video permission. Can be \"allow\", \"approval\", or other.\r\n   * @param {string} options.screenshareSetting - The setting for screenshare permission. Can be \"allow\", \"approval\", or other.\r\n   * @param {string} options.chatSetting - The setting for chat permission. Can be \"allow\", \"approval\", or other.\r\n   * @returns {Promise<number>} - Returns 0 if the setting is \"allow\", 1 if the setting is \"approval\", and 2 for other settings or invalid permission types.\r\n   * @throws Will throw an error if an unexpected error occurs during the permission check.\r\n   */\r\n\r\n  async checkPermission({\r\n    permissionType,\r\n    audioSetting,\r\n    videoSetting,\r\n    screenshareSetting,\r\n    chatSetting,\r\n  }: CheckPermissionOptions): Promise<number> {\r\n    try {\r\n      // Perform a switch case to check for the permissionType and return the response\r\n      switch (permissionType) {\r\n        case 'audioSetting':\r\n          if (audioSetting === 'allow') {\r\n            return 0;\r\n          } else if (audioSetting === 'approval') {\r\n            return 1;\r\n          } else {\r\n            return 2;\r\n          }\r\n        case 'videoSetting':\r\n          if (videoSetting === 'allow') {\r\n            return 0;\r\n          } else if (videoSetting === 'approval') {\r\n            return 1;\r\n          } else {\r\n            return 2;\r\n          }\r\n        case 'screenshareSetting':\r\n          if (screenshareSetting === 'allow') {\r\n            return 0;\r\n          } else if (screenshareSetting === 'approval') {\r\n            return 1;\r\n          } else {\r\n            return 2;\r\n          }\r\n        case 'chatSetting':\r\n          if (chatSetting === 'allow') {\r\n            return 0;\r\n          } else if (chatSetting === 'approval') {\r\n            return 1;\r\n          } else {\r\n            return 2;\r\n          }\r\n        default:\r\n          // throw new Error(`Invalid permissionType: ${permissionType}`);\r\n          return 2;\r\n      }\r\n    } catch (error) {\r\n      // console.log('checkPermission error', error);\r\n      // throw error;\r\n      return 2;\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  StopShareScreenType,\r\n  StopShareScreenParameters,\r\n  RequestScreenShareType,\r\n  RequestScreenShareParameters,\r\n  ShowAlert,\r\n} from '../@types/types';\r\nexport interface CheckScreenShareParameters\r\n  extends StopShareScreenParameters,\r\n    RequestScreenShareParameters {\r\n  shared: boolean;\r\n  whiteboardStarted: boolean;\r\n  whiteboardEnded: boolean;\r\n  breakOutRoomStarted: boolean;\r\n  breakOutRoomEnded: boolean;\r\n  showAlert?: ShowAlert;\r\n\r\n  // Mediasfu functions\r\n  stopShareScreen: StopShareScreenType;\r\n  requestScreenShare: RequestScreenShareType;\r\n\r\n  getUpdatedAllParams: () => CheckScreenShareParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface CheckScreenShareOptions {\r\n  parameters: CheckScreenShareParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type CheckScreenShareType = (options: CheckScreenShareOptions) => Promise<void>;\r\n\r\n  /**\r\n   * Checks the current screen sharing status and either stops or requests screen sharing based on the provided parameters.\r\n   *\r\n   * @param {CheckScreenShareOptions} options - The options for checking screen share.\r\n   * @param {Object} options.parameters - The parameters for screen sharing.\r\n   * @param {boolean} options.parameters.shared - Indicates if the screen is currently being shared.\r\n   * @param {Function} [options.parameters.showAlert] - Function to show alerts.\r\n   * @param {boolean} options.parameters.whiteboardStarted - Indicates if the whiteboard session has started.\r\n   * @param {boolean} options.parameters.whiteboardEnded - Indicates if the whiteboard session has ended.\r\n   * @param {boolean} options.parameters.breakOutRoomStarted - Indicates if the breakout room session has started.\r\n   * @param {boolean} options.parameters.breakOutRoomEnded - Indicates if the breakout room session has ended.\r\n   * @param {Function} options.parameters.stopShareScreen - Function to stop screen sharing.\r\n   * @param {Function} options.parameters.requestScreenShare - Function to request screen sharing.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the screen sharing status has been checked and the appropriate action has been taken.\r\n   *\r\n   * @throws Will log an error message if an error occurs during the process.\r\n   *\r\n   * @example\r\n   * const options = {\r\n   *   parameters: {\r\n   *     shared: false,\r\n   *     whiteboardStarted: false,\r\n   *     whiteboardEnded: false,\r\n   *     breakOutRoomStarted: false,\r\n   *     breakOutRoomEnded: false,\r\n   *     stopShareScreen: async () => { /* Logic to stop screen sharing *\\/ },\r\n   *     requestScreenShare: async () => { /* Logic to request screen sharing *\\/ },\r\n   *     showAlert: (alert) => { console.log(alert.message); },\r\n   *   },\r\n   * };\r\n   *\r\n   * await checkScreenShareService.checkScreenShare(options);\r\n   * // Output: Logic to request screen sharing will be executed.\r\n   */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CheckScreenShare {\r\n  /**\r\n   * Checks the current screen sharing status and either stops or requests screen sharing based on the provided parameters.\r\n   *\r\n   * @param {CheckScreenShareOptions} options - The options for checking screen share.\r\n   * @param {Object} options.parameters - The parameters for screen sharing.\r\n   * @param {boolean} options.parameters.shared - Indicates if the screen is currently being shared.\r\n   * @param {Function} [options.parameters.showAlert] - Function to show alerts.\r\n   * @param {boolean} options.parameters.whiteboardStarted - Indicates if the whiteboard session has started.\r\n   * @param {boolean} options.parameters.whiteboardEnded - Indicates if the whiteboard session has ended.\r\n   * @param {boolean} options.parameters.breakOutRoomStarted - Indicates if the breakout room session has started.\r\n   * @param {boolean} options.parameters.breakOutRoomEnded - Indicates if the breakout room session has ended.\r\n   * @param {Function} options.parameters.stopShareScreen - Function to stop screen sharing.\r\n   * @param {Function} options.parameters.requestScreenShare - Function to request screen sharing.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the screen sharing status has been checked and the appropriate action has been taken.\r\n   *\r\n   * @throws Will log an error message if an error occurs during the process.\r\n   */\r\n  checkScreenShare = async ({ parameters }: CheckScreenShareOptions): Promise<void> => {\r\n    try {\r\n      const {\r\n        shared,\r\n        showAlert,\r\n        whiteboardStarted,\r\n        whiteboardEnded,\r\n        breakOutRoomStarted,\r\n        breakOutRoomEnded,\r\n\r\n        // mediasfu functions\r\n        stopShareScreen,\r\n        requestScreenShare,\r\n      } = parameters;\r\n\r\n      // Stop screen share if already shared or request screen share if not shared\r\n      if (shared) {\r\n        if (whiteboardStarted && !whiteboardEnded) {\r\n          showAlert?.({\r\n            message: 'Screen share is not allowed when whiteboard is active',\r\n            type: 'danger',\r\n          });\r\n          return;\r\n        }\r\n        await stopShareScreen({ parameters });\r\n      } else {\r\n        // Can't share if breakout room is active\r\n        if (breakOutRoomStarted && !breakOutRoomEnded) {\r\n          showAlert?.({\r\n            message: 'Screen share is not allowed when breakout room is active',\r\n            type: 'danger',\r\n          });\r\n          return;\r\n        }\r\n\r\n        if (whiteboardStarted && !whiteboardEnded) {\r\n          showAlert?.({\r\n            message: 'Screen share is not allowed when whiteboard is active',\r\n            type: 'danger',\r\n          });\r\n          return;\r\n        }\r\n        await requestScreenShare({ parameters });\r\n      }\r\n    } catch (error) {\r\n      console.log('checkScreenShare error', error);\r\n      // throw error;\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  Stream,\r\n  Participant,\r\n  ReorderStreamsType,\r\n  ReorderStreamsParameters,\r\n  PrepopulateUserMediaParameters,\r\n  PrepopulateUserMediaType,\r\n  GetVideosType,\r\n  RePortType,\r\n  RePortParameters,\r\n  EventType,\r\n} from '../@types/types';\r\n\r\nexport interface CloseAndResizeParameters\r\n  extends ReorderStreamsParameters,\r\n    PrepopulateUserMediaParameters,\r\n    RePortParameters {\r\n  allAudioStreams: (Stream | Participant)[];\r\n  allVideoStreams: (Stream | Participant)[];\r\n  activeNames: string[];\r\n  participants: Participant[];\r\n  streamNames: Stream[];\r\n  recordingDisplayType: 'video' | 'media' | 'all';\r\n  recordingVideoOptimized: boolean;\r\n  adminIDStream?: string;\r\n  newLimitedStreams: (Stream | Participant)[];\r\n  newLimitedStreamsIDs: string[];\r\n  oldAllStreams: (Stream | Participant)[];\r\n  shareScreenStarted: boolean;\r\n  shared: boolean;\r\n  meetingDisplayType: string;\r\n  defer_receive: boolean;\r\n  lock_screen: boolean;\r\n  firstAll: boolean;\r\n  first_round: boolean;\r\n  gotAllVids: boolean;\r\n  eventType: EventType;\r\n  hostLabel: string;\r\n  shareEnded: boolean;\r\n  updateMainWindow: boolean;\r\n  updateActiveNames: (activeNames: string[]) => void;\r\n  updateAllAudioStreams: (allAudioStreams: (Stream | Participant)[]) => void;\r\n  updateShareScreenStarted: (shareScreenStarted: boolean) => void;\r\n  updateUpdateMainWindow: (updateMainWindow: boolean) => void;\r\n  updateNewLimitedStreams: (newLimitedStreams: (Stream | Participant)[]) => void;\r\n  updateOldAllStreams: (oldAllStreams: (Stream | Participant)[]) => void;\r\n  updateDefer_receive: (defer_receive: boolean) => void;\r\n  updateMainHeightWidth: (heightWidth: number) => void;\r\n  updateShareEnded: (shareEnded: boolean) => void;\r\n  updateLock_screen: (lock_screen: boolean) => void;\r\n  updateFirstAll: (firstAll: boolean) => void;\r\n  updateFirst_round: (first_round: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  reorderStreams: ReorderStreamsType;\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n  getVideos: GetVideosType;\r\n  rePort: RePortType;\r\n  getUpdatedAllParams: () => CloseAndResizeParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface CloseAndResizeOptions {\r\n  producerId: string;\r\n  kind: string;\r\n  parameters: CloseAndResizeParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type CloseAndResizeType = (options: CloseAndResizeOptions) => Promise<void>;\r\n\r\n  /**\r\n   * Closes and resizes the video and audio elements based on the provided options.\r\n   *\r\n   * @param {CloseAndResizeOptions} options - The options for closing and resizing.\r\n   * @param {string} options.producerId - The ID of the producer.\r\n   * @param {string} options.kind - The kind of media (audio, video, screenshare, or screen).\r\n   * @param {object} options.parameters - The parameters for the operation.\r\n   * @param {function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {Array} options.parameters.allAudioStreams - Array of all audio streams.\r\n   * @param {Array} options.parameters.allVideoStreams - Array of all video streams.\r\n   * @param {Array} options.parameters.activeNames - Array of active participant names.\r\n   * @param {Array} options.parameters.participants - Array of participants.\r\n   * @param {Array} options.parameters.streamNames - Array of stream names.\r\n   * @param {string} options.parameters.recordingDisplayType - Type of recording display.\r\n   * @param {boolean} options.parameters.recordingVideoOptimized - Whether recording is video optimized.\r\n   * @param {string} options.parameters.adminIDStream - ID of the admin stream.\r\n   * @param {Array} options.parameters.newLimitedStreams - Array of new limited streams.\r\n   * @param {Array} options.parameters.newLimitedStreamsIDs - Array of new limited stream IDs.\r\n   * @param {Array} options.parameters.oldAllStreams - Array of old all streams.\r\n   * @param {boolean} options.parameters.shareScreenStarted - Whether screen sharing has started.\r\n   * @param {boolean} options.parameters.shared - Whether sharing is active.\r\n   * @param {string} options.parameters.meetingDisplayType - Type of meeting display.\r\n   * @param {boolean} options.parameters.defer_receive - Whether to defer receiving.\r\n   * @param {boolean} options.parameters.lock_screen - Whether the screen is locked.\r\n   * @param {boolean} options.parameters.firstAll - Whether it is the first all.\r\n   * @param {boolean} options.parameters.first_round - Whether it is the first round.\r\n   * @param {boolean} options.parameters.gotAllVids - Whether all videos are received.\r\n   * @param {string} options.parameters.eventType - Type of event.\r\n   * @param {string} options.parameters.hostLabel - Label of the host.\r\n   * @param {boolean} options.parameters.shareEnded - Whether sharing has ended.\r\n   * @param {boolean} options.parameters.updateMainWindow - Whether to update the main window.\r\n   * @param {function} options.parameters.updateActiveNames - Function to update active names.\r\n   * @param {function} options.parameters.updateAllAudioStreams - Function to update all audio streams.\r\n   * @param {function} options.parameters.updateAllVideoStreams - Function to update all video streams.\r\n   * @param {function} options.parameters.updateShareScreenStarted - Function to update share screen started status.\r\n   * @param {function} options.parameters.updateUpdateMainWindow - Function to update main window status.\r\n   * @param {function} options.parameters.updateNewLimitedStreams - Function to update new limited streams.\r\n   * @param {function} options.parameters.updateOldAllStreams - Function to update old all streams.\r\n   * @param {function} options.parameters.updateDefer_receive - Function to update defer receive status.\r\n   * @param {function} options.parameters.updateMainHeightWidth - Function to update main height and width.\r\n   * @param {function} options.parameters.updateShareEnded - Function to update share ended status.\r\n   * @param {function} options.parameters.updateLock_screen - Function to update lock screen status.\r\n   * @param {function} options.parameters.updateFirstAll - Function to update first all status.\r\n   * @param {function} options.parameters.updateFirst_round - Function to update first round status.\r\n   * @param {function} options.parameters.reorderStreams - Function to reorder streams.\r\n   * @param {function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\r\n   * @param {function} options.parameters.getVideos - Function to get videos.\r\n   * @param {function} options.parameters.rePort - Function to report.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n   *\r\n   * @example\r\n   * const options = {\r\n   *   producerId: '12345',\r\n   *   kind: 'video',\r\n   *   parameters: {\r\n   *     getUpdatedAllParams: () => { /* Logic to get updated parameters *\\/ },\r\n   *     allAudioStreams: [],\r\n   *     allVideoStreams: [],\r\n   *     activeNames: ['Participant1', 'Participant2'],\r\n   *     participants: [],\r\n   *     streamNames: [],\r\n   *     recordingDisplayType: 'video',\r\n   *     recordingVideoOptimized: true,\r\n   *     adminIDStream: 'admin123',\r\n   *     newLimitedStreams: [],\r\n   *     newLimitedStreamsIDs: [],\r\n   *     oldAllStreams: [],\r\n   *     shareScreenStarted: false,\r\n   *     shared: false,\r\n   *     meetingDisplayType: 'media',\r\n   *     defer_receive: false,\r\n   *     lock_screen: false,\r\n   *     firstAll: false,\r\n   *     first_round: false,\r\n   *     gotAllVids: false,\r\n   *     eventType: 'conference',\r\n   *     hostLabel: 'Host',\r\n   *     shareEnded: false,\r\n   *     updateMainWindow: false,\r\n   *     updateActiveNames: (names) => { /* Logic to update active names *\\/ },\r\n   *     updateAllAudioStreams: (streams) => { /* Logic to update audio streams *\\/ },\r\n   *     updateShareScreenStarted: (status) => { /* Logic to update share screen status *\\/ },\r\n   *     updateUpdateMainWindow: (status) => { /* Logic to update main window status *\\/ },\r\n   *     updateNewLimitedStreams: (streams) => { /* Logic to update new limited streams *\\/ },\r\n   *     updateOldAllStreams: (streams) => { /* Logic to update old streams *\\/ },\r\n   *     updateDefer_receive: (status) => { /* Logic to update defer receive status *\\/ },\r\n   *     updateMainHeightWidth: (size) => { /* Logic to update main height and width *\\/ },\r\n   *     updateShareEnded: (status) => { /* Logic to update share ended status *\\/ },\r\n   *     updateLock_screen: (status) => { /* Logic to update lock screen status *\\/ },\r\n   *     updateFirstAll: (status) => { /* Logic to update first all status *\\/ },\r\n   *     updateFirst_round: (status) => { /* Logic to update first round status *\\/ },\r\n   *     reorderStreams: async () => { /* Logic to reorder streams *\\/ },\r\n   *     prepopulateUserMedia: async () => { /* Logic to prepopulate user media *\\/ },\r\n   *     getVideos: async () => { /* Logic to get videos *\\/ },\r\n   *     rePort: async () => { /* Logic to report *\\/ },\r\n   *   },\r\n   * };\r\n   *\r\n   * await closeAndResizeService.closeAndResize(options);\r\n   * // The operation will adjust the video and audio elements as per the given parameters.\r\n   */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CloseAndResize {\r\n  /**\r\n   * Closes and resizes the video and audio elements based on the provided options.\r\n   *\r\n   * @param {CloseAndResizeOptions} options - The options for closing and resizing.\r\n   * @param {string} options.producerId - The ID of the producer.\r\n   * @param {string} options.kind - The kind of media (audio, video, screenshare, or screen).\r\n   * @param {object} options.parameters - The parameters for the operation.\r\n   * @param {function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {Array} options.parameters.allAudioStreams - Array of all audio streams.\r\n   * @param {Array} options.parameters.allVideoStreams - Array of all video streams.\r\n   * @param {Array} options.parameters.activeNames - Array of active participant names.\r\n   * @param {Array} options.parameters.participants - Array of participants.\r\n   * @param {Array} options.parameters.streamNames - Array of stream names.\r\n   * @param {string} options.parameters.recordingDisplayType - Type of recording display.\r\n   * @param {boolean} options.parameters.recordingVideoOptimized - Whether recording is video optimized.\r\n   * @param {string} options.parameters.adminIDStream - ID of the admin stream.\r\n   * @param {Array} options.parameters.newLimitedStreams - Array of new limited streams.\r\n   * @param {Array} options.parameters.newLimitedStreamsIDs - Array of new limited stream IDs.\r\n   * @param {Array} options.parameters.oldAllStreams - Array of old all streams.\r\n   * @param {boolean} options.parameters.shareScreenStarted - Whether screen sharing has started.\r\n   * @param {boolean} options.parameters.shared - Whether sharing is active.\r\n   * @param {string} options.parameters.meetingDisplayType - Type of meeting display.\r\n   * @param {boolean} options.parameters.defer_receive - Whether to defer receiving.\r\n   * @param {boolean} options.parameters.lock_screen - Whether the screen is locked.\r\n   * @param {boolean} options.parameters.firstAll - Whether it is the first all.\r\n   * @param {boolean} options.parameters.first_round - Whether it is the first round.\r\n   * @param {boolean} options.parameters.gotAllVids - Whether all videos are received.\r\n   * @param {string} options.parameters.eventType - Type of event.\r\n   * @param {string} options.parameters.hostLabel - Label of the host.\r\n   * @param {boolean} options.parameters.shareEnded - Whether sharing has ended.\r\n   * @param {boolean} options.parameters.updateMainWindow - Whether to update the main window.\r\n   * @param {function} options.parameters.updateActiveNames - Function to update active names.\r\n   * @param {function} options.parameters.updateAllAudioStreams - Function to update all audio streams.\r\n   * @param {function} options.parameters.updateAllVideoStreams - Function to update all video streams.\r\n   * @param {function} options.parameters.updateShareScreenStarted - Function to update share screen started status.\r\n   * @param {function} options.parameters.updateUpdateMainWindow - Function to update main window status.\r\n   * @param {function} options.parameters.updateNewLimitedStreams - Function to update new limited streams.\r\n   * @param {function} options.parameters.updateOldAllStreams - Function to update old all streams.\r\n   * @param {function} options.parameters.updateDefer_receive - Function to update defer receive status.\r\n   * @param {function} options.parameters.updateMainHeightWidth - Function to update main height and width.\r\n   * @param {function} options.parameters.updateShareEnded - Function to update share ended status.\r\n   * @param {function} options.parameters.updateLock_screen - Function to update lock screen status.\r\n   * @param {function} options.parameters.updateFirstAll - Function to update first all status.\r\n   * @param {function} options.parameters.updateFirst_round - Function to update first round status.\r\n   * @param {function} options.parameters.reorderStreams - Function to reorder streams.\r\n   * @param {function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\r\n   * @param {function} options.parameters.getVideos - Function to get videos.\r\n   * @param {function} options.parameters.rePort - Function to report.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n   */\r\n\r\n  closeAndResize = async ({\r\n    producerId,\r\n    kind,\r\n    parameters,\r\n  }: CloseAndResizeOptions): Promise<void> => {\r\n    let { getUpdatedAllParams } = parameters;\r\n    parameters = getUpdatedAllParams();\r\n\r\n    let {\r\n      allAudioStreams,\r\n      allVideoStreams,\r\n      activeNames,\r\n      participants,\r\n      streamNames,\r\n      recordingDisplayType,\r\n      recordingVideoOptimized,\r\n      adminIDStream,\r\n      newLimitedStreams,\r\n      newLimitedStreamsIDs,\r\n      oldAllStreams,\r\n      shareScreenStarted,\r\n      shared,\r\n      meetingDisplayType,\r\n      defer_receive,\r\n      lock_screen,\r\n      firstAll,\r\n      first_round,\r\n      gotAllVids,\r\n      eventType,\r\n\r\n      hostLabel,\r\n      shareEnded,\r\n      updateMainWindow,\r\n      updateActiveNames,\r\n      updateAllAudioStreams,\r\n      updateAllVideoStreams,\r\n\r\n      updateShareScreenStarted,\r\n      updateUpdateMainWindow,\r\n      updateNewLimitedStreams,\r\n      updateOldAllStreams,\r\n      updateDefer_receive,\r\n      updateMainHeightWidth,\r\n      updateShareEnded,\r\n      updateLock_screen,\r\n      updateFirstAll,\r\n      updateFirst_round,\r\n\r\n      //mediasfu functions\r\n      reorderStreams,\r\n      prepopulateUserMedia,\r\n      getVideos,\r\n      rePort,\r\n    } = parameters;\r\n\r\n    //function to close and resize the video and audio elements\r\n\r\n    let participant: Participant | undefined;\r\n\r\n    if (kind === 'audio') {\r\n      //stop the audio by removing the miniAudio with id = producerId\r\n\r\n      //remove the audio from the allAudioStreams array\r\n      allAudioStreams = allAudioStreams.filter(function (audioStream) {\r\n        return audioStream.producerId !== producerId;\r\n      });\r\n\r\n      updateAllAudioStreams(allAudioStreams);\r\n\r\n      if (recordingDisplayType == 'video' && recordingVideoOptimized == true) {\r\n        // do nothing\r\n      } else {\r\n        //get the name of the participant with the producerId\r\n        participant = participants.find((obj) => obj.audioID === producerId);\r\n\r\n        if (participant) {\r\n          //check if the participants videoID is not null or \"\"\r\n          if (participant.videoID !== null && participant.videoID !== '') {\r\n            // do nothing\r\n          } else {\r\n            //remove the participant from the activeNames array\r\n            activeNames = activeNames.filter(function (name) {\r\n              return name !== participant?.name;\r\n            });\r\n            updateActiveNames(activeNames);\r\n          }\r\n        }\r\n      }\r\n\r\n      let checker = false;\r\n      let alt_checker = false;\r\n\r\n      if (meetingDisplayType == 'video' && participant) {\r\n        checker =\r\n          participant[0].videoID != null &&\r\n          participant[0].videoID != '' &&\r\n          participant[0].videoID != undefined;\r\n      } else {\r\n        checker = true;\r\n        alt_checker = true;\r\n      }\r\n\r\n      if (checker) {\r\n        if (shareScreenStarted || shared) {\r\n          if (!alt_checker) {\r\n            await reorderStreams({ parameters });\r\n          }\r\n        } else {\r\n          if (alt_checker && meetingDisplayType != 'video') {\r\n            await reorderStreams({ add: false, screenChanged: true, parameters });\r\n          }\r\n        }\r\n      }\r\n    } else if (kind === 'video') {\r\n      //update the video elements by removing the miniVideo with id = producerId\r\n      //remove the video from the allVideoStreams array\r\n\r\n      //check if producerId == adminidstream\r\n      if (producerId == adminIDStream) {\r\n        updateMainWindow = true;\r\n        updateUpdateMainWindow(updateMainWindow);\r\n      }\r\n\r\n      try {\r\n        allVideoStreams = allVideoStreams.filter(function (videoStream) {\r\n          return videoStream.producerId !== producerId;\r\n        });\r\n\r\n        updateAllVideoStreams(allVideoStreams);\r\n\r\n        try {\r\n          //try remove it from oldVideoStreams\r\n          oldAllStreams = oldAllStreams.filter(function (videoStream) {\r\n            return videoStream.producerId !== producerId;\r\n          });\r\n\r\n          updateOldAllStreams(oldAllStreams);\r\n        } catch {\r\n          /* handle error */\r\n        }\r\n\r\n        try {\r\n          //try remove it from newLimitedStreams\r\n          newLimitedStreams = newLimitedStreams.filter(function (videoStream) {\r\n            return videoStream.producerId !== producerId;\r\n          });\r\n\r\n          updateNewLimitedStreams(newLimitedStreams);\r\n        } catch {\r\n          /* handle error */\r\n        }\r\n      } catch (error) {\r\n        try {\r\n          //try remove it from oldVideoStreams\r\n          oldAllStreams = oldAllStreams.filter(function (videoStream) {\r\n            return videoStream.producerId !== producerId;\r\n          });\r\n          updateOldAllStreams(oldAllStreams);\r\n        } catch {\r\n          /* handle error */\r\n        }\r\n      }\r\n\r\n      try {\r\n        //remove the participant from activeNames\r\n        activeNames = activeNames.filter(function (name) {\r\n          //get the participant with the producerId\r\n          let participant = streamNames.find((obj) => obj.producerId === producerId);\r\n\r\n          return name !== (participant?.name ?? '');\r\n        });\r\n\r\n        updateActiveNames(activeNames);\r\n      } catch {\r\n        /* handle error */\r\n      }\r\n\r\n      if (lock_screen) {\r\n        defer_receive = true;\r\n        // check if the video is the one being displayed (i.e. (newLimitedStreamsIDs))\r\n        if (newLimitedStreamsIDs.includes(producerId)) {\r\n          await prepopulateUserMedia({ name: hostLabel, parameters });\r\n          await reorderStreams({ add: false, screenChanged: true, parameters });\r\n        }\r\n      } else {\r\n        await prepopulateUserMedia({ name: hostLabel, parameters });\r\n        await reorderStreams({ add: false, screenChanged: true, parameters });\r\n      }\r\n    } else if (kind === 'screenshare' || kind === 'screen') {\r\n      //update the video elements by removing the mainVideo with id = producerId\r\n      updateMainWindow = true;\r\n\r\n      //screenshare stuff\r\n      shareScreenStarted = false;\r\n      shareEnded = true;\r\n\r\n      lock_screen = false;\r\n      firstAll = false;\r\n      first_round = false;\r\n\r\n      updateUpdateMainWindow(updateMainWindow);\r\n      updateShareScreenStarted(shareScreenStarted);\r\n      updateShareEnded(shareEnded);\r\n      updateLock_screen(lock_screen);\r\n      updateFirstAll(firstAll);\r\n      updateFirst_round(first_round);\r\n\r\n      if (!gotAllVids || defer_receive) {\r\n        defer_receive = false;\r\n        updateDefer_receive(defer_receive);\r\n        await getVideos({\r\n          participants,\r\n          allVideoStreams,\r\n          oldAllStreams,\r\n          updateAllVideoStreams,\r\n          updateOldAllStreams,\r\n        });\r\n        await rePort({ parameters });\r\n      }\r\n\r\n      if (eventType == 'conference') {\r\n        updateMainHeightWidth(0);\r\n      }\r\n\r\n      await prepopulateUserMedia({ name: hostLabel, parameters });\r\n      await reorderStreams({ add: false, screenChanged: true, parameters });\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { TriggerType, TriggerParameters } from '../@types/types';\r\n\r\nexport interface CompareActiveNamesParameters extends TriggerParameters {\r\n  activeNames: string[];\r\n  prevActiveNames: string[];\r\n  updateActiveNames: (activeNames: string[]) => void;\r\n  updatePrevActiveNames: (prevActiveNames: string[]) => void;\r\n\r\n  // mediasfu functions\r\n  trigger: TriggerType;\r\n  getUpdatedAllParams: () => CompareActiveNamesParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface CompareActiveNamesOptions {\r\n  restart?: boolean;\r\n  parameters: CompareActiveNamesParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type CompareActiveNamesType = (options: CompareActiveNamesOptions) => Promise<void>;\r\n\r\n  /**\r\n   * Compares the current active names with the previous active names and triggers an action if there are changes.\r\n   *\r\n   * @param {CompareActiveNamesOptions} options - The options for comparing active names.\r\n   * @param {boolean} [options.restart=false] - Whether to restart the comparison.\r\n   * @param {CompareActiveNamesParameters} options.parameters - The parameters for the comparison.\r\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {string[]} options.parameters.activeNames - The current active names.\r\n   * @param {string[]} options.parameters.prevActiveNames - The previous active names.\r\n   * @param {Function} options.parameters.updatePrevActiveNames - Function to update the previous active names.\r\n   * @param {Function} options.parameters.trigger - Function to trigger an action when names change.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the comparison is complete.\r\n   *\r\n   * @throws Will log an error message if an error occurs during the comparison.\r\n   *\r\n   * @example\r\n   * const options = {\r\n   *   restart: false,\r\n   *   parameters: {\r\n   *     getUpdatedAllParams: () => { /* Logic to get updated parameters *\\/ },\r\n   *     activeNames: ['Alice', 'Bob'],\r\n   *     prevActiveNames: ['Alice', 'Charlie'],\r\n   *     updatePrevActiveNames: (names) => { /* Logic to update previous active names *\\/ },\r\n   *     trigger: async (data) => { /* Logic to handle the trigger *\\/ },\r\n   *   },\r\n   * };\r\n   *\r\n   * await compareActiveNamesService.compareActiveNames(options);\r\n   * // If 'Bob' is not in the previous active names, it will trigger the action.\r\n   */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CompareActiveNames {\r\n  /**\r\n   * Compares the current active names with the previous active names and triggers an action if there are changes.\r\n   *\r\n   * @param {Object} options - The options for comparing active names.\r\n   * @param {boolean} [options.restart=false] - Whether to restart the comparison.\r\n   * @param {CompareActiveNamesOptions} options.parameters - The parameters for the comparison.\r\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {string[]} options.parameters.activeNames - The current active names.\r\n   * @param {string[]} options.parameters.prevActiveNames - The previous active names.\r\n   * @param {Function} options.parameters.updatePrevActiveNames - Function to update the previous active names.\r\n   * @param {Function} options.parameters.trigger - Function to trigger an action when names change.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the comparison is complete.\r\n   *\r\n   * @throws Will log an error message if an error occurs during the comparison.\r\n   */\r\n  async compareActiveNames({\r\n    restart = false,\r\n    parameters,\r\n  }: CompareActiveNamesOptions): Promise<void> {\r\n    try {\r\n      let { getUpdatedAllParams } = parameters;\r\n      parameters = getUpdatedAllParams();\r\n\r\n      let { activeNames, prevActiveNames, updatePrevActiveNames, trigger } = parameters;\r\n\r\n      // Restart the comparison if needed\r\n      if (restart) {\r\n        await trigger({ ref_ActiveNames: activeNames, parameters });\r\n        return;\r\n      }\r\n\r\n      // Array to track changes in activeNames\r\n      let nameChanged = [];\r\n\r\n      // Compare each name in activeNames\r\n      for (let i = 0; i < activeNames.length; i++) {\r\n        const currentName = activeNames[i];\r\n\r\n        // Check if the name is present in prevActiveNames\r\n        const hasNameChanged = !prevActiveNames.includes(currentName);\r\n\r\n        if (hasNameChanged) {\r\n          nameChanged.push(true);\r\n          trigger({ ref_ActiveNames: activeNames, parameters });\r\n          break;\r\n        }\r\n      }\r\n\r\n      // Count the number of true in nameChanged\r\n      let count = nameChanged.filter((value) => value === true).length;\r\n\r\n      if (count < 1) {\r\n        // Check for new names in prevActiveNames\r\n        for (let i = 0; i < prevActiveNames.length; i++) {\r\n          const currentName = prevActiveNames[i];\r\n\r\n          // Check if the name is present in activeNames\r\n          const hasNameChanged = !activeNames.includes(currentName);\r\n\r\n          // Signal change if the name is new\r\n          if (hasNameChanged) {\r\n            trigger({ ref_ActiveNames: activeNames, parameters });\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      // Update prevActiveNames with current activeNames\r\n      prevActiveNames = [...activeNames];\r\n      updatePrevActiveNames(prevActiveNames);\r\n    } catch (error) {\r\n      console.log('compareActiveNames error', error);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { ScreenState, TriggerType, TriggerParameters } from '../@types/types';\r\n\r\nexport interface CompareScreenStatesParameters extends TriggerParameters {\r\n  recordingDisplayType: 'video' | 'media' | 'all';\r\n  recordingVideoOptimized: boolean;\r\n  screenStates: ScreenState[];\r\n  prevScreenStates: ScreenState[];\r\n  activeNames: string[];\r\n\r\n  // mediasfu functions\r\n  trigger: TriggerType;\r\n  getUpdatedAllParams: () => CompareScreenStatesParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface CompareScreenStatesOptions {\r\n  restart?: boolean;\r\n  parameters: CompareScreenStatesParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type CompareScreenStatesType = (options: CompareScreenStatesOptions) => Promise<void>;\r\n\r\n/**\r\n   * Compares the current screen states with the previous screen states and triggers actions based on changes.\r\n   *\r\n   * @param {CompareScreenStatesOptions} options - The options for comparing screen states.\r\n   * @param {boolean} [options.restart=false] - Whether to restart the comparison process.\r\n   * @param {CompareScreenStatesParameters} options.parameters - The parameters for the comparison.\r\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {string} options.parameters.recordingDisplayType - The type of display being recorded.\r\n   * @param {boolean} options.parameters.recordingVideoOptimized - Whether the recording is optimized for video.\r\n   * @param {ScreenState[]} options.parameters.screenStates - The current screen states.\r\n   * @param {ScreenState[]} options.parameters.prevScreenStates - The previous screen states.\r\n   * @param {string[]} options.parameters.activeNames - The active names in the current context.\r\n   * @param {Function} options.parameters.trigger - Function to trigger actions based on changes.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the comparison and any triggered actions are complete.\r\n   *\r\n   * @throws Will log an error message if an error occurs during the comparison process.\r\n   *\r\n   * @example\r\n   * const options = {\r\n   *   restart: false,\r\n   *   parameters: {\r\n   *     getUpdatedAllParams: () => { /* Logic to get updated parameters *\\/ },\r\n   *     recordingDisplayType: 'video',\r\n   *     recordingVideoOptimized: true,\r\n   *     screenStates: [{ state: 'active' }, { state: 'inactive' }],\r\n   *     prevScreenStates: [{ state: 'inactive' }, { state: 'active' }],\r\n   *     activeNames: ['Alice', 'Bob'],\r\n   *     trigger: async (data) => { /* Logic to handle the trigger *\\/ },\r\n   *   },\r\n   * };\r\n   *\r\n   * await compareScreenStatesService.compareScreenStates(options);\r\n   * // If any screen state has changed, the trigger function will be called accordingly.\r\n   */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CompareScreenStates {\r\n  /**\r\n   * Compares the current screen states with the previous screen states and triggers actions based on changes.\r\n   *\r\n   * @param {Object} options - The options for comparing screen states.\r\n   * @param {boolean} [options.restart=false] - Whether to restart the comparison process.\r\n   * @param {CompareScreenStatesOptions} options.parameters - The parameters for the comparison.\r\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {string} options.parameters.recordingDisplayType - The type of display being recorded.\r\n   * @param {boolean} options.parameters.recordingVideoOptimized - Whether the recording is optimized for video.\r\n   * @param {Array<ScreenState>} options.parameters.screenStates - The current screen states.\r\n   * @param {Array<ScreenState>} options.parameters.prevScreenStates - The previous screen states.\r\n   * @param {Array<string>} options.parameters.activeNames - The active names in the current context.\r\n   * @param {Function} options.parameters.trigger - Function to trigger actions based on changes.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the comparison and any triggered actions are complete.\r\n   *\r\n   * @throws Will log an error message if an error occurs during the comparison process.\r\n   */\r\n  async compareScreenStates({\r\n    restart = false,\r\n    parameters,\r\n  }: CompareScreenStatesOptions): Promise<void> {\r\n    try {\r\n      let { getUpdatedAllParams } = parameters;\r\n      parameters = getUpdatedAllParams();\r\n\r\n      let {\r\n        recordingDisplayType,\r\n        recordingVideoOptimized,\r\n        screenStates,\r\n        prevScreenStates,\r\n        activeNames,\r\n        trigger,\r\n      } = parameters;\r\n\r\n      // Restart the comparison if needed\r\n      if (restart) {\r\n        // Perform necessary actions on restart\r\n        return;\r\n      }\r\n\r\n      // Compare each key-value pair in the screenStates objects\r\n      for (let i = 0; i < screenStates.length; i++) {\r\n        const currentScreenState = screenStates[i];\r\n        const prevScreenState = prevScreenStates[i];\r\n\r\n        // Check if any value has changed\r\n        const hasChanged = (Object.keys(currentScreenState) as (keyof ScreenState)[]).some(\r\n          (key) => currentScreenState[key] !== prevScreenState[key],\r\n        );\r\n\r\n        // Signal change if any value has changed\r\n        if (hasChanged) {\r\n          // Perform actions or trigger events based on the change\r\n          if (recordingDisplayType === 'video' && recordingVideoOptimized) {\r\n            await trigger({ ref_ActiveNames: activeNames, parameters });\r\n            break;\r\n          }\r\n          await trigger({ ref_ActiveNames: activeNames, parameters });\r\n          break;\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.log('compareScreenStates error', error);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n// Socket manager for media socket.\r\nimport io, { Socket } from 'socket.io-client'; // Importing socket type\r\nimport { MeetingRoomParams, RecordingParams } from \"../@types/types\";\r\n\r\n/**\r\n * Validates the provided API key or token.\r\n * @param {string} value - The API key or token to validate.\r\n * @returns {Promise<Boolean>} - True if the API key or token is valid, false otherwise.\r\n */\r\n\r\n\r\nexport interface ResponseLocalConnection {\r\n  socket?: Socket;\r\n  data?: ResponseLocalConnectionData;\r\n}\r\n\r\nexport interface ResponseLocalConnectionData {\r\n  socketId: string;\r\n  mode: string;\r\n  apiUserName?: string;\r\n  apiKey?: string;\r\n  allowRecord: boolean;\r\n  meetingRoomParams_: MeetingRoomParams;\r\n  recordingParams_: RecordingParams;\r\n}\r\n\r\nexport interface ConnectLocalSocketOptions {\r\n  link: string;\r\n}\r\n\r\nexport interface ConnectSocketOptions {\r\n  apiUserName: string;\r\n  apiKey?: string;\r\n  apiToken?: string;\r\n  link: string;\r\n}\r\n\r\nexport interface DisconnectSocketOptions {\r\n  socket: Socket;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ConnectSocketType = (options: ConnectSocketOptions) => Promise<Socket>;\r\nexport type DisconnectSocketType = (options: DisconnectSocketOptions) => Promise<boolean>;\r\nexport type ConnectLocalSocketType = (options: ConnectLocalSocketOptions) => Promise<ResponseLocalConnection>;\r\n\r\n/**\r\n * Manages connections to a media socket, allowing users to connect or disconnect based on API credentials.\r\n *\r\n * @class\r\n * @name SocketManager\r\n * @description Provides methods to connect and disconnect from a media socket using a provided API key or token.\r\n *\r\n * @method\r\n * validateApiKeyToken - Validates the API key or token for correct format.\r\n * connectSocket - Establishes a connection to the media socket using either the API key or token.\r\n * disconnectSocket - Disconnects an active socket connection.\r\n *\r\n * @example\r\n * ```typescript\r\n * const socketManager = new SocketManager();\r\n *\r\n * // Example of connecting to the socket\r\n * const socketConnection = await socketManager.connectSocket({\r\n *   apiUserName: 'user123',\r\n *   apiKey: 'validApiKeyOf64Characters',\r\n *   link: 'https://socketserver.example.com'\r\n * });\r\n *\r\n * // Example of disconnecting the socket\r\n * const isDisconnected = await socketManager.disconnectSocket({\r\n *   socket: socketConnection\r\n * });\r\n * ```\r\n *\r\n * @typedef {Object} ConnectSocketOptions\r\n * @property {string} apiUserName - Username for the API.\r\n * @property {string} [apiKey] - The API key for authentication.\r\n * @property {string} [apiToken] - The API token for authentication.\r\n * @property {string} link - The socket server link.\r\n *\r\n * @typedef {Object} DisconnectSocketOptions\r\n * @property {Socket} socket - The socket instance to disconnect.\r\n *\r\n * @returns {Promise<Socket | boolean>} The active socket instance on connection, or a boolean indicating disconnection success.\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SocketManager {\r\n  private socket!: Socket;\r\n\r\n  async validateApiKeyToken(value: string): Promise<boolean> {\r\n    if (!/^[a-z0-9]{64}$/i.test(value)) {\r\n      throw new Error('Invalid API key or token.');\r\n    }\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Connects to a media socket using the provided connection options.\r\n   *\r\n   * @param {ConnectSocketOptions} options - The connection options.\r\n   * @param {string} options.apiUserName - The API username.\r\n   * @param {string} [options.apiKey] - The API key for authentication.\r\n   * @param {string} [options.apiToken] - The API token for authentication.\r\n   * @param {string} options.link - The socket link.\r\n   *\r\n   * @returns {Promise<Socket>} A promise that resolves to the connected socket.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const options = {\r\n   *   apiUserName: 'user123',\r\n   *   apiKey: 'validApiKeyOf64Characters',\r\n   *   link: 'https://socketserver.example.com'\r\n   * };\r\n   *\r\n   * try {\r\n   *   const socket = await connectSocket(options);\r\n   *   console.log('Connected to socket:', socket);\r\n   * } catch (error) {\r\n   *   console.error('Failed to connect to socket:', error);\r\n   * }\r\n   * ```\r\n   */\r\n\r\n  connectSocket = async ({\r\n    apiUserName,\r\n    apiKey,\r\n    apiToken,\r\n    link,\r\n  }: ConnectSocketOptions): Promise<Socket> => {\r\n    if (!apiUserName) {\r\n      throw new Error('API username required.');\r\n    }\r\n    if (!(apiKey || apiToken)) {\r\n      throw new Error('API key or token required.');\r\n    }\r\n    if (!link) {\r\n      throw new Error('Socket link required.');\r\n    }\r\n\r\n    let useKey = false;\r\n    try {\r\n      if (apiKey && apiKey.length === 64) {\r\n        await this.validateApiKeyToken(apiKey);\r\n        useKey = true;\r\n      } else {\r\n        if (apiToken) {\r\n          await this.validateApiKeyToken(apiToken);\r\n        } else {\r\n          throw new Error('API token is required.');\r\n        }\r\n        useKey = false;\r\n      }\r\n    } catch (error) {\r\n      throw new Error('Invalid API key or token.');\r\n    }\r\n\r\n    return new Promise((resolve, reject) => {\r\n      const query = useKey ? { apiUserName, apiKey } : { apiUserName, apiToken };\r\n\r\n      this.socket = io(`${link}/media`, {\r\n        transports: ['websocket'],\r\n        query,\r\n      });\r\n\r\n      this.socket.on('connect', () => {\r\n        console.log('Connected to media socket.', this.socket.id);\r\n        resolve(this.socket);\r\n      });\r\n\r\n      this.socket.on('connect_error', () => {\r\n        reject(new Error('Error connecting to media socket.'));\r\n      });\r\n    });\r\n  };\r\n\r\n\r\n  /**\r\n   * Connects to a local media socket using the provided connection options.\r\n   *\r\n   * @param {ConnectLocalSocketOptions} options - The connection options.\r\n   * @param {string} options.link - The socket link.\r\n   *\r\n   * @returns {Promise<ResponseLocalConnection>} A promise that resolves to the connected socket and data.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const options = {\r\n   *   link: \"http://localhost:3000\",\r\n   * };\r\n   *\r\n   * try {\r\n   *   const { socket, data } = await connectLocalSocket(options);\r\n   *   console.log(\"Connected to socket:\", socket, data);\r\n   * } catch (error) {\r\n   *   console.error(\"Failed to connect to socket:\", error);\r\n   * }\r\n   * ```\r\n   */\r\n\r\n  connectLocalSocket = async ({ link }: ConnectLocalSocketOptions): Promise<ResponseLocalConnection> => {\r\n    if (!link) {\r\n      throw new Error(\"Socket link required.\");\r\n    }\r\n\r\n    let socket: Socket;\r\n\r\n    return new Promise((resolve, reject) => {\r\n      // Connect to socket using the link provided\r\n      socket = io(`${link}/media`, {\r\n        transports: [\"websocket\"],\r\n      });\r\n\r\n\r\n      // Handle socket connection events\r\n      socket.on(\"connection-success\", (data: ResponseLocalConnectionData) => {\r\n        //check if link contains mediasfu.com and contains more than one c\r\n        let conn = 'media';\r\n        try {\r\n          if (link.includes('mediasfu.com') && (link.match(/c/g)?.length ?? 0) > 1) {\r\n            conn = 'consume';\r\n          }\r\n        } catch {\r\n          // do nothing\r\n        }\r\n        console.log(`Connected to ${conn} socket with ID: ${socket.id}`);\r\n        resolve({ socket, data });\r\n      });\r\n\r\n      socket.on(\"connect_error\", (error: Error) => {\r\n        reject(new Error(\"Error connecting to media socket: \" + error.message));\r\n      });\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Disconnects an active socket connection.\r\n   *\r\n   * @param {DisconnectSocketOptions} options - The options for disconnecting the socket.\r\n   * @param {Socket} options.socket - The socket instance to disconnect.\r\n   *\r\n   * @returns {Promise<boolean>} A promise that resolves to true if the socket was disconnected successfully, or false otherwise.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const options = {\r\n   *   socket: mySocketInstance,\r\n   * };\r\n   *\r\n   * try {\r\n   *   const isDisconnected = await disconnectSocket(options);\r\n   *   console.log(\"Socket disconnected:\", isDisconnected);\r\n   * } catch (error) {\r\n   *   console.error(\"Failed to disconnect socket:\", error);\r\n   * }\r\n   * ```\r\n   */\r\n\r\n  disconnectSocket = async ({ socket }: DisconnectSocketOptions): Promise<boolean> => {\r\n    if (socket) {\r\n      socket.disconnect();\r\n      return true;\r\n    }\r\n    return false;\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SocketManager } from '../sockets/socket-manager.service';\r\nimport { NewPipeProducer } from './socket-receive-methods/new-pipe-producer.service';\r\nimport { ProducerClosed } from './socket-receive-methods/producer-closed.service';\r\nimport { JoinConsumeRoom } from './socket-receive-methods/join-consume-room.service';\r\nimport { Device } from 'mediasoup-client/lib/types';\r\nimport {\r\n  ReorderStreamsParameters,\r\n  ReorderStreamsType,\r\n  NewPipeProducerParameters,\r\n  NewPipeProducerType,\r\n  ProducerClosedType,\r\n  ProducerClosedParameters,\r\n  JoinConsumeRoomType,\r\n  JoinConsumeRoomParameters,\r\n  ConsumeSocket,\r\n} from '../@types/types';\r\n\r\nexport interface ConnectIpsParameters\r\n  extends ReorderStreamsParameters,\r\n    JoinConsumeRoomParameters,\r\n    ProducerClosedParameters,\r\n    NewPipeProducerParameters {\r\n  device: Device | null;\r\n  roomRecvIPs: string[];\r\n  updateRoomRecvIPs: (roomRecvIPs: string[]) => void;\r\n  updateConsume_sockets: (consume_sockets: ConsumeSocket[]) => void;\r\n\r\n  // mediasfu functions\r\n  reorderStreams: ReorderStreamsType;\r\n  getUpdatedAllParams: () => ConnectIpsParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ConnectIpsOptions {\r\n  consume_sockets: ConsumeSocket[];\r\n  remIP: string[];\r\n  apiUserName: string;\r\n  apiKey?: string;\r\n  apiToken: string;\r\n  newProducerMethod?: NewPipeProducerType;\r\n  closedProducerMethod?: ProducerClosedType;\r\n  joinConsumeRoomMethod?: JoinConsumeRoomType;\r\n  parameters: ConnectIpsParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ConnectIpsType = (\r\n  options: ConnectIpsOptions,\r\n) => Promise<[Record<string, any>[], string[]]>;\r\n\r\n/**\r\n * Connects to remote IPs and manages socket connections.\r\n *\r\n * This method establishes connections to remote IPs for media streaming, handles new pipe producer events,\r\n * and manages producer closure events. It updates the necessary state in the application to reflect\r\n * the current connections and stream configurations.\r\n *\r\n * @param {ConnectIpsOptions} options - The options for connecting IPs.\r\n * @param {Record<string, any>[]} options.consume_sockets - The array of current socket connections.\r\n * @param {string[]} options.remIP - The list of remote IPs to connect to.\r\n * @param {string} options.apiUserName - The API username for authentication.\r\n * @param {string} [options.apiKey] - The API key for authentication.\r\n * @param {string} [options.apiToken] - The API token for authentication.\r\n * @param {Function} [options.newProducerMethod] - The method to handle new pipe producer events (default: newPipeProducer).\r\n * @param {Function} [options.closedProducerMethod] - The method to handle producer closed events (default: producerClosed).\r\n * @param {Function} [options.joinConsumeRoomMethod] - The method to handle joining a consuming room (default: joinConsumeRoom).\r\n * @param {ConnectIpsParameters} options.parameters - Additional parameters for the operation.\r\n * @param {string[]} options.parameters.roomRecvIPs - The list of IPs that have been received in the room.\r\n * @param {Function} options.parameters.updateRoomRecvIPs - Function to update the room received IPs.\r\n * @param {Function} options.parameters.updateConsume_sockets - Function to update the consume sockets.\r\n *\r\n * @returns {Promise<[Record<string, any>[], string[]]>} A promise that resolves to an array containing the updated consume sockets and room received IPs.\r\n *\r\n * @throws Will throw an error if required parameters are missing or if there is an issue connecting to a remote IP.\r\n *\r\n * @example\r\n * ```typescript\r\n * const result = await connectIps({\r\n *   consume_sockets: currentSockets,\r\n *   remIP: ['192.168.1.1', '192.168.1.2'],\r\n *   apiUserName: 'username',\r\n *   apiKey: 'your-api-key',\r\n *   apiToken: 'your-api-token',\r\n *   parameters: {\r\n *     roomRecvIPs: [],\r\n *     updateRoomRecvIPs: (ips) => { },\r\n *     updateConsume_sockets: (sockets) => { },\r\n *     // ...other parameters\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ConnectIps {\r\n  constructor(\r\n    private socketManagerService: SocketManager,\r\n    private newPipeProducerService: NewPipeProducer,\r\n    private producerClosedService: ProducerClosed,\r\n    private joinConsumeRoomService: JoinConsumeRoom,\r\n  ) {}\r\n\r\n  /**\r\n   * Connects to remote IPs and manages socket connections.\r\n   *\r\n   * @param {Object} options - The options for connecting IPs.\r\n   * @param {Record<string, any>[]} options.consume_sockets - The array of current socket connections.\r\n   * @param {string[]} options.remIP - The list of remote IPs to connect to.\r\n   * @param {string} options.apiUserName - The API username for authentication.\r\n   * @param {string} [options.apiKey] - The API key for authentication.\r\n   * @param {string} [options.apiToken] - The API token for authentication.\r\n   * @param {Function} [options.newProducerMethod=newPipeProducer] - The method to handle new pipe producer events.\r\n   * @param {Function} [options.closedProducerMethod=producerClosed] - The method to handle producer closed events.\r\n   * @param {Function} [options.joinConsumeRoomMethod=joinConsumeRoom] - The method to handle joining a consuming room.\r\n   * @param {Object} options.parameters - Additional parameters.\r\n   * @param {string[]} options.parameters.roomRecvIPs - The list of IPs that have been received in the room.\r\n   * @param {Function} options.parameters.updateRoomRecvIPs - The function to update the room received IPs.\r\n   * @param {Function} options.parameters.updateConsume_sockets - The function to update the consume sockets.\r\n   *\r\n   * @returns {Promise<[Record<string, any>[], string[]]>} A promise that resolves to an array containing the updated consume sockets and room received IPs.\r\n   *\r\n   * @throws Will throw an error if required parameters are missing or if there is an issue connecting to a remote IP.\r\n   */\r\n  connectIps = async ({\r\n    consume_sockets,\r\n    remIP,\r\n    apiUserName,\r\n    apiKey = '',\r\n    apiToken = '',\r\n    newProducerMethod = this.newPipeProducerService.newPipeProducer,\r\n    closedProducerMethod = this.producerClosedService.producerClosed,\r\n    joinConsumeRoomMethod = this.joinConsumeRoomService.joinConsumeRoom,\r\n    parameters,\r\n  }: ConnectIpsOptions): Promise<any> => {\r\n    try {\r\n      const { roomRecvIPs, updateRoomRecvIPs, updateConsume_sockets } = parameters;\r\n\r\n      if (!consume_sockets || !remIP || !apiUserName || (!apiKey && !apiToken)) {\r\n        console.log(\r\n          'Missing required parameters - consume_sockets, remIP, apiUserName, apiKey, apiToken',\r\n        );\r\n        return [consume_sockets, roomRecvIPs];\r\n      }\r\n\r\n      await Promise.all(\r\n        remIP.map(async (ip) => {\r\n          try {\r\n            // Check if the IP is already connected\r\n            const matching = consume_sockets.find(\r\n              (socketObj: any) => Object.keys(socketObj)[0] == ip,\r\n            );\r\n\r\n            if (matching || !ip || ip === '' || ip === null || ip === undefined) {\r\n              // Skip if the IP is already connected\r\n              return;\r\n            }\r\n\r\n            // Connect to the remote socket using socket.io-client\r\n            const remote_sock = await this.socketManagerService.connectSocket({\r\n              apiUserName,\r\n              apiKey,\r\n              apiToken,\r\n              link: `https://${ip}.mediasfu.com`,\r\n            });\r\n\r\n            // Handle successful connection to the remote socket\r\n            if (remote_sock.id) {\r\n              // Check if the IP is in the roomRecvIPs, if not, add it\r\n              if (!roomRecvIPs.includes(ip)) {\r\n                roomRecvIPs.push(ip);\r\n                updateRoomRecvIPs(roomRecvIPs);\r\n              }\r\n\r\n              // Handle new pipe producer event\r\n              remote_sock.on(\r\n                'new-pipe-producer',\r\n                async ({ producerId, islevel }: { producerId: string; islevel: string }) => {\r\n                  await newProducerMethod({ producerId, islevel, nsock: remote_sock, parameters });\r\n                },\r\n              );\r\n\r\n              // Handle producer closed event\r\n              remote_sock.on(\r\n                'producer-closed',\r\n                async ({ remoteProducerId }: { remoteProducerId: string }) => {\r\n                  await closedProducerMethod({ remoteProducerId, parameters });\r\n                },\r\n              );\r\n\r\n              // Handle new consuming room by joining the room\r\n              const data = await joinConsumeRoomMethod({\r\n                remote_sock,\r\n                apiToken,\r\n                apiUserName,\r\n                parameters,\r\n              });\r\n              if (!data.rtpCapabilities) {\r\n                return;\r\n              }\r\n\r\n              // Add the remote socket to the consume_sockets array\r\n              consume_sockets.push({ [ip]: remote_sock });\r\n              updateConsume_sockets(consume_sockets);\r\n            }\r\n          } catch (error) {\r\n            // Handle the error\r\n            console.log('connectIps error', error);\r\n          }\r\n        }),\r\n      );\r\n\r\n      return [consume_sockets, roomRecvIPs];\r\n    } catch (error) {\r\n      // Handle the error\r\n      console.log('connectIps error', error);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NewPipeProducer } from './socket-receive-methods/new-pipe-producer.service';\r\nimport { ProducerClosed } from './socket-receive-methods/producer-closed.service';\r\n\r\nimport {\r\n  ReorderStreamsParameters,\r\n  ReorderStreamsType,\r\n  NewPipeProducerParameters,\r\n  NewPipeProducerType,\r\n  ProducerClosedType,\r\n  ProducerClosedParameters,\r\n  ReceiveAllPipedTransportsType,\r\n  ReceiveAllPipedTransportsParameters,\r\n} from '../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface ConnectLocalIpsParameters extends ReorderStreamsParameters, ProducerClosedParameters, NewPipeProducerParameters,\r\nReceiveAllPipedTransportsParameters {\r\n  socket: Socket;\r\n\r\n  // mediasfu functions\r\n  reorderStreams: ReorderStreamsType;\r\n  receiveAllPipedTransports: ReceiveAllPipedTransportsType;\r\n  getUpdatedAllParams: () => ConnectLocalIpsParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ConnectLocalIpsOptions {\r\n  socket: Socket;\r\n  newProducerMethod?: NewPipeProducerType;\r\n  closedProducerMethod?: ProducerClosedType;\r\n  parameters: ConnectLocalIpsParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ConnectLocalIpsType = (options: ConnectLocalIpsOptions) => Promise<void>;\r\n\r\n\r\n/**\r\n * Connects to remote IPs and manages socket connections.\r\n *\r\n * This method establishes connections to remote IPs for media streaming, handles new pipe producer events,\r\n * and manages producer closure events. It updates the necessary state in the application to reflect\r\n * the current connections and stream configurations.\r\n *\r\n * @param {ConnectLocalIpsOptions} options - The options for connecting IPs.\r\n * @param {Socket} options.socket - The socket connection to use for communication.\r\n * @param {Function} [options.newProducerMethod] - The method to handle new pipe producer events (default: newPipeProducer).\r\n * @param {Function} [options.closedProducerMethod] - The method to handle producer closed events (default: producerClosed).\r\n * @param {ConnectLocalIpsParameters} options.parameters - Additional parameters for the operation.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the connection is established.\r\n *\r\n * @throws Will throw an error if required parameters are missing or if there is an issue connecting to a remote IP.\r\n *\r\n * @example\r\n * ```typescript\r\n * const result = await connectLocalIps({\r\n*     socket,\r\n*     newProducerMethod: newPipeProducer,\r\n*     closedProducerMethod: producerClosed,\r\n*     parameters,\r\n*   });\r\n* ```\r\n*/\r\n\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ConnectLocalIps {\r\n  constructor(\r\n    private newPipeProducerService: NewPipeProducer,\r\n    private producerClosedService: ProducerClosed,\r\n  ) { }\r\n\r\n  /**\r\n   * Connects to remote IPs and manages socket connections.\r\n   *\r\n   * This method establishes connections to remote IPs for media streaming, handles new pipe producer events,\r\n   * and manages producer closure events. It updates the necessary state in the application to reflect\r\n   * the current connections and stream configurations.\r\n   *\r\n   * @param {ConnectLocalIpsOptions} options - The options for connecting IPs.\r\n   * @param {Socket} options.socket - The socket connection to use for communication.\r\n   * @param {Function} [options.newProducerMethod] - The method to handle new pipe producer events (default: newPipeProducer).\r\n   * @param {Function} [options.closedProducerMethod] - The method to handle producer closed events (default: producerClosed).\r\n   * @param {ConnectLocalIpsParameters} options.parameters - Additional parameters for the operation.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the connection is established.\r\n   *\r\n   * @throws Will throw an error if required parameters are missing or if there is an issue connecting to a remote IP.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const result = await connectLocalIps({\r\n  *     socket,\r\n  *     newProducerMethod: newPipeProducer,\r\n  *     closedProducerMethod: producerClosed,\r\n  *     parameters,\r\n  *   });\r\n  * ```\r\n  */\r\n\r\n  connectLocalIps = async ({\r\n    socket,\r\n    newProducerMethod = this.newPipeProducerService.newPipeProducer,\r\n    closedProducerMethod = this.producerClosedService.producerClosed,\r\n    parameters,\r\n  }: ConnectLocalIpsOptions): Promise<void> => {\r\n    try {\r\n\r\n      // Handle new pipe producer event\r\n      socket.on(\r\n        'new-producer',\r\n        async ({ producerId, islevel }: { producerId: string; islevel: string }) => {\r\n          await newProducerMethod({ producerId, islevel, nsock: socket, parameters });\r\n        },\r\n      );\r\n\r\n      // Handle producer closed event\r\n      socket.on(\r\n        'producer-closed',\r\n        async ({ remoteProducerId }: { remoteProducerId: string }) => {\r\n          await closedProducerMethod({ remoteProducerId, parameters });\r\n        },\r\n      );\r\n\r\n      await parameters.receiveAllPipedTransports({ nsock: socket, community: true, parameters });\r\n\r\n\r\n    } catch (error) {\r\n      // Handle the error\r\n      console.log('connectLocalIps error', error);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  ConsumerResumeType,\r\n  ConsumerResumeParameters,\r\n  Transport as TransportType,\r\n} from '../@types/types';\r\nimport { Consumer, Device, Transport } from 'mediasoup-client/lib/types';\r\ninterface Params {\r\n  id: string;\r\n  producerId: string;\r\n  kind: string;\r\n  rtpParameters: any;\r\n  serverConsumerId: string;\r\n  error?: string;\r\n}\r\n\r\nexport interface ConnectRecvTransportParameters extends ConsumerResumeParameters {\r\n  device: Device | null;\r\n  consumerTransports: TransportType[];\r\n  updateConsumerTransports: (transports: TransportType[]) => void;\r\n\r\n  // mediasfu functions\r\n  consumerResume: ConsumerResumeType;\r\n  getUpdatedAllParams: () => ConnectRecvTransportParameters;\r\n  [key: string]: any; // Extendable for additional parameters\r\n}\r\nexport interface ConnectRecvTransportOptions {\r\n  consumerTransport: Transport;\r\n  remoteProducerId: string;\r\n  serverConsumerTransportId: string;\r\n  nsock: Socket;\r\n  parameters: ConnectRecvTransportParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ConnectRecvTransportType = (options: ConnectRecvTransportOptions) => Promise<void>;\r\n\r\n  /**\r\n   * Connects the receiving transport to consume media from a remote producer.\r\n   *\r\n   * @param {ConnectRecvTransportOptions} options - The options for connecting the receiving transport.\r\n   * @param {Transport} options.consumerTransport - The transport used for consuming media.\r\n   * @param {string} options.remoteProducerId - The ID of the remote producer.\r\n   * @param {string} options.serverConsumerTransportId - The ID of the server consumer transport.\r\n   * @param {Socket} options.nsock - The socket used for communication.\r\n   * @param {ConnectRecvTransportParameters} options.parameters - The parameters for the connection.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the connection is established.\r\n   *\r\n   * @throws Will throw an error if the connection or consumption fails.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const options = {\r\n   *   consumerTransport,\r\n   *   remoteProducerId: 'producer-id',\r\n   *   serverConsumerTransportId: 'transport-id',\r\n   *   nsock: socket,\r\n   *   parameters: connectRecvTransportOptions,\r\n   * };\r\n   *\r\n   * connectRecvTransport(options)\r\n   *   .then(() => {\r\n   *     console.log('Transport connected and consuming media');\r\n   *   })\r\n   *   .catch((error) => {\r\n   *     console.error('Error connecting transport:', error);\r\n   *   });\r\n   * ```\r\n   */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ConnectRecvTransport {\r\n  /**\r\n   * Connects the receiving transport to consume media from a remote producer.\r\n   *\r\n   * @param {Object} options - The options for connecting the receiving transport.\r\n   * @param {Transport} options.consumerTransport - The transport used for consuming media.\r\n   * @param {string} options.remoteProducerId - The ID of the remote producer.\r\n   * @param {string} options.serverConsumerTransportId - The ID of the server consumer transport.\r\n   * @param {Socket} options.nsock - The socket used for communication.\r\n   * @param {ConnectRecvTransportOptions} options.parameters - The parameters for the connection.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the connection is established.\r\n   *\r\n   * @throws Will throw an error if the connection or consumption fails.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const options = {\r\n   *   consumerTransport,\r\n   *   remoteProducerId: 'producer-id',\r\n   *   serverConsumerTransportId: 'transport-id',\r\n   *   nsock: socket,\r\n   *   parameters: connectRecvTransportOptions,\r\n   * };\r\n   *\r\n   * connectRecvTransport(options)\r\n   *   .then(() => {\r\n   *     console.log('Transport connected and consuming media');\r\n   *   })\r\n   *   .catch((error) => {\r\n   *     console.error('Error connecting transport:', error);\r\n   *   });\r\n   * ```\r\n   */\r\n\r\n  connectRecvTransport = async ({\r\n    consumerTransport,\r\n    remoteProducerId,\r\n    serverConsumerTransportId,\r\n    nsock,\r\n    parameters,\r\n  }: ConnectRecvTransportOptions): Promise<void> => {\r\n    try {\r\n      parameters = parameters.getUpdatedAllParams();\r\n      const { device, consumerTransports, updateConsumerTransports, consumerResume } = parameters;\r\n\r\n      // Emit 'consume' event to signal consumption initiation\r\n      nsock.emit(\r\n        'consume',\r\n        {\r\n          rtpCapabilities: device ? device.rtpCapabilities : null,\r\n          remoteProducerId,\r\n          serverConsumerTransportId,\r\n        },\r\n        async ({ params }: { params: Params }) => {\r\n          if (params.error) {\r\n            // Handle error\r\n            console.log('consume error', params.error);\r\n            return;\r\n          }\r\n\r\n          try {\r\n            // Consume media using received parameters\r\n            const consumer: Consumer = await consumerTransport.consume({\r\n              id: params.id,\r\n              producerId: params.producerId,\r\n              kind: params.kind as 'audio' | 'video',\r\n              rtpParameters: params.rtpParameters,\r\n            });\r\n\r\n            // Update consumerTransports array with the new consumer\r\n            consumerTransports.push({\r\n              consumerTransport,\r\n              serverConsumerTransportId: params.id,\r\n              producerId: remoteProducerId,\r\n              consumer,\r\n              socket_: nsock,\r\n            });\r\n\r\n            updateConsumerTransports(consumerTransports);\r\n\r\n            // Extract track from the consumer\r\n            const { track } = consumer;\r\n\r\n            // Emit 'consumer-resume' event to signal consumer resumption\r\n            nsock.emit(\r\n              'consumer-resume',\r\n              { serverConsumerId: params.serverConsumerId },\r\n              async ({ resumed }: any) => {\r\n                if (resumed) {\r\n                  // Consumer resumed and ready to be used\r\n                  try {\r\n                    await consumerResume({\r\n                      track,\r\n                      kind: params.kind,\r\n                      remoteProducerId,\r\n                      params,\r\n                      parameters,\r\n                      nsock,\r\n                      consumer,\r\n                    });\r\n                  } catch (error) {\r\n                    // Handle error\r\n                    console.log('consumerResume error', error);\r\n                  }\r\n                }\r\n              },\r\n            );\r\n          } catch (error) {\r\n            // Handle error\r\n            console.log('consume error', error);\r\n            return;\r\n          }\r\n        },\r\n      );\r\n    } catch (error) {\r\n      // Handle error\r\n      console.log('connectRecvTransport error', error);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { ProducerOptions } from 'mediasoup-client/lib/types';\r\nimport {\r\n  ConnectSendTransportAudioType,\r\n  ConnectSendTransportVideoType,\r\n  ConnectSendTransportScreenType,\r\n  ConnectSendTransportAudioParameters,\r\n  ConnectSendTransportVideoParameters,\r\n  ConnectSendTransportScreenParameters,\r\n} from '../@types/types';\r\nexport interface ConnectSendTransportParameters\r\n  extends ConnectSendTransportAudioParameters,\r\n    ConnectSendTransportVideoParameters,\r\n    ConnectSendTransportScreenParameters {\r\n  audioParams: ProducerOptions;\r\n  videoParams: ProducerOptions;\r\n  localStreamScreen: MediaStream | null;\r\n  canvasStream: MediaStream | null;\r\n  whiteboardStarted: boolean;\r\n  whiteboardEnded: boolean;\r\n  shared: boolean;\r\n  islevel: string;\r\n\r\n  //mediasfu functions\r\n  connectSendTransportAudio: ConnectSendTransportAudioType;\r\n  connectSendTransportVideo: ConnectSendTransportVideoType;\r\n  connectSendTransportScreen: ConnectSendTransportScreenType;\r\n\r\n  getUpdatedAllParams: () => ConnectSendTransportParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ConnectSendTransportOptions {\r\n  option: 'audio' | 'video' | 'screen' | 'all';\r\n  targetOption?: 'local' | 'remote' | 'all';\r\n  parameters: ConnectSendTransportParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ConnectSendTransportType = (options: ConnectSendTransportOptions) => Promise<void>;\r\n\r\n  /**\r\n   * Connects the send transport based on the specified option.\r\n   *\r\n   * @param {ConnectSendTransportOptions} options - The options for connecting the send transport.\r\n   * @param {string} options.option - The type of transport to connect (\"audio\", \"video\", \"screen\", or \"all\").\r\n   * @param {string} options.targetOption - The target of the transport to connect (\"local\", \"remote\", or \"all\").\r\n   * @param {ConnectSendTransportParameters} options.parameters - The parameters required for connecting the transport.\r\n   * @param {ProducerOptions} options.parameters.audioParams - The audio parameters.\r\n   * @param {ProducerOptions} options.parameters.videoParams - The video parameters.\r\n   * @param {MediaStream} options.parameters.localStreamScreen - The local screen stream.\r\n   * @param {MediaStream} options.parameters.canvasStream - The canvas stream.\r\n   * @param {boolean} options.parameters.whiteboardStarted - Indicates if the whiteboard has started.\r\n   * @param {boolean} options.parameters.whiteboardEnded - Indicates if the whiteboard has ended.\r\n   * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\r\n   * @param {string} options.parameters.islevel - The level of the screen sharing.\r\n   * @param {Function} options.parameters.connectSendTransportAudio - Function to connect the audio send transport.\r\n   * @param {Function} options.parameters.connectSendTransportVideo - Function to connect the video send transport.\r\n   * @param {Function} options.parameters.connectSendTransportScreen - Function to connect the screen send transport.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the transport is connected.\r\n   *\r\n   * @throws Will throw an error if the connection fails.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const options = {\r\n   *   option: 'audio', // Can be 'audio', 'video', 'screen', or 'all'\r\n   *   targetOption: 'local', // Can be 'local', 'remote', or 'all'\r\n   *   parameters: {\r\n   *     audioParams: { codec: 'opus' },\r\n   *     videoParams: { codec: 'vp8' },\r\n   *     localStreamScreen: null, // Set to your local screen stream\r\n   *     canvasStream: null, // Set to your canvas stream if using\r\n   *     whiteboardStarted: false,\r\n   *     whiteboardEnded: true,\r\n   *     shared: false,\r\n   *     islevel: '1',\r\n   *     connectSendTransportAudio: connectSendTransportAudioFunction,\r\n   *     connectSendTransportVideo: connectSendTransportVideoFunction,\r\n   *     connectSendTransportScreen: connectSendTransportScreenFunction,\r\n   *     updateVideoProducer: () => {},\r\n   *     updateProducerTransport: () => {},\r\n   *     updateScreenProducer: () => {},\r\n   *     updateMainWindow: false,\r\n   *   },\r\n   * };\r\n   *\r\n   * connectSendTransport(options)\r\n   *   .then(() => {\r\n   *     console.log('Transport connected successfully');\r\n   *   })\r\n   *   .catch((error) => {\r\n   *     console.error('Error connecting transport:', error);\r\n   *   });\r\n   * ```\r\n   */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ConnectSendTransport {\r\n  /**\r\n   * Connects the send transport based on the specified option.\r\n   *\r\n   * @param {ConnectSendTransportOptions} options - The options for connecting the send transport.\r\n   * @param {string} options.option - The type of transport to connect (\"audio\", \"video\", \"screen\", or both).\r\n   * @param {string} options.targetOption - The target of the transport to connect (\"local\", \"remote\", or \"all\").\r\n   * @param {Object} options.parameters - The parameters required for connecting the transport.\r\n   * @param {Object} options.parameters.audioParams - The audio parameters.\r\n   * @param {Object} options.parameters.videoParams - The video parameters.\r\n   * @param {MediaStream} options.parameters.localStreamScreen - The local screen stream.\r\n   * @param {MediaStream} options.parameters.canvasStream - The canvas stream.\r\n   * @param {boolean} options.parameters.whiteboardStarted - Indicates if the whiteboard has started.\r\n   * @param {boolean} options.parameters.whiteboardEnded - Indicates if the whiteboard has ended.\r\n   * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\r\n   * @param {string} options.parameters.islevel - The level of the screen sharing.\r\n   * @param {Function} options.parameters.connectSendTransportAudio - Function to connect the audio send transport.\r\n   * @param {Function} options.parameters.connectSendTransportVideo - Function to connect the video send transport.\r\n   * @param {Function} options.parameters.connectSendTransportScreen - Function to connect the screen send transport.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the transport is connected.\r\n   *\r\n   * @throws Will throw an error if the connection fails.\r\n   */\r\n\r\n  async connectSendTransport({ option, targetOption = \"all\", parameters }: ConnectSendTransportOptions): Promise<void> {\r\n    try {\r\n      const {\r\n        audioParams,\r\n        videoParams,\r\n        localStreamScreen,\r\n        canvasStream,\r\n        whiteboardStarted,\r\n        whiteboardEnded,\r\n        shared,\r\n        islevel,\r\n        connectSendTransportAudio,\r\n        connectSendTransportVideo,\r\n        connectSendTransportScreen,\r\n      } = parameters;\r\n\r\n      // Connect send transport based on the specified option\r\n      if (option === 'audio') {\r\n        await connectSendTransportAudio({\r\n          targetOption,\r\n          audioParams,\r\n          parameters,\r\n        });\r\n      } else if (option === 'video') {\r\n        await connectSendTransportVideo({\r\n          targetOption,\r\n          videoParams,\r\n          parameters,\r\n        });\r\n      } else if (option === 'screen') {\r\n        if (whiteboardStarted && !whiteboardEnded && canvasStream && islevel === '2' && !shared) {\r\n          await connectSendTransportScreen({\r\n            targetOption,\r\n            stream: canvasStream,\r\n            parameters,\r\n          });\r\n        } else {\r\n          if (localStreamScreen) {\r\n            await connectSendTransportScreen({\r\n              targetOption,\r\n              stream: localStreamScreen,\r\n              parameters,\r\n            });\r\n          } else {\r\n            throw new Error('localStreamScreen is null or undefined');\r\n          }\r\n        }\r\n      } else {\r\n        // Connect both audio and video send transports\r\n        await connectSendTransportAudio({\r\n          targetOption,\r\n          audioParams,\r\n          parameters,\r\n        });\r\n        await connectSendTransportVideo({\r\n          targetOption,\r\n          videoParams,\r\n          parameters,\r\n        });\r\n      }\r\n    } catch (error) {\r\n      console.log('connectSendTransport error', error);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { Transport, Producer, ProducerOptions } from 'mediasoup-client/lib/types';\r\nexport interface ConnectSendTransportAudioParameters {\r\n  audioProducer: Producer | null;\r\n  producerTransport: Transport | null;\r\n  localAudioProducer?: Producer | null;\r\n  localProducerTransport?: Transport | null;\r\n  updateAudioProducer: (producer: Producer | null) => void;\r\n  updateProducerTransport: (transport: Transport | null) => void;\r\n  updateLocalAudioProducer?: (localProducer: Producer | null) => void;\r\n  updateLocalProducerTransport?: (localTransport: Transport | null) => void;\r\n  updateAudioLevel: (level: number) => void;\r\n\r\n  // Function to get all parameters\r\n  getUpdatedAllParams: () => ConnectSendTransportAudioParameters;\r\n  [key: string]: any; // Extendable for additional parameters\r\n\r\n}\r\n\r\nexport interface ConnectSendTransportAudioOptions {\r\n  audioParams: ProducerOptions;\r\n  parameters: ConnectSendTransportAudioParameters;\r\n  targetOption?: 'all' | 'local' | 'remote';\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ConnectSendTransportAudioType = (\r\n  options: ConnectSendTransportAudioOptions,\r\n) => Promise<void>;\r\n\r\nexport const updateMicLevel = async (audioProducer: Producer, updateAudioLevel: (level: number) => void) => {\r\n  try {\r\n    setInterval(() => {\r\n      const sender = audioProducer!.rtpSender;\r\n      sender?.getStats().then((stats) => {\r\n        stats.forEach((report) => {\r\n          if (report.type === 'media-source' && report.kind === 'audio' && report.audioLevel !== undefined) {\r\n            const newLevel = 127.5 + (report.audioLevel * 127.5);\r\n            updateAudioLevel(newLevel);\r\n          }\r\n        });\r\n      });\r\n    }, 1000);\r\n  } catch {\r\n    // Handle error\r\n  }\r\n};\r\n\r\nexport const connectLocalSendTransportAudio = async ({\r\n  parameters,\r\n  audioParams\r\n}: ConnectSendTransportAudioOptions): Promise<void> => {\r\n  try {\r\n    let {\r\n      localAudioProducer,\r\n      localProducerTransport,\r\n      updateLocalAudioProducer,\r\n      updateLocalProducerTransport,\r\n    } = parameters;\r\n\r\n    if (localProducerTransport) {\r\n      localAudioProducer = await localProducerTransport.produce(audioParams);\r\n\r\n      updateLocalAudioProducer?.(localAudioProducer);\r\n      updateLocalProducerTransport?.(localProducerTransport);\r\n    }\r\n  } catch (error) {\r\n    console.error(\"Error connecting local audio transport:\", error);\r\n    throw error; // Re-throw to let the parent handle it\r\n  }\r\n};\r\n\r\n\r\n/**\r\n * Connects the send transport for audio by producing audio data and updating the audio producer and producer transport objects.\r\n *\r\n * @param {ConnectSendTransportAudioOptions} options - The parameters for connecting the send transport.\r\n * @param {ProducerOptions} options.audioParams - The options for the audio producer.\r\n * @param {ConnectSendTransportAudioParameters} options.parameters - The parameters containing the audio producer, producer transport, and update functions.\r\n * @param {Producer} options.parameters.audioProducer - The current audio producer.\r\n * @param {Transport} options.parameters.producerTransport - The transport used to produce audio data.\r\n * @param {Function} options.parameters.updateAudioProducer - Function to update the audio producer.\r\n * @param {Function} options.parameters.updateProducerTransport - Function to update the producer transport.\r\n * @param {Function} [options.parameters.updateLocalAudioProducer] - Function to update the local audio producer.\r\n * @param {Function} [options.parameters.updateLocalProducerTransport] - Function to update the local producer transport.\r\n * @param {Function} options.parameters.updateAudioLevel - Function to update the audio level.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the audio transport is successfully connected.\r\n *\r\n * @throws Will throw an error if the connection fails.\r\n *\r\n * @example\r\n * ```typescript\r\n * const audioParams: ProducerOptions = {\r\n *   codec: 'opus',\r\n *   // other options\r\n * };\r\n *\r\n * const parameters = {\r\n *   audioProducer: null,\r\n *   producerTransport: transport,\r\n *   updateAudioProducer: (producer) => { console.log(updated) },\r\n  *   updateProducerTransport: (transport) => { console.log(updated) },\r\n  *  updateLocalAudioProducer: (localProducer) => { console.log(updated) },\r\n  *  updateLocalProducerTransport: (localTransport) => { console.log(updated) },\r\n  *  updateAudioLevel: (level) => { console.log(level) },\r\n  * };\r\n  *\r\n  * connectSendTransportAudio({ audioParams, parameters })\r\n  *   .then(() => {\r\n  *     console.log('Audio transport connected successfully');\r\n  *   })\r\n  *   .catch((error) => {\r\n  *     console.error('Error connecting audio transport:', error);\r\n  *   });\r\n  * ```\r\n  */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ConnectSendTransportAudio {\r\n\r\n  /**\r\n   * Connects the send transport for audio by producing audio data and updating the audio producer and producer transport objects.\r\n   *\r\n   * @param {ConnectSendTransportAudioOptions} options - The options for connecting the send transport.\r\n   * @param {ProducerOptions} options.audioParams - The audio parameters.\r\n   * @param {ConnectSendTransportAudioParameters} options.parameters - The parameters required for connecting the transport.\r\n   * @param {Producer | null} options.parameters.audioProducer - The audio producer object.\r\n   * @param {Transport | null} options.parameters.producerTransport - The producer transport object.\r\n   * @param {Producer | null} [options.parameters.localAudioProducer] - The local audio producer object.\r\n   * @param {Transport | null} [options.parameters.localProducerTransport] - The local producer transport object.\r\n   * @param {(producer: Producer | null) => void} options.parameters.updateAudioProducer - The function to update the audio producer object.\r\n   * @param {(transport: Transport | null) => void} options.parameters.updateProducerTransport - The function to update the producer transport object.\r\n   * @param {(localProducer: Producer | null) => void} [options.parameters.updateLocalAudioProducer] - The function to update the local audio producer object.\r\n   * @param {(localTransport: Transport | null) => void} [options.parameters.updateLocalProducerTransport] - The function to update the local producer transport object.\r\n   * @param {(level: number) => void} options.parameters.updateAudioLevel - The function to update the audio level.\r\n   * @returns {Promise<void>} A promise that resolves when the connection is established.\r\n   *\r\n   * @throws Will throw an error if the connection fails.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const options = {\r\n   *  audioParams: { codec: 'opus' },\r\n   * parameters: {\r\n   * audioProducer: null,\r\n   * producerTransport: transport,\r\n   * updateAudioProducer: (producer) => { console.log(updated) },\r\n   * updateProducerTransport: (transport) => { console.log(updated) },\r\n   * updateLocalAudioProducer: (localProducer) => { console.log(updated) },\r\n   * updateLocalProducerTransport: (localTransport) => { console.log(updated) },\r\n   * },\r\n   * };\r\n   *\r\n   * connectSendTransportAudio(options)\r\n   * .then(() => {\r\n   * console.log('Audio transport connected successfully');\r\n   * })\r\n   * .catch((error) => {\r\n   * console.error('Error connecting audio transport:', error);\r\n   * });\r\n   * ```\r\n   *\r\n  */\r\n\r\n  async connectSendTransportAudio({\r\n    targetOption = \"all\",\r\n    audioParams,\r\n    parameters,\r\n  }: ConnectSendTransportAudioOptions): Promise<void> {\r\n    try {\r\n      let { audioProducer, producerTransport, updateAudioProducer, updateProducerTransport } =\r\n        parameters;\r\n\r\n\r\n      // Attempt to connect the primary send transport\r\n      if (targetOption === \"all\" || targetOption === \"remote\") {\r\n        audioProducer = await producerTransport!.produce(audioParams);\r\n\r\n        // Update the audio level\r\n        updateMicLevel(audioProducer, parameters.updateAudioLevel);\r\n\r\n        // Update state with the new producer and transport\r\n        updateAudioProducer(audioProducer);\r\n        updateProducerTransport(producerTransport);\r\n      }\r\n\r\n      // Attempt to connect the local send transport\r\n      if (targetOption === \"all\" || targetOption === \"local\") {\r\n        try {\r\n          await connectLocalSendTransportAudio({ parameters, audioParams });\r\n\r\n          // Update the audio level\r\n          if (targetOption === 'local' && parameters.updateAudioLevel) {\r\n            if (!parameters.localAudioProducer) {\r\n              parameters = parameters.getUpdatedAllParams();\r\n            }\r\n            updateMicLevel(parameters.localAudioProducer!, parameters.updateAudioLevel);\r\n          }\r\n        } catch (localError) {\r\n          console.error(\"Local audio transport connection failed:\", localError);\r\n        }\r\n      }\r\n\r\n    } catch (primaryError) {\r\n      console.error(\"audio transport connection failed:\", primaryError);\r\n      throw new Error(\"Failed to connect to audio transport.\");\r\n    }\r\n  }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Transport, Producer, Device, ProducerOptions } from 'mediasoup-client/lib/types';\r\nexport interface ConnectSendTransportScreenParameters {\r\n  screenProducer: Producer | null;\r\n  localScreenProducer?: Producer | null;\r\n  device: Device | null;\r\n  screenParams: ProducerOptions;\r\n  producerTransport: Transport | null;\r\n  localProducerTransport?: Transport | null;\r\n  params: ProducerOptions;\r\n  updateScreenProducer: (producer: Producer | null) => void;\r\n  updateLocalScreenProducer?: (localProducer: Producer | null) => void;\r\n  updateProducerTransport: (transport: Transport | null) => void;\r\n  updateLocalProducerTransport?: (localTransport: Transport | null) => void;\r\n\r\n  getUpdatedAllParams: () => ConnectSendTransportScreenParameters;\r\n  [key: string]: any; // Extendable for additional parameters\r\n}\r\n\r\nexport interface ConnectSendTransportScreenOptions {\r\n  stream: MediaStream | null;\r\n  parameters: ConnectSendTransportScreenParameters;\r\n  targetOption?: \"all\" | \"local\" | \"remote\";\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ConnectSendTransportScreenType = (\r\n  options: ConnectSendTransportScreenOptions,\r\n) => Promise<void>;\r\n\r\nexport const connectLocalSendTransportScreen = async({\r\n  stream,\r\n  parameters,\r\n}: ConnectSendTransportScreenOptions): Promise<void> => {\r\n  try {\r\n    let {\r\n      localScreenProducer,\r\n      localProducerTransport,\r\n      updateLocalScreenProducer,\r\n      updateLocalProducerTransport,\r\n      device,\r\n    } = parameters;\r\n\r\n    // Find VP9 codec for local screen share\r\n    const codec = device?.rtpCapabilities?.codecs?.find(\r\n      (codec: { mimeType: string }) =>\r\n        codec.mimeType.toLowerCase() === \"video/vp9\"\r\n    );\r\n\r\n    // Produce local screen share data\r\n    if (localProducerTransport) {\r\n      localScreenProducer = await localProducerTransport.produce({\r\n        track: stream?.getVideoTracks()[0],\r\n        codec,\r\n        appData: { mediaTag: \"screen-video\" },\r\n      });\r\n\r\n      // Update the local producer and transport objects\r\n      updateLocalScreenProducer?.(localScreenProducer);\r\n      updateLocalProducerTransport?.(localProducerTransport);\r\n    }\r\n  } catch (error) {\r\n    console.error(\"Error connecting local screen transport:\", error);\r\n    throw error; // Re-throw to propagate the error\r\n  }\r\n};\r\n\r\n\r\n/**\r\n * Sets up and connects a screen sharing transport for sending video streams.\r\n *\r\n * This function supports both a primary and a local screen producer, delegating local handling to a separate function.\r\n *\r\n * @param {ConnectSendTransportScreenOptions} options - The configuration options for setting up the screen transport.\r\n * @param {\"all\" | \"local\" | \"remote\"} [options.targetOption] - The target option for connecting the transport.\r\n * @param {MediaStream} options.stream - The screen stream to be shared.\r\n * @param {ConnectSendTransportScreenParameters} options.parameters - The parameters required for setting up the screen transport.\r\n * @param {Producer | null} options.parameters.screenProducer - The screen producer object to be updated.\r\n * @param {Device | null} options.parameters.device - The device object for media capabilities.\r\n * @param {ProducerOptions} options.parameters.screenParams - The parameters for the screen producer.\r\n * @param {Transport | null} options.parameters.producerTransport - The producer transport object.\r\n * @param {ProducerOptions} options.parameters.params - The parameters for the producer.\r\n * @param {Function} options.parameters.updateScreenProducer - The function to update the screen producer object.\r\n * @param {Function} options.parameters.updateProducerTransport - The function to update the producer transport object.\r\n * @param {Function} [options.parameters.updateLocalScreenProducer] - The function to update the local screen producer object.\r\n * @param {Function} [options.parameters.updateLocalProducerTransport] - The function to update the local producer transport object.\r\n * @param {Function} options.parameters.getUpdatedAllParams - The function to get updated parameters.\r\n * @param {Object} [options.parameters.*] - Additional parameters for future use.\r\n *\r\n * @returns {Promise<void>} - A promise that resolves once the screen transport is successfully connected and set up.\r\n *\r\n * @throws Will throw an error if there is an issue with the connection or setup process.\r\n *\r\n * @example\r\n * ```typescript\r\n * await connectSendTransportScreen({\r\n *   stream: screenStream,\r\n *   targetOption: \"all\",\r\n *   parameters: {\r\n *     screenProducer: null,\r\n *     localScreenProducer: null,\r\n *     device: mediaDevice,\r\n *     screenParams: { encodings: [{ maxBitrate: 1500000 }] },\r\n *     producerTransport: sendTransport,\r\n *     localProducerTransport: localSendTransport,\r\n *     params: { track: screenStream.getVideoTracks()[0] },\r\n *     updateScreenProducer: setScreenProducer,\r\n *     updateLocalScreenProducer: setLocalScreenProducer,\r\n *     updateProducerTransport: setProducerTransport,\r\n *     updateLocalProducerTransport: setLocalProducerTransport,\r\n *     getUpdatedAllParams: getParams,\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ConnectSendTransportScreen {\r\n\r\n  /**\r\n   * Sets up and connects a screen sharing transport for sending video streams.\r\n   *\r\n   * This function supports both a primary and a local screen producer, delegating local handling to a separate function.\r\n   *\r\n   * @param {ConnectSendTransportScreenOptions} options - The configuration options for setting up the screen transport.\r\n   * @param {\"all\" | \"local\" | \"remote\"} [options.targetOption] - The target option for connecting the transport.\r\n   * @param {MediaStream} options.stream - The screen stream to be shared.\r\n   * @param {ConnectSendTransportScreenParameters} options.parameters - The parameters required for setting up the screen transport.\r\n   * @param {Producer | null} options.parameters.screenProducer - The screen producer object to be updated.\r\n   * @param {Device | null} options.parameters.device - The device object for media capabilities.\r\n   * @param {ProducerOptions} options.parameters.screenParams - The parameters for the screen producer.\r\n   * @param {Transport | null} options.parameters.producerTransport - The producer transport object.\r\n   * @param {ProducerOptions} options.parameters.params - The parameters for the producer.\r\n   * @param {Function} options.parameters.updateScreenProducer - The function to update the screen producer object.\r\n   * @param {Function} options.parameters.updateProducerTransport - The function to update the producer transport object.\r\n   * @param {Function} [options.parameters.updateLocalScreenProducer] - The function to update the local screen producer object.\r\n   * @param {Function} [options.parameters.updateLocalProducerTransport] - The function to update the local producer transport object.\r\n   * @param {Function} options.parameters.getUpdatedAllParams - The function to get updated parameters.\r\n   * @param {Object} [options.parameters.*] - Additional parameters for future use.\r\n   *\r\n   * @returns {Promise<void>} - A promise that resolves once the screen transport is successfully connected and set up.\r\n   *\r\n   * @throws Will throw an error if there is an issue with the connection or setup process.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * await connectSendTransportScreen({\r\n   *   stream: screenStream,\r\n   *   targetOption: \"all\",\r\n   *   parameters: {\r\n   *     screenProducer: null,\r\n   *     localScreenProducer: null,\r\n   *     device: mediaDevice,\r\n   *     screenParams: { encodings: [{ maxBitrate: 1500000 }] },\r\n   *     producerTransport: sendTransport,\r\n   *     localProducerTransport: localSendTransport,\r\n   *     params: { track: screenStream.getVideoTracks()[0] },\r\n   *     updateScreenProducer: setScreenProducer,\r\n   *     updateLocalScreenProducer: setLocalScreenProducer,\r\n   *     updateProducerTransport: setProducerTransport,\r\n   *     updateLocalProducerTransport: setLocalProducerTransport,\r\n   *     getUpdatedAllParams: getParams,\r\n   *   },\r\n   * });\r\n   * ```\r\n   */\r\n\r\n  async connectSendTransportScreen({\r\n    stream,\r\n    parameters,\r\n    targetOption = \"all\",\r\n  }: ConnectSendTransportScreenOptions): Promise<void> {\r\n    try {\r\n      let {\r\n        screenProducer,\r\n        device,\r\n        screenParams,\r\n        producerTransport,\r\n        params,\r\n        updateScreenProducer,\r\n        updateProducerTransport,\r\n      } = parameters;\r\n\r\n      device = parameters.getUpdatedAllParams().device;\r\n\r\n      // Retrieve screen share parameters\r\n      params = screenParams;\r\n\r\n      // Find VP9 codec for screen share\r\n      const codec = device?.rtpCapabilities?.codecs?.find(\r\n        (codec: { mimeType: string }) =>\r\n          codec.mimeType.toLowerCase() === \"video/vp9\"\r\n      );\r\n\r\n      // Produce screen share data using the producer transport\r\n      if (targetOption === \"remote\" || targetOption === \"all\") {\r\n        screenProducer = await producerTransport!.produce({\r\n          track: stream?.getVideoTracks()[0],\r\n          ...params,\r\n          codec,\r\n          appData: { mediaTag: \"screen-video\" },\r\n        });\r\n\r\n        // Update the screen producer and producer transport objects\r\n        updateScreenProducer(screenProducer);\r\n        updateProducerTransport(producerTransport);\r\n      }\r\n\r\n      // Produce screen share data using the local producer transport\r\n      if (targetOption === \"local\" || targetOption === \"all\") {\r\n        try {\r\n          await connectLocalSendTransportScreen({ stream, parameters });\r\n        } catch (localError) {\r\n          console.log(\"Error connecting local screen transport:\", localError);\r\n        }\r\n      }\r\n\r\n    } catch (error) {\r\n      console.log(\"connectSendTransportScreen error\", error);\r\n      throw error;\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Device, Producer, ProducerOptions, Transport } from 'mediasoup-client/lib/types';\r\nexport interface ConnectSendTransportVideoParameters {\r\n  videoProducer: Producer | null;\r\n  localVideoProducer?: Producer | null;\r\n  device: Device | null;\r\n  producerTransport: Transport | null;\r\n  localProducerTransport?: Transport | null;\r\n  islevel: string;\r\n  updateMainWindow: boolean;\r\n  updateVideoProducer: (producer: Producer | null) => void;\r\n  updateLocalVideoProducer?: (localProducer: Producer | null) => void;\r\n  updateProducerTransport: (transport: Transport | null) => void;\r\n  updateLocalProducerTransport?: (localTransport: Transport | null) => void;\r\n  updateUpdateMainWindow: (state: boolean) => void;\r\n  [key: string]: any; // Extendable for additional parameters\r\n}\r\n\r\nexport interface ConnectSendTransportVideoOptions {\r\n  videoParams: ProducerOptions;\r\n  parameters: ConnectSendTransportVideoParameters;\r\n  targetOption?: \"all\" | \"local\" | \"remote\";\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ConnectSendTransportVideoType = (\r\n  options: ConnectSendTransportVideoOptions,\r\n) => Promise<void>;\r\n\r\nexport const connectLocalSendTransportVideo = async({\r\n  videoParams,\r\n  parameters,\r\n}: ConnectSendTransportVideoOptions): Promise<void> => {\r\n  try {\r\n    let {\r\n      localVideoProducer,\r\n      localProducerTransport,\r\n      updateLocalVideoProducer,\r\n      updateLocalProducerTransport,\r\n    } = parameters;\r\n\r\n    // Produce local video data if transport exists\r\n    if (localProducerTransport) {\r\n      localVideoProducer = await localProducerTransport.produce(videoParams);\r\n\r\n      // Update local producer and transport\r\n      updateLocalVideoProducer?.(localVideoProducer);\r\n      updateLocalProducerTransport?.(localProducerTransport);\r\n    }\r\n  } catch (error) {\r\n    console.error(\"Error connecting local video transport:\", error);\r\n    throw error; // Re-throw to propagate the error\r\n  }\r\n};\r\n\r\n\r\n/**\r\n * Connects the send transport for video by producing video data and updates the relevant states.\r\n *\r\n * This function supports both a primary and a local video producer, delegating local handling to a separate function.\r\n *\r\n * @param {ConnectSendTransportVideoOptions} options - The options for connecting the send transport for video.\r\n * @param {ProducerOptions} options.videoParams - The parameters for the video producer.\r\n * @param {\"all\" | \"local\" | \"remote\"} [options.targetOption] - The target option for the video transport connection.\r\n * @param {ConnectSendTransportVideoParameters} options.parameters - The parameters for the video transport connection.\r\n * @param {Producer | null} options.parameters.videoProducer - The primary video producer.\r\n * @param {Producer | null} [options.parameters.localVideoProducer] - The local video producer.\r\n * @param {Device | null} options.parameters.device - The device information.\r\n * @param {Transport | null} options.parameters.producerTransport - The primary producer transport.\r\n * @param {Transport | null} [options.parameters.localProducerTransport] - The local producer transport.\r\n * @param {string} options.parameters.islevel - The connection level for the video transport.\r\n * @param {boolean} options.parameters.updateMainWindow - The flag to update the main window state.\r\n * @param {(producer: Producer | null) => void} options.parameters.updateVideoProducer - The function to update the video producer state.\r\n * @param {(localProducer: Producer | null) => void} [options.parameters.updateLocalVideoProducer] - The function to update the local video producer state.\r\n * @param {(transport: Transport | null) => void} options.parameters.updateProducerTransport - The function to update the producer transport state.\r\n * @param {(localTransport: Transport | null) => void} [options.parameters.updateLocalProducerTransport] - The function to update the local producer transport state.\r\n * @param {(state: boolean) => void} options.parameters.updateUpdateMainWindow - The function to update the main window state.\r\n * @param {any} [options.parameters] - Additional parameters for future use.\r\n * @returns {Promise<void>} A promise that resolves when the send transport for video is connected.\r\n *\r\n * @throws Will throw an error if the connection fails.\r\n *\r\n * @example\r\n * const options = {\r\n *   videoParams: {\r\n *     // video producer options (e.g., codec, bitrate)\r\n *   },\r\n *   targetOption: \"all\",\r\n *   parameters: {\r\n *     videoProducer: null,\r\n *     localVideoProducer: null,\r\n *     producerTransport: transport,\r\n *     localProducerTransport: localTransport,\r\n *     islevel: '2',\r\n *     updateMainWindow: false,\r\n *     updateVideoProducer: (producer) => console.log(\"Updated producer\"),\r\n *     updateLocalVideoProducer: (localProducer) => console.log(\"Updated local producer\"),\r\n *     updateProducerTransport: (transport) => console.log(\"Updated transport\"),\r\n *     updateLocalProducerTransport: (localTransport) => console.log(\"Updated local transport\"),\r\n *     updateUpdateMainWindow: (state) => console.log(\"Updated main window:\", state),\r\n *   },\r\n * };\r\n *\r\n * connectSendTransportVideo(options)\r\n *   .then(() => console.log(\"Video transport connected successfully\"))\r\n *   .catch((error) => console.error(\"Error connecting video transport:\", error));\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ConnectSendTransportVideo {\r\n\r\n  /**\r\n   * Connects the send transport for video by producing video data and updates the relevant states.\r\n   *\r\n   * This function supports both a primary and a local video producer, delegating local handling to a separate function.\r\n   *\r\n   * @param {ConnectSendTransportVideoOptions} options - The options for connecting the send transport for video.\r\n   * @param {ProducerOptions} options.videoParams - The parameters for the video producer.\r\n   * @param {\"all\" | \"local\" | \"remote\"} [options.targetOption] - The target option for the video transport connection.\r\n   * @param {ConnectSendTransportVideoParameters} options.parameters - The parameters for the video transport connection.\r\n   * @param {Producer | null} options.parameters.videoProducer - The primary video producer.\r\n   * @param {Producer | null} [options.parameters.localVideoProducer] - The local video producer.\r\n   * @param {Device | null} options.parameters.device - The device information.\r\n   * @param {Transport | null} options.parameters.producerTransport - The primary producer transport.\r\n   * @param {Transport | null} [options.parameters.localProducerTransport] - The local producer transport.\r\n   * @param {string} options.parameters.islevel - The connection level for the video transport.\r\n   * @param {boolean} options.parameters.updateMainWindow - The flag to update the main window state.\r\n   * @param {(producer: Producer | null) => void} options.parameters.updateVideoProducer - The function to update the video producer state.\r\n   * @param {(localProducer: Producer | null) => void} [options.parameters.updateLocalVideoProducer] - The function to update the local video producer state.\r\n   * @param {(transport: Transport | null) => void} options.parameters.updateProducerTransport - The function to update the producer transport state.\r\n   * @param {(localTransport: Transport | null) => void} [options.parameters.updateLocalProducerTransport] - The function to update the local producer transport state.\r\n   * @param {(state: boolean) => void} options.parameters.updateUpdateMainWindow - The function to update the main window state.\r\n   * @param {any} [options.parameters] - Additional parameters for future use.\r\n   * @returns {Promise<void>} A promise that resolves when the send transport for video is connected.\r\n   *\r\n   * @throws Will throw an error if the connection fails.\r\n   *\r\n   * @example\r\n   * const options = {\r\n   *   videoParams: {\r\n   *     // video producer options (e.g., codec, bitrate)\r\n   *   },\r\n   *   targetOption: \"all\",\r\n   *   parameters: {\r\n   *     videoProducer: null,\r\n   *     localVideoProducer: null,\r\n   *     producerTransport: transport,\r\n   *     localProducerTransport: localTransport,\r\n   *     islevel: '2',\r\n   *     updateMainWindow: false,\r\n   *     updateVideoProducer: (producer) => console.log(\"Updated producer\"),\r\n   *     updateLocalVideoProducer: (localProducer) => console.log(\"Updated local producer\"),\r\n   *     updateProducerTransport: (transport) => console.log(\"Updated transport\"),\r\n   *     updateLocalProducerTransport: (localTransport) => console.log(\"Updated local transport\"),\r\n   *     updateUpdateMainWindow: (state) => console.log(\"Updated main window:\", state),\r\n   *   },\r\n   * };\r\n   *\r\n   * connectSendTransportVideo(options)\r\n   *   .then(() => console.log(\"Video transport connected successfully\"))\r\n   *   .catch((error) => console.error(\"Error connecting video transport:\", error));\r\n   */\r\n\r\n  connectSendTransportVideo = async ({\r\n    videoParams,\r\n    parameters,\r\n    targetOption = 'all',\r\n  }: ConnectSendTransportVideoOptions): Promise<void> => {\r\n    try {\r\n      let {\r\n        videoProducer,\r\n        producerTransport,\r\n        islevel,\r\n        updateMainWindow,\r\n        updateVideoProducer,\r\n        updateProducerTransport,\r\n        updateUpdateMainWindow,\r\n      } = parameters;\r\n\r\n      // Produce video data using the primary transport\r\n      if (targetOption === \"all\" || targetOption === \"remote\") {\r\n        videoProducer = await producerTransport!.produce(videoParams);\r\n\r\n        // Update main window state based on the video connection level\r\n        if (islevel === \"2\") {\r\n          updateMainWindow = true;\r\n        }\r\n\r\n        // Update video producer, transport, and UI state\r\n        updateVideoProducer(videoProducer);\r\n        updateProducerTransport(producerTransport);\r\n        updateUpdateMainWindow(updateMainWindow);\r\n      }\r\n\r\n      // Handle local video transport regardless of primary success or\r\n      if (targetOption === \"all\" || targetOption === \"local\") {\r\n        try {\r\n          await connectLocalSendTransportVideo({ videoParams, parameters });\r\n        } catch (localError) {\r\n          console.log(\"Error connecting local video transport:\", localError);\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.log(\"connectSendTransportVideo error\", error);\r\n      throw error;\r\n    }\r\n  };\r\n}\r\n","import { Component, Input, OnInit, OnDestroy, HostListener, Optional, Inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { getOverlayPosition } from '../../../methods/utils/get-overlay-position.util';\r\n\r\nexport interface MiniAudioOptions {\r\n  visible?: boolean;\r\n  customStyle?: any;\r\n  name?: string;\r\n  showWaveform?: boolean;\r\n  overlayPosition?: string;\r\n  barColor?: string;\r\n  textColor?: string;\r\n  nameTextStyling?: any;\r\n  imageSource?: string;\r\n  roundedImage?: boolean;\r\n  imageStyle?: any;\r\n}\r\n\r\nexport type MiniAudioType = (options: MiniAudioOptions) => HTMLElement;\r\n\r\n/**\r\n * MiniAudio component is a draggable, customizable mini audio player with optional waveform animations.\r\n *\r\n * @selector app-mini-audio\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @template\r\n * ```html\r\n * <div *ngIf=\"visible\" class=\"modal-container\" [ngStyle]=\"{ transform: 'translate(' + position.x + 'px, ' + position.y + 'px)' }\" (mousedown)=\"handleMouseDown($event)\">\r\n *   <div class=\"card\" [ngStyle]=\"customStyle\">\r\n *     <ng-container *ngIf=\"imageSource\">\r\n *       <img [src]=\"imageSource\" [ngStyle]=\"getImageStyle()\" alt=\"Background\" class=\"background-image\" />\r\n *     </ng-container>\r\n *     <div class=\"name-text\" [ngStyle]=\"combineStyles({ color: textColor }, nameTextStyling)\">\r\n *       {{ name }}\r\n *     </div>\r\n *     <div [ngStyle]=\"getOverlayPosition(overlayPosition)\" class=\"overlay-web\">\r\n *       <div class=\"waveform-web\">\r\n *         <div *ngFor=\"let animation of waveformAnimations; let i = index\"\r\n *              [ngStyle]=\"{ height: animation == 0 ? '1px' : '30px', width: '10px', backgroundColor: barColor }\"\r\n *              class=\"bar\">\r\n *         </div>\r\n *       </div>\r\n *     </div>\r\n *   </div>\r\n * </div>\r\n * ```\r\n *\r\n * @styles\r\n * - `.modal-container`: Positioning and drag area.\r\n * - `.card`: The main container styling.\r\n * - `.background-image`: Styling for an optional background image.\r\n * - `.name-text`: Styling for name text with customizable color.\r\n * - `.overlay-web` and `.waveform-web`: Contains and styles the waveform animation bars.\r\n *\r\n * @inputs\r\n * - `visible` (boolean): Show/hide the component.\r\n * - `customStyle` (object): Custom styles for the component.\r\n * - `name` (string): Text to display as the name.\r\n * - `showWaveform` (boolean): Show/hide waveform animations.\r\n * - `overlayPosition` (string): Position of the overlay.\r\n * - `barColor` (string): Color of waveform bars.\r\n * - `textColor` (string): Color of name text.\r\n * - `nameTextStyling` (object): Additional styles for the name text.\r\n * - `imageSource` (string): URL of the background image.\r\n * - `roundedImage` (boolean): If true, applies rounded corners to the image.\r\n * - `imageStyle` (object): Custom styles for the image.\r\n *\r\n * @property `waveformAnimations` (array): Tracks animation states for each waveform bar.\r\n * @property `position` (object): Tracks x and y positioning for dragging.\r\n *\r\n * @methods\r\n * - `ngOnInit()`: Starts waveform animations if `showWaveform` is true.\r\n * - `ngOnDestroy()`: Clears waveform animation intervals.\r\n * - `animateWaveform()`: Sets intervals for each bar's animation.\r\n * - `handleMouseDown(event: MouseEvent)`: Starts dragging on mousedown.\r\n * - `handleMouseMove(event: MouseEvent)`: Updates position during drag.\r\n * - `handleMouseUp()`: Ends dragging on mouseup.\r\n *\r\n * @example\r\n * ```html\r\n * <app-mini-audio [visible]=\"true\" [name]=\"'Audio Player'\" [barColor]=\"'blue'\" [imageSource]=\"'/path/to/image.png'\"></app-mini-audio>\r\n * ```\r\n */\r\n\r\n@Component({\r\n    selector: 'app-mini-audio',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div\r\n      *ngIf=\"visible\"\r\n      class=\"modal-container\"\r\n      [ngStyle]=\"{ transform: 'translate(' + position.x + 'px, ' + position.y + 'px)' }\"\r\n      (mousedown)=\"handleMouseDown($event)\"\r\n    >\r\n      <div class=\"card\" [ngStyle]=\"customStyle\">\r\n        <ng-container *ngIf=\"imageSource\">\r\n          <img\r\n            [src]=\"imageSource\"\r\n            [ngStyle]=\"getImageStyle()\"\r\n            alt=\"Background\"\r\n            class=\"background-image\"\r\n          />\r\n        </ng-container>\r\n        <div class=\"name-text\" [ngStyle]=\"combineStyles({ color: textColor }, nameTextStyling)\">\r\n          {{ name }}\r\n        </div>\r\n        <div [ngStyle]=\"getOverlayPosition(overlayPosition)\" class=\"overlay-web\">\r\n          <div class=\"waveform-web\">\r\n            <div\r\n              *ngFor=\"let animation of waveformAnimations; let i = index\"\r\n              [ngStyle]=\"{\r\n                height: animation == 0 ? '1px' : '30px',\r\n                width: '10px',\r\n                backgroundColor: barColor\r\n              }\"\r\n              class=\"bar\"\r\n            ></div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  `,\r\n    styles: [\r\n        `\r\n      .modal-container {\r\n        position: absolute;\r\n        top: 0;\r\n        right: 0;\r\n        padding: 0;\r\n        margin: 0;\r\n        width: 100px;\r\n        height: 100px;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        background-color: rgba(0, 45, 33, 0.5);\r\n        z-index: 8;\r\n        elevation: 8;\r\n      }\r\n\r\n      .card {\r\n        width: 100%;\r\n        height: 100%;\r\n        margin: 0;\r\n        padding: 0;\r\n        background-color: #2c678f;\r\n      }\r\n\r\n      .background-image {\r\n        position: absolute;\r\n        width: 70px;\r\n        height: 70px;\r\n        justify-content: center;\r\n        align-items: center;\r\n        align-self: center;\r\n        top: 40%;\r\n        left: 50%;\r\n        transform: translate(-35px, -10px);\r\n      }\r\n\r\n      .name-text {\r\n        font-size: 20px;\r\n        font-weight: bold;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        background-color: rgba(0, 0, 0, 0.5);\r\n        width: 100%;\r\n        padding-top: 5px;\r\n        padding-bottom: 5px;\r\n        text-align: center;\r\n        z-index: 2;\r\n      }\r\n\r\n      .overlay-web {\r\n        position: absolute;\r\n        width: 100%;\r\n        height: 100%;\r\n        display: grid;\r\n        grid-template-columns: 1fr 12fr 1fr;\r\n        grid-gap: 3px;\r\n        z-index: 3;\r\n      }\r\n\r\n      .waveform-web {\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        background-color: rgba(0, 0, 0, 0.05);\r\n        padding: 0;\r\n        flex-direction: row;\r\n      }\r\n\r\n      .bar {\r\n        flex: 1;\r\n        opacity: 0.35;\r\n        margin-right: 0.5px;\r\n      }\r\n    `,\r\n    ]\r\n})\r\nexport class MiniAudio implements OnInit, OnDestroy {\r\n  @Input() visible = true;\r\n  @Input() customStyle: any;\r\n  @Input() name = '';\r\n  @Input() showWaveform = false;\r\n  @Input() overlayPosition = '';\r\n  @Input() barColor = 'red';\r\n  @Input() textColor = 'white';\r\n  @Input() nameTextStyling: any = {};\r\n  @Input() imageSource = '';\r\n  @Input() roundedImage = false;\r\n  @Input() imageStyle: any = {};\r\n\r\n  waveformAnimations: number[] = Array.from({ length: 9 }, () => 0);\r\n  intervals: NodeJS.Timeout[] = [];\r\n  position = { x: 0, y: 0 };\r\n  isDragging = false;\r\n  dragOffset = { x: 0, y: 0 };\r\n\r\n  constructor(\r\n    @Optional() @Inject('visible') injectedVisible: boolean,\r\n    @Optional() @Inject('customStyle') injectedCustomStyle: any,\r\n    @Optional() @Inject('name') injectedName: string,\r\n    @Optional() @Inject('showWaveform') injectedShowWaveform: boolean,\r\n    @Optional() @Inject('overlayPosition') injectedOverlayPosition: string,\r\n    @Optional() @Inject('barColor') injectedBarColor: string,\r\n    @Optional() @Inject('textColor') injectedTextColor: string,\r\n    @Optional() @Inject('nameTextStyling') injectedNameTextStyling: any,\r\n    @Optional() @Inject('imageSource') injectedImageSource: string,\r\n    @Optional() @Inject('roundedImage') injectedRoundedImage: boolean,\r\n    @Optional() @Inject('imageStyle') injectedImageStyle: any,\r\n  ) {\r\n    this.visible = injectedVisible != null ? injectedVisible : this.visible;\r\n    this.customStyle = injectedCustomStyle || this.customStyle;\r\n    this.name = injectedName || this.name;\r\n    this.showWaveform = injectedShowWaveform != null ? injectedShowWaveform : this.showWaveform;\r\n    this.overlayPosition = injectedOverlayPosition || this.overlayPosition;\r\n    this.barColor = injectedBarColor || this.barColor;\r\n    this.textColor = injectedTextColor || this.textColor;\r\n    this.nameTextStyling = injectedNameTextStyling || this.nameTextStyling;\r\n    this.imageSource = injectedImageSource || this.imageSource;\r\n    this.roundedImage = injectedRoundedImage != null ? injectedRoundedImage : this.roundedImage;\r\n    this.imageStyle = injectedImageStyle || this.imageStyle;\r\n  }\r\n\r\n  ngOnInit() {\r\n    if (this.showWaveform) {\r\n      this.animateWaveform();\r\n    } else {\r\n      this.resetWaveform();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.clearIntervals();\r\n  }\r\n\r\n  animateWaveform() {\r\n    this.intervals = this.waveformAnimations.map((_, index) =>\r\n      setInterval(() => this.animateBar(index), this.getAnimationDuration(index) * 2),\r\n    );\r\n  }\r\n\r\n  animateBar(index: number) {\r\n    this.waveformAnimations[index] = 1;\r\n    setTimeout(() => {\r\n      this.waveformAnimations[index] = 0;\r\n    }, this.getAnimationDuration(index));\r\n  }\r\n\r\n  resetWaveform() {\r\n    this.waveformAnimations.fill(0);\r\n  }\r\n\r\n  clearIntervals() {\r\n    this.intervals.forEach((interval) => clearInterval(interval));\r\n  }\r\n\r\n  getAnimationDuration(index: number): number {\r\n    const durations = [474, 433, 407, 458, 400, 427, 441, 419, 487];\r\n    return durations[index] || 0;\r\n  }\r\n\r\n  getImageStyle() {\r\n    return {\r\n      ...this.imageStyle,\r\n      ...(this.roundedImage ? { borderRadius: '20%' } : {}),\r\n    };\r\n  }\r\n\r\n  combineStyles(baseStyle: any, additionalStyles: any) {\r\n    return { ...baseStyle, ...additionalStyles };\r\n  }\r\n\r\n  handleMouseDown(event: MouseEvent) {\r\n    this.isDragging = true;\r\n    this.dragOffset = {\r\n      x: event.clientX - this.position.x,\r\n      y: event.clientY - this.position.y,\r\n    };\r\n  }\r\n\r\n  @HostListener('document:mousemove', ['$event'])\r\n  handleMouseMove(event: MouseEvent) {\r\n    if (this.isDragging) {\r\n      this.position = {\r\n        x: event.clientX - this.dragOffset.x,\r\n        y: event.clientY - this.dragOffset.y,\r\n      };\r\n    }\r\n  }\r\n\r\n  @HostListener('document:mouseup')\r\n  handleMouseUp() {\r\n    this.isDragging = false;\r\n  }\r\n\r\n  getOverlayPosition(position: string) {\r\n    return getOverlayPosition({ position });\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  Input,\r\n  OnInit,\r\n  OnDestroy,\r\n  Injector,\r\n  Inject,\r\n  Optional,\r\n  ViewChild,\r\n  ElementRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n  ReUpdateInterType,\r\n  UpdateParticipantAudioDecibelsType,\r\n  ReUpdateInterParameters,\r\n  Participant,\r\n} from '../../../@types/types';\r\nimport { Consumer } from 'mediasoup-client/lib/types';\r\n\r\nexport interface MiniAudioPlayerParameters extends ReUpdateInterParameters {\r\n  breakOutRoomStarted: boolean;\r\n  breakOutRoomEnded: boolean;\r\n  limitedBreakRoom: Participant[];\r\n\r\n  // mediasfu functions\r\n  reUpdateInter: ReUpdateInterType;\r\n  updateParticipantAudioDecibels: UpdateParticipantAudioDecibelsType;\r\n\r\n  getUpdatedAllParams: () => MiniAudioPlayerParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface MiniAudioPlayerOptions {\r\n  stream: MediaStream | null;\r\n  consumer: Consumer | null;\r\n  remoteProducerId: string;\r\n  parameters: MiniAudioPlayerParameters;\r\n  MiniAudioComponent?: any;\r\n  miniAudioProps?: Record<string, any>;\r\n}\r\n\r\nexport type MiniAudioPlayerType = (options: MiniAudioPlayerOptions) => HTMLElement;\r\n\r\n/**\r\n * The `MiniAudioPlayer` component manages audio playback for participants in a meeting, including volume control, audio visualization, and connection to the main application state.\r\n * It uses audio analysis to display waveforms for active speakers and supports breakout room conditions, participant-specific audio decibel updates, and other media state dependencies.\r\n *\r\n * @component\r\n * @example\r\n * ```html\r\n * <app-mini-audio-player\r\n *    [stream]=\"audioStream\"\r\n *    [consumer]=\"audioConsumer\"\r\n *    [remoteProducerId]=\"producerId\"\r\n *    [parameters]=\"audioPlayerParameters\">\r\n * </app-mini-audio-player>\r\n * ```\r\n *\r\n * @param {MediaStream} [stream] - The audio stream from the participant.\r\n * @param {Consumer} [consumer] - The audio consumer for the participant.\r\n * @param {string} [remoteProducerId] - Unique ID for the remote producer of the audio stream.\r\n * @param {MiniAudioPlayerParameters} [parameters] - Configuration object with various parameters and utility functions for audio management.\r\n * @param {Component} [MiniAudioComponent] - Optional audio visualization component injected into the `MiniAudioPlayer`.\r\n * @param {Record<string, any>} [miniAudioProps] - Additional properties for configuring the audio visualization component.\r\n *\r\n * @returns {HTMLElement} The created audio player element.\r\n *\r\n * @remarks\r\n * The `MiniAudioPlayer` processes audio data and manage audio levels.\r\n * It supports a dynamic breakout room feature that restricts audio visibility to limited participants, updates decibel levels for individual participants, and adjusts the waveforms based on audio activity.\r\n *\r\n * Key functionalities include:\r\n * - Automatically toggling wave visualization for active speakers.\r\n * - Handling audio settings for different room states (e.g., shared screens, breakout rooms).\r\n * - Injecting configuration and parameter dependencies dynamically through `Injector`.\r\n *\r\n * @dependencies\r\n * - `setInterval` for periodic volume level checks (auto-clears on component destruction).\r\n * - `ReUpdateInterType` and `UpdateParticipantAudioDecibelsType` for dynamic participant audio decibel management.\r\n *\r\n * @example\r\n * ```typescript\r\n * const audioPlayerParameters: MiniAudioPlayerParameters = {\r\n *   breakOutRoomStarted: true,\r\n *   breakOutRoomEnded: false,\r\n *   limitedBreakRoom: participantList,\r\n *   reUpdateInter: reUpdateInterFunc,\r\n *   updateParticipantAudioDecibels: updateAudioDecibelsFunc,\r\n *   getUpdatedAllParams: () => getParams(),\r\n * };\r\n *\r\n * // Initialize component with required inputs\r\n * <app-mini-audio-player\r\n *   [stream]=\"audioStream\"\r\n *   [consumer]=\"audioConsumer\"\r\n *   [remoteProducerId]=\"participantId\"\r\n *   [parameters]=\"audioPlayerParameters\"\r\n * ></app-mini-audio-player>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n    selector: 'app-mini-audio-player',\r\n    templateUrl: './mini-audio-player.component.html',\r\n    styleUrls: ['./mini-audio-player.component.css'],\r\n    imports: [CommonModule]\r\n})\r\nexport class MiniAudioPlayer implements OnInit, OnDestroy {\r\n  @Input() stream: MediaStream | null = null;\r\n  @Input() consumer: Consumer | null = null;\r\n  @Input() remoteProducerId = '';\r\n  @Input() parameters: MiniAudioPlayerParameters = {} as MiniAudioPlayerParameters;\r\n  @Input() MiniAudioComponent: any;\r\n  @Input() miniAudioProps: Record<string, any> = {};\r\n\r\n  @ViewChild('audioElement', { static: true }) audioElement!: ElementRef<HTMLAudioElement>;\r\n\r\n  showWaveModal = false;\r\n  isMuted = false;\r\n  intervalId: any;\r\n  autoWaveCheck = false;\r\n\r\n  private previousShowWaveModal: boolean | null = null;\r\n  private previousIsMuted: boolean | null = null;\r\n\r\n  private injectorCache = new WeakMap<any, Injector>();\r\n  private cachedMiniAudioProps: any;\r\n\r\n  constructor(\r\n    private injector: Injector,\r\n    @Optional() @Inject('stream') injectedStream: MediaStream | null,\r\n    @Optional() @Inject('consumer') consumer: Consumer,\r\n    @Optional() @Inject('remoteProducerId') injectedRemoteProducerId: string,\r\n    @Optional() @Inject('parameters') injectedParameters: MiniAudioPlayerParameters,\r\n    @Optional() @Inject('MiniAudioComponent') injectedMiniAudioComponent: any,\r\n    @Optional() @Inject('miniAudioProps') injectedMiniAudioProps: Record<string, any>,\r\n  ) {\r\n    this.stream = injectedStream || this.stream;\r\n    this.consumer = consumer || this.consumer;\r\n    this.remoteProducerId = injectedRemoteProducerId || this.remoteProducerId;\r\n    this.parameters = injectedParameters || this.parameters;\r\n    this.MiniAudioComponent = injectedMiniAudioComponent || this.MiniAudioComponent;\r\n    this.miniAudioProps = injectedMiniAudioProps || this.miniAudioProps;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.stream) {\r\n      this.setupAudioProcessing();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.intervalId) {\r\n      clearInterval(this.intervalId);\r\n    }\r\n  }\r\n    setupAudioProcessing() {\r\n    let averageLoudness = 128;\r\n\r\n    let consLow = false;\r\n\r\n    this.intervalId = setInterval(() => {\r\n      try {\r\n        const receiver = this.consumer?.rtpReceiver;\r\n        receiver?.getStats().then((stats) => {\r\n          stats.forEach((report) => {\r\n            if (\r\n              report.type === 'inbound-rtp' &&\r\n              report.kind === 'audio' &&\r\n              report.audioLevel\r\n            ) {\r\n              averageLoudness = 127.5 + report.audioLevel * 127.5;\r\n            }\r\n          });\r\n        });\r\n      } catch {\r\n        // Do nothing\r\n      }\r\n\r\n      const updatedParams = this.parameters.getUpdatedAllParams();\r\n      let {\r\n        eventType,\r\n        participants,\r\n        paginatedStreams,\r\n        currentUserPage,\r\n        adminNameStream,\r\n        dispActiveNames,\r\n        activeSounds,\r\n        reUpdateInter,\r\n        updateParticipantAudioDecibels,\r\n        updateActiveSounds,\r\n        shared,\r\n        shareScreenStarted,\r\n        breakOutRoomStarted,\r\n        breakOutRoomEnded,\r\n        limitedBreakRoom,\r\n      } = updatedParams;\r\n\r\n      const participant = participants.find((obj: any) => obj.audioID == this.remoteProducerId);\r\n\r\n      let audioActiveInRoom = true;\r\n      if (participant) {\r\n        if (breakOutRoomStarted && !breakOutRoomEnded) {\r\n          if (!limitedBreakRoom.map((obj: any) => obj.name).includes(participant.name)) {\r\n            audioActiveInRoom = false;\r\n            averageLoudness = 127;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (this.parameters.meetingDisplayType != 'video') {\r\n        this.autoWaveCheck = true;\r\n      }\r\n      if (shared || shareScreenStarted) {\r\n        this.autoWaveCheck = false;\r\n      }\r\n\r\n      if (participant) {\r\n        this.isMuted = participant.muted || false;\r\n\r\n        if (eventType != 'chat' && eventType != 'broadcast') {\r\n          updateParticipantAudioDecibels({\r\n            name: participant.name ?? '',\r\n            averageLoudness: averageLoudness,\r\n            audioDecibels: updatedParams.audioDecibels,\r\n            updateAudioDecibels: updatedParams['updateAudioDecibels'],\r\n          });\r\n        }\r\n\r\n        const inPage = paginatedStreams[currentUserPage].findIndex(\r\n          (obj: any) => obj.name == participant.name,\r\n        );\r\n\r\n        if (participant.name && !dispActiveNames.includes(participant.name) && inPage == -1) {\r\n          this.autoWaveCheck = false;\r\n          if (!adminNameStream) {\r\n            const adminParticipant = participants.find((obj: any) => obj.islevel == '2');\r\n            adminNameStream = adminParticipant ? adminParticipant.name : '';\r\n          }\r\n\r\n          if (participant.name == adminNameStream) {\r\n            this.autoWaveCheck = true;\r\n          }\r\n        } else {\r\n          this.autoWaveCheck = true;\r\n        }\r\n\r\n        if (\r\n          participant.videoID ||\r\n          this.autoWaveCheck ||\r\n          (breakOutRoomStarted && !breakOutRoomEnded && audioActiveInRoom)\r\n        ) {\r\n          this.showWaveModal = false;\r\n\r\n          if (averageLoudness > 127.5) {\r\n            if (!activeSounds.includes(participant.name)) {\r\n              activeSounds.push(participant.name);\r\n              consLow = false;\r\n\r\n              if ((shareScreenStarted || shared) && !participant.videoID) {\r\n                // do nothing\r\n              } else {\r\n                if (eventType != 'chat' && eventType != 'broadcast' && participant.name) {\r\n                  reUpdateInter({\r\n                    name: participant.name,\r\n                    add: true,\r\n                    average: averageLoudness,\r\n                    parameters: updatedParams,\r\n                  });\r\n                }\r\n              }\r\n            }\r\n          } else {\r\n            if (activeSounds.includes(participant.name) && consLow) {\r\n              activeSounds.splice(activeSounds.indexOf(participant.name), 1);\r\n\r\n              if ((shareScreenStarted || shared) && !participant.videoID) {\r\n                // do nothing\r\n              } else {\r\n                if (eventType != 'chat' && eventType != 'broadcast' && participant.name) {\r\n                  reUpdateInter({\r\n                    name: participant.name,\r\n                    average: averageLoudness,\r\n                    parameters: updatedParams,\r\n                  });\r\n                }\r\n              }\r\n            } else {\r\n              consLow = true;\r\n            }\r\n          }\r\n        } else {\r\n          if (averageLoudness > 127.5) {\r\n            if (!this.parameters['autoWave']) {\r\n              this.showWaveModal = false;\r\n            } else {\r\n              this.showWaveModal = true;\r\n            }\r\n\r\n            if (!activeSounds.includes(participant.name)) {\r\n              activeSounds.push(participant.name);\r\n            }\r\n            if ((shareScreenStarted || shared) && !participant.videoID) {\r\n              // do nothing\r\n            } else {\r\n              if (eventType != 'chat' && eventType != 'broadcast' && participant.name) {\r\n                reUpdateInter({\r\n                  name: participant.name,\r\n                  add: true,\r\n                  average: averageLoudness,\r\n                  parameters: updatedParams,\r\n                });\r\n              }\r\n            }\r\n          } else {\r\n            this.showWaveModal = false;\r\n            if (activeSounds.includes(participant.name)) {\r\n              activeSounds.splice(activeSounds.indexOf(participant.name), 1);\r\n            }\r\n            if ((shareScreenStarted || shared) && !participant.videoID) {\r\n              // do nothing\r\n            } else {\r\n              if (eventType != 'chat' && eventType != 'broadcast' && participant.name) {\r\n                reUpdateInter({\r\n                  name: participant.name,\r\n                  average: averageLoudness,\r\n                  parameters: updatedParams,\r\n                });\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        updateActiveSounds(activeSounds);\r\n      } else {\r\n        this.showWaveModal = false;\r\n        this.isMuted = true;\r\n      }\r\n    }, 2000);\r\n  }\r\n\r\n  createInjector(inputs: any) {\r\n    if (!this.injectorCache.has(inputs)) {\r\n      const injector = Injector.create({\r\n        providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\r\n        parent: this.injector,\r\n      });\r\n      this.injectorCache.set(inputs, injector);\r\n    }\r\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n    return this.injectorCache.get(inputs)!;\r\n  }\r\n\r\n  getMiniAudioProps() {\r\n    if (\r\n      !this.cachedMiniAudioProps ||\r\n      this.showWaveModal !== this.previousShowWaveModal ||\r\n      this.isMuted !== this.previousIsMuted\r\n    ) {\r\n      this.cachedMiniAudioProps = {\r\n        ...this.miniAudioProps,\r\n        visible: this.showWaveModal && !this.isMuted,\r\n        showWaveform: this.showWaveModal,\r\n      };\r\n\r\n      this.previousShowWaveModal = this.showWaveModal;\r\n      this.previousIsMuted = this.isMuted;\r\n    }\r\n    return this.cachedMiniAudioProps;\r\n  }\r\n}\r\n","<div class=\"container\">\r\n  <audio *ngIf=\"stream\" autoplay playsinline #audioElement [srcObject]=\"stream\"></audio>\r\n\r\n  <ng-container *ngIf=\"MiniAudioComponent\">\r\n    <ng-container *ngComponentOutlet=\"MiniAudioComponent; injector: createInjector(getMiniAudioProps())\"></ng-container>\r\n  </ng-container>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { MiniAudio } from '../components/display-components/mini-audio/mini-audio.component';\r\nimport { MiniAudioPlayer } from '../methods/utils/mini-audio-player/mini-audio-player.component';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  ReorderStreamsType,\r\n  ReorderStreamsParameters,\r\n  Participant,\r\n  PrepopulateUserMediaType,\r\n  PrepopulateUserMediaParameters,\r\n  Stream,\r\n  EventType,\r\n} from '../@types/types';\r\nimport { Consumer } from 'mediasoup-client/lib/types';\r\n\r\nexport interface ConsumerResumeParameters\r\n  extends ReorderStreamsParameters,\r\n    PrepopulateUserMediaParameters {\r\n  nStream: MediaStream | null;\r\n  allAudioStreams: (Stream | Participant)[];\r\n  allVideoStreams: (Stream | Participant)[];\r\n  streamNames: Stream[];\r\n  audStreamNames: Stream[];\r\n  updateMainWindow: boolean;\r\n  shared: boolean;\r\n  shareScreenStarted: boolean;\r\n  screenId?: string;\r\n  participants: Array<Participant>;\r\n  eventType: EventType;\r\n  meetingDisplayType: string;\r\n  mainScreenFilled: boolean;\r\n  first_round: boolean;\r\n  lock_screen: boolean;\r\n  oldAllStreams: (Stream | Participant)[];\r\n  adminVidID?: string;\r\n  mainHeightWidth: number;\r\n  member: string;\r\n  audioOnlyStreams: Array<any>;\r\n  gotAllVids: boolean;\r\n  defer_receive: boolean;\r\n  firstAll: boolean;\r\n  remoteScreenStream: Stream[];\r\n  hostLabel: string;\r\n  whiteboardStarted: boolean;\r\n  whiteboardEnded: boolean;\r\n  updateUpdateMainWindow: (value: boolean) => void;\r\n  updateAllAudioStreams: (value: (Stream | Participant)[]) => void;\r\n  updateAllVideoStreams: (value: (Stream | Participant)[]) => void;\r\n  updateStreamNames: (value: Stream[]) => void;\r\n  updateAudStreamNames: (value: Stream[]) => void;\r\n  updateNStream: (value: MediaStream | null) => void;\r\n  updateMainHeightWidth: (value: number) => void;\r\n  updateLock_screen: (value: boolean) => void;\r\n  updateFirstAll: (value: boolean) => void;\r\n  updateRemoteScreenStream: (value: Stream[]) => void;\r\n  updateOldAllStreams: (value: (Stream | Participant)[]) => void;\r\n  updateAudioOnlyStreams: (value: Array<any>) => void;\r\n  updateShareScreenStarted: (value: boolean) => void;\r\n  updateGotAllVids: (value: boolean) => void;\r\n  updateScreenId: (value: string) => void;\r\n  updateDefer_receive: (value: boolean) => void;\r\n\r\n  //mediasfu functions\r\n  reorderStreams: ReorderStreamsType;\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n  getUpdatedAllParams: () => ConsumerResumeParameters;\r\n  [key: string]: any;\r\n}\r\n\r\ninterface ResumeParams {\r\n  id: string;\r\n  producerId: string;\r\n  kind: string;\r\n  rtpParameters: any;\r\n}\r\n\r\nexport interface ConsumerResumeOptions {\r\n  track: MediaStreamTrack;\r\n  kind: string;\r\n  remoteProducerId: string;\r\n  params: ResumeParams;\r\n  parameters: ConsumerResumeParameters;\r\n  nsock: Socket;\r\n  consumer: Consumer;\r\n}\r\n\r\n//export the type definition for the function\r\nexport type ConsumerResumeType = (options: ConsumerResumeOptions) => Promise<void>;\r\n\r\n  /**\r\n   * Resumes a consumer, making it ready for use.\r\n   *\r\n   * @param {ConsumerResumeOptions} options - The options for resuming the consumer.\r\n   * @param {MediaStreamTrack} options.track - The media stream track associated with the resumed consumer.\r\n   * @param {string} options.kind - The type of media ('audio' or 'video') being resumed.\r\n   * @param {string} options.remoteProducerId - The ID of the remote producer associated with the resumed consumer.\r\n   * @param {ResumeParams} options.params - Additional parameters related to the resumed consumer.\r\n   * @param {ConsumerResumeParameters} options.parameters - The parameters object containing various utility functions and state.\r\n   * @param {Socket} options.nsock - The socket associated with the consumer.\r\n   * @param {Consumer} options.consumer - The consumer to resume.\r\n   * @throws Will throw an error if an issue occurs during the consumer resumption.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const options = {\r\n   *   track: mediaStreamTrack, // MediaStreamTrack to be resumed\r\n   *   remoteProducerId: 'producer-id', // Remote producer ID\r\n   *   params: {\r\n   *     id: 'consumer-id',\r\n   *     producerId: 'producer-id',\r\n   *     kind: 'audio',\r\n   *     rtpParameters: {},\r\n   *   },\r\n   *   parameters: consumerResumeParameters, // Parameters for the consumer\r\n   *   nsock: socket, // Socket for communication\r\n   *   consumer: consumer, // Consumer to resume\r\n   * };\r\n   *\r\n   * consumerResume(options)\r\n   *   .then(() => {\r\n   *     console.log('Consumer resumed successfully');\r\n   *   })\r\n   *   .catch((error) => {\r\n   *     console.error('Error resuming consumer:', error);\r\n   *   });\r\n   * ```\r\n   */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ConsumerResume {\r\n  /**\r\n   * Resumes a consumer, making it ready for use.\r\n   *\r\n   * @param {Object} options - The options object.\r\n   * @param {MediaStreamTrack} options.track - The media stream track associated with the resumed consumer.\r\n   * @param {string} options.kind - The type of media ('audio' or 'video') being resumed.\r\n   * @param {string} options.remoteProducerId - The ID of the remote producer associated with the resumed consumer.\r\n   * @param {Object} options.params - Additional parameters related to the resumed consumer.\r\n   * @param {Object} options.parameters - The parameters object containing various utility functions and state.\r\n   * @param {Object} options.nsock - The socket associated with the consumer.\r\n   * @param {Object} options.consumer - The consumer to resume.\r\n   * @throws Throws an error if an issue occurs during the consumer resumption.\r\n   */\r\n  consumerResume = async ({\r\n    track,\r\n    remoteProducerId,\r\n    params,\r\n    parameters,\r\n    nsock,\r\n    consumer,\r\n  }: ConsumerResumeOptions): Promise<void> => {\r\n    try {\r\n      // Get updated parameters\r\n      parameters = parameters.getUpdatedAllParams();\r\n\r\n      // Destructure parameters\r\n      let {\r\n        nStream,\r\n        allAudioStreams,\r\n        allVideoStreams,\r\n        streamNames,\r\n        audStreamNames,\r\n        updateMainWindow,\r\n        shared,\r\n        shareScreenStarted,\r\n        screenId,\r\n        participants,\r\n        eventType,\r\n        meetingDisplayType,\r\n        mainScreenFilled,\r\n        first_round,\r\n        lock_screen,\r\n        oldAllStreams,\r\n\r\n        adminVidID,\r\n        mainHeightWidth,\r\n        member,\r\n        audioOnlyStreams,\r\n        gotAllVids,\r\n        defer_receive,\r\n        firstAll,\r\n        remoteScreenStream,\r\n        hostLabel,\r\n        whiteboardStarted,\r\n        whiteboardEnded,\r\n\r\n        updateUpdateMainWindow,\r\n        updateAllAudioStreams,\r\n        updateAllVideoStreams,\r\n        updateStreamNames,\r\n        updateAudStreamNames,\r\n        updateNStream,\r\n        updateMainHeightWidth,\r\n        updateLock_screen,\r\n        updateFirstAll,\r\n        updateRemoteScreenStream,\r\n        updateOldAllStreams,\r\n        updateAudioOnlyStreams,\r\n        updateShareScreenStarted,\r\n        updateGotAllVids,\r\n        updateScreenId,\r\n        updateDefer_receive,\r\n\r\n        //mediasfu functions\r\n        reorderStreams,\r\n        prepopulateUserMedia,\r\n      } = parameters;\r\n\r\n      if (params.kind === 'audio') {\r\n        // Audio resumed\r\n\r\n        // Check if the participant with audioID == remoteProducerId has a valid videoID\r\n        let participant = participants.filter((p) => p.audioID === remoteProducerId);\r\n        let name__ = participant.length > 0 ? participant[0].name || '' : '';\r\n\r\n        if (name__ === member) return;\r\n\r\n        //find any participants with ScreenID not null and ScreenOn == true\r\n        let screenParticipant_alt = participants.filter(\r\n          (participant) =>\r\n            participant.ScreenID != null &&\r\n            participant.ScreenOn == true &&\r\n            participant.ScreenID != '',\r\n        );\r\n        if (screenParticipant_alt.length > 0) {\r\n          screenId = screenParticipant_alt[0].ScreenID;\r\n          if (screenId) {\r\n            updateScreenId(screenId);\r\n          }\r\n          if (!shared) {\r\n            shareScreenStarted = true;\r\n            updateShareScreenStarted(shareScreenStarted);\r\n          }\r\n        } else {\r\n          if (whiteboardStarted && !whiteboardEnded) {\r\n            // whiteboard is active\r\n          } else {\r\n            screenId = '';\r\n            updateScreenId(screenId);\r\n            updateShareScreenStarted(false);\r\n          }\r\n        }\r\n\r\n        // Media display and UI update to prioritize audio/video\r\n        nStream = new MediaStream([track]);\r\n        updateNStream(nStream);\r\n\r\n        // Create MiniAudioPlayer track\r\n        let nTrack = {\r\n          component: MiniAudioPlayer,\r\n          inputs: {\r\n            stream: nStream ? nStream : null,\r\n            consumer: consumer,\r\n            remoteProducerId: remoteProducerId,\r\n            parameters: parameters,\r\n            MiniAudioComponent: MiniAudio,\r\n            miniAudioProps: {\r\n              customStyle: { backgroundColor: 'gray' },\r\n              name: name__,\r\n              showWaveform: true,\r\n              overlayPosition: 'topRight',\r\n              barColor: 'white',\r\n              textColor: 'white',\r\n              imageSource: 'https://mediasfu.com/images/logo192.png',\r\n              roundedImage: true,\r\n              imageStyle: {},\r\n            },\r\n          },\r\n        };\r\n\r\n        // Add to audioOnlyStreams array\r\n        audioOnlyStreams.push(nTrack);\r\n        updateAudioOnlyStreams(audioOnlyStreams);\r\n\r\n        // Add to allAudioStreams array; add producerId, stream\r\n        allAudioStreams = [...allAudioStreams, { producerId: remoteProducerId, stream: nStream }];\r\n        updateAllAudioStreams(allAudioStreams);\r\n\r\n        let name;\r\n\r\n        try {\r\n          name = participant[0].name;\r\n        } catch {\r\n          /* handle error */\r\n        }\r\n\r\n        if (name) {\r\n          // Add to audStreamNames array; add producerId, name\r\n          audStreamNames = [...audStreamNames, { producerId: remoteProducerId, name: name__ }];\r\n          updateAudStreamNames(audStreamNames);\r\n\r\n          if (!mainScreenFilled && participant[0].islevel === '2') {\r\n            updateMainWindow = true;\r\n            updateUpdateMainWindow(updateMainWindow);\r\n            await prepopulateUserMedia({\r\n              name: hostLabel,\r\n              parameters: { ...parameters, audStreamNames, allAudioStreams },\r\n            });\r\n            updateMainWindow = false;\r\n            updateUpdateMainWindow(updateMainWindow);\r\n          }\r\n        } else {\r\n          return;\r\n        }\r\n\r\n        // Checks for display type and updates the UI\r\n        let checker;\r\n        let alt_checker = false;\r\n\r\n        if (meetingDisplayType == 'video') {\r\n          checker =\r\n            participant[0].videoID != null &&\r\n            participant[0].videoID != '' &&\r\n            participant[0].videoID != undefined;\r\n        } else {\r\n          checker = true;\r\n          alt_checker = true;\r\n        }\r\n\r\n        if (checker) {\r\n          if (shareScreenStarted || shared) {\r\n            if (!alt_checker) {\r\n              await reorderStreams({\r\n                parameters: { ...parameters, audStreamNames, allAudioStreams },\r\n              });\r\n            }\r\n          } else {\r\n            if (alt_checker && meetingDisplayType != 'video') {\r\n              await reorderStreams({\r\n                add: false,\r\n                screenChanged: true,\r\n                parameters: { ...parameters, audStreamNames, allAudioStreams },\r\n              });\r\n            }\r\n          }\r\n        }\r\n      } else {\r\n        // Video resumed\r\n        nStream = new MediaStream([track]);\r\n        updateNStream(nStream);\r\n\r\n        //find any participants with ScreenID not null and ScreenOn == true\r\n        let screenParticipant_alt = participants.filter(\r\n          (participant) =>\r\n            participant.ScreenID != null &&\r\n            participant.ScreenOn == true &&\r\n            participant.ScreenID != '',\r\n        );\r\n        if (screenParticipant_alt.length > 0) {\r\n          screenId = screenParticipant_alt[0].ScreenID;\r\n          if (screenId) {\r\n            updateScreenId(screenId);\r\n          }\r\n          if (!shared) {\r\n            shareScreenStarted = true;\r\n            updateShareScreenStarted(shareScreenStarted);\r\n          }\r\n        } else {\r\n          if (whiteboardStarted && !whiteboardEnded) {\r\n            // whiteboard is active\r\n          } else {\r\n            screenId = '';\r\n            updateScreenId(screenId);\r\n            updateShareScreenStarted(false);\r\n          }\r\n        }\r\n\r\n        // Check for display type and update the UI\r\n        if (remoteProducerId == screenId) {\r\n          // Put on main screen for screen share\r\n          updateMainWindow = true;\r\n          updateUpdateMainWindow(updateMainWindow);\r\n          remoteScreenStream = [{ producerId: remoteProducerId, stream: nStream }];\r\n          updateRemoteScreenStream(remoteScreenStream);\r\n\r\n          if (eventType == 'conference') {\r\n            if (shared || shareScreenStarted) {\r\n              if (mainHeightWidth == 0) {\r\n                updateMainHeightWidth(84);\r\n              }\r\n            } else {\r\n              if (mainHeightWidth > 0) {\r\n                updateMainHeightWidth(0);\r\n              }\r\n            }\r\n          }\r\n\r\n          if (!lock_screen) {\r\n            await prepopulateUserMedia({ name: hostLabel, parameters });\r\n            await reorderStreams({\r\n              add: false,\r\n              screenChanged: true,\r\n              parameters: { ...parameters, remoteScreenStream, allVideoStreams },\r\n            });\r\n          } else {\r\n            if (!first_round) {\r\n              await prepopulateUserMedia({\r\n                name: hostLabel,\r\n                parameters: {\r\n                  ...parameters,\r\n                  remoteScreenStream,\r\n                  allVideoStreams,\r\n                },\r\n              });\r\n              await reorderStreams({\r\n                add: false,\r\n                screenChanged: true,\r\n                parameters: {\r\n                  ...parameters,\r\n                  remoteScreenStream,\r\n                  allVideoStreams,\r\n                },\r\n              });\r\n            }\r\n          }\r\n\r\n          lock_screen = true;\r\n          updateLock_screen(lock_screen);\r\n          firstAll = true;\r\n          updateFirstAll(firstAll);\r\n        } else {\r\n          // Non-screen share video resumed\r\n\r\n          // Operations to add video to the UI (either main screen or mini screen)\r\n          parameters = parameters.getUpdatedAllParams();\r\n\r\n          // Get the name of the participant with videoID == remoteProducerId\r\n          let participant = participants.filter(\r\n            (participant) => participant.videoID == remoteProducerId,\r\n          );\r\n\r\n          if (\r\n            participant.length > 0 &&\r\n            participant[0].name != null &&\r\n            participant[0].name != '' &&\r\n            participant[0].name != undefined &&\r\n            participant[0].name !== member\r\n          ) {\r\n            allVideoStreams = [\r\n              ...allVideoStreams,\r\n              { producerId: remoteProducerId, stream: nStream, socket_: nsock },\r\n            ];\r\n            updateAllVideoStreams(allVideoStreams);\r\n          }\r\n\r\n          if (participant.length > 0) {\r\n            let name = participant[0].name;\r\n            streamNames = [...streamNames, { producerId: remoteProducerId, name: name || '' }];\r\n            updateStreamNames(streamNames);\r\n          }\r\n\r\n          // If not screenshare, filter out the stream that belongs to the participant with isAdmin = true and islevel == '2' (host)\r\n          // Find the ID of the participant with isAdmin = true and islevel == '2'\r\n          if (!shareScreenStarted) {\r\n            let admin = participants.filter(\r\n              (participant) => (participant.isAdmin == true || participant.isHost == true) && participant.islevel == '2',\r\n            );\r\n            // Remove video stream with producerId == admin.id\r\n            // Get the videoID of the admin\r\n\r\n            if (admin.length > 0) {\r\n              adminVidID = admin[0].videoID;\r\n\r\n              if (adminVidID != null && adminVidID != '') {\r\n                let oldAllStreams_: (Stream | Participant)[] = [];\r\n                // Check if the length of allVideoStreams is > 0\r\n                if (oldAllStreams.length > 0) {\r\n                  oldAllStreams_ = oldAllStreams;\r\n                }\r\n\r\n                oldAllStreams = allVideoStreams.filter(\r\n                  (streame) => streame.producerId == adminVidID,\r\n                );\r\n                updateOldAllStreams(oldAllStreams);\r\n\r\n                if (oldAllStreams.length < 1) {\r\n                  oldAllStreams = oldAllStreams_;\r\n                  updateOldAllStreams(oldAllStreams);\r\n                }\r\n\r\n                allVideoStreams = allVideoStreams.filter(\r\n                  (streame) => streame.producerId != adminVidID,\r\n                );\r\n                updateAllVideoStreams(allVideoStreams);\r\n\r\n                if (remoteProducerId == adminVidID) {\r\n                  updateMainWindow = true;\r\n                }\r\n              }\r\n\r\n              gotAllVids = true;\r\n              updateGotAllVids(gotAllVids);\r\n            }\r\n          } else {\r\n            // Check if the videoID is either that of the admin or that of the screen participant\r\n            let screenParticipant = participants.filter(\r\n              (participant) => participant.ScreenID == screenId,\r\n            );\r\n\r\n            // See if producerId is that of admin videoID or screenParticipant videoID\r\n            let adminVidID;\r\n\r\n            let screenParticipantVidID;\r\n            if (screenParticipant.length > 0) {\r\n              screenParticipantVidID = screenParticipant[0].videoID;\r\n            }\r\n\r\n            if (\r\n              (adminVidID != null && adminVidID != '') ||\r\n              (screenParticipantVidID != null && screenParticipantVidID != '')\r\n            ) {\r\n              if (adminVidID == remoteProducerId || screenParticipantVidID == remoteProducerId) {\r\n                await reorderStreams({\r\n                  parameters: { ...parameters, allVideoStreams },\r\n                });\r\n                return;\r\n              }\r\n            }\r\n          }\r\n\r\n          // Update the UI\r\n          if (lock_screen || shared) {\r\n            defer_receive = true;\r\n            updateDefer_receive(defer_receive);\r\n\r\n            if (!first_round) {\r\n              await reorderStreams({\r\n                add: false,\r\n                screenChanged: true,\r\n                parameters: { ...parameters, allVideoStreams },\r\n              });\r\n            }\r\n          } else {\r\n            await reorderStreams({\r\n              add: false,\r\n              screenChanged: true,\r\n              parameters: { ...parameters, allVideoStreams },\r\n            });\r\n          }\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.log('consumerResume error', error);\r\n      // throw error;\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { Socket } from 'socket.io-client';\nimport { Device, Transport, DtlsParameters } from 'mediasoup-client/lib/types';\nimport { ConnectSendTransportParameters, ConnectSendTransportType } from '../@types/types';\n\nexport interface CreateSendTransportParameters extends ConnectSendTransportParameters {\n  islevel: string;\n  member: string;\n  socket: Socket;\n  localSocket?: Socket;\n  device: Device | null;\n  producerTransport: Transport | null;\n  localProducerTransport?: Transport | null;\n  transportCreated: boolean;\n  localTransportCreated?: boolean;\n  updateProducerTransport: (producerTransport: Transport | null) => void;\n  updateLocalProducerTransport?: (localTransport: Transport | null) => void;\n  updateTransportCreated: (transportCreated: boolean) => void;\n  updateLocalTransportCreated?: (localTransportCreated: boolean) => void;\n\n  // mediasfu functions\n  connectSendTransport: ConnectSendTransportType;\n  getUpdatedAllParams: () => CreateSendTransportParameters;\n  [key: string]: any;\n}\n\nexport interface CreateSendTransportOptions {\n  option: \"audio\" | \"video\" | \"screen\" | \"all\";\n  parameters: CreateSendTransportParameters;\n}\n\n// Export the type definition for the function\nexport type CreateSendTransportType = (options: CreateSendTransportOptions) => Promise<void>;\n\n\n/**\n * Creates a WebRTC send transport and sets up event handlers for the transport.\n * Supports both primary and local transports with modular handling.\n * @param {CreateSendTransportOptions} options - The options for creating the send transport.\n * @param {string} options.option - The type of transport to create.\n * @param {CreateSendTransportParameters} options.parameters - The parameters required for creating the transport.\n * @param {string} options.parameters.islevel - The level of the transport.\n * @param {string} options.parameters.member - The member name for the transport.\n * @param {Socket} options.parameters.socket - The primary socket instance.\n * @param {Device} options.parameters.device - The device instance.\n * @param {Transport | null} options.parameters.producerTransport - The primary producer transport object.\n * @param {boolean} options.parameters.transportCreated - The state of the primary transport creation.\n * @param {(transport: Transport | null) => void} options.parameters.updateProducerTransport - The function to update the primary transport object.\n * @param {(state: boolean) => void} options.parameters.updateTransportCreated - The function to update the primary transport creation state.\n * @param {Function} options.parameters.connectSendTransport - The function to connect the send transport.\n * @param {Function} options.parameters.getUpdatedAllParams - The function to get updated parameters.\n * @param {Socket} [options.parameters.localSocket] - The local socket instance.\n * @param {Transport | null} [options.parameters.localProducerTransport] - The local producer transport object.\n * @param {boolean} [options.parameters.localTransportCreated] - The state of the local transport creation.\n * @param {(localTransport: Transport | null) => void} [options.parameters.updateLocalProducerTransport] - The function to update the local transport object.\n * @param {(state: boolean) => void} [options.parameters.updateLocalTransportCreated] - The function to update the local transport creation state.\n * @returns {Promise<void>} A promise that resolves when the send transport is created and configured.\n * @throws Will throw an error if there is an issue creating the send transport.\n * @example\n * const options = {\n *  option: 'video',\n * parameters: {\n * islevel: '1',\n * member: 'John Doe',\n * socket: socketInstance,\n * localSocket: localSocketInstance,\n * device: deviceInstance,\n * producerTransport: null,\n * localProducerTransport: null,\n * transportCreated: false,\n * localTransportCreated: false,\n * updateProducerTransport: (transport) => console.log('Primary transport updated:', transport),\n * updateLocalProducerTransport: (transport) => console.log('Local transport updated:', transport),\n * updateTransportCreated: (state) => console.log('Primary transport created:', state),\n * updateLocalTransportCreated: (state) => console.log('Local transport created:', state),\n * },\n * };\n * createSendTransport(options)\n * .then(() => console.log('Send transport created successfully'))\n * .catch((error) => console.error('Error creating send transport:', error));\n *\n */\n\nexport const createLocalSendTransport = async({\n  option,\n  parameters,\n}: CreateSendTransportOptions): Promise<void> => {\n  try {\n    let {\n      islevel,\n      member,\n      socket,\n      localSocket,\n      device,\n      localProducerTransport,\n      localTransportCreated,\n      updateLocalProducerTransport,\n      updateLocalTransportCreated,\n\n      connectSendTransport,\n    } = parameters;\n\n\n    if (!localSocket || !localSocket.id || socket?.id == localSocket?.id) {\n      return;\n    }\n\n    localSocket.emit(\n      \"createWebRtcTransport\",\n      { consumer: false, islevel },\n      async ({ params }: { params: any }) => {\n        if (params && params.error) {\n          console.error(\"Error in local createWebRtcTransport:\", params.error);\n          return;\n        }\n\n        // Create local send transport\n        localProducerTransport = await device!.createSendTransport(params);\n        if (updateLocalProducerTransport) {\n          updateLocalProducerTransport(localProducerTransport);\n        }\n\n        // Handle local transport events\n        localProducerTransport.on(\n          \"connect\",\n          async ({ dtlsParameters }: { dtlsParameters: DtlsParameters }, callback: () => void, errback: (error: Error) => void) => {\n            try {\n              localSocket.emit(\"transport-connect\", { dtlsParameters });\n              callback();\n            } catch (error) {\n              errback(error as Error);\n            }\n          }\n        );\n\n        localProducerTransport.on(\n          \"produce\",\n          async (\n            parameters: { kind: string; rtpParameters: any; appData: any },\n            callback: (response: { id: string }) => void,\n            errback: (error: Error) => void\n          ) => {\n            try {\n              localSocket.emit(\n                \"transport-produce\",\n                {\n                  kind: parameters.kind,\n                  rtpParameters: parameters.rtpParameters,\n                  appData: parameters.appData,\n                  islevel,\n                  name: member,\n                },\n                ({ id }: { id: string }) => callback({ id })\n              );\n            } catch (error) {\n              errback(error as Error);\n            }\n          }\n        );\n\n        localProducerTransport.on(\"connectionstatechange\", (state: string) => {\n          if (state === \"failed\") {\n            console.error(\"Local transport connection failed.\");\n            if (localProducerTransport) {\n              localProducerTransport.close();\n            }\n          }\n        });\n\n        // Mark local transport as created\n        localTransportCreated = true;\n        updateLocalTransportCreated?.(localTransportCreated);\n\n        // connect local transport\n        await connectSendTransport({\n          targetOption: \"local\",\n          option,\n          parameters: { ...parameters, localProducerTransport: localProducerTransport },\n        });\n      }\n    );\n  } catch (error) {\n    console.error(\"Error creating local send transport:\", error);\n  }\n};\n\n\n/**\n * Creates a WebRTC send transport and sets up event handlers for the transport.\n *\n * Supports both primary and local transports with modular handling.\n *\n * @param {CreateSendTransportOptions} options - The options for creating the send transport.\n * @param {string} options.option - The type of transport to create.\n * @param {CreateSendTransportParameters} options.parameters - The parameters required for creating the transport.\n * @param {string} options.parameters.islevel - The level of the transport.\n * @param {string} options.parameters.member - The member name for the transport.\n * @param {Socket} options.parameters.socket - The primary socket instance.\n * @param {Device} options.parameters.device - The device instance.\n * @param {Transport | null} options.parameters.producerTransport - The primary producer transport object.\n * @param {boolean} options.parameters.transportCreated - The state of the primary transport creation.\n * @param {(transport: Transport | null) => void} options.parameters.updateProducerTransport - The function to update the primary transport object.\n * @param {(state: boolean) => void} options.parameters.updateTransportCreated - The function to update the primary transport creation state.\n * @param {Function} options.parameters.connectSendTransport - The function to connect the send transport.\n * @param {Function} options.parameters.getUpdatedAllParams - The function to get updated parameters.\n * @param {Socket} [options.parameters.localSocket] - The local socket instance.\n * @param {Transport | null} [options.parameters.localProducerTransport] - The local producer transport object.\n * @param {boolean} [options.parameters.localTransportCreated] - The state of the local transport creation.\n * @param {(localTransport: Transport | null) => void} [options.parameters.updateLocalProducerTransport] - The function to update the local transport object.\n * @param {(state: boolean) => void} [options.parameters.updateLocalTransportCreated] - The function to update the local transport creation state.\n * @returns {Promise<void>} A promise that resolves when the send transport is created and configured.\n *\n * @throws Will throw an error if there is an issue creating the send transport.\n *\n * @example\n * const options = {\n *   option: 'video',\n *   parameters: {\n *     islevel: '1',\n *     member: 'John Doe',\n *     socket: socketInstance,\n *     localSocket: localSocketInstance,\n *     device: deviceInstance,\n *     producerTransport: null,\n *     localProducerTransport: null,\n *     transportCreated: false,\n *     localTransportCreated: false,\n *     updateProducerTransport: (transport) => console.log('Primary transport updated:', transport),\n *     updateLocalProducerTransport: (transport) => console.log('Local transport updated:', transport),\n *     updateTransportCreated: (state) => console.log('Primary transport created:', state),\n *     updateLocalTransportCreated: (state) => console.log('Local transport created:', state),\n *   },\n * };\n *\n * createSendTransport(options)\n *   .then(() => console.log('Send transport created successfully'))\n *   .catch((error) => console.error('Error creating send transport:', error));\n */\n\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CreateSendTransport {\n\n  /**\n   * Creates a WebRTC send transport and sets up event handlers for the transport.\n   *\n   * Supports both primary and local transports with modular handling.\n   *\n   * @param {CreateSendTransportOptions} options - The options for creating the send transport.\n   * @param {string} options.option - The type of transport to create.\n   * @param {CreateSendTransportParameters} options.parameters - The parameters required for creating the transport.\n   * @param {string} options.parameters.islevel - The level of the transport.\n   * @param {string} options.parameters.member - The member name for the transport.\n   * @param {Socket} options.parameters.socket - The primary socket instance.\n   * @param {Device} options.parameters.device - The device instance.\n   * @param {Transport | null} options.parameters.producerTransport - The primary producer transport object.\n   * @param {boolean} options.parameters.transportCreated - The state of the primary transport creation.\n   * @param {(transport: Transport | null) => void} options.parameters.updateProducerTransport - The function to update the primary transport object.\n   * @param {(state: boolean) => void} options.parameters.updateTransportCreated - The function to update the primary transport creation state.\n   * @param {Function} options.parameters.connectSendTransport - The function to connect the send transport.\n   * @param {Function} options.parameters.getUpdatedAllParams - The function to get updated parameters.\n   * @param {Socket} [options.parameters.localSocket] - The local socket instance.\n   * @param {Transport | null} [options.parameters.localProducerTransport] - The local producer transport object.\n   * @param {boolean} [options.parameters.localTransportCreated] - The state of the local transport creation.\n   * @param {(localTransport: Transport | null) => void} [options.parameters.updateLocalProducerTransport] - The function to update the local transport object.\n   * @param {(state: boolean) => void} [options.parameters.updateLocalTransportCreated] - The function to update the local transport creation state.\n   * @returns {Promise<void>} A promise that resolves when the send transport is created and configured.\n   *\n   * @throws Will throw an error if there is an issue creating the send transport.\n   *\n   * @example\n   * const options = {\n   *   option: 'video',\n   *   parameters: {\n   *     islevel: '1',\n   *     member: 'John Doe',\n   *     socket: socketInstance,\n   *     localSocket: localSocketInstance,\n   *     device: deviceInstance,\n   *     producerTransport: null,\n   *     localProducerTransport: null,\n   *     transportCreated: false,\n   *     localTransportCreated: false,\n   *     updateProducerTransport: (transport) => console.log('Primary transport updated:', transport),\n   *     updateLocalProducerTransport: (transport) => console.log('Local transport updated:', transport),\n   *     updateTransportCreated: (state) => console.log('Primary transport created:', state),\n   *     updateLocalTransportCreated: (state) => console.log('Local transport created:', state),\n   *   },\n   * };\n   *\n   * createSendTransport(options)\n   *   .then(() => console.log('Send transport created successfully'))\n   *   .catch((error) => console.error('Error creating send transport:', error));\n   */\n\n  async createSendTransport({ option, parameters }: CreateSendTransportOptions): Promise<void> {\n    try {\n      // Destructure parameters\n      let {\n        islevel,\n        member,\n        device,\n        socket,\n        transportCreated,\n        producerTransport,\n        updateProducerTransport,\n        updateTransportCreated,\n        connectSendTransport,\n        getUpdatedAllParams,\n      } = parameters;\n\n      const updatedParams = getUpdatedAllParams();\n      device = updatedParams.device;\n      socket = updatedParams.socket;\n\n      try {\n        // Handle local transport creation first\n        if (!createLocalSendTransport) {\n          throw new Error(\"Local transport creation method not found.\");\n        }\n        await createLocalSendTransport({ option, parameters });\n      } catch (error) {\n        console.log(\"Error creating local send transport:\", error);\n      }\n\n      // Emit createWebRtcTransport event to the server\n      socket.emit(\n        'createWebRtcTransport',\n        { consumer: false, islevel: islevel },\n        async ({ params }: any) => {\n          // Check if there is an error in the response\n          if (params && params.error) {\n            return;\n          }\n\n          // Create a WebRTC send transport\n          if (device) {\n            producerTransport = device.createSendTransport(params);\n          } else {\n            throw new Error('Device is null');\n          }\n          updateProducerTransport(producerTransport);\n\n          // Handle 'connect' event\n          producerTransport.on(\n            'connect',\n            async (\n              { dtlsParameters }: { dtlsParameters: DtlsParameters },\n              callback: () => void,\n              errback: (error: any) => void,\n            ) => {\n              try {\n                socket.emit('transport-connect', {\n                  dtlsParameters,\n                });\n                callback();\n              } catch (error) {\n                errback(error);\n              }\n            },\n          );\n\n          // Handle 'produce' event\n          producerTransport.on(\n            'produce',\n            async (\n              parameters: any,\n              callback: (arg0: { id: any }) => void,\n              errback: (error: any) => void,\n            ) => {\n              try {\n                socket.emit(\n                  'transport-produce',\n                  {\n                    kind: parameters.kind,\n                    rtpParameters: parameters.rtpParameters,\n                    appData: parameters.appData,\n                    islevel: islevel,\n                    name: member,\n                  },\n                  ({ id }: { id: string }) => {\n                    callback({ id });\n                  },\n                );\n              } catch (error) {\n                errback(error);\n              }\n            },\n          );\n\n          // Handle 'connectionstatechange' event\n          producerTransport.on('connectionstatechange', (state: string) => {\n            switch (state) {\n              case 'connecting':\n                break;\n              case 'connected':\n                break;\n              case 'failed':\n                producerTransport?.close();\n                break;\n              default:\n                break;\n            }\n          });\n\n          // Update transport creation state\n          transportCreated = true;\n          await connectSendTransport({\n            targetOption: 'remote',\n            option: option,\n            parameters: {\n              ...parameters,\n              producerTransport: producerTransport,\n            },\n          });\n\n          updateTransportCreated(transportCreated);\n        },\n      );\n    } catch (error) {\n      // Handle errors during transport creation\n      console.log('Error creating send transport:', error);\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { PrepopulateUserMediaType, PrepopulateUserMediaParameters } from '../@types/types';\r\nimport { Producer } from 'mediasoup-client/lib/types';\r\nexport interface DisconnectSendTransportAudioParameters extends PrepopulateUserMediaParameters {\r\n  audioProducer: Producer | null;\r\n  localAudioProducer?: Producer | null;\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n  videoAlreadyOn: boolean;\r\n  islevel: string;\r\n  lock_screen: boolean;\r\n  shared: boolean;\r\n  updateMainWindow: boolean;\r\n  hostLabel: string;\r\n  roomName: string;\r\n  updateAudioProducer: (audioProducer: Producer | null) => void;\r\n  updateLocalAudioProducer?: (localAudioProducer: Producer | null) => void;\r\n  updateUpdateMainWindow: (updateMainWindow: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface DisconnectSendTransportAudioOptions {\r\n  parameters: DisconnectSendTransportAudioParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type DisconnectSendTransportAudioType = (\r\n  options: DisconnectSendTransportAudioOptions,\r\n) => Promise<void>;\r\n\r\n\r\nexport const disconnectLocalSendTransportAudio = async ({\r\n  parameters,\r\n}: DisconnectSendTransportAudioOptions): Promise<void> => {\r\n  try {\r\n    const {\r\n      localAudioProducer,\r\n      localSocket,\r\n      roomName,\r\n      updateLocalAudioProducer,\r\n    } = parameters;\r\n\r\n    if (localSocket && localSocket.id) {\r\n      // Close the local audio producer and notify the server\r\n      if (localAudioProducer) {\r\n        localAudioProducer.close(); // Actual logic: pause instead of close for MediaSFU preference\r\n        updateLocalAudioProducer?.(null);\r\n      }\r\n\r\n      localSocket.emit(\"pauseProducerMedia\", { mediaTag: \"audio\", roomName: roomName });\r\n    } else {\r\n      return;\r\n    }\r\n  } catch (error) {\r\n    console.log(\"Error disconnecting local audio send transport:\", error);\r\n    throw error; // Re-throw to propagate the error\r\n  }\r\n};\r\n\r\n/**\r\n * Disconnects the send transport for audio by pausing the audio producer and updating the UI accordingly.\r\n *\r\n * This function supports both a primary and a local audio producer, delegating local handling to a separate function.\r\n *\r\n * @param {DisconnectSendTransportAudioOptions} options - The options for disconnecting the send transport for audio.\r\n * @param {DisconnectSendTransportAudioParameters} options.parameters - The parameters for disconnecting the send transport for audio.\r\n * @param {Producer} options.parameters.audioProducer - The primary audio producer to disconnect.\r\n * @param {Producer} [options.parameters.localAudioProducer] - The local audio producer to disconnect.\r\n * @param {Socket} options.parameters.socket - The socket instance to use for communication.\r\n * @param {Socket} [options.parameters.localSocket] - The local socket instance to use for communication.\r\n * @param {boolean} options.parameters.videoAlreadyOn - Flag indicating if video is already on.\r\n * @param {string} options.parameters.islevel - The level of the user.\r\n * @param {boolean} options.parameters.lock_screen - Flag indicating if the screen is locked.\r\n * @param {boolean} options.parameters.shared - Flag indicating if the screen is shared.\r\n * @param {boolean} options.parameters.updateMainWindow - Flag to update the main window.\r\n * @param {string} options.parameters.hostLabel - The label for the host user.\r\n * @param {string} options.parameters.roomName - The name of the room.\r\n * @param {function} options.parameters.updateAudioProducer - Function to update the audio producer.\r\n * @param {function} [options.parameters.updateLocalAudioProducer] - Function to update the local audio producer (optional).\r\n * @param {function} options.parameters.updateUpdateMainWindow - Function to update the main window state.\r\n * @param {function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\r\n * @param {object} options.parameters - The parameters required for disconnecting the send transport for audio.\r\n * @returns {Promise<void>} A promise that resolves when the send transport for audio is disconnected.\r\n *\r\n * @throws Will throw an error if the operation fails.\r\n *\r\n * @example\r\n * const options = {\r\n *   parameters: {\r\n *     audioProducer: audioProducerInstance,\r\n *     localAudioProducer: localAudioProducerInstance,\r\n *     socket: socketInstance,\r\n *     localSocket: localSocketInstance,\r\n *     videoAlreadyOn: false,\r\n *     islevel: '1',\r\n *     lock_screen: false,\r\n *     shared: false,\r\n *     updateMainWindow: true,\r\n *     hostLabel: 'Host',\r\n *     roomName: 'Room 1',\r\n *     updateAudioProducer: (producer) => console.log('Updated audio producer:', producer),\r\n *     updateLocalAudioProducer: (producer) => console.log('Updated local audio producer:', producer),\r\n *     updateUpdateMainWindow: (state) => console.log('Main window state updated:', state),\r\n *     prepopulateUserMedia: async ({ name, parameters }) => console.log('Prepopulating user media for', name),\r\n *   },\r\n * };\r\n *\r\n * disconnectSendTransportAudio(options)\r\n *   .then(() => console.log(\"Audio send transport disconnected successfully\"))\r\n *   .catch((error) => console.log(\"Error disconnecting audio send transport:\", error));\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class DisconnectSendTransportAudio {\r\n\r\n  /**\r\n   * Disconnects the send transport for audio by pausing the audio producer and updating the UI accordingly.\r\n   *\r\n   * This function supports both a primary and a local audio producer, delegating local handling to a separate function.\r\n   *\r\n   * @param {DisconnectSendTransportAudioOptions} options - The options for disconnecting the send transport for audio.\r\n   * @param {DisconnectSendTransportAudioParameters} options.parameters - The parameters for disconnecting the send transport for audio.\r\n   * @param {Producer} options.parameters.audioProducer - The primary audio producer to disconnect.\r\n   * @param {Producer} [options.parameters.localAudioProducer] - The local audio producer to disconnect.\r\n   * @param {Socket} options.parameters.socket - The socket instance to use for communication.\r\n   * @param {Socket} [options.parameters.localSocket] - The local socket instance to use for communication.\r\n   * @param {boolean} options.parameters.videoAlreadyOn - Flag indicating if video is already on.\r\n   * @param {string} options.parameters.islevel - The level of the user.\r\n   * @param {boolean} options.parameters.lock_screen - Flag indicating if the screen is locked.\r\n   * @param {boolean} options.parameters.shared - Flag indicating if the screen is shared.\r\n   * @param {boolean} options.parameters.updateMainWindow - Flag to update the main window.\r\n   * @param {string} options.parameters.hostLabel - The label for the host user.\r\n   * @param {string} options.parameters.roomName - The name of the room.\r\n   * @param {function} options.parameters.updateAudioProducer - Function to update the audio producer.\r\n   * @param {function} [options.parameters.updateLocalAudioProducer] - Function to update the local audio producer (optional).\r\n   * @param {function} options.parameters.updateUpdateMainWindow - Function to update the main window state.\r\n   * @param {function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\r\n   * @param {object} options.parameters - The parameters required for disconnecting the send transport for audio.\r\n   * @returns {Promise<void>} A promise that resolves when the send transport for audio is disconnected.\r\n   *\r\n   * @throws Will throw an error if the operation fails.\r\n   *\r\n   * @example\r\n   * const options = {\r\n   *   parameters: {\r\n   *     audioProducer: audioProducerInstance,\r\n   *     localAudioProducer: localAudioProducerInstance,\r\n   *     socket: socketInstance,\r\n   *     localSocket: localSocketInstance,\r\n   *     videoAlreadyOn: false,\r\n   *     islevel: '1',\r\n   *     lock_screen: false,\r\n   *     shared: false,\r\n   *     updateMainWindow: true,\r\n   *     hostLabel: 'Host',\r\n   *     roomName: 'Room 1',\r\n   *     updateAudioProducer: (producer) => console.log('Updated audio producer:', producer),\r\n   *     updateLocalAudioProducer: (producer) => console.log('Updated local audio producer:', producer),\r\n   *     updateUpdateMainWindow: (state) => console.log('Main window state updated:', state),\r\n   *     prepopulateUserMedia: async ({ name, parameters }) => console.log('Prepopulating user media for', name),\r\n   *   },\r\n   * };\r\n   *\r\n   * disconnectSendTransportAudio(options)\r\n   *   .then(() => console.log(\"Audio send transport disconnected successfully\"))\r\n   *   .catch((error) => console.log(\"Error disconnecting audio send transport:\", error));\r\n   */\r\n\r\n  async disconnectSendTransportAudio({\r\n    parameters,\r\n  }: DisconnectSendTransportAudioOptions): Promise<void> {\r\n    try {\r\n      // Destructure parameters\r\n      let {\r\n        audioProducer,\r\n        socket,\r\n        videoAlreadyOn,\r\n        islevel,\r\n        lock_screen,\r\n        shared,\r\n        updateMainWindow,\r\n        hostLabel,\r\n        roomName,\r\n        updateAudioProducer,\r\n        updateUpdateMainWindow,\r\n        prepopulateUserMedia,\r\n      } = parameters;\r\n\r\n      // Pause the audio producer\r\n      audioProducer?.pause(); // actual logic is to close (await audioProducer.close()) but mediaSFU prefers pause if recording\r\n      updateAudioProducer(audioProducer);\r\n\r\n      // Update the UI\r\n      if (!videoAlreadyOn && islevel === '2') {\r\n        if (!lock_screen && !shared) {\r\n          updateMainWindow = true;\r\n          updateUpdateMainWindow(updateMainWindow);\r\n          await prepopulateUserMedia({ name: hostLabel, parameters });\r\n          updateMainWindow = false;\r\n          updateUpdateMainWindow(updateMainWindow);\r\n        }\r\n      }\r\n\r\n      // Notify the server about pausing audio producer\r\n      socket.emit('pauseProducerMedia', { mediaTag: 'audio', roomName: roomName });\r\n\r\n      // Handle local audio transport\r\n      try {\r\n        await disconnectLocalSendTransportAudio({ parameters });\r\n      } catch (localError) {\r\n        console.log(\"Error disconnecting local audio send transport:\", localError);\r\n      }\r\n    } catch (error) {\r\n      console.error('disconnectSendTransportAudio error', error);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Producer } from 'mediasoup-client/lib/types';\r\nimport { Socket } from 'socket.io-client';\r\nimport { ReorderStreamsType, ReorderStreamsParameters } from '../@types/types';\r\nexport interface DisconnectSendTransportVideoParameters extends ReorderStreamsParameters {\r\n  videoProducer: Producer | null;\r\n  localVideoProducer?: Producer | null;\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n  islevel: string;\r\n  roomName: string;\r\n  lock_screen: boolean;\r\n  updateMainWindow: boolean;\r\n  updateUpdateMainWindow: (state: boolean) => void;\r\n  updateVideoProducer: (producer: Producer | null) => void;\r\n  updateLocalVideoProducer?: (producer: Producer | null) => void;\r\n\r\n  // mediasfu functions\r\n  reorderStreams: ReorderStreamsType;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface DisconnectSendTransportVideoOptions {\r\n  parameters: DisconnectSendTransportVideoParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type DisconnectSendTransportVideoType = (\r\n  options: DisconnectSendTransportVideoOptions,\r\n) => Promise<void>;\r\n\r\nexport const disconnectLocalSendTransportVideo = async({\r\n  parameters,\r\n}: DisconnectSendTransportVideoOptions): Promise<void> => {\r\n  try {\r\n    const {\r\n      localVideoProducer,\r\n      localSocket,\r\n      roomName,\r\n      updateLocalVideoProducer,\r\n    } = parameters;\r\n\r\n    if (localSocket && localSocket.id) {\r\n      // continue\r\n    } else {\r\n      return\r\n    }\r\n\r\n    // Close the local video producer and notify the server\r\n    if (localVideoProducer) {\r\n      localVideoProducer.close();\r\n      updateLocalVideoProducer?.(null);\r\n    }\r\n\r\n\r\n    localSocket.emit('pauseProducerMedia', { mediaTag: 'video', roomName: roomName });\r\n\r\n  } catch (error) {\r\n    console.error('Error disconnecting local video send transport:', error);\r\n    throw error; // Re-throw to propagate the error\r\n  }\r\n};\r\n\r\n/**\r\n * Disconnects the send transport for video, closes the video producer, and updates the state.\r\n *\r\n * This function supports both a primary and a local video producer, delegating local handling to a separate function.\r\n *\r\n * @param {DisconnectSendTransportVideoOptions} options - The options for disconnecting the send transport.\r\n * @param {DisconnectSendTransportVideoParameters} options.parameters - The parameters required for disconnecting the send transport.\r\n * @param {Producer | null} options.parameters.videoProducer - The primary video producer object.\r\n * @param {Producer | null} [options.parameters.localVideoProducer] - The local video producer object (optional).\r\n * @param {Socket} options.parameters.socket - The primary socket object.\r\n * @param {Socket} [options.parameters.localSocket] - The local socket object (optional).\r\n * @param {string} options.parameters.islevel - The participant's level.\r\n * @param {string} options.parameters.roomName - The name of the room.\r\n * @param {boolean} options.parameters.updateMainWindow - The flag to update the main window.\r\n * @param {boolean} options.parameters.lock_screen - The flag to lock the screen.\r\n * @param {Function} options.parameters.updateUpdateMainWindow - The function to update the main window state.\r\n * @param {Function} options.parameters.updateVideoProducer - The function to update the video producer state.\r\n * @param {Function} [options.parameters.updateLocalVideoProducer] - The function to update the local video producer state (optional).\r\n * @param {ReorderStreamsType} options.parameters.reorderStreams - The function to reorder streams.\r\n * @param {Function} [options.parameters.updateLocalProducerTransport] - The function to update the local producer transport state (optional).\r\n * @param {Function} [options.parameters.updateProducerTransport] - The function to update the producer transport state (optional).\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the disconnection process is complete.\r\n *\r\n * @throws {Error} Throws an error if the disconnection process fails.\r\n *\r\n * @example\r\n * const options = {\r\n *   parameters: {\r\n *     videoProducer: videoProducerInstance,\r\n *     localVideoProducer: localVideoProducerInstance,\r\n *     socket: socketInstance,\r\n *     localSocket: localSocketInstance,\r\n *     islevel: '2',\r\n *     roomName: 'Room A',\r\n *     updateMainWindow: false,\r\n *     lock_screen: false,\r\n *     updateUpdateMainWindow: (state) => console.log('Main window updated:', state),\r\n *     updateVideoProducer: (producer) => console.log('Video producer updated:', producer),\r\n *     updateLocalVideoProducer: (producer) => console.log('Local video producer updated:', producer),\r\n *     reorderStreams: reorderStreamsFunction,\r\n *   },\r\n * };\r\n *\r\n * disconnectSendTransportVideo(options)\r\n *   .then(() => console.log('Video send transport disconnected successfully'))\r\n *   .catch((error) => console.error('Error disconnecting video send transport:', error));\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class DisconnectSendTransportVideo {\r\n\r\n /**\r\n   * Disconnects the send transport for video, closes the video producer, and updates the state.\r\n   *\r\n   * This function supports both a primary and a local video producer, delegating local handling to a separate function.\r\n   *\r\n   * @param {DisconnectSendTransportVideoOptions} options - The options for disconnecting the send transport.\r\n   * @param {DisconnectSendTransportVideoParameters} options.parameters - The parameters required for disconnecting the send transport.\r\n   * @param {Producer | null} options.parameters.videoProducer - The primary video producer object.\r\n   * @param {Producer | null} [options.parameters.localVideoProducer] - The local video producer object (optional).\r\n   * @param {Socket} options.parameters.socket - The primary socket object.\r\n   * @param {Socket} [options.parameters.localSocket] - The local socket object (optional).\r\n   * @param {string} options.parameters.islevel - The participant's level.\r\n   * @param {string} options.parameters.roomName - The name of the room.\r\n   * @param {boolean} options.parameters.updateMainWindow - The flag to update the main window.\r\n   * @param {boolean} options.parameters.lock_screen - The flag to lock the screen.\r\n   * @param {Function} options.parameters.updateUpdateMainWindow - The function to update the main window state.\r\n   * @param {Function} options.parameters.updateVideoProducer - The function to update the video producer state.\r\n   * @param {Function} [options.parameters.updateLocalVideoProducer] - The function to update the local video producer state (optional).\r\n   * @param {ReorderStreamsType} options.parameters.reorderStreams - The function to reorder streams.\r\n   * @param {Function} [options.parameters.updateLocalProducerTransport] - The function to update the local producer transport state (optional).\r\n   * @param {Function} [options.parameters.updateProducerTransport] - The function to update the producer transport state (optional).\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the disconnection process is complete.\r\n   *\r\n   * @throws {Error} Throws an error if the disconnection process fails.\r\n   *\r\n   * @example\r\n   * const options = {\r\n   *   parameters: {\r\n   *     videoProducer: videoProducerInstance,\r\n   *     localVideoProducer: localVideoProducerInstance,\r\n   *     socket: socketInstance,\r\n   *     localSocket: localSocketInstance,\r\n   *     islevel: '2',\r\n   *     roomName: 'Room A',\r\n   *     updateMainWindow: false,\r\n   *     lock_screen: false,\r\n   *     updateUpdateMainWindow: (state) => console.log('Main window updated:', state),\r\n   *     updateVideoProducer: (producer) => console.log('Video producer updated:', producer),\r\n   *     updateLocalVideoProducer: (producer) => console.log('Local video producer updated:', producer),\r\n   *     reorderStreams: reorderStreamsFunction,\r\n   *   },\r\n   * };\r\n   *\r\n   * disconnectSendTransportVideo(options)\r\n   *   .then(() => console.log('Video send transport disconnected successfully'))\r\n   *   .catch((error) => console.error('Error disconnecting video send transport:', error));\r\n   */\r\n\r\n  async disconnectSendTransportVideo({\r\n    parameters,\r\n  }: DisconnectSendTransportVideoOptions): Promise<void> {\r\n    try {\r\n      let {\r\n        videoProducer,\r\n        socket,\r\n        islevel,\r\n        roomName,\r\n        lock_screen,\r\n        updateMainWindow,\r\n        updateUpdateMainWindow,\r\n        updateVideoProducer,\r\n        reorderStreams,\r\n      } = parameters.getUpdatedAllParams();\r\n\r\n      // Close the video producer and update the state\r\n      await videoProducer.close();\r\n      updateVideoProducer(null);\r\n\r\n      // Notify the server about pausing video sharing\r\n      socket.emit('pauseProducerMedia', { mediaTag: 'video', roomName });\r\n\r\n      // Update the UI based on the participant's level and screen lock status\r\n      if (islevel === '2') {\r\n        updateMainWindow = true;\r\n        updateUpdateMainWindow(updateMainWindow);\r\n      }\r\n\r\n      if (lock_screen) {\r\n        await reorderStreams({ add: true, screenChanged: true, parameters });\r\n      } else {\r\n        await reorderStreams({ add: false, screenChanged: true, parameters });\r\n      }\r\n\r\n      // Handle local video transport regardless of primary success or failure\r\n      try {\r\n        await disconnectLocalSendTransportVideo({ parameters });\r\n      } catch (localError) {\r\n        console.error('Error disconnecting local video send transport:', localError);\r\n      }\r\n    } catch (error: any) {\r\n      // Handle errors during the disconnection process\r\n      console.log('Error disconnecting send transport for video:', error.message);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Producer } from 'mediasoup-client/lib/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface DisconnectSendTransportScreenParameters {\r\n  screenProducer: Producer | null;\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n  roomName: string;\r\n  updateScreenProducer: (screenProducer: Producer | null) => void;\r\n  updateLocalScreenProducer?: (localScreenProducer: Producer | null) => void;\r\n\r\n  getUpdatedAllParams: () => DisconnectSendTransportScreenParameters;\r\n  [key: string]: any;\r\n}\r\nexport interface DisconnectSendTransportScreenOptions {\r\n  parameters: DisconnectSendTransportScreenParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type DisconnectSendTransportScreenType = (\r\n  options: DisconnectSendTransportScreenOptions,\r\n) => Promise<void>;\r\n\r\nexport const disconnectLocalSendTransportScreen = async ({ parameters }: DisconnectSendTransportScreenOptions): Promise<void> => {\r\n\r\n  try {\r\n    // Destructure parameters\r\n    let {\r\n      localScreenProducer,\r\n      localSocket,\r\n      roomName,\r\n      updateLocalScreenProducer,\r\n    } = parameters;\r\n\r\n    if (localSocket && localSocket.id) {\r\n      localScreenProducer!.close();\r\n      updateLocalScreenProducer!(localScreenProducer);\r\n\r\n      // Notify the server about closing the screen producer and pausing screen sharing\r\n      localSocket.emit('closeScreenProducer');\r\n      localSocket.emit('pauseProducerMedia', { mediaTag: 'screen', roomName: roomName });\r\n    }\r\n  } catch {\r\n    console.log('Error disconnecting local send transport for screen');\r\n  }\r\n\r\n};\r\n\r\n\r\n/**\r\n * Disconnects the send transport for screen sharing.\r\n *\r\n * This function closes the screen producer, updates the state, and notifies the server\r\n * about the closure and pausing of screen sharing.\r\n *\r\n * @param {DisconnectSendTransportScreenOptions} options - The options for disconnecting the send transport.\r\n * @param {Object} options.parameters - The parameters required for disconnection.\r\n * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n * @param {Producer | null} options.parameters.screenProducer - The screen producer to be closed.\r\n * @param {Socket} options.parameters.socket - The socket connection to notify the server.\r\n * @param {Socket} [options.parameters.localSocket] - The local socket connection for communication.\r\n * @param {string} options.parameters.roomName - The name of the room.\r\n * @param {Function} options.parameters.updateScreenProducer - Function to update the screen producer state.\r\n * @param {Function} [options.parameters.updateLocalScreenProducer] - Function to update the local screen producer state.\r\n * @returns {Promise<void>} A promise that resolves when the disconnection process is complete.\r\n * @throws {Error} If an error occurs during the disconnection process.\r\n *\r\n * @example\r\n * const options = {\r\n *   parameters: {\r\n *     screenProducer: screenProducerInstance,\r\n *     socket: socketInstance,\r\n *     localSocket: localSocketInstance,\r\n *     roomName: 'Room 1',\r\n *     updateScreenProducer: (producer) => console.log('Updated screen producer:', producer),\r\n *     updateLocalScreenProducer: (localProducer) => console.log('Updated local screen producer:', localProducer),\r\n *     getUpdatedAllParams: () => ({\r\n *       screenProducer: screenProducerInstance,\r\n *       socket: socketInstance,\r\n *       roomName: 'Room 1',\r\n *     }),\r\n *   },\r\n * };\r\n *\r\n * disconnectSendTransportScreen(options)\r\n *   .then(() => {\r\n *     console.log('Screen send transport disconnected successfully');\r\n *   })\r\n *   .catch((error) => {\r\n *     console.error('Error disconnecting screen send transport:', error);\r\n *   });\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class DisconnectSendTransportScreen {\r\n\r\n  /**\r\n   * Disconnects the send transport for screen sharing.\r\n   *\r\n   * This function closes the screen producer, updates the state, and notifies the server\r\n   * about the closure and pausing of screen sharing.\r\n   *\r\n   * @param {DisconnectSendTransportScreenOptions} options - The options for disconnecting the send transport.\r\n   * @param {Object} options.parameters - The parameters required for disconnection.\r\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {Producer | null} options.parameters.screenProducer - The screen producer to be closed.\r\n   * @param {Socket} options.parameters.socket - The socket connection to notify the server.\r\n   * @param {Socket} [options.parameters.localSocket] - The local socket connection for communication.\r\n   * @param {string} options.parameters.roomName - The name of the room.\r\n   * @param {Function} options.parameters.updateScreenProducer - Function to update the screen producer state.\r\n   * @param {Function} [options.parameters.updateLocalScreenProducer] - Function to update the local screen producer state.\r\n   * @returns {Promise<void>} A promise that resolves when the disconnection process is complete.\r\n   * @throws {Error} If an error occurs during the disconnection process.\r\n   *\r\n   * @example\r\n   * const options = {\r\n   *   parameters: {\r\n   *     screenProducer: screenProducerInstance,\r\n   *     socket: socketInstance,\r\n   *     localSocket: localSocketInstance,\r\n   *     roomName: 'Room 1',\r\n   *     updateScreenProducer: (producer) => console.log('Updated screen producer:', producer),\r\n   *     updateLocalScreenProducer: (localProducer) => console.log('Updated local screen producer:', localProducer),\r\n   *     getUpdatedAllParams: () => ({\r\n   *       screenProducer: screenProducerInstance,\r\n   *       socket: socketInstance,\r\n   *       roomName: 'Room 1',\r\n   *     }),\r\n   *   },\r\n   * };\r\n   *\r\n   * disconnectSendTransportScreen(options)\r\n   *   .then(() => {\r\n   *     console.log('Screen send transport disconnected successfully');\r\n   *   })\r\n   *   .catch((error) => {\r\n   *     console.error('Error disconnecting screen send transport:', error);\r\n   *   });\r\n   */\r\n\r\n  async disconnectSendTransportScreen({\r\n    parameters,\r\n  }: DisconnectSendTransportScreenOptions): Promise<void> {\r\n    try {\r\n      // Destructure parameters\r\n      let { screenProducer, socket, roomName, updateScreenProducer } =\r\n        parameters.getUpdatedAllParams();\r\n\r\n      // Close the screen producer and update the state\r\n      screenProducer?.close();\r\n      updateScreenProducer(screenProducer);\r\n\r\n      // Notify the server about closing the screen producer and pausing screen sharing\r\n      socket.emit('closeScreenProducer');\r\n      socket.emit('pauseProducerMedia', { mediaTag: 'screen', roomName });\r\n    } catch (error: any) {\r\n      // Handle errors during the disconnection process\r\n      console.log('Error disconnecting send transport for screen:', error.message);\r\n    }\r\n\r\n    try {\r\n      // Disconnect the local screen producer\r\n      await disconnectLocalSendTransportScreen({ parameters });\r\n    } catch {\r\n      // Handle errors during the disconnection process\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport {\r\n  Stream,\r\n  Participant,\r\n  Transport,\r\n  PrepopulateUserMediaParameters,\r\n  PrepopulateUserMediaType,\r\n  RePortParameters,\r\n  RePortType,\r\n  ProcessConsumerTransportsParameters,\r\n  ProcessConsumerTransportsType,\r\n  ResumePauseStreamsParameters,\r\n  ResumePauseStreamsType,\r\n  ReadjustParameters,\r\n  ReadjustType,\r\n  AddVideosGridType,\r\n  AddVideosGridParameters,\r\n  GetEstimateType,\r\n  CheckGridType,\r\n  ResumePauseAudioStreamsParameters,\r\n  ResumePauseAudioStreamsType,\r\n  GetEstimateParameters,\r\n  EventType,\r\n} from '../@types/types';\r\n\r\nexport interface DispStreamsParameters\r\n  extends PrepopulateUserMediaParameters,\r\n    RePortParameters,\r\n    ProcessConsumerTransportsParameters,\r\n    ResumePauseStreamsParameters,\r\n    ReadjustParameters,\r\n    ResumePauseAudioStreamsParameters,\r\n    GetEstimateParameters,\r\n    AddVideosGridParameters {\r\n  consumerTransports: Transport[];\r\n  streamNames: Stream[];\r\n  audStreamNames: Stream[];\r\n  participants: Participant[];\r\n  ref_participants: Participant[];\r\n  recordingDisplayType: 'video' | 'media' | 'all';\r\n  recordingVideoOptimized: boolean;\r\n  meetingDisplayType: string;\r\n  meetingVideoOptimized: boolean;\r\n  currentUserPage: number;\r\n  hostLabel: string;\r\n  mainHeightWidth: number;\r\n  prevMainHeightWidth: number;\r\n  prevDoPaginate: boolean;\r\n  doPaginate: boolean;\r\n  firstAll: boolean;\r\n  shared: boolean;\r\n  shareScreenStarted: boolean;\r\n  shareEnded: boolean;\r\n  oldAllStreams: (Stream | Participant)[];\r\n  updateMainWindow: boolean;\r\n  remoteProducerId?: string;\r\n  activeNames: string[];\r\n  dispActiveNames: string[];\r\n  p_dispActiveNames: string[];\r\n  nForReadjustRecord: number;\r\n  first_round: boolean;\r\n  lock_screen: boolean;\r\n  chatRefStreams: (Stream | Participant)[];\r\n  eventType: EventType;\r\n  islevel: string;\r\n  localStreamVideo: MediaStream | null;\r\n\r\n  breakOutRoomStarted: boolean;\r\n  breakOutRoomEnded: boolean;\r\n  keepBackground: boolean;\r\n  virtualStream: MediaStream | null;\r\n\r\n  updateActiveNames: (names: string[]) => void;\r\n  updateDispActiveNames: (names: string[]) => void;\r\n  updateLStreams: (streams: (Stream | Participant)[]) => void;\r\n  updateChatRefStreams: (streams: (Stream | Participant)[]) => void;\r\n  updateNForReadjustRecord: (n: number) => void;\r\n  updateUpdateMainWindow: (value: boolean) => void;\r\n  updateShowMiniView: (value: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n  rePort: RePortType;\r\n  processConsumerTransports: ProcessConsumerTransportsType;\r\n  resumePauseStreams: ResumePauseStreamsType;\r\n  readjust: ReadjustType;\r\n  addVideosGrid: AddVideosGridType;\r\n  getEstimate: GetEstimateType;\r\n  checkGrid: CheckGridType;\r\n  resumePauseAudioStreams: ResumePauseAudioStreamsType;\r\n\r\n  getUpdatedAllParams: () => DispStreamsParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface DispStreamsOptions {\r\n  lStreams: (Stream | Participant)[];\r\n  ind: number;\r\n  auto?: boolean;\r\n  ChatSkip?: boolean;\r\n  forChatCard?: any;\r\n  forChatID?: any;\r\n  parameters: DispStreamsParameters;\r\n  breakRoom?: number;\r\n  inBreakRoom?: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type DispStreamsType = (options: DispStreamsOptions) => Promise<void>;\r\n\r\n  /**\r\n   * Function to display streams based on various parameters and conditions.\r\n   *\r\n   * @param {DispStreamsOptions} options - The options object.\r\n   * @param {Array<(Stream | Participant)>} options.lStreams - List of streams to display.\r\n   * @param {number} options.ind - Index of the current stream.\r\n   * @param {boolean} [options.auto=false] - Flag to indicate if the function should run automatically.\r\n   * @param {boolean} [options.ChatSkip=false] - Flag to indicate if chat should be skipped.\r\n   * @param {string|null} [options.forChatID=null] - ID for chat reference.\r\n   * @param {DispStreamsParameters} options.parameters - Parameters object containing various settings and functions.\r\n   * @param {number} [options.breakRoom=-1] - Break room number.\r\n   * @param {boolean} [options.inBreakRoom=false] - Flag to indicate if in break room.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the function completes.\r\n   *\r\n   * @async\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const options = {\r\n   *   lStreams: [...], // Your streams data here\r\n   *   ind: 0,\r\n   *   auto: true,\r\n   *   ChatSkip: false,\r\n   *   parameters: {\r\n   *     consumerTransports: [],\r\n   *     streamNames: [],\r\n   *     audStreamNames: [],\r\n   *     participants: [],\r\n   *     ref_participants: [],\r\n   *     recordingDisplayType: 'video',\r\n   *     recordingVideoOptimized: false,\r\n   *     meetingDisplayType: 'video',\r\n   *     meetingVideoOptimized: false,\r\n   *     currentUserPage: 1,\r\n   *     hostLabel: 'Host',\r\n   *     mainHeightWidth: 100,\r\n   *     prevMainHeightWidth: 100,\r\n   *     prevDoPaginate: false,\r\n   *     doPaginate: false,\r\n   *     firstAll: false,\r\n   *     shared: false,\r\n   *     shareScreenStarted: false,\r\n   *     shareEnded: false,\r\n   *     oldAllStreams: [],\r\n   *     updateMainWindow: false,\r\n   *     remoteProducerId: null,\r\n   *     activeNames: [],\r\n   *     dispActiveNames: [],\r\n   *     p_dispActiveNames: [],\r\n   *     nForReadjustRecord: 0,\r\n   *     first_round: false,\r\n   *     lock_screen: false,\r\n   *     chatRefStreams: [],\r\n   *     eventType: 'normal',\r\n   *     islevel: '1',\r\n   *     localStreamVideo: null,\r\n   *     breakOutRoomStarted: false,\r\n   *     breakOutRoomEnded: false,\r\n   *     keepBackground: false,\r\n   *     virtualStream: null,\r\n   *     updateActiveNames: (names) => {},\r\n   *     updateDispActiveNames: (names) => {},\r\n   *     updateLStreams: (streams) => {},\r\n   *     updateChatRefStreams: (streams) => {},\r\n   *     updateNForReadjustRecord: (n) => {},\r\n   *     updateUpdateMainWindow: (value) => {},\r\n   *     updateShowMiniView: (value) => {},\r\n   *     prepopulateUserMedia: async () => {},\r\n   *     rePort: async () => {},\r\n   *     processConsumerTransports: async () => {},\r\n   *     resumePauseStreams: async () => {},\r\n   *     readjust: async () => {},\r\n   *     addVideosGrid: async () => {},\r\n   *     getEstimate: async () => {},\r\n   *     checkGrid: async () => {},\r\n   *     resumePauseAudioStreams: async () => {},\r\n   *     getUpdatedAllParams: () => options.parameters,\r\n   *   },\r\n   *   breakRoom: -1,\r\n   *   inBreakRoom: false,\r\n   * };\r\n   *\r\n   * dispStreamsService.dispStreams(options)\r\n   *   .then(() => {\r\n   *     console.log('Streams displayed successfully');\r\n   *   })\r\n   *   .catch((error) => {\r\n   *     console.error('Error displaying streams:', error);\r\n   *   });\r\n   * ```\r\n   */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class DispStreams {\r\n  /**\r\n   * Function to display streams based on various parameters and conditions.\r\n   *\r\n   * @param {Object} options - The options object.\r\n   * @param {Array} options.lStreams - List of streams.\r\n   * @param {number} options.ind - Index of the current stream.\r\n   * @param {boolean} [options.auto=false] - Flag to indicate if the function should run automatically.\r\n   * @param {boolean} [options.ChatSkip=false] - Flag to indicate if chat should be skipped.\r\n   * @param {string|null} [options.forChatID=null] - ID for chat reference.\r\n   * @param {Object} options.parameters - Parameters object containing various settings and functions.\r\n   * @param {number} [options.breakRoom=-1] - Break room number.\r\n   * @param {boolean} [options.inBreakRoom=false] - Flag to indicate if in break room.\r\n   *\r\n   * @returns {Promise<void>} - A promise that resolves when the function completes.\r\n   *\r\n   * @async\r\n   */\r\n  dispStreams = async ({\r\n    lStreams,\r\n    ind,\r\n    auto = false,\r\n    ChatSkip = false,\r\n    forChatID = null,\r\n    parameters,\r\n    breakRoom = -1,\r\n    inBreakRoom = false,\r\n  }: DispStreamsOptions): Promise<void> => {\r\n    // function to display streams\r\n    let { getUpdatedAllParams } = parameters;\r\n    parameters = getUpdatedAllParams();\r\n\r\n    let {\r\n      consumerTransports,\r\n      streamNames,\r\n      audStreamNames,\r\n      participants,\r\n      ref_participants,\r\n      recordingDisplayType,\r\n      recordingVideoOptimized,\r\n      meetingDisplayType,\r\n      meetingVideoOptimized,\r\n      currentUserPage,\r\n      hostLabel,\r\n      mainHeightWidth,\r\n      prevMainHeightWidth,\r\n      prevDoPaginate,\r\n      doPaginate,\r\n      firstAll,\r\n      shared,\r\n      shareScreenStarted,\r\n      shareEnded,\r\n      oldAllStreams,\r\n      updateMainWindow,\r\n      remoteProducerId,\r\n      activeNames,\r\n      dispActiveNames,\r\n      p_dispActiveNames,\r\n      nForReadjustRecord,\r\n      first_round,\r\n      lock_screen,\r\n      chatRefStreams,\r\n      eventType,\r\n      islevel,\r\n      localStreamVideo,\r\n\r\n      breakOutRoomStarted,\r\n      breakOutRoomEnded,\r\n      keepBackground,\r\n      virtualStream,\r\n\r\n      updateActiveNames,\r\n      updateDispActiveNames,\r\n      updateLStreams,\r\n      updateChatRefStreams,\r\n      updateNForReadjustRecord,\r\n      updateUpdateMainWindow,\r\n      updateShowMiniView,\r\n\r\n      prepopulateUserMedia,\r\n      rePort,\r\n      processConsumerTransports,\r\n      resumePauseStreams,\r\n      readjust,\r\n      addVideosGrid,\r\n      checkGrid,\r\n      getEstimate,\r\n      resumePauseAudioStreams,\r\n    } = parameters;\r\n\r\n    let proceed = true;\r\n\r\n    let lStreams_ = lStreams.filter(\r\n      (stream) => stream.producerId !== 'youyou' && stream.producerId !== 'youyouyou',\r\n    );\r\n    lStreams_ = lStreams_.filter(\r\n      (stream) =>\r\n        stream.id !== 'youyou' &&\r\n        stream.id !== 'youyouyou' &&\r\n        stream.name !== 'youyou' &&\r\n        stream.name !== 'youyouyou',\r\n    );\r\n\r\n    if (eventType === 'chat') {\r\n      proceed = true;\r\n    } else if (ind === 0 || (islevel !== '2' && currentUserPage === ind)) {\r\n      proceed = false;\r\n\r\n      lStreams_.forEach((stream) => {\r\n        let checker = false;\r\n        let check_level = 0;\r\n\r\n        if (recordingDisplayType === 'video') {\r\n          if (recordingVideoOptimized) {\r\n            if (\r\n              Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== ''\r\n            ) {\r\n              checker = true;\r\n              check_level = 0;\r\n            }\r\n          } else {\r\n            if (\r\n              (Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n                stream.producerId != null &&\r\n                stream.producerId !== '') ||\r\n              (Object.prototype.hasOwnProperty.call(stream, 'audioID') &&\r\n                stream.audioID != null &&\r\n                stream.audioID !== '')\r\n            ) {\r\n              checker = true;\r\n              check_level = 1;\r\n            }\r\n          }\r\n        } else if (recordingDisplayType === 'media') {\r\n          if (\r\n            (Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== '') ||\r\n            (Object.prototype.hasOwnProperty.call(stream, 'audioID') &&\r\n              stream.audioID != null &&\r\n              stream.audioID !== '')\r\n          ) {\r\n            checker = true;\r\n            check_level = 1;\r\n          }\r\n        } else {\r\n          if (\r\n            (Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== '') ||\r\n            (Object.prototype.hasOwnProperty.call(stream, 'audioID') &&\r\n              stream.audioID != null &&\r\n              stream.audioID !== '') ||\r\n            (Object.prototype.hasOwnProperty.call(stream, 'name') &&\r\n              stream.name !== null &&\r\n              stream.name != '')\r\n          ) {\r\n            checker = true;\r\n            check_level = 2;\r\n          }\r\n        }\r\n\r\n        let participant;\r\n\r\n        if (checker) {\r\n          if (check_level === 0) {\r\n            if (\r\n              Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== ''\r\n            ) {\r\n              participant = streamNames.find((obj: any) => obj.producerId === stream.producerId);\r\n            }\r\n          } else if (check_level === 1) {\r\n            if (\r\n              Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== ''\r\n            ) {\r\n              participant = streamNames.find((obj: any) => obj.producerId === stream.producerId);\r\n            }\r\n            if (!participant) {\r\n              if (\r\n                Object.prototype.hasOwnProperty.call(stream, 'audioID') &&\r\n                stream.audioID != null &&\r\n                stream.audioID !== ''\r\n              ) {\r\n                participant = audStreamNames.find((obj: any) => obj.producerId === stream.audioID);\r\n                if (!participant) {\r\n                  participant = ref_participants.find((obj: any) => obj.audioID === stream.audioID);\r\n                }\r\n              }\r\n            }\r\n          } else if (check_level === 2) {\r\n            if (\r\n              Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== ''\r\n            ) {\r\n              participant = streamNames.find((obj: any) => obj.producerId === stream.producerId);\r\n            }\r\n            if (!participant) {\r\n              if (\r\n                Object.prototype.hasOwnProperty.call(stream, 'audioID') &&\r\n                stream.audioID != null &&\r\n                stream.audioID !== ''\r\n              ) {\r\n                participant = audStreamNames.find((obj: any) => obj.producerId === stream.audioID);\r\n                if (!participant) {\r\n                  participant = ref_participants.find((obj: any) => obj.audioID === stream.audioID);\r\n                }\r\n              }\r\n            }\r\n            if (!participant) {\r\n              if (\r\n                Object.prototype.hasOwnProperty.call(stream, 'name') &&\r\n                stream.name !== null &&\r\n                stream.name != ''\r\n              ) {\r\n                participant = ref_participants.find((obj: any) => obj.name === stream.name);\r\n              }\r\n            }\r\n          }\r\n\r\n          if (participant) {\r\n            if (participant.name && !activeNames.includes(participant.name)) {\r\n              activeNames.push(participant.name);\r\n            }\r\n          }\r\n        }\r\n      });\r\n\r\n      updateActiveNames(activeNames);\r\n\r\n      lStreams_.forEach((stream) => {\r\n        let disp_checker = false;\r\n        let disp_check_level = 0;\r\n\r\n        if (meetingDisplayType === 'video') {\r\n          if (meetingVideoOptimized) {\r\n            if (\r\n              Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== ''\r\n            ) {\r\n              disp_checker = true;\r\n              disp_check_level = 0;\r\n            }\r\n          } else {\r\n            if (\r\n              (Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n                stream.producerId != null &&\r\n                stream.producerId !== '') ||\r\n              (Object.prototype.hasOwnProperty.call(stream, 'audioID') &&\r\n                stream.audioID != null &&\r\n                stream.audioID !== '')\r\n            ) {\r\n              disp_checker = true;\r\n              disp_check_level = 1;\r\n            }\r\n          }\r\n        } else if (meetingDisplayType === 'media') {\r\n          if (\r\n            (Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== '') ||\r\n            (Object.prototype.hasOwnProperty.call(stream, 'audioID') &&\r\n              stream.audioID != null &&\r\n              stream.audioID !== '')\r\n          ) {\r\n            disp_checker = true;\r\n            disp_check_level = 1;\r\n          }\r\n        } else {\r\n          if (\r\n            (Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== '') ||\r\n            (Object.prototype.hasOwnProperty.call(stream, 'audioID') &&\r\n              stream.audioID != null &&\r\n              stream.audioID !== '') ||\r\n            (Object.prototype.hasOwnProperty.call(stream, 'name') &&\r\n              stream.name !== null &&\r\n              stream.name != '')\r\n          ) {\r\n            disp_checker = true;\r\n            disp_check_level = 2;\r\n          }\r\n        }\r\n\r\n        let participant_;\r\n\r\n        if (disp_checker) {\r\n          if (disp_check_level === 0) {\r\n            if (\r\n              Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== ''\r\n            ) {\r\n              participant_ = streamNames.find((obj: any) => obj.producerId === stream.producerId);\r\n            }\r\n          } else if (disp_check_level === 1) {\r\n            if (\r\n              Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== ''\r\n            ) {\r\n              participant_ = streamNames.find((obj: any) => obj.producerId === stream.producerId);\r\n            }\r\n            if (!participant_) {\r\n              if (\r\n                Object.prototype.hasOwnProperty.call(stream, 'audioID') &&\r\n                stream.audioID != null &&\r\n                stream.audioID !== ''\r\n              ) {\r\n                participant_ = audStreamNames.find((obj: any) => obj.producerId === stream.audioID);\r\n                if (!participant_) {\r\n                  participant_ = ref_participants.find(\r\n                    (obj: any) => obj.audioID === stream.audioID,\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          } else if (disp_check_level === 2) {\r\n            if (\r\n              Object.prototype.hasOwnProperty.call(stream, 'producerId') &&\r\n              stream.producerId != null &&\r\n              stream.producerId !== ''\r\n            ) {\r\n              participant_ = streamNames.find((obj: any) => obj.producerId === stream.producerId);\r\n            }\r\n            if (!participant_) {\r\n              if (\r\n                Object.prototype.hasOwnProperty.call(stream, 'audioID') &&\r\n                stream.audioID != null &&\r\n                stream.audioID !== ''\r\n              ) {\r\n                participant_ = audStreamNames.find((obj: any) => obj.producerId === stream.audioID);\r\n                if (!participant_) {\r\n                  participant_ = ref_participants.find(\r\n                    (obj: any) => obj.audioID === stream.audioID,\r\n                  );\r\n                }\r\n              }\r\n            }\r\n            if (!participant_) {\r\n              if (\r\n                Object.prototype.hasOwnProperty.call(stream, 'name') &&\r\n                stream.name !== null &&\r\n                stream.name != ''\r\n              ) {\r\n                participant_ = ref_participants.find((obj: any) => obj.name === stream.name);\r\n              }\r\n            }\r\n          }\r\n\r\n          if (participant_) {\r\n            if (participant_.name && !dispActiveNames.includes(participant_.name)) {\r\n              dispActiveNames.push(participant_.name);\r\n              if (!p_dispActiveNames.includes(participant_.name)) {\r\n                proceed = true;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      });\r\n\r\n      updateDispActiveNames(dispActiveNames);\r\n\r\n      if (lStreams_.length < 1) {\r\n        if (shareScreenStarted || shared) {\r\n          proceed = true;\r\n        } else if (!firstAll) {\r\n          proceed = true;\r\n        }\r\n      }\r\n\r\n      if (shareScreenStarted || shared) {\r\n        // screen share started\r\n      } else {\r\n        if (prevMainHeightWidth !== mainHeightWidth) {\r\n          updateMainWindow = true;\r\n          updateUpdateMainWindow(updateMainWindow);\r\n        }\r\n      }\r\n\r\n      nForReadjustRecord = activeNames.length;\r\n      updateNForReadjustRecord(nForReadjustRecord);\r\n    }\r\n\r\n    if (!proceed && auto) {\r\n      if (updateMainWindow) {\r\n        if (!lock_screen && !shared) {\r\n          await prepopulateUserMedia({ name: hostLabel, parameters });\r\n        } else {\r\n          if (!first_round) {\r\n            await prepopulateUserMedia({ name: hostLabel, parameters });\r\n          }\r\n        }\r\n      }\r\n\r\n      if (ind === 0 && eventType !== 'chat') {\r\n        await rePort({ parameters });\r\n      }\r\n      return;\r\n    }\r\n\r\n    if (eventType === 'broadcast') {\r\n      lStreams = lStreams_;\r\n      updateLStreams(lStreams);\r\n    } else if (eventType === 'chat') {\r\n      if (forChatID != null) {\r\n        lStreams = chatRefStreams;\r\n        updateLStreams(lStreams);\r\n      } else {\r\n        updateShowMiniView(false);\r\n\r\n        if (islevel !== '2') {\r\n          let host = participants.find((obj: any) => obj.islevel === '2');\r\n          if (host) {\r\n            let streame;\r\n            remoteProducerId = host.videoID;\r\n            if (islevel === '2') {\r\n              host['stream'] = keepBackground && virtualStream ? virtualStream : localStreamVideo;\r\n            } else {\r\n              streame = oldAllStreams.find(\r\n                (streame: any) => streame.producerId === remoteProducerId,\r\n              );\r\n              if (streame) {\r\n                lStreams = lStreams.filter((stream) => stream.name !== host.name);\r\n                lStreams.push(streame);\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        let youyou = lStreams.find(\r\n          (obj: any) => obj.producerId === 'youyou' || obj.producerId === 'youyouyou',\r\n        );\r\n        lStreams = lStreams.filter(\r\n          (stream) => stream.producerId !== 'youyou' && stream.producerId !== 'youyouyou',\r\n        );\r\n        if (youyou) {\r\n          lStreams.push(youyou);\r\n        }\r\n\r\n        chatRefStreams = lStreams;\r\n        updateLStreams(lStreams);\r\n        updateChatRefStreams(chatRefStreams);\r\n      }\r\n    }\r\n\r\n    let refLength = lStreams.length;\r\n\r\n    const [, rows, cols] = getEstimate({ n: refLength, parameters });\r\n    let result = (await checkGrid({ rows, cols, actives: refLength })) || [false, 0, 0, 0, 0, 0, 0];\r\n    let [removeAltGrid, numtoaddd, numRows, numCols, , actualRows, lastrowcols] = result;\r\n\r\n    if (ChatSkip && eventType == 'chat') {\r\n      numRows = 1;\r\n      numCols = 1;\r\n      actualRows = 1;\r\n    }\r\n\r\n    //if removeAltGrid is true then remove everyting from altGrid and add to mainGrid,check for streams on alvideoStreams and add to mainGrid that are not on mainGrid and add switching to true\r\n\r\n    await readjust({ n: lStreams.length, state: ind, parameters });\r\n\r\n    // split the streams into two arrays, one for mainGrid and one for altGrid\r\n    // take up to numtoadd from the lStreams and add to mainGridStreams\r\n    let mainGridStreams = lStreams.slice(0, numtoaddd);\r\n    // take the rest of the streams and add to altGridStreams\r\n    let altGridStreams = lStreams.slice(numtoaddd, lStreams.length);\r\n    //add to grids\r\n\r\n    if (\r\n      doPaginate == true ||\r\n      prevDoPaginate != doPaginate ||\r\n      shared ||\r\n      shareScreenStarted ||\r\n      shareEnded\r\n    ) {\r\n      let lStreams_alt = lStreams_;\r\n      await processConsumerTransports({ consumerTransports, lStreams_: lStreams_alt, parameters });\r\n\r\n      try {\r\n        if (breakOutRoomStarted && !breakOutRoomEnded) {\r\n          await resumePauseAudioStreams({ inBreakRoom, breakRoom, parameters });\r\n        }\r\n      } catch (error) {\r\n        // console.log('Error in resumePauseAudioStreams:', error);\r\n      }\r\n\r\n      try {\r\n        if (!breakOutRoomStarted || (breakOutRoomStarted && breakOutRoomEnded)) {\r\n          await resumePauseStreams({ parameters });\r\n        }\r\n      } catch {\r\n        /* handle error */\r\n      }\r\n\r\n      if (shareEnded) {\r\n        shareEnded = false;\r\n      }\r\n    }\r\n\r\n    if (ChatSkip && eventType == 'chat') {\r\n      await addVideosGrid({\r\n        mainGridStreams,\r\n        altGridStreams,\r\n        numtoadd: numtoaddd - 1,\r\n        numRows,\r\n        numCols,\r\n        actualRows,\r\n        lastrowcols,\r\n        removeAltGrid,\r\n        parameters,\r\n      });\r\n    } else {\r\n      await addVideosGrid({\r\n        mainGridStreams,\r\n        altGridStreams,\r\n        numtoadd: numtoaddd,\r\n        numRows,\r\n        numCols,\r\n        actualRows,\r\n        lastrowcols,\r\n        removeAltGrid,\r\n        parameters,\r\n      });\r\n    }\r\n\r\n    if (updateMainWindow) {\r\n      if (!lock_screen && !shared) {\r\n        await prepopulateUserMedia({ name: hostLabel, parameters });\r\n      } else {\r\n        if (!first_round) {\r\n          await prepopulateUserMedia({ name: hostLabel, parameters });\r\n        }\r\n      }\r\n    }\r\n\r\n    if (ind == 0 && eventType !== 'chat') {\r\n      await rePort({ parameters });\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Participant, Stream, DispStreamsType, DispStreamsParameters } from '../@types/types';\r\nexport interface GeneratePageContentParameters extends DispStreamsParameters {\r\n  paginatedStreams: (Participant | Stream)[][];\r\n  currentUserPage: number;\r\n  updateMainWindow: boolean;\r\n  updateCurrentUserPage: (page: number) => void;\r\n  updateUpdateMainWindow: (flag: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  dispStreams: DispStreamsType;\r\n  getUpdatedAllParams: () => GeneratePageContentParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface GeneratePageContentOptions {\r\n  page: number | string;\r\n  parameters: GeneratePageContentParameters;\r\n  breakRoom?: number;\r\n  inBreakRoom?: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type GeneratePageContentType = (options: GeneratePageContentOptions) => Promise<void>;\r\n\r\n  /**\r\n   * Generates the content for a specific page.\r\n   *\r\n   * @param {GeneratePageContentOptions} options - The options for generating page content.\r\n   * @param {number | string} options.page - The page number to generate content for.\r\n   * @param {GeneratePageContentParameters} options.parameters - The parameters required for generating content.\r\n   * @param {Array<(Participant | Stream)[]>} options.parameters.paginatedStreams - The streams to be paginated.\r\n   * @param {number} options.parameters.currentUserPage - The current page of the user.\r\n   * @param {Function} options.parameters.updateMainWindow - Function to update the main window flag.\r\n   * @param {Function} options.parameters.updateCurrentUserPage - Function to update the current user page.\r\n   * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window update flag.\r\n   * @param {Function} options.parameters.dispStreams - Function to display streams for the specified page.\r\n   * @param {number} [options.breakRoom=-1] - The break room identifier.\r\n   * @param {boolean} [options.inBreakRoom=false] - Flag indicating if the user is in a break room.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the content generation is complete.\r\n   *\r\n   * @throws {Error} Throws an error if content generation fails.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const options = {\r\n   *   page: 1,\r\n   *   parameters: {\r\n   *     paginatedStreams: [\r\n   *       // Page 0 streams\r\n   *       [stream1, stream2],\r\n   *       // Page 1 streams\r\n   *       [stream3, stream4],\r\n   *     ],\r\n   *     currentUserPage: 0,\r\n   *     updateMainWindow: false,\r\n   *     updateCurrentUserPage: (page) => { console.log(`Current page updated to: ${page}`); },\r\n   *     updateUpdateMainWindow: (flag) => { console.log(`Main window update flag: ${flag}`); },\r\n   *     dispStreams: async ({ lStreams, ind }) => {\r\n   *       console.log(`Displaying streams for page ${ind}:`, lStreams);\r\n   *     },\r\n   *     getUpdatedAllParams: () => options.parameters,\r\n   *   },\r\n   *   breakRoom: -1,\r\n   *   inBreakRoom: false,\r\n   * };\r\n   *\r\n   * const generatePageContentService = new GeneratePageContent();\r\n   * await generatePageContentService.generatePageContent(options);\r\n   * ```\r\n   */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class GeneratePageContent {\r\n  /**\r\n   * Generates the content for a specific page.\r\n   *\r\n   * @param {Object} options - The options for generating page content.\r\n   * @param {number | string} options.page - The page number to generate content for.\r\n   * @param {Object} options.parameters - The parameters required for generating content.\r\n   * @param {Array} options.parameters.paginatedStreams - The streams to be paginated.\r\n   * @param {number} options.parameters.currentUserPage - The current page of the user.\r\n   * @param {Function} options.parameters.updateMainWindow - Function to update the main window flag.\r\n   * @param {Function} options.parameters.updateCurrentUserPage - Function to update the current user page.\r\n   * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window update flag.\r\n   * @param {Function} options.parameters.dispStreams - Function to display streams for the specified page.\r\n   * @param {number} [options.breakRoom=-1] - The break room identifier.\r\n   * @param {boolean} [options.inBreakRoom=false] - Flag indicating if the user is in a break room.\r\n   * @returns {Promise<void>} A promise that resolves when the content generation is complete.\r\n   * @throws {Error} Throws an error if content generation fails.\r\n   */\r\n  async generatePageContent({\r\n    page,\r\n    parameters,\r\n    breakRoom = -1,\r\n    inBreakRoom = false,\r\n  }: GeneratePageContentOptions): Promise<void> {\r\n    try {\r\n      // Destructure parameters\r\n      parameters = parameters.getUpdatedAllParams();\r\n\r\n      let {\r\n        paginatedStreams,\r\n        currentUserPage,\r\n        updateMainWindow,\r\n        updateCurrentUserPage,\r\n        updateUpdateMainWindow,\r\n        // mediasfu functions\r\n        dispStreams,\r\n      } = parameters;\r\n\r\n      // Convert page to an integer\r\n      page = parseInt(page.toString(), 10);\r\n\r\n      // Update current user page\r\n      currentUserPage = page;\r\n      updateCurrentUserPage(currentUserPage);\r\n\r\n      // Update main window flag\r\n      updateMainWindow = true;\r\n      updateUpdateMainWindow(updateMainWindow);\r\n\r\n      // Display streams for the specified page\r\n      await dispStreams({\r\n        lStreams: paginatedStreams[page],\r\n        ind: page,\r\n        parameters,\r\n        breakRoom,\r\n        inBreakRoom,\r\n      });\r\n    } catch (error: any) {\r\n      // Handle errors during content generation\r\n      console.log('Error generating page content:', error.message);\r\n    }\r\n  }\r\n}\r\n","// estimate.service.ts\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { CalculateRowsAndColumnsType, EventType } from '../@types/types';\r\n\r\nexport interface GetEstimateParameters {\r\n  fixedPageLimit: number;\r\n  screenPageLimit: number;\r\n  shareScreenStarted: boolean;\r\n  shared?: boolean;\r\n  eventType: EventType;\r\n  removeAltGrid: boolean;\r\n  isWideScreen: boolean;\r\n  isMediumScreen: boolean;\r\n  updateRemoveAltGrid: (value: boolean) => void;\r\n\r\n  // mediaSfu functions\r\n  calculateRowsAndColumns: CalculateRowsAndColumnsType;\r\n\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface GetEstimateOptions {\r\n  n: number;\r\n  parameters: GetEstimateParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type GetEstimateType = (options: GetEstimateOptions) => [number, number, number];\r\n\r\n  /**\r\n   * Estimates the number of rows and columns for a given set of parameters.\r\n   *\r\n   * @param {GetEstimateOptions} options - The options for the estimation.\r\n   * @param {number} options.n - The number of items to estimate for.\r\n   * @param {GetEstimateParameters} options.parameters - The parameters for the estimation.\r\n   * @param {number} options.parameters.fixedPageLimit - The fixed page limit.\r\n   * @param {number} options.parameters.screenPageLimit - The screen page limit.\r\n   * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.\r\n   * @param {boolean} [options.parameters.shared=false] - Indicates if sharing is active.\r\n   * @param {EventType} options.parameters.eventType - The type of event (e.g., \"chat\", \"conference\").\r\n   * @param {boolean} options.parameters.removeAltGrid - Indicates if the alternate grid should be removed.\r\n   * @param {boolean} options.parameters.isWideScreen - Indicates if the screen is wide.\r\n   * @param {boolean} options.parameters.isMediumScreen - Indicates if the screen is medium-sized.\r\n   * @param {Function} options.parameters.updateRemoveAltGrid - Function to update the removeAltGrid parameter.\r\n   * @param {CalculateRowsAndColumnsType} options.parameters.calculateRowsAndColumns - Function to calculate rows and columns.\r\n   *\r\n   * @returns {[number, number, number]} An array containing:\r\n   * - Estimated number of items,\r\n   * - Estimated number of rows,\r\n   * - Estimated number of columns.\r\n   *\r\n   * @throws Will log an error message if an error occurs during estimation.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const estimateOptions = {\r\n   *   n: 20,\r\n   *   parameters: {\r\n   *     fixedPageLimit: 10,\r\n   *     screenPageLimit: 15,\r\n   *     shareScreenStarted: false,\r\n   *     shared: false,\r\n   *     eventType: 'conference',\r\n   *     removeAltGrid: false,\r\n   *     isWideScreen: true,\r\n   *     isMediumScreen: false,\r\n   *     updateRemoveAltGrid: (value) => console.log(`Remove Alt Grid: ${value}`),\r\n   *     calculateRowsAndColumns: ({ n }) => {\r\n   *       const sqrt = Math.sqrt(n);\r\n   *       return [Math.ceil(sqrt), Math.floor(sqrt)];\r\n   *     },\r\n   *   },\r\n   * };\r\n   *\r\n   * const estimateService = new GetEstimate();\r\n   * const [estimatedItems, estimatedRows, estimatedCols] = estimateService.getEstimate(estimateOptions);\r\n   * console.log(`Estimated Items: ${estimatedItems}, Rows: ${estimatedRows}, Columns: ${estimatedCols}`);\r\n   * ```\r\n   */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class GetEstimate {\r\n  /**\r\n   * Estimates the number of rows and columns for a given set of parameters.\r\n   *\r\n   * @param {GetEstimateOptions} options - The options for the estimation.\r\n   * @param {number} options.n - The number of items to estimate for.\r\n   * @param {Object} options.parameters - The parameters for the estimation.\r\n   * @param {number} options.parameters.fixedPageLimit - The fixed page limit.\r\n   * @param {number} options.parameters.screenPageLimit - The screen page limit.\r\n   * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.\r\n   * @param {boolean} options.parameters.shared - Indicates if sharing is active.\r\n   * @param {string} options.parameters.eventType - The type of event (e.g., \"chat\", \"conference\").\r\n   * @param {boolean} options.parameters.removeAltGrid - Indicates if the alternate grid should be removed.\r\n   * @param {boolean} options.parameters.isWideScreen - Indicates if the screen is wide.\r\n   * @param {boolean} options.parameters.isMediumScreen - Indicates if the screen is medium-sized.\r\n   * @param {Function} options.parameters.updateRemoveAltGrid - Function to update the removeAltGrid parameter.\r\n   * @param {Function} options.parameters.calculateRowsAndColumns - Function to calculate rows and columns.\r\n   *\r\n   * @returns {number[]} An array containing the estimated number of items, rows, and columns.\r\n   *\r\n   * @throws Will log an error message if an error occurs during estimation.\r\n   */\r\n  getEstimate({ n, parameters }: GetEstimateOptions): [number, number, number] {\r\n    try {\r\n      // Destructure parameters\r\n      let {\r\n        fixedPageLimit,\r\n        screenPageLimit,\r\n        shareScreenStarted,\r\n        shared,\r\n        eventType,\r\n        removeAltGrid,\r\n        isWideScreen,\r\n        isMediumScreen,\r\n        updateRemoveAltGrid,\r\n        // mediaSfu functions\r\n        calculateRowsAndColumns,\r\n      } = parameters;\r\n\r\n      // Calculate rows and columns\r\n      const [rows, cols] = calculateRowsAndColumns({ n });\r\n\r\n      // Check conditions for removing alt grid\r\n      if (n < fixedPageLimit || ((shareScreenStarted || shared) && n < screenPageLimit + 1)) {\r\n        removeAltGrid = true;\r\n        updateRemoveAltGrid(removeAltGrid);\r\n\r\n        // Return estimated values based on screen width\r\n        if (!(isMediumScreen || isWideScreen)) {\r\n          return eventType === 'chat' ||\r\n            (eventType === 'conference' && !(shareScreenStarted || shared))\r\n            ? [n, n, 1]\r\n            : [n, 1, n];\r\n        } else {\r\n          return eventType === 'chat' ||\r\n            (eventType === 'conference' && !(shareScreenStarted || shared))\r\n            ? [n, 1, n]\r\n            : [n, n, 1];\r\n        }\r\n      }\r\n\r\n      return [rows * cols, rows, cols];\r\n    } catch (error: any) {\r\n      // Handle errors during estimation\r\n      console.log('Error estimating rows and columns:', error.message);\r\n      // throw error;\r\n      return [0, 0, 0];\r\n    }\r\n  }\r\n}\r\n","// piped-producers.service.ts\r\nimport { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nimport {\r\n  SignalNewConsumerTransportParameters,\r\n  SignalNewConsumerTransportType,\r\n} from '../@types/types';\r\n\r\nexport interface GetPipedProducersAltParameters extends SignalNewConsumerTransportParameters {\r\n  member: string;\r\n\r\n  // mediasfu functions\r\n  signalNewConsumerTransport: SignalNewConsumerTransportType;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface GetPipedProducersAltOptions {\r\n  community?: boolean;\r\n  nsock: Socket;\r\n  islevel: string;\r\n  parameters: GetPipedProducersAltParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type GetPipedProducersAltType = (options: GetPipedProducersAltOptions) => Promise<void>;\r\n\r\n/**\r\n * Retrieves piped producers and signals new consumer transport for each retrieved producer.\r\n *\r\n * @param {GetPipedProducersAltOptions} options - The options for retrieving piped producers.\r\n * @param {boolean} options.community - Whether the room is a community edition room.\r\n * @param {Socket} options.nsock - The WebSocket instance used for communication.\r\n * @param {string} options.islevel - A flag indicating the level of the request.\r\n * @param {GetPipedProducersAltParameters} options.parameters - Additional parameters for the request.\r\n * @param {string} options.parameters.member - The member identifier.\r\n * @param {SignalNewConsumerTransportType} options.parameters.signalNewConsumerTransport - A function to signal new consumer transport.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n *\r\n * @throws {Error} If an error occurs during the process of retrieving producers.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   community: true,\r\n *   nsock: socketInstance,\r\n *   islevel: '2',\r\n *   parameters: {\r\n *     member: 'user123',\r\n *     signalNewConsumerTransport: async ({ nsock, remoteProducerId, islevel, parameters }) => {\r\n *       // Implementation to signal new consumer transport\r\n *       console.log(`Signaling new consumer transport for producer: ${remoteProducerId}`);\r\n *     },\r\n *   },\r\n * };\r\n *\r\n * const getPipedProducersService = new GetPipedProducersAlt();\r\n * await getPipedProducersService.getPipedProducersAlt(options);\r\n * console.log('Piped producers retrieved successfully.');\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class GetPipedProducersAlt {\r\n  /**\r\n   * Retrieves piped producers and signals new consumer transport for each retrieved producer.\r\n   *\r\n   * @param {Object} options - The options for retrieving piped producers.\r\n   * @param {boolean} options.community - Whether the room is a community edition room.\r\n   * @param {WebSocket} options.nsock - The WebSocket instance used for communication.\r\n   * @param {boolean} options.islevel - A flag indicating the level of the request.\r\n   * @param {Object} options.parameters - Additional parameters for the request.\r\n   * @param {string} options.parameters.member - The member identifier.\r\n   * @param {Function} options.parameters.signalNewConsumerTransport - A function to signal new consumer transport.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n   *\r\n   * @throws {Error} If an error occurs during the process of retrieving producers.\r\n   */\r\n  async getPipedProducersAlt({\r\n    community = false,\r\n    nsock,\r\n    islevel,\r\n    parameters,\r\n  }: GetPipedProducersAltOptions): Promise<void> {\r\n    try {\r\n      // Destructure parameters\r\n      const { member, signalNewConsumerTransport } = parameters;\r\n\r\n      const emitName = community ? \"getProducersAlt\" : \"getProducersPipedAlt\";\r\n\r\n      // Emit request to get piped producers using WebSocket\r\n      nsock.emit(emitName, { islevel, member }, async (producerIds: string[]) => {\r\n        // Check if producers are retrieved\r\n        if (producerIds.length > 0) {\r\n          // Signal new consumer transport for each retrieved producer\r\n          for (const id of producerIds) {\r\n            await signalNewConsumerTransport({ nsock, remoteProducerId: id, islevel, parameters });\r\n          }\r\n        }\r\n      });\r\n    } catch (error: any) {\r\n      // Handle errors during the process of retrieving producers\r\n      console.log('Error getting piped producers:', error.message);\r\n      // throw error;\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  SignalNewConsumerTransportParameters,\r\n  SignalNewConsumerTransportType,\r\n} from '../@types/types';\r\nexport interface GetProducersPipedParameters extends SignalNewConsumerTransportParameters {\r\n  member: string;\r\n\r\n  // mediasfu functions\r\n  signalNewConsumerTransport: SignalNewConsumerTransportType;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface GetProducersPipedOptions {\r\n  nsock: Socket;\r\n  islevel: string;\r\n  parameters: GetProducersPipedParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type GetProducersPipedType = (options: GetProducersPipedOptions) => Promise<void>;\r\n\r\n/**\r\n * Retrieves piped producers and signals new consumer transport for each retrieved producer.\r\n *\r\n * @param {GetProducersPipedOptions} options - The options for getting piped producers.\r\n * @param {Socket} options.nsock - The WebSocket instance used for communication.\r\n * @param {string} options.islevel - A flag indicating the level of the operation.\r\n * @param {GetProducersPipedParameters} options.parameters - Additional parameters for the operation.\r\n * @param {string} options.parameters.member - The member identifier.\r\n * @param {SignalNewConsumerTransportType} options.parameters.signalNewConsumerTransport - The function to signal new consumer transport.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n *\r\n * @throws {Error} If an error occurs during the process of retrieving producers.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   nsock: socketInstance,\r\n *   islevel: '2',\r\n *   parameters: {\r\n *     member: 'user123',\r\n *     signalNewConsumerTransport: async ({ remoteProducerId, islevel, nsock, parameters }) => {\r\n *       // Implementation to signal new consumer transport\r\n *       console.log(`Signaling new consumer transport for producer: ${remoteProducerId}`);\r\n *     },\r\n *   },\r\n * };\r\n *\r\n * const getProducersPipedService = new GetProducersPiped();\r\n * await getProducersPipedService.getProducersPiped(options);\r\n * console.log('Piped producers retrieved successfully.');\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class GetProducersPiped {\r\n  /**\r\n   * Retrieves piped producers and signals new consumer transport for each retrieved producer.\r\n   *\r\n   * @param {Object} options - The options for getting piped producers.\r\n   * @param {WebSocket} options.nsock - The WebSocket instance used for communication.\r\n   * @param {boolean} options.islevel - A flag indicating the level of the operation.\r\n   * @param {Object} options.parameters - Additional parameters for the operation.\r\n   * @param {string} options.parameters.member - The member identifier.\r\n   * @param {Function} options.parameters.signalNewConsumerTransport - The function to signal new consumer transport.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n   *\r\n   * @throws {Error} If an error occurs during the process of retrieving producers.\r\n   */\r\n\r\n  async getProducersPiped({ nsock, islevel, parameters }: GetProducersPipedOptions): Promise<void> {\r\n    try {\r\n      // Destructure parameters\r\n      const { member, signalNewConsumerTransport } = parameters;\r\n\r\n      // Emit request to get piped producers using WebSocket\r\n      nsock.emit('getProducersPipedAlt', { islevel, member }, async (producerIds: string[]) => {\r\n        // Check if producers are retrieved\r\n        if (producerIds.length > 0) {\r\n          // Signal new consumer transport for each retrieved producer\r\n          await Promise.all(\r\n            producerIds.map((id) =>\r\n              signalNewConsumerTransport({ remoteProducerId: id, islevel, nsock, parameters }),\r\n            ),\r\n          );\r\n        }\r\n      });\r\n    } catch (error: any) {\r\n      // Handle errors during the process of retrieving producers\r\n      console.log('Error getting piped producers:', error.message);\r\n      // throw error;\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Stream, Participant } from '../@types/types';\r\nexport interface GetVideosOptions {\r\n  participants: Participant[];\r\n  allVideoStreams: (Stream | Participant)[];\r\n  oldAllStreams: (Stream | Participant)[];\r\n  adminVidID?: string;\r\n  updateAllVideoStreams: (streams: (Stream | Participant)[]) => void;\r\n  updateOldAllStreams: (streams: (Stream | Participant)[]) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type GetVideosType = (options: GetVideosOptions) => Promise<void>;\r\n\r\n/**\r\n * Asynchronously processes and updates video streams by filtering out the admin's video stream.\r\n *\r\n * @param {GetVideosOptions} options - The options for getting videos.\r\n * @param {Participant[]} options.participants - The list of participants.\r\n * @param {Stream[]} options.allVideoStreams - The list of all video streams.\r\n * @param {(Stream | Participant)[]} options.oldAllStreams - The list of old video streams.\r\n * @param {string} [options.adminVidID] - The ID of the admin's video stream.\r\n * @param {Function} options.updateAllVideoStreams - Function to update the state variable for all video streams.\r\n * @param {Function} options.updateOldAllStreams - Function to update the state variable for old video streams.\r\n * @returns {Promise<void>} A promise that resolves when the video streams have been processed and updated.\r\n *\r\n * @throws {Error} If an error occurs during the process of updating video streams.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   participants: participantList,\r\n *   allVideoStreams: currentVideoStreams,\r\n *   oldAllStreams: previousVideoStreams,\r\n *   updateAllVideoStreams: (streams) => {\r\n *     console.log('Updated all video streams:', streams);\r\n *   },\r\n *   updateOldAllStreams: (streams) => {\r\n *     console.log('Updated old video streams:', streams);\r\n *   },\r\n * };\r\n *\r\n * const getVideosService = new GetVideos();\r\n * await getVideosService.getVideos(options);\r\n * console.log('Video streams processed successfully.');\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class GetVideos {\r\n  /**\r\n   * Asynchronously processes and updates video streams by filtering out the admin's video stream.\r\n   *\r\n   * @param {GetVideosOptions} options - The options for getting videos.\r\n   * @param {Participant[]} options.participants - The list of participants.\r\n   * @param {Stream[]} options.allVideoStreams - The list of all video streams.\r\n   * @param {(Stream | Participant)[]} options.oldAllStreams - The list of old video streams.\r\n   * @param {string} options.adminVidID - The ID of the admin's video stream.\r\n   * @param {Function} options.updateAllVideoStreams - Function to update the state variable for all video streams.\r\n   * @param {Function} options.updateOldAllStreams - Function to update the state variable for old video streams.\r\n   * @returns {Promise<void>} A promise that resolves when the video streams have been processed and updated.\r\n   */\r\n\r\n  async getVideos({\r\n    participants,\r\n    allVideoStreams,\r\n    oldAllStreams,\r\n    adminVidID,\r\n    updateAllVideoStreams,\r\n    updateOldAllStreams,\r\n  }: GetVideosOptions): Promise<void> {\r\n    try {\r\n      // Filter out the admin's video stream and update state variables\r\n      let admin = participants.filter((participant: any) => participant.islevel === '2');\r\n\r\n      if (admin.length > 0) {\r\n        adminVidID = admin[0].videoID;\r\n\r\n        if (adminVidID != null && adminVidID !== '') {\r\n          let oldAllStreams_: any[] = [];\r\n\r\n          // Check if the length of oldAllStreams is greater than 0\r\n          if (oldAllStreams.length > 0) {\r\n            oldAllStreams_ = oldAllStreams;\r\n          }\r\n\r\n          // Filter out admin's video stream from oldAllStreams\r\n          oldAllStreams = allVideoStreams.filter(\r\n            (streame: any) => streame.producerId === adminVidID,\r\n          );\r\n\r\n          // If no admin's video stream found, revert to the previous state\r\n          if (oldAllStreams.length < 1) {\r\n            oldAllStreams = oldAllStreams_;\r\n          }\r\n\r\n          // Update the state variable for old video streams\r\n          updateOldAllStreams(oldAllStreams);\r\n\r\n          // Filter out admin's video stream from allVideoStreams\r\n          allVideoStreams = allVideoStreams.filter(\r\n            (streame: any) => streame.producerId !== adminVidID,\r\n          );\r\n\r\n          // Update the state variable for all video streams\r\n          updateAllVideoStreams(allVideoStreams);\r\n        }\r\n      }\r\n    } catch (error: any) {\r\n      // Handle errors during the process of updating video streams\r\n      console.log('Error updating video streams:', error.message);\r\n      // throw error;\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Stream, Participant } from '../@types/types';\r\n\r\nexport interface MixStreamsOptions {\r\n  alVideoStreams: (Stream | Participant)[];\r\n  non_alVideoStreams: Participant[];\r\n  ref_participants: (Stream | Participant)[];\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type MixStreamsType = (options: MixStreamsOptions) => Promise<(Stream | Participant)[]>;\r\n\r\n/**\r\n * Mixes video and audio streams and participants based on specified parameters.\r\n *\r\n * @param {MixStreamsOptions} options - The options for mixing streams.\r\n * @param {Array<Stream | Participant>} options.alVideoStreams - The list of audio and video streams to mix.\r\n * @param {Array<Participant>} options.non_alVideoStreams - The list of non-audio and video streams to mix.\r\n * @param {Array<Stream | Participant>} options.ref_participants - The list of reference participants to mix.\r\n * @returns {Promise<Array<Stream | Participant>>} A promise that resolves with the mixed streams.\r\n *\r\n * @throws Will throw an error if there is an issue mixing the streams.\r\n *\r\n * @example\r\n * ```typescript\r\n * const mixedStreams = await mixStreams({\r\n *   alVideoStreams: [stream1, stream2],\r\n *   non_alVideoStreams: [participant1, participant2],\r\n *   ref_participants: [participant1, participant2],\r\n * });\r\n *\r\n * console.log('Mixed streams:', mixedStreams);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class MixStreams {\r\n  /**\r\n   * Mixes video and audio streams and participants based on specified parameters.\r\n   *\r\n   * @param {Object} options - The options for mixing streams.\r\n   * @param {Array} options.alVideoStreams - The list of audio and video streams to mix.\r\n   * @param {Array} options.non_alVideoStreams - The list of non-audio and video streams to mix.\r\n   * @param {Array} options.ref_participants - The list of reference participants to mix.\r\n   * @returns {Promise<Array>} A promise that resolves with the mixed streams.\r\n   * @throws Will throw an error if there is an issue mixing the streams.\r\n   * @example\r\n   * ```typescript\r\n   * mixStreams({\r\n   *   alVideoStreams: [stream1, stream2],\r\n   *  non_alVideoStreams: [participant1, participant2],\r\n   * ref_participants: [participant1, participant2]\r\n   * });\r\n   *\r\n   * ```\r\n   */\r\n\r\n  async mixStreams({\r\n    alVideoStreams,\r\n    non_alVideoStreams,\r\n    ref_participants,\r\n  }: MixStreamsOptions): Promise<(Stream | Participant)[]> {\r\n    try {\r\n      const mixedStreams: any[] = [];\r\n      const youyouStream = alVideoStreams.find(\r\n        (obj: any) => obj.producerId === 'youyou' || obj.producerId === 'youyouyou',\r\n      );\r\n      alVideoStreams = alVideoStreams.filter(\r\n        (obj: any) => obj.producerId !== 'youyou' && obj.producerId !== 'youyouyou',\r\n      );\r\n\r\n      const unmutedAlVideoStreams = alVideoStreams.filter((obj: any) => {\r\n        const participant = ref_participants.find((p: any) => p.videoID === obj.producerId);\r\n        return !obj.muted && participant && participant.muted === false;\r\n      });\r\n\r\n      const mutedAlVideoStreams = alVideoStreams.filter((obj: any) => {\r\n        const participant = ref_participants.find((p: any) => p.videoID === obj.producerId);\r\n        return obj.muted || (participant && participant.muted === true);\r\n      });\r\n\r\n      const nonAlVideoStreams = non_alVideoStreams.slice(); // Create a copy of non_alVideoStreams\r\n\r\n      // Add unmutedAlVideoStreams to mixedStreams\r\n      mixedStreams.push(...unmutedAlVideoStreams);\r\n\r\n      // Interleave the mutedAlVideoStreams and nonAlVideoStreams\r\n      let nonAlIndex = 0;\r\n      for (let i = 0; i < mutedAlVideoStreams.length; i++) {\r\n        if (nonAlIndex < nonAlVideoStreams.length) {\r\n          mixedStreams.push(nonAlVideoStreams[nonAlIndex]);\r\n          nonAlIndex++;\r\n        }\r\n        mixedStreams.push(mutedAlVideoStreams[i]);\r\n      }\r\n\r\n      // Handle remaining nonAlVideoStreams (if any)\r\n      for (let i = nonAlIndex; i < nonAlVideoStreams.length; i++) {\r\n        mixedStreams.push(nonAlVideoStreams[i]);\r\n      }\r\n\r\n      // Unshift 'youyou' or 'youyouyou' stream to mixedStreams\r\n      if (youyouStream) {\r\n        mixedStreams.unshift(youyouStream);\r\n      }\r\n\r\n      return mixedStreams;\r\n    } catch (error: any) {\r\n      // Handle errors during the process of mixing streams\r\n      console.log('Error mixing streams:', error.message);\r\n      throw error;\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ReorderStreamsType, ReorderStreamsParameters, EventType } from '../@types/types';\r\nexport interface OnScreenChangesParameters extends ReorderStreamsParameters {\r\n  eventType: EventType;\r\n  shareScreenStarted: boolean;\r\n  shared: boolean;\r\n  addForBasic: boolean;\r\n  updateAddForBasic: (value: boolean) => void;\r\n  itemPageLimit: number;\r\n  updateItemPageLimit: (value: number) => void;\r\n  updateMainHeightWidth: (value: number) => void;\r\n\r\n  //mediasfu functions\r\n  reorderStreams: ReorderStreamsType;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface OnScreenChangesOptions {\r\n  changed?: boolean;\r\n  parameters: OnScreenChangesParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type OnScreenChangesType = (options: OnScreenChangesOptions) => Promise<void>;\r\n\r\n/**\r\n * Handles changes in screen events such as broadcast, chat, and conference.\r\n *\r\n * @param {OnScreenChangesOptions} options - The options for handling screen changes.\r\n * @param {boolean} [options.changed=false] - Indicates if the screen has changed.\r\n * @param {OnScreenChangesParameters} options.parameters - The parameters for handling screen changes.\r\n * @param {string} options.parameters.eventType - The type of event (e.g., \"broadcast\", \"chat\", \"conference\").\r\n * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.\r\n * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\r\n * @param {boolean} options.parameters.addForBasic - Flag to add basic controls.\r\n * @param {Function} options.parameters.updateMainHeightWidth - Function to update the main height and width.\r\n * @param {Function} options.parameters.updateAddForBasic - Function to update the addForBasic flag.\r\n * @param {number} options.parameters.itemPageLimit - The limit for item pages.\r\n * @param {Function} options.parameters.updateItemPageLimit - Function to update the item page limit.\r\n * @param {Function} options.parameters.reorderStreams - Function to reorder streams.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the screen changes have been handled.\r\n *\r\n * @throws {Error} Throws an error if there is an issue handling screen changes.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   changed: true,\r\n *   parameters: {\r\n *     eventType: 'broadcast',\r\n *     shareScreenStarted: false,\r\n *     shared: false,\r\n *     addForBasic: false,\r\n *     updateMainHeightWidth: (value) => { console.log(updated) },\r\n *     updateAddForBasic: (value) => { console.log(updated) },\r\n *     itemPageLimit: 1,\r\n *     updateItemPageLimit: (value) => { console.log(updated) },\r\n *     reorderStreams: async (params) => { },\r\n *   },\r\n * };\r\n *\r\n * await onScreenChanges(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class OnScreenChanges {\r\n  /**\r\n   * Handles changes in screen events such as broadcast, chat, and conference.\r\n   *\r\n   * @param {OnScreenChangesOptions} options - The options for handling screen changes.\r\n   * @param {boolean} options.changed - Indicates if the screen has changed.\r\n   * @param {object} options.parameters - The parameters for handling screen changes.\r\n   * @param {string} options.parameters.eventType - The type of event (e.g., \"broadcast\", \"chat\", \"conference\").\r\n   * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.\r\n   * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\r\n   * @param {boolean} options.parameters.addForBasic - Flag to add basic controls.\r\n   * @param {function} options.parameters.updateMainHeightWidth - Function to update the main height and width.\r\n   * @param {function} options.parameters.updateAddForBasic - Function to update the addForBasic flag.\r\n   * @param {number} options.parameters.itemPageLimit - The limit for item pages.\r\n   * @param {function} options.parameters.updateItemPageLimit - Function to update the item page limit.\r\n   * @param {function} options.parameters.reorderStreams - Function to reorder streams.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the screen changes have been handled.\r\n   *\r\n   * @throws {Error} Throws an error if there is an issue handling screen changes.\r\n   */\r\n  onScreenChanges = async ({\r\n    changed = false,\r\n    parameters,\r\n  }: OnScreenChangesOptions): Promise<void> => {\r\n    try {\r\n      // Destructure parameters\r\n      let {\r\n        eventType,\r\n        shareScreenStarted,\r\n        shared,\r\n        addForBasic,\r\n        updateMainHeightWidth,\r\n        updateAddForBasic,\r\n        itemPageLimit,\r\n        updateItemPageLimit,\r\n\r\n        // mediasfu functions\r\n        reorderStreams,\r\n      } = parameters;\r\n\r\n      // Remove element with id 'controlButtons'\r\n      addForBasic = false;\r\n      updateAddForBasic(addForBasic);\r\n\r\n      if (eventType == 'broadcast' || eventType == 'chat') {\r\n        addForBasic = true;\r\n        updateAddForBasic(addForBasic);\r\n\r\n        itemPageLimit = eventType == 'broadcast' ? 1 : 2;\r\n        updateItemPageLimit(itemPageLimit);\r\n        updateMainHeightWidth(eventType == 'broadcast' ? 100 : 0);\r\n      } else {\r\n        if (eventType == 'conference' && !(shareScreenStarted || shared)) {\r\n          updateMainHeightWidth(0);\r\n        }\r\n      }\r\n\r\n      // Update the mini cards grid\r\n      await reorderStreams({ add: false, screenChanged: changed, parameters });\r\n    } catch (error: any) {\r\n      // Handle errors during the process of handling screen changes\r\n      console.log('Error handling screen changes:', error.message);\r\n      // throw error;\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MiniCard } from '../components/display-components/mini-card/mini-card.component';\r\nimport { VideoCard } from '../components/display-components/video-card/video-card.component';\r\nimport { AudioCard } from '../components/display-components/audio-card/audio-card.component';\r\nimport {\r\n  Participant,\r\n  Stream,\r\n  AudioCardParameters,\r\n  EventType,\r\n  CustomMediaComponent,\r\n} from '../@types/types';\r\n\r\nexport interface PrepopulateUserMediaParameters extends AudioCardParameters {\r\n  participants: Participant[];\r\n  allVideoStreams: (Stream | Participant)[];\r\n  islevel: string;\r\n  member: string;\r\n  shared: boolean;\r\n  shareScreenStarted: boolean;\r\n  eventType: EventType;\r\n  screenId?: string;\r\n  forceFullDisplay: boolean;\r\n  updateMainWindow: boolean;\r\n  mainScreenFilled: boolean;\r\n  adminOnMainScreen: boolean;\r\n  mainScreenPerson: string;\r\n  videoAlreadyOn: boolean;\r\n  audioAlreadyOn: boolean;\r\n  oldAllStreams: (Stream | Participant)[];\r\n  checkOrientation: () => string;\r\n  screenForceFullDisplay: boolean;\r\n  localStreamScreen: MediaStream | null;\r\n  remoteScreenStream: Stream[];\r\n  localStreamVideo: MediaStream | null;\r\n  mainHeightWidth: number;\r\n  isWideScreen: boolean;\r\n  localUIMode: boolean;\r\n  whiteboardStarted: boolean;\r\n  whiteboardEnded: boolean;\r\n  virtualStream: MediaStream | null;\r\n  keepBackground: boolean;\r\n  annotateScreenStream: boolean;\r\n  updateMainScreenPerson: (person: string) => void;\r\n  updateMainScreenFilled: (filled: boolean) => void;\r\n  updateAdminOnMainScreen: (admin: boolean) => void;\r\n  updateMainHeightWidth: (heightWidth: number) => void;\r\n  updateScreenForceFullDisplay: (force: boolean) => void;\r\n  updateUpdateMainWindow: (update: boolean) => void;\r\n  updateMainGridStream: (components: CustomMediaComponent[]) => void;\r\n\r\n  // mediasfu functions\r\n  getUpdatedAllParams: () => PrepopulateUserMediaParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface PrepopulateUserMediaOptions {\r\n  name: string;\r\n  parameters: PrepopulateUserMediaParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type PrepopulateUserMediaType = (options: {\r\n  name: string;\r\n  parameters: any;\r\n}) => Promise<{ component: any; inputs: any }[] | void>;\r\n\r\n/**\r\n * Prepopulates the user media based on the provided options.\r\n *\r\n * This method prepares the UI components for the user's media based on the event type and participant information.\r\n * It manages the display of video and audio cards, mini cards, and handles screen sharing scenarios.\r\n *\r\n * @param {PrepopulateUserMediaOptions} options - The options for prepopulating user media.\r\n * @param {string} options.name - The name of the user.\r\n * @param {PrepopulateUserMediaParameters} options.parameters - The parameters for prepopulating user media.\r\n * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n * @param {Array<Participant>} options.parameters.participants - List of participants.\r\n * @param {Array<Stream>} options.parameters.allVideoStreams - List of all video streams.\r\n * @param {string} options.parameters.islevel - The level of the user.\r\n * @param {string} options.parameters.member - The member name.\r\n * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\r\n * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.\r\n * @param {string} options.parameters.eventType - The type of event (e.g., \"broadcast\", \"chat\", \"conference\").\r\n * @param {string} options.parameters.screenId - The ID of the screen.\r\n * @param {boolean} options.parameters.forceFullDisplay - Indicates if full display is forced.\r\n * @param {Function} options.parameters.updateMainWindow - Function to update the main window.\r\n * @param {boolean} options.parameters.mainScreenFilled - Indicates if the main screen is filled.\r\n * @param {boolean} options.parameters.adminOnMainScreen - Indicates if admin is on the main screen.\r\n * @param {string} options.parameters.mainScreenPerson - The person on the main screen.\r\n * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is already on.\r\n * @param {boolean} options.parameters.audioAlreadyOn - Indicates if the audio is already on.\r\n * @param {Array<Stream>} options.parameters.oldAllStreams - List of old all streams.\r\n * @param {Function} options.parameters.checkOrientation - Function to check orientation.\r\n * @param {boolean} options.parameters.screenForceFullDisplay - Indicates if screen force full display is enabled.\r\n * @param {Stream} options.parameters.localStreamScreen - The local screen stream.\r\n * @param {Array<Stream>} options.parameters.remoteScreenStream - List of remote screen streams.\r\n * @param {Stream} options.parameters.localStreamVideo - The local video stream.\r\n * @param {number} options.parameters.mainHeightWidth - The main height and width.\r\n * @param {boolean} options.parameters.isWideScreen - Indicates if the screen is wide.\r\n * @param {boolean} options.parameters.localUIMode - Indicates if local UI mode is enabled.\r\n * @param {boolean} options.parameters.whiteboardStarted - Indicates if whiteboard has started.\r\n * @param {boolean} options.parameters.whiteboardEnded - Indicates if whiteboard has ended.\r\n * @param {Stream} options.parameters.virtualStream - The virtual stream.\r\n * @param {boolean} options.parameters.keepBackground - Indicates if background should be kept.\r\n * @param {Stream} options.parameters.annotateScreenStream - The annotate screen stream.\r\n * @param {Function} options.parameters.updateMainScreenPerson - Function to update the main screen person.\r\n * @param {Function} options.parameters.updateMainScreenFilled - Function to update if the main screen is filled.\r\n * @param {Function} options.parameters.updateAdminOnMainScreen - Function to update if admin is on the main screen.\r\n * @param {Function} options.parameters.updateMainHeightWidth - Function to update the main height and width.\r\n * @param {Function} options.parameters.updateScreenForceFullDisplay - Function to update screen force full display.\r\n * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window update status.\r\n * @param {Function} options.parameters.updateMainGridStream - Function to update the main grid stream.\r\n *\r\n * @returns {Promise<{ component: any; inputs: any }[] | void>} A promise that resolves with the components and inputs or void.\r\n *\r\n * @throws {Error} Throws an error if there is an issue preparing and populating the main screen.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   name: 'John Doe',\r\n *   parameters: {\r\n *     getUpdatedAllParams: () => { },\r\n *     participants: [],\r\n *     allVideoStreams: [],\r\n *     islevel: '1',\r\n *     member: 'John',\r\n *     shared: false,\r\n *     shareScreenStarted: false,\r\n *     eventType: 'conference',\r\n *     screenId: 'screen123',\r\n *     forceFullDisplay: false,\r\n *     updateMainWindow: false,\r\n *     mainScreenFilled: false,\r\n *     adminOnMainScreen: false,\r\n *     mainScreenPerson: '',\r\n *     videoAlreadyOn: false,\r\n *     audioAlreadyOn: false,\r\n *     oldAllStreams: [],\r\n *     checkOrientation: () => 'landscape',\r\n *     screenForceFullDisplay: false,\r\n *     localStreamScreen: null,\r\n *     remoteScreenStream: [],\r\n *     localStreamVideo: null,\r\n *     mainHeightWidth: 100,\r\n *     isWideScreen: true,\r\n *     localUIMode: false,\r\n *     whiteboardStarted: false,\r\n *     whiteboardEnded: false,\r\n *     virtualStream: null,\r\n *     keepBackground: false,\r\n *     annotateScreenStream: false,\r\n *     updateMainScreenPerson: (person) => { console.log(updated) },\r\n *     updateMainScreenFilled: (filled) => { console.log(updated) },\r\n *     updateAdminOnMainScreen: (admin) => { console.log(updated) },\r\n *     updateMainHeightWidth: (heightWidth) => { console.log(updated) },\r\n *     updateScreenForceFullDisplay: (force) => { console.log(updated) },\r\n *     updateUpdateMainWindow: (update) => { console.log(updated) },\r\n *     updateMainGridStream: (components) => { console.log(updated) },\r\n *   },\r\n * };\r\n *\r\n * await prepopulateUserMedia(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class PrepopulateUserMedia {\r\n  /**\r\n   * Prepopulates the user media based on the provided options.\r\n   *\r\n   * @param {PrepopulateUserMediaOptions} options - The options for prepopulating user media.\r\n   * @param {string} options.name - The name of the user.\r\n   * @param {Parameters} options.parameters - The parameters for prepopulating user media.\r\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {Array<Participant>} options.parameters.participants - List of participants.\r\n   * @param {Array<Stream>} options.parameters.allVideoStreams - List of all video streams.\r\n   * @param {string} options.parameters.islevel - The level of the user.\r\n   * @param {string} options.parameters.member - The member name.\r\n   * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\r\n   * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.\r\n   * @param {string} options.parameters.eventType - The type of event.\r\n   * @param {string} options.parameters.screenId - The screen ID.\r\n   * @param {boolean} options.parameters.forceFullDisplay - Indicates if full display is forced.\r\n   * @param {Function} options.parameters.updateMainWindow - Function to update the main window.\r\n   * @param {boolean} options.parameters.mainScreenFilled - Indicates if the main screen is filled.\r\n   * @param {boolean} options.parameters.adminOnMainScreen - Indicates if admin is on the main screen.\r\n   * @param {string} options.parameters.mainScreenPerson - The person on the main screen.\r\n   * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is already on.\r\n   * @param {boolean} options.parameters.audioAlreadyOn - Indicates if the audio is already on.\r\n   * @param {Array<Stream>} options.parameters.oldAllStreams - List of old all streams.\r\n   * @param {Function} options.parameters.checkOrientation - Function to check orientation.\r\n   * @param {boolean} options.parameters.screenForceFullDisplay - Indicates if screen force full display is enabled.\r\n   * @param {Stream} options.parameters.localStreamScreen - The local screen stream.\r\n   * @param {Array<Stream>} options.parameters.remoteScreenStream - List of remote screen streams.\r\n   * @param {Stream} options.parameters.localStreamVideo - The local video stream.\r\n   * @param {number} options.parameters.mainHeightWidth - The main height and width.\r\n   * @param {boolean} options.parameters.isWideScreen - Indicates if the screen is wide.\r\n   * @param {boolean} options.parameters.localUIMode - Indicates if local UI mode is enabled.\r\n   * @param {boolean} options.parameters.whiteboardStarted - Indicates if whiteboard has started.\r\n   * @param {boolean} options.parameters.whiteboardEnded - Indicates if whiteboard has ended.\r\n   * @param {Stream} options.parameters.virtualStream - The virtual stream.\r\n   * @param {boolean} options.parameters.keepBackground - Indicates if background should be kept.\r\n   * @param {Stream} options.parameters.annotateScreenStream - The annotate screen stream.\r\n   * @param {Function} options.parameters.updateMainScreenPerson - Function to update the main screen person.\r\n   * @param {Function} options.parameters.updateMainScreenFilled - Function to update if the main screen is filled.\r\n   * @param {Function} options.parameters.updateAdminOnMainScreen - Function to update if admin is on the main screen.\r\n   * @param {Function} options.parameters.updateMainHeightWidth - Function to update the main height and width.\r\n   * @param {Function} options.parameters.updateScreenForceFullDisplay - Function to update screen force full display.\r\n   * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window update status.\r\n   * @param {Function} options.parameters.updateMainGridStream - Function to update the main grid stream.\r\n   *\r\n   * @returns {Promise<{ component: any, inputs: any }[] | void>} A promise that resolves with the components and inputs or void.\r\n   */\r\n  prepopulateUserMedia = async ({\r\n    name,\r\n    parameters,\r\n  }: PrepopulateUserMediaOptions): Promise<{ component: any; inputs: any }[] | void> => {\r\n    try {\r\n      // Destructure parameters\r\n\r\n      let { getUpdatedAllParams } = parameters;\r\n      parameters = getUpdatedAllParams();\r\n\r\n      let {\r\n        participants,\r\n        allVideoStreams,\r\n        islevel,\r\n        member,\r\n        shared,\r\n        shareScreenStarted,\r\n        eventType,\r\n        screenId,\r\n        forceFullDisplay,\r\n        updateMainWindow,\r\n        mainScreenFilled,\r\n        adminOnMainScreen,\r\n        mainScreenPerson,\r\n        videoAlreadyOn,\r\n        audioAlreadyOn,\r\n        oldAllStreams,\r\n        checkOrientation,\r\n        screenForceFullDisplay,\r\n\r\n        localStreamScreen,\r\n        remoteScreenStream,\r\n        localStreamVideo,\r\n        mainHeightWidth,\r\n        isWideScreen,\r\n        localUIMode,\r\n        whiteboardStarted,\r\n        whiteboardEnded,\r\n\r\n        virtualStream,\r\n        keepBackground,\r\n        annotateScreenStream,\r\n\r\n        updateMainScreenPerson,\r\n        updateMainScreenFilled,\r\n        updateAdminOnMainScreen,\r\n        updateMainHeightWidth,\r\n        updateScreenForceFullDisplay,\r\n        updateUpdateMainWindow,\r\n        updateMainGridStream,\r\n      } = parameters;\r\n\r\n      // If the event type is 'chat', return early\r\n      if (eventType == 'chat') {\r\n        return;\r\n      }\r\n\r\n      // Initialize variables\r\n      let host: Participant | null;\r\n      let hostStream: any;\r\n      let newComponents: { component: any; inputs: any }[] = [];\r\n\r\n      // Check if screen sharing is started or shared\r\n      if (shareScreenStarted || shared) {\r\n        // Handle main grid visibility based on the event type\r\n        if (eventType == 'conference') {\r\n          if (shared || shareScreenStarted) {\r\n            if (mainHeightWidth == 0) {\r\n              // Add the main grid if not present\r\n              updateMainHeightWidth(84);\r\n            }\r\n          } else {\r\n            // Remove the main grid if not shared or started\r\n            updateMainHeightWidth(0);\r\n          }\r\n        }\r\n\r\n        // Switch display to optimize for screen share\r\n        screenForceFullDisplay = forceFullDisplay;\r\n\r\n        updateScreenForceFullDisplay(screenForceFullDisplay);\r\n\r\n        // Get the orientation and adjust forceFullDisplay\r\n        let orientation = checkOrientation();\r\n        if (orientation == 'portrait' || !isWideScreen) {\r\n          if (shareScreenStarted || shared) {\r\n            screenForceFullDisplay = false;\r\n            updateScreenForceFullDisplay(screenForceFullDisplay);\r\n          }\r\n        }\r\n\r\n        // Check if the user is sharing the screen\r\n        if (shared) {\r\n          // User is sharing\r\n          host = { name: member, audioID: '', videoID: '' };\r\n          hostStream = localStreamScreen;\r\n\r\n          // Update admin on the main screen\r\n          adminOnMainScreen = islevel == '2';\r\n          updateAdminOnMainScreen(adminOnMainScreen);\r\n\r\n          // Update main screen person\r\n          mainScreenPerson = host.name || '';\r\n          updateMainScreenPerson(mainScreenPerson);\r\n        } else {\r\n          //someone else is sharing\r\n          host =\r\n            participants.find(\r\n              (participant: Participant) =>\r\n                participant.ScreenID == screenId && participant.ScreenOn == true,\r\n            ) ?? null;\r\n\r\n          if (whiteboardStarted && !whiteboardEnded) {\r\n            host = { name: 'WhiteboardActive', islevel: '2', audioID: '', videoID: '' };\r\n            hostStream = { producerId: 'WhiteboardActive' };\r\n          }\r\n\r\n          if (host == null) {\r\n            // remoteScreenStream\r\n            host =\r\n              participants.find((participant: Participant) => participant.ScreenOn == true) ?? null;\r\n          }\r\n\r\n          // check remoteScreenStream\r\n          if (host != null && !host?.name?.includes('WhiteboardActive')) {\r\n            if (remoteScreenStream.length == 0) {\r\n              hostStream =\r\n                allVideoStreams.find(\r\n                  (stream: Stream | Participant) => stream.producerId == host?.ScreenID,\r\n                ) ?? null;\r\n            } else {\r\n              hostStream = remoteScreenStream[0];\r\n            }\r\n          }\r\n\r\n          // Update admin on the main screen\r\n          adminOnMainScreen = (host && host.islevel == '2') ?? false;\r\n          updateAdminOnMainScreen(adminOnMainScreen);\r\n\r\n          // Update main screen person\r\n          mainScreenPerson = host?.name ?? '';\r\n          updateMainScreenPerson(mainScreenPerson);\r\n        }\r\n      } else {\r\n        // Screen share not started\r\n        if (eventType == 'conference') {\r\n          // No main grid for conferences\r\n          return;\r\n        }\r\n\r\n        // Find the host with level '2'\r\n        host = participants.find((participant: Participant) => participant.islevel == '2') ?? null;\r\n\r\n        // Update main screen person\r\n        mainScreenPerson = host?.name ?? '';\r\n        updateMainScreenPerson(mainScreenPerson);\r\n      }\r\n\r\n      // If host is not null, check if host videoIsOn\r\n      if (host) {\r\n        // Populate the main screen with the host video\r\n        if (shareScreenStarted || shared) {\r\n          forceFullDisplay = screenForceFullDisplay;\r\n          if (whiteboardStarted && !whiteboardEnded) {\r\n            // Whiteboard is active\r\n          } else {\r\n            newComponents.push({\r\n              component: VideoCard,\r\n              inputs: {\r\n                videoStream: shared ? hostStream : hostStream.stream,\r\n                remoteProducerId: host.ScreenID,\r\n                eventType,\r\n                forceFullDisplay: annotateScreenStream && shared ? false : forceFullDisplay,\r\n                customStyle: {\r\n                  border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n                },\r\n                participant: host,\r\n                backgroundColor: 'rgba(217, 227, 234, 0.99)',\r\n                showControls: false,\r\n                showInfo: true,\r\n                name: host.name,\r\n                doMirror: false,\r\n                parameters,\r\n              },\r\n            });\r\n          }\r\n\r\n          updateMainGridStream(newComponents);\r\n\r\n          mainScreenFilled = true;\r\n          updateMainScreenFilled(mainScreenFilled);\r\n          adminOnMainScreen = host.islevel == '2';\r\n          updateAdminOnMainScreen(adminOnMainScreen);\r\n          mainScreenPerson = host.name ?? '';\r\n          updateMainScreenPerson(mainScreenPerson);\r\n\r\n          return newComponents;\r\n        }\r\n\r\n        // Check if video is already on or not\r\n        if (\r\n          (islevel != '2' && !host['videoOn']) ||\r\n          (islevel == '2' && (!host['videoOn'] || !videoAlreadyOn)) ||\r\n          localUIMode == true\r\n        ) {\r\n          // Video is off\r\n          if (islevel == '2' && videoAlreadyOn) {\r\n            // Admin's video is on\r\n            newComponents.push({\r\n              component: VideoCard,\r\n              inputs: {\r\n                videoStream: keepBackground && virtualStream ? virtualStream : localStreamVideo,\r\n                remoteProducerId: host.videoID,\r\n                eventType,\r\n                forceFullDisplay,\r\n                customStyle: {\r\n                  border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n                },\r\n                participant: host,\r\n                backgroundColor: 'rgba(217, 227, 234, 0.99)',\r\n                showControls: false,\r\n                showInfo: true,\r\n                name: host.name,\r\n                doMirror: true,\r\n                parameters,\r\n              },\r\n            });\r\n            updateMainGridStream(newComponents);\r\n\r\n            mainScreenFilled = true;\r\n            updateMainScreenFilled(mainScreenFilled);\r\n            adminOnMainScreen = true;\r\n            updateAdminOnMainScreen(adminOnMainScreen);\r\n            mainScreenPerson = host.name ?? '';\r\n            updateMainScreenPerson(mainScreenPerson);\r\n          } else {\r\n            // Video is off and not admin\r\n            let audOn;\r\n\r\n            if (islevel == '2' && audioAlreadyOn) {\r\n              audOn = true;\r\n            } else {\r\n              if (host != null && islevel != '2') {\r\n                audOn = host['muted'] == false;\r\n              }\r\n            }\r\n\r\n            if (audOn) {\r\n              // Audio is on\r\n              try {\r\n                newComponents.push({\r\n                  component: AudioCard,\r\n                  inputs: {\r\n                    name: host.name,\r\n                    barColor: 'red',\r\n                    textColor: 'white',\r\n                    customStyle: {\r\n                      backgroundColor: 'transparent',\r\n                      border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n                    },\r\n                    controlsPosition: 'topLeft',\r\n                    infoPosition: 'topRight',\r\n                    showWaveform: true,\r\n                    roundedImage: true,\r\n                    parameters: parameters,\r\n                    showControls: false,\r\n                    backgroundColor: 'transparent',\r\n                  },\r\n                });\r\n\r\n                updateMainGridStream(newComponents);\r\n              } catch (error) {\r\n                // Handle audio card creation error\r\n              }\r\n\r\n              mainScreenFilled = true;\r\n              updateMainScreenFilled(mainScreenFilled);\r\n              adminOnMainScreen = islevel == '2';\r\n              updateAdminOnMainScreen(adminOnMainScreen);\r\n              mainScreenPerson = host.name ?? '';\r\n              updateMainScreenPerson(mainScreenPerson);\r\n            } else {\r\n              // Audio is off\r\n              try {\r\n                newComponents.push({\r\n                  component: MiniCard,\r\n                  inputs: {\r\n                    initials: name,\r\n                    fontSize: 20,\r\n                    customStyle: {\r\n                      backgroundColor: 'transparent',\r\n                      border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n                    },\r\n                  },\r\n                });\r\n                updateMainGridStream(newComponents);\r\n              } catch (error) {\r\n                // Handle mini card creation error\r\n              }\r\n\r\n              mainScreenFilled = false;\r\n              updateMainScreenFilled(mainScreenFilled);\r\n              adminOnMainScreen = islevel == '2';\r\n              updateAdminOnMainScreen(adminOnMainScreen);\r\n              mainScreenPerson = host.name ?? '';\r\n              updateMainScreenPerson(mainScreenPerson);\r\n            }\r\n          }\r\n        } else {\r\n          // Video is on\r\n          if (shareScreenStarted || shared) {\r\n            // Screen share is on\r\n            if (whiteboardStarted && !whiteboardEnded) {\r\n              // Whiteboard is active\r\n            } else {\r\n              try {\r\n                newComponents.push({\r\n                  component: VideoCard,\r\n                  inputs: {\r\n                    videoStream: shared ? hostStream : hostStream.stream,\r\n                    remoteProducerId: host.ScreenID,\r\n                    eventType,\r\n                    forceFullDisplay,\r\n                    customStyle: {\r\n                      border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n                    },\r\n                    participant: host,\r\n                    backgroundColor: 'rgba(217, 227, 234, 0.99)',\r\n                    showControls: false,\r\n                    showInfo: true,\r\n                    name: host.name,\r\n                    doMirror: false,\r\n                    parameters,\r\n                  },\r\n                });\r\n\r\n                updateMainGridStream(newComponents);\r\n\r\n                mainScreenFilled = true;\r\n                updateMainScreenFilled(mainScreenFilled);\r\n                adminOnMainScreen = host.islevel == '2';\r\n                updateAdminOnMainScreen(adminOnMainScreen);\r\n                mainScreenPerson = host.name ?? '';\r\n                updateMainScreenPerson(mainScreenPerson);\r\n              } catch (error) {\r\n                // Handle video card creation error\r\n              }\r\n            }\r\n          } else {\r\n            // Screen share is off\r\n            let streame;\r\n            if (islevel == '2') {\r\n              host['stream'] = keepBackground && virtualStream ? virtualStream : localStreamVideo;\r\n            } else {\r\n              streame = oldAllStreams.find(\r\n                (streame: Stream | Participant) => streame.producerId == host.videoID,\r\n              );\r\n              host['stream'] = streame && streame.stream;\r\n            }\r\n\r\n            try {\r\n              if (host['stream']) {\r\n                newComponents.push({\r\n                  component: VideoCard,\r\n                  inputs: {\r\n                    videoStream: host['stream'],\r\n                    remoteProducerId: host.videoID,\r\n                    eventType,\r\n                    forceFullDisplay,\r\n                    customStyle: {\r\n                      border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n                    },\r\n                    participant: host,\r\n                    backgroundColor: 'rgba(217, 227, 234, 0.99)',\r\n                    showControls: false,\r\n                    showInfo: true,\r\n                    name: host.name,\r\n                    doMirror: member == host.name,\r\n                    parameters,\r\n                  },\r\n                });\r\n\r\n                updateMainGridStream(newComponents);\r\n\r\n                mainScreenFilled = true;\r\n                adminOnMainScreen = host.islevel == '2';\r\n                mainScreenPerson = host.name ?? '';\r\n              } else {\r\n                newComponents.push({\r\n                  component: MiniCard,\r\n                  inputs: {\r\n                    initials: name,\r\n                    fontSize: 20,\r\n                    customStyle: {\r\n                      backgroundColor: 'transparent',\r\n                      border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n                    },\r\n                  },\r\n                });\r\n\r\n                updateMainGridStream(newComponents);\r\n                mainScreenFilled = false;\r\n                adminOnMainScreen = islevel == '2';\r\n                mainScreenPerson = host.name ?? '';\r\n              }\r\n\r\n              updateMainScreenFilled(mainScreenFilled);\r\n\r\n              updateAdminOnMainScreen(adminOnMainScreen);\r\n\r\n              updateMainScreenPerson(mainScreenPerson);\r\n            } catch (error) {\r\n              // Handle video card creation error\r\n            }\r\n          }\r\n        }\r\n      } else {\r\n        // Host is null, add a mini card\r\n        try {\r\n          newComponents.push({\r\n            component: MiniCard,\r\n            inputs: {\r\n              initials: name,\r\n              fontSize: 20,\r\n              customStyle: {\r\n                backgroundColor: 'transparent',\r\n                border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',\r\n              },\r\n            },\r\n          });\r\n\r\n          updateMainGridStream(newComponents);\r\n\r\n          mainScreenFilled = false;\r\n          adminOnMainScreen = false;\r\n          mainScreenPerson = '';\r\n          updateMainScreenFilled(mainScreenFilled);\r\n          updateAdminOnMainScreen(adminOnMainScreen);\r\n          updateMainScreenPerson(mainScreenPerson);\r\n        } catch (error) {\r\n          // Handle mini card creation error\r\n        }\r\n      }\r\n\r\n      updateMainWindow = false;\r\n      updateUpdateMainWindow(updateMainWindow);\r\n\r\n      return newComponents;\r\n    } catch (error: any) {\r\n      // Handle errors during the process of preparing and populating the main screen\r\n      console.log('Error preparing and populating the main screen:', error.message);\r\n      return [];\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Stream, Participant, Transport, SleepType } from '../@types/types';\r\n\r\nexport interface ProcessConsumerTransportsParameters {\r\n  remoteScreenStream: Stream[];\r\n  oldAllStreams: (Stream | Participant)[];\r\n  newLimitedStreams: (Stream | Participant)[];\r\n\r\n  // mediasfu functions\r\n  sleep: SleepType;\r\n  getUpdatedAllParams: () => ProcessConsumerTransportsParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ProcessConsumerTransportsOptions {\r\n  consumerTransports: Transport[];\r\n  lStreams_: (Stream | Participant)[];\r\n  parameters: ProcessConsumerTransportsParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ProcessConsumerTransportsType = (\r\n  options: ProcessConsumerTransportsOptions,\r\n) => Promise<void>;\r\n\r\n/**\r\n * Processes consumer transports by pausing and resuming them based on certain conditions.\r\n *\r\n * This method checks the state of each consumer transport and determines whether to pause or resume\r\n * based on the validity of the producer ID in relation to the provided streams.\r\n * It utilizes a sleep function to introduce a delay before pausing the transports.\r\n *\r\n * @param {ProcessConsumerTransportsOptions} options - The options for processing consumer transports.\r\n * @param {Array<Transport>} options.consumerTransports - The list of consumer transports to process.\r\n * @param {Array<Stream | Participant>} options.lStreams_ - The list of local streams.\r\n * @param {ProcessConsumerTransportsParameters} options.parameters - The parameters for processing, including:\r\n *   - {Array<Stream>} options.parameters.remoteScreenStream - The list of remote screen streams.\r\n *   - {Array<Stream | Participant>} options.parameters.oldAllStreams - The list of old streams.\r\n *   - {Array<Stream | Participant>} options.parameters.newLimitedStreams - The list of new limited streams.\r\n *   - {Function} options.parameters.sleep - A function to pause execution for a specified duration.\r\n *   - {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the processing is complete.\r\n *\r\n * @throws {Error} Will throw an error if there is an issue processing consumer transports.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   consumerTransports: [],\r\n *   lStreams_: [],\r\n *   parameters: {\r\n *     remoteScreenStream: [],\r\n *     oldAllStreams: [],\r\n *     newLimitedStreams: [],\r\n *     sleep: async ({ ms }) => new Promise(resolve => setTimeout(resolve, ms)),\r\n *   },\r\n * };\r\n *\r\n * await processConsumerTransports(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ProcessConsumerTransports {\r\n  /**\r\n   * Processes consumer transports by pausing and resuming them based on certain conditions.\r\n   *\r\n   * @param {Object} options - The options for processing consumer transports.\r\n   * @param {Array} options.consumerTransports - The list of consumer transports to process.\r\n   * @param {Array} options.lStreams_ - The list of local streams.\r\n   * @param {Object} options.parameters - The parameters object containing various stream arrays and utility functions.\r\n   *\r\n   * @returns {Promise<void>} - A promise that resolves when the processing is complete.\r\n   *\r\n   * @throws {Error} - Throws an error if there is an issue processing consumer transports.\r\n   *\r\n   * The function performs the following steps:\r\n   * 1. Destructures and updates the parameters.\r\n   * 2. Defines a helper function to check if a producerId is valid in given stream arrays.\r\n   * 3. Filters consumer transports to resume based on certain conditions.\r\n   * 4. Filters consumer transports to pause based on certain conditions.\r\n   * 5. Pauses consumer transports after a short delay.\r\n   * 6. Emits `consumer-pause` event for each filtered transport (not audio).\r\n   * 7. Emits `consumer-resume` event for each filtered transport (not audio).\r\n   */\r\n  processConsumerTransports = async ({\r\n    consumerTransports,\r\n    lStreams_,\r\n    parameters,\r\n  }: ProcessConsumerTransportsOptions): Promise<void> => {\r\n    try {\r\n      // Destructure parameters\r\n      let { getUpdatedAllParams } = parameters;\r\n      parameters = getUpdatedAllParams();\r\n\r\n      const {\r\n        remoteScreenStream,\r\n        oldAllStreams,\r\n        newLimitedStreams,\r\n        // mediasfu functions\r\n        sleep,\r\n      } = parameters;\r\n\r\n      // Function to check if the producerId is valid in the given stream arrays\r\n      const isValidProducerId = (\r\n        producerId: string,\r\n        ...streamArrays: (Stream | Participant)[][]\r\n      ): boolean => {\r\n        return (\r\n          producerId !== null &&\r\n          producerId !== '' &&\r\n          streamArrays.some((streamArray) => {\r\n            return (\r\n              streamArray.length > 0 &&\r\n              streamArray.some((stream) => stream?.producerId === producerId)\r\n            );\r\n          })\r\n        );\r\n      };\r\n\r\n      // Get paused consumer transports that are not audio\r\n      const consumerTransportsToResume = consumerTransports.filter(\r\n        (transport) =>\r\n          isValidProducerId(\r\n            transport.producerId,\r\n            lStreams_,\r\n            remoteScreenStream,\r\n            oldAllStreams,\r\n            newLimitedStreams,\r\n          ) &&\r\n          transport.consumer?.paused === true &&\r\n          transport.consumer.kind !== 'audio',\r\n      );\r\n\r\n      // Get unpaused consumer transports that are not audio\r\n      const consumerTransportsToPause = consumerTransports.filter(\r\n        (transport) =>\r\n          transport.producerId &&\r\n          transport.producerId !== null &&\r\n          transport.producerId !== '' &&\r\n          !lStreams_.some((stream) => stream.producerId === transport.producerId) &&\r\n          transport.consumer &&\r\n          transport.consumer.kind &&\r\n          transport.consumer.paused !== true &&\r\n          transport.consumer.kind !== 'audio' &&\r\n          !remoteScreenStream.some((stream: any) => stream.producerId === transport.producerId) &&\r\n          !oldAllStreams.some((stream: any) => stream.producerId === transport.producerId) &&\r\n          !newLimitedStreams.some((stream: any) => stream.producerId === transport.producerId),\r\n      );\r\n\r\n      // Pause consumer transports after a short delay\r\n      await sleep({ ms: 100 });\r\n\r\n      // Emit consumer.pause() for each filtered transport (not audio)\r\n      for (const transport of consumerTransportsToPause) {\r\n        transport.consumer.pause();\r\n        transport.socket_.emit(\r\n          'consumer-pause',\r\n          { serverConsumerId: transport.serverConsumerTransportId },\r\n          async () => {\r\n            // Handle the response if needed\r\n          },\r\n        );\r\n      }\r\n\r\n      // Emit consumer.resume() for each filtered transport (not audio)\r\n      for (const transport of consumerTransportsToResume) {\r\n        transport.socket_.emit(\r\n          'consumer-resume',\r\n          { serverConsumerId: transport.serverConsumerTransportId },\r\n          async ({ resumed }: { resumed: boolean }) => {\r\n            if (resumed) {\r\n              transport.consumer.resume();\r\n            }\r\n          },\r\n        );\r\n      }\r\n    } catch (error: any) {\r\n      // Handle errors during the process of pausing or resuming consumer transports\r\n      console.log(`Error processing consumer transports: ${error.message}`);\r\n      // throw new Error(`Error processing consumer transports: ${error.message}`);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Stream, Transport, Participant, SleepType } from '../@types/types';\r\n\r\nexport interface ProcessConsumerTransportsAudioParameters {\r\n  // mediasfu functions\r\n  sleep: SleepType;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ProcessConsumerTransportsAudioOptions {\r\n  consumerTransports: Transport[];\r\n  lStreams: (Stream | Participant)[];\r\n  parameters: ProcessConsumerTransportsAudioParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ProcessConsumerTransportsAudioType = (\r\n  options: ProcessConsumerTransportsAudioOptions,\r\n) => Promise<void>;\r\n\r\n/**\r\n * Processes consumer transports for audio streams by pausing and resuming them based on their current state and the provided streams.\r\n *\r\n * This method checks the state of each audio consumer transport and either pauses or resumes it depending on the presence of its producer ID in the provided list of streams.\r\n * It uses a sleep function to introduce a delay between the pause and resume operations to ensure smooth transitions.\r\n *\r\n * @param {ProcessConsumerTransportsAudioOptions} options - The options for processing consumer transports.\r\n * @param {Array<Transport>} options.consumerTransports - The list of consumer transports to process.\r\n * @param {Array<(Stream | Participant)>} options.lStreams - The list of local streams to check against.\r\n * @param {ProcessConsumerTransportsAudioParameters} options.parameters - Additional parameters for processing.\r\n * @param {Function} options.parameters.sleep - A function to pause execution for a specified duration.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the processing is complete.\r\n *\r\n * @throws {Error} Will throw an error if there is an issue processing the consumer transports.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   consumerTransports: [,\r\n *   lStreams: [],\r\n *   parameters: {\r\n *     sleep: async ({ ms }) => new Promise(resolve => setTimeout(resolve, ms)),\r\n *   },\r\n * };\r\n *\r\n * await processConsumerTransportsAudio(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ProcessConsumerTransportsAudio {\r\n  /**\r\n   * Processes consumer transports for audio streams by pausing and resuming them based on their current state and the provided streams.\r\n   *\r\n   * @param {Object} options - The options for processing consumer transports.\r\n   * @param {Array} options.consumerTransports - The list of consumer transports to process.\r\n   * @param {Array} options.lStreams - The list of local streams to check against.\r\n   * @param {Object} options.parameters - Additional parameters for processing.\r\n   * @param {Function} options.parameters.sleep - A function to pause execution for a specified duration.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the processing is complete.\r\n   *\r\n   * @throws Will throw an error if there is an issue processing the consumer transports.\r\n   */\r\n  processConsumerTransportsAudio = async ({\r\n    consumerTransports,\r\n    lStreams,\r\n    parameters,\r\n  }: ProcessConsumerTransportsAudioOptions): Promise<void> => {\r\n    try {\r\n      const { sleep } = parameters;\r\n\r\n      // Function to check if the producerId is valid\r\n      const isValidProducerId = (\r\n        producerId: string,\r\n        ...streamArrays: (Stream | Participant)[][]\r\n      ): boolean => {\r\n        return (\r\n          producerId !== null &&\r\n          producerId !== '' &&\r\n          streamArrays.some((streamArray) => {\r\n            return (\r\n              streamArray.length > 0 &&\r\n              streamArray.some((stream) => stream?.producerId === producerId)\r\n            );\r\n          })\r\n        );\r\n      };\r\n\r\n      // Get paused consumer transports that are audio\r\n      const consumerTransportsToResume = consumerTransports.filter(\r\n        (transport) =>\r\n          isValidProducerId(transport.producerId, lStreams) &&\r\n          transport.consumer?.paused === true &&\r\n          transport.consumer.kind === 'audio',\r\n      );\r\n\r\n      // Get unpaused consumer transports that are audio\r\n      const consumerTransportsToPause = consumerTransports.filter(\r\n        (transport) =>\r\n          transport.producerId &&\r\n          transport.producerId !== null &&\r\n          transport.producerId !== '' &&\r\n          !lStreams.some((stream) => stream.producerId === transport.producerId) &&\r\n          transport.consumer &&\r\n          transport.consumer.kind &&\r\n          transport.consumer.paused !== true &&\r\n          transport.consumer.kind === 'audio',\r\n      );\r\n\r\n      await sleep({ ms: 100 });\r\n\r\n      // Emit consumer.pause() for each transport to pause\r\n      for (const transport of consumerTransportsToPause) {\r\n        transport.consumer.pause();\r\n        transport.socket_.emit(\r\n          'consumer-pause',\r\n          { serverConsumerId: transport.serverConsumerTransportId },\r\n          async () => {\r\n            // Do something after the consumer is paused\r\n          },\r\n        );\r\n      }\r\n\r\n      // Emit consumer.resume() for each transport to resume\r\n      for (const transport of consumerTransportsToResume) {\r\n        transport.socket_.emit(\r\n          'consumer-resume',\r\n          { serverConsumerId: transport.serverConsumerTransportId },\r\n          async ({ resumed }: { resumed: boolean }) => {\r\n            if (resumed) {\r\n              transport.consumer.resume();\r\n            }\r\n          },\r\n        );\r\n      }\r\n    } catch (error: any) {\r\n      console.log(`Error in processConsumerTransportsAudio: ${error.message}`);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  PrepopulateUserMediaType,\r\n  PrepopulateUserMediaParameters,\r\n  EventType,\r\n} from '../@types/types';\r\nexport interface ReadjustParameters extends PrepopulateUserMediaParameters {\r\n  eventType: EventType;\r\n  shareScreenStarted: boolean;\r\n  shared: boolean;\r\n  mainHeightWidth: number;\r\n  prevMainHeightWidth: number;\r\n  hostLabel: string;\r\n  first_round: boolean;\r\n  lock_screen: boolean;\r\n  updateMainHeightWidth: (value: number) => void;\r\n\r\n  // mediasfu functions\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n  getUpdatedAllParams: () => ReadjustParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ReadjustOptions {\r\n  n: number;\r\n  state: number;\r\n  parameters: ReadjustParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ReadjustType = (options: ReadjustOptions) => Promise<void>;\r\n\r\n/**\r\n * Adjusts the layout parameters based on the provided options.\r\n *\r\n * This method calculates the layout dimensions and updates the main window size based on the current event type,\r\n * the number of participants, and whether screen sharing is active. It also manages the state transitions\r\n * to ensure that the UI reflects the correct configuration based on user interactions.\r\n *\r\n * @param {ReadjustOptions} options - The options for readjusting the layout.\r\n * @param {number} options.n - The number of participants or elements.\r\n * @param {number} options.state - The current state of the layout.\r\n * @param {Object} options.parameters - The parameters for the layout adjustment.\r\n * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n * @param {string} options.parameters.eventType - The type of event (e.g., \"broadcast\", \"chat\", \"conference\").\r\n * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.\r\n * @param {boolean} options.parameters.shared - Indicates if content is being shared.\r\n * @param {number} options.parameters.mainHeightWidth - The main height and width value.\r\n * @param {number} options.parameters.prevMainHeightWidth - The previous main height and width value.\r\n * @param {string} options.parameters.hostLabel - The label for the host.\r\n * @param {boolean} options.parameters.first_round - Indicates if it is the first round.\r\n * @param {boolean} options.parameters.lock_screen - Indicates if the screen is locked.\r\n * @param {Function} options.parameters.updateMainHeightWidth - Function to update the main height and width.\r\n * @param {Function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the layout adjustment is complete.\r\n *\r\n * @throws {Error} Throws an error if there is an issue updating the grid sizes.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   n: 5,\r\n *   state: 0,\r\n *   parameters: {\r\n *     getUpdatedAllParams: () => updatedParams,\r\n *     eventType: 'conference',\r\n *     shareScreenStarted: false,\r\n *     shared: false,\r\n *     mainHeightWidth: 100,\r\n *     prevMainHeightWidth: 100,\r\n *     hostLabel: 'Host Name',\r\n *     first_round: false,\r\n *     lock_screen: false,\r\n *     updateMainHeightWidth: (value) => { console.log(updated) },\r\n *     prepopulateUserMedia: async ({ name, parameters }) => {  },\r\n *   },\r\n * };\r\n *\r\n * await readjust(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Readjust {\r\n  /**\r\n   * Adjusts the layout parameters based on the provided options.\r\n   *\r\n   * @param {ReadjustOptions} options - The options for readjusting the layout.\r\n   * @param {number} options.n - The number of participants or elements.\r\n   * @param {number} options.state - The current state of the layout.\r\n   * @param {object} options.parameters - The parameters for the layout adjustment.\r\n   * @param {function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {string} options.parameters.eventType - The type of event (e.g., \"broadcast\", \"chat\", \"conference\").\r\n   * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.\r\n   * @param {boolean} options.parameters.shared - Indicates if content is being shared.\r\n   * @param {number} options.parameters.mainHeightWidth - The main height and width value.\r\n   * @param {number} options.parameters.prevMainHeightWidth - The previous main height and width value.\r\n   * @param {string} options.parameters.hostLabel - The label for the host.\r\n   * @param {boolean} options.parameters.first_round - Indicates if it is the first round.\r\n   * @param {boolean} options.parameters.lock_screen - Indicates if the screen is locked.\r\n   * @param {function} options.parameters.updateMainHeightWidth - Function to update the main height and width.\r\n   * @param {function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\r\n   * @returns {Promise<void>} A promise that resolves when the layout adjustment is complete.\r\n   * @throws {Error} Throws an error if there is an issue updating the grid sizes.\r\n   */\r\n  readjust = async ({ n, state, parameters }: ReadjustOptions): Promise<void> => {\r\n    let { getUpdatedAllParams, prepopulateUserMedia } = parameters;\r\n    parameters = getUpdatedAllParams();\r\n\r\n    try {\r\n      // Destructure parameters\r\n      let {\r\n        eventType,\r\n        shareScreenStarted,\r\n        shared,\r\n        mainHeightWidth,\r\n        prevMainHeightWidth,\r\n        hostLabel,\r\n        first_round,\r\n        lock_screen,\r\n        updateMainHeightWidth,\r\n      } = parameters;\r\n\r\n      if (state == 0) {\r\n        prevMainHeightWidth = mainHeightWidth;\r\n      }\r\n\r\n      let val1 = 6;\r\n      let val2 = 12 - val1;\r\n      let cal1 = Math.floor((val1 / 12) * 100);\r\n      let cal2 = 100 - cal1;\r\n\r\n      if (eventType == 'broadcast') {\r\n        val1 = 0;\r\n        val2 = 12 - val1;\r\n\r\n        if (n == 0) {\r\n          val1 = 0;\r\n          val2 = 12 - val1;\r\n        }\r\n      } else if (\r\n        eventType == 'chat' ||\r\n        (eventType == 'conference' && !(shareScreenStarted || shared))\r\n      ) {\r\n        val1 = 12;\r\n        val2 = 12 - val1;\r\n      } else {\r\n        if (shareScreenStarted || shared) {\r\n          val2 = 10;\r\n          val1 = 12 - val2;\r\n        } else {\r\n          if (n == 0) {\r\n            val1 = 1;\r\n            val2 = 12 - val1;\r\n          } else if (n >= 1 && n < 4) {\r\n            val1 = 4;\r\n            val2 = 12 - val1;\r\n          } else if (n >= 4 && n < 6) {\r\n            val1 = 6;\r\n            val2 = 12 - val1;\r\n          } else if (n >= 6 && n < 9) {\r\n            val1 = 6;\r\n            val2 = 12 - val1;\r\n          } else if (n >= 9 && n < 12) {\r\n            val1 = 6;\r\n            val2 = 12 - val1;\r\n          } else if (n >= 12 && n < 20) {\r\n            val1 = 8;\r\n            val2 = 12 - val1;\r\n          } else if (n >= 20 && n < 50) {\r\n            val1 = 8;\r\n            val2 = 12 - val1;\r\n          } else {\r\n            val1 = 10;\r\n            val2 = 12 - val1;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (state == 0) {\r\n        mainHeightWidth = val2;\r\n      }\r\n\r\n      cal1 = Math.floor((val1 / 12) * 100);\r\n      cal2 = 100 - cal1;\r\n\r\n      updateMainHeightWidth(cal2);\r\n\r\n      if (prevMainHeightWidth != mainHeightWidth) {\r\n        if (!lock_screen && !shared) {\r\n          await prepopulateUserMedia({ name: hostLabel, parameters });\r\n        } else {\r\n          if (!first_round) {\r\n            await prepopulateUserMedia({ name: hostLabel, parameters });\r\n          }\r\n        }\r\n      }\r\n    } catch (error: any) {\r\n      // Handle errors during the process of updating grid sizes\r\n      console.log('Error updating grid sizes:', error.message);\r\n      // throw error;\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { GetPipedProducersAltType, GetPipedProducersAltParameters } from '../@types/types';\r\n\r\nexport interface ReceiveAllPipedTransportsParameters extends GetPipedProducersAltParameters {\r\n  roomName: string;\r\n  member: string;\r\n\r\n  // mediasfu functions\r\n  getPipedProducersAlt: GetPipedProducersAltType;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ReceiveAllPipedTransportsOptions {\r\n  nsock: Socket;\r\n  community?: boolean;\r\n  parameters: ReceiveAllPipedTransportsParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ReceiveAllPipedTransportsType = (\r\n  options: ReceiveAllPipedTransportsOptions,\r\n) => Promise<void>;\r\n\r\n/**\r\n * Receives all piped transports by emitting an event to the server and processing the response.\r\n *\r\n * This method communicates with the server to request piped transports for a specific room and member.\r\n * It checks if any producers exist and, if so, iterates through different levels to retrieve piped producers.\r\n *\r\n * @param {ReceiveAllPipedTransportsOptions} options - The options for receiving all piped transports.\r\n * @param {Socket} options.nsock - The socket instance used for communication.\r\n * @param {boolean} options.community - Whether the room is a community edition room.\r\n * @param {ReceiveAllPipedTransportsParameters} options.parameters - The parameters for the operation.\r\n * @param {string} options.parameters.roomName - The name of the room.\r\n * @param {string} options.parameters.member - The member identifier.\r\n * @param {GetPipedProducersAltType} options.parameters.getPipedProducersAlt - The function to get piped producers for a given level.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n *\r\n * @throws Will log an error message if the operation fails.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   nsock: socketInstance,\r\n *   community: true,\r\n *   parameters: {\r\n *     roomName: 'Room1',\r\n *     member: 'Member1',\r\n *     getPipedProducersAlt: getPipedProducersAltFunction,\r\n *   },\r\n * };\r\n *\r\n * await receiveAllPipedTransports(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ReceiveAllPipedTransports {\r\n  /**\r\n   * Receives all piped transports by emitting an event to the server and processing the response.\r\n   *\r\n   * @param {ReceiveAllPipedTransportsOptions} options - The options for receiving all piped transports.\r\n   * @param {any} options.nsock - The socket instance used for communication.\r\n   * @param {boolean} options.community - Whether the room is a community edition room.\r\n   * @param {Object} options.parameters - The parameters for the operation.\r\n   * @param {string} options.parameters.roomName - The name of the room.\r\n   * @param {string} options.parameters.member - The member identifier.\r\n   * @param {Function} options.parameters.getPipedProducersAlt - The function to get piped producers for a given level.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n   *\r\n   * @throws Will log an error message if the operation fails.\r\n   */\r\n  receiveAllPipedTransports = async ({\r\n    nsock,\r\n    community = false,\r\n    parameters,\r\n  }: ReceiveAllPipedTransportsOptions): Promise<void> => {\r\n    try {\r\n      // Destructure parameters\r\n      const { roomName, member, getPipedProducersAlt } = parameters;\r\n      const emitName = community ? \"createReceiveAllTransports\" : \"createReceiveAllTransportsPiped\";\r\n      const emitData = community ? { islevel:'0' } : { roomName, member };\r\n\r\n      // Emit createReceiveAllTransportsPiped event to the server\r\n      await new Promise<void>((resolve, reject) => {\r\n        nsock.emit(\r\n          emitName,\r\n          emitData,\r\n          async ({ producersExist }: { producersExist: boolean }) => {\r\n            try {\r\n              // Array of options representing different levels\r\n              const options = ['0', '1', '2'];\r\n\r\n              // If producers exist, loop through each level and get producers\r\n              if (producersExist) {\r\n                for (const islevel of options) {\r\n                  await getPipedProducersAlt({ nsock, community, islevel, parameters });\r\n                }\r\n              }\r\n              resolve();\r\n            } catch (err) {\r\n              reject(err);\r\n            }\r\n          },\r\n        );\r\n      });\r\n    } catch (error) {\r\n      console.log('receiveAllPipedTransports error', error);\r\n      // throw error;\r\n    }\r\n  };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\nimport { Injectable } from '@angular/core';\r\nimport { Participant, Stream, ChangeVidsParameters, ChangeVidsType } from '../@types/types';\r\n\r\nexport interface ReorderStreamsParameters extends ChangeVidsParameters {\r\n  allVideoStreams: (Stream | Participant)[];\r\n  participants: Participant[];\r\n  oldAllStreams: (Stream | Participant)[];\r\n  screenId?: string;\r\n  adminVidID?: string;\r\n  newLimitedStreams: (Stream | Participant)[];\r\n  newLimitedStreamsIDs: string[];\r\n  activeSounds: string[];\r\n  screenShareIDStream?: string;\r\n  screenShareNameStream?: string;\r\n  adminIDStream?: string;\r\n  adminNameStream?: string;\r\n  updateNewLimitedStreams: (streams: (Stream | Participant)[]) => void;\r\n  updateNewLimitedStreamsIDs: (ids: string[]) => void;\r\n  updateActiveSounds: (sounds: string[]) => void;\r\n  updateScreenShareIDStream: (id: string) => void;\r\n  updateScreenShareNameStream: (name: string) => void;\r\n  updateAdminIDStream: (id: string) => void;\r\n  updateAdminNameStream: (name: string) => void;\r\n  updateYouYouStream: (streams: (Stream | Participant)[]) => void;\r\n\r\n  // mediasfu functions\r\n  changeVids: ChangeVidsType;\r\n  getUpdatedAllParams: () => ReorderStreamsParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ReorderStreamsOptions {\r\n  add?: boolean;\r\n  screenChanged?: boolean;\r\n  parameters: ReorderStreamsParameters;\r\n}\r\n\r\nexport type ReorderStreamsType = (options: ReorderStreamsOptions) => Promise<void>;\r\n\r\n/**\r\n * Reorders the video streams based on the provided options and updates the UI accordingly.\r\n *\r\n * This method handles the logic for reordering streams in a video conferencing application,\r\n * managing the addition and arrangement of streams based on various conditions such as\r\n * participant roles, screen sharing status, and current streams.\r\n *\r\n * @param {ReorderStreamsOptions} options - The options for reordering streams.\r\n * @param {boolean} [options.add=false] - Whether to add new streams or not.\r\n * @param {boolean} [options.screenChanged=false] - Whether the screen has changed or not.\r\n * @param {ReorderStreamsParameters} options.parameters - The parameters required for reordering streams.\r\n * @param {Array<Stream | Participant>} options.parameters.allVideoStreams - Array of all video streams.\r\n * @param {Array<Participant>} options.parameters.participants - Array of participants.\r\n * @param {Array<Stream | Participant>} options.parameters.oldAllStreams - Array of old streams.\r\n * @param {string} [options.parameters.screenId] - ID of the screen.\r\n * @param {string} [options.parameters.adminVidID] - ID of the admin video.\r\n * @param {Array<Stream | Participant>} options.parameters.newLimitedStreams - Array of new limited streams.\r\n * @param {Array<string>} options.parameters.newLimitedStreamsIDs - Array of new limited stream IDs.\r\n * @param {Array<string>} options.parameters.activeSounds - Array of active sounds.\r\n * @param {string} [options.parameters.screenShareIDStream] - ID of the screen share stream.\r\n * @param {string} [options.parameters.screenShareNameStream] - Name of the screen share stream.\r\n * @param {string} [options.parameters.adminIDStream] - ID of the admin stream.\r\n * @param {string} [options.parameters.adminNameStream] - Name of the admin stream.\r\n * @param {Function} options.parameters.updateNewLimitedStreams - Function to update new limited streams.\r\n * @param {Function} options.parameters.updateNewLimitedStreamsIDs - Function to update new limited stream IDs.\r\n * @param {Function} options.parameters.updateActiveSounds - Function to update active sounds.\r\n * @param {Function} options.parameters.updateScreenShareIDStream - Function to update screen share ID stream.\r\n * @param {Function} options.parameters.updateScreenShareNameStream - Function to update screen share name stream.\r\n * @param {Function} options.parameters.updateAdminIDStream - Function to update admin ID stream.\r\n * @param {Function} options.parameters.updateAdminNameStream - Function to update admin name stream.\r\n * @param {Function} options.parameters.updateYouYouStream - Function to update YouYou stream.\r\n * @param {Function} options.parameters.changeVids - Function to reflect changes on the UI.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the reordering is complete.\r\n *\r\n * @throws Will throw an error if there is an issue during the reordering process.\r\n *\r\n * @example\r\n * ```typescript\r\n * await reorderStreams({\r\n *   add: true,\r\n *   screenChanged: false,\r\n *   parameters: {\r\n *     allVideoStreams: [...],\r\n *     participants: [...],\r\n *     oldAllStreams: [...],\r\n *     newLimitedStreams: [],\r\n *     newLimitedStreamsIDs: [],\r\n *     activeSounds: [],\r\n *     updateNewLimitedStreams: (streams) => { console.log(updated) },\r\n *     updateNewLimitedStreamsIDs: (ids) => { console.log(updated) },\r\n *     updateActiveSounds: (sounds) => { console.log(updated) },\r\n *     changeVids: async (options) => { },\r\n *     // ...other parameters\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ReorderStreams {\r\n  /**\r\n   * Reorders the video streams based on the provided options and updates the UI accordingly.\r\n   *\r\n   * @param {Object} options - The options for reordering streams.\r\n   * @param {boolean} [options.add=false] - Whether to add new streams or not.\r\n   * @param {boolean} [options.screenChanged=false] - Whether the screen has changed or not.\r\n   * @param {ReorderStreamsOptions} options.parameters - The parameters required for reordering streams.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the reordering is complete.\r\n   *\r\n   * @typedef {Object} ReorderStreamsOptions\r\n   * @property {Function} getUpdatedAllParams - Function to get updated parameters.\r\n   * @property {Array} allVideoStreams - Array of all video streams.\r\n   * @property {Array} participants - Array of participants.\r\n   * @property {Array} oldAllStreams - Array of old streams.\r\n   * @property {string} screenId - ID of the screen.\r\n   * @property {string} adminVidID - ID of the admin video.\r\n   * @property {Array} newLimitedStreams - Array of new limited streams.\r\n   * @property {Array} newLimitedStreamsIDs - Array of new limited stream IDs.\r\n   * @property {Array} activeSounds - Array of active sounds.\r\n   * @property {string} screenShareIDStream - ID of the screen share stream.\r\n   * @property {string} screenShareNameStream - Name of the screen share stream.\r\n   * @property {string} adminIDStream - ID of the admin stream.\r\n   * @property {string} adminNameStream - Name of the admin stream.\r\n   * @property {Function} updateNewLimitedStreams - Function to update new limited streams.\r\n   * @property {Function} updateNewLimitedStreamsIDs - Function to update new limited stream IDs.\r\n   * @property {Function} updateActiveSounds - Function to update active sounds.\r\n   * @property {Function} updateScreenShareIDStream - Function to update screen share ID stream.\r\n   * @property {Function} updateScreenShareNameStream - Function to update screen share name stream.\r\n   * @property {Function} updateAdminIDStream - Function to update admin ID stream.\r\n   * @property {Function} updateAdminNameStream - Function to update admin name stream.\r\n   * @property {Function} updateYouYouStream - Function to update YouYou stream.\r\n   * @property {Function} changeVids - Function to reflect changes on the UI.\r\n   */\r\n\r\n  reorderStreams = async ({\r\n    add = false,\r\n    screenChanged = false,\r\n    parameters,\r\n  }: ReorderStreamsOptions): Promise<void> => {\r\n    let { getUpdatedAllParams } = parameters;\r\n    parameters = getUpdatedAllParams();\r\n\r\n    let {\r\n      allVideoStreams,\r\n      participants,\r\n      oldAllStreams,\r\n      screenId,\r\n      adminVidID,\r\n      newLimitedStreams,\r\n      newLimitedStreamsIDs,\r\n      activeSounds,\r\n      screenShareIDStream,\r\n      screenShareNameStream,\r\n      adminIDStream,\r\n      adminNameStream,\r\n      updateNewLimitedStreams,\r\n      updateNewLimitedStreamsIDs,\r\n      updateActiveSounds,\r\n      updateScreenShareIDStream,\r\n      updateScreenShareNameStream,\r\n      updateAdminIDStream,\r\n      updateAdminNameStream,\r\n      updateYouYouStream,\r\n\r\n      //mediasfu functions\r\n      changeVids,\r\n    } = parameters;\r\n\r\n    // function to reorder streams on the ui\r\n    if (!add) {\r\n      newLimitedStreams = [];\r\n      newLimitedStreamsIDs = [];\r\n      activeSounds = [];\r\n    }\r\n\r\n    const youyou = allVideoStreams.filter((stream) => stream.producerId === 'youyou');\r\n    const admin = participants.filter((participant) => participant.islevel === '2');\r\n\r\n    if (admin.length > 0) {\r\n      adminVidID = admin[0].videoID;\r\n    } else {\r\n      adminVidID = '';\r\n    }\r\n\r\n    if (adminVidID) {\r\n      const adminStream = allVideoStreams.find((stream) => stream.producerId === adminVidID);\r\n\r\n      if (!add) {\r\n        newLimitedStreams = [...newLimitedStreams, ...youyou];\r\n        newLimitedStreamsIDs = [\r\n          ...newLimitedStreamsIDs,\r\n          ...youyou.map((stream) => stream.producerId),\r\n        ];\r\n      } else {\r\n        const youyouStream = newLimitedStreams.find((stream) => stream.producerId === 'youyou');\r\n\r\n        if (!youyouStream) {\r\n          newLimitedStreams = [...newLimitedStreams, ...youyou];\r\n          newLimitedStreamsIDs = [\r\n            ...newLimitedStreamsIDs,\r\n            ...youyou.map((stream) => stream.producerId),\r\n          ];\r\n        }\r\n      }\r\n\r\n      if (adminStream) {\r\n        adminIDStream = adminVidID;\r\n\r\n        if (!add) {\r\n          newLimitedStreams = [...newLimitedStreams, adminStream];\r\n          newLimitedStreamsIDs = [...newLimitedStreamsIDs, adminStream.producerId];\r\n        } else {\r\n          const adminStreamer = newLimitedStreams.find(\r\n            (stream) => stream.producerId === adminVidID,\r\n          );\r\n\r\n          if (!adminStreamer) {\r\n            newLimitedStreams = [...newLimitedStreams, adminStream];\r\n            newLimitedStreamsIDs = [...newLimitedStreamsIDs, adminStream.producerId];\r\n          }\r\n        }\r\n      } else {\r\n        const oldAdminStream = oldAllStreams.find((stream) => stream.producerId === adminVidID);\r\n\r\n        if (oldAdminStream) {\r\n          //add it to the allVideoStream\r\n\r\n          adminIDStream = adminVidID;\r\n          adminNameStream = admin[0].name;\r\n\r\n          if (!add) {\r\n            newLimitedStreams = [...newLimitedStreams, oldAdminStream];\r\n            newLimitedStreamsIDs = [...newLimitedStreamsIDs, oldAdminStream.producerId];\r\n          } else {\r\n            const adminStreamer = newLimitedStreams.find(\r\n              (stream) => stream.producerId === adminVidID,\r\n            );\r\n\r\n            if (!adminStreamer) {\r\n              newLimitedStreams = [...newLimitedStreams, oldAdminStream];\r\n              newLimitedStreamsIDs = [...newLimitedStreamsIDs, oldAdminStream.producerId];\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      const screenParticipant = participants.filter(\r\n        (participant) => participant.ScreenID === screenId,\r\n      );\r\n\r\n      if (screenParticipant.length > 0) {\r\n        const screenParticipantVidID = screenParticipant[0].videoID;\r\n        const screenParticipantVidID_ = newLimitedStreams.filter(\r\n          (stream) => stream.producerId === screenParticipantVidID,\r\n        );\r\n\r\n        if (screenParticipantVidID_?.length < 1 && screenParticipantVidID) {\r\n          screenShareIDStream = screenParticipantVidID;\r\n          screenShareNameStream = screenParticipant[0].name;\r\n          const screenParticipantVidID__ = allVideoStreams.filter(\r\n            (stream) => stream.producerId === screenParticipantVidID,\r\n          );\r\n          newLimitedStreams = [...newLimitedStreams, ...screenParticipantVidID__];\r\n          newLimitedStreamsIDs = [\r\n            ...newLimitedStreamsIDs,\r\n            ...screenParticipantVidID__.map((stream) => stream.producerId),\r\n          ];\r\n        }\r\n      }\r\n    } else {\r\n      if (!add) {\r\n        newLimitedStreams = [...newLimitedStreams, ...youyou];\r\n        newLimitedStreamsIDs = [\r\n          ...newLimitedStreamsIDs,\r\n          ...youyou.map((stream) => stream.producerId),\r\n        ];\r\n      } else {\r\n        const youyouStream = newLimitedStreams.find((stream) => stream.producerId === 'youyou');\r\n\r\n        if (!youyouStream) {\r\n          newLimitedStreams = [...newLimitedStreams, ...youyou];\r\n          newLimitedStreamsIDs = [\r\n            ...newLimitedStreamsIDs,\r\n            ...youyou.map((stream) => stream.producerId),\r\n          ];\r\n        }\r\n      }\r\n\r\n      const screenParticipant = participants.filter(\r\n        (participant) => participant.ScreenID === screenId,\r\n      );\r\n\r\n      if (screenParticipant.length > 0) {\r\n        const screenParticipantVidID = screenParticipant[0].videoID;\r\n        const screenParticipantVidID_ = newLimitedStreams.filter(\r\n          (stream) => stream.producerId === screenParticipantVidID,\r\n        );\r\n\r\n        if (screenParticipantVidID_?.length < 1 && screenParticipantVidID) {\r\n          screenShareIDStream = screenParticipantVidID;\r\n          screenShareNameStream = screenParticipant[0].name;\r\n          const screenParticipantVidID__ = allVideoStreams.filter(\r\n            (stream) => stream.producerId === screenParticipantVidID,\r\n          );\r\n          newLimitedStreams = [...newLimitedStreams, ...screenParticipantVidID__];\r\n          newLimitedStreamsIDs = [\r\n            ...newLimitedStreamsIDs,\r\n            ...screenParticipantVidID__.map((stream) => stream.producerId),\r\n          ];\r\n        }\r\n      }\r\n    }\r\n\r\n    updateNewLimitedStreams(newLimitedStreams);\r\n    updateNewLimitedStreamsIDs(newLimitedStreamsIDs);\r\n    updateActiveSounds(activeSounds);\r\n    updateScreenShareIDStream(screenShareIDStream!);\r\n    updateScreenShareNameStream(screenShareNameStream!);\r\n    updateAdminIDStream(adminIDStream!);\r\n    updateAdminNameStream(adminNameStream!);\r\n    updateYouYouStream(youyou);\r\n\r\n    //reflect the changes on the ui\r\n    await changeVids({ screenChanged, parameters });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  ScreenState,\r\n  CompareScreenStatesParameters,\r\n  CompareScreenStatesType,\r\n  CompareActiveNamesParameters,\r\n  CompareActiveNamesType,\r\n} from '../@types/types';\r\n\r\nexport interface RePortParameters\r\n  extends CompareScreenStatesParameters,\r\n    CompareActiveNamesParameters {\r\n  islevel: string;\r\n  mainScreenPerson: string;\r\n  adminOnMainScreen: boolean;\r\n  mainScreenFilled: boolean;\r\n  recordStarted: boolean;\r\n  recordStopped: boolean;\r\n  recordPaused: boolean;\r\n  recordResumed: boolean;\r\n  screenStates: ScreenState[];\r\n  prevScreenStates: ScreenState[];\r\n  updateScreenStates: (states: ScreenState[]) => void;\r\n  updatePrevScreenStates: (states: ScreenState[]) => void;\r\n\r\n  // mediasfu functions\r\n  compareActiveNames: CompareActiveNamesType;\r\n  compareScreenStates: CompareScreenStatesType;\r\n\r\n  getUpdatedAllParams: () => RePortParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface RePortOptions {\r\n  restart?: boolean;\r\n  parameters: RePortParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type RePortType = (options: RePortOptions) => Promise<void>;\r\n\r\n/**\r\n * RePort function that handles the reporting logic based on the provided parameters.\r\n *\r\n * This method checks the current state of the recording process and updates the screen states\r\n * accordingly. It also compares active names and screen states based on the provided parameters.\r\n *\r\n * @param {RePortOptions} options - The options for the rePort function.\r\n * @param {boolean} [options.restart=false] - Flag indicating whether to restart the process.\r\n * @param {RePortParameters} options.parameters - The parameters object containing various states and functions.\r\n * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n * @param {string} options.parameters.islevel - The current level of the process.\r\n * @param {string} options.parameters.mainScreenPerson - The person on the main screen.\r\n * @param {boolean} options.parameters.adminOnMainScreen - Flag indicating if admin is on the main screen.\r\n * @param {boolean} options.parameters.mainScreenFilled - Flag indicating if the main screen is filled.\r\n * @param {boolean} options.parameters.recordStarted - Flag indicating if recording has started.\r\n * @param {boolean} options.parameters.recordStopped - Flag indicating if recording has stopped.\r\n * @param {boolean} options.parameters.recordPaused - Flag indicating if recording is paused.\r\n * @param {boolean} options.parameters.recordResumed - Flag indicating if recording has resumed.\r\n * @param {Array<ScreenState>} options.parameters.screenStates - Array of current screen states.\r\n * @param {Function} options.parameters.updateScreenStates - Function to update the current screen states.\r\n * @param {Function} options.parameters.updatePrevScreenStates - Function to update the previous screen states.\r\n * @param {Function} options.parameters.compareActiveNames - Function to compare active names.\r\n * @param {Function} options.parameters.compareScreenStates - Function to compare screen states.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the reporting process is complete.\r\n *\r\n * @throws {Error} Throws an error if there is an issue during the reporting process.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   restart: false,\r\n *   parameters: {\r\n *     islevel: '1',\r\n *     mainScreenPerson: 'John Doe',\r\n *     adminOnMainScreen: false,\r\n *     mainScreenFilled: true,\r\n *     recordStarted: true,\r\n *     screenStates: [],\r\n *     updateScreenStates: (states) => { console.log(updated) },\r\n *     compareActiveNames: async (opts) => {  },\r\n *     compareScreenStates: async (opts) => {  },\r\n *   },\r\n * };\r\n *\r\n * await rePort(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RePort {\r\n  /**\r\n   * RePort function that handles the reporting logic based on the provided parameters.\r\n   *\r\n   * @param {RePortOptions} options - The options for the rePort function.\r\n   * @param {boolean} [options.restart=false] - Flag indicating whether to restart the process.\r\n   * @param {Object} options.parameters - The parameters object containing various states and functions.\r\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {string} options.parameters.islevel - The current level of the process.\r\n   * @param {string} options.parameters.mainScreenPerson - The person on the main screen.\r\n   * @param {boolean} options.parameters.adminOnMainScreen - Flag indicating if admin is on the main screen.\r\n   * @param {boolean} options.parameters.mainScreenFilled - Flag indicating if the main screen is filled.\r\n   * @param {boolean} options.parameters.recordStarted - Flag indicating if recording has started.\r\n   * @param {boolean} options.parameters.recordStopped - Flag indicating if recording has stopped.\r\n   * @param {boolean} options.parameters.recordPaused - Flag indicating if recording is paused.\r\n   * @param {boolean} options.parameters.recordResumed - Flag indicating if recording has resumed.\r\n   * @param {Array} options.parameters.screenStates - Array of current screen states.\r\n   * @param {Function} options.parameters.updateScreenStates - Function to update the current screen states.\r\n   * @param {Function} options.parameters.updatePrevScreenStates - Function to update the previous screen states.\r\n   * @param {Function} options.parameters.compareActiveNames - Function to compare active names.\r\n   * @param {Function} options.parameters.compareScreenStates - Function to compare screen states.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the reporting process is complete.\r\n   *\r\n   * @throws {Error} Throws an error if there is an issue during the reporting process.\r\n   */\r\n\r\n  async rePort({ restart = false, parameters }: RePortOptions): Promise<void> {\r\n    const { getUpdatedAllParams } = parameters;\r\n    const updatedParams = getUpdatedAllParams();\r\n\r\n    const {\r\n      islevel,\r\n      mainScreenPerson,\r\n      adminOnMainScreen,\r\n      mainScreenFilled,\r\n      recordStarted,\r\n      recordStopped,\r\n      recordPaused,\r\n      recordResumed,\r\n      screenStates,\r\n      updateScreenStates,\r\n      updatePrevScreenStates,\r\n      compareActiveNames,\r\n      compareScreenStates,\r\n    } = updatedParams;\r\n\r\n    try {\r\n      if (recordStarted || recordResumed) {\r\n        if (recordStopped || recordPaused) {\r\n          // Recording stopped or paused, do nothing\r\n        } else {\r\n          if (islevel === '2') {\r\n            const prevScreenStatesCopy = [...screenStates];\r\n            updatePrevScreenStates(prevScreenStatesCopy);\r\n\r\n            const newScreenStates = [{ mainScreenPerson, adminOnMainScreen, mainScreenFilled }];\r\n            updateScreenStates(newScreenStates);\r\n\r\n            await compareActiveNames({ restart, parameters: updatedParams });\r\n            if (!restart) {\r\n              await compareScreenStates({ restart, parameters: updatedParams });\r\n            }\r\n          }\r\n        }\r\n      }\r\n    } catch (error) {\r\n      // Handle errors during the process of rePorting\r\n      console.error('Error during rePorting: ', error);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { ShowAlert, StartShareScreenType, StartShareScreenParameters } from '../@types/types';\r\n\r\nexport interface RequestScreenShareParameters extends StartShareScreenParameters {\r\n  socket: Socket;\r\n  showAlert?: ShowAlert;\r\n  localUIMode: boolean;\r\n  targetResolution?: string;\r\n  targetResolutionHost?: string;\r\n\r\n  // mediasfu functions\r\n  startShareScreen: StartShareScreenType;\r\n  getUpdatedAllParams: () => RequestScreenShareParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface RequestScreenShareOptions {\r\n  parameters: RequestScreenShareParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type RequestScreenShareType = (options: RequestScreenShareOptions) => Promise<void>;\r\n\r\n/**\r\n * Requests to start screen sharing.\r\n *\r\n * This method initiates a screen sharing request and handles the response\r\n * from the server to determine if screen sharing is allowed. It also configures\r\n * the target resolution for the screen share based on the user's input and\r\n * parameters.\r\n *\r\n * @param {RequestScreenShareOptions} options - The options for requesting screen share.\r\n * @param {Object} options.parameters - The parameters for the screen share request.\r\n * @param {Socket} options.parameters.socket - The socket instance to communicate with the server.\r\n * @param {Function} [options.parameters.showAlert] - Optional function to show alerts to the user.\r\n * @param {boolean} options.parameters.localUIMode - Indicates if the user is in local UI mode.\r\n * @param {string} [options.parameters.targetResolution] - The target resolution for screen sharing.\r\n * @param {string} [options.parameters.targetResolutionHost] - The target resolution for the host screen.\r\n * @param {Function} options.parameters.startShareScreen - Function to start screen sharing.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the screen share request is processed.\r\n *\r\n * @throws {Error} Throws an error if there is an issue during the screen share request process.\r\n *\r\n * @example\r\n * ```typescript\r\n * await requestScreenShare({\r\n *   parameters: {\r\n *     socket: mySocket,\r\n *     localUIMode: false,\r\n *     targetResolution: 'fhd',\r\n *     startShareScreen: myStartShareScreenFunction,\r\n *     showAlert: myShowAlertFunction,\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RequestScreenShare {\r\n  /**\r\n   * Requests to start screen sharing.\r\n   *\r\n   * @param {RequestScreenShareOptions} options - The options for requesting screen share.\r\n   * @param {Object} options.parameters - The parameters for the screen share request.\r\n   * @param {Socket} options.parameters.socket - The socket instance to communicate with the server.\r\n   * @param {Function} [options.parameters.showAlert] - Optional function to show alerts to the user.\r\n   * @param {boolean} options.parameters.localUIMode - Indicates if the user is in local UI mode.\r\n   * @param {string} [options.parameters.targetResolution] - The target resolution for screen sharing.\r\n   * @param {string} [options.parameters.targetResolutionHost] - The target resolution for the host screen.\r\n   * @param {Function} options.parameters.startShareScreen - Function to start screen sharing.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the screen share request is processed.\r\n   *\r\n   * @throws {Error} Throws an error if there is an issue during the screen share request process.\r\n   */\r\n  requestScreenShare = async ({ parameters }: RequestScreenShareOptions): Promise<void> => {\r\n    try {\r\n      // Destructure parameters\r\n      const {\r\n        showAlert,\r\n        localUIMode,\r\n        startShareScreen,\r\n        socket,\r\n        targetResolution = 'hd',\r\n        targetResolutionHost = 'hd',\r\n      } = parameters;\r\n\r\n      // Check if the user is in local UI mode\r\n      if (localUIMode === true) {\r\n        await startShareScreen({ parameters });\r\n        return;\r\n      }\r\n\r\n      let targetWidth = 1280;\r\n      let targetHeight = 720;\r\n\r\n      if (targetResolution == 'qhd' || targetResolutionHost == 'qhd') {\r\n        targetWidth = 2560;\r\n        targetHeight = 1440;\r\n      } else if (targetResolution == 'fhd' || targetResolutionHost == 'fhd') {\r\n        targetWidth = 1920;\r\n        targetHeight = 1080;\r\n      }\r\n\r\n      socket.emit(\r\n        'requestScreenShare',\r\n        async ({ allowScreenShare }: { allowScreenShare: boolean }) => {\r\n          if (!allowScreenShare) {\r\n            // Send an alert to the user\r\n            showAlert?.({\r\n              message: 'You are not allowed to share screen',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n          } else {\r\n            await startShareScreen({ parameters: { ...parameters, targetWidth, targetHeight } });\r\n          }\r\n        },\r\n      );\r\n    } catch (error) {\r\n      // Handle errors during the process of requesting screen share\r\n      console.error('Error during requesting screen share: ', error);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  Participant,\r\n  Stream,\r\n  ProcessConsumerTransportsAudioType,\r\n  ProcessConsumerTransportsAudioParameters,\r\n  Transport,\r\n  BreakoutParticipant,\r\n  EventType,\r\n} from '../@types/types';\r\n\r\nexport interface ResumePauseAudioStreamsParameters\r\n  extends ProcessConsumerTransportsAudioParameters {\r\n  breakoutRooms: BreakoutParticipant[][];\r\n  ref_participants: Participant[];\r\n  allAudioStreams: (Stream | Participant)[];\r\n  participants: Participant[];\r\n  islevel: string;\r\n  eventType: EventType;\r\n  consumerTransports: Transport[];\r\n  limitedBreakRoom: BreakoutParticipant[];\r\n  hostNewRoom: number;\r\n  member: string;\r\n  updateLimitedBreakRoom: (limitedBreakRoom: BreakoutParticipant[]) => void;\r\n\r\n  // mediasfu functions\r\n  processConsumerTransportsAudio: ProcessConsumerTransportsAudioType;\r\n  getUpdatedAllParams: () => ResumePauseAudioStreamsParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ResumePauseAudioStreamsOptions {\r\n  breakRoom?: number;\r\n  inBreakRoom?: boolean;\r\n  parameters: ResumePauseAudioStreamsParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ResumePauseAudioStreamsType = (\r\n  options: ResumePauseAudioStreamsOptions,\r\n) => Promise<void>;\r\n\r\n/**\r\n * Resumes or pauses audio streams based on the provided options.\r\n *\r\n * This method checks the current state of participants in breakout rooms and\r\n * updates the audio streams accordingly. It can add or remove audio streams\r\n * based on the participant's current status (in a breakout room or not)\r\n * and the event type (e.g., conference, webinar).\r\n *\r\n * @param {ResumePauseAudioStreamsOptions} options - The options for resuming or pausing audio streams.\r\n * @param {number} [options.breakRoom=-1] - The ID of the break room. Defaults to -1 if not specified.\r\n * @param {boolean} [options.inBreakRoom=false] - Indicates if the participant is in a break room. Defaults to false.\r\n * @param {ResumePauseAudioStreamsParameters} options.parameters - The parameters required for processing audio streams.\r\n * @param {Array<BreakoutParticipant[]>} options.parameters.breakoutRooms - Array of breakout rooms.\r\n * @param {Array<Participant>} options.parameters.ref_participants - Array of reference participants.\r\n * @param {Array<Stream | Participant>} options.parameters.allAudioStreams - Array of all audio streams.\r\n * @param {Array<Participant>} options.parameters.participants - Array of participants.\r\n * @param {string} options.parameters.islevel - The level of the participant.\r\n * @param {EventType} options.parameters.eventType - The type of event (e.g., conference, webinar).\r\n * @param {Array<Transport>} options.parameters.consumerTransports - Array of consumer transports.\r\n * @param {Array<BreakoutParticipant>} options.parameters.limitedBreakRoom - Array of participants in the limited break room.\r\n * @param {number} options.parameters.hostNewRoom - The ID of the host's new room.\r\n * @param {string} options.parameters.member - The name of the member.\r\n * @param {Function} options.parameters.updateLimitedBreakRoom - Function to update the limited break room.\r\n * @param {Function} options.parameters.processConsumerTransportsAudio - Function to process audio transports.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the audio streams have been processed.\r\n *\r\n * @throws Will log an error message if there is an issue processing the audio streams.\r\n *\r\n * @example\r\n * ```typescript\r\n * await resumePauseAudioStreams({\r\n *   breakRoom: 1,\r\n *   inBreakRoom: true,\r\n *   parameters: {\r\n *     breakoutRooms: [],\r\n *     ref_participants: [],\r\n *     allAudioStreams: [],\r\n *     participants: [],\r\n *     islevel: '1',\r\n *     eventType: 'conference',\r\n *     consumerTransports: [],\r\n *     limitedBreakRoom: [],\r\n *     hostNewRoom: 2,\r\n *     member: 'JohnDoe',\r\n *     updateLimitedBreakRoom: myUpdateFunction,\r\n *     processConsumerTransportsAudio: myProcessFunction,\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ResumePauseAudioStreams {\r\n  /**\r\n   * Resumes or pauses audio streams based on the provided options.\r\n   *\r\n   * @param {ResumePauseAudioStreamsOptions} options - The options for resuming or pausing audio streams.\r\n   * @param {number} [options.breakRoom=-1] - The ID of the break room.\r\n   * @param {boolean} [options.inBreakRoom=false] - Indicates if the participant is in a break room.\r\n   * @param {Parameters} options.parameters - The parameters required for processing audio streams.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the audio streams have been processed.\r\n   *\r\n   * @throws Will log an error message if there is an issue processing the audio streams.\r\n   */\r\n\r\n  resumePauseAudioStreams = async ({\r\n    breakRoom = -1,\r\n    inBreakRoom = false,\r\n    parameters,\r\n  }: ResumePauseAudioStreamsOptions): Promise<void> => {\r\n    let { getUpdatedAllParams } = parameters;\r\n    parameters = getUpdatedAllParams();\r\n\r\n    let {\r\n      breakoutRooms,\r\n      ref_participants,\r\n      allAudioStreams,\r\n      participants,\r\n      islevel,\r\n      eventType,\r\n      consumerTransports,\r\n      hostNewRoom,\r\n      member,\r\n\r\n      updateLimitedBreakRoom,\r\n      processConsumerTransportsAudio,\r\n    } = parameters;\r\n\r\n    let room: BreakoutParticipant[] = [];\r\n    let currentStreams: (Stream | Participant)[] = [];\r\n    // Determine the room based on breakout status\r\n    if (inBreakRoom && breakRoom !== -1) {\r\n      room = breakoutRooms[breakRoom];\r\n    } else {\r\n      room = ref_participants.filter(\r\n        (participant) =>\r\n          !breakoutRooms\r\n            .flat()\r\n            .map((obj) => obj.name)\r\n            .includes(participant.name),\r\n      );\r\n    }\r\n\r\n    updateLimitedBreakRoom(room);\r\n\r\n    try {\r\n      let addHostAudio = false;\r\n\r\n      if (islevel !== '2' && eventType === 'conference') {\r\n        const roomMember = breakoutRooms.find((r) => r.find((p) => p.name === member));\r\n        let memberBreakRoom = -1;\r\n        if (roomMember) {\r\n          memberBreakRoom = breakoutRooms.indexOf(roomMember);\r\n        }\r\n\r\n        if (\r\n          (inBreakRoom && breakRoom !== hostNewRoom) ||\r\n          (!inBreakRoom && hostNewRoom !== -1 && hostNewRoom !== memberBreakRoom)\r\n        ) {\r\n          const host = participants.find((obj) => obj.islevel === '2');\r\n          // Remove the host from the room\r\n          room = room.filter((participant) => participant.name !== host?.name);\r\n        } else {\r\n          if (\r\n            (inBreakRoom && breakRoom === hostNewRoom) ||\r\n            (!inBreakRoom && hostNewRoom === -1) ||\r\n            (!inBreakRoom && hostNewRoom === memberBreakRoom && memberBreakRoom !== -1)\r\n          ) {\r\n            addHostAudio = true;\r\n          }\r\n        }\r\n      }\r\n\r\n      for (let participant of room) {\r\n        let streams = allAudioStreams.filter((stream) => {\r\n          if (\r\n            (Object.prototype.hasOwnProperty.call(stream, 'producerId') && stream.producerId) ||\r\n            (Object.prototype.hasOwnProperty.call(stream, 'audioID') && stream.audioID)\r\n          ) {\r\n            let producerId = stream.producerId || stream.audioID;\r\n            let matchingParticipant = ref_participants.find((obj) => obj.audioID == producerId);\r\n            return matchingParticipant && matchingParticipant.name == participant.name;\r\n          }\r\n          // Return false if the stream doesn't meet the criteria\r\n          return false;\r\n        });\r\n\r\n        currentStreams.push(...streams);\r\n      }\r\n\r\n      // If webinar, add the host audio stream if it is not in the currentStreams\r\n      if (islevel !== '2' && (eventType === 'webinar' || addHostAudio)) {\r\n        const host = participants.find((obj) => obj.islevel === '2');\r\n        const hostStream = allAudioStreams.find((obj) => obj.producerId === host?.audioID);\r\n        if (hostStream && !currentStreams.includes(hostStream)) {\r\n          currentStreams.push(hostStream);\r\n          if (host?.name && !room.map((obj) => obj.name).includes(host.name)) {\r\n            room.push({ name: host?.name || '', breakRoom: -1 });\r\n          }\r\n          updateLimitedBreakRoom(room);\r\n        }\r\n      }\r\n\r\n      await processConsumerTransportsAudio({\r\n        consumerTransports,\r\n        lStreams: currentStreams,\r\n        parameters,\r\n      });\r\n    } catch (error) {\r\n      console.log('Error in resumePauseAudioStreams:', error);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Participant, Transport, Stream } from '../@types/types';\r\n\r\nexport interface ResumePauseStreamsParameters {\r\n  participants: Participant[];\r\n  dispActiveNames: string[];\r\n  remoteScreenStream: Stream[];\r\n  consumerTransports: Transport[];\r\n  screenId?: string;\r\n  islevel: string;\r\n\r\n  // mediasfu functions\r\n  getUpdatedAllParams: () => ResumePauseStreamsParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ResumePauseStreamsOptions {\r\n  parameters: ResumePauseStreamsParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ResumePauseStreamsType = (options: ResumePauseStreamsOptions) => Promise<void>;\r\n\r\n/**\r\n * Resumes or pauses streams based on the provided parameters.\r\n *\r\n * This method processes the current participant states and the active display names to determine\r\n * which audio and video streams should be resumed or paused. It communicates with the server\r\n * to resume streams as necessary.\r\n *\r\n * @param {ResumePauseStreamsOptions} options - The options for resuming or pausing streams.\r\n * @param {Object} options.parameters - The parameters for the function.\r\n * @param {Array<Participant>} options.parameters.participants - The list of participants in the session.\r\n * @param {Array<string>} options.parameters.dispActiveNames - The list of active display names.\r\n * @param {Array<Transport>} options.parameters.consumerTransports - The list of consumer transports.\r\n * @param {string} [options.parameters.screenId] - The screen producer ID if applicable.\r\n * @param {string} options.parameters.islevel - The level of the user (e.g., participant or host).\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the streams have been resumed or paused.\r\n *\r\n * @throws Will throw an error if there is an issue during the process of resuming or pausing streams.\r\n *\r\n * @example\r\n * ```typescript\r\n * await resumePauseStreams({\r\n *   parameters: {\r\n *     participants: [...], // Array of participants\r\n *     dispActiveNames: ['Alice', 'Bob'], // Active display names\r\n *     consumerTransports: [...], // Array of consumer transports\r\n *     screenId: 'screen123', // Screen producer ID\r\n *     islevel: '1', // User level\r\n *     getUpdatedAllParams: myGetUpdatedFunction, // Function to get updated params\r\n *   },\r\n * });\r\n * ```\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ResumePauseStreams {\r\n  /**\r\n   * Resumes or pauses streams based on the provided parameters.\r\n   *\r\n   * @param {ResumePauseStreamsOptions} options - The options for resuming or pausing streams.\r\n   * @param {Object} options.parameters - The parameters for the function.\r\n   * @param {Array} options.parameters.participants - The list of participants.\r\n   * @param {Array} options.parameters.dispActiveNames - The list of active display names.\r\n   * @param {Array} options.parameters.consumerTransports - The list of consumer transports.\r\n   * @param {string} options.parameters.screenId - The screen producer ID.\r\n   * @param {string} options.parameters.islevel - The level of the user.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the streams have been resumed or paused.\r\n   *\r\n   * @throws Will throw an error if there is an issue during the process of resuming or pausing streams.\r\n   */\r\n  resumePauseStreams = async ({ parameters }: ResumePauseStreamsOptions): Promise<void> => {\r\n    try {\r\n      // Destructure parameters\r\n      parameters = parameters.getUpdatedAllParams();\r\n      let { participants, dispActiveNames, consumerTransports, screenId, islevel } = parameters;\r\n\r\n      // Get the videoID of the host (islevel=2)\r\n      let host = participants.find((obj: any) => obj.islevel === '2');\r\n      let hostVideoID = host ? host.videoID : null;\r\n\r\n      // Get videoIDs of participants in dispActiveNames and screenproducerId\r\n      let videosIDs = dispActiveNames.map((name: any) => {\r\n        let participant = participants.find((obj: any) => obj.name === name);\r\n        return participant ? participant.videoID : null;\r\n      });\r\n\r\n      // Add screenproducerId to allVideoIDs if it's not null or empty\r\n      if (screenId) {\r\n        videosIDs.push(screenId);\r\n      }\r\n\r\n      // Add hostVideoID to allVideoIDs if it's not null or empty (only if the user is not the host)\r\n      if (islevel !== '2' && hostVideoID) {\r\n        videosIDs.push(hostVideoID);\r\n      }\r\n\r\n      // Remove null or empty videoIDs\r\n      let allVideoIDs = videosIDs.filter(\r\n        (videoID: string | null) => videoID !== null && videoID !== '',\r\n      );\r\n\r\n      if (allVideoIDs.length > 0) {\r\n        // Get consumer transports with producerId in allVideoIDs\r\n        const consumerTransportsToResume = consumerTransports.filter(\r\n          (transport: any) =>\r\n            allVideoIDs.includes(transport.producerId) && transport.consumer.kind !== 'audio',\r\n        );\r\n\r\n        // Resume all consumerTransportsToResume\r\n        for (const transport of consumerTransportsToResume) {\r\n          transport.socket_.emit(\r\n            'consumer-resume',\r\n            { serverConsumerId: transport.serverConsumerTransportId },\r\n            async ({ resumed }: { resumed: boolean }) => {\r\n              if (resumed) {\r\n                transport.consumer.resume();\r\n              }\r\n            },\r\n          );\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.log('Error during resuming or pausing streams: ', error);\r\n      // Handle errors during the process of resuming or pausing streams\r\n      // throw new Error(`Error during resuming or pausing streams: ${error.message}`);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Producer } from 'mediasoup-client/lib/types';\r\nimport { PrepopulateUserMediaParameters, PrepopulateUserMediaType } from '../@types/types';\r\nexport interface ResumeSendTransportAudioParameters extends PrepopulateUserMediaParameters {\r\n  audioProducer: Producer | null;\r\n  localAudioProducer?: Producer | null;\r\n  islevel: string;\r\n  hostLabel: string;\r\n  lock_screen: boolean;\r\n  shared: boolean;\r\n  videoAlreadyOn: boolean;\r\n  updateAudioProducer: (audioProducer: Producer | null) => void;\r\n  updateLocalAudioProducer?: (localAudioProducer: Producer | null) => void;\r\n  updateUpdateMainWindow: (updateMainWindow: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n  prepopulateLocalUserMedia?: PrepopulateUserMediaType;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ResumeSendTransportAudioOptions {\r\n  parameters: ResumeSendTransportAudioParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ResumeSendTransportAudioType = (\r\n  options: ResumeSendTransportAudioOptions,\r\n) => Promise<void>;\r\n\r\n/**\r\n * Resumes the send transport for audio and updates the UI and audio producer state accordingly.\r\n *\r\n * This function supports both a primary and a local audio producer, delegating the local logic to a separate function.\r\n *\r\n * @param {ResumeSendTransportAudioOptions} options - The options for resuming the send transport.\r\n * @param {ResumeSendTransportAudioParameters} options.parameters - The parameters for resuming the send transport.\r\n * @param {Producer} options.parameters.audioProducer - The primary audio producer to resume.\r\n * @param {Producer} [options.parameters.localAudioProducer] - The local audio producer to resume.\r\n * @param {string} options.parameters.islevel - The level of the audio producer.\r\n * @param {string} options.parameters.hostLabel - The label for the host.\r\n * @param {boolean} options.parameters.lock_screen - Indicates if the screen is locked.\r\n * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\r\n * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is already on.\r\n * @param {Function} options.parameters.updateAudioProducer - Function to update the audio producer state.\r\n * @param {Function} [options.parameters.updateLocalAudioProducer] - Function to update the local audio producer state.\r\n * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window.\r\n * @param {Function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\r\n * @returns {Promise<void>} A promise that resolves when the send transport is resumed and the UI is updated.\r\n *\r\n * @throws {Error} Throws an error if there is an issue during the process of resuming the audio send transport.\r\n *\r\n * @example\r\n * ```typescript\r\n * await resumeSendTransportAudio({\r\n *   parameters: {\r\n *     audioProducer: producer,\r\n *     localAudioProducer: localProducer,\r\n *     islevel: '1',\r\n *     hostLabel: 'Host',\r\n *     lock_screen: false,\r\n *     shared: false,\r\n *     updateAudioProducer: updateProducerFunction,\r\n *     updateLocalAudioProducer: updateLocalProducerFunction,\r\n *     videoAlreadyOn: false,\r\n *     updateUpdateMainWindow: updateWindowFunction,\r\n *     prepopulateUserMedia: prepopulateFunction,\r\n *     prepopulateLocalUserMedia: prepopulateLocalFunction,\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ResumeSendTransportAudio {\r\n\r\n  async resumeLocalSendTransportAudio({\r\n    parameters,\r\n  }: ResumeSendTransportAudioOptions): Promise<void> {\r\n    try {\r\n      const {\r\n        localAudioProducer,\r\n        updateLocalAudioProducer,\r\n      } = parameters;\r\n\r\n      // Resume local audio producer\r\n      if (localAudioProducer) {\r\n        localAudioProducer.resume();\r\n        updateLocalAudioProducer?.(localAudioProducer);\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error resuming local audio send transport:\", error);\r\n      throw error; // Re-throw to propagate the error\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Resumes the send transport for audio and updates the UI and audio producer state accordingly.\r\n   *\r\n   * This function supports both a primary and a local audio producer, delegating the local logic to a separate function.\r\n   *\r\n   * @param {ResumeSendTransportAudioOptions} options - The options for resuming the send transport.\r\n   * @param {ResumeSendTransportAudioParameters} options.parameters - The parameters for resuming the send transport.\r\n   * @param {Producer} options.parameters.audioProducer - The primary audio producer to resume.\r\n   * @param {Producer} [options.parameters.localAudioProducer] - The local audio producer to resume.\r\n   * @param {string} options.parameters.islevel - The level of the audio producer.\r\n   * @param {string} options.parameters.hostLabel - The label for the host.\r\n   * @param {boolean} options.parameters.lock_screen - Indicates if the screen is locked.\r\n   * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\r\n   * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is already on.\r\n   * @param {Function} options.parameters.updateAudioProducer - Function to update the audio producer state.\r\n   * @param {Function} [options.parameters.updateLocalAudioProducer] - Function to update the local audio producer state.\r\n   * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window.\r\n   * @param {Function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\r\n   * @returns {Promise<void>} A promise that resolves when the send transport is resumed and the UI is updated.\r\n   *\r\n   * @throws {Error} Throws an error if there is an issue during the process of resuming the audio send transport.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * await resumeSendTransportAudio({\r\n   *   parameters: {\r\n   *     audioProducer: producer,\r\n   *     localAudioProducer: localProducer,\r\n   *     islevel: '1',\r\n   *     hostLabel: 'Host',\r\n   *     lock_screen: false,\r\n   *     shared: false,\r\n   *     updateAudioProducer: updateProducerFunction,\r\n   *     updateLocalAudioProducer: updateLocalProducerFunction,\r\n   *     videoAlreadyOn: false,\r\n   *     updateUpdateMainWindow: updateWindowFunction,\r\n   *     prepopulateUserMedia: prepopulateFunction,\r\n   *     prepopulateLocalUserMedia: prepopulateLocalFunction,\r\n   *   },\r\n   * });\r\n   * ```\r\n   */\r\n\r\n  async resumeSendTransportAudio({ parameters }: ResumeSendTransportAudioOptions): Promise<void> {\r\n    try {\r\n      let {\r\n        audioProducer,\r\n        islevel,\r\n        updateMainWindow,\r\n        hostLabel,\r\n        lock_screen,\r\n        shared,\r\n        updateAudioProducer,\r\n        videoAlreadyOn,\r\n        updateUpdateMainWindow,\r\n        prepopulateUserMedia,\r\n      } = parameters;\r\n\r\n      // Resume send transport for audio\r\n      audioProducer?.resume();\r\n\r\n      // Update the UI\r\n      if (!videoAlreadyOn && islevel === '2') {\r\n        if (!lock_screen && !shared) {\r\n          updateMainWindow = true;\r\n          updateUpdateMainWindow(updateMainWindow);\r\n          await prepopulateUserMedia({ name: hostLabel, parameters });\r\n          updateMainWindow = false;\r\n          updateUpdateMainWindow(updateMainWindow);\r\n        }\r\n      }\r\n\r\n      // Update audio producer state\r\n      updateAudioProducer(audioProducer);\r\n\r\n      // Attempt to handle local audio producer if primary fails\r\n      try {\r\n        await this.resumeLocalSendTransportAudio({ parameters });\r\n      } catch (localError) {\r\n        console.error(\r\n          \"local audio send transport resuming failed:\",\r\n          localError\r\n        );\r\n      }\r\n    } catch (error: any) {\r\n      // Handle errors during the process of resuming the audio send transport\r\n      throw new Error(`Error during resuming audio send transport: ${error.message}`);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  Participant,\r\n  Stream,\r\n  OnScreenChangesType,\r\n  ReorderStreamsType,\r\n  ChangeVidsType,\r\n  OnScreenChangesParameters,\r\n  ReorderStreamsParameters,\r\n  ChangeVidsParameters,\r\n  EventType,\r\n} from '../@types/types';\r\nexport interface ReUpdateInterParameters\r\n  extends OnScreenChangesParameters,\r\n    ReorderStreamsParameters,\r\n    ChangeVidsParameters {\r\n  screenPageLimit: number;\r\n  itemPageLimit: number;\r\n  reorderInterval: number;\r\n  fastReorderInterval: number;\r\n  eventType: EventType;\r\n  participants: Participant[];\r\n  allVideoStreams: (Participant | Stream)[];\r\n  shared: boolean;\r\n  shareScreenStarted: boolean;\r\n  adminNameStream?: string;\r\n  screenShareNameStream?: string;\r\n  updateMainWindow: boolean;\r\n  sortAudioLoudness: boolean;\r\n  lastReorderTime: number;\r\n  newLimitedStreams: (Participant | Stream)[];\r\n  newLimitedStreamsIDs: string[];\r\n  oldSoundIds: string[];\r\n  updateUpdateMainWindow: (value: boolean) => void;\r\n  updateSortAudioLoudness: (value: boolean) => void;\r\n  updateLastReorderTime: (value: number) => void;\r\n  updateNewLimitedStreams: (streams: (Participant | Stream)[]) => void;\r\n  updateNewLimitedStreamsIDs: (ids: string[]) => void;\r\n  updateOldSoundIds: (ids: string[]) => void;\r\n\r\n  // mediasfu functions\r\n  onScreenChanges: OnScreenChangesType;\r\n  reorderStreams: ReorderStreamsType;\r\n  changeVids: ChangeVidsType;\r\n\r\n  getUpdatedAllParams: () => ReUpdateInterParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ReUpdateInterOptions {\r\n  name: string;\r\n  add?: boolean;\r\n  force?: boolean;\r\n  average?: number;\r\n  parameters: ReUpdateInterParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ReUpdateInterType = (options: ReUpdateInterOptions) => Promise<void>;\r\n\r\n/**\r\n * Updates the interaction state based on the provided options and parameters.\r\n *\r\n * This method handles the updating of participant interactions based on the event type, screen sharing status,\r\n * and various other parameters. It manages the addition and removal of streams in the context of screen sharing\r\n * and video/audio management.\r\n *\r\n * @param {ReUpdateInterOptions} options - The options for updating the interaction.\r\n * @param {string} options.name - The name of the participant.\r\n * @param {boolean} [options.add=false] - Whether to add the participant to the interaction.\r\n * @param {boolean} [options.force=false] - Whether to force the update.\r\n * @param {number} [options.average=127] - The average value used for determining reorder intervals.\r\n * @param {ReUpdateInterParameters} options.parameters - The parameters for updating the interaction.\r\n * @param {number} options.parameters.screenPageLimit - The screen page limit.\r\n * @param {number} options.parameters.itemPageLimit - The item page limit.\r\n * @param {number} options.parameters.reorderInterval - The reorder interval.\r\n * @param {number} options.parameters.fastReorderInterval - The fast reorder interval.\r\n * @param {string} options.parameters.eventType - The type of event (e.g., \"broadcast\", \"chat\", \"conference\").\r\n * @param {Array<Participant>} options.parameters.participants - The list of participants.\r\n * @param {Array<Stream | Participant>} options.parameters.allVideoStreams - The list of all video streams.\r\n * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\r\n * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.\r\n * @param {string} options.parameters.adminNameStream - The admin name stream.\r\n * @param {string} options.parameters.screenShareNameStream - The screen share name stream.\r\n * @param {boolean} options.parameters.updateMainWindow - Whether to update the main window.\r\n * @param {boolean} options.parameters.sortAudioLoudness - Whether to sort audio by loudness.\r\n * @param {number} options.parameters.lastReorderTime - The last reorder time.\r\n * @param {Array<Stream | Participant>} options.parameters.newLimitedStreams - The list of new limited streams.\r\n * @param {Array<string>} options.parameters.newLimitedStreamsIDs - The list of new limited stream IDs.\r\n * @param {Array<string>} options.parameters.oldSoundIds - The list of old sound IDs.\r\n * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window.\r\n * @param {Function} options.parameters.updateSortAudioLoudness - Function to update the audio loudness sorting.\r\n * @param {Function} options.parameters.updateLastReorderTime - Function to update the last reorder time.\r\n * @param {Function} options.parameters.updateNewLimitedStreams - Function to update the new limited streams.\r\n * @param {Function} options.parameters.updateNewLimitedStreamsIDs - Function to update the new limited stream IDs.\r\n * @param {Function} options.parameters.updateOldSoundIds - Function to update the old sound IDs.\r\n * @param {Function} options.parameters.onScreenChanges - Function to handle screen changes.\r\n * @param {Function} options.parameters.reorderStreams - Function to reorder streams.\r\n * @param {Function} options.parameters.changeVids - Function to change videos.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the interaction update is complete.\r\n *\r\n * @throws {Error} Throws an error if there is an issue during the interaction update.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   name: 'John Doe',\r\n *   add: true,\r\n *   parameters: {\r\n *     screenPageLimit: 5,\r\n *     itemPageLimit: 10,\r\n *     reorderInterval: 1000,\r\n *     fastReorderInterval: 500,\r\n *     eventType: 'conference',\r\n *     participants: [...],\r\n *     allVideoStreams: [...],\r\n *     shared: false,\r\n *     shareScreenStarted: false,\r\n *     adminNameStream: 'Admin',\r\n *     screenShareNameStream: 'ScreenShare',\r\n *     updateMainWindow: true,\r\n *     sortAudioLoudness: false,\r\n *     lastReorderTime: Date.now(),\r\n *     newLimitedStreams: [],\r\n *     newLimitedStreamsIDs: [],\r\n *     oldSoundIds: [],\r\n *     updateUpdateMainWindow: (value) => { console.log(updated) },\r\n *     updateSortAudioLoudness: (value) => { console.log(updated) },\r\n *     updateLastReorderTime: (value) => { console.log(updated) },\r\n *     updateNewLimitedStreams: (streams) => { console.log(updated) },\r\n *     updateNewLimitedStreamsIDs: (ids) => { console.log(updated) },\r\n *     updateOldSoundIds: (ids) => { console.log(updated) },\r\n *     onScreenChanges: async (opts) => {  },\r\n *     reorderStreams: async (opts) => {  },\r\n *     changeVids: async (opts) => {  },\r\n *   },\r\n * };\r\n *\r\n * await reUpdateInter(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ReUpdateInter {\r\n  /**\r\n   * Updates the interaction state based on the provided options and parameters.\r\n   *\r\n   * @param {ReUpdateInterOptions} options - The options for updating the interaction.\r\n   * @param {string} options.name - The name of the participant.\r\n   * @param {boolean} [options.add=false] - Whether to add the participant to the interaction.\r\n   * @param {boolean} [options.force=false] - Whether to force the update.\r\n   * @param {number} [options.average=127] - The average value used for determining reorder intervals.\r\n   * @param {Object} options.parameters - The parameters for updating the interaction.\r\n   * @param {number} options.parameters.screenPageLimit - The screen page limit.\r\n   * @param {number} options.parameters.itemPageLimit - The item page limit.\r\n   * @param {number} options.parameters.reorderInterval - The reorder interval.\r\n   * @param {number} options.parameters.fastReorderInterval - The fast reorder interval.\r\n   * @param {string} options.parameters.eventType - The type of event.\r\n   * @param {Array} options.parameters.participants - The list of participants.\r\n   * @param {Array} options.parameters.allVideoStreams - The list of all video streams.\r\n   * @param {boolean} options.parameters.shared - Whether the screen is shared.\r\n   * @param {boolean} options.parameters.shareScreenStarted - Whether screen sharing has started.\r\n   * @param {string} options.parameters.adminNameStream - The admin name stream.\r\n   * @param {string} options.parameters.screenShareNameStream - The screen share name stream.\r\n   * @param {boolean} options.parameters.updateMainWindow - Whether to update the main window.\r\n   * @param {boolean} options.parameters.sortAudioLoudness - Whether to sort audio by loudness.\r\n   * @param {number} options.parameters.lastReorderTime - The last reorder time.\r\n   * @param {Array} options.parameters.newLimitedStreams - The list of new limited streams.\r\n   * @param {Array} options.parameters.newLimitedStreamsIDs - The list of new limited stream IDs.\r\n   * @param {Array} options.parameters.oldSoundIds - The list of old sound IDs.\r\n   * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window.\r\n   * @param {Function} options.parameters.updateSortAudioLoudness - Function to update the audio loudness sorting.\r\n   * @param {Function} options.parameters.updateLastReorderTime - Function to update the last reorder time.\r\n   * @param {Function} options.parameters.updateNewLimitedStreams - Function to update the new limited streams.\r\n   * @param {Function} options.parameters.updateNewLimitedStreamsIDs - Function to update the new limited stream IDs.\r\n   * @param {Function} options.parameters.updateOldSoundIds - Function to update the old sound IDs.\r\n   * @param {Function} options.parameters.onScreenChanges - Function to handle screen changes.\r\n   * @param {Function} options.parameters.reorderStreams - Function to reorder streams.\r\n   * @param {Function} options.parameters.changeVids - Function to change videos.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the interaction update is complete.\r\n   */\r\n\r\n  reUpdateInter = async ({\r\n    name,\r\n    add = false,\r\n    force = false,\r\n    average = 127,\r\n    parameters,\r\n  }: ReUpdateInterOptions): Promise<void> => {\r\n    let {\r\n      screenPageLimit,\r\n      itemPageLimit,\r\n      reorderInterval,\r\n      fastReorderInterval,\r\n      eventType,\r\n      participants,\r\n      allVideoStreams,\r\n      shared,\r\n      shareScreenStarted,\r\n      adminNameStream,\r\n      screenShareNameStream,\r\n      updateMainWindow,\r\n      sortAudioLoudness,\r\n      lastReorderTime,\r\n      newLimitedStreams,\r\n      newLimitedStreamsIDs,\r\n      oldSoundIds,\r\n      updateUpdateMainWindow,\r\n      updateSortAudioLoudness,\r\n      updateLastReorderTime,\r\n      updateNewLimitedStreams,\r\n      updateNewLimitedStreamsIDs,\r\n      updateOldSoundIds,\r\n      onScreenChanges,\r\n      reorderStreams,\r\n      changeVids,\r\n    } = parameters;\r\n\r\n    if (eventType == 'broadcast' || eventType == 'chat') {\r\n      return;\r\n    }\r\n\r\n    let refLimit = screenPageLimit - 1;\r\n\r\n    if (shareScreenStarted || shared) {\r\n      // Do something when screen is shared or screen share is started\r\n    } else {\r\n      refLimit = itemPageLimit - 1;\r\n\r\n      if (add) {\r\n        const currentTime = Date.now();\r\n        if (\r\n          (currentTime - lastReorderTime >= reorderInterval && average > 128.5) ||\r\n          (average > 130 && currentTime - lastReorderTime >= fastReorderInterval)\r\n        ) {\r\n          lastReorderTime = currentTime;\r\n          sortAudioLoudness = true;\r\n          if (eventType == 'conference') {\r\n            await onScreenChanges({ changed: true, parameters });\r\n          } else {\r\n            await reorderStreams({ add: false, screenChanged: true, parameters });\r\n          }\r\n          sortAudioLoudness = false;\r\n\r\n          updateSortAudioLoudness(sortAudioLoudness);\r\n          updateUpdateMainWindow(updateMainWindow);\r\n          updateLastReorderTime(lastReorderTime);\r\n\r\n          return;\r\n        }\r\n      }\r\n    }\r\n\r\n    let videoID: string | null = null;\r\n    if (shareScreenStarted || shared) {\r\n      if (add) {\r\n        const participant = participants.find((p) => p.name === name);\r\n        videoID = participant?.videoID ?? null;\r\n\r\n        if (!videoID) {\r\n          return;\r\n        }\r\n\r\n        if (!newLimitedStreamsIDs.includes(videoID)) {\r\n          //first check length of newLimitedStreams to not exceed refLimit, if so remove oldSoundID from newLimitedStreams\r\n          if (newLimitedStreams.length > refLimit) {\r\n            let oldoldSounds = [...oldSoundIds];\r\n            for (let i = 0; i < oldSoundIds.length; i++) {\r\n              if (newLimitedStreams.length > refLimit) {\r\n                // remove stream from newLimitedStreams\r\n                if (newLimitedStreams.length < screenPageLimit) {\r\n                  return;\r\n                }\r\n                const currentId = oldSoundIds[i];\r\n                if (currentId !== screenShareNameStream && currentId !== adminNameStream) {\r\n                  newLimitedStreams = newLimitedStreams.filter(\r\n                    (stream) => stream.producerId !== currentId,\r\n                  );\r\n                  newLimitedStreamsIDs = newLimitedStreamsIDs.filter((id) => id !== currentId);\r\n                  oldoldSounds = oldoldSounds.filter((id) => id !== currentId);\r\n                }\r\n              }\r\n            }\r\n            oldSoundIds = [...oldoldSounds];\r\n          }\r\n\r\n          const stream = allVideoStreams.find((s) => s.producerId === videoID);\r\n          if (stream && newLimitedStreams.length < screenPageLimit) {\r\n            newLimitedStreams.push(stream);\r\n            newLimitedStreamsIDs.push(videoID);\r\n            if (!oldSoundIds.includes(name)) {\r\n              oldSoundIds.push(name);\r\n            }\r\n            await changeVids({ screenChanged: true, parameters });\r\n          }\r\n        }\r\n      } else {\r\n        if (!force) {\r\n          try {\r\n            // remove stream from newLimitedStreams\r\n            if (newLimitedStreams.length < screenPageLimit) {\r\n              return;\r\n            }\r\n            newLimitedStreams = newLimitedStreams.filter((stream) => stream.producerId != videoID);\r\n            newLimitedStreamsIDs = newLimitedStreamsIDs.filter((id) => id !== videoID);\r\n            oldSoundIds = oldSoundIds.filter((id) => id !== name);\r\n            await changeVids({ parameters });\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        } else {\r\n          const participant = participants.find((p) => p.name === name);\r\n          if (participant?.muted) {\r\n            try {\r\n              newLimitedStreams = newLimitedStreams.filter(\r\n                (stream) => stream.producerId !== videoID,\r\n              );\r\n              newLimitedStreamsIDs = newLimitedStreamsIDs.filter((id) => id !== videoID);\r\n              oldSoundIds = oldSoundIds.filter((id) => id !== name);\r\n              await changeVids({ parameters });\r\n            } catch {\r\n              /* handle error */\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      updateNewLimitedStreams(newLimitedStreams);\r\n      updateNewLimitedStreamsIDs(newLimitedStreamsIDs);\r\n      updateOldSoundIds(oldSoundIds);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { StreamSuccessScreenType, StreamSuccessScreenParameters, ShowAlert } from '../@types/types';\r\nexport interface StartShareScreenParameters extends StreamSuccessScreenParameters {\r\n  shared: boolean;\r\n  showAlert?: ShowAlert;\r\n  updateShared: (shared: boolean) => void;\r\n  onWeb: boolean;\r\n  targetWidth?: number;\r\n  targetHeight?: number;\r\n\r\n  // mediasfu functions\r\n  streamSuccessScreen: StreamSuccessScreenType;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface StartShareScreenOptions {\r\n  parameters: StartShareScreenParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type StartShareScreenType = (options: StartShareScreenOptions) => Promise<void>;\r\n/**\r\n * StartShareScreen - Service to initiate screen sharing with configurable options for different environments.\r\n *\r\n * This service initiates the screen sharing process, handling both successful and failed attempts\r\n * and updating the shared state accordingly.\r\n *\r\n * @class\r\n * @name StartShareScreen\r\n * @example\r\n * ```typescript\r\n * const startShareScreenService = new StartShareScreen();\r\n * await startShareScreenService.startShareScreen({\r\n *   parameters: {\r\n *     shared: false,\r\n *     showAlert: (alert) => console.log(alert.message),\r\n *     updateShared: (shared) => console.log('Shared state:', shared),\r\n *     onWeb: true,\r\n *     targetWidth: 1920,\r\n *     targetHeight: 1080,\r\n *     streamSuccessScreen: async ({ stream }) => {\r\n *       // Handle the successful stream here\r\n *       console.log('Stream started:', stream);\r\n *     },\r\n *   },\r\n * });\r\n * ```\r\n *\r\n * @param {StartShareScreenOptions} options - The options for starting screen sharing.\r\n * @param {Object} options.parameters - The parameters controlling screen sharing behavior.\r\n * @param {boolean} options.parameters.shared - Indicates if the screen is currently shared.\r\n * @param {Function} options.parameters.showAlert - Function to display alerts.\r\n * @param {Function} options.parameters.updateShared - Function to update the shared state.\r\n * @param {boolean} options.parameters.onWeb - Indicates if the app is running in a web environment.\r\n * @param {number} [options.parameters.targetWidth=1280] - Optional width setting for shared screen resolution.\r\n * @param {number} [options.parameters.targetHeight=720] - Optional height setting for shared screen resolution.\r\n * @param {Function} options.parameters.streamSuccessScreen - Function to handle successful screen sharing.\r\n *\r\n * @method startShareScreen - Initiates the screen sharing process based on the provided parameters.\r\n * @returns {Promise<void>} Resolves when the screen sharing process is complete or fails.\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StartShareScreen {\r\n  /**\r\n   * Starts the screen sharing process.\r\n   *\r\n   * @param {StartShareScreenOptions} options - The options for starting screen sharing.\r\n   * @param {Object} options.parameters - The parameters for screen sharing.\r\n   * @param {boolean} options.parameters.shared - Indicates if the screen is currently being shared.\r\n   * @param {Function} options.parameters.showAlert - Function to show alert messages.\r\n   * @param {Function} options.parameters.updateShared - Function to update the shared state.\r\n   * @param {boolean} options.parameters.onWeb - Indicates if the application is running on a web platform.\r\n   * @param {number} [options.parameters.targetWidth] - The target width for screen sharing.\r\n   * @param {number} [options.parameters.targetHeight] - The target height for screen sharing.\r\n   * @param {Function} options.parameters.streamSuccessScreen - Function to handle successful screen sharing.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the screen sharing process is complete.\r\n   *\r\n   * @throws Will log an error message if there is an issue starting the screen share.\r\n   */\r\n  startShareScreen = async ({ parameters }: StartShareScreenOptions): Promise<void> => {\r\n    // start screen share function\r\n    // attempt to start screen share and return true if successful\r\n\r\n    let {\r\n      shared,\r\n      showAlert,\r\n      updateShared,\r\n      onWeb,\r\n      targetWidth = 1280,\r\n      targetHeight = 720,\r\n      streamSuccessScreen,\r\n    } = parameters;\r\n\r\n    try {\r\n      if (!onWeb) {\r\n        showAlert?.({\r\n          message: 'You cannot share screen while on mobile',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n        return;\r\n      }\r\n\r\n      if (navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia) {\r\n        shared = true;\r\n        await navigator.mediaDevices\r\n          .getDisplayMedia({\r\n            video: {\r\n              width: targetWidth,\r\n              height: targetHeight,\r\n              frameRate: 30,\r\n            },\r\n            audio: false,\r\n          })\r\n          .then(async (stream: MediaStream) => {\r\n            await streamSuccessScreen({ stream, parameters });\r\n          })\r\n          .catch(async () => {\r\n            shared = false;\r\n            showAlert?.({\r\n              message: 'Could not share screen, check and retry',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n          });\r\n      } else {\r\n        showAlert?.({\r\n          message: 'Could not share screen, check and retry',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n      }\r\n\r\n      // update the shared variable\r\n      updateShared(shared);\r\n    } catch (error) {\r\n      console.log('Error starting screen share', error);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\nimport {\n  DisconnectSendTransportScreenType,\n  PrepopulateUserMediaType,\n  ReorderStreamsType,\n  GetVideosType,\n  DisconnectSendTransportScreenParameters,\n  PrepopulateUserMediaParameters,\n  ReorderStreamsParameters,\n  EventType,\n} from '../@types/types';\nexport interface StopShareScreenParameters\n  extends DisconnectSendTransportScreenParameters,\n  PrepopulateUserMediaParameters,\n  ReorderStreamsParameters {\n  shared: boolean;\n  shareScreenStarted: boolean;\n  shareEnded: boolean;\n  updateMainWindow: boolean;\n  defer_receive: boolean;\n  hostLabel: string;\n  lock_screen: boolean;\n  forceFullDisplay: boolean;\n  firstAll: boolean;\n  first_round: boolean;\n  localStreamScreen: MediaStream | null;\n  eventType: EventType;\n  prevForceFullDisplay: boolean;\n  annotateScreenStream: boolean;\n\n  updateShared: (shared: boolean) => void;\n  updateShareScreenStarted: (shareScreenStarted: boolean) => void;\n  updateShareEnded: (shareEnded: boolean) => void;\n  updateUpdateMainWindow: (updateMainWindow: boolean) => void;\n  updateDefer_receive: (defer_receive: boolean) => void;\n  updateLock_screen: (lock_screen: boolean) => void;\n  updateForceFullDisplay: (forceFullDisplay: boolean) => void;\n  updateFirstAll: (firstAll: boolean) => void;\n  updateFirst_round: (first_round: boolean) => void;\n  updateLocalStreamScreen: (localStreamScreen: MediaStream | null) => void;\n  updateMainHeightWidth: (mainHeightWidth: number) => void;\n  updateAnnotateScreenStream: (annotateScreenStream: boolean) => void;\n  updateIsScreenboardModalVisible: (isVisible: boolean) => void;\n\n  // mediasfu functions\n  disconnectSendTransportScreen: DisconnectSendTransportScreenType;\n  prepopulateUserMedia: PrepopulateUserMediaType;\n  reorderStreams: ReorderStreamsType;\n  getVideos: GetVideosType;\n\n  getUpdatedAllParams: () => StopShareScreenParameters;\n  [key: string]: any;\n}\n\nexport interface StopShareScreenOptions {\n  parameters: StopShareScreenParameters;\n}\n\n// Export the type definition for the function\nexport type StopShareScreenType = (options: StopShareScreenOptions) => Promise<void>;\n\n/**\n * Stops the screen sharing process and updates the relevant parameters and states.\n *\n * This method updates the internal state to reflect that screen sharing has ended,\n * cleans up local media tracks, and reorders the streams in the application.\n *\n * @param {StopShareScreenOptions} options - The options for stopping the screen share.\n * @param {Object} options.parameters - The parameters required for stopping the screen share.\n * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\n * @param {boolean} options.parameters.shared - Indicates if the screen is currently shared.\n * @param {boolean} options.parameters.shareScreenStarted - Indicates if the screen sharing has started.\n * @param {boolean} options.parameters.shareEnded - Indicates if the screen sharing has ended.\n * @param {boolean} options.parameters.updateMainWindow - Indicates if the main window needs to be updated.\n * @param {boolean} options.parameters.defer_receive - Indicates if receiving is deferred.\n * @param {string} options.parameters.hostLabel - The label of the host.\n * @param {boolean} options.parameters.lock_screen - Indicates if the screen is locked.\n * @param {boolean} options.parameters.forceFullDisplay - Indicates if full display is forced.\n * @param {boolean} options.parameters.firstAll - Indicates if it is the first all.\n * @param {boolean} options.parameters.first_round - Indicates if it is the first round.\n * @param {MediaStream} options.parameters.localStreamScreen - The local screen stream.\n * @param {string} options.parameters.eventType - The type of event (e.g., \"conference\").\n * @param {boolean} options.parameters.prevForceFullDisplay - Indicates if full display was previously forced.\n * @param {boolean} options.parameters.annotateScreenStream - Indicates if the screen stream is annotated.\n * @param {Function} options.parameters.updateShared - Function to update the shared state.\n * @param {Function} options.parameters.updateShareScreenStarted - Function to update the share screen started state.\n * @param {Function} options.parameters.updateShareEnded - Function to update the share ended state.\n * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window state.\n * @param {Function} options.parameters.updateDefer_receive - Function to update the defer receive state.\n * @param {Function} options.parameters.updateLock_screen - Function to update the lock screen state.\n * @param {Function} options.parameters.updateForceFullDisplay - Function to update the force full display state.\n * @param {Function} options.parameters.updateFirstAll - Function to update the first all state.\n * @param {Function} options.parameters.updateFirst_round - Function to update the first round state.\n * @param {Function} options.parameters.updateLocalStreamScreen - Function to update the local screen stream.\n * @param {Function} options.parameters.updateMainHeightWidth - Function to update the main height and width.\n * @param {Function} options.parameters.updateAnnotateScreenStream - Function to update the annotate screen stream state.\n * @param {Function} options.parameters.updateIsScreenboardModalVisible - Function to update the screenboard modal visibility.\n * @param {Function} options.parameters.disconnectSendTransportScreen - Function to disconnect the send transport screen.\n * @param {Function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\n * @param {Function} options.parameters.reorderStreams - Function to reorder streams.\n * @param {Function} options.parameters.getVideos - Function to get videos.\n *\n * @returns {Promise<void>} A promise that resolves when the screen sharing process is stopped.\n *\n * @throws {Error} Throws an error if there is an issue during the screen share stopping process.\n *\n * @example\n * await stopShareScreen({\n *   parameters: {\n *     socket: mySocket,\n *     shared: true,\n *     shareScreenStarted: true,\n *     // other parameters...\n *   },\n * });\n */\n\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class StopShareScreen {\n  /**\n   * Stops the screen sharing process and updates the relevant parameters and states.\n   *\n   * @param {StopShareScreenOptions} options - The options for stopping the screen share.\n   * @param {Object} options.parameters - The parameters required for stopping the screen share.\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\n   * @param {boolean} options.parameters.shared - Indicates if the screen is currently shared.\n   * @param {boolean} options.parameters.shareScreenStarted - Indicates if the screen sharing has started.\n   * @param {boolean} options.parameters.shareEnded - Indicates if the screen sharing has ended.\n   * @param {boolean} options.parameters.updateMainWindow - Indicates if the main window needs to be updated.\n   * @param {boolean} options.parameters.defer_receive - Indicates if receiving is deferred.\n   * @param {string} options.parameters.hostLabel - The label of the host.\n   * @param {boolean} options.parameters.lock_screen - Indicates if the screen is locked.\n   * @param {boolean} options.parameters.forceFullDisplay - Indicates if full display is forced.\n   * @param {boolean} options.parameters.firstAll - Indicates if it is the first all.\n   * @param {boolean} options.parameters.first_round - Indicates if it is the first round.\n   * @param {MediaStream} options.parameters.localStreamScreen - The local screen stream.\n   * @param {string} options.parameters.eventType - The type of event.\n   * @param {boolean} options.parameters.prevForceFullDisplay - Indicates if full display was previously forced.\n   * @param {boolean} options.parameters.annotateScreenStream - Indicates if the screen stream is annotated.\n   * @param {Function} options.parameters.updateShared - Function to update the shared state.\n   * @param {Function} options.parameters.updateShareScreenStarted - Function to update the share screen started state.\n   * @param {Function} options.parameters.updateShareEnded - Function to update the share ended state.\n   * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window state.\n   * @param {Function} options.parameters.updateDefer_receive - Function to update the defer receive state.\n   * @param {Function} options.parameters.updateLock_screen - Function to update the lock screen state.\n   * @param {Function} options.parameters.updateForceFullDisplay - Function to update the force full display state.\n   * @param {Function} options.parameters.updateFirstAll - Function to update the first all state.\n   * @param {Function} options.parameters.updateFirst_round - Function to update the first round state.\n   * @param {Function} options.parameters.updateLocalStreamScreen - Function to update the local screen stream.\n   * @param {Function} options.parameters.updateMainHeightWidth - Function to update the main height and width.\n   * @param {Function} options.parameters.updateAnnotateScreenStream - Function to update the annotate screen stream state.\n   * @param {Function} options.parameters.updateIsScreenboardModalVisible - Function to update the screenboard modal visibility.\n   * @param {Function} options.parameters.disconnectSendTransportScreen - Function to disconnect the send transport screen.\n   * @param {Function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\n   * @param {Function} options.parameters.reorderStreams - Function to reorder streams.\n   * @param {Function} options.parameters.getVideos - Function to get videos.\n   *\n   * @returns {Promise<void>} A promise that resolves when the screen sharing process is stopped.\n   */\n  stopShareScreen = async ({ parameters }: StopShareScreenOptions): Promise<void> => {\n    let { getUpdatedAllParams } = parameters;\n    parameters = getUpdatedAllParams();\n\n    let {\n      shared,\n      shareScreenStarted,\n      shareEnded,\n      updateMainWindow,\n      defer_receive,\n      hostLabel,\n      lock_screen,\n      forceFullDisplay,\n      firstAll,\n      first_round,\n      localStreamScreen,\n      eventType,\n      prevForceFullDisplay,\n      annotateScreenStream,\n\n      // updates for the above\n      updateShared,\n      updateShareScreenStarted,\n      updateShareEnded,\n      updateUpdateMainWindow,\n      updateDefer_receive,\n      updateLock_screen,\n      updateForceFullDisplay,\n      updateFirstAll,\n      updateFirst_round,\n      updateLocalStreamScreen,\n      updateMainHeightWidth,\n      updateAnnotateScreenStream,\n      updateIsScreenboardModalVisible,\n\n      // mediasfu functions\n      disconnectSendTransportScreen,\n      prepopulateUserMedia,\n      reorderStreams,\n      getVideos,\n    } = parameters;\n\n    shared = false;\n    updateShared(shared);\n    shareScreenStarted = false;\n    updateShareScreenStarted(shareScreenStarted);\n    shareEnded = true;\n    updateShareEnded(shareEnded);\n    updateMainWindow = true;\n    updateUpdateMainWindow(updateMainWindow);\n\n    if (defer_receive) {\n      defer_receive = false;\n      updateDefer_receive(defer_receive);\n      await getVideos({\n        participants: parameters.participants,\n        allVideoStreams: parameters.allVideoStreams,\n        oldAllStreams: parameters.oldAllStreams,\n        adminVidID: parameters.adminVidID,\n        updateAllVideoStreams: parameters['updateAllVideoStreams'],\n        updateOldAllStreams: parameters['updateOldAllStreams'],\n      });\n    }\n\n    try {\n      localStreamScreen?.getTracks().forEach((track: MediaStreamTrack) => track.stop());\n    } catch {\n      // do nothing\n    }\n    updateLocalStreamScreen(localStreamScreen);\n    await disconnectSendTransportScreen({ parameters });\n\n    try {\n      if (annotateScreenStream) {\n        annotateScreenStream = false;\n        updateAnnotateScreenStream(annotateScreenStream);\n        updateIsScreenboardModalVisible(true);\n        await new Promise((resolve) => setTimeout(resolve, 500));\n        updateIsScreenboardModalVisible(false);\n      }\n    } catch (error) {\n      console.log('Error handling screen annotation:', error);\n    }\n\n    if (eventType == 'conference') {\n      updateMainHeightWidth(0);\n    }\n\n    try {\n      await prepopulateUserMedia({ name: hostLabel, parameters });\n    } catch (error) {\n      console.log('Error in prepopulateUserMedia:', error);\n    }\n\n    try {\n      await reorderStreams({ add: false, screenChanged: true, parameters });\n    } catch (error) {\n      console.log('Error in reorderStreams:', error);\n    }\n\n    lock_screen = false;\n    updateLock_screen(lock_screen);\n    forceFullDisplay = prevForceFullDisplay;\n    updateForceFullDisplay(forceFullDisplay);\n    firstAll = false;\n    updateFirstAll(firstAll);\n    first_round = false;\n    updateFirst_round(first_round);\n  };\n}\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  Participant,\r\n  PrepopulateUserMediaParameters,\r\n  ShowAlert,\r\n  CreateSendTransportParameters,\r\n  ConnectSendTransportAudioParameters,\r\n  ResumeSendTransportAudioParameters,\r\n  PrepopulateUserMediaType,\r\n  CreateSendTransportType,\r\n  ConnectSendTransportAudioType,\r\n  ResumeSendTransportAudioType,\r\n} from '../@types/types';\r\nimport { ProducerOptions } from 'mediasoup-client/lib/types';\r\nexport interface StreamSuccessAudioParameters\r\n  extends CreateSendTransportParameters,\r\n    ConnectSendTransportAudioParameters,\r\n    ResumeSendTransportAudioParameters,\r\n    PrepopulateUserMediaParameters {\r\n  socket: Socket;\r\n  participants: Participant[];\r\n  localStream: MediaStream | null;\r\n  transportCreated: boolean;\r\n  transportCreatedAudio: boolean;\r\n  audioAlreadyOn: boolean;\r\n  micAction: boolean;\r\n  audioParams: ProducerOptions;\r\n  localStreamAudio: MediaStream | null;\r\n  defAudioID: string;\r\n  userDefaultAudioInputDevice: string;\r\n  params: ProducerOptions;\r\n  audioParamse?: ProducerOptions;\r\n  aParams: ProducerOptions;\r\n  hostLabel: string;\r\n  islevel: string;\r\n  member: string;\r\n  updateMainWindow: boolean;\r\n  lock_screen: boolean;\r\n  shared: boolean;\r\n  videoAlreadyOn: boolean;\r\n  showAlert?: ShowAlert;\r\n\r\n  updateParticipants: (participants: Participant[]) => void;\r\n  updateTransportCreated: (transportCreated: boolean) => void;\r\n  updateTransportCreatedAudio: (transportCreatedAudio: boolean) => void;\r\n  updateAudioAlreadyOn: (audioAlreadyOn: boolean) => void;\r\n  updateMicAction: (micAction: boolean) => void;\r\n  updateAudioParams: (audioParams: ProducerOptions) => void;\r\n  updateLocalStream: (localStream: MediaStream | null) => void;\r\n  updateLocalStreamAudio: (localStreamAudio: MediaStream | null) => void;\r\n  updateDefAudioID: (defAudioID: string) => void;\r\n  updateUserDefaultAudioInputDevice: (userDefaultAudioInputDevice: string) => void;\r\n  updateUpdateMainWindow: (updateMainWindow: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  createSendTransport: CreateSendTransportType;\r\n  connectSendTransportAudio: ConnectSendTransportAudioType;\r\n  resumeSendTransportAudio: ResumeSendTransportAudioType;\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n\r\n  getUpdatedAllParams: () => StreamSuccessAudioParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface StreamSuccessAudioOptions {\r\n  stream: MediaStream;\r\n  parameters: StreamSuccessAudioParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type StreamSuccessAudioType = (options: StreamSuccessAudioOptions) => Promise<void>;\r\n\r\n/**\r\n * Handles the successful streaming of audio by setting up the necessary transports and updating the relevant states.\r\n *\r\n * This method updates the local media stream with the new audio track, manages the transport connection,\r\n * and updates the participants' states to reflect changes in audio settings.\r\n *\r\n * @param {StreamSuccessAudioOptions} options - The options for streaming success audio.\r\n * @param {MediaStream} options.stream - The media stream containing the audio track.\r\n * @param {StreamSuccessAudioParameters} options.parameters - The parameters required for setting up the audio stream.\r\n * @param {Socket} options.parameters.socket - The socket connection for real-time communication.\r\n * @param {Participant[]} options.parameters.participants - The list of participants in the session.\r\n * @param {MediaStream | null} options.parameters.localStream - The local media stream that includes video and audio tracks.\r\n * @param {boolean} options.parameters.transportCreated - Indicates if the audio transport has been created.\r\n * @param {boolean} options.parameters.transportCreatedAudio - Indicates if the audio transport has been created.\r\n * @param {boolean} options.parameters.audioAlreadyOn - Indicates if the audio is already active.\r\n * @param {boolean} options.parameters.micAction - Indicates the microphone action state.\r\n * @param {ProducerOptions} options.parameters.audioParams - The current audio parameters for the producer.\r\n * @param {MediaStream | null} options.parameters.localStreamAudio - The local audio stream.\r\n * @param {string} options.parameters.defAudioID - The default audio device ID for the stream.\r\n * @param {string} options.parameters.userDefaultAudioInputDevice - The user default audio input device.\r\n * @param {ProducerOptions} options.parameters.params - Additional parameters for the producer.\r\n * @param {ProducerOptions} [options.parameters.audioParamse] - Additional audio parameters.\r\n * @param {ProducerOptions} options.parameters.aParams - Producer parameters for the audio.\r\n * @param {string} options.parameters.hostLabel - The label of the host for this session.\r\n * @param {string} options.parameters.islevel - The participant's level (e.g., admin, regular user).\r\n * @param {string} options.parameters.member - The member name for identification.\r\n * @param {boolean} options.parameters.updateMainWindow - Indicates if the main window needs to be updated.\r\n * @param {boolean} options.parameters.lock_screen - Indicates if the screen is locked for participants.\r\n * @param {boolean} options.parameters.shared - Indicates if the screen is currently shared.\r\n * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video stream is currently active.\r\n * @param {ShowAlert} [options.parameters.showAlert] - Optional function to show alert messages.\r\n * @param {Function} options.parameters.updateParticipants - Function to update the list of participants.\r\n * @param {Function} options.parameters.updateTransportCreated - Function to update the audio transport created status.\r\n * @param {Function} options.parameters.updateTransportCreatedAudio - Function to update the audio transport created status.\r\n * @param {Function} options.parameters.updateAudioAlreadyOn - Function to update the audio active status.\r\n * @param {Function} options.parameters.updateMicAction - Function to update the microphone action state.\r\n * @param {Function} options.parameters.updateAudioParams - Function to update the audio parameters.\r\n * @param {Function} options.parameters.updateLocalStream - Function to update the local stream.\r\n * @param {Function} options.parameters.updateLocalStreamAudio - Function to update the local audio stream.\r\n * @param {Function} options.parameters.updateDefAudioID - Function to update the default audio device ID.\r\n * @param {Function} options.parameters.updateUserDefaultAudioInputDevice - Function to update the default audio input device.\r\n * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window status.\r\n * @param {Function} options.parameters.createSendTransport - Function to create a send transport for audio.\r\n * @param {Function} options.parameters.connectSendTransportAudio - Function to connect the send transport for audio.\r\n * @param {Function} options.parameters.resumeSendTransportAudio - Function to resume the send transport for audio.\r\n * @param {Function} options.parameters.prepopulateUserMedia - Function to prepopulate user media based on current settings.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the audio streaming setup is complete.\r\n *\r\n * @throws {Error} Throws an error if there is an issue during the audio stream setup.\r\n *\r\n * @example\r\n * await streamSuccessAudio({\r\n *   stream: newAudioStream,\r\n *   parameters: {\r\n *     socket: socketInstance,\r\n *     participants: participantList,\r\n *     // other parameters...\r\n *   },\r\n * });\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StreamSuccessAudio {\r\n  /**\r\n   * Handles the successful streaming of audio by setting up the necessary transports and updating the relevant states.\r\n   *\r\n   * @param {Object} options - The options for streaming success audio.\r\n   * @param {MediaStream} options.stream - The media stream containing the audio track.\r\n   * @param {Object} options.parameters - The parameters required for setting up the audio stream.\r\n   * @param {Object} options.parameters.socket - The socket connection.\r\n   * @param {Array} options.parameters.participants - The list of participants.\r\n   * @param {MediaStream} options.parameters.localStream - The local media stream.\r\n   * @param {boolean} options.parameters.transportCreated - Flag indicating if the transport is created.\r\n   * @param {boolean} options.parameters.transportCreatedAudio - Flag indicating if the audio transport is created.\r\n   * @param {boolean} options.parameters.audioAlreadyOn - Flag indicating if the audio is already on.\r\n   * @param {boolean} options.parameters.micAction - Flag indicating the microphone action.\r\n   * @param {Object} options.parameters.audioParams - The audio parameters.\r\n   * @param {MediaStream} options.parameters.localStreamAudio - The local audio stream.\r\n   * @param {string} options.parameters.defAudioID - The default audio device ID.\r\n   * @param {string} options.parameters.userDefaultAudioInputDevice - The user default audio input device.\r\n   * @param {Object} options.parameters.params - Additional parameters.\r\n   * @param {Object} options.parameters.audioParamse - Additional audio parameters.\r\n   * @param {Object} options.parameters.aParams - Additional parameters for audio.\r\n   * @param {string} options.parameters.hostLabel - The label of the host.\r\n   * @param {string} options.parameters.islevel - The level of the user.\r\n   * @param {string} options.parameters.member - The member name.\r\n   * @param {boolean} options.parameters.updateMainWindow - Flag indicating if the main window should be updated.\r\n   * @param {boolean} options.parameters.lock_screen - Flag indicating if the screen is locked.\r\n   * @param {boolean} options.parameters.shared - Flag indicating if the screen is shared.\r\n   * @param {boolean} options.parameters.videoAlreadyOn - Flag indicating if the video is already on.\r\n   * @param {Function} options.parameters.showAlert - Function to show alert messages.\r\n   * @param {Function} options.parameters.updateParticipants - Function to update participants.\r\n   * @param {Function} options.parameters.updateTransportCreated - Function to update transport created flag.\r\n   * @param {Function} options.parameters.updateTransportCreatedAudio - Function to update audio transport created flag.\r\n   * @param {Function} options.parameters.updateAudioAlreadyOn - Function to update audio already on flag.\r\n   * @param {Function} options.parameters.updateMicAction - Function to update microphone action flag.\r\n   * @param {Function} options.parameters.updateAudioParams - Function to update audio parameters.\r\n   * @param {Function} options.parameters.updateLocalStream - Function to update local stream.\r\n   * @param {Function} options.parameters.updateLocalStreamAudio - Function to update local audio stream.\r\n   * @param {Function} options.parameters.updateDefAudioID - Function to update default audio device ID.\r\n   * @param {Function} options.parameters.updateUserDefaultAudioInputDevice - Function to update user default audio input device.\r\n   * @param {Function} options.parameters.updateUpdateMainWindow - Function to update main window flag.\r\n   * @param {Function} options.parameters.createSendTransport - Function to create send transport.\r\n   * @param {Function} options.parameters.connectSendTransportAudio - Function to connect send transport audio.\r\n   * @param {Function} options.parameters.resumeSendTransportAudio - Function to resume send transport audio.\r\n   * @param {Function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\r\n   * @returns {Promise<void>} A promise that resolves when the audio streaming setup is complete.\r\n   */\r\n\r\n  async streamSuccessAudio({ stream, parameters }: StreamSuccessAudioOptions): Promise<void> {\r\n    let {\r\n      socket,\r\n      participants,\r\n      localStream,\r\n      transportCreated,\r\n      transportCreatedAudio,\r\n      audioAlreadyOn,\r\n      micAction,\r\n      audioParams,\r\n      localStreamAudio,\r\n      defAudioID,\r\n      userDefaultAudioInputDevice,\r\n      params,\r\n      audioParamse,\r\n      aParams,\r\n      hostLabel,\r\n      islevel,\r\n      member,\r\n      updateMainWindow,\r\n      lock_screen,\r\n      shared,\r\n      videoAlreadyOn,\r\n      showAlert,\r\n\r\n      // update functions\r\n      updateParticipants,\r\n      updateTransportCreated,\r\n      updateTransportCreatedAudio,\r\n      updateAudioAlreadyOn,\r\n      updateMicAction,\r\n      updateAudioParams,\r\n      updateLocalStream,\r\n      updateLocalStreamAudio,\r\n      updateDefAudioID,\r\n      updateUserDefaultAudioInputDevice,\r\n      updateUpdateMainWindow,\r\n\r\n      // mediasfu functions\r\n      createSendTransport,\r\n      connectSendTransportAudio,\r\n      resumeSendTransportAudio,\r\n      prepopulateUserMedia,\r\n    } = parameters;\r\n\r\n    localStreamAudio = stream;\r\n    updateLocalStreamAudio(localStreamAudio);\r\n\r\n    // Add the audio stream track to the localStream\r\n    if (localStream == null) {\r\n      localStream = new MediaStream([localStreamAudio.getAudioTracks()[0]]);\r\n      updateLocalStream(localStream);\r\n    } else {\r\n      localStream.addTrack(localStreamAudio.getAudioTracks()[0]);\r\n      updateLocalStream(localStream);\r\n    }\r\n\r\n    const audioTracked = localStream.getAudioTracks()[0];\r\n    defAudioID = audioTracked.getSettings().deviceId || '';\r\n    userDefaultAudioInputDevice = defAudioID;\r\n\r\n    // Update the state variables\r\n    updateDefAudioID(defAudioID);\r\n    updateUserDefaultAudioInputDevice(userDefaultAudioInputDevice);\r\n\r\n    try {\r\n      params = aParams;\r\n      audioParamse = { ...params };\r\n\r\n      audioParams = { track: localStream.getAudioTracks()[0], ...audioParamse };\r\n      updateAudioParams(audioParams);\r\n\r\n      // Create transport if not created else connect transport\r\n      if (!transportCreated) {\r\n        try {\r\n          await createSendTransport({\r\n            parameters: {\r\n              ...parameters,\r\n              audioParams: audioParams,\r\n            },\r\n            option: 'audio',\r\n          });\r\n        } catch (error) {\r\n          console.error('Error creating send transport:', error);\r\n        }\r\n      } else {\r\n        if (!transportCreatedAudio) {\r\n          await connectSendTransportAudio({\r\n            audioParams,\r\n            parameters,\r\n          });\r\n        } else {\r\n          await resumeSendTransportAudio({ parameters });\r\n        }\r\n      }\r\n    } catch (error: any) {\r\n      showAlert?.({\r\n        message: error.message,\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n    }\r\n\r\n    // Update the participants array to reflect the change\r\n    audioAlreadyOn = true;\r\n    updateAudioAlreadyOn(audioAlreadyOn);\r\n\r\n    if (micAction) {\r\n      micAction = false;\r\n      updateMicAction(micAction);\r\n    }\r\n\r\n    participants.forEach((participant: any) => {\r\n      if (participant.socketId == socket.id && participant.name == member) {\r\n        participant.muted = false;\r\n      }\r\n    });\r\n    updateParticipants(participants);\r\n\r\n    // Update the transport created state\r\n    transportCreated = true;\r\n    transportCreatedAudio = true;\r\n    updateTransportCreated(transportCreated);\r\n    updateTransportCreatedAudio(transportCreatedAudio);\r\n\r\n    // Reupdate screen display if host\r\n    if (videoAlreadyOn == false && islevel == '2') {\r\n      if (!lock_screen && !shared) {\r\n        updateMainWindow = true;\r\n        updateUpdateMainWindow(updateMainWindow);\r\n        await prepopulateUserMedia({ name: hostLabel, parameters });\r\n        updateMainWindow = false;\r\n        updateUpdateMainWindow(updateMainWindow);\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Producer, ProducerCodecOptions, ProducerOptions } from 'mediasoup-client/lib/types';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  PrepopulateUserMediaParameters,\r\n  PrepopulateUserMediaType,\r\n  CreateSendTransportParameters,\r\n  CreateSendTransportType,\r\n  ConnectSendTransportAudioParameters,\r\n  ConnectSendTransportAudioType,\r\n  SleepType,\r\n} from '../@types/types';\r\n\r\n/**\r\n * Handles the success of switching audio devices in a streaming context.\r\n * @async\r\n * @function\r\n * @param {Object} parameters - The parameters object containing necessary variables.\r\n * @param {MediaStream} stream - The new MediaStream with the switched audio device.\r\n */\r\nexport interface StreamSuccessAudioSwitchParameters extends PrepopulateUserMediaParameters, CreateSendTransportParameters, ConnectSendTransportAudioParameters {\r\n  audioProducer: Producer | null;\r\n  localAudioProducer?: Producer | null;\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n  roomName: string;\r\n  localStream: MediaStream | null;\r\n  localStreamAudio: MediaStream | null;\r\n  audioParams: ProducerOptions;\r\n  audioPaused: boolean;\r\n  audioAlreadyOn: boolean;\r\n  transportCreated: boolean;\r\n  localTransportCreated?: boolean;\r\n  audioParamse?: ProducerCodecOptions;\r\n  defAudioID: string;\r\n  userDefaultAudioInputDevice: string;\r\n  hostLabel: string;\r\n  updateMainWindow: boolean;\r\n  videoAlreadyOn: boolean;\r\n  islevel: string;\r\n  lock_screen: boolean;\r\n  shared: boolean;\r\n\r\n  updateAudioProducer: (audioProducer: Producer | null) => void;\r\n  updateLocalAudioProducer?: (localAudioProducer: Producer | null) => void;\r\n  updateLocalStream: (localStream: MediaStream | null) => void;\r\n  updateAudioParams: (audioParams: ProducerOptions) => void;\r\n  updateDefAudioID: (defAudioID: string) => void;\r\n  updateUserDefaultAudioInputDevice: (userDefaultAudioInputDevice: string) => void;\r\n  updateUpdateMainWindow: (updateMainWindow: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  sleep: SleepType;\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n  createSendTransport: CreateSendTransportType;\r\n  connectSendTransportAudio: ConnectSendTransportAudioType;\r\n\r\n  getUpdatedAllParams: () => StreamSuccessAudioSwitchParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface StreamSuccessAudioSwitchOptions {\r\n  stream: MediaStream;\r\n  parameters: StreamSuccessAudioSwitchParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type StreamSuccessAudioSwitchType = (\r\n  options: StreamSuccessAudioSwitchOptions,\r\n) => Promise<void>;\r\n\r\n/**\r\n * Handles the switching of the audio stream upon successful stream connection.\r\n *\r\n * @param {StreamSuccessAudioSwitchOptions} options - The options for the audio stream success switch.\r\n * @param {MediaStream} options.stream - The new media stream containing the audio track.\r\n * @param {Object} options.parameters - The parameters required for setting up the audio stream.\r\n * @param {Producer} options.parameters.audioProducer - The current audio producer.\r\n * @param {Producer} options.parameters.localAudioProducer - The local audio producer.\r\n * @param {Socket} options.parameters.socket - The socket connection for communication.\r\n * @param {Socket} options.parameters.localSocket - The local socket connection for communication.\r\n * @param {string} options.parameters.roomName - The name of the room.\r\n * @param {MediaStream | null} options.parameters.localStream - The local media stream.\r\n * @param {MediaStream | null} options.parameters.localStreamAudio - The local audio stream.\r\n * @param {ProducerOptions} options.parameters.audioParams - The audio parameters.\r\n * @param {boolean} options.parameters.audioPaused - Indicates if the audio is paused.\r\n * @param {boolean} options.parameters.audioAlreadyOn - Indicates if the audio is already on.\r\n * @param {boolean} options.parameters.transportCreated - Indicates if the transport is created.\r\n * @param {ProducerCodecOptions} options.parameters.audioParamse - Additional audio parameters.\r\n * @param {string} options.parameters.defAudioID - The default audio device ID.\r\n * @param {string} options.parameters.userDefaultAudioInputDevice - The user default audio input device.\r\n * @param {string} options.parameters.hostLabel - The label of the host.\r\n * @param {boolean} options.parameters.updateMainWindow - Indicates if the main window should be updated.\r\n * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is already on.\r\n * @param {string} options.parameters.islevel - The level of the participant.\r\n * @param {boolean} options.parameters.lock_screen - Indicates if the screen is locked.\r\n * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\r\n * @param {Function} options.parameters.updateAudioProducer - Function to update the audio producer.\r\n * @param {Function} options.parameters.updateLocalAudioProducer - Function to update the local audio producer.\r\n * @param {Function} options.parameters.updateLocalStream - Function to update the local stream.\r\n * @param {Function} options.parameters.updateAudioParams - Function to update the audio parameters.\r\n * @param {Function} options.parameters.updateDefAudioID - Function to update the default audio device ID.\r\n * @param {Function} options.parameters.updateUserDefaultAudioInputDevice - Function to update the user default audio input device.\r\n * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window.\r\n * @param {Function} options.parameters.sleep - Function to pause execution for a specified time.\r\n * @param {Function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\r\n * @param {Function} options.parameters.createSendTransport - Function to create a send transport.\r\n * @param {Function} options.parameters.connectSendTransportAudio - Function to connect the send transport for audio.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the audio stream switch is complete.\r\n *\r\n * @example\r\n * const options = {\r\n *   stream: newAudioStream, // MediaStream object containing the new audio track\r\n *   parameters: {\r\n *     audioProducer: currentAudioProducer,\r\n *     localAudioProducer: localAudioProducerInstance,\r\n *     localSocket: localSocketInstance,\r\n *     socket: socketInstance,\r\n *     roomName: \"Room1\",\r\n *     localStream: null,\r\n *     localStreamAudio: null,\r\n *     audioParams: audioProducerOptions,\r\n *     audioPaused: false,\r\n *     audioAlreadyOn: true,\r\n *     transportCreated: false,\r\n *     audioParamse: additionalAudioParams,\r\n *     defAudioID: \"default-audio-device-id\",\r\n *     userDefaultAudioInputDevice: \"user-input-device-id\",\r\n *     hostLabel: \"Host\",\r\n *     islevel: \"1\",\r\n *     videoAlreadyOn: false,\r\n *     lock_screen: false,\r\n *     shared: false,\r\n *     updateAudioProducer: updateAudioProducerFunction,\r\n *     updateLocalAudioProducer: updateLocalAudioProducerFunction,\r\n *     updateLocalStream: updateLocalStreamFunction,\r\n *     updateAudioParams: updateAudioParamsFunction,\r\n *     updateDefAudioID: updateDefAudioIDFunction,\r\n *     updateUserDefaultAudioInputDevice: updateUserDefaultAudioInputDeviceFunction,\r\n *     updateUpdateMainWindow: updateMainWindowFunction,\r\n *     sleep: sleepFunction,\r\n *     prepopulateUserMedia: prepopulateUserMediaFunction,\r\n *     createSendTransport: createSendTransportFunction,\r\n *     connectSendTransportAudio: connectSendTransportAudioFunction,\r\n *   },\r\n * };\r\n *\r\n * streamSuccessAudioSwitch(options)\r\n *   .then(() => {\r\n *     console.log('Audio stream switched successfully');\r\n *   })\r\n *   .catch(error => {\r\n *     console.error('Error switching audio stream:', error);\r\n *   });\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StreamSuccessAudioSwitch {\r\n\r\n\r\n\r\n\r\n  /**\r\n   * Handles the switching of the audio stream upon successful stream connection.\r\n   *\r\n   * @param {StreamSuccessAudioSwitchOptions} options - The options for the audio stream success switch.\r\n   * @param {MediaStream} options.stream - The new media stream containing the audio track.\r\n   * @param {Object} options.parameters - The parameters required for setting up the audio stream.\r\n   * @param {Producer} options.parameters.audioProducer - The current audio producer.\r\n   * @param {Producer} options.parameters.localAudioProducer - The local audio producer.\r\n   * @param {Socket} options.parameters.socket - The socket connection for communication.\r\n   * @param {Socket} options.parameters.localSocket - The local socket connection for communication.\r\n   * @param {string} options.parameters.roomName - The name of the room.\r\n   * @param {MediaStream | null} options.parameters.localStream - The local media stream.\r\n   * @param {MediaStream | null} options.parameters.localStreamAudio - The local audio stream.\r\n   * @param {ProducerOptions} options.parameters.audioParams - The audio parameters.\r\n   * @param {boolean} options.parameters.audioPaused - Indicates if the audio is paused.\r\n   * @param {boolean} options.parameters.audioAlreadyOn - Indicates if the audio is already on.\r\n   * @param {boolean} options.parameters.transportCreated - Indicates if the transport is created.\r\n   * @param {ProducerCodecOptions} options.parameters.audioParamse - Additional audio parameters.\r\n   * @param {string} options.parameters.defAudioID - The default audio device ID.\r\n   * @param {string} options.parameters.userDefaultAudioInputDevice - The user default audio input device.\r\n   * @param {string} options.parameters.hostLabel - The label of the host.\r\n   * @param {boolean} options.parameters.updateMainWindow - Indicates if the main window should be updated.\r\n   * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is already on.\r\n   * @param {string} options.parameters.islevel - The level of the participant.\r\n   * @param {boolean} options.parameters.lock_screen - Indicates if the screen is locked.\r\n   * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\r\n   * @param {Function} options.parameters.updateAudioProducer - Function to update the audio producer.\r\n   * @param {Function} options.parameters.updateLocalAudioProducer - Function to update the local audio producer.\r\n   * @param {Function} options.parameters.updateLocalStream - Function to update the local stream.\r\n   * @param {Function} options.parameters.updateAudioParams - Function to update the audio parameters.\r\n   * @param {Function} options.parameters.updateDefAudioID - Function to update the default audio device ID.\r\n   * @param {Function} options.parameters.updateUserDefaultAudioInputDevice - Function to update the user default audio input device.\r\n   * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window.\r\n   * @param {Function} options.parameters.sleep - Function to pause execution for a specified time.\r\n   * @param {Function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\r\n   * @param {Function} options.parameters.createSendTransport - Function to create a send transport.\r\n   * @param {Function} options.parameters.connectSendTransportAudio - Function to connect the send transport for audio.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the audio stream switch is complete.\r\n   *\r\n   * @example\r\n   * const options = {\r\n   *   stream: newAudioStream, // MediaStream object containing the new audio track\r\n   *   parameters: {\r\n   *     audioProducer: currentAudioProducer,\r\n   *     localAudioProducer: localAudioProducerInstance,\r\n   *     localSocket: localSocketInstance,\r\n   *     socket: socketInstance,\r\n   *     roomName: \"Room1\",\r\n   *     localStream: null,\r\n   *     localStreamAudio: null,\r\n   *     audioParams: audioProducerOptions,\r\n   *     audioPaused: false,\r\n   *     audioAlreadyOn: true,\r\n   *     transportCreated: false,\r\n   *     audioParamse: additionalAudioParams,\r\n   *     defAudioID: \"default-audio-device-id\",\r\n   *     userDefaultAudioInputDevice: \"user-input-device-id\",\r\n   *     hostLabel: \"Host\",\r\n   *     islevel: \"1\",\r\n   *     videoAlreadyOn: false,\r\n   *     lock_screen: false,\r\n   *     shared: false,\r\n   *     updateAudioProducer: updateAudioProducerFunction,\r\n   *     updateLocalAudioProducer: updateLocalAudioProducerFunction,\r\n   *     updateLocalStream: updateLocalStreamFunction,\r\n   *     updateAudioParams: updateAudioParamsFunction,\r\n   *     updateDefAudioID: updateDefAudioIDFunction,\r\n   *     updateUserDefaultAudioInputDevice: updateUserDefaultAudioInputDeviceFunction,\r\n   *     updateUpdateMainWindow: updateMainWindowFunction,\r\n   *     sleep: sleepFunction,\r\n   *     prepopulateUserMedia: prepopulateUserMediaFunction,\r\n   *     createSendTransport: createSendTransportFunction,\r\n   *     connectSendTransportAudio: connectSendTransportAudioFunction,\r\n   *   },\r\n   * };\r\n   *\r\n   * streamSuccessAudioSwitch(options)\r\n   *   .then(() => {\r\n   *     console.log('Audio stream switched successfully');\r\n   *   })\r\n   *   .catch(error => {\r\n   *     console.error('Error switching audio stream:', error);\r\n   *   });\r\n   */\r\n\r\n  async streamSuccessAudioSwitch({\r\n    stream,\r\n    parameters,\r\n  }: StreamSuccessAudioSwitchOptions): Promise<void> {\r\n    let {\r\n      audioProducer,\r\n      localAudioProducer,\r\n      socket,\r\n      localSocket,\r\n      roomName,\r\n      localStream,\r\n      localStreamAudio,\r\n      audioParams,\r\n      audioPaused,\r\n      audioAlreadyOn,\r\n      transportCreated,\r\n      audioParamse,\r\n      defAudioID,\r\n      userDefaultAudioInputDevice,\r\n      hostLabel,\r\n      updateMainWindow,\r\n      videoAlreadyOn,\r\n      islevel,\r\n      lock_screen,\r\n      shared,\r\n      updateAudioProducer,\r\n      updateLocalAudioProducer,\r\n      updateLocalStream,\r\n      updateAudioParams,\r\n      updateDefAudioID,\r\n      updateUserDefaultAudioInputDevice,\r\n      updateUpdateMainWindow,\r\n\r\n      // mediasfu functions\r\n      sleep,\r\n      prepopulateUserMedia,\r\n      createSendTransport,\r\n      connectSendTransportAudio,\r\n    } = parameters;\r\n\r\n    // Get the new default audio device ID\r\n    let newDefAudioID = stream.getAudioTracks()[0].getSettings().deviceId;\r\n\r\n    // Check if the audio device has changed\r\n    if (newDefAudioID != defAudioID) {\r\n      // Close the current audioProducer\r\n      if (audioProducer) {\r\n        audioProducer.close();\r\n        updateAudioProducer(audioProducer);\r\n      }\r\n\r\n      // Emit a pauseProducerMedia event to pause the audio media\r\n      socket.emit('pauseProducerMedia', { mediaTag: 'audio', roomName: roomName, force: true });\r\n\r\n      try {\r\n        if (localSocket && localSocket.id) {\r\n          if (localAudioProducer) {\r\n            localAudioProducer.close();\r\n            if (updateLocalAudioProducer) {\r\n              updateLocalAudioProducer(localAudioProducer);\r\n            }\r\n          }\r\n          localSocket.emit(\"pauseProducerMedia\", {\r\n            mediaTag: \"audio\",\r\n            roomName: roomName,\r\n            force: true,\r\n          });\r\n        }\r\n      } catch {\r\n        // Do nothing\r\n      }\r\n\r\n      // Update the localStreamAudio with the new audio tracks\r\n      localStreamAudio = stream;\r\n\r\n      // If localStream is null, create a new MediaStream with the new audio track\r\n      if (localStream == null) {\r\n        localStream = new MediaStream([localStreamAudio.getAudioTracks()[0]]);\r\n      } else {\r\n        // Remove all existing audio tracks from localStream and add the new audio track\r\n        localStream.getAudioTracks().forEach((track: MediaStreamTrack) => {\r\n          localStream?.removeTrack(track);\r\n        });\r\n        localStream.addTrack(localStreamAudio.getAudioTracks()[0]);\r\n      }\r\n\r\n      // Update localStream\r\n      updateLocalStream(localStream);\r\n\r\n      // Get the new default audio device ID from the new audio track\r\n      const audioTracked = localStream.getAudioTracks()[0];\r\n      defAudioID = audioTracked.getSettings().deviceId ?? '';\r\n      updateDefAudioID(defAudioID);\r\n\r\n      // Update userDefaultAudioInputDevice\r\n      userDefaultAudioInputDevice = defAudioID;\r\n      updateUserDefaultAudioInputDevice(userDefaultAudioInputDevice);\r\n\r\n      // Update audioParams with the new audio track\r\n      audioParams = { track: localStream.getAudioTracks()[0], ...audioParamse };\r\n      updateAudioParams(audioParams);\r\n\r\n      // Sleep for 500 milliseconds\r\n      await sleep({ ms: 500 });\r\n\r\n      // Create a new send transport if not created, otherwise, connect the existing transport\r\n      if (!transportCreated) {\r\n        try {\r\n          await createSendTransport({\r\n            parameters: {\r\n              ...parameters,\r\n              audioParams: audioParams,\r\n            },\r\n            option: 'audio',\r\n          });\r\n        } catch (error) {\r\n          console.error('Error creating send transport:', error);\r\n        }\r\n      } else {\r\n        await connectSendTransportAudio({\r\n          audioParams,\r\n          parameters,\r\n        });\r\n      }\r\n\r\n      // If audio is paused and not already on, pause the audioProducer and emit a pauseProducerMedia event\r\n      if (audioPaused && !audioAlreadyOn) {\r\n        audioProducer?.pause();\r\n        updateAudioProducer(audioProducer);\r\n        socket.emit('pauseProducerMedia', { mediaTag: 'audio', roomName: roomName });\r\n\r\n        try {\r\n          if (localSocket && localSocket.id) {\r\n            localSocket.emit(\"pauseProducerMedia\", {\r\n              mediaTag: \"audio\",\r\n              roomName: roomName,\r\n            });\r\n          }\r\n        } catch {\r\n          // Do nothing\r\n        }\r\n      }\r\n    }\r\n\r\n    // Update the UI based on the participant's level and screen lock status\r\n    if (!videoAlreadyOn && islevel === '2') {\r\n      if (!lock_screen && !shared) {\r\n        // Set updateMainWindow to true, prepopulate user media, and set updateMainWindow back to false\r\n        updateMainWindow = true;\r\n        updateUpdateMainWindow(updateMainWindow);\r\n        await prepopulateUserMedia({ name: hostLabel, parameters });\r\n        updateMainWindow = false;\r\n        updateUpdateMainWindow(updateMainWindow);\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { Socket } from 'socket.io-client';\nimport {\n  SleepType,\n  CreateSendTransportType,\n  ConnectSendTransportScreenType,\n  DisconnectSendTransportScreenType,\n  StopShareScreenType,\n  ReorderStreamsType,\n  PrepopulateUserMediaType,\n  RePortType,\n  ShowAlert,\n  CreateSendTransportParameters,\n  ConnectSendTransportScreenParameters,\n  DisconnectSendTransportScreenParameters,\n  StopShareScreenParameters,\n  ReorderStreamsParameters,\n  PrepopulateUserMediaParameters,\n  EventType,\n} from '../@types/types';\n\nexport interface StreamSuccessScreenParameters\n  extends CreateSendTransportParameters,\n    ConnectSendTransportScreenParameters,\n    DisconnectSendTransportScreenParameters,\n    StopShareScreenParameters,\n    ReorderStreamsParameters,\n    PrepopulateUserMediaParameters {\n  socket: Socket;\n  transportCreated: boolean;\n  localStreamScreen: MediaStream | null;\n  screenAlreadyOn: boolean;\n  screenAction: boolean;\n  transportCreatedScreen: boolean;\n  hostLabel: string;\n  eventType: EventType;\n  showAlert?: ShowAlert;\n  annotateScreenStream: boolean;\n  shared: boolean;\n\n  updateTransportCreatedScreen: (transportCreatedScreen: boolean) => void;\n  updateScreenAlreadyOn: (screenAlreadyOn: boolean) => void;\n  updateScreenAction: (screenAction: boolean) => void;\n  updateTransportCreated: (transportCreated: boolean) => void;\n  updateLocalStreamScreen: (localStreamScreen: MediaStream | null) => void;\n  updateShared: (shared: boolean) => void;\n  updateIsScreenboardModalVisible: (isVisible: boolean) => void;\n\n  // mediasfu functions\n  sleep: SleepType;\n  createSendTransport: CreateSendTransportType;\n  connectSendTransportScreen: ConnectSendTransportScreenType;\n  disconnectSendTransportScreen: DisconnectSendTransportScreenType;\n  stopShareScreen: StopShareScreenType;\n  reorderStreams: ReorderStreamsType;\n  prepopulateUserMedia: PrepopulateUserMediaType;\n  rePort: RePortType;\n\n  getUpdatedAllParams: () => StreamSuccessScreenParameters;\n  [key: string]: any;\n}\n\nexport interface StreamSuccessScreenOptions {\n  stream: MediaStream;\n  parameters: StreamSuccessScreenParameters;\n}\n\n// Export the type definition for the function\nexport type StreamSuccessScreenType = (options: StreamSuccessScreenOptions) => Promise<void>;\n\n/**\n * Handles the successful initiation of screen sharing.\n *\n * This method sets up the necessary transport connections for screen sharing,\n * updates relevant application states, and notifies participants of the screen\n * sharing status.\n *\n * @param {StreamSuccessScreenOptions} options - The options for the screen sharing success handler.\n * @param {MediaStream} options.stream - The media stream to be shared.\n * @param {StreamSuccessScreenParameters} options.parameters - The parameters required for screen sharing.\n * @param {Socket} options.parameters.socket - The socket instance for real-time communication.\n * @param {boolean} options.parameters.transportCreated - Flag indicating if the transport is already created.\n * @param {MediaStream | null} options.parameters.localStreamScreen - The local screen media stream.\n * @param {boolean} options.parameters.screenAlreadyOn - Flag indicating if the screen is already being shared.\n * @param {boolean} options.parameters.screenAction - Flag indicating if the screen share action is requested.\n * @param {boolean} options.parameters.transportCreatedScreen - Flag indicating if the screen transport is created.\n * @param {string} options.parameters.hostLabel - The label of the host for this session.\n * @param {string} options.parameters.eventType - The type of event (e.g., conference).\n * @param {ShowAlert} [options.parameters.showAlert] - Optional function to show alert messages.\n * @param {boolean} options.parameters.annotateScreenStream - Flag indicating if screen annotation is enabled.\n * @param {Function} options.parameters.updateTransportCreatedScreen - Function to update the screen transport creation state.\n * @param {Function} options.parameters.updateScreenAlreadyOn - Function to update the screen sharing state.\n * @param {Function} options.parameters.updateScreenAction - Function to update the screen action state.\n * @param {Function} options.parameters.updateTransportCreated - Function to update the transport creation state.\n * @param {Function} options.parameters.updateLocalStreamScreen - Function to update the local screen stream.\n * @param {Function} options.parameters.updateShared - Function to update the shared state.\n * @param {Function} options.parameters.updateIsScreenboardModalVisible - Function to update the screenboard modal visibility.\n * @param {Function} options.parameters.sleep - Function to pause execution for a specified time.\n * @param {Function} options.parameters.createSendTransport - Function to create a send transport for screen sharing.\n * @param {Function} options.parameters.connectSendTransportScreen - Function to connect the send transport for screen sharing.\n * @param {Function} options.parameters.disconnectSendTransportScreen - Function to disconnect the send transport for screen sharing.\n * @param {Function} options.parameters.stopShareScreen - Function to stop the screen sharing process.\n * @param {Function} options.parameters.reorderStreams - Function to reorder streams based on current state.\n * @param {Function} options.parameters.prepopulateUserMedia - Function to prepopulate user media based on current settings.\n * @param {Function} options.parameters.rePort - Function to reinitialize ports if needed.\n *\n * @returns {Promise<void>} A promise that resolves when the screen sharing setup is complete.\n *\n * @throws {Error} Throws an error if there is an issue during the screen sharing setup.\n *\n * @example\n * await streamSuccessScreen({\n *   stream: newScreenStream,\n *   parameters: {\n *     socket: socketInstance,\n *     localStreamScreen: null,\n *     // other parameters...\n *   },\n * });\n */\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class StreamSuccessScreen {\n  /**\n   * Handles the successful initiation of screen sharing.\n   *\n   * @param {StreamSuccessScreenOptions} options - The options for the screen sharing success handler.\n   * @param {MediaStream} options.stream - The media stream to be shared.\n   * @param {Object} options.parameters - The parameters required for screen sharing.\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\n   * @param {Socket} options.parameters.socket - The socket instance for communication.\n   * @param {boolean} options.parameters.transportCreated - Flag indicating if the transport is already created.\n   * @param {MediaStream} options.parameters.localStreamScreen - The local screen media stream.\n   * @param {boolean} options.parameters.screenAlreadyOn - Flag indicating if the screen is already being shared.\n   * @param {boolean} options.parameters.screenAction - Flag indicating if the screen share action is requested.\n   * @param {boolean} options.parameters.transportCreatedScreen - Flag indicating if the screen transport is created.\n   * @param {string} options.parameters.hostLabel - The label of the host.\n   * @param {string} options.parameters.eventType - The type of the event (e.g., conference).\n   * @param {Function} options.parameters.showAlert - Function to show alerts.\n   * @param {boolean} options.parameters.annotateScreenStream - Flag indicating if screen annotation is enabled.\n   * @param {Function} options.parameters.updateTransportCreatedScreen - Function to update the screen transport creation state.\n   * @param {Function} options.parameters.updateScreenAlreadyOn - Function to update the screen sharing state.\n   * @param {Function} options.parameters.updateScreenAction - Function to update the screen action state.\n   * @param {Function} options.parameters.updateTransportCreated - Function to update the transport creation state.\n   * @param {Function} options.parameters.updateLocalStreamScreen - Function to update the local screen stream.\n   * @param {Function} options.parameters.updateShared - Function to update the shared state.\n   * @param {Function} options.parameters.updateIsScreenboardModalVisible - Function to update the screenboard modal visibility.\n   * @param {Function} options.parameters.sleep - Function to pause execution for a specified duration.\n   * @param {Function} options.parameters.createSendTransport - Function to create a send transport.\n   * @param {Function} options.parameters.connectSendTransportScreen - Function to connect the send transport for screen sharing.\n   * @param {Function} options.parameters.disconnectSendTransportScreen - Function to disconnect the send transport for screen sharing.\n   * @param {Function} options.parameters.stopShareScreen - Function to stop screen sharing.\n   * @param {Function} options.parameters.reorderStreams - Function to reorder streams.\n   * @param {Function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\n   * @param {Function} options.parameters.rePort - Function to reinitialize ports.\n   *\n   * @returns {Promise<void>} A promise that resolves when the screen sharing setup is complete.\n   */\n  async streamSuccessScreen({ stream, parameters }: StreamSuccessScreenOptions): Promise<void> {\n    let { getUpdatedAllParams } = parameters;\n    parameters = getUpdatedAllParams();\n\n    let {\n      socket,\n      transportCreated,\n      localStreamScreen,\n      screenAlreadyOn,\n      screenAction,\n      transportCreatedScreen,\n      hostLabel,\n      eventType,\n      showAlert,\n      annotateScreenStream,\n\n      // updates for the above\n      updateTransportCreatedScreen,\n      updateScreenAlreadyOn,\n      updateScreenAction,\n      updateTransportCreated,\n      updateLocalStreamScreen,\n      updateShared,\n      updateIsScreenboardModalVisible,\n      sleep,\n\n      // mediasfu functions\n      createSendTransport,\n      connectSendTransportScreen,\n      disconnectSendTransportScreen,\n      stopShareScreen,\n      reorderStreams,\n      prepopulateUserMedia,\n      rePort,\n    } = parameters;\n\n    // Share screen on success\n    localStreamScreen = stream;\n    updateLocalStreamScreen(localStreamScreen);\n\n    try {\n      // Create transport if not created else connect transport\n      if (!transportCreated) {\n        await createSendTransport({\n          option: 'screen',\n          parameters: { ...parameters, localStreamScreen },\n        });\n      } else {\n        await connectSendTransportScreen({\n          stream: localStreamScreen,\n          parameters: { ...parameters, localStreamScreen },\n        });\n      }\n\n      // Alert the socket that you are sharing screen\n      socket.emit('startScreenShare');\n    } catch (error: any) {\n      showAlert?.({\n        message: error.message,\n        type: 'danger',\n        duration: 3000,\n      });\n    }\n\n    // Reupdate the screen display\n    try {\n      updateShared(true);\n      await prepopulateUserMedia({\n        name: hostLabel,\n        parameters: { ...parameters, localStreamScreen, shared: true },\n      });\n    } catch {\n      /* handle error */\n    }\n\n    // Update the participants array to reflect the change\n    screenAlreadyOn = true;\n    updateScreenAlreadyOn(screenAlreadyOn);\n\n    // Reorder streams if required\n    try {\n      if (eventType == 'conference') {\n        await reorderStreams({ add: false, screenChanged: true, parameters });\n        await prepopulateUserMedia({ name: hostLabel, parameters });\n      } else {\n        await reorderStreams({ parameters });\n      }\n    } catch (error) {\n      try {\n        await rePort({ parameters });\n      } catch {\n        /* handle error */\n      }\n    }\n\n    // Handle screen share end\n    localStreamScreen.getVideoTracks()[0].onended = async function () {\n      // Supports both manual and automatic screen share end\n      await disconnectSendTransportScreen({ parameters });\n      await stopShareScreen({ parameters });\n    };\n\n    // If user requested to share screen, update the screenAction state\n    if (screenAction == true) {\n      screenAction = false;\n    }\n    updateScreenAction(screenAction);\n\n    // Update the transport created state\n    transportCreatedScreen = true;\n    transportCreated = true;\n    updateTransportCreatedScreen(transportCreatedScreen);\n    updateTransportCreated(transportCreated);\n\n    // Handle screen annotation modal\n    try {\n      if (annotateScreenStream) {\n        annotateScreenStream = false;\n        updateIsScreenboardModalVisible(true);\n        await sleep({ ms: 500 });\n        updateIsScreenboardModalVisible(false);\n      }\n    } catch (error) {\n      //console.log('Error handling screen annotation:', error);\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\r\nimport { Device, ProducerOptions, Producer, RtpCodecCapability } from 'mediasoup-client/lib/types';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  ConnectSendTransportVideoParameters,\r\n  Participant,\r\n  ShowAlert,\r\n  CreateSendTransportParameters,\r\n  ReorderStreamsParameters,\r\n  SleepType,\r\n  CreateSendTransportType,\r\n  ConnectSendTransportVideoType,\r\n  ReorderStreamsType,\r\n  VParamsType,\r\n  HParamsType,\r\n} from '../@types/types';\r\n\r\nexport interface StreamSuccessVideoParameters\r\n  extends CreateSendTransportParameters,\r\n    ConnectSendTransportVideoParameters,\r\n    ReorderStreamsParameters {\r\n  socket: Socket;\r\n  participants: Participant[];\r\n  localStream: MediaStream | null;\r\n  transportCreated: boolean;\r\n  transportCreatedVideo: boolean;\r\n  videoAlreadyOn: boolean;\r\n  videoAction: boolean;\r\n  videoParams: ProducerOptions;\r\n  localStreamVideo: MediaStream | null;\r\n  defVideoID: string;\r\n  userDefaultVideoInputDevice: string;\r\n  params: ProducerOptions;\r\n  videoParamse?: ProducerOptions;\r\n  islevel: string;\r\n  member: string;\r\n  updateMainWindow: boolean;\r\n  lock_screen: boolean;\r\n  shared: boolean;\r\n  shareScreenStarted: boolean;\r\n  vParams: VParamsType;\r\n  hParams: HParamsType;\r\n  allowed: boolean;\r\n  currentFacingMode: string;\r\n  device: Device | null;\r\n  keepBackground: boolean;\r\n  appliedBackground: boolean;\r\n  videoProducer: Producer | null;\r\n\r\n  // Update functions\r\n  updateTransportCreated: (created: boolean) => void;\r\n  updateTransportCreatedVideo: (created: boolean) => void;\r\n  updateVideoAlreadyOn: (videoOn: boolean) => void;\r\n  updateVideoAction: (videoAction: boolean) => void;\r\n  updateLocalStream: (stream: MediaStream | null) => void;\r\n  updateLocalStreamVideo: (stream: MediaStream | null) => void;\r\n  updateUserDefaultVideoInputDevice: (device: string) => void;\r\n  updateCurrentFacingMode: (mode: string) => void;\r\n  updateDefVideoID: (id: string) => void;\r\n  updateAllowed: (allowed: boolean) => void;\r\n  updateUpdateMainWindow: (updateMainWindow: boolean) => void;\r\n  updateParticipants: (participants: Participant[]) => void;\r\n  updateVideoParams: (params: ProducerOptions) => void;\r\n  updateIsBackgroundModalVisible: (isVisible: boolean) => void;\r\n  updateAutoClickBackground: (autoClick: boolean) => void;\r\n\r\n  showAlert?: ShowAlert;\r\n\r\n  // Media functions\r\n  createSendTransport: CreateSendTransportType;\r\n  connectSendTransportVideo: ConnectSendTransportVideoType;\r\n  reorderStreams: ReorderStreamsType;\r\n  sleep: SleepType;\r\n\r\n  getUpdatedAllParams: () => StreamSuccessVideoParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface StreamSuccessVideoOptions {\r\n  stream: MediaStream;\r\n  parameters: StreamSuccessVideoParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type StreamSuccessVideoType = (options: StreamSuccessVideoOptions) => Promise<void>;\r\n\r\n/**\r\n * Streams a video successfully by managing the local stream, updating parameters, and handling video transport.\r\n *\r\n * This method initiates the video streaming process by updating the local video stream with the new stream,\r\n * creating or connecting to the video transport, and notifying participants of the streaming status.\r\n *\r\n * @param {StreamSuccessVideoOptions} options - The options for streaming the video.\r\n * @param {MediaStream} options.stream - The media stream to be used for the video.\r\n * @param {StreamSuccessVideoParameters} options.parameters - The parameters required for streaming.\r\n * @param {Socket} options.parameters.socket - The socket instance for real-time communication.\r\n * @param {Participant[]} options.parameters.participants - The list of participants in the session.\r\n * @param {MediaStream | null} options.parameters.localStream - The local media stream.\r\n * @param {boolean} options.parameters.transportCreated - Indicates if the transport has already been created.\r\n * @param {boolean} options.parameters.transportCreatedVideo - Indicates if the video transport has been created.\r\n * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is already on.\r\n * @param {boolean} options.parameters.videoAction - Indicates if a video action is being performed.\r\n * @param {ProducerOptions} options.parameters.videoParams - The parameters for the video producer.\r\n * @param {MediaStream | null} options.parameters.localStreamVideo - The local video stream.\r\n * @param {string} options.parameters.defVideoID - The default video device ID.\r\n * @param {string} options.parameters.userDefaultVideoInputDevice - The user's default video input device.\r\n * @param {ProducerOptions} options.parameters.params - Additional parameters for the producer.\r\n * @param {ProducerOptions} options.parameters.videoParamse - Additional parameters for the video.\r\n * @param {string} options.parameters.islevel - The level of the user (e.g., host, participant).\r\n * @param {string} options.parameters.member - The member's name in the session.\r\n * @param {boolean} options.parameters.updateMainWindow - Indicates if the main window should be updated.\r\n * @param {boolean} options.parameters.lock_screen - Indicates if the screen is locked.\r\n * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\r\n * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is already on.\r\n * @param {Function} options.parameters.showAlert - Function to show alert messages.\r\n * @param {Function} options.parameters.updateParticipants - Function to update the participants list.\r\n * @param {Function} options.parameters.updateTransportCreated - Function to update the transport creation state.\r\n * @param {Function} options.parameters.updateTransportCreatedVideo - Function to update the transport creation state.\r\n * @param {Function} options.parameters.updateVideoAlreadyOn - Function to update the video status.\r\n * @param {Function} options.parameters.updateVideoAction - Function to update the video action state.\r\n * @param {Function} options.parameters.updateLocalStream - Function to update the local stream.\r\n * @param {Function} options.parameters.updateLocalStreamVideo - Function to update the local video stream.\r\n * @param {Function} options.parameters.updateUserDefaultVideoInputDevice - Function to update the default video input device.\r\n * @param {Function} options.parameters.updateCurrentFacingMode - Function to update the current facing mode.\r\n * @param {Function} options.parameters.updateDefVideoID - Function to update the default video device ID.\r\n * @param {Function} options.parameters.updateAllowed - Function to update the allowed state.\r\n * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window state.\r\n * @param {Function} options.parameters.createSendTransport - Function to create a send transport for video.\r\n * @param {Function} options.parameters.connectSendTransportVideo - Function to connect the send transport for video.\r\n * @param {Function} options.parameters.resumeSendTransportAudio - Function to resume audio transport.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the video has been successfully streamed.\r\n *\r\n * @throws {Error} Throws an error if there is an issue with streaming the video.\r\n *\r\n * @example\r\n * await streamSuccessVideo({\r\n *   stream: newVideoStream,\r\n *   parameters: {\r\n *     socket: socketInstance,\r\n *     localStream: null,\r\n *     // other parameters...\r\n *   },\r\n * });\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StreamSuccessVideo {\r\n  /**\r\n   * Streams a video successfully by managing the local stream, updating parameters, and handling video transport.\r\n   *\r\n   * @param {StreamSuccessVideoOptions} options - The options for streaming the video.\r\n   * @param {MediaStream} options.stream - The media stream to be used for the video.\r\n   * @param {Object} options.parameters - The parameters required for streaming.\r\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the video has been successfully streamed.\r\n   *\r\n   * @throws Will throw an error if there is an issue with streaming the video.\r\n   */\r\n  streamSuccessVideo = async ({ stream, parameters }: StreamSuccessVideoOptions): Promise<void> => {\r\n    let { getUpdatedAllParams } = parameters;\r\n    parameters = getUpdatedAllParams();\r\n\r\n    try {\r\n      let {\r\n        socket,\r\n        participants,\r\n        localStream,\r\n        transportCreated,\r\n        transportCreatedVideo,\r\n        videoAlreadyOn,\r\n        videoAction,\r\n        videoParams,\r\n        localStreamVideo,\r\n        defVideoID,\r\n        userDefaultVideoInputDevice,\r\n        params,\r\n        videoParamse,\r\n        islevel,\r\n        member,\r\n        updateMainWindow,\r\n        lock_screen,\r\n        shared,\r\n        shareScreenStarted,\r\n        vParams,\r\n        hParams,\r\n        allowed,\r\n        currentFacingMode,\r\n        device,\r\n        keepBackground,\r\n        appliedBackground,\r\n        videoProducer,\r\n\r\n        // update functions\r\n        updateTransportCreated,\r\n        updateTransportCreatedVideo,\r\n        updateVideoAlreadyOn,\r\n        updateVideoAction,\r\n        updateLocalStream,\r\n        updateLocalStreamVideo,\r\n        updateUserDefaultVideoInputDevice,\r\n        updateCurrentFacingMode,\r\n        updateDefVideoID,\r\n        updateAllowed,\r\n        updateUpdateMainWindow,\r\n        updateParticipants,\r\n        updateVideoParams,\r\n        updateIsBackgroundModalVisible,\r\n        updateAutoClickBackground,\r\n\r\n        // mediasfu functions\r\n        createSendTransport,\r\n        connectSendTransportVideo,\r\n        showAlert,\r\n        reorderStreams,\r\n        sleep,\r\n      } = parameters;\r\n\r\n      localStreamVideo = stream;\r\n      updateLocalStreamVideo(localStreamVideo);\r\n\r\n      // Add the video stream track to localStream\r\n      if (localStream == null) {\r\n        localStream = new MediaStream([localStreamVideo.getVideoTracks()[0]]);\r\n        updateLocalStream(localStream);\r\n      } else {\r\n        // Remove all video tracks that are currently in the localStream\r\n        localStream.getVideoTracks().forEach((track: MediaStreamTrack) => {\r\n          localStream?.removeTrack(track);\r\n        });\r\n        // Add the new video track to the localStream\r\n        localStream.addTrack(localStreamVideo.getVideoTracks()[0]);\r\n        updateLocalStream(localStream);\r\n      }\r\n\r\n      // Get the video track settings\r\n      const videoTracked = localStream.getVideoTracks()[0];\r\n      defVideoID = videoTracked.getSettings().deviceId ?? '';\r\n      userDefaultVideoInputDevice = defVideoID;\r\n      currentFacingMode = videoTracked.getSettings().facingMode ?? 'user';\r\n\r\n      // Update the state variables\r\n      if (defVideoID) {\r\n        updateDefVideoID(defVideoID);\r\n      }\r\n      if (userDefaultVideoInputDevice) {\r\n        updateUserDefaultVideoInputDevice(userDefaultVideoInputDevice);\r\n      }\r\n      if (currentFacingMode) {\r\n        updateCurrentFacingMode(currentFacingMode);\r\n      }\r\n\r\n      allowed = true;\r\n      updateAllowed(allowed);\r\n\r\n      try {\r\n        // Apply the video constraints\r\n        if (islevel == '2') {\r\n          if (!shared || !shareScreenStarted) {\r\n            params = hParams;\r\n            videoParamse = { ...params };\r\n          } else {\r\n            params = vParams;\r\n            videoParamse = { ...params };\r\n          }\r\n        } else {\r\n          params = vParams;\r\n          videoParamse = { ...params };\r\n        }\r\n\r\n        // Remove VP9 codec from the video codecs; support only VP8 and H264\r\n        let codec = device?.rtpCapabilities?.codecs?.filter(\r\n          (codec: RtpCodecCapability) =>\r\n            codec.mimeType.toLowerCase() !== 'video/vp9' && codec.kind === 'video',\r\n        );\r\n\r\n        // Create transport if not created else connect transport\r\n        if (codec && codec.length > 0) {\r\n          videoParams = {\r\n            track: localStream.getVideoTracks()[0],\r\n            ...videoParamse,\r\n            codec: codec[0],\r\n          };\r\n        } else {\r\n          throw new Error('No suitable video codec found');\r\n        }\r\n        updateVideoParams(videoParams);\r\n\r\n        if (keepBackground && appliedBackground) {\r\n          videoAlreadyOn = true;\r\n          updateVideoAlreadyOn(videoAlreadyOn);\r\n\r\n          updateAutoClickBackground(true);\r\n          updateIsBackgroundModalVisible(true);\r\n          await sleep({ ms: 500 });\r\n          updateIsBackgroundModalVisible(false);\r\n          updateAutoClickBackground(false);\r\n        } else {\r\n          if (!transportCreated) {\r\n            try {\r\n              await createSendTransport({\r\n                parameters: {\r\n                  ...parameters,\r\n                  videoParams: videoParams,\r\n                },\r\n                option: 'video',\r\n              });\r\n            } catch (error) {\r\n              console.log('Error creating send transport:', error);\r\n            }\r\n          } else {\r\n            try {\r\n              videoProducer?.close();\r\n              await sleep({ ms: 500 });\r\n            } catch {\r\n              /* handle error */\r\n            }\r\n            await connectSendTransportVideo({\r\n              parameters: parameters,\r\n              videoParams: videoParams,\r\n            });\r\n          }\r\n        }\r\n      } catch (error: any) {\r\n        showAlert?.({\r\n          message: error.message,\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n      }\r\n\r\n      // Update the videoAlreadyOn state\r\n      videoAlreadyOn = true;\r\n      updateVideoAlreadyOn(videoAlreadyOn);\r\n\r\n      // If user requested to share video, update the videoAction state\r\n      if (videoAction) {\r\n        videoAction = false;\r\n        updateVideoAction(videoAction);\r\n      }\r\n\r\n      // Update the display screen if host\r\n      if (islevel == '2') {\r\n        updateMainWindow = true;\r\n        updateUpdateMainWindow(updateMainWindow);\r\n      }\r\n\r\n      // Update the participants array to reflect the change\r\n      participants.forEach((participant: any) => {\r\n        if (participant.socketId == socket.id && participant.name == member) {\r\n          participant.videoOn = true;\r\n        }\r\n      });\r\n      updateParticipants(participants);\r\n\r\n      // Update the transport created state\r\n      transportCreatedVideo = true;\r\n      transportCreated = true;\r\n      updateTransportCreated(transportCreated);\r\n      updateTransportCreatedVideo(transportCreatedVideo);\r\n\r\n      // Reupdate the screen display\r\n      if (lock_screen) {\r\n        try {\r\n          await reorderStreams({\r\n            add: true,\r\n            screenChanged: true,\r\n            parameters: { ...parameters, videoAlreadyOn },\r\n          });\r\n        } catch (error) {\r\n          console.log('Error reordering streams with lock screen:', error);\r\n        }\r\n      } else {\r\n        try {\r\n          await reorderStreams({\r\n            add: false,\r\n            screenChanged: true,\r\n            parameters: { ...parameters, videoAlreadyOn },\r\n          });\r\n        } catch (error) {\r\n          console.log('Error reordering streams without lock screen:', error);\r\n        }\r\n      }\r\n    } catch (error: any) {\r\n      const { showAlert } = parameters;\r\n      console.log('Error in streamSuccessVideo:', error);\r\n      showAlert?.({\r\n        message: error.message,\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  ShowAlert,\r\n  StreamSuccessAudioSwitchType,\r\n  RequestPermissionAudioType,\r\n  StreamSuccessAudioSwitchParameters,\r\n} from '../@types/types';\r\n\r\nexport interface SwitchUserAudioParameters extends StreamSuccessAudioSwitchParameters {\r\n  userDefaultAudioInputDevice: string;\r\n  prevAudioInputDevice: string;\r\n  showAlert?: ShowAlert;\r\n  hasAudioPermission: boolean;\r\n  updateUserDefaultAudioInputDevice: (deviceId: string) => void;\r\n\r\n  // mediasfu functions\r\n  streamSuccessAudioSwitch: StreamSuccessAudioSwitchType;\r\n  requestPermissionAudio: RequestPermissionAudioType;\r\n  checkMediaPermission: boolean;\r\n\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface SwitchUserAudioOptions {\r\n  audioPreference: string;\r\n  parameters: SwitchUserAudioParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type SwitchUserAudioType = (options: SwitchUserAudioOptions) => Promise<void>;\r\n\r\n\r\n/**\r\n * Switches the user's audio input device based on the provided audio preference.\r\n *\r\n * This method checks for audio permissions, attempts to access the specified audio input device,\r\n * and updates the application's state accordingly. If the audio input device cannot be accessed,\r\n * it will revert to the previous audio input device.\r\n *\r\n * @param {SwitchUserAudioOptions} options - The options for switching the user's audio input device.\r\n * @param {string} options.audioPreference - The preferred audio input device ID.\r\n * @param {SwitchUserAudioParameters} options.parameters - Additional parameters required for switching the audio input device.\r\n * @param {string} options.parameters.prevAudioInputDevice - The previous audio input device ID.\r\n * @param {Function} options.parameters.showAlert - Function to show alert messages.\r\n * @param {boolean} options.parameters.hasAudioPermission - Flag indicating if the user has granted audio permission.\r\n * @param {Function} options.parameters.updateUserDefaultAudioInputDevice - Function to update the user's default audio input device.\r\n * @param {Function} options.parameters.streamSuccessAudioSwitch - Function to handle successful audio stream switch.\r\n * @param {Function} options.parameters.requestPermissionAudio - Function to request audio permission from the user.\r\n * @param {Function} options.parameters.checkMediaPermission - Function to check if media permission is granted.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the audio input device has been successfully switched.\r\n *\r\n * @throws Will throw an error if the audio input device cannot be accessed or if there is an unexpected error.\r\n *\r\n * @example\r\n * await switchUserAudio({\r\n *   audioPreference: 'new-audio-device-id',\r\n *   parameters: {\r\n *     prevAudioInputDevice: 'previous-device-id',\r\n *     hasAudioPermission: true,\r\n *     updateUserDefaultAudioInputDevice: updateDeviceFunction,\r\n *     // other parameters...\r\n *   },\r\n * });\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SwitchUserAudio {\r\n  /**\r\n   * Switches the user's audio input device based on the provided audio preference.\r\n   *\r\n   * @param {SwitchUserAudioOptions} options - The options for switching the user's audio input device.\r\n   * @param {string} options.audioPreference - The preferred audio input device ID.\r\n   * @param {Object} options.parameters - Additional parameters required for switching the audio input device.\r\n   * @param {string} options.parameters.prevAudioInputDevice - The previous audio input device ID.\r\n   * @param {Function} options.parameters.showAlert - Function to show alert messages.\r\n   * @param {boolean} options.parameters.hasAudioPermission - Flag indicating if the user has granted audio permission.\r\n   * @param {Function} options.parameters.updateUserDefaultAudioInputDevice - Function to update the user's default audio input device.\r\n   * @param {Function} options.parameters.streamSuccessAudioSwitch - Function to handle successful audio stream switch.\r\n   * @param {Function} options.parameters.requestPermissionAudio - Function to request audio permission from the user.\r\n   * @param {Function} options.parameters.checkMediaPermission - Function to check if media permission is granted.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the audio input device has been successfully switched.\r\n   *\r\n   * @throws Will throw an error if the audio input device cannot be accessed or if there is an unexpected error.\r\n   */\r\n  async switchUserAudio({ audioPreference, parameters }: SwitchUserAudioOptions): Promise<void> {\r\n    let {\r\n      userDefaultAudioInputDevice,\r\n      prevAudioInputDevice,\r\n      showAlert,\r\n      hasAudioPermission,\r\n      updateUserDefaultAudioInputDevice,\r\n\r\n      // media functions\r\n      streamSuccessAudioSwitch,\r\n      requestPermissionAudio,\r\n      checkMediaPermission,\r\n    } = parameters;\r\n\r\n    try {\r\n      // Check if audio permission is granted\r\n      if (!hasAudioPermission) {\r\n        if (checkMediaPermission) {\r\n          let statusMic = await requestPermissionAudio();\r\n          if (statusMic !== 'granted') {\r\n            showAlert?.({\r\n              message:\r\n                'Allow access to your microphone or check if your microphone is not being used by another application.',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n\r\n            return;\r\n          }\r\n        }\r\n      }\r\n\r\n      let mediaConstraints: MediaStreamConstraints = {\r\n        audio: {\r\n          deviceId: { exact: audioPreference },\r\n          echoCancellation: false,\r\n          noiseSuppression: false,\r\n          autoGainControl: false,\r\n        },\r\n        video: false,\r\n      };\r\n\r\n      // Get user media with the defined audio constraints\r\n      await navigator.mediaDevices\r\n        .getUserMedia(mediaConstraints)\r\n        .then(async (stream: MediaStream) => {\r\n          await streamSuccessAudioSwitch({ stream, parameters });\r\n        })\r\n        .catch(() => {\r\n          // Handle errors and revert to the previous audio input device\r\n          userDefaultAudioInputDevice = prevAudioInputDevice;\r\n          updateUserDefaultAudioInputDevice(userDefaultAudioInputDevice);\r\n\r\n          showAlert?.({\r\n            message: 'Error switching; the specified microphone could not be accessed.',\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n        });\r\n    } catch (error) {\r\n      // Handle unexpected errors and revert to the previous audio input device\r\n      userDefaultAudioInputDevice = prevAudioInputDevice;\r\n      updateUserDefaultAudioInputDevice(userDefaultAudioInputDevice);\r\n\r\n      showAlert?.({\r\n        message: 'Error switching; the specified microphone could not be accessed.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n    }\r\n  }\r\n}\r\n","// click-video.service.ts\r\nimport { Injectable } from '@angular/core';\r\nimport {\r\n  CheckPermissionType,\r\n  DisconnectSendTransportVideoParameters,\r\n  DisconnectSendTransportVideoType,\r\n  RequestPermissionCameraType,\r\n  ShowAlert,\r\n  StreamSuccessVideoParameters,\r\n  StreamSuccessVideoType,\r\n  VidCons,\r\n} from '../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface ClickVideoParameters\r\n  extends DisconnectSendTransportVideoParameters,\r\n  StreamSuccessVideoParameters {\r\n  checkMediaPermission: boolean;\r\n  hasCameraPermission: boolean;\r\n  videoAlreadyOn: boolean;\r\n  audioOnlyRoom: boolean;\r\n  recordStarted: boolean;\r\n  recordResumed: boolean;\r\n  recordPaused: boolean;\r\n  recordStopped: boolean;\r\n  recordingMediaOptions: string;\r\n  islevel: string;\r\n  youAreCoHost: boolean;\r\n  adminRestrictSetting: boolean;\r\n  videoRequestState: string | null;\r\n  videoRequestTime: number;\r\n  member: string;\r\n  socket: Socket;\r\n  roomName: string;\r\n  userDefaultVideoInputDevice: string;\r\n  currentFacingMode: string;\r\n  vidCons: VidCons;\r\n  frameRate: number;\r\n  videoAction: boolean;\r\n  localStream: MediaStream | null;\r\n  audioSetting: string;\r\n  videoSetting: string;\r\n  screenshareSetting: string;\r\n  chatSetting: string;\r\n  updateRequestIntervalSeconds: number;\r\n\r\n  showAlert?: ShowAlert;\r\n  updateVideoAlreadyOn: (value: boolean) => void;\r\n  updateVideoRequestState: (state: string) => void;\r\n  updateLocalStream: (stream: MediaStream | null) => void;\r\n\r\n  streamSuccessVideo: StreamSuccessVideoType;\r\n  disconnectSendTransportVideo: DisconnectSendTransportVideoType;\r\n  requestPermissionCamera: RequestPermissionCameraType;\r\n  checkPermission: CheckPermissionType;\r\n\r\n  getUpdatedAllParams: () => ClickVideoParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ClickVideoOptions {\r\n  parameters: ClickVideoParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ClickVideoType = (options: ClickVideoOptions) => Promise<void>;\r\n\r\n/**\r\n * Handles the click event to toggle the participant's video on/off and manages video permission requests.\r\n *\r\n * @param {ClickVideoOptions} options - The options for handling the video click event.\r\n * @param {ClickVideoParameters} options.parameters - The parameters required for the video action.\r\n * @param {boolean} options.parameters.checkMediaPermission - Indicates if media permission needs to be checked.\r\n * @param {boolean} options.parameters.hasCameraPermission - Indicates if camera permission has been granted.\r\n * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is currently active.\r\n * @param {boolean} options.parameters.audioOnlyRoom - Indicates if the current room is audio-only.\r\n * @param {boolean} options.parameters.recordStarted - Indicates if recording has started.\r\n * @param {boolean} options.parameters.recordResumed - Indicates if recording has resumed.\r\n * @param {boolean} options.parameters.recordPaused - Indicates if recording is paused.\r\n * @param {boolean} options.parameters.recordStopped - Indicates if recording is stopped.\r\n * @param {string} options.parameters.recordingMediaOptions - The media options for recording (e.g., \"video\", \"audio\").\r\n * @param {string} options.parameters.islevel - The participant's level.\r\n * @param {boolean} options.parameters.youAreCoHost - Indicates if the user is a co-host.\r\n * @param {boolean} options.parameters.adminRestrictSetting - Indicates if there are admin restrictions on video.\r\n * @param {string | null} options.parameters.videoRequestState - State of the video request.\r\n * @param {number} options.parameters.videoRequestTime - Timestamp of the video request.\r\n * @param {string} options.parameters.member - The participant's name.\r\n * @param {Socket} options.parameters.socket - The socket connection used for communication.\r\n * @param {string} options.parameters.roomName - The name of the room where the video is being toggled.\r\n * @param {string} options.parameters.userDefaultVideoInputDevice - The default video input device.\r\n * @param {string} options.parameters.currentFacingMode - The current facing mode of the camera.\r\n * @param {VidCons} options.parameters.vidCons - Video constraints for the stream.\r\n * @param {number} options.parameters.frameRate - Desired frame rate for the video.\r\n * @param {boolean} options.parameters.videoAction - Indicates if a video action is currently taking place.\r\n * @param {MediaStream | null} options.parameters.localStream - The local media stream.\r\n * @param {string} options.parameters.audioSetting - The current audio setting.\r\n * @param {string} options.parameters.videoSetting - The current video setting.\r\n * @param {string} options.parameters.screenshareSetting - The current screenshare setting.\r\n * @param {string} options.parameters.chatSetting - The current chat setting.\r\n * @param {number} options.parameters.updateRequestIntervalSeconds - Interval time for updating request state.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the video action has been handled.\r\n *\r\n * @remarks\r\n * This function checks the current status of the video and handles the logic for starting or stopping the video stream.\r\n * It validates permissions and room settings before allowing the video to be activated or deactivated.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: ClickVideoOptions = {\r\n *   parameters: {\r\n *     checkMediaPermission: true,\r\n *     hasCameraPermission: false,\r\n *     videoAlreadyOn: false,\r\n *     audioOnlyRoom: false,\r\n *     recordStarted: false,\r\n *     recordResumed: false,\r\n *     recordPaused: false,\r\n *     recordStopped: false,\r\n *     recordingMediaOptions: 'video',\r\n *     islevel: '1',\r\n *     youAreCoHost: false,\r\n *     adminRestrictSetting: false,\r\n *     videoRequestState: null,\r\n *     videoRequestTime: 0,\r\n *     member: 'John Doe',\r\n *     socket: socketInstance,\r\n *     roomName: 'myRoom',\r\n *     userDefaultVideoInputDevice: '',\r\n *     currentFacingMode: 'user',\r\n *     vidCons: { width: 1280, height: 720 },\r\n *     frameRate: 30,\r\n *     videoAction: false,\r\n *     localStream: null,\r\n *     audioSetting: 'on',\r\n *     videoSetting: 'on',\r\n *     screenshareSetting: 'off',\r\n *     chatSetting: 'allow',\r\n *     updateRequestIntervalSeconds: 30,\r\n *     showAlert: (alert) => console.log(alert.message),\r\n *     updateVideoAlreadyOn: (status) => console.log(`Video already on: ${status}`),\r\n *     updateVideoRequestState: (state) => console.log(`Video request state: ${state}`),\r\n *     updateLocalStream: (stream) => console.log('Local stream updated'),\r\n *     streamSuccessVideo: streamSuccessFunction,\r\n *     disconnectSendTransportVideo: disconnectFunction,\r\n *     requestPermissionCamera: requestPermissionFunction,\r\n *     checkPermission: checkPermissionFunction,\r\n *     getUpdatedAllParams: () => parameters,\r\n *   },\r\n * };\r\n *\r\n * const clickVideoService = new ClickVideo();\r\n * await clickVideoService.clickVideo(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ClickVideo {\r\n  /**\r\n   * Handles the click event to toggle the participant's video on/off and manages video permission requests.\r\n   *\r\n   * @param {ClickVideoParams} options - The function parameters.\r\n   * @returns {Promise<void>}\r\n   */\r\n\r\n  clickVideo = async ({ parameters }: ClickVideoOptions): Promise<void> => {\r\n    let {\r\n      checkMediaPermission,\r\n      hasCameraPermission,\r\n      videoAlreadyOn,\r\n      audioOnlyRoom,\r\n      recordStarted,\r\n      recordResumed,\r\n      recordPaused,\r\n      recordStopped,\r\n      recordingMediaOptions,\r\n      islevel,\r\n      youAreCoHost,\r\n      adminRestrictSetting,\r\n      videoRequestState,\r\n      videoRequestTime,\r\n      member,\r\n      socket,\r\n      roomName,\r\n      userDefaultVideoInputDevice,\r\n      currentFacingMode,\r\n      vidCons,\r\n      frameRate,\r\n      videoAction,\r\n      localStream,\r\n      audioSetting,\r\n      videoSetting,\r\n      screenshareSetting,\r\n      chatSetting,\r\n      updateRequestIntervalSeconds,\r\n      streamSuccessVideo,\r\n      showAlert,\r\n      updateVideoAlreadyOn,\r\n      updateVideoRequestState,\r\n      updateLocalStream,\r\n      disconnectSendTransportVideo,\r\n      requestPermissionCamera,\r\n      checkPermission,\r\n    } = parameters;\r\n\r\n    if (audioOnlyRoom) {\r\n      showAlert?.({\r\n        message: 'You cannot turn on your camera in an audio only event.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    if (videoAlreadyOn) {\r\n      if (islevel === '2' && (recordStarted || recordResumed)) {\r\n        if (!(recordPaused || recordStopped) && recordingMediaOptions === 'video') {\r\n          showAlert?.({\r\n            message:\r\n              'You cannot turn off your camera while recording video, please pause or stop recording first.',\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n\r\n          return;\r\n        }\r\n      }\r\n\r\n      videoAlreadyOn = false;\r\n      updateVideoAlreadyOn(videoAlreadyOn);\r\n      if (localStream) {\r\n        localStream.getVideoTracks()[0].enabled = false;\r\n      }\r\n      updateLocalStream(localStream);\r\n      await disconnectSendTransportVideo({ parameters });\r\n    } else {\r\n      if (adminRestrictSetting) {\r\n        showAlert?.({\r\n          message: 'You cannot turn on your camera. Access denied by host.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n\r\n        return;\r\n      }\r\n\r\n      let response = 2;\r\n\r\n      if (!videoAction && islevel !== '2' && !youAreCoHost) {\r\n        response = await checkPermission({\r\n          permissionType: 'videoSetting',\r\n          audioSetting,\r\n          videoSetting,\r\n          screenshareSetting,\r\n          chatSetting,\r\n        });\r\n      } else {\r\n        response = 0;\r\n      }\r\n\r\n      if (response === 1) {\r\n        if (videoRequestState === 'pending') {\r\n          showAlert?.({\r\n            message: 'A request is pending. Please wait for the host to respond.',\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n\r\n          return;\r\n        }\r\n\r\n        if (\r\n          videoRequestState === 'rejected' &&\r\n          Date.now() - videoRequestTime < updateRequestIntervalSeconds\r\n        ) {\r\n          showAlert?.({\r\n            message: `A request was rejected. Please wait for ${updateRequestIntervalSeconds} seconds before sending another request.`,\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n\r\n          return;\r\n        }\r\n\r\n        showAlert?.({\r\n          message: 'Request sent to host.',\r\n          type: 'success',\r\n          duration: 3000,\r\n        });\r\n\r\n        videoRequestState = 'pending';\r\n        updateVideoRequestState(videoRequestState);\r\n\r\n        let userRequest = { id: socket.id, name: member, icon: 'fa-video' };\r\n        socket.emit('participantRequest', { userRequest, roomName });\r\n      } else if (response === 2) {\r\n        showAlert?.({\r\n          message: 'You cannot turn on your camera. Access denied by host.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n      } else {\r\n        if (!hasCameraPermission) {\r\n          if (checkMediaPermission) {\r\n            let statusCamera = await requestPermissionCamera();\r\n            if (statusCamera !== 'granted') {\r\n              showAlert?.({\r\n                message:\r\n                  'Allow access to your camera or check if your camera is not being used by another application.',\r\n                type: 'danger',\r\n                duration: 3000,\r\n              });\r\n\r\n              return;\r\n            }\r\n          }\r\n        }\r\n\r\n        let mediaConstraints = {};\r\n        let altMediaConstraints = {};\r\n        if (userDefaultVideoInputDevice) {\r\n          if (vidCons && vidCons.width && vidCons.height) {\r\n            mediaConstraints = {\r\n              video: {\r\n                deviceId: userDefaultVideoInputDevice,\r\n                facingMode: currentFacingMode,\r\n                ...vidCons,\r\n                frameRate: { ideal: frameRate },\r\n              },\r\n              audio: false,\r\n            };\r\n            altMediaConstraints = {\r\n              video: { ...vidCons, frameRate: { ideal: frameRate } },\r\n              audio: false,\r\n            };\r\n          } else {\r\n            mediaConstraints = {\r\n              video: { ...vidCons, frameRate: { ideal: frameRate } },\r\n              audio: false,\r\n            };\r\n            altMediaConstraints = { video: { frameRate: { ideal: frameRate } }, audio: false };\r\n          }\r\n        } else {\r\n          if (vidCons && vidCons.width && vidCons.height) {\r\n            mediaConstraints = {\r\n              video: { ...vidCons, frameRate: { ideal: frameRate } },\r\n              audio: false,\r\n            };\r\n            altMediaConstraints = {\r\n              video: { ...vidCons, frameRate: { ideal: frameRate } },\r\n              audio: false,\r\n            };\r\n          } else {\r\n            mediaConstraints = { video: { frameRate: { ideal: frameRate } }, audio: false };\r\n          }\r\n        }\r\n\r\n        await navigator.mediaDevices\r\n          .getUserMedia(mediaConstraints)\r\n          .then(async (stream: MediaStream) => {\r\n            await streamSuccessVideo({ stream, parameters });\r\n          })\r\n          .catch(async () => {\r\n            await navigator.mediaDevices\r\n              .getUserMedia(altMediaConstraints)\r\n              .then(async (stream: MediaStream) => {\r\n                await streamSuccessVideo({ stream, parameters });\r\n              })\r\n              .catch(async () => {\r\n                //remove frameRate from constraints\r\n                altMediaConstraints = {\r\n                  video: { ...vidCons },\r\n                  audio: false,\r\n                };\r\n                await navigator.mediaDevices\r\n                  .getUserMedia(altMediaConstraints)\r\n                  .then(async (stream) => {\r\n                    await streamSuccessVideo({ stream, parameters });\r\n                  }).catch(() => {\r\n                    showAlert?.({\r\n                      message:\r\n                        'Allow access to your camera or check if your camera is not being used by another application.',\r\n                      type: 'danger',\r\n                      duration: 3000,\r\n                    });\r\n                  });\r\n              });\r\n          });\r\n      }\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ClickVideo, ClickVideoParameters } from '../methods/stream-methods/click-video.service';\r\nimport {\r\n  ShowAlert,\r\n  VidCons,\r\n  RequestPermissionCameraType,\r\n  StreamSuccessVideoType,\r\n  SleepType,\r\n  StreamSuccessVideoParameters,\r\n} from '../@types/types';\r\n\r\nexport interface SwitchUserVideoParameters\r\n  extends StreamSuccessVideoParameters,\r\n    ClickVideoParameters {\r\n  audioOnlyRoom: boolean;\r\n  frameRate: number;\r\n  vidCons: VidCons;\r\n  prevVideoInputDevice: string;\r\n  userDefaultVideoInputDevice: string;\r\n  showAlert?: ShowAlert;\r\n  hasCameraPermission: boolean;\r\n  updateVideoSwitching: (state: boolean) => void;\r\n  updateUserDefaultVideoInputDevice: (deviceId: string) => void;\r\n\r\n  // media functions\r\n  requestPermissionCamera: RequestPermissionCameraType;\r\n  streamSuccessVideo: StreamSuccessVideoType;\r\n  sleep: SleepType;\r\n  checkMediaPermission: boolean;\r\n\r\n  getUpdatedAllParams: () => SwitchUserVideoParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface SwitchUserVideoOptions {\r\n  videoPreference: string;\r\n  checkoff: boolean;\r\n  parameters: SwitchUserVideoParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type SwitchUserVideoType = (options: SwitchUserVideoOptions) => Promise<void>;\r\n\r\n/**\r\n * Switches the user's video input device based on the provided options.\r\n *\r\n * This method checks permissions, enumerates available devices, and updates the\r\n * video stream based on user preferences. It also manages UI updates and alerts.\r\n *\r\n * @param {SwitchUserVideoOptions} options - The options for switching the user's video.\r\n * @param {string} options.videoPreference - The preferred video input device ID.\r\n * @param {boolean} options.checkoff - Flag indicating whether to turn off the video.\r\n * @param {SwitchUserVideoParameters} options.parameters - Additional parameters required for switching the video.\r\n * @param {boolean} options.parameters.audioOnlyRoom - Indicates if the room is audio-only.\r\n * @param {number} options.parameters.frameRate - The desired frame rate for the video.\r\n * @param {Object} options.parameters.vidCons - Video constraints such as width and height.\r\n * @param {string} options.parameters.prevVideoInputDevice - The previous video input device ID.\r\n * @param {Function} options.parameters.showAlert - Function to show alerts to the user.\r\n * @param {boolean} options.parameters.hasCameraPermission - Indicates if the user has camera permission.\r\n * @param {Function} options.parameters.updateVideoSwitching - Function to update video switching state.\r\n * @param {Function} options.parameters.updateUserDefaultVideoInputDevice - Function to update the default video input device.\r\n * @param {Function} options.parameters.requestPermissionCamera - Function to request camera permission.\r\n * @param {Function} options.parameters.streamSuccessVideo - Function to handle successful video stream.\r\n * @param {Function} options.parameters.sleep - Function to pause execution for a specified duration.\r\n * @param {Function} options.parameters.checkMediaPermission - Function to check media permissions.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the video input device has been successfully switched.\r\n *\r\n * @throws {Error} Throws an error if switching the video input device fails.\r\n *\r\n * @example\r\n * await switchUserVideo({\r\n *   videoPreference: 'user',\r\n *   checkoff: false,\r\n *   parameters: {\r\n *     audioOnlyRoom: false,\r\n *     frameRate: 30,\r\n *     vidCons: { width: 1280, height: 720 },\r\n *     prevVideoInputDevice: 'device-id',\r\n *     showAlert: myShowAlertFunction,\r\n *     hasCameraPermission: true,\r\n *     updateVideoSwitching: myUpdateFunction,\r\n *     updateUserDefaultVideoInputDevice: myUpdateFunction,\r\n *     requestPermissionCamera: myRequestPermissionFunction,\r\n *     streamSuccessVideo: myStreamSuccessFunction,\r\n *     sleep: mySleepFunction,\r\n *     checkMediaPermission: true,\r\n *   },\r\n * });\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SwitchUserVideo {\r\n  constructor(private ClickVideoService: ClickVideo) {}\r\n\r\n  /**\r\n   * Switches the user's video input device based on the provided options.\r\n   *\r\n   * @param {SwitchUserVideoOptions} options - The options for switching the user's video.\r\n   * @param {string} options.videoPreference - The preferred video input device ID.\r\n   * @param {boolean} options.checkoff - Flag indicating whether to turn off the video.\r\n   * @param {Object} options.parameters - Additional parameters required for switching the video.\r\n   * @param {boolean} options.parameters.audioOnlyRoom - Indicates if the room is audio-only.\r\n   * @param {number} options.parameters.frameRate - The desired frame rate for the video.\r\n   * @param {Object} options.parameters.vidCons - Video constraints such as width and height.\r\n   * @param {string} options.parameters.prevVideoInputDevice - The previous video input device ID.\r\n   * @param {Function} options.parameters.showAlert - Function to show alerts to the user.\r\n   * @param {boolean} options.parameters.hasCameraPermission - Indicates if the user has camera permission.\r\n   * @param {Function} options.parameters.updateVideoSwitching - Function to update video switching state.\r\n   * @param {Function} options.parameters.updateUserDefaultVideoInputDevice - Function to update the default video input device.\r\n   * @param {Function} options.parameters.requestPermissionCamera - Function to request camera permission.\r\n   * @param {Function} options.parameters.streamSuccessVideo - Function to handle successful video stream.\r\n   * @param {Function} options.parameters.sleep - Function to pause execution for a specified duration.\r\n   * @param {Function} options.parameters.checkMediaPermission - Function to check media permissions.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the video input device has been switched.\r\n   *\r\n   * @throws Will throw an error if switching the video input device fails.\r\n   */\r\n  switchUserVideo = async ({\r\n    videoPreference,\r\n    checkoff,\r\n    parameters,\r\n  }: {\r\n    videoPreference: string;\r\n    checkoff: boolean;\r\n    parameters: any;\r\n  }): Promise<void> => {\r\n    let {\r\n      audioOnlyRoom,\r\n      frameRate,\r\n      vidCons,\r\n      prevVideoInputDevice,\r\n      userDefaultVideoInputDevice,\r\n      showAlert,\r\n      hasCameraPermission,\r\n      updateVideoSwitching,\r\n      updateUserDefaultVideoInputDevice,\r\n\r\n      // mediasfu functions\r\n      requestPermissionCamera,\r\n      streamSuccessVideo,\r\n      sleep,\r\n      checkMediaPermission,\r\n    } = parameters;\r\n\r\n    try {\r\n      // Check if it's an audio-only room\r\n      if (audioOnlyRoom) {\r\n        showAlert?.({\r\n          message: 'You cannot turn on your camera in an audio-only event.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n\r\n        return;\r\n      }\r\n\r\n      // If checkoff is not true, trigger a click on the video button to turn off the video\r\n      if (!checkoff) {\r\n        await this.ClickVideoService.clickVideo({ parameters });\r\n        await updateVideoSwitching(true);\r\n        await sleep(500);\r\n        await updateVideoSwitching(false);\r\n      }\r\n\r\n      // Check camera permission\r\n      if (!hasCameraPermission) {\r\n        if (checkMediaPermission) {\r\n          let statusCamera = await requestPermissionCamera();\r\n          if (statusCamera !== 'granted') {\r\n            showAlert?.({\r\n              message:\r\n                'Allow access to your camera or check if your camera is not being used by another application.',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n\r\n            return;\r\n          }\r\n        }\r\n      }\r\n\r\n      let mediaConstraints: any = {};\r\n\r\n      if (vidCons && vidCons.width && vidCons.height) {\r\n        mediaConstraints = {\r\n          video: {\r\n            deviceId: { exact: videoPreference },\r\n            ...vidCons,\r\n            frameRate: { ideal: frameRate },\r\n          },\r\n          audio: false,\r\n        };\r\n      } else {\r\n        mediaConstraints = {\r\n          video: {\r\n            deviceId: { exact: videoPreference },\r\n            frameRate: { ideal: frameRate },\r\n          },\r\n          audio: false,\r\n        };\r\n      }\r\n\r\n      // Get user media with the defined constraints\r\n      await navigator.mediaDevices\r\n        .getUserMedia(mediaConstraints)\r\n        .then(async (stream: MediaStream) => {\r\n          await streamSuccessVideo({ stream, parameters });\r\n        })\r\n        .catch(async () => {\r\n          // Handle errors and revert to the previous video input device\r\n          userDefaultVideoInputDevice = prevVideoInputDevice;\r\n          updateUserDefaultVideoInputDevice(userDefaultVideoInputDevice);\r\n\r\n          showAlert?.({\r\n            message:\r\n              'Error switching; not accessible, might need to turn off your video and turn it back on after switching.',\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n        });\r\n    } catch (error) {\r\n      // Handle unexpected errors and revert to the previous video input device\r\n      userDefaultVideoInputDevice = prevVideoInputDevice;\r\n      updateUserDefaultVideoInputDevice(userDefaultVideoInputDevice);\r\n\r\n      showAlert?.({\r\n        message:\r\n          'Error switching; not accessible, might need to turn off your video and turn it back on after switching.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ClickVideo, ClickVideoParameters } from '../methods/stream-methods/click-video.service';\r\nimport {\r\n  ShowAlert,\r\n  VidCons,\r\n  RequestPermissionCameraType,\r\n  StreamSuccessVideoType,\r\n  SleepType,\r\n  StreamSuccessVideoParameters,\r\n} from '../@types/types';\r\n\r\nexport interface SwitchUserVideoAltParameters\r\n  extends StreamSuccessVideoParameters,\r\n    ClickVideoParameters {\r\n  audioOnlyRoom: boolean;\r\n  frameRate: number;\r\n  vidCons: VidCons;\r\n  showAlert?: ShowAlert;\r\n  hasCameraPermission: boolean;\r\n  updateVideoSwitching: (state: boolean) => void;\r\n  updateCurrentFacingMode: (mode: string) => void;\r\n\r\n  // mediasfu functions\r\n  requestPermissionCamera: RequestPermissionCameraType;\r\n  streamSuccessVideo: StreamSuccessVideoType;\r\n  sleep: SleepType;\r\n  checkMediaPermission: boolean;\r\n  getUpdatedAllParams: () => SwitchUserVideoAltParameters;\r\n\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface SwitchUserVideoAltOptions {\r\n  videoPreference: string;\r\n  checkoff: boolean;\r\n  parameters: SwitchUserVideoAltParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type SwitchUserVideoAltType = (options: SwitchUserVideoAltOptions) => Promise<void>;\r\n\r\n/**\r\n * Switches the user's video stream based on the provided video preference and other parameters.\r\n *\r\n * This method manages the process of switching the user's video input device,\r\n * checking permissions, and updating the relevant application state.\r\n * If the specified device is not accessible, it attempts to find an alternative.\r\n *\r\n * @param {SwitchUserVideoAltOptions} options - The options for switching the user's video.\r\n * @param {string} options.videoPreference - The preferred video input device ID.\r\n * @param {boolean} options.checkoff - A flag indicating whether to turn off the video before switching.\r\n * @param {SwitchUserVideoAltParameters} options.parameters - The parameters required for switching the video.\r\n * @param {Function} options.parameters.showAlert - Function to show alert messages to the user.\r\n * @param {boolean} options.parameters.hasCameraPermission - Flag indicating if the user has granted camera permission.\r\n * @param {Function} options.parameters.updateVideoSwitching - Function to update the video switching state.\r\n * @param {Function} options.parameters.requestPermissionCamera - Function to request camera permission from the user.\r\n * @param {Function} options.parameters.checkMediaPermission - Function to check if media permissions are granted.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the video switching is complete.\r\n *\r\n * @throws Will throw an error if the audio input device cannot be accessed or if there is an unexpected error.\r\n *\r\n * @example\r\n * await switchUserVideoAlt({\r\n *   videoPreference: 'user',\r\n *   checkoff: false,\r\n *   parameters: {\r\n *     hasCameraPermission: true,\r\n *     updateVideoSwitching: (state) => { /* update state *\\/ },\r\n *     // other parameters...\r\n *   },\r\n * });\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SwitchUserVideoAlt {\r\n  constructor(private ClickVideoService: ClickVideo) {}\r\n\r\n  /**\r\n   * Switches the user's video stream based on the provided video preference and other parameters.\r\n   *\r\n   * @param {Object} options - The options for switching the user's video.\r\n   * @param {string} options.videoPreference - The preferred video facing mode (e.g., \"user\" or \"environment\").\r\n   * @param {boolean} options.checkoff - A flag indicating whether to turn off the video before switching.\r\n   * @param {SwitchUserVideoAltOptions} options.parameters - The parameters required for switching the video.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the video switching is complete.\r\n   *\r\n   * @throws Will throw an error if there is an issue with switching the video.\r\n   */\r\n\r\n  async switchUserVideoAlt({\r\n    videoPreference,\r\n    checkoff,\r\n    parameters,\r\n  }: SwitchUserVideoAltOptions): Promise<void> {\r\n    let { getUpdatedAllParams } = parameters;\r\n    let parameters_ = getUpdatedAllParams();\r\n\r\n    let {\r\n      audioOnlyRoom,\r\n      frameRate,\r\n      vidCons,\r\n      showAlert,\r\n      hasCameraPermission,\r\n      updateVideoSwitching,\r\n      updateCurrentFacingMode,\r\n\r\n      // mediasfu functions\r\n      requestPermissionCamera,\r\n      streamSuccessVideo,\r\n      sleep,\r\n      checkMediaPermission,\r\n    } = parameters;\r\n\r\n    let { currentFacingMode, prevFacingMode } = parameters_;\r\n\r\n    try {\r\n      // Check if it's an audio-only room\r\n      if (audioOnlyRoom) {\r\n        showAlert?.({\r\n          message: 'You cannot turn on your camera in an audio-only event.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n\r\n        return;\r\n      }\r\n\r\n      // If checkoff is not true, trigger a click on the video button to turn off the video\r\n      if (!checkoff) {\r\n        await this.ClickVideoService.clickVideo({ parameters });\r\n        updateVideoSwitching(true);\r\n        await sleep({ ms: 500 });\r\n        updateVideoSwitching(false);\r\n      }\r\n\r\n      // Check camera permission\r\n      if (!hasCameraPermission) {\r\n        if (checkMediaPermission) {\r\n          let statusCamera = await requestPermissionCamera();\r\n\r\n          if (statusCamera !== 'granted') {\r\n            showAlert?.({\r\n              message:\r\n                'Allow access to your camera or check if your camera is not being used by another application.',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n\r\n            return;\r\n          }\r\n        }\r\n      }\r\n\r\n      // Enumerate video devices\r\n      const videoDevices = await navigator.mediaDevices.enumerateDevices();\r\n\r\n      // Define media constraints based on preferences and options\r\n      let mediaConstraints: any = {};\r\n\r\n      if (vidCons && vidCons.width && vidCons.height) {\r\n        mediaConstraints = {\r\n          video: {\r\n            facingMode: { exact: videoPreference },\r\n            ...vidCons,\r\n            frameRate: { ideal: frameRate },\r\n          },\r\n          audio: false,\r\n        };\r\n      } else {\r\n        mediaConstraints = {\r\n          video: {\r\n            facingMode: { exact: videoPreference },\r\n            frameRate: { ideal: frameRate },\r\n          },\r\n          audio: false,\r\n        };\r\n      }\r\n\r\n      // Get user media with the defined constraints\r\n      await navigator.mediaDevices\r\n        .getUserMedia(mediaConstraints)\r\n        .then(async (stream: MediaStream) => {\r\n          await streamSuccessVideo({ stream, parameters });\r\n        })\r\n        .catch(async () => {\r\n          let videoDevicesFront = [];\r\n\r\n          // Filter video devices based on the preferred facing mode\r\n          if (videoPreference === 'user') {\r\n            videoDevicesFront = videoDevices.filter(\r\n              (device: MediaDeviceInfo) =>\r\n                device.label.includes('front') && device.kind === 'videoinput',\r\n            );\r\n          } else {\r\n            videoDevicesFront = videoDevices.filter(\r\n              (device: MediaDeviceInfo) =>\r\n                device.label.includes('back') && device.kind === 'videoinput',\r\n            );\r\n          }\r\n\r\n          if (videoDevicesFront.length > 0) {\r\n            videoDevicesFront.forEach((device: MediaDeviceInfo) => {\r\n              if (device.kind === 'videoinput') {\r\n                let videoDeviceId = device.deviceId;\r\n\r\n                // Update media constraints with the specific video device\r\n                if (vidCons && vidCons.width && vidCons.height) {\r\n                  mediaConstraints = {\r\n                    video: {\r\n                      deviceId: { exact: videoDeviceId },\r\n                      ...vidCons,\r\n                      frameRate: { ideal: frameRate },\r\n                    },\r\n                    audio: false,\r\n                  };\r\n                } else {\r\n                  mediaConstraints = {\r\n                    video: {\r\n                      deviceId: { exact: videoDeviceId },\r\n                      frameRate: { ideal: frameRate },\r\n                    },\r\n                    audio: false,\r\n                  };\r\n                }\r\n\r\n                // Try to get user media with the new constraints\r\n                navigator.mediaDevices\r\n                  .getUserMedia(mediaConstraints)\r\n                  .then(async (stream: MediaStream) => {\r\n                    await streamSuccessVideo({ stream, parameters });\r\n                  })\r\n                  .catch(() => {\r\n                    // If the current video device is the last one in the list, show the error; otherwise, try the next device\r\n                    if (\r\n                      videoDeviceId === videoDevicesFront[videoDevicesFront.length - 1].deviceId\r\n                    ) {\r\n                      currentFacingMode = prevFacingMode;\r\n                      updateCurrentFacingMode(currentFacingMode);\r\n\r\n                      showAlert?.({\r\n                        message:\r\n                          'Error switching; not accessible, might need to turn off your video and turn it back on after switching.',\r\n                        type: 'danger',\r\n                        duration: 3000,\r\n                      });\r\n                    }\r\n                  });\r\n              }\r\n            });\r\n          } else {\r\n            // Show error if no compatible video devices are found\r\n            currentFacingMode = prevFacingMode;\r\n            updateCurrentFacingMode(currentFacingMode);\r\n\r\n            showAlert?.({\r\n              message:\r\n                'Error switching; not accessible, might need to turn off your video and turn it back on after switching.',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n          }\r\n        });\r\n    } catch (error) {\r\n      // Handle any unexpected errors\r\n      const videoDevices = await navigator.mediaDevices.enumerateDevices();\r\n      let videoDevicesFront = [];\r\n      if (videoPreference === 'user') {\r\n        videoDevicesFront = videoDevices.filter(\r\n          (device: MediaDeviceInfo) =>\r\n            device.label.includes('front') && device.kind === 'videoinput',\r\n        );\r\n      } else {\r\n        videoDevicesFront = videoDevices.filter(\r\n          (device: MediaDeviceInfo) =>\r\n            device.label.includes('back') && device.kind === 'videoinput',\r\n        );\r\n      }\r\n\r\n      let mediaConstraints: any = {};\r\n\r\n      if (videoDevicesFront.length > 0) {\r\n        videoDevicesFront.forEach((device: MediaDeviceInfo) => {\r\n          if (device.kind === 'videoinput') {\r\n            let videoDeviceId = device.deviceId;\r\n\r\n            if (vidCons && vidCons.width && vidCons.height) {\r\n              mediaConstraints = {\r\n                video: {\r\n                  deviceId: { exact: videoDeviceId },\r\n                  ...vidCons,\r\n                  frameRate: { ideal: frameRate },\r\n                },\r\n                audio: false,\r\n              };\r\n            } else {\r\n              mediaConstraints = {\r\n                video: {\r\n                  deviceId: { exact: videoDeviceId },\r\n                  frameRate: { ideal: frameRate },\r\n                },\r\n                audio: false,\r\n              };\r\n            }\r\n\r\n            navigator.mediaDevices\r\n              .getUserMedia(mediaConstraints)\r\n              .then(async (stream: MediaStream) => {\r\n                await streamSuccessVideo({ stream, parameters });\r\n              })\r\n              .catch(() => {\r\n                // If current video device is the last one in the list, show the error; otherwise, try next device\r\n                if (videoDeviceId === videoDevicesFront[videoDevicesFront.length - 1].deviceId) {\r\n                  currentFacingMode = prevFacingMode;\r\n                  updateCurrentFacingMode(currentFacingMode);\r\n\r\n                  showAlert?.({\r\n                    message:\r\n                      'Error switching; not accessible, might need to turn off your video and turn it back on after switching.',\r\n                    type: 'danger',\r\n                    duration: 3000,\r\n                  });\r\n                }\r\n              });\r\n          }\r\n        });\r\n      } else {\r\n        currentFacingMode = prevFacingMode;\r\n        updateCurrentFacingMode(currentFacingMode);\r\n\r\n        showAlert?.({\r\n          message:\r\n            'Error switching; not accessible, might need to turn off your video and turn it back on after switching.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { Participant, AutoAdjustType, ScreenState, EventType } from '../@types/types';\r\n\r\nexport interface TriggerParameters {\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n  roomName: string;\r\n  screenStates: ScreenState[];\r\n  participants: Participant[];\r\n  updateDateState?: number | null;\r\n  lastUpdate: number | null;\r\n  nForReadjust: number;\r\n  eventType: EventType;\r\n  shared: boolean;\r\n  shareScreenStarted: boolean;\r\n  whiteboardStarted: boolean;\r\n  whiteboardEnded: boolean;\r\n  updateUpdateDateState: (timestamp: number | null) => void;\r\n  updateLastUpdate: (lastUpdate: number | null) => void;\r\n  updateNForReadjust: (nForReadjust: number) => void;\r\n\r\n  // mediasfu functions\r\n  autoAdjust: AutoAdjustType;\r\n\r\n  getUpdatedAllParams: () => TriggerParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface TriggerOptions {\r\n  ref_ActiveNames: string[];\r\n  parameters: TriggerParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type TriggerType = (options: TriggerOptions) => Promise<void>;\r\n\r\n/**\r\n * Triggers an update to the screen client based on the provided parameters.\r\n *\r\n * This function handles various conditions to determine the main screen person,\r\n * adjusts the screen states, and emits an update to the screen client via socket.\r\n *\r\n * @param {TriggerOptions} options - The options for triggering the update.\r\n * @param {string[]} options.ref_ActiveNames - Reference to the active names.\r\n * @param {TriggerParameters} options.parameters - The parameters for the trigger.\r\n * @returns {Promise<void>} A promise that resolves when the trigger is complete.\r\n *\r\n * @throws Will throw an error if the updateScreenClient operation fails.\r\n *\r\n * @example\r\n * ```typescript\r\n * await trigger({\r\n *   ref_ActiveNames: [\"user1\", \"user2\"],\r\n *   parameters: {\r\n *     socket: socketInstance,\r\n *     localSocket: socketInstance,\r\n *     roomName: \"room1\",\r\n *     screenStates: [{ mainScreenPerson: \"user1\", mainScreenFilled: true, adminOnMainScreen: false }],\r\n *     participants: [{ name: \"admin\", islevel: \"2\" }],\r\n *     updateDateState: 0,\r\n *     lastUpdate: null,\r\n *     nForReadjust: 0,\r\n *     eventType: \"conference\",\r\n *     shared: false,\r\n *     shareScreenStarted: false,\r\n *     whiteboardStarted: false,\r\n *     whiteboardEnded: false,\r\n *     updateUpdateDateState: (date) => {},\r\n *     updateLastUpdate: (date) => {},\r\n *     updateNForReadjust: (n) => {},\r\n *     autoAdjust: async ({ n, parameters }) => [n, 0],\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Trigger {\r\n  /**\r\n   * Triggers an update to the screen client based on the provided parameters.\r\n   *\r\n   * @param {TriggerOptions} options - The options for triggering the update.\r\n   * @param {string[]} options.ref_ActiveNames - Reference to the active names.\r\n   * @param {Parameters} options.parameters - The parameters for the trigger.\r\n   * @returns {Promise<void>} A promise that resolves when the trigger is complete.\r\n   *\r\n   * @throws Will throw an error if the updateScreenClient operation fails.\r\n   *\r\n   * @remarks\r\n   * This function handles various conditions to determine the main screen person,\r\n   * adjusts the screen states, and emits an update to the screen client via socket.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * await trigger({\r\n   *   ref_ActiveNames: [\"user1\", \"user2\"],\r\n   *   parameters: {\r\n   *     socket: socketInstance,\r\n   *     localSocket: socketInstance,\r\n   *     roomName: \"room1\",\r\n   *     screenStates: [{ mainScreenPerson: \"user1\", mainScreenFilled: true, adminOnMainScreen: false }],\r\n   *     participants: [{ name: \"admin\", islevel: \"2\" }],\r\n   *     updateDateState: 0,\r\n   *     lastUpdate: null,\r\n   *     nForReadjust: 0,\r\n   *     eventType: \"conference\",\r\n   *     shared: false,\r\n   *     shareScreenStarted: false,\r\n   *     whiteboardStarted: false,\r\n   *     whiteboardEnded: false,\r\n   *     updateUpdateDateState: (date) => {},\r\n   *     updateLastUpdate: (date) => {},\r\n   *     updateNForReadjust: (n) => {},\r\n   *     autoAdjust: async ({ n, parameters }) => [n, 0],\r\n   *   },\r\n   * });\r\n   * ```\r\n   */\r\n  async trigger({ ref_ActiveNames, parameters }: TriggerOptions): Promise<void> {\r\n    // Function to trigger the updateScreen event\r\n\r\n    try {\r\n      let {\r\n        socket,\r\n        localSocket,\r\n        roomName,\r\n        screenStates,\r\n        participants,\r\n        updateDateState,\r\n        lastUpdate,\r\n        nForReadjust,\r\n        eventType,\r\n        shared,\r\n        shareScreenStarted,\r\n        whiteboardStarted,\r\n        whiteboardEnded,\r\n\r\n        updateUpdateDateState,\r\n        updateLastUpdate,\r\n        updateNForReadjust,\r\n\r\n        autoAdjust,\r\n      } = parameters;\r\n\r\n      let socketRef = socket;\r\n      if (localSocket && localSocket.id) {\r\n        socketRef = localSocket;\r\n      }\r\n\r\n      let personOnMainScreen = screenStates[0].mainScreenPerson;\r\n\r\n      let adminName = '';\r\n      const admin = participants.filter((participant: Participant) => participant.islevel == '2');\r\n      if (admin.length > 0) {\r\n        adminName = admin[0].name || '';\r\n      }\r\n      if (personOnMainScreen === 'WhiteboardActive') {\r\n        personOnMainScreen = adminName;\r\n      }\r\n\r\n      let mainfilled = screenStates[0].mainScreenFilled;\r\n      let adminOnMain = screenStates[0].adminOnMainScreen;\r\n      let nForReadjust_;\r\n      let val1;\r\n\r\n      let noww = new Date().getTime();\r\n      // get now in seconds\r\n      let timestamp = Math.floor(noww / 1000);\r\n\r\n      let eventPass = false;\r\n      if (eventType === 'conference' && !(shared || shareScreenStarted)) {\r\n        eventPass = true;\r\n        personOnMainScreen = adminName;\r\n        if (!ref_ActiveNames.includes(adminName)) {\r\n          ref_ActiveNames.unshift(adminName);\r\n        }\r\n      }\r\n\r\n      if ((mainfilled && personOnMainScreen != null && adminOnMain) || eventPass) {\r\n        if (eventType === 'conference') {\r\n          nForReadjust = nForReadjust + 1;\r\n          updateNForReadjust(nForReadjust);\r\n        }\r\n\r\n        if (!ref_ActiveNames.includes(adminName) && whiteboardStarted && !whiteboardEnded) {\r\n          ref_ActiveNames.unshift(adminName);\r\n        }\r\n\r\n        nForReadjust_ = ref_ActiveNames.length;\r\n\r\n        if (nForReadjust_ === 0 && eventType === 'webinar') {\r\n          val1 = 0;\r\n        } else {\r\n          const [val11] = await autoAdjust({\r\n            n: nForReadjust_,\r\n            eventType,\r\n            shared,\r\n            shareScreenStarted,\r\n          });\r\n          val1 = val11;\r\n        }\r\n\r\n        let calc1 = Math.floor((val1 / 12) * 100);\r\n        let calc2 = 100 - calc1;\r\n\r\n        // check if lastUpdate is not null and at least same seconds\r\n        if (lastUpdate == null || updateDateState != timestamp) {\r\n          let now = new Date();\r\n\r\n          socketRef.emit(\r\n            'updateScreenClient',\r\n            {\r\n              roomName,\r\n              names: ref_ActiveNames,\r\n              mainPercent: calc2,\r\n              mainScreenPerson: personOnMainScreen,\r\n              viewType: eventType,\r\n            },\r\n            ({ success, reason }: { success: boolean; reason: string }) => {\r\n              updateDateState = timestamp;\r\n              updateUpdateDateState(updateDateState);\r\n              lastUpdate = Math.floor(now.getTime() / 1000);\r\n              updateLastUpdate(lastUpdate);\r\n              if (success) {\r\n                // handle success\r\n              } else {\r\n                console.log(reason, 'updateScreenClient failed');\r\n              }\r\n            },\r\n          );\r\n        }\r\n      } else if (mainfilled && personOnMainScreen != null && !adminOnMain) {\r\n        nForReadjust_ = ref_ActiveNames.length;\r\n\r\n        if (!ref_ActiveNames.includes(adminName)) {\r\n          ref_ActiveNames.unshift(adminName);\r\n          nForReadjust_ = ref_ActiveNames.length;\r\n        }\r\n\r\n        const [val11] = await autoAdjust({\r\n          n: nForReadjust_,\r\n          eventType,\r\n          shared,\r\n          shareScreenStarted,\r\n        });\r\n\r\n        val1 = val11;\r\n\r\n        const calc1 = Math.floor((val1 / 12) * 100);\r\n        const calc2 = 100 - calc1;\r\n\r\n        if (lastUpdate == null || updateDateState != timestamp) {\r\n          let now = new Date();\r\n\r\n          socketRef.emit(\r\n            'updateScreenClient',\r\n            {\r\n              roomName,\r\n              names: ref_ActiveNames,\r\n              mainPercent: calc2,\r\n              mainScreenPerson: personOnMainScreen,\r\n              viewType: eventType,\r\n            },\r\n            ({ success, reason }: { success: boolean; reason: string }) => {\r\n              updateDateState = timestamp;\r\n              updateUpdateDateState(updateDateState);\r\n              lastUpdate = Math.floor(now.getTime() / 1000);\r\n              updateLastUpdate(lastUpdate);\r\n              if (success) {\r\n                // handle success\r\n              } else {\r\n                console.log(reason, 'updateScreenClient failed');\r\n              }\r\n            },\r\n          );\r\n        }\r\n      } else {\r\n        // stop recording\r\n        console.log('trigger stopRecording');\r\n      }\r\n    } catch (error) {\r\n      console.log('Error triggering updateScreen:', error);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { GridSizes, ComponentSizes, EventType } from '../@types/types';\r\nexport interface UpdateMiniCardsGridParameters {\r\n  updateGridRows: (rows: number) => void;\r\n  updateGridCols: (cols: number) => void;\r\n  updateAltGridRows: (rows: number) => void;\r\n  updateAltGridCols: (cols: number) => void;\r\n  updateGridSizes: (gridSizes: GridSizes) => void;\r\n  gridSizes: GridSizes;\r\n  paginationDirection: string;\r\n  paginationHeightWidth: number;\r\n  doPaginate: boolean;\r\n  componentSizes: ComponentSizes;\r\n  eventType: EventType;\r\n\r\n  getUpdatedAllParams: () => UpdateMiniCardsGridParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface UpdateMiniCardsGridOptions {\r\n  rows: number;\r\n  cols: number;\r\n  defal?: boolean;\r\n  actualRows?: number;\r\n  parameters: UpdateMiniCardsGridParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type UpdateMiniCardsGridType = (options: UpdateMiniCardsGridOptions) => Promise<void>;\r\n\r\n/**\r\n * Updates the mini cards grid based on the specified rows and columns.\r\n *\r\n * This method calculates the dimensions for the mini cards based on the provided\r\n * rows and columns, as well as the container sizes. It also considers pagination\r\n * settings and updates the grid sizes accordingly. The method can update either\r\n * the default grid or an alternative grid based on the `defal` parameter.\r\n *\r\n * @param {UpdateMiniCardsGridOptions} options - The options for updating the mini cards grid.\r\n * @param {number} options.rows - The number of rows in the grid.\r\n * @param {number} options.cols - The number of columns in the grid.\r\n * @param {boolean} [options.defal=true] - Flag indicating whether to update the default grid or an alternative grid.\r\n * @param {number} [options.actualRows=2] - The actual number of rows in the grid.\r\n * @param {UpdateMiniCardsGridParameters} options.parameters - Additional parameters needed for the function.\r\n * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n * @param {Function} options.parameters.updateGridRows - Function to update the grid rows.\r\n * @param {Function} options.parameters.updateGridCols - Function to update the grid columns.\r\n * @param {Function} options.parameters.updateAltGridRows - Function to update the alternative grid rows.\r\n * @param {Function} options.parameters.updateAltGridCols - Function to update the alternative grid columns.\r\n * @param {Function} options.parameters.updateGridSizes - Function to update the grid sizes.\r\n * @param {GridSizes} options.parameters.gridSizes - Object containing grid width and height.\r\n * @param {string} options.parameters.paginationDirection - The direction of pagination ('horizontal' or 'vertical').\r\n * @param {number} options.parameters.paginationHeightWidth - The height or width of pagination.\r\n * @param {boolean} options.parameters.doPaginate - Flag indicating whether pagination is enabled.\r\n * @param {ComponentSizes} options.parameters.componentSizes - Object containing container width and height.\r\n * @param {EventType} options.parameters.eventType - The type of event ('chat', etc.).\r\n *\r\n * @returns {Promise<void>} - A Promise that resolves after updating the mini cards grid.\r\n *\r\n * @example\r\n * ```typescript\r\n * const gridOptions = {\r\n *   rows: 3,\r\n *   cols: 4,\r\n *   parameters: {\r\n *     getUpdatedAllParams: () => updatedParams,\r\n *     updateGridRows: (rows) => console.log(`Grid Rows Updated: ${rows}`),\r\n *     updateGridCols: (cols) => console.log(`Grid Cols Updated: ${cols}`),\r\n *     updateAltGridRows: (rows) => console.log(`Alt Grid Rows Updated: ${rows}`),\r\n *     updateAltGridCols: (cols) => console.log(`Alt Grid Cols Updated: ${cols}`),\r\n *     updateGridSizes: (sizes) => console.log(`Grid Sizes Updated: ${JSON.stringify(sizes)}`),\r\n *     gridSizes: { gridWidth: 100, gridHeight: 100 },\r\n *     paginationDirection: 'horizontal',\r\n *     paginationHeightWidth: 50,\r\n *     doPaginate: true,\r\n *     componentSizes: { otherWidth: 800, otherHeight: 600 },\r\n *     eventType: 'chat',\r\n *   },\r\n * };\r\n *\r\n * const miniCardGridService = new UpdateMiniCardsGrid();\r\n * miniCardGridService.updateMiniCardsGrid(gridOptions);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UpdateMiniCardsGrid {\r\n  /**\r\n   * Updates the mini cards grid based on the specified rows and columns.\r\n   *\r\n   * @param {object} options - The function parameters.\r\n   * @param {number} options.rows - The number of rows in the grid.\r\n   * @param {number} options.cols - The number of columns in the grid.\r\n   * @param {boolean} options.defal - Flag indicating whether to update the default grid or an alternative grid.\r\n   * @param {number} options.actualRows - The actual number of rows in the grid.\r\n   * @param {number} options.ind - The index parameter.\r\n   * @param {object} options.parameters - Additional parameters needed for the function.\r\n   * @param {function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {function} options.parameters.updateGridRows - Function to update the grid rows.\r\n   * @param {function} options.parameters.updateGridCols - Function to update the grid columns.\r\n   * @param {function} options.parameters.updateAltGridRows - Function to update the alternative grid rows.\r\n   * @param {function} options.parameters.updateAltGridCols - Function to update the alternative grid columns.\r\n   * @param {function} options.parameters.updateGridSizes - Function to update the grid sizes.\r\n   * @param {object} options.parameters.gridSizes - Object containing grid width and height.\r\n   * @param {string} options.parameters.paginationDirection - The direction of pagination ('horizontal' or 'vertical').\r\n   * @param {number} options.parameters.paginationHeightWidth - The height or width of pagination.\r\n   * @param {boolean} options.parameters.doPaginate - Flag indicating whether pagination is enabled.\r\n   * @param {object} options.parameters.componentSizes - Object containing container width and height.\r\n   * @param {string} options.parameters.eventType - The type of event ('chat', etc.).\r\n   * @returns {Promise<void>} - A Promise that resolves after updating the mini cards grid.\r\n   */\r\n  async updateMiniCardsGrid({\r\n    rows,\r\n    cols,\r\n    defal = true,\r\n    actualRows = 2,\r\n    parameters,\r\n  }: UpdateMiniCardsGridOptions): Promise<void> {\r\n    let { getUpdatedAllParams } = parameters;\r\n    parameters = getUpdatedAllParams();\r\n\r\n    let {\r\n      updateGridRows,\r\n      updateGridCols,\r\n      updateAltGridRows,\r\n      updateAltGridCols,\r\n      updateGridSizes,\r\n\r\n      gridSizes,\r\n      paginationDirection,\r\n      paginationHeightWidth,\r\n      doPaginate,\r\n      componentSizes,\r\n      eventType,\r\n    } = parameters;\r\n\r\n    let containerWidth = componentSizes.otherWidth;\r\n    let containerHeight = componentSizes.otherHeight;\r\n\r\n    if (doPaginate) {\r\n      // if pagination is enabled and direction is horizontal\r\n      if (paginationDirection == 'horizontal') {\r\n        containerHeight = containerHeight - paginationHeightWidth;\r\n      } else {\r\n        containerWidth = containerWidth - paginationHeightWidth;\r\n      }\r\n    }\r\n\r\n    let cardSpacing = 3; // 3px margin between cards\r\n    if (eventType == 'chat') {\r\n      cardSpacing = 0;\r\n    }\r\n    let totalSpacingHorizontal = (cols - 1) * cardSpacing;\r\n    let totalSpacingVertical = (actualRows - 1) * cardSpacing;\r\n    let cardWidth;\r\n    let cardHeight;\r\n    if (cols == 0 || actualRows == 0) {\r\n      cardWidth = 0;\r\n      cardHeight = 0;\r\n    } else {\r\n      cardWidth = Math.floor((containerWidth - totalSpacingHorizontal) / cols);\r\n      cardHeight = Math.floor((containerHeight - totalSpacingVertical) / actualRows);\r\n    }\r\n\r\n    if (defal) {\r\n      updateGridRows(rows);\r\n      updateGridCols(cols);\r\n\r\n      gridSizes = { ...gridSizes, gridWidth: cardWidth, gridHeight: cardHeight };\r\n      updateGridSizes(gridSizes);\r\n    } else {\r\n      updateAltGridRows(rows);\r\n      updateAltGridCols(cols);\r\n\r\n      gridSizes = { ...gridSizes, altGridWidth: cardWidth, altGridHeight: cardHeight };\r\n      updateGridSizes(gridSizes);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AudioDecibels } from '../@types/types';\r\nexport interface UpdateParticipantAudioDecibelsOptions {\r\n  name: string;\r\n  averageLoudness: number;\r\n  audioDecibels: AudioDecibels[];\r\n  updateAudioDecibels: (audioDecibels: AudioDecibels[]) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type UpdateParticipantAudioDecibelsType = (\r\n  options: UpdateParticipantAudioDecibelsOptions,\r\n) => void;\r\n\r\n/**\r\n * Updates or adds a participant's audio decibel data in the array.\r\n *\r\n * This method checks if a participant's name exists in the audio decibels array.\r\n * If it does, it updates the participant's `averageLoudness`; otherwise, it adds a new entry.\r\n * After modification, it calls `updateAudioDecibels` to apply the changes to the array.\r\n *\r\n * @param {UpdateParticipantAudioDecibelsOptions} options - The options for updating participant audio decibels.\r\n * @param {string} options.name - The name of the participant.\r\n * @param {number} options.averageLoudness - The current average loudness of the participant.\r\n * @param {AudioDecibels[]} options.audioDecibels - The array of current audio decibel entries.\r\n * @param {Function} options.updateAudioDecibels - The function to update the audio decibels array.\r\n *\r\n * @returns {void} - This function does not return a value.\r\n *\r\n * @example\r\n * ```typescript\r\n * const audioDecibels = [\r\n *   { name: 'Alice', averageLoudness: -10 },\r\n *   { name: 'Bob', averageLoudness: -12 },\r\n * ];\r\n *\r\n * const updateAudioDecibels = (newDecibels) => {\r\n *   console.log('Updated audio decibels:', newDecibels);\r\n * };\r\n *\r\n * const updateService = new UpdateParticipantAudioDecibels();\r\n *\r\n * // Update existing participant\r\n * updateService.updateParticipantAudioDecibels({\r\n *   name: 'Alice',\r\n *   averageLoudness: -8,\r\n *   audioDecibels,\r\n *   updateAudioDecibels,\r\n * });\r\n *\r\n * // Add a new participant\r\n * updateService.updateParticipantAudioDecibels({\r\n *   name: 'Charlie',\r\n *   averageLoudness: -15,\r\n *   audioDecibels,\r\n *   updateAudioDecibels,\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UpdateParticipantAudioDecibels {\r\n  /**\r\n   * Updates the audio decibels for a participant.\r\n   *\r\n   * @param {Object} options - The options for updating participant audio decibels.\r\n   * @param {string} options.name - The name of the participant.\r\n   * @param {number} options.averageLoudness - The average loudness of the participant.\r\n   * @param {Array<{ name: string, averageLoudness: number }>} options.audioDecibels - The array of audio decibels entries.\r\n   * @param {Function} options.updateAudioDecibels - The function to update the audio decibels array.\r\n   *\r\n   * @returns {void}\r\n   */\r\n\r\n  updateParticipantAudioDecibels({\r\n    name,\r\n    averageLoudness,\r\n    audioDecibels,\r\n    updateAudioDecibels,\r\n  }: UpdateParticipantAudioDecibelsOptions): void {\r\n    // Function to update the audioDecibels array\r\n    // Check if the entry already exists in audioDecibels\r\n    const existingEntry = audioDecibels.find((entry: any) => entry.name === name);\r\n\r\n    if (existingEntry) {\r\n      // Entry exists, update the averageLoudness\r\n      existingEntry.averageLoudness = averageLoudness;\r\n    } else {\r\n      // Entry doesn't exist, add a new entry to audioDecibels\r\n      audioDecibels.push({ name, averageLoudness });\r\n    }\r\n\r\n    // Update the audioDecibels array\r\n    updateAudioDecibels(audioDecibels);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ProducerCodecOptions, RtpEncodingParameters } from 'mediasoup-client/lib/types';\r\n// Export the type definition for the function\r\nexport type AParamsType = {\r\n  encodings: RtpEncodingParameters[];\r\n  codecOptions?: ProducerCodecOptions;\r\n};\r\n\r\n/**\r\n * The `AParams` service provides the encoding parameters for audio production in a media session using the Mediasoup library.\r\n * It includes a default configuration for RTP encoding parameters, which can be used when creating audio producers.\r\n *\r\n * @service\r\n * @example\r\n * ```typescript\r\n * import { AParams } from './path/to/a-params.service';\r\n *\r\n * constructor(private aParamsService: AParams) {\r\n *   console.log(this.aParamsService.aParams);\r\n * }\r\n * ```\r\n *\r\n * @typedef AParamsType\r\n * @property {RtpEncodingParameters[]} encodings - Array of RTP encoding parameters for audio.\r\n * @property {ProducerCodecOptions} [codecOptions] - Optional codec options for the audio producer.\r\n *\r\n * @example\r\n * const aParams: AParamsType = {\r\n *   encodings: [\r\n *     {\r\n *       rid: 'r0',\r\n *       maxBitrate: 64000, // Max bitrate for the audio stream (in bps)\r\n *     },\r\n *   ],\r\n *   codecOptions: {\r\n *     // Additional codec options can be defined here\r\n *   },\r\n * };\r\n *\r\n * @remarks\r\n * The default `aParams` contains a single encoding with a `rid` of \"r0\" and a maximum bitrate of 64 kbps.\r\n * This configuration can be adjusted based on application requirements.\r\n *\r\n * @returns {AParamsType} The audio parameters for use in audio producer configuration.\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AParams {\r\n  aParams: AParamsType = {\r\n    encodings: [\r\n      {\r\n        rid: 'r0',\r\n        maxBitrate: 64000,\r\n      },\r\n    ],\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ProducerCodecOptions, RtpEncodingParameters } from 'mediasoup-client/lib/types';\r\nexport type HParamsType = {\r\n  encodings: RtpEncodingParameters[];\r\n  codecOptions?: ProducerCodecOptions;\r\n};\r\n\r\n/**\r\n * The `HParams` service provides encoding parameters for video production in a media session using the Mediasoup library.\r\n * It includes a default configuration for RTP encoding parameters designed for handling high-quality video streams.\r\n *\r\n * @service\r\n * @example\r\n * ```typescript\r\n * import { HParams } from './path/to/h-params.service';\r\n *\r\n * constructor(private hParamsService: HParams) {\r\n *   console.log(this.hParamsService.hParams);\r\n * }\r\n * ```\r\n *\r\n * @typedef HParamsType\r\n * @property {RtpEncodingParameters[]} encodings - Array of RTP encoding parameters for video.\r\n * @property {ProducerCodecOptions} [codecOptions] - Optional codec options for the video producer.\r\n *\r\n * @example\r\n * const hParams: HParamsType = {\r\n *   encodings: [\r\n *     {\r\n *       rid: 'r8',\r\n *       maxBitrate: 240000, // Max bitrate for this encoding (in bps)\r\n *       scalabilityMode: 'L1T3', // Scalable video coding mode\r\n *       scaleResolutionDownBy: 4.0, // Scale down the resolution by a factor of 4\r\n *     },\r\n *     {\r\n *       rid: 'r9',\r\n *       maxBitrate: 480000,\r\n *       scalabilityMode: 'L1T3',\r\n *       scaleResolutionDownBy: 2.0, // Scale down the resolution by a factor of 2\r\n *     },\r\n *     {\r\n *       rid: 'r10',\r\n *       maxBitrate: 960000,\r\n *       scalabilityMode: 'L1T3',\r\n *     },\r\n *   ],\r\n *   codecOptions: {\r\n *     videoGoogleStartBitrate: 320, // Initial bitrate for the Google codec\r\n *   },\r\n * };\r\n *\r\n * @remarks\r\n * The default `hParams` includes three encoding configurations with different resolutions and bitrates.\r\n * The configurations are optimized for scalable video encoding, allowing for adaptive bitrate streaming based on network conditions.\r\n *\r\n * @returns {HParamsType} The video parameters for use in video producer configuration.\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class HParams {\r\n  hParams: HParamsType = {\r\n    encodings: [\r\n      {\r\n        rid: 'r8',\r\n        maxBitrate: 240000,\r\n        scalabilityMode: 'L1T3',\r\n        scaleResolutionDownBy: 4.0,\r\n      },\r\n      {\r\n        rid: 'r9',\r\n        maxBitrate: 480000,\r\n        scalabilityMode: 'L1T3',\r\n        scaleResolutionDownBy: 2.0,\r\n      },\r\n      {\r\n        rid: 'r10',\r\n        maxBitrate: 960000,\r\n        scalabilityMode: 'L1T3',\r\n      },\r\n    ],\r\n    codecOptions: {\r\n      videoGoogleStartBitrate: 320,\r\n    },\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ProducerCodecOptions, RtpEncodingParameters } from 'mediasoup-client/lib/types';\r\nexport type ScreenParamsType = {\r\n  encodings: RtpEncodingParameters[];\r\n  codecOptions?: ProducerCodecOptions;\r\n};\r\n\r\n/**\r\n * The `ScreenParams` service provides encoding parameters specifically for screen sharing in a media session using the Mediasoup library.\r\n * It includes a default configuration for RTP encoding parameters optimized for high-quality screen sharing.\r\n *\r\n * @service\r\n * @example\r\n * ```typescript\r\n * import { ScreenParams } from './path/to/screen-params.service';\r\n *\r\n * constructor(private screenParamsService: ScreenParams) {\r\n *   console.log(this.screenParamsService.screenParams);\r\n * }\r\n * ```\r\n *\r\n * @typedef ScreenParamsType\r\n * @property {RtpEncodingParameters[]} encodings - Array of RTP encoding parameters for screen sharing.\r\n * @property {ProducerCodecOptions} [codecOptions] - Optional codec options for the screen sharing producer.\r\n *\r\n * @example\r\n * const screenParams: ScreenParamsType = {\r\n *   encodings: [\r\n *     {\r\n *       rid: 'r7',\r\n *       maxBitrate: 3000000, // Max bitrate for this encoding (in bps)\r\n *     },\r\n *   ],\r\n *   codecOptions: {\r\n *     videoGoogleStartBitrate: 1000, // Initial bitrate for the Google codec\r\n *   },\r\n * };\r\n *\r\n * @remarks\r\n * The default `screenParams` includes one encoding configuration with a high maximum bitrate suitable for sharing detailed screen content.\r\n * The parameters are optimized to ensure a smooth experience during screen sharing sessions.\r\n *\r\n * @returns {ScreenParamsType} The screen sharing parameters for use in screen sharing producer configuration.\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ScreenParams {\r\n  screenParams: ScreenParamsType = {\r\n    encodings: [\r\n      {\r\n        rid: 'r7',\r\n        maxBitrate: 3000000,\r\n      },\r\n    ],\r\n    codecOptions: {\r\n      videoGoogleStartBitrate: 1000,\r\n    },\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ProducerCodecOptions, RtpEncodingParameters } from 'mediasoup-client/lib/types';\r\nexport type VParamsType = {\r\n  encodings: RtpEncodingParameters[];\r\n  codecOptions?: ProducerCodecOptions;\r\n};\r\n\r\n/**\r\n * The `VParams` service provides encoding parameters for video in a media session using the Mediasoup library.\r\n * It includes a default configuration for RTP encoding parameters optimized for video streaming.\r\n *\r\n * @service\r\n * @example\r\n * ```typescript\r\n * import { VParams } from './path/to/v-params.service';\r\n *\r\n * constructor(private vParamsService: VParams) {\r\n *   console.log(this.vParamsService.vParams);\r\n * }\r\n * ```\r\n *\r\n * @typedef VParamsType\r\n * @property {RtpEncodingParameters[]} encodings - Array of RTP encoding parameters for video.\r\n * @property {ProducerCodecOptions} [codecOptions] - Optional codec options for the video producer.\r\n *\r\n * @example\r\n * const vParams: VParamsType = {\r\n *   encodings: [\r\n *     {\r\n *       rid: 'r3',\r\n *       maxBitrate: 200000, // Max bitrate for this encoding (in bps)\r\n *       scalabilityMode: 'L1T3', // Scalability mode for encoding\r\n *       scaleResolutionDownBy: 4.0, // Scale down resolution by this factor\r\n *     },\r\n *     {\r\n *       rid: 'r4',\r\n *       maxBitrate: 400000,\r\n *       scalabilityMode: 'L1T3',\r\n *       scaleResolutionDownBy: 2.0,\r\n *     },\r\n *     {\r\n *       rid: 'r5',\r\n *       maxBitrate: 800000,\r\n *       scalabilityMode: 'L1T3',\r\n *     },\r\n *   ],\r\n *   codecOptions: {\r\n *     videoGoogleStartBitrate: 320, // Initial bitrate for the Google codec\r\n *   },\r\n * };\r\n *\r\n * @remarks\r\n * The default `vParams` includes multiple encoding configurations with different maximum bitrates,\r\n * allowing for adaptive streaming based on network conditions and participant capabilities.\r\n *\r\n * @returns {VParamsType} The video parameters for use in video producer configuration.\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class VParams {\r\n  vParams: VParamsType = {\r\n    encodings: [\r\n      {\r\n        rid: 'r3',\r\n        maxBitrate: 200000,\r\n        scalabilityMode: 'L1T3',\r\n        scaleResolutionDownBy: 4.0,\r\n      },\r\n      {\r\n        rid: 'r4',\r\n        maxBitrate: 400000,\r\n        scalabilityMode: 'L1T3',\r\n        scaleResolutionDownBy: 2.0,\r\n      },\r\n      {\r\n        rid: 'r5',\r\n        maxBitrate: 800000,\r\n        scalabilityMode: 'L1T3',\r\n      },\r\n    ],\r\n    codecOptions: {\r\n      videoGoogleStartBitrate: 320,\r\n    },\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface LaunchBackgroundOptions {\r\n  updateIsBackgroundModalVisible: (isVisible: boolean) => void;\r\n  isBackgroundModalVisible: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchBackgroundType = (options: LaunchBackgroundOptions) => void;\r\n\r\n/**\r\n * Toggles the visibility of the background modal.\r\n *\r\n * This method updates the visibility state of the background modal by calling\r\n * the provided update function with the negation of the current visibility state.\r\n *\r\n * @param {LaunchBackgroundOptions} options - The options object containing necessary variables and functions.\r\n * @param {Function} options.updateIsBackgroundModalVisible - Function to update the visibility state of the background modal.\r\n * @param {boolean} options.isBackgroundModalVisible - Current visibility state of the background modal.\r\n *\r\n * @returns {void}\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   updateIsBackgroundModalVisible: (isVisible) => {\r\n *     console.log(`Background modal is now ${isVisible ? 'visible' : 'hidden'}.`);\r\n *   },\r\n *   isBackgroundModalVisible: false,\r\n * };\r\n *\r\n * const launchBackgroundService = new LaunchBackground();\r\n * launchBackgroundService.launchBackground(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchBackground {\r\n  /**\r\n   * Toggles the visibility of the background modal.\r\n   * @function\r\n   * @param {Object} options - The options object containing necessary variables and functions.\r\n   * @param {Function} options.updateIsBackgroundModalVisible - Function to update the visibility state of the background modal.\r\n   * @param {boolean} options.isBackgroundModalVisible - Current visibility state of the background modal.\r\n   */\r\n\r\n  launchBackground({\r\n    updateIsBackgroundModalVisible,\r\n    isBackgroundModalVisible,\r\n  }: LaunchBackgroundOptions): void {\r\n    updateIsBackgroundModalVisible(!isBackgroundModalVisible);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface LaunchBreakoutRoomsOptions {\r\n  updateIsBreakoutRoomsModalVisible: (isVisible: boolean) => void;\r\n  isBreakoutRoomsModalVisible: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchBreakoutRoomsType = (options: LaunchBreakoutRoomsOptions) => void;\r\n\r\n\r\n/**\r\n * Launches the breakout rooms by toggling the visibility of the breakout rooms modal.\r\n *\r\n * This method is used to show or hide the breakout rooms modal based on the current visibility state.\r\n *\r\n * @param {LaunchBreakoutRoomsOptions} options - The options object containing necessary variables and functions.\r\n * @param {Function} options.updateIsBreakoutRoomsModalVisible - Function to update the visibility state of the breakout rooms modal.\r\n * @param {boolean} options.isBreakoutRoomsModalVisible - Current visibility state of the breakout rooms modal.\r\n *\r\n * @returns {void}\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: LaunchBreakoutRoomsOptions = {\r\n *   updateIsBreakoutRoomsModalVisible: (isVisible) => {\r\n *     console.log('Breakout Rooms Modal is now:', isVisible ? 'Visible' : 'Hidden');\r\n *   },\r\n *   isBreakoutRoomsModalVisible: false,\r\n * };\r\n *\r\n * const launchBreakoutRoomsService = new LaunchBreakoutRooms();\r\n * launchBreakoutRoomsService.launchBreakoutRooms(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchBreakoutRooms {\r\n  /**\r\n   * Launches the breakout rooms by toggling the visibility of the breakout rooms modal.\r\n   *\r\n   * @param updateIsBreakoutRoomsModalVisible - Function to update the visibility state of the breakout rooms modal.\r\n   * @param isBreakoutRoomsModalVisible - Current visibility state of the breakout rooms modal.\r\n   */\r\n\r\n  launchBreakoutRooms({\r\n    updateIsBreakoutRoomsModalVisible,\r\n    isBreakoutRoomsModalVisible,\r\n  }: LaunchBreakoutRoomsOptions): void {\r\n    updateIsBreakoutRoomsModalVisible(!isBreakoutRoomsModalVisible);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  BreakoutParticipant,\r\n  BreakoutRoomUpdatedData,\r\n  OnScreenChangesParameters,\r\n  OnScreenChangesType,\r\n  Participant,\r\n  RePortParameters,\r\n  RePortType,\r\n} from '../../@types/types';\r\n\r\nexport interface BreakoutRoomUpdatedParameters extends OnScreenChangesParameters, RePortParameters {\r\n  breakOutRoomStarted: boolean;\r\n  breakOutRoomEnded: boolean;\r\n  breakoutRooms: BreakoutParticipant[][];\r\n  hostNewRoom: number;\r\n  islevel: string;\r\n  participantsAll: Participant[];\r\n  participants: Participant[];\r\n  meetingDisplayType: string;\r\n  prevMeetingDisplayType: string;\r\n  updateBreakoutRooms: (rooms: BreakoutParticipant[][]) => void;\r\n  updateBreakOutRoomStarted: (started: boolean) => void;\r\n  updateBreakOutRoomEnded: (ended: boolean) => void;\r\n  updateHostNewRoom: (room: number) => void;\r\n  updateMeetingDisplayType: (type: string) => void;\r\n  updateParticipantsAll: (participants: Participant[]) => void;\r\n  updateParticipants: (participants: Participant[]) => void;\r\n\r\n  //mediasfu functions\r\n  onScreenChanges: OnScreenChangesType;\r\n  rePort: RePortType;\r\n\r\n  getUpdatedAllParams: () => BreakoutRoomUpdatedParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface BreakoutRoomUpdatedOptions {\r\n  data: BreakoutRoomUpdatedData;\r\n  parameters: BreakoutRoomUpdatedParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type BreakoutRoomUpdatedType = (options: BreakoutRoomUpdatedOptions) => Promise<void>;\r\n\r\n/**\r\n * Updates the state of breakout rooms based on the provided data and parameters.\r\n *\r\n * This method handles changes in breakout rooms, updates the relevant state variables,\r\n * and triggers necessary UI updates based on the current status of the breakout rooms.\r\n *\r\n * @param {BreakoutRoomUpdatedOptions} options - The options object containing the data and parameters.\r\n * @param {BreakoutRoomUpdatedData} options.data - The data object containing information about the breakout rooms.\r\n * @param {BreakoutRoomUpdatedParameters} options.parameters - The parameters object containing various state update functions and other parameters.\r\n * @param {boolean} options.parameters.breakOutRoomStarted - Indicates if the breakout room has started.\r\n * @param {boolean} options.parameters.breakOutRoomEnded - Indicates if the breakout room has ended.\r\n * @param {Array<BreakoutParticipant[]>} options.parameters.breakoutRooms - The list of current breakout rooms.\r\n * @param {number} options.parameters.hostNewRoom - The ID of the new room for the host.\r\n * @param {string} options.parameters.islevel - The level of the breakout room (e.g., '2' for host).\r\n * @param {Array<Participant>} options.parameters.participantsAll - The list of all participants.\r\n * @param {Array<Participant>} options.parameters.participants - The list of participants who are not banned.\r\n * @param {string} options.parameters.meetingDisplayType - The current display type of the meeting.\r\n * @param {string} options.parameters.prevMeetingDisplayType - The previous display type of the meeting.\r\n * @param {Function} options.parameters.updateBreakoutRooms - Function to update the breakout rooms.\r\n * @param {Function} options.parameters.updateBreakOutRoomStarted - Function to update the breakout room started state.\r\n * @param {Function} options.parameters.updateBreakOutRoomEnded - Function to update the breakout room ended state.\r\n * @param {Function} options.parameters.updateHostNewRoom - Function to update the host's new room.\r\n * @param {Function} options.parameters.updateMeetingDisplayType - Function to update the meeting display type.\r\n * @param {Function} options.parameters.updateParticipantsAll - Function to update the list of all participants.\r\n * @param {Function} options.parameters.updateParticipants - Function to update the list of participants who are not banned.\r\n * @param {Function} options.parameters.onScreenChanges - Function to handle screen changes.\r\n * @param {Function} options.parameters.rePort - Function to handle reporting.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the breakout room state has been updated.\r\n *\r\n * @throws Will throw an error if the update process fails.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   data: {\r\n *     forHost: true,\r\n *     newRoom: 3,\r\n *     status: 'started',\r\n *     members: [\r\n *       { name: 'user1', isBanned: false, audioID: 'audio1', videoID: 'video1' },\r\n *       { name: 'user2', isBanned: true, audioID: 'audio2', videoID: 'video2' },\r\n *     ],\r\n *     breakoutRooms: [[{ name: 'user1' }, { name: 'user2' }]],\r\n *   },\r\n *   parameters: {\r\n *     socket: socketInstance,\r\n *     roomName: 'mainRoom',\r\n *     screenStates: [{ mainScreenPerson: 'user1', mainScreenFilled: true, adminOnMainScreen: false }],\r\n *     participants: [{ name: 'admin', islevel: '2' }],\r\n *     breakOutRoomStarted: false,\r\n *     breakOutRoomEnded: false,\r\n *     hostNewRoom: 0,\r\n *     islevel: '2',\r\n *     participantsAll: [],\r\n *     updateBreakoutRooms: (rooms) => {},\r\n *     updateBreakOutRoomStarted: (started) => {},\r\n *     updateBreakOutRoomEnded: (ended) => {},\r\n *     updateHostNewRoom: (room) => {},\r\n *     updateMeetingDisplayType: (type) => {},\r\n *     updateParticipantsAll: (participants) => {},\r\n *     updateParticipants: (participants) => {},\r\n *     onScreenChanges: async () => {},\r\n *     rePort: async () => {},\r\n *   },\r\n * };\r\n *\r\n * const breakoutRoomService = new BreakoutRoomUpdated();\r\n * await breakoutRoomService.breakoutRoomUpdated(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class BreakoutRoomUpdated {\r\n  /**\r\n   * Updates the state of breakout rooms based on the provided data and parameters.\r\n   *\r\n   * @param {Object} options - The options object.\r\n   * @param {Object} options.data - The data object containing information about the breakout rooms.\r\n   * @param {Object} options.parameters - The parameters object containing various state update functions and other parameters.\r\n   * @param {boolean} options.parameters.breakOutRoomStarted - Indicates if the breakout room has started.\r\n   * @param {boolean} options.parameters.breakOutRoomEnded - Indicates if the breakout room has ended.\r\n   * @param {Array} options.parameters.breakoutRooms - The list of current breakout rooms.\r\n   * @param {number} options.parameters.hostNewRoom - The ID of the new room for the host.\r\n   * @param {string} options.parameters.islevel - The level of the breakout room.\r\n   * @param {Array} options.parameters.participantsAll - The list of all participants.\r\n   * @param {Array} options.parameters.participants - The list of participants who are not banned.\r\n   * @param {string} options.parameters.meetingDisplayType - The current display type of the meeting.\r\n   * @param {string} options.parameters.prevMeetingDisplayType - The previous display type of the meeting.\r\n   * @param {Function} options.parameters.updateBreakoutRooms - Function to update the breakout rooms.\r\n   * @param {Function} options.parameters.updateBreakOutRoomStarted - Function to update the breakout room started state.\r\n   * @param {Function} options.parameters.updateBreakOutRoomEnded - Function to update the breakout room ended state.\r\n   * @param {Function} options.parameters.updateHostNewRoom - Function to update the host's new room.\r\n   * @param {Function} options.parameters.updateMeetingDisplayType - Function to update the meeting display type.\r\n   * @param {Function} options.parameters.updateParticipantsAll - Function to update the list of all participants.\r\n   * @param {Function} options.parameters.updateParticipants - Function to update the list of participants who are not banned.\r\n   * @param {Function} options.parameters.onScreenChanges - Function to handle screen changes.\r\n   * @param {Function} options.parameters.rePort - Function to handle reporting.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the breakout room state has been updated.\r\n   *\r\n   * @throws Will throw an error if the update process fails.\r\n   */\r\n\r\n  breakoutRoomUpdated = async ({ data, parameters }: BreakoutRoomUpdatedOptions): Promise<void> => {\r\n    try {\r\n      parameters = parameters.getUpdatedAllParams();\r\n\r\n      let {\r\n        breakOutRoomStarted,\r\n        breakOutRoomEnded,\r\n        breakoutRooms,\r\n        islevel,\r\n        participantsAll,\r\n        participants,\r\n\r\n        updateBreakoutRooms,\r\n        updateBreakOutRoomStarted,\r\n        updateBreakOutRoomEnded,\r\n        updateHostNewRoom,\r\n        updateMeetingDisplayType,\r\n        meetingDisplayType,\r\n        prevMeetingDisplayType,\r\n        updateParticipantsAll,\r\n        updateParticipants,\r\n\r\n        //mediaSfu functions\r\n        onScreenChanges,\r\n        rePort,\r\n      } = parameters;\r\n\r\n      if (data.forHost) {\r\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n        updateHostNewRoom(data.newRoom!);\r\n        await onScreenChanges({ changed: true, parameters });\r\n        return;\r\n      }\r\n\r\n      if (islevel == '2' && data.members) {\r\n        //filter out the participant that isBanned == true\r\n        participantsAll = data.members;\r\n        //remove every field other than isBanned and name from participantsAll\r\n        participantsAll = data.members.map((participant) => ({\r\n          isBanned: participant.isBanned,\r\n          name: participant.name,\r\n          audioID: participant.audioID,\r\n          videoID: participant.videoID,\r\n        }));\r\n        updateParticipantsAll(participantsAll);\r\n\r\n        participants = data.members.filter(\r\n          (participant: Participant) => participant.isBanned == false,\r\n        );\r\n        updateParticipants(participants);\r\n      }\r\n\r\n      breakoutRooms = data.breakoutRooms || [];\r\n      updateBreakoutRooms(breakoutRooms);\r\n\r\n      if (data.status == 'started' && (breakOutRoomStarted || !breakOutRoomEnded)) {\r\n        breakOutRoomStarted = true;\r\n        breakOutRoomEnded = false;\r\n        updateBreakOutRoomStarted(true);\r\n        updateBreakOutRoomEnded(false);\r\n        prevMeetingDisplayType = meetingDisplayType;\r\n        if (meetingDisplayType != 'all') {\r\n          meetingDisplayType = 'all';\r\n          updateMeetingDisplayType('all');\r\n        }\r\n        await onScreenChanges({ changed: true, parameters });\r\n        if (islevel == '2') {\r\n          await rePort({ restart: true, parameters });\r\n        }\r\n      } else if (data.status == 'ended') {\r\n        breakOutRoomEnded = true;\r\n        updateBreakOutRoomEnded(true);\r\n        if (meetingDisplayType != prevMeetingDisplayType) {\r\n          meetingDisplayType = prevMeetingDisplayType;\r\n          updateMeetingDisplayType(prevMeetingDisplayType);\r\n        }\r\n        await onScreenChanges({ changed: true, parameters });\r\n        if (islevel == '2') {\r\n          await rePort({ restart: true, parameters });\r\n        }\r\n      } else if (data.status == 'started' && breakOutRoomStarted) {\r\n        breakOutRoomStarted = true;\r\n        breakOutRoomEnded = false;\r\n        updateBreakOutRoomStarted(true);\r\n        updateBreakOutRoomEnded(false);\r\n        await onScreenChanges({ changed: true, parameters });\r\n        if (islevel == '2') {\r\n          await rePort({ restart: true, parameters });\r\n        }\r\n      }\r\n    } catch (error: any) {\r\n      // console.log('Error updating breakout room:', error.message);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface LaunchCoHostOptions {\r\n  updateIsCoHostModalVisible: (isVisible: boolean) => void;\r\n  isCoHostModalVisible: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchCoHostType = (options: LaunchCoHostOptions) => void;\r\n\r\n/**\r\n * Toggles the visibility of the co-host modal.\r\n *\r\n * This method is used to show or hide the co-host modal based on the current visibility state.\r\n *\r\n * @param {LaunchCoHostOptions} options - The options object containing necessary variables and functions.\r\n * @param {Function} options.updateIsCoHostModalVisible - Function to update the visibility state of the co-host modal.\r\n * @param {boolean} options.isCoHostModalVisible - Current visibility state of the co-host modal.\r\n *\r\n * @returns {void}\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: LaunchCoHostOptions = {\r\n *   updateIsCoHostModalVisible: (isVisible) => {\r\n *     console.log('Co-Host Modal is now:', isVisible ? 'Visible' : 'Hidden');\r\n *   },\r\n *   isCoHostModalVisible: false,\r\n * };\r\n *\r\n * const launchCoHostService = new launchCoHost();\r\n * launchCoHostService.launchCoHost(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class launchCoHost {\r\n  /**\r\n   * Toggles the visibility of the co-host modal.\r\n   *\r\n   * @param updateIsCoHostModalVisible - Function to update the visibility state of the co-host modal.\r\n   * @param isCoHostModalVisible - Current visibility state of the co-host modal.\r\n   */\r\n\r\n  launchCoHost({ updateIsCoHostModalVisible, isCoHostModalVisible }: LaunchCoHostOptions): void {\r\n    updateIsCoHostModalVisible(!isCoHostModalVisible);\r\n  }\r\n}\r\n","// This method is used to modify the co-host settings in the chat room.\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { ShowAlert, CoHostResponsibility } from '../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface ModifyCoHostSettingsOptions {\r\n  roomName: string;\r\n  showAlert?: ShowAlert;\r\n  selectedParticipant: string;\r\n  coHost: string;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  updateIsCoHostModalVisible: (isVisible: boolean) => void;\r\n  updateCoHostResponsibility: (coHostResponsibility: CoHostResponsibility[]) => void;\r\n  updateCoHost: (coHost: string) => void;\r\n  socket: Socket;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ModifyCoHostSettingsType = (options: ModifyCoHostSettingsOptions) => Promise<void>;\r\n\r\n/**\r\n * Modifies the co-host settings for a given room.\r\n *\r\n * This method allows you to update the co-host for a chat room, set their responsibilities,\r\n * and emit the relevant changes to the server. It also handles demo mode restrictions.\r\n *\r\n * @param {ModifyCoHostSettingsOptions} options - The options for modifying co-host settings.\r\n * @param {string} options.roomName - The name of the room.\r\n * @param {Function} options.showAlert - Function to show an alert message.\r\n * @param {string} options.selectedParticipant - The participant selected to be co-host.\r\n * @param {string} options.coHost - The current co-host.\r\n * @param {Array<CoHostResponsibility>} options.coHostResponsibility - The responsibilities assigned to the co-host.\r\n * @param {Function} options.updateIsCoHostModalVisible - Function to update the visibility of the co-host modal.\r\n * @param {Function} options.updateCoHostResponsibility - Function to update the co-host responsibility.\r\n * @param {Function} options.updateCoHost - Function to update the co-host.\r\n * @param {Socket} options.socket - The socket instance for emitting events.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the co-host settings have been modified.\r\n *\r\n * @remarks\r\n * - If the room is in demo mode (room name starts with \"d\"), co-host cannot be added and an alert is shown.\r\n * - If a valid participant is selected, they are set as the new co-host.\r\n * - The co-host responsibility is updated.\r\n * - A socket event is emitted to update the co-host information.\r\n * - The co-host modal is closed after updating the settings.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: ModifyCoHostSettingsOptions = {\r\n *   roomName: 'mainRoom',\r\n *   showAlert: (alert) => console.log(alert.message),\r\n *   selectedParticipant: 'JohnDoe',\r\n *   coHost: 'No coHost',\r\n *   coHostResponsibility: ['manage participants', 'start/stop recording'],\r\n *   updateIsCoHostModalVisible: (isVisible) => console.log('Co-host modal visible:', isVisible),\r\n *   updateCoHostResponsibility: (responsibility) => console.log('Updated co-host responsibility:', responsibility),\r\n *   updateCoHost: (coHost) => console.log('New co-host:', coHost),\r\n *   socket: socketInstance,\r\n * };\r\n *\r\n * const modifyCoHostService = new ModifyCoHostSettings();\r\n * await modifyCoHostService.modifyCoHostSettings(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ModifyCoHostSettings {\r\n  /**\r\n   * Modifies the co-host settings for a given room.\r\n   *\r\n   * @param {Object} options - The options for modifying co-host settings.\r\n   * @param {string} options.roomName - The name of the room.\r\n   * @param {Function} options.showAlert - Function to show an alert message.\r\n   * @param {string} options.selectedParticipant - The participant selected to be co-host.\r\n   * @param {string} options.coHost - The current co-host.\r\n   * @param {string} options.coHostResponsibility - The responsibility assigned to the co-host.\r\n   * @param {Function} options.updateIsCoHostModalVisible - Function to update the visibility of the co-host modal.\r\n   * @param {Function} options.updateCoHostResponsibility - Function to update the co-host responsibility.\r\n   * @param {Function} options.updateCoHost - Function to update the co-host.\r\n   * @param {Object} options.socket - The socket instance for emitting events.\r\n   * @returns {Promise<void>} A promise that resolves when the co-host settings have been modified.\r\n   *\r\n   * @remarks\r\n   * - If the room is in demo mode (room name starts with \"d\"), co-host cannot be added and an alert is shown.\r\n   * - If a valid participant is selected, they are set as the new co-host.\r\n   * - The co-host responsibility is updated.\r\n   * - A socket event is emitted to update the co-host information.\r\n   * - The co-host modal is closed after updating the settings.\r\n   */\r\n  async modifyCoHostSettings({\r\n    roomName,\r\n    showAlert,\r\n    selectedParticipant,\r\n    coHost,\r\n    coHostResponsibility,\r\n    updateIsCoHostModalVisible,\r\n    updateCoHostResponsibility,\r\n    updateCoHost,\r\n    socket,\r\n  }: ModifyCoHostSettingsOptions): Promise<void> {\r\n    // Check if the chat room is in demo mode\r\n    if (roomName.toLowerCase().startsWith('d')) {\r\n      showAlert?.({\r\n        message: 'You cannot add co-host in demo mode.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    let newCoHost = coHost;\r\n\r\n    if (\r\n      coHost != 'No coHost' ||\r\n      (selectedParticipant && selectedParticipant != 'Select a participant')\r\n    ) {\r\n      if (selectedParticipant && selectedParticipant != 'Select a participant') {\r\n        newCoHost = selectedParticipant;\r\n        updateCoHost(newCoHost);\r\n      }\r\n\r\n      updateCoHostResponsibility(coHostResponsibility);\r\n\r\n      // Emit a socket event to update co-host information\r\n      socket.emit('updateCoHost', { roomName, coHost: newCoHost, coHostResponsibility });\r\n    }\r\n\r\n    // Close the co-host modal\r\n    updateIsCoHostModalVisible(false);\r\n  }\r\n}\r\n","// display-settings.service.ts\r\nimport { Injectable } from '@angular/core';\r\n\r\nexport interface LaunchDisplaySettingsOptions {\r\n  updateIsDisplaySettingsModalVisible: (isVisible: boolean) => void;\r\n  isDisplaySettingsModalVisible: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchDisplaySettingsType = (options: LaunchDisplaySettingsOptions) => void;\r\n\r\n/**\r\n * Toggles the visibility of the display settings modal.\r\n *\r\n * This method allows you to show or hide the display settings modal by updating its visibility state.\r\n *\r\n * @param {LaunchDisplaySettingsOptions} options - The options for launching the display settings.\r\n * @param {Function} options.updateIsDisplaySettingsModalVisible - Function to update the visibility state of the display settings modal.\r\n * @param {boolean} options.isDisplaySettingsModalVisible - Current visibility state of the display settings modal.\r\n *\r\n * @returns {void}\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: LaunchDisplaySettingsOptions = {\r\n *   updateIsDisplaySettingsModalVisible: (isVisible) => console.log('Display settings modal is now:', isVisible),\r\n *   isDisplaySettingsModalVisible: false,\r\n * };\r\n *\r\n * const launchDisplaySettingsService = new LaunchDisplaySettings();\r\n * launchDisplaySettingsService.launchDisplaySettings(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchDisplaySettings {\r\n  /**\r\n   * Toggles the visibility of the display settings modal.\r\n   *\r\n   * @param updateIsDisplaySettingsModalVisible - Function to update the visibility state of the display settings modal.\r\n   * @param isDisplaySettingsModalVisible - Current visibility state of the display settings modal.\r\n   */\r\n\r\n  launchDisplaySettings({\r\n    updateIsDisplaySettingsModalVisible,\r\n    isDisplaySettingsModalVisible,\r\n  }: LaunchDisplaySettingsOptions): void {\r\n    // Toggle the visibility of the display settings modal.\r\n    updateIsDisplaySettingsModalVisible(!isDisplaySettingsModalVisible);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { OnScreenChangesParameters, OnScreenChangesType, ShowAlert } from '../../@types/types';\r\n\r\nexport interface ModifyDisplaySettingsParameters extends OnScreenChangesParameters {\r\n  showAlert?: ShowAlert;\r\n  meetingDisplayType: string;\r\n  autoWave: boolean;\r\n  forceFullDisplay: boolean;\r\n  meetingVideoOptimized: boolean;\r\n  islevel: string;\r\n  recordStarted: boolean;\r\n  recordResumed: boolean;\r\n  recordStopped: boolean;\r\n  recordPaused: boolean;\r\n  recordingDisplayType: 'video' | 'media' | 'all';\r\n  recordingVideoOptimized: boolean;\r\n  prevForceFullDisplay: boolean;\r\n  prevMeetingDisplayType: string;\r\n  updateMeetingDisplayType: (displayType: string) => void;\r\n  updateAutoWave: (autoWave: boolean) => void;\r\n  updateForceFullDisplay: (forceFullDisplay: boolean) => void;\r\n  updateMeetingVideoOptimized: (optimized: boolean) => void;\r\n  updatePrevForceFullDisplay: (forceFullDisplay: boolean) => void;\r\n  updatePrevMeetingDisplayType: (displayType: string) => void;\r\n  updateIsDisplaySettingsModalVisible: (isVisible: boolean) => void;\r\n  updateFirstAll: (firstAll: boolean) => void;\r\n  updateUpdateMainWindow: (update: boolean) => void;\r\n  breakOutRoomStarted: boolean;\r\n  breakOutRoomEnded: boolean;\r\n\r\n  // mediasfu functions\r\n  onScreenChanges: OnScreenChangesType;\r\n\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ModifyDisplaySettingsOptions {\r\n  parameters: ModifyDisplaySettingsParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ModifyDisplaySettingsType = (options: ModifyDisplaySettingsOptions) => Promise<void>;\r\n\r\n/**\r\n * Modifies the display settings based on the provided parameters.\r\n *\r\n * This method updates the display settings for the meeting based on the participant's level,\r\n * recording status, and other conditions. It validates display types and shows alerts\r\n * when necessary. It also handles the display settings for breakout rooms.\r\n *\r\n * @param {ModifyDisplaySettingsOptions} options - The options containing the parameters to modify the display settings.\r\n * @param {Object} options.parameters - The parameters for modifying the display settings.\r\n * @param {Function} options.parameters.showAlert - Function to show alert messages.\r\n * @param {string} options.parameters.meetingDisplayType - The current meeting display type.\r\n * @param {boolean} options.parameters.autoWave - Flag indicating if auto wave is enabled.\r\n * @param {boolean} options.parameters.forceFullDisplay - Flag indicating if full display is forced.\r\n * @param {boolean} options.parameters.meetingVideoOptimized - Flag indicating if the meeting video is optimized.\r\n * @param {string} options.parameters.islevel - The current level of the meeting.\r\n * @param {boolean} options.parameters.recordStarted - Flag indicating if recording has started.\r\n * @param {boolean} options.parameters.recordResumed - Flag indicating if recording has resumed.\r\n * @param {boolean} options.parameters.recordStopped - Flag indicating if recording has stopped.\r\n * @param {boolean} options.parameters.recordPaused - Flag indicating if recording is paused.\r\n * @param {string} options.parameters.recordingDisplayType - The current recording display type.\r\n * @param {boolean} options.parameters.recordingVideoOptimized - Flag indicating if the recording video is optimized.\r\n * @param {string} options.parameters.prevForceFullDisplay - The previous force full display value.\r\n * @param {string} options.parameters.prevMeetingDisplayType - The previous meeting display type.\r\n * @param {Function} options.parameters.updateMeetingDisplayType - Function to update the meeting display type.\r\n * @param {Function} options.parameters.updateAutoWave - Function to update the auto wave setting.\r\n * @param {Function} options.parameters.updateForceFullDisplay - Function to update the force full display setting.\r\n * @param {Function} options.parameters.updateMeetingVideoOptimized - Function to update the meeting video optimization setting.\r\n * @param {Function} options.parameters.updatePrevForceFullDisplay - Function to update the previous force full display setting.\r\n * @param {Function} options.parameters.updatePrevMeetingDisplayType - Function to update the previous meeting display type.\r\n * @param {Function} options.parameters.updateIsDisplaySettingsModalVisible - Function to update the visibility of the display settings modal.\r\n * @param {Function} options.parameters.updateFirstAll - Function to update the first all setting.\r\n * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window.\r\n * @param {boolean} options.parameters.breakOutRoomStarted - Flag indicating if a breakout room has started.\r\n * @param {boolean} options.parameters.breakOutRoomEnded - Flag indicating if a breakout room has ended.\r\n * @param {Function} options.parameters.onScreenChanges - Function to handle screen changes.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the display settings have been modified.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: ModifyDisplaySettingsOptions = {\r\n *   parameters: {\r\n *     showAlert: (alert) => console.log(alert.message),\r\n *     meetingDisplayType: 'video',\r\n *     autoWave: true,\r\n *     forceFullDisplay: false,\r\n *     meetingVideoOptimized: true,\r\n *     islevel: '1',\r\n *     recordStarted: false,\r\n *     recordResumed: false,\r\n *     recordStopped: false,\r\n *     recordPaused: false,\r\n *     recordingDisplayType: 'media',\r\n *     recordingVideoOptimized: false,\r\n *     prevForceFullDisplay: false,\r\n *     prevMeetingDisplayType: 'media',\r\n *     updateMeetingDisplayType: (type) => console.log('Updated display type:', type),\r\n *     updateAutoWave: (wave) => console.log('Updated auto wave:', wave),\r\n *     updateForceFullDisplay: (fullDisplay) => console.log('Updated force full display:', fullDisplay),\r\n *     updateMeetingVideoOptimized: (optimized) => console.log('Updated video optimization:', optimized),\r\n *     updatePrevForceFullDisplay: (fullDisplay) => console.log('Updated previous full display:', fullDisplay),\r\n *     updatePrevMeetingDisplayType: (type) => console.log('Updated previous display type:', type),\r\n *     updateIsDisplaySettingsModalVisible: (isVisible) => console.log('Display settings modal is now:', isVisible),\r\n *     updateFirstAll: (firstAll) => console.log('Updated first all:', firstAll),\r\n *     updateUpdateMainWindow: (update) => console.log('Updated main window:', update),\r\n *     breakOutRoomStarted: false,\r\n *     breakOutRoomEnded: false,\r\n *     onScreenChanges: async ({ changed, parameters }) => console.log('Screen changes:', changed),\r\n *   },\r\n * };\r\n *\r\n * const modifyDisplaySettingsService = new ModifyDisplaySettings();\r\n * await modifyDisplaySettingsService.modifyDisplaySettings(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ModifyDisplaySettings {\r\n  /**\r\n   * Modifies the display settings based on the provided parameters.\r\n   *\r\n   * @param {ModifyDisplaySettingsOptions} options - The options containing the parameters to modify the display settings.\r\n   * @param {Object} options.parameters - The parameters for modifying the display settings.\r\n   * @param {Function} options.parameters.showAlert - Function to show alert messages.\r\n   * @param {string} options.parameters.meetingDisplayType - The current meeting display type.\r\n   * @param {boolean} options.parameters.autoWave - Flag indicating if auto wave is enabled.\r\n   * @param {boolean} options.parameters.forceFullDisplay - Flag indicating if full display is forced.\r\n   * @param {boolean} options.parameters.meetingVideoOptimized - Flag indicating if the meeting video is optimized.\r\n   * @param {string} options.parameters.islevel - The current level of the meeting.\r\n   * @param {boolean} options.parameters.recordStarted - Flag indicating if recording has started.\r\n   * @param {boolean} options.parameters.recordResumed - Flag indicating if recording has resumed.\r\n   * @param {boolean} options.parameters.recordStopped - Flag indicating if recording has stopped.\r\n   * @param {boolean} options.parameters.recordPaused - Flag indicating if recording is paused.\r\n   * @param {string} options.parameters.recordingDisplayType - The current recording display type.\r\n   * @param {boolean} options.parameters.recordingVideoOptimized - Flag indicating if the recording video is optimized.\r\n   * @param {string} options.parameters.prevForceFullDisplay - The previous force full display value.\r\n   * @param {string} options.parameters.prevMeetingDisplayType - The previous meeting display type.\r\n   * @param {Function} options.parameters.updateMeetingDisplayType - Function to update the meeting display type.\r\n   * @param {Function} options.parameters.updateAutoWave - Function to update the auto wave setting.\r\n   * @param {Function} options.parameters.updateForceFullDisplay - Function to update the force full display setting.\r\n   * @param {Function} options.parameters.updateMeetingVideoOptimized - Function to update the meeting video optimization setting.\r\n   * @param {Function} options.parameters.updatePrevForceFullDisplay - Function to update the previous force full display setting.\r\n   * @param {Function} options.parameters.updatePrevMeetingDisplayType - Function to update the previous meeting display type.\r\n   * @param {Function} options.parameters.updateIsDisplaySettingsModalVisible - Function to update the visibility of the display settings modal.\r\n   * @param {Function} options.parameters.updateFirstAll - Function to update the first all setting.\r\n   * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window.\r\n   * @param {boolean} options.parameters.breakOutRoomStarted - Flag indicating if a breakout room has started.\r\n   * @param {boolean} options.parameters.breakOutRoomEnded - Flag indicating if a breakout room has ended.\r\n   * @param {Function} options.parameters.onScreenChanges - Function to handle screen changes.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the display settings have been modified.\r\n   */\r\n\r\n  modifyDisplaySettings = async ({ parameters }: ModifyDisplaySettingsOptions): Promise<void> => {\r\n    // Destructure the parameters\r\n    let {\r\n      showAlert,\r\n      meetingDisplayType,\r\n      autoWave,\r\n      forceFullDisplay,\r\n      meetingVideoOptimized,\r\n      islevel,\r\n      recordStarted,\r\n      recordResumed,\r\n      recordStopped,\r\n      recordPaused,\r\n      recordingDisplayType,\r\n      recordingVideoOptimized,\r\n      prevForceFullDisplay,\r\n      prevMeetingDisplayType,\r\n      updateMeetingDisplayType,\r\n      updateAutoWave,\r\n      updateForceFullDisplay,\r\n      updateMeetingVideoOptimized,\r\n      updatePrevForceFullDisplay,\r\n      updatePrevMeetingDisplayType,\r\n      updateIsDisplaySettingsModalVisible,\r\n      updateFirstAll,\r\n      updateUpdateMainWindow,\r\n      breakOutRoomStarted,\r\n      breakOutRoomEnded,\r\n      onScreenChanges,\r\n    } = parameters;\r\n\r\n    // Update previous states\r\n    updateAutoWave(autoWave);\r\n    updateForceFullDisplay(forceFullDisplay);\r\n\r\n    if (islevel === '2' && (recordStarted || recordResumed) && !recordStopped && !recordPaused) {\r\n      if (\r\n        recordingDisplayType === 'video' &&\r\n        meetingDisplayType === 'video' &&\r\n        meetingVideoOptimized &&\r\n        !recordingVideoOptimized\r\n      ) {\r\n        showAlert?.({\r\n          message:\r\n            'Meeting display type can be either video, media, or all when recording display type is non-optimized video.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n        // Reset to previous values or handle as needed\r\n        meetingDisplayType = recordingDisplayType;\r\n        updateMeetingDisplayType(meetingDisplayType);\r\n        meetingVideoOptimized = recordingVideoOptimized;\r\n        updateMeetingVideoOptimized(meetingVideoOptimized);\r\n        return;\r\n      } else if (recordingDisplayType === 'media' && meetingDisplayType === 'video') {\r\n        showAlert?.({\r\n          message:\r\n            'Meeting display type can be either media or all when recording display type is media.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n\r\n        // Reset to previous values or handle as needed\r\n        meetingDisplayType = recordingDisplayType;\r\n        updateMeetingDisplayType(meetingDisplayType);\r\n        return;\r\n      } else if (\r\n        recordingDisplayType === 'all' &&\r\n        (meetingDisplayType === 'video' || meetingDisplayType === 'media')\r\n      ) {\r\n        showAlert?.({\r\n          message: 'Meeting display type can be only all when recording display type is all.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n        // Reset to previous values or handle as needed\r\n        meetingDisplayType = recordingDisplayType;\r\n        updateMeetingDisplayType(meetingDisplayType);\r\n        return;\r\n      }\r\n    }\r\n\r\n    updateMeetingDisplayType(meetingDisplayType);\r\n    updateMeetingVideoOptimized(meetingVideoOptimized);\r\n\r\n    // Close the modal or perform additional actions\r\n    updateIsDisplaySettingsModalVisible(false);\r\n\r\n    if (\r\n      prevMeetingDisplayType !== meetingDisplayType ||\r\n      prevForceFullDisplay !== forceFullDisplay\r\n    ) {\r\n      if (breakOutRoomStarted && !breakOutRoomEnded && meetingDisplayType !== 'all') {\r\n        showAlert?.({\r\n          message: 'Breakout room is active. Display type can only be all.',\r\n          type: 'danger',\r\n        });\r\n        meetingDisplayType = prevMeetingDisplayType;\r\n        updateMeetingDisplayType(prevMeetingDisplayType);\r\n        return;\r\n      }\r\n\r\n      updateFirstAll(meetingDisplayType !== 'all' ? true : false);\r\n      updateUpdateMainWindow(true);\r\n      await onScreenChanges({\r\n        changed: true,\r\n        parameters: { ...parameters, meetingDisplayType, forceFullDisplay },\r\n      });\r\n      updatePrevForceFullDisplay(forceFullDisplay);\r\n      updatePrevMeetingDisplayType(meetingDisplayType);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface LaunchConfirmExitOptions {\r\n  updateIsConfirmExitModalVisible: (isVisible: boolean) => void;\r\n  isConfirmExitModalVisible: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchConfirmExitType = (options: LaunchConfirmExitOptions) => void;\r\n\r\n/**\r\n * Toggles the visibility of the confirmation exit modal.\r\n *\r\n * This method updates the state of the confirmation exit modal by inverting its current visibility status.\r\n *\r\n * @param {LaunchConfirmExitOptions} options - The options for toggling the confirmation exit modal visibility.\r\n * @param {Function} options.updateIsConfirmExitModalVisible - Function to update the visibility state of the confirmation exit modal.\r\n * @param {boolean} options.isConfirmExitModalVisible - Current visibility state of the confirmation exit modal.\r\n *\r\n * @example\r\n * ```typescript\r\n * const launchConfirmExitService = new LaunchConfirmExit();\r\n * launchConfirmExitService.launchConfirmExit({\r\n *   updateIsConfirmExitModalVisible: (isVisible) => {\r\n *     console.log('Confirm exit modal is now:', isVisible ? 'Visible' : 'Hidden');\r\n *   },\r\n *   isConfirmExitModalVisible: false, // Initially not visible\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchConfirmExit {\r\n  /**\r\n   * Toggles the visibility of the confirmation exit modal.\r\n   *\r\n   * @param updateIsConfirmExitModalVisible - Function to update the visibility state of the confirmation exit modal.\r\n   * @param isConfirmExitModalVisible - Current visibility state of the confirmation exit modal.\r\n   */\r\n\r\n  launchConfirmExit({\r\n    updateIsConfirmExitModalVisible,\r\n    isConfirmExitModalVisible,\r\n  }: LaunchConfirmExitOptions): void {\r\n    updateIsConfirmExitModalVisible(!isConfirmExitModalVisible);\r\n  }\r\n}\r\n","// confirm-exit.service.ts\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface ConfirmExitOptions {\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n  member: string;\r\n  roomName: string;\r\n  ban?: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ConfirmExitType = (options: ConfirmExitOptions) => Promise<void>;\r\n\r\n/**\r\n * Confirms the exit of a member from a room and optionally bans them.\r\n *\r\n * This method emits a socket event to disconnect the specified member from the given room.\r\n * If the `ban` option is set to true, the member will be banned from rejoining the room.\r\n *\r\n * @param {ConfirmExitOptions} options - The options for confirming the exit.\r\n * @param {Socket} options.socket - The socket instance to emit the event.\r\n * @param {Socket} [options.localSocket] - The local socket instance to emit the event.\r\n * @param {string} options.member - The member who is exiting.\r\n * @param {string} options.roomName - The name of the room the member is exiting from.\r\n * @param {boolean} [options.ban=false] - Whether to ban the member from the room.\r\n * @returns {Promise<void>} A promise that resolves when the exit is confirmed.\r\n *\r\n * @example\r\n * ```typescript\r\n * const confirmExitService = new ConfirmExit();\r\n * await confirmExitService.confirmExit({\r\n *   socket: socketInstance,\r\n *   localSocket: localSocketInstance,\r\n *   member: 'JohnDoe',\r\n *   roomName: 'Room1',\r\n *   ban: true, // Optional: set to true if you want to ban the member\r\n * });\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ConfirmExit {\r\n  /**\r\n   * Confirms the exit of a member from a room and optionally bans them.\r\n   *\r\n   * @param {Object} options - The options for confirming the exit.\r\n   * @param {Socket} options.socket - The socket instance to emit the event.\r\n   * @param {Socket} [options.localSocket] - The local socket instance to emit the event.\r\n   * @param {string} options.member - The member who is exiting.\r\n   * @param {string} options.roomName - The name of the room the member is exiting from.\r\n   * @param {boolean} [options.ban=false] - Whether to ban the member from the room.\r\n   * @returns {Promise<void>} A promise that resolves when the exit is confirmed.\r\n   */\r\n  async confirmExit({ socket, localSocket, member, roomName, ban = false }: ConfirmExitOptions): Promise<void> {\r\n    // Emit a socket event to disconnect the user from the room\r\n    socket.emit('disconnectUser', { member: member, roomName: roomName, ban: ban });\r\n\r\n    if (localSocket && localSocket.id) {\r\n      // Emit a local socket event to disconnect the user from the room\r\n      localSocket.emit(\"disconnectUser\", {\r\n        member: member,\r\n        roomName: roomName,\r\n        ban: ban,\r\n      });\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nexport interface LaunchMediaSettingsOptions {\r\n  updateIsMediaSettingsModalVisible: (isVisible: boolean) => void;\r\n  isMediaSettingsModalVisible: boolean;\r\n  audioInputs: MediaDeviceInfo[];\r\n  videoInputs: MediaDeviceInfo[];\r\n  updateAudioInputs: (inputs: MediaDeviceInfo[]) => void;\r\n  updateVideoInputs: (inputs: MediaDeviceInfo[]) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchMediaSettingsType = (options: LaunchMediaSettingsOptions) => Promise<void>;\r\n\r\n/**\r\n * Launches the media settings modal and updates the available audio and video input devices.\r\n *\r\n * This method checks the current visibility of the media settings modal and, if it is not visible,\r\n * retrieves the list of available audio and video input devices. It then updates the state with\r\n * these devices and opens the modal. If the modal is already visible, it closes the modal.\r\n *\r\n * @param {LaunchMediaSettingsOptions} options - The options for launching media settings.\r\n * @param {Function} options.updateIsMediaSettingsModalVisible - Function to update the visibility state of the media settings modal.\r\n * @param {boolean} options.isMediaSettingsModalVisible - Current visibility state of the media settings modal.\r\n * @param {MediaDeviceInfo[]} options.audioInputs - Array to store available audio input devices.\r\n * @param {MediaDeviceInfo[]} options.videoInputs - Array to store available video input devices.\r\n * @param {Function} options.updateAudioInputs - Function to update the available audio input devices.\r\n * @param {Function} options.updateVideoInputs - Function to update the available video input devices.\r\n * @returns {Promise<void>} A promise that resolves when the media settings have been updated.\r\n *\r\n * @example\r\n * ```typescript\r\n * const launchMediaSettingsService = new LaunchMediaSettings();\r\n * launchMediaSettingsService.launchMediaSettings({\r\n *   updateIsMediaSettingsModalVisible: (isVisible) => {\r\n *     console.log('Media settings modal is now:', isVisible ? 'Visible' : 'Hidden');\r\n *   },\r\n *   isMediaSettingsModalVisible: false, // Initially not visible\r\n *   audioInputs: [],\r\n *   videoInputs: [],\r\n *   updateAudioInputs: (inputs) => {\r\n *     console.log('Available audio inputs:', inputs);\r\n *   },\r\n *   updateVideoInputs: (inputs) => {\r\n *     console.log('Available video inputs:', inputs);\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchMediaSettings {\r\n  /**\r\n   * Launches the media settings modal and updates the available audio and video input devices.\r\n   *\r\n   * @param {Object} options - The options for launching media settings.\r\n   * @param {Function} options.updateIsMediaSettingsModalVisible - Function to update the visibility state of the media settings modal.\r\n   * @param {boolean} options.isMediaSettingsModalVisible - Current visibility state of the media settings modal.\r\n   * @param {MediaDeviceInfo[]} options.audioInputs - Array to store available audio input devices.\r\n   * @param {MediaDeviceInfo[]} options.videoInputs - Array to store available video input devices.\r\n   * @param {Function} options.updateAudioInputs - Function to update the available audio input devices.\r\n   * @param {Function} options.updateVideoInputs - Function to update the available video input devices.\r\n   * @returns {Promise<void>} A promise that resolves when the media settings have been updated.\r\n   */\r\n\r\n  async launchMediaSettings({\r\n    updateIsMediaSettingsModalVisible,\r\n    isMediaSettingsModalVisible,\r\n    audioInputs,\r\n    videoInputs,\r\n    updateAudioInputs,\r\n    updateVideoInputs,\r\n  }: LaunchMediaSettingsOptions): Promise<void> {\r\n    // Check if media settings modal is not visible and update available audio and video input devices\r\n    if (!isMediaSettingsModalVisible) {\r\n      try {\r\n        // Get the list of all available media devices\r\n        const devices = await navigator.mediaDevices.enumerateDevices();\r\n        // Filter the devices to get only audio and video input devices\r\n        videoInputs = devices.filter((device: MediaDeviceInfo) => device.kind === 'videoinput');\r\n        audioInputs = devices.filter((device: MediaDeviceInfo) => device.kind === 'audioinput');\r\n\r\n        // Update the available audio and video input devices\r\n        updateVideoInputs(videoInputs);\r\n        updateAudioInputs(audioInputs);\r\n\r\n        // Open the media settings modal\r\n        updateIsMediaSettingsModalVisible(true);\r\n      } catch (error) {\r\n        // Open the media settings modal\r\n        updateIsMediaSettingsModalVisible(true);\r\n      }\r\n    } else {\r\n      // Close the media settings modal\r\n      updateIsMediaSettingsModalVisible(false);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface LaunchMenuModalOptions {\r\n  updateIsMenuModalVisible: (isVisible: boolean) => void;\r\n  isMenuModalVisible: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchMenuModalType = (options: LaunchMenuModalOptions) => void;\r\n\r\n/**\r\n * Toggles the visibility of the menu modal.\r\n *\r\n * This method updates the visibility state of the menu modal by calling the provided\r\n * function with the negated current visibility state. If the modal is currently visible,\r\n * it will be hidden, and vice versa.\r\n *\r\n * @param {LaunchMenuModalOptions} options - The options for launching the menu modal.\r\n * @param {Function} options.updateIsMenuModalVisible - Function to update the visibility state of the menu modal.\r\n * @param {boolean} options.isMenuModalVisible - Current visibility state of the menu modal.\r\n *\r\n * @example\r\n * ```typescript\r\n * const launchMenuModalService = new LaunchMenuModal();\r\n * launchMenuModalService.launchMenuModal({\r\n *   updateIsMenuModalVisible: (isVisible) => {\r\n *     console.log('Menu modal is now:', isVisible ? 'Visible' : 'Hidden');\r\n *   },\r\n *   isMenuModalVisible: false, // Initially not visible\r\n * });\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchMenuModal {\r\n  /**\r\n   * Toggles the visibility of the menu modal.\r\n   *\r\n   * @param updateIsMenuModalVisible - Function to update the visibility state of the menu modal.\r\n   * @param isMenuModalVisible - Current visibility state of the menu modal.\r\n   */\r\n\r\n  launchMenuModal({ updateIsMenuModalVisible, isMenuModalVisible }: LaunchMenuModalOptions): void {\r\n    updateIsMenuModalVisible(!isMenuModalVisible);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface LaunchMessagesOptions {\r\n  updateIsMessagesModalVisible: (visible: boolean) => void;\r\n  isMessagesModalVisible: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchMessagesType = (options: LaunchMessagesOptions) => void;\r\n\r\n/**\r\n * Toggles the visibility state of the messages modal.\r\n *\r\n * This method updates the visibility state of the messages modal by calling the provided\r\n * function with the negated current visibility state. If the modal is currently visible,\r\n * it will be closed; if it's hidden, it will be opened.\r\n *\r\n * @param {LaunchMessagesOptions} options - The options for launching the messages modal.\r\n * @param {Function} options.updateIsMessagesModalVisible - Function to update the visibility state of the messages modal.\r\n * @param {boolean} options.isMessagesModalVisible - Current visibility state of the messages modal.\r\n *\r\n * @example\r\n * ```typescript\r\n * const launchMessagesService = new LaunchMessages();\r\n * launchMessagesService.launchMessages({\r\n *   updateIsMessagesModalVisible: (visible) => {\r\n *     console.log('Messages modal is now:', visible ? 'Visible' : 'Hidden');\r\n *   },\r\n *   isMessagesModalVisible: false, // Initially not visible\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchMessages {\r\n  /**\r\n   * Toggles the visibility state of the messages modal.\r\n   * If the modal is currently visible, it will be closed. If it's hidden, it will be opened.\r\n   *\r\n   * @param updateIsMessagesModalVisible - Function to update the visibility state of the messages modal.\r\n   * @param isMessagesModalVisible - Current visibility state of the messages modal.\r\n   */\r\n  launchMessages({\r\n    updateIsMessagesModalVisible,\r\n    isMessagesModalVisible,\r\n  }: LaunchMessagesOptions): void {\r\n    updateIsMessagesModalVisible(!isMessagesModalVisible);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { CoHostResponsibility, Message, ShowAlert } from '../../@types/types';\r\n\r\nexport interface SendMessageOptions {\r\n  member: string;\r\n  islevel: string;\r\n  showAlert?: ShowAlert;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  coHost: string;\r\n  chatSetting: string;\r\n  message: string;\r\n  roomName: string;\r\n  messagesLength: number;\r\n  receivers: string[];\r\n  group: boolean;\r\n  sender: string;\r\n  socket: Socket;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type SendMessageType = (options: SendMessageOptions) => Promise<void>;\r\n\r\n/**\r\n * Sends a message to the specified room.\r\n *\r\n * This method validates the message and its recipients, checks user permissions,\r\n * and then emits the message to the server via a socket connection. It also\r\n * handles alerting the user for any errors encountered during the process,\r\n * such as exceeding message limits or invalid input.\r\n *\r\n * @param {SendMessageOptions} options - The options for sending the message.\r\n * @param {string} options.member - The member sending the message.\r\n * @param {string} options.islevel - The level of the member.\r\n * @param {Function} options.showAlert - Function to show alert messages.\r\n * @param {Array} options.coHostResponsibility - List of co-host responsibilities.\r\n * @param {string} options.coHost - The co-host of the room.\r\n * @param {string} options.chatSetting - Chat setting for the room.\r\n * @param {string} options.message - The message to be sent.\r\n * @param {string} options.roomName - The name of the room.\r\n * @param {number} options.messagesLength - The current number of messages in the room.\r\n * @param {Array} options.receivers - List of receivers for the message.\r\n * @param {boolean} options.group - Indicates if the message is for a group.\r\n * @param {string} options.sender - The sender of the message.\r\n * @param {Object} options.socket - The socket instance for emitting events.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the message is sent.\r\n *\r\n * @throws Will throw an error if the message count limit is exceeded.\r\n * @throws Will throw an error if the message, sender, or receivers are not valid.\r\n * @throws Will throw an error if the user is not allowed to send a message in the event room.\r\n *\r\n * @example\r\n * ```typescript\r\n * const sendMessageService = new SendMessage();\r\n * await sendMessageService.sendMessage({\r\n *   member: 'JohnDoe',\r\n *   islevel: '1',\r\n *   showAlert: (alert) => console.log(alert.message),\r\n *   coHostResponsibility: [],\r\n *   coHost: 'JaneDoe',\r\n *   chatSetting: 'allowed',\r\n *   message: 'Hello everyone!',\r\n *   roomName: 'Room1',\r\n *   messagesLength: 50,\r\n *   receivers: ['user1', 'user2'],\r\n *   group: true,\r\n *   sender: 'JohnDoe',\r\n *   socket: socketInstance,\r\n * });\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SendMessage {\r\n  /**\r\n   * Sends a message to the specified room.\r\n   *\r\n   * @param {Object} options - The options for sending the message.\r\n   * @param {string} options.member - The member sending the message.\r\n   * @param {string} options.islevel - The level of the member.\r\n   * @param {Function} options.showAlert - Function to show alert messages.\r\n   * @param {Array} options.coHostResponsibility - List of co-host responsibilities.\r\n   * @param {string} options.coHost - The co-host of the room.\r\n   * @param {boolean} options.chatSetting - Chat setting for the room.\r\n   * @param {string} options.message - The message to be sent.\r\n   * @param {string} options.roomName - The name of the room.\r\n   * @param {number} options.messagesLength - The current number of messages in the room.\r\n   * @param {Array} options.receivers - List of receivers for the message.\r\n   * @param {boolean} options.group - Indicates if the message is for a group.\r\n   * @param {string} options.sender - The sender of the message.\r\n   * @param {Object} options.socket - The socket instance for communication.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the message is sent.\r\n   *\r\n   * @throws Will throw an error if the message count limit is exceeded.\r\n   * @throws Will throw an error if the message, sender, or receivers are not valid.\r\n   * @throws Will throw an error if the user is not allowed to send a message in the event room.\r\n   */\r\n\r\n  async sendMessage({\r\n    member,\r\n    islevel,\r\n    showAlert,\r\n    coHostResponsibility,\r\n    coHost,\r\n    chatSetting,\r\n    message,\r\n    roomName,\r\n    messagesLength,\r\n    receivers,\r\n    group,\r\n    sender,\r\n    socket,\r\n  }: SendMessageOptions): Promise<void> {\r\n    let chatValue = false;\r\n\r\n    // Check message count limit based on the room type\r\n    if (\r\n      (messagesLength > 100 && roomName.startsWith('d')) ||\r\n      (messagesLength > 500 && roomName.startsWith('s')) ||\r\n      (messagesLength > 100000 && roomName.startsWith('p'))\r\n    ) {\r\n      showAlert?.({\r\n        message: 'You have reached the maximum number of messages allowed.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n      return;\r\n    }\r\n\r\n    // Validate message, sender, and receivers\r\n    if (!message || !receivers || (!member && !sender)) {\r\n      showAlert?.({\r\n        message: 'Message is not valid.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n      return;\r\n    }\r\n\r\n    // Create the message object\r\n    const messageObject: Message = {\r\n      sender: sender ? sender : member,\r\n      receivers: receivers,\r\n      message: message,\r\n      timestamp: new Date().toLocaleTimeString(),\r\n      group: group !== undefined && group !== null ? group : false,\r\n    };\r\n\r\n    try {\r\n      // Check co-host responsibility for chat\r\n      chatValue = coHostResponsibility.find((item) => item.name === 'chat')?.value ?? false;\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n\r\n    if (islevel === '2' || (coHost === member && chatValue === true)) {\r\n      // Allow sending message\r\n    } else {\r\n      // Check if user is allowed to send a message in the event room\r\n      if (!chatSetting) {\r\n        showAlert?.({\r\n          message: 'You are not allowed to send a message in this event room',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n        return;\r\n      }\r\n    }\r\n\r\n    // Send the message to the server\r\n    socket.emit('sendMessage', {\r\n      messageObject: messageObject,\r\n      roomName: roomName,\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface LaunchParticipantsOptions {\r\n  updateIsParticipantsModalVisible: (isVisible: boolean) => void;\r\n  isParticipantsModalVisible: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchParticipantsType = (options: LaunchParticipantsOptions) => void;\r\n\r\n/**\r\n * Toggles the visibility of the participants modal.\r\n *\r\n * This method checks the current visibility state of the participants modal\r\n * and updates it accordingly. If the modal is currently visible, it will be hidden.\r\n * If it is hidden, it will be displayed.\r\n *\r\n * @param {LaunchParticipantsOptions} options - The options for toggling the participants modal.\r\n * @param {Function} options.updateIsParticipantsModalVisible - Function to update the visibility state of the participants modal.\r\n * @param {boolean} options.isParticipantsModalVisible - Current visibility state of the participants modal.\r\n *\r\n * @returns {void}\r\n *\r\n * @example\r\n * ```typescript\r\n * const launchParticipantsService = new LaunchParticipants();\r\n * launchParticipantsService.launchParticipants({\r\n *   updateIsParticipantsModalVisible: (isVisible) => {\r\n *     console.log(`Participants modal is now ${isVisible ? 'visible' : 'hidden'}`);\r\n *   },\r\n *   isParticipantsModalVisible: false,\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchParticipants {\r\n  /**\r\n   * Toggles the visibility of the participants modal.\r\n   * @function\r\n   * @param {Object} options - The options object containing necessary variables and functions.\r\n   * @param {Function} options.updateIsParticipantsModalVisible - Function to update the visibility state of the participants modal.\r\n   * @param {boolean} options.isParticipantsModalVisible - Current visibility state of the participants modal.\r\n   */\r\n\r\n  launchParticipants({\r\n    updateIsParticipantsModalVisible,\r\n    isParticipantsModalVisible,\r\n  }: LaunchParticipantsOptions): void {\r\n    updateIsParticipantsModalVisible(!isParticipantsModalVisible);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Participant, CoHostResponsibility, ShowAlert } from '../../@types/types';\r\nexport interface MessageParticipantsOptions {\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  participant: Participant;\r\n  member: string;\r\n  islevel: string;\r\n  showAlert?: ShowAlert;\r\n  coHost: string;\r\n  updateIsMessagesModalVisible: (isVisible: boolean) => void;\r\n  updateDirectMessageDetails: (participant: Participant | null) => void;\r\n  updateStartDirectMessage: (start: boolean) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type MessageParticipantsType = (options: MessageParticipantsOptions) => void;\r\n\r\n/**\r\n * Sends a direct message to a participant if certain conditions are met.\r\n *\r\n * This method checks the current user's level and their co-host responsibilities\r\n * to determine if they are allowed to send a direct message to a specified participant.\r\n * If the user has the appropriate permissions, the method updates the direct message\r\n * details and opens the messages modal. If the user is not allowed to send the message,\r\n * an alert is displayed.\r\n *\r\n * @param {MessageParticipantsOptions} options - The options for sending a message to a participant.\r\n * @param {CoHostResponsibility[]} options.coHostResponsibility - Array of responsibilities assigned to the co-host.\r\n * @param {Participant} options.participant - The participant to whom the message is to be sent.\r\n * @param {string} options.member - The current member attempting to send the message.\r\n * @param {string} options.islevel - The level of the current member.\r\n * @param {Function} [options.showAlert] - Function to show an alert message if the message cannot be sent.\r\n * @param {string} options.coHost - The co-host member.\r\n * @param {Function} options.updateIsMessagesModalVisible - Function to update the visibility of the messages modal.\r\n * @param {Function} options.updateDirectMessageDetails - Function to update the details of the direct message.\r\n * @param {Function} options.updateStartDirectMessage - Function to start the direct message.\r\n *\r\n * @returns {void}\r\n *\r\n * @example\r\n * ```typescript\r\n * const messageService = new MessageParticipants();\r\n * messageService.messageParticipants({\r\n *   coHostResponsibility: [{ name: 'chat', value: true }],\r\n *   participant: { name: 'John', islevel: '1' },\r\n *   member: 'Alice',\r\n *   islevel: '1',\r\n *   showAlert: ({ message, type, duration }) => {\r\n *     console.log(`Alert: ${message} - Type: ${type} - Duration: ${duration}`);\r\n *   },\r\n *   coHost: 'Bob',\r\n *   updateIsMessagesModalVisible: (isVisible) => {\r\n *     console.log(`Messages modal is now ${isVisible ? 'visible' : 'hidden'}`);\r\n *   },\r\n *   updateDirectMessageDetails: (participant) => {\r\n *     console.log(`Direct messaging: ${participant.name}`);\r\n *   },\r\n *   updateStartDirectMessage: (start) => {\r\n *     console.log(`Direct messaging started: ${start}`);\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class MessageParticipants {\r\n  /**\r\n   * Sends a direct message to a participant if certain conditions are met.\r\n   *s\r\n   * @param coHostResponsibility - Array of responsibilities assigned to the co-host.\r\n   * @param participant - The participant to whom the message is to be sent.\r\n   * @param member - The current member attempting to send the message.\r\n   * @param islevel - The level of the current member.\r\n   * @param showAlert - Function to show an alert message.\r\n   * @param coHost - The co-host member.\r\n   * @param updateIsMessagesModalVisible - Function to update the visibility of the messages modal.\r\n   * @param updateDirectMessageDetails - Function to update the details of the direct message.\r\n   * @param updateStartDirectMessage - Function to start the direct message.\r\n   *\r\n   * @returns void\r\n   */\r\n  messageParticipants({\r\n    coHostResponsibility,\r\n    participant,\r\n    member,\r\n    islevel,\r\n    showAlert,\r\n    coHost,\r\n    updateIsMessagesModalVisible,\r\n    updateDirectMessageDetails,\r\n    updateStartDirectMessage,\r\n  }: MessageParticipantsOptions): void {\r\n    let chatValue = false;\r\n\r\n    try {\r\n      chatValue = coHostResponsibility.find((item) => item.name === 'chat')?.value ?? false;\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n\r\n    if (islevel === '2' || (coHost === member && chatValue === true)) {\r\n      if (participant.islevel !== '2') {\r\n        updateDirectMessageDetails(participant);\r\n        updateStartDirectMessage(true);\r\n        updateIsMessagesModalVisible(true);\r\n      }\r\n    } else {\r\n      showAlert?.({\r\n        message: 'You are not allowed to send this message',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      return;\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { Participant, CoHostResponsibility, ShowAlert } from '../../@types/types';\r\nexport interface MuteParticipantsOptions {\r\n  socket: Socket;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  participant: Participant;\r\n  member: string;\r\n  islevel: string;\r\n  showAlert?: ShowAlert;\r\n  coHost: string;\r\n  roomName: string;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type MuteParticipantsType = (options: MuteParticipantsOptions) => Promise<void>;\r\n\r\n/**\r\n * Mutes a participant in a media session if certain conditions are met.\r\n *\r\n * This method checks the current user's level and their co-host responsibilities\r\n * to determine if they are allowed to mute a specified participant. If allowed,\r\n * the method emits a socket event to mute the participant. If not allowed, an alert\r\n * is displayed.\r\n *\r\n * @param {MuteParticipantsOptions} options - The options for muting participants.\r\n * @param {Socket} options.socket - The socket instance for communication.\r\n * @param {CoHostResponsibility[]} options.coHostResponsibility - List of co-host responsibilities.\r\n * @param {Participant} options.participant - The participant to be muted.\r\n * @param {string} options.member - The current member attempting to mute.\r\n * @param {string} options.islevel - The level of the current member.\r\n * @param {Function} [options.showAlert] - Optional function to show alerts.\r\n * @param {string} options.coHost - The co-host information.\r\n * @param {string} options.roomName - The name of the room.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the participant is muted.\r\n *\r\n * @throws Will log an error if there is an issue accessing co-host responsibilities.\r\n *\r\n * @example\r\n * ```typescript\r\n * const muteService = new MuteParticipants();\r\n * muteService.muteParticipants({\r\n *   socket: socketInstance,\r\n *   coHostResponsibility: [{ name: 'media', value: true }],\r\n *   participant: { id: '123', name: 'John', islevel: '1', muted: false },\r\n *   member: 'Alice',\r\n *   islevel: '1',\r\n *   showAlert: ({ message, type }) => {\r\n *     console.log(`Alert: ${message} - Type: ${type}`);\r\n *   },\r\n *   coHost: 'Bob',\r\n *   roomName: 'room1',\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class MuteParticipants {\r\n  /**\r\n   * Mutes a participant in a media session if certain conditions are met.\r\n   *\r\n   * @param {Object} options - The options for muting participants.\r\n   * @param {Socket} options.socket - The socket instance for communication.\r\n   * @param {Array} options.coHostResponsibility - List of co-host responsibilities.\r\n   * @param {Object} options.participant - The participant to be muted.\r\n   * @param {Object} options.member - The current member attempting to mute.\r\n   * @param {string} options.islevel - The level of the current member.\r\n   * @param {Function} [options.showAlert] - Optional function to show alerts.\r\n   * @param {Object} options.coHost - The co-host information.\r\n   * @param {string} options.roomName - The name of the room.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the participant is muted.\r\n   *\r\n   * @throws Will log an error if there is an issue accessing co-host responsibilities.\r\n   */\r\n\r\n  async muteParticipants({\r\n    socket,\r\n    coHostResponsibility,\r\n    participant,\r\n    member,\r\n    islevel,\r\n    showAlert,\r\n    coHost,\r\n    roomName,\r\n  }: MuteParticipantsOptions): Promise<void> {\r\n    let mediaValue = false;\r\n\r\n    try {\r\n      mediaValue = coHostResponsibility.find((item) => item.name === 'media')?.value ?? false;\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n\r\n    if (islevel === '2' || (coHost === member && mediaValue === true)) {\r\n      if (!participant.muted && participant.islevel !== '2') {\r\n        const participantId = participant.id;\r\n        socket.emit('controlMedia', {\r\n          participantId,\r\n          participantName: participant.name,\r\n          type: 'all',\r\n          roomName,\r\n        });\r\n      }\r\n    } else {\r\n      showAlert?.({\r\n        message: 'You are not allowed to mute other participants',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { CoHostResponsibility, Participant, ShowAlert } from '../../@types/types';\r\n\r\nexport interface RemoveParticipantsOptions {\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  participant: Participant;\r\n  member: string;\r\n  islevel: string;\r\n  showAlert?: ShowAlert;\r\n  coHost: string;\r\n  participants: Participant[];\r\n  socket: Socket;\r\n  roomName: string;\r\n  updateParticipants: (participants: Participant[]) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type RemoveParticipantsType = (options: RemoveParticipantsOptions) => Promise<void>;\r\n\r\n/**\r\n * Removes a participant from the room if the user has the appropriate permissions.\r\n *\r\n * This method checks the current user's level and their co-host responsibilities\r\n * to determine if they are allowed to remove a specified participant. If allowed,\r\n * the method emits a socket event to disconnect the participant and updates\r\n * the local list of participants. If not allowed, an alert is displayed.\r\n *\r\n * @param {RemoveParticipantsOptions} options - The options for removing a participant.\r\n * @param {CoHostResponsibility[]} options.coHostResponsibility - The responsibilities of the co-host.\r\n * @param {Participant} options.participant - The participant to be removed.\r\n * @param {string} options.member - The current member attempting to remove the participant.\r\n * @param {string} options.islevel - The level of the current member.\r\n * @param {Function} [options.showAlert] - Optional function to show alert messages.\r\n * @param {string} options.coHost - The co-host information.\r\n * @param {Participant[]} options.participants - The list of current participants.\r\n * @param {Socket} options.socket - The socket instance for emitting events.\r\n * @param {string} options.roomName - The name of the room.\r\n * @param {Function} options.updateParticipants - Function to update the participants list.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the participant is removed.\r\n *\r\n * @throws Will log an error if there is an issue accessing co-host responsibilities.\r\n *\r\n * @example\r\n * ```typescript\r\n * const removeParticipantsService = new RemoveParticipants();\r\n * await removeParticipantsService.removeParticipants({\r\n *   coHostResponsibility: [{ name: 'participants', value: true }],\r\n *   participant: { id: '123', name: 'John', islevel: '1' },\r\n *   member: 'Alice',\r\n *   islevel: '1',\r\n *   showAlert: ({ message, type }) => {\r\n *     console.log(`Alert: ${message} - Type: ${type}`);\r\n *   },\r\n *   coHost: 'Bob',\r\n *   participants: [{ id: '123', name: 'John', islevel: '1' }],\r\n *   socket: socketInstance,\r\n *   roomName: 'room1',\r\n *   updateParticipants: (updatedList) => {\r\n *     console.log('Updated participants:', updatedList);\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RemoveParticipants {\r\n  /**\r\n   * Removes a participant from the room if the user has the appropriate permissions.\r\n   *\r\n   * @param {RemoveParticipantsOptions} options - The options for removing a participant.\r\n   * @param {Array} options.coHostResponsibility - The responsibilities of the co-host.\r\n   * @param {Object} options.participant - The participant to be removed.\r\n   * @param {Object} options.member - The current member attempting to remove the participant.\r\n   * @param {string} options.islevel - The level of the current member.\r\n   * @param {Function} [options.showAlert] - Function to show an alert message.\r\n   * @param {Object} options.coHost - The co-host information.\r\n   * @param {Array} options.participants - The list of current participants.\r\n   * @param {Object} options.socket - The socket instance for emitting events.\r\n   * @param {string} options.roomName - The name of the room.\r\n   * @param {Function} options.updateParticipants - Function to update the participants list.\r\n   *\r\n   * @returns {Promise<void>} - A promise that resolves when the participant is removed.\r\n   */\r\n\r\n  async removeParticipants({\r\n    coHostResponsibility,\r\n    participant,\r\n    member,\r\n    islevel,\r\n    showAlert,\r\n    coHost,\r\n    participants,\r\n    socket,\r\n    roomName,\r\n    updateParticipants,\r\n  }: RemoveParticipantsOptions): Promise<void> {\r\n    let participantsValue = false;\r\n\r\n    try {\r\n      participantsValue =\r\n        coHostResponsibility.find((item) => item.name === 'participants')?.value ?? false;\r\n    } catch (error) {\r\n      participantsValue = false;\r\n    }\r\n\r\n    if (islevel === '2' || (coHost === member && participantsValue === true)) {\r\n      if (participant.islevel !== '2') {\r\n        const participantId = participant.id;\r\n\r\n        // Emit a socket event to disconnect the user\r\n        socket.emit('disconnectUserInitiate', {\r\n          member: participant.name,\r\n          roomName,\r\n          id: participantId,\r\n        });\r\n\r\n        // Remove the participant from the local array\r\n        participants.splice(\r\n          participants.findIndex((obj: any) => obj.name === participant.name),\r\n          1,\r\n        );\r\n\r\n        // Update the participants array\r\n        updateParticipants(participants);\r\n      }\r\n    } else {\r\n      showAlert?.({\r\n        message: 'You are not allowed to remove other participants',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Poll, ShowAlert } from '../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\nexport interface HandleCreatePollOptions {\r\n  poll: Poll;\r\n  socket: Socket;\r\n  roomName: string;\r\n  showAlert?: ShowAlert;\r\n  updateIsPollModalVisible: (visible: boolean) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type HandleCreatePollType = (options: HandleCreatePollOptions) => Promise<void>;\r\n\r\n/**\r\n * Handles the creation of a poll.\r\n *\r\n * This method sends a request to create a poll in the specified room via a socket event.\r\n * It also handles the response from the server to notify the user whether the poll was\r\n * created successfully or if there was an error.\r\n *\r\n * @param {HandleCreatePollOptions} options - The options for creating the poll.\r\n * @param {Poll} options.poll - The poll object containing the poll details.\r\n * @param {Socket} options.socket - The socket instance for emitting events.\r\n * @param {string} options.roomName - The name of the room where the poll will be created.\r\n * @param {Function} [options.showAlert] - Optional function to show alert messages.\r\n * @param {Function} options.updateIsPollModalVisible - Function to update the visibility of the poll modal.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the poll is created successfully.\r\n *\r\n * @throws Will handle any errors during the poll creation process silently.\r\n *\r\n * @example\r\n * ```typescript\r\n * const handleCreatePollService = new HandleCreatePoll();\r\n * const pollData = {\r\n *   question: 'What is your favorite color?',\r\n *   options: ['Red', 'Blue', 'Green'],\r\n * };\r\n * await handleCreatePollService.handleCreatePoll({\r\n *   poll: pollData,\r\n *   socket: socketInstance,\r\n *   roomName: 'room1',\r\n *   showAlert: ({ message, type }) => {\r\n *     console.log(`Alert: ${message} - Type: ${type}`);\r\n *   },\r\n *   updateIsPollModalVisible: (isVisible) => {\r\n *     console.log('Poll modal visibility:', isVisible);\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class HandleCreatePoll {\r\n  /**\r\n   * Handles the creation of a poll.\r\n   *\r\n   * @param {Object} options - The options for creating the poll.\r\n   * @param {Poll} options.poll - The poll object containing the poll details.\r\n   * @param {Object} options.parameters - Additional parameters for creating the poll.\r\n   * @returns {Promise<void>} - A promise that resolves when the poll is created successfully.\r\n   */\r\n\r\n  async handleCreatePoll({\r\n    poll,\r\n    socket,\r\n    roomName,\r\n    showAlert,\r\n    updateIsPollModalVisible,\r\n  }: HandleCreatePollOptions): Promise<void> {\r\n    try {\r\n      socket.emit(\r\n        'createPoll',\r\n        { roomName, poll },\r\n        (response: { success: boolean; reason?: string }) => {\r\n          if (response.success) {\r\n            showAlert?.({ message: 'Poll created successfully', type: 'success' });\r\n            updateIsPollModalVisible(false);\r\n          } else {\r\n            showAlert?.({ message: response.reason || 'Failed to create poll', type: 'danger' });\r\n          }\r\n        },\r\n      );\r\n    } catch {\r\n      /* handle error */\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { ShowAlert } from '../../@types/types';\r\n\r\nexport interface HandleEndPollOptions {\r\n  pollId: string;\r\n  socket: Socket;\r\n  showAlert?: ShowAlert;\r\n  roomName: string;\r\n  updateIsPollModalVisible: (visible: boolean) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type HandleEndPollType = (options: HandleEndPollOptions) => Promise<void>;\r\n\r\n/**\r\n * Handles the end of a poll by emitting an \"endPoll\" event through the provided socket.\r\n * Displays an alert based on the success or failure of the operation.\r\n *\r\n * @param {HandleEndPollOptions} options - The options for ending the poll.\r\n * @param {string} options.pollId - The ID of the poll to end.\r\n * @param {Socket} options.socket - The socket instance to emit the event.\r\n * @param {Function} [options.showAlert] - Optional function to display alerts.\r\n * @param {string} options.roomName - The name of the room where the poll is being conducted.\r\n * @param {Function} options.updateIsPollModalVisible - Function to update the visibility of the poll modal.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the poll end operation is complete.\r\n *\r\n * @throws Will log an error if the operation fails to emit the end poll event.\r\n *\r\n * @example\r\n * ```typescript\r\n * const handleEndPollService = new HandleEndPoll();\r\n * const pollId = '12345';\r\n * await handleEndPollService.handleEndPoll({\r\n *   pollId: pollId,\r\n *   socket: socketInstance,\r\n *   roomName: 'room1',\r\n *   showAlert: ({ message, type }) => {\r\n *     console.log(`Alert: ${message} - Type: ${type}`);\r\n *   },\r\n *   updateIsPollModalVisible: (isVisible) => {\r\n *     console.log('Poll modal visibility:', isVisible);\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class HandleEndPoll {\r\n  /**\r\n   * Handles the end of a poll by emitting an \"endPoll\" event through the provided socket.\r\n   * Displays an alert based on the success or failure of the operation.\r\n   *\r\n   * @param {Object} options - The options for ending the poll.\r\n   * @param {string} options.pollId - The ID of the poll to end.\r\n   * @param {Socket} options.socket - The socket instance to emit the event.\r\n   * @param {Function} [options.showAlert] - Optional function to display alerts.\r\n   * @param {string} options.roomName - The name of the room where the poll is being conducted.\r\n   * @returns {Promise<void>} A promise that resolves when the poll end operation is complete.\r\n   */\r\n\r\n  async handleEndPoll({\r\n    pollId,\r\n    socket,\r\n    showAlert,\r\n    roomName,\r\n    updateIsPollModalVisible,\r\n  }: HandleEndPollOptions): Promise<void> {\r\n    try {\r\n      socket.emit(\r\n        'endPoll',\r\n        { roomName, poll_id: pollId },\r\n        (response: { success: boolean; reason?: string }) => {\r\n          if (response.success) {\r\n            showAlert?.({ message: 'Poll ended successfully', type: 'success' });\r\n            updateIsPollModalVisible(false);\r\n          } else {\r\n            showAlert?.({ message: response.reason || 'Failed to end poll', type: 'danger' });\r\n          }\r\n        },\r\n      );\r\n    } catch (error) {\r\n      console.log(error);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { ShowAlert } from '../../@types/types';\r\n\r\nexport interface HandleVotePollOptions {\r\n  pollId: string;\r\n  optionIndex: number;\r\n  socket: Socket;\r\n  showAlert?: ShowAlert;\r\n  member: string;\r\n  roomName: string;\r\n  updateIsPollModalVisible: (isVisible: boolean) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type HandleVotePollType = (options: HandleVotePollOptions) => Promise<void>;\r\n\r\n/**\r\n * Handles the voting process for a poll.\r\n *\r\n * @param {HandleVotePollOptions} options - The options for handling the vote.\r\n * @param {string} options.pollId - The ID of the poll.\r\n * @param {number} options.optionIndex - The index of the selected option.\r\n * @param {Socket} options.socket - The socket instance for communication.\r\n * @param {Function} [options.showAlert] - Optional function to show alerts.\r\n * @param {string} options.member - The member who is voting.\r\n * @param {string} options.roomName - The name of the room where the poll is conducted.\r\n * @param {Function} options.updateIsPollModalVisible - Function to update the visibility of the poll modal.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the vote is handled.\r\n *\r\n * @throws Will log an error message if there is an issue submitting the vote.\r\n *\r\n * @example\r\n * ```typescript\r\n * const handleVotePollService = new HandleVotePoll();\r\n * await handleVotePollService.handleVotePoll({\r\n *   pollId: '12345',\r\n *   optionIndex: 1,\r\n *   socket: socketInstance,\r\n *   member: 'user1',\r\n *   roomName: 'room1',\r\n *   showAlert: ({ message, type }) => {\r\n *     console.log(`Alert: ${message} - Type: ${type}`);\r\n *   },\r\n *   updateIsPollModalVisible: (isVisible) => {\r\n *     console.log('Poll modal visibility:', isVisible);\r\n *   },\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class HandleVotePoll {\r\n  /**\r\n   * Handles the voting process for a poll.\r\n   *\r\n   * @param {Object} options - The options for handling the vote.\r\n   * @param {string} options.pollId - The ID of the poll.\r\n   * @param {number} options.optionIndex - The index of the selected option.\r\n   * @param {Socket} options.socket - The socket instance for communication.\r\n   * @param {Function} [options.showAlert] - Optional function to show alerts.\r\n   * @param {Object} options.member - The member who is voting.\r\n   * @param {string} options.roomName - The name of the room where the poll is conducted.\r\n   * @param {Function} options.updateIsPollModalVisible - Function to update the visibility of the poll modal.\r\n   * @returns {Promise<void>} A promise that resolves when the vote is handled.\r\n   *\r\n   * @throws Will log an error message if there is an issue submitting the vote.\r\n   */\r\n\r\n  async handleVotePoll({\r\n    pollId,\r\n    optionIndex,\r\n    socket,\r\n    showAlert,\r\n    member,\r\n    roomName,\r\n    updateIsPollModalVisible,\r\n  }: HandleVotePollOptions): Promise<void> {\r\n    try {\r\n      socket.emit(\r\n        'votePoll',\r\n        {\r\n          roomName,\r\n          poll_id: pollId,\r\n          member,\r\n          choice: optionIndex,\r\n        },\r\n        (response: { success: boolean; reason: string }) => {\r\n          if (response.success) {\r\n            showAlert?.({ message: 'Vote submitted successfully', type: 'success' });\r\n            updateIsPollModalVisible(false);\r\n          } else {\r\n            showAlert?.({ message: response.reason, type: 'danger' });\r\n          }\r\n        },\r\n      );\r\n    } catch (error) {\r\n      // console.log(error);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface LaunchPollOptions {\r\n  updateIsPollModalVisible: (isVisible: boolean) => void;\r\n  isPollModalVisible: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchPollType = (options: LaunchPollOptions) => void;\r\n\r\n/**\r\n * Toggles the visibility of the poll modal.\r\n *\r\n * @param {LaunchPollOptions} options - The options object containing necessary variables and functions.\r\n * @param {Function} options.updateIsPollModalVisible - Function to update the visibility state of the poll modal.\r\n * @param {boolean} options.isPollModalVisible - Current visibility state of the poll modal.\r\n *\r\n * @returns {void}\r\n *\r\n * @example\r\n * ```typescript\r\n * const launchPollService = new LaunchPoll();\r\n * launchPollService.launchPoll({\r\n *   updateIsPollModalVisible: (isVisible) => {\r\n *     console.log('Poll modal visibility:', isVisible);\r\n *   },\r\n *   isPollModalVisible: false,\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchPoll {\r\n  /**\r\n   * Toggles the visibility of the poll modal.\r\n   * @function\r\n   * @param {Object} options - The options object containing necessary variables and functions.\r\n   * @param {Function} options.updateIsPollModalVisible - Function to update the visibility state of the poll modal.\r\n   * @param {boolean} options.isPollModalVisible - Current visibility state of the poll modal.\r\n   */\r\n\r\n  launchPoll({ updateIsPollModalVisible, isPollModalVisible }: LaunchPollOptions): void {\r\n    updateIsPollModalVisible(!isPollModalVisible);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Poll, ShowAlert, PollUpdatedData } from '../../@types/types';\r\nexport interface PollUpdatedOptions {\r\n  data: PollUpdatedData;\r\n  polls: Poll[];\r\n  poll: Poll;\r\n  member: string;\r\n  islevel: string;\r\n  showAlert?: ShowAlert;\r\n  updatePolls: (polls: Poll[]) => void;\r\n  updatePoll: (poll: Poll) => void;\r\n  updateIsPollModalVisible: (isVisible: boolean) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type PollUpdatedType = (options: PollUpdatedOptions) => Promise<void>;\r\n\r\n/**\r\n * Updates the poll state based on the provided data.\r\n *\r\n * @param {PollUpdatedOptions} options - The options for updating the poll.\r\n * @param {PollUpdatedData} options.data - The data containing poll information.\r\n * @param {Poll[]} options.polls - The current list of polls.\r\n * @param {Poll} options.poll - The current poll.\r\n * @param {string} options.member - The member identifier.\r\n * @param {string} options.islevel - The level of the member.\r\n * @param {Function} [options.showAlert] - Function to show alerts.\r\n * @param {Function} options.updatePolls - Function to update the list of polls.\r\n * @param {Function} options.updatePoll - Function to update the current poll.\r\n * @param {Function} options.updateIsPollModalVisible - Function to update the visibility of the poll modal.\r\n * @returns {Promise<void>} A promise that resolves when the poll update is complete.\r\n *\r\n * @example\r\n * ```typescript\r\n * const pollUpdatedService = new PollUpdated();\r\n * pollUpdatedService.pollUpdated({\r\n *   data: { polls: [], poll: { id: '123', question: 'Sample Poll?', status: 'started' } },\r\n *   polls: [],\r\n *   poll: { id: '123', question: 'Sample Poll?', status: 'started' },\r\n *   member: 'user1',\r\n *   islevel: '1',\r\n *   showAlert: (alert) => console.log(alert.message),\r\n *   updatePolls: (polls) => console.log('Updated polls:', polls),\r\n *   updatePoll: (poll) => console.log('Updated poll:', poll),\r\n *   updateIsPollModalVisible: (visible) => console.log('Poll modal visibility:', visible),\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class PollUpdated {\r\n  /**\r\n   * Updates the poll state based on the provided data.\r\n   *\r\n   * @param {Object} options - The options for updating the poll.\r\n   * @param {any} options.data - The data containing poll information.\r\n   * @param {any[]} options.polls - The current list of polls.\r\n   * @param {any} options.poll - The current poll.\r\n   * @param {string} options.member - The member identifier.\r\n   * @param {string} options.islevel - The level of the member.\r\n   * @param {Function} options.showAlert - Function to show alerts.\r\n   * @param {Function} options.updatePolls - Function to update the list of polls.\r\n   * @param {Function} options.updatePoll - Function to update the current poll.\r\n   * @param {Function} options.updateIsPollModalVisible - Function to update the visibility of the poll modal.\r\n   * @returns {Promise<void>} A promise that resolves when the poll update is complete.\r\n   */\r\n\r\n  async pollUpdated({\r\n    data,\r\n    polls,\r\n    poll,\r\n    member,\r\n    islevel,\r\n    showAlert,\r\n    updatePolls,\r\n    updatePoll,\r\n    updateIsPollModalVisible,\r\n  }: PollUpdatedOptions): Promise<void> {\r\n    try {\r\n      if (data.polls) {\r\n        polls = data.polls;\r\n        updatePolls(data.polls);\r\n      } else {\r\n        polls = [data.poll];\r\n        updatePolls(polls);\r\n      }\r\n\r\n      let temp_poll = { id: '' };\r\n\r\n      if (poll) {\r\n        temp_poll = { ...poll };\r\n      }\r\n\r\n      if (data.status != 'ended') {\r\n        poll = data.poll;\r\n        updatePoll(data.poll);\r\n      }\r\n\r\n      if (data.status === 'started' && islevel !== '2') {\r\n        if (!poll.voters || (poll.voters && !poll.voters[member])) {\r\n          showAlert?.({ message: 'New poll started', type: 'success', duration: 3000 });\r\n          updateIsPollModalVisible(true);\r\n        }\r\n      } else if (data.status === 'ended') {\r\n        if (temp_poll.id === data.poll.id) {\r\n          showAlert?.({ message: 'Poll ended', type: 'danger', duration: 3000 });\r\n          // update the poll\r\n          updatePoll(data.poll);\r\n        }\r\n      }\r\n    } catch (error) {\r\n      // console.log(error);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\n\r\nexport interface CheckPauseStateOptions {\r\n  recordingMediaOptions: string; // \"video\" | \"audio\"\r\n  recordingVideoPausesLimit: number;\r\n  recordingAudioPausesLimit: number;\r\n  pauseRecordCount: number;\r\n  showAlert?: ShowAlert;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type CheckPauseStateType = (options: CheckPauseStateOptions) => Promise<boolean>;\r\n\r\n\r\n/**\r\n * Checks if the recording can be paused based on the current pause count and the allowed pause limits.\r\n *\r\n * @param {CheckPauseStateOptions} options - The options for checking the pause state.\r\n * @param {string} options.recordingMediaOptions - The type of media being recorded (\"video\" or \"audio\").\r\n * @param {number} options.recordingVideoPausesLimit - The maximum number of pauses allowed for video recordings.\r\n * @param {number} options.recordingAudioPausesLimit - The maximum number of pauses allowed for audio recordings.\r\n * @param {number} options.pauseRecordCount - The current count of pauses that have been made.\r\n * @param {Function} [options.showAlert] - A function to show an alert message if the pause limit is reached.\r\n * @returns {Promise<boolean>} A promise that resolves to `true` if the recording can be paused, otherwise `false`.\r\n *\r\n * @example\r\n * ```typescript\r\n * const checkPauseStateService = new CheckPauseState();\r\n * const canPause = await checkPauseStateService.checkPauseState({\r\n *   recordingMediaOptions: 'video',\r\n *   recordingVideoPausesLimit: 3,\r\n *   recordingAudioPausesLimit: 5,\r\n *   pauseRecordCount: 2,\r\n *   showAlert: (alert) => console.log(alert.message),\r\n * });\r\n * console.log('Can pause recording:', canPause);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CheckPauseState {\r\n  /**\r\n   * Checks if the recording can be paused based on the current pause count and the allowed pause limits.\r\n   *\r\n   * @param {Object} options - The options for checking the pause state.\r\n   * @param {string} options.recordingMediaOptions - The type of media being recorded (\"video\" or \"audio\").\r\n   * @param {number} options.recordingVideoPausesLimit - The maximum number of pauses allowed for video recordings.\r\n   * @param {number} options.recordingAudioPausesLimit - The maximum number of pauses allowed for audio recordings.\r\n   * @param {number} options.pauseRecordCount - The current count of pauses that have been made.\r\n   * @param {Function} options.showAlert - A function to show an alert message if the pause limit is reached.\r\n   * @returns {Promise<boolean>} - A promise that resolves to `true` if the recording can be paused, otherwise `false`.\r\n   */\r\n\r\n  checkPauseState = async ({\r\n    recordingMediaOptions,\r\n    recordingVideoPausesLimit,\r\n    recordingAudioPausesLimit,\r\n    pauseRecordCount,\r\n    showAlert,\r\n  }: CheckPauseStateOptions): Promise<boolean> => {\r\n    // function to check if the user can pause recording\r\n    let ref_limit = 0;\r\n    if (recordingMediaOptions == 'video') {\r\n      ref_limit = recordingVideoPausesLimit;\r\n    } else {\r\n      ref_limit = recordingAudioPausesLimit;\r\n    }\r\n\r\n    if (pauseRecordCount < ref_limit) {\r\n      return true;\r\n    } else {\r\n      showAlert?.({\r\n        message: 'You have reached the limit of pauses - you can choose to stop recording.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      return false;\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface CheckResumeStateOptions {\r\n  recordingMediaOptions: string; // 'video' or 'audio'\r\n  recordingVideoPausesLimit: number;\r\n  recordingAudioPausesLimit: number;\r\n  pauseRecordCount: number;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type CheckResumeStateType = (options: CheckResumeStateOptions) => Promise<boolean>;\r\n\r\n/**\r\n * Checks if the recording can be resumed based on the media type and pause limits.\r\n *\r\n * @param {CheckResumeStateOptions} options - The options for checking resume state.\r\n * @param {string} options.recordingMediaOptions - The type of media being recorded (\"video\" or \"audio\").\r\n * @param {number} options.recordingVideoPausesLimit - The maximum number of pauses allowed for video recording.\r\n * @param {number} options.recordingAudioPausesLimit - The maximum number of pauses allowed for audio recording.\r\n * @param {number} options.pauseRecordCount - The current number of pauses that have occurred.\r\n * @returns {Promise<boolean>} A promise that resolves to a boolean indicating whether the recording can be resumed.\r\n *\r\n * @example\r\n * ```typescript\r\n * const checkResumeStateService = new CheckResumeState();\r\n * const canResume = await checkResumeStateService.checkResumeState({\r\n *   recordingMediaOptions: 'audio',\r\n *   recordingVideoPausesLimit: 3,\r\n *   recordingAudioPausesLimit: 5,\r\n *   pauseRecordCount: 2,\r\n * });\r\n * console.log('Can resume recording:', canResume);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CheckResumeState {\r\n  /**\r\n   * Checks if the recording can be resumed based on the media type and pause limits.\r\n   *\r\n   * @param {Object} options - The options for checking resume state.\r\n   * @param {string} options.recordingMediaOptions - The type of media being recorded (\"video\" or \"audio\").\r\n   * @param {number} options.recordingVideoPausesLimit - The maximum number of pauses allowed for video recording.\r\n   * @param {number} options.recordingAudioPausesLimit - The maximum number of pauses allowed for audio recording.\r\n   * @param {number} options.pauseRecordCount - The current number of pauses that have occurred.\r\n   * @returns {Promise<boolean>} - A promise that resolves to a boolean indicating whether the recording can be resumed.\r\n   */\r\n\r\n  checkResumeState = async ({\r\n    recordingMediaOptions,\r\n    recordingVideoPausesLimit,\r\n    recordingAudioPausesLimit,\r\n    pauseRecordCount,\r\n  }: CheckResumeStateOptions): Promise<boolean> => {\r\n    // function to check if the user can resume recording\r\n    let ref_limit = 0;\r\n    if (recordingMediaOptions == 'video') {\r\n      ref_limit = recordingVideoPausesLimit;\r\n    } else {\r\n      ref_limit = recordingAudioPausesLimit;\r\n    }\r\n\r\n    return pauseRecordCount <= ref_limit;\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  ShowAlert,\r\n  MainSpecs,\r\n  DispSpecs,\r\n  TextSpecs,\r\n  EventType,\r\n  UserRecordingParams,\r\n} from '../../@types/types';\r\n\r\nexport interface ConfirmRecordingParameters {\r\n  showAlert?: ShowAlert;\r\n  recordingMediaOptions: string;\r\n  recordingAudioOptions: string;\r\n  recordingVideoOptions: string;\r\n  recordingVideoType: string;\r\n  recordingDisplayType: 'video' | 'media' | 'all';\r\n  recordingNameTags: boolean;\r\n  recordingBackgroundColor: string;\r\n  recordingNameTagsColor: string;\r\n  recordingOrientationVideo: string;\r\n  recordingAddHLS: boolean;\r\n  recordingAddText: boolean;\r\n  recordingCustomText: string;\r\n  recordingCustomTextPosition: string;\r\n  recordingCustomTextColor: string;\r\n  meetingDisplayType: string;\r\n  recordingVideoParticipantsFullRoomSupport: boolean;\r\n  recordingAllParticipantsSupport: boolean;\r\n  recordingVideoParticipantsSupport: boolean;\r\n  recordingSupportForOtherOrientation: boolean;\r\n  recordingPreferredOrientation: string;\r\n  recordingMultiFormatsSupport: boolean;\r\n  recordingVideoOptimized: boolean;\r\n  recordingAllParticipantsFullRoomSupport: boolean;\r\n  meetingVideoOptimized: boolean;\r\n  eventType: EventType;\r\n  breakOutRoomStarted: boolean;\r\n  breakOutRoomEnded: boolean;\r\n  updateRecordingDisplayType: (value: 'video' | 'media' | 'all') => void;\r\n  updateRecordingVideoOptimized: (value: boolean) => void;\r\n  updateUserRecordingParams: (params: UserRecordingParams) => void;\r\n  updateConfirmedToRecord: (value: boolean) => void;\r\n\r\n  // Mediasfu functions\r\n  getUpdatedAllParams: () => ConfirmRecordingParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ConfirmRecordingOptions {\r\n  parameters: ConfirmRecordingParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ConfirmRecordingType = (options: ConfirmRecordingOptions) => Promise<void>;\r\n\r\n/**\r\n * Confirms the recording settings based on the provided parameters and updates the recording state.\r\n *\r\n * @param {ConfirmRecordingOptions} options - The options for confirming the recording.\r\n * @param {ConfirmRecordingParameters} options.parameters - The parameters for the recording, including:\r\n *   - {ShowAlert} [options.parameters.showAlert] - Optional function to show alert messages.\r\n *   - {string} options.parameters.recordingMediaOptions - Type of media being recorded (\"video\" or \"audio\").\r\n *   - {string} options.parameters.recordingAudioOptions - Audio recording options.\r\n *   - {string} options.parameters.recordingVideoOptions - Video recording options.\r\n *   - {string} options.parameters.recordingVideoType - Type of video recording.\r\n *   - {'video' | 'media' | 'all'} options.parameters.recordingDisplayType - The display type for the recording.\r\n *   - {boolean} options.parameters.recordingNameTags - Flag for including name tags in the recording.\r\n *   - {string} options.parameters.recordingBackgroundColor - Background color for the recording.\r\n *   - {string} options.parameters.recordingNameTagsColor - Color for the name tags.\r\n *   - {string} options.parameters.recordingOrientationVideo - Orientation for video recording.\r\n *   - {boolean} options.parameters.recordingAddHLS - Flag for adding HLS support.\r\n *   - {boolean} options.parameters.recordingAddText - Flag for adding custom text.\r\n *   - {string} options.parameters.recordingCustomText - Custom text for the recording.\r\n *   - {string} options.parameters.recordingCustomTextPosition - Position of the custom text.\r\n *   - {string} options.parameters.recordingCustomTextColor - Color of the custom text.\r\n *   - {string} options.parameters.meetingDisplayType - Current display type of the meeting.\r\n *   - {boolean} options.parameters.recordingVideoParticipantsFullRoomSupport - Support for video participants in full room.\r\n *   - {boolean} options.parameters.recordingAllParticipantsSupport - Support for recording all participants.\r\n *   - {boolean} options.parameters.recordingVideoParticipantsSupport - Support for video participants.\r\n *   - {boolean} options.parameters.recordingSupportForOtherOrientation - Support for other orientations.\r\n *   - {string} options.parameters.recordingPreferredOrientation - Preferred orientation for recording.\r\n *   - {boolean} options.parameters.recordingMultiFormatsSupport - Support for multiple formats.\r\n *   - {boolean} options.parameters.recordingVideoOptimized - Flag for video optimization.\r\n *   - {boolean} options.parameters.recordingAllParticipantsFullRoomSupport - Support for recording all participants in full room.\r\n *   - {boolean} options.parameters.meetingVideoOptimized - Flag for meeting video optimization.\r\n *   - {EventType} options.parameters.eventType - Type of the event.\r\n *   - {boolean} options.parameters.breakOutRoomStarted - Indicates if a breakout room has started.\r\n *   - {boolean} options.parameters.breakOutRoomEnded - Indicates if a breakout room has ended.\r\n *   - {Function} options.parameters.updateRecordingDisplayType - Function to update the recording display type.\r\n *   - {Function} options.parameters.updateRecordingVideoOptimized - Function to update video optimization status.\r\n *   - {Function} options.parameters.updateUserRecordingParams - Function to update user recording parameters.\r\n *   - {Function} options.parameters.updateConfirmedToRecord - Function to confirm the recording.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the recording settings have been confirmed.\r\n *\r\n * @remarks\r\n * This function performs several checks to ensure that the recording settings are valid based on the provided parameters.\r\n * If any of the checks fail, an alert is shown and the function returns early without updating the recording state.\r\n *\r\n * The function checks for the following conditions:\r\n * - Whether recording videos of all participants is allowed.\r\n * - Whether recording all participants is allowed.\r\n * - Whether recording other video participants is allowed.\r\n * - Whether recording all orientations is allowed.\r\n * - Whether recording the preferred orientation is allowed.\r\n * - Whether recording all formats is allowed.\r\n * - Whether the recording display type is valid based on the meeting display type.\r\n * - Whether recording all participants with media is allowed.\r\n *\r\n * If all checks pass, the function constructs the `mainSpecs`, `dispSpecs`, and `textSpecs` objects based on the state variables,\r\n * updates the user recording parameters, and confirms the recording.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: ConfirmRecordingOptions = { parameters: someParameters };\r\n * await confirmRecording(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ConfirmRecording {\r\n  /**\r\n   * Confirms the recording settings based on the provided parameters and updates the recording state.\r\n   *\r\n   * @param {ConfirmRecordingOptions} options - The options for confirming the recording.\r\n   * @param {Parameters} options.parameters - The parameters for the recording.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the recording settings have been confirmed.\r\n   *\r\n   * @remarks\r\n   * This function performs several checks to ensure that the recording settings are valid based on the provided parameters.\r\n   * If any of the checks fail, an alert is shown and the function returns early without updating the recording state.\r\n   *\r\n   * The function checks for the following conditions:\r\n   * - Whether recording videos of all participants is allowed.\r\n   * - Whether recording all participants is allowed.\r\n   * - Whether recording other video participants is allowed.\r\n   * - Whether recording all orientations is allowed.\r\n   * - Whether recording the preferred orientation is allowed.\r\n   * - Whether recording all formats is allowed.\r\n   * - Whether the recording display type is valid based on the meeting display type.\r\n   * - Whether recording all participants with media is allowed.\r\n   *\r\n   * If all checks pass, the function constructs the `mainSpecs`, `dispSpecs`, and `textSpecs` objects based on the state variables,\r\n   * updates the user recording parameters, and confirms the recording.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const options: ConfirmRecordingOptions = { parameters: someParameters };\r\n   * await confirmRecording(options);\r\n   * ```\r\n   */\r\n\r\n  confirmRecording = async ({ parameters }: ConfirmRecordingOptions): Promise<void> => {\r\n    let { getUpdatedAllParams } = parameters;\r\n    parameters = getUpdatedAllParams();\r\n\r\n    let {\r\n      showAlert,\r\n      recordingMediaOptions,\r\n      recordingAudioOptions,\r\n      recordingVideoOptions,\r\n      recordingVideoType,\r\n      recordingDisplayType,\r\n      recordingNameTags,\r\n      recordingBackgroundColor,\r\n      recordingNameTagsColor,\r\n      recordingOrientationVideo,\r\n      recordingAddHLS,\r\n      recordingAddText,\r\n      recordingCustomText,\r\n      recordingCustomTextPosition,\r\n      recordingCustomTextColor,\r\n      meetingDisplayType,\r\n      recordingVideoParticipantsFullRoomSupport,\r\n      recordingAllParticipantsSupport,\r\n      recordingVideoParticipantsSupport,\r\n      recordingSupportForOtherOrientation,\r\n      recordingPreferredOrientation,\r\n      recordingMultiFormatsSupport,\r\n      recordingVideoOptimized,\r\n      recordingAllParticipantsFullRoomSupport,\r\n      meetingVideoOptimized,\r\n      eventType,\r\n      breakOutRoomStarted,\r\n      breakOutRoomEnded,\r\n\r\n      updateRecordingDisplayType,\r\n      updateRecordingVideoOptimized,\r\n      updateRecordingVideoParticipantsFullRoomSupport,\r\n      updateRecordingAllParticipantsSupport,\r\n      updateRecordingVideoParticipantsSupport,\r\n      updateRecordingSupportForOtherOrientation,\r\n      updateRecordingPreferredOrientation,\r\n      updateRecordingMultiFormatsSupport,\r\n      updateUserRecordingParams,\r\n      updateConfirmedToRecord,\r\n    } = parameters;\r\n\r\n    // Retrieve the values from the state\r\n\r\n    const mediaOptions = recordingMediaOptions;\r\n\r\n    // Other variables not provided in the guide\r\n    const selectedRecordOption = recordingDisplayType;\r\n\r\n    // Additional logic similar to the provided guide\r\n    // recordingVideoParticipantsFullRoomSupport = minigrid and main video\r\n    if (eventType !== 'broadcast') {\r\n      if (\r\n        !recordingVideoParticipantsFullRoomSupport &&\r\n        recordingVideoOptions === 'all' &&\r\n        mediaOptions === 'video'\r\n      ) {\r\n        if (meetingDisplayType == 'all') {\r\n          if (breakOutRoomStarted && !breakOutRoomEnded) {\r\n            // breakout rooms are started\r\n          } else {\r\n            showAlert?.({\r\n              message:\r\n                'You are not allowed to record videos of all participants; change the meeting display type to video or video optimized.',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n\r\n            return;\r\n          }\r\n        }\r\n      }\r\n\r\n      // recordingAllParticipantsSupport  = others other than host screen (video + audio)\r\n      if (!recordingAllParticipantsSupport && recordingVideoOptions === 'all') {\r\n        showAlert?.({\r\n          message: 'You are only allowed to record yourself.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n\r\n        return;\r\n      }\r\n\r\n      // recordingVideoParticipantsSupport (maingrid + non-host screenshare person)\r\n      if (!recordingVideoParticipantsSupport && recordingDisplayType === 'video') {\r\n        showAlert?.({\r\n          message: 'You are not allowed to record other video participants.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n\r\n        return;\r\n      }\r\n    }\r\n\r\n    if (!recordingSupportForOtherOrientation && recordingOrientationVideo === 'all') {\r\n      showAlert?.({\r\n        message: 'You are not allowed to record all orientations.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    if (\r\n      recordingPreferredOrientation === 'landscape' &&\r\n      recordingOrientationVideo === 'portrait' &&\r\n      !recordingSupportForOtherOrientation\r\n    ) {\r\n      showAlert?.({\r\n        message: 'You are not allowed to record portrait orientation.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      return;\r\n    } else if (\r\n      recordingPreferredOrientation === 'portrait' &&\r\n      recordingOrientationVideo === 'landscape' &&\r\n      !recordingSupportForOtherOrientation\r\n    ) {\r\n      showAlert?.({\r\n        message: 'You are not allowed to record landscape orientation.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    if (!recordingMultiFormatsSupport && recordingVideoType === 'all') {\r\n      showAlert?.({\r\n        message: 'You are not allowed to record all formats.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    if (eventType !== 'broadcast') {\r\n      if (recordingMediaOptions === 'video') {\r\n        if (meetingDisplayType === 'media') {\r\n          if (recordingDisplayType === 'all') {\r\n            showAlert?.({\r\n              message:\r\n                'Recording display type can be either video, video optimized, or media when meeting display type is media.',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n\r\n            recordingDisplayType = meetingDisplayType;\r\n            return;\r\n          }\r\n        } else if (meetingDisplayType === 'video') {\r\n          if (recordingDisplayType === 'all' || recordingDisplayType === 'media') {\r\n            showAlert?.({\r\n              message:\r\n                'Recording display type can be either video or video optimized when meeting display type is video.',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n\r\n            recordingDisplayType = meetingDisplayType;\r\n            return;\r\n          }\r\n\r\n          if (meetingVideoOptimized && !recordingVideoOptimized) {\r\n            showAlert?.({\r\n              message:\r\n                'Recording display type can be only video optimized when meeting display type is video optimized.',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n\r\n            recordingVideoOptimized = meetingVideoOptimized;\r\n            return;\r\n          }\r\n        }\r\n      } else {\r\n        if (recordingDisplayType === 'all' || recordingDisplayType === 'media') {\r\n          // do nothing\r\n        } else {\r\n          recordingDisplayType = 'media';\r\n        }\r\n        recordingVideoOptimized = false;\r\n      }\r\n    }\r\n\r\n    if (recordingDisplayType === 'all' && !recordingAllParticipantsFullRoomSupport) {\r\n      showAlert?.({\r\n        message: 'You can only record all participants with media.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      return;\r\n    }\r\n    // Construct mainSpecs and dispSpecs objects based on the state variables\r\n    const mainSpecs: MainSpecs = {\r\n      mediaOptions: recordingMediaOptions,\r\n      audioOptions: recordingAudioOptions,\r\n      videoOptions: recordingVideoOptions,\r\n      videoType: recordingVideoType,\r\n      videoOptimized: recordingVideoOptimized,\r\n      recordingDisplayType: recordingDisplayType,\r\n      addHLS: recordingAddHLS,\r\n    };\r\n\r\n    const dispSpecs: DispSpecs = {\r\n      nameTags: recordingNameTags,\r\n      backgroundColor: recordingBackgroundColor,\r\n      nameTagsColor: recordingNameTagsColor,\r\n      orientationVideo: recordingOrientationVideo,\r\n    };\r\n\r\n    const textSpecs: TextSpecs = {\r\n      addText: recordingAddText,\r\n      customText: recordingCustomText,\r\n      customTextPosition: recordingCustomTextPosition,\r\n      customTextColor: recordingCustomTextColor,\r\n    };\r\n\r\n    // Construct userRecordingParams object\r\n    const userRecordingParams = { mainSpecs, dispSpecs, textSpecs };\r\n    // Update state variables based on the logic\r\n    updateUserRecordingParams(userRecordingParams);\r\n    updateConfirmedToRecord(true);\r\n    updateRecordingDisplayType(selectedRecordOption);\r\n    updateRecordingVideoOptimized(recordingVideoOptimized);\r\n    updateRecordingVideoParticipantsFullRoomSupport(recordingVideoParticipantsFullRoomSupport);\r\n    updateRecordingAllParticipantsSupport(recordingAllParticipantsSupport);\r\n    updateRecordingVideoParticipantsSupport(recordingVideoParticipantsSupport);\r\n    updateRecordingSupportForOtherOrientation(recordingSupportForOtherOrientation);\r\n    updateRecordingPreferredOrientation(recordingPreferredOrientation);\r\n    updateRecordingMultiFormatsSupport(recordingMultiFormatsSupport);\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\n\r\nexport interface LaunchRecordingOptions {\r\n  updateIsRecordingModalVisible: (visible: boolean) => void;\r\n  isRecordingModalVisible: boolean;\r\n  showAlert?: ShowAlert;\r\n  stopLaunchRecord: boolean;\r\n  canLaunchRecord: boolean;\r\n  recordingAudioSupport: boolean;\r\n  recordingVideoSupport: boolean;\r\n  updateCanRecord: (canRecord: boolean) => void;\r\n  updateClearedToRecord: (cleared: boolean) => void;\r\n  recordStarted: boolean;\r\n  recordPaused: boolean;\r\n  localUIMode: boolean;\r\n\r\n  [key: string]: any;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchRecordingType = (options: LaunchRecordingOptions) => void;\r\n\r\n/**\r\n * Launches the recording process based on various conditions and updates the UI accordingly.\r\n *\r\n * @param {LaunchRecordingOptions} options - The options for launching the recording.\r\n * @param {Function} options.updateIsRecordingModalVisible - Function to update the visibility of the recording modal.\r\n * @param {boolean} options.isRecordingModalVisible - Indicates if the recording modal is currently visible.\r\n * @param {Function} [options.showAlert] - Optional function to show an alert message.\r\n * @param {boolean} options.stopLaunchRecord - Indicates if the recording launch should be stopped.\r\n * @param {boolean} options.canLaunchRecord - Indicates if the recording can be launched.\r\n * @param {boolean} options.recordingAudioSupport - Indicates if audio recording is supported.\r\n * @param {boolean} options.recordingVideoSupport - Indicates if video recording is supported.\r\n * @param {Function} options.updateCanRecord - Function to update the recording capability.\r\n * @param {Function} options.updateClearedToRecord - Function to update the cleared-to-record status.\r\n * @param {boolean} options.recordStarted - Indicates if the recording has started.\r\n * @param {boolean} options.recordPaused - Indicates if the recording is paused.\r\n * @param {boolean} options.localUIMode - Indicates if the local UI mode is active.\r\n *\r\n * @returns {void}\r\n *\r\n * @throws Will show an alert if:\r\n * - The recording has already ended or the user is not allowed to record.\r\n * - The recording initiation is not allowed due to insufficient permissions.\r\n * - The recording is currently running and cannot be reconfigured unless paused.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: LaunchRecordingOptions = {\r\n *   updateIsRecordingModalVisible: (visible) => { /* update visibility logic *\\/ },\r\n *   isRecordingModalVisible: false,\r\n *   showAlert: (alert) => { /* show alert logic *\\/ },\r\n *   stopLaunchRecord: false,\r\n *   canLaunchRecord: true,\r\n *   recordingAudioSupport: true,\r\n *   recordingVideoSupport: true,\r\n *   updateCanRecord: (canRecord) => { /* update record capability *\\/ },\r\n *   updateClearedToRecord: (cleared) => { /* update cleared status *\\/ },\r\n *   recordStarted: false,\r\n *   recordPaused: false,\r\n *   localUIMode: false,\r\n * };\r\n * launchRecording(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchRecording {\r\n  /**\r\n   * Launches the recording process based on various conditions and updates the UI accordingly.\r\n   *\r\n   * @param {Object} options - The options for launching the recording.\r\n   * @param {Function} options.updateIsRecordingModalVisible - Function to update the visibility of the recording modal.\r\n   * @param {boolean} options.isRecordingModalVisible - Indicates if the recording modal is currently visible.\r\n   * @param {Function} options.showAlert - Function to show an alert message.\r\n   * @param {boolean} options.stopLaunchRecord - Indicates if the recording launch should be stopped.\r\n   * @param {boolean} options.canLaunchRecord - Indicates if the recording can be launched.\r\n   * @param {boolean} options.recordingAudioSupport - Indicates if audio recording is supported.\r\n   * @param {boolean} options.recordingVideoSupport - Indicates if video recording is supported.\r\n   * @param {Function} options.updateCanRecord - Function to update the recording capability.\r\n   * @param {Function} options.updateClearedToRecord - Function to update the cleared-to-record status.\r\n   * @param {boolean} options.recordStarted - Indicates if the recording has started.\r\n   * @param {boolean} options.recordPaused - Indicates if the recording is paused.\r\n   * @param {boolean} options.localUIMode - Indicates if the local UI mode is active.\r\n   *\r\n   * @returns {void}\r\n   */\r\n\r\n  launchRecording({\r\n    updateIsRecordingModalVisible,\r\n    isRecordingModalVisible,\r\n    showAlert,\r\n    stopLaunchRecord,\r\n    canLaunchRecord,\r\n    recordingAudioSupport,\r\n    recordingVideoSupport,\r\n    updateCanRecord,\r\n    updateClearedToRecord,\r\n    recordStarted,\r\n    recordPaused,\r\n    localUIMode,\r\n  }: LaunchRecordingOptions): void {\r\n    // Check if recording is already launched\r\n    if (!isRecordingModalVisible && stopLaunchRecord && !localUIMode) {\r\n      showAlert?.({\r\n        message: 'Recording has already ended or you are not allowed to record',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    // Check if recording initiation is allowed\r\n    if (!isRecordingModalVisible && canLaunchRecord && !localUIMode) {\r\n      // Check if both audio and video recording are not allowed\r\n      if (!recordingAudioSupport && !recordingVideoSupport) {\r\n        showAlert?.({\r\n          message: 'You are not allowed to record',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n\r\n        return;\r\n      }\r\n\r\n      // update clearedToRecord to false\r\n      updateClearedToRecord(false);\r\n      // update canRecord to false\r\n      updateCanRecord(false);\r\n    }\r\n\r\n    if (!isRecordingModalVisible && recordStarted) {\r\n      if (!recordPaused) {\r\n        showAlert?.({\r\n          message: 'You can only re-configure recording after pausing it',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n\r\n        return;\r\n      }\r\n    }\r\n\r\n    if (\r\n      !isRecordingModalVisible &&\r\n      !recordingAudioSupport &&\r\n      !recordingVideoSupport &&\r\n      !localUIMode\r\n    ) {\r\n      showAlert?.({\r\n        message: 'You are not allowed to record',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    // Update the visibility of the recording modal\r\n    updateIsRecordingModalVisible(!isRecordingModalVisible);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\nexport interface RecordPauseTimerOptions {\r\n  stop?: boolean;\r\n  isTimerRunning: boolean;\r\n  canPauseResume: boolean;\r\n  showAlert?: ShowAlert;\r\n}\r\n\r\n// export the type definition for the function\r\nexport type RecordPauseTimerType = (options: RecordPauseTimerOptions) => boolean;\r\n\r\n/**\r\n * Controls the pause and resume functionality of a recording timer.\r\n *\r\n * @param {RecordPauseTimerOptions} options - The options for controlling the timer.\r\n * @param {boolean} [options.stop=false] - Indicates whether to stop the timer.\r\n * @param {boolean} options.isTimerRunning - Indicates if the timer is currently running.\r\n * @param {boolean} options.canPauseResume - Indicates if the timer can be paused or resumed.\r\n * @param {Function} [options.showAlert] - Optional function to show an alert message.\r\n * @returns {boolean} - Returns true if the timer can be paused or resumed, otherwise false.\r\n *\r\n * @throws Will show an alert message if:\r\n * - The timer cannot be stopped, paused, or resumed due to not meeting the required time condition.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: RecordPauseTimerOptions = {\r\n *   stop: false,\r\n *   isTimerRunning: true,\r\n *   canPauseResume: true,\r\n *   showAlert: (alert) => {  },\r\n * };\r\n * const canPause = recordPauseTimer(options);\r\n * if (canPause) {\r\n *   // proceed with pausing or resuming the recording\r\n * }\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RecordPauseTimer {\r\n  /**\r\n   * Controls the pause and resume functionality of a recording timer.\r\n   *\r\n   * @param {Object} options - The options for controlling the timer.\r\n   * @param {boolean} [options.stop=false] - Indicates whether to stop the timer.\r\n   * @param {Object} options.parameters - The parameters for the timer control.\r\n   * @param {boolean} options.parameters.isTimerRunning - Indicates if the timer is currently running.\r\n   * @param {boolean} options.parameters.canPauseResume - Indicates if the timer can be paused or resumed.\r\n   * @param {Function} [options.parameters.showAlert] - Optional function to show an alert message.\r\n   * @returns {boolean} - Returns true if the timer can be paused or resumed, otherwise false.\r\n   */\r\n\r\n  recordPauseTimer = ({\r\n    stop = false,\r\n    isTimerRunning,\r\n    canPauseResume,\r\n    showAlert,\r\n  }: RecordPauseTimerOptions): boolean => {\r\n    // Ensure the timer is running and pause/resume actions are allowed\r\n    if (isTimerRunning && canPauseResume) {\r\n      return true;\r\n    } else {\r\n      const message = stop\r\n        ? 'Can only stop after 15 seconds of starting or pausing or resuming recording'\r\n        : 'Can only pause or resume after 15 seconds of starting or pausing or resuming recording';\r\n      showAlert?.({\r\n        message,\r\n        type: 'danger',\r\n      });\r\n      return false;\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface RecordUpdateTimerOptions {\r\n  recordElapsedTime: number;\r\n  recordStartTime: number;\r\n  updateRecordElapsedTime: (elapsedTime: number) => void;\r\n  updateRecordingProgressTime: (formattedTime: string) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type RecordUpdateTimerType = (options: RecordUpdateTimerOptions) => void;\r\n\r\n/**\r\n * Updates the recording timer and progress time.\r\n * @function\r\n * @param {RecordUpdateTimerOptions} options - The options object containing necessary variables and functions.\r\n */\r\n\r\n/**\r\n * Updates the recording timer by calculating the elapsed time since the recording started\r\n * and formatting it in HH:MM:SS format.\r\n *\r\n * @param {Object} options - The options object.\r\n * @param {number} options.recordElapsedTime - The elapsed recording time in seconds.\r\n * @param {number} options.recordStartTime - The timestamp when the recording started.\r\n * @param {Function} options.updateRecordElapsedTime - Callback to update the elapsed recording time.\r\n * @param {Function} options.updateRecordingProgressTime - Callback to update the formatted recording time.\r\n * @returns {void}\r\n *\r\n * @remarks\r\n * This function calculates the elapsed time since the recording started and formats it into\r\n * a string in HH:MM:SS format. It updates both the elapsed time in seconds and the formatted\r\n * time via the provided callback functions.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: RecordUpdateTimerOptions = {\r\n *   recordElapsedTime: 0,\r\n *   recordStartTime: Date.now(),\r\n *   updateRecordElapsedTime: (elapsedTime) => { console.log(`Elapsed Time: ${elapsedTime} seconds`); },\r\n *   updateRecordingProgressTime: (formattedTime) => { console.log(`Formatted Time: ${formattedTime}`); },\r\n * };\r\n * recordUpdateTimer(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RecordUpdateTimer {\r\n  /**\r\n   * Updates the recording timer and progress time.\r\n   * @function\r\n   * @param {RecordUpdateTimerOptions} options - The options object containing necessary variables and functions.\r\n   */\r\n  /**\r\n   * Updates the recording timer by calculating the elapsed time since the recording started\r\n   * and formatting it in HH:MM:SS format.\r\n   *\r\n   * @param {Object} options - The options object.\r\n   * @param {number} options.recordElapsedTime - The elapsed recording time in seconds.\r\n   * @param {number} options.recordStartTime - The timestamp when the recording started.\r\n   * @param {Function} options.updateRecordElapsedTime - Callback to update the elapsed recording time.\r\n   * @param {Function} options.updateRecordingProgressTime - Callback to update the formatted recording time.\r\n   * @returns {void}\r\n   */\r\n\r\n  recordUpdateTimer({\r\n    recordElapsedTime,\r\n    recordStartTime,\r\n    updateRecordElapsedTime,\r\n    updateRecordingProgressTime,\r\n  }: RecordUpdateTimerOptions): void {\r\n    /**\r\n     * Utility function to pad single-digit numbers with leading zeros.\r\n     * @param {number} number - The number to pad.\r\n     * @returns {string} The padded number as a string.\r\n     */\r\n    function padNumber(number: number) {\r\n      return number.toString().padStart(2, '0');\r\n    }\r\n\r\n    const currentTime = new Date().getTime(); // Get the current timestamp\r\n    recordElapsedTime = Math.floor((currentTime - recordStartTime) / 1000); // Calculate the elapsed time in seconds\r\n    updateRecordElapsedTime(recordElapsedTime);\r\n\r\n    // Format the time in HH:MM:SS format\r\n    const hours = Math.floor(recordElapsedTime / 3600);\r\n    const minutes = Math.floor((recordElapsedTime % 3600) / 60);\r\n    const seconds = recordElapsedTime % 60;\r\n    const formattedTime = padNumber(hours) + ':' + padNumber(minutes) + ':' + padNumber(seconds);\r\n\r\n    updateRecordingProgressTime(formattedTime);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\nimport { RecordUpdateTimer } from './record-update-timer.service';\r\nexport interface RecordResumeTimerParameters {\r\n  isTimerRunning: boolean;\r\n  canPauseResume: boolean;\r\n  recordElapsedTime: number;\r\n  recordStartTime: number;\r\n  recordTimerInterval?: NodeJS.Timeout | null;\r\n  showAlert?: ShowAlert;\r\n  updateRecordStartTime: (time: number) => void;\r\n  updateRecordTimerInterval: (interval: NodeJS.Timeout | null) => void;\r\n  updateIsTimerRunning: (isRunning: boolean) => void;\r\n  updateCanPauseResume: (canPause: boolean) => void;\r\n\r\n  getUpdatedAllParams: () => RecordResumeTimerParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface RecordResumeTimerOptions {\r\n  parameters: RecordResumeTimerParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type RecordResumeTimerType = (options: RecordResumeTimerOptions) => Promise<boolean>;\r\n\r\n/**\r\n * Resumes the recording timer if it is not already running and can be paused/resumed.\r\n *\r\n * @param {RecordResumeTimerOptions} options - The options for resuming the recording timer.\r\n * @param {Object} options.parameters - The parameters for the recording timer.\r\n * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n * @param {boolean} options.parameters.isTimerRunning - Indicates if the timer is currently running.\r\n * @param {boolean} options.parameters.canPauseResume - Indicates if the timer can be paused/resumed.\r\n * @param {number} options.parameters.recordElapsedTime - The elapsed recording time in seconds.\r\n * @param {number} options.parameters.recordStartTime - The start time of the recording.\r\n * @param {NodeJS.Timeout | null} options.parameters.recordTimerInterval - The interval ID for the recording timer.\r\n * @param {Function} options.parameters.showAlert - Function to show an alert message.\r\n * @param {Function} options.parameters.updateRecordStartTime - Function to update the recording start time.\r\n * @param {Function} options.parameters.updateRecordTimerInterval - Function to update the recording timer interval.\r\n * @param {Function} options.parameters.updateIsTimerRunning - Function to update the timer running status.\r\n * @param {Function} options.parameters.updateCanPauseResume - Function to update the pause/resume status.\r\n *\r\n * @returns {Promise<boolean>} - Returns a promise that resolves to true if the timer was successfully resumed, otherwise false.\r\n *\r\n * @throws Will show an alert if the timer cannot be resumed due to conditions not being met.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: RecordResumeTimerOptions = {\r\n *   parameters: {\r\n *     isTimerRunning: false,\r\n *     canPauseResume: true,\r\n *     recordElapsedTime: 10,\r\n *     recordStartTime: Date.now(),\r\n *     recordTimerInterval: null,\r\n *     showAlert: (alert) => { },\r\n *     updateRecordStartTime: (time) => { },\r\n *     updateRecordTimerInterval: (interval) => { },\r\n *     updateIsTimerRunning: (isRunning) => { },\r\n *     updateCanPauseResume: (canPause) => {  },\r\n *     getUpdatedAllParams: () => ({  }),\r\n *   },\r\n * };\r\n * const canResume = await recordResumeTimer(options);\r\n * if (canResume) {\r\n *   // proceed with the resumed recording\r\n * }\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RecordResumeTimer {\r\n  constructor(private RecordUpdateTimerService: RecordUpdateTimer) {}\r\n\r\n  /**\r\n   * Resumes the recording timer if it is not already running and can be paused/resumed.\r\n   *\r\n   * @param {RecordResumeTimerOptions} options - The options for resuming the recording timer.\r\n   * @param {Object} options.parameters - The parameters for the recording timer.\r\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {boolean} options.parameters.isTimerRunning - Indicates if the timer is currently running.\r\n   * @param {boolean} options.parameters.canPauseResume - Indicates if the timer can be paused/resumed.\r\n   * @param {number} options.parameters.recordElapsedTime - The elapsed recording time in seconds.\r\n   * @param {number} options.parameters.recordStartTime - The start time of the recording.\r\n   * @param {number | null} options.parameters.recordTimerInterval - The interval ID for the recording timer.\r\n   * @param {Function} options.parameters.showAlert - Function to show an alert message.\r\n   * @param {Function} options.parameters.updateRecordStartTime - Function to update the recording start time.\r\n   * @param {Function} options.parameters.updateRecordTimerInterval - Function to update the recording timer interval.\r\n   * @param {Function} options.parameters.updateIsTimerRunning - Function to update the timer running status.\r\n   * @param {Function} options.parameters.updateCanPauseResume - Function to update the pause/resume status.\r\n   *\r\n   * @returns {Promise<boolean>} - Returns a promise that resolves to true if the timer was successfully resumed, otherwise false.\r\n   */\r\n\r\n  recordResumeTimer = async ({ parameters }: RecordResumeTimerOptions): Promise<boolean> => {\r\n    let { getUpdatedAllParams } = parameters;\r\n    parameters = getUpdatedAllParams();\r\n\r\n    let {\r\n      isTimerRunning,\r\n      canPauseResume,\r\n      recordElapsedTime,\r\n      recordStartTime,\r\n      recordTimerInterval,\r\n      showAlert,\r\n      updateRecordStartTime,\r\n      updateRecordTimerInterval,\r\n      updateIsTimerRunning,\r\n      updateCanPauseResume,\r\n\r\n      //mediasfu Functions\r\n      // recordUpdateTimer,\r\n    } = parameters;\r\n\r\n    if (!isTimerRunning && canPauseResume) {\r\n      recordStartTime = new Date().getTime() - recordElapsedTime * 1000; // Calculate the starting time based on elapsed time\r\n      updateRecordStartTime(recordStartTime);\r\n      recordTimerInterval = setInterval(() => {\r\n        // Update the timer every second (1000 milliseconds)\r\n        this.RecordUpdateTimerService.recordUpdateTimer({\r\n          recordElapsedTime: recordElapsedTime,\r\n          recordStartTime: recordStartTime,\r\n          updateRecordElapsedTime: parameters['updateRecordElapsedTime'],\r\n          updateRecordingProgressTime: parameters['updateRecordingProgressTime'],\r\n        });\r\n\r\n        parameters = getUpdatedAllParams();\r\n\r\n        // Check if recording is paused or stopped, and close the interval if needed\r\n        if (\r\n          parameters['recordPaused'] ||\r\n          parameters['recordStopped'] ||\r\n          parameters['roomName'] == '' ||\r\n          parameters['roomName'] == null\r\n        ) {\r\n          if (recordTimerInterval != null) {\r\n            clearInterval(recordTimerInterval);\r\n          }\r\n          updateRecordTimerInterval(null);\r\n          isTimerRunning = false;\r\n          updateIsTimerRunning(isTimerRunning);\r\n          canPauseResume = false;\r\n          updateCanPauseResume(canPauseResume);\r\n        }\r\n      }, 1000);\r\n      updateRecordTimerInterval(recordTimerInterval);\r\n      isTimerRunning = true;\r\n      updateIsTimerRunning(isTimerRunning);\r\n      canPauseResume = false; // Disable pause/resume actions until paused again\r\n      updateCanPauseResume(canPauseResume);\r\n      return true;\r\n    } else {\r\n      showAlert?.({\r\n        type: 'danger',\r\n        message:\r\n          'Can only pause or resume after 15 seconds of starting or pausing or resuming recording',\r\n      });\r\n      return false;\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { RecordUpdateTimer } from './record-update-timer.service';\r\n\r\nexport interface RecordStartTimerParameters {\r\n  recordStartTime: number;\r\n  recordTimerInterval?: NodeJS.Timeout | null;\r\n  isTimerRunning: boolean;\r\n  canPauseResume: boolean;\r\n  recordChangeSeconds: number;\r\n  recordPaused: boolean;\r\n  recordStopped: boolean;\r\n  roomName: string | null;\r\n  updateRecordStartTime: (time: number) => void;\r\n  updateRecordTimerInterval: (interval: NodeJS.Timeout | null) => void;\r\n  updateIsTimerRunning: (isRunning: boolean) => void;\r\n  updateCanPauseResume: (canPause: boolean) => void;\r\n\r\n  // Mediasfu functions\r\n  getUpdatedAllParams: () => RecordStartTimerParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface RecordStartTimerOptions {\r\n  parameters: RecordStartTimerParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type RecordStartTimerType = (options: RecordStartTimerOptions) => Promise<void>;\r\n\r\n/**\r\n * Starts the recording timer and manages its state.\r\n *\r\n * @param {RecordStartTimerOptions} options - The options for starting the recording timer.\r\n * @param {Object} options.parameters - The parameters for the recording timer.\r\n * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n * @param {number} options.parameters.recordStartTime - The start time of the recording.\r\n * @param {NodeJS.Timeout | null} options.parameters.recordTimerInterval - The interval ID for the recording timer.\r\n * @param {boolean} options.parameters.isTimerRunning - Flag indicating if the timer is currently running.\r\n * @param {boolean} options.parameters.canPauseResume - Flag indicating if pause/resume actions are enabled.\r\n * @param {number} options.parameters.recordChangeSeconds - The time after which pause/resume actions are enabled.\r\n * @param {Function} options.parameters.updateRecordStartTime - Function to update the recording start time.\r\n * @param {Function} options.parameters.updateRecordTimerInterval - Function to update the recording timer interval.\r\n * @param {Function} options.parameters.updateIsTimerRunning - Function to update the timer running state.\r\n * @param {Function} options.parameters.updateCanPauseResume - Function to update the pause/resume state.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the timer is started.\r\n *\r\n * @remarks\r\n * This function initializes the recording start time and sets up an interval to update the timer every second.\r\n * It also manages the state of the timer, including enabling and disabling pause/resume actions.\r\n * The timer is stopped if the recording is paused, stopped, or if the room name is invalid.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: RecordStartTimerOptions = {\r\n *   parameters: {\r\n *     recordStartTime: Date.now(),\r\n *     recordTimerInterval: null,\r\n *     isTimerRunning: false,\r\n *     canPauseResume: false,\r\n *     recordChangeSeconds: 15,\r\n *     recordPaused: false,\r\n *     recordStopped: false,\r\n *     roomName: 'room1',\r\n *     updateRecordStartTime: (time) => {  },\r\n *     updateRecordTimerInterval: (interval) => {  },\r\n *     updateIsTimerRunning: (isRunning) => { },\r\n *     updateCanPauseResume: (canPause) => {},\r\n *     getUpdatedAllParams: () => { },\r\n *   },\r\n * };\r\n * await recordStartTimer(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RecordStartTimer {\r\n  constructor(private RecordUpdateTimerService: RecordUpdateTimer) {}\r\n\r\n  /**\r\n   * Starts the recording timer.\r\n   * @function\r\n   * @param {RecordStartTimerOptions} options - The options object containing necessary variables and functions.\r\n   */\r\n  /**\r\n   * Starts a recording timer and manages its state.\r\n   *\r\n   * @param {RecordStartTimerOptions} options - The options for starting the recording timer.\r\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {number} options.parameters.recordStartTime - The start time of the recording.\r\n   * @param {number | null} options.parameters.recordTimerInterval - The interval ID for the recording timer.\r\n   * @param {boolean} options.parameters.isTimerRunning - Flag indicating if the timer is running.\r\n   * @param {boolean} options.parameters.canPauseResume - Flag indicating if pause/resume actions are enabled.\r\n   * @param {number} options.parameters.recordChangeSeconds - The time after which pause/resume actions are enabled.\r\n   * @param {Function} options.parameters.updateRecordStartTime - Function to update the recording start time.\r\n   * @param {Function} options.parameters.updateRecordTimerInterval - Function to update the recording timer interval.\r\n   * @param {Function} options.parameters.updateIsTimerRunning - Function to update the timer running state.\r\n   * @param {Function} options.parameters.updateCanPauseResume - Function to update the pause/resume state.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the timer is started.\r\n   *\r\n   * @remarks\r\n   * This function initializes the recording start time and sets up an interval to update the timer every second.\r\n   * It also manages the state of the timer, including enabling and disabling pause/resume actions.\r\n   * The timer is stopped if the recording is paused, stopped, or if the room name is invalid.\r\n   */\r\n\r\n  recordStartTimer = async ({ parameters }: { parameters: any }): Promise<void> => {\r\n    let { getUpdatedAllParams } = parameters;\r\n    parameters = getUpdatedAllParams();\r\n\r\n    let {\r\n      recordStartTime,\r\n      recordTimerInterval,\r\n      isTimerRunning,\r\n      canPauseResume,\r\n      recordChangeSeconds,\r\n\r\n      updateRecordStartTime,\r\n      updateRecordTimerInterval,\r\n      updateIsTimerRunning,\r\n      updateCanPauseResume,\r\n    } = parameters;\r\n\r\n    /**\r\n     * Utility function to enable pause/resume actions after a specified time.\r\n     */\r\n    function enablePauseResume() {\r\n      canPauseResume = true;\r\n      updateCanPauseResume(canPauseResume);\r\n    }\r\n\r\n    if (!isTimerRunning) {\r\n      recordStartTime = new Date().getTime(); // Get the current timestamp\r\n      updateRecordStartTime(recordStartTime);\r\n      recordTimerInterval = setInterval(() => {\r\n        // Update the timer every second (1000 milliseconds)\r\n        this.RecordUpdateTimerService.recordUpdateTimer({\r\n          recordElapsedTime: parameters.recordElapsedTime,\r\n          recordStartTime: recordStartTime,\r\n          updateRecordElapsedTime: parameters.updateRecordElapsedTime,\r\n          updateRecordingProgressTime: parameters.updateRecordingProgressTime,\r\n        });\r\n\r\n        parameters = getUpdatedAllParams();\r\n\r\n        // Check if recording is paused or stopped, and close the interval if needed\r\n        if (\r\n          parameters.recordPaused ||\r\n          parameters.recordStopped ||\r\n          parameters.roomName == '' ||\r\n          parameters.roomName == null\r\n        ) {\r\n          clearInterval(recordTimerInterval);\r\n          updateRecordTimerInterval(null);\r\n          isTimerRunning = false;\r\n          updateIsTimerRunning(isTimerRunning);\r\n          canPauseResume = false;\r\n          updateCanPauseResume(canPauseResume);\r\n        }\r\n      }, 1000);\r\n      updateRecordTimerInterval(recordTimerInterval);\r\n      isTimerRunning = true;\r\n      updateIsTimerRunning(isTimerRunning);\r\n      canPauseResume = false; // Disable pause/resume actions initially\r\n      updateCanPauseResume(canPauseResume);\r\n      setTimeout(enablePauseResume, recordChangeSeconds); // Enable pause/resume actions after specified time\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { RecordStartTimer } from './record-start-timer.service';\r\nimport { RecordResumeTimer, RecordResumeTimerParameters } from './record-resume-timer.service';\r\n\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  RePortType,\r\n  UserRecordingParams,\r\n  CaptureCanvasStreamType,\r\n  CaptureCanvasStreamParameters,\r\n  RePortParameters,\r\n  ShowAlert,\r\n} from '../../@types/types';\r\n\r\nexport interface StartRecordingParameters\r\n  extends CaptureCanvasStreamParameters,\r\n    RePortParameters,\r\n    RecordResumeTimerParameters {\r\n  roomName: string;\r\n  userRecordingParams: UserRecordingParams;\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n  updateIsRecordingModalVisible: (visible: boolean) => void;\r\n  confirmedToRecord: boolean;\r\n  showAlert?: ShowAlert;\r\n  recordingMediaOptions: string;\r\n  videoAlreadyOn: boolean;\r\n  audioAlreadyOn: boolean;\r\n  recordStarted: boolean;\r\n  recordPaused: boolean;\r\n  recordResumed: boolean;\r\n  recordStopped: boolean;\r\n  startReport: boolean;\r\n  endReport: boolean;\r\n  canRecord: boolean;\r\n  updateClearedToRecord: (cleared: boolean) => void;\r\n  updateRecordStarted: (started: boolean) => void;\r\n  updateRecordPaused: (paused: boolean) => void;\r\n  updateRecordResumed: (resumed: boolean) => void;\r\n  updateStartReport: (started: boolean) => void;\r\n  updateEndReport: (ended: boolean) => void;\r\n  updateCanRecord: (canRecord: boolean) => void;\r\n  whiteboardStarted: boolean;\r\n  whiteboardEnded: boolean;\r\n\r\n  // Mediasfu functions\r\n  rePort: RePortType;\r\n  captureCanvasStream: CaptureCanvasStreamType;\r\n\r\n  getUpdatedAllParams: () => StartRecordingParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface StartRecordingOptions {\r\n  parameters: StartRecordingParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type StartRecordingType = (options: StartRecordingOptions) => Promise<boolean | undefined>;\r\n\r\n/**\r\n * Starts the recording process based on the provided parameters.\r\n *\r\n * @param {StartRecordingOptions} options - The options for starting the recording.\r\n * @param {object} options.parameters - The parameters required for starting the recording.\r\n * @param {string} options.parameters.roomName - The name of the room where recording is to be started.\r\n * @param {object} options.parameters.userRecordingParams - User-specific recording parameters.\r\n * @param {object} options.parameters.socket - The socket instance for communication.\r\n * @param {object} options.parameters.localSocket - The local socket instance for communication.\r\n * @param {function} options.parameters.updateIsRecordingModalVisible - Function to update the visibility of the recording modal.\r\n * @param {boolean} options.parameters.confirmedToRecord - Flag indicating if the user has confirmed to record.\r\n * @param {function} options.parameters.showAlert - Function to show alerts.\r\n * @param {string} options.parameters.recordingMediaOptions - The media options for recording (e.g., \"video\", \"audio\").\r\n * @param {boolean} options.parameters.videoAlreadyOn - Flag indicating if the video is already on.\r\n * @param {boolean} options.parameters.audioAlreadyOn - Flag indicating if the audio is already on.\r\n * @param {boolean} options.parameters.recordStarted - Flag indicating if the recording has started.\r\n * @param {boolean} options.parameters.recordPaused - Flag indicating if the recording is paused.\r\n * @param {boolean} options.parameters.recordResumed - Flag indicating if the recording is resumed.\r\n * @param {boolean} options.parameters.recordStopped - Flag indicating if the recording is stopped.\r\n * @param {boolean} options.parameters.startReport - Flag indicating if the start report is active.\r\n * @param {boolean} options.parameters.endReport - Flag indicating if the end report is active.\r\n * @param {boolean} options.parameters.canRecord - Flag indicating if recording is allowed.\r\n * @param {function} options.parameters.updateClearedToRecord - Function to update the cleared to record status.\r\n * @param {function} options.parameters.updateRecordStarted - Function to update the record started status.\r\n * @param {function} options.parameters.updateRecordPaused - Function to update the record paused status.\r\n * @param {function} options.parameters.updateRecordResumed - Function to update the record resumed status.\r\n * @param {function} options.parameters.updateStartReport - Function to update the start report status.\r\n * @param {function} options.parameters.updateEndReport - Function to update the end report status.\r\n * @param {function} options.parameters.updateCanRecord - Function to update the can record status.\r\n * @param {boolean} options.parameters.whiteboardStarted - Flag indicating if the whiteboard has started.\r\n * @param {boolean} options.parameters.whiteboardEnded - Flag indicating if the whiteboard has ended.\r\n * @param {function} options.parameters.rePort - Function to report the recording status.\r\n * @param {function} options.parameters.captureCanvasStream - Function to capture the canvas stream.\r\n *\r\n * @returns {Promise<boolean | undefined>} - A promise that resolves to a boolean indicating if the recording attempt was successful, or undefined if not applicable.\r\n *\r\n * @remarks\r\n * This method checks various conditions, such as whether the user has confirmed recording and whether audio or video is already on,\r\n * before starting the recording. It updates the recording state, manages socket communication, and handles whiteboard functionality if applicable.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: StartRecordingOptions = { parameters: someParameters };\r\n * const result = await startRecording(options);\r\n * if (result) {\r\n *   console.log('Recording started successfully.');\r\n * } else {\r\n *   console.log('Failed to start recording.');\r\n * }\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StartRecording {\r\n  constructor(\r\n    private RecordStartTimerService: RecordStartTimer,\r\n    private RecordResumeTimerService: RecordResumeTimer,\r\n  ) {}\r\n\r\n  /**\r\n   * Starts the recording process based on the provided parameters.\r\n   *\r\n   * @param {StartRecordingOptions} options - The options for starting the recording.\r\n   * @param {object} options.parameters - The parameters required for starting the recording.\r\n   * @param {string} options.parameters.roomName - The name of the room where recording is to be started.\r\n   * @param {object} options.parameters.userRecordingParams - User-specific recording parameters.\r\n   * @param {object} options.parameters.socket - The socket instance for communication.\r\n   * @param {object} options.parameters.localSocket - The local socket instance for communication.\r\n   * @param {function} options.parameters.updateIsRecordingModalVisible - Function to update the visibility of the recording modal.\r\n   * @param {boolean} options.parameters.confirmedToRecord - Flag indicating if the user has confirmed to record.\r\n   * @param {function} options.parameters.showAlert - Function to show alerts.\r\n   * @param {string} options.parameters.recordingMediaOptions - The media options for recording (e.g., \"video\", \"audio\").\r\n   * @param {boolean} options.parameters.videoAlreadyOn - Flag indicating if the video is already on.\r\n   * @param {boolean} options.parameters.audioAlreadyOn - Flag indicating if the audio is already on.\r\n   * @param {boolean} options.parameters.recordStarted - Flag indicating if the recording has started.\r\n   * @param {boolean} options.parameters.recordPaused - Flag indicating if the recording is paused.\r\n   * @param {boolean} options.parameters.recordResumed - Flag indicating if the recording is resumed.\r\n   * @param {boolean} options.parameters.recordStopped - Flag indicating if the recording is stopped.\r\n   * @param {boolean} options.parameters.startReport - Flag indicating if the start report is active.\r\n   * @param {boolean} options.parameters.endReport - Flag indicating if the end report is active.\r\n   * @param {boolean} options.parameters.canRecord - Flag indicating if recording is allowed.\r\n   * @param {function} options.parameters.updateClearedToRecord - Function to update the cleared to record status.\r\n   * @param {function} options.parameters.updateRecordStarted - Function to update the record started status.\r\n   * @param {function} options.parameters.updateRecordPaused - Function to update the record paused status.\r\n   * @param {function} options.parameters.updateRecordResumed - Function to update the record resumed status.\r\n   * @param {function} options.parameters.updateStartReport - Function to update the start report status.\r\n   * @param {function} options.parameters.updateEndReport - Function to update the end report status.\r\n   * @param {function} options.parameters.updateCanRecord - Function to update the can record status.\r\n   * @param {boolean} options.parameters.whiteboardStarted - Flag indicating if the whiteboard has started.\r\n   * @param {boolean} options.parameters.whiteboardEnded - Flag indicating if the whiteboard has ended.\r\n   * @param {function} options.parameters.rePort - Function to report the recording status.\r\n   * @param {function} options.parameters.captureCanvasStream - Function to capture the canvas stream.\r\n   *\r\n   * @returns {Promise<boolean | undefined>} - A promise that resolves to a boolean indicating if the recording attempt was successful, or undefined if not applicable.\r\n   */\r\n\r\n  startRecording = async ({ parameters }: StartRecordingOptions): Promise<boolean | undefined> => {\r\n    parameters = parameters.getUpdatedAllParams();\r\n\r\n    let {\r\n      roomName,\r\n      userRecordingParams,\r\n      socket,\r\n      localSocket,\r\n      updateIsRecordingModalVisible,\r\n      confirmedToRecord,\r\n      showAlert,\r\n      recordingMediaOptions,\r\n      videoAlreadyOn,\r\n      audioAlreadyOn,\r\n      recordStarted,\r\n      recordPaused,\r\n      recordResumed,\r\n      recordStopped,\r\n      startReport,\r\n      endReport,\r\n      canRecord,\r\n      updateClearedToRecord,\r\n      updateRecordStarted,\r\n      updateRecordPaused,\r\n      updateRecordResumed,\r\n      updateStartReport,\r\n      updateEndReport,\r\n      updateCanRecord,\r\n\r\n      whiteboardStarted,\r\n      whiteboardEnded,\r\n\r\n      //mediasfu functions\r\n      rePort,\r\n      captureCanvasStream,\r\n    } = parameters;\r\n\r\n    // Check if recording is confirmed before starting\r\n    if (!confirmedToRecord) {\r\n      showAlert?.({\r\n        message: 'You must click confirm before you can start recording',\r\n        type: 'danger',\r\n      });\r\n      return false;\r\n    }\r\n\r\n    // Check for recordingMediaOptions for video\r\n    if (recordingMediaOptions === 'video' && !videoAlreadyOn) {\r\n      showAlert?.({\r\n        message: 'You must turn on your video before you can start recording',\r\n        type: 'danger',\r\n      });\r\n      return false;\r\n    }\r\n\r\n    // Check for recordingMediaOptions for audio\r\n    if (recordingMediaOptions === 'audio' && !audioAlreadyOn) {\r\n      showAlert?.({\r\n        message: 'You must turn on your audio before you can start recording',\r\n        type: 'danger',\r\n      });\r\n      return false;\r\n    }\r\n\r\n    // Set clearedToRecord to true\r\n    updateClearedToRecord(true);\r\n\r\n    let action = 'startRecord';\r\n    if (recordStarted && recordPaused && !recordResumed && !recordStopped) {\r\n      action = 'resumeRecord';\r\n    } else {\r\n      action = 'startRecord';\r\n    }\r\n\r\n    let recAttempt = false;\r\n    let socketRef = localSocket && localSocket.connected ? localSocket : socket;\r\n\r\n    await new Promise<void>((resolve) => {\r\n      socketRef.emit(\r\n        action,\r\n        { roomName, userRecordingParams },\r\n        async ({ success, reason }: { success: boolean; reason: string; recordState: any }) => {\r\n          if (success) {\r\n            recordStarted = true;\r\n            startReport = true;\r\n            endReport = false;\r\n            recordPaused = false;\r\n            recAttempt = true;\r\n\r\n            updateRecordStarted(recordStarted);\r\n            updateStartReport(startReport);\r\n            updateEndReport(endReport);\r\n            updateRecordPaused(recordPaused);\r\n\r\n            if (action === 'startRecord') {\r\n              await rePort({ parameters });\r\n              await this.RecordStartTimerService.recordStartTimer({ parameters });\r\n            } else {\r\n              recordResumed = true;\r\n              updateRecordResumed(recordResumed);\r\n              await rePort({ restart: true, parameters });\r\n              await this.RecordResumeTimerService.recordResumeTimer({ parameters });\r\n            }\r\n          } else {\r\n            showAlert?.({ message: `Recording could not start - ${reason}`, type: 'danger' });\r\n            canRecord = true;\r\n            startReport = false;\r\n            endReport = true;\r\n            recAttempt = false;\r\n\r\n            updateCanRecord(canRecord);\r\n            updateStartReport(startReport);\r\n            updateEndReport(endReport);\r\n          }\r\n\r\n          resolve();\r\n        },\r\n      );\r\n    });\r\n\r\n    // Capture canvas stream if recording is successful and whiteboard is active\r\n    try {\r\n      if (\r\n        recAttempt &&\r\n        whiteboardStarted &&\r\n        !whiteboardEnded &&\r\n        recordingMediaOptions === 'video'\r\n      ) {\r\n        captureCanvasStream({ parameters });\r\n      }\r\n    } catch (error) {\r\n      console.log('Error capturing canvas stream:', error);\r\n    }\r\n\r\n    // Set isRecordingModalVisible to false\r\n    updateIsRecordingModalVisible(false);\r\n\r\n    return recAttempt;\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { RecordPauseTimer } from './record-pause-timer.service';\r\nimport { ShowAlert } from '../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface StopRecordingParameters {\r\n  roomName: string;\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n  showAlert?: ShowAlert;\r\n  startReport: boolean;\r\n  endReport: boolean;\r\n  recordStarted: boolean;\r\n  recordPaused: boolean;\r\n  recordStopped: boolean;\r\n  updateRecordPaused: (paused: boolean) => void;\r\n  updateRecordStopped: (stopped: boolean) => void;\r\n  updateStartReport: (startReport: boolean) => void;\r\n  updateEndReport: (endReport: boolean) => void;\r\n  updateShowRecordButtons: (show: boolean) => void;\r\n  whiteboardStarted: boolean;\r\n  whiteboardEnded: boolean;\r\n  recordingMediaOptions: string;\r\n\r\n  // mediasfu functions\r\n  captureCanvasStream: (options: { parameters: any; start?: boolean }) => void;\r\n\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface StopRecordingOptions {\r\n  parameters: StopRecordingParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type StopRecordingType = (options: StopRecordingOptions) => Promise<void>;\r\n\r\n/**\r\n * Stops the recording process based on the provided parameters.\r\n *\r\n * @param {StopRecordingOptions} options - The options for stopping the recording.\r\n * @param {Object} options.parameters - The parameters required for stopping the recording.\r\n * @param {string} options.parameters.roomName - The name of the room where the recording is being stopped.\r\n * @param {Socket} options.parameters.socket - The socket instance for communication.\r\n * @param {Socket} [options.parameters.localSocket] - The local socket instance for communication.\r\n * @param {Function} options.parameters.showAlert - Function to show alerts.\r\n * @param {boolean} options.parameters.startReport - Flag indicating if the start report is active.\r\n * @param {boolean} options.parameters.endReport - Flag indicating if the end report is active.\r\n * @param {boolean} options.parameters.recordStarted - Flag indicating if the recording has started.\r\n * @param {boolean} options.parameters.recordPaused - Flag indicating if the recording is paused.\r\n * @param {boolean} options.parameters.recordStopped - Flag indicating if the recording is stopped.\r\n * @param {Function} options.parameters.updateRecordPaused - Function to update the record paused status.\r\n * @param {Function} options.parameters.updateRecordStopped - Function to update the record stopped status.\r\n * @param {Function} options.parameters.updateStartReport - Function to update the start report status.\r\n * @param {Function} options.parameters.updateEndReport - Function to update the end report status.\r\n * @param {Function} options.parameters.updateShowRecordButtons - Function to update the visibility of recording buttons.\r\n * @param {boolean} options.parameters.whiteboardStarted - Flag indicating if the whiteboard has started.\r\n * @param {boolean} options.parameters.whiteboardEnded - Flag indicating if the whiteboard has ended.\r\n * @param {string} options.parameters.recordingMediaOptions - The media options for recording (e.g., \"video\", \"audio\").\r\n * @param {Function} options.parameters.captureCanvasStream - Function to capture the canvas stream.\r\n *\r\n * @returns {Promise<void>} - A promise that resolves when the recording is stopped.\r\n *\r\n * @remarks\r\n * This method checks if the recording has started and is not already stopped.\r\n * It pauses the timer and emits a stop recording event via socket communication.\r\n * If successful, it updates the recording state and alerts the user.\r\n * Additionally, if the whiteboard feature is active, it captures the canvas stream.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: StopRecordingOptions = { parameters: someParameters };\r\n * await stopRecording(options);\r\n * console.log('Recording stopped successfully.');\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StopRecording {\r\n  constructor(private RecordPauseTimerService: RecordPauseTimer) {}\r\n\r\n  async stopRecording({ parameters }: StopRecordingOptions): Promise<void> {\r\n    let {\r\n      roomName,\r\n      socket,\r\n      localSocket,\r\n      showAlert,\r\n      startReport,\r\n      endReport,\r\n      recordStarted,\r\n      recordPaused,\r\n      recordStopped,\r\n      updateRecordPaused,\r\n      updateRecordStopped,\r\n      updateStartReport,\r\n      updateEndReport,\r\n      updateShowRecordButtons,\r\n\r\n      whiteboardStarted,\r\n      whiteboardEnded,\r\n      recordingMediaOptions,\r\n\r\n      //mediasfu functions\r\n      captureCanvasStream,\r\n    } = parameters;\r\n\r\n    let recAttempt;\r\n\r\n    if (recordStarted && !recordStopped) {\r\n      let stop = this.RecordPauseTimerService.recordPauseTimer({\r\n        stop: true,\r\n        isTimerRunning: parameters['isTimerRunning'],\r\n        canPauseResume: parameters['canPauseResume'],\r\n        showAlert: parameters.showAlert,\r\n      });\r\n\r\n      if (stop) {\r\n        let action = 'stopRecord';\r\n\r\n        let socketRef = localSocket && localSocket.connected ? localSocket : socket;\r\n\r\n        await new Promise<void>((resolve) => {\r\n          socketRef.emit(\r\n            action,\r\n            { roomName },\r\n            ({\r\n              success,\r\n              reason,\r\n              recordState,\r\n            }: {\r\n              success: boolean;\r\n              reason: string;\r\n              recordState: string;\r\n            }) => {\r\n              if (success) {\r\n                startReport = false;\r\n                endReport = true;\r\n                recordPaused = false;\r\n                recordStopped = true;\r\n                recAttempt = true;\r\n\r\n                updateStartReport(startReport);\r\n                updateEndReport(endReport);\r\n                updateRecordPaused(recordPaused);\r\n                updateRecordStopped(recordStopped);\r\n                showAlert?.({ message: 'Recording Stopped', type: 'success' });\r\n                updateShowRecordButtons(false);\r\n              } else {\r\n                let reasonMessage = `Recording Stop Failed: ${reason}; the recording is currently ${recordState}`;\r\n                showAlert?.({ message: reasonMessage, type: 'danger' });\r\n                recAttempt = false;\r\n              }\r\n\r\n              resolve();\r\n            },\r\n          );\r\n        });\r\n\r\n        try {\r\n          if (recAttempt && whiteboardStarted && !whiteboardEnded) {\r\n            if (recordingMediaOptions === 'video') {\r\n              captureCanvasStream({ parameters, start: false });\r\n            }\r\n          }\r\n        } catch (error) {\r\n          console.log('Error capturing canvas stream:', error);\r\n        }\r\n      } else {\r\n        return;\r\n      }\r\n    } else {\r\n      showAlert?.({ message: 'Recording is not started yet or already stopped', type: 'danger' });\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CheckPauseState } from './check-pause-state.service';\r\nimport { CheckResumeState } from './check-resume-state.service';\r\nimport { RecordPauseTimer } from './record-pause-timer.service';\r\nimport { RecordResumeTimer, RecordResumeTimerParameters } from './record-resume-timer.service';\r\nimport { RePortParameters, RePortType, ShowAlert, UserRecordingParams } from '../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface UpdateRecordingParameters extends RecordResumeTimerParameters, RePortParameters {\r\n  roomName: string;\r\n  userRecordingParams: UserRecordingParams;\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n  updateIsRecordingModalVisible: (visible: boolean) => void;\r\n  confirmedToRecord: boolean;\r\n  showAlert?: ShowAlert;\r\n  recordingMediaOptions: string;\r\n  videoAlreadyOn: boolean;\r\n  audioAlreadyOn: boolean;\r\n  recordStarted: boolean;\r\n  recordPaused: boolean;\r\n  recordResumed: boolean;\r\n  recordStopped: boolean;\r\n  recordChangeSeconds: number;\r\n  pauseRecordCount: number;\r\n  startReport: boolean;\r\n  endReport: boolean;\r\n  canRecord: boolean;\r\n  canPauseResume: boolean;\r\n  updateCanPauseResume: (canPauseResume: boolean) => void;\r\n  updatePauseRecordCount: (count: number) => void;\r\n  updateClearedToRecord: (cleared: boolean) => void;\r\n  updateRecordPaused: (paused: boolean) => void;\r\n  updateRecordResumed: (resumed: boolean) => void;\r\n  updateStartReport: (start: boolean) => void;\r\n  updateEndReport: (end: boolean) => void;\r\n  updateCanRecord: (canRecord: boolean) => void;\r\n\r\n  // Mediasfu functions\r\n  rePort: RePortType;\r\n\r\n  getUpdatedAllParams: () => UpdateRecordingParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface UpdateRecordingOptions {\r\n  parameters: UpdateRecordingParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type UpdateRecordingType = (options: UpdateRecordingOptions) => Promise<void>;\r\n\r\n/**\r\n * Updates the recording state based on the provided parameters.\r\n *\r\n * @param {UpdateRecordingOptions} options - The options for updating the recording state.\r\n * @param {Object} options.parameters - The parameters required for updating the recording state.\r\n * @param {string} options.parameters.roomName - The name of the room where the recording is taking place.\r\n * @param {UserRecordingParams} options.parameters.userRecordingParams - User-specific recording parameters.\r\n * @param {Socket} options.parameters.socket - The socket instance for communication.\r\n * @param {Socket} [options.parameters.localSocket] - The local socket instance for communication.\r\n * @param {Function} options.parameters.updateIsRecordingModalVisible - Function to update the visibility of the recording modal.\r\n * @param {boolean} options.parameters.confirmedToRecord - Indicates if the user has confirmed to start recording.\r\n * @param {Function} options.parameters.showAlert - Function to show alerts.\r\n * @param {string} options.parameters.recordingMediaOptions - The media options for recording (e.g., \"video\", \"audio\").\r\n * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is already turned on.\r\n * @param {boolean} options.parameters.audioAlreadyOn - Indicates if the audio is already turned on.\r\n * @param {boolean} options.parameters.recordStarted - Indicates if the recording has started.\r\n * @param {boolean} options.parameters.recordPaused - Indicates if the recording is paused.\r\n * @param {boolean} options.parameters.recordResumed - Indicates if the recording has resumed.\r\n * @param {boolean} options.parameters.recordStopped - Indicates if the recording has stopped.\r\n * @param {number} options.parameters.recordChangeSeconds - The interval in seconds for changing the recording state.\r\n * @param {number} options.parameters.pauseRecordCount - The count of pauses during the recording.\r\n * @param {boolean} options.parameters.startReport - Indicates if the start report is active.\r\n * @param {boolean} options.parameters.endReport - Indicates if the end report is active.\r\n * @param {boolean} options.parameters.canRecord - Indicates if recording is allowed.\r\n * @param {boolean} options.parameters.canPauseResume - Indicates if pausing and resuming the recording is allowed.\r\n * @param {Function} options.parameters.updateCanPauseResume - Function to update the pause/resume state.\r\n * @param {Function} options.parameters.updatePauseRecordCount - Function to update the pause record count.\r\n * @param {Function} options.parameters.updateClearedToRecord - Function to update the cleared-to-record state.\r\n * @param {Function} options.parameters.updateRecordPaused - Function to update the record paused state.\r\n * @param {Function} options.parameters.updateRecordResumed - Function to update the record resumed state.\r\n * @param {Function} options.parameters.updateStartReport - Function to update the start report state.\r\n * @param {Function} options.parameters.updateEndReport - Function to update the end report state.\r\n * @param {Function} options.parameters.updateCanRecord - Function to update the can record state.\r\n * @param {Function} options.parameters.rePort - Function to handle reporting.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the recording state has been updated.\r\n *\r\n * @remarks\r\n * This method handles the recording state updates, including starting, pausing, resuming, and stopping the recording.\r\n * It also performs necessary checks to ensure that the user can perform the requested actions based on their current state.\r\n * Alerts are displayed for any issues encountered during the process.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: UpdateRecordingOptions = { parameters: someParameters };\r\n * await updateRecording(options);\r\n * console.log('Recording state updated successfully.');\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UpdateRecording {\r\n  constructor(\r\n    private CheckPauseStateService: CheckPauseState,\r\n    private CheckResumeStateService: CheckResumeState,\r\n    private RecordPauseTimerService: RecordPauseTimer,\r\n    private RecordResumeTimerService: RecordResumeTimer,\r\n  ) {}\r\n\r\n  /**\r\n   * Updates the recording state based on the provided parameters.\r\n   *\r\n   * @param {UpdateRecordingOptions} parameters - The parameters for updating the recording state.\r\n   * @returns {Promise<void>} A promise that resolves when the recording state has been updated.\r\n   *\r\n   * @property {string} roomName - The name of the room where the recording is taking place.\r\n   * @property {any} userRecordingParams - Parameters related to the user's recording settings.\r\n   * @property {any} socket - The socket connection used for communication.\r\n   * @property {any} localSocket - The local socket connection used for communication.\r\n   * @property {Function} updateIsRecordingModalVisible - Function to update the visibility of the recording modal.\r\n   * @property {boolean} confirmedToRecord - Indicates if the user has confirmed to start recording.\r\n   * @property {Function} showAlert - Function to show alert messages.\r\n   * @property {string} recordingMediaOptions - The media options for recording (e.g., \"video\", \"audio\").\r\n   * @property {boolean} videoAlreadyOn - Indicates if the video is already turned on.\r\n   * @property {boolean} audioAlreadyOn - Indicates if the audio is already turned on.\r\n   * @property {boolean} recordStarted - Indicates if the recording has started.\r\n   * @property {boolean} recordPaused - Indicates if the recording is paused.\r\n   * @property {boolean} recordResumed - Indicates if the recording has resumed.\r\n   * @property {boolean} recordStopped - Indicates if the recording has stopped.\r\n   * @property {number} recordChangeSeconds - The interval in seconds for changing the recording state.\r\n   * @property {number} pauseRecordCount - The count of pauses during the recording.\r\n   * @property {boolean} startReport - Indicates if the start report is active.\r\n   * @property {boolean} endReport - Indicates if the end report is active.\r\n   * @property {boolean} canRecord - Indicates if recording is allowed.\r\n   * @property {boolean} canPauseResume - Indicates if pausing and resuming the recording is allowed.\r\n   * @property {Function} updateCanPauseResume - Function to update the pause/resume state.\r\n   * @property {Function} updatePauseRecordCount - Function to update the pause record count.\r\n   * @property {Function} updateClearedToRecord - Function to update the cleared-to-record state.\r\n   * @property {Function} updateRecordPaused - Function to update the record paused state.\r\n   * @property {Function} updateRecordResumed - Function to update the record resumed state.\r\n   * @property {Function} updateStartReport - Function to update the start report state.\r\n   * @property {Function} updateEndReport - Function to update the end report state.\r\n   * @property {Function} updateCanRecord - Function to update the can record state.\r\n   * @property {Function} rePort - Function to handle reporting.\r\n   */\r\n\r\n  updateRecording = async ({ parameters }: UpdateRecordingOptions): Promise<void> => {\r\n    parameters = parameters.getUpdatedAllParams();\r\n\r\n    let {\r\n      roomName,\r\n      userRecordingParams,\r\n      socket,\r\n      localSocket,\r\n      updateIsRecordingModalVisible,\r\n      confirmedToRecord,\r\n      showAlert,\r\n      recordingMediaOptions,\r\n      videoAlreadyOn,\r\n      audioAlreadyOn,\r\n      recordStarted,\r\n      recordPaused,\r\n      recordResumed,\r\n      recordStopped,\r\n      recordChangeSeconds,\r\n      pauseRecordCount,\r\n      startReport,\r\n      endReport,\r\n      canRecord,\r\n\r\n      updateCanPauseResume,\r\n      updatePauseRecordCount,\r\n      updateClearedToRecord,\r\n      updateRecordPaused,\r\n      updateRecordResumed,\r\n      updateStartReport,\r\n      updateEndReport,\r\n      updateCanRecord,\r\n\r\n      //mediasfu functions\r\n      // checkPauseState,\r\n      // checkResumeState,\r\n      rePort,\r\n      // recordPauseTimer,\r\n      // recordResumeTimer,\r\n    } = parameters;\r\n\r\n    // Check if recording is confirmed before starting\r\n    if (recordStopped) {\r\n      showAlert?.({\r\n        message: 'Recording has already stopped',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n      return;\r\n    }\r\n\r\n    // Check for recordingMediaOptions for video\r\n    if (recordingMediaOptions === 'video' && !videoAlreadyOn) {\r\n      showAlert?.({\r\n        message: 'You must turn on your video before you can start recording',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    // Check for recordingMediaOptions for audio\r\n    if (recordingMediaOptions === 'audio' && !audioAlreadyOn) {\r\n      showAlert?.({\r\n        message: 'You must turn on your audio before you can start recording',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    let socketRef = localSocket && localSocket.connected ? localSocket : socket;\r\n\r\n    if (recordStarted && !recordPaused && !recordStopped) {\r\n      let proceed = false;\r\n\r\n      proceed = await this.CheckPauseStateService.checkPauseState({\r\n        recordingMediaOptions,\r\n        recordingVideoPausesLimit: parameters['recordingVideoPausesLimit'],\r\n        recordingAudioPausesLimit: parameters['recordingAudioPausesLimit'],\r\n        pauseRecordCount,\r\n        showAlert,\r\n      });\r\n\r\n      if (!proceed) {\r\n        return;\r\n      }\r\n\r\n      let record = this.RecordPauseTimerService.recordPauseTimer({\r\n        stop: false,\r\n        isTimerRunning: parameters.isTimerRunning,\r\n        canPauseResume: parameters.canPauseResume,\r\n        showAlert,\r\n      });\r\n\r\n      if (record) {\r\n        let action = 'pauseRecord';\r\n\r\n        await new Promise<void>((resolve) => {\r\n          socketRef.emit(\r\n            action,\r\n            { roomName },\r\n            async ({\r\n              success,\r\n              reason,\r\n              recordState,\r\n              pauseCount,\r\n            }: {\r\n              success: boolean;\r\n              reason: string;\r\n              recordState: string;\r\n              pauseCount: number;\r\n            }) => {\r\n              pauseRecordCount = pauseCount;\r\n              updatePauseRecordCount(pauseRecordCount);\r\n\r\n              if (success) {\r\n                startReport = false;\r\n                endReport = true;\r\n                recordPaused = true;\r\n                updateStartReport(startReport);\r\n                updateEndReport(endReport);\r\n                updateRecordPaused(recordPaused);\r\n\r\n                showAlert?.({\r\n                  message: 'Recording paused',\r\n                  type: 'success',\r\n                  duration: 3000,\r\n                });\r\n\r\n                // Set isRecordingModalVisible to false\r\n                updateIsRecordingModalVisible(false);\r\n                setTimeout(() => {\r\n                  updateCanPauseResume(true);\r\n                }, recordChangeSeconds);\r\n              } else {\r\n                let reasonMessage = `Recording Pause Failed: ${reason}; the current state is: ${recordState}`;\r\n\r\n                showAlert?.({\r\n                  message: reasonMessage,\r\n                  type: 'danger',\r\n                  duration: 3000,\r\n                });\r\n              }\r\n\r\n              resolve();\r\n            },\r\n          );\r\n        });\r\n      }\r\n    } else if (recordStarted && recordPaused && !recordStopped) {\r\n      if (!confirmedToRecord) {\r\n        showAlert?.({\r\n          message: 'You must click confirm before you can start recording',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n\r\n        return;\r\n      }\r\n\r\n      let proceed = false;\r\n\r\n      proceed = await this.CheckResumeStateService.checkResumeState({\r\n        recordingMediaOptions,\r\n        recordingVideoPausesLimit: parameters['recordingVideoPausesLimit'],\r\n        recordingAudioPausesLimit: parameters['recordingAudioPausesLimit'],\r\n        pauseRecordCount,\r\n      });\r\n\r\n      if (!proceed) {\r\n        return;\r\n      }\r\n\r\n      let resume = await this.RecordResumeTimerService.recordResumeTimer({ parameters });\r\n      if (resume) {\r\n        // Set clearedToRecord to true\r\n        updateClearedToRecord(true);\r\n\r\n        let action = 'startRecord';\r\n        if (recordStarted && recordPaused && !recordResumed && !recordStopped) {\r\n          action = 'resumeRecord';\r\n        } else {\r\n          action = 'startRecord';\r\n        }\r\n        action = 'resumeRecord';\r\n\r\n        await new Promise<void>((resolve) => {\r\n          socketRef.emit(\r\n            action,\r\n            { roomName, userRecordingParams },\r\n            async ({\r\n              success,\r\n              reason,\r\n            }: {\r\n              success: boolean;\r\n              reason: string;\r\n              recordState: string;\r\n            }) => {\r\n              if (success) {\r\n                recordPaused = false;\r\n                recordResumed = true;\r\n                updateRecordPaused(recordPaused);\r\n                updateRecordResumed(recordResumed);\r\n\r\n                if (action === 'startRecord') {\r\n                  await rePort({ parameters });\r\n                } else {\r\n                  recordResumed = true;\r\n                  await rePort({ restart: true, parameters });\r\n                }\r\n              } else {\r\n                showAlert?.({\r\n                  message: `Recording could not start - ${reason}`,\r\n                  type: 'danger',\r\n                  duration: 3000,\r\n                });\r\n\r\n                canRecord = true;\r\n                startReport = false;\r\n                endReport = true;\r\n\r\n                updateCanRecord(canRecord);\r\n                updateStartReport(startReport);\r\n                updateEndReport(endReport);\r\n              }\r\n\r\n              resolve();\r\n            },\r\n          );\r\n        });\r\n\r\n        // Set isRecordingModalVisible to false\r\n        updateIsRecordingModalVisible(false);\r\n\r\n        setTimeout(() => {\r\n          updateCanPauseResume(true);\r\n        }, recordChangeSeconds);\r\n      }\r\n    }\r\n  };\r\n}\r\n","// requests.service.ts\r\nimport { Injectable } from '@angular/core';\r\nexport interface LaunchRequestsOptions {\r\n  updateIsRequestsModalVisible: (isVisible: boolean) => void;\r\n  isRequestsModalVisible: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchRequestsType = (options: LaunchRequestsOptions) => void;\r\n\r\n/**\r\n * Toggles the visibility state of the requests modal.\r\n *\r\n * @param {LaunchRequestsOptions} options - The options for launching requests.\r\n * @param {Function} options.updateIsRequestsModalVisible - Function to update the visibility state of the requests modal.\r\n * @param {boolean} options.isRequestsModalVisible - Current visibility state of the requests modal.\r\n * @returns {void}\r\n *\r\n * @remarks\r\n * This method is used to open or close the requests modal by toggling its visibility state.\r\n * It takes the current visibility state as input and updates it accordingly.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: LaunchRequestsOptions = {\r\n *   updateIsRequestsModalVisible: (isVisible) => {\r\n *     console.log('Requests modal visibility:', isVisible);\r\n *   },\r\n *   isRequestsModalVisible: false,\r\n * };\r\n *\r\n * const launchRequestsService = new LaunchRequests();\r\n * launchRequestsService.launchRequests(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchRequests {\r\n  /**\r\n   * Toggles the visibility state of the requests modal.\r\n   *\r\n   * @param {LaunchRequestsOptions} options - The options for launching requests.\r\n   * @param {Function} options.updateIsRequestsModalVisible - Function to update the visibility state of the requests modal.\r\n   * @param {boolean} options.isRequestsModalVisible - Current visibility state of the requests modal.\r\n   * @returns {void}\r\n   */\r\n\r\n  launchRequests({\r\n    updateIsRequestsModalVisible,\r\n    isRequestsModalVisible,\r\n  }: LaunchRequestsOptions): void {\r\n    // Toggle the visibility of the display settings modal.\r\n    updateIsRequestsModalVisible(!isRequestsModalVisible);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { Request, RequestResponse } from '../../@types/types';\r\n\r\nexport interface RespondToRequestsOptions {\r\n  socket: Socket;\r\n  request: Request;\r\n  updateRequestList: (newRequestList: Request[]) => void;\r\n  requestList: Request[];\r\n  action: string;\r\n  roomName: string;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type RespondToRequestsType = (options: RespondToRequestsOptions) => Promise<void>;\r\n\r\n/**\r\n * Responds to incoming requests by updating the request list and emitting a response to the server.\r\n *\r\n * @param {RespondToRequestsOptions} options - The options for responding to requests.\r\n * @param {Socket} options.socket - The socket instance used to emit the response.\r\n * @param {Request} options.request - The request object containing details of the request.\r\n * @param {Function} options.updateRequestList - The function to update the request list.\r\n * @param {Request[]} options.requestList - The current list of requests.\r\n * @param {string} options.action - The action to be taken on the request.\r\n * @param {string} options.roomName - The name of the room to which the response should be emitted.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the response has been emitted.\r\n *\r\n * @remarks\r\n * This method filters out the request that is being responded to from the current request list,\r\n * updates the list, and emits the response to the server using the provided socket.\r\n * It ensures that the state of the requests is accurately reflected in the application.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: RespondToRequestsOptions = {\r\n *   socket: socketInstance,\r\n *   request: {\r\n *     id: 'request_id',\r\n *     name: 'Request Name',\r\n *     icon: 'request_icon'\r\n *   },\r\n *   updateRequestList: (newRequestList) => {\r\n *     console.log('Updated request list:', newRequestList);\r\n *   },\r\n *   requestList: currentRequestList,\r\n *   action: 'accept',\r\n *   roomName: 'Room 1',\r\n * };\r\n *\r\n * const respondToRequestsService = new RespondToRequests();\r\n * await respondToRequestsService.respondToRequests(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RespondToRequests {\r\n  /**\r\n   * Responds to incoming requests by updating the request list and emitting a response to the server.\r\n   *\r\n   * @param {Object} options - The options for responding to requests.\r\n   * @param {Socket} options.socket - The socket instance used to emit the response.\r\n   * @param {Request} options.request - The request object containing details of the request.\r\n   * @param {Function} options.updateRequestList - The function to update the request list.\r\n   * @param {Request[]} options.requestList - The current list of requests.\r\n   * @param {string} options.action - The action to be taken on the request.\r\n   * @param {string} options.roomName - The name of the room to which the response should be emitted.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the response has been emitted.\r\n   */\r\n\r\n  async respondToRequests({\r\n    socket,\r\n    request,\r\n    updateRequestList,\r\n    requestList,\r\n    action,\r\n    roomName,\r\n  }: RespondToRequestsOptions): Promise<void> {\r\n    // Filter out the request that is being responded to\r\n    let newRequestList = requestList.filter((request_: any) => {\r\n      return !(\r\n        request_.id === request.id &&\r\n        request_.icon === request.icon &&\r\n        request_.name === request.name\r\n      );\r\n    });\r\n\r\n    // Update the request list\r\n    updateRequestList(newRequestList);\r\n\r\n    // Prepare the request response object\r\n    let requestResponse: RequestResponse = {\r\n      id: request.id,\r\n      name: request.name,\r\n      type: request.icon,\r\n      action: action,\r\n    };\r\n\r\n    // Emit the response via the socket\r\n    socket.emit('updateUserofRequestStatus', { requestResponse, roomName });\r\n  }\r\n}\r\n","// settings.service.ts\r\n\r\nimport { Injectable } from '@angular/core';\r\nexport interface LaunchSettingsOptions {\r\n  updateIsSettingsModalVisible: (isVisible: boolean) => void;\r\n  isSettingsModalVisible: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchSettingsType = (options: LaunchSettingsOptions) => void;\r\n\r\n/**\r\n * Toggles the visibility state of the settings modal.\r\n *\r\n * @param {LaunchSettingsOptions} options - The options for launching settings.\r\n * @param {Function} options.updateIsSettingsModalVisible - Function to update the visibility state of the settings modal.\r\n * @param {boolean} options.isSettingsModalVisible - Current visibility state of the settings modal.\r\n * @returns {void}\r\n *\r\n * @remarks\r\n * This method toggles the current visibility state of the settings modal.\r\n * If the modal is currently visible, it will be hidden, and vice versa.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: LaunchSettingsOptions = {\r\n *   updateIsSettingsModalVisible: (isVisible) => {\r\n *     console.log('Settings modal visibility:', isVisible);\r\n *   },\r\n *   isSettingsModalVisible: false,\r\n * };\r\n *\r\n * const launchSettingsService = new LaunchSettings();\r\n * launchSettingsService.launchSettings(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchSettings {\r\n  /**\r\n   * Toggles the visibility state of the settings modal.\r\n   *\r\n   * @param {LaunchSettingsOptions} options - The options for launching settings.\r\n   * @param {Function} options.updateIsSettingsModalVisible - Function to update the visibility state of the settings modal.\r\n   * @param {boolean} options.isSettingsModalVisible - Current visibility state of the settings modal.\r\n   * @returns {void}\r\n   */\r\n\r\n  launchSettings({\r\n    updateIsSettingsModalVisible,\r\n    isSettingsModalVisible,\r\n  }: LaunchSettingsOptions): void {\r\n    // Toggle the visibility of the display settings modal.\r\n    updateIsSettingsModalVisible(!isSettingsModalVisible);\r\n  }\r\n}\r\n","// modify-settings.service.ts\r\nimport { Socket } from 'socket.io-client';\r\nimport { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\n\r\nexport interface ModifySettingsOptions {\r\n  showAlert?: ShowAlert;\r\n  roomName: string;\r\n  audioSet: string;\r\n  videoSet: string;\r\n  screenshareSet: string;\r\n  chatSet: string;\r\n  socket: Socket;\r\n  updateAudioSetting: (audioSet: string) => void;\r\n  updateVideoSetting: (videoSet: string) => void;\r\n  updateScreenshareSetting: (screenshareSet: string) => void;\r\n  updateChatSetting: (chatSet: string) => void;\r\n  updateIsSettingsModalVisible: (isVisible: boolean) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ModifySettingsType = (options: ModifySettingsOptions) => Promise<void>;\r\n\r\n/**\r\n * Modifies the settings for a given room and updates the state accordingly.\r\n *\r\n * @param {ModifySettingsOptions} options - The options for modifying settings.\r\n * @param {Function} options.showAlert - Function to show alert messages.\r\n * @param {string} options.roomName - The name of the room.\r\n * @param {string} options.audioSet - The audio setting to be applied.\r\n * @param {string} options.videoSet - The video setting to be applied.\r\n * @param {string} options.screenshareSet - The screenshare setting to be applied.\r\n * @param {string} options.chatSet - The chat setting to be applied.\r\n * @param {Socket} options.socket - The socket instance for emitting events.\r\n * @param {Function} options.updateAudioSetting - Function to update the audio setting state.\r\n * @param {Function} options.updateVideoSetting - Function to update the video setting state.\r\n * @param {Function} options.updateScreenshareSetting - Function to update the screenshare setting state.\r\n * @param {Function} options.updateChatSetting - Function to update the chat setting state.\r\n * @param {Function} options.updateIsSettingsModalVisible - Function to update the visibility of the settings modal.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the settings have been modified.\r\n *\r\n * @throws Will show an alert if any setting is set to \"approval\" in demo mode (room name starts with \"d\").\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: ModifySettingsOptions = {\r\n *   showAlert: (alert) => console.log(alert),\r\n *   roomName: 'exampleRoom',\r\n *   audioSet: 'enabled',\r\n *   videoSet: 'disabled',\r\n *   screenshareSet: 'approval',\r\n *   chatSet: 'enabled',\r\n *   socket: socketInstance,\r\n *   updateAudioSetting: (audio) => console.log('Audio setting updated:', audio),\r\n *   updateVideoSetting: (video) => console.log('Video setting updated:', video),\r\n *   updateScreenshareSetting: (screenshare) => console.log('Screenshare setting updated:', screenshare),\r\n *   updateChatSetting: (chat) => console.log('Chat setting updated:', chat),\r\n *   updateIsSettingsModalVisible: (visible) => console.log('Settings modal visibility:', visible),\r\n * };\r\n *\r\n * const modifySettingsService = new ModifySettings();\r\n * await modifySettingsService.modifySettings(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ModifySettings {\r\n  /**\r\n   * Modifies the settings for a given room and updates the state accordingly.\r\n   *\r\n   * @param {Object} options - The options for modifying settings.\r\n   * @param {Function} options.showAlert - Function to show alert messages.\r\n   * @param {string} options.roomName - The name of the room.\r\n   * @param {string} options.audioSet - The audio setting to be applied.\r\n   * @param {string} options.videoSet - The video setting to be applied.\r\n   * @param {string} options.screenshareSet - The screenshare setting to be applied.\r\n   * @param {string} options.chatSet - The chat setting to be applied.\r\n   * @param {Object} options.socket - The socket instance for emitting events.\r\n   * @param {Function} options.updateAudioSetting - Function to update the audio setting state.\r\n   * @param {Function} options.updateVideoSetting - Function to update the video setting state.\r\n   * @param {Function} options.updateScreenshareSetting - Function to update the screenshare setting state.\r\n   * @param {Function} options.updateChatSetting - Function to update the chat setting state.\r\n   * @param {Function} options.updateIsSettingsModalVisible - Function to update the visibility of the settings modal.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the settings have been modified.\r\n   *\r\n   * @throws Will show an alert if any setting is set to \"approval\" in demo mode (room name starts with \"d\").\r\n   */\r\n\r\n  modifySettings = async ({\r\n    showAlert,\r\n    roomName,\r\n    audioSet,\r\n    videoSet,\r\n    screenshareSet,\r\n    chatSet,\r\n    socket,\r\n    updateAudioSetting,\r\n    updateVideoSetting,\r\n    updateScreenshareSetting,\r\n    updateChatSetting,\r\n    updateIsSettingsModalVisible,\r\n  }: ModifySettingsOptions): Promise<void> => {\r\n    if (roomName.toLowerCase().startsWith('d')) {\r\n      // none should be approval\r\n      if (\r\n        audioSet === 'approval' ||\r\n        videoSet === 'approval' ||\r\n        screenshareSet === 'approval' ||\r\n        chatSet === 'approval'\r\n      ) {\r\n        showAlert?.({\r\n          message: 'You cannot set approval for demo mode.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n\r\n        return;\r\n      }\r\n    }\r\n\r\n    // Check and update state variables based on the provided logic\r\n    if (audioSet) {\r\n      updateAudioSetting(audioSet);\r\n    }\r\n    if (videoSet) {\r\n      updateVideoSetting(videoSet);\r\n    }\r\n    if (screenshareSet) {\r\n      updateScreenshareSetting(screenshareSet);\r\n    }\r\n    if (chatSet) {\r\n      updateChatSetting(chatSet);\r\n    }\r\n\r\n    const settings = [audioSet, videoSet, screenshareSet, chatSet];\r\n    socket.emit('updateSettingsForRequests', { settings, roomName });\r\n\r\n    // Close modal\r\n    updateIsSettingsModalVisible(false);\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  CheckPermissionType,\r\n  DisconnectSendTransportAudioParameters,\r\n  DisconnectSendTransportAudioType,\r\n  Participant,\r\n  RequestPermissionAudioType,\r\n  ResumeSendTransportAudioParameters,\r\n  ResumeSendTransportAudioType,\r\n  ShowAlert,\r\n  StreamSuccessAudioParameters,\r\n  StreamSuccessAudioType,\r\n} from '../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\n/* eslint-disable eqeqeq */\r\nexport interface ClickAudioParameters\r\n  extends DisconnectSendTransportAudioParameters,\r\n    ResumeSendTransportAudioParameters,\r\n    StreamSuccessAudioParameters {\r\n  checkMediaPermission: boolean;\r\n  hasAudioPermission: boolean;\r\n  audioPaused: boolean;\r\n  audioAlreadyOn: boolean;\r\n  audioOnlyRoom: boolean;\r\n  recordStarted: boolean;\r\n  recordResumed: boolean;\r\n  recordPaused: boolean;\r\n  recordStopped: boolean;\r\n  recordingMediaOptions: string;\r\n  islevel: string;\r\n  youAreCoHost: boolean;\r\n  adminRestrictSetting: boolean;\r\n  audioRequestState: string | null;\r\n  audioRequestTime: number;\r\n  member: string;\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n  roomName: string;\r\n  userDefaultAudioInputDevice: string;\r\n  micAction: boolean;\r\n  localStream: MediaStream | null;\r\n  audioSetting: string;\r\n  videoSetting: string;\r\n  screenshareSetting: string;\r\n  chatSetting: string;\r\n  updateRequestIntervalSeconds: number;\r\n  participants: Participant[];\r\n  transportCreated: boolean;\r\n  transportCreatedAudio: boolean;\r\n\r\n  updateAudioAlreadyOn: (status: boolean) => void;\r\n  updateAudioRequestState: (state: string | null) => void;\r\n  updateAudioPaused: (status: boolean) => void;\r\n  updateLocalStream: (stream: MediaStream | null) => void;\r\n  updateParticipants: (participants: Participant[]) => void;\r\n  updateTransportCreated: (status: boolean) => void;\r\n  updateTransportCreatedAudio: (status: boolean) => void;\r\n  updateMicAction: (action: boolean) => void;\r\n  showAlert?: ShowAlert;\r\n\r\n  // mediasfu functions\r\n  checkPermission: CheckPermissionType;\r\n  streamSuccessAudio: StreamSuccessAudioType;\r\n  disconnectSendTransportAudio: DisconnectSendTransportAudioType;\r\n  requestPermissionAudio: RequestPermissionAudioType;\r\n  resumeSendTransportAudio: ResumeSendTransportAudioType;\r\n\r\n  getUpdatedAllParams: () => ClickAudioParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ClickAudioOptions {\r\n  parameters: ClickAudioParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ClickAudioType = (options: ClickAudioOptions) => Promise<void>;\r\n\r\n/**\r\n * Handles the click event for toggling audio in a media session.\r\n *\r\n * @param {ClickAudioOptions} options - The parameters required for handling the audio click event.\r\n * @param {Object} options.parameters - The parameters for toggling audio.\r\n * @param {boolean} options.parameters.checkMediaPermission - Flag indicating whether to check media permission.\r\n * @param {boolean} options.parameters.hasAudioPermission - Flag indicating if the user has audio permission.\r\n * @param {boolean} options.parameters.audioPaused - Flag indicating if audio is paused.\r\n * @param {boolean} options.parameters.audioAlreadyOn - Flag indicating if audio is already turned on.\r\n * @param {boolean} options.parameters.audioOnlyRoom - Flag indicating if the room is audio-only.\r\n * @param {boolean} options.parameters.recordStarted - Flag indicating if recording has started.\r\n * @param {boolean} options.parameters.recordResumed - Flag indicating if recording has resumed.\r\n * @param {boolean} options.parameters.recordPaused - Flag indicating if recording is paused.\r\n * @param {boolean} options.parameters.recordStopped - Flag indicating if recording is stopped.\r\n * @param {string} options.parameters.recordingMediaOptions - Media options for recording (e.g., \"video\", \"audio\").\r\n * @param {string} options.parameters.islevel - User's level in the application.\r\n * @param {boolean} options.parameters.youAreCoHost - Flag indicating if the user is a co-host.\r\n * @param {boolean} options.parameters.adminRestrictSetting - Flag indicating if admin restrictions are set.\r\n * @param {string | null} options.parameters.audioRequestState - Current state of the audio request.\r\n * @param {number} options.parameters.audioRequestTime - Timestamp of the audio request.\r\n * @param {string} options.parameters.member - Current member's name.\r\n * @param {Socket} options.parameters.socket - The socket instance for communication.\r\n * @param {Socket} options.parameters.localSocket - The local socket instance for communication.\r\n * @param {string} options.parameters.roomName - The name of the room.\r\n * @param {string} options.parameters.userDefaultAudioInputDevice - The default audio input device for the user.\r\n * @param {boolean} options.parameters.micAction - Flag indicating if the microphone action is in progress.\r\n * @param {MediaStream | null} options.parameters.localStream - The user's local media stream.\r\n * @param {string} options.parameters.audioSetting - Current audio setting.\r\n * @param {string} options.parameters.videoSetting - Current video setting.\r\n * @param {string} options.parameters.screenshareSetting - Current screenshare setting.\r\n * @param {string} options.parameters.chatSetting - Current chat setting.\r\n * @param {number} options.parameters.updateRequestIntervalSeconds - Interval for updating request states.\r\n * @param {Participant[]} options.parameters.participants - List of participants in the room.\r\n * @param {boolean} options.parameters.transportCreated - Flag indicating if the transport has been created.\r\n * @param {boolean} options.parameters.transportCreatedAudio - Flag indicating if audio transport has been created.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the audio click event has been handled.\r\n *\r\n * @remarks\r\n * This function performs the following actions:\r\n * - If the event is audio-only, it shows an alert and exits.\r\n * - If the audio is already on, it handles the logic for turning it off, including checking recording states and permissions.\r\n * - If the audio is off, it checks for admin restrictions, user permissions, and handles the logic for turning the audio on.\r\n * - It updates various states and emits socket events as necessary.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: ClickAudioOptions = {\r\n *   parameters: {\r\n *     checkMediaPermission: true,\r\n *     hasAudioPermission: false,\r\n *     audioPaused: false,\r\n *     audioAlreadyOn: false,\r\n *     audioOnlyRoom: false,\r\n *     recordStarted: false,\r\n *     recordResumed: false,\r\n *     recordPaused: false,\r\n *     recordStopped: false,\r\n *     recordingMediaOptions: 'audio',\r\n *     islevel: '1',\r\n *     youAreCoHost: false,\r\n *     adminRestrictSetting: false,\r\n *     audioRequestState: null,\r\n *     audioRequestTime: 0,\r\n *     member: 'John Doe',\r\n *     socket: socketInstance,\r\n *     localSocket: socketInstance,\r\n *     roomName: 'exampleRoom',\r\n *     userDefaultAudioInputDevice: 'default',\r\n *     micAction: false,\r\n *     localStream: null,\r\n *     audioSetting: 'enabled',\r\n *     videoSetting: 'disabled',\r\n *     screenshareSetting: 'disabled',\r\n *     chatSetting: 'enabled',\r\n *     updateRequestIntervalSeconds: 30,\r\n *     participants: [],\r\n *     transportCreated: false,\r\n *     transportCreatedAudio: false,\r\n *     updateAudioAlreadyOn: (status) => console.log(status),\r\n *     updateAudioRequestState: (state) => console.log(state),\r\n *     updateAudioPaused: (status) => console.log(status),\r\n *     updateLocalStream: (stream) => console.log(stream),\r\n *     updateParticipants: (participants) => console.log(participants),\r\n *     updateTransportCreated: (status) => console.log(status),\r\n *     updateTransportCreatedAudio: (status) => console.log(status),\r\n *     updateMicAction: (action) => console.log(action),\r\n *     checkPermission: async () => 'granted',\r\n *     streamSuccessAudio: async () => console.log('Audio streaming success'),\r\n *     disconnectSendTransportAudio: async () => console.log('Audio transport disconnected'),\r\n *     requestPermissionAudio: async () => 'granted',\r\n *     resumeSendTransportAudio: async () => console.log('Audio transport resumed'),\r\n *   },\r\n * };\r\n *\r\n * const clickAudioService = new ClickAudio();\r\n * await clickAudioService.clickAudio(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ClickAudio {\r\n  /**\r\n   * Handles the click event for toggling audio in a media session.\r\n   *\r\n   * @param {ClickAudioOptions} parameters - The parameters required for handling the audio click event.\r\n   * @returns {Promise<void>} A promise that resolves when the audio click event has been handled.\r\n   *\r\n   * The function performs the following actions:\r\n   * - If the event is audio-only, it shows an alert and exits.\r\n   * - If the audio is already on, it handles the logic for turning it off, including checking recording states and permissions.\r\n   * - If the audio is off, it checks for admin restrictions, user permissions, and handles the logic for turning the audio on.\r\n   * - It updates various states and emits socket events as necessary.\r\n   *\r\n   * The function makes use of several helper functions and state update functions passed in through the parameters.\r\n   */\r\n\r\n  async clickAudio({ parameters }: ClickAudioOptions): Promise<void> {\r\n    let {\r\n      checkMediaPermission,\r\n      hasAudioPermission,\r\n      audioPaused,\r\n      audioAlreadyOn,\r\n      audioOnlyRoom,\r\n      recordStarted,\r\n      recordResumed,\r\n      recordPaused,\r\n      recordStopped,\r\n      recordingMediaOptions,\r\n      islevel,\r\n      youAreCoHost,\r\n      adminRestrictSetting,\r\n      audioRequestState,\r\n      audioRequestTime,\r\n      member,\r\n      socket,\r\n      localSocket,\r\n      roomName,\r\n      userDefaultAudioInputDevice,\r\n      micAction,\r\n      localStream,\r\n      audioSetting,\r\n      videoSetting,\r\n      screenshareSetting,\r\n      chatSetting,\r\n      updateRequestIntervalSeconds,\r\n      participants,\r\n      showAlert,\r\n      transportCreated,\r\n      transportCreatedAudio,\r\n\r\n      updateAudioAlreadyOn,\r\n      updateAudioRequestState,\r\n      updateAudioPaused,\r\n      updateLocalStream,\r\n      updateParticipants,\r\n      updateTransportCreated,\r\n      updateTransportCreatedAudio,\r\n      updateMicAction,\r\n\r\n      checkPermission,\r\n      streamSuccessAudio,\r\n      requestPermissionAudio,\r\n      resumeSendTransportAudio,\r\n      disconnectSendTransportAudio,\r\n    } = parameters;\r\n\r\n    if (audioOnlyRoom) {\r\n      showAlert?.({\r\n        message: 'You cannot turn on your camera in an audio-only event.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n      return;\r\n    }\r\n\r\n    if (audioAlreadyOn) {\r\n      if (islevel === '2' && (recordStarted || recordResumed)) {\r\n        if (!(recordPaused || recordStopped)) {\r\n          if (recordingMediaOptions === 'audio') {\r\n            showAlert?.({\r\n              message:\r\n                'You cannot turn off your audio while recording, please pause or stop recording first.',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n            return;\r\n          }\r\n        }\r\n      }\r\n\r\n      audioAlreadyOn = false;\r\n      updateAudioAlreadyOn(audioAlreadyOn);\r\n      if (localStream) {\r\n        localStream.getAudioTracks()[0].enabled = false;\r\n      }\r\n      updateLocalStream(localStream);\r\n      await disconnectSendTransportAudio({ parameters }); //disconnect function here actuall calls audioProducer.pause() instead of close() as in mediasfu\r\n      audioPaused = true;\r\n      updateAudioPaused(audioPaused);\r\n    } else {\r\n      if (adminRestrictSetting) {\r\n        showAlert?.({\r\n          message: 'You cannot turn on your microphone. Access denied by host.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n        return;\r\n      }\r\n\r\n      let response = 2;\r\n      if (!micAction && islevel !== '2' && !youAreCoHost) {\r\n        response = await checkPermission({\r\n          permissionType: 'audioSetting',\r\n          audioSetting,\r\n          videoSetting,\r\n          screenshareSetting,\r\n          chatSetting,\r\n        });\r\n      } else {\r\n        response = 0;\r\n      }\r\n\r\n      switch (response) {\r\n        case 1: {\r\n          if (audioRequestState === 'pending') {\r\n            showAlert?.({\r\n              message: 'A request is pending. Please wait for the host to respond.',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n            return;\r\n          }\r\n\r\n          showAlert?.({\r\n            message: 'Request sent to host.',\r\n            type: 'success',\r\n            duration: 3000,\r\n          });\r\n\r\n          audioRequestState = 'pending';\r\n          updateAudioRequestState(audioRequestState);\r\n          //create a request and add to the request list and send to host\r\n\r\n          const userRequest = {\r\n            id: socket.id,\r\n            name: member,\r\n            icon: 'fa-microphone',\r\n          };\r\n          socket.emit('participantRequest', { userRequest, roomName });\r\n          break;\r\n        }\r\n\r\n        case 2:\r\n          if (\r\n            audioRequestState === 'rejected' &&\r\n            Date.now() - audioRequestTime < updateRequestIntervalSeconds * 1000\r\n          ) {\r\n            showAlert?.({\r\n              message: `A request was rejected. Please wait for ${updateRequestIntervalSeconds} seconds before sending another request.`,\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n            return;\r\n          }\r\n          break;\r\n\r\n        case 0:\r\n          //allow\r\n\r\n          if (audioPaused) {\r\n            if (localStream) {\r\n              localStream.getAudioTracks()[0].enabled = true;\r\n            }\r\n            updateAudioAlreadyOn(true);\r\n            await resumeSendTransportAudio({ parameters });\r\n            socket.emit('resumeProducerAudio', { mediaTag: 'audio', roomName });\r\n\r\n            try {\r\n              if (localSocket && localSocket.id){\r\n                  localSocket.emit(\"resumeProducerAudio\", { mediaTag: \"audio\", roomName });\r\n              }\r\n            } catch (error) {\r\n              console.log(\"Error in resumeProducerAudio\", error);\r\n\r\n            }\r\n\r\n            updateLocalStream(localStream);\r\n\r\n\r\n            if (micAction == true) {\r\n              micAction = false;\r\n              updateMicAction(micAction);\r\n            }\r\n\r\n            participants.forEach((participant) => {\r\n              if (participant['socketId'] === socket.id && participant.name === member) {\r\n                participant.muted = false;\r\n              }\r\n            });\r\n            updateParticipants(participants);\r\n\r\n            transportCreated = true;\r\n            updateTransportCreated(transportCreated);\r\n\r\n            transportCreatedAudio = true;\r\n            updateTransportCreatedAudio(transportCreatedAudio);\r\n          } else {\r\n            if (!hasAudioPermission && checkMediaPermission) {\r\n              const statusMic = await requestPermissionAudio();\r\n              if (statusMic !== 'granted') {\r\n                showAlert?.({\r\n                  message:\r\n                    'Allow access to your microphone or check if your microphone is not being used by another application.',\r\n                  type: 'danger',\r\n                  duration: 3000,\r\n                });\r\n                return;\r\n              }\r\n            }\r\n\r\n            const mediaConstraints = userDefaultAudioInputDevice\r\n              ? { audio: { deviceId: userDefaultAudioInputDevice }, video: false }\r\n              : { audio: true, video: false };\r\n\r\n            try {\r\n              const stream = await navigator.mediaDevices.getUserMedia(mediaConstraints);\r\n              await streamSuccessAudio({ stream, parameters });\r\n            } catch (error) {\r\n              console.error(error);\r\n              showAlert?.({\r\n                message:\r\n                  'Allow access to your microphone or check if your microphone is not being used by another application.',\r\n                type: 'danger',\r\n                duration: 3000,\r\n              });\r\n            }\r\n          }\r\n          break;\r\n\r\n        default:\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\nexport interface ClickChatOptions {\r\n  isMessagesModalVisible: boolean;\r\n  updateIsMessagesModalVisible: (isVisible: boolean) => void;\r\n  chatSetting: string;\r\n  islevel: string;\r\n  showAlert?: ShowAlert;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ClickChatType = (options: ClickChatOptions) => Promise<void>;\r\n\r\n/**\r\n * Toggles the visibility of the chat modal based on the current state and event settings.\r\n *\r\n * @param {ClickChatOptions} options - The options for the clickChat function.\r\n * @param {boolean} options.isMessagesModalVisible - Indicates if the messages modal is currently visible.\r\n * @param {Function} options.updateIsMessagesModalVisible - Function to update the visibility state of the messages modal.\r\n * @param {string} options.chatSetting - The chat setting for the event, which can be \"allow\" or other values.\r\n * @param {string} options.islevel - The participant's level, where \"2\" indicates a level that allows chat.\r\n * @param {Function} [options.showAlert] - Optional function to show an alert message.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n *\r\n * @remarks\r\n * This function checks the current visibility state of the messages modal. If it is already visible, it will hide the modal.\r\n * If it is not visible, it checks the chat settings and the participant's level to determine whether to show an alert\r\n * indicating that chat is disabled or to display the chat modal.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: ClickChatOptions = {\r\n *   isMessagesModalVisible: false,\r\n *   updateIsMessagesModalVisible: (visible) => console.log(`Modal is now ${visible ? 'visible' : 'hidden'}`),\r\n *   chatSetting: 'allow',\r\n *   islevel: '1',\r\n *   showAlert: (alert) => console.log(`Alert: ${alert.message}`),\r\n * };\r\n *\r\n * const clickChatService = new ClickChat();\r\n * await clickChatService.clickChat(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ClickChat {\r\n  /**\r\n   * Toggles the visibility of the chat modal based on the current state and event settings.\r\n   *\r\n   * @param {Object} options - The options for the clickChat function.\r\n   * @param {boolean} options.isMessagesModalVisible - Indicates if the messages modal is currently visible.\r\n   * @param {Function} options.updateIsMessagesModalVisible - Function to update the visibility state of the messages modal.\r\n   * @param {string} options.chatSetting - The chat setting for the event, which can be \"allow\" or other values.\r\n   * @param {string} options.islevel - The participant's level, where \"2\" indicates a level that allows chat.\r\n   * @param {Function} [options.showAlert] - Optional function to show an alert message.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n   */\r\n\r\n  async clickChat({\r\n    isMessagesModalVisible,\r\n    updateIsMessagesModalVisible,\r\n    chatSetting,\r\n    islevel,\r\n    showAlert,\r\n  }: ClickChatOptions): Promise<void> {\r\n    if (isMessagesModalVisible) {\r\n      updateIsMessagesModalVisible(false);\r\n    } else {\r\n      // Check if chat is allowed based on event settings and participant level\r\n      if (chatSetting !== 'allow' && islevel !== '2') {\r\n        updateIsMessagesModalVisible(false);\r\n        showAlert?.({\r\n          message: 'Chat is disabled for this event.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n      } else {\r\n        updateIsMessagesModalVisible(true);\r\n      }\r\n    }\r\n  }\r\n}\r\n","// screen-share.service.ts\r\nimport { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  CheckPermissionType,\r\n  CheckScreenShareParameters,\r\n  CheckScreenShareType,\r\n  ShowAlert,\r\n  StopShareScreenParameters,\r\n  StopShareScreenType,\r\n} from '../../@types/types';\r\n\r\nexport interface ClickScreenShareParameters\r\n  extends CheckScreenShareParameters,\r\n    StopShareScreenParameters {\r\n  showAlert?: ShowAlert;\r\n  roomName: string;\r\n  member: string;\r\n  socket: Socket;\r\n  islevel: string;\r\n  youAreCoHost: boolean;\r\n  adminRestrictSetting: boolean;\r\n  audioSetting: string;\r\n  videoSetting: string;\r\n  screenshareSetting: string;\r\n  chatSetting: string;\r\n  screenAction: boolean;\r\n  screenAlreadyOn: boolean;\r\n  screenRequestState: string | null;\r\n  screenRequestTime: number;\r\n  audioOnlyRoom: boolean;\r\n  updateRequestIntervalSeconds: number;\r\n  updateScreenRequestState: (state: string | null) => void;\r\n  updateScreenAlreadyOn: (status: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  checkPermission: CheckPermissionType;\r\n  checkScreenShare: CheckScreenShareType;\r\n  stopShareScreen: StopShareScreenType;\r\n\r\n  getUpdatedAllParams: () => ClickScreenShareParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ClickScreenShareOptions {\r\n  parameters: ClickScreenShareParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ClickScreenShareType = (options: ClickScreenShareOptions) => Promise<void>;\r\n\r\n/**\r\n * Handles the action for the screen button, including starting and stopping screen sharing.\r\n *\r\n * @param {ClickScreenShareOptions} options - Options for handling the screen button action.\r\n * @param {Object} options.parameters - The parameters required for the screen share action.\r\n * @param {Function} options.parameters.showAlert - Function to show alert messages.\r\n * @param {string} options.parameters.roomName - The name of the room where the screen share is taking place.\r\n * @param {string} options.parameters.member - The member initiating the screen share.\r\n * @param {Socket} options.parameters.socket - The socket connection used for communication.\r\n * @param {string} options.parameters.islevel - The participant's level.\r\n * @param {boolean} options.parameters.youAreCoHost - Indicates if the user is a co-host.\r\n * @param {boolean} options.parameters.adminRestrictSetting - Indicates if there are restrictions set by the admin.\r\n * @param {string} options.parameters.audioSetting - Current audio setting.\r\n * @param {string} options.parameters.videoSetting - Current video setting.\r\n * @param {string} options.parameters.screenshareSetting - Current screen share setting.\r\n * @param {string} options.parameters.chatSetting - Current chat setting.\r\n * @param {boolean} options.parameters.screenAction - Indicates if a screen action is currently taking place.\r\n * @param {boolean} options.parameters.screenAlreadyOn - Indicates if screen sharing is currently active.\r\n * @param {string | null} options.parameters.screenRequestState - State of the screen share request.\r\n * @param {number} options.parameters.screenRequestTime - Timestamp of when the screen share request was made.\r\n * @param {boolean} options.parameters.audioOnlyRoom - Indicates if the room is audio-only.\r\n * @param {number} options.parameters.updateRequestIntervalSeconds - Interval time for updating request state.\r\n * @param {Function} options.parameters.updateScreenRequestState - Function to update the screen request state.\r\n * @param {Function} options.parameters.updateScreenAlreadyOn - Function to update the screen sharing status.\r\n * @param {Function} options.parameters.checkPermission - Function to check permissions for screen sharing.\r\n * @param {Function} options.parameters.checkScreenShare - Function to check and initiate screen sharing.\r\n * @param {Function} options.parameters.stopShareScreen - Function to stop screen sharing.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the screen share action has been handled.\r\n *\r\n * @remarks\r\n * This function checks the current status of screen sharing and handles the logic for starting or stopping screen sharing.\r\n * It validates permissions and room settings before allowing screen sharing to be activated or deactivated.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: ClickScreenShareOptions = {\r\n *   parameters: {\r\n *     showAlert: (alert) => console.log(alert.message),\r\n *     roomName: 'myRoom',\r\n *     member: 'John Doe',\r\n *     socket: socketInstance,\r\n *     islevel: '1',\r\n *     youAreCoHost: false,\r\n *     adminRestrictSetting: false,\r\n *     audioSetting: 'on',\r\n *     videoSetting: 'on',\r\n *     screenshareSetting: 'off',\r\n *     chatSetting: 'allow',\r\n *     screenAction: false,\r\n *     screenAlreadyOn: false,\r\n *     screenRequestState: null,\r\n *     screenRequestTime: 0,\r\n *     audioOnlyRoom: false,\r\n *     updateRequestIntervalSeconds: 30,\r\n *     updateScreenRequestState: (state) => console.log(`Screen request state: ${state}`),\r\n *     updateScreenAlreadyOn: (status) => console.log(`Screen already on: ${status}`),\r\n *     checkPermission: checkPermissionFunction,\r\n *     checkScreenShare: checkScreenShareFunction,\r\n *     stopShareScreen: stopShareScreenFunction,\r\n *     getUpdatedAllParams: () => parameters,\r\n *   },\r\n * };\r\n *\r\n * const clickScreenShareService = new ClickScreenShare();\r\n * await clickScreenShareService.clickScreenShare(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ClickScreenShare {\r\n  /**\r\n   * Handles the action for the screen button, including starting and stopping screen sharing.\r\n   *\r\n   * @param {ClickScreenShareParams} options - Options for handling the screen button action.\r\n   * @returns {Promise<void>}\r\n   */\r\n  clickScreenShare = async ({ parameters }: ClickScreenShareOptions): Promise<void> => {\r\n    parameters = { ...parameters, ...parameters.getUpdatedAllParams() };\r\n    let {\r\n      showAlert,\r\n      roomName,\r\n      member,\r\n      socket,\r\n      islevel,\r\n      youAreCoHost,\r\n      adminRestrictSetting,\r\n      audioSetting,\r\n      videoSetting,\r\n      screenshareSetting,\r\n      chatSetting,\r\n      screenAction,\r\n      screenAlreadyOn,\r\n      screenRequestState,\r\n      screenRequestTime,\r\n      audioOnlyRoom,\r\n      updateRequestIntervalSeconds,\r\n      updateScreenRequestState,\r\n      updateScreenAlreadyOn,\r\n      checkPermission,\r\n      checkScreenShare,\r\n      stopShareScreen,\r\n    } = parameters;\r\n\r\n    if (audioOnlyRoom) {\r\n      showAlert?.({\r\n        message: 'You cannot turn on your camera in an audio-only event.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n      return;\r\n    }\r\n\r\n    if (roomName.startsWith('d')) {\r\n      showAlert?.({\r\n        message: 'You cannot start screen share in a demo room.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n      return;\r\n    }\r\n\r\n    if (screenAlreadyOn) {\r\n      screenAlreadyOn = false;\r\n      updateScreenAlreadyOn(screenAlreadyOn);\r\n      await stopShareScreen({ parameters });\r\n    } else {\r\n      if (adminRestrictSetting) {\r\n        showAlert?.({\r\n          message: 'You cannot start screen share. Access denied by host.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n        return;\r\n      }\r\n\r\n      let response = 2;\r\n      if (!screenAction && islevel != '2' && !youAreCoHost) {\r\n        response = await checkPermission({\r\n          permissionType: 'screenshareSetting',\r\n          audioSetting,\r\n          videoSetting,\r\n          screenshareSetting,\r\n          chatSetting,\r\n        });\r\n      } else {\r\n        response = 0;\r\n      }\r\n\r\n      switch (response) {\r\n        case 0:\r\n          checkScreenShare({ parameters });\r\n          break;\r\n        case 1: {\r\n          if (screenRequestState === 'pending') {\r\n            showAlert?.({\r\n              message: 'A request is already pending. Please wait for the host to respond.',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n            return;\r\n          }\r\n\r\n          if (\r\n            screenRequestState === 'rejected' &&\r\n            Date.now() - screenRequestTime < updateRequestIntervalSeconds\r\n          ) {\r\n            showAlert?.({\r\n              message: 'You cannot send another request at this time.',\r\n              type: 'danger',\r\n              duration: 3000,\r\n            });\r\n\r\n            return;\r\n          }\r\n\r\n          showAlert?.({\r\n            message: 'Your request has been sent to the host.',\r\n            type: 'success',\r\n            duration: 3000,\r\n          });\r\n\r\n          screenRequestState = 'pending';\r\n          updateScreenRequestState(screenRequestState);\r\n\r\n          let userRequest = { id: socket.id, name: member, icon: 'fa-desktop' };\r\n          socket.emit('participantRequest', { userRequest, roomName });\r\n          break;\r\n        }\r\n        case 2:\r\n          showAlert?.({\r\n            message: 'You are not allowed to start screen share.',\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n\r\n          break;\r\n        default:\r\n      }\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SwitchUserAudioType, SwitchUserAudioParameters } from '../../@types/types';\r\n\r\nexport interface SwitchAudioParameters extends SwitchUserAudioParameters {\r\n  defAudioID: string;\r\n  userDefaultAudioInputDevice: string;\r\n  prevAudioInputDevice: string;\r\n  updateUserDefaultAudioInputDevice: (deviceId: string) => void;\r\n  updatePrevAudioInputDevice: (deviceId: string) => void;\r\n\r\n  // mediasfu functions\r\n  switchUserAudio: SwitchUserAudioType;\r\n\r\n  getUpdatedAllParams: () => SwitchAudioParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface SwitchAudioOptions {\r\n  audioPreference: string;\r\n  parameters: SwitchAudioParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type SwitchAudioType = (options: SwitchAudioOptions) => Promise<void>;\r\n\r\n/**\r\n * Switches the audio input device based on user preference.\r\n *\r\n * @param {SwitchAudioOptions} options - The options for switching the audio input.\r\n * @param {string} options.audioPreference - The ID of the preferred audio input device.\r\n * @param {SwitchAudioParameters} options.parameters - The parameters required for switching the audio.\r\n * @param {string} options.parameters.defAudioID - The default audio input device ID.\r\n * @param {string} options.parameters.userDefaultAudioInputDevice - The current default audio input device ID.\r\n * @param {string} options.parameters.prevAudioInputDevice - The previously used audio input device ID.\r\n * @param {Function} options.parameters.updateUserDefaultAudioInputDevice - Function to update the user's default audio input device.\r\n * @param {Function} options.parameters.updatePrevAudioInputDevice - Function to update the previous audio input device.\r\n * @param {Function} options.parameters.switchUserAudio - Function to switch the user's audio.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the audio input has been switched.\r\n *\r\n * @remarks\r\n * This function checks if the user's preferred audio device differs from the current default.\r\n * If so, it updates the previous audio device and the current default audio device.\r\n * It then calls the function to switch the user's audio.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: SwitchAudioOptions = {\r\n *   audioPreference: 'newAudioDeviceID',\r\n *   parameters: {\r\n *     defAudioID: 'defaultAudioDeviceID',\r\n *     userDefaultAudioInputDevice: 'currentAudioDeviceID',\r\n *     prevAudioInputDevice: '',\r\n *     updateUserDefaultAudioInputDevice: (deviceId) => console.log(`Updated to: ${deviceId}`),\r\n *     updatePrevAudioInputDevice: (deviceId) => console.log(`Previous device was: ${deviceId}`),\r\n *     switchUserAudio: async ({ audioPreference, parameters }) => {\r\n *       console.log(`Switching audio to: ${audioPreference}`);\r\n *     },\r\n *     getUpdatedAllParams: () => {\r\n *       return {\r\n *         defAudioID: 'defaultAudioDeviceID',\r\n *         userDefaultAudioInputDevice: 'currentAudioDeviceID',\r\n *         prevAudioInputDevice: '',\r\n *       };\r\n *     },\r\n *   },\r\n * };\r\n *\r\n * const switchAudioService = new SwitchAudio();\r\n * await switchAudioService.switchAudio(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SwitchAudio {\r\n  /**\r\n   * Switches the audio input device based on user preference.\r\n   *\r\n   * @param {SwitchAudioParams} options - The function parameters.\r\n   * @returns {Promise<void>}\r\n   */\r\n\r\n  async switchAudio({ audioPreference, parameters }: SwitchAudioOptions): Promise<void> {\r\n    let {\r\n      defAudioID,\r\n      userDefaultAudioInputDevice,\r\n      prevAudioInputDevice,\r\n      updateUserDefaultAudioInputDevice,\r\n      updatePrevAudioInputDevice,\r\n\r\n      //mediasfu functions\r\n      switchUserAudio,\r\n    } = parameters;\r\n\r\n    if (audioPreference !== defAudioID) {\r\n      prevAudioInputDevice = userDefaultAudioInputDevice;\r\n      updatePrevAudioInputDevice(prevAudioInputDevice);\r\n      userDefaultAudioInputDevice = audioPreference;\r\n      updateUserDefaultAudioInputDevice(userDefaultAudioInputDevice);\r\n\r\n      if (defAudioID) {\r\n        await switchUserAudio({ audioPreference, parameters });\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert, SwitchUserVideoParameters, SwitchUserVideoType } from '../../@types/types';\r\n\r\nexport interface SwitchVideoParameters extends SwitchUserVideoParameters {\r\n  recordStarted: boolean;\r\n  recordResumed: boolean;\r\n  recordStopped: boolean;\r\n  recordPaused: boolean;\r\n  recordingMediaOptions: string;\r\n  videoAlreadyOn: boolean;\r\n  userDefaultVideoInputDevice: string;\r\n  defVideoID: string;\r\n  allowed: boolean;\r\n  updateDefVideoID: (deviceId: string) => void;\r\n  updatePrevVideoInputDevice: (deviceId: string) => void;\r\n  updateUserDefaultVideoInputDevice: (deviceId: string) => void;\r\n  updateIsMediaSettingsModalVisible: (isVisible: boolean) => void;\r\n  showAlert?: ShowAlert;\r\n\r\n  // Mediasfu functions\r\n  switchUserVideo: SwitchUserVideoType;\r\n\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface SwitchVideoOptions {\r\n  videoPreference: string;\r\n  parameters: SwitchVideoParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type SwitchVideoType = (options: SwitchVideoOptions) => Promise<void>;\r\n\r\n/**\r\n * Switches the user's video device based on the provided video preference.\r\n *\r\n * @param {SwitchVideoOptions} options - The options for switching the video input.\r\n * @param {string} options.videoPreference - The preferred video device to switch to.\r\n * @param {SwitchVideoParameters} options.parameters - The parameters required for switching the video input.\r\n * @param {boolean} options.parameters.recordStarted - Indicates if recording has started.\r\n * @param {boolean} options.parameters.recordResumed - Indicates if recording has resumed.\r\n * @param {boolean} options.parameters.recordStopped - Indicates if recording has stopped.\r\n * @param {boolean} options.parameters.recordPaused - Indicates if recording is paused.\r\n * @param {string} options.parameters.recordingMediaOptions - The current media options (e.g., \"video\").\r\n * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is currently on.\r\n * @param {string} options.parameters.userDefaultVideoInputDevice - The default video input device for the user.\r\n * @param {string} options.parameters.defVideoID - The default video ID for the input device.\r\n * @param {boolean} options.parameters.allowed - Indicates if the user is allowed to switch video.\r\n * @param {Function} options.parameters.updateDefVideoID - Function to update the default video ID.\r\n * @param {Function} options.parameters.updatePrevVideoInputDevice - Function to update the previous video input device.\r\n * @param {Function} options.parameters.updateUserDefaultVideoInputDevice - Function to update the user’s default video input device.\r\n * @param {Function} options.parameters.updateIsMediaSettingsModalVisible - Function to update the visibility of the media settings modal.\r\n * @param {Function} [options.parameters.showAlert] - Optional function to show alert messages.\r\n * @param {Function} options.parameters.switchUserVideo - Function to switch the user's video input.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the video input has been switched.\r\n *\r\n * @remarks\r\n * This function checks if the user is allowed to switch the video input based on the current state,\r\n * and it shows alerts if there are any issues. If the video is already on, it cannot be switched until\r\n * it is turned off, and vice versa. The default video input device is updated if necessary.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: SwitchVideoOptions = {\r\n *   videoPreference: 'newDeviceId',\r\n *   parameters: {\r\n *     recordStarted: false,\r\n *     recordResumed: false,\r\n *     recordStopped: false,\r\n *     recordPaused: false,\r\n *     recordingMediaOptions: 'video',\r\n *     videoAlreadyOn: true,\r\n *     userDefaultVideoInputDevice: 'currentDeviceId',\r\n *     defVideoID: 'defaultDeviceId',\r\n *     allowed: true,\r\n *     updateDefVideoID: (deviceId) => console.log(`Default video ID updated to: ${deviceId}`),\r\n *     updatePrevVideoInputDevice: (deviceId) => console.log(`Previous video input device updated to: ${deviceId}`),\r\n *     updateUserDefaultVideoInputDevice: (deviceId) => console.log(`User default video input device updated to: ${deviceId}`),\r\n *     updateIsMediaSettingsModalVisible: (isVisible) => console.log(`Media settings modal is now ${isVisible ? 'visible' : 'hidden'}`),\r\n *     switchUserVideo: async ({ videoPreference }) => console.log(`Switched video to: ${videoPreference}`),\r\n *     getUpdatedAllParams: () => ({ }),\r\n *   },\r\n * };\r\n *\r\n * const switchVideoService = new SwitchVideo();\r\n * await switchVideoService.switchVideo(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SwitchVideo {\r\n  /**\r\n   * Switches the user's video device based on the provided video preference.\r\n   *\r\n   * @param {SwitchVideoParams} options - The function parameters.\r\n   */\r\n\r\n  async switchVideo({ videoPreference, parameters }: SwitchVideoOptions): Promise<void> {\r\n    let {\r\n      recordStarted,\r\n      recordResumed,\r\n      recordStopped,\r\n      recordPaused,\r\n      recordingMediaOptions,\r\n      videoAlreadyOn,\r\n      userDefaultVideoInputDevice,\r\n      defVideoID,\r\n      allowed,\r\n      updateDefVideoID,\r\n      updatePrevVideoInputDevice,\r\n      updateUserDefaultVideoInputDevice,\r\n      updateIsMediaSettingsModalVisible,\r\n\r\n      //mediasfu functions\r\n      showAlert,\r\n      switchUserVideo,\r\n    } = parameters;\r\n\r\n    // Check if recording is in progress and whether the selected video device is the default one\r\n    let checkoff = false;\r\n    if ((recordStarted || recordResumed) && !recordStopped && !recordPaused) {\r\n      if (recordingMediaOptions === 'video') {\r\n        checkoff = true;\r\n      }\r\n    }\r\n\r\n    // Check camera access permission\r\n    if (!allowed) {\r\n      showAlert?.({\r\n        message: 'Allow access to your camera by starting it for the first time.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n      return;\r\n    }\r\n\r\n    // Check video state and display appropriate alert messages\r\n    if (checkoff) {\r\n      if (videoAlreadyOn) {\r\n        showAlert?.({\r\n          message: 'Please turn off your video before switching.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n        return;\r\n      }\r\n    } else {\r\n      if (!videoAlreadyOn) {\r\n        showAlert?.({\r\n          message: 'Please turn on your video before switching.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n        return;\r\n      }\r\n    }\r\n\r\n    // Set default video ID if not already set\r\n    if (!defVideoID) {\r\n      defVideoID = userDefaultVideoInputDevice ?? 'default';\r\n      updateDefVideoID(defVideoID);\r\n    }\r\n\r\n    // Switch video only if the selected video device is different from the default\r\n    if (videoPreference !== defVideoID) {\r\n      const prevVideoInputDevice = userDefaultVideoInputDevice;\r\n      updatePrevVideoInputDevice(prevVideoInputDevice);\r\n\r\n      userDefaultVideoInputDevice = videoPreference;\r\n      updateUserDefaultVideoInputDevice(userDefaultVideoInputDevice);\r\n\r\n      if (defVideoID) {\r\n        updateIsMediaSettingsModalVisible(false);\r\n        await switchUserVideo({ videoPreference, checkoff, parameters });\r\n      }\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert, SwitchUserVideoAltType, SwitchUserVideoParameters } from '../../@types/types';\r\n\r\nexport interface SwitchVideoAltParameters extends SwitchUserVideoParameters {\r\n  recordStarted: boolean;\r\n  recordResumed: boolean;\r\n  recordStopped: boolean;\r\n  recordPaused: boolean;\r\n  recordingMediaOptions: string;\r\n  videoAlreadyOn: boolean;\r\n  currentFacingMode: string;\r\n  prevFacingMode: string;\r\n  allowed: boolean;\r\n  audioOnlyRoom: boolean;\r\n  updateCurrentFacingMode: (mode: string) => void;\r\n  updatePrevFacingMode: (mode: string) => void;\r\n  updateIsMediaSettingsModalVisible: (isVisible: boolean) => void;\r\n  showAlert?: ShowAlert;\r\n\r\n  // mediasfu functions\r\n  switchUserVideoAlt: SwitchUserVideoAltType;\r\n\r\n  getUpdatedAllParams: () => SwitchVideoAltParameters;\r\n  // [key: string]: any;\r\n}\r\n\r\nexport interface SwitchVideoAltOptions {\r\n  parameters: SwitchVideoAltParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type SwitchVideoAltType = (options: SwitchVideoAltOptions) => Promise<void>;\r\n\r\n/**\r\n * Switches the video input based on user preference and current state.\r\n *\r\n * @param {SwitchVideoAltOptions} options - The options for switching the video input.\r\n * @param {SwitchVideoAltParameters} options.parameters - The parameters required for switching the video input.\r\n * @param {boolean} options.parameters.recordStarted - Indicates if recording has started.\r\n * @param {boolean} options.parameters.recordResumed - Indicates if recording has resumed.\r\n * @param {boolean} options.parameters.recordStopped - Indicates if recording has stopped.\r\n * @param {boolean} options.parameters.recordPaused - Indicates if recording is paused.\r\n * @param {string} options.parameters.recordingMediaOptions - The current media options (e.g., \"video\").\r\n * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is currently on.\r\n * @param {string} options.parameters.currentFacingMode - The current facing mode of the camera (e.g., \"environment\").\r\n * @param {boolean} options.parameters.allowed - Indicates if the user is allowed to switch video.\r\n * @param {boolean} options.parameters.audioOnlyRoom - Indicates if the current room is audio-only.\r\n * @param {Function} options.parameters.updateCurrentFacingMode - Function to update the current facing mode.\r\n * @param {Function} options.parameters.updateIsMediaSettingsModalVisible - Function to update the visibility of the media settings modal.\r\n * @param {Function} [options.parameters.showAlert] - Optional function to show alert messages.\r\n * @param {Function} options.parameters.switchUserVideoAlt - Function to switch the user's video input.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the video input has been switched.\r\n *\r\n * @remarks\r\n * This function checks if the user is allowed to switch the video input based on the current state,\r\n * and it shows alerts if there are any issues. If the video is already on, it cannot be switched until\r\n * it is turned off, and vice versa. The facing mode of the camera is toggled between \"user\" and \"environment\".\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: SwitchVideoAltOptions = {\r\n *   parameters: {\r\n *     recordStarted: false,\r\n *     recordResumed: false,\r\n *     recordStopped: false,\r\n *     recordPaused: false,\r\n *     recordingMediaOptions: 'video',\r\n *     videoAlreadyOn: true,\r\n *     currentFacingMode: 'user',\r\n *     allowed: true,\r\n *     audioOnlyRoom: false,\r\n *     updateCurrentFacingMode: (mode) => console.log(`Facing mode updated to: ${mode}`),\r\n *     updateIsMediaSettingsModalVisible: (isVisible) => console.log(`Media settings modal is now ${isVisible ? 'visible' : 'hidden'}`),\r\n *     switchUserVideoAlt: async ({ videoPreference }) => console.log(`Switched video to: ${videoPreference}`),\r\n *     getUpdatedAllParams: () => ({ }),\r\n *   },\r\n * };\r\n *\r\n * const switchVideoService = new SwitchVideoAlt();\r\n * await switchVideoService.switchVideoAlt(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SwitchVideoAlt {\r\n  async switchVideoAlt({ parameters }: SwitchVideoAltOptions): Promise<void> {\r\n    let {\r\n      recordStarted,\r\n      recordResumed,\r\n      recordStopped,\r\n      recordPaused,\r\n      recordingMediaOptions,\r\n      videoAlreadyOn,\r\n      currentFacingMode,\r\n      allowed,\r\n      audioOnlyRoom,\r\n      updateCurrentFacingMode,\r\n      updateIsMediaSettingsModalVisible,\r\n\r\n      showAlert,\r\n\r\n      //media functions\r\n      switchUserVideoAlt,\r\n    } = parameters;\r\n\r\n    if (audioOnlyRoom) {\r\n      showAlert?.({\r\n        message: 'You cannot turn on your camera in an audio-only event.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n      return;\r\n    }\r\n\r\n    let checkoff = false;\r\n    if (\r\n      (recordStarted || recordResumed) &&\r\n      !recordStopped &&\r\n      !recordPaused &&\r\n      recordingMediaOptions === 'video'\r\n    ) {\r\n      checkoff = true;\r\n    }\r\n\r\n    if (!allowed) {\r\n      showAlert?.({\r\n        message: 'Allow access to your camera by starting it for the first time.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n      return;\r\n    }\r\n\r\n    if (checkoff) {\r\n      if (videoAlreadyOn) {\r\n        showAlert?.({\r\n          message: 'Please turn off your video before switching.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n        return;\r\n      }\r\n    } else {\r\n      if (!videoAlreadyOn) {\r\n        showAlert?.({\r\n          message: 'Please turn on your video before switching.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n        return;\r\n      }\r\n    }\r\n\r\n    // Camera switching logic here\r\n    let newFacingMode = currentFacingMode === 'environment' ? 'user' : 'environment';\r\n\r\n    updateCurrentFacingMode(newFacingMode);\r\n    updateIsMediaSettingsModalVisible(false);\r\n\r\n    await switchUserVideoAlt({ videoPreference: newFacingMode, checkoff, parameters });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  CreateMediaSFURoomOptions,\r\n  JoinMediaSFURoomOptions,\r\n} from '../../@types/types';\r\n\r\nexport type CreateJoinRoomType = (options: {\r\n  payload: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n  apiUserName: string;\r\n  apiKey: string;\r\n  localLink?: string;\r\n}) => Promise<{\r\n  data: CreateJoinRoomResponse | CreateJoinRoomError | null;\r\n  success: boolean;\r\n}>;\r\n\r\nexport type CreateRoomOnMediaSFUType = (options: {\r\n  payload: CreateMediaSFURoomOptions;\r\n  apiUserName: string;\r\n  apiKey: string;\r\n  localLink?: string;\r\n}) => Promise<{\r\n  data: CreateJoinRoomResponse | CreateJoinRoomError | null;\r\n  success: boolean;\r\n}>;\r\n\r\n\r\nexport interface CreateJoinRoomResponse {\r\n  message: string;\r\n  roomName: string;\r\n  secureCode?: string;\r\n  publicURL: string;\r\n  link: string;\r\n  secret: string;\r\n  success: boolean;\r\n}\r\n\r\nexport interface CreateJoinRoomError {\r\n  error: string;\r\n  success?: boolean;\r\n}\r\n\r\nexport type JoinRoomOnMediaSFUType = (options: {\r\n  payload: JoinMediaSFURoomOptions;\r\n  apiUserName: string;\r\n  apiKey: string;\r\n  localLink?: string;\r\n}) => Promise<{\r\n  data: CreateJoinRoomResponse | CreateJoinRoomError | null;\r\n  success: boolean;\r\n}>;\r\n\r\n/**\r\n * Asynchronously joins a room on MediaSFU.\r\n *\r\n * This method sends a POST request to the MediaSFU API to join an existing room.\r\n * It validates the provided credentials and dynamically constructs the API endpoint,\r\n * including support for the Community Edition via a custom `localLink`.\r\n *\r\n * @param {object} options - Configuration options for joining the room.\r\n * @param {JoinMediaSFURoomOptions | CreateMediaSFURoomOptions} options.payload -\r\n *   The payload containing the room details and action (`join` or `create`).\r\n * @param {string} options.apiUserName - The API username, used for authentication.\r\n * @param {string} options.apiKey - The API key, used for authentication.\r\n * @param {string} [options.localLink=\"\"] -\r\n *   The local link for Community Edition users. If provided, it overrides the default API URL.\r\n *\r\n * @returns {Promise<{\r\n*   data: CreateJoinRoomResponse | CreateJoinRoomError | null;\r\n*   success: boolean;\r\n* }>} A promise resolving to an object containing the API response:\r\n* - `data`: The response object, either `CreateJoinRoomResponse` or `CreateJoinRoomError`.\r\n* - `success`: Boolean indicating whether the operation was successful.\r\n*\r\n* @throws {Error} Throws an error if the request fails or if the provided credentials are invalid.\r\n*\r\n* @example\r\n* const response = await joinRoomOnMediaSFU.joinRoomOnMediaSFU({\r\n*   payload: {\r\n*     action: 'join',\r\n*     meetingID: '123456',\r\n*     userName: 'user123',\r\n*   },\r\n*   apiUserName: 'yourAPIUSERNAME',\r\n*   apiKey: 'yourAPIKEY',\r\n*   localLink: 'http://localhost:3000', // Optional for Community Edition\r\n* });\r\n*\r\n* if (response.success) {\r\n*   console.log('Joined room successfully:', response.data);\r\n* } else {\r\n*   console.error('Failed to join room:', response.data?.error);\r\n* }\r\n*/\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class JoinRoomOnMediaSFU {\r\n\r\n  constructor() {}\r\n\r\n  /**\r\n * Asynchronously joins a room on MediaSFU.\r\n *\r\n * This method sends a POST request to the MediaSFU API to join an existing room.\r\n * It validates the provided credentials and dynamically constructs the API endpoint,\r\n * including support for the Community Edition via a custom `localLink`.\r\n *\r\n * @param {object} options - Configuration options for joining the room.\r\n * @param {JoinMediaSFURoomOptions | CreateMediaSFURoomOptions} options.payload -\r\n *   The payload containing the room details and action (`join` or `create`).\r\n * @param {string} options.apiUserName - The API username, used for authentication.\r\n * @param {string} options.apiKey - The API key, used for authentication.\r\n * @param {string} [options.localLink=\"\"] -\r\n *   The local link for Community Edition users. If provided, it overrides the default API URL.\r\n *\r\n * @returns {Promise<{\r\n *   data: CreateJoinRoomResponse | CreateJoinRoomError | null;\r\n  *   success: boolean;\r\n  * }>} A promise resolving to an object containing the API response:\r\n  * - `data`: The response object, either `CreateJoinRoomResponse` or `CreateJoinRoomError`.\r\n  * - `success`: Boolean indicating whether the operation was successful.\r\n  *\r\n  * @throws {Error} Throws an error if the request fails or if the provided credentials are invalid.\r\n  *\r\n  * @example\r\n  * const response = await joinRoomOnMediaSFU.joinRoomOnMediaSFU({\r\n  *   payload: {\r\n  *     action: 'join',\r\n  *     meetingID: '123456',\r\n  *     userName: 'user123',\r\n  *   },\r\n  *   apiUserName: 'yourAPIUSERNAME',\r\n  *   apiKey: 'yourAPIKEY',\r\n  *   localLink: 'http://localhost:3000', // Optional for Community Edition\r\n  * });\r\n  *\r\n  * if (response.success) {\r\n  *   console.log('Joined room successfully:', response.data);\r\n  * } else {\r\n  *   console.error('Failed to join room:', response.data?.error);\r\n  * }\r\n  */\r\n\r\n  async joinRoomOnMediaSFU({\r\n    payload,\r\n    apiUserName,\r\n    apiKey,\r\n    localLink,\r\n  }: {\r\n    payload: JoinMediaSFURoomOptions | CreateMediaSFURoomOptions;\r\n    apiUserName: string;\r\n    apiKey: string;\r\n    localLink?: string;\r\n  }): Promise<{\r\n    data: CreateJoinRoomResponse | CreateJoinRoomError | null;\r\n    success: boolean;\r\n  }> {\r\n    try {\r\n      if (\r\n        !apiUserName ||\r\n        !apiKey ||\r\n        apiUserName === 'yourAPIUSERNAME' ||\r\n        apiKey === 'yourAPIKEY' ||\r\n        apiKey.length !== 64 ||\r\n        apiUserName.length < 6\r\n      ) {\r\n        return { data: { error: 'Invalid credentials' }, success: false };\r\n      }\r\n\r\n      let API_URL =  'https://mediasfu.com/v1/rooms/';\r\n\r\n      if (localLink && localLink.trim() !== '' && !localLink.includes('mediasfu.com')) {\r\n        localLink = localLink.replace(/\\/$/, '');\r\n        API_URL = localLink + '/joinRoom';\r\n      }\r\n\r\n\r\n      const response = await fetch(API_URL, {\r\n        method: 'POST',\r\n        headers: {\r\n          'Content-Type': 'application/json',\r\n          Authorization: `Bearer ${apiUserName}:${apiKey}`,\r\n        },\r\n        body: JSON.stringify(payload),\r\n      });\r\n\r\n      if (!response.ok) {\r\n        const errorText = await response.text();\r\n        throw new Error(`HTTP error! Status: ${response.status}, Message: ${errorText}`);\r\n      }\r\n\r\n      const data = await response.json();\r\n      return { data, success: true };\r\n    } catch (error) {\r\n      const errorMessage = (error as any).reason ? (error as any).reason : 'unknown error';\r\n      return {\r\n        data: { error: `Unable to join room, ${errorMessage}` },\r\n        success: false,\r\n      };\r\n    }\r\n  }\r\n}\r\n","// start-meeting-progress-timer.service.ts\r\nimport { Injectable } from '@angular/core';\r\nexport interface StartMeetingProgressTimerParameters {\r\n  updateMeetingProgressTime: (formattedTime: string) => void;\r\n  validated: boolean;\r\n  roomName: string;\r\n\r\n  // mediasfu functions\r\n  getUpdatedAllParams: () => StartMeetingProgressTimerParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface StartMeetingProgressTimerOptions {\r\n  startTime: number;\r\n  parameters: StartMeetingProgressTimerParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type StartMeetingProgressTimerType = (options: StartMeetingProgressTimerOptions) => void;\r\n\r\n/**\r\n * Starts a timer to track the progress of a meeting.\r\n *\r\n * @param {StartMeetingProgressTimerOptions} options - The options for starting the meeting progress timer.\r\n * @param {number} options.startTime - The custom start time for the meeting progress timer in seconds since epoch.\r\n * @param {StartMeetingProgressTimerParameters} options.parameters - The parameters required for updating the meeting progress.\r\n * @param {Function} options.parameters.updateMeetingProgressTime - Function to update the formatted meeting progress time.\r\n * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n *\r\n * @returns {void}\r\n *\r\n * @remarks\r\n * This function calculates the elapsed time since the meeting started and updates the meeting progress every second.\r\n * The timer will stop if the validated flag is set to false or if the room name is not valid.\r\n *\r\n * The time is formatted in HH:MM:SS format, and the update function is called with the formatted time.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options: StartMeetingProgressTimerOptions = {\r\n *   startTime: Math.floor(Date.now() / 1000), // Current time in seconds\r\n *   parameters: {\r\n *     updateMeetingProgressTime: (formattedTime) => console.log(`Meeting Progress: ${formattedTime}`),\r\n *     validated: true,\r\n *     roomName: 'Room123',\r\n *     getUpdatedAllParams: () => ({\r\n *       validated: true,\r\n *       roomName: 'Room123',\r\n *       updateMeetingProgressTime: options.parameters.updateMeetingProgressTime,\r\n *     }),\r\n *   },\r\n * };\r\n *\r\n * const timerService = new StartMeetingProgressTimer();\r\n * timerService.startMeetingProgressTimer(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StartMeetingProgressTimer {\r\n  private timeProgress: any;\r\n\r\n  /**\r\n   * Starts a timer to track the progress of a meeting.\r\n   *\r\n   * @param {Object} options - The options for starting the meeting progress timer.\r\n   * @param {number} options.startTime - The custom start time for the meeting progress timer.\r\n   * @param {Object} options.parameters - The parameters required for updating the meeting progress.\r\n   * @param {Function} options.parameters.updateMeetingProgressTime - Function to update the meeting progress time.\r\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   *\r\n   * @returns {void}\r\n   */\r\n\r\n  startMeetingProgressTimer = ({\r\n    startTime,\r\n    parameters,\r\n  }: StartMeetingProgressTimerOptions): void => {\r\n    let { updateMeetingProgressTime, getUpdatedAllParams } = parameters;\r\n\r\n    const calculateElapsedTime = (startTime: number): number => {\r\n      const currentTime = Math.floor(new Date().getTime() / 1000);\r\n      return currentTime - startTime;\r\n    };\r\n\r\n    const padNumber = (number: number): string => {\r\n      return number.toString().padStart(2, '0');\r\n    };\r\n\r\n    const formatTime = (time: number): string => {\r\n      const hours = Math.floor(time / 3600);\r\n      const minutes = Math.floor((time % 3600) / 60);\r\n      const seconds = (time % 60).toFixed(0).padStart(2, '0');\r\n      return `${padNumber(hours)}:${padNumber(minutes)}:${padNumber(Number(seconds))}`;\r\n    };\r\n\r\n    let elapsedTime = calculateElapsedTime(startTime);\r\n\r\n    this.timeProgress = setInterval(async () => {\r\n      elapsedTime++;\r\n      const formattedTime = formatTime(elapsedTime);\r\n      updateMeetingProgressTime(formattedTime);\r\n\r\n      parameters = getUpdatedAllParams();\r\n\r\n      if (!parameters.validated || !parameters.roomName) {\r\n        clearInterval(this.timeProgress);\r\n        this.timeProgress = null;\r\n      }\r\n    }, 1000);\r\n  };\r\n\r\n  stopMeetingProgressTimer = (): void => {\r\n    if (this.timeProgress) {\r\n      clearInterval(this.timeProgress);\r\n      this.timeProgress = null;\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface FormatNumberOptions {\r\n  number: number;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type FormatNumberType = (options: FormatNumberOptions) => Promise<string | undefined>;\r\n\r\n/**\r\n * The `FormatNumber` service provides functionality to format numeric values\r\n * into a more readable string representation, appending appropriate suffixes\r\n * like K (thousands), M (millions), and B (billions).\r\n *\r\n * @service\r\n * @example\r\n * ```typescript\r\n * import { FormatNumber } from 'mediasfu-angular';\r\n *\r\n * constructor(private formatNumber: FormatNumber) {}\r\n *\r\n * async displayFormattedNumber() {\r\n *   const formatted = await this.formatNumber.formatNumber({ number: 1500 });\r\n *   console.log(formatted); // Outputs: \"1.5K\"\r\n * }\r\n * ```\r\n *\r\n * @remarks\r\n * This service can be useful for displaying large numbers in a more compact form\r\n * in user interfaces, especially in dashboards or reports where space is limited.\r\n *\r\n * @property {FormatNumberOptions} options - Options containing the number to format.\r\n *\r\n * @returns {FormatNumber} The FormatNumber service for formatting numeric values.\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class FormatNumber {\r\n\r\n  async formatNumber({ number }: FormatNumberOptions): Promise<string | undefined> {\r\n    if (number) {\r\n      if (number < 1e3) {\r\n        return number.toString();\r\n      } else if (number < 1e6) {\r\n        return (number / 1e3).toFixed(1) + 'K';\r\n      } else if (number < 1e9) {\r\n        return (number / 1e6).toFixed(1) + 'M';\r\n      } else if (number < 1e12) {\r\n        return (number / 1e9).toFixed(1) + 'B';\r\n      }\r\n    }\r\n    // Return undefined for falsy input values\r\n    return undefined;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Message, Participant } from '../../@types/types';\r\n\r\nexport interface GenerateRandomMessagesOptions {\r\n  participants: Participant[];\r\n  member: string;\r\n  coHost?: string;\r\n  host: string;\r\n  forChatBroadcast?: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type GenerateRandomMessagesType = (options: GenerateRandomMessagesOptions) => Message[];\r\n\r\n/**\r\n * GenerateRandomMessages - Service to generate random chat messages from participants.\r\n *\r\n * This service generates random direct and group messages based on participants and a given host setup,\r\n * with options to tailor messages for chat broadcast.\r\n *\r\n * @class\r\n * @name GenerateRandomMessages\r\n * @example\r\n * ```typescript\r\n * const generateRandomMessagesService = new GenerateRandomMessages();\r\n * const messages = generateRandomMessagesService.generateRandomMessages({\r\n *   participants: [\r\n *     { name: 'Alice' },\r\n *     { name: 'Bob' },\r\n *     { name: 'Charlie' }\r\n *   ],\r\n *   member: 'Alice',\r\n *   coHost: 'Bob',\r\n *   host: 'Charlie',\r\n *   forChatBroadcast: true\r\n * });\r\n * console.log(messages);\r\n * ```\r\n *\r\n * @param {Object} options - Options for generating random messages.\r\n * @param {Participant[]} options.participants - List of participants for message generation.\r\n * @param {string} options.member - The primary member in the chat.\r\n * @param {string} [options.coHost] - Optional co-host participant.\r\n * @param {string} options.host - The chat host.\r\n * @param {boolean} [options.forChatBroadcast=false] - Flag to indicate if messages are for chat broadcast.\r\n * @returns {Message[]} Array of randomly generated messages with direct and group messaging.\r\n */\r\n\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class GenerateRandomMessages {\r\n  /**\r\n   * Generates random messages for a given set of participants.\r\n   *\r\n   * @param {Object} options - The options for generating random messages.\r\n   * @param {Array} options.participants - The list of participants.\r\n   * @param {string} options.member - The member who is part of the chat.\r\n   * @param {string} [options.coHost=\"\"] - The co-host of the chat.\r\n   * @param {string} options.host - The host of the chat.\r\n   * @param {boolean} [options.forChatBroadcast=false] - Flag to indicate if the messages are for chat broadcast.\r\n   * @returns {Message[]} An array of generated messages.\r\n   */\r\n  generateRandomMessages({\r\n    participants,\r\n    member,\r\n    coHost = '',\r\n    host,\r\n    forChatBroadcast = false,\r\n  }: GenerateRandomMessagesOptions): Message[] {\r\n    const messages: Message[] = [];\r\n\r\n    // Function to get a random participant other than the sender\r\n    const getRandomReceiver = (sender: string): string => {\r\n      const potentialReceivers = participants.filter((participant) => participant.name !== sender);\r\n      const randomReceiver =\r\n        potentialReceivers[Math.floor(Math.random() * potentialReceivers.length)];\r\n      return randomReceiver.name || '';\r\n    };\r\n\r\n    // Force add messages for specific participants\r\n    let refNames: string[] = [];\r\n    if (forChatBroadcast) {\r\n      refNames = [member, host];\r\n    } else {\r\n      if (coHost) {\r\n        refNames = [\r\n          member,\r\n          coHost,\r\n          host,\r\n          ...participants\r\n            .map((participant) => participant.name)\r\n            .filter((name): name is string => name !== undefined),\r\n        ];\r\n      } else {\r\n        refNames = [\r\n          member,\r\n          host,\r\n          ...participants\r\n            .map((participant) => participant.name)\r\n            .filter((name): name is string => name !== undefined),\r\n        ];\r\n      }\r\n    }\r\n\r\n    // Return unique names for the refNames\r\n    refNames = [...new Set(refNames)];\r\n\r\n    // Generate messages\r\n    let timeIncrement = 0;\r\n    refNames.forEach((sender) => {\r\n      // Send direct messages\r\n      const directMessage: Message = {\r\n        sender: sender,\r\n        receivers: [getRandomReceiver(sender)],\r\n        message: `Direct message from ${sender}`,\r\n        timestamp: new Date(Date.now() + timeIncrement).toLocaleTimeString(),\r\n        group: false,\r\n      };\r\n\r\n      messages.push(directMessage);\r\n\r\n      // Send group messages\r\n      const groupMessage: Message = {\r\n        sender: sender,\r\n        receivers: participants\r\n          .map((participant) => participant.name)\r\n          .filter((name): name is string => name !== undefined),\r\n        message: `Group message from ${sender}`,\r\n        timestamp: new Date(Date.now() + timeIncrement).toLocaleTimeString(),\r\n        group: true,\r\n      };\r\n      messages.push(groupMessage);\r\n\r\n      timeIncrement += 15000; // Increment time by 15 seconds for each message\r\n    });\r\n\r\n    return messages;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Participant } from '../../@types/types';\r\nexport interface GenerateRandomParticipantsOptions {\r\n  member: string;\r\n  coHost?: string;\r\n  host: string;\r\n  forChatBroadcast?: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type GenerateRandomParticipantsType = (\r\n  options: GenerateRandomParticipantsOptions,\r\n) => Participant[];\r\n\r\n/**\r\n * GenerateRandomParticipants - Service to generate a list of random participants.\r\n *\r\n * This service creates a list of participants based on a set of specified options, with customization for chat broadcasts\r\n * and designation of specific roles like member, co-host, and host.\r\n *\r\n * @class\r\n * @name GenerateRandomParticipants\r\n * @example\r\n * ```typescript\r\n * const generateRandomParticipantsService = new GenerateRandomParticipants();\r\n * const participants = generateRandomParticipantsService.generateRandomParticipants({\r\n *   member: 'Alice',\r\n *   coHost: 'Bob',\r\n *   host: 'Charlie',\r\n *   forChatBroadcast: true\r\n * });\r\n * console.log(participants);\r\n * ```\r\n *\r\n * @param {Object} options - Options for generating participants.\r\n * @param {string} options.member - Primary member to include in the participants list.\r\n * @param {string} [options.coHost] - Optional co-host in the participants list.\r\n * @param {string} options.host - Host to include in the participants list.\r\n * @param {boolean} [options.forChatBroadcast=false] - Indicates if participants are for a chat broadcast.\r\n * @returns {Participant[]} Array of generated participants with randomized levels, muted states, and identifiers.\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class GenerateRandomParticipants {\r\n  /**\r\n   * Generates a list of random participants with specified options.\r\n   *\r\n   * @param {Object} options - The options for generating participants.\r\n   * @param {string} options.member - The member to include in the participants list.\r\n   * @param {string} [options.coHost=\"\"] - The co-host to include in the participants list.\r\n   * @param {string} options.host - The host to include in the participants list.\r\n   * @param {boolean} [options.forChatBroadcast=false] - Whether the participants are for a chat broadcast.\r\n   * @returns {Participant[]} An array of generated participants.\r\n   */\r\n  generateRandomParticipants({\r\n    member,\r\n    coHost = '',\r\n    host,\r\n    forChatBroadcast = false,\r\n  }: GenerateRandomParticipantsOptions): Participant[] {\r\n    const participants: Participant[] = [];\r\n    let names = [\r\n      'Alice',\r\n      'Bob',\r\n      'Charlie',\r\n      'David',\r\n      'Eve',\r\n      'Frank',\r\n      'Grace',\r\n      'Hank',\r\n      'Ivy',\r\n      'Jack',\r\n      'Kate',\r\n      'Liam',\r\n      'Mia',\r\n      'Nina',\r\n      'Olivia',\r\n      'Pete',\r\n      'Quinn',\r\n      'Rachel',\r\n      'Steve',\r\n      'Tina',\r\n      'Ursula',\r\n      'Vince',\r\n      'Wendy',\r\n      'Xander',\r\n      'Yvonne',\r\n      'Zack',\r\n    ];\r\n\r\n    // Limit names to 2 for chat broadcast\r\n    if (forChatBroadcast) {\r\n      names.splice(2);\r\n    }\r\n\r\n    // Place member, coHost, and host at the beginning if not already included\r\n    if (!names.includes(member)) {\r\n      names.unshift(member);\r\n    }\r\n    if (!names.includes(coHost) && !forChatBroadcast) {\r\n      names.unshift(coHost);\r\n    }\r\n    if (!names.includes(host)) {\r\n      names.unshift(host);\r\n    }\r\n\r\n    // Limit names to 2 for chat broadcast\r\n    if (forChatBroadcast) {\r\n      names.splice(2);\r\n    }\r\n\r\n    // Remove names of length 1 or less\r\n    names = names.filter((name) => name.length > 1);\r\n\r\n    // Shuffle the names array to ensure unique names for each participant\r\n    const shuffledNames = [...names];\r\n    for (let i = shuffledNames.length - 1; i > 0; i--) {\r\n      const j = Math.floor(Math.random() * (i + 1));\r\n      [shuffledNames[i], shuffledNames[j]] = [shuffledNames[j], shuffledNames[i]];\r\n    }\r\n\r\n    let hasLevel2Participant = false;\r\n\r\n    // Generate participant objects\r\n    for (let i = 0; i < shuffledNames.length; i++) {\r\n      const randomName = shuffledNames[i];\r\n      const randomLevel = hasLevel2Participant ? '1' : randomName == host ? '2' : '1'; // Set islevel to '2' only once\r\n      const randomMuted = forChatBroadcast ? true : Math.random() < 0.5; // Set muted to false for chat broadcast\r\n\r\n      if (randomLevel === '2') {\r\n        hasLevel2Participant = true;\r\n      }\r\n\r\n      participants.push({\r\n        name: randomName,\r\n        islevel: randomLevel,\r\n        muted: randomMuted,\r\n        id: i.toString(),\r\n        audioID: `audio-${i}`,\r\n        videoID: `video-${i}`,\r\n      });\r\n    }\r\n\r\n    return participants;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Poll } from '../../@types/types';\r\nexport interface GenerateRandomPollsOptions {\r\n  numberOfPolls: number;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type GenerateRandomPollsType = (options: GenerateRandomPollsOptions) => Poll[];\r\n\r\n/**\r\n   * Generates an array of random poll objects with varying types and options.\r\n   *\r\n   * Each poll includes a question, a type (e.g., \"trueFalse\", \"yesNo\", or \"custom\"), and multiple choice options.\r\n   * Poll types determine the options generated:\r\n   * - `\"trueFalse\"` polls have \"True\" and \"False\" options.\r\n   * - `\"yesNo\"` polls have \"Yes\" and \"No\" options.\r\n   * - `\"custom\"` polls generate 2–6 custom options labeled as \"Option 1\", \"Option 2\", etc.\r\n   *\r\n   * @param {GenerateRandomPollsOptions} options - An object containing the number of polls to generate.\r\n   * @param {number} options.numberOfPolls - The number of random polls to generate.\r\n   * @returns {Poll[]} An array of generated polls with unique IDs and randomly selected types and options.\r\n   *\r\n   * @example\r\n   * const pollService = new GenerateRandomPolls();\r\n   * const options = { numberOfPolls: 3 };\r\n   * const randomPolls = pollService.generateRandomPolls(options);\r\n   *\r\n   * console.log(randomPolls);\r\n   * // Output:\r\n   * // [\r\n   * //   { id: '1', question: 'Random Question 1', type: 'yesNo', options: ['Yes', 'No'], votes: [0, 0], status: 'inactive', voters: {} },\r\n   * //   { id: '2', question: 'Random Question 2', type: 'trueFalse', options: ['True', 'False'], votes: [0, 0], status: 'inactive', voters: {} },\r\n   * //   { id: '3', question: 'Random Question 3', type: 'custom', options: ['Option 1', 'Option 2', 'Option 3'], votes: [0, 0, 0], status: 'inactive', voters: {} }\r\n   * // ]\r\n   */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class GenerateRandomPolls {\r\n  /**\r\n   * Generates an array of random poll objects.\r\n   *\r\n   * @param {GenerateRandomPollsOptions} options - An object containing the number of polls to generate.\r\n   * @param {number} options.numberOfPolls - The number of random polls to generate.\r\n   * @returns {Poll[]} An array of random poll objects.\r\n   */\r\n  generateRandomPolls({ numberOfPolls }: GenerateRandomPollsOptions): Poll[] {\r\n    const pollTypes: string[] = ['trueFalse', 'yesNo', 'custom'];\r\n    const polls: Poll[] = [];\r\n\r\n    for (let i = 0; i < numberOfPolls; i++) {\r\n      const type = pollTypes[Math.floor(Math.random() * pollTypes.length)];\r\n      let options: string[];\r\n\r\n      switch (type) {\r\n        case 'trueFalse':\r\n          options = ['True', 'False'];\r\n          break;\r\n        case 'yesNo':\r\n          options = ['Yes', 'No'];\r\n          break;\r\n        case 'custom':\r\n          options = Array.from(\r\n            { length: Math.floor(Math.random() * 5) + 2 },\r\n            (_, idx) => `Option ${idx + 1}`,\r\n          );\r\n          break;\r\n        default:\r\n          options = [];\r\n      }\r\n\r\n      const poll: Poll = {\r\n        id: `${i + 1}`,\r\n        question: `Random Question ${i + 1}`,\r\n        type,\r\n        options,\r\n        votes: Array(options.length).fill(0),\r\n        status: 'inactive', // or 'active'\r\n        voters: {},\r\n      };\r\n\r\n      polls.push(poll);\r\n    }\r\n\r\n    return polls;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Request, Participant } from '../../@types/types';\r\n\r\nexport interface GenerateRandomRequestListOptions {\r\n  participants: Participant[];\r\n  hostName: string;\r\n  coHostName?: string;\r\n  numberOfRequests: number;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type GenerateRandomRequestListType = (\r\n  options: GenerateRandomRequestListOptions,\r\n) => Request[];\r\n\r\n /**\r\n   * Generates a random list of requests for participants, ensuring unique icons per participant\r\n   * and excluding the host and co-host from the request list.\r\n   *\r\n   * @param {GenerateRandomRequestListOptions} options - Configuration options for generating requests.\r\n   * @param {Participant[]} options.participants - Array of participant objects.\r\n   * @param {string} options.hostName - Name of the host to be excluded.\r\n   * @param {string} [options.coHostName] - Optional name of the co-host to be excluded.\r\n   * @param {number} options.numberOfRequests - Number of requests to generate per participant.\r\n   * @returns {Request[]} Array of requests, each uniquely associated with a participant.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const requestService = new GenerateRandomRequestList();\r\n   * const participants = [\r\n   *   { id: '1', name: 'Alice' },\r\n   *   { id: '2', name: 'Bob' },\r\n   *   { id: '3', name: 'Charlie' }\r\n   * ];\r\n   * const options = {\r\n   *   participants,\r\n   *   hostName: 'Alice',\r\n   *   coHostName: 'Bob',\r\n   *   numberOfRequests: 2\r\n   * };\r\n   *\r\n   * const requests = requestService.generateRandomRequestList(options);\r\n   *\r\n   * console.log(requests);\r\n   * // Output:\r\n   * // [\r\n   * //   { id: '3', name: 'charlie', icon: 'fa-microphone', username: 'charlie' },\r\n   * //   { id: '3', name: 'charlie', icon: 'fa-desktop', username: 'charlie' }\r\n   * // ]\r\n   * ```\r\n   */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class GenerateRandomRequestList {\r\n  /**\r\n   * Generates a list of random requests for participants, excluding the host and co-host.\r\n   *\r\n   * @param {GenerateRandomRequestListOptions} options - The options for generating the request list.\r\n   * @param {Participant[]} options.participants - The list of participants.\r\n   * @param {string} options.hostName - The name of the host.\r\n   * @param {string} options.coHostName - The name of the co-host.\r\n   * @param {number} options.numberOfRequests - The number of requests to generate for each participant.\r\n   * @returns {Request[]} The generated list of requests.\r\n   */\r\n  generateRandomRequestList({\r\n    participants,\r\n    hostName,\r\n    coHostName,\r\n    numberOfRequests,\r\n  }: GenerateRandomRequestListOptions): Request[] {\r\n    // Filter out the host and co-host from the participants\r\n    const filteredParticipants = participants.filter(\r\n      (participant) => participant.name !== hostName && participant.name !== coHostName,\r\n    );\r\n\r\n    // Create an array with three possible request icons\r\n    const requestIcons = ['fa-video', 'fa-desktop', 'fa-microphone'];\r\n\r\n    // Shuffle the request icons array to ensure unique icons for each participant and randomly select a minimum of 1 and a maximum of 3 icons\r\n    for (let i = requestIcons.length - 1; i > 0; i--) {\r\n      const j = Math.floor(Math.random() * (i + 1));\r\n      [requestIcons[i], requestIcons[j]] = [requestIcons[j], requestIcons[i]];\r\n    }\r\n\r\n    // Generate unique requests for each participant with unique icons\r\n    const requestList = filteredParticipants.flatMap((participant) => {\r\n      const uniqueIcons = new Set<string>(); // To ensure unique icons for each participant\r\n\r\n      const requests = [];\r\n      for (let i = 0; i < numberOfRequests; i++) {\r\n        let randomIcon;\r\n        do {\r\n          randomIcon = requestIcons[Math.floor(Math.random() * requestIcons.length)];\r\n        } while (uniqueIcons.has(randomIcon));\r\n\r\n        uniqueIcons.add(randomIcon);\r\n\r\n        requests.push({\r\n          id: participant.id || '',\r\n          name: participant.name.toLowerCase().replace(/\\s/g, '_'),\r\n          icon: randomIcon,\r\n          username: participant.name.toLowerCase().replace(/\\s/g, '_'),\r\n        });\r\n      }\r\n\r\n      return requests;\r\n    });\r\n\r\n    return requestList;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { WaitingRoomParticipant } from '../../@types/types';\r\n\r\n// Export the type definition for the function\r\nexport type GenerateRandomWaitingRoomListType = () => WaitingRoomParticipant[];\r\n\r\n /**\r\n   * Generates a random list of participants for a waiting room.\r\n   *\r\n   * @returns {WaitingRoomParticipant[]} An array of `WaitingRoomParticipant` objects, each with a unique ID and random name.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * const generateListService = new GenerateRandomWaitingRoomList();\r\n   * const waitingRoomList = generateListService.generateRandomWaitingRoomList();\r\n   *\r\n   * console.log(waitingRoomList);\r\n   * // Output:\r\n   * // [\r\n   * //   { name: 'Dimen', id: '0' },\r\n   * //   { name: 'Nore', id: '1' },\r\n   * //   { name: 'Ker', id: '2' },\r\n   * //   { name: 'Lor', id: '3' },\r\n   * //   { name: 'Mik', id: '4' }\r\n   * // ]\r\n   * ```\r\n   */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class GenerateRandomWaitingRoomList {\r\n  /**\r\n   * Generates a random list of participants for a waiting room.\r\n   *\r\n   * @param options - Configuration options for generating the waiting room list.\r\n   * @returns An array of `WaitingRoomParticipant` objects, each with a random name, mute status, and unique ID.\r\n   *\r\n   * @example\r\n   * const options = {};\r\n   * const waitingRoomList = generateRandomWaitingRoomList(options);\r\n   * console.log(waitingRoomList);\r\n   */\r\n  generateRandomWaitingRoomList(): WaitingRoomParticipant[] {\r\n    // Array of random names to assign to participants in the waiting room\r\n    const names = ['Dimen', 'Nore', 'Ker', 'Lor', 'Mik'];\r\n\r\n    // Loop through the names array and add participants to the waiting room list\r\n    const waitingRoomList = [];\r\n    for (let i = 0; i < names.length; i++) {\r\n      const randomName = names[i];\r\n      waitingRoomList.push({\r\n        name: randomName,\r\n        id: i.toString(),\r\n      });\r\n    }\r\n\r\n    return waitingRoomList;\r\n  }\r\n}\r\n","/**\r\n * Defines the style object for positioning the modal.\r\n */\r\nimport { ModalPositionStyle } from '../../@types/types';\r\n\r\nexport interface GetModalPositionOptions {\r\n  position: string;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type GetModalPositionType = (options: GetModalPositionOptions) => ModalPositionStyle;\r\n\r\n/**\r\n * Gets the style for positioning a modal based on the specified position.\r\n *\r\n * @param {GetModalPositionOptions} options - Object containing the desired modal position.\r\n * @param {string} options.position - The modal position ('center', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight').\r\n * @returns {ModalPositionStyle} - Style object for aligning the modal according to the specified position.\r\n *\r\n * @example\r\n * ```typescript\r\n * const positionStyle = getModalPosition({ position: 'center' });\r\n * // Output: { justifyContent: 'center', alignItems: 'center' }\r\n *\r\n * const topLeftStyle = getModalPosition({ position: 'topLeft' });\r\n * // Output: { justifyContent: 'flex-start', alignItems: 'flex-start' }\r\n * ```\r\n */\r\n\r\n\r\nexport function getModalPosition({ position }: GetModalPositionOptions): ModalPositionStyle {\r\n  switch (position) {\r\n    case 'center':\r\n      return { justifyContent: 'center', alignItems: 'center' };\r\n    case 'topLeft':\r\n      return { justifyContent: 'flex-start', alignItems: 'flex-start' };\r\n    case 'topRight':\r\n      return { justifyContent: 'flex-start', alignItems: 'flex-end' };\r\n    case 'bottomLeft':\r\n      return { justifyContent: 'flex-end', alignItems: 'flex-start' };\r\n    case 'bottomRight':\r\n    default:\r\n      return { justifyContent: 'flex-end', alignItems: 'flex-end' };\r\n  }\r\n}\r\n","export interface SleepOptions {\r\n  ms: number;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type SleepType = (options: SleepOptions) => Promise<void>;\r\n\r\n/**\r\n * Pauses the execution for a specified number of milliseconds.\r\n *\r\n * @param {SleepOptions} options - Contains the duration to pause.\r\n * @param {number} options.ms - Number of milliseconds to delay.\r\n * @returns {Promise<void>} Resolves after the specified duration.\r\n *\r\n * @example\r\n * ```typescript\r\n * await sleep({ ms: 2000 });\r\n * // Pauses execution for 2 seconds\r\n * ```\r\n */\r\n\r\n\r\nexport function sleep({ ms }: SleepOptions): Promise<void> {\r\n  return new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface LaunchWaitingOptions {\r\n  updateIsWaitingModalVisible: (visible: boolean) => void;\r\n  isWaitingModalVisible: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchWaitingType = (options: LaunchWaitingOptions) => void;\r\n\r\n/**\r\n * Service to toggle the visibility of a waiting modal.\r\n *\r\n * @param {LaunchWaitingOptions} options - The options to control the waiting modal visibility.\r\n * @param {Function} options.updateIsWaitingModalVisible - Function to update the visibility of the waiting modal.\r\n * @param {boolean} options.isWaitingModalVisible - Current visibility state of the waiting modal.\r\n *\r\n * @example\r\n * ```typescript\r\n * const launchWaitingService = new LaunchWaiting();\r\n * launchWaitingService.launchWaiting({\r\n *   updateIsWaitingModalVisible: (isVisible) => console.log(`Modal is now ${isVisible ? 'visible' : 'hidden'}`),\r\n *   isWaitingModalVisible: false,\r\n * });\r\n * ```\r\n *\r\n * This example toggles the modal's visibility state, making it visible if it was hidden and vice versa.\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchWaiting {\r\n  /**\r\n   * Toggles the visibility of the waiting modal.\r\n   *\r\n   * @param updateIsWaitingModalVisible - Function to update the visibility state of the waiting modal.\r\n   * @param isWaitingModalVisible - Current visibility state of the waiting modal.\r\n   */\r\n\r\n  launchWaiting({\r\n    updateIsWaitingModalVisible,\r\n    isWaitingModalVisible,\r\n  }: LaunchWaitingOptions): void {\r\n    // Open or close the menu modal\r\n    updateIsWaitingModalVisible(!isWaitingModalVisible);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { WaitingRoomParticipant } from '../../@types/types';\r\n\r\nexport interface RespondToWaitingOptions {\r\n  participantId: string;\r\n  participantName: string;\r\n  updateWaitingList: (waitingList: WaitingRoomParticipant[]) => void;\r\n  waitingList: WaitingRoomParticipant[];\r\n  type: string | boolean;\r\n  roomName: string;\r\n  socket: Socket;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type RespondToWaitingType = (options: RespondToWaitingOptions) => Promise<void>;\r\n\r\n/**\r\n * Handles the response to a participant in the waiting room, either allowing or denying their entry.\r\n *\r\n * @param {RespondToWaitingOptions} options - Options for handling the participant's entry request.\r\n * @param {string} options.participantId - Unique identifier for the participant.\r\n * @param {string} options.participantName - Name of the participant.\r\n * @param {Function} options.updateWaitingList - Function to update the waiting list by removing the responded participant.\r\n * @param {WaitingRoomParticipant[]} options.waitingList - Current list of participants in the waiting room.\r\n * @param {boolean | string} options.type - Indicates whether to allow (\"true\") or deny (\"false\") the participant's entry.\r\n * @param {string} options.roomName - The name of the room the participant is requesting to join.\r\n * @param {Socket} options.socket - The socket instance used to emit the response event.\r\n * @returns {Promise<void>} Resolves when the response has been processed.\r\n *\r\n * @example\r\n * ```typescript\r\n * const respondService = new RespondToWaiting();\r\n * respondService.respondToWaiting({\r\n *   participantId: '12345',\r\n *   participantName: 'John Doe',\r\n *   updateWaitingList: (newList) => console.log('Updated Waiting List:', newList),\r\n *   waitingList: currentWaitingList,\r\n *   type: 'true',\r\n *   roomName: 'Room1',\r\n *   socket: io('http://localhost:3000'),\r\n * });\r\n * ```\r\n *\r\n * In this example, the participant 'John Doe' is allowed to join 'Room1', and the updated waiting list is logged.\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RespondToWaiting {\r\n  /**\r\n   * Responds to a participant waiting to join a room by either allowing or denying their entry.\r\n   *\r\n   * @param {Object} options - The options for responding to the waiting participant.\r\n   * @param {string} options.participantId - The ID of the participant.\r\n   * @param {string} options.participantName - The name of the participant.\r\n   * @param {Function} options.updateWaitingList - The function to update the waiting list.\r\n   * @param {Array} options.waitingList - The current waiting list of participants.\r\n   * @param {boolean | string} options.type - The type of response, either \"true\" or \"false\".\r\n   * @param {string} options.roomName - The name of the room.\r\n   * @param {Object} options.socket - The socket instance to emit events.\r\n   * @returns {Promise<void>} - A promise that resolves when the response has been processed.\r\n   */\r\n  async respondToWaiting({\r\n    participantId,\r\n    participantName,\r\n    updateWaitingList,\r\n    waitingList,\r\n    type,\r\n    roomName,\r\n    socket,\r\n  }: RespondToWaitingOptions): Promise<void> {\r\n    // Filter out the participant from the waiting list\r\n    const newWaitingList = waitingList.filter((item) => item.name !== participantName);\r\n\r\n    // Update the waiting list\r\n    updateWaitingList(newWaitingList);\r\n\r\n    const responseType = type === 'true' || type === true ? 'true' : 'false';\r\n\r\n    // Emit an event to allow or deny the participant based on the response type\r\n    await socket.emit('allowUserIn', {\r\n      participantId,\r\n      participantName,\r\n      type: responseType,\r\n      roomName,\r\n    });\r\n  }\r\n}\r\n","// whiteboard.service.ts\r\nimport { Injectable } from '@angular/core';\r\nexport interface LaunchConfigureWhiteboardOptions {\r\n  updateIsConfigureWhiteboardModalVisible: (visible: boolean) => void;\r\n  isConfigureWhiteboardModalVisible: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type LaunchConfigureWhiteboardType = (options: LaunchConfigureWhiteboardOptions) => void;\r\n\r\n/**\r\n * Toggles the visibility of the configure whiteboard modal.\r\n *\r\n * @param {LaunchConfigureWhiteboardOptions} options - Options to control whiteboard configuration modal.\r\n * @param {Function} options.updateIsConfigureWhiteboardModalVisible - Function to update the modal's visibility state.\r\n * @param {boolean} options.isConfigureWhiteboardModalVisible - Current visibility state of the configure whiteboard modal.\r\n *\r\n * This function uses the current visibility state to toggle the whiteboard configuration modal on or off.\r\n *\r\n * @example\r\n * ```typescript\r\n * const launchService = new LaunchConfigureWhiteboard();\r\n * launchService.launchConfigureWhiteboard({\r\n *   updateIsConfigureWhiteboardModalVisible: (visible) => console.log('Modal Visible:', visible),\r\n *   isConfigureWhiteboardModalVisible: false\r\n * });\r\n * ```\r\n *\r\n * In this example, the modal visibility state is toggled, and the updated visibility state is logged.\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class LaunchConfigureWhiteboard {\r\n  /**\r\n   * Toggles the visibility of the configure whiteboard modal.\r\n   *\r\n   * @param updateIsConfigureWhiteboardModalVisible - Function to update the visibility state of the configure whiteboard modal.\r\n   * @param isConfigureWhiteboardModalVisible - Current visibility state of the configure whiteboard modal.\r\n   */\r\n\r\n  launchConfigureWhiteboard({\r\n    updateIsConfigureWhiteboardModalVisible,\r\n    isConfigureWhiteboardModalVisible,\r\n  }: LaunchConfigureWhiteboardOptions): void {\r\n    // Open or close the menu modal\r\n    updateIsConfigureWhiteboardModalVisible(!isConfigureWhiteboardModalVisible);\r\n  }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\n// canvas.service.ts\r\nimport { Injectable } from '@angular/core';\r\nimport { Producer } from 'mediasoup-client/lib/types';\r\nimport {\r\n  ConnectSendTransportScreenType,\r\n  CreateSendTransportType,\r\n  DisconnectSendTransportScreenType,\r\n  SleepType,\r\n  CreateSendTransportParameters,\r\n  DisconnectSendTransportScreenParameters,\r\n  ConnectSendTransportScreenParameters,\r\n} from '../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface CaptureCanvasStreamParameters\r\n  extends CreateSendTransportParameters,\r\n    DisconnectSendTransportScreenParameters,\r\n    ConnectSendTransportScreenParameters {\r\n  canvasWhiteboard: HTMLCanvasElement | null;\r\n  canvasStream: MediaStream | null;\r\n  updateCanvasStream: (stream: MediaStream | null) => void;\r\n  screenProducer: Producer | null;\r\n  localScreenProducer?: Producer | null;\r\n  transportCreated: boolean;\r\n  localTransportCreated?: boolean;\r\n  localSocket?: Socket;\r\n  updateScreenProducer: (producer: Producer | null) => void;\r\n  updateLocalScreenProducer?: (localProducer: Producer | null) => void;\r\n\r\n  // mediasfu functions\r\n  sleep: SleepType;\r\n  createSendTransport: CreateSendTransportType;\r\n  connectSendTransportScreen: ConnectSendTransportScreenType;\r\n  disconnectSendTransportScreen: DisconnectSendTransportScreenType;\r\n\r\n  getUpdatedAllParams: () => CaptureCanvasStreamParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface CaptureCanvasStreamOptions {\r\n  parameters: CaptureCanvasStreamParameters;\r\n  start?: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type CaptureCanvasStreamType = (options: CaptureCanvasStreamOptions) => Promise<void>;\r\n\r\n/**\r\n * Captures the canvas stream and handles the transport connection for screen sharing.\r\n *\r\n * @param {CaptureCanvasStreamOptions} options - The options for capturing the canvas stream.\r\n * @param {Object} options.parameters - The parameters required for capturing and managing the canvas stream.\r\n * @param {HTMLCanvasElement} options.parameters.canvasWhiteboard - The canvas element to capture the stream from.\r\n * @param {MediaStream} [options.parameters.canvasStream] - The current canvas stream, if any.\r\n * @param {Function} options.parameters.updateCanvasStream - Function to update the canvas stream state.\r\n * @param {Producer | null} [options.parameters.screenProducer] - The current screen producer, if any.\r\n * @param {Producer | null} [options.parameters.localScreenProducer] - The current local screen producer, if any.\r\n * @param {boolean} [options.parameters.transportCreated] - Flag indicating if the transport has been created.\r\n * @param {boolean} [options.parameters.localTransportCreated] - Flag indicating if the local transport has been created.\r\n * @param {Socket} [options.parameters.localSocket] - The local socket instance used for communication.\r\n * @param {Function} options.parameters.updateScreenProducer - Function to update the screen producer state.\r\n * @param {Function} options.parameters.updateLocalScreenProducer - Function to update the local screen producer state.\r\n * @param {Function} options.parameters.sleep - Function to pause execution for a specified duration.\r\n * @param {Function} options.parameters.createSendTransport - Function to create a send transport for the screen.\r\n * @param {Function} options.parameters.connectSendTransportScreen - Function to connect the send transport for the screen.\r\n * @param {Function} options.parameters.disconnectSendTransportScreen - Function to disconnect the send transport for the screen.\r\n * @param {boolean} [start=true] - Flag indicating whether to start or stop the canvas stream.\r\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n *\r\n * @example\r\n * ```typescript\r\n * const canvasElement = document.querySelector('#canvas') as HTMLCanvasElement;\r\n * const options = {\r\n *   parameters: {\r\n *     canvasWhiteboard: canvasElement,\r\n *     updateCanvasStream: (stream) => console.log(\"Canvas Stream Updated:\", stream),\r\n *     updateScreenProducer: (producer) => console.log(\"Screen Producer Updated:\", producer),\r\n *     updateLocalScreenProducer: (localProducer) => console.log(\"Local Screen Producer Updated:\", localProducer),\r\n *     createSendTransport: async (params) => console.log(\"Transport created with\", params),\r\n *     connectSendTransportScreen: async (options) => console.log(\"Transport connected with\", options),\r\n *     disconnectSendTransportScreen: async (params) => console.log(\"Transport disconnected with\", params),\r\n *     sleep: ({ ms }) => new Promise(resolve => setTimeout(resolve, ms)),\r\n *   },\r\n *   start: true,\r\n * };\r\n * await captureCanvasStream(options);\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CaptureCanvasStream {\r\n  /**\r\n   * Capture the canvas stream.\r\n   * @param {Object} parameters - The parameters object.\r\n   * @param {boolean} [start=true] - Indicates whether to start capturing the stream.\r\n   * @returns {Promise<void>} - A promise that resolves when the canvas stream is captured.\r\n   */\r\n  captureCanvasStream = async ({\r\n    parameters,\r\n    start = true,\r\n  }: CaptureCanvasStreamOptions): Promise<void> => {\r\n    try {\r\n      parameters = parameters.getUpdatedAllParams();\r\n\r\n      let {\r\n        canvasWhiteboard,\r\n        canvasStream,\r\n        updateCanvasStream,\r\n        screenProducer,\r\n        localScreenProducer,\r\n        transportCreated,\r\n        localTransportCreated,\r\n        updateScreenProducer,\r\n        updateLocalScreenProducer,\r\n        localSocket,\r\n\r\n        // mediasfu functions\r\n        sleep,\r\n        createSendTransport,\r\n        connectSendTransportScreen,\r\n        disconnectSendTransportScreen,\r\n      } = parameters;\r\n\r\n      if (start && !canvasStream) {\r\n        // Wait for canvasWhiteboard to be available\r\n        let attempts = 0;\r\n        const maxAttempts = 20; // 2 seconds / 100ms intervals\r\n        while (!canvasWhiteboard && attempts < maxAttempts) {\r\n          await new Promise((resolve) => setTimeout(resolve, 100));\r\n          parameters = parameters.getUpdatedAllParams();\r\n          canvasWhiteboard = parameters.canvasWhiteboard;\r\n          attempts++;\r\n        }\r\n\r\n        if (!canvasWhiteboard) {\r\n          throw new Error('Canvas whiteboard not available.');\r\n        }\r\n        const stream = canvasWhiteboard!.captureStream(30);\r\n        canvasStream = stream;\r\n        updateCanvasStream(stream);\r\n\r\n        if (localSocket && !localSocket.id) {\r\n\r\n          try {\r\n            if (!localTransportCreated) {\r\n              await createSendTransport({ option: \"screen\", parameters });\r\n            } else {\r\n              try {\r\n                if (localScreenProducer) {\r\n                  localScreenProducer.close();\r\n                  if (updateLocalScreenProducer) {\r\n                    updateLocalScreenProducer(null);\r\n                  }\r\n                  await sleep({ ms: 500 });\r\n                }\r\n              } catch (error) {\r\n                console.error(error);\r\n              }\r\n              await connectSendTransportScreen({ stream, parameters });\r\n            }\r\n          } catch {\r\n            // do nothing\r\n          }\r\n\r\n          return;\r\n        }\r\n\r\n\r\n        if (!transportCreated) {\r\n          await createSendTransport({ option: 'screen', parameters });\r\n        } else {\r\n          try {\r\n            screenProducer!.close();\r\n            updateScreenProducer(null);\r\n            await sleep({ ms: 500 });\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n\r\n          await connectSendTransportScreen({ stream, parameters });\r\n        }\r\n      } else {\r\n        if (!start && canvasStream) {\r\n          canvasStream.getTracks().forEach((track: MediaStreamTrack) => track.stop());\r\n          canvasStream = null;\r\n          updateCanvasStream(null);\r\n          disconnectSendTransportScreen({ parameters });\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.log('Error in captureCanvasStream:', error);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { RtpCapabilities, Device } from 'mediasoup-client/lib/types';\r\nimport * as mediasoupClient from 'mediasoup-client';\r\nexport interface CreateDeviceClientOptions {\r\n  rtpCapabilities: RtpCapabilities | null;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type CreateDeviceClientType = (options: CreateDeviceClientOptions) => Promise<Device | null>;\r\n\r\n/**\r\n * Creates a mediasoup client device using the provided RTP capabilities.\r\n *\r\n * @param {CreateDeviceClientOptions} options - Options containing the required RTP capabilities.\r\n * @param {RtpCapabilities | null} options.rtpCapabilities - The RTP capabilities necessary for initializing the device.\r\n * @returns {Promise<Device | null>} - A promise resolving to the created `Device` instance or `null` if creation fails.\r\n * @throws {Error} - Throws an error if RTP capabilities or the mediasoup client library are not provided, or if the device is unsupported by the browser.\r\n *\r\n * This function initializes a mediasoup client `Device` using the specified RTP capabilities, enabling communication capabilities according to provided media configurations. It filters out unsupported video orientation extensions and loads router capabilities, ensuring compatibility with client configurations.\r\n *\r\n * @example\r\n * ```typescript\r\n * const client = new CreateDeviceClient();\r\n * const device = await client.createDeviceClient({ rtpCapabilities });\r\n * if (device) {\r\n *   console.log('Device created successfully:', device);\r\n * } else {\r\n *   console.log('Failed to create device.');\r\n * }\r\n * ```\r\n *\r\n * In this example, the function creates a device based on RTP capabilities, handling errors and unsupported devices gracefully.\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CreateDeviceClient {\r\n  /**\r\n   * Creates a mediasoup client device with the provided RTP capabilities.\r\n   *\r\n   * @param {CreateDeviceClientOptions} options - The options for creating the device client.\r\n   * @param {RTPCapabilities} options.rtpCapabilities - The RTP capabilities required for the device.\r\n   * @returns {Promise<Device | null>} A promise that resolves to the created Device or null if creation fails.\r\n   * @throws {Error} Throws an error if the required parameters are not provided or if device creation is not supported.\r\n   *\r\n   */\r\n\r\n  async createDeviceClient({ rtpCapabilities }: CreateDeviceClientOptions): Promise<Device | null> {\r\n    try {\r\n      // Validate input parameters\r\n      if (!rtpCapabilities || !mediasoupClient) {\r\n        throw new Error('Both rtpCapabilities and mediasoupClient must be provided.');\r\n      }\r\n\r\n      // Create a mediasoup client device\r\n      const device: Device = new mediasoupClient.Device();\r\n\r\n      // Remove orientation capabilities\r\n      if (rtpCapabilities.headerExtensions) {\r\n        rtpCapabilities.headerExtensions = rtpCapabilities.headerExtensions.filter(\r\n          (ext) => ext.uri !== 'urn:3gpp:video-orientation',\r\n        );\r\n      }\r\n\r\n      // Load the provided RTP capabilities into the device\r\n      await device.load({\r\n        routerRtpCapabilities: rtpCapabilities,\r\n      });\r\n\r\n      // Perform additional initialization, e.g., loading spinner and retrieving messages\r\n\r\n      return device;\r\n    } catch (error: any) {\r\n      // Handle specific errors, e.g., UnsupportedError\r\n      if (error.name === 'UnsupportedError') {\r\n        // Handle unsupported device creation\r\n        console.error('UnsupportedError: Device creation is not supported by the browser.');\r\n      }\r\n\r\n      throw error; // Propagate other errors\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { ValidateAlphanumeric } from '../../methods/utils/validate-alphanumeric.service';\r\n\r\nexport interface JoinRoomOptions {\r\n  socket: Socket;\r\n  roomName: string;\r\n  islevel: string;\r\n  member: string;\r\n  sec: string;\r\n  apiUserName: string;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type JoinRoomType = (\r\n  socket: Socket,\r\n  roomName: string,\r\n  islevel: string,\r\n  member: string,\r\n  sec: string,\r\n  apiUserName: string,\r\n) => Promise<object>;\r\n\r\n/**\r\n * Joins a user to a room using socket communication with validation checks.\r\n *\r\n * @param {JoinRoomOptions} options - Contains:\r\n *   - `socket`: Socket instance for communication.\r\n *   - `roomName`: Name of the room to join.\r\n *   - `islevel`: User's level indicator.\r\n *   - `member`: User identifier.\r\n *   - `sec`: Security token.\r\n *   - `apiUserName`: API username for authentication.\r\n *\r\n * - **Validation**:\r\n *   - Ensures `roomName`, `apiUserName`, and `member` are alphanumeric.\r\n *   - Verifies that `roomName` starts with 's' or 'p' and meets length requirements.\r\n *   - Validates `sec`, `islevel`, and `apiUserName` against specified length and format conditions.\r\n *\r\n * - **Response Handling**:\r\n *   - Resolves with the server's response upon a successful join.\r\n *   - Rejects with a descriptive error if the user is banned, suspended, or if the host has not yet joined the room.\r\n *\r\n * @returns {Promise<object>} Resolves with data from the 'joinRoom' event or rejects with validation errors.\r\n * @throws {Error} Throws errors encountered during validation or join process.\r\n *\r\n * @example\r\n * ```typescript\r\n * const joinOptions = {\r\n *   socket: mySocket,\r\n *   roomName: 'sMyRoom',\r\n *   islevel: '1',\r\n *   member: 'participant123',\r\n *   sec: '64-character-secure-key...',\r\n *   apiUserName: 'apiUser123',\r\n * };\r\n * joinRoom(joinOptions)\r\n *   .then(response => console.log('Room joined:', response))\r\n *   .catch(error => console.error('Join failed:', error));\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class JoinRoom {\r\n  constructor(private validateAlphanumeric: ValidateAlphanumeric) {}\r\n\r\n  /**\r\n   * Joins a user to a specified room via a socket connection.\r\n   *\r\n   * @param {Object} options - The options for joining the room.\r\n   * @param {Socket} options.socket - The socket instance to use for communication.\r\n   * @param {string} options.roomName - The name of the room to join.\r\n   * @param {string} options.islevel - The level of the user.\r\n   * @param {string} options.member - The member identifier.\r\n   * @param {string} options.sec - The security token.\r\n   * @param {string} options.apiUserName - The API username of the user.\r\n   *\r\n   * @returns {Promise<object>} A promise that resolves with the data received from the 'joinRoom' event or rejects with a validation error.\r\n   *\r\n   * @throws {Error} Throws an error if the user is banned, suspended, or if the host has not joined the room yet.\r\n   */\r\n  async joinRoom({\r\n    socket,\r\n    roomName,\r\n    islevel,\r\n    member,\r\n    sec,\r\n    apiUserName,\r\n  }: JoinRoomOptions): Promise<object> {\r\n    return new Promise((resolve, reject) => {\r\n      // Validate inputs\r\n      if (!(sec && roomName && islevel && apiUserName && member)) {\r\n        const validationError = {\r\n          success: false,\r\n          rtpCapabilities: null,\r\n          reason: 'Missing required parameters',\r\n        };\r\n        reject(validationError);\r\n        return;\r\n      }\r\n\r\n      // Validate alphanumeric for roomName, apiUserName, and member\r\n      try {\r\n        this.validateAlphanumeric.validateAlphanumeric({ str: roomName });\r\n        this.validateAlphanumeric.validateAlphanumeric({ str: apiUserName });\r\n        this.validateAlphanumeric.validateAlphanumeric({ str: member });\r\n      } catch (error) {\r\n        const validationError = {\r\n          success: false,\r\n          rtpCapabilities: null,\r\n          reason: 'Invalid roomName or apiUserName or member',\r\n        };\r\n        reject(validationError);\r\n        return;\r\n      }\r\n\r\n      // Validate roomName starts with 's' or 'p'\r\n      if (!(roomName.startsWith('s') || roomName.startsWith('p'))) {\r\n        const validationError = {\r\n          success: false,\r\n          rtpCapabilities: null,\r\n          reason: 'Invalid roomName, must start with s or p',\r\n        };\r\n        reject(validationError);\r\n        return;\r\n      }\r\n\r\n      // Validate other conditions for sec, roomName, islevel, apiUserName\r\n      if (\r\n        !(\r\n          sec.length === 64 &&\r\n          roomName.length >= 8 &&\r\n          islevel.length === 1 &&\r\n          apiUserName.length >= 6 &&\r\n          (islevel === '0' || islevel === '1' || islevel === '2')\r\n        )\r\n      ) {\r\n        const validationError = {\r\n          success: false,\r\n          rtpCapabilities: null,\r\n          reason: 'Invalid roomName or islevel or apiUserName or secret',\r\n        };\r\n        reject(validationError);\r\n        return;\r\n      }\r\n\r\n      socket.emit(\r\n        'joinRoom',\r\n        { roomName, islevel, member, sec, apiUserName },\r\n        async (data: any) => {\r\n          try {\r\n            // Check if rtpCapabilities is null\r\n            if (data.rtpCapabilities === null) {\r\n              // Check if banned, suspended, or noAdmin\r\n              if (data.banned) {\r\n                throw new Error('User is banned.');\r\n              }\r\n              if (data.suspended) {\r\n                throw new Error('User is suspended.');\r\n              }\r\n              if (data.noAdmin) {\r\n                throw new Error('Host has not joined the room yet.');\r\n              }\r\n\r\n              // Resolve with the data received from the 'joinRoom' event\r\n              resolve(data);\r\n            } else {\r\n              // Resolve with the data received from the 'joinRoom' event\r\n              resolve(data);\r\n            }\r\n          } catch (error) {\r\n            // Handle errors during the joinRoom process\r\n            console.log('Error joining room:', error);\r\n            reject(error);\r\n          }\r\n        },\r\n      );\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { JoinRoom } from '../../producers/producer-emits/join-room.service';\r\nimport { JoinConRoom } from '../../producers/producer-emits/join-con-room.service';\r\nimport { Socket } from 'socket.io-client';\r\nimport { ResponseJoinRoom } from '../../@types/types';\r\n\r\nexport interface JoinRoomClientOptions {\r\n  socket: Socket;\r\n  roomName: string;\r\n  islevel: string;\r\n  member: string;\r\n  sec: string;\r\n  apiUserName: string;\r\n  consume?: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type JoinRoomClientType = (params: JoinRoomClientOptions) => Promise<any>;\r\n\r\n/**\r\n * Facilitates joining a room by emitting the `joinRoom` event to the server through a socket connection.\r\n *\r\n * @param {JoinRoomClientOptions} options - Configuration options for joining the room.\r\n * @param {Socket} options.socket - The socket instance for server communication.\r\n * @param {string} options.roomName - The name of the room to join.\r\n * @param {string} options.islevel - Level identifier for the user in the room.\r\n * @param {string} options.member - Member identifier for the joining user.\r\n * @param {string} options.sec - Security token or identifier for access.\r\n * @param {string} options.apiUserName - API username for server authentication.\r\n * @param {boolean} [options.consume=false] - If `true`, joins via `joinConRoom`; otherwise, joins via `joinRoom`.\r\n * @returns {Promise<any>} - A promise resolving with the server response data.\r\n * @throws {Error} - Throws an error if the room joining attempt fails.\r\n *\r\n * @example\r\n * ```typescript\r\n * const joinRoomClient = new JoinRoomClient(joinRoomService, joinConRoomService);\r\n * const response = await joinRoomClient.joinRoomClient({\r\n *   socket: mySocket,\r\n *   roomName: 'myRoom',\r\n *   islevel: '1',\r\n *   member: 'user123',\r\n *   sec: 'secureToken',\r\n *   apiUserName: 'apiUser',\r\n *   consume: true,\r\n * });\r\n * console.log('Joined room with response:', response);\r\n * ```\r\n *\r\n * This example demonstrates using `joinRoomClient` to join a room, either as a consumer or a producer, based on the `consume` flag.\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class JoinRoomClient {\r\n  constructor(private JoinRoomService: JoinRoom, private JoinConRoomService: JoinConRoom) {}\r\n\r\n  /**\r\n   * Joins a room by emitting the `joinRoom` event to the server using the provided socket.\r\n   *\r\n   * @param {Object} options - The options for joining the room.\r\n   * @param {Socket} options.socket - The socket instance to use for communication.\r\n   * @param {string} options.roomName - The name of the room to join.\r\n   * @param {boolean} options.islevel - The level indicator for the room.\r\n   * @param {string} options.member - The member identifier.\r\n   * @param {string} options.sec - The security token or identifier.\r\n   * @param {string} options.apiUserName - The API username for authentication.\r\n   * @param {boolean} [options.consume=false] - Flag to determine which join function to use.\r\n   * @returns {Promise<any>} A promise that resolves with the data returned from the server.\r\n   * @throws {Error} Throws an error if the room joining process fails.\r\n   */\r\n  async joinRoomClient({\r\n    socket,\r\n    roomName,\r\n    islevel,\r\n    member,\r\n    sec,\r\n    apiUserName,\r\n    consume = false,\r\n  }: JoinRoomClientOptions): Promise<any> {\r\n    try {\r\n      let data: Partial<ResponseJoinRoom>;\r\n\r\n      if (consume) {\r\n        data = await this.JoinConRoomService.joinConRoom({\r\n          socket,\r\n          roomName,\r\n          islevel,\r\n          member,\r\n          sec,\r\n          apiUserName,\r\n        });\r\n      } else {\r\n        data = await this.JoinRoomService.joinRoom({\r\n          socket,\r\n          roomName,\r\n          islevel,\r\n          member,\r\n          sec,\r\n          apiUserName,\r\n        });\r\n      }\r\n\r\n      return data;\r\n    } catch (error) {\r\n      console.error(error);\r\n      throw new Error('Failed to join the room. Please check your connection and try again.');\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * The `VideoCaptureConstraints` service provides various video capture constraints\r\n * including resolution and frame rate settings for different display sizes (landscape, portrait, and neutral).\r\n *\r\n * @service\r\n * @example\r\n * ```typescript\r\n * import { VideoCaptureConstraints } from './path/to/video-capture-constraints.service';\r\n *\r\n * constructor(private videoConstraints: VideoCaptureConstraints) {\r\n *   console.log(this.videoConstraints.hdCons); // Access HD constraints\r\n * }\r\n * ```\r\n *\r\n * @remarks\r\n * This service contains predefined constraints that can be used for video capture\r\n * settings based on the desired quality and aspect ratio. These constraints can\r\n * be applied when requesting media streams from the user's camera.\r\n *\r\n * @property {Object} QnHDCons - Video capture constraints for QnHD resolution (320x180).\r\n * @property {Object} sdCons - Video capture constraints for SD resolution (640x360).\r\n * @property {Object} hdCons - Video capture constraints for HD resolution (1280x720).\r\n * @property {Object} fhdCons - Video capture constraints for FHD resolution (1920x1080).\r\n * @property {Object} qhdCons - Video capture constraints for QHD resolution (2560x1440).\r\n *\r\n * @property {Object} QnHDConsPort - Video capture constraints for QnHD resolution in portrait mode.\r\n * @property {Object} sdConsPort - Video capture constraints for SD resolution in portrait mode.\r\n * @property {Object} hdConsPort - Video capture constraints for HD resolution in portrait mode.\r\n * @property {Object} fhdConsPort - Video capture constraints for FHD resolution in portrait mode.\r\n * @property {Object} qhdConsPort - Video capture constraints for QHD resolution in portrait mode.\r\n *\r\n * @property {Object} QnHDConsNeu - Video capture constraints for QnHD resolution in neutral mode.\r\n * @property {Object} sdConsNeu - Video capture constraints for SD resolution in neutral mode.\r\n * @property {Object} hdConsNeu - Video capture constraints for HD resolution in neutral mode.\r\n * @property {Object} fhdConsNeu - Video capture constraints for FHD resolution in neutral mode.\r\n * @property {Object} qhdConsNeu - Video capture constraints for QnHD resolution in neutral mode.\r\n *\r\n * @property {number} QnHDFrameRate - Frame rate for QnHD video capture (5 FPS).\r\n * @property {number} sdFrameRate - Frame rate for SD video capture (10 FPS).\r\n * @property {number} hdFrameRate - Frame rate for HD video capture (15 FPS).\r\n * @property {number} fhdFrameRate - Frame rate for FHD video capture (20 FPS).\r\n * @property {number} qhdFrameRate - Frame rate for QHD video capture (30 FPS).\r\n * @property {number} screenFrameRate - Frame rate for screen capture (30 FPS).\r\n *\r\n * @returns {VideoCaptureConstraints} The video capture constraints for use in media requests.\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class VideoCaptureConstraints {\r\n  // Landscape display sizes\r\n  QnHDCons = { width: { ideal: 320 }, height: { ideal: 180 } };\r\n  sdCons = { width: { ideal: 640 }, height: { ideal: 360 } };\r\n  hdCons = { width: { ideal: 1280 }, height: { ideal: 720 } };\r\n  fhdCons = { width: { ideal: 1920 }, height: { ideal: 1080 } };\r\n  qhdCons = { width: { ideal: 2560 }, height: { ideal: 1440 } };\r\n\r\n  // Portrait display sizes\r\n  QnHDConsPort = { width: { ideal: 180 }, height: { ideal: 320 } };\r\n  sdConsPort = { width: { ideal: 360 }, height: { ideal: 640 } };\r\n  hdConsPort = { width: { ideal: 720 }, height: { ideal: 1280 } };\r\n  fhdConsPort = { width: { ideal: 1080 }, height: { ideal: 1920 } };\r\n  qhdConsPort = { width: { ideal: 1440 }, height: { ideal: 2560 } };\r\n\r\n  // Neutral (Square) display sizes\r\n  QnHDConsNeu = { width: { ideal: 240 }, height: { ideal: 240 } };\r\n  sdConsNeu = { width: { ideal: 480 }, height: { ideal: 480 } };\r\n  hdConsNeu = { width: { ideal: 960 }, height: { ideal: 960 } };\r\n  fhdConsNeu = { width: { ideal: 1440 }, height: { ideal: 1440 } };\r\n  qhdConsNeu = { width: { ideal: 1920 }, height: { ideal: 1920 } };\r\n\r\n  // Frame rates for video capture\r\n  QnHDFrameRate = 5;\r\n  sdFrameRate = 10;\r\n  hdFrameRate = 15;\r\n  fhdFrameRate = 20;\r\n  qhdFrameRate = 30;\r\n  screenFrameRate = 30;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\n// room.service.ts\r\nimport { Injectable } from '@angular/core';\r\nimport { VideoCaptureConstraints } from '../../methods/utils/producer/video-capture-constraints.service';\r\nimport { HParams, HParamsType } from '../../methods/utils/producer/h-params.service';\r\nimport { VParams, VParamsType } from '../../methods/utils/producer/v-params.service';\r\nimport { ScreenParams } from '../../methods/utils/producer/screen-params.service';\r\nimport { AParams } from '../../methods/utils/producer/a-params.service';\r\nimport { RtpCapabilities } from 'mediasoup-client/lib/types';\r\nimport {\r\n  EventType,\r\n  ShowAlert,\r\n  VidCons,\r\n  ResponseJoinRoom,\r\n  ScreenParamsType,\r\n  AParamsType,\r\n  MeetingRoomParams,\r\n} from '../../@types/types';\r\n\r\nexport interface UpdateRoomParametersClientParameters {\r\n  rtpCapabilities: RtpCapabilities | null;\r\n  roomRecvIPs: string[];\r\n  meetingRoomParams: MeetingRoomParams | null;\r\n  itemPageLimit: number;\r\n  audioOnlyRoom: boolean;\r\n  addForBasic: boolean;\r\n  screenPageLimit: number;\r\n  shareScreenStarted: boolean;\r\n  shared: boolean;\r\n  targetOrientation: string;\r\n  vidCons: any;\r\n  recordingVideoSupport: boolean;\r\n  frameRate: number;\r\n  adminPasscode: string;\r\n  eventType: EventType;\r\n  youAreCoHost: boolean;\r\n  autoWave: boolean;\r\n  forceFullDisplay: boolean;\r\n  chatSetting: string;\r\n  meetingDisplayType: string;\r\n  audioSetting: string;\r\n  videoSetting: string;\r\n  screenshareSetting: string;\r\n  hParams: HParamsType;\r\n  vParams: VParamsType;\r\n  screenParams: ScreenParamsType;\r\n  aParams: AParamsType;\r\n  islevel: string;\r\n  showAlert?: ShowAlert;\r\n  data: ResponseJoinRoom;\r\n\r\n  // update functions\r\n  updateRtpCapabilities: (rtpCapabilities: RtpCapabilities | null) => void;\r\n  updateRoomRecvIPs: (roomRecvIPs: string[]) => void;\r\n  updateMeetingRoomParams: (params: MeetingRoomParams | null) => void;\r\n  updateItemPageLimit: (limit: number) => void;\r\n  updateAudioOnlyRoom: (isAudioOnly: boolean) => void;\r\n  updateAddForBasic: (addForBasic: boolean) => void;\r\n  updateScreenPageLimit: (limit: number) => void;\r\n  updateVidCons: (cons: any) => void;\r\n  updateFrameRate: (frameRate: number) => void;\r\n  updateAdminPasscode: (passcode: string) => void;\r\n  updateEventType: (eventType: EventType) => void;\r\n  updateYouAreCoHost: (coHost: boolean) => void;\r\n  updateAutoWave: (autoWave: boolean) => void;\r\n  updateForceFullDisplay: (forceFull: boolean) => void;\r\n  updateChatSetting: (setting: string) => void;\r\n  updateMeetingDisplayType: (type: string) => void;\r\n  updateAudioSetting: (setting: string) => void;\r\n  updateVideoSetting: (setting: string) => void;\r\n  updateScreenshareSetting: (setting: string) => void;\r\n  updateHParams: (params: HParamsType) => void;\r\n  updateVParams: (params: VParamsType) => void;\r\n  updateScreenParams: (params: ScreenParamsType) => void;\r\n  updateAParams: (params: AParamsType) => void;\r\n  updateMainHeightWidth: (heightWidth: number) => void;\r\n  updateTargetResolution: (resolution: string) => void;\r\n  updateTargetResolutionHost: (resolution: string) => void;\r\n\r\n  // Recording-related update functions\r\n  updateRecordingAudioPausesLimit: (limit: number) => void;\r\n  updateRecordingAudioPausesCount: (count: number) => void;\r\n  updateRecordingAudioSupport: (support: boolean) => void;\r\n  updateRecordingAudioPeopleLimit: (limit: number) => void;\r\n  updateRecordingAudioParticipantsTimeLimit: (limit: number) => void;\r\n  updateRecordingVideoPausesCount: (count: number) => void;\r\n  updateRecordingVideoPausesLimit: (limit: number) => void;\r\n  updateRecordingVideoSupport: (support: boolean) => void;\r\n  updateRecordingVideoPeopleLimit: (limit: number) => void;\r\n  updateRecordingVideoParticipantsTimeLimit: (limit: number) => void;\r\n  updateRecordingAllParticipantsSupport: (support: boolean) => void;\r\n  updateRecordingVideoParticipantsSupport: (support: boolean) => void;\r\n  updateRecordingAllParticipantsFullRoomSupport: (support: boolean) => void;\r\n  updateRecordingVideoParticipantsFullRoomSupport: (support: boolean) => void;\r\n  updateRecordingPreferredOrientation: (orientation: string) => void;\r\n  updateRecordingSupportForOtherOrientation: (support: boolean) => void;\r\n  updateRecordingMultiFormatsSupport: (support: boolean) => void;\r\n  updateRecordingVideoOptions: (options: string) => void;\r\n  updateRecordingAudioOptions: (options: string) => void;\r\n}\r\n\r\nexport type UpdateRoomParametersClientOptions = {\r\n  parameters: UpdateRoomParametersClientParameters;\r\n};\r\n\r\n// Export the type definition for the function\r\nexport type UpdateRoomParametersClientType = (options: UpdateRoomParametersClientOptions) => void;\r\n\r\n/**\r\n * Updates room parameters for the client after joining a room and receiving server-provided parameters.\r\n *\r\n * @param {UpdateRoomParametersClientOptions} options - An object containing:\r\n *  - various room settings and parameters,\r\n *  - functions to update those parameters.\r\n *\r\n * - **Screen/Page Settings:** Adjusts screen and item page limits, meeting room parameters, and video constraints based on server data.\r\n * - **Recording and Media Settings:** Applies bitrate and frame rate adjustments, based on the target resolution and media options.\r\n * - **Role-Specific Settings:** Configures admin, host, and co-host settings for permissions, orientations, and resolutions.\r\n * - **Alerting**: Uses `showAlert` to notify the client on issues or permissions restrictions.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   parameters: {\r\n *     rtpCapabilities: myRtpCapabilities,\r\n *     roomRecvIPs: ['192.168.1.1'],\r\n *     meetingRoomParams: myMeetingParams,\r\n *     itemPageLimit: 3,\r\n *     audioOnlyRoom: false,\r\n *     addForBasic: true,\r\n *     screenPageLimit: 2,\r\n *     shareScreenStarted: false,\r\n *     shared: true,\r\n *     targetOrientation: 'landscape',\r\n *     recordingVideoSupport: true,\r\n *     frameRate: 15,\r\n *     adminPasscode: 'admin123',\r\n *     eventType: 'conference',\r\n *     youAreCoHost: false,\r\n *     updateRtpCapabilities: (rtp) => console.log('Updating RTP:', rtp),\r\n *     updateRoomRecvIPs: (ips) => console.log('Updating IPs:', ips),\r\n *     updateMeetingRoomParams: (params) => console.log('Updating room params:', params),\r\n *     // Additional parameters...\r\n *   },\r\n * };\r\n *\r\n * const updateRoomParametersClient = new UpdateRoomParametersClient(videoCaptureConstraints, hParams, vParams, screenParams, aParams);\r\n * updateRoomParametersClient.updateRoomParametersClient(options);\r\n * ```\r\n *\r\n * This example demonstrates setting up room parameters for a conference-type room with recording support and custom update functions.\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UpdateRoomParametersClient {\r\n  constructor(\r\n    private videoCaptureConstraints: VideoCaptureConstraints,\r\n    private hParams: HParams,\r\n    private vParams: VParams,\r\n    private screenParams: ScreenParams,\r\n    private aParams: AParams,\r\n  ) {}\r\n\r\n  /**\r\n   * Update Room Parameters Client after the user has joined the room and the room parameters have been received from the server.\r\n   * @param {Object} parameters - An object containing various parameters and update functions.\r\n   */\r\n  updateRoomParametersClient = ({ parameters }: UpdateRoomParametersClientOptions): void => {\r\n    try {\r\n      const {\r\n        screenPageLimit,\r\n        shareScreenStarted,\r\n        shared,\r\n\r\n        hParams,\r\n        vParams,\r\n        frameRate,\r\n\r\n        islevel,\r\n        showAlert,\r\n        data,\r\n\r\n        //updates\r\n        updateRtpCapabilities,\r\n        updateRoomRecvIPs,\r\n        updateMeetingRoomParams,\r\n        updateItemPageLimit,\r\n        updateAudioOnlyRoom,\r\n        updateScreenPageLimit,\r\n        updateVidCons,\r\n        updateFrameRate,\r\n        updateAdminPasscode,\r\n        updateEventType,\r\n        updateYouAreCoHost,\r\n        updateAutoWave,\r\n        updateForceFullDisplay,\r\n        updateChatSetting,\r\n        updateMeetingDisplayType,\r\n        updateAudioSetting,\r\n        updateVideoSetting,\r\n        updateScreenshareSetting,\r\n        updateHParams,\r\n        updateVParams,\r\n        updateScreenParams,\r\n        updateAParams,\r\n        updateTargetResolution,\r\n        updateTargetResolutionHost,\r\n\r\n        // Recording updates\r\n        updateRecordingAudioPausesLimit,\r\n        updateRecordingAudioPausesCount,\r\n        updateRecordingAudioSupport,\r\n        updateRecordingAudioPeopleLimit,\r\n        updateRecordingAudioParticipantsTimeLimit,\r\n        updateRecordingVideoPausesCount,\r\n        updateRecordingVideoPausesLimit,\r\n        updateRecordingVideoSupport,\r\n        updateRecordingVideoPeopleLimit,\r\n        updateRecordingVideoParticipantsTimeLimit,\r\n        updateRecordingAllParticipantsSupport,\r\n        updateRecordingVideoParticipantsSupport,\r\n        updateRecordingAllParticipantsFullRoomSupport,\r\n        updateRecordingVideoParticipantsFullRoomSupport,\r\n        updateRecordingPreferredOrientation,\r\n        updateRecordingSupportForOtherOrientation,\r\n        updateRecordingMultiFormatsSupport,\r\n        updateRecordingVideoOptions,\r\n        updateRecordingAudioOptions,\r\n        updateMainHeightWidth,\r\n      } = parameters;\r\n\r\n      if (data.rtpCapabilities == null) {\r\n        let reason = data.reason || '';\r\n        showAlert?.({\r\n          message: 'Sorry, you are not allowed to join this room. ' + reason,\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n        return;\r\n      }\r\n\r\n      // Update all values\r\n      updateRtpCapabilities(data.rtpCapabilities);\r\n      updateAdminPasscode(data.secureCode);\r\n      updateRoomRecvIPs(data.roomRecvIPs);\r\n      updateMeetingRoomParams(data.meetingRoomParams);\r\n\r\n      // Update recording values\r\n      updateRecordingAudioPausesLimit(data.recordingParams.recordingAudioPausesLimit);\r\n      updateRecordingAudioPausesCount(data.recordingParams.recordingAudioPausesCount!);\r\n      updateRecordingAudioSupport(data.recordingParams.recordingAudioSupport);\r\n      updateRecordingAudioPeopleLimit(data.recordingParams.recordingAudioPeopleLimit);\r\n      updateRecordingAudioParticipantsTimeLimit(\r\n        data.recordingParams.recordingAudioParticipantsTimeLimit,\r\n      );\r\n      updateRecordingVideoPausesCount(data.recordingParams.recordingVideoPausesCount!);\r\n      updateRecordingVideoPausesLimit(data.recordingParams.recordingVideoPausesLimit);\r\n      updateRecordingVideoSupport(data.recordingParams.recordingVideoSupport);\r\n      updateRecordingVideoPeopleLimit(data.recordingParams.recordingVideoPeopleLimit);\r\n      updateRecordingVideoParticipantsTimeLimit(\r\n        data.recordingParams.recordingVideoParticipantsTimeLimit,\r\n      );\r\n      updateRecordingAllParticipantsSupport(data.recordingParams.recordingAllParticipantsSupport);\r\n      updateRecordingVideoParticipantsSupport(\r\n        data.recordingParams.recordingVideoParticipantsSupport,\r\n      );\r\n      updateRecordingAllParticipantsFullRoomSupport(\r\n        data.recordingParams.recordingAllParticipantsFullRoomSupport,\r\n      );\r\n      updateRecordingVideoParticipantsFullRoomSupport(\r\n        data.recordingParams.recordingVideoParticipantsFullRoomSupport,\r\n      );\r\n      updateRecordingPreferredOrientation(data.recordingParams.recordingPreferredOrientation);\r\n      updateRecordingSupportForOtherOrientation(\r\n        data.recordingParams.recordingSupportForOtherOrientation,\r\n      );\r\n      updateRecordingMultiFormatsSupport(data.recordingParams.recordingMultiFormatsSupport);\r\n\r\n      // Update other meeting room settings\r\n      updateItemPageLimit(data.meetingRoomParams.itemPageLimit);\r\n      updateEventType(data.meetingRoomParams.type);\r\n\r\n      if (data.meetingRoomParams.type == 'chat' && islevel != '2') {\r\n        updateYouAreCoHost(true);\r\n      }\r\n\r\n      if (['chat', 'broadcast'].includes(data.meetingRoomParams.type)) {\r\n        updateAutoWave(false);\r\n        updateMeetingDisplayType('all');\r\n        updateForceFullDisplay(true);\r\n        updateChatSetting('allow');\r\n      }\r\n\r\n      updateAudioSetting(data.meetingRoomParams.audioSetting);\r\n      updateVideoSetting(data.meetingRoomParams.videoSetting);\r\n      updateScreenshareSetting(data.meetingRoomParams.screenshareSetting);\r\n      updateChatSetting(data.meetingRoomParams.chatSetting);\r\n\r\n      updateAudioOnlyRoom(data.meetingRoomParams.mediaType != 'video');\r\n\r\n      if (data.meetingRoomParams.type == 'chat' || data.meetingRoomParams.type == 'broadcast') {\r\n        if (data.meetingRoomParams.type == 'broadcast') {\r\n          updateItemPageLimit(1);\r\n          updateRecordingVideoOptions('mainScreen');\r\n          updateRecordingAudioOptions('host');\r\n        } else {\r\n          updateItemPageLimit(2);\r\n        }\r\n      }\r\n\r\n      if (data.meetingRoomParams.type == 'conference' && (shared || shareScreenStarted)) {\r\n        updateMainHeightWidth(100);\r\n      } else {\r\n        updateMainHeightWidth(0);\r\n      }\r\n\r\n      updateScreenPageLimit(Math.min(data.meetingRoomParams.itemPageLimit, screenPageLimit));\r\n\r\n      // Assign media capture constraints based on the user's role and room settings\r\n      let targetOrientation =\r\n        islevel == '2'\r\n          ? data.meetingRoomParams.targetOrientationHost\r\n          : data.meetingRoomParams.targetOrientation;\r\n      let targetResolution =\r\n        islevel == '2'\r\n          ? data.meetingRoomParams.targetResolutionHost\r\n          : data.meetingRoomParams.targetResolution;\r\n\r\n      let vidCons: VidCons;\r\n      if (targetOrientation == 'landscape') {\r\n        vidCons =\r\n          targetResolution == 'hd'\r\n            ? this.videoCaptureConstraints.hdCons\r\n            : targetResolution == 'QnHD'\r\n            ? this.videoCaptureConstraints.QnHDCons\r\n            : targetResolution == 'fhd'\r\n            ? this.videoCaptureConstraints.fhdCons\r\n            : targetResolution == 'qhd'\r\n            ? this.videoCaptureConstraints.qhdCons\r\n            : this.videoCaptureConstraints.sdCons;\r\n      } else if (targetOrientation == 'neutral') {\r\n        vidCons =\r\n          targetResolution == 'hd'\r\n            ? this.videoCaptureConstraints.hdConsNeu\r\n            : targetResolution == 'QnHD'\r\n            ? this.videoCaptureConstraints.QnHDConsNeu\r\n            : targetResolution == 'fhd'\r\n            ? this.videoCaptureConstraints.fhdConsNeu\r\n            : targetResolution == 'qhd'\r\n            ? this.videoCaptureConstraints.qhdConsNeu\r\n            : this.videoCaptureConstraints.sdConsNeu;\r\n      } else {\r\n        vidCons =\r\n          targetResolution == 'hd'\r\n            ? this.videoCaptureConstraints.hdConsPort\r\n            : targetResolution == 'QnHD'\r\n            ? this.videoCaptureConstraints.QnHDConsPort\r\n            : targetResolution == 'fhd'\r\n            ? this.videoCaptureConstraints.fhdConsPort\r\n            : targetResolution == 'qhd'\r\n            ? this.videoCaptureConstraints.qhdConsPort\r\n            : this.videoCaptureConstraints.sdConsPort;\r\n      }\r\n\r\n      let frameRateValue = frameRate ? frameRate : 10;\r\n\r\n      let vParamsValue = { ...vParams };\r\n      let hParamsValue = { ...hParams };\r\n      if (Object.keys(vParamsValue).length === 0) {\r\n        vParamsValue = this.vParams.vParams;\r\n      }\r\n      if (Object.keys(hParamsValue).length === 0) {\r\n        hParamsValue = this.hParams.hParams;\r\n      }\r\n\r\n      if (targetResolution == 'hd') {\r\n        frameRateValue = this.videoCaptureConstraints.hdFrameRate;\r\n\r\n        vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\r\n          encoding.maxBitrate && (encoding.maxBitrate *= 4);\r\n        });\r\n\r\n        hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\r\n          encoding.maxBitrate && (encoding.maxBitrate *= 4);\r\n        });\r\n      } else if (targetResolution == 'QnHD') {\r\n        frameRateValue = this.videoCaptureConstraints.QnHDFrameRate;\r\n        vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\r\n          encoding.maxBitrate && (encoding.maxBitrate *= 0.25);\r\n        });\r\n\r\n        hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\r\n          encoding.maxBitrate && (encoding.maxBitrate *= 0.25);\r\n        });\r\n\r\n        hParamsValue.codecOptions!.videoGoogleStartBitrate! *= 0.25;\r\n        vParamsValue.codecOptions!.videoGoogleStartBitrate! *= 0.25;\r\n      } else if (targetResolution == 'fhd') {\r\n        frameRateValue = this.videoCaptureConstraints.fhdFrameRate;\r\n        vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\r\n          encoding.maxBitrate && (encoding.maxBitrate *= 8);\r\n        });\r\n\r\n        hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\r\n          encoding.maxBitrate && (encoding.maxBitrate *= 8);\r\n        });\r\n\r\n        hParamsValue.codecOptions!.videoGoogleStartBitrate! *= 8;\r\n        vParamsValue.codecOptions!.videoGoogleStartBitrate! *= 8;\r\n      } else if (targetResolution == 'qhd') {\r\n        frameRateValue = this.videoCaptureConstraints.qhdFrameRate;\r\n        vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\r\n          encoding.maxBitrate && (encoding.maxBitrate *= 16);\r\n        });\r\n\r\n        hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\r\n          encoding.maxBitrate && (encoding.maxBitrate *= 16);\r\n        });\r\n\r\n        hParamsValue.codecOptions!.videoGoogleStartBitrate! *= 16;\r\n        vParamsValue.codecOptions!.videoGoogleStartBitrate! *= 16;\r\n      }\r\n\r\n      if (data.recordingParams.recordingVideoSupport) {\r\n        vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\r\n          encoding.maxBitrate && (encoding.maxBitrate *= 1.2);\r\n        });\r\n\r\n        hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\r\n          encoding.maxBitrate && (encoding.maxBitrate *= 1.2);\r\n        });\r\n\r\n        hParamsValue.codecOptions!.videoGoogleStartBitrate! *= 1.2;\r\n        vParamsValue.codecOptions!.videoGoogleStartBitrate! *= 1.2;\r\n      }\r\n\r\n      updateVidCons(vidCons);\r\n      updateFrameRate(frameRateValue);\r\n      updateHParams(hParamsValue);\r\n      updateVParams(vParamsValue);\r\n      updateScreenParams(this.screenParams.screenParams);\r\n      updateAParams(this.aParams.aParams);\r\n      updateTargetResolution(data.meetingRoomParams.targetResolution);\r\n      updateTargetResolutionHost(data.meetingRoomParams.targetResolutionHost);\r\n    } catch (error) {\r\n      console.log('updateRoomParametersClient error', error);\r\n      parameters.showAlert?.({\r\n        message: (error as Error).message,\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PreJoinPageParameters } from '../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\nimport { CookieService } from 'ngx-cookie-service';\r\n\r\nconst MAX_ATTEMPTS = 10; // Maximum number of unsuccessful attempts before rate limiting\r\nconst RATE_LIMIT_DURATION = 3 * 60 * 60 * 1000; // 3 hours in milliseconds\r\nconst TIMEOUT_DURATION = 10000; // 10 seconds\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CheckLimitsAndMakeRequest {\r\n  constructor(private cookieService: CookieService) {}\r\n\r\n  /**\r\n   * Checks rate limits and attempts to make a socket connection.\r\n   *\r\n   * @param params - The parameters required for making the request.\r\n   */\r\n  async checkLimitsAndMakeRequest({\r\n    apiUserName,\r\n    apiToken,\r\n    link,\r\n    apiKey = '',\r\n    userName,\r\n    parameters,\r\n    validate = true,\r\n  }: {\r\n    apiUserName: string;\r\n    apiToken: string;\r\n    link: string;\r\n    apiKey?: string;\r\n    userName: string;\r\n    parameters: PreJoinPageParameters;\r\n    validate?: boolean;\r\n  }): Promise<void> {\r\n    let unsuccessfulAttempts =\r\n      parseInt(this.cookieService.get('unsuccessfulAttempts'), 10) || 0;\r\n    let lastRequestTimestamp =\r\n      parseInt(this.cookieService.get('lastRequestTimestamp'), 10) || 0;\r\n\r\n    if (\r\n      unsuccessfulAttempts >= MAX_ATTEMPTS &&\r\n      Date.now() - lastRequestTimestamp < RATE_LIMIT_DURATION\r\n    ) {\r\n      parameters.showAlert?.({\r\n        message: 'Too many unsuccessful attempts. Please try again later.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n      this.cookieService.set('lastRequestTimestamp', Date.now().toString());\r\n      return;\r\n    } else {\r\n      // Reset attempts if the rate limit duration has passed\r\n      if (Date.now() - lastRequestTimestamp >= RATE_LIMIT_DURATION) {\r\n        unsuccessfulAttempts = 0;\r\n        this.cookieService.set('unsuccessfulAttempts', '0');\r\n        this.cookieService.set('lastRequestTimestamp', Date.now().toString());\r\n      }\r\n    }\r\n\r\n    try {\r\n      parameters.updateIsLoadingModalVisible(true);\r\n\r\n      // Initiate socket connection\r\n      const socket: Socket = await Promise.race([\r\n        parameters.connectSocket({\r\n          apiUserName,\r\n          apiKey,\r\n          apiToken,\r\n          link,\r\n        }),\r\n        new Promise<never>((_, reject) =>\r\n          setTimeout(() => reject(new Error('Request timed out')), TIMEOUT_DURATION)\r\n        ),\r\n      ]);\r\n\r\n      if (socket && socket instanceof Socket && socket.id) {\r\n        // Successful connection\r\n        unsuccessfulAttempts = 0;\r\n        this.cookieService.set('unsuccessfulAttempts', '0');\r\n        this.cookieService.set('lastRequestTimestamp', Date.now().toString());\r\n\r\n        if (validate) {\r\n          parameters.updateSocket(socket);\r\n        } else {\r\n          parameters.updateLocalSocket?.(socket);\r\n        }\r\n\r\n        parameters.updateApiUserName(apiUserName);\r\n        parameters.updateApiToken(apiToken);\r\n        parameters.updateLink(link);\r\n        parameters.updateRoomName(apiUserName);\r\n        parameters.updateMember(userName);\r\n\r\n        if (validate) {\r\n          parameters.updateValidated(true);\r\n        }\r\n\r\n        parameters.updateIsLoadingModalVisible(false);\r\n      } else {\r\n        // Unsuccessful connection\r\n        unsuccessfulAttempts += 1;\r\n        this.cookieService.set('unsuccessfulAttempts', unsuccessfulAttempts.toString());\r\n        this.cookieService.set('lastRequestTimestamp', Date.now().toString());\r\n        parameters.updateIsLoadingModalVisible(false);\r\n\r\n        if (unsuccessfulAttempts >= MAX_ATTEMPTS) {\r\n          parameters.showAlert?.({\r\n            message: 'Too many unsuccessful attempts. Please try again later.',\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n        } else {\r\n          parameters.showAlert?.({\r\n            message: 'Invalid credentials.',\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n        }\r\n      }\r\n    } catch (error) {\r\n      // Handle errors (e.g., timeout)\r\n      parameters.showAlert?.({\r\n        message: 'Unable to connect. Check your credentials and try again.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      unsuccessfulAttempts += 1;\r\n      this.cookieService.set('unsuccessfulAttempts', unsuccessfulAttempts.toString());\r\n      this.cookieService.set('lastRequestTimestamp', Date.now().toString());\r\n      parameters.updateIsLoadingModalVisible(false);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { ValidateAlphanumeric } from '../../methods/utils/validate-alphanumeric.service';\r\nimport { ResponseJoinLocalRoom, PreJoinPageParameters, JoinMediaSFURoomOptions } from '../../@types/types';\r\nimport { CheckLimitsAndMakeRequest } from '../../methods/utils/check-limits-and-make-request.service';\r\nimport { JoinRoomOnMediaSFU, JoinRoomOnMediaSFUType } from '../../methods/utils/join-room-on-media-sfu.service';\r\n\r\nexport interface JoinLocalRoomOptions {\r\n  socket: Socket;\r\n  roomName: string;\r\n  islevel: string;\r\n  member: string;\r\n  sec: string;\r\n  apiUserName: string;\r\n  parameters: PreJoinPageParameters;\r\n  checkConnect?: boolean;\r\n  joinMediaSFURoom?: JoinRoomOnMediaSFUType,\r\n  localLink?: string;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type JoinLocalRoomType = (\r\n  options: JoinLocalRoomOptions\r\n) => Promise<ResponseJoinLocalRoom>;\r\n\r\n\r\nexport interface CheckMediasfuURLOptions {\r\n  data: ResponseJoinLocalRoom;\r\n  member: string;\r\n  roomName: string;\r\n  islevel: string;\r\n  socket: Socket;\r\n  parameters: PreJoinPageParameters;\r\n  joinMediaSFURoom?: JoinRoomOnMediaSFUType,\r\n  localLink?: string;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type CheckMediasfuURLType = (options: CheckMediasfuURLOptions) => Promise<void>;\r\n\r\n/**\r\n * Checks the MediaSFU URL and processes the necessary actions based on the URL's validity.\r\n *\r\n * @param {CheckMediasfuURLOptions} options - The options for checking and handling the MediaSFU URL.\r\n * @param {ResponseJoinLocalRoom} options.data - The data received from the room join response.\r\n * @param {string} options.member - The member identifier.\r\n * @param {string} options.roomName - The name of the room to join.\r\n * @param {string} options.islevel - The level of the user.\r\n * @param {Socket} options.socket - The socket instance to use for communication.\r\n * @param {PreJoinPageParameters} options.parameters - Additional parameters for pre-join page actions.\r\n * @param {JoinRoomOnMediaSFUType} options.joinMediaSFURoom - The function to join a room on MediaSFU.\r\n * @param {string} options.localLink - The local link to use for Community Edition.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the actions are complete.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   data: {\r\n *     mediasfuURL: \"https://example.com/meet/room123/secret\",\r\n *     allowRecord: true,\r\n *     apiKey: \"1234567890123456789012345678901234567890123456789012345678901234\",\r\n *     apiUserName: \"user123\",\r\n *   },\r\n *   member: \"user123\",\r\n *   roomName: \"s12345678\",\r\n *   islevel: \"1\",\r\n *   socket: socketInstance,\r\n *   parameters: {\r\n *     someParameter: \"value\",\r\n *   },\r\n *   joinMediaSFURoom: joinRoomOnMediaSFU,\r\n *   localLink: \"https://socketserver.example.com\",\r\n * };\r\n *\r\n * try {\r\n *   await checkMediasfuURL(options);\r\n *   console.log(\"MediaSFU URL processed successfully.\");\r\n * } catch (error) {\r\n *   console.error(\"Failed to process MediaSFU URL:\", error);\r\n * }\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class JoinLocalRoom {\r\n  constructor(\r\n    private validateAlphanumericService: ValidateAlphanumeric,\r\n    private checkLimitsService: CheckLimitsAndMakeRequest,\r\n    private joinRoomOnMediaSFU: JoinRoomOnMediaSFU\r\n  ) {}\r\n\r\n/**\r\n * Checks the MediaSFU URL and processes the necessary actions based on the URL's validity.\r\n *\r\n * @param {CheckMediasfuURLOptions} options - The options for checking and handling the MediaSFU URL.\r\n * @param {ResponseJoinLocalRoom} options.data - The data received from the room join response.\r\n * @param {string} options.member - The member identifier.\r\n * @param {string} options.roomName - The name of the room to join.\r\n * @param {string} options.islevel - The level of the user.\r\n * @param {Socket} options.socket - The socket instance to use for communication.\r\n * @param {PreJoinPageParameters} options.parameters - Additional parameters for pre-join page actions.\r\n * @param {JoinRoomOnMediaSFUType} options.joinMediaSFURoom - The function to join a room on MediaSFU.\r\n * @param {string} options.localLink - The local link to use for Community Edition.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the actions are complete.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   data: {\r\n *     mediasfuURL: \"https://example.com/meet/room123/secret\",\r\n *     allowRecord: true,\r\n *     apiKey: \"1234567890123456789012345678901234567890123456789012345678901234\",\r\n *     apiUserName: \"user123\",\r\n *   },\r\n *   member: \"user123\",\r\n *   roomName: \"s12345678\",\r\n *   islevel: \"1\",\r\n *   socket: socketInstance,\r\n *   parameters: {\r\n *     someParameter: \"value\",\r\n *   },\r\n *   joinMediaSFURoom: joinRoomOnMediaSFU,\r\n *   localLink: \"https://socketserver.example.com\",\r\n * };\r\n *\r\n * try {\r\n *   await checkMediasfuURL(options);\r\n *   console.log(\"MediaSFU URL processed successfully.\");\r\n * } catch (error) {\r\n *   console.error(\"Failed to process MediaSFU URL:\", error);\r\n * }\r\n * ```\r\n */\r\n\r\n  async joinLocalRoom(options: JoinLocalRoomOptions): Promise<ResponseJoinLocalRoom> {\r\n    const {\r\n      socket,\r\n      roomName,\r\n      islevel,\r\n      member,\r\n      sec,\r\n      apiUserName,\r\n      parameters,\r\n      checkConnect = false,\r\n      joinMediaSFURoom = this.joinRoomOnMediaSFU.joinRoomOnMediaSFU,\r\n      localLink = '',\r\n    } = options;\r\n\r\n    return new Promise((resolve, reject) => {\r\n      // Validate inputs\r\n      if (!(sec && roomName && islevel && apiUserName && member)) {\r\n        const validationError = {\r\n          success: false,\r\n          rtpCapabilities: null,\r\n          reason: 'Missing required parameters',\r\n        };\r\n        reject(validationError);\r\n        return;\r\n      }\r\n\r\n      // Validate alphanumeric for roomName, apiUserName, and member\r\n      try {\r\n        this.validateAlphanumericService.validateAlphanumeric({ str: roomName });\r\n        this.validateAlphanumericService.validateAlphanumeric({ str: apiUserName });\r\n        this.validateAlphanumericService.validateAlphanumeric({ str: member });\r\n      } catch (error) {\r\n        const validationError = {\r\n          success: false,\r\n          rtpCapabilities: null,\r\n          reason: 'Invalid roomName or apiUserName or member',\r\n        };\r\n        reject(validationError);\r\n        return;\r\n      }\r\n\r\n      // Validate roomName starts with 's', 'p', or 'm'\r\n      if (\r\n        !(\r\n          roomName.startsWith('s') ||\r\n          roomName.startsWith('p') ||\r\n          roomName.startsWith('m')\r\n        )\r\n      ) {\r\n        const validationError = {\r\n          success: false,\r\n          rtpCapabilities: null,\r\n          reason: 'Invalid roomName, must start with s, p, or m',\r\n        };\r\n        reject(validationError);\r\n        return;\r\n      }\r\n\r\n      // Validate other conditions for sec, roomName, islevel, apiUserName\r\n      if (\r\n        !(\r\n          sec.length === 32 &&\r\n          roomName.length >= 8 &&\r\n          islevel.length === 1 &&\r\n          apiUserName.length >= 6 &&\r\n          ['0', '1', '2'].includes(islevel)\r\n        )\r\n      ) {\r\n        const validationError = {\r\n          success: false,\r\n          rtpCapabilities: null,\r\n          reason: 'Invalid roomName, islevel, apiUserName, or secret',\r\n        };\r\n        reject(validationError);\r\n        return;\r\n      }\r\n\r\n      socket.emit(\r\n        'joinRoom',\r\n        { roomName, islevel, member, sec, apiUserName },\r\n        async (data: ResponseJoinLocalRoom) => {\r\n          try {\r\n            // Check if rtpCapabilities is null\r\n            if (data.rtpCapabilities === null) {\r\n              // Handle specific error cases\r\n              if (data.isBanned) {\r\n                throw new Error('User is banned.');\r\n              }\r\n              if (data.hostNotJoined) {\r\n                throw new Error('Host has not joined the room yet.');\r\n              }\r\n\r\n              // Resolve with the data received from the 'joinRoom' event\r\n              resolve(data);\r\n            } else {\r\n              if (checkConnect) {\r\n                await this.checkMediasfuURL({\r\n                  data,\r\n                  member,\r\n                  roomName,\r\n                  islevel,\r\n                  socket,\r\n                  parameters,\r\n                  joinMediaSFURoom,\r\n                  localLink,\r\n                });\r\n              } else {\r\n                // If mediasfuURL is present, extract and update the API token\r\n                if (data.mediasfuURL && data.mediasfuURL.length > 10) {\r\n                  let secretCode;\r\n                  const splitTexts = ['/meet/', '/chat/', '/broadcast/'];\r\n                  const splitText =\r\n                    splitTexts.find((text) => data.mediasfuURL.includes(text)) ||\r\n                    '/meet/';\r\n                  const urlParts = data.mediasfuURL.split(splitText);\r\n                  secretCode = urlParts[1].split('/')[1];\r\n                  parameters.updateApiToken(secretCode);\r\n                }\r\n              }\r\n              // Resolve with the data received from the 'joinRoom' event\r\n              resolve(data);\r\n            }\r\n          } catch (error) {\r\n            // Handle errors during the joinRoom process\r\n            console.error('Error joining room:', error);\r\n            reject(error);\r\n          }\r\n        }\r\n      );\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Checks the MediaSFU URL and processes necessary actions based on its validity.\r\n   *\r\n   * @param {Object} options - Contains:\r\n   *   - `data`: Data received from the room join response.\r\n   *   - `member`: User identifier.\r\n   *   - `roomName`: Name of the room to join.\r\n   *   - `islevel`: User's level indicator.\r\n   *   - `socket`: Socket instance for communication.\r\n   *   - `parameters`: Additional parameters for pre-join page actions.\r\n   *   - `joinMediaSFURoom`: Function to join a room on MediaSFU.\r\n   *   - `localLink`: Local link to use for Community Edition.\r\n   */\r\n  private async checkMediasfuURL(options: {\r\n    data: ResponseJoinLocalRoom;\r\n    member: string;\r\n    roomName: string;\r\n    islevel: string;\r\n    socket: Socket;\r\n    parameters: PreJoinPageParameters;\r\n    joinMediaSFURoom?: JoinRoomOnMediaSFUType;\r\n    localLink?: string;\r\n  }): Promise<void> {\r\n    const { data, member, roomName, islevel, socket, parameters, localLink } = options;\r\n    let joinMediaSFURoom = options.joinMediaSFURoom;\r\n\r\n    if (data.mediasfuURL && data.mediasfuURL.length > 10) {\r\n      let link;\r\n      let secretCode;\r\n\r\n      try {\r\n        const splitTexts = ['/meet/', '/chat/', '/broadcast/'];\r\n        const splitText =\r\n          splitTexts.find((text) => data.mediasfuURL.includes(text)) || '/meet/';\r\n        const urlParts = data.mediasfuURL.split(splitText);\r\n        link = urlParts[0];\r\n        secretCode = urlParts[1].split('/')[1];\r\n      } catch {\r\n        link = data.mediasfuURL;\r\n        return;\r\n      }\r\n\r\n      await this.checkLimitsService.checkLimitsAndMakeRequest({\r\n        apiUserName: roomName,\r\n        apiToken: secretCode,\r\n        link,\r\n        apiKey: '',\r\n        userName: member,\r\n        parameters,\r\n        validate: false,\r\n      });\r\n\r\n      return;\r\n    }\r\n\r\n    if (\r\n      (!data.mediasfuURL || data.mediasfuURL.length < 10) &&\r\n      islevel !== '2' &&\r\n      data.allowRecord &&\r\n      data.apiKey &&\r\n      data.apiKey.length === 64 &&\r\n      data.apiUserName &&\r\n      data.apiUserName.length > 5 &&\r\n      (roomName.startsWith('s') || roomName.startsWith('p'))\r\n    ) {\r\n      const payload: JoinMediaSFURoomOptions = {\r\n        action: 'join',\r\n        meetingID: roomName,\r\n        userName: member,\r\n      };\r\n\r\n      if (!joinMediaSFURoom) {\r\n        joinMediaSFURoom = this.joinRoomOnMediaSFU.joinRoomOnMediaSFU;\r\n      }\r\n\r\n      const response = await joinMediaSFURoom({\r\n        payload,\r\n        apiKey: data.apiKey,\r\n        apiUserName: data.apiUserName,\r\n        localLink,\r\n      });\r\n\r\n      if (response.success && response.data && 'roomName' in response.data) {\r\n        try {\r\n          socket.emit(\r\n            'updateMediasfuURL',\r\n            { eventID: roomName, mediasfuURL: response.data.publicURL },\r\n            () => {}\r\n          );\r\n        } catch {\r\n          // Do nothing\r\n        }\r\n\r\n        await this.checkLimitsService.checkLimitsAndMakeRequest({\r\n          apiUserName: response.data.roomName,\r\n          apiToken: response.data.secret,\r\n          link: response.data.link,\r\n          userName: member,\r\n          parameters,\r\n          validate: false,\r\n        });\r\n        parameters.updateApiToken(response.data.secret);\r\n      }\r\n      return;\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  Participant,\r\n  Request,\r\n  ReorderStreamsType,\r\n  ReorderStreamsParameters,\r\n  SleepType,\r\n  ConnectIpsParameters,\r\n  OnScreenChangesParameters,\r\n  OnScreenChangesType,\r\n  ConnectIpsType,\r\n  ConnectLocalIpsType,\r\n  ConnectLocalIpsParameters,\r\n  ConsumeSocket,\r\n  CoHostResponsibility,\r\n  WaitingRoomParticipant,\r\n} from '../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface AllMembersParameters\r\n  extends ReorderStreamsParameters,\r\n    ConnectIpsParameters,\r\n    OnScreenChangesParameters,\r\n    ConnectLocalIpsParameters {\r\n  participantsAll: Participant[];\r\n  participants: Participant[];\r\n  dispActiveNames: string[];\r\n  requestList: Request[];\r\n  coHost: string;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  lock_screen: boolean;\r\n  firstAll: boolean;\r\n  membersReceived: boolean;\r\n  roomRecvIPs: string[];\r\n  deferScreenReceived: boolean;\r\n  screenId?: string;\r\n  shareScreenStarted: boolean;\r\n  meetingDisplayType: string;\r\n  hostFirstSwitch: boolean;\r\n  waitingRoomList: WaitingRoomParticipant[];\r\n  islevel: string;\r\n  socket: Socket;\r\n\r\n  updateParticipantsAll: (participantsAll: Participant[]) => void;\r\n  updateParticipants: (participants: Participant[]) => void;\r\n  updateRequestList: (requestList: Request[]) => void;\r\n  updateCoHost: (coHost: string) => void;\r\n  updateCoHostResponsibility: (coHostRes: CoHostResponsibility[]) => void;\r\n  updateFirstAll: (firstAll: boolean) => void;\r\n  updateMembersReceived: (membersReceived: boolean) => void;\r\n  updateDeferScreenReceived: (deferScreenReceived: boolean) => void;\r\n  updateShareScreenStarted: (shareScreenStarted: boolean) => void;\r\n  updateHostFirstSwitch: (hostFirstSwitch: boolean) => void;\r\n  updateConsume_sockets: (sockets: ConsumeSocket[]) => void;\r\n  updateRoomRecvIPs: (ips: string[]) => void;\r\n  updateIsLoadingModalVisible: (visible: boolean) => void;\r\n  updateTotalReqWait: (total: number) => void;\r\n\r\n  // mediasfu functions\r\n  onScreenChanges: OnScreenChangesType;\r\n  connectIps: ConnectIpsType;\r\n  connectLocalIps?: ConnectLocalIpsType;\r\n  sleep: SleepType;\r\n  reorderStreams: ReorderStreamsType;\r\n\r\n  getUpdatedAllParams: () => AllMembersParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface AllMembersOptions {\r\n  members: Participant[];\r\n  requestss: Request[];\r\n  coHoste: string;\r\n  coHostRes: CoHostResponsibility[];\r\n  parameters: AllMembersParameters;\r\n  consume_sockets: ConsumeSocket[];\r\n  apiUserName: string;\r\n  apiKey: string;\r\n  apiToken: string;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type AllMembersType = (options: AllMembersOptions) => Promise<void>;\r\n\r\n/**\r\n * Manages participant-related operations, including updates for participant lists, requests, co-host settings,\r\n * and other session details. This method filters out banned and suspended participants, reorders streams,\r\n * connects IPs, and updates the UI.\r\n *\r\n * @async\r\n * @param {AllMembersOptions} options - Parameters for managing all members.\r\n * @param {Participant[]} options.members - The array of participant objects.\r\n * @param {Request[]} options.requestss - The list of requests from participants.\r\n * @param {string} options.coHoste - The current co-host name.\r\n * @param {CoHostResponsibility[]} options.coHostRes - The responsibilities assigned to the co-host.\r\n * @param {AllMembersParameters} options.parameters - Additional parameters for member management and UI updates.\r\n * @param {ConsumeSocket[]} options.consume_sockets - Array of sockets for participant communication.\r\n * @param {string} options.apiUserName - API username for authentication.\r\n * @param {string} options.apiKey - API key for authentication.\r\n * @param {string} options.apiToken - API token for authentication.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when all members have been processed and updates are complete.\r\n *\r\n * @example\r\n * ```typescript\r\n * const allMembersService = new AllMembers();\r\n * await allMembersService.allMembers({\r\n *   members: [{ name: 'John', isBanned: false, isSuspended: false, audioID: '123', videoID: '456' }],\r\n *   requestss: [{ id: '1', name: 'Jane', type: 'fa-microphone' }],\r\n *   coHoste: 'Jane',\r\n *   coHostRes: ['manage-chat'],\r\n *   parameters: {\r\n *     participantsAll: [],\r\n *     participants: [],\r\n *     dispActiveNames: ['John'],\r\n *     requestList: [],\r\n *     coHost: '',\r\n *     coHostResponsibility: [],\r\n *     lock_screen: false,\r\n *     firstAll: false,\r\n *     membersReceived: false,\r\n *     roomRecvIPs: [],\r\n *     deferScreenReceived: false,\r\n *     screenId: null,\r\n *     shareScreenStarted: false,\r\n *     meetingDisplayType: 'grid',\r\n *     hostFirstSwitch: false,\r\n *     waitingRoomList: [],\r\n *     islevel: '1',\r\n *     socket: socket,\r\n *     updateParticipantsAll: (participantsAll) => console.log(participantsAll),\r\n *     updateParticipants: (participants) => console.log(participants),\r\n *     updateRequestList: (requestList) => console.log(requestList),\r\n *     updateCoHost: (coHost) => console.log(coHost),\r\n *     updateCoHostResponsibility: (coHostRes) => console.log(coHostRes),\r\n *     updateFirstAll: (firstAll) => console.log(firstAll),\r\n *     updateMembersReceived: (membersReceived) => console.log(membersReceived),\r\n *     updateDeferScreenReceived: (deferScreenReceived) => console.log(deferScreenReceived),\r\n *     updateShareScreenStarted: (shareScreenStarted) => console.log(shareScreenStarted),\r\n *     updateHostFirstSwitch: (hostFirstSwitch) => console.log(hostFirstSwitch),\r\n *     updateConsume_sockets: (sockets) => console.log(sockets),\r\n *     updateRoomRecvIPs: (ips) => console.log(ips),\r\n *     updateIsLoadingModalVisible: (visible) => console.log(visible),\r\n *     updateTotalReqWait: (total) => console.log(total),\r\n *     onScreenChanges: (params) => console.log('onScreenChanges called with', params),\r\n *     connectIps: async (params) => [['socket1'], ['ip1']],\r\n *     connectLocalIps: async (params) => [['socket1'], ['ip1']],\r\n *     sleep: async ({ ms }) => new Promise((resolve) => setTimeout(resolve, ms)),\r\n *     reorderStreams: async (params) => console.log('reorderStreams called with', params),\r\n *   },\r\n *   consume_sockets: [{ socketId: 'abc123' }],\r\n *   apiUserName: 'testUser',\r\n *   apiKey: 'apiKeyExample',\r\n *   apiToken: 'apiTokenExample',\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AllMembers {\r\n  /**\r\n   * allMembers - A method for handling various tasks related to participant management and UI updates.\r\n   * @param {Object} params - The parameters passed to the allMembers method.\r\n   * @param {Array} params.members - The array of participant members.\r\n   * @param {Array} params.requestss - The array of requests.\r\n   * @param {boolean} params.coHoste - The co-host state.\r\n   * @param {boolean} params.coHostRes - The co-host responsibility state.\r\n   * @param {Object} params.parameters - The object containing parameters for the allMembers method.\r\n   * @param {Array} params.consume_sockets - The array of consume sockets.\r\n   * @param {string} params.apiUserName - The API username.\r\n   * @param {string} params.apiKey - The API key.\r\n   * @param {string} params.apiToken - The API token.\r\n   * @returns {void} - No return value.\r\n   */\r\n\r\n  allMembers = async ({\r\n    members,\r\n    requestss,\r\n    coHoste,\r\n    coHostRes,\r\n    parameters,\r\n    consume_sockets,\r\n    apiUserName,\r\n    apiKey,\r\n    apiToken,\r\n  }: AllMembersOptions): Promise<void> => {\r\n    let {\r\n      participantsAll,\r\n      participants,\r\n      dispActiveNames,\r\n      requestList,\r\n      coHost,\r\n      coHostResponsibility,\r\n      lock_screen,\r\n      firstAll,\r\n      membersReceived,\r\n      roomRecvIPs,\r\n      deferScreenReceived,\r\n      screenId,\r\n      shareScreenStarted,\r\n      meetingDisplayType,\r\n      hostFirstSwitch,\r\n      waitingRoomList,\r\n      islevel,\r\n      socket,\r\n      updateParticipantsAll,\r\n      updateParticipants,\r\n      updateRequestList,\r\n      updateCoHost,\r\n      updateCoHostResponsibility,\r\n      updateFirstAll,\r\n      updateMembersReceived,\r\n      updateDeferScreenReceived,\r\n      updateShareScreenStarted,\r\n      updateHostFirstSwitch,\r\n      updateConsume_sockets,\r\n      updateRoomRecvIPs,\r\n      updateIsLoadingModalVisible,\r\n      updateTotalReqWait,\r\n\r\n      onScreenChanges,\r\n      connectIps,\r\n      connectLocalIps,\r\n      reorderStreams,\r\n      sleep,\r\n    } = parameters;\r\n\r\n    // Filter out the participant that isBanned == true or isSuspended == true\r\n    participantsAll = members.map((participant) => ({\r\n      isBanned: participant.isBanned,\r\n      isSuspended: participant.isSuspended,\r\n      name: participant.name,\r\n      audioID: participant.audioID,\r\n      videoID: participant.videoID,\r\n    }));\r\n    updateParticipantsAll(participantsAll);\r\n\r\n    participants = members.filter(\r\n      (participant) => !participant.isBanned && !participant.isSuspended,\r\n    );\r\n    updateParticipants(participants);\r\n\r\n    // Check if dispActiveNames is not empty and contains the name of the participant that is not in the participants array\r\n    if (dispActiveNames.length > 0) {\r\n      let dispActiveNames_ = dispActiveNames.filter(\r\n        (name: string) => !participants.map((participant: any) => participant.name).includes(name),\r\n      );\r\n      if (dispActiveNames_.length > 0) {\r\n        await reorderStreams({ add: false, screenChanged: true, parameters });\r\n      }\r\n    }\r\n\r\n    // check to expect no roomRecvIPs for local instance\r\n    let onLocal = false;\r\n    if (roomRecvIPs.length === 1 && roomRecvIPs[0] === \"none\") {\r\n      onLocal = true;\r\n    }\r\n\r\n    // Operations to update the UI; make sure we are connected to the server before updating the UI\r\n    if (!membersReceived && !onLocal) {\r\n      if (roomRecvIPs.length < 1) {\r\n        // Keep checking every 0.01s\r\n        let checkIPs = setInterval(async () => {\r\n          if (roomRecvIPs.length > 0) {\r\n            clearInterval(checkIPs);\r\n\r\n            if (deferScreenReceived && screenId != null) {\r\n              shareScreenStarted = true;\r\n              updateShareScreenStarted(shareScreenStarted);\r\n            }\r\n\r\n            const [sockets_, ips_] = await connectIps({\r\n              consume_sockets,\r\n              remIP: roomRecvIPs,\r\n              parameters,\r\n              apiUserName,\r\n              apiKey,\r\n              apiToken,\r\n            });\r\n\r\n            if (sockets_ && ips_) {\r\n              updateConsume_sockets(sockets_);\r\n              updateRoomRecvIPs(ips_);\r\n            }\r\n\r\n            membersReceived = true;\r\n            updateMembersReceived(membersReceived);\r\n\r\n            await sleep({ ms: 250 });\r\n            updateIsLoadingModalVisible(false);\r\n            deferScreenReceived = false;\r\n            updateDeferScreenReceived(deferScreenReceived);\r\n          }\r\n        }, 10);\r\n      } else {\r\n        const [sockets_, ips_] = await connectIps({\r\n          consume_sockets,\r\n          remIP: roomRecvIPs,\r\n          parameters,\r\n          apiUserName,\r\n          apiKey,\r\n          apiToken,\r\n        });\r\n\r\n        if (sockets_ && ips_) {\r\n          updateConsume_sockets(sockets_);\r\n          updateRoomRecvIPs(ips_);\r\n        }\r\n        membersReceived = true;\r\n        updateMembersReceived(membersReceived);\r\n\r\n        if (deferScreenReceived && screenId != null) {\r\n          shareScreenStarted = true;\r\n          updateShareScreenStarted(shareScreenStarted);\r\n        }\r\n\r\n        await sleep({ ms: 250 });\r\n        updateIsLoadingModalVisible(false);\r\n        deferScreenReceived = false;\r\n        updateDeferScreenReceived(deferScreenReceived);\r\n      }\r\n    } else {\r\n      if (screenId != null) {\r\n        let host = participants.find(\r\n          (participant: any) => participant.ScreenID == screenId && participant.ScreenOn == true,\r\n        );\r\n        if (deferScreenReceived && screenId != null && host) {\r\n          shareScreenStarted = true;\r\n          updateShareScreenStarted(shareScreenStarted);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (onLocal && !membersReceived) {\r\n      if (connectLocalIps) {\r\n        await connectLocalIps({ socket: socket, parameters });\r\n      }\r\n      await sleep({ ms: 100 });\r\n      updateIsLoadingModalVisible(false);\r\n    }\r\n\r\n    // Return requests for only ids that are in the participants array and update the count badge\r\n    requestList = requestss.filter((request) =>\r\n      participants.some((participant: any) => participant.id == request.id),\r\n    );\r\n    updateRequestList(requestList);\r\n\r\n    updateTotalReqWait(requestList.length + waitingRoomList.length);\r\n\r\n    if (coHoste !== undefined && coHoste !== null) {\r\n      coHost = coHoste;\r\n    }\r\n    updateCoHost(coHost);\r\n    if (coHostRes) {\r\n      coHostResponsibility = coHostRes;\r\n    }\r\n    updateCoHostResponsibility(coHostResponsibility);\r\n\r\n    try {\r\n      if (!lock_screen && !firstAll) {\r\n        await onScreenChanges({ parameters });\r\n\r\n        if (meetingDisplayType != 'all') {\r\n          firstAll = true;\r\n          updateFirstAll(firstAll);\r\n        }\r\n      } else {\r\n        if (islevel == '2') {\r\n          if (!hostFirstSwitch) {\r\n            await onScreenChanges({ parameters });\r\n            hostFirstSwitch = true; // Get self display\r\n            updateHostFirstSwitch(hostFirstSwitch);\r\n          }\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.log('allMembers OnScreen', error);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport {\r\n  Participant,\r\n  CoHostResponsibility,\r\n  OnScreenChangesType,\r\n  OnScreenChangesParameters,\r\n  Request,\r\n  ConnectIpsParameters,\r\n  ReorderStreamsParameters,\r\n  ConnectIpsType,\r\n  ConnectLocalIpsType,\r\n  ConnectLocalIpsParameters,\r\n  SleepType,\r\n  ReorderStreamsType,\r\n  Settings,\r\n  ConsumeSocket,\r\n} from '../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\nexport interface AllMembersRestParameters\r\n  extends OnScreenChangesParameters,\r\n  ConnectIpsParameters,\r\n  OnScreenChangesParameters,\r\n  ConnectLocalIpsParameters,\r\n  ReorderStreamsParameters {\r\n  participantsAll: Participant[];\r\n  participants: Participant[];\r\n  dispActiveNames: string[];\r\n  requestList: Request[];\r\n  coHost: string;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  lock_screen: boolean;\r\n  firstAll: boolean;\r\n  membersReceived: boolean;\r\n  roomRecvIPs: string[];\r\n  deferScreenReceived: boolean;\r\n  screenId?: string;\r\n  shareScreenStarted: boolean;\r\n  meetingDisplayType: string;\r\n  audioSetting: string;\r\n  videoSetting: string;\r\n  screenshareSetting: string;\r\n  chatSetting: string;\r\n  socket: Socket;\r\n\r\n  updateParticipantsAll: (participantsAll: Participant[]) => void;\r\n  updateParticipants: (participants: Participant[]) => void;\r\n  updateRequestList: (requestList: Request[]) => void;\r\n  updateCoHost: (coHost: string) => void;\r\n  updateCoHostResponsibility: (coHostResponsibility: CoHostResponsibility[]) => void;\r\n  updateFirstAll: (firstAll: boolean) => void;\r\n  updateMembersReceived: (membersReceived: boolean) => void;\r\n  updateDeferScreenReceived: (deferScreenReceived: boolean) => void;\r\n  updateShareScreenStarted: (shareScreenStarted: boolean) => void;\r\n  updateAudioSetting: (audioSetting: string) => void;\r\n  updateVideoSetting: (videoSetting: string) => void;\r\n  updateScreenshareSetting: (screenshareSetting: string) => void;\r\n  updateChatSetting: (chatSetting: string) => void;\r\n  updateConsume_sockets: (consume_sockets: ConsumeSocket[]) => void;\r\n  updateRoomRecvIPs: (ips: string[]) => void;\r\n  updateIsLoadingModalVisible: (visible: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  onScreenChanges: OnScreenChangesType;\r\n  connectIps: ConnectIpsType;\r\n  connectLocalIps?: ConnectLocalIpsType;\r\n  sleep: SleepType;\r\n  reorderStreams: ReorderStreamsType;\r\n\r\n  getUpdatedAllParams: () => AllMembersRestParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface AllMembersRestOptions {\r\n  members: Participant[];\r\n  settings: Settings;\r\n  coHoste?: string;\r\n  coHostRes?: CoHostResponsibility[];\r\n  parameters: AllMembersRestParameters;\r\n  consume_sockets: ConsumeSocket[];\r\n  apiUserName: string;\r\n  apiKey: string;\r\n  apiToken: string;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type AllMembersRestType = (options: AllMembersRestOptions) => Promise<void>;\r\n\r\n/**\r\n * Manages participant settings and UI updates, including connecting IPs, reordering streams,\r\n * updating settings, and handling participant display based on various session parameters.\r\n *\r\n * @async\r\n * @param {AllMembersRestOptions} options - Parameters for managing members.\r\n * @param {Participant[]} options.members - The array of participant objects.\r\n * @param {Settings} options.settings - The session settings for audio, video, screenshare, and chat.\r\n * @param {string} [options.coHoste] - The current co-host name.\r\n * @param {CoHostResponsibility[]} [options.coHostRes] - The responsibilities assigned to the co-host.\r\n * @param {AllMembersRestParameters} options.parameters - Additional parameters for managing members and UI updates.\r\n * @param {ConsumeSocket[]} options.consume_sockets - Array of sockets for participant communication.\r\n * @param {string} options.apiUserName - API username for authentication.\r\n * @param {string} options.apiKey - API key for authentication.\r\n * @param {string} options.apiToken - API token for authentication.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when updates and changes for members are completed.\r\n *\r\n * @example\r\n * ```typescript\r\n * const allMembersRestService = new AllMembersRest();\r\n * await allMembersRestService.allMembersRest({\r\n *   members: [{ name: 'John', isBanned: false, isSuspended: false, audioID: '123', videoID: '456' }],\r\n *   settings: ['enabled', 'HD', 'allowed', 'public'],\r\n *   coHoste: 'Jane',\r\n *   coHostRes: ['manage-chat'],\r\n *   parameters: {\r\n *     participantsAll: [],\r\n *     participants: [],\r\n *     dispActiveNames: ['John'],\r\n *     requestList: [],\r\n *     coHost: '',\r\n *     coHostResponsibility: [],\r\n *     lock_screen: false,\r\n *     firstAll: false,\r\n *     membersReceived: false,\r\n *     roomRecvIPs: [],\r\n *     deferScreenReceived: false,\r\n *     screenId: null,\r\n *     shareScreenStarted: false,\r\n *     meetingDisplayType: 'grid',\r\n *     audioSetting: '',\r\n *     videoSetting: '',\r\n *     screenshareSetting: '',\r\n *     chatSetting: '',\r\n *     socket: mySocket,\r\n *     updateParticipantsAll: (participantsAll) => console.log(participantsAll),\r\n *     updateParticipants: (participants) => console.log(participants),\r\n *     updateRequestList: (requestList) => console.log(requestList),\r\n *     updateCoHost: (coHost) => console.log(coHost),\r\n *     updateCoHostResponsibility: (coHostRes) => console.log(coHostRes),\r\n *     updateFirstAll: (firstAll) => console.log(firstAll),\r\n *     updateMembersReceived: (membersReceived) => console.log(membersReceived),\r\n *     updateDeferScreenReceived: (deferScreenReceived) => console.log(deferScreenReceived),\r\n *     updateShareScreenStarted: (shareScreenStarted) => console.log(shareScreenStarted),\r\n *     updateAudioSetting: (audioSetting) => console.log(audioSetting),\r\n *     updateVideoSetting: (videoSetting) => console.log(videoSetting),\r\n *     updateScreenshareSetting: (screenshareSetting) => console.log(screenshareSetting),\r\n *     updateChatSetting: (chatSetting) => console.log(chatSetting),\r\n *     updateConsume_sockets: (sockets) => console.log(sockets),\r\n *     updateRoomRecvIPs: (ips) => console.log(ips),\r\n *     updateIsLoadingModalVisible: (visible) => console.log(visible),\r\n *     onScreenChanges: (params) => console.log('onScreenChanges called with', params),\r\n *     connectIps: async (params) => [['socket1'], ['ip1']],\r\n *     connectLocalIps: async (params) => [['socket1'], ['ip1']],\r\n *     sleep: async ({ ms }) => new Promise((resolve) => setTimeout(resolve, ms)),\r\n *     reorderStreams: async (params) => console.log('reorderStreams called with', params),\r\n *   },\r\n *   consume_sockets: [{ socketId: 'abc123' }],\r\n *   apiUserName: 'testUser',\r\n *   apiKey: 'apiKeyExample',\r\n *   apiToken: 'apiTokenExample',\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AllMembersRest {\r\n  /**\r\n   * Handles various tasks related to participant management and UI updates.\r\n   * @param {Object} params - The parameters passed to the allMembersRest method.\r\n   * @param {Array} params.members - The array of participant members.\r\n   * @param {Array} params.settings - The array of settings.\r\n   * @param {boolean} params.coHoste - The co-host state.\r\n   * @param {boolean} params.coHostRes - The co-host responsibility state.\r\n   * @param {Object} params.parameters - The object containing parameters for the allMembersRest method.\r\n   * @param {Array} params.consume_sockets - The array of consume sockets.\r\n   * @param {string} params.apiUserName - The API username.\r\n   * @param {string} params.apiKey - The API key.\r\n   * @param {string} params.apiToken - The API token.\r\n   * @returns {void} - No return value.\r\n   */\r\n  async allMembersRest({\r\n    members,\r\n    settings,\r\n    coHoste,\r\n    coHostRes,\r\n    parameters,\r\n    consume_sockets,\r\n    apiUserName,\r\n    apiKey,\r\n    apiToken,\r\n  }: AllMembersRestOptions): Promise<void> {\r\n    let {\r\n      participantsAll,\r\n      participants,\r\n      dispActiveNames,\r\n      requestList,\r\n      coHost,\r\n      coHostResponsibility,\r\n      lock_screen,\r\n      firstAll,\r\n      membersReceived,\r\n      roomRecvIPs,\r\n      deferScreenReceived,\r\n      screenId,\r\n      shareScreenStarted,\r\n      meetingDisplayType,\r\n      audioSetting,\r\n      videoSetting,\r\n      screenshareSetting,\r\n      chatSetting,\r\n      socket,\r\n      updateParticipantsAll,\r\n      updateParticipants,\r\n      updateRequestList,\r\n      updateCoHost,\r\n      updateCoHostResponsibility,\r\n      updateFirstAll,\r\n      updateMembersReceived,\r\n      updateDeferScreenReceived,\r\n      updateShareScreenStarted,\r\n      updateAudioSetting,\r\n      updateVideoSetting,\r\n      updateScreenshareSetting,\r\n      updateChatSetting,\r\n      updateConsume_sockets,\r\n      updateRoomRecvIPs,\r\n      updateIsLoadingModalVisible,\r\n\r\n      onScreenChanges,\r\n      connectIps,\r\n      connectLocalIps,\r\n      reorderStreams,\r\n      sleep,\r\n    } = parameters;\r\n\r\n    // Filter out the participant that isBanned == true or isSuspended == true\r\n    participantsAll = members.map((participant) => ({\r\n      isBanned: participant.isBanned,\r\n      isSuspended: participant.isSuspended,\r\n      name: participant.name,\r\n      audioID: participant.audioID,\r\n      videoID: participant.videoID,\r\n    }));\r\n    updateParticipantsAll(participantsAll);\r\n\r\n    participants = members.filter(\r\n      (participant) => !participant.isBanned && !participant.isSuspended,\r\n    );\r\n    updateParticipants(participants);\r\n\r\n    // Check if dispActiveNames is not empty and contains the name of the participant that is not in the participants array\r\n    if (dispActiveNames.length > 0) {\r\n      let dispActiveNames_ = dispActiveNames.filter(\r\n        (name: string) => !participants.map((participant: any) => participant.name).includes(name),\r\n      );\r\n      if (dispActiveNames_.length > 0 && membersReceived) {\r\n        await reorderStreams({ add: false, screenChanged: true, parameters });\r\n      }\r\n    }\r\n\r\n    // check to expect no roomRecvIPs for local instance\r\n    let onLocal = false;\r\n    if (roomRecvIPs.length === 1 && roomRecvIPs[0] === \"none\") {\r\n      onLocal = true;\r\n    }\r\n\r\n    // Operations to update the UI; make sure we are connected to the server before updating the UI\r\n    if (!membersReceived && !onLocal) {\r\n      if (roomRecvIPs.length < 1) {\r\n        // Keep checking every 0.01s\r\n        let checkIPs = setInterval(async () => {\r\n          if (roomRecvIPs.length > 0) {\r\n            clearInterval(checkIPs);\r\n\r\n            if (deferScreenReceived && screenId != null) {\r\n              shareScreenStarted = true;\r\n              updateShareScreenStarted(shareScreenStarted);\r\n            }\r\n\r\n            const [sockets_, ips_] = await connectIps({\r\n              consume_sockets,\r\n              remIP: roomRecvIPs,\r\n              parameters,\r\n              apiUserName,\r\n              apiKey,\r\n              apiToken,\r\n            });\r\n\r\n            if (sockets_ && ips_) {\r\n              updateConsume_sockets(sockets_);\r\n              updateRoomRecvIPs(ips_);\r\n            }\r\n\r\n            membersReceived = true;\r\n            updateMembersReceived(membersReceived);\r\n\r\n            await sleep({ ms: 250 });\r\n            updateIsLoadingModalVisible(false);\r\n            deferScreenReceived = false;\r\n            updateDeferScreenReceived(deferScreenReceived);\r\n          }\r\n        }, 10);\r\n      } else {\r\n        const [sockets_, ips_] = await connectIps({\r\n          consume_sockets,\r\n          remIP: roomRecvIPs,\r\n          parameters,\r\n          apiUserName,\r\n          apiKey,\r\n          apiToken,\r\n        });\r\n\r\n        if (sockets_ && ips_) {\r\n          updateConsume_sockets(sockets_);\r\n          updateRoomRecvIPs(ips_);\r\n        }\r\n        membersReceived = true;\r\n        updateMembersReceived(membersReceived);\r\n\r\n        if (deferScreenReceived && screenId != null) {\r\n          shareScreenStarted = true;\r\n          updateShareScreenStarted(shareScreenStarted);\r\n        }\r\n\r\n        await sleep({ ms: 250 });\r\n        updateIsLoadingModalVisible(false);\r\n        deferScreenReceived = false;\r\n        updateDeferScreenReceived(deferScreenReceived);\r\n      }\r\n    } else {\r\n      if (screenId != null) {\r\n        let host = participants.find(\r\n          (participant: any) => participant.ScreenID == screenId && participant.ScreenOn == true,\r\n        );\r\n        if (deferScreenReceived && screenId != null && host) {\r\n          shareScreenStarted = true;\r\n          updateShareScreenStarted(shareScreenStarted);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (onLocal && !membersReceived) {\r\n      if (connectLocalIps) {\r\n        await connectLocalIps({ socket: socket, parameters });\r\n      }\r\n      await sleep({ ms: 100 });\r\n      updateIsLoadingModalVisible(false);\r\n    }\r\n\r\n    // Return requests for only ids that are in the participants array and update the count badge\r\n    let requests = requestList;\r\n    requestList = requests.filter((request: any) =>\r\n      participants.some((participant: any) => participant.id == request.id),\r\n    );\r\n    updateRequestList(requestList);\r\n\r\n    if (coHoste !== undefined && coHoste !== null) {\r\n      coHost = coHoste;\r\n    }\r\n    if (coHost !== undefined && coHost !== null) {\r\n      updateCoHost(coHost);\r\n    }\r\n    if (coHostRes !== undefined && coHostRes !== null) {\r\n      coHostResponsibility = coHostRes;\r\n    }\r\n    updateCoHostResponsibility(coHostResponsibility);\r\n\r\n    try {\r\n      if (!lock_screen && !firstAll) {\r\n        await onScreenChanges({ parameters });\r\n\r\n        if (meetingDisplayType != 'all') {\r\n          firstAll = true;\r\n          updateFirstAll(firstAll);\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.log('allMembersRest OnScreen', error);\r\n    }\r\n\r\n    try {\r\n      if (membersReceived) {\r\n        audioSetting = settings[0];\r\n        videoSetting = settings[1];\r\n        screenshareSetting = settings[2];\r\n        chatSetting = settings[3];\r\n\r\n        updateAudioSetting(audioSetting);\r\n        updateVideoSetting(videoSetting);\r\n        updateScreenshareSetting(screenshareSetting);\r\n        updateChatSetting(chatSetting);\r\n      }\r\n    } catch (error) {\r\n      console.log('allMembersRest Settings', error);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { WaitingRoomParticipant } from '../../@types/types';\r\nexport interface AllWaitingRoomMembersOptions {\r\n  waitingParticipants: WaitingRoomParticipant[];\r\n  updateWaitingRoomList: (participants: WaitingRoomParticipant[]) => void;\r\n  updateTotalReqWait: (totalReqs: number) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type AllWaitingRoomMembersType = (options: AllWaitingRoomMembersOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle updating the list and count of waiting room participants.\r\n *\r\n * @class\r\n * @name AllWaitingRoomMembers\r\n * @description This service updates the waiting room participants list and the total count of participants waiting to join.\r\n *\r\n * @method\r\n * @async\r\n * @name allWaitingRoomMembers\r\n * @param {AllWaitingRoomMembersOptions} options - The options for updating the waiting room data.\r\n * @param {WaitingRoomParticipant[]} options.waitingParticipants - An array of participants currently in the waiting room.\r\n * @param {Function} options.updateWaitingRoomList - Function to update the waiting room participants list.\r\n * @param {Function} options.updateTotalReqWait - Function to update the total count of waiting room participants.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the updates to the waiting room data are complete.\r\n *\r\n * @example\r\n * ```typescript\r\n * const allWaitingRoomMembersService = new AllWaitingRoomMembers();\r\n * await allWaitingRoomMembersService.allWaitingRoomMembers({\r\n *   waitingParticipants: [{ name: 'John Doe', isApproved: false }],\r\n *   updateWaitingRoomList: (participants) => console.log(participants),\r\n *   updateTotalReqWait: (total) => console.log(`Total requests: ${total}`)\r\n * });\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AllWaitingRoomMembers {\r\n  /**\r\n   * Updates the waiting room participants list and the total count of waiting room participants.\r\n   *\r\n   * @param {Object} options - The options object.\r\n   * @param {Array} options.waitingParticipants - An array of participants currently in the waiting room.\r\n   * @param {Function} options.updateWaitingRoomList - A function to update the waiting room participants list.\r\n   * @param {Function} options.updateTotalReqWait - A function to update the total count of waiting room participants.\r\n   * @returns {Promise<void>} A promise that resolves when the updates are complete.\r\n   */\r\n  allWaitingRoomMembers = async ({\r\n    waitingParticipants,\r\n    updateWaitingRoomList,\r\n    updateTotalReqWait,\r\n  }: AllWaitingRoomMembersOptions): Promise<void> => {\r\n    // Calculate the total number of waiting room participants\r\n    const totalReqs = waitingParticipants.length;\r\n\r\n    // Update the waiting room participants list\r\n    updateWaitingRoomList(waitingParticipants);\r\n\r\n    // Update the total count of waiting room participants\r\n    updateTotalReqWait(totalReqs);\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Participant, ReorderStreamsType, ReorderStreamsParameters } from '../../@types/types';\r\n\r\nexport interface BanParticipantParameters extends ReorderStreamsParameters {\r\n  activeNames: string[];\r\n  dispActiveNames: string[];\r\n  participants: Participant[];\r\n  updateParticipants: (participants: Participant[]) => void;\r\n\r\n  // mediasfu functions\r\n  reorderStreams: ReorderStreamsType;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface BanParticipantOptions {\r\n  name: string;\r\n  parameters: BanParticipantParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type BanParticipantType = (options: BanParticipantOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle banning a participant from the session.\r\n *\r\n * @class\r\n * @name BanParticipant\r\n * @description This service provides a method to remove a participant from active lists and update the session's participant array, followed by reordering the streams.\r\n *\r\n * @method\r\n * banParticipant\r\n * @async\r\n * @param {BanParticipantOptions} options - The options for banning a participant.\r\n * @param {string} options.name - The name of the participant to be banned.\r\n * @param {BanParticipantParameters} options.parameters - Parameters required for the banning operation.\r\n * @param {string[]} options.parameters.activeNames - Array of active participant names.\r\n * @param {string[]} options.parameters.dispActiveNames - Array of display participant names.\r\n * @param {Participant[]} options.parameters.participants - Array of current session participants.\r\n * @param {Function} options.parameters.updateParticipants - Function to update the participants array.\r\n * @param {Function} options.parameters.reorderStreams - Function to reorder the streams after removing the participant.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the participant has been banned and streams reordered.\r\n *\r\n * @example\r\n * ```typescript\r\n * const banParticipantService = new BanParticipant();\r\n * await banParticipantService.banParticipant({\r\n *   name: 'John Doe',\r\n *   parameters: {\r\n *     activeNames: ['John Doe', 'Jane Smith'],\r\n *     dispActiveNames: ['John Doe', 'Jane Smith'],\r\n *     participants: [{ name: 'John Doe', isBanned: false }, { name: 'Jane Smith', isBanned: false }],\r\n *     updateParticipants: (updated) => console.log(updated),\r\n *     reorderStreams: async () => { }\r\n *   }\r\n * });\r\n * ```\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class BanParticipant {\r\n  /**\r\n   * Bans a participant from the session by removing them from the active and display names arrays,\r\n   * updating the participants list, and reordering the streams.\r\n   *\r\n   * @param {BanParticipantOptions} options - The options for banning a participant.\r\n   * @param {string} options.name - The name of the participant to be banned.\r\n   * @param {Object} options.parameters - The parameters required for banning the participant.\r\n   * @param {string[]} options.parameters.activeNames - The array of active participant names.\r\n   * @param {string[]} options.parameters.dispActiveNames - The array of display participant names.\r\n   * @param {Object[]} options.parameters.participants - The array of participant objects.\r\n   * @param {Function} options.parameters.updateParticipants - The function to update the participants array.\r\n   * @param {Function} options.parameters.reorderStreams - The function to reorder the streams.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the participant has been banned and streams reordered.\r\n   */\r\n  banParticipant = async ({ name, parameters }: BanParticipantOptions): Promise<void> => {\r\n    const { activeNames, dispActiveNames, participants, updateParticipants, reorderStreams } =\r\n      parameters;\r\n\r\n    // Check if the participant is in the active or display names array\r\n    if (activeNames.includes(name) || dispActiveNames.includes(name)) {\r\n      // Filter out the banned participant from the participants array\r\n      const updatedParticipants = participants.filter(\r\n        (participant: Participant) => participant.name !== name,\r\n      );\r\n\r\n      // Update the participants array\r\n      updateParticipants(updatedParticipants);\r\n\r\n      // Reorder streams after participant removal\r\n      await reorderStreams({ add: false, screenChanged: true, parameters });\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  OnScreenChangesType,\r\n  StopShareScreenType,\r\n  DisconnectSendTransportVideoType,\r\n  DisconnectSendTransportAudioType,\r\n  DisconnectSendTransportScreenType,\r\n  OnScreenChangesParameters,\r\n  StopShareScreenParameters,\r\n  DisconnectSendTransportVideoParameters,\r\n  DisconnectSendTransportAudioParameters,\r\n  DisconnectSendTransportScreenParameters,\r\n} from '../../@types/types';\r\nexport interface ControlMediaHostParameters\r\n  extends OnScreenChangesParameters,\r\n    StopShareScreenParameters,\r\n    DisconnectSendTransportVideoParameters,\r\n    DisconnectSendTransportAudioParameters,\r\n    DisconnectSendTransportScreenParameters {\r\n  updateAdminRestrictSetting: (value: boolean) => void;\r\n  localStream: MediaStream | null;\r\n  updateLocalStream: (stream: MediaStream | null) => void;\r\n  updateAudioAlreadyOn: (value: boolean) => void;\r\n  localStreamScreen: MediaStream | null;\r\n  updateLocalStreamScreen: (stream: MediaStream | null) => void;\r\n  localStreamVideo: MediaStream | null;\r\n  updateLocalStreamVideo: (stream: MediaStream | null) => void;\r\n\r\n  updateScreenAlreadyOn: (value: boolean) => void;\r\n  updateVideoAlreadyOn: (value: boolean) => void;\r\n  updateChatAlreadyOn: (value: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  onScreenChanges: OnScreenChangesType;\r\n  stopShareScreen: StopShareScreenType;\r\n  disconnectSendTransportVideo: DisconnectSendTransportVideoType;\r\n  disconnectSendTransportAudio: DisconnectSendTransportAudioType;\r\n  disconnectSendTransportScreen: DisconnectSendTransportScreenType;\r\n\r\n  getUpdatedAllParams: () => ControlMediaHostParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ControlMediaHostOptions {\r\n  type: 'audio' | 'video' | 'screenshare' | 'chat' | 'all';\r\n  parameters: ControlMediaHostParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ControlMediaHostType = (options: ControlMediaHostOptions) => Promise<void>;\r\n\r\n/**\r\n * Service for controlling participant media in a session, with options to manage audio, video, screenshare, and chat functionalities.\r\n *\r\n * @class\r\n * @name ControlMediaHost\r\n * @description This service provides the host with control over a participant's media (audio, video, screenshare, chat), with options to enable or disable these functionalities individually or all at once.\r\n *\r\n * @method\r\n * controlMediaHost\r\n * @async\r\n * @param {ControlMediaHostOptions} options - Options to specify which media type to control and provide necessary parameters.\r\n * @param {string} options.type - The media type to control ('audio', 'video', 'screenshare', 'chat', 'all').\r\n * @param {ControlMediaHostParameters} options.parameters - Additional parameters, functions, and media streams necessary to perform the media control operations.\r\n *\r\n * @returns {Promise<void>} - A promise that resolves when the media control operation is complete.\r\n *\r\n * @example\r\n * ```typescript\r\n * const controlMediaHostService = new ControlMediaHost();\r\n * await controlMediaHostService.controlMediaHost({\r\n *   type: 'audio',\r\n *   parameters: {\r\n *     updateAdminRestrictSetting: (value) => console.log(value),\r\n *     localStream: myLocalStream,\r\n *     updateLocalStream: (stream) => console.log(stream),\r\n *     updateAudioAlreadyOn: (value) => console.log(value),\r\n *     onScreenChanges: async () => { },\r\n *     disconnectSendTransportAudio: async () => { },\r\n *     getUpdatedAllParams: () => ({ }),\r\n *   }\r\n * });\r\n * ```\r\n *\r\n * @remarks\r\n * - This function handles the control of audio, video, screenshare, or chat for a participant based on the specified type.\r\n * - For `all` type, it sequentially controls each media type to ensure all are turned off.\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ControlMediaHost {\r\n  /**\r\n   * Controls the media (audio, video, screenshare, chat) of a participant as a host.\r\n   *\r\n   * @param {object} options - The function parameters.\r\n   * @param {string} options.type - The type of media to control ('audio', 'video', 'screenshare', 'chat', 'all').\r\n   * @param {object} options.parameters - Additional parameters needed for the function.\r\n   * @param {boolean} options.parameters.adminRestrictSetting - The setting to restrict host control.\r\n   * @param {function} options.parameters.updateAdminRestrictSetting - Function to update the adminRestrictSetting.\r\n   * @param {MediaStream} options.parameters.localStream - The local audio and video stream.\r\n   * @param {function} options.parameters.updateLocalStream - Function to update the local audio and video stream.\r\n   * @param {boolean} options.parameters.audioAlreadyOn - Indicates whether audio is currently on.\r\n   * @param {function} options.parameters.updateAudioAlreadyOn - Function to update the audioAlreadyOn status.\r\n   * @param {MediaStream} options.parameters.localStreamScreen - The local screenshare stream.\r\n   * @param {function} options.parameters.updateLocalStreamScreen - Function to update the local screenshare stream.\r\n   * @param {MediaStream} options.parameters.localStreamVideo - The local video stream.\r\n   * @param {function} options.parameters.updateLocalStreamVideo - Function to update the local video stream.\r\n   * @param {boolean} options.parameters.screenAlreadyOn - Indicates whether screenshare is currently on.\r\n   * @param {function} options.parameters.updateScreenAlreadyOn - Function to update the screenAlreadyOn status.\r\n   * @param {boolean} options.parameters.videoAlreadyOn - Indicates whether video is currently on.\r\n   * @param {function} options.parameters.updateVideoAlreadyOn - Function to update the videoAlreadyOn status.\r\n   * @param {boolean} options.parameters.chatAlreadyOn - Indicates whether chat is currently on.\r\n   * @param {function} options.parameters.updateChatAlreadyOn - Function to update the chatAlreadyOn status.\r\n   * @param {function} options.parameters.onScreenChanges - Function to handle changes in screen status.\r\n   * @param {function} options.parameters.stopShareScreen - Function to stop sharing the screen.\r\n   * @param {function} options.parameters.disconnectSendTransportVideo - Function to disconnect video send transport.\r\n   * @param {function} options.parameters.disconnectSendTransportAudio - Function to disconnect audio send transport.\r\n   * @param {function} options.parameters.disconnectSendTransportScreen - Function to disconnect screenshare send transport.\r\n   */\r\n  controlMediaHost = async ({ type, parameters }: ControlMediaHostOptions): Promise<void> => {\r\n    let {\r\n      updateAdminRestrictSetting,\r\n      updateLocalStream,\r\n      updateAudioAlreadyOn,\r\n      updateLocalStreamScreen,\r\n      updateLocalStreamVideo,\r\n      updateScreenAlreadyOn,\r\n      updateVideoAlreadyOn,\r\n      updateChatAlreadyOn,\r\n      onScreenChanges,\r\n      stopShareScreen,\r\n      disconnectSendTransportVideo,\r\n      disconnectSendTransportAudio,\r\n      disconnectSendTransportScreen,\r\n    } = parameters;\r\n\r\n    let { localStream, localStreamScreen, localStreamVideo } = parameters.getUpdatedAllParams();\r\n\r\n    try {\r\n      updateAdminRestrictSetting(true);\r\n\r\n      if (type === 'audio') {\r\n        if (localStream) {\r\n          localStream.getAudioTracks()[0].enabled = false;\r\n        }\r\n        updateLocalStream(localStream);\r\n        await disconnectSendTransportAudio({ parameters });\r\n        updateAudioAlreadyOn(false);\r\n      } else if (type === 'video') {\r\n        try {\r\n          if (localStream) {\r\n            localStream.getVideoTracks()[0].enabled = false;\r\n          }\r\n          updateLocalStream(localStream);\r\n          await disconnectSendTransportVideo({ parameters });\r\n          await onScreenChanges({ changed: true, parameters });\r\n          updateVideoAlreadyOn(false);\r\n        } catch {\r\n          /* handle error */\r\n        }\r\n        try {\r\n          if (localStreamVideo) {\r\n            localStreamVideo.getVideoTracks()[0].enabled = false;\r\n            updateLocalStreamVideo(localStreamVideo);\r\n            await disconnectSendTransportVideo({ parameters });\r\n            await onScreenChanges({ changed: true, parameters });\r\n            updateVideoAlreadyOn(false);\r\n          }\r\n        } catch (error) {\r\n          onScreenChanges({ changed: true, parameters });\r\n        }\r\n      } else if (type === 'screenshare') {\r\n        if (localStreamScreen) {\r\n          localStreamScreen.getVideoTracks()[0].enabled = false;\r\n        }\r\n        updateLocalStreamScreen(localStreamScreen);\r\n        await disconnectSendTransportScreen({ parameters });\r\n        await stopShareScreen({ parameters });\r\n        updateScreenAlreadyOn(false);\r\n      } else if (type === 'chat') {\r\n        updateChatAlreadyOn(false);\r\n      } else if (type === 'all') {\r\n        try {\r\n          if (localStream) {\r\n            localStream.getAudioTracks()[0].enabled = false;\r\n          }\r\n          updateLocalStream(localStream);\r\n          await disconnectSendTransportAudio({ parameters });\r\n          updateAudioAlreadyOn(false);\r\n        } catch {\r\n          /* handle error */\r\n        }\r\n\r\n        try {\r\n          if (localStreamScreen) {\r\n            localStreamScreen.getVideoTracks()[0].enabled = false;\r\n          }\r\n          updateLocalStreamScreen(localStreamScreen);\r\n          await disconnectSendTransportScreen({ parameters });\r\n          await stopShareScreen({ parameters });\r\n          updateScreenAlreadyOn(false);\r\n        } catch {\r\n          /* handle error */\r\n        }\r\n\r\n        try {\r\n          if (localStream) {\r\n            localStream.getVideoTracks()[0].enabled = false;\r\n          }\r\n          updateLocalStream(localStream);\r\n          await disconnectSendTransportVideo({ parameters });\r\n          await onScreenChanges({ changed: true, parameters });\r\n          updateVideoAlreadyOn(false);\r\n        } catch {\r\n          /* handle error */\r\n        }\r\n        try {\r\n          if (localStreamVideo) {\r\n            localStreamVideo.getVideoTracks()[0].enabled = false;\r\n          }\r\n          updateLocalStreamVideo(localStreamVideo);\r\n          await disconnectSendTransportVideo({ parameters });\r\n          await onScreenChanges({ changed: true, parameters });\r\n          updateVideoAlreadyOn(false);\r\n        } catch (error) {\r\n          onScreenChanges({ changed: true, parameters });\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.error('Error in controlMediaHost:', error);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\n\r\nexport interface DisconnectOptions {\r\n  showAlert?: ShowAlert;\r\n  redirectURL?: string;\r\n  onWeb: boolean;\r\n  updateValidated?: (isValidated: boolean) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type DisconnectType = (options: DisconnectOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle disconnection logic, providing options to redirect or display an alert message.\r\n *\r\n * @class\r\n * @name Disconnect\r\n * @description This service manages user disconnection by either redirecting the user to a specified URL (for web platforms) or showing a custom alert message.\r\n *\r\n * @method\r\n * disconnect\r\n * @async\r\n * @param {DisconnectOptions} options - The options for handling disconnection.\r\n * @param {Function} options.showAlert - Function to display an alert message if a redirect is not needed.\r\n * @param {string} options.redirectURL - The URL to redirect to upon disconnection, if applicable.\r\n * @param {boolean} options.onWeb - Flag indicating if the application is running on the web.\r\n * @param {Function} [options.updateValidated] - Optional function to update validation state, primarily for native applications.\r\n * @returns {Promise<void>} A promise that resolves when the disconnection process completes.\r\n *\r\n * @example\r\n * const disconnectOptions = {\r\n *   showAlert: (alert) => console.log(alert.message),\r\n *   redirectURL: 'https://example.com/home',\r\n *   onWeb: true,\r\n *   updateValidated: (isValid) => console.log(`Validation updated: ${isValid}`)\r\n * };\r\n * disconnectService.disconnect(disconnectOptions);\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Disconnect {\r\n  /**\r\n   * Handles the disconnection logic by either redirecting to a specified URL or showing an alert.\r\n   *\r\n   * @param {DisconnectOptions} options - The options for handling disconnection.\r\n   * @param {Function} options.showAlert - Function to display an alert message.\r\n   * @param {string} options.redirectURL - URL to redirect to if on the web.\r\n   * @param {boolean} options.onWeb - Flag indicating if the operation is on the web.\r\n   * @returns {Promise<void>} A promise that resolves when the disconnection handling is complete.\r\n   */\r\n  disconnect = async ({ showAlert, redirectURL, onWeb }: DisconnectOptions): Promise<void> => {\r\n    // Redirect to the specified URL on the web\r\n    if (onWeb && redirectURL) {\r\n      window.location.href = redirectURL;\r\n    } else {\r\n      // Display an alert and update the validated state\r\n      if (showAlert) {\r\n        showAlert({\r\n          message: 'You have been disconnected from the session.',\r\n          type: 'danger',\r\n          duration: 2000,\r\n        });\r\n      }\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface DisconnectUserSelfOptions {\r\n  member: string;\r\n  roomName: string;\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type DisconnectUserSelfType = (options: DisconnectUserSelfOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle self-disconnection and banning of a user from a room.\r\n *\r\n * @class\r\n * @name DisconnectUserSelf\r\n * @description This service manages the disconnection of a user from a specified room and initiates a ban on the user.\r\n *\r\n * @method\r\n * disconnectUserSelf\r\n * @async\r\n * @param {DisconnectUserSelfOptions} options - The options required to disconnect the user.\r\n * @param {string} options.member - The identifier of the member to be disconnected.\r\n * @param {string} options.roomName - The name of the room from which the user will be disconnected.\r\n * @param {Socket} options.socket - The socket instance used to emit the disconnection and ban request.\r\n * @param {Socket} [options.localSocket] - The local socket instance used to emit the disconnection request.\r\n * @returns {Promise<void>} A promise that resolves when the disconnection request is sent to the server.\r\n *\r\n * @example\r\n * const disconnectUserSelfOptions = {\r\n *   member: 'user123',\r\n *   roomName: 'room456',\r\n *   socket: mySocketInstance\r\n *   localSocket: myLocalSocketInstance\r\n * };\r\n * await disconnectUserSelfService.disconnectUserSelf(disconnectUserSelfOptions);\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class DisconnectUserSelf {\r\n  /**\r\n   * Disconnects the user from the specified room and bans them.\r\n   *\r\n   * @param {DisconnectUserSelfOptions} options - The options for disconnecting the user.\r\n   * @param {Object} options.member - The member object representing the user to disconnect.\r\n   * @param {string} options.roomName - The name of the room from which the user will be disconnected.\r\n   * @param {Socket} options.socket - The socket instance used to emit the disconnection request.\r\n   * @param {Socket} [options.localSocket] - The local socket instance used to emit the disconnection request.\r\n   * @returns {Promise<void>} A promise that resolves when the disconnection request has been emitted.\r\n   */\r\n  disconnectUserSelf = async ({\r\n    member,\r\n    roomName,\r\n    socket,\r\n    localSocket,\r\n  }: DisconnectUserSelfOptions): Promise<void> => {\r\n    // Update that the user needs to be disconnected; this is initiated by the host when banning a user\r\n    socket.emit('disconnectUser', { member, roomName, ban: true });\r\n\r\n    try {\r\n      if (localSocket && localSocket.id) {\r\n        // Emit the disconnection request to the local socket, indicating that the user is being banned\r\n        localSocket.emit(\"disconnectUser\", {\r\n          member: member,\r\n          roomName: roomName,\r\n          ban: true,\r\n        });\r\n      }\r\n    } catch  {\r\n      // Do nothing\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport {\r\n  ConnectIpsType,\r\n  ConnectIpsParameters,\r\n  AltDomains,\r\n  ConsumeSocket,\r\n} from '../../@types/types';\r\nimport { RtpCapabilities } from 'mediasoup-client/lib/types';\r\n\r\nexport interface GetDomainsParameters extends ConnectIpsParameters {\r\n  roomRecvIPs: string[];\r\n  rtpCapabilities: RtpCapabilities | null;\r\n  consume_sockets: ConsumeSocket[];\r\n\r\n  // mediasfu functions\r\n  connectIps: ConnectIpsType;\r\n  getUpdatedAllParams: () => GetDomainsParameters;\r\n\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface GetDomainsOptions {\r\n  domains: string[];\r\n  alt_domains: AltDomains;\r\n  apiUserName: string;\r\n  apiKey: string;\r\n  apiToken: string;\r\n  parameters: GetDomainsParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type GetDomainsType = (options: GetDomainsOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle domain-related operations, such as retrieving and processing domains for connection.\r\n *\r\n * @class\r\n * @name GetDomains\r\n * @description This service provides a method to retrieve and process domains by connecting IPs that are not currently present in the room.\r\n *\r\n * @method\r\n * getDomains\r\n * @async\r\n * @param {GetDomainsOptions} options - The options for retrieving and connecting domains.\r\n * @param {string[]} options.domains - The list of domains to process.\r\n * @param {AltDomains} options.alt_domains - An object mapping primary domains to alternative domains.\r\n * @param {string} options.apiUserName - The API username for authentication.\r\n * @param {string} options.apiKey - The API key for authentication.\r\n * @param {string} options.apiToken - The API token for authentication.\r\n * @param {GetDomainsParameters} options.parameters - Additional parameters for the operation.\r\n * @param {string[]} options.parameters.roomRecvIPs - The list of IP addresses already connected in the room.\r\n * @param {Function} options.parameters.getUpdatedAllParams - A function to get updated parameters.\r\n * @param {Function} options.parameters.connectIps - A function to connect IPs that are not currently present.\r\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n * @throws {Error} Throws an error if the domain retrieval or connection fails.\r\n *\r\n * @example\r\n * const options = {\r\n *   domains: ['example.com', 'example.org'],\r\n *   alt_domains: { 'example.com': 'alt-example.com' },\r\n *   apiUserName: 'user123',\r\n *   apiKey: 'key123',\r\n *   apiToken: 'token123',\r\n *   parameters: {\r\n *     roomRecvIPs: ['192.168.1.1'],\r\n *     getUpdatedAllParams: () => updatedParameters,\r\n *     connectIps: connectIpsFunction,\r\n *   }\r\n * };\r\n * getDomainsService.getDomains(options);\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class GetDomains {\r\n  getDomains = async ({\r\n    domains,\r\n    alt_domains,\r\n    apiUserName,\r\n    apiKey,\r\n    apiToken,\r\n    parameters,\r\n  }: GetDomainsOptions): Promise<void> => {\r\n    const { roomRecvIPs, connectIps } = parameters;\r\n\r\n    const ipsToConnect: string[] = [];\r\n\r\n    let updatedConsumeSockets = parameters.getUpdatedAllParams().consume_sockets;\r\n\r\n    try {\r\n      for (const domain of domains) {\r\n        const ipToCheck = alt_domains[domain] || domain;\r\n        // Check if the IP is already in roomRecvIPs\r\n        if (!roomRecvIPs.includes(ipToCheck)) {\r\n          ipsToConnect.push(ipToCheck);\r\n        }\r\n      }\r\n\r\n      const [,] = await connectIps({\r\n        consume_sockets: updatedConsumeSockets,\r\n        remIP: ipsToConnect,\r\n        parameters,\r\n        apiUserName,\r\n        apiKey,\r\n        apiToken,\r\n      });\r\n\r\n      // Handle sockets_ and ips_ if needed\r\n    } catch (error) {\r\n      console.error('Error in getDomains: ', error);\r\n      throw new Error('Failed to retrieve domains.');\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert, Request, RequestResponse } from '../../@types/types';\r\n\r\nexport interface HostRequestResponseOptions {\r\n  requestResponse: RequestResponse;\r\n\r\n  showAlert?: ShowAlert;\r\n  requestList: Request[];\r\n  updateRequestList: (requestList: Request[]) => void;\r\n  updateMicAction: (action: boolean) => void;\r\n  updateVideoAction: (action: boolean) => void;\r\n  updateScreenAction: (action: boolean) => void;\r\n  updateChatAction: (action: boolean) => void;\r\n  updateAudioRequestState: (state: string | null) => void;\r\n  updateVideoRequestState: (state: string | null) => void;\r\n  updateScreenRequestState: (state: string | null) => void;\r\n  updateChatRequestState: (state: string | null) => void;\r\n  updateAudioRequestTime: (time: number) => void;\r\n  updateVideoRequestTime: (time: number) => void;\r\n  updateScreenRequestTime: (time: number) => void;\r\n  updateChatRequestTime: (time: number) => void;\r\n  updateRequestIntervalSeconds: number;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type HostRequestResponseType = (options: HostRequestResponseOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle host responses to participant requests, including updating states and showing relevant alerts.\r\n *\r\n * @class\r\n * @name HostRequestResponse\r\n * @description\r\n * Manages host responses to requests (e.g., microphone, video, screenshare, chat) by updating the state of actions and triggering alerts based on acceptance or rejection.\r\n *\r\n * @method\r\n * hostRequestResponse\r\n * @async\r\n *\r\n * @param {HostRequestResponseOptions} options - Options for handling the host request response:\r\n *   - `requestResponse` {RequestResponse}: The request response object.\r\n *   - `showAlert` {Function}: Optional alert function for notifications.\r\n *   - `requestList` {Request[]}: The current list of requests.\r\n *   - `updateRequestList` {Function}: Updates the request list.\r\n *   - `updateMicAction`, `updateVideoAction`, `updateScreenAction`, `updateChatAction` {Function}: Update functions for respective actions.\r\n *   - `updateAudioRequestState`, `updateVideoRequestState`, `updateScreenRequestState`, `updateChatRequestState` {Function}: Updates request states.\r\n *   - `updateAudioRequestTime`, `updateVideoRequestTime`, `updateScreenRequestTime`, `updateChatRequestTime` {Function}: Update functions for request timers.\r\n *   - `updateRequestIntervalSeconds` {number}: Interval in seconds to update request time.\r\n *\r\n * @returns {Promise<void>} Resolves once the request response has been handled.\r\n *\r\n * @example\r\n * const options = {\r\n *   requestResponse: { id: '1', type: 'fa-microphone', action: 'accepted' },\r\n *   showAlert: alert => console.log(alert.message),\r\n *   requestList: [{ id: '1', type: 'fa-microphone' }],\r\n *   updateRequestList: list => console.log(list),\r\n *   updateMicAction: state => console.log(state),\r\n *   updateAudioRequestState: state => console.log(state),\r\n *   updateAudioRequestTime: time => console.log(time),\r\n *   updateRequestIntervalSeconds: 30,\r\n * };\r\n * hostRequestResponseService.hostRequestResponse(options);\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class HostRequestResponse {\r\n  hostRequestResponse = async ({\r\n    requestResponse,\r\n    showAlert,\r\n    requestList,\r\n    updateRequestList,\r\n    updateMicAction,\r\n    updateVideoAction,\r\n    updateScreenAction,\r\n    updateChatAction,\r\n    updateAudioRequestState,\r\n    updateVideoRequestState,\r\n    updateScreenRequestState,\r\n    updateChatRequestState,\r\n    updateAudioRequestTime,\r\n    updateVideoRequestTime,\r\n    updateScreenRequestTime,\r\n    updateChatRequestTime,\r\n    updateRequestIntervalSeconds,\r\n  }: HostRequestResponseOptions): Promise<void> => {\r\n    // Filter out the request from the list\r\n    const filteredRequests = requestList.filter(\r\n      (request) =>\r\n        request.id !== requestResponse.id &&\r\n        request.icon !== requestResponse.type &&\r\n        request.name !== requestResponse.name &&\r\n        request.username !== requestResponse.username,\r\n    );\r\n    updateRequestList(filteredRequests);\r\n\r\n    const requestType = requestResponse.type;\r\n\r\n    // Handle accepted actions\r\n    if (requestResponse.action === 'accepted') {\r\n      switch (requestType) {\r\n        case 'fa-microphone':\r\n          showAlert?.({\r\n            message: 'Unmute request was accepted; click the mic button again to begin.',\r\n            type: 'success',\r\n            duration: 10000,\r\n          });\r\n          updateMicAction(true);\r\n          updateAudioRequestState('accepted');\r\n          break;\r\n        case 'fa-video':\r\n          showAlert?.({\r\n            message: 'Video request was accepted; click the video button again to begin.',\r\n            type: 'success',\r\n            duration: 10000,\r\n          });\r\n          updateVideoAction(true);\r\n          updateVideoRequestState('accepted');\r\n          break;\r\n        case 'fa-desktop':\r\n          showAlert?.({\r\n            message: 'Screenshare request was accepted; click the screen button again to begin.',\r\n            type: 'success',\r\n            duration: 10000,\r\n          });\r\n          updateScreenAction(true);\r\n          updateScreenRequestState('accepted');\r\n          break;\r\n        case 'fa-comments':\r\n          showAlert?.({\r\n            message: 'Chat request was accepted; click the chat button again to begin.',\r\n            type: 'success',\r\n            duration: 10000,\r\n          });\r\n          updateChatAction(true);\r\n          updateChatRequestState('accepted');\r\n          break;\r\n      }\r\n    } else {\r\n      // Handle rejected actions\r\n      let timerDate: Date;\r\n      switch (requestType) {\r\n        case 'fa-microphone':\r\n          showAlert?.({\r\n            message: 'Unmute request was not accepted',\r\n            type: 'danger',\r\n            duration: 10000,\r\n          });\r\n          updateAudioRequestState('rejected');\r\n          timerDate = new Date();\r\n          timerDate.setSeconds(timerDate.getSeconds() + updateRequestIntervalSeconds);\r\n          updateAudioRequestTime(timerDate.getTime());\r\n          break;\r\n        case 'fa-video':\r\n          showAlert?.({\r\n            message: 'Video request was not accepted',\r\n            type: 'danger',\r\n            duration: 10000,\r\n          });\r\n          updateVideoRequestState('rejected');\r\n          timerDate = new Date();\r\n          timerDate.setSeconds(timerDate.getSeconds() + updateRequestIntervalSeconds);\r\n          updateVideoRequestTime(timerDate.getTime());\r\n          break;\r\n        case 'fa-desktop':\r\n          showAlert?.({\r\n            message: 'Screenshare request was not accepted',\r\n            type: 'danger',\r\n            duration: 10000,\r\n          });\r\n          updateScreenRequestState('rejected');\r\n          timerDate = new Date();\r\n          timerDate.setSeconds(timerDate.getSeconds() + updateRequestIntervalSeconds);\r\n          updateScreenRequestTime(timerDate.getTime());\r\n          break;\r\n        case 'fa-comments':\r\n          showAlert?.({\r\n            message: 'Chat request was not accepted',\r\n            type: 'danger',\r\n            duration: 10000,\r\n          });\r\n          updateChatRequestState('rejected');\r\n          timerDate = new Date();\r\n          timerDate.setSeconds(timerDate.getSeconds() + updateRequestIntervalSeconds);\r\n          updateChatRequestTime(timerDate.getTime());\r\n          break;\r\n      }\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EventType, ShowAlert } from '../../@types/types';\r\n\r\nexport interface MeetingEndedOptions {\r\n  showAlert?: ShowAlert;\r\n  redirectURL?: string;\r\n  onWeb: boolean;\r\n  eventType: EventType;\r\n  updateValidated?: (isValid: boolean) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type MeetingEndedType = (options: MeetingEndedOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle the end of a meeting, including showing an alert and redirecting the user.\r\n *\r\n * @class\r\n * @name MeetingEnded\r\n * @description\r\n * This service provides a method to display a notification when a meeting ends and redirects the user to a specified URL or handles other post-meeting actions.\r\n *\r\n * @method\r\n * meetingEnded\r\n *\r\n * @param {MeetingEndedOptions} options - Options for handling the meeting end:\r\n *   - `showAlert` {Function}: Optional function to display an alert message.\r\n *   - `redirectURL` {string}: URL to redirect to after the meeting ends.\r\n *   - `onWeb` {boolean}: Specifies if the application is running on the web.\r\n *   - `eventType` {string}: Specifies the type of event ending the meeting.\r\n *\r\n * @returns {Promise<void>} Completes meeting end handling by displaying an alert and performing a redirect.\r\n *\r\n * @example\r\n * const options = {\r\n *   showAlert: (options) => console.log(options.message),\r\n *   redirectURL: 'https://example.com/home',\r\n *   onWeb: true,\r\n *   eventType: 'webinar',\r\n * };\r\n * meetingEndedService.meetingEnded(options);\r\n * // Displays alert and redirects to specified URL\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class MeetingEnded {\r\n  /**\r\n   * Handles the end of a meeting by showing an alert and redirecting the user.\r\n   *\r\n   * @param {MeetingEndedOptions} options - The options for handling the meeting end.\r\n   * @param {Function} options.showAlert - Function to show an alert message.\r\n   * @param {string} options.redirectURL - URL to redirect to after the meeting ends.\r\n   * @param {boolean} options.onWeb - Flag indicating if the application is running on the web.\r\n   * @param {string} options.eventType - Type of the event that triggered the meeting end.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the meeting end handling is complete.\r\n   */\r\n  meetingEnded = async ({\r\n    showAlert,\r\n    redirectURL,\r\n    onWeb,\r\n    eventType,\r\n  }: MeetingEndedOptions): Promise<void> => {\r\n    // Show an alert that the meeting has ended and wait for 2 seconds before redirecting to the home page\r\n    if (eventType !== 'chat') {\r\n      showAlert?.({\r\n        message: 'The event has ended. You will be redirected to the home page in 2 seconds.',\r\n        type: 'danger',\r\n        duration: 2000,\r\n      });\r\n    }\r\n\r\n    if (onWeb && redirectURL) {\r\n      setTimeout(() => {\r\n        window.location.href = redirectURL;\r\n      }, 2000);\r\n    } else {\r\n      // setTimeout(() => {\r\n      //   updateValidated(false);\r\n      // }, 2000);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface MeetingStillThereOptions {\r\n  updateIsConfirmHereModalVisible: (isVisible: boolean) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type MeetingStillThereType = (options: MeetingStillThereOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle the \"still there?\" check in a meeting by showing a confirmation modal.\r\n *\r\n * @class\r\n * @name MeetingStillThere\r\n * @description\r\n * This service provides a method to display a \"still there?\" confirmation modal to check if participants are still active in the meeting.\r\n *\r\n * @method\r\n * meetingStillThere\r\n *\r\n * @param {MeetingStillThereOptions} options - Options for managing the modal visibility:\r\n *   - `updateIsConfirmHereModalVisible` {Function}: Function to set the visibility of the \"still there?\" confirmation modal.\r\n *\r\n * @returns {Promise<void>} Updates modal visibility when checking if the user is still present.\r\n *\r\n * @example\r\n * const options = {\r\n *   updateIsConfirmHereModalVisible: (isVisible) => console.log(`Modal visibility: ${isVisible}`),\r\n * };\r\n * meetingStillThereService.meetingStillThere(options);\r\n * // Output: Sets and logs modal visibility to true\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class MeetingStillThere {\r\n  /**\r\n   * Handles the \"still there?\" meeting check by updating the visibility of the confirmation modal.\r\n   *\r\n   * @param {Object} options - The options for the meeting still there check.\r\n   * @param {Function} options.updateIsConfirmHereModalVisible - Function to update the visibility of the \"still there?\" modal.\r\n   * @returns {Promise<void>} A promise that resolves when the modal visibility is updated.\r\n   */\r\n  meetingStillThere = ({ updateIsConfirmHereModalVisible }: MeetingStillThereOptions): void => {\r\n    // Update the visibility of the \"still there?\" modal\r\n    updateIsConfirmHereModalVisible(true);\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EventType, ShowAlert } from '../../@types/types';\r\n\r\nexport interface MeetingTimeRemainingOptions {\r\n  timeRemaining: number;\r\n  showAlert?: ShowAlert;\r\n  eventType: EventType;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type MeetingTimeRemainingType = (options: MeetingTimeRemainingOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle the remaining time for a meeting and display an alert if necessary.\r\n *\r\n * @class\r\n * @name MeetingTimeRemaining\r\n * @description\r\n * Manages the display of a time remaining alert for meetings, except when the event type is 'chat'.\r\n *\r\n * @method\r\n * meetingTimeRemaining\r\n *\r\n * @param {MeetingTimeRemainingOptions} options - Options for managing meeting time:\r\n *   - `timeRemaining` {number}: The remaining time in milliseconds.\r\n *   - `showAlert` {Function}: Optional function to display an alert message.\r\n *   - `eventType` {EventType}: The type of the event (e.g., \"meeting\", \"broadcast\", \"chat\").\r\n *\r\n * @returns {Promise<void>} Displays an alert with the remaining time for the meeting.\r\n *\r\n * @example\r\n * const options = {\r\n *   timeRemaining: 180000, // 3 minutes in milliseconds\r\n *   showAlert: (options) => console.log(options.message),\r\n *   eventType: 'meeting'\r\n * };\r\n * await meetingTimeRemainingService.meetingTimeRemaining(options);\r\n * // Output: Displays \"The event will end in 3:00 minutes.\"\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class MeetingTimeRemaining {\r\n  /**\r\n   * Handles the remaining time for a meeting and shows an alert if the event type is not 'chat'.\r\n   *\r\n   * @param {Object} options - The options for the meeting time remaining.\r\n   * @param {number} options.timeRemaining - The remaining time in milliseconds.\r\n   * @param {Function} options.showAlert - The function to show an alert message.\r\n   * @param {string} options.eventType - The type of the event.\r\n   * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n   */\r\n  meetingTimeRemaining = async ({\r\n    timeRemaining,\r\n    showAlert,\r\n    eventType,\r\n  }: MeetingTimeRemainingOptions): Promise<void> => {\r\n    // Convert time from milliseconds to readable format of minutes and seconds\r\n    const minutes = Math.floor(timeRemaining / 60000);\r\n    const seconds = Math.floor((timeRemaining % 60000) / 1000);\r\n    const timeRemainingString = `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;\r\n\r\n    // Show alert with time remaining if eventType is not 'chat'\r\n    if (eventType !== 'chat') {\r\n      showAlert?.({\r\n        message: `The event will end in ${timeRemainingString} minutes.`,\r\n        type: 'success',\r\n        duration: 3000,\r\n      });\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Request, WaitingRoomParticipant } from '../../@types/types';\r\nexport interface ParticipantRequestedOptions {\r\n  userRequest: Request;\r\n\r\n  requestList: Request[];\r\n  waitingRoomList: WaitingRoomParticipant[];\r\n  updateTotalReqWait: (count: number) => void;\r\n  updateRequestList: (list: Request[]) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ParticipantRequestedType = (options: ParticipantRequestedOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle participant requests in an event's waiting room.\r\n *\r\n * @class\r\n * @name ParticipantRequested\r\n * @description\r\n * Manages participant requests by adding new requests to the list and updating the total count of requests and waiting room participants.\r\n *\r\n * @method\r\n * participantRequested\r\n *\r\n * @param {ParticipantRequestedOptions} options - Contains request information and update functions:\r\n *   - `userRequest` {Request}: The new request from a participant.\r\n *   - `requestList` {Request[]}: The current list of requests.\r\n *   - `waitingRoomList` {WaitingRoomParticipant[]}: The list of participants in the waiting room.\r\n *   - `updateTotalReqWait` {Function}: Function to update the total count of requests and waiting room participants.\r\n *   - `updateRequestList` {Function}: Function to update the request list.\r\n *\r\n * @returns {Promise<void>} Updates the request list and total request count.\r\n *\r\n * @example\r\n * const options = {\r\n *   userRequest: { id: '123', name: 'John Doe', icon: 'fa-user', username: 'johndoe' },\r\n *   requestList: existingRequests,\r\n *   waitingRoomList: waitingParticipants,\r\n *   updateTotalReqWait: (count) => console.log(`Total requests: ${count}`),\r\n *   updateRequestList: (list) => console.log('Updated request list', list)\r\n * };\r\n * await participantRequestedService.participantRequested(options);\r\n * // Adds \"John Doe\" to request list and updates the total count.\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ParticipantRequested {\r\n  /**\r\n   * Handles a participant's request by adding it to the request list and updating the total count of requests and waiting room participants.\r\n   *\r\n   * @param {ParticipantRequestedOptions} options - The options for handling the participant's request.\r\n   * @param {UserRequest} options.userRequest - The user request to be added to the request list.\r\n   * @param {UserRequest[]} options.requestList - The current list of user requests.\r\n   * @param {UserRequest[]} options.waitingRoomList - The current list of participants in the waiting room.\r\n   * @param {Function} options.updateTotalReqWait - Function to update the total count of requests and waiting room participants.\r\n   * @param {Function} options.updateRequestList - Function to update the request list.\r\n   * @returns {Promise<void>} A promise that resolves when the participant's request has been handled.\r\n   */\r\n  participantRequested = async ({\r\n    userRequest,\r\n    requestList,\r\n    waitingRoomList,\r\n    updateTotalReqWait,\r\n    updateRequestList,\r\n  }: ParticipantRequestedOptions): Promise<void> => {\r\n    // Add the user request to the request list\r\n    const updatedRequestList = [...requestList, userRequest];\r\n    updateRequestList(updatedRequestList);\r\n\r\n    // Update the total count of requests and waiting room participants\r\n    const reqCount = updatedRequestList.length + waitingRoomList.length;\r\n    updateTotalReqWait(reqCount);\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\n\r\nexport interface PersonJoinedOptions {\r\n  showAlert?: ShowAlert;\r\n  name: string;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type PersonJoinedType = (options: PersonJoinedOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle actions when a person joins an event.\r\n *\r\n * @class\r\n * @name PersonJoined\r\n * @description\r\n * Displays a notification when a person joins the event, using the `showAlert` function if provided.\r\n *\r\n * @method\r\n * personJoined\r\n *\r\n * @param {PersonJoinedOptions} options - Contains information about the person and alert display function:\r\n *   - `name` {string}: The name of the person who joined.\r\n *   - `showAlert` {Function} (optional): Function to display a notification when the person joins.\r\n *\r\n * @returns {void} Executes alert display through `showAlert` if defined.\r\n *\r\n * @example\r\n * const options = {\r\n *   name: 'Alice',\r\n *   showAlert: ({ message, type, duration }) => console.log(message)\r\n * };\r\n * personJoinedService.personJoined(options);\r\n * // Logs: \"Alice joined the event.\"\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class PersonJoined {\r\n  /**\r\n   * Handles the event when a person joins.\r\n   *\r\n   * @param {PersonJoinedOptions} options - The options for the person joined event.\r\n   * @param {string} options.name - The name of the person who joined.\r\n   * @param {Function} options.showAlert - A function to display an alert/notification.\r\n   * @returns {Promise<void>} A promise that resolves when the alert has been shown.\r\n   */\r\n  personJoined = ({ name, showAlert }: PersonJoinedOptions): void => {\r\n    // Display an alert/notification about the person joining the event\r\n    showAlert?.({\r\n      message: `${name} joined the event.`,\r\n      type: 'success',\r\n      duration: 3000,\r\n    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  CloseAndResizeParameters,\r\n  CloseAndResizeType,\r\n  PrepopulateUserMediaParameters,\r\n  PrepopulateUserMediaType,\r\n  ReorderStreamsParameters,\r\n  ReorderStreamsType,\r\n  Transport,\r\n} from '../../@types/types';\r\n\r\nexport interface ProducerMediaClosedParameters\r\n  extends CloseAndResizeParameters,\r\n    PrepopulateUserMediaParameters,\r\n    ReorderStreamsParameters {\r\n  consumerTransports: Transport[];\r\n  updateConsumerTransports: (transports: Transport[]) => void;\r\n  hostLabel: string;\r\n  shared: boolean;\r\n  updateShared: (shared: boolean) => void;\r\n  updateShareScreenStarted: (started: boolean) => void;\r\n  updateScreenId: (screenId: string) => void;\r\n  updateShareEnded: (ended: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  closeAndResize: CloseAndResizeType;\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n  reorderStreams: ReorderStreamsType;\r\n\r\n  getUpdatedAllParams: () => ProducerMediaClosedParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ProducerMediaClosedOptions {\r\n  producerId: string;\r\n  kind: 'video' | 'screen' | 'audio' | 'screenshare';\r\n  parameters: ProducerMediaClosedParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ProducerMediaClosedType = (options: ProducerMediaClosedOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle closing a media producer and associated UI and state updates.\r\n *\r\n * @class\r\n * @name ProducerMediaClosed\r\n * @description\r\n * Manages the closure of a media producer by identifying associated consumer transports, closing necessary resources,\r\n * and updating the user interface to reflect the change. For screen sharing, it resets the shared state and adjusts the main view.\r\n *\r\n * @method\r\n * producerMediaClosed\r\n *\r\n * @param {ProducerMediaClosedOptions} options - Contains details on the producer and parameters for state updates:\r\n *   - `producerId` {string}: ID of the producer to close.\r\n *   - `kind` {string}: The type of media to close (e.g., \"screenshare\" or \"audio\").\r\n *   - `parameters` {ProducerMediaClosedParameters}: Settings and update functions to manage the closure process.\r\n *      - `consumerTransports` {Transport[]}: List of active transports for consumers.\r\n *      - `updateConsumerTransports` {Function}: Updates the list of active consumer transports.\r\n *      - `hostLabel` {string}: Label of the host to revert to if screen sharing ends.\r\n *      - `shared` {boolean}: Indicates whether a screen is currently shared.\r\n *      - `updateShared` {Function}: Updates the shared screen state.\r\n *      - `updateShareScreenStarted` {Function}: Marks the start or end of screen sharing.\r\n *      - `updateScreenId` {Function}: Clears the screen ID when screen sharing ends.\r\n *      - `updateShareEnded` {Function}: Marks the end of screen sharing.\r\n *      - `closeAndResize` {Function}: Adjusts the screen display upon closing the media.\r\n *      - `prepopulateUserMedia` {Function}: Loads default media after screen sharing ends.\r\n *      - `reorderStreams` {Function}: Reorders streams to optimize layout when media is closed.\r\n *\r\n * @returns {Promise<void>} Resolves when all updates are complete and the producer closure is handled.\r\n *\r\n * @example\r\n * const options = {\r\n *   producerId: '12345',\r\n *   kind: 'screenshare',\r\n *   parameters: {\r\n *     consumerTransports: [...],\r\n *     updateConsumerTransports: (transports) => { ... },\r\n *     hostLabel: 'Host',\r\n *     shared: true,\r\n *     updateShared: (shared) => { ... },\r\n *     updateShareScreenStarted: (started) => { ... },\r\n *     updateScreenId: (id) => { ... },\r\n *     updateShareEnded: (ended) => { ... },\r\n *     closeAndResize: ({ producerId, kind, parameters }) => { ... },\r\n *     prepopulateUserMedia: ({ name, parameters }) => { ... },\r\n *     reorderStreams: ({ add, screenChanged, parameters }) => { ... },\r\n *   }\r\n * };\r\n *\r\n * producerMediaClosedService.producerMediaClosed(options)\r\n *   .then(() => console.log('Producer closed successfully'))\r\n *   .catch(error => console.error('Error:', error));\r\n *\r\n * @remarks\r\n * This service performs the following steps:\r\n * 1. Retrieves updated parameters.\r\n * 2. Finds and closes the transport associated with the producer.\r\n * 3. Updates the list of consumer transports.\r\n * 4. Adjusts the display layout with `closeAndResize`.\r\n * 5. If the producer is a screen share, resets shared state and reloads default media.\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ProducerMediaClosed {\r\n  /**\r\n   * Handles the closure of a media producer.\r\n   *\r\n   * @param {ProducerMediaClosedOptions} options - The options for closing the media producer.\r\n   * @param {string} options.producerId - The ID of the producer to close.\r\n   * @param {string} options.kind - The kind of media (e.g., \"screenshare\" or \"screen\").\r\n   * @param {Parameters} options.parameters - The parameters object containing various methods and properties.\r\n   *\r\n   * @returns {Promise<void>} - A promise that resolves when the producer has been closed and necessary updates are made.\r\n   *\r\n   * @remarks\r\n   * This function performs the following steps:\r\n   * 1. Retrieves updated parameters.\r\n   * 2. Finds the transport associated with the producer to close.\r\n   * 3. Closes the consumer transport and consumer if found.\r\n   * 4. Updates the consumer transports list.\r\n   * 5. Calls `closeAndResize` with the necessary parameters.\r\n   * 6. If the producer kind is \"screenshare\" or \"screen\", updates shared state and calls various update methods.\r\n   */\r\n  producerMediaClosed = async ({\r\n    producerId,\r\n    kind,\r\n    parameters,\r\n  }: ProducerMediaClosedOptions): Promise<void> => {\r\n    parameters = parameters.getUpdatedAllParams();\r\n\r\n    const {\r\n      consumerTransports,\r\n      updateConsumerTransports,\r\n      hostLabel,\r\n      shared,\r\n      updateShared,\r\n      updateShareScreenStarted,\r\n      updateScreenId,\r\n      updateShareEnded,\r\n      closeAndResize,\r\n      prepopulateUserMedia,\r\n      reorderStreams,\r\n    } = parameters;\r\n\r\n    const producerToClose = consumerTransports.find(\r\n      (transportData: any) => transportData.producerId === producerId,\r\n    );\r\n\r\n    if (producerToClose) {\r\n      try {\r\n        await producerToClose['consumerTransport'].close();\r\n      } catch (error) {\r\n        console.error('Error closing consumer transport:', error);\r\n      }\r\n\r\n      try {\r\n        producerToClose.consumer.close();\r\n      } catch (error) {\r\n        console.error('Error closing consumer:', error);\r\n      }\r\n\r\n      const updatedConsumerTransports = consumerTransports.filter(\r\n        (transportData: any) => transportData.producerId !== producerId,\r\n      );\r\n      updateConsumerTransports(updatedConsumerTransports);\r\n\r\n      await closeAndResize({ producerId, kind, parameters });\r\n    } else {\r\n      if (kind === 'screenshare' || kind === 'screen') {\r\n        if (shared) {\r\n          updateShared(false);\r\n        } else {\r\n          updateShareScreenStarted(false);\r\n          updateScreenId('');\r\n        }\r\n        updateShareEnded(true);\r\n        await prepopulateUserMedia({ name: hostLabel, parameters });\r\n        await reorderStreams({ add: false, screenChanged: true, parameters });\r\n      }\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  Participant,\r\n  PrepopulateUserMediaType,\r\n  ReorderStreamsType,\r\n  ReUpdateInterParameters,\r\n  ReUpdateInterType,\r\n  ReorderStreamsParameters,\r\n  PrepopulateUserMediaParameters,\r\n} from '../../@types/types';\r\n\r\nexport interface ProducerMediaPausedParameters\r\n  extends PrepopulateUserMediaParameters,\r\n    ReorderStreamsParameters,\r\n    ReUpdateInterParameters {\r\n  activeSounds: string[];\r\n  meetingDisplayType: string;\r\n  meetingVideoOptimized: boolean;\r\n  participants: Participant[];\r\n  oldSoundIds: string[];\r\n  shared: boolean;\r\n  shareScreenStarted: boolean;\r\n  updateMainWindow: boolean;\r\n  hostLabel: string;\r\n  islevel: string;\r\n  updateActiveSounds: (activeSounds: string[]) => void;\r\n  updateUpdateMainWindow: (updateMainWindow: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  reorderStreams: ReorderStreamsType;\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n  reUpdateInter: ReUpdateInterType;\r\n\r\n  getUpdatedAllParams: () => ProducerMediaPausedParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ProducerMediaPausedOptions {\r\n  producerId: string;\r\n  kind: 'audio' | 'video' | 'screenshare' | 'screen';\r\n  name: string;\r\n  parameters: ProducerMediaPausedParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ProducerMediaPausedType = (options: ProducerMediaPausedOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle the paused state of media for a producer.\r\n *\r\n * @class\r\n * @name ProducerMediaPaused\r\n * @description\r\n * Handles the actions required when media is paused for a specified producer, including UI updates, participant state handling, and managing meeting display optimizations.\r\n *\r\n * @method\r\n * producerMediaPaused\r\n *\r\n * @param {ProducerMediaPausedOptions} options - Options to specify the producer and event details:\r\n *   - `producerId` {string}: The ID of the paused producer.\r\n *   - `kind` {string}: The type of media paused (e.g., \"audio\", \"video\").\r\n *   - `name` {string}: Name of the producer whose media is paused.\r\n *   - `parameters` {ProducerMediaPausedParameters}: Configuration and state parameters for the meeting.\r\n *      - `activeSounds` {string[]}: Active audio streams currently displayed.\r\n *      - `meetingDisplayType` {string}: Current meeting layout type (e.g., \"media\", \"video\").\r\n *      - `meetingVideoOptimized` {boolean}: Indicates if video is optimized.\r\n *      - `participants` {Participant[]}: List of all meeting participants.\r\n *      - `oldSoundIds` {string[]}: List of previously active audio stream IDs.\r\n *      - `shared` {boolean}: Indicates if the screen is currently shared.\r\n *      - `shareScreenStarted` {boolean}: Indicates if screen sharing has started.\r\n *      - `updateMainWindow` {boolean}: Specifies if the main display window should update.\r\n *      - `hostLabel` {string}: The label representing the host participant.\r\n *      - `islevel` {string}: The access level of the participant.\r\n *      - `updateActiveSounds` {Function}: Updates the list of active audio streams.\r\n *      - `updateUpdateMainWindow` {Function}: Updates the status of the main display window.\r\n *      - `reorderStreams` {Function}: Reorders media streams for optimized display.\r\n *      - `prepopulateUserMedia` {Function}: Preloads user media based on display needs.\r\n *      - `reUpdateInter` {Function}: Refreshes participant interactions on the UI.\r\n *\r\n * @returns {Promise<void>} Resolves when media pause handling is complete.\r\n *\r\n * @example\r\n * const options = {\r\n *   producerId: '12345',\r\n *   kind: 'audio',\r\n *   name: 'Participant A',\r\n *   parameters: {\r\n *     activeSounds: ['Participant B'],\r\n *     meetingDisplayType: 'video',\r\n *     meetingVideoOptimized: false,\r\n *     participants: [...],\r\n *     oldSoundIds: ['Participant A'],\r\n *     shared: false,\r\n *     shareScreenStarted: false,\r\n *     updateMainWindow: true,\r\n *     hostLabel: 'Host',\r\n *     islevel: '1',\r\n *     updateActiveSounds: (sounds) => { ... },\r\n *     updateUpdateMainWindow: (status) => { ... },\r\n *     reorderStreams: ({ add, screenChanged, parameters }) => { ... },\r\n *     prepopulateUserMedia: ({ name, parameters }) => { ... },\r\n *     reUpdateInter: ({ name, add, force, parameters }) => { ... }\r\n *   }\r\n * };\r\n *\r\n * producerMediaPausedService.producerMediaPaused(options)\r\n *   .then(() => console.log('Media pause handled'))\r\n *   .catch(error => console.error('Error:', error));\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ProducerMediaPaused {\r\n  /**\r\n   * Handles the event when media is paused for a producer.\r\n   *\r\n   * @param {ProducerMediaPausedOptions} options - The options for the producer media paused event.\r\n   * @param {string} options.producerId - The ID of the producer.\r\n   * @param {string} options.kind - The kind of media (e.g., \"audio\", \"video\").\r\n   * @param {string} options.name - The name of the producer.\r\n   * @param {Parameters} options.parameters - The parameters for the event.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the media paused handling is complete.\r\n   *\r\n   * @description\r\n   * This function handles the event when media is paused for a producer. It performs the following tasks:\r\n   * - Updates the parameters.\r\n   * - Iterates through participants and updates the UI based on their muted status and other conditions.\r\n   * - Handles meeting display type and optimizes the UI accordingly.\r\n   * - Manages audio media by updating the relevant participant's state.\r\n   */\r\n  producerMediaPaused = async ({\r\n    producerId,\r\n    kind,\r\n    name,\r\n    parameters,\r\n  }: ProducerMediaPausedOptions): Promise<void> => {\r\n    parameters = parameters.getUpdatedAllParams();\r\n\r\n    let {\r\n      activeSounds,\r\n      meetingDisplayType,\r\n      meetingVideoOptimized,\r\n      participants,\r\n      oldSoundIds,\r\n      shared,\r\n      shareScreenStarted,\r\n      updateMainWindow,\r\n      hostLabel,\r\n      islevel,\r\n      updateActiveSounds,\r\n      updateUpdateMainWindow,\r\n      reorderStreams,\r\n      prepopulateUserMedia,\r\n      reUpdateInter,\r\n    } = parameters;\r\n\r\n    await Promise.all(\r\n      participants.map(async (participant: any) => {\r\n        if (participant.muted) {\r\n          try {\r\n            if (\r\n              participant.islevel == '2' &&\r\n              !participant.videoID &&\r\n              !shared &&\r\n              !shareScreenStarted &&\r\n              islevel != '2'\r\n            ) {\r\n              updateMainWindow = true;\r\n              updateUpdateMainWindow(updateMainWindow);\r\n              await prepopulateUserMedia({ name: hostLabel, parameters });\r\n              updateMainWindow = false;\r\n              updateUpdateMainWindow(updateMainWindow);\r\n            }\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n\r\n          if (shareScreenStarted || shared) {\r\n            if (activeSounds.includes(participant.name)) {\r\n              activeSounds = activeSounds.filter(\r\n                (audioStream: any) => audioStream != participant.name,\r\n              );\r\n              updateActiveSounds(activeSounds);\r\n            }\r\n            await reUpdateInter({ name: participant.name, add: false, force: true, parameters });\r\n          }\r\n        }\r\n      }),\r\n    );\r\n\r\n    let checker = false;\r\n    if (\r\n      meetingDisplayType == 'media' ||\r\n      (meetingDisplayType == 'video' && !meetingVideoOptimized)\r\n    ) {\r\n      const participant = participants.find((obj: any) => obj.name == name);\r\n      checker = !!participant?.videoID;\r\n      if (!checker && !shareScreenStarted && !shared) {\r\n        await reorderStreams({ add: false, screenChanged: true, parameters });\r\n      }\r\n    }\r\n\r\n    if (kind == 'audio') {\r\n      try {\r\n        const participant =\r\n          participants.find((obj: any) => obj.audioID == producerId) ||\r\n          participants.find((obj: any) => obj.name == name);\r\n        if (\r\n          participant &&\r\n          ((participant.name && oldSoundIds.includes(participant.name)) ||\r\n            (name && oldSoundIds.includes(name)))\r\n        ) {\r\n          reUpdateInter({\r\n            name: participant.name ?? '',\r\n            add: false,\r\n            force: true,\r\n            parameters,\r\n          });\r\n        }\r\n      } catch {\r\n        /* handle error */\r\n      }\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  Participant,\r\n  PrepopulateUserMediaParameters,\r\n  PrepopulateUserMediaType,\r\n  ReorderStreamsParameters,\r\n  ReorderStreamsType,\r\n} from '../../@types/types';\r\n\r\nexport interface ProducerMediaResumedParameters\r\n  extends PrepopulateUserMediaParameters,\r\n    ReorderStreamsParameters {\r\n  meetingDisplayType: string;\r\n  participants: Participant[];\r\n  shared: boolean;\r\n  shareScreenStarted: boolean;\r\n  mainScreenFilled: boolean;\r\n  hostLabel: string;\r\n  updateUpdateMainWindow: (updateMainWindow: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  reorderStreams: ReorderStreamsType;\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n\r\n  getUpdatedAllParams: () => ProducerMediaResumedParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ProducerMediaResumedOptions {\r\n  name: string;\r\n  kind: 'audio';\r\n  parameters: ProducerMediaResumedParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ProducerMediaResumedType = (options: ProducerMediaResumedOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to handle resuming media for a specific participant in a meeting.\r\n *\r\n * @class\r\n * @name ProducerMediaResumed\r\n * @description Resumes media (audio only) for a participant and updates the meeting display based on the meeting layout and participant status.\r\n *\r\n * @method\r\n * producerMediaResumed\r\n *\r\n * @param {ProducerMediaResumedOptions} options - Options to control media resumption:\r\n *   - `name` {string}: Name of the participant whose media is to be resumed.\r\n *   - `parameters` {ProducerMediaResumedParameters}: Meeting and participant-specific configurations.\r\n *      - `meetingDisplayType` {string}: Type of meeting display (e.g., \"media\").\r\n *      - `participants` {Participant[]}: List of participants in the meeting.\r\n *      - `shared` {boolean}: Indicates if the screen is currently shared.\r\n *      - `shareScreenStarted` {boolean}: Indicates if screen sharing has started.\r\n *      - `mainScreenFilled` {boolean}: Indicates if the main screen is filled.\r\n *      - `hostLabel` {string}: Label or name of the host.\r\n *      - `updateUpdateMainWindow` {Function}: Function to update the main window display.\r\n *      - `reorderStreams` {Function}: Function to manage stream ordering when display changes.\r\n *      - `prepopulateUserMedia` {Function}: Function to preload user media for the main screen.\r\n *\r\n * @returns {Promise<void>} Resolves when media for the specified participant has resumed.\r\n *\r\n * @example\r\n * const options = {\r\n *   name: 'Participant A',\r\n *   parameters: {\r\n *     meetingDisplayType: 'media',\r\n *     participants: [...],\r\n *     shared: false,\r\n *     shareScreenStarted: false,\r\n *     mainScreenFilled: false,\r\n *     hostLabel: 'Host',\r\n *     updateUpdateMainWindow: (updateMainWindow) => { ... },\r\n *     reorderStreams: ({ add, screenChanged, parameters }) => { ... },\r\n *     prepopulateUserMedia: ({ name, parameters }) => { ... }\r\n *   }\r\n * };\r\n *\r\n * producerMediaResumedService.producerMediaResumed(options)\r\n *   .then(() => console.log('Media resumed'))\r\n *   .catch(error => console.error('Error:', error));\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ProducerMediaResumed {\r\n  /**\r\n   * Resumes media for a specific participant in a meeting.\r\n   *\r\n   * @param {ProducerMediaResumedOptions} options - The options for resuming media.\r\n   * @param {string} options.name - The name of the participant whose media is to be resumed.\r\n   * @param {Object} options.parameters - The parameters related to the meeting and participants.\r\n   * @param {string} options.parameters.meetingDisplayType - The type of meeting display.\r\n   * @param {Array} options.parameters.participants - The list of participants in the meeting.\r\n   * @param {boolean} options.parameters.shared - Indicates if the screen is being shared.\r\n   * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.\r\n   * @param {boolean} options.parameters.mainScreenFilled - Indicates if the main screen is filled.\r\n   * @param {string} options.parameters.hostLabel - The label of the host.\r\n   * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window.\r\n   * @param {Function} options.parameters.reorderStreams - Function to reorder the streams.\r\n   * @param {Function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the media has been resumed.\r\n   */\r\n  producerMediaResumed = async ({\r\n    name,\r\n    parameters,\r\n  }: ProducerMediaResumedOptions): Promise<void> => {\r\n    parameters = parameters.getUpdatedAllParams();\r\n\r\n    let {\r\n      meetingDisplayType,\r\n      participants,\r\n      shared,\r\n      shareScreenStarted,\r\n      updateMainWindow,\r\n      mainScreenFilled,\r\n      hostLabel,\r\n      updateUpdateMainWindow,\r\n      reorderStreams,\r\n      prepopulateUserMedia,\r\n    } = parameters;\r\n\r\n    // Update to resume the audio only of a participant\r\n    // name is the name of the participant\r\n    // kind is the kind of media (always audio)\r\n\r\n    // Operations to update UI to optimize interest levels\r\n    const participant = participants.find((obj: any) => obj.name == name);\r\n\r\n    if (!mainScreenFilled && participant?.islevel == '2') {\r\n      updateMainWindow = true;\r\n      updateUpdateMainWindow(updateMainWindow);\r\n      await prepopulateUserMedia({ name: hostLabel, parameters });\r\n      updateMainWindow = false;\r\n      updateUpdateMainWindow(updateMainWindow);\r\n    }\r\n\r\n    let checker;\r\n    if (meetingDisplayType == 'media') {\r\n      checker = participant?.videoID != null && participant.videoID !== '';\r\n\r\n      if (!checker && !(shareScreenStarted || shared)) {\r\n        await reorderStreams({ add: false, screenChanged: true, parameters });\r\n      }\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface ReInitiateRecordingOptions {\r\n  roomName: string;\r\n  member: string;\r\n  socket: Socket;\r\n  adminRestrictSetting: boolean;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ReInitiateRecordingType = (options: ReInitiateRecordingOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to re-initiate recording in a specific room, considering administrative restrictions.\r\n *\r\n * @class\r\n * @name ReInitiateRecording\r\n * @description Attempts to re-initiate recording if administrative restrictions permit.\r\n *\r\n * @method\r\n * reInitiateRecording\r\n *\r\n * @param {ReInitiateRecordingOptions} options - Configuration options for re-initiating recording:\r\n *   - `roomName` {string}: The name of the room to start recording in.\r\n *   - `member` {string}: The name of the member initiating the recording.\r\n *   - `socket` {Socket}: The socket instance for server communication.\r\n *   - `adminRestrictSetting` {boolean}: Flag indicating if the admin restrict setting is active, preventing re-initiation.\r\n *\r\n * @returns {Promise<void>} Resolves if recording is successfully re-initiated; otherwise, it throws an error if re-initiation fails.\r\n *\r\n * @example\r\n * const options = {\r\n *   roomName: 'Room101',\r\n *   member: 'Alice',\r\n *   socket: mySocketInstance,\r\n *   adminRestrictSetting: false\r\n * };\r\n * reInitiateRecordingService.reInitiateRecording(options)\r\n *   .then(() => console.log('Recording re-initiated'))\r\n *   .catch(error => console.error(error.message));\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ReInitiateRecording {\r\n  /**\r\n   * Re-initiates recording based on specific conditions.\r\n   * @async\r\n   * @function\r\n   * @param {ReInitiateRecordingOptions} options - The options for re-initiating recording.\r\n   * @param {string} options.roomName - The name of the room to re-initiate recording.\r\n   * @param {string} options.member - The member re-initiating the recording.\r\n   * @param {Socket} options.socket - The socket instance for communication.\r\n   * @param {boolean} options.adminRestrictSetting - Indicates whether the admin restrict setting is enabled.\r\n   * @returns {Promise<void>} A promise that resolves when the recording is re-initiated.\r\n   */\r\n\r\n  reInitiateRecording = async ({\r\n    roomName,\r\n    member,\r\n    socket,\r\n    adminRestrictSetting,\r\n  }: ReInitiateRecordingOptions): Promise<void> => {\r\n    if (!adminRestrictSetting) {\r\n      await new Promise<void>((resolve, reject) => {\r\n        socket.emit('startRecordIng', { roomName, member }, ({ success }: { success: boolean }) => {\r\n          if (success) {\r\n            resolve();\r\n          } else {\r\n            reject(new Error('Failed to re-initiate recording.'));\r\n          }\r\n        });\r\n      });\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EventType, Message, Participant } from '../../@types/types';\r\n\r\nexport interface ReceiveMessageOptions {\r\n  message: Message;\r\n  messages: Message[];\r\n  participantsAll: Participant[];\r\n  member: string;\r\n  eventType: EventType;\r\n  islevel: string;\r\n  coHost: string;\r\n  updateMessages: (messages: Message[]) => void;\r\n  updateShowMessagesBadge: (showBadge: boolean) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ReceiveMessageType = (options: ReceiveMessageOptions) => Promise<void>;\r\n\r\n/**\r\n * Service for receiving and processing messages, including handling group and direct messages, filtering banned senders, and updating message states.\r\n *\r\n * @class\r\n * @name ReceiveMessage\r\n * @description Manages incoming messages, appends them to the existing messages array, filters out banned senders, and updates message badge visibility as needed.\r\n *\r\n * @method\r\n * receiveMessage\r\n *\r\n * @param {ReceiveMessageOptions} options - Options for handling a received message:\r\n *   - `message` {Message}: The new message object to process.\r\n *   - `messages` {Message[]}: The current list of messages.\r\n *   - `participantsAll` {Participant[]}: All participants in the chat.\r\n *   - `member` {string}: The current member's name.\r\n *   - `eventType` {EventType}: The type of event (e.g., \"broadcast\" or \"chat\").\r\n *   - `islevel` {string}: The level of the current user.\r\n *   - `coHost` {string}: The name of the co-host.\r\n *   - `updateMessages` {Function}: A function to update the messages list.\r\n *   - `updateShowMessagesBadge` {Function}: A function to toggle the visibility of the message badge.\r\n *\r\n * @returns {Promise<void>} Resolves when the message processing and updates are complete.\r\n *\r\n * @example\r\n * const message = { sender: 'Alice', receivers: ['Bob'], message: 'Hello!', timestamp: Date.now(), group: false };\r\n * const options = {\r\n *   message,\r\n *   messages: [],\r\n *   participantsAll: [{ name: 'Alice' }, { name: 'Bob' }],\r\n *   member: 'Bob',\r\n *   eventType: 'chat',\r\n *   islevel: '1',\r\n *   coHost: 'Charlie',\r\n *   updateMessages: (updatedMessages) => console.log('Messages updated:', updatedMessages),\r\n *   updateShowMessagesBadge: (show) => console.log('Show badge:', show)\r\n * };\r\n * receiveMessageService.receiveMessage(options);\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ReceiveMessage {\r\n  /**\r\n   * Receives and processes a message, updating the messages array and handling\r\n   * various message types and events.\r\n   *\r\n   * @param {ReceiveMessageOptions} options - The options for receiving the message.\r\n   * @param {Object} options.message - The message object containing sender, receivers, content, timestamp, and group.\r\n   * @param {Function} options.getUpdatedAllParams - Function to get updated parameters.\r\n   * @param {Array} options.messages - Array of current messages.\r\n   * @param {Array} options.participantsAll - Array of all participants.\r\n   * @param {string} options.member - The current member.\r\n   * @param {string} options.eventType - The type of event (e.g., \"broadcast\", \"chat\").\r\n   * @param {string} options.islevel - The level of the current member.\r\n   * @param {string} options.coHost - The co-host of the event.\r\n   * @param {Function} options.updateMessages - Function to update the messages array.\r\n   * @param {Function} options.updateShowMessagesBadge - Function to update the visibility of the messages badge.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the message has been processed.\r\n   */\r\n\r\n  receiveMessage = async ({\r\n    message,\r\n    messages,\r\n    participantsAll,\r\n    member,\r\n    eventType,\r\n    islevel,\r\n    coHost,\r\n    updateMessages,\r\n    updateShowMessagesBadge,\r\n  }: ReceiveMessageOptions): Promise<void> => {\r\n    // Add the received message to the messages array\r\n    const { sender, receivers, message: content, timestamp, group } = message;\r\n    let oldMessages = messages;\r\n    messages = [...messages, { sender, receivers, message: content, timestamp, group }];\r\n\r\n    // Filter out messages with banned senders in the participants array\r\n    if (eventType !== 'broadcast' && eventType !== 'chat') {\r\n      messages = messages.filter((message: Message) =>\r\n        participantsAll.some(\r\n          (participant: any) => participant.name === message.sender && !participant.isBanned,\r\n        ),\r\n      );\r\n    } else {\r\n      messages = messages.filter((message: Message) => {\r\n        const participant = participantsAll.find(\r\n          (participant: any) => participant.name === message.sender,\r\n        );\r\n        return !participant || !participant.isBanned;\r\n      });\r\n    }\r\n    updateMessages(messages);\r\n\r\n    // Separate group and direct messages\r\n    const oldGroupMessages = oldMessages.filter((message: Message) => message.group);\r\n    const oldDirectMessages = oldMessages.filter((message: Message) => !message.group);\r\n\r\n    // Render and update counts for group messages\r\n    const groupMessages = messages.filter((message: Message) => message.group);\r\n\r\n    if (eventType !== 'broadcast' && eventType !== 'chat') {\r\n      // Check if oldGroupMessages length is different from groupMessages length\r\n      if (oldGroupMessages.length !== groupMessages.length) {\r\n        // Identify new messages\r\n        const newGroupMessages = groupMessages.filter(\r\n          (message: Message) =>\r\n            !oldGroupMessages.some(\r\n              (oldMessage: Message) => oldMessage.timestamp === message.timestamp,\r\n            ),\r\n        );\r\n\r\n        // Check if newGroupMessages sender is the member or receivers include the member\r\n        const newGroupMessages2 = newGroupMessages.filter(\r\n          (message: Message) => message.sender === member || message.receivers.includes(member),\r\n        );\r\n\r\n        // Check if member is the sender of any newGroupMessages\r\n        const newGroupMessages3 = newGroupMessages2.filter(\r\n          (message: Message) => message.sender === member,\r\n        );\r\n\r\n        // Check if member is the receiver of any newGroupMessages\r\n        if (newGroupMessages.length > 0 && newGroupMessages.length !== newGroupMessages3.length) {\r\n          updateShowMessagesBadge(true);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Render and update counts for direct messages\r\n    const directMessages = messages.filter((message: Message) => !message.group);\r\n\r\n    if (eventType !== 'broadcast' && eventType !== 'chat') {\r\n      // Check if oldDirectMessages length is different from directMessages length\r\n      if (oldDirectMessages.length !== directMessages.length) {\r\n        // Identify new direct messages\r\n        const newDirectMessages = directMessages.filter(\r\n          (message: Message) =>\r\n            !oldDirectMessages.some(\r\n              (oldMessage: Message) => oldMessage.timestamp === message.timestamp,\r\n            ),\r\n        );\r\n\r\n        // Check if newDirectMessages sender is the member or receivers include the member\r\n        const newDirectMessages2 = newDirectMessages.filter(\r\n          (message: Message) => message.sender === member || message.receivers.includes(member),\r\n        );\r\n\r\n        // Check if member is the sender of any newDirectMessages\r\n        const newDirectMessages3 = newDirectMessages2.filter(\r\n          (message: Message) => message.sender === member,\r\n        );\r\n\r\n        if (\r\n          (newDirectMessages.length > 0 && newDirectMessages2.length > 0) ||\r\n          (newDirectMessages.length > 0 && islevel === '2') ||\r\n          coHost === member\r\n        ) {\r\n          if (islevel === '2' || coHost === member) {\r\n            if (newDirectMessages.length !== newDirectMessages3.length) {\r\n              updateShowMessagesBadge(true);\r\n            }\r\n          } else {\r\n            if (\r\n              newDirectMessages2.length > 0 &&\r\n              newDirectMessages.length !== newDirectMessages3.length\r\n            ) {\r\n              updateShowMessagesBadge(true);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n}\r\n","import { Injectable, Input, OnInit } from '@angular/core';\r\nexport interface SoundPlayerOptions {\r\n  soundUrl: string;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type SoundPlayerType = (options: SoundPlayerOptions) => void;\r\n\r\n/**\r\n * SoundPlayer service for playing a sound from a provided URL.\r\n *\r\n * @class SoundPlayer\r\n * @implements {OnInit}\r\n *\r\n * @example\r\n * ```typescript\r\n * const soundUrl = 'https://example.com/sound.mp3';\r\n * const soundPlayer = new SoundPlayer();\r\n * soundPlayer.playSound({ soundUrl });\r\n * ```\r\n *\r\n * ### Details\r\n * - **soundUrl**: URL to the sound file that will be played.\r\n * - **playSound**: Initiates the audio playback.\r\n * - **ngOnInit**: Automatically triggers sound playback if `soundUrl` is set.\r\n *\r\n * @param {SoundPlayerOptions} options - Contains the URL of the sound to play.\r\n * @returns {void} - No return; sound is played asynchronously.\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\n\r\n/**\r\n * Plays a sound from a given URL.\r\n * @class\r\n * @implements {OnInit}\r\n * @param {string} soundUrl - The URL of the sound to play.\r\n * @returns {void}\r\n * @example\r\n * const soundUrl = 'https://example.com/sound.mp3';\r\n * const soundPlayer = new SoundPlayer();\r\n * soundPlayer.playSound({ soundUrl });\r\n */\r\nexport class SoundPlayer implements OnInit {\r\n  @Input() soundUrl: string | undefined;\r\n\r\n  ngOnInit(): void {\r\n    const shouldPlaySound = true;\r\n\r\n    if (shouldPlaySound) {\r\n      if (this.soundUrl) {\r\n        this.playSound({ soundUrl: this.soundUrl });\r\n      } else {\r\n        console.log('Sound URL is not defined');\r\n      }\r\n    }\r\n  }\r\n\r\n  playSound({ soundUrl }: SoundPlayerOptions): void {\r\n    const audio = new Audio(soundUrl);\r\n    audio.play().catch((error) => console.error('Error playing sound:', error));\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SoundPlayer } from '../../methods/utils/sound-player.service';\r\n\r\nimport { EventType, UserRecordingParams } from '../../@types/types';\r\n\r\nexport interface RecordingNoticeParameters {\r\n  islevel: string;\r\n  userRecordingParams: UserRecordingParams;\r\n  recordElapsedTime: number;\r\n  recordStartTime: number;\r\n  recordStarted: boolean;\r\n  recordPaused: boolean;\r\n  canLaunchRecord: boolean;\r\n  stopLaunchRecord: boolean;\r\n  recordStopped: boolean;\r\n  isTimerRunning: boolean;\r\n  canPauseResume: boolean;\r\n  eventType: EventType;\r\n\r\n  updateRecordingProgressTime: (time: string) => void;\r\n  updateShowRecordButtons: (show: boolean) => void;\r\n  updateUserRecordingParams: (params: UserRecordingParams) => void;\r\n  updateRecordingMediaOptions: (options: string) => void;\r\n  updateRecordingAudioOptions: (options: string) => void;\r\n  updateRecordingVideoOptions: (options: string) => void;\r\n  updateRecordingVideoType: (type: string) => void;\r\n  updateRecordingVideoOptimized: (optimized: boolean) => void;\r\n  updateRecordingDisplayType: (type: 'video' | 'media' | 'all') => void;\r\n  updateRecordingAddHLS: (addHLS: boolean) => void;\r\n  updateRecordingNameTags: (nameTags: boolean) => void;\r\n  updateRecordingBackgroundColor: (color: string) => void;\r\n  updateRecordingNameTagsColor: (color: string) => void;\r\n  updateRecordingOrientationVideo: (orientation: string) => void;\r\n  updateRecordingAddText: (addText: boolean) => void;\r\n  updateRecordingCustomText: (text: string) => void;\r\n  updateRecordingCustomTextPosition: (position: string) => void;\r\n  updateRecordingCustomTextColor: (color: string) => void;\r\n  updatePauseRecordCount: (count: number) => void;\r\n  updateRecordElapsedTime: (time: number) => void;\r\n  updateRecordStarted: (started: boolean) => void;\r\n  updateRecordPaused: (paused: boolean) => void;\r\n  updateCanLaunchRecord: (canLaunch: boolean) => void;\r\n  updateStopLaunchRecord: (stop: boolean) => void;\r\n  updateRecordStopped: (stopped: boolean) => void;\r\n  updateIsTimerRunning: (running: boolean) => void;\r\n  updateCanPauseResume: (canPause: boolean) => void;\r\n  updateRecordStartTime: (startTime: number) => void;\r\n  updateRecordState: (state: string) => void;\r\n\r\n  // mediasfu functions\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface RecordingNoticeOptions {\r\n  state: string;\r\n  userRecordingParam: UserRecordingParams | null;\r\n  pauseCount: number;\r\n  timeDone: number;\r\n  parameters: RecordingNoticeParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type RecordingNoticeType = (options: RecordingNoticeOptions) => Promise<void>;\r\n\r\n/**\r\n * Service for handling recording notices, managing recording states, and updating related parameters.\r\n *\r\n * @class\r\n * @name RecordingNotice\r\n * @description Provides methods to handle the recording notice state, manage user recording parameters, and play appropriate sounds for different states.\r\n *\r\n * @method\r\n * RecordingNotice\r\n *\r\n * @param {RecordingNoticeOptions} options - The options for recording notices:\r\n *   - `state` {string}: The current recording state (`pause`, `stop`, etc.).\r\n *   - `userRecordingParam` {UserRecordingParams | null}: The user recording parameters (if available).\r\n *   - `pauseCount` {number}: The number of pauses in the recording.\r\n *   - `timeDone` {number}: The total recording time completed.\r\n *   - `parameters` {RecordingNoticeParameters}: Functions and properties to update recording details.\r\n *     - `updateRecordElapsedTime` {Function}: Updates elapsed recording time.\r\n *     - `updateShowRecordButtons` {Function}: Toggles record button visibility.\r\n *     - `updateRecordState` {Function}: Sets the record state (e.g., `red`, `green`, `yellow`).\r\n *     - `updatePauseRecordCount` {Function}: Sets the pause record count.\r\n *     - `updateRecordStarted`, `updateRecordPaused`, `updateCanLaunchRecord`, etc.: Other update functions to control recording settings and states.\r\n *\r\n * @returns {Promise<void>} Resolves when the recording state and parameters have been updated.\r\n *\r\n * @example\r\n * const options = {\r\n *   state: 'pause',\r\n *   userRecordingParam: { mainSpecs: { mediaOptions: 'audio', ... } },\r\n *   pauseCount: 3,\r\n *   timeDone: 3600,\r\n *   parameters: {\r\n *     updateRecordStarted: (started) => console.log(`Recording started: ${started}`),\r\n *     updateRecordPaused: (paused) => console.log(`Recording paused: ${paused}`),\r\n *     // Define other update functions similarly\r\n *   }\r\n * };\r\n * await recordingNoticeService.RecordingNotice(options);\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RecordingNotice {\r\n  constructor(private SoundPlayerService: SoundPlayer) {}\r\n\r\n  /**\r\n   * Handles the recording notice state and updates various recording parameters accordingly.\r\n   *\r\n   * @param {Object} options - The options object.\r\n   * @param {string} options.state - The current state of the recording (e.g., \"pause\", \"stop\").\r\n   * @param {Object} options.userRecordingParam - The user recording parameters.\r\n   * @param {number} options.pauseCount - The count of pauses during the recording.\r\n   * @param {number} options.timeDone - The elapsed time of the recording.\r\n   * @param {Object} options.parameters - The parameters object containing various update functions and state variables.\r\n   * @param {string} options.parameters.islevel - The level of the recording.\r\n   * @param {Object} options.parameters.userRecordingParams - The user recording parameters.\r\n   * @param {number} options.parameters.pauseRecordCount - The count of pauses during the recording.\r\n   * @param {number} options.parameters.recordElapsedTime - The elapsed time of the recording.\r\n   * @param {number} options.parameters.recordStartTime - The start time of the recording.\r\n   * @param {boolean} options.parameters.recordStarted - Indicates if the recording has started.\r\n   * @param {boolean} options.parameters.recordPaused - Indicates if the recording is paused.\r\n   * @param {boolean} options.parameters.canLaunchRecord - Indicates if the recording can be launched.\r\n   * @param {boolean} options.parameters.stopLaunchRecord - Indicates if the recording launch should be stopped.\r\n   * @param {boolean} options.parameters.recordStopped - Indicates if the recording is stopped.\r\n   * @param {boolean} options.parameters.isTimerRunning - Indicates if the timer is running.\r\n   * @param {boolean} options.parameters.canPauseResume - Indicates if the recording can be paused or resumed.\r\n   * @param {string} options.parameters.eventType - The type of event triggering the recording notice.\r\n   * @param {Function} options.parameters.updateRecordingProgressTime - Function to update the recording progress time.\r\n   * @param {Function} options.parameters.updateShowRecordButtons - Function to update the visibility of record buttons.\r\n   * @param {Function} options.parameters.updateUserRecordingParams - Function to update user recording parameters.\r\n   * @param {Function} options.parameters.updateRecordingMediaOptions - Function to update recording media options.\r\n   * @param {Function} options.parameters.updateRecordingAudioOptions - Function to update recording audio options.\r\n   * @param {Function} options.parameters.updateRecordingVideoOptions - Function to update recording video options.\r\n   * @param {Function} options.parameters.updateRecordingVideoType - Function to update recording video type.\r\n   * @param {Function} options.parameters.updateRecordingVideoOptimized - Function to update recording video optimization.\r\n   * @param {Function} options.parameters.updateRecordingDisplayType - Function to update recording display type.\r\n   * @param {Function} options.parameters.updateRecordingAddHLS - Function to update HLS addition in recording.\r\n   * @param {Function} options.parameters.updateRecordingNameTags - Function to update recording name tags.\r\n   * @param {Function} options.parameters.updateRecordingBackgroundColor - Function to update recording background color.\r\n   * @param {Function} options.parameters.updateRecordingNameTagsColor - Function to update recording name tags color.\r\n   * @param {Function} options.parameters.updateRecordingOrientationVideo - Function to update recording orientation video.\r\n   * @param {Function} options.parameters.updateRecordingAddText - Function to update recording text addition.\r\n   * @param {Function} options.parameters.updateRecordingCustomText - Function to update custom text in recording.\r\n   * @param {Function} options.parameters.updateRecordingCustomTextPosition - Function to update custom text position.\r\n   * @param {Function} options.parameters.updateRecordingCustomTextColor - Function to update custom text color.\r\n   * @param {Function} options.parameters.updatePauseRecordCount - Function to update pause record count.\r\n   * @param {Function} options.parameters.updateRecordElapsedTime - Function to update record elapsed time.\r\n   * @param {Function} options.parameters.updateRecordStartTime - Function to update record start time.\r\n   * @param {Function} options.parameters.updateRecordStarted - Function to update record started status.\r\n   * @param {Function} options.parameters.updateRecordPaused - Function to update record paused status.\r\n   * @param {Function} options.parameters.updateCanLaunchRecord - Function to update can launch record status.\r\n   * @param {Function} options.parameters.updateStopLaunchRecord - Function to update stop launch record status.\r\n   * @param {Function} options.parameters.updateRecordStopped - Function to update record stopped status.\r\n   * @param {Function} options.parameters.updateIsTimerRunning - Function to update timer running status.\r\n   * @param {Function} options.parameters.updateCanPauseResume - Function to update can pause/resume status.\r\n   * @param {Function} options.parameters.updateRecordState - Function to update the record state.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the recording notice handling is complete.\r\n   *\r\n   * @throws {Error} Throws an error if handling the recording state and status fails.\r\n   */\r\n  RecordingNotice = async ({\r\n    state,\r\n    userRecordingParam,\r\n    pauseCount,\r\n    timeDone,\r\n    parameters,\r\n  }: RecordingNoticeOptions): Promise<void> => {\r\n    let {\r\n      islevel,\r\n      userRecordingParams,\r\n      pauseRecordCount,\r\n      recordElapsedTime,\r\n      recordStartTime,\r\n      recordStarted,\r\n      recordPaused,\r\n      canLaunchRecord,\r\n      stopLaunchRecord,\r\n      recordStopped,\r\n      isTimerRunning,\r\n      canPauseResume,\r\n      eventType,\r\n\r\n      updateRecordingProgressTime,\r\n      updateShowRecordButtons,\r\n      updateUserRecordingParams,\r\n      updateRecordingMediaOptions,\r\n      updateRecordingAudioOptions,\r\n      updateRecordingVideoOptions,\r\n      updateRecordingVideoType,\r\n      updateRecordingVideoOptimized,\r\n      updateRecordingDisplayType,\r\n      updateRecordingAddHLS,\r\n      updateRecordingNameTags,\r\n      updateRecordingBackgroundColor,\r\n      updateRecordingNameTagsColor,\r\n      updateRecordingOrientationVideo,\r\n      updateRecordingAddText,\r\n      updateRecordingCustomText,\r\n      updateRecordingCustomTextPosition,\r\n      updateRecordingCustomTextColor,\r\n      updatePauseRecordCount,\r\n      updateRecordElapsedTime,\r\n      updateRecordStartTime,\r\n      updateRecordStarted,\r\n      updateRecordPaused,\r\n      updateCanLaunchRecord,\r\n      updateStopLaunchRecord,\r\n      updateRecordStopped,\r\n      updateIsTimerRunning,\r\n      updateCanPauseResume,\r\n      updateRecordState,\r\n    } = parameters;\r\n\r\n    try {\r\n      if (islevel !== '2') {\r\n        if (state === 'pause') {\r\n          updateRecordStarted(true);\r\n          updateRecordPaused(true);\r\n          updateRecordState('yellow');\r\n          eventType !== 'broadcast' &&\r\n            this.SoundPlayerService.playSound({\r\n              soundUrl: 'https://www.mediasfu.com/sounds/record-paused.mp3',\r\n            });\r\n        } else if (state === 'stop') {\r\n          updateRecordStarted(true);\r\n          updateRecordStopped(true);\r\n          updateRecordState('green');\r\n          eventType !== 'broadcast' &&\r\n            this.SoundPlayerService.playSound({\r\n              soundUrl: 'https://www.mediasfu.com/sounds/record-stopped.mp3',\r\n            });\r\n        } else {\r\n          updateRecordState('red');\r\n          updateRecordStarted(true);\r\n          updateRecordPaused(false);\r\n          eventType !== 'broadcast' &&\r\n            this.SoundPlayerService.playSound({\r\n              soundUrl: 'https://www.mediasfu.com/sounds/record-progress.mp3',\r\n            });\r\n        }\r\n      } else {\r\n        if (state === 'pause') {\r\n          updateRecordState('yellow');\r\n          if (userRecordingParam) {\r\n            userRecordingParams.mainSpecs = userRecordingParam.mainSpecs;\r\n            userRecordingParams.dispSpecs = userRecordingParam.dispSpecs;\r\n            userRecordingParams.textSpecs = userRecordingParam.textSpecs;\r\n\r\n            updateUserRecordingParams(userRecordingParams);\r\n            updateRecordingMediaOptions(userRecordingParams.mainSpecs.mediaOptions);\r\n            updateRecordingAudioOptions(userRecordingParams.mainSpecs.audioOptions);\r\n            updateRecordingVideoOptions(userRecordingParams.mainSpecs.videoOptions);\r\n            updateRecordingVideoType(userRecordingParams.mainSpecs.videoType);\r\n            updateRecordingVideoOptimized(userRecordingParams.mainSpecs.videoOptimized);\r\n            updateRecordingDisplayType(userRecordingParams.mainSpecs.recordingDisplayType);\r\n            updateRecordingAddHLS(userRecordingParams.mainSpecs.addHLS);\r\n            updateRecordingNameTags(userRecordingParams.dispSpecs.nameTags);\r\n            updateRecordingBackgroundColor(userRecordingParams.dispSpecs.backgroundColor);\r\n            updateRecordingNameTagsColor(userRecordingParams.dispSpecs.nameTagsColor);\r\n            updateRecordingOrientationVideo(userRecordingParams.dispSpecs.orientationVideo);\r\n            updateRecordingAddText(userRecordingParams.textSpecs?.addText ?? false);\r\n            updateRecordingCustomText(userRecordingParams.textSpecs?.customText ?? '');\r\n            updateRecordingCustomTextPosition(\r\n              userRecordingParams.textSpecs?.customTextPosition ?? '',\r\n            );\r\n            updateRecordingCustomTextColor(userRecordingParams.textSpecs?.customTextColor ?? '');\r\n\r\n            pauseRecordCount = pauseCount;\r\n            updatePauseRecordCount(pauseRecordCount);\r\n\r\n            recordElapsedTime = timeDone;\r\n            recordElapsedTime = Math.floor(recordElapsedTime / 1000);\r\n            recordStartTime = Math.floor(Date.now() / 1000) - recordElapsedTime;\r\n            updateRecordStartTime(recordStartTime);\r\n            updateRecordElapsedTime(recordElapsedTime);\r\n\r\n            recordStarted = true;\r\n            recordPaused = true;\r\n            canLaunchRecord = false;\r\n            recordStopped = false;\r\n\r\n            updateRecordStarted(recordStarted);\r\n            updateRecordPaused(recordPaused);\r\n            updateCanLaunchRecord(canLaunchRecord);\r\n            updateRecordStopped(recordStopped);\r\n            updateShowRecordButtons(true);\r\n\r\n            isTimerRunning = false;\r\n            canPauseResume = true;\r\n\r\n            updateIsTimerRunning(isTimerRunning);\r\n            updateCanPauseResume(canPauseResume);\r\n\r\n            const formattedTime = this.formatElapsedTime(recordElapsedTime);\r\n            updateRecordingProgressTime(formattedTime);\r\n          }\r\n          this.SoundPlayerService.playSound({\r\n            soundUrl: 'https://www.mediasfu.com/sounds/record-paused.mp3',\r\n          });\r\n        } else if (state === 'stop') {\r\n          updateRecordStarted(true);\r\n          updateRecordStopped(true);\r\n          canLaunchRecord = false;\r\n          stopLaunchRecord = true;\r\n\r\n          updateRecordStarted(recordStarted);\r\n          updateRecordStopped(recordStopped);\r\n          updateCanLaunchRecord(canLaunchRecord);\r\n          updateStopLaunchRecord(stopLaunchRecord);\r\n          updateShowRecordButtons(false);\r\n\r\n          updateRecordState('green');\r\n          this.SoundPlayerService.playSound({\r\n            soundUrl: 'https://www.mediasfu.com/sounds/record-stopped.mp3',\r\n          });\r\n        } else {\r\n          updateRecordState('red');\r\n          updateRecordStarted(true);\r\n          updateRecordPaused(false);\r\n          this.SoundPlayerService.playSound({\r\n            soundUrl: 'https://www.mediasfu.com/sounds/record-progress.mp3',\r\n          });\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.log('Error in RecordingNotice: ', error);\r\n      // throw new Error(\"Failed to handle recording state and status.\");\r\n    }\r\n  };\r\n\r\n  private formatElapsedTime = (recordElapsedTime: number): string => {\r\n    const hours = Math.floor(recordElapsedTime / 3600);\r\n    const minutes = Math.floor((recordElapsedTime % 3600) / 60);\r\n    const seconds = recordElapsedTime % 60;\r\n\r\n    return `${this.padNumber(hours)}:${this.padNumber(minutes)}:${this.padNumber(seconds)}`;\r\n  };\r\n\r\n  private padNumber = (number: number): string => {\r\n    return number.toString().padStart(2, '0');\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nexport interface RecordParams {\r\n  recordingAudioPausesLimit: number;\r\n  recordingAudioPausesCount: number;\r\n  recordingAudioSupport: boolean;\r\n  recordingAudioPeopleLimit: number;\r\n  recordingAudioParticipantsTimeLimit: number;\r\n  recordingVideoPausesCount: number;\r\n  recordingVideoPausesLimit: number;\r\n  recordingVideoSupport: boolean;\r\n  recordingVideoPeopleLimit: number;\r\n  recordingVideoParticipantsTimeLimit: number;\r\n  recordingAllParticipantsSupport: boolean;\r\n  recordingVideoParticipantsSupport: boolean;\r\n  recordingAllParticipantsFullRoomSupport: boolean;\r\n  recordingVideoParticipantsFullRoomSupport: boolean;\r\n  recordingPreferredOrientation: string;\r\n  recordingSupportForOtherOrientation: boolean;\r\n  recordingMultiFormatsSupport: boolean;\r\n}\r\n\r\nexport interface RoomRecordParamsParameters {\r\n  updateRecordingAudioPausesLimit: (value: number) => void;\r\n  updateRecordingAudioPausesCount: (value: number) => void;\r\n  updateRecordingAudioSupport: (value: boolean) => void;\r\n  updateRecordingAudioPeopleLimit: (value: number) => void;\r\n  updateRecordingAudioParticipantsTimeLimit: (value: number) => void;\r\n  updateRecordingVideoPausesCount: (value: number) => void;\r\n  updateRecordingVideoPausesLimit: (value: number) => void;\r\n  updateRecordingVideoSupport: (value: boolean) => void;\r\n  updateRecordingVideoPeopleLimit: (value: number) => void;\r\n  updateRecordingVideoParticipantsTimeLimit: (value: number) => void;\r\n  updateRecordingAllParticipantsSupport: (value: boolean) => void;\r\n  updateRecordingVideoParticipantsSupport: (value: boolean) => void;\r\n  updateRecordingAllParticipantsFullRoomSupport: (value: boolean) => void;\r\n  updateRecordingVideoParticipantsFullRoomSupport: (value: boolean) => void;\r\n  updateRecordingPreferredOrientation: (value: string) => void;\r\n  updateRecordingSupportForOtherOrientation: (value: boolean) => void;\r\n  updateRecordingMultiFormatsSupport: (value: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  [key: string]: any;\r\n}\r\nexport interface RoomRecordParamsOptions {\r\n  recordParams: RecordParams;\r\n  parameters: RoomRecordParamsParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type RoomRecordParamsType = ({\r\n  recordParams,\r\n  parameters,\r\n}: RoomRecordParamsOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to update recording parameters for a room.\r\n *\r\n * @class\r\n * @name RoomRecordParams\r\n * @description Updates multiple recording parameters at once, using provided functions for each specific setting.\r\n *\r\n * @method\r\n * roomRecordParams\r\n *\r\n * @param {RoomRecordParamsOptions} options - The options for updating recording parameters:\r\n *   - `recordParams` {RecordParams}: The new recording parameters to apply.\r\n *   - `parameters` {RoomRecordParamsParameters}: The update functions for each recording parameter.\r\n *     - `updateRecordingAudioPausesLimit` {Function}: Updates the audio pauses limit.\r\n *     - `updateRecordingAudioPausesCount` {Function}: Updates the audio pauses count.\r\n *     - `updateRecordingAudioSupport` {Function}: Updates the audio support status.\r\n *     - `updateRecordingAudioPeopleLimit` {Function}: Updates the audio people limit.\r\n *     - `updateRecordingAudioParticipantsTimeLimit` {Function}: Updates the audio participants time limit.\r\n *     - `updateRecordingVideoPausesCount` {Function}: Updates the video pauses count.\r\n *     - `updateRecordingVideoPausesLimit` {Function}: Updates the video pauses limit.\r\n *     - `updateRecordingVideoSupport` {Function}: Updates the video support status.\r\n *     - `updateRecordingVideoPeopleLimit` {Function}: Updates the video people limit.\r\n *     - `updateRecordingVideoParticipantsTimeLimit` {Function}: Updates the video participants time limit.\r\n *     - `updateRecordingAllParticipantsSupport` {Function}: Updates support for all participants.\r\n *     - `updateRecordingVideoParticipantsSupport` {Function}: Updates video participants support.\r\n *     - `updateRecordingAllParticipantsFullRoomSupport` {Function}: Updates full room support for all participants.\r\n *     - `updateRecordingVideoParticipantsFullRoomSupport` {Function}: Updates full room support for video participants.\r\n *     - `updateRecordingPreferredOrientation` {Function}: Updates the preferred recording orientation.\r\n *     - `updateRecordingSupportForOtherOrientation` {Function}: Updates support for other orientations.\r\n *     - `updateRecordingMultiFormatsSupport` {Function}: Updates support for multiple formats.\r\n *\r\n * @returns {Promise<void>} A promise that resolves after all parameters are updated.\r\n *\r\n * @example\r\n * const recordParams = {\r\n *   recordingAudioPausesLimit: 5,\r\n *   recordingAudioPausesCount: 2,\r\n *   recordingAudioSupport: true,\r\n *   recordingAudioPeopleLimit: 10,\r\n *   recordingAudioParticipantsTimeLimit: 60,\r\n *   recordingVideoPausesCount: 1,\r\n *   recordingVideoPausesLimit: 3,\r\n *   recordingVideoSupport: true,\r\n *   recordingVideoPeopleLimit: 8,\r\n *   recordingVideoParticipantsTimeLimit: 90,\r\n *   recordingAllParticipantsSupport: true,\r\n *   recordingVideoParticipantsSupport: true,\r\n *   recordingAllParticipantsFullRoomSupport: false,\r\n *   recordingVideoParticipantsFullRoomSupport: true,\r\n *   recordingPreferredOrientation: 'landscape',\r\n *   recordingSupportForOtherOrientation: false,\r\n *   recordingMultiFormatsSupport: true,\r\n * };\r\n *\r\n * const parameters = {\r\n *   updateRecordingAudioPausesLimit: (value) => console.log(`Audio pauses limit: ${value}`),\r\n *   updateRecordingAudioPausesCount: (value) => console.log(`Audio pauses count: ${value}`),\r\n *   // Define other update functions similarly\r\n * };\r\n *\r\n * roomRecordParamsService.roomRecordParams({ recordParams, parameters });\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RoomRecordParams {\r\n  /**\r\n   * Updates various recording parameters based on the provided `recordParams`.\r\n   *\r\n   * @param {Object} params - The parameters object.\r\n   * @param {RecordParams} params.recordParams - The recording parameters to update.\r\n   * @param {Parameters} params.parameters - The functions to update each recording parameter.\r\n   * @param {Function} params.parameters.updateRecordingAudioPausesLimit - Function to update the audio pauses limit.\r\n   * @param {Function} params.parameters.updateRecordingAudioPausesCount - Function to update the audio pauses count.\r\n   * @param {Function} params.parameters.updateRecordingAudioSupport - Function to update the audio support.\r\n   * @param {Function} params.parameters.updateRecordingAudioPeopleLimit - Function to update the audio people limit.\r\n   * @param {Function} params.parameters.updateRecordingAudioParticipantsTimeLimit - Function to update the audio participants time limit.\r\n   * @param {Function} params.parameters.updateRecordingVideoPausesCount - Function to update the video pauses count.\r\n   * @param {Function} params.parameters.updateRecordingVideoPausesLimit - Function to update the video pauses limit.\r\n   * @param {Function} params.parameters.updateRecordingVideoSupport - Function to update the video support.\r\n   * @param {Function} params.parameters.updateRecordingVideoPeopleLimit - Function to update the video people limit.\r\n   * @param {Function} params.parameters.updateRecordingVideoParticipantsTimeLimit - Function to update the video participants time limit.\r\n   * @param {Function} params.parameters.updateRecordingAllParticipantsSupport - Function to update the all participants support.\r\n   * @param {Function} params.parameters.updateRecordingVideoParticipantsSupport - Function to update the video participants support.\r\n   * @param {Function} params.parameters.updateRecordingAllParticipantsFullRoomSupport - Function to update the all participants full room support.\r\n   * @param {Function} params.parameters.updateRecordingVideoParticipantsFullRoomSupport - Function to update the video participants full room support.\r\n   * @param {Function} params.parameters.updateRecordingPreferredOrientation - Function to update the preferred orientation.\r\n   * @param {Function} params.parameters.updateRecordingSupportForOtherOrientation - Function to update the support for other orientation.\r\n   * @param {Function} params.parameters.updateRecordingMultiFormatsSupport - Function to update the multi-formats support.\r\n   * @returns {Promise<void>} A promise that resolves when all parameters have been updated.\r\n   */\r\n  roomRecordParams = ({ recordParams, parameters }: RoomRecordParamsOptions): void => {\r\n    let {\r\n      updateRecordingAudioPausesLimit,\r\n      updateRecordingAudioPausesCount,\r\n      updateRecordingAudioSupport,\r\n      updateRecordingAudioPeopleLimit,\r\n      updateRecordingAudioParticipantsTimeLimit,\r\n      updateRecordingVideoPausesCount,\r\n      updateRecordingVideoPausesLimit,\r\n      updateRecordingVideoSupport,\r\n      updateRecordingVideoPeopleLimit,\r\n      updateRecordingVideoParticipantsTimeLimit,\r\n      updateRecordingAllParticipantsSupport,\r\n      updateRecordingVideoParticipantsSupport,\r\n      updateRecordingAllParticipantsFullRoomSupport,\r\n      updateRecordingVideoParticipantsFullRoomSupport,\r\n      updateRecordingPreferredOrientation,\r\n      updateRecordingSupportForOtherOrientation,\r\n      updateRecordingMultiFormatsSupport,\r\n    } = parameters;\r\n\r\n    // Update each recording parameter based on the provided recordParams\r\n    updateRecordingAudioPausesLimit(recordParams.recordingAudioPausesLimit);\r\n    updateRecordingAudioPausesCount(recordParams.recordingAudioPausesCount);\r\n    updateRecordingAudioSupport(recordParams.recordingAudioSupport);\r\n    updateRecordingAudioPeopleLimit(recordParams.recordingAudioPeopleLimit);\r\n    updateRecordingAudioParticipantsTimeLimit(recordParams.recordingAudioParticipantsTimeLimit);\r\n    updateRecordingVideoPausesCount(recordParams.recordingVideoPausesCount);\r\n    updateRecordingVideoPausesLimit(recordParams.recordingVideoPausesLimit);\r\n    updateRecordingVideoSupport(recordParams.recordingVideoSupport);\r\n    updateRecordingVideoPeopleLimit(recordParams.recordingVideoPeopleLimit);\r\n    updateRecordingVideoParticipantsTimeLimit(recordParams.recordingVideoParticipantsTimeLimit);\r\n    updateRecordingAllParticipantsSupport(recordParams.recordingAllParticipantsSupport);\r\n    updateRecordingVideoParticipantsSupport(recordParams.recordingVideoParticipantsSupport);\r\n    updateRecordingAllParticipantsFullRoomSupport(\r\n      recordParams.recordingAllParticipantsFullRoomSupport,\r\n    );\r\n    updateRecordingVideoParticipantsFullRoomSupport(\r\n      recordParams.recordingVideoParticipantsFullRoomSupport,\r\n    );\r\n    updateRecordingPreferredOrientation(recordParams.recordingPreferredOrientation);\r\n    updateRecordingSupportForOtherOrientation(recordParams.recordingSupportForOtherOrientation);\r\n    updateRecordingMultiFormatsSupport(recordParams.recordingMultiFormatsSupport);\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Participant } from '../../@types/types';\r\n\r\nexport interface ScreenProducerIdOptions {\r\n  producerId: string;\r\n  screenId: string;\r\n  membersReceived: boolean;\r\n  shareScreenStarted: boolean;\r\n  deferScreenReceived: boolean;\r\n  participants: Participant[];\r\n  updateScreenId: (id: string) => void;\r\n  updateShareScreenStarted: (started: boolean) => void;\r\n  updateDeferScreenReceived: (received: boolean) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ScreenProducerIdType = (options: ScreenProducerIdOptions) => void;\r\n\r\n/**\r\n * Service to manage screen producer ID and screen sharing status for participants.\r\n *\r\n * @class\r\n * @name ScreenProducerId\r\n * @description This service processes and updates the screen producer ID, manages screen sharing states, and defers screen updates as needed based on participant data.\r\n *\r\n * @method\r\n * screenProducerId\r\n *\r\n * @param {ScreenProducerIdOptions} options - Options for handling screen producer ID:\r\n *   - `producerId` {string}: The ID of the screen producer.\r\n *   - `screenId` {string}: The current screen ID.\r\n *   - `membersReceived` {boolean}: Indicates if members data has been received.\r\n *   - `shareScreenStarted` {boolean}: Indicates if screen sharing has started.\r\n *   - `deferScreenReceived` {boolean}: Indicates if screen sharing should be deferred.\r\n *   - `participants` {Participant[]}: The list of current participants.\r\n *   - `updateScreenId` {Function}: Function to update the screen ID.\r\n *   - `updateShareScreenStarted` {Function}: Function to update the screen sharing status.\r\n *   - `updateDeferScreenReceived` {Function}: Function to update the deferred screen status.\r\n *\r\n * @returns {void} Updates states directly through provided functions.\r\n *\r\n * @example\r\n * const options = {\r\n *   producerId: 'abc123',\r\n *   screenId: 'screen45',\r\n *   membersReceived: true,\r\n *   shareScreenStarted: false,\r\n *   deferScreenReceived: false,\r\n *   participants: [\r\n *     { id: 'p1', ScreenID: 'screen45', ScreenOn: true },\r\n *     // Additional participants\r\n *   ],\r\n *   updateScreenId: (id) => console.log(`Screen ID updated to: ${id}`),\r\n *   updateShareScreenStarted: (started) => console.log(`Screen sharing started: ${started}`),\r\n *   updateDeferScreenReceived: (received) => console.log(`Screen sharing deferred: ${received}`)\r\n * };\r\n *\r\n * screenProducerIdService.screenProducerId(options);\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ScreenProducerId {\r\n  /**\r\n   * Handles the screen producer id.\r\n   *\r\n   * @param producerId - The id of the producer.\r\n   * @param screenId - The id of the screen.\r\n   * @param membersReceived - Whether the members data has been received.\r\n   * @param shareScreenStarted - Whether the screen sharing has started.\r\n   * @param deferScreenReceived - Whether the screen sharing has been deferred.\r\n   * @param participants - The list of participants.\r\n   * @param updateScreenId - Function to update the screen id.\r\n   * @param updateShareScreenStarted - Function to update the screen sharing status.\r\n   * @param updateDeferScreenReceived - Function to update the screen sharing defer status.\r\n   */\r\n  screenProducerId = ({\r\n    producerId,\r\n    screenId,\r\n    membersReceived,\r\n    shareScreenStarted,\r\n    deferScreenReceived,\r\n    participants,\r\n    updateScreenId,\r\n    updateShareScreenStarted,\r\n    updateDeferScreenReceived,\r\n  }: ScreenProducerIdOptions): void => {\r\n    // Check if members data has been received with the screenId participant in it\r\n    let host = participants.find(\r\n      (participant: Participant) =>\r\n        participant.ScreenID === screenId && participant.ScreenOn === true,\r\n    );\r\n\r\n    // Operations to update the UI\r\n    if (host && membersReceived) {\r\n      screenId = producerId;\r\n      shareScreenStarted = true;\r\n      deferScreenReceived = false;\r\n\r\n      updateScreenId(screenId);\r\n      updateShareScreenStarted(shareScreenStarted);\r\n      updateDeferScreenReceived(deferScreenReceived);\r\n    } else {\r\n      deferScreenReceived = true;\r\n      screenId = producerId;\r\n\r\n      updateScreenId(screenId);\r\n      updateDeferScreenReceived(deferScreenReceived);\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface StartRecordsOptions {\r\n  roomName: string;\r\n  member: string;\r\n  socket: Socket;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type StartRecordsType = (options: StartRecordsOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to initiate recording for a specified room.\r\n *\r\n * @class\r\n * @name StartRecords\r\n * @description Sends a request to the server to begin recording a room, using socket communication.\r\n *\r\n * @method\r\n * startRecords\r\n *\r\n * @param {StartRecordsOptions} options - Options required to start the recording:\r\n *   - `roomName` {string}: The name of the room to record.\r\n *   - `member` {string}: The identifier of the member initiating the recording.\r\n *   - `socket` {Socket}: The socket instance for server communication.\r\n *\r\n * @returns {Promise<void>} Resolves when the server confirms the recording start request.\r\n *\r\n * @example\r\n * const options = {\r\n *   roomName: 'Room101',\r\n *   member: 'user123',\r\n *   socket: io('http://localhost:3000')\r\n * };\r\n * startRecordsService.startRecords(options);\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StartRecords {\r\n  /**\r\n   * Starts recording the room.\r\n   *\r\n   * @param {Object} options - The options for starting the recording.\r\n   * @param {string} options.roomName - The name of the room to start recording.\r\n   * @param {string} options.member - The member starting the recording.\r\n   * @param {Socket} options.socket - The socket instance for communication.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the recording is started.\r\n   */\r\n  startRecords = async ({ roomName, member, socket }: StartRecordsOptions): Promise<void> => {\r\n    // Send the 'startRecording' event to the server with roomName and member information\r\n    socket.emit('startRecordIng', { roomName, member }, ({ success }: { success: boolean }) => {\r\n      // Handle the success or failure of starting recording (if needed)\r\n      if (success) {\r\n        console.log('Recording started successfully');\r\n      } else {\r\n        console.log('Recording failed to start');\r\n      }\r\n    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\n\r\nexport interface StoppedRecordingOptions {\r\n  state: string;\r\n  reason: string;\r\n  showAlert?: ShowAlert;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type StoppedRecordingType = (options: StoppedRecordingOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to display an alert message when recording has stopped.\r\n *\r\n * @class\r\n * @name StoppedRecording\r\n * @description Provides a method to show an alert indicating that the recording has stopped.\r\n *\r\n * @method\r\n * stoppedRecording\r\n *\r\n * @param {StoppedRecordingOptions} options - Options for displaying the alert:\r\n *   - `state` {string}: The state of the recording, typically 'stop'.\r\n *   - `reason` {string}: The reason for stopping the recording.\r\n *   - `showAlert` {Function}: Optional function to show alert messages.\r\n *\r\n * @returns {Promise<void>} Resolves when the alert message has been displayed.\r\n *\r\n * @example\r\n * const options = {\r\n *   state: 'stop',\r\n *   reason: 'User ended recording',\r\n *   showAlert: ({ message, duration, type }) => console.log(message)\r\n * };\r\n * stoppedRecordingService.stoppedRecording(options);\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StoppedRecording {\r\n  /**\r\n   * Displays an alert message when the recording has stopped.\r\n   *\r\n   * @param {Object} options - The options for displaying the alert message.\r\n   * @param {string} options.state - The state of the recording.\r\n   * @param {string} options.reason - The reason for stopping the recording.\r\n   * @param {Function} options.showAlert - Function to show alerts.\r\n   * @returns {Promise<void>} A promise that resolves when the alert message is displayed.\r\n   */\r\n  stoppedRecording = async ({\r\n    state,\r\n    reason,\r\n    showAlert,\r\n  }: StoppedRecordingOptions): Promise<void> => {\r\n    try {\r\n      if (state === 'stop') {\r\n        showAlert?.({\r\n          message: `The recording has stopped - ${reason}.`,\r\n          duration: 3000,\r\n          type: 'danger',\r\n        });\r\n      }\r\n    } catch (error) {\r\n      console.error('Error in stoppedRecording: ', error);\r\n      // throw new Error(\"Failed to display the recording stopped alert message.\");\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\n\r\nexport interface TimeLeftRecordingOptions {\r\n  timeLeft: number;\r\n  showAlert?: ShowAlert;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type TimeLeftRecordingType = (options: TimeLeftRecordingOptions) => void;\r\n\r\n\r\n/**\r\n * Service to display an alert indicating the remaining recording time.\r\n *\r\n * @class\r\n * @name TimeLeftRecording\r\n * @description Provides a method to show an alert when the recording is close to its end.\r\n *\r\n * @method\r\n * timeLeftRecording\r\n *\r\n * @param {TimeLeftRecordingOptions} options - Options for the remaining time alert:\r\n *   - `timeLeft` {number}: The time left in seconds before the recording stops.\r\n *   - `showAlert` {Function}: Optional function to display the alert message.\r\n *\r\n * @example\r\n * const options = {\r\n *   timeLeft: 30,\r\n *   showAlert: ({ message, duration, type }) => console.log(message)\r\n * };\r\n * timeLeftRecordingService.timeLeftRecording(options);\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class TimeLeftRecording {\r\n  /**\r\n   * Displays an alert message indicating the remaining time left for recording.\r\n   *\r\n   * @param {TimeLeftRecordingOptions} options - The options for the time left recording.\r\n   * @param {number} options.timeLeft - The amount of time left in seconds.\r\n   * @param {Function} options.showAlert - The function to display the alert message.\r\n   *\r\n   * @throws {Error} If there is an issue displaying the alert message.\r\n   */\r\n  timeLeftRecording = ({ timeLeft, showAlert }: TimeLeftRecordingOptions): void => {\r\n    try {\r\n      // Display alert message\r\n\r\n      showAlert?.({\r\n        message: `The recording will stop in less than ${timeLeft} seconds.`,\r\n        duration: 3000,\r\n        type: 'danger',\r\n      });\r\n    } catch (error) {\r\n      console.log('Error in timeLeftRecording: ', error);\r\n      // throw new Error(\"Failed to display the time left alert message.\");\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  ConnectIpsType,\r\n  GetDomainsType,\r\n  ConnectIpsParameters,\r\n  GetDomainsParameters,\r\n  AltDomains,\r\n  Participant,\r\n  ConsumeSocket,\r\n} from '../../@types/types';\r\n\r\nexport interface UpdateConsumingDomainsParameters\r\n  extends ConnectIpsParameters,\r\n    GetDomainsParameters {\r\n  participants: Participant[];\r\n  consume_sockets: ConsumeSocket[];\r\n\r\n  // mediasfu functions\r\n  connectIps: ConnectIpsType;\r\n  getDomains: GetDomainsType;\r\n\r\n  getUpdatedAllParams: () => UpdateConsumingDomainsParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface UpdateConsumingDomainsOptions {\r\n  domains: string[];\r\n  alt_domains: AltDomains;\r\n  apiUserName: string;\r\n  apiKey: string;\r\n  apiToken: string;\r\n  parameters: UpdateConsumingDomainsParameters;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type UpdateConsumingDomainsType = (options: UpdateConsumingDomainsOptions) => Promise<void>;\r\n\r\n/**\r\n * Service to update consuming domains based on specified options and parameters.\r\n *\r\n * @class\r\n * @name UpdateConsumingDomains\r\n * @description Provides a method to update consuming domains and optionally connect IPs based on the domains provided.\r\n *\r\n * @method\r\n * updateConsumingDomains\r\n *\r\n * @param {UpdateConsumingDomainsOptions} options - Options for updating consuming domains:\r\n *   - `domains` {Array<string>}: The list of domains to be updated.\r\n *   - `alt_domains` {AltDomains}: Alternative domains for fallback scenarios.\r\n *   - `apiUserName` {string}: API username for authentication.\r\n *   - `apiKey` {string}: API key for access.\r\n *   - `apiToken` {string}: API token for additional security.\r\n *   - `parameters` {UpdateConsumingDomainsParameters}: The parameters needed for updating, including:\r\n *     - `participants` {Array<Participant>}: List of participants.\r\n *     - `consume_sockets` {Array<ConsumeSocket>}: Sockets to use for consuming domains.\r\n *     - `getDomains` {Function}: Function to retrieve current domain configurations.\r\n *     - `connectIps` {Function}: Function to initiate IP connections.\r\n *     - `getUpdatedAllParams` {Function}: Refreshes and returns the latest parameters.\r\n *\r\n * @returns {Promise<void>} Resolves when the consuming domains have been successfully updated.\r\n *\r\n * @example\r\n * const options = {\r\n *   domains: ['example.com', 'sample.org'],\r\n *   alt_domains: { primary: 'primary.com', backup: 'backup.com' },\r\n *   apiUserName: 'user123',\r\n *   apiKey: 'apikey123',\r\n *   apiToken: 'token123',\r\n *   parameters: {\r\n *     participants: [{ id: '1', name: 'John Doe' }],\r\n *     consume_sockets: [socket1, socket2],\r\n *     getDomains: (opts) => fetchDomains(opts),\r\n *     connectIps: (opts) => connectToIPs(opts),\r\n *     getUpdatedAllParams: () => refreshParams(),\r\n *   },\r\n * };\r\n * await updateConsumingDomainsService.updateConsumingDomains(options);\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UpdateConsumingDomains {\r\n  /**\r\n   * Updates the consuming domains based on the provided options.\r\n   *\r\n   * @param {Object} options - The options for updating the consuming domains.\r\n   * @param {Array<string>} options.domains - The consuming domains to update.\r\n   * @param {Object} options.alt_domains - The alternative consuming domains to update.\r\n   * @param {string} options.apiUserName - The API username for the consuming domains.\r\n   * @param {string} options.apiKey - The API key for the consuming domains.\r\n   * @param {string} options.apiToken - The API token for the consuming domains.\r\n   * @param {Object} options.parameters - The parameters for updating the consuming domains.\r\n   * @param {Array<Participant>} options.parameters.participants - The participants to update consuming domains for.\r\n   * @param {Array<ConsumeSocket>} options.parameters.consume_sockets - The consume sockets to update consuming domains for.\r\n   * @param {Function} options.parameters.getDomains - Function to get the consuming domains.\r\n   * @param {Function} options.parameters.connectIps - Function to connect IPs.\r\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\r\n   *\r\n   * @returns {Promise<void>} A promise that resolves when the consuming domains have been updated.\r\n   *\r\n   * @throws Will log an error message if an error occurs during the update process.\r\n   */\r\n  updateConsumingDomains = async ({\r\n    domains,\r\n    alt_domains,\r\n    parameters,\r\n    apiUserName,\r\n    apiKey,\r\n    apiToken,\r\n  }: UpdateConsumingDomainsOptions): Promise<void> => {\r\n    let { participants, getDomains, consume_sockets, connectIps } = parameters;\r\n\r\n    parameters = parameters.getUpdatedAllParams();\r\n    consume_sockets = parameters.consume_sockets;\r\n\r\n    console.log('Updating consuming domains...');\r\n\r\n    try {\r\n      // Check if participants array is not empty\r\n      if (participants.length > 0) {\r\n        // Check if alt_domains has keys and remove duplicates\r\n        if (Object.keys(alt_domains).length > 0) {\r\n          console.log('Getting domains...');\r\n          await getDomains({ domains, alt_domains, apiUserName, apiKey, apiToken, parameters });\r\n        } else {\r\n          await connectIps({\r\n            consume_sockets,\r\n            remIP: domains,\r\n            parameters,\r\n            apiUserName,\r\n            apiKey,\r\n            apiToken,\r\n          });\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.log('Error in updateConsumingDomains: ', error);\r\n      // throw new Error('Failed to update consuming domains.');\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Settings } from '../../@types/types';\r\nexport interface UpdateMediaSettingsOptions {\r\n  settings: Settings;\r\n  updateAudioSetting: (value: string) => void;\r\n  updateVideoSetting: (value: string) => void;\r\n  updateScreenshareSetting: (value: string) => void;\r\n  updateChatSetting: (value: string) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type UpdateMediaSettingsType = (options: UpdateMediaSettingsOptions) => void;\r\n\r\n/**\r\n * Service for updating media settings including audio, video, screenshare, and chat.\r\n *\r\n * @class\r\n * @name UpdateMediaSettings\r\n * @description Provides a method to update multiple media settings at once using specified update functions.\r\n *\r\n * @method\r\n * updateMediaSettings\r\n *\r\n * @param {UpdateMediaSettingsOptions} options - Options for updating media settings:\r\n *   - `settings` {Settings}: The settings values to apply.\r\n *   - `updateAudioSetting` {Function}: Function to update the audio setting.\r\n *   - `updateVideoSetting` {Function}: Function to update the video setting.\r\n *   - `updateScreenshareSetting` {Function}: Function to update the screenshare setting.\r\n *   - `updateChatSetting` {Function}: Function to update the chat setting.\r\n *\r\n * @returns {void} Updates settings directly through the provided functions.\r\n *\r\n * @example\r\n * const settings = ['mute', 'HD', 'enabled', 'disabled'];\r\n * const options = {\r\n *   settings,\r\n *   updateAudioSetting: (value) => console.log(`Audio setting updated to: ${value}`),\r\n *   updateVideoSetting: (value) => console.log(`Video setting updated to: ${value}`),\r\n *   updateScreenshareSetting: (value) => console.log(`Screenshare setting updated to: ${value}`),\r\n *   updateChatSetting: (value) => console.log(`Chat setting updated to: ${value}`)\r\n * };\r\n * updateMediaSettingsService.updateMediaSettings(options);\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UpdateMediaSettings {\r\n  /**\r\n   * Updates the media settings by invoking the provided update functions for each setting.\r\n   *\r\n   * @param {Object} options - The options for updating the media settings.\r\n   * @param {Settings} options.settings - The media settings to update.\r\n   * @param {Function} options.updateAudioSetting - Function to update the audio setting.\r\n   * @param {Function} options.updateVideoSetting - Function to update the video setting.\r\n   * @param {Function} options.updateScreenshareSetting - Function to update the screenshare setting.\r\n   * @param {Function} options.updateChatSetting - Function to update the chat setting.\r\n   * @returns {void} A promise that resolves when the media settings have been updated.\r\n   * @memberof UpdateMediaSettings\r\n   */\r\n\r\n  updateMediaSettings = ({\r\n    settings,\r\n    updateAudioSetting,\r\n    updateVideoSetting,\r\n    updateScreenshareSetting,\r\n    updateChatSetting,\r\n  }: UpdateMediaSettingsOptions): void => {\r\n    const [audioSetting, videoSetting, screenshareSetting, chatSetting] = settings;\r\n\r\n    // Update audio setting\r\n    updateAudioSetting(audioSetting);\r\n    // Update video setting\r\n    updateVideoSetting(videoSetting);\r\n    // Update screenshare setting\r\n    updateScreenshareSetting(screenshareSetting);\r\n    // Update chat setting\r\n    updateChatSetting(chatSetting);\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CoHostResponsibility, EventType, ShowAlert } from '../../@types/types';\r\nexport interface UpdatedCoHostOptions {\r\n  coHost: string;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  showAlert?: ShowAlert;\r\n  eventType: EventType;\r\n  islevel: string;\r\n  member: string;\r\n  youAreCoHost: boolean;\r\n  updateCoHost: (coHost: string) => void;\r\n  updateCoHostResponsibility: (responsibility: CoHostResponsibility[]) => void;\r\n  updateYouAreCoHost: (youAreCoHost: boolean) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type UpdatedCoHostType = (options: UpdatedCoHostOptions) => Promise<void>;\r\n\r\n/**\r\n * Service for updating co-host information, responsibilities, and the user's co-host status.\r\n *\r\n * @class\r\n * @name UpdatedCoHost\r\n * @description Manages co-host updates for different event types, assigning responsibilities and notifying the user if their co-host status changes.\r\n *\r\n * @method\r\n * updatedCoHost\r\n * @async\r\n *\r\n * @param {UpdatedCoHostOptions} options - The options for co-host updates:\r\n *   - `coHost` {string}: The name of the co-host.\r\n *   - `coHostResponsibility` {CoHostResponsibility[]}: List of responsibilities assigned to the co-host.\r\n *   - `showAlert` {ShowAlert}: Optional function to display an alert message.\r\n *   - `eventType` {EventType}: Type of the event, determining if co-host can be updated.\r\n *   - `islevel` {string}: Current level of the event.\r\n *   - `member` {string}: The current user's identifier.\r\n *   - `youAreCoHost` {boolean}: Current user's co-host status.\r\n *   - `updateCoHost` {Function}: Function to set the new co-host.\r\n *   - `updateCoHostResponsibility` {Function}: Function to assign responsibilities to the co-host.\r\n *   - `updateYouAreCoHost` {Function}: Function to update the user's co-host status.\r\n *\r\n * @returns {Promise<void>} Resolves after co-host information is updated.\r\n *\r\n * @example\r\n * const options = {\r\n *   coHost: 'Alice',\r\n *   coHostResponsibility: ['moderate', 'manageParticipants'],\r\n *   showAlert: ({ message, type, duration }) => console.log(message),\r\n *   eventType: 'conference',\r\n *   islevel: '1',\r\n *   member: 'Alice',\r\n *   youAreCoHost: false,\r\n *   updateCoHost: (newCoHost) => console.log(`Updated co-host: ${newCoHost}`),\r\n *   updateCoHostResponsibility: (responsibilities) => console.log(responsibilities),\r\n *   updateYouAreCoHost: (status) => console.log(`You are co-host: ${status}`)\r\n * };\r\n * await updatedCoHostService.updatedCoHost(options);\r\n */\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UpdatedCoHost {\r\n  /**\r\n   * Updates the co-host information, responsibility, and user's co-host status based on the provided options.\r\n   *\r\n   * @param options - The options for updating the co-host.\r\n   * @param options.coHost - The co-host to be updated.\r\n   * @param options.coHostResponsibility - The responsibility of the co-host.\r\n   * @param options.showAlert - A function to show alerts.\r\n   * @param options.eventType - The type of event triggering the update.\r\n   * @param options.islevel - The level of the event.\r\n   * @param options.member - The member to be checked against the co-host.\r\n   * @param options.youAreCoHost - The current co-host status of the user.\r\n   * @param options.updateCoHost - A function to update the co-host.\r\n   * @param options.updateCoHostResponsibility - A function to update the co-host's responsibility.\r\n   * @param options.updateYouAreCoHost - A function to update the user's co-host status.\r\n   *\r\n   * @returns A promise that resolves when the co-host information has been updated.\r\n   */\r\n  updatedCoHost = async ({\r\n    coHost,\r\n    coHostResponsibility,\r\n    showAlert,\r\n    eventType,\r\n    islevel,\r\n    member,\r\n    youAreCoHost,\r\n    updateCoHost,\r\n    updateCoHostResponsibility,\r\n    updateYouAreCoHost,\r\n  }: UpdatedCoHostOptions): Promise<void> => {\r\n    // Update co-host information, responsibility, and user's co-host status\r\n    if (eventType !== 'broadcast' && eventType !== 'chat') {\r\n      // Only update the co-host if the event type is not broadcast or chat\r\n      updateCoHost(coHost);\r\n      updateCoHostResponsibility(coHostResponsibility);\r\n\r\n      if (member === coHost) {\r\n        if (!youAreCoHost) {\r\n          updateYouAreCoHost(true);\r\n\r\n          showAlert?.({\r\n            message: 'You are now a co-host.',\r\n            type: 'success',\r\n            duration: 3000,\r\n          });\r\n        }\r\n      } else {\r\n        updateYouAreCoHost(false);\r\n      }\r\n    } else {\r\n      if (islevel !== '2') {\r\n        updateYouAreCoHost(true);\r\n      }\r\n    }\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\nexport interface UserWaitingOptions {\r\n  name: string;\r\n  showAlert?: ShowAlert;\r\n  totalReqWait: number;\r\n  updateTotalReqWait: (total: number) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type UserWaitingType = (options: UserWaitingOptions) => Promise<void>;\r\n\r\n/**\r\n * Service for handling user waiting room actions, including notifications and updating request counts.\r\n *\r\n * @class\r\n * @name UserWaiting\r\n * @description Manages the logic when a user joins the waiting room by displaying alerts and incrementing the total request count.\r\n *\r\n * @method\r\n * userWaiting\r\n * @async\r\n *\r\n * @param {UserWaitingOptions} options - The options for handling user waiting actions:\r\n *   - `name` {string}: Name of the user joining the waiting room.\r\n *   - `showAlert` {ShowAlert}: Optional function for showing an alert with a customizable message, type, and duration.\r\n *   - `totalReqWait` {number}: Current count of waiting requests.\r\n *   - `updateTotalReqWait` {Function}: Updates the total waiting request count.\r\n *\r\n * @returns {Promise<void>} Resolves after alert is shown and request count is updated.\r\n *\r\n * @example\r\n * const options = {\r\n *   name: 'Alice',\r\n *   showAlert: ({ message, type, duration }) => console.log(message),\r\n *   totalReqWait: 3,\r\n *   updateTotalReqWait: (newTotal) => console.log(`Updated count: ${newTotal}`)\r\n * };\r\n * await userWaitingService.userWaiting(options);\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UserWaiting {\r\n  userWaiting = async ({\r\n    name,\r\n    showAlert,\r\n    totalReqWait,\r\n    updateTotalReqWait,\r\n  }: UserWaitingOptions): Promise<void> => {\r\n    // Display an alert/notification about the user joining the waiting room\r\n    showAlert?.({\r\n      message: `${name} joined the waiting room.`,\r\n      type: 'success',\r\n      duration: 3000,\r\n    });\r\n\r\n    // Update the total number of requests waiting in the waiting room\r\n    const totalReqs = totalReqWait + 1;\r\n    updateTotalReqWait(totalReqs);\r\n  };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\nimport {\r\n  Component,\r\n  Input,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  ViewChild,\r\n  ElementRef,\r\n  OnInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { SelfieSegmentation } from '@mediapipe/selfie_segmentation';\r\nimport {\r\n  ConnectSendTransportVideoParameters,\r\n  ConnectSendTransportVideoType,\r\n  CreateSendTransportParameters,\r\n  CreateSendTransportType,\r\n  DisconnectSendTransportVideoParameters,\r\n  DisconnectSendTransportVideoType,\r\n  OnScreenChangesParameters,\r\n  OnScreenChangesType,\r\n  ShowAlert,\r\n  SleepType,\r\n  VidCons,\r\n} from '../../../@types/types';\r\nimport { Producer, ProducerOptions } from 'mediasoup-client/lib/types';\r\n\r\nexport interface BackgroundModalParameters\r\n  extends CreateSendTransportParameters,\r\n    ConnectSendTransportVideoParameters,\r\n    DisconnectSendTransportVideoParameters,\r\n    OnScreenChangesParameters {\r\n  customImage: string;\r\n  selectedImage: string;\r\n  segmentVideo: MediaStream | null;\r\n  selfieSegmentation: SelfieSegmentation | null;\r\n  pauseSegmentation: boolean;\r\n  processedStream: MediaStream | null;\r\n  keepBackground: boolean;\r\n  backgroundHasChanged: boolean;\r\n  virtualStream: MediaStream | null;\r\n  mainCanvas: HTMLCanvasElement | null;\r\n  prevKeepBackground: boolean;\r\n  appliedBackground: boolean;\r\n  videoAlreadyOn: boolean;\r\n  audioOnlyRoom: boolean;\r\n  islevel: string;\r\n  recordStarted: boolean;\r\n  recordResumed: boolean;\r\n  recordPaused: boolean;\r\n  recordStopped: boolean;\r\n  recordingMediaOptions: string;\r\n  showAlert?: ShowAlert;\r\n  localStreamVideo: MediaStream | null;\r\n  vidCons: VidCons;\r\n  frameRate: number;\r\n  targetResolution: string;\r\n  updateCustomImage: (image: string) => void;\r\n  updateSelectedImage: (image: string) => void;\r\n  updateSegmentVideo: (stream: MediaStream | null) => void;\r\n  updateSelfieSegmentation: (segmentation: SelfieSegmentation | null) => void;\r\n  updatePauseSegmentation: (pause: boolean) => void;\r\n  updateProcessedStream: (stream: MediaStream | null) => void;\r\n  updateKeepBackground: (keep: boolean) => void;\r\n  updateBackgroundHasChanged: (changed: boolean) => void;\r\n  updateVirtualStream: (stream: MediaStream | null) => void;\r\n  updatePrevKeepBackground: (prev: boolean) => void;\r\n  updateAppliedBackground: (applied: boolean) => void;\r\n  videoProducer: Producer | null;\r\n  transportCreated: boolean;\r\n  videoParams: ProducerOptions;\r\n  updateVideoParams: (params: ProducerOptions) => void;\r\n  autoClickBackground: boolean;\r\n  updateAutoClickBackground: (autoClick: boolean) => void;\r\n  updateMainCanvas: (canvas: HTMLCanvasElement) => void;\r\n\r\n  // mediasfu functions\r\n  createSendTransport: CreateSendTransportType;\r\n  connectSendTransportVideo: ConnectSendTransportVideoType;\r\n  disconnectSendTransportVideo: DisconnectSendTransportVideoType;\r\n  onScreenChanges: OnScreenChangesType;\r\n  sleep: SleepType;\r\n\r\n  getUpdatedAllParams: () => BackgroundModalParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface BackgroundModalOptions {\r\n  isVisible: boolean;\r\n  parameters: BackgroundModalParameters;\r\n  position: string;\r\n  backgroundColor: string;\r\n  onClose: () => void;\r\n}\r\n\r\n// export the type definition for the component\r\nexport type BackgroundModalType = (options: BackgroundModalOptions) => HTMLElement;\r\n\r\n/**\r\n * BackgroundModal - Component to manage background selection and manipulation in media streams.\r\n *\r\n * This component allows users to choose, apply, and manipulate virtual backgrounds for media streams, leveraging MediaPipe’s Selfie Segmentation and MediaSoup functionalities.\r\n *\r\n * @component\r\n * @name BackgroundModal\r\n * @example\r\n * ```typescript\r\n * <app-background-modal\r\n *   [isVisible]=\"isModalVisible\"\r\n *   [parameters]=\"modalParameters\"\r\n *   position=\"topLeft\"\r\n *   backgroundColor=\"#f5f5f5\"\r\n *   (onClose)=\"handleModalClose()\"\r\n * ></app-background-modal>\r\n * ```\r\n *\r\n * @param {boolean} isVisible - Visibility state of the modal.\r\n * @param {BackgroundModalParameters} parameters - Parameters including settings and methods for media and background management.\r\n * @param {string} position - The position of the modal, e.g., 'topLeft'.\r\n * @param {string} backgroundColor - Background color of the modal.\r\n * @param {Function} onClose - Callback function when the modal is closed.\r\n *\r\n * @property {faTimes} faTimes - Icon used for closing the modal.\r\n * @property {string} customImage - Custom image URL for background.\r\n * @property {string} selectedImage - Selected image URL for background.\r\n * @property {MediaStream | null} segmentVideo - Media stream for video segmentation.\r\n * @property {SelfieSegmentation | null} selfieSegmentation - SelfieSegmentation instance.\r\n * @property {boolean} pauseSegmentation - Pause state for segmentation.\r\n * @property {MediaStream | null} processedStream - Processed media stream with applied background.\r\n * @property {boolean} keepBackground - State to keep or reset background.\r\n *\r\n * @method\r\n * ngOnInit - Initializes the modal component by updating properties based on parameters.\r\n */\r\n\r\n\r\n@Component({\r\n    selector: 'app-background-modal',\r\n    imports: [CommonModule, FontAwesomeModule],\r\n    templateUrl: './background-modal.component.html',\r\n    styleUrls: ['./background-modal.component.css']\r\n})\r\nexport class BackgroundModal implements OnChanges, OnInit {\r\n  @Input() isVisible = false;\r\n  @Input() parameters: BackgroundModalParameters = {} as BackgroundModalParameters;\r\n  @Input() position = 'topLeft';\r\n  @Input() backgroundColor = '#f5f5f5';\r\n  @Input() onClose: () => void = () => {\r\n    console.log('onClose');\r\n  };\r\n\r\n  @ViewChild('defaultImagesContainer') defaultImagesContainerRef!: ElementRef;\r\n  @ViewChild('uploadImageInput') uploadImageInputRef!: ElementRef;\r\n  @ViewChild('backgroundCanvas') backgroundCanvasRef!: ElementRef;\r\n  @ViewChild('videoPreview') videoPreviewRef!: ElementRef;\r\n  @ViewChild('captureVideo') captureVideoRef!: ElementRef;\r\n  @ViewChild('loadingOverlay') loadingOverlayRef!: ElementRef;\r\n  @ViewChild('applyBackgroundButton') applyBackgroundButtonRef!: ElementRef;\r\n  @ViewChild('saveBackgroundButton') saveBackgroundButtonRef!: ElementRef;\r\n\r\n  faTimes = faTimes;\r\n\r\n  customImage = '';\r\n  selectedImage = '';\r\n  segmentVideo: MediaStream | null = null;\r\n  selfieSegmentation: SelfieSegmentation | null = null;\r\n  pauseSegmentation = false;\r\n  processedStream: MediaStream | null = null;\r\n  keepBackground = false;\r\n  backgroundHasChanged = false;\r\n  virtualStream: MediaStream | null = null;\r\n  mainCanvas!: HTMLCanvasElement;\r\n  prevKeepBackground = false;\r\n  appliedBackground = false;\r\n  videoAlreadyOn = false;\r\n  audioOnlyRoom = false;\r\n  islevel = '0';\r\n  recordStarted = false;\r\n  recordResumed = false;\r\n  recordPaused = false;\r\n  recordStopped = false;\r\n  recordingMediaOptions = '';\r\n  vidCons: any = {};\r\n  frameRate = 5;\r\n  targetResolution = '1280x720';\r\n  videoParams: ProducerOptions = {};\r\n  autoClickBackground = false;\r\n  localStreamVideo: MediaStream | null = null;\r\n\r\n  clonedStream: MediaStream | null = null;\r\n  clonedTrack: MediaStreamTrack | null = null;\r\n\r\n  updateCustomImage!: (value: string) => void;\r\n  updateSelectedImage!: (value: string) => void;\r\n  updateSegmentVideo!: (value: MediaStream | null) => void;\r\n  updateSelfieSegmentation!: (value: SelfieSegmentation | null) => void;\r\n  updatePauseSegmentation!: (value: boolean) => void;\r\n  updateProcessedStream!: (value: MediaStream | null) => void;\r\n  updateKeepBackground!: (value: boolean) => void;\r\n  updateBackgroundHasChanged!: (value: boolean) => void;\r\n  updateVirtualStream!: (value: MediaStream | null) => void;\r\n  updateMainCanvas!: (value: HTMLCanvasElement) => void;\r\n  updatePrevKeepBackground!: (value: boolean) => void;\r\n  updateAppliedBackground!: (value: boolean) => void;\r\n  updateVideoParams!: (value: ProducerOptions) => void;\r\n  updateAutoClickBackground!: (value: boolean) => void;\r\n\r\n  // Media functions\r\n  createSendTransport!: CreateSendTransportType;\r\n  connectSendTransportVideo!: ConnectSendTransportVideoType;\r\n  disconnectSendTransportVideo!: DisconnectSendTransportVideoType;\r\n  onScreenChanges!: OnScreenChangesType;\r\n  sleep!: SleepType;\r\n\r\n  ngOnInit() {\r\n    // Initialize local properties from the parameters\r\n    if (this.parameters) {\r\n      try {\r\n        this.updateVariables();\r\n      } catch {\r\n        /* handle error */\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['isVisible']) {\r\n      this.onVisibilityChange();\r\n    }\r\n\r\n    if (changes['autoClickBackground']) {\r\n      console.log(\r\n        'Auto click background changed:',\r\n        this.autoClickBackground,\r\n        changes['autoClickBackground'],\r\n      );\r\n    }\r\n  }\r\n\r\n  updateVariables() {\r\n    this.customImage = this.parameters.customImage || '';\r\n    this.selectedImage = this.parameters.selectedImage || '';\r\n    this.segmentVideo = this.parameters.segmentVideo || null;\r\n    this.selfieSegmentation = this.parameters.selfieSegmentation || null;\r\n    this.pauseSegmentation = this.parameters.pauseSegmentation || false;\r\n    this.processedStream = this.parameters.processedStream || null;\r\n    this.keepBackground = this.parameters.keepBackground || false;\r\n    this.backgroundHasChanged = this.parameters.backgroundHasChanged || false;\r\n    this.virtualStream = this.parameters.virtualStream || null;\r\n    this.mainCanvas = this.parameters.mainCanvas || this.backgroundCanvasRef?.nativeElement || null;\r\n    this.prevKeepBackground = this.parameters.prevKeepBackground || false;\r\n    this.appliedBackground = this.parameters.appliedBackground || false;\r\n    this.videoAlreadyOn = this.parameters.videoAlreadyOn || false;\r\n    this.audioOnlyRoom = this.parameters.audioOnlyRoom || false;\r\n    this.islevel = this.parameters.islevel || '0';\r\n    this.recordStarted = this.parameters.recordStarted || false;\r\n    this.recordResumed = this.parameters.recordResumed || false;\r\n    this.recordPaused = this.parameters.recordPaused || false;\r\n    this.recordStopped = this.parameters.recordStopped || false;\r\n    this.recordingMediaOptions = this.parameters.recordingMediaOptions || '';\r\n    this.vidCons = this.parameters.vidCons || {};\r\n    this.frameRate = this.parameters.frameRate || 5;\r\n    this.videoParams = this.parameters.videoParams || null;\r\n    this.autoClickBackground = this.parameters.autoClickBackground || false;\r\n    this.localStreamVideo = this.parameters.localStreamVideo || null;\r\n\r\n    // Assign method references\r\n    this.updateCustomImage = this.parameters.updateCustomImage;\r\n    this.updateSelectedImage = this.parameters.updateSelectedImage;\r\n    this.updateSegmentVideo = this.parameters.updateSegmentVideo;\r\n    this.updateSelfieSegmentation = this.parameters.updateSelfieSegmentation;\r\n    this.updatePauseSegmentation = this.parameters.updatePauseSegmentation;\r\n    this.updateProcessedStream = this.parameters.updateProcessedStream;\r\n    this.updateKeepBackground = this.parameters.updateKeepBackground;\r\n    this.updateBackgroundHasChanged = this.parameters.updateBackgroundHasChanged;\r\n    this.updateVirtualStream = this.parameters.updateVirtualStream;\r\n    this.updateMainCanvas = this.parameters.updateMainCanvas;\r\n    this.updatePrevKeepBackground = this.parameters.updatePrevKeepBackground;\r\n    this.updateAppliedBackground = this.parameters.updateAppliedBackground;\r\n    this.updateVideoParams = this.parameters.updateVideoParams;\r\n    this.updateAutoClickBackground = this.parameters.updateAutoClickBackground;\r\n\r\n    this.createSendTransport = this.parameters.createSendTransport;\r\n    this.connectSendTransportVideo = this.parameters.connectSendTransportVideo;\r\n    this.disconnectSendTransportVideo = this.parameters.disconnectSendTransportVideo;\r\n    this.onScreenChanges = this.parameters.onScreenChanges;\r\n    this.sleep = this.parameters.sleep;\r\n  }\r\n\r\n  onVisibilityChange = async () => {\r\n    if (this.parameters) {\r\n      this.parameters = this.parameters.getUpdatedAllParams();\r\n      this.updateVariables();\r\n    }\r\n\r\n    if (this.isVisible) {\r\n      if (!this.selfieSegmentation) {\r\n        await this.preloadModel().catch(() => console.log('Error preloading model:'));\r\n      }\r\n      this.renderDefaultImages();\r\n\r\n      if (this.selectedImage) {\r\n        await this.loadImageToCanvas(this.selectedImage, this.selectedImage);\r\n      } else {\r\n        this.clearCanvas();\r\n        this.backgroundCanvasRef.nativeElement.classList.remove('d-none');\r\n      }\r\n\r\n      this.saveBackgroundButtonRef.nativeElement.classList.add('d-none');\r\n      this.saveBackgroundButtonRef.nativeElement.disabled = true;\r\n      this.applyBackgroundButtonRef.nativeElement.classList.remove('d-none');\r\n      this.applyBackgroundButtonRef.nativeElement.disabled = false;\r\n\r\n      if (\r\n        this.processedStream &&\r\n        this.prevKeepBackground == this.keepBackground &&\r\n        this.keepBackground &&\r\n        this.appliedBackground\r\n      ) {\r\n        this.applyBackgroundButtonRef.nativeElement.innerText = 'Apply Background';\r\n      } else {\r\n        this.applyBackgroundButtonRef.nativeElement.innerText = 'Preview Background';\r\n      }\r\n\r\n      if (this.autoClickBackground) {\r\n        await this.applyBackground();\r\n        await this.saveBackground();\r\n        this.autoClickBackground = false;\r\n        this.updateAutoClickBackground(this.autoClickBackground);\r\n      }\r\n    } else {\r\n      try {\r\n        // If no background is applied or the applied background should not be kept\r\n        if (\r\n          !this.appliedBackground ||\r\n          (this.appliedBackground && !this.keepBackground) ||\r\n          (this.appliedBackground && !this.videoAlreadyOn)\r\n        ) {\r\n          const refVideo = this.captureVideoRef.nativeElement;\r\n          this.pauseSegmentation = true;\r\n          this.updatePauseSegmentation(this.pauseSegmentation);\r\n\r\n          if (!this.videoAlreadyOn) {\r\n            // Stop video tracks and clear the video element's srcObject\r\n            if (refVideo && refVideo.srcObject) {\r\n              refVideo.srcObject.getTracks().forEach((track: any) => track.stop());\r\n              refVideo.srcObject = null;\r\n            }\r\n\r\n            // Stop segmentVideo tracks\r\n            if (this.segmentVideo) {\r\n              this.segmentVideo.getTracks().forEach((track: any) => track.stop());\r\n              this.segmentVideo = null;\r\n              this.updateSegmentVideo(this.segmentVideo);\r\n            }\r\n\r\n            // Stop virtualStream tracks\r\n            if (this.virtualStream) {\r\n              this.virtualStream.getTracks().forEach((track: any) => track.stop());\r\n              this.virtualStream = null;\r\n              this.updateVirtualStream(this.virtualStream);\r\n            }\r\n          }\r\n        }\r\n\r\n        // Hide the video preview and show the canvas\r\n        this.videoPreviewRef.nativeElement.classList.add('d-none');\r\n        this.backgroundCanvasRef.nativeElement.classList.remove('d-none');\r\n      } catch {\r\n        /* handle error */\r\n      }\r\n    }\r\n  };\r\n\r\n  async preloadModel() {\r\n    this.selfieSegmentation = new SelfieSegmentation({\r\n      locateFile: (file) => `https://cdn.jsdelivr.net/npm/@mediapipe/selfie_segmentation/${file}`,\r\n    });\r\n    this.selfieSegmentation.setOptions({\r\n      modelSelection: 1,\r\n      selfieMode: false,\r\n    });\r\n    await this.selfieSegmentation.initialize();\r\n    this.updateSelfieSegmentation(this.selfieSegmentation);\r\n  }\r\n\r\n  renderDefaultImages() {\r\n    const defaultImages = ['wall', 'wall2', 'shelf', 'clock', 'desert', 'flower'];\r\n    const defaultImagesContainer = this.defaultImagesContainerRef.nativeElement;\r\n    defaultImagesContainer.innerHTML = '';\r\n\r\n    defaultImages.forEach((baseName) => {\r\n      const thumb = `https://mediasfu.com/images/backgrounds/${baseName}_thumbnail.jpg`;\r\n      const small = `https://mediasfu.com/images/backgrounds/${baseName}_small.jpg`;\r\n      const large = `https://mediasfu.com/images/backgrounds/${baseName}_large.jpg`;\r\n      const full = `https://mediasfu.com/images/backgrounds/${baseName}.jpg`;\r\n      const img = document.createElement('img');\r\n      img.src = thumb;\r\n      img.classList.add('img-thumbnail', 'm-1');\r\n      img.style.width = '80px';\r\n      img.style.cursor = 'pointer';\r\n      img.addEventListener('click', async () => {\r\n        if (this.targetResolution == 'fhd' || this.targetResolution == 'qhd') {\r\n          await this.loadImageToCanvas(small, large);\r\n        } else {\r\n          await this.loadImageToCanvas(small, full);\r\n        }\r\n      });\r\n      defaultImagesContainer.appendChild(img);\r\n    });\r\n\r\n    const noBackgroundImg = document.createElement('div');\r\n    noBackgroundImg.classList.add(\r\n      'img-thumbnail',\r\n      'm-1',\r\n      'd-flex',\r\n      'align-items-center',\r\n      'justify-content-center',\r\n    );\r\n    noBackgroundImg.style.width = '76px';\r\n    noBackgroundImg.style.minHeight = '60px';\r\n    noBackgroundImg.style.cursor = 'pointer';\r\n    noBackgroundImg.style.backgroundColor = '#f8f9fa';\r\n    noBackgroundImg.style.border = '1px solid #dee2e6';\r\n    noBackgroundImg.style.position = 'relative';\r\n    noBackgroundImg.innerHTML =\r\n      '<span style=\"position:absolute; top:50%; left:50%; transform:translate(-50%, -50%); color:#000;\">None</span>';\r\n    noBackgroundImg.addEventListener('click', async () => {\r\n      this.selectedImage = '';\r\n      this.updateSelectedImage(this.selectedImage);\r\n      this.updateCustomImage('');\r\n      this.showLoading();\r\n      this.videoPreviewRef.nativeElement.classList.add('d-none');\r\n      this.backgroundCanvasRef.nativeElement.classList.remove('d-none');\r\n      this.clearCanvas();\r\n      this.hideLoading();\r\n    });\r\n    defaultImagesContainer.appendChild(noBackgroundImg);\r\n\r\n    if (this.customImage) {\r\n      const img = document.createElement('img');\r\n      img.src = this.customImage;\r\n      img.classList.add('img-thumbnail', 'm-1');\r\n      img.style.width = '80px';\r\n      img.style.cursor = 'pointer';\r\n      img.addEventListener('click', async () => {\r\n        await this.loadImageToCanvas(this.customImage, this.customImage);\r\n      });\r\n      defaultImagesContainer.appendChild(img);\r\n    }\r\n  }\r\n\r\n  async handleImageUpload(event: Event) {\r\n    let minWidth = 1280;\r\n    let minHeight = 1280;\r\n    let maxWidth = 2560;\r\n    let maxHeight = 2560;\r\n\r\n    if (this.targetResolution == 'fhd') {\r\n      minWidth = 1920;\r\n      minHeight = 1920;\r\n    } else if (this.targetResolution == 'qhd') {\r\n      minWidth = 2560;\r\n      minHeight = 2560;\r\n    } // For other resolutions, stick to the default 1280x1280\r\n\r\n    const input = event.target as HTMLInputElement;\r\n    if (input.files && input.files.length > 0) {\r\n      const file = input.files[0];\r\n      const img = new Image();\r\n      img.crossOrigin = 'anonymous';\r\n      img.onload = async () => {\r\n        if (\r\n          img.width < minWidth ||\r\n          img.height < minHeight ||\r\n          img.width > maxWidth ||\r\n          img.height > maxHeight\r\n        ) {\r\n          this.customImage = img.src;\r\n          this.updateCustomImage(this.customImage);\r\n          await this.loadImageToCanvas(img.src, img.src);\r\n        }\r\n      };\r\n      const reader = new FileReader();\r\n      reader.onload = (e: ProgressEvent<FileReader>) => {\r\n        if (e.target) {\r\n          img.src = e.target.result as string;\r\n        }\r\n      };\r\n      reader.readAsDataURL(file);\r\n    }\r\n  }\r\n\r\n  clearCanvas() {\r\n    const ctx = this.backgroundCanvasRef.nativeElement.getContext('2d');\r\n    ctx.clearRect(\r\n      0,\r\n      0,\r\n      this.backgroundCanvasRef.nativeElement.width,\r\n      this.backgroundCanvasRef.nativeElement.height,\r\n    );\r\n    ctx.font = '30px Arial';\r\n    ctx.fillStyle = '#000';\r\n    ctx.textAlign = 'center';\r\n    ctx.textBaseline = 'middle';\r\n    ctx.fillText(\r\n      'No Background',\r\n      this.backgroundCanvasRef.nativeElement.width / 2,\r\n      this.backgroundCanvasRef.nativeElement.height / 2,\r\n    );\r\n\r\n    this.applyBackgroundButtonRef.nativeElement.classList.remove('d-none');\r\n    this.applyBackgroundButtonRef.nativeElement.disabled = false;\r\n\r\n    if (\r\n      this.processedStream &&\r\n      this.prevKeepBackground == this.keepBackground &&\r\n      this.keepBackground &&\r\n      this.appliedBackground\r\n    ) {\r\n      this.applyBackgroundButtonRef.nativeElement.innerText = 'Apply Background';\r\n    } else {\r\n      this.applyBackgroundButtonRef.nativeElement.innerText = 'Preview Background';\r\n    }\r\n  }\r\n\r\n  async loadImageToCanvas(src: string, fullSrc: string) {\r\n    this.showLoading();\r\n    await this.backgroundCanvasRef.nativeElement.classList.remove('d-none');\r\n    await this.videoPreviewRef.nativeElement.classList.add('d-none');\r\n\r\n    const img = new Image();\r\n    img.crossOrigin = 'anonymous';\r\n    img.onload = async () => {\r\n      const ctx = await this.backgroundCanvasRef.nativeElement.getContext('2d');\r\n      this.backgroundCanvasRef.nativeElement.width = img.width;\r\n      this.backgroundCanvasRef.nativeElement.height = img.height;\r\n      await ctx.drawImage(img, 0, 0);\r\n      this.removeBackground(img);\r\n      this.hideLoading();\r\n    };\r\n    img.src = src;\r\n    this.selectedImage = fullSrc;\r\n    this.updateSelectedImage(this.selectedImage);\r\n\r\n    this.saveBackgroundButtonRef.nativeElement.classList.add('d-none');\r\n    this.saveBackgroundButtonRef.nativeElement.disabled = true;\r\n    this.applyBackgroundButtonRef.nativeElement.classList.remove('d-none');\r\n    this.applyBackgroundButtonRef.nativeElement.disabled = false;\r\n\r\n    if (\r\n      this.processedStream &&\r\n      this.prevKeepBackground == this.keepBackground &&\r\n      this.keepBackground &&\r\n      this.appliedBackground\r\n    ) {\r\n      this.applyBackgroundButtonRef.nativeElement.innerText = 'Apply Background';\r\n    } else {\r\n      this.applyBackgroundButtonRef.nativeElement.innerText = 'Preview Background';\r\n    }\r\n  }\r\n\r\n  removeBackground(img: HTMLImageElement) {\r\n    const ctx = this.backgroundCanvasRef.nativeElement.getContext('2d');\r\n    ctx.clearRect(\r\n      0,\r\n      0,\r\n      this.backgroundCanvasRef.nativeElement.width,\r\n      this.backgroundCanvasRef.nativeElement.height,\r\n    );\r\n    ctx.drawImage(img, 0, 0);\r\n  }\r\n\r\n  async applyBackground() {\r\n    try {\r\n      if (this.audioOnlyRoom) {\r\n        this.parameters.showAlert?.({\r\n          message: 'You cannot use a background in an audio only event.',\r\n          type: 'danger',\r\n        });\r\n        return;\r\n      }\r\n\r\n      this.showLoading();\r\n\r\n      this.videoPreviewRef.nativeElement.classList.remove('d-none');\r\n      this.backgroundCanvasRef.nativeElement.classList.add('d-none');\r\n\r\n      const doSegmentation = this.selectedImage ? true : false;\r\n      this.pauseSegmentation = false;\r\n      this.updatePauseSegmentation(this.pauseSegmentation);\r\n      await this.selfieSegmentationPreview(doSegmentation);\r\n\r\n      this.hideLoading();\r\n\r\n      this.applyBackgroundButtonRef.nativeElement.classList.add('d-none');\r\n      this.applyBackgroundButtonRef.nativeElement.disabled = true;\r\n\r\n      if (\r\n        this.processedStream &&\r\n        this.prevKeepBackground == this.keepBackground &&\r\n        this.keepBackground &&\r\n        this.appliedBackground\r\n      ) {\r\n        this.saveBackgroundButtonRef.nativeElement.classList.add('d-none');\r\n        this.saveBackgroundButtonRef.nativeElement.disabled = true;\r\n      } else {\r\n        this.saveBackgroundButtonRef.nativeElement.classList.remove('d-none');\r\n        this.saveBackgroundButtonRef.nativeElement.disabled = false;\r\n      }\r\n    } catch (error) {\r\n      console.log(error);\r\n    }\r\n  }\r\n\r\n  async selfieSegmentationPreview(doSegmentation: boolean) {\r\n    const refVideo = this.captureVideoRef.nativeElement;\r\n    const previewVideo = this.videoPreviewRef.nativeElement;\r\n    const virtualImage = new Image();\r\n    virtualImage.crossOrigin = 'anonymous';\r\n    virtualImage.src = this.selectedImage;\r\n\r\n    if (!this.mainCanvas) {\r\n      this.mainCanvas = await this.backgroundCanvasRef.nativeElement;\r\n    }\r\n\r\n    let mediaCanvas = this.mainCanvas;\r\n    mediaCanvas.width = refVideo.videoWidth;\r\n    mediaCanvas.height = refVideo.videoHeight;\r\n    let ctx = mediaCanvas.getContext('2d');\r\n\r\n    this.backgroundHasChanged = true;\r\n    this.updateBackgroundHasChanged(this.backgroundHasChanged);\r\n    this.prevKeepBackground = this.keepBackground;\r\n    this.updatePrevKeepBackground(this.keepBackground);\r\n\r\n    if (!doSegmentation) {\r\n      const tracks = this.processedStream?.getVideoTracks();\r\n      if (tracks) {\r\n        tracks.forEach((track: MediaStreamTrack) => track.stop());\r\n      }\r\n      this.processedStream = null;\r\n      this.keepBackground = false;\r\n      this.updateProcessedStream(null);\r\n      this.updateKeepBackground(false);\r\n      previewVideo.classList.remove('d-none');\r\n    }\r\n\r\n    const segmentImage = async (videoElement: HTMLVideoElement) => {\r\n      const processFrame = () => {\r\n        if (\r\n          !this.selfieSegmentation ||\r\n          this.pauseSegmentation ||\r\n          !videoElement ||\r\n          videoElement.videoWidth == 0 ||\r\n          videoElement.videoHeight == 0\r\n        ) {\r\n          return;\r\n        }\r\n        this.selfieSegmentation.send({ image: videoElement });\r\n        requestAnimationFrame(processFrame);\r\n      };\r\n\r\n      videoElement.onloadeddata = () => {\r\n        processFrame();\r\n      };\r\n\r\n      setTimeout(async () => {\r\n        console.log('Capturing stream:', this.frameRate || 5);\r\n        this.processedStream = mediaCanvas.captureStream(this.frameRate || 5);\r\n        this.updateProcessedStream(this.processedStream);\r\n        previewVideo.srcObject = this.processedStream;\r\n        previewVideo.classList.remove('d-none');\r\n        this.keepBackground = true;\r\n        this.updateKeepBackground(this.keepBackground);\r\n\r\n        if (previewVideo.paused) {\r\n          try {\r\n            // play the video\r\n            previewVideo.play().then(() => {\r\n              /* handle success */\r\n            });\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        }\r\n      }, 100);\r\n    };\r\n\r\n    if (this.videoAlreadyOn) {\r\n      if (\r\n        this.clonedTrack &&\r\n        this.clonedTrack.readyState == 'live' &&\r\n        this.localStreamVideo?.getVideoTracks()[0].label == this.clonedTrack.label\r\n      ) {\r\n        // Use existing clonedTrack\r\n      } else {\r\n        const localTracks = this.localStreamVideo?.getVideoTracks()[0];\r\n        this.clonedTrack = localTracks!.clone();\r\n        this.clonedStream = new MediaStream([this.clonedTrack!]);\r\n        this.segmentVideo = this.clonedStream;\r\n      }\r\n      this.updateSegmentVideo(this.segmentVideo);\r\n      refVideo.srcObject = this.segmentVideo;\r\n      if (refVideo.paused) {\r\n        refVideo.play();\r\n      }\r\n\r\n      refVideo.width = this.segmentVideo!.getVideoTracks()[0].getSettings().width!;\r\n      refVideo.height = this.segmentVideo!.getVideoTracks()[0].getSettings().height!;\r\n      mediaCanvas.width = refVideo.width;\r\n      mediaCanvas.height = refVideo.height;\r\n      ctx = mediaCanvas.getContext('2d');\r\n\r\n      try {\r\n        doSegmentation\r\n          ? await segmentImage(refVideo)\r\n          : (previewVideo.srcObject = this.clonedStream\r\n              ? this.clonedStream\r\n              : this.localStreamVideo!);\r\n      } catch (error) {\r\n        console.log('Error segmenting image:', error);\r\n      }\r\n    } else {\r\n      if (this.segmentVideo && this.segmentVideo.getVideoTracks()[0].readyState == 'live') {\r\n        // Use existing segmentVideo\r\n      } else {\r\n        try {\r\n          const stream = await navigator.mediaDevices.getUserMedia({\r\n            video: { ...this.vidCons, frameRate: { ideal: this.frameRate || 5 } },\r\n            audio: false,\r\n          });\r\n          this.segmentVideo = stream;\r\n          this.updateSegmentVideo(this.segmentVideo);\r\n          refVideo.srcObject = this.segmentVideo;\r\n          if (refVideo.paused) {\r\n            refVideo.play();\r\n          }\r\n        } catch (error) {\r\n          // remove the frameRate constraint and try again\r\n          try {\r\n            const stream = await navigator.mediaDevices.getUserMedia({\r\n              video: { ...this.vidCons },\r\n              audio: false,\r\n            });\r\n            this.segmentVideo = stream;\r\n            this.updateSegmentVideo(this.segmentVideo);\r\n            refVideo.srcObject = this.segmentVideo;\r\n            if (refVideo.paused) {\r\n              refVideo.play();\r\n            }\r\n          } catch (error) {\r\n          console.log('Error getting user media:', error);\r\n          }\r\n        }\r\n\r\n        refVideo.width = this.segmentVideo!.getVideoTracks()[0].getSettings().width!;\r\n        refVideo.height = this.segmentVideo!.getVideoTracks()[0].getSettings().height!;\r\n        mediaCanvas.width = refVideo.width;\r\n        mediaCanvas.height = refVideo.height;\r\n        ctx = mediaCanvas.getContext('2d');\r\n      }\r\n\r\n      try {\r\n        doSegmentation\r\n          ? await segmentImage(refVideo)\r\n          : (previewVideo.srcObject = refVideo.srcObject);\r\n      } catch (error) {\r\n        console.log(error);\r\n      }\r\n    }\r\n\r\n    let repeatPattern = 'no-repeat';\r\n    try {\r\n      if (virtualImage.width < mediaCanvas.width || virtualImage.height < mediaCanvas.height) {\r\n        repeatPattern = 'repeat';\r\n      }\r\n    } catch {\r\n      /* handle error */\r\n    }\r\n\r\n    const onResults = (results: any) => {\r\n      try {\r\n        if (\r\n          !this.pauseSegmentation &&\r\n          mediaCanvas &&\r\n          mediaCanvas.width > 0 &&\r\n          mediaCanvas.height > 0 &&\r\n          virtualImage.width > 0 &&\r\n          virtualImage.height > 0\r\n        ) {\r\n          ctx!.clearRect(0, 0, mediaCanvas.width, mediaCanvas.height);\r\n          ctx!.drawImage(results.segmentationMask, 0, 0, mediaCanvas.width, mediaCanvas.height);\r\n\r\n          ctx!.globalCompositeOperation = 'source-out';\r\n          const pat = ctx!.createPattern(virtualImage, repeatPattern);\r\n          ctx!.fillStyle = pat!;\r\n          ctx!.fillRect(0, 0, mediaCanvas.width, mediaCanvas.height);\r\n\r\n          ctx!.globalCompositeOperation = 'destination-atop';\r\n          ctx!.drawImage(results.image, 0, 0, mediaCanvas.width, mediaCanvas.height);\r\n        }\r\n      } catch (error) {\r\n        console.log('Error processing results:', error);\r\n      }\r\n    };\r\n\r\n    if (!this.selfieSegmentation) {\r\n      await this.preloadModel().catch(() => console.log('Error preloading model:'));\r\n    }\r\n\r\n    try {\r\n      this.selfieSegmentation!.onResults(onResults);\r\n    } catch (error) {\r\n      console.log(error);\r\n    }\r\n  }\r\n\r\n  saveBackground = async () => {\r\n    if (this.audioOnlyRoom) {\r\n      this.parameters.showAlert?.({\r\n        message: 'You cannot use a background in an audio-only event.',\r\n        type: 'danger',\r\n      });\r\n      return;\r\n    }\r\n\r\n    if (this.backgroundHasChanged) {\r\n      if (this.videoAlreadyOn) {\r\n        if (this.islevel == '2' && (this.recordStarted || this.recordResumed)) {\r\n          if (!(this.recordPaused || this.recordStopped)) {\r\n            if (this.recordingMediaOptions == 'video') {\r\n              this.parameters.showAlert?.({\r\n                message: 'Please pause the recording before changing the background.',\r\n                type: 'danger',\r\n              });\r\n              return;\r\n            }\r\n          }\r\n        }\r\n\r\n        if (this.keepBackground && this.selectedImage && this.processedStream) {\r\n          this.virtualStream = this.processedStream;\r\n          this.updateVirtualStream(this.virtualStream);\r\n          this.videoParams = { track: this.virtualStream.getVideoTracks()[0] };\r\n          this.updateVideoParams(this.videoParams);\r\n        } else {\r\n          if (this.localStreamVideo?.getVideoTracks()[0].readyState == 'live') {\r\n            this.videoParams = { track: this.localStreamVideo.getVideoTracks()[0] };\r\n            this.updateVideoParams(this.videoParams);\r\n          } else {\r\n            try {\r\n              if (this.localStreamVideo?.getVideoTracks()[0].readyState !== 'live') {\r\n                this.localStreamVideo?.removeTrack(this.localStreamVideo.getVideoTracks()[0]);\r\n                this.localStreamVideo?.addTrack(this.segmentVideo!.getVideoTracks()[0].clone());\r\n              }\r\n            } catch (error) {\r\n              console.log('Error handling local stream video:', error);\r\n            }\r\n\r\n            this.videoParams = { track: this.segmentVideo!.getVideoTracks()[0] };\r\n            this.updateVideoParams(this.videoParams);\r\n          }\r\n        }\r\n\r\n        if (this.keepBackground) {\r\n          this.appliedBackground = true;\r\n          this.updateAppliedBackground(this.appliedBackground);\r\n        } else {\r\n          this.appliedBackground = false;\r\n          this.updateAppliedBackground(this.appliedBackground);\r\n        }\r\n\r\n        if (!this.parameters.transportCreated) {\r\n          await this.createSendTransport({\r\n            option: 'video',\r\n            parameters: { ...this.parameters, videoParams: this.videoParams },\r\n          });\r\n        } else {\r\n          try {\r\n            if (\r\n              this.parameters.videoProducer?.id &&\r\n              this.parameters.videoProducer.track?.id !== this.videoParams?.track?.id\r\n            ) {\r\n              await this.disconnectSendTransportVideo({ parameters: this.parameters });\r\n              await this.sleep({ ms: 500 });\r\n            }\r\n            await this.connectSendTransportVideo({\r\n              videoParams: this.videoParams,\r\n              parameters: this.parameters,\r\n            });\r\n          } catch (error) {\r\n            console.log(error);\r\n          }\r\n        }\r\n        await this.onScreenChanges({ changed: true, parameters: this.parameters });\r\n      }\r\n    }\r\n\r\n    if (this.keepBackground) {\r\n      this.appliedBackground = true;\r\n      this.updateAppliedBackground(this.appliedBackground);\r\n    } else {\r\n      this.appliedBackground = false;\r\n      this.updateAppliedBackground(this.appliedBackground);\r\n    }\r\n\r\n    this.saveBackgroundButtonRef.nativeElement.classList.add('d-none');\r\n    this.saveBackgroundButtonRef.nativeElement.disabled = true;\r\n  };\r\n\r\n  handleModalClose = () => {\r\n    try {\r\n      // If no background is applied or the applied background should not be kept\r\n      if (\r\n        !this.appliedBackground ||\r\n        (this.appliedBackground && !this.keepBackground) ||\r\n        (this.appliedBackground && !this.videoAlreadyOn)\r\n      ) {\r\n        console.log('No background applied or applied background should not be kept');\r\n        const refVideo = this.captureVideoRef.nativeElement;\r\n        this.pauseSegmentation = true;\r\n        this.updatePauseSegmentation(this.pauseSegmentation);\r\n\r\n        if (!this.videoAlreadyOn) {\r\n          // Stop video tracks and clear the video element's srcObject\r\n          if (refVideo && refVideo.srcObject) {\r\n            refVideo.srcObject.getTracks().forEach((track: any) => track.stop());\r\n            refVideo.srcObject = null;\r\n          }\r\n\r\n          // Stop segmentVideo tracks\r\n          if (this.segmentVideo) {\r\n            this.segmentVideo.getTracks().forEach((track: any) => track.stop());\r\n            this.segmentVideo = null;\r\n            this.updateSegmentVideo(this.segmentVideo);\r\n          }\r\n\r\n          // Stop virtualStream tracks\r\n          if (this.virtualStream) {\r\n            this.virtualStream.getTracks().forEach((track: any) => track.stop());\r\n            this.virtualStream = null;\r\n            this.updateVirtualStream(this.virtualStream);\r\n          }\r\n        }\r\n      }\r\n\r\n      // Hide the video preview and show the canvas\r\n      this.videoPreviewRef.nativeElement.classList.add('d-none');\r\n      this.backgroundCanvasRef.nativeElement.classList.remove('d-none');\r\n\r\n      // Hide the modal\r\n      // this.isVisible = false;\r\n      this.onClose();\r\n    } catch (error) {\r\n      console.log('Error during modal close:', error);\r\n    }\r\n  };\r\n\r\n  showLoading() {\r\n    this.loadingOverlayRef.nativeElement.classList.remove('d-none');\r\n  }\r\n\r\n  hideLoading() {\r\n    this.loadingOverlayRef.nativeElement.classList.add('d-none');\r\n  }\r\n}\r\n","<div [ngStyle]=\"{ position: 'fixed', top: 0, left: 0, width: '100%', height: '100%', backgroundColor: 'rgba(0, 0, 0, 0.5)', display: isVisible ? 'block' : 'none', zIndex: 999 }\">\r\n    <div [ngStyle]=\"{ position: 'fixed', backgroundColor: backgroundColor, borderRadius: '10px', padding: '10px', width: '80%', maxWidth: '500px', maxHeight: '75%', overflowY: 'auto', overflowX: 'hidden', top: position.includes('top') ? '10px' : 'auto', bottom: position.includes('bottom') ? '10px' : 'auto', left: position.includes('Left') ? '10px' : 'auto', right: position.includes('Right') ? '10px' : 'auto' }\">\r\n      <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;\">\r\n        <h2 style=\"font-size: x-large; font-weight: bold; color: black;\">Background Settings</h2>\r\n        <button (click)=\"onClose()\" style=\"border: none; background: none; cursor: pointer;\">\r\n          <fa-icon [icon]=\"faTimes\" size=\"xl\" style=\"font-size: 20px; color: black;\"></fa-icon>\r\n        </button>\r\n      </div>\r\n      <hr style=\"height: 1px; background-color: black; margin-top: 5px; margin-bottom: 5px;\" />\r\n      <div style=\"max-width: 95%; overflow-x: auto;\">\r\n        <div id=\"defaultImages\" #defaultImagesContainer></div>\r\n        <div class=\"form-group\" style=\"max-width: 70%; overflow-x: auto;\">\r\n          <label for=\"uploadImage\">Upload Custom Image</label>\r\n          <input type=\"file\" class=\"form-control\" id=\"uploadImage\" #uploadImageInput (change)=\"handleImageUpload($event)\" />\r\n        </div>\r\n        <canvas id=\"mainCanvas\" #mainCanvas class=\"d-none\"></canvas>\r\n        <canvas id=\"backgroundCanvas\" #backgroundCanvas class=\"d-none\" style=\"width: 100%; max-width: 400px; height: auto; background-color: transparent; border: 1px solid black;\"></canvas>\r\n        <video id=\"captureVideo\" #captureVideo class=\"d-none\" muted autoplay playsinline></video>\r\n        <video id=\"previewVideo\" #videoPreview class=\"d-none\" muted autoplay playsinline style=\"width: 100%; max-width: 400px; height: auto; background-color: transparent; border: 1px solid black;\"></video>\r\n        <div id=\"loadingOverlay\" #loadingOverlay class=\"d-none\" [ngStyle]=\"{ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%', backgroundColor: 'rgba(0, 0, 0, 0.5)', display: 'flex', 'justify-content': 'center', 'align-items': 'center', zIndex: 1000 }\">\r\n          <div [ngStyle]=\"{ width: '50px', height: '50px', border: '5px solid rgba(255, 255, 255, 0.3)', borderRadius: '50%', borderTop: '5px solid white', animation: 'spin 1s linear infinite' }\"></div>\r\n        </div>\r\n        <br />\r\n        <button id=\"applyBackgroundButton\" #applyBackgroundButton class=\"btn btn-primary\" (click)=\"applyBackground()\">Preview Background</button>\r\n        <button id=\"saveBackgroundButton\" #saveBackgroundButton class=\"btn btn-success d-none\" (click)=\"saveBackground()\">Save Background</button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faPen, faTimes, faUsers } from '@fortawesome/free-solid-svg-icons';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BreakoutParticipant, Participant } from '../../../@types/types';\r\n\r\n@Component({\r\n    selector: 'app-room-list',\r\n    imports: [CommonModule, FontAwesomeModule],\r\n    templateUrl: './room-list.component.html',\r\n    styleUrls: ['./room-list.component.css']\r\n})\r\nexport class RoomListComponent {\r\n  @Input()\r\n  rooms: BreakoutParticipant[][] = [];\r\n  @Output() editRoom = new EventEmitter<number>();\r\n  @Output() deleteRoom = new EventEmitter<number>();\r\n  @Output() removeParticipant = new EventEmitter<{\r\n    roomIndex: number;\r\n    participant: BreakoutParticipant | Participant;\r\n  }>();\r\n\r\n  faPen = faPen;\r\n  faTimes = faTimes;\r\n  faUsers = faUsers;\r\n\r\n  handleEditRoom(roomIndex: number) {\r\n    this.editRoom.emit(roomIndex);\r\n  }\r\n\r\n  handleDeleteRoom(roomIndex: number) {\r\n    this.deleteRoom.emit(roomIndex);\r\n  }\r\n\r\n  handleRemoveParticipant(roomIndex: number, participant: BreakoutParticipant | Participant) {\r\n    this.removeParticipant.emit({ roomIndex, participant });\r\n  }\r\n}\r\n","<div *ngFor=\"let room of rooms; let roomIndex = index\" class=\"card mb-3 text-dark\">\r\n    <div class=\"card-header d-flex justify-content-between align-items-center\">\r\n      <span>Room {{ roomIndex + 1 }} <fa-icon [icon]=\"faUsers\"></fa-icon></span>\r\n      <div>\r\n        <button class=\"btn btn-secondary btn-sm\" (click)=\"handleEditRoom(roomIndex)\">\r\n          <fa-icon [icon]=\"faPen\"></fa-icon>\r\n        </button>\r\n        <button class=\"btn btn-danger btn-sm\" (click)=\"handleDeleteRoom(roomIndex)\">\r\n          <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n        </button>\r\n      </div>\r\n    </div>\r\n    <div class=\"card-body\">\r\n      <ul class=\"list-group\">\r\n        <li *ngFor=\"let participant of room; let index = index\" class=\"list-group-item d-flex justify-content-between align-items-center text-dark\">\r\n          {{ participant.name }}\r\n          <button class=\"btn btn-danger btn-sm\" (click)=\"handleRemoveParticipant(roomIndex, participant)\">\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </li>\r\n      </ul>\r\n    </div>\r\n  </div>\r\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes, faPlus, faUsers, faPen } from '@fortawesome/free-solid-svg-icons';\r\nimport { BreakoutParticipant, Participant } from '../../../@types/types';\r\n\r\n/**\r\n * EditRoomModalComponent allows managing participants within a breakout room for an event.\r\n *\r\n * @selector app-edit-room-modal\r\n * @inputs\r\n * - `editRoomModalVisible` (boolean): Controls the visibility of the edit room modal. Default is false.\r\n * - `currentRoom` (BreakoutParticipant[]): List of participants currently assigned to the room.\r\n * - `participantsRef` (Participant[]): Reference list of all participants.\r\n * - `currentRoomIndex` (number): Index of the room being edited.\r\n * - `position` (string): Position of the modal on the screen. Default is 'center'.\r\n * - `backgroundColor` (string): Background color of the modal. Default is '#fff'.\r\n *\r\n * @outputs\r\n * - `setEditRoomModalVisible` (EventEmitter<boolean>): Emits a boolean to toggle the visibility of the modal.\r\n * - `addParticipant` (EventEmitter<{ roomIndex: number; participant: Participant | BreakoutParticipant; }>): Emits data for adding a participant to the room.\r\n * - `removeParticipant` (EventEmitter<{ roomIndex: number; participant: Participant | BreakoutParticipant; }>): Emits data for removing a participant from the room.\r\n *\r\n * @methods\r\n * - `ngOnInit()`: Lifecycle hook to initialize modal width and attach resize event listener.\r\n * - `ngOnDestroy()`: Lifecycle hook to remove the resize event listener.\r\n * - `calculateModalWidth()`: Dynamically calculates and sets modal width based on screen width.\r\n * - `modalContainerStyle()`: Returns style object for modal container.\r\n * - `modalContentStyle()`: Returns style object for modal content.\r\n * - `handleAddParticipant(roomIndex: number, participant: BreakoutParticipant)`: Emits event to add participant to specified room.\r\n * - `handleRemoveParticipant(roomIndex: number, participant: BreakoutParticipant)`: Emits event to remove participant from specified room.\r\n * - `closeModal()`: Closes the modal by emitting a visibility change.\r\n * - `unassignedParticipants()`: Filters and returns a list of unassigned participants.\r\n *\r\n * @dependencies\r\n * - `CommonModule`: Provides Angular's common directives.\r\n * - `FontAwesomeModule`: Allows usage of Font Awesome icons.\r\n *\r\n * @example\r\n * ```html\r\n * <app-edit-room-modal\r\n *  [editRoomModalVisible]=\"editRoomModalVisible\"\r\n * [currentRoom]=\"currentRoom\"\r\n * [participantsRef]=\"participantsRef\"\r\n * [currentRoomIndex]=\"currentRoomIndex\"\r\n * [position]=\"position\"\r\n * [backgroundColor]=\"backgroundColor\"\r\n * (setEditRoomModalVisible)=\"setEditRoomModalVisible($event)\"\r\n * (addParticipant)=\"addParticipant($event)\"\r\n * (removeParticipant)=\"removeParticipant($event)\">\r\n * </app-edit-room-modal>\r\n * ```\r\n *\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-edit-room-modal',\r\n    imports: [CommonModule, FontAwesomeModule],\r\n    templateUrl: './edit-room-modal.component.html',\r\n    styleUrls: ['./edit-room-modal.component.css']\r\n})\r\n\r\nexport class EditRoomModalComponent implements OnInit {\r\n  @Input() editRoomModalVisible = false;\r\n  @Input() currentRoom: BreakoutParticipant[] = [];\r\n  @Input() participantsRef: Participant[] = [];\r\n  @Input() currentRoomIndex = -1;\r\n  @Input() position = 'center';\r\n  @Input() backgroundColor = '#fff';\r\n\r\n  @Output() setEditRoomModalVisible = new EventEmitter<boolean>();\r\n  @Output() addParticipant = new EventEmitter<{\r\n    roomIndex: number;\r\n    participant: Participant | BreakoutParticipant;\r\n  }>();\r\n  @Output() removeParticipant = new EventEmitter<{\r\n    roomIndex: number;\r\n    participant: Participant | BreakoutParticipant;\r\n  }>();\r\n\r\n  faTimes = faTimes;\r\n  faPlus = faPlus;\r\n  faUsers = faUsers;\r\n  faPen = faPen;\r\n\r\n  modalWidth = 400;\r\n\r\n  ngOnInit() {\r\n    this.calculateModalWidth();\r\n    window.addEventListener('resize', this.calculateModalWidth.bind(this));\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    window.removeEventListener('resize', this.calculateModalWidth.bind(this));\r\n  }\r\n\r\n  calculateModalWidth() {\r\n    const screenWidth = window.innerWidth;\r\n    this.modalWidth = screenWidth > 500 ? 400 : screenWidth * 0.8;\r\n  }\r\n\r\n  modalContainerStyle() {\r\n    return {\r\n      position: 'fixed',\r\n      top: 0,\r\n      left: 0,\r\n      width: '100%',\r\n      height: '100%',\r\n      backgroundColor: 'rgba(0, 0, 0, 0.5)',\r\n      zIndex: 1000,\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n    };\r\n  }\r\n\r\n  modalContentStyle() {\r\n    return {\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '20px',\r\n      width: `${this.modalWidth}px`,\r\n      maxHeight: '80%',\r\n      overflowY: 'auto',\r\n    };\r\n  }\r\n\r\n  handleAddParticipant(roomIndex: number, participant: BreakoutParticipant) {\r\n    this.addParticipant.emit({ roomIndex, participant });\r\n  }\r\n\r\n  handleRemoveParticipant(roomIndex: number, participant: BreakoutParticipant) {\r\n    this.removeParticipant.emit({ roomIndex, participant });\r\n  }\r\n\r\n  closeModal() {\r\n    this.setEditRoomModalVisible.emit(false);\r\n  }\r\n\r\n  unassignedParticipants(): Participant[] {\r\n    return this.participantsRef.filter((participant) => participant['breakRoom'] == null);\r\n  }\r\n}\r\n","<div *ngIf=\"editRoomModalVisible\" class=\"modal-container\" [ngStyle]=\"modalContainerStyle()\">\r\n  <div class=\"modal-content text-dark\" [ngStyle]=\"modalContentStyle()\">\r\n    <div class=\"modal-header\">\r\n      <h5 class=\"modal-title\">Edit Room {{ currentRoomIndex + 1 }} <fa-icon [icon]=\"faPen\"></fa-icon></h5>\r\n      <button type=\"button\" class=\"close\" (click)=\"closeModal()\">\r\n        <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n      </button>\r\n    </div>\r\n    <div class=\"modal-body\">\r\n      <div class=\"list-container\">\r\n        <h5>Assigned Participants <fa-icon [icon]=\"faUsers\"></fa-icon></h5>\r\n        <ul class=\"list-group\">\r\n          <li *ngFor=\"let participant of currentRoom; let i = index\" class=\"list-group-item d-flex justify-content-between align-items-center text-dark\">\r\n            {{ participant.name }}\r\n            <button class=\"btn btn-danger btn-sm\" (click)=\"handleRemoveParticipant(currentRoomIndex, participant)\">\r\n              <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n            </button>\r\n          </li>\r\n          <li *ngIf=\"currentRoom.length === 0\" class=\"list-group-item d-flex justify-content-between align-items-center text-dark\">\r\n            None assigned\r\n          </li>\r\n        </ul>\r\n      </div>\r\n      <div class=\"list-container\">\r\n        <h5>Unassigned Participants <fa-icon [icon]=\"faUsers\"></fa-icon></h5>\r\n        <ul class=\"list-group\">\r\n          <li *ngFor=\"let participant of unassignedParticipants(); let i = index\" class=\"list-group-item d-flex justify-content-between align-items-center text-dark\">\r\n            {{ participant.name }}\r\n            <button class=\"btn btn-primary btn-sm\" (click)=\"handleAddParticipant(currentRoomIndex, participant)\">\r\n              <fa-icon [icon]=\"faPlus\"></fa-icon>\r\n            </button>\r\n          </li>\r\n          <li *ngIf=\"unassignedParticipants().length === 0\" class=\"list-group-item d-flex justify-content-between align-items-center text-dark\">\r\n            None pending\r\n          </li>\r\n        </ul>\r\n      </div>\r\n    </div>\r\n    <div class=\"modal-footer\">\r\n      <button type=\"button\" class=\"btn btn-secondary\" (click)=\"closeModal()\">Close</button>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import {\r\n  Component,\r\n  Input,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  ViewChild,\r\n  ElementRef,\r\n  OnInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  faDoorOpen,\r\n  faTimes,\r\n  faRandom,\r\n  faHandPointer,\r\n  faPlus,\r\n  faSave,\r\n  faPlay,\r\n  faSyncAlt,\r\n  faStop,\r\n  faUsers,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { RoomListComponent } from './room-list/room-list.component';\r\nimport { EditRoomModalComponent } from './edit-room-modal/edit-room-modal.component';\r\nimport { Socket } from 'socket.io-client';\r\nimport { Participant, ShowAlert, BreakoutParticipant } from '../../@types/types';\r\n\r\nexport interface BreakoutRoomsModalParameters {\r\n  participants: Participant[];\r\n  showAlert?: ShowAlert;\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n  itemPageLimit: number;\r\n  meetingDisplayType: string;\r\n  prevMeetingDisplayType: string;\r\n  roomName: string;\r\n  shareScreenStarted: boolean;\r\n  shared: boolean;\r\n  breakOutRoomStarted: boolean;\r\n  breakOutRoomEnded: boolean;\r\n  isBreakoutRoomsModalVisible: boolean;\r\n  currentRoomIndex: number | null;\r\n  canStartBreakout: boolean;\r\n  breakoutRooms: BreakoutParticipant[][];\r\n  updateBreakOutRoomStarted: (started: boolean) => void;\r\n  updateBreakOutRoomEnded: (ended: boolean) => void;\r\n  updateCurrentRoomIndex: (roomIndex: number) => void;\r\n  updateCanStartBreakout: (canStart: boolean) => void;\r\n  updateBreakoutRooms: (breakoutRooms: BreakoutParticipant[][]) => void;\r\n  updateMeetingDisplayType: (displayType: string) => void;\r\n\r\n  getUpdatedAllParams: () => BreakoutRoomsModalParameters;\r\n  [key: string]: any;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type BreakoutRoomsModalType = (options: BreakoutRoomsModalOptions) => HTMLElement;\r\n\r\nexport interface BreakoutRoomsModalOptions {\r\n  isVisible: boolean;\r\n  parameters: BreakoutRoomsModalParameters;\r\n  position?: 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft';\r\n  backgroundColor?: string;\r\n  onBreakoutRoomsClose: () => void;\r\n}\r\n\r\n/**\r\n * BreakoutRoomsModal component manages the creation, modification, and assignment of breakout rooms.\r\n *\r\n * @selector app-breakout-rooms-modal\r\n * @inputs\r\n * - `isVisible` (boolean): Controls the visibility of the breakout rooms modal. Default is false.\r\n * - `parameters` (BreakoutRoomsModalParameters): Parameters for managing breakout room settings and behavior.\r\n * - `position` (string): Position of the modal on the screen. Default is 'topRight'.\r\n * - `backgroundColor` (string): Background color of the modal. Default is '#83c0e9'.\r\n * - `onBreakoutRoomsClose` (function): Callback function triggered when the modal is closed.\r\n *\r\n * @methods\r\n * - `ngOnInit()`: Lifecycle hook to initialize modal width and breakout rooms.\r\n * - `ngOnChanges(changes: SimpleChanges)`: Lifecycle hook called when any data-bound input properties change.\r\n * - `calculateModalWidth()`: Dynamically calculates and sets modal width based on screen width.\r\n * - `modalContainerStyle()`: Returns style object for modal container.\r\n * - `modalContentStyle()`: Returns style object for modal content.\r\n * - `initializeBreakoutRooms()`: Initializes the breakout rooms based on the current participants and parameters.\r\n * - `handleRandomAssign()`: Randomly assigns participants to breakout rooms.\r\n * - `handleManualAssign()`: Initializes manual room assignment by setting empty breakout rooms.\r\n * - `handleAddRoom()`: Adds a new breakout room.\r\n * - `handleSaveRooms()`: Validates and saves breakout room configurations.\r\n * - `validateRooms()`: Validates room configurations and participants' uniqueness and quantity.\r\n * - `checkCanStartBreakout()`: Checks conditions to enable the start of breakout rooms.\r\n * - `handleStartBreakout()`: Starts the breakout session if conditions are met.\r\n * - `handleStopBreakout()`: Stops the breakout session and reverts to the initial meeting display type.\r\n * - `handleEditRoom(roomIndex: number)`: Opens the modal to edit the specified breakout room.\r\n * - `handleDeleteRoom(roomIndex: number)`: Deletes a breakout room and updates participants' room assignments.\r\n * - `handleAddParticipant(event)`: Adds a participant to a specified breakout room.\r\n * - `handleRemoveParticipant(event)`: Removes a participant from a specified breakout room.\r\n *\r\n * @dependencies\r\n * - `CommonModule`: Angular's common directives.\r\n * - `FormsModule`: Angular's forms module for form handling.\r\n * - `FontAwesomeModule`: Font Awesome icons for UI elements.\r\n * - `RoomListComponent`: Component for listing rooms.\r\n * - `EditRoomModalComponent`: Component for editing room participants.\r\n *\r\n * @example\r\n * ```html\r\n * <app-breakout-rooms-modal\r\n *  [isVisible]=\"isBreakoutRoomsModalVisible\"\r\n * [parameters]=\"breakoutRoomsParams\"\r\n * [position]=\"modalPosition\"\r\n * [backgroundColor]=\"modalBgColor\"\r\n * [onBreakoutRoomsClose]=\"onCloseBreakoutRooms\">\r\n * </app-breakout-rooms-modal>\r\n * ```\r\n *\r\n **/\r\n@Component({\r\n  selector: 'app-breakout-rooms-modal',\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    FontAwesomeModule,\r\n    RoomListComponent,\r\n    EditRoomModalComponent,\r\n  ],\r\n  templateUrl: './breakout-rooms-modal.component.html',\r\n  styleUrls: ['./breakout-rooms-modal.component.css']\r\n})\r\n\r\n\r\nexport class BreakoutRoomsModal implements OnChanges, OnInit {\r\n  @Input() isVisible = false;\r\n  @Input() parameters!: BreakoutRoomsModalParameters;\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = '#83c0e9';\r\n  @Input() onBreakoutRoomsClose: () => void = () => {\r\n    console.log('Breakout rooms closed');\r\n  };\r\n  @ViewChild('roomsContainer') roomsContainerRef!: ElementRef;\r\n\r\n  faDoorOpen = faDoorOpen;\r\n  faTimes = faTimes;\r\n  faRandom = faRandom;\r\n  faHandPointer = faHandPointer;\r\n  faPlus = faPlus;\r\n  faSave = faSave;\r\n  faPlay = faPlay;\r\n  faSyncAlt = faSyncAlt;\r\n  faStop = faStop;\r\n  faUsers = faUsers;\r\n\r\n  participantsRef: Participant[] = [];\r\n  breakoutRoomsRef: BreakoutParticipant[][] = [];\r\n\r\n  numRooms = '';\r\n  newParticipantAction = 'autoAssignNewRoom';\r\n  currentRoom: BreakoutParticipant[] | null = null;\r\n  editRoomModalVisible = false;\r\n\r\n  startBreakoutButtonVisible = false;\r\n  stopBreakoutButtonVisible = false;\r\n\r\n  modalWidth = 400;\r\n\r\n  calculateModalWidth() {\r\n    const screenWidth = window.innerWidth;\r\n    let modalWidth = 0.85 * screenWidth;\r\n    if (modalWidth > 700) {\r\n      modalWidth = 700;\r\n    }\r\n    this.modalWidth = modalWidth;\r\n  }\r\n\r\n  modalContainerStyle() {\r\n    return {\r\n      display: this.isVisible ? 'block' : 'none',\r\n      position: 'fixed',\r\n      top: '0',\r\n      left: '0',\r\n      width: '100%',\r\n      height: '100%',\r\n      backgroundColor: 'rgba(0, 0, 0, 0.5)',\r\n      zIndex: '999',\r\n    };\r\n  }\r\n\r\n  modalContentStyle() {\r\n    return {\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '10px',\r\n      width: `${this.modalWidth}px`,\r\n      maxHeight: '75%',\r\n      overflowX: 'hidden',\r\n      overflowY: 'auto',\r\n      position: 'fixed',\r\n      top: this.position.includes('top') ? '10px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '10px' : 'auto',\r\n      left: this.position.includes('Left') ? '10px' : 'auto',\r\n      right: this.position.includes('Right') ? '10px' : 'auto',\r\n    };\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['isVisible'] && this.isVisible) {\r\n      this.initializeBreakoutRooms();\r\n    }\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.calculateModalWidth();\r\n  }\r\n\r\n  initializeBreakoutRooms = () => {\r\n    this.parameters = this.parameters.getUpdatedAllParams();\r\n    const filteredParticipants = this.parameters.participants.filter(\r\n      (participant: any) => participant.islevel != '2',\r\n    );\r\n    this.participantsRef = filteredParticipants;\r\n    this.breakoutRoomsRef =\r\n      this.parameters.breakoutRooms && this.parameters.breakoutRooms.length > 0\r\n        ? [...this.parameters.breakoutRooms]\r\n        : [];\r\n    this.checkCanStartBreakout();\r\n  };\r\n\r\n  handleRandomAssign() {\r\n    const numRoomsInt = parseInt(this.numRooms);\r\n    if (!numRoomsInt || numRoomsInt <= 0) {\r\n      this.parameters.showAlert?.({\r\n        message: 'Please enter a valid number of rooms',\r\n        type: 'danger',\r\n      });\r\n      return;\r\n    }\r\n\r\n    const newBreakoutRooms: BreakoutParticipant[][] = Array.from({ length: numRoomsInt }, () => []);\r\n\r\n    const shuffledParticipants = [...this.participantsRef].sort(() => 0.5 - Math.random());\r\n\r\n    shuffledParticipants.forEach((participant, index) => {\r\n      const roomIndex = index % numRoomsInt;\r\n      if (newBreakoutRooms[roomIndex].length < this.parameters.itemPageLimit) {\r\n        const participant_: BreakoutParticipant = { name: participant.name, breakRoom: roomIndex };\r\n        newBreakoutRooms[roomIndex].push(participant_);\r\n        participant['breakRoom'] = roomIndex;\r\n      } else {\r\n        for (let i = 0; i < numRoomsInt; i++) {\r\n          if (newBreakoutRooms[i].length < this.parameters.itemPageLimit) {\r\n            newBreakoutRooms[i].push(participant);\r\n            participant['breakRoom'] = i;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    });\r\n    this.breakoutRoomsRef = newBreakoutRooms;\r\n    this.checkCanStartBreakout();\r\n  }\r\n\r\n  handleManualAssign() {\r\n    const numRoomsInt = parseInt(this.numRooms);\r\n    if (!numRoomsInt || numRoomsInt <= 0) {\r\n      this.parameters.showAlert?.({\r\n        message: 'Please enter a valid number of rooms',\r\n        type: 'danger',\r\n      });\r\n      return;\r\n    }\r\n\r\n    this.breakoutRoomsRef = Array.from({ length: numRoomsInt }, () => []);\r\n    this.parameters.updateCanStartBreakout(false);\r\n    this.checkCanStartBreakout();\r\n  }\r\n\r\n  handleAddRoom() {\r\n    this.breakoutRoomsRef = [...this.breakoutRoomsRef, []];\r\n    this.parameters.updateCanStartBreakout(false);\r\n    this.checkCanStartBreakout();\r\n  }\r\n\r\n  handleSaveRooms() {\r\n    if (this.validateRooms()) {\r\n      this.parameters.updateBreakoutRooms(this.breakoutRoomsRef);\r\n      this.parameters.updateCanStartBreakout(true);\r\n      this.checkCanStartBreakout();\r\n      this.parameters.showAlert?.({ message: 'Rooms saved successfully', type: 'success' });\r\n    } else {\r\n      this.parameters.showAlert?.({ message: 'Rooms validation failed', type: 'danger' });\r\n    }\r\n  }\r\n\r\n  validateRooms() {\r\n    if (this.breakoutRoomsRef.length == 0) {\r\n      this.parameters.showAlert?.({ message: 'There must be at least one room', type: 'danger' });\r\n      return false;\r\n    }\r\n\r\n    for (let room of this.breakoutRoomsRef) {\r\n      if (room.length == 0) {\r\n        this.parameters.showAlert?.({ message: 'Rooms must not be empty', type: 'danger' });\r\n        return false;\r\n      }\r\n\r\n      const participantNames = room.map((p) => p.name);\r\n      const uniqueNames = new Set(participantNames);\r\n      if (participantNames.length != uniqueNames.size) {\r\n        this.parameters.showAlert?.({\r\n          message: 'Duplicate participant names in a room',\r\n          type: 'danger',\r\n        });\r\n        return false;\r\n      }\r\n\r\n      if (room.length > this.parameters.itemPageLimit) {\r\n        this.parameters.showAlert?.({\r\n          message: 'A room exceeds the participant limit',\r\n          type: 'danger',\r\n        });\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  checkCanStartBreakout = () => {\r\n    this.parameters = this.parameters.getUpdatedAllParams();\r\n    if (this.parameters.canStartBreakout) {\r\n      this.startBreakoutButtonVisible = true;\r\n      this.stopBreakoutButtonVisible =\r\n        this.parameters.breakOutRoomStarted && !this.parameters.breakOutRoomEnded;\r\n    } else {\r\n      this.startBreakoutButtonVisible = false;\r\n      this.stopBreakoutButtonVisible = false;\r\n    }\r\n  };\r\n\r\n  handleStartBreakout = () => {\r\n    this.parameters = this.parameters.getUpdatedAllParams();\r\n    if (this.parameters.shareScreenStarted || this.parameters.shared) {\r\n      this.parameters.showAlert?.({\r\n        message: 'You cannot start breakout rooms while screen sharing is active',\r\n        type: 'danger',\r\n      });\r\n      return;\r\n    }\r\n\r\n    if (this.parameters.canStartBreakout) {\r\n      const emitName =\r\n        this.parameters.breakOutRoomStarted && !this.parameters.breakOutRoomEnded\r\n          ? 'updateBreakout'\r\n          : 'startBreakout';\r\n      const filteredBreakoutRooms = this.breakoutRoomsRef.map((room) =>\r\n        room.map(({ name, breakRoom }) => ({ name, breakRoom })),\r\n      );\r\n      this.parameters.socket.emit(\r\n        emitName,\r\n        {\r\n          breakoutRooms: filteredBreakoutRooms,\r\n          newParticipantAction: this.newParticipantAction,\r\n          roomName: this.parameters.roomName,\r\n        },\r\n        (response: { success: any; reason: any }) => {\r\n          if (response.success) {\r\n            this.parameters.showAlert?.({ message: 'Breakout rooms active', type: 'success' });\r\n            this.parameters.updateBreakOutRoomStarted(true);\r\n            this.parameters.updateBreakOutRoomEnded(false);\r\n\r\n            this.onBreakoutRoomsClose();\r\n            if (this.parameters.meetingDisplayType != 'all') {\r\n              this.parameters.updateMeetingDisplayType('all');\r\n            }\r\n          } else {\r\n            this.parameters.showAlert?.({ message: response.reason, type: 'danger' });\r\n          }\r\n        },\r\n      );\r\n\r\n      if (this.parameters.localSocket && this.parameters.localSocket.id) {\r\n        try {\r\n          this.parameters.localSocket.emit(\r\n            emitName,\r\n            {\r\n              breakoutRooms: filteredBreakoutRooms,\r\n              newParticipantAction: this.newParticipantAction,\r\n              roomName: this.parameters.roomName,\r\n            },\r\n            (response: { success: any; reason: any }) => {\r\n              if (response.success) {\r\n                // do nothing\r\n              }\r\n            },\r\n          );\r\n        } catch (error) {\r\n          console.log('Error starting local breakout rooms:');\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  handleStopBreakout() {\r\n    this.parameters.socket.emit(\r\n      'stopBreakout',\r\n      { roomName: this.parameters.roomName },\r\n      (response: { success: any; reason: any }) => {\r\n        if (response.success) {\r\n          this.parameters.showAlert?.({ message: 'Breakout rooms stopped', type: 'success' });\r\n          this.parameters.updateBreakOutRoomStarted(false);\r\n          this.parameters.updateBreakOutRoomEnded(true);\r\n\r\n          this.onBreakoutRoomsClose();\r\n          if (this.parameters.meetingDisplayType != this.parameters.prevMeetingDisplayType) {\r\n            this.parameters.updateMeetingDisplayType(this.parameters.prevMeetingDisplayType);\r\n          }\r\n        } else {\r\n          this.parameters.showAlert?.({ message: response.reason, type: 'danger' });\r\n        }\r\n      },\r\n    );\r\n\r\n    if (this.parameters.localSocket && this.parameters.localSocket.id) {\r\n      try {\r\n        this.parameters.localSocket.emit(\r\n          'stopBreakout',\r\n          { roomName: this.parameters.roomName },\r\n          (response: { success: any; reason: any }) => {\r\n            if (response.success) {\r\n              // do nothing\r\n            }\r\n          },\r\n        );\r\n      } catch (error) {\r\n        console.log('Error starting local breakout rooms:');\r\n      }\r\n\r\n    }\r\n  }\r\n\r\n  handleEditRoom(roomIndex: number) {\r\n    this.parameters.updateCurrentRoomIndex(roomIndex);\r\n    this.currentRoom = this.breakoutRoomsRef[roomIndex];\r\n    this.editRoomModalVisible = true;\r\n    this.parameters.updateCanStartBreakout(false);\r\n    this.checkCanStartBreakout();\r\n  }\r\n\r\n  handleDeleteRoom(roomIndex: number) {\r\n    if (this.breakoutRoomsRef.length > 0) {\r\n      const room = this.breakoutRoomsRef[roomIndex];\r\n      room.forEach((participant) => (participant.breakRoom = null));\r\n      const newBreakoutRooms = [...this.breakoutRoomsRef];\r\n      newBreakoutRooms.splice(roomIndex, 1);\r\n\r\n      newBreakoutRooms.forEach((room, index) => {\r\n        room.forEach((participant) => (participant.breakRoom = index));\r\n      });\r\n\r\n      this.breakoutRoomsRef = newBreakoutRooms;\r\n      this.checkCanStartBreakout();\r\n    }\r\n  }\r\n\r\n  handleAddParticipant(event: { roomIndex: number; participant: BreakoutParticipant }) {\r\n    const { roomIndex, participant } = event;\r\n    if (this.breakoutRoomsRef[roomIndex].length < this.parameters.itemPageLimit) {\r\n      const newBreakoutRooms = [...this.breakoutRoomsRef];\r\n      newBreakoutRooms[roomIndex].push(participant);\r\n      this.breakoutRoomsRef = newBreakoutRooms;\r\n      participant['breakRoom'] = roomIndex;\r\n      if (this.parameters.currentRoomIndex != null) {\r\n        this.handleEditRoom(this.parameters.currentRoomIndex);\r\n      }\r\n    } else {\r\n      this.parameters.showAlert?.({ message: 'Room is full', type: 'danger' });\r\n    }\r\n  }\r\n\r\n  handleRemoveParticipant(event: { roomIndex: number; participant: BreakoutParticipant }) {\r\n    const { roomIndex, participant } = event;\r\n    const newBreakoutRooms = [...this.breakoutRoomsRef];\r\n    newBreakoutRooms[roomIndex] = newBreakoutRooms[roomIndex].filter((p) => p != participant);\r\n    this.breakoutRoomsRef = newBreakoutRooms;\r\n    participant['breakRoom'] = null;\r\n    if (this.parameters.currentRoomIndex != null) {\r\n      this.handleEditRoom(this.parameters.currentRoomIndex);\r\n    }\r\n  }\r\n}\r\n","<div *ngIf=\"isVisible\" class=\"modal-container\" [ngStyle]=\"modalContainerStyle()\">\r\n  <div class=\"modal-content\" [ngStyle]=\"modalContentStyle()\">\r\n    <div class=\"modal-header\">\r\n      <h2>Breakout Rooms <fa-icon [icon]=\"faDoorOpen\"></fa-icon></h2>\r\n      <button class=\"close-btn\" (click)=\"onBreakoutRoomsClose()\">\r\n        <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n      </button>\r\n    </div>\r\n    <hr>\r\n    <div class=\"form-group\">\r\n      <label for=\"numRooms\">Number of Rooms <fa-icon [icon]=\"faUsers\"></fa-icon></label>\r\n      <input type=\"number\" class=\"form-control\" id=\"numRooms\" [(ngModel)]=\"numRooms\">\r\n    </div>\r\n    <div class=\"form-group\">\r\n      <button class=\"btn btn-primary\" (click)=\"handleRandomAssign()\">Random Assign <fa-icon [icon]=\"faRandom\"></fa-icon></button>\r\n      <button class=\"btn btn-secondary\" (click)=\"handleManualAssign()\">Manual Assign <fa-icon [icon]=\"faHandPointer\"></fa-icon></button>\r\n      <button class=\"btn btn-success\" (click)=\"handleAddRoom()\">Add Room <fa-icon [icon]=\"faPlus\"></fa-icon></button>\r\n      <button class=\"btn btn-info\" (click)=\"handleSaveRooms()\">Save Rooms <fa-icon [icon]=\"faSave\"></fa-icon></button>\r\n    </div>\r\n    <div class=\"form-group\">\r\n      <label for=\"newParticipantAction\">New Participant Action <fa-icon [icon]=\"faUsers\"></fa-icon></label>\r\n      <select class=\"form-control\" id=\"newParticipantAction\" [(ngModel)]=\"newParticipantAction\">\r\n        <option value=\"autoAssignNewRoom\">Add to new room</option>\r\n        <option value=\"autoAssignAvailableRoom\">Add to open room</option>\r\n        <option value=\"manualAssign\">No action</option>\r\n      </select>\r\n    </div>\r\n    <div #roomsContainer>\r\n      <app-room-list [rooms]=\"breakoutRoomsRef\" (editRoom)=\"handleEditRoom($event)\" (deleteRoom)=\"handleDeleteRoom($event)\" (removeParticipant)=\"handleRemoveParticipant($event)\"></app-room-list>\r\n    </div>\r\n    <div *ngIf=\"startBreakoutButtonVisible\">\r\n      <button class=\"btn btn-primary mr-2 mb-2\" (click)=\"handleStartBreakout()\">\r\n        {{ parameters.breakOutRoomStarted && !parameters.breakOutRoomEnded ? 'Update Breakout' : 'Start Breakout' }} <fa-icon [icon]=\"parameters.breakOutRoomStarted && !parameters.breakOutRoomEnded ? faSyncAlt : faPlay\"></fa-icon>\r\n      </button>\r\n    </div>\r\n    <div *ngIf=\"stopBreakoutButtonVisible\">\r\n      <button class=\"btn btn-danger mr-2 mb-2\" (click)=\"handleStopBreakout()\">\r\n        Stop Breakout <fa-icon [icon]=\"faStop\"></fa-icon>\r\n      </button>\r\n    </div>\r\n  </div>\r\n  <app-edit-room-modal [editRoomModalVisible]=\"editRoomModalVisible\" [currentRoom]=\"currentRoom!\" [participantsRef]=\"participantsRef\" [currentRoomIndex]=\"parameters.currentRoomIndex!\" (setEditRoomModalVisible)=\"editRoomModalVisible = $event\" (addParticipant)=\"handleAddParticipant($event)\" (removeParticipant)=\"handleRemoveParticipant($event)\"></app-edit-room-modal>\r\n</div>\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\nimport { Component, Input, OnChanges, SimpleChanges, OnInit } from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ModifyCoHostSettings } from '../../../methods/co-host-methods/modify-co-host-settings.service';\r\nimport {\r\n  Participant,\r\n  CoHostResponsibility,\r\n  ModifyCoHostSettingsOptions,\r\n  ShowAlert,\r\n} from '../../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface CoHostModalOptions {\r\n  isCoHostModalVisible: boolean;\r\n  currentCohost?: string;\r\n  participants: Participant[];\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  position?: string;\r\n  backgroundColor?: string;\r\n  roomName: string;\r\n  showAlert?: ShowAlert;\r\n  updateCoHostResponsibility: (coHostResponsibility: CoHostResponsibility[]) => void;\r\n  updateCoHost: (coHost: string) => void;\r\n  updateIsCoHostModalVisible: (isCoHostModalVisible: boolean) => void;\r\n  socket: Socket;\r\n  onCoHostClose: () => void;\r\n  onModifyEventSettings?: (settings: ModifyCoHostSettingsOptions) => void;\r\n}\r\n\r\nexport type CoHostModalType = (options: CoHostModalOptions) => HTMLElement;\r\n\r\n/**\r\n * CoHostModal component allows managing co-host settings for an event.\r\n *\r\n * @selector app-co-host-modal\r\n * @inputs\r\n * - `isCoHostModalVisible` (boolean): A boolean value that determines whether the modal is visible. Default is false.\r\n * - `currentCohost` (string): The current co-host for the event. Default is 'No coHost'.\r\n * - `participants` (Participant[]): An array of participants in the event.\r\n * - `coHostResponsibility` (CoHostResponsibility[]): An array of co-host responsibilities.\r\n * - `position` (string): The position of the modal. Default is 'topRight'.\r\n * - `backgroundColor` (string): The background color of the modal. Default is '#83c0e9'.\r\n * - `roomName` (string): The name of the room.\r\n * - `showAlert` (ShowAlert): A function to show alerts.\r\n *\r\n * @outputs\r\n * - `updateCoHostResponsibility` (coHostResponsibility: CoHostResponsibility[]): A function to update co-host responsibilities.\r\n * - `updateCoHost` (coHost: string): A function to update the co-host.\r\n * - `updateIsCoHostModalVisible` (isCoHostModalVisible: boolean): A function to update the visibility of the modal.\r\n * - `socket` (Socket): The socket object.\r\n *\r\n * @methods\r\n * - `ngOnInit()`: Lifecycle hook that is called after the component is initialized. It sets the default value for `onModifyCoHost` if not provided.\r\n * - `ngOnChanges(changes: SimpleChanges)`: Lifecycle hook that is called when any data-bound property of the component changes. It initializes the responsibilities and calculates the modal width.\r\n * - `initializeResponsibilities()`: Initializes the responsibilities.\r\n * - `get filteredParticipants()`: Returns the filtered participants.\r\n * - `handleToggleSwitch(key: string)`: Handles the toggle switch for the given key.\r\n * - `handleSave()`: Handles the save action.\r\n * - `handleClose()`: Handles the close action.\r\n * - `calculateModalWidth()`: Calculates the modal width.\r\n * - `modalContainerStyle()`: Returns the modal container style.\r\n * - `modalContentStyle()`: Returns the modal content style.\r\n *\r\n * @dependencies\r\n * - `CommonModule`: Angular's common module is imported for common directives.\r\n * - `FontAwesomeModule`: Angular's font awesome module is imported for icons.\r\n * - `FormsModule`: Angular's forms module is imported for form-related directives.\r\n * - `ModifyCoHostSettings`: The ModifyCoHostSettings service is used to modify co-host settings.\r\n *\r\n * @styles\r\n * - `.container`: The container style.\r\n *\r\n * @example\r\n * ```html\r\n * <app-co-host-modal\r\n *  [isCoHostModalVisible]=\"isCoHostModalVisible\"\r\n * [currentCohost]=\"currentCohost\"\r\n * [participants]=\"participants\"\r\n * [coHostResponsibility]=\"coHostResponsibility\"\r\n * [position]=\"position\"\r\n * [backgroundColor]=\"backgroundColor\"\r\n * [roomName]=\"roomName\"\r\n * [showAlert]=\"showAlert\"\r\n * [updateCoHostResponsibility]=\"updateCoHostResponsibility\"\r\n * [updateCoHost]=\"updateCoHost\"\r\n * [updateIsCoHostModalVisible]=\"updateIsCoHostModalVisible\"\r\n * [socket]=\"socket\"\r\n * [onCoHostClose]=\"onCoHostClose\"\r\n * [onModifyCoHost]=\"onModifyCoHost\">\r\n * </app-co-host-modal>\r\n * ```\r\n *\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-co-host-modal',\r\n    imports: [CommonModule, FontAwesomeModule, FormsModule],\r\n    templateUrl: './co-host-modal.component.html',\r\n    styleUrls: ['./co-host-modal.component.css']\r\n})\r\n\r\n\r\nexport class CoHostModal implements OnChanges, OnInit {\r\n  @Input() isCoHostModalVisible = false;\r\n  @Input() currentCohost = 'No coHost';\r\n  @Input() participants: Participant[] = [];\r\n  @Input() coHostResponsibility: CoHostResponsibility[] = [];\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = '#83c0e9';\r\n  @Input() roomName = '';\r\n  @Input() showAlert: ShowAlert = () => {};\r\n  @Input() updateCoHostResponsibility: (coHostResponsibility: CoHostResponsibility[]) => void =\r\n    () => {};\r\n  @Input() updateCoHost: (coHost: string) => void = () => {};\r\n  @Input() updateIsCoHostModalVisible: (isCoHostModalVisible: boolean) => void = () => {};\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input()\r\n  onCoHostClose!: () => void;\r\n  @Input()\r\n  onModifyCoHost!: (settings: ModifyCoHostSettingsOptions) => void;\r\n\r\n  faTimes = faTimes;\r\n\r\n  selectedCohost: string = this.currentCohost;\r\n  CoHostResponsibilityCopy: any[] = [];\r\n  CoHostResponsibilityCopyAlt: any[] = [];\r\n  responsibilities: { [key: string]: boolean } = {};\r\n  responsibilityKeys: { manageKey: string; dedicateKey: string }[] = [];\r\n\r\n  modalWidth!: number;\r\n\r\n  constructor(private modifyCoHostSettingsService: ModifyCoHostSettings) {}\r\n\r\n  ngOnInit() {\r\n    // Set default value for onModifyCoHost if not provided\r\n    if (!this.onModifyCoHost) {\r\n      this.onModifyCoHost = (params: any) =>\r\n        this.modifyCoHostSettingsService.modifyCoHostSettings(params);\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['isCoHostModalVisible'] && this.isCoHostModalVisible) {\r\n      this.initializeResponsibilities();\r\n      this.calculateModalWidth();\r\n    }\r\n  }\r\n\r\n  initializeResponsibilities() {\r\n    this.CoHostResponsibilityCopy = [...this.coHostResponsibility];\r\n    this.CoHostResponsibilityCopyAlt = [...this.coHostResponsibility];\r\n    this.responsibilityKeys = this.coHostResponsibility.map((item) => {\r\n      const manageKey = `manage${item.name.charAt(0).toUpperCase() + item.name.slice(1)}`;\r\n      const dedicateKey = `dedicateToManage${\r\n        item.name.charAt(0).toUpperCase() + item.name.slice(1)\r\n      }`;\r\n      return { manageKey, dedicateKey };\r\n    });\r\n\r\n    const initialResponsibilities = this.CoHostResponsibilityCopyAlt.reduce(\r\n      (acc: any, item: any) => {\r\n        const str2 = item.name.charAt(0).toUpperCase() + item.name.slice(1);\r\n        acc[`manage${str2}`] = item.value;\r\n        acc[`dedicateToManage${str2}`] = item.dedicated;\r\n        return acc;\r\n      },\r\n      {},\r\n    );\r\n\r\n    this.responsibilities = initialResponsibilities;\r\n  }\r\n\r\n  get filteredParticipants() {\r\n    return this.participants.filter(\r\n      (participant) => participant.name !== this.currentCohost && participant.islevel !== '2',\r\n    );\r\n  }\r\n\r\n  handleToggleSwitch(key: string) {\r\n    if (key.startsWith('dedicateTo')) {\r\n      const responsibilityName = key.replace('dedicateToManage', '').toLowerCase();\r\n      const manageKey = `manage${\r\n        responsibilityName.charAt(0).toUpperCase() + responsibilityName.slice(1)\r\n      }`;\r\n\r\n      // Ensure that the 'dedicated' checkbox can only be toggled if the corresponding 'responsibility' is checked\r\n      if (this.responsibilities[manageKey]) {\r\n        const responsibilityDedicated = this.CoHostResponsibilityCopy.find(\r\n          (item) => item.name === responsibilityName,\r\n        ).dedicated;\r\n        this.responsibilities[key] = !responsibilityDedicated;\r\n        this.CoHostResponsibilityCopy.find((item) => item.name === responsibilityName).dedicated =\r\n          !responsibilityDedicated;\r\n      }\r\n    } else if (key.startsWith('manage')) {\r\n      const responsibilityName = key.replace('manage', '').toLowerCase();\r\n      const responsibilityValue = this.CoHostResponsibilityCopy.find(\r\n        (item) => item.name === responsibilityName,\r\n      ).value;\r\n\r\n      // Toggle the 'responsibility' checkbox and ensure the corresponding 'dedicated' checkbox is also disabled if unchecked\r\n      this.responsibilities[key] = !responsibilityValue;\r\n      this.CoHostResponsibilityCopy.find((item) => item.name === responsibilityName).value =\r\n        !responsibilityValue;\r\n\r\n      if (!this.responsibilities[key]) {\r\n        const dedicateKey = `dedicateToManage${\r\n          responsibilityName.charAt(0).toUpperCase() + responsibilityName.slice(1)\r\n        }`;\r\n        this.responsibilities[dedicateKey] = false;\r\n        this.CoHostResponsibilityCopy.find((item) => item.name === responsibilityName).dedicated =\r\n          false;\r\n      }\r\n    }\r\n  }\r\n\r\n  handleSave() {\r\n\r\n    this.onModifyCoHost({\r\n      roomName: this.roomName,\r\n      showAlert: this.showAlert,\r\n      selectedParticipant: this.selectedCohost,\r\n      coHost: this.currentCohost,\r\n      coHostResponsibility: this.CoHostResponsibilityCopy,\r\n      updateCoHostResponsibility: this.updateCoHostResponsibility,\r\n      updateCoHost: this.updateCoHost,\r\n      updateIsCoHostModalVisible: this.updateIsCoHostModalVisible,\r\n      socket: this.socket,\r\n    });\r\n  }\r\n\r\n  handleClose() {\r\n    this.onCoHostClose();\r\n  }\r\n\r\n  calculateModalWidth() {\r\n    const screenWidth = window.innerWidth;\r\n    let modalWidth = 0.8 * screenWidth;\r\n    if (modalWidth > 400) {\r\n      modalWidth = 400;\r\n    }\r\n    this.modalWidth = modalWidth;\r\n  }\r\n\r\n  modalContainerStyle() {\r\n    return {\r\n      display: this.isCoHostModalVisible ? 'block' : 'none',\r\n      position: 'fixed',\r\n      top: '0',\r\n      left: '0',\r\n      width: '100%',\r\n      height: '100%',\r\n      backgroundColor: 'rgba(0, 0, 0, 0.5)',\r\n      zIndex: '999',\r\n    };\r\n  }\r\n\r\n  modalContentStyle() {\r\n    return {\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '10px',\r\n      width: `${this.modalWidth}px`,\r\n      maxHeight: '65%',\r\n      overflowX: 'hidden',\r\n      overflowY: 'auto',\r\n      position: 'fixed',\r\n      top: this.position.includes('top') ? '10px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '10px' : 'auto',\r\n      left: this.position.includes('Left') ? '10px' : 'auto',\r\n      right: this.position.includes('Right') ? '10px' : 'auto',\r\n    };\r\n  }\r\n}\r\n","<!-- co-host-modal.component.html -->\r\n<div [ngStyle]=\"modalContainerStyle()\">\r\n  <div [ngStyle]=\"modalContentStyle()\">\r\n    <div class=\"modal-header\">\r\n      <div class=\"modal-title\">Manage Co-Host</div>\r\n      <div class=\"btn-close-settings\" (click)=\"handleClose()\">\r\n        <fa-icon [icon]=\"faTimes\" class=\"icon\"></fa-icon>\r\n      </div>\r\n    </div>\r\n    <hr class=\"hr\" />\r\n    <div class=\"modal-body\">\r\n      <div class=\"form-group\">\r\n        <label class=\"font-weight-bold\">Current Co-host:</label>\r\n        <input class=\"form-control\" [value]=\"currentCohost\" readonly />\r\n      </div>\r\n      <div class=\"form-group\">\r\n        <label class=\"font-weight-bold\">Select New Co-host:</label>\r\n        <select class=\"form-control\" [(ngModel)]=\"selectedCohost\">\r\n          <option value=\"\">Select a participant</option>\r\n          <option *ngFor=\"let participant of filteredParticipants\" [value]=\"participant.name\">\r\n            {{ participant.name }}\r\n          </option>\r\n        </select>\r\n      </div>\r\n      <div class=\"row\">\r\n        <div class=\"col-5\">\r\n          <label style=\"font-weight: bold\">Responsibility</label>\r\n        </div>\r\n        <div class=\"col-3\">\r\n          <label style=\"font-weight: bold\">Select</label>\r\n        </div>\r\n        <div class=\"col-4\">\r\n          <label style=\"font-weight: bold\">Dedicated</label>\r\n        </div>\r\n      </div>\r\n      <div *ngFor=\"let key of responsibilityKeys\" class=\"row\" style=\"margin-bottom: 10px;\">\r\n        <div class=\"col-5\" style=\"font-weight: bold\">{{ key.manageKey.replace('manage', '') }}</div>\r\n        <div class=\"col-3\">\r\n          <input type=\"checkbox\" [(ngModel)]=\"responsibilities[key.manageKey]\" (change)=\"handleToggleSwitch(key.manageKey)\">\r\n        </div>\r\n        <div class=\"col-4\">\r\n          <input type=\"checkbox\" [(ngModel)]=\"responsibilities[key.dedicateKey]\" (change)=\"handleToggleSwitch(key.dedicateKey)\" [disabled]=\"!responsibilities[key.manageKey]\">\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div class=\"modal-footer\">\r\n      <button class=\"btn-apply-settings\" (click)=\"handleSave()\">Save</button>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface AlertComponentOptions {\r\n  visible: boolean;\r\n  message: string;\r\n  type: 'success' | 'danger'; // Optional prop with 'success' or 'danger' as default values\r\n  duration?: number; // Optional with default value\r\n  onHide?: () => void; // Optional callback function\r\n  textColor?: string; // Optional text color\r\n}\r\n\r\nexport type AlertComponentType = (options: AlertComponentOptions) => HTMLElement;\r\n\r\n/**\r\n * AlertComponent displays an alert message of type 'success' or 'danger' with customizable options.\r\n * It can automatically hide after a set duration and includes a manual dismiss option.\r\n *\r\n * @selector app-alert-component\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @inputs\r\n * - `visible` (boolean): Determines if the alert is visible. Default is false.\r\n * - `message` (string): The message displayed in the alert.\r\n * - `type` ('success' | 'danger'): Type of alert, either 'success' or 'danger'. Default is 'success'.\r\n * - `duration` (number): Duration in milliseconds for the alert to remain visible before hiding. Default is 4000 ms.\r\n * - `textColor` (string): Optional color for alert text. Default is 'black'.\r\n * - `onHide` (function): Optional callback invoked when the alert is hidden.\r\n *\r\n * @methods\r\n * - `ngOnChanges(changes: SimpleChanges)`: Lifecycle hook invoked on input changes; initiates auto-hide based on duration if `visible` is true.\r\n * - `handlePress()`: Manually hides the alert by invoking the `onHide` callback.\r\n *\r\n * @example\r\n * ```html\r\n * <app-alert-component\r\n *  [visible]=\"showAlert\"\r\n * [message]=\"alertMessage\"\r\n * [type]=\"alertType\"\r\n * [duration]=\"5000\"\r\n * [textColor]=\"alertTextColor\"\r\n * [onHide]=\"onAlertHide\">\r\n * </app-alert-component>\r\n * ```\r\n **/\r\n@Component({\r\n    selector: 'app-alert-component',\r\n    imports: [CommonModule],\r\n    templateUrl: './alert.component.component.html',\r\n    styleUrls: ['./alert.component.component.css']\r\n})\r\n\r\n\r\nexport class AlertComponent implements OnChanges {\r\n  @Input() visible = false;\r\n  @Input() message = '';\r\n  @Input() type: 'success' | 'danger' = 'success';\r\n  @Input() duration = 4000;\r\n  @Input() textColor = 'black';\r\n  @Input() onHide!: () => void;\r\n\r\n  alertType: 'success' | 'danger' = 'success';\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['type']) {\r\n      this.alertType = this.type;\r\n    }\r\n\r\n    if (changes['visible']) {\r\n      if (this.visible) {\r\n        setTimeout(() => {\r\n          this.onHide();\r\n        }, this.duration);\r\n      }\r\n    }\r\n  }\r\n\r\n  handlePress() {\r\n    this.onHide();\r\n  }\r\n}\r\n","<div *ngIf=\"visible\" (click)=\"handlePress()\" class=\"centeredView\">\r\n  <div [ngStyle]=\"{ 'background-color': alertType === 'success' ? 'green' : 'red' }\" class=\"modalView\">\r\n    <p [ngStyle]=\"{ color: textColor }\" class=\"modalText\">{{ message }}</p>\r\n  </div>\r\n</div>\r\n","import { Component, Input, Injector, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface AudioGridOptions {\r\n  componentsToRender: { component: any; inputs?: any }[];\r\n}\r\n\r\nexport type AudioGridType = (options: AudioGridOptions) => HTMLElement;\r\n\r\n\r\n/**\r\n * AudioGrid component renders a dynamic grid of components with individually provided inputs.\r\n *\r\n * @selector app-audio-grid\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @inputs\r\n * - `componentsToRender` ({ component: any; inputs?: any }[]): Array of components with optional inputs to render in the grid.\r\n *\r\n * @methods\r\n * - `ngOnChanges(changes: SimpleChanges)`: Clears the injector cache on changes to `componentsToRender`.\r\n * - `createInjector(inputs: any)`: Creates and caches an injector with specific inputs for each component.\r\n * - `clearInjectorCache()`: Clears the cache to avoid memory leaks and ensure updated injectors.\r\n *\r\n * @example\r\n * ```html\r\n * <app-audio-grid [componentsToRender]=\"[{ component: AudioCard, inputs: { name: 'Participant 1' } }]\"></app-audio-grid>\r\n * ```\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-audio-grid',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div style=\"z-index: 9\">\r\n      <ng-container *ngFor=\"let item of componentsToRender; let i = index\">\r\n        <div style=\"z-index: 9\" [attr.key]=\"i\">\r\n          <ng-container\r\n            *ngComponentOutlet=\"item.component; injector: createInjector(item.inputs)\"\r\n          ></ng-container>\r\n        </div>\r\n      </ng-container>\r\n    </div>\r\n  `,\r\n    styleUrls: ['./audio-grid.component.css']\r\n})\r\n\r\n\r\nexport class AudioGrid implements OnChanges {\r\n  @Input() componentsToRender: { component: any; inputs?: any }[] = [];\r\n\r\n  private injectorCache = new WeakMap<any, Injector>();\r\n\r\n  constructor(private injector: Injector) {}\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['componentsToRender']) {\r\n      this.clearInjectorCache();\r\n    }\r\n  }\r\n\r\n  createInjector(inputs: any) {\r\n    if (!this.injectorCache.has(inputs)) {\r\n      const injector = Injector.create({\r\n        providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\r\n        parent: this.injector,\r\n      });\r\n      this.injectorCache.set(inputs, injector);\r\n    }\r\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n    return this.injectorCache.get(inputs)!;\r\n  }\r\n\r\n  private clearInjectorCache() {\r\n    this.injectorCache = new WeakMap<any, Injector>();\r\n  }\r\n}\r\n","import { Component, Injector, Input, Type } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { IconDefinition } from '@fortawesome/free-solid-svg-icons';\r\n\r\nexport interface CustomComponent {\r\n  component: Type<any>;\r\n  injector: Injector;\r\n}\r\nexport interface Button {\r\n  name?: string;\r\n  icon?: IconDefinition;\r\n  alternateIcon?: IconDefinition;\r\n  onPress?: () => void;\r\n  active?: boolean | (() => boolean);\r\n  activeColor?: string | (() => string);\r\n  inActiveColor?: string | (() => string);\r\n  color?: string;\r\n  backgroundColor?: {\r\n    default?: string;\r\n  };\r\n  customComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n  iconComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n  alternateIconComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n  disabled?: boolean | (() => boolean);\r\n  show?: boolean | (() => boolean);\r\n}\r\n\r\nexport interface ControlButtonsComponentOptions {\r\n  buttons: Button[];\r\n  buttonColor?: string;\r\n  buttonBackgroundColor?: {\r\n    default?: string;\r\n    pressed?: string;\r\n  };\r\n  alignment?:\r\n    | 'flex-start'\r\n    | 'center'\r\n    | 'flex-end'\r\n    | 'space-between'\r\n    | 'space-around'\r\n    | 'space-evenly';\r\n  vertical?: boolean;\r\n  buttonsContainerStyle?: Partial<CSSStyleDeclaration>;\r\n  alternateIconComponent?: HTMLElement | CustomComponent;\r\n}\r\n\r\nexport type ControlButtonsComponentType = (options: ControlButtonsComponentOptions) => HTMLElement;\r\n\r\n@Component({\r\n    selector: 'app-control-buttons-component',\r\n    imports: [CommonModule, FontAwesomeModule],\r\n    template: `\r\n    <div class=\"container\" [ngStyle]=\"mergeStyles(getAlignmentStyle(), buttonsContainerStyle)\">\r\n      <button\r\n        *ngFor=\"let button of buttons; let i = index\"\r\n        class=\"buttonContainer\"\r\n        [ngClass]=\"{ verticalButton: vertical }\"\r\n        [ngStyle]=\"{\r\n          'background-color': button.show\r\n            ? buttonBackgroundColor?.default || 'transparent'\r\n            : 'transparent',\r\n          display: button.show ? 'flex' : 'none'\r\n        }\"\r\n        [disabled]=\"button.disabled\"\r\n        (click)=\"button.onPress ? button.onPress() : null\"\r\n      >\r\n        <!-- Custom component when defined -->\r\n        <ng-container *ngIf=\"button.customComponent; else iconTemplate\">\r\n          <ng-container *ngIf=\"isCustomComponent(button.customComponent)\">\r\n            <ng-container\r\n              *ngComponentOutlet=\"\r\n                button.customComponent.component;\r\n                injector: button.customComponent.injector\r\n              \"\r\n            ></ng-container>\r\n          </ng-container>\r\n          <ng-container\r\n            *ngIf=\"\r\n              !isCustomComponent(button.customComponent) &&\r\n              !isFunctionComponent(button.customComponent)\r\n            \"\r\n          >\r\n            <!-- Handle the HTMLElement case, e.g., render it using [innerHTML] -->\r\n            <div [innerHTML]=\"button.customComponent.outerHTML\"></div>\r\n          </ng-container>\r\n        </ng-container>\r\n\r\n        <!-- Icon logic for active/inactive states -->\r\n        <ng-template #iconTemplate>\r\n          <ng-container *ngIf=\"button.active && button.alternateIconComponent; else defaultIcon\">\r\n            <!-- Alternate icon component when button is active -->\r\n            <ng-container *ngIf=\"isCustomComponent(button.alternateIconComponent)\">\r\n              <ng-container\r\n                *ngComponentOutlet=\"\r\n                  button.alternateIconComponent.component;\r\n                  injector: button.alternateIconComponent.injector\r\n                \"\r\n              ></ng-container>\r\n            </ng-container>\r\n            <ng-container\r\n              *ngIf=\"\r\n                !isCustomComponent(button.alternateIconComponent) &&\r\n                !isFunctionComponent(button.alternateIconComponent)\r\n              \"\r\n            >\r\n              <!-- Handle the HTMLElement case, e.g., render it using [innerHTML] -->\r\n              <div [innerHTML]=\"button.alternateIconComponent.outerHTML\"></div>\r\n            </ng-container>\r\n          </ng-container>\r\n\r\n          <!-- Default icon fallback for active/inactive states -->\r\n          <ng-template #defaultIcon>\r\n            <fa-icon\r\n              *ngIf=\"button.active\"\r\n              [icon]=\"button.alternateIcon! || button.icon\"\r\n              [style.color]=\"button.activeColor || 'transparent'\"\r\n            ></fa-icon>\r\n            <fa-icon\r\n              *ngIf=\"!button.active\"\r\n              [icon]=\"button.icon!\"\r\n              [style.color]=\"button.inActiveColor || '#ffffff'\"\r\n            ></fa-icon>\r\n          </ng-template>\r\n        </ng-template>\r\n\r\n        <!-- Button text -->\r\n        <span\r\n          *ngIf=\"button.name\"\r\n          class=\"buttonText\"\r\n          [ngStyle]=\"{ color: button.color || '#ffffff' }\"\r\n        >\r\n          {{ button.name }}\r\n        </span>\r\n      </button>\r\n    </div>\r\n  `,\r\n    styleUrls: ['./control-buttons-component.component.css']\r\n})\r\nexport class ControlButtonsComponent {\r\n  @Input() buttons: Button[] = [];\r\n  @Input() buttonColor = '';\r\n  @Input() buttonBackgroundColor: any = {};\r\n  @Input() alignment = 'flex-start';\r\n  @Input() vertical = false;\r\n  @Input() buttonsContainerStyle: any = {};\r\n\r\n  // Function to get the alignment styles dynamically\r\n  getAlignmentStyle() {\r\n    const alignmentMap: any = {\r\n      center: { 'justify-content': 'center' },\r\n      'flex-end': { 'justify-content': 'flex-end' },\r\n      'space-between': { 'justify-content': 'space-between' },\r\n      'space-around': { 'justify-content': 'space-around' },\r\n      'space-evenly': { 'justify-content': 'space-evenly' },\r\n      'flex-start': { 'justify-content': 'flex-start' },\r\n    };\r\n    return {\r\n      display: 'flex',\r\n      flexDirection: this.vertical ? 'column' : 'row',\r\n      ...alignmentMap[this.alignment],\r\n    };\r\n  }\r\n\r\n  // Utility function to merge multiple styles into one object\r\n  mergeStyles(...styles: any[]) {\r\n    return Object.assign({}, ...styles);\r\n  }\r\n  isCustomComponent(\r\n    comp: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent),\r\n  ): comp is CustomComponent {\r\n    return (\r\n      comp &&\r\n      typeof comp === 'object' &&\r\n      'component' in comp &&\r\n      typeof comp.component === 'function' &&\r\n      'injector' in comp\r\n    );\r\n  }\r\n\r\n  isFunctionComponent(\r\n    comp: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent),\r\n  ): comp is () => HTMLElement | CustomComponent {\r\n    return typeof comp === 'function';\r\n  }\r\n}\r\n","import { Component, Injector, Input, Type } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\r\n\r\nexport interface CustomComponent {\r\n  component: Type<any>;\r\n  injector: Injector;\r\n}\r\n\r\nexport interface AltButton {\r\n  name?: string;\r\n  icon?: IconDefinition;\r\n  alternateIcon?: IconDefinition;\r\n  onPress?: () => void;\r\n  active?: boolean | (() => boolean);\r\n  activeColor?: string | (() => string);\r\n  inActiveColor?: string | (() => string);\r\n  color?: string;\r\n  backgroundColor?: {\r\n    default?: string;\r\n  };\r\n  customComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n  iconComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n  alternateIconComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n  show?: boolean | (() => boolean);\r\n}\r\n\r\nexport interface ControlButtonsAltComponentOptions {\r\n  buttons: AltButton[];\r\n  position?: 'left' | 'right' | 'middle';\r\n  location?: 'top' | 'bottom' | 'center';\r\n  direction?: 'horizontal' | 'vertical';\r\n  buttonsContainerStyle?: Partial<CSSStyleDeclaration>;\r\n  alternateIconComponent?: HTMLElement | CustomComponent;\r\n  iconComponent?: HTMLElement | CustomComponent;\r\n  showAspect?: boolean;\r\n}\r\n\r\nexport type ControlButtonsAltComponentType = (\r\n  options: ControlButtonsAltComponentOptions,\r\n) => HTMLElement;\r\n\r\n/**\r\n * ControlButtonsAltComponent provides configurable button controls with custom icons, colors, and positioning options.\r\n *\r\n * @selector app-control-buttons-alt-component\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule\r\n *\r\n * @inputs\r\n * - `buttons` (AltButton[]): Array of button configurations with options for icon, color, state, and actions.\r\n * - `position` ('left' | 'right' | 'middle'): Horizontal alignment of buttons. Default is 'left'.\r\n * - `location` ('top' | 'bottom' | 'center'): Vertical alignment of buttons. Default is 'top'.\r\n * - `direction` ('horizontal' | 'vertical'): Layout direction for buttons. Default is 'horizontal'.\r\n * - `buttonsContainerStyle` (Partial<CSSStyleDeclaration>): Custom styles for the container of buttons.\r\n * - `showAspect` (boolean): Controls the visibility of the button container. Default is false.\r\n *\r\n * @methods\r\n * - `getAlignmentStyle()`: Returns alignment styles based on `position`, `location`, and `direction`.\r\n * - `getContainerStyle()`: Combines container styles, alignment styles, and visibility settings.\r\n * - `getButtonStyle(button: AltButton)`: Applies style to each button based on its properties.\r\n * - `getTextStyle(button: AltButton)`: Sets text styles for button labels.\r\n * - `isCustomComponent(comp)`: Type guard to identify custom component objects.\r\n * - `isFunctionComponent(comp)`: Type guard to identify function components.\r\n *\r\n * @example\r\n * ```html\r\n * <app-control-buttons-alt-component\r\n *  [buttons]=\"[\r\n *    { name: 'Pause', icon: faPause, onPress: pauseAction, activeColor: 'blue' },\r\n *    { name: 'Play', icon: faPlay, onPress: playAction, color: 'green' }\r\n *  ]\"\r\n * [position]=\"'middle'\"\r\n * [location]=\"'bottom'\"\r\n * [direction]=\"'vertical'\"\r\n * [buttonsContainerStyle]=\"{ backgroundColor: '#333' }\"\r\n * [showAspect]=\"true\">\r\n * </app-control-buttons-alt-component>\r\n * ```\r\n **/\r\n\r\n\r\n@Component({\r\n    selector: 'app-control-buttons-alt-component',\r\n    imports: [CommonModule, FontAwesomeModule],\r\n    templateUrl: './control-buttons-alt-component.component.html',\r\n    styleUrls: ['./control-buttons-alt-component.component.css']\r\n})\r\nexport class ControlButtonsAltComponent {\r\n  @Input() buttons: AltButton[] = [];\r\n  @Input() position: 'left' | 'right' | 'middle' = 'left';\r\n  @Input() location: 'top' | 'bottom' | 'center' = 'top';\r\n  @Input() direction: 'horizontal' | 'vertical' = 'horizontal';\r\n  @Input() buttonsContainerStyle: any = {};\r\n  @Input() showAspect = false;\r\n\r\n  getAlignmentStyle() {\r\n    let alignmentStyle: any = {};\r\n\r\n    if (this.position === 'left' || this.position === 'right' || this.position === 'middle') {\r\n      alignmentStyle.justifyContent =\r\n        this.position === 'left' ? 'flex-start' : this.position === 'right' ? 'flex-end' : 'center';\r\n    }\r\n\r\n    if (this.location === 'top' || this.location === 'bottom' || this.location === 'center') {\r\n      alignmentStyle.alignItems =\r\n        this.location === 'top' ? 'flex-start' : this.location === 'bottom' ? 'flex-end' : 'center';\r\n    }\r\n\r\n    alignmentStyle.flexDirection = this.direction === 'vertical' ? 'column' : 'row';\r\n\r\n    return alignmentStyle;\r\n  }\r\n\r\n  getContainerStyle() {\r\n    return {\r\n      ...this.styles.container,\r\n      ...this.getAlignmentStyle(),\r\n      ...this.buttonsContainerStyle,\r\n      display: this.showAspect ? 'flex' : 'none',\r\n    };\r\n  }\r\n\r\n  getButtonStyle(button: AltButton) {\r\n    return {\r\n      ...this.styles.buttonContainer,\r\n      backgroundColor: button.backgroundColor?.default || 'transparent',\r\n      ...(this.direction === 'vertical' ? this.styles.verticalButton : {}),\r\n    };\r\n  }\r\n\r\n  getTextStyle(button: AltButton) {\r\n    return {\r\n      ...this.styles.buttonText,\r\n      color: button.color || '#ffffff',\r\n    };\r\n  }\r\n\r\n  isCustomComponent(\r\n    comp: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent),\r\n  ): comp is CustomComponent {\r\n    return (\r\n      comp &&\r\n      typeof comp === 'object' &&\r\n      'component' in comp &&\r\n      typeof comp.component === 'function' &&\r\n      'injector' in comp\r\n    );\r\n  }\r\n\r\n  isFunctionComponent(\r\n    comp: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent),\r\n  ): comp is () => HTMLElement | CustomComponent {\r\n    return typeof comp === 'function';\r\n  }\r\n\r\n  styles = {\r\n    container: {\r\n      marginTop: '5px',\r\n      marginBottom: '5px',\r\n      zIndex: 9,\r\n    },\r\n    buttonContainer: {\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      padding: '10px',\r\n      borderRadius: '5px',\r\n      marginLeft: '5px',\r\n      marginRight: '5px',\r\n      cursor: 'pointer',\r\n    },\r\n    verticalButton: {\r\n      flexDirection: 'column',\r\n    },\r\n    buttonText: {\r\n      fontSize: '12px',\r\n      marginTop: '5px',\r\n    },\r\n  };\r\n}\r\n","<div [ngStyle]=\"getContainerStyle()\">\r\n  <div\r\n    *ngFor=\"let button of buttons; let i = index\"\r\n    [ngStyle]=\"getButtonStyle(button)\"\r\n    (click)=\"button.onPress && button.onPress()\"\r\n  >\r\n    <ng-container *ngIf=\"button.icon\">\r\n      <fa-icon\r\n        *ngIf=\"button.active\"\r\n        [icon]=\"button.alternateIcon || button.icon\"\r\n        [style.color]=\"button.inActiveColor || 'transparent'\"\r\n      ></fa-icon>\r\n      <fa-icon\r\n        *ngIf=\"!button.active\"\r\n        [icon]=\"button.icon\"\r\n        [style.color]=\"button.inActiveColor || 'transparent'\"\r\n      ></fa-icon>\r\n    </ng-container>\r\n    <ng-container *ngIf=\"!button.icon\">\r\n      <ng-container *ngIf=\"button.customComponent\">\r\n        <ng-container *ngIf=\"isCustomComponent(button.customComponent)\">\r\n          <ng-container\r\n            *ngComponentOutlet=\"\r\n              button.customComponent.component;\r\n              injector: button.customComponent.injector\r\n            \"\r\n          ></ng-container>\r\n        </ng-container>\r\n        <ng-container *ngIf=\"!isCustomComponent(button.customComponent) && !isFunctionComponent(button.customComponent)\">\r\n          <!-- Handle the HTMLElement case, e.g., render it using [innerHTML] -->\r\n          <div [innerHTML]=\"button.customComponent.outerHTML\"></div>\r\n        </ng-container>\r\n      </ng-container>\r\n    </ng-container>\r\n    <span *ngIf=\"button.name\" [ngStyle]=\"getTextStyle(button)\">{{\r\n      button.name\r\n    }}</span>\r\n  </div>\r\n</div>\r\n","import { Component, Injector, Input, Type } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { IconDefinition } from '@fortawesome/free-solid-svg-icons';\r\nexport interface CustomComponent {\r\n  component: Type<any>;\r\n  injector: Injector;\r\n}\r\n\r\nexport interface ButtonTouch {\r\n  name?: string;\r\n  icon?: IconDefinition;\r\n  alternateIcon?: any;\r\n  onPress?: () => void;\r\n  backgroundColor?: {\r\n    default?: string;\r\n  };\r\n  active?: boolean | (() => boolean);\r\n  alternateIconComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n  iconComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n  customComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n  color?: string;\r\n  activeColor?: string | (() => string);\r\n  inActiveColor?: string | (() => string);\r\n  show?: boolean | (() => boolean);\r\n  disabled?: boolean | (() => boolean);\r\n}\r\n\r\nexport interface ControlButtonsComponentTouchOptions {\r\n  buttons: ButtonTouch[];\r\n  position?: 'left' | 'right' | 'middle';\r\n  location?: 'top' | 'bottom' | 'center';\r\n  direction?: 'horizontal' | 'vertical';\r\n  buttonsContainerStyle?: Partial<CSSStyleDeclaration>;\r\n  showAspect?: boolean;\r\n}\r\n\r\nexport type ControlButtonsComponentTouchType = (\r\n  options: ControlButtonsComponentTouchOptions,\r\n) => HTMLElement;\r\n\r\n/**\r\n * ControlButtonsComponentTouch provides customizable touch controls with various icons, colors, and alignment options.\r\n *\r\n * @selector app-control-buttons-component-touch\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule\r\n *\r\n * @inputs\r\n * - `buttons` (ButtonTouch[]): Array of button configurations with properties for icon, color, action, and visibility.\r\n * - `position` ('left' | 'right' | 'middle'): Horizontal alignment of the buttons container. Default is 'left'.\r\n * - `location` ('top' | 'bottom' | 'center'): Vertical alignment of the buttons container. Default is 'top'.\r\n * - `direction` ('horizontal' | 'vertical'): Layout direction of buttons. Default is 'horizontal'.\r\n * - `buttonsContainerStyle` (Partial<CSSStyleDeclaration>): Custom styles for the buttons container.\r\n * - `showAspect` (boolean): Controls the visibility of the buttons container. Default is false.\r\n *\r\n * @methods\r\n * - `getAlignmentStyle()`: Returns alignment styles based on `position`, `location`, and `direction` inputs.\r\n * - `mergeStyles(...styles: any[])`: Merges multiple style objects into one for flexible styling.\r\n * - `isCustomComponent(comp)`: Type guard for identifying custom component objects.\r\n * - `isFunctionComponent(comp)`: Type guard for identifying function components.\r\n *\r\n * @example\r\n * ```html\r\n * <app-control-buttons-component-touch\r\n *   [buttons]=\"[\r\n *     { name: 'Mute', icon: faMicrophoneSlash, onPress: muteAction, activeColor: 'red' },\r\n *     { name: 'Unmute', icon: faMicrophone, onPress: unmuteAction, activeColor: 'green' }\r\n *   ]\"\r\n *   position=\"right\"\r\n *   location=\"bottom\"\r\n *   direction=\"vertical\"\r\n *   [buttonsContainerStyle]=\"{ backgroundColor: '#333' }\"\r\n *   [showAspect]=\"true\"\r\n * ></app-control-buttons-component-touch>\r\n * ```\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-control-buttons-component-touch',\r\n    imports: [CommonModule, FontAwesomeModule],\r\n    template: `\r\n    <div\r\n      [ngStyle]=\"\r\n        mergeStyles(getAlignmentStyle(), buttonsContainerStyle, {\r\n          position: 'absolute',\r\n          bottom: '0',\r\n          left: '0',\r\n          right: '0',\r\n          'margin-top': '5px',\r\n          'margin-bottom': '5px',\r\n          elevation: '9',\r\n          'z-index': '9',\r\n          'background-color': 'transparent',\r\n          display: showAspect ? 'flex' : 'none'\r\n        })\r\n      \"\r\n    >\r\n      <button\r\n        *ngFor=\"let button of buttons\"\r\n        [ngStyle]=\"\r\n          mergeStyles(\r\n            {\r\n              'align-items': 'center',\r\n              padding: '10px',\r\n              'border-radius': '5px',\r\n              'margin-right': '5px',\r\n              'margin-left': '5px',\r\n              'margin-bottom': '5px',\r\n              'margin-top': '5px',\r\n              cursor: 'pointer',\r\n              'background-color': button.show\r\n                ? button.backgroundColor?.default || 'rgba(255, 255, 255, 0.25)'\r\n                : 'transparent',\r\n              border: 'none',\r\n              display: button.show\r\n                ? 'flex'\r\n                : button.inActiveColor === 'transparent' && button.activeColor === 'transparent'\r\n                ? 'flex'\r\n                : 'none'\r\n            },\r\n            direction === 'vertical' ? { 'flex-direction': 'column' } : {}\r\n          )\r\n        \"\r\n        (click)=\"button.onPress ? button.onPress() : null\"\r\n        [disabled]=\"button.disabled\"\r\n      >\r\n        <ng-container *ngIf=\"button.icon\">\r\n          <fa-icon\r\n            *ngIf=\"button.active\"\r\n            [icon]=\"button.alternateIcon || button.icon\"\r\n            [style.color]=\"button.activeColor || 'transparent'\"\r\n          ></fa-icon>\r\n          <fa-icon\r\n            *ngIf=\"!button.active\"\r\n            [icon]=\"button.icon\"\r\n            [style.color]=\"button.inActiveColor || 'transparent'\"\r\n          ></fa-icon>\r\n        </ng-container>\r\n        <ng-container *ngIf=\"!button.icon\">\r\n          <ng-container *ngIf=\"button.customComponent\">\r\n            <ng-container *ngIf=\"isCustomComponent(button.customComponent)\">\r\n              <ng-container\r\n                *ngComponentOutlet=\"\r\n                  button.customComponent.component;\r\n                  injector: button.customComponent.injector\r\n                \"\r\n              ></ng-container>\r\n            </ng-container>\r\n            <ng-container\r\n              *ngIf=\"\r\n                !isCustomComponent(button.customComponent) &&\r\n                !isFunctionComponent(button.customComponent)\r\n              \"\r\n            >\r\n              <!-- Handle the HTMLElement case, e.g., render it using [innerHTML] -->\r\n              <div [innerHTML]=\"button.customComponent.outerHTML\"></div>\r\n            </ng-container>\r\n          </ng-container>\r\n        </ng-container>\r\n        <span\r\n          *ngIf=\"button.name\"\r\n          [ngStyle]=\"{\r\n            color: button.color || 'transparent',\r\n            'font-size': '12px',\r\n            'margin-top': '5px'\r\n          }\"\r\n        >\r\n          {{ button.name }}\r\n        </span>\r\n      </button>\r\n    </div>\r\n  `,\r\n    styles: [\r\n        `\r\n      :host {\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n      }\r\n    `,\r\n    ]\r\n})\r\nexport class ControlButtonsComponentTouch {\r\n  @Input() buttons: ButtonTouch[] = [];\r\n  @Input() position = 'left';\r\n  @Input() location = 'top';\r\n  @Input() direction = 'horizontal';\r\n  @Input() buttonsContainerStyle: any = {};\r\n  @Input() showAspect = false;\r\n\r\n  getAlignmentStyle() {\r\n    let alignmentStyle: any = {};\r\n\r\n    if (this.position === 'left' || this.position === 'right' || this.position === 'middle') {\r\n      alignmentStyle['justify-content'] =\r\n        this.position === 'left' ? 'flex-start' : this.position === 'right' ? 'flex-end' : 'center';\r\n    }\r\n\r\n    if (this.location === 'top' || this.location === 'bottom' || this.location === 'center') {\r\n      alignmentStyle['align-items'] =\r\n        this.location === 'top' ? 'flex-start' : this.location === 'bottom' ? 'flex-end' : 'center';\r\n    }\r\n\r\n    if (this.direction === 'vertical') {\r\n      alignmentStyle['flex-direction'] = 'column';\r\n    } else {\r\n      alignmentStyle['flex-direction'] = 'row';\r\n    }\r\n\r\n    return alignmentStyle;\r\n  }\r\n\r\n  mergeStyles(...styles: any[]) {\r\n    return Object.assign({}, ...styles);\r\n  }\r\n\r\n  isCustomComponent(\r\n    comp: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent),\r\n  ): comp is CustomComponent {\r\n    return (\r\n      comp &&\r\n      typeof comp === 'object' &&\r\n      'component' in comp &&\r\n      typeof comp.component === 'function' &&\r\n      'injector' in comp\r\n    );\r\n  }\r\n\r\n  isFunctionComponent(\r\n    comp: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent),\r\n  ): comp is () => HTMLElement | CustomComponent {\r\n    return typeof comp === 'function';\r\n  }\r\n}\r\n","import { Component, Input, OnInit, OnChanges, SimpleChanges, Injector } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface FlexibleGridOptions {\r\n  customWidth: number;\r\n  customHeight: number;\r\n  rows: number;\r\n  columns: number;\r\n  componentsToRender: { component: any; inputs?: any }[];\r\n  backgroundColor?: string;\r\n}\r\n\r\nexport type FlexibleGridType = (options: FlexibleGridOptions) => HTMLElement;\r\n\r\n/**\r\n * FlexibleGrid is a dynamic, customizable grid component that renders a specified number of rows and columns,\r\n * with each grid item containing a provided component.\r\n *\r\n * @selector app-flexible-grid\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @inputs\r\n * - `customWidth` (number): The width for each grid item in pixels. Default is 0.\r\n * - `customHeight` (number): The height for each grid item in pixels. Default is 0.\r\n * - `rows` (number): Number of rows in the grid. Default is 0.\r\n * - `columns` (number): Number of columns in the grid. Default is 0.\r\n * - `componentsToRender` ({ component: any, inputs?: any }[]): Array of components to render in the grid, each with optional inputs.\r\n * - `backgroundColor` (string): Background color for each grid item. Default is 'transparent'.\r\n *\r\n * @methods\r\n * - `ngOnInit()`: Initializes and generates the grid on component load.\r\n * - `ngOnChanges(changes: SimpleChanges)`: Regenerates the grid if `columns`, `componentsToRender`, or `rows` change.\r\n * - `generateGrid()`: Builds the grid based on the row, column, and component configurations.\r\n * - `getGridItemStyle()`: Returns a style object for each grid item, including custom width, height, and background color.\r\n * - `createInjector(inputs: any)`: Creates a cached injector for each component to support dynamic component inputs.\r\n *\r\n * @example\r\n * ```html\r\n * <app-flexible-grid\r\n *   [customWidth]=\"100\"\r\n *   [customHeight]=\"100\"\r\n *   [rows]=\"2\"\r\n *   [columns]=\"3\"\r\n *   [componentsToRender]=\"[{ component: MyComponent, inputs: { prop: 'value' } }]\"\r\n *   backgroundColor=\"lightgrey\"\r\n * ></app-flexible-grid>\r\n * ```\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-flexible-grid',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div style=\"padding: 0;\">\r\n      <div\r\n        *ngFor=\"let rowComponents of grid; let rowIndex = index\"\r\n        style=\"display: flex; flex-direction: row;\"\r\n      >\r\n        <div\r\n          *ngFor=\"let component of rowComponents; let colIndex = index\"\r\n          [ngStyle]=\"getGridItemStyle()\"\r\n        >\r\n          <ng-container\r\n            *ngComponentOutlet=\"component.component; injector: createInjector(component.inputs)\"\r\n          ></ng-container>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  `\r\n})\r\nexport class FlexibleGrid implements OnInit, OnChanges {\r\n  @Input() customWidth = 0;\r\n  @Input() customHeight = 0;\r\n  @Input() rows = 0;\r\n  @Input() columns = 0;\r\n  @Input() componentsToRender: { component: any; inputs?: any }[] = [];\r\n  @Input() backgroundColor = 'transparent';\r\n\r\n  grid: any[][] = [];\r\n\r\n  private injectorCache = new WeakMap<any, Injector>();\r\n\r\n  constructor(private injector: Injector) {}\r\n\r\n  ngOnInit() {\r\n    this.generateGrid();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['columns'] || changes['componentsToRender'] || changes['rows']) {\r\n      this.generateGrid();\r\n    }\r\n  }\r\n\r\n  generateGrid() {\r\n    this.grid = [];\r\n    for (let row = 0; row < this.rows; row++) {\r\n      const rowComponents = [];\r\n      for (let col = 0; col < this.columns; col++) {\r\n        const index = row * this.columns + col;\r\n        const component = this.componentsToRender[index];\r\n        rowComponents.push(component);\r\n      }\r\n      this.grid.push(rowComponents);\r\n    }\r\n  }\r\n\r\n  getGridItemStyle() {\r\n    return {\r\n      flex: 1,\r\n      width: this.customWidth + 'px',\r\n      height: this.customHeight + 'px',\r\n      backgroundColor: this.backgroundColor,\r\n      margin: '1px',\r\n      padding: 0,\r\n      borderRadius: '8px',\r\n    };\r\n  }\r\n\r\n  createInjector(inputs: any) {\r\n    if (!this.injectorCache.has(inputs)) {\r\n      const injector = Injector.create({\r\n        providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\r\n        parent: this.injector,\r\n      });\r\n      this.injectorCache.set(inputs, injector);\r\n    }\r\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n    return this.injectorCache.get(inputs)!;\r\n  }\r\n}\r\n","import { Component, Input, OnChanges, OnInit, SimpleChanges, Injector } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CustomMediaComponent } from '../../../@types/types';\r\nexport interface FlexibleVideoOptions {\r\n  customWidth: number;\r\n  customHeight: number;\r\n  rows: number;\r\n  columns: number;\r\n  componentsToRender: CustomMediaComponent[];\r\n  showAspect?: boolean;\r\n  backgroundColor?: string;\r\n  Screenboard?: CustomMediaComponent;\r\n  annotateScreenStream?: boolean;\r\n  localStreamScreen: MediaStream | null;\r\n}\r\n\r\nexport type FlexibleVideoType = (options: FlexibleVideoOptions) => HTMLElement;\r\n\r\n/**\r\n * FlexibleVideo component displays a customizable video grid, supporting dynamic layout and optional screenboard overlay.\r\n *\r\n * @selector app-flexible-video\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @inputs\r\n * - `customWidth` (number): The custom width for each video grid item in pixels. Default is 0.\r\n * - `customHeight` (number): The custom height for each video grid item in pixels. Default is 0.\r\n * - `rows` (number): Number of rows in the video grid. Default is 0.\r\n * - `columns` (number): Number of columns in the video grid. Default is 0.\r\n * - `componentsToRender` (CustomMediaComponent[]): Array of components to render in the grid.\r\n * - `showAspect` (boolean): Flag to control aspect ratio display. Default is false.\r\n * - `backgroundColor` (string): Background color for the video grid. Default is 'transparent'.\r\n * - `Screenboard` (CustomMediaComponent): Optional screenboard component to overlay on the grid.\r\n * - `annotateScreenStream` (boolean): Flag to annotate the screen stream. Default is false.\r\n * - `localStreamScreen` (MediaStream): Local screen stream for video.\r\n *\r\n * @methods\r\n * - `ngOnInit()`: Initializes and generates the grid on component load if `showAspect` is true.\r\n * - `ngOnChanges(changes: SimpleChanges)`: Updates grid layout and dimensions if properties change.\r\n * - `generateGrid()`: Generates grid structure based on rows, columns, and `componentsToRender`.\r\n * - `createInjector(inputs: any)`: Creates and caches an injector for component inputs.\r\n *\r\n * @example\r\n * ```html\r\n * <app-flexible-video\r\n *   [customWidth]=\"300\"\r\n *   [customHeight]=\"200\"\r\n *   [rows]=\"2\"\r\n *   [columns]=\"3\"\r\n *   [componentsToRender]=\"[{ component: VideoComponent, inputs: { stream: videoStream } }]\"\r\n *   showAspect=\"true\"\r\n *   [Screenboard]=\"{ component: ScreenOverlayComponent, inputs: { overlayData: data } }\"\r\n * ></app-flexible-video>\r\n * ```\r\n **/\r\n\r\n\r\n@Component({\r\n    selector: 'app-flexible-video',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div\r\n      style=\"padding: 0; flex: 1; margin: 0; position: relative; display: {{\r\n        showAspect ? 'flex' : 'none'\r\n      }};\r\n             max-width: {{ customWidth }}px; overflow-x: hidden; overflow-y: auto; left: {{\r\n        cardLeft > 0 ? cardLeft : 0\r\n      }}px;\"\r\n    >\r\n      <div\r\n        *ngFor=\"let rowComponents of grid; let rowIndex = index\"\r\n        style=\"display: flex; flex-direction: row;\"\r\n      >\r\n        <div\r\n          *ngFor=\"let component of rowComponents; let colIndex = index\"\r\n          [ngStyle]=\"{\r\n            flex: 1,\r\n            width: cardWidth + 'px',\r\n            height: cardHeight + 'px',\r\n            backgroundColor: backgroundColor,\r\n            margin: '1px',\r\n            padding: 0,\r\n            borderRadius: '0px',\r\n            left: cardLeft + 'px'\r\n          }\"\r\n        >\r\n          <ng-container\r\n            *ngComponentOutlet=\"component.component; injector: createInjector(component.inputs)\"\r\n          ></ng-container>\r\n        </div>\r\n      </div>\r\n      <div\r\n        *ngIf=\"Screenboard && Screenboard.component\"\r\n        [ngStyle]=\"{\r\n          position: 'absolute',\r\n          top: '0',\r\n          left: canvasLeft + 'px',\r\n          width: cardWidth + 'px',\r\n          height: cardHeight + 'px',\r\n          backgroundColor: 'rgba(0, 0, 0, 0.005)',\r\n          zIndex: '2'\r\n        }\"\r\n      >\r\n        <ng-container\r\n          *ngComponentOutlet=\"Screenboard.component; injector: createInjector(Screenboard.inputs)\"\r\n        ></ng-container>\r\n      </div>\r\n    </div>\r\n  `\r\n})\r\nexport class FlexibleVideo implements OnInit, OnChanges {\r\n  @Input() customWidth = 0;\r\n  @Input() customHeight = 0;\r\n  @Input() rows = 0;\r\n  @Input() columns = 0;\r\n  @Input() componentsToRender: CustomMediaComponent[] = [];\r\n  @Input() showAspect = false;\r\n  @Input() backgroundColor?: string = 'transparent';\r\n  @Input() Screenboard?: CustomMediaComponent;\r\n  @Input() annotateScreenStream?: boolean = false;\r\n  @Input() localStreamScreen?: MediaStream;\r\n\r\n  key = 0;\r\n  cardWidth = 0;\r\n  cardHeight = 0;\r\n  cardTop = 0;\r\n  cardLeft = 0;\r\n  canvasLeft = 0;\r\n  grid: any[][] = [];\r\n\r\n  private injectorCache = new WeakMap<any, Injector>();\r\n\r\n  constructor(private injector: Injector) {}\r\n\r\n  ngOnInit() {\r\n    if (this.showAspect) {\r\n      this.generateGrid();\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (\r\n      changes['columns'] ||\r\n      changes['rows'] ||\r\n      changes['componentsToRender'] ||\r\n      changes['customWidth'] ||\r\n      changes['customHeight']\r\n    ) {\r\n      if (this.showAspect) {\r\n        this.key++;\r\n        this.generateGrid();\r\n      }\r\n    }\r\n\r\n    if (this.annotateScreenStream && this.localStreamScreen) {\r\n      const videoHeight = this.localStreamScreen.getVideoTracks()[0].getSettings().height || 0;\r\n      const videoWidth = this.localStreamScreen.getVideoTracks()[0].getSettings().width || 0;\r\n      this.cardWidth = videoWidth;\r\n      this.cardHeight = videoHeight;\r\n      this.cardTop = Math.floor((this.customHeight - videoHeight) / 2);\r\n      this.cardLeft = Math.floor((this.customWidth - videoWidth) / 2);\r\n      this.canvasLeft = this.cardLeft < 0 ? this.cardLeft : 0;\r\n    } else {\r\n      this.cardWidth = this.customWidth;\r\n      this.cardHeight = this.customHeight;\r\n      this.cardTop = 0;\r\n      this.cardLeft = 0;\r\n      this.canvasLeft = 0;\r\n    }\r\n  }\r\n\r\n  generateGrid() {\r\n    this.grid = [];\r\n    for (let row = 0; row < this.rows; row++) {\r\n      const rowComponents = [];\r\n      for (let col = 0; col < this.columns; col++) {\r\n        const index = row * this.columns + col;\r\n        const component = this.componentsToRender[index];\r\n        rowComponents.push(component);\r\n      }\r\n      this.grid.push(rowComponents);\r\n    }\r\n  }\r\n\r\n  createInjector(inputs: any) {\r\n    if (!this.injectorCache.has(inputs)) {\r\n      const injector = Injector.create({\r\n        providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\r\n        parent: this.injector,\r\n      });\r\n      this.injectorCache.set(inputs, injector);\r\n    }\r\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n    return this.injectorCache.get(inputs)!;\r\n  }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nexport interface LoadingModalOptions {\r\n  isVisible: boolean;\r\n  backgroundColor?: string;\r\n  displayColor?: string;\r\n}\r\n\r\nexport type LoadingModalType = (options: LoadingModalOptions) => HTMLElement;\r\n\r\n/**\r\n * LoadingModal displays a loading spinner and a customizable \"Loading...\" text as an overlay.\r\n *\r\n * @selector app-loading-modal\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @inputs\r\n * - `isVisible` (boolean): Controls the visibility of the modal overlay. Default is `false`.\r\n * - `backgroundColor` (string): Background color of the modal overlay. Default is `'rgba(0, 0, 0, 0.5)'`.\r\n * - `displayColor` (string): Color of the loading text. Default is `'white'`.\r\n *\r\n * @properties\r\n * - `modalContainerStyle` (object): Computed styles for the modal container.\r\n * - `modalContentStyle` (object): Computed styles for the modal content.\r\n * - `spinnerContainerStyle` (object): Computed styles for the spinner container.\r\n * - `loadingTextStyle` (object): Computed styles for the loading text.\r\n *\r\n * @example\r\n * ```html\r\n * <app-loading-modal\r\n *   [isVisible]=\"true\"\r\n *   [backgroundColor]=\"'rgba(0, 0, 0, 0.5)'\"\r\n *   [displayColor]=\"'white'\">\r\n * </app-loading-modal>\r\n * ```\r\n *\r\n * @styles\r\n * - `.spinner`: Styles for the loading spinner.\r\n * - `@keyframes spin`: Keyframes for the spinner rotation animation.\r\n * - `.modal-content`: Styles for the modal content container.\r\n * - `.loading-text`: Styles for the loading text.\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-loading-modal',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div *ngIf=\"isVisible\" [ngStyle]=\"modalContainerStyle\">\r\n      <div [ngStyle]=\"modalContentStyle\" class=\"modal-content\">\r\n        <div class=\"spinner\" [ngStyle]=\"spinnerContainerStyle\"></div>\r\n        <div [ngStyle]=\"loadingTextStyle\" class=\"loading-text\">Loading...</div>\r\n      </div>\r\n    </div>\r\n  `,\r\n    styles: [\r\n        `\r\n      .spinner {\r\n        border: 12px solid #f3f3f3; /* Light grey */\r\n        border-top: 12px solid black; /* Black */\r\n        border-radius: 50%;\r\n        width: 50px;\r\n        height: 50px;\r\n        animation: spin 2s linear infinite;\r\n      }\r\n      @keyframes spin {\r\n        0% {\r\n          transform: rotate(0deg);\r\n        }\r\n        100% {\r\n          transform: rotate(360deg);\r\n        }\r\n      }\r\n      .modal-content {\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n      }\r\n      .loading-text {\r\n        margin-top: 10px;\r\n      }\r\n    `,\r\n    ]\r\n})\r\nexport class LoadingModal {\r\n  @Input() isVisible = false;\r\n  @Input() backgroundColor?: string = 'rgba(0, 0, 0, 0.5)';\r\n  @Input() displayColor?: string = 'white';\r\n\r\n  get modalContainerStyle() {\r\n    return {\r\n      position: 'fixed',\r\n      top: '0',\r\n      left: '0',\r\n      width: '100%',\r\n      height: '100%',\r\n      backgroundColor: this.backgroundColor,\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'center',\r\n      zIndex: '999',\r\n    };\r\n  }\r\n\r\n  get modalContentStyle() {\r\n    return {\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '10px',\r\n      maxWidth: '200px',\r\n      textAlign: 'center',\r\n    };\r\n  }\r\n\r\n  get spinnerContainerStyle() {\r\n    return {\r\n      marginBottom: '20px',\r\n    };\r\n  }\r\n\r\n  get loadingTextStyle() {\r\n    return {\r\n      color: this.displayColor,\r\n    };\r\n  }\r\n}\r\n","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface MainAspectComponentOptions {\r\n  backgroundColor?: string;\r\n  showControls?: boolean;\r\n  containerWidthFraction?: number;\r\n  containerHeightFraction?: number;\r\n  defaultFraction?: number;\r\n  updateIsWideScreen: (isWideScreen: boolean) => void;\r\n  updateIsMediumScreen: (isMediumScreen: boolean) => void;\r\n  updateIsSmallScreen: (isSmallScreen: boolean) => void;\r\n}\r\n\r\nexport type MainAspectComponentType = (options: MainAspectComponentOptions) => HTMLElement;\r\n\r\n/**\r\n * MainAspectComponent dynamically adjusts its aspect ratio based on window size, providing an adaptable container for content.\r\n * It listens for window resize and orientation changes to update its layout, making it suitable for responsive applications.\r\n *\r\n * @selector app-main-aspect-component\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @template\r\n * ```html\r\n * <div [ngStyle]=\"aspectStyles\" [style.backgroundColor]=\"backgroundColor\" class=\"aspect-container\">\r\n *   <ng-content></ng-content>\r\n * </div>\r\n * ```\r\n *\r\n * @styles\r\n * - `.aspect-container`: Styles for overflow handling.\r\n *\r\n * @inputs\r\n * - `backgroundColor` (string): The background color of the aspect container.\r\n * - `showControls` (boolean): Toggles control display, adjusting the container height. Default is true.\r\n * - `containerWidthFraction` (number): Fraction of window width for container width. Default is 1.\r\n * - `containerHeightFraction` (number): Fraction of window height for container height. Default is 1.\r\n * - `defaultFraction` (number): Height adjustment factor when controls are shown. Default is 0.94.\r\n * - `updateIsWideScreen` (function): Callback to set wide screen status.\r\n * - `updateIsMediumScreen` (function): Callback to set medium screen status.\r\n * - `updateIsSmallScreen` (function): Callback to set small screen status.\r\n *\r\n * @methods\r\n * - `ngOnInit()`: Initializes component and sets up resize and orientation listeners.\r\n * - `ngOnChanges(changes: SimpleChanges)`: Updates layout when relevant inputs change.\r\n * - `ngOnDestroy()`: Removes event listeners to prevent memory leaks.\r\n * - `updateAspectStyles()`: Calculates and applies styles based on current window dimensions and component inputs.\r\n *\r\n * @example\r\n * ```html\r\n * <app-main-aspect-component\r\n *   [backgroundColor]=\"'lightblue'\"\r\n *   [showControls]=\"true\"\r\n *   [containerWidthFraction]=\"0.9\"\r\n *   [containerHeightFraction]=\"0.8\"\r\n *   [defaultFraction]=\"0.95\"\r\n *   [updateIsWideScreen]=\"onWideScreenUpdate\"\r\n *   [updateIsMediumScreen]=\"onMediumScreenUpdate\"\r\n *   [updateIsSmallScreen]=\"onSmallScreenUpdate\"\r\n * ></app-main-aspect-component>\r\n * ```\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-main-aspect-component',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div\r\n      [ngStyle]=\"aspectStyles\"\r\n      [style.backgroundColor]=\"backgroundColor\"\r\n      class=\"aspect-container\"\r\n    >\r\n      <ng-content></ng-content>\r\n    </div>\r\n  `,\r\n    styles: [\r\n        `\r\n      .aspect-container {\r\n        overflow: hidden;\r\n      }\r\n    `,\r\n    ]\r\n})\r\nexport class MainAspectComponent implements OnInit, OnDestroy, OnChanges {\r\n  @Input() backgroundColor = '';\r\n  @Input() showControls = true;\r\n  @Input() containerWidthFraction = 1;\r\n  @Input() containerHeightFraction = 1;\r\n  @Input() defaultFraction = 0.94;\r\n  @Input() updateIsWideScreen!: (isWideScreen: boolean) => void;\r\n  @Input() updateIsMediumScreen!: (isMediumScreen: boolean) => void;\r\n  @Input() updateIsSmallScreen!: (isSmallScreen: boolean) => void;\r\n\r\n  aspectStyles: { [key: string]: any } = {};\r\n\r\n  ngOnInit() {\r\n    this.updateAspectStyles();\r\n\r\n    window.addEventListener('resize', this.updateAspectStyles);\r\n    window.addEventListener('orientationchange', this.updateAspectStyles);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (\r\n      changes['showControls'] ||\r\n      changes['containerWidthFraction'] ||\r\n      changes['containerHeightFraction'] ||\r\n      changes['defaultFraction']\r\n    ) {\r\n      this.updateAspectStyles();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    window.removeEventListener('resize', this.updateAspectStyles);\r\n    window.removeEventListener('orientationchange', this.updateAspectStyles);\r\n  }\r\n\r\n  private updateAspectStyles = () => {\r\n    const windowHeight = window.innerHeight;\r\n    const windowWidth = window.innerWidth;\r\n\r\n    const parentWidth = Math.floor(this.containerWidthFraction * windowWidth);\r\n    const parentHeight = this.showControls\r\n      ? Math.floor(this.containerHeightFraction * windowHeight * this.defaultFraction)\r\n      : Math.floor(this.containerHeightFraction * windowHeight);\r\n\r\n    let isWideScreen = parentWidth >= 768;\r\n    const isMediumScreen = parentWidth >= 576 && parentWidth < 768;\r\n    const isSmallScreen = parentWidth < 576;\r\n\r\n    if (!isWideScreen && parentWidth > 1.5 * parentHeight) {\r\n      isWideScreen = true;\r\n    }\r\n\r\n    this.updateIsWideScreen(isWideScreen);\r\n    this.updateIsMediumScreen(isMediumScreen);\r\n    this.updateIsSmallScreen(isSmallScreen);\r\n\r\n    this.aspectStyles = {\r\n      height: parentHeight + 'px',\r\n      width: parentWidth + 'px',\r\n    };\r\n  };\r\n}\r\n","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface MainContainerComponentOptions {\r\n  backgroundColor?: string;\r\n  containerWidthFraction?: number;\r\n  containerHeightFraction?: number;\r\n  marginLeft?: number;\r\n  marginRight?: number;\r\n  marginTop?: number;\r\n  marginBottom?: number;\r\n  padding?: number;\r\n}\r\n\r\nexport type MainContainerComponentType = (options: MainContainerComponentOptions) => HTMLElement;\r\n\r\n/**\r\n * MainContainerComponent dynamically adjusts its styles based on input properties and window size,\r\n * providing a responsive container for content.\r\n *\r\n * @selector app-main-container-component\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @template\r\n * ```html\r\n * <div [ngStyle]=\"containerStyles\">\r\n *   <ng-content></ng-content>\r\n * </div>\r\n * ```\r\n *\r\n * @inputs\r\n * - `backgroundColor` (string): Background color of the container.\r\n * - `containerWidthFraction` (number): Fraction of the window width the container should occupy. Default is 1.\r\n * - `containerHeightFraction` (number): Fraction of the window height the container should occupy. Default is 1.\r\n * - `marginLeft` (number): Left margin of the container in pixels.\r\n * - `marginRight` (number): Right margin of the container in pixels.\r\n * - `marginTop` (number): Top margin of the container in pixels.\r\n * - `marginBottom` (number): Bottom margin of the container in pixels.\r\n * - `padding` (number): Padding inside the container in pixels.\r\n *\r\n * @methods\r\n * - `ngOnInit()`: Initializes the component, sets up event listeners for resize and orientation changes, and updates container styles.\r\n * - `ngOnChanges(changes: SimpleChanges)`: Updates container styles when input properties change.\r\n * - `ngOnDestroy()`: Removes event listeners to avoid memory leaks.\r\n * - `updateContainerStyles()`: Computes and applies styles to the container based on current window size and input properties.\r\n *\r\n * @example\r\n * ```html\r\n * <app-main-container-component\r\n *   [backgroundColor]=\"'lightgrey'\"\r\n *   [containerWidthFraction]=\"0.8\"\r\n *   [containerHeightFraction]=\"0.9\"\r\n *   [marginLeft]=\"10\"\r\n *   [marginTop]=\"15\"\r\n *   [padding]=\"5\"\r\n * ></app-main-container-component>\r\n * ```\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-main-container-component',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div [ngStyle]=\"containerStyles\">\r\n      <ng-content></ng-content>\r\n    </div>\r\n  `\r\n})\r\nexport class MainContainerComponent implements OnInit, OnDestroy, OnChanges {\r\n  @Input() backgroundColor = '';\r\n  @Input() containerWidthFraction = 1;\r\n  @Input() containerHeightFraction = 1;\r\n  @Input() marginLeft = 0;\r\n  @Input() marginRight = 0;\r\n  @Input() marginTop = 0;\r\n  @Input() marginBottom = 0;\r\n  @Input() padding = 0;\r\n\r\n  containerStyles: { [key: string]: any } = {};\r\n\r\n  ngOnInit() {\r\n    this.updateContainerStyles();\r\n\r\n    window.addEventListener('resize', this.updateContainerStyles);\r\n    window.addEventListener('orientationchange', this.updateContainerStyles);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (\r\n      changes['containerHeightFraction'] ||\r\n      changes['containerWidthFraction'] ||\r\n      changes['backgroundColor'] ||\r\n      changes['marginLeft'] ||\r\n      changes['marginRight'] ||\r\n      changes['marginTop'] ||\r\n      changes['marginBottom']\r\n    ) {\r\n      this.updateContainerStyles();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    window.removeEventListener('resize', this.updateContainerStyles);\r\n    window.removeEventListener('orientationchange', this.updateContainerStyles);\r\n  }\r\n\r\n  updateContainerStyles = () => {\r\n    const windowHeight = window.innerHeight;\r\n    const windowWidth = window.innerWidth;\r\n\r\n    this.containerStyles = {\r\n      backgroundColor: this.backgroundColor,\r\n      marginLeft: `${this.marginLeft}px`,\r\n      marginRight: `${this.marginRight}px`,\r\n      marginTop: `${this.marginTop}px`,\r\n      marginBottom: `${this.marginBottom}px`,\r\n      height: Math.floor(this.containerHeightFraction * windowHeight) + 'px',\r\n      maxHeight: Math.floor(this.containerHeightFraction * windowHeight) + 'px',\r\n      width: Math.floor(this.containerWidthFraction * windowWidth) + 'px',\r\n      maxWidth: Math.floor(this.containerWidthFraction * windowWidth) + 'px',\r\n      padding: `${this.padding}px`,\r\n      overflow: 'hidden',\r\n    };\r\n  };\r\n}\r\n","import { Component, Input, SimpleChanges, OnChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nexport interface MeetingProgressTimerOptions {\r\n  meetingProgressTime: string;\r\n  initialBackgroundColor?: string;\r\n  position?: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';\r\n  textStyle?: { [key: string]: string | number };\r\n  showTimer?: boolean;\r\n}\r\n\r\nexport type MeetingProgressTimerType = (options: MeetingProgressTimerOptions) => HTMLElement;\r\n\r\n/**\r\n * MeetingProgressTimer displays a customizable timer badge to track meeting progress time.\r\n *\r\n * @selector app-meeting-progress-timer\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @template\r\n * ```html\r\n * <div [ngStyle]=\"positions[position]\" class=\"badge-container\">\r\n *   <div [ngStyle]=\"{ backgroundColor: initialBackgroundColor, display: showTimer ? 'block' : 'none' }\" class=\"progress-timer\">\r\n *     <span [ngStyle]=\"textStyle\" class=\"progress-timer-text\">{{ meetingProgressTime }}</span>\r\n *   </div>\r\n * </div>\r\n * ```\r\n *\r\n * @styles\r\n * - `.badge-container`: General container style with positioning.\r\n * - `.progress-timer`: Timer badge with default padding, background, and border-radius.\r\n * - `.progress-timer-text`: Text styling within the timer badge.\r\n *\r\n * @inputs\r\n * - `meetingProgressTime` (string): Time to be displayed in the timer.\r\n * - `initialBackgroundColor` (string): Background color of the timer badge. Default is 'green'.\r\n * - `position` ('topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'): Position of the timer on the screen. Default is 'topLeft'.\r\n * - `textStyle` (object): Custom styles for the timer text.\r\n * - `showTimer` (boolean): If true, displays the timer. Default is true.\r\n *\r\n * @property `positions` (object): Preset styles for timer positioning options.\r\n *\r\n * @methods\r\n * - `ngOnChanges(changes: SimpleChanges)`: Handles changes to input properties and updates styles accordingly.\r\n *\r\n * @example\r\n * ```html\r\n * <app-meeting-progress-timer\r\n *   [meetingProgressTime]=\"'10:30'\"\r\n *   [initialBackgroundColor]=\"'blue'\"\r\n *   [position]=\"'bottomRight'\"\r\n *   [textStyle]=\"{ color: 'white', fontWeight: 'bold' }\"\r\n *   [showTimer]=\"true\"\r\n * ></app-meeting-progress-timer>\r\n * ```\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-meeting-progress-timer',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div [ngStyle]=\"positions[position]\" class=\"badge-container\">\r\n      <div\r\n        [ngStyle]=\"{\r\n          backgroundColor: initialBackgroundColor,\r\n          display: showTimer ? 'block' : 'none'\r\n        }\"\r\n        class=\"progress-timer\"\r\n      >\r\n        <span [ngStyle]=\"textStyle\" class=\"progress-timer-text\">{{ meetingProgressTime }}</span>\r\n      </div>\r\n    </div>\r\n  `,\r\n    styles: [\r\n        `\r\n      .badge-container {\r\n        padding: 5px;\r\n        position: relative;\r\n        z-index: 1000;\r\n      }\r\n      .progress-timer {\r\n        background-color: green;\r\n        padding: 5px;\r\n        border-radius: 5px;\r\n        color: white;\r\n      }\r\n      .progress-timer-text {\r\n        color: black;\r\n      }\r\n    `,\r\n    ]\r\n})\r\nexport class MeetingProgressTimer implements OnChanges {\r\n  @Input()\r\n  meetingProgressTime!: string;\r\n  @Input() initialBackgroundColor = 'green';\r\n  @Input() position: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' = 'topLeft';\r\n  @Input() textStyle: { [key: string]: string | number } = {};\r\n  @Input() showTimer = true;\r\n\r\n  positions: {\r\n    [key: string]: {\r\n      position: string;\r\n      top?: string;\r\n      bottom?: string;\r\n      left?: string;\r\n      right?: string;\r\n    };\r\n  } = {\r\n    topLeft: { position: 'absolute', top: '0', left: '0' },\r\n    topRight: { position: 'absolute', top: '0', right: '0' },\r\n    bottomLeft: { position: 'absolute', bottom: '0', left: '0' },\r\n    bottomRight: { position: 'absolute', bottom: '0', right: '0' },\r\n  };\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['position']) {\r\n      this.positions = {\r\n        topLeft: { position: 'absolute', top: '0', left: '0' },\r\n        topRight: { position: 'absolute', top: '0', right: '0' },\r\n        bottomLeft: { position: 'absolute', bottom: '0', left: '0' },\r\n        bottomRight: { position: 'absolute', bottom: '0', right: '0' },\r\n      };\r\n    }\r\n\r\n    if (changes['showTimer']) {\r\n      this.showTimer = changes['showTimer'].currentValue;\r\n    }\r\n  }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MeetingProgressTimer } from '../meeting-progress-timer/meeting-progress-timer.component';\r\n\r\nexport interface MainGridComponentOptions {\r\n  backgroundColor?: string;\r\n  mainSize?: number;\r\n  height?: number;\r\n  width?: number;\r\n  showAspect?: boolean;\r\n  timeBackgroundColor?: string;\r\n  showTimer?: boolean;\r\n  meetingProgressTime?: string;\r\n}\r\n\r\nexport type MainGridComponentType = (options: MainGridComponentOptions) => HTMLElement;\r\n\r\n/**\r\n * MainGridComponent displays a customizable grid container with an optional meeting progress timer.\r\n *\r\n * @selector app-main-grid-component\r\n * @standalone true\r\n * @imports CommonModule, MeetingProgressTimer\r\n *\r\n * @template\r\n * ```html\r\n * <div [ngStyle]=\"maingridContainerStyle\">\r\n *   <app-meeting-progress-timer\r\n *     *ngIf=\"showTimer\"\r\n *     [meetingProgressTime]=\"meetingProgressTime\"\r\n *     [initialBackgroundColor]=\"timeBackgroundColor\"\r\n *   ></app-meeting-progress-timer>\r\n *   <ng-content></ng-content>\r\n * </div>\r\n * ```\r\n *\r\n * @inputs\r\n * - `backgroundColor` (string): Background color of the grid container. Default is an empty string.\r\n * - `mainSize` (number): Main size of the grid container, used for layout adjustments.\r\n * - `height` (number): Height of the grid container in pixels.\r\n * - `width` (number): Width of the grid container in pixels.\r\n * - `showAspect` (boolean): If true, displays the grid container in flex layout. Default is true.\r\n * - `timeBackgroundColor` (string): Background color of the meeting progress timer. Default is 'green'.\r\n * - `showTimer` (boolean): If true, displays the meeting progress timer. Default is true.\r\n * - `meetingProgressTime` (string): Time displayed in the meeting progress timer.\r\n *\r\n * @getter\r\n * - `maingridContainerStyle`: Returns a style object for the grid container, including display, color, dimensions, and border styling.\r\n *\r\n * @example\r\n * ```html\r\n * <app-main-grid-component\r\n *   [backgroundColor]=\"'lightgrey'\"\r\n *   [height]=\"500\"\r\n *   [width]=\"500\"\r\n *   [showAspect]=\"true\"\r\n *   [timeBackgroundColor]=\"'blue'\"\r\n *   [showTimer]=\"true\"\r\n *   [meetingProgressTime]=\"'10:45'\"\r\n * ></app-main-grid-component>\r\n * ```\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-main-grid-component',\r\n    imports: [CommonModule, MeetingProgressTimer],\r\n    template: `\r\n    <div [ngStyle]=\"maingridContainerStyle\">\r\n      <app-meeting-progress-timer\r\n        *ngIf=\"showTimer\"\r\n        [meetingProgressTime]=\"meetingProgressTime\"\r\n        [initialBackgroundColor]=\"timeBackgroundColor\"\r\n      ></app-meeting-progress-timer>\r\n      <ng-content></ng-content>\r\n    </div>\r\n  `\r\n})\r\nexport class MainGridComponent {\r\n  @Input() backgroundColor = '';\r\n  @Input() mainSize = 0;\r\n  @Input() height = 0;\r\n  @Input() width = 0;\r\n  @Input() showAspect = true;\r\n  @Input() timeBackgroundColor = 'green';\r\n  @Input() showTimer = true;\r\n  @Input() meetingProgressTime = '0';\r\n\r\n  get maingridContainerStyle() {\r\n    return {\r\n      display: this.showAspect ? 'flex' : 'none',\r\n      backgroundColor: this.backgroundColor,\r\n      height: `${this.height}px`,\r\n      width: `${this.width}px`,\r\n      flexDirection: 'row',\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n      borderStyle: 'solid',\r\n      borderColor: '#000',\r\n      borderWidth: '4px',\r\n    };\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  Input,\r\n  OnInit,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  ContentChildren,\r\n  QueryList,\r\n  ElementRef,\r\n  Renderer2,\r\n  AfterViewInit,\r\n  OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ComponentSizes } from '../../../@types/types';\r\nexport interface MainScreenComponentOptions {\r\n  mainSize?: number;\r\n  doStack?: boolean;\r\n  containerWidthFraction?: number;\r\n  containerHeightFraction?: number;\r\n  defaultFraction?: number;\r\n  showControls?: boolean;\r\n  updateComponentSizes: (sizes: ComponentSizes) => void;\r\n}\r\n\r\nexport type MainScreenComponentType = (options: MainScreenComponentOptions) => HTMLElement;\r\n\r\n/**\r\n * MainScreenComponent dynamically displays a main screen area with responsive dimensions, adjustable layout, and stacking options based on the screen size and input properties.\r\n *\r\n * @selector app-main-screen-component\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @template\r\n * ```html\r\n * <div [ngStyle]=\"containerStyle\">\r\n *   <ng-content></ng-content>\r\n * </div>\r\n * ```\r\n *\r\n * @inputs\r\n * - `mainSize` (number): Percentage size of the main component. Default is 40.\r\n * - `doStack` (boolean): Determines if components should be stacked. Default is true.\r\n * - `containerWidthFraction` (number): Fraction of the container width to use. Default is 1.\r\n * - `containerHeightFraction` (number): Fraction of the container height to use. Default is 1.\r\n * - `defaultFraction` (number): Default height fraction for the container when controls are shown. Default is 0.94.\r\n * - `showControls` (boolean): If true, shows control elements, affecting container height. Default is true.\r\n * - `updateComponentSizes` (function): Callback for updating component sizes.\r\n *\r\n * @ContentChildren('child') children - Query list of child elements within the component.\r\n *\r\n * @properties\r\n * - `containerStyle`: Returns a style object for the container based on dimensions and layout options.\r\n *\r\n * @methods\r\n * - `ngOnInit()`: Initializes the component and sets up event listeners for window resize and orientation changes.\r\n * - `ngOnChanges(changes: SimpleChanges)`: Updates dimensions and layout if any relevant inputs change.\r\n * - `ngOnDestroy()`: Removes event listeners to prevent memory leaks.\r\n * - `ngAfterViewInit()`: Applies computed styles to child elements after view initialization.\r\n * - `computeDimensions()`: Calculates the dimensions for main and secondary components based on current layout settings.\r\n * - `updateDimensions()`: Updates component dimensions based on window size and input properties.\r\n * - `applyChildStyles()`: Applies computed styles to child components.\r\n *\r\n * @example\r\n * ```html\r\n * <app-main-screen-component\r\n *   [mainSize]=\"60\"\r\n *   [doStack]=\"false\"\r\n *   [containerWidthFraction]=\"0.8\"\r\n *   [containerHeightFraction]=\"0.9\"\r\n *   [defaultFraction]=\"0.9\"\r\n *   [showControls]=\"true\"\r\n *   [updateComponentSizes]=\"onUpdateSizes\"\r\n * >\r\n *   <div #child>Child Component</div>\r\n * </app-main-screen-component>\r\n * ```\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-main-screen-component',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div [ngStyle]=\"containerStyle\">\r\n      <ng-content></ng-content>\r\n    </div>\r\n  `\r\n})\r\nexport class MainScreenComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\r\n  @Input() mainSize = 40; // percentage\r\n  @Input() doStack = true;\r\n  @Input() containerWidthFraction = 1;\r\n  @Input() containerHeightFraction = 1;\r\n  @Input() defaultFraction = 0.94;\r\n  @Input() showControls = true;\r\n  @Input() updateComponentSizes = (sizes: ComponentSizes) => {\r\n    console.log(sizes);\r\n  };\r\n\r\n  @ContentChildren('child')\r\n  children!: QueryList<ElementRef>;\r\n\r\n  parentWidth!: number;\r\n  parentHeight!: number;\r\n  isWideScreen!: boolean;\r\n\r\n  constructor(private renderer: Renderer2) {}\r\n\r\n  ngOnInit() {\r\n    this.updateDimensions();\r\n\r\n    window.addEventListener('resize', this.updateDimensions);\r\n    window.addEventListener('orientationchange', this.updateDimensions);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    window.removeEventListener('resize', this.updateDimensions);\r\n    window.removeEventListener('orientationchange', this.updateDimensions);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (\r\n      changes['mainSize'] ||\r\n      changes['doStack'] ||\r\n      changes['parentWidth'] ||\r\n      changes['parentHeight'] ||\r\n      changes['showControls'] ||\r\n      changes['defaultFraction']\r\n    ) {\r\n      this.updateDimensions();\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.applyChildStyles();\r\n  }\r\n\r\n  computeDimensions() {\r\n    if (this.doStack) {\r\n      return this.isWideScreen\r\n        ? {\r\n            mainHeight: Math.floor(this.parentHeight),\r\n            otherHeight: Math.floor(this.parentHeight),\r\n            mainWidth: Math.floor((this.mainSize / 100) * this.parentWidth),\r\n            otherWidth: Math.floor(((100 - this.mainSize) / 100) * this.parentWidth),\r\n          }\r\n        : {\r\n            mainHeight: Math.floor((this.mainSize / 100) * this.parentHeight),\r\n            otherHeight: Math.floor(((100 - this.mainSize) / 100) * this.parentHeight),\r\n            mainWidth: Math.floor(this.parentWidth),\r\n            otherWidth: Math.floor(this.parentWidth),\r\n          };\r\n    } else {\r\n      return {\r\n        mainHeight: Math.floor(this.parentHeight),\r\n        otherHeight: Math.floor(this.parentHeight),\r\n        mainWidth: Math.floor(this.parentWidth),\r\n        otherWidth: Math.floor(this.parentWidth),\r\n      };\r\n    }\r\n  }\r\n\r\n  updateDimensions = () => {\r\n    this.parentWidth = window.innerWidth * this.containerWidthFraction;\r\n    this.parentHeight = this.showControls\r\n      ? window.innerHeight * this.containerHeightFraction * this.defaultFraction\r\n      : window.innerHeight * this.containerHeightFraction;\r\n\r\n    this.isWideScreen = this.parentWidth >= 768;\r\n\r\n    if (!this.isWideScreen && this.parentWidth > 1.5 * this.parentHeight) {\r\n      this.isWideScreen = true;\r\n    }\r\n\r\n    const { mainHeight, otherHeight, mainWidth, otherWidth } = this.computeDimensions();\r\n    this.updateComponentSizes({ mainHeight, otherHeight, mainWidth, otherWidth });\r\n    this.applyChildStyles();\r\n  };\r\n\r\n  get containerStyle() {\r\n    return {\r\n      display: 'flex',\r\n      flex: 1,\r\n      flexDirection: this.isWideScreen ? 'row' : 'column',\r\n      width: `${this.parentWidth}px`,\r\n      height: `${this.parentHeight}px`,\r\n      padding: 0,\r\n      margin: 0,\r\n    };\r\n  }\r\n\r\n  applyChildStyles() {\r\n    if (this.children) {\r\n      const { mainHeight, otherHeight, mainWidth, otherWidth } = this.computeDimensions();\r\n      this.children.forEach((child, index) => {\r\n        const childStyle = this.doStack\r\n          ? {\r\n              height: index === 0 ? mainHeight : otherHeight,\r\n              width: index === 0 ? mainWidth : otherWidth,\r\n            }\r\n          : {\r\n              height: mainHeight,\r\n              width: mainWidth,\r\n            };\r\n\r\n        this.renderer.setStyle(child.nativeElement, 'height', `${childStyle.height}px`);\r\n        this.renderer.setStyle(child.nativeElement, 'width', `${childStyle.width}px`);\r\n      });\r\n    }\r\n  }\r\n}\r\n","import { Component, Input, OnInit, OnDestroy, Inject, Optional } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { getOverlayPosition } from '../../../methods/utils/get-overlay-position.util';\r\n\r\nexport interface MiniCardAudioOptions {\r\n  customStyle?: Partial<CSSStyleDeclaration>;\r\n  name?: string;\r\n  showWaveform?: boolean;\r\n  overlayPosition?: string;\r\n  barColor?: string;\r\n  textColor?: string;\r\n  imageSource?: string;\r\n  roundedImage?: boolean;\r\n  imageStyle?: Partial<CSSStyleDeclaration>;\r\n}\r\n\r\nexport type MiniCardAudioType = (options: MiniCardAudioOptions) => HTMLElement;\r\n\r\n/**\r\n * MiniCardAudio component displays an audio card with optional waveform animation and overlay.\r\n *\r\n * @selector app-mini-card-audio\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @template\r\n * - Displays:\r\n *   - A customizable card with optional image and name.\r\n *   - Overlay with waveform animation and text.\r\n *\r\n * @styles\r\n * - Customizable card, overlay, and waveform styles.\r\n *\r\n * @inputs\r\n * - `customStyle` (Partial<CSSStyleDeclaration>): Custom CSS styles for the card.\r\n * - `name` (string): Name displayed on the card.\r\n * - `showWaveform` (boolean): Controls visibility of waveform animation.\r\n * - `overlayPosition` (string): Position for the overlay on the card.\r\n * - `barColor` (string): Color of waveform bars.\r\n * - `textColor` (string): Color of the name text.\r\n * - `imageSource` (string): URL for the background image.\r\n * - `roundedImage` (boolean): Rounds image corners if true.\r\n * - `imageStyle` (Partial<CSSStyleDeclaration>): Custom styles for the background image.\r\n *\r\n * @class MiniCardAudio\r\n * @implements OnInit, OnDestroy\r\n *\r\n * @constructor\r\n * - Optional injected values for all input properties.\r\n *\r\n * @methods\r\n * - `ngOnInit`: Initializes the component, starts waveform animation if `showWaveform` is true.\r\n * - `ngOnDestroy`: Cleans up intervals.\r\n * - `animateWaveform`: Starts animation of the waveform bars.\r\n * - `resetWaveform`: Resets waveform to initial state.\r\n * - `clearIntervals`: Clears all active intervals.\r\n * - `getAnimationDuration`: Returns duration for animation at a given index.\r\n * - `getImageStyle`: Combines custom image styles with rounded corners if enabled.\r\n * - `getOverlayPosition`: Uses utility to determine the overlay's position.\r\n *\r\n * @example\r\n * ```html\r\n * <app-mini-card-audio\r\n *   [customStyle]=\"{ backgroundColor: 'blue' }\"\r\n *   name=\"Audio Name\"\r\n *   [showWaveform]=\"true\"\r\n *   overlayPosition=\"bottomRight\"\r\n *   barColor=\"red\"\r\n *   textColor=\"white\"\r\n *   imageSource=\"/path/to/image.jpg\"\r\n *   [roundedImage]=\"true\"\r\n *   [imageStyle]=\"{ border: '2px solid black' }\"\r\n * ></app-mini-card-audio>\r\n * ```\r\n */\r\n\r\n@Component({\r\n    selector: 'app-mini-card-audio',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div class=\"card\" [ngStyle]=\"customStyle\">\r\n      <img *ngIf=\"imageSource\" [src]=\"imageSource\" [ngStyle]=\"getImageStyle()\" alt=\"Background\" />\r\n      <div [ngStyle]=\"getOverlayPosition(overlayPosition)\" [class.overlay-web]=\"true\">\r\n        <div class=\"name-column\">\r\n          <span class=\"name-text\" [ngStyle]=\"{ color: textColor }\">{{ name }}</span>\r\n        </div>\r\n        <div [class.waveform-web]=\"true\">\r\n          <div\r\n            *ngFor=\"let animation of waveformAnimations\"\r\n            [ngStyle]=\"{\r\n              height: animation === 0 ? '1px' : '16px',\r\n              backgroundColor: barColor\r\n            }\"\r\n            class=\"bar\"\r\n          ></div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  `,\r\n    styles: [\r\n        `\r\n      .card {\r\n        width: 100%;\r\n        height: 100%;\r\n        margin: 0;\r\n        padding: 0;\r\n        background-color: #2c678f;\r\n      }\r\n      .overlay-web {\r\n        position: absolute;\r\n        min-width: 50%;\r\n        min-height: 5%;\r\n        max-height: 100%;\r\n        display: grid;\r\n        grid-template-columns: 4fr 2fr;\r\n        grid-gap: 3px;\r\n      }\r\n      .name-column {\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        background-color: rgba(0, 0, 0, 0.5);\r\n        padding: 5px 10px;\r\n        margin-right: 2px;\r\n        font-size: 14px;\r\n      }\r\n      .name-text {\r\n        font-size: 14px;\r\n        color: white;\r\n      }\r\n      .waveform-web {\r\n        display: flex;\r\n        justify-content: left;\r\n        align-items: center;\r\n        background-color: rgba(0, 0, 0, 0.05);\r\n        padding: 0;\r\n        flex-direction: row;\r\n      }\r\n      .bar {\r\n        flex: 1;\r\n        opacity: 0.35;\r\n        margin: 0 1px;\r\n      }\r\n      .background-image {\r\n        position: absolute;\r\n        width: 80px;\r\n        height: 80px;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        top: 50%;\r\n        left: 50%;\r\n        transform: translate(-40px, -40px);\r\n      }\r\n      .rounded-image {\r\n        border-radius: 20%;\r\n      }\r\n    `,\r\n    ]\r\n})\r\nexport class MiniCardAudio implements OnInit, OnDestroy {\r\n  @Input() customStyle: any;\r\n  @Input() name = '';\r\n  @Input() showWaveform = false;\r\n  @Input() overlayPosition = 'bottomLeft';\r\n  @Input() barColor = 'white';\r\n  @Input() textColor = 'white';\r\n  @Input() imageSource = '';\r\n  @Input() roundedImage = false;\r\n  @Input() imageStyle: any = {};\r\n\r\n  waveformAnimations: number[] = Array.from({ length: 9 }, () => 0);\r\n  intervals: NodeJS.Timeout[] = [];\r\n\r\n  constructor(\r\n    @Optional() @Inject('customStyle') injectedCustomStyle: Partial<CSSStyleDeclaration>,\r\n    @Optional() @Inject('name') injectedName: string,\r\n    @Optional() @Inject('showWaveform') injectedShowWaveform: boolean,\r\n    @Optional() @Inject('overlayPosition') injectedOverlayPosition: string,\r\n    @Optional() @Inject('barColor') injectedBarColor: string,\r\n    @Optional() @Inject('textColor') injectedTextColor: string,\r\n    @Optional() @Inject('imageSource') injectedImageSource: string,\r\n    @Optional() @Inject('roundedImage') injectedRoundedImage: boolean,\r\n    @Optional() @Inject('imageStyle') injectedImageStyle: Partial<CSSStyleDeclaration>,\r\n  ) {\r\n    // Use injected values if available\r\n    this.customStyle = injectedCustomStyle || this.customStyle;\r\n    this.name = injectedName || this.name;\r\n    this.showWaveform = injectedShowWaveform || this.showWaveform;\r\n    this.overlayPosition = injectedOverlayPosition || this.overlayPosition;\r\n    this.barColor = injectedBarColor || this.barColor;\r\n    this.textColor = injectedTextColor || this.textColor;\r\n    this.imageSource = injectedImageSource || this.imageSource;\r\n    this.roundedImage = injectedRoundedImage || this.roundedImage;\r\n    this.imageStyle = injectedImageStyle || this.imageStyle;\r\n  }\r\n\r\n  ngOnInit() {\r\n    if (this.showWaveform) {\r\n      this.animateWaveform();\r\n    } else {\r\n      this.resetWaveform();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.clearIntervals();\r\n  }\r\n\r\n  animateWaveform() {\r\n    this.intervals = this.waveformAnimations.map((_, index) =>\r\n      setInterval(() => {\r\n        this.waveformAnimations[index] = (this.waveformAnimations[index] + 1) % 2;\r\n      }, this.getAnimationDuration(index)),\r\n    );\r\n  }\r\n\r\n  resetWaveform() {\r\n    this.waveformAnimations.fill(0);\r\n  }\r\n\r\n  clearIntervals() {\r\n    this.intervals.forEach((interval) => clearInterval(interval));\r\n  }\r\n\r\n  getAnimationDuration(index: number): number {\r\n    const durations = [474, 433, 407, 458, 400, 427, 441, 419, 487];\r\n    return durations[index] || 0;\r\n  }\r\n\r\n  getImageStyle() {\r\n    return {\r\n      ...this.imageStyle,\r\n      ...(this.roundedImage ? { borderRadius: '20%' } : {}),\r\n    };\r\n  }\r\n\r\n  getOverlayPosition(position: string) {\r\n    return getOverlayPosition({ position });\r\n  }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MeetingProgressTimer } from '../meeting-progress-timer/meeting-progress-timer.component';\r\n\r\nexport interface OtherGridComponentOptions {\r\n  backgroundColor?: string;\r\n  width?: number;\r\n  height?: number;\r\n  showAspect?: boolean;\r\n  timeBackgroundColor?: string;\r\n  showTimer?: boolean;\r\n  meetingProgressTime?: string;\r\n}\r\n\r\nexport type OtherGridComponentType = (options: OtherGridComponentOptions) => HTMLElement;\r\n\r\n/**\r\n * OtherGridComponent represents a customizable grid container with optional meeting progress timer.\r\n *\r\n * @selector app-other-grid-component\r\n * @standalone true\r\n * @imports CommonModule, MeetingProgressTimer\r\n *\r\n * @template\r\n * - The template consists of:\r\n *   - A grid container styled with specified dimensions, background color, and border.\r\n *   - An optional `MeetingProgressTimer` component displayed within the grid if `showTimer` is true.\r\n *\r\n * @styles\r\n * - Default border, padding, and display styles for the grid container.\r\n *\r\n * @inputs\r\n * - `backgroundColor` (string): Background color of the grid container. Default is `'transparent'`.\r\n * - `width` (number): Width of the grid in pixels. Default is `0`.\r\n * - `height` (number): Height of the grid in pixels. Default is `0`.\r\n * - `showAspect` (boolean): Controls visibility of the grid container. Default is `true`.\r\n * - `timeBackgroundColor` (string): Background color of the timer. Default is `'green'`.\r\n * - `showTimer` (boolean): Determines if the timer should be displayed. Default is `false`.\r\n * - `meetingProgressTime` (string): Time to display in the timer. Default is `'00:00:00'`.\r\n *\r\n * @class OtherGridComponent\r\n * @example\r\n * ```html\r\n * <app-other-grid-component\r\n *   [backgroundColor]=\"'lightgray'\"\r\n *   [width]=\"300\"\r\n *   [height]=\"200\"\r\n *   [showAspect]=\"true\"\r\n *   [timeBackgroundColor]=\"'blue'\"\r\n *   [showTimer]=\"true\"\r\n *   [meetingProgressTime]=\"'00:05:32'\"\r\n * ></app-other-grid-component>\r\n * ```\r\n */\r\n\r\n@Component({\r\n    selector: 'app-other-grid-component',\r\n    imports: [CommonModule, MeetingProgressTimer],\r\n    template: `\r\n    <div\r\n      [ngStyle]=\"{\r\n        'background-color': backgroundColor,\r\n        width: width + 'px',\r\n        height: height + 'px',\r\n        display: showAspect ? 'block' : 'none',\r\n        overflow: 'hidden',\r\n        'border-style': 'solid',\r\n        'border-color': 'black',\r\n        'border-width': '2px',\r\n        'border-radius': '0',\r\n        margin: '0',\r\n        padding: '0'\r\n      }\"\r\n    >\r\n      <app-meeting-progress-timer\r\n        *ngIf=\"showTimer\"\r\n        [meetingProgressTime]=\"meetingProgressTime\"\r\n        [initialBackgroundColor]=\"timeBackgroundColor\"\r\n        [showTimer]=\"showTimer\"\r\n      ></app-meeting-progress-timer>\r\n      <ng-content></ng-content>\r\n    </div>\r\n  `\r\n})\r\nexport class OtherGridComponent {\r\n  @Input() backgroundColor = 'transparent';\r\n  @Input() width = 0;\r\n  @Input() height = 0;\r\n  @Input() showAspect = true;\r\n  @Input() timeBackgroundColor = 'green';\r\n  @Input() showTimer = false;\r\n  @Input() meetingProgressTime = '00:00:00';\r\n}\r\n","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faStar, faLock } from '@fortawesome/free-solid-svg-icons';\r\nimport {\r\n  GeneratePageContent,\r\n  GeneratePageContentParameters,\r\n} from '../../../consumers/generate-page-content.service';\r\nimport { Socket } from 'socket.io-client';\r\nimport { BreakoutParticipant, ComponentSizes, ShowAlert } from '../../../@types/types';\r\n\r\nexport interface PaginationParameters extends GeneratePageContentParameters {\r\n  mainRoomsLength: number;\r\n  memberRoom: number;\r\n  breakOutRoomStarted: boolean;\r\n  breakOutRoomEnded: boolean;\r\n  member: string;\r\n  breakoutRooms: BreakoutParticipant[][];\r\n  hostNewRoom: number;\r\n  roomName: string;\r\n  islevel: string;\r\n  showAlert?: ShowAlert;\r\n  socket: Socket;\r\n\r\n  // mediasfu functions\r\n  getUpdatedAllParams: () => PaginationParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface PaginationOptions {\r\n  totalPages: number;\r\n  currentUserPage: number;\r\n  handlePageChange: (options: any) => Promise<void>;\r\n  position: 'left' | 'middle' | 'right' | string;\r\n  location: 'top' | 'middle' | 'bottom' | string;\r\n  direction: 'horizontal' | 'vertical';\r\n  buttonsContainerStyle: any;\r\n  activePageStyle: any;\r\n  inactivePageStyle: any;\r\n  backgroundColor: string;\r\n  paginationHeight: number;\r\n  showAspect?: boolean;\r\n  parameters: PaginationParameters;\r\n}\r\n\r\nexport type PaginationType = (options: PaginationOptions) => HTMLElement;\r\n\r\n/**\r\n * Pagination component for managing and displaying page navigation controls with various layouts and customizations.\r\n *\r\n * @selector app-pagination\r\n * @standalone true\r\n * @imports [CommonModule, FontAwesomeModule]\r\n *\r\n * @description\r\n * This component renders pagination controls, allowing users to navigate through pages. The controls support horizontal and vertical layouts, customizable styles, and dynamic page content handling, with special support for breakout room navigation.\r\n *\r\n * @example\r\n * ```html\r\n * <app-pagination\r\n *   [totalPages]=\"10\"\r\n *   [currentUserPage]=\"1\"\r\n *   [handlePageChange]=\"handlePageChange\"\r\n *   [position]=\"'middle'\"\r\n *   [location]=\"'bottom'\"\r\n *   [direction]=\"'horizontal'\"\r\n *   [backgroundColor]=\"'#ffffff'\"\r\n *   [paginationHeight]=\"40\"\r\n *   [showAspect]=\"true\"\r\n *   [parameters]=\"paginationParameters\">\r\n * </app-pagination>\r\n * ```\r\n *\r\n * @input {number} totalPages - Total number of pages available for navigation.\r\n * @input {number} currentUserPage - Current active page number.\r\n * @input {Function} handlePageChange - Callback function to handle page changes.\r\n * @input {'left' | 'middle' | 'right' | string} position - Horizontal position of the pagination controls (default is 'middle').\r\n * @input {'top' | 'middle' | 'bottom' | string} location - Vertical position of the pagination controls (default is 'middle').\r\n * @input {'horizontal' | 'vertical' | string} direction - Layout direction of the pagination controls (default is 'horizontal').\r\n * @input {any} buttonsContainerStyle - Custom CSS styles for the buttons container.\r\n * @input {any} activePageStyle - CSS styles for the active page button.\r\n * @input {any} inactivePageStyle - CSS styles for inactive page buttons.\r\n * @input {string} backgroundColor - Background color for the pagination controls.\r\n * @input {number} paginationHeight - Height of the pagination controls in pixels.\r\n * @input {boolean} showAspect - Flag to display or hide the pagination controls.\r\n * @input {PaginationParameters} parameters - Additional configuration parameters for managing breakout rooms and related state.\r\n *\r\n * @property {number[]} data - Array representing pages to be displayed in pagination controls.\r\n * @property {ComponentSizes} componentSizes - Stores calculated sizes for pagination controls.\r\n *\r\n * @method ngOnInit - Lifecycle hook that initializes the component and sets up page data.\r\n * @method ngOnChanges - Handles input property changes to update page data when needed.\r\n * @method handleClick - Asynchronously handles page button clicks and manages breakout room navigation logic.\r\n * @method getPageStyle - Returns specific styles for a page button based on its active or inactive state.\r\n * @method isBreakoutRoom - Checks if a page represents a breakout room.\r\n * @method getDisplayItem - Returns the display label for a page, accounting for breakout room naming conventions.\r\n *\r\n * @dependencies\r\n * This component requires an external pagination parameters configuration (`PaginationParameters`) and access to the `GeneratePageContent` service for managing dynamic content loading.\r\n */\r\n\r\n@Component({\r\n    selector: 'app-pagination',\r\n    imports: [CommonModule, FontAwesomeModule],\r\n    template: `\r\n    <div\r\n      [ngStyle]=\"{\r\n        'background-color': backgroundColor,\r\n        'justify-content': position == 'middle' ? 'space-evenly' : position == 'left' ? 'flex-start' : 'flex-end',\r\n        'align-items': location == 'middle' ? 'center' : location == 'top' ? 'flex-start' : 'flex-end',\r\n        'padding': '0',\r\n        'margin': '0',\r\n        'min-height': direction == 'horizontal' ? paginationHeight + 'px' : componentSizes.otherHeight + 'px',\r\n        'min-width': direction == 'horizontal' ? componentSizes.otherWidth + 'px' : paginationHeight + 'px',\r\n        'width': direction == 'horizontal' ? '100%' : paginationHeight + 'px',\r\n        'height': direction == 'horizontal' ? paginationHeight + 'px' : '100%',\r\n        'display': showAspect ? 'flex' : 'none',\r\n        'max-height': direction == 'horizontal' ? paginationHeight + 'px' : '100%',\r\n        'max-width': direction == 'horizontal' ? '100%' : paginationHeight + 'px',\r\n        'flex-direction': direction == 'vertical' ? 'column' : 'row',\r\n        'overflow-x': 'auto',\r\n      }\"\r\n    >\r\n      <ng-container *ngFor=\"let item of data; let index = index\">\r\n        <button\r\n          *ngIf=\"item == 0\"\r\n          [ngClass]=\"{ active: item == currentUserPage }\"\r\n          [ngStyle]=\"getPageStyle(item)\"\r\n          (click)=\"handleClick(item)\"\r\n        >\r\n          <fa-icon\r\n            [icon]=\"faStar\"\r\n            size=\"lg\"\r\n            [style.color]=\"item == currentUserPage ? 'yellow' : 'gray'\"\r\n          ></fa-icon>\r\n        </button>\r\n        <button\r\n          *ngIf=\"item !== 0\"\r\n          [ngClass]=\"{ active: item == currentUserPage }\"\r\n          [ngStyle]=\"getPageStyle(item)\"\r\n          (click)=\"handleClick(item)\"\r\n        >\r\n          <span\r\n            *ngIf=\"!isBreakoutRoom(item)\"\r\n            class=\"pageText\"\r\n            [ngStyle]=\"{ color: item == currentUserPage ? '#ffffff' : '#000000' }\"\r\n            >{{ item }}</span\r\n          >\r\n          <span\r\n            *ngIf=\"isBreakoutRoom(item)\"\r\n            class=\"pageText\"\r\n            [ngStyle]=\"{ color: item == currentUserPage ? '#ffffff' : '#000000' }\"\r\n            >{{ getDisplayItem(item) }}\r\n            <fa-icon\r\n              *ngIf=\"\r\n                parameters.memberRoom + 1 !== item - (parameters.mainRoomsLength - 1) &&\r\n                parameters.islevel !== '2'\r\n              \"\r\n              [icon]=\"faLock\"\r\n            ></fa-icon\r\n          ></span>\r\n        </button>\r\n      </ng-container>\r\n    </div>\r\n  `,\r\n    styles: [\r\n        `\r\n      .pageButton.active {\r\n        background-color: #2c678f;\r\n      }\r\n    `,\r\n    ]\r\n})\r\nexport class Pagination implements OnInit, OnChanges {\r\n  @Input() totalPages = 0;\r\n  @Input() currentUserPage = 0;\r\n  @Input() handlePageChange!: (options: any) => Promise<void>;\r\n  @Input() position: 'left' | 'middle' | 'right' | string = 'middle';\r\n  @Input() location: 'top' | 'middle' | 'bottom' | string = 'middle';\r\n  @Input() direction: 'horizontal' | 'vertical' = 'horizontal';\r\n  @Input() buttonsContainerStyle: any = {};\r\n  @Input() activePageStyle: any = { backgroundColor: '#2c678f' };\r\n  @Input() inactivePageStyle: any = {};\r\n  @Input() backgroundColor = '#ffffff';\r\n  @Input() paginationHeight = 40;\r\n  @Input() showAspect = true;\r\n  @Input() parameters: PaginationParameters = {} as PaginationParameters;\r\n\r\n  constructor(private generatePageContentService: GeneratePageContent) {}\r\n\r\n  faStar = faStar;\r\n  faLock = faLock;\r\n\r\n  data: number[] = [];\r\n\r\n  ngOnInit() {\r\n    this.data = Array.from({ length: this.totalPages + 1 }, (_, index) => index);\r\n    this.componentSizes = this.parameters.componentSizes;\r\n    if (!this.handlePageChange) {\r\n      this.handlePageChange = this.generatePageContentService.generatePageContent.bind(\r\n        this.generatePageContentService,\r\n      );\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['totalPages'] || changes['currentUserPage']) {\r\n      this.data = Array.from({ length: this.totalPages + 1 }, (_, index) => index);\r\n    }\r\n  }\r\n\r\n  handleClick = async (page: number): Promise<void> => {\r\n    if (page == this.currentUserPage) {\r\n      return;\r\n    }\r\n\r\n    this.parameters = this.parameters.getUpdatedAllParams();\r\n    const params = { ...this.parameters };\r\n    this.componentSizes = params.componentSizes;\r\n\r\n    if (this.parameters.breakOutRoomStarted && !this.parameters.breakOutRoomEnded && page !== 0) {\r\n      const roomMember = this.parameters.breakoutRooms.find((r: any[]) =>\r\n        r.find((p) => p.name == this.parameters.member),\r\n      );\r\n      const pageInt = page - this.parameters.mainRoomsLength;\r\n      let memberBreakRoom = -1;\r\n      if (roomMember) {\r\n        memberBreakRoom = this.parameters.breakoutRooms.indexOf(roomMember);\r\n      }\r\n\r\n      if ((memberBreakRoom == -1 || memberBreakRoom !== pageInt) && pageInt >= 0) {\r\n        if (this.parameters.islevel !== '2') {\r\n          if (this.parameters.showAlert) {\r\n            this.parameters.showAlert({\r\n              message: `You are not part of the breakout room ${pageInt + 1}.`,\r\n              type: 'danger',\r\n            });\r\n          }\r\n          return;\r\n        }\r\n\r\n        await this.handlePageChange({\r\n          page,\r\n          parameters: params,\r\n          breakRoom: pageInt,\r\n          inBreakRoom: true,\r\n        });\r\n        if (this.parameters.hostNewRoom !== pageInt) {\r\n          this.parameters.socket.emit('updateHostBreakout', {\r\n            newRoom: pageInt,\r\n            roomName: this.parameters.roomName,\r\n          });\r\n        }\r\n      } else {\r\n        await this.handlePageChange({\r\n          page,\r\n          parameters: params,\r\n          breakRoom: pageInt,\r\n          inBreakRoom: pageInt >= 0,\r\n        });\r\n        if (this.parameters.islevel == '2' && this.parameters.hostNewRoom !== -1) {\r\n          this.parameters.socket.emit('updateHostBreakout', {\r\n            prevRoom: this.parameters.hostNewRoom,\r\n            newRoom: -1,\r\n            roomName: this.parameters.roomName,\r\n          });\r\n        }\r\n      }\r\n    } else {\r\n      await this.handlePageChange({ page, parameters: params, breakRoom: 0, inBreakRoom: false });\r\n      if (this.parameters.islevel == '2' && this.parameters.hostNewRoom !== -1) {\r\n        this.parameters.socket.emit('updateHostBreakout', {\r\n          prevRoom: this.parameters.hostNewRoom,\r\n          newRoom: -1,\r\n          roomName: this.parameters.roomName,\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  componentSizes: ComponentSizes = {} as ComponentSizes;\r\n\r\n  getPageStyle(item: number) {\r\n    return item == this.currentUserPage ? this.activePageStyle : this.inactivePageStyle;\r\n  }\r\n\r\n  isBreakoutRoom = (item: number): boolean => {\r\n    this.parameters = this.parameters.getUpdatedAllParams();\r\n    return (\r\n      this.parameters.breakOutRoomStarted &&\r\n      !this.parameters.breakOutRoomEnded &&\r\n      item >= this.parameters.mainRoomsLength\r\n    );\r\n  };\r\n\r\n  getDisplayItem(item: number) {\r\n    const roomNumber = item - (this.parameters.mainRoomsLength - 1);\r\n\r\n    if (this.isBreakoutRoom(item)) {\r\n      if (this.parameters.memberRoom + 1 !== roomNumber) {\r\n        return `Room ${roomNumber}`;\r\n      } else {\r\n        return `Room ${roomNumber}`;\r\n      }\r\n    }\r\n\r\n    return item.toString();\r\n  }\r\n}\r\n","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface SubAspectComponentOptions {\r\n  backgroundColor?: string;\r\n  showControls?: boolean;\r\n  containerWidthFraction?: number;\r\n  containerHeightFraction?: number;\r\n  defaultFractionSub?: number;\r\n}\r\n\r\nexport type SubAspectComponentType = (options: SubAspectComponentOptions) => HTMLElement;\r\n\r\n/**\r\n * SubAspectComponent is an Angular component that displays a sub-aspect of a media element with customizable dimensions and background color.\r\n * The component adapts its size and visibility based on the provided properties and listens for window resize and orientation change events.\r\n *\r\n * @selector app-sub-aspect-component\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @example\r\n * ```html\r\n * <app-sub-aspect-component [backgroundColor]=\"'blue'\" [showControls]=\"true\" [containerWidthFraction]=\"0.8\"></app-sub-aspect-component>\r\n * ```\r\n *\r\n * @input {string} backgroundColor - The background color of the component. Default is 'transparent'.\r\n * @input {boolean} showControls - Determines if controls are shown within the component. Default is true.\r\n * @input {number} containerWidthFraction - Fraction of the window width for the component width. Default is 1.\r\n * @input {number} containerHeightFraction - Fraction of the window height for the component height. Default is 1.\r\n * @input {number} defaultFractionSub - The default fraction for the sub-aspect height. Default is 0.0.\r\n *\r\n * @property {object} aspectStyles - Contains calculated styles for the component's height and width.\r\n * @property {number} aspectStyles.height - Calculated height of the component.\r\n * @property {number} aspectStyles.width - Calculated width of the component.\r\n *\r\n * @method ngOnInit - Initializes the component and adds event listeners for responsive adjustments.\r\n * @method ngOnChanges - Updates the aspect styles when any of the input properties change.\r\n * @method ngOnDestroy - Removes event listeners when the component is destroyed.\r\n * @method updateAspectStyles - Calculates and applies updated styles based on the window size and input properties.\r\n */\r\n\r\n@Component({\r\n    selector: 'app-sub-aspect-component',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div\r\n      *ngIf=\"showControls\"\r\n      [ngStyle]=\"{\r\n        position: 'absolute',\r\n        bottom: '0',\r\n        margin: '0',\r\n        backgroundColor: backgroundColor,\r\n        height: aspectStyles.height + 'px',\r\n        width: aspectStyles.width + 'px'\r\n      }\"\r\n    >\r\n      <ng-content></ng-content>\r\n    </div>\r\n  `,\r\n    styles: []\r\n})\r\nexport class SubAspectComponent implements OnInit, OnDestroy, OnChanges {\r\n  @Input() backgroundColor = 'transparent';\r\n  @Input() showControls = true;\r\n  @Input() containerWidthFraction = 1;\r\n  @Input() containerHeightFraction = 1;\r\n  @Input() defaultFractionSub = 0.0;\r\n\r\n  aspectStyles = {\r\n    height: 0,\r\n    width: 0,\r\n  };\r\n\r\n  ngOnInit() {\r\n    this.updateAspectStyles();\r\n    window.addEventListener('resize', this.updateAspectStyles.bind(this));\r\n    window.addEventListener('orientationchange', this.updateAspectStyles.bind(this));\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (\r\n      changes['showControls'] ||\r\n      changes['containerWidthFraction'] ||\r\n      changes['containerHeightFraction'] ||\r\n      changes['defaultFractionSub']\r\n    ) {\r\n      this.updateAspectStyles();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    window.removeEventListener('resize', this.updateAspectStyles.bind(this));\r\n    window.removeEventListener('orientationchange', this.updateAspectStyles.bind(this));\r\n  }\r\n\r\n  private updateAspectStyles() {\r\n    const windowWidth = window.innerWidth;\r\n\r\n    this.aspectStyles = {\r\n      height: this.showControls ? 40 : 0,\r\n      width: this.containerWidthFraction ? this.containerWidthFraction * windowWidth : windowWidth,\r\n    };\r\n  }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport {\r\n  ModifyDisplaySettings,\r\n  ModifyDisplaySettingsOptions,\r\n  ModifyDisplaySettingsParameters,\r\n} from '../../methods/display-settings-methods/modify-display-settings.service';\r\n\r\nexport interface DisplaySettingsModalParameters extends ModifyDisplaySettingsParameters {\r\n  meetingDisplayType: string;\r\n  autoWave: boolean;\r\n  forceFullDisplay: boolean;\r\n  meetingVideoOptimized: boolean;\r\n}\r\n\r\nexport interface DisplaySettingsModalOptions {\r\n  isDisplaySettingsModalVisible: boolean;\r\n  onDisplaySettingsClose: () => void;\r\n  onModifyDisplaySettings: (options: ModifyDisplaySettingsOptions) => void;\r\n  parameters: DisplaySettingsModalParameters;\r\n  position: string;\r\n  backgroundColor: string;\r\n}\r\n\r\nexport type DisplaySettingsModalType = (options: DisplaySettingsModalOptions) => HTMLElement;\r\n\r\n/**\r\n * DisplaySettingsModal component is a modal dialog for managing display settings in a meeting.\r\n *\r\n * @component\r\n * @selector app-display-settings-modal\r\n * @standalone true\r\n * @imports [CommonModule, FontAwesomeModule, FormsModule]\r\n *\r\n * @example\r\n * ```html\r\n * <app-display-settings-modal\r\n *   [isDisplaySettingsModalVisible]=\"true\"\r\n *   [onDisplaySettingsClose]=\"closeModal\"\r\n *   [onModifyDisplaySettings]=\"saveSettings\"\r\n *   [parameters]=\"displaySettingsParams\"\r\n *   position=\"topRight\"\r\n *   backgroundColor=\"#83c0e9\"\r\n * ></app-display-settings-modal>\r\n * ```\r\n *\r\n * @input {boolean} isDisplaySettingsModalVisible - Determines if the modal is visible.\r\n * @input {() => void} onDisplaySettingsClose - Callback to close the modal.\r\n * @input {(params: any) => void} onModifyDisplaySettings - Callback to modify display settings.\r\n * @input {DisplaySettingsModalParameters} parameters - Input parameters for modal settings.\r\n * @input {string} position - Modal's screen position, default is 'topRight'.\r\n * @input {string} backgroundColor - Background color of the modal, default is '#83c0e9'.\r\n *\r\n * @property {IconDefinition} faTimes - FontAwesome icon for closing the modal.\r\n *\r\n * @property {string} meetingDisplayTypeState - State variable for meeting display type.\r\n * @property {boolean} autoWaveState - State variable for auto wave setting.\r\n * @property {boolean} forceFullDisplayState - State variable for force full display setting.\r\n * @property {boolean} meetingVideoOptimizedState - State variable for video optimized setting.\r\n *\r\n * @constructor\r\n * @param {ModifyDisplaySettings} modifyDisplaySettingsService - Service to handle display settings modifications.\r\n *\r\n * @method ngOnInit - Initializes component state based on input parameters.\r\n * @method handleSaveSettings - Triggers the modification of display settings using `onModifyDisplaySettings`.\r\n */\r\n\r\n@Component({\r\n    selector: 'app-display-settings-modal',\r\n    imports: [CommonModule, FontAwesomeModule, FormsModule],\r\n    templateUrl: './display-settings-modal.component.html',\r\n    styleUrls: ['./display-settings-modal.component.css']\r\n})\r\nexport class DisplaySettingsModal {\r\n  @Input() isDisplaySettingsModalVisible = false;\r\n  @Input() onDisplaySettingsClose!: () => void;\r\n  @Input() onModifyDisplaySettings!: (params: any) => void;\r\n  @Input() parameters!: DisplaySettingsModalParameters;\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = '#83c0e9';\r\n\r\n  faTimes = faTimes;\r\n\r\n  meetingDisplayTypeState!: string;\r\n  autoWaveState = false;\r\n  forceFullDisplayState = false;\r\n  meetingVideoOptimizedState = false;\r\n\r\n  constructor(private modifyDisplaySettingsService: ModifyDisplaySettings) {}\r\n\r\n  ngOnInit(): void {\r\n    this.meetingDisplayTypeState = this.parameters.meetingDisplayType;\r\n    this.autoWaveState = this.parameters.autoWave;\r\n    this.forceFullDisplayState = this.parameters.forceFullDisplay;\r\n    this.meetingVideoOptimizedState = this.parameters.meetingVideoOptimized;\r\n\r\n    if (!this.onModifyDisplaySettings) {\r\n      this.onModifyDisplaySettings = this.modifyDisplaySettingsService.modifyDisplaySettings.bind(\r\n        this.modifyDisplaySettingsService,\r\n      );\r\n    }\r\n  }\r\n\r\n  handleSaveSettings = async () => {\r\n    await this.onModifyDisplaySettings({\r\n      parameters: {\r\n        ...this.parameters,\r\n        meetingDisplayType: this.meetingDisplayTypeState,\r\n        autoWave: this.autoWaveState,\r\n        forceFullDisplay: this.forceFullDisplayState,\r\n        meetingVideoOptimized: this.meetingVideoOptimizedState,\r\n      },\r\n    });\r\n  };\r\n}\r\n","<div *ngIf=\"isDisplaySettingsModalVisible\" class=\"modal-container\">\r\n  <div class=\"modal-content\" [ngStyle]=\"{ 'background-color': backgroundColor }\">\r\n    <div class=\"modal-header\">\r\n      <h2>Display Settings</h2>\r\n      <div class=\"btn-close-media-settings\" (click)=\"onDisplaySettingsClose()\">\r\n        <fa-icon [icon]=\"faTimes\" size=\"xl\"></fa-icon>\r\n      </div>\r\n    </div>\r\n    <hr class=\"modal-divider\" />\r\n    <div class=\"modal-body\">\r\n      <div class=\"setting-group\">\r\n        <label>Display Option:</label>\r\n        <select [(ngModel)]=\"meetingDisplayTypeState\" class=\"select-control\">\r\n          <option value=\"video\">Video Participants Only</option>\r\n          <option value=\"media\">Media Participants Only</option>\r\n          <option value=\"all\">Show All Participants</option>\r\n        </select>\r\n      </div>\r\n      <hr class=\"modal-divider\" />\r\n      <div class=\"setting-group\">\r\n        <div class=\"setting-toggle\">\r\n          <label>Display Audiographs</label>\r\n          <button (click)=\"autoWaveState = !autoWaveState\" [ngClass]=\"{ 'active': autoWaveState }\">\r\n            <span class=\"toggle-icon\">{{ autoWaveState ? '&#10003;' : '&#10007;' }}</span>\r\n          </button>\r\n        </div>\r\n        <hr class=\"modal-divider\" />\r\n        <div class=\"setting-toggle\">\r\n          <label>Force Full Display</label>\r\n          <button (click)=\"forceFullDisplayState = !forceFullDisplayState\" [ngClass]=\"{ 'active': forceFullDisplayState }\">\r\n            <span class=\"toggle-icon\">{{ forceFullDisplayState ? '&#10003;' : '&#10007;' }}</span>\r\n          </button>\r\n        </div>\r\n        <hr class=\"modal-divider\" />\r\n        <div class=\"setting-toggle\">\r\n          <label>Force Video Participants</label>\r\n          <button (click)=\"meetingVideoOptimizedState = !meetingVideoOptimizedState\" [ngClass]=\"{ 'active': meetingVideoOptimizedState }\">\r\n            <span class=\"toggle-icon\">{{ meetingVideoOptimizedState ? '&#10003;' : '&#10007;' }}</span>\r\n          </button>\r\n        </div>\r\n        <hr class=\"modal-divider\" />\r\n      </div>\r\n    </div>\r\n    <div class=\"modal-footer\">\r\n      <button class=\"save-button\" (click)=\"handleSaveSettings()\">Save</button>\r\n    </div>\r\n  </div>\r\n</div>\r\n","// event-settings-modal.component.ts\r\n\r\nimport { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport {\r\n  ModifySettings,\r\n  ModifySettingsOptions,\r\n} from '../../../methods/settings-methods/modify-settings.service';\r\nimport { Socket } from 'socket.io-client';\r\nimport { ShowAlert } from '../../../@types/types';\r\n\r\nexport interface EventSettingsModalOptions {\r\n  isEventSettingsModalVisible: boolean;\r\n  onEventSettingsClose: () => void;\r\n  onModifyEventSettings?: (options: ModifySettingsOptions) => Promise<void>;\r\n  position?: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';\r\n  backgroundColor?: string;\r\n  audioSetting: string;\r\n  videoSetting: string;\r\n  screenshareSetting: string;\r\n  chatSetting: string;\r\n  updateAudioSetting: (setting: string) => void;\r\n  updateVideoSetting: (setting: string) => void;\r\n  updateScreenshareSetting: (setting: string) => void;\r\n  updateChatSetting: (setting: string) => void;\r\n  updateIsSettingsModalVisible: (isVisible: boolean) => void;\r\n  roomName: string;\r\n  socket: Socket;\r\n  showAlert?: ShowAlert;\r\n}\r\n\r\nexport type EventSettingsModalType = (options: EventSettingsModalOptions) => HTMLElement;\r\n\r\n/**\r\n * EventSettingsModal component provides a modal interface to manage and update event settings like audio, video, screenshare, and chat settings.\r\n *\r\n * @component\r\n * @selector app-event-settings-modal\r\n * @standalone true\r\n * @imports [CommonModule, FontAwesomeModule, FormsModule]\r\n *\r\n * @example\r\n * ```html\r\n * <app-event-settings-modal\r\n *   [isEventSettingsModalVisible]=\"true\"\r\n *   [onEventSettingsClose]=\"closeModal\"\r\n *   [onModifyEventSettings]=\"saveSettings\"\r\n *   [audioSetting]=\"audio\"\r\n *   [videoSetting]=\"video\"\r\n *   [screenshareSetting]=\"screenshare\"\r\n *   [chatSetting]=\"chat\"\r\n *   [position]=\"'topRight'\"\r\n *   [backgroundColor]=\"'#83c0e9'\"\r\n * ></app-event-settings-modal>\r\n * ```\r\n *\r\n * @input {boolean} isEventSettingsModalVisible - Indicates if the event settings modal is visible.\r\n * @input {() => void} onEventSettingsClose - Callback to close the modal.\r\n * @input {(options: ModifySettingsOptions) => Promise<void>} onModifyEventSettings - Callback to handle event settings modifications.\r\n * @input {string} position - Position of the modal on the screen, default is 'topRight'.\r\n * @input {string} backgroundColor - Background color of the modal, default is '#83c0e9'.\r\n * @input {string} audioSetting - Current audio setting.\r\n * @input {string} videoSetting - Current video setting.\r\n * @input {string} screenshareSetting - Current screenshare setting.\r\n * @input {string} chatSetting - Current chat setting.\r\n * @input {(setting: string) => void} updateAudioSetting - Function to update audio setting.\r\n * @input {(setting: string) => void} updateVideoSetting - Function to update video setting.\r\n * @input {(setting: string) => void} updateScreenshareSetting - Function to update screenshare setting.\r\n * @input {(setting: string) => void} updateChatSetting - Function to update chat setting.\r\n * @input {(isVisible: boolean) => void} updateIsSettingsModalVisible - Function to update modal visibility.\r\n * @input {string} roomName - Room name associated with the settings.\r\n * @input {Socket} socket - Socket for real-time communication.\r\n * @input {ShowAlert} [showAlert] - Optional alert function.\r\n *\r\n * @property {string} audioState - Internal state for audio setting.\r\n * @property {string} videoState - Internal state for video setting.\r\n * @property {string} screenshareState - Internal state for screenshare setting.\r\n * @property {string} chatState - Internal state for chat setting.\r\n * @property {IconDefinition} faTimes - FontAwesome icon for the close button.\r\n *\r\n * @constructor\r\n * @param {ModifySettings} modifySettingsService - Service for modifying settings.\r\n *\r\n * @method ngOnInit - Initializes the component and binds the settings modification service.\r\n * @method ngOnChanges - Updates internal states when `isEventSettingsModalVisible` changes.\r\n * @param {SimpleChanges} changes - Object containing previous and current values of bound properties.\r\n *\r\n * @method updateStatesFromParameters - Sets internal state variables based on input parameters.\r\n * @method getModalContentStyle - Returns style object for modal content with dynamic positioning and size.\r\n * @returns {Object} Style object for modal content.\r\n *\r\n * @method handleSaveSettings - Invokes the settings modification function with updated values.\r\n * @returns {Promise<void>} Promise that resolves after saving settings.\r\n *\r\n * @method closeModal - Closes the modal.\r\n */\r\n\r\n@Component({\r\n    selector: 'app-event-settings-modal',\r\n    imports: [CommonModule, FontAwesomeModule, FormsModule],\r\n    templateUrl: './event-settings-modal.component.html',\r\n    styleUrls: ['./event-settings-modal.component.css']\r\n})\r\nexport class EventSettingsModal implements OnInit, OnChanges {\r\n  @Input() isEventSettingsModalVisible = false;\r\n  @Input() onEventSettingsClose!: () => void;\r\n  @Input()\r\n  onModifyEventSettings!: (options: ModifySettingsOptions) => Promise<void>;\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = '#83c0e9';\r\n  @Input() audioSetting = '';\r\n  @Input() videoSetting = '';\r\n  @Input() screenshareSetting = '';\r\n  @Input() chatSetting = '';\r\n  @Input() updateAudioSetting!: (setting: string) => void;\r\n  @Input() updateVideoSetting!: (setting: string) => void;\r\n  @Input() updateScreenshareSetting!: (setting: string) => void;\r\n  @Input() updateChatSetting!: (setting: string) => void;\r\n  @Input() updateIsSettingsModalVisible!: (isVisible: boolean) => void;\r\n  @Input() roomName = '';\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input() showAlert?: ShowAlert;\r\n\r\n  audioState!: string;\r\n  videoState!: string;\r\n  screenshareState!: string;\r\n  chatState!: string;\r\n\r\n  faTimes = faTimes;\r\n\r\n  constructor(private modifySettingsService: ModifySettings) {}\r\n\r\n  ngOnInit() {\r\n    if (!this.onModifyEventSettings) {\r\n      this.onModifyEventSettings = this.modifySettingsService.modifySettings.bind(\r\n        this.modifySettingsService,\r\n      );\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['isEventSettingsModalVisible']) {\r\n      if (this.isEventSettingsModalVisible) {\r\n        this.updateStatesFromParameters();\r\n      }\r\n    }\r\n  }\r\n\r\n  updateStatesFromParameters() {\r\n    this.audioState = this.audioSetting;\r\n    this.videoState = this.videoSetting;\r\n    this.screenshareState = this.screenshareSetting;\r\n    this.chatState = this.chatSetting;\r\n  }\r\n\r\n  getModalContentStyle() {\r\n    const screenWidth = window.innerWidth;\r\n    let modalWidth = 0.8 * screenWidth;\r\n    if (modalWidth > 350) {\r\n      modalWidth = 350;\r\n    }\r\n\r\n    return {\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '10px',\r\n      width: `${modalWidth}px`,\r\n      maxHeight: '65%',\r\n      overflowY: 'auto',\r\n      top: this.position.includes('top') ? '10px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '10px' : 'auto',\r\n      left: this.position.includes('Left') ? '10px' : 'auto',\r\n      right: this.position.includes('Right') ? '10px' : 'auto',\r\n    };\r\n  }\r\n\r\n  async handleSaveSettings() {\r\n    await this.onModifyEventSettings({\r\n      audioSet: this.audioState,\r\n      videoSet: this.videoState,\r\n      screenshareSet: this.screenshareState,\r\n      chatSet: this.chatState,\r\n      updateAudioSetting: this.updateAudioSetting,\r\n      updateVideoSetting: this.updateVideoSetting,\r\n      updateScreenshareSetting: this.updateScreenshareSetting,\r\n      updateChatSetting: this.updateChatSetting,\r\n      updateIsSettingsModalVisible: this.updateIsSettingsModalVisible,\r\n      roomName: this.roomName,\r\n      socket: this.socket,\r\n      showAlert: this.showAlert,\r\n    });\r\n  }\r\n\r\n  closeModal() {\r\n    this.onEventSettingsClose();\r\n  }\r\n}\r\n","<!-- event-settings-modal.component.html -->\r\n\r\n<div *ngIf=\"isEventSettingsModalVisible\" class=\"modal-container\">\r\n  <div class=\"modal-content\" [ngStyle]=\"getModalContentStyle()\">\r\n    <div class=\"modal-header\">\r\n      <div class=\"modal-title\">Event Settings</div>\r\n      <div (click)=\"closeModal()\" class=\"icon-close\">\r\n        <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n      </div>\r\n    </div>\r\n    <hr class=\"hr\" />\r\n    <div class=\"modal-body\">\r\n      <div class=\"form-group\">\r\n        <label class=\"label\">User audio:</label>\r\n        <select class=\"picker-select\" [(ngModel)]=\"audioState\">\r\n          <option value=\"disallow\">Disallow</option>\r\n          <option value=\"allow\">Allow</option>\r\n          <option value=\"approval\">Upon approval</option>\r\n        </select>\r\n      </div>\r\n      <div class=\"sep\"></div>\r\n      <div class=\"form-group\">\r\n        <label class=\"label\">User video:</label>\r\n        <select class=\"picker-select\" [(ngModel)]=\"videoState\">\r\n          <option value=\"disallow\">Disallow</option>\r\n          <option value=\"allow\">Allow</option>\r\n          <option value=\"approval\">Upon approval</option>\r\n        </select>\r\n      </div>\r\n      <div class=\"sep\"></div>\r\n      <div class=\"form-group\">\r\n        <label class=\"label\">User screenshare:</label>\r\n        <select class=\"picker-select\" [(ngModel)]=\"screenshareState\">\r\n          <option value=\"disallow\">Disallow</option>\r\n          <option value=\"allow\">Allow</option>\r\n          <option value=\"approval\">Upon approval</option>\r\n        </select>\r\n      </div>\r\n      <div class=\"sep\"></div>\r\n      <div class=\"form-group\">\r\n        <label class=\"label\">User chat:</label>\r\n        <select class=\"picker-select\" [(ngModel)]=\"chatState\">\r\n          <option value=\"disallow\">Disallow</option>\r\n          <option value=\"allow\">Allow</option>\r\n        </select>\r\n      </div>\r\n    </div>\r\n    <div class=\"modal-footer\">\r\n      <button class=\"btn-apply-settings\" (click)=\"handleSaveSettings()\">Save</button>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Input, OnInit, SimpleChanges, OnChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  ConfirmExit,\r\n  ConfirmExitOptions,\r\n} from '../../../methods/exit-methods/confirm-exit.service';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface ConfirmExitModalOptions {\r\n  isConfirmExitModalVisible: boolean;\r\n  onConfirmExitClose: () => void;\r\n  position?: 'topRight' | 'topLeft' | 'bottomRight' | 'bottomLeft';\r\n  backgroundColor?: string;\r\n  exitEventOnConfirm?: (options: ConfirmExitOptions) => void;\r\n  member: string;\r\n  ban?: boolean;\r\n  roomName: string;\r\n  socket: Socket;\r\n  islevel: string;\r\n}\r\n\r\nexport type ConfirmExitModalType = (options: ConfirmExitModalOptions) => HTMLElement;\r\n\r\n/**\r\n * ConfirmExitModal component renders a modal view for exit confirmation,\r\n * allowing users to confirm or cancel an exit event from a session or room.\r\n *\r\n * @component\r\n * @selector app-confirm-exit-modal\r\n * @standalone true\r\n * @imports [CommonModule, FormsModule, FontAwesomeModule]\r\n *\r\n * @example\r\n * ```html\r\n * <app-confirm-exit-modal\r\n *   [isConfirmExitModalVisible]=\"true\"\r\n *   [onConfirmExitClose]=\"closeModal\"\r\n *   [exitEventOnConfirm]=\"confirmExit\"\r\n *   [member]=\"memberName\"\r\n *   [ban]=\"false\"\r\n *   [roomName]=\"currentRoom\"\r\n *   [socket]=\"socketInstance\"\r\n *   [islevel]=\"userLevel\">\r\n * </app-confirm-exit-modal>\r\n * ```\r\n *\r\n * @input {boolean} isConfirmExitModalVisible - Determines the visibility of the modal.\r\n * @input {() => void} onConfirmExitClose - Callback to close the modal.\r\n * @input {string} position - Position on the screen (default: 'topRight').\r\n * @input {string} backgroundColor - Background color of the modal (default: '#83c0e9').\r\n * @input {(options: ConfirmExitOptions) => void} exitEventOnConfirm - Callback function to handle exit confirmation.\r\n * @input {string} member - Identifies the member for whom the exit is confirmed.\r\n * @input {boolean} ban - Indicates if the exit action includes a ban.\r\n * @input {string} roomName - Name of the room involved in the exit action.\r\n * @input {Socket} socket - Socket instance for real-time interaction.\r\n * @input {string} islevel - User level information.\r\n *\r\n * @property {IconDefinition} faTimes - FontAwesome icon for the close button.\r\n * @property {any} modalContentStyle - Object defining the style for modal content.\r\n *\r\n * @constructor\r\n * @param {ConfirmExit} confirmExitService - Service to handle the exit confirmation.\r\n *\r\n * @method ngOnInit - Initializes component properties and default styles for the modal content.\r\n * @method ngOnChanges - Updates component state upon changes in input properties.\r\n * @param {SimpleChanges} changes - Object containing the current and previous property values.\r\n *\r\n * @method handleConfirmExit - Handles the exit confirmation event, triggering the provided `exitEventOnConfirm` function and then closing the modal.\r\n */\r\n\r\n@Component({\r\n    selector: 'app-confirm-exit-modal',\r\n    templateUrl: './confirm-exit-modal.component.html',\r\n    styleUrls: ['./confirm-exit-modal.component.css'],\r\n    imports: [CommonModule, FormsModule, FontAwesomeModule]\r\n})\r\nexport class ConfirmExitModal implements OnInit, OnChanges {\r\n  @Input() isConfirmExitModalVisible = false;\r\n  @Input() onConfirmExitClose!: () => void;\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = '#83c0e9';\r\n  @Input() exitEventOnConfirm!: (options: ConfirmExitOptions) => void;\r\n  @Input() member = '';\r\n  @Input() ban = false;\r\n  @Input() roomName = '';\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input() islevel = '';\r\n\r\n  faTimes = faTimes;\r\n\r\n  modalContentStyle: any;\r\n\r\n  constructor(private confirmExitService: ConfirmExit) {}\r\n\r\n  ngOnInit() {\r\n    const screenWidth = window.innerWidth;\r\n    let modalWidth = 0.8 * screenWidth;\r\n    if (modalWidth > 350) {\r\n      modalWidth = 350;\r\n    }\r\n\r\n    this.modalContentStyle = {\r\n      backgroundColor: this.backgroundColor,\r\n      top: this.position.includes('top') ? '10px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '10px' : 'auto',\r\n      left: this.position.includes('Left') ? '10px' : 'auto',\r\n      right: this.position.includes('Right') ? '10px' : 'auto',\r\n      width: `${modalWidth}px`,\r\n    };\r\n\r\n    if (!this.exitEventOnConfirm) {\r\n      this.exitEventOnConfirm = this.confirmExitService.confirmExit.bind(this.confirmExitService);\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['isConfirmExitModalVisible'] && changes['islevel']) {\r\n      this.islevel = changes['islevel'].currentValue;\r\n    }\r\n  }\r\n\r\n  handleConfirmExit() {\r\n    this.exitEventOnConfirm({\r\n      socket: this.socket,\r\n      member: this.member,\r\n      roomName: this.roomName,\r\n      ban: this.ban,\r\n    });\r\n    this.onConfirmExitClose();\r\n  }\r\n}\r\n","<div *ngIf=\"isConfirmExitModalVisible\" class=\"modal-container\">\r\n  <div class=\"modal-content\" [ngStyle]=\"modalContentStyle\">\r\n    <div class=\"modal-header\" style=\"display: flex; justify-content: space-between;\">\r\n      <h2 class=\"modal-title\">Confirm Exit</h2>\r\n      <span class=\"close-icon\" (click)=\"onConfirmExitClose()\">\r\n        <fa-icon [icon]=\"faTimes\" size=\"lg\"></fa-icon>\r\n      </span>\r\n    </div>\r\n    <hr />\r\n    <div class=\"modal-body\">\r\n      <p class=\"confirm-exit-text\">\r\n        {{ islevel === '2' ? 'This will end the event for all. Confirm exit.' : 'Are you sure you want to exit?' }}\r\n      </p>\r\n    </div>\r\n    <hr />\r\n    <div class=\"modal-footer\">\r\n      <button class=\"cancel-button\" (click)=\"onConfirmExitClose()\">Cancel</button>\r\n      <button class=\"confirm-button\" (click)=\"handleConfirmExit()\">\r\n        {{ islevel === '2' ? 'End Event' : 'Exit' }}\r\n      </button>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport {\r\n  faTimes,\r\n  faSyncAlt,\r\n  faCamera,\r\n  faMicrophone,\r\n  faPhotoFilm,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { FormsModule } from '@angular/forms';\r\nimport {\r\n  SwitchAudio,\r\n  SwitchAudioOptions,\r\n  SwitchAudioParameters,\r\n} from '../../../methods/stream-methods/switch-audio.service';\r\nimport {\r\n  SwitchVideo,\r\n  SwitchVideoOptions,\r\n  SwitchVideoParameters,\r\n} from '../../../methods/stream-methods/switch-video.service';\r\nimport {\r\n  SwitchVideoAlt,\r\n  SwitchVideoAltOptions,\r\n  SwitchVideoAltParameters,\r\n} from '../../../methods/stream-methods/switch-video-alt.service';\r\n\r\nexport interface MediaSettingsModalParameters\r\n  extends SwitchAudioParameters,\r\n    SwitchVideoParameters,\r\n    SwitchVideoAltParameters {\r\n  userDefaultVideoInputDevice: string;\r\n  videoInputs: MediaDeviceInfo[];\r\n  audioInputs: MediaDeviceInfo[];\r\n  userDefaultAudioInputDevice: string;\r\n  isBackgroundModalVisible: boolean;\r\n  updateIsBackgroundModalVisible: (visible: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  getUpdatedAllParams: () => MediaSettingsModalParameters;\r\n}\r\n\r\nexport interface MediaSettingsModalOptions {\r\n  isMediaSettingsModalVisible: boolean;\r\n  onMediaSettingsClose: () => void;\r\n  switchCameraOnPress?: (options: SwitchVideoAltOptions) => Promise<void>;\r\n  switchVideoOnPress?: (options: SwitchVideoOptions) => Promise<void>;\r\n  switchAudioOnPress?: (options: SwitchAudioOptions) => Promise<void>;\r\n  parameters: MediaSettingsModalParameters;\r\n  position: string;\r\n  backgroundColor: string;\r\n}\r\n\r\nexport type MediaSettingsModalType = (options: MediaSettingsModalOptions) => HTMLElement;\r\n\r\n/**\r\n * MediaSettingsModal component renders a modal interface for managing media settings.\r\n * Users can switch between different audio and video input devices and adjust other settings.\r\n *\r\n * @component\r\n * @selector app-media-settings-modal\r\n * @standalone true\r\n * @imports [CommonModule, FontAwesomeModule, FormsModule]\r\n *\r\n * @example\r\n * ```html\r\n * <app-media-settings-modal\r\n *   [isMediaSettingsModalVisible]=\"true\"\r\n *   [onMediaSettingsClose]=\"closeModal\"\r\n *   [switchCameraOnPress]=\"handleCameraSwitch\"\r\n *   [switchVideoOnPress]=\"handleVideoSwitch\"\r\n *   [switchAudioOnPress]=\"handleAudioSwitch\"\r\n *   [parameters]=\"mediaSettingsParams\"\r\n *   position=\"topRight\"\r\n *   backgroundColor=\"#83c0e9\">\r\n * </app-media-settings-modal>\r\n * ```\r\n *\r\n * @input {boolean} isMediaSettingsModalVisible - Indicates whether the modal is visible.\r\n * @input {() => void} onMediaSettingsClose - Function to close the modal.\r\n * @input {(params: SwitchVideoAltOptions) => Promise<void>} switchCameraOnPress - Function to handle camera switching.\r\n * @input {(params: SwitchVideoOptions) => Promise<void>} switchVideoOnPress - Function to handle video switching.\r\n * @input {(params: SwitchAudioOptions) => Promise<void>} switchAudioOnPress - Function to handle audio switching.\r\n * @input {MediaSettingsModalParameters} parameters - Parameters for the modal.\r\n * @input {string} position - Position of the modal on the screen (default: 'topRight').\r\n * @input {string} backgroundColor - Background color of the modal (default: '#83c0e9').\r\n *\r\n * @property {IconDefinition} faTimes - FontAwesome icon for closing the modal.\r\n * @property {IconDefinition} faSyncAlt - FontAwesome icon for sync.\r\n * @property {IconDefinition} faCamera - FontAwesome icon for camera.\r\n * @property {IconDefinition} faMicrophone - FontAwesome icon for microphone.\r\n * @property {IconDefinition} faPhotoFilm - FontAwesome icon for photo film.\r\n *\r\n * @property {string} selectedVideoInput - Currently selected video input device ID.\r\n * @property {string} selectedAudioInput - Currently selected audio input device ID.\r\n * @property {string} prevSelectedVideoInput - Previously selected video input device ID.\r\n * @property {string} prevSelectedAudioInput - Previously selected audio input device ID.\r\n *\r\n * @constructor\r\n * @param {SwitchAudio} switchAudioService - Service for switching audio.\r\n * @param {SwitchVideo} switchVideoService - Service for switching video.\r\n * @param {SwitchVideoAlt} switchVideoAltService - Alternative service for switching video.\r\n *\r\n * @method ngOnInit - Initializes the component and sets up default selections and services.\r\n * @method ngOnChanges - Updates component state based on input changes.\r\n * @method setupDefaultServices - Configures default services for switching camera, video, and audio.\r\n * @method updateParameters - Updates the modal parameters.\r\n * @method ensureDefaultSelections - Ensures default selections for video and audio inputs.\r\n * @method initializeModalSettings - Initializes the modal settings.\r\n * @method modalContentStyle - Returns the style object for the modal content.\r\n * @method handleSwitchCamera - Initiates camera switching.\r\n * @method handleVideoSwitch - Initiates video input switching.\r\n * @method handleAudioSwitch - Initiates audio input switching.\r\n * @method handleModalClose - Closes the modal.\r\n * @method showVirtual - Toggles the virtual background modal.\r\n */\r\n\r\n@Component({\r\n    selector: 'app-media-settings-modal',\r\n    templateUrl: './media-settings-modal.component.html',\r\n    styleUrls: ['./media-settings-modal.component.css'],\r\n    imports: [CommonModule, FontAwesomeModule, FormsModule]\r\n})\r\nexport class MediaSettingsModal implements OnInit, OnChanges {\r\n  @Input() isMediaSettingsModalVisible = false;\r\n  @Input() onMediaSettingsClose!: () => void;\r\n  @Input() switchCameraOnPress!: (params: any) => Promise<void>;\r\n  @Input() switchVideoOnPress!: (params: any) => Promise<void>;\r\n  @Input() switchAudioOnPress!: (params: any) => Promise<void>;\r\n  @Input() parameters!: MediaSettingsModalParameters;\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = '#83c0e9';\r\n\r\n  faTimes = faTimes;\r\n  faSyncAlt = faSyncAlt;\r\n  faCamera = faCamera;\r\n  faMicrophone = faMicrophone;\r\n  faPhotoFilm = faPhotoFilm;\r\n\r\n  selectedVideoInput!: string;\r\n  selectedAudioInput!: string;\r\n  prevSelectedVideoInput!: string;\r\n  prevSelectedAudioInput!: string;\r\n\r\n  constructor(\r\n    private switchAudioService: SwitchAudio,\r\n    private switchVideoService: SwitchVideo,\r\n    private switchVideoAltService: SwitchVideoAlt,\r\n  ) {}\r\n\r\n  ngOnInit() {\r\n    if (this.isMediaSettingsModalVisible) {\r\n      this.updateParameters();\r\n      this.setupDefaultServices();\r\n      this.initializeModalSettings();\r\n      this.ensureDefaultSelections();\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (\r\n      changes['isMediaSettingsModalVisible'] &&\r\n      this.isMediaSettingsModalVisible &&\r\n      this.parameters\r\n    ) {\r\n      this.updateParameters();\r\n      this.setupDefaultServices();\r\n      this.ensureDefaultSelections();\r\n    }\r\n  }\r\n\r\n  setupDefaultServices() {\r\n    if (!this.switchCameraOnPress) {\r\n      this.switchCameraOnPress = (params: any) => this.switchVideoAltService.switchVideoAlt(params);\r\n    }\r\n\r\n    if (!this.switchVideoOnPress) {\r\n      this.switchVideoOnPress = (params: any) => this.switchVideoService.switchVideo(params);\r\n    }\r\n\r\n    if (!this.switchAudioOnPress) {\r\n      this.switchAudioOnPress = (params: any) => this.switchAudioService.switchAudio(params);\r\n    }\r\n  }\r\n\r\n  updateParameters() {\r\n    this.parameters = {\r\n      ...this.parameters,\r\n      ...this.parameters.getUpdatedAllParams(),\r\n    };\r\n  }\r\n\r\n  ensureDefaultSelections() {\r\n    if (!this.selectedVideoInput && this.parameters.videoInputs.length > 0) {\r\n      this.selectedVideoInput = this.parameters.videoInputs[0].deviceId;\r\n      this.prevSelectedVideoInput = this.selectedVideoInput;\r\n      this.handleVideoSwitch({ target: { value: this.selectedVideoInput } } as any);\r\n    }\r\n\r\n    if (!this.selectedAudioInput && this.parameters.audioInputs.length > 0) {\r\n      this.selectedAudioInput = this.parameters.audioInputs[0].deviceId;\r\n      this.prevSelectedAudioInput = this.selectedAudioInput;\r\n      this.handleAudioSwitch({ target: { value: this.selectedAudioInput } } as any);\r\n    }\r\n  }\r\n\r\n  initializeModalSettings() {\r\n    const screenWidth = window.innerWidth;\r\n    let modalWidth = 0.7 * screenWidth;\r\n    if (modalWidth > 350) {\r\n      modalWidth = 350;\r\n    }\r\n  }\r\n\r\n  modalContentStyle() {\r\n    const screenWidth = window.innerWidth;\r\n    let modalWidth = 0.8 * screenWidth;\r\n    if (modalWidth > 350) {\r\n      modalWidth = 350;\r\n    }\r\n\r\n    return {\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '10px',\r\n      width: `${modalWidth}px`,\r\n      maxHeight: '65%',\r\n      overflowY: 'auto',\r\n      top: this.position.includes('top') ? '10px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '10px' : 'auto',\r\n      left: this.position.includes('Left') ? '10px' : 'auto',\r\n      right: this.position.includes('Right') ? '10px' : 'auto',\r\n    };\r\n  }\r\n\r\n  handleSwitchCamera = async () => {\r\n    await this.switchCameraOnPress({ parameters: this.parameters });\r\n  };\r\n\r\n  handleVideoSwitch = async (event: Event) => {\r\n    const value = (event.target as HTMLSelectElement).value;\r\n    if (value !== this.prevSelectedVideoInput) {\r\n      this.selectedVideoInput = value;\r\n      this.prevSelectedVideoInput = this.selectedVideoInput;\r\n      await this.switchVideoOnPress({ videoPreference: value, parameters: this.parameters });\r\n    }\r\n  };\r\n\r\n  handleAudioSwitch = async (event: Event) => {\r\n    const value = (event.target as HTMLSelectElement).value;\r\n    if (value !== this.prevSelectedAudioInput) {\r\n      this.selectedAudioInput = value;\r\n      this.prevSelectedAudioInput = this.selectedAudioInput;\r\n      await this.switchAudioOnPress({ audioPreference: value, parameters: this.parameters });\r\n    }\r\n  };\r\n\r\n  handleModalClose() {\r\n    this.onMediaSettingsClose();\r\n  }\r\n\r\n  showVirtual() {\r\n    this.parameters.updateIsBackgroundModalVisible(!this.parameters.isBackgroundModalVisible);\r\n  }\r\n}\r\n","<div *ngIf=\"isMediaSettingsModalVisible\" class=\"modal-container\">\r\n  <div class=\"modal-content\" [ngStyle]=\"modalContentStyle()\">\r\n    <div class=\"modal-header\">\r\n      <div class=\"modal-title\">Media Settings</div>\r\n      <div (click)=\"handleModalClose()\">\r\n        <fa-icon [icon]=\"faTimes\" class=\"icon\"></fa-icon>\r\n      </div>\r\n    </div>\r\n    <hr class=\"hr\" />\r\n    <div class=\"modal-body\">\r\n      <div class=\"form-group\">\r\n        <label>\r\n          <fa-icon [icon]=\"faCamera\" [ngStyle]=\"{'margin-right': '8px'}\"></fa-icon> Select Camera:\r\n        </label>\r\n        <select [(ngModel)]=\"selectedVideoInput\" (change)=\"handleVideoSwitch($event)\" class=\"form-control\">\r\n          <option *ngFor=\"let input of parameters.videoInputs\" [value]=\"input.deviceId\">\r\n            {{ input.label }}\r\n          </option>\r\n        </select>\r\n      </div>\r\n      <div class=\"form-group\">\r\n        <label>\r\n          <fa-icon [icon]=\"faMicrophone\" [ngStyle]=\"{'margin-right': '8px'}\"></fa-icon> Select Microphone:\r\n        </label>\r\n        <select [(ngModel)]=\"selectedAudioInput\" (change)=\"handleAudioSwitch($event)\" class=\"form-control\">\r\n          <option *ngFor=\"let input of parameters.audioInputs\" [value]=\"input.deviceId\">\r\n            {{ input.label }}\r\n          </option>\r\n        </select>\r\n      </div>\r\n      <hr class=\"hr\" />\r\n      <div class=\"form-group\">\r\n        <button (click)=\"handleSwitchCamera()\" class=\"btn-switch\">\r\n          <fa-icon [icon]=\"faSyncAlt\" [ngStyle]=\"{'margin-right': '8px'}\"></fa-icon> Switch Camera\r\n        </button>\r\n      </div>\r\n      <hr class=\"hr\" />\r\n      <div class=\"form-group\">\r\n        <button (click)=\"showVirtual()\" class=\"btn-virtual\">\r\n          <fa-icon [icon]=\"faPhotoFilm\" [ngStyle]=\"{'margin-right': '8px'}\"></fa-icon> Virtual Background\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Input, Injector, Type } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons';\r\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\r\n\r\nexport interface CustomComponent {\r\n  component: Type<any>;\r\n  injector: Injector;\r\n}\r\n\r\nexport interface CustomButton {\r\n  action: () => void;\r\n  show: boolean | (() => boolean);\r\n  backgroundColor?: string;\r\n  disabled?: boolean;\r\n  icon?: IconDefinition;\r\n  iconStyle?: Partial<CSSStyleDeclaration>;\r\n  text?: string;\r\n  textStyle?: Partial<CSSStyleDeclaration>;\r\n  customComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n  injector?: Injector;\r\n}\r\n\r\nexport interface CustomButtonsOptions {\r\n  buttons: CustomButton[];\r\n}\r\n\r\nexport type CustomButtonsType = (options: CustomButtonsOptions) => HTMLElement;\r\n\r\n/**\r\n * CustomButtons component renders a list of customizable buttons.\r\n *\r\n * @selector app-custom-buttons\r\n * @standalone true\r\n * @imports [CommonModule, FormsModule, FontAwesomeModule]\r\n *\r\n * @input {CustomButton[]} buttons - Array of button configurations.\r\n * Each button configuration includes properties such as:\r\n * - **action**: Function executed on button click.\r\n * - **show**: Boolean or function determining button visibility.\r\n * - **backgroundColor**: Background color of the button.\r\n * - **disabled**: Boolean to disable button if set to true.\r\n * - **icon**: Optional FontAwesome icon displayed on the button.\r\n * - **iconStyle**: Style applied to the icon.\r\n * - **text**: Text displayed on the button.\r\n * - **textStyle**: Style applied to the text.\r\n * - **customComponent**: A custom Angular component or HTML element rendered within the button.\r\n * - **injector**: Injector used for providing dependencies to the custom component.\r\n *\r\n * @example\r\n * ```html\r\n * <app-custom-buttons [buttons]=\"buttonsArray\"></app-custom-buttons>\r\n * ```\r\n *\r\n * @example\r\n * ```typescript\r\n * const buttonsArray: CustomButton[] = [\r\n *   {\r\n *     action: () => console.log('Button 1 clicked'),\r\n *     show: true,\r\n *     backgroundColor: 'blue',\r\n *     disabled: false,\r\n *     icon: faCoffee,\r\n *     iconStyle: { color: 'white' },\r\n *     text: 'Button 1',\r\n *     textStyle: { color: 'white' },\r\n *     customComponent: <CustomComponent />,\r\n *     injector: Injector.create({\r\n *       providers: [{ provide: 'customProp', useValue: 'customValue' }]\r\n *     }),\r\n *   },\r\n * ];\r\n * ```\r\n *\r\n * @class CustomButtons\r\n * @method mergeStyles - Merges default styles with user-provided custom styles.\r\n * @method isCustomComponentConfig - Type guard to check if an object is of type CustomComponent.\r\n */\r\n\r\n@Component({\r\n    selector: 'app-custom-buttons',\r\n    templateUrl: './custom-buttons.component.html',\r\n    styleUrls: ['./custom-buttons.component.css'],\r\n    imports: [CommonModule, FormsModule, FontAwesomeModule]\r\n})\r\nexport class CustomButtons {\r\n\r\n  @Input() buttons!: CustomButton[];\r\n\r\n  faSpinner = faSpinner;\r\n\r\n  mergeStyles(defaultStyle: any, customStyle: any): any {\r\n    return { ...defaultStyle, ...customStyle };\r\n  }\r\n\r\n  get customButtonIcon(): any {\r\n    return {\r\n      fontSize: '20px',\r\n      marginRight: '5px',\r\n    };\r\n  }\r\n\r\n  // Type guard to check if customComponent is of type CustomComponentConfig\r\n  isCustomComponentConfig(obj: any): obj is CustomComponent {\r\n    return obj && typeof obj === 'object' && 'component' in obj && 'injector' in obj;\r\n  }\r\n}\r\n","<div class=\"customButtonsContainer\">\r\n  <button\r\n    *ngFor=\"let button of buttons; let i = index\"\r\n    (click)=\"button.action()\"\r\n    class=\"customButton\"\r\n    [ngStyle]=\"{\r\n      'background-color': button.show ? button.backgroundColor : 'transparent',\r\n      'display': button.show ? 'flex' : 'none'\r\n    }\"\r\n    [disabled]=\"button.disabled\"\r\n  >\r\n    <div class=\"buttonContent\">\r\n      <ng-container *ngIf=\"button.icon; else customOrSpinner\">\r\n        <fa-icon [icon]=\"button.icon\" [ngStyle]=\"mergeStyles(customButtonIcon, button.iconStyle)\"></fa-icon>\r\n        <span *ngIf=\"button.text\" class=\"customButtonText\" [ngStyle]=\"button.textStyle\">{{ button.text }}</span>\r\n      </ng-container>\r\n      <ng-template #customOrSpinner>\r\n        <ng-container *ngIf=\"isCustomComponentConfig(button.customComponent)\">\r\n          <ng-container *ngComponentOutlet=\"button.customComponent.component; injector: button.customComponent.injector\"></ng-container>\r\n        </ng-container>\r\n        <ng-container *ngIf=\"button.customComponent && !isCustomComponentConfig(button.customComponent)\">\r\n          <div #customElementContainer></div>\r\n        </ng-container>\r\n        <ng-container *ngIf=\"!button.customComponent\">\r\n          <fa-icon [icon]=\"faSpinner\"></fa-icon>\r\n        </ng-container>\r\n      </ng-template>\r\n    </div>\r\n  </button>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\n\r\nexport interface MeetingIdComponentOptions {\r\n  meetingID?: string;\r\n}\r\n\r\nexport type MeetingIdComponentType = (options: MeetingIdComponentOptions) => HTMLElement;\r\n\r\n/**\r\n * Component representing a meeting ID.\r\n *\r\n * @selector app-meeting-id-component\r\n * @standalone true\r\n * @templateUrl ./meeting-id-component.component.html\r\n * @styleUrls ./meeting-id-component.component.css\r\n *\r\n * @example\r\n * ```html\r\n * <app-meeting-id-component [meetingID]=\"'123-456-789'\"></app-meeting-id-component>\r\n * ```\r\n */\r\n\r\n@Component({\r\n  selector: 'app-meeting-id-component',\r\n  templateUrl: './meeting-id-component.component.html',\r\n  styleUrls: ['./meeting-id-component.component.css'],\r\n  standalone: true,\r\n})\r\nexport class MeetingIdComponent {\r\n  @Input() meetingID = '';\r\n}\r\n","<div class=\"form-group\">\r\n  <label class=\"label\">Event ID:</label>\r\n  <input\r\n    class=\"disabled-input\"\r\n    [value]=\"meetingID\"\r\n    readonly\r\n  />\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\n\r\nexport interface MeetingPasscodeComponentOptions {\r\n  meetingPasscode: string;\r\n}\r\n\r\nexport type MeetingPasscodeComponentType = (\r\n  options: MeetingPasscodeComponentOptions,\r\n) => HTMLElement;\r\n\r\n/**\r\n * Component for displaying and managing a meeting passcode.\r\n *\r\n * @selector app-meeting-passcode-component\r\n * @standalone true\r\n * @templateUrl ./meeting-passcode-component.component.html\r\n * @styleUrls ./meeting-passcode-component.component.css\r\n *\r\n * @example\r\n * ```html\r\n * <app-meeting-passcode-component [meetingPasscode]=\"'ABC123'\"></app-meeting-passcode-component>\r\n * ```\r\n */\r\n\r\n@Component({\r\n  selector: 'app-meeting-passcode-component',\r\n  standalone: true,\r\n  templateUrl: './meeting-passcode-component.component.html',\r\n  styleUrls: ['./meeting-passcode-component.component.css'],\r\n})\r\nexport class MeetingPasscodeComponent {\r\n  @Input() meetingPasscode = '';\r\n}\r\n","<div class=\"form-group\">\r\n  <label class=\"label\">Event Passcode (Host):</label>\r\n  <input\r\n    class=\"disabled-input\"\r\n    [value]=\"meetingPasscode\"\r\n    readonly\r\n  />\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faCopy, faEnvelope } from '@fortawesome/free-solid-svg-icons';\r\nimport { faFacebook, faWhatsapp, faTelegram } from '@fortawesome/free-brands-svg-icons';\r\nimport { IconDefinition } from '@fortawesome/free-solid-svg-icons';\r\nimport { EventType } from '../../../@types/types';\r\n\r\nexport interface ShareButton {\r\n  icon: IconDefinition;\r\n  action: () => void;\r\n  show: boolean;\r\n  color?: string;\r\n  iconColor?: string;\r\n}\r\n\r\nexport interface ShareButtonsComponentOptions {\r\n  meetingID: string;\r\n  shareButtons?: ShareButton[];\r\n  eventType: EventType;\r\n  localLink?: string;\r\n}\r\n\r\nexport type ShareButtonsComponentType = (options: ShareButtonsComponentOptions) => HTMLElement;\r\n\r\n/**\r\n * @component ShareButtonsComponent\r\n * @selector app-share-buttons-component\r\n * @description Displays a set of share buttons for sharing a meeting link on social media and email.\r\n *\r\n * @example\r\n * ```html\r\n * <app-share-buttons-component\r\n *   [meetingID]=\"'12345'\"\r\n *   [eventType]=\"'broadcast'\"\r\n *   [shareButtons]=\"customShareButtons\"\r\n *   [localLink]=\"'https://www.google.com'\"\r\n * ></app-share-buttons-component>\r\n * ```\r\n *\r\n * ```typescript\r\n * const customShareButtons = [\r\n *   { icon: faEnvelope, action: () => console.log('Email'), show: true },\r\n *   { icon: faFacebook, action: () => console.log('Facebook'), show: true },\r\n * ];\r\n * ```\r\n */\r\n\r\n@Component({\r\n  selector: 'app-share-buttons-component',\r\n  templateUrl: './share-buttons-component.component.html',\r\n  styleUrls: ['./share-buttons-component.component.css'],\r\n  imports: [CommonModule, FontAwesomeModule],\r\n})\r\nexport class ShareButtonsComponent {\r\n  @Input() meetingID!: string;\r\n  @Input() shareButtons: ShareButton[] = [];\r\n  @Input() eventType!: EventType;\r\n  @Input() localLink?: string;\r\n\r\n  defaultShareButtons: ShareButton[] = [\r\n    {\r\n      icon: faCopy,\r\n      action: async () => {\r\n        try {\r\n          await navigator.clipboard.writeText(this.getShareUrl());\r\n        } catch (error) {\r\n          console.error('Failed to copy to clipboard:', error);\r\n        }\r\n      },\r\n      show: true,\r\n    },\r\n    {\r\n      icon: faEnvelope,\r\n      action: () => {\r\n        const emailUrl = `mailto:?subject=Join my meeting&body=Here's the link to the meeting: ${this.getShareUrl()}`;\r\n        window.open(emailUrl, '_blank');\r\n      },\r\n      show: true,\r\n    },\r\n    {\r\n      icon: faFacebook,\r\n      action: () => {\r\n        const facebookUrl = `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(\r\n          this.getShareUrl()\r\n        )}`;\r\n        window.open(facebookUrl, '_blank');\r\n      },\r\n      show: true,\r\n    },\r\n    {\r\n      icon: faWhatsapp,\r\n      action: () => {\r\n        const whatsappUrl = `https://wa.me/?text=${encodeURIComponent(\r\n          this.getShareUrl()\r\n        )}`;\r\n        window.open(whatsappUrl, '_blank');\r\n      },\r\n      show: true,\r\n    },\r\n    {\r\n      icon: faTelegram,\r\n      action: () => {\r\n        const telegramUrl = `https://t.me/share/url?url=${encodeURIComponent(\r\n          this.getShareUrl()\r\n        )}`;\r\n        window.open(telegramUrl, '_blank');\r\n      },\r\n      show: true,\r\n    },\r\n  ];\r\n\r\n  get shareName() {\r\n    return this.eventType === 'chat'\r\n      ? 'chat'\r\n      : this.eventType === 'broadcast'\r\n      ? 'broadcast'\r\n      : 'meeting';\r\n  }\r\n\r\n  getShareUrl(): string {\r\n    if (this.localLink && !this.localLink.includes('mediasfu.com')) {\r\n      return `${this.localLink}/meeting/${this.meetingID}`;\r\n    }\r\n    return `https://${this.shareName}.mediasfu.com/${this.shareName}/${this.meetingID}`;\r\n  }\r\n\r\n  get filteredShareButtons() {\r\n    return this.shareButtons.length > 0\r\n      ? this.shareButtons.filter((button) => button.show)\r\n      : this.defaultShareButtons.filter((button) => button.show);\r\n  }\r\n}\r\n","<div class=\"share-buttons-container\">\r\n  <div\r\n    *ngFor=\"let button of filteredShareButtons; let i = index\"\r\n    (click)=\"button.action()\"\r\n    [ngStyle]=\"{\r\n      'background-color': button.color || 'black',\r\n      'margin-right': i !== filteredShareButtons.length - 1 ? '10px' : '0'\r\n    }\"\r\n    class=\"share-button\"\r\n  >\r\n    <fa-icon [icon]=\"button.icon\" [ngStyle]=\"{ color: button.iconColor || '#ffffff', 'font-size': '24px' }\"></fa-icon>\r\n  </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { faBars, faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { CustomButton, CustomButtons } from '../custom-buttons/custom-buttons.component';\r\nimport { MeetingIdComponent } from '../meeting-id-component/meeting-id-component.component';\r\nimport { MeetingPasscodeComponent } from '../meeting-passcode-component/meeting-passcode-component.component';\r\nimport { ShareButtonsComponent } from '../share-buttons-component/share-buttons-component.component';\r\nimport { EventType } from '../../../@types/types';\r\n\r\nexport interface MenuModalOptions {\r\n  backgroundColor?: string;\r\n  isVisible: boolean;\r\n  customButtons?: CustomButton[];\r\n  shareButtons?: boolean;\r\n  position?: string;\r\n  roomName: string;\r\n  adminPasscode: string;\r\n  islevel: string;\r\n  eventType: EventType;\r\n  localLink?: string;\r\n\r\n  onClose: () => void;\r\n}\r\n\r\nexport type MenuModalType = (options: MenuModalOptions) => HTMLElement;\r\n\r\n/**\r\n * Component for displaying a customizable menu modal with various options.\r\n *\r\n * @selector app-menu-modal\r\n * @standalone true\r\n * @templateUrl ./menu-modal.component.html\r\n * @styleUrls ./menu-modal.component.css\r\n *\r\n * @example\r\n * ```html\r\n * <app-menu-modal\r\n *   [isVisible]=\"true\"\r\n *   backgroundColor=\"#83c0e9\"\r\n *   roomName=\"Room 123\"\r\n *   adminPasscode=\"AdminPass\"\r\n *   [customButtons]=\"customButtons\"\r\n *   [shareButtons]=\"true\"\r\n *   position=\"bottomRight\"\r\n *   islevel=\"2\"\r\n *   eventType=\"meeting\"\r\n *   localLink=\"https://www.google.com\"\r\n *   (onClose)=\"closeMenu()\"\r\n * ></app-menu-modal>\r\n * ```\r\n *\r\n * ```typescript\r\n * const customButtons = [\r\n *   { action: () => console.log('Clicked'), show: true, text: 'Button' },\r\n * ];\r\n * closeMenu() { console.log('Menu closed'); }\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n    selector: 'app-menu-modal',\r\n    templateUrl: './menu-modal.component.html',\r\n    styleUrls: ['./menu-modal.component.css'],\r\n    imports: [\r\n        CommonModule,\r\n        FontAwesomeModule,\r\n        FormsModule,\r\n        CustomButtons,\r\n        MeetingIdComponent,\r\n        MeetingPasscodeComponent,\r\n        ShareButtonsComponent,\r\n    ]\r\n})\r\nexport class MenuModal {\r\n  @Input() backgroundColor = '#83c0e9';\r\n  @Input() isVisible!: boolean;\r\n  @Input() customButtons: CustomButton[] = [];\r\n  @Input() shareButtons = true;\r\n  @Input() position = 'bottomRight';\r\n  @Input() roomName!: string;\r\n  @Input() adminPasscode!: string;\r\n  @Input() islevel!: string;\r\n  @Input() eventType!: EventType;\r\n  @Input() localLink!: string;\r\n  // Define inputs for functions\r\n  @Input() onClose!: () => void;\r\n\r\n  faBars = faBars;\r\n  faTimes = faTimes;\r\n\r\n  modalContainerStyle() {\r\n    return {\r\n      position: 'fixed',\r\n      top: 0,\r\n      left: 0,\r\n      width: '100%',\r\n      height: '100%',\r\n      backgroundColor: 'rgba(0, 0, 0, 0.5)',\r\n      display: this.isVisible ? 'block' : 'none',\r\n      zIndex: 999,\r\n    };\r\n  }\r\n\r\n  modalContentStyle() {\r\n    const screenWidth = window.innerWidth;\r\n    let modalWidth = 0.7 * screenWidth;\r\n\r\n    if (modalWidth > 400) {\r\n      modalWidth = 400;\r\n    }\r\n\r\n    return {\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '5px',\r\n      width: `${modalWidth}px`,\r\n      maxHeight: '80%',\r\n      overflowY: 'auto',\r\n      top: this.position.includes('top') ? '10px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '10px' : 'auto',\r\n      left: this.position.includes('Left') ? '10px' : 'auto',\r\n      right: this.position.includes('Right') ? '10px' : 'auto',\r\n    };\r\n  }\r\n\r\n  handleClose() {\r\n    this.onClose();\r\n  }\r\n}\r\n","<div [ngStyle]=\"modalContainerStyle()\">\r\n  <div class=\"modal-content\" [ngStyle]=\"modalContentStyle()\">\r\n    <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;\">\r\n      <div style=\"font-size: 18px; font-weight: bold; color: black;\">\r\n        <fa-icon [icon]=\"faBars\" style=\"font-size: 20px; color: black;\"></fa-icon> Menu\r\n      </div>\r\n      <div (click)=\"handleClose()\" style=\"padding: 5px;\">\r\n        <fa-icon [icon]=\"faTimes\" style=\"font-size: 20px; color: black;\"></fa-icon>\r\n      </div>\r\n    </div>\r\n    <hr style=\"height: 1px; background-color: black; margin: 5px 0;\" />\r\n    <div style=\"flex: 1;\">\r\n      <div style=\"max-height: calc(70% - 70px); overflow-y: auto;\">\r\n        <app-custom-buttons [buttons]=\"customButtons\"></app-custom-buttons>\r\n        <div style=\"height: 1px; background-color: #ffffff; margin: 10px 0;\"></div>\r\n        <ng-container *ngIf=\"islevel === '2'\">\r\n          <app-meeting-passcode-component\r\n            [meetingPasscode]=\"adminPasscode\"\r\n          ></app-meeting-passcode-component>\r\n        </ng-container>\r\n        <div style=\"margin-bottom: 10px;\">\r\n          <app-meeting-id-component [meetingID]=\"roomName\"></app-meeting-id-component>\r\n        </div>\r\n        <ng-container *ngIf=\"true\">\r\n          <app-share-buttons-component [meetingID]=\"roomName\" [eventType]=\"eventType\" [localLink]=\"localLink\"></app-share-buttons-component>\r\n        </ng-container>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Input, OnInit, OnChanges } from '@angular/core';\r\nimport { faPaperPlane, faReply } from '@fortawesome/free-solid-svg-icons';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { SendMessageOptions } from '../../../methods/message-methods/send-message.service';\r\nimport {\r\n  CoHostResponsibility,\r\n  EventType,\r\n  Message,\r\n  Participant,\r\n  ShowAlert,\r\n} from '../../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface MessagePanelOptions {\r\n  messages: Message[];\r\n  messagesLength: number;\r\n  type: string;\r\n  username: string;\r\n  onSendMessagePress: (options: SendMessageOptions) => Promise<void>;\r\n  focusedInput: boolean;\r\n  showAlert?: ShowAlert;\r\n  eventType: EventType;\r\n  member: string;\r\n  islevel: string;\r\n  startDirectMessage: boolean;\r\n  updateStartDirectMessage: (start: boolean) => void;\r\n  directMessageDetails: Participant | null;\r\n  updateDirectMessageDetails: (participant: Participant | null) => void;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  coHost: string;\r\n  roomName: string;\r\n  socket: Socket;\r\n  chatSetting: string;\r\n}\r\n\r\nexport type MessagePanelType = (options: MessagePanelOptions) => HTMLElement;\r\n\r\n/**\r\n * @fileoverview MessagePanel component for handling message interactions in the MediaSFU-Angular application.\r\n *\r\n * @component\r\n * @selector app-message-panel\r\n * @templateUrl ./message-panel.component.html\r\n * @styleUrls ['./message-panel.component.css']\r\n * @standalone true\r\n * @imports [CommonModule, FontAwesomeModule, FormsModule]\r\n *\r\n * @description\r\n * The MessagePanel component is responsible for displaying and managing messages in a chat interface.\r\n * It supports both group and direct messaging, and includes various input properties to customize its behavior.\r\n *\r\n * @property {Array<any>} messages - Array of messages to be displayed.\r\n * @property {number} messagesLength - The length of the messages array.\r\n * @property {string} type - The type of chat, either 'group' or 'direct'.\r\n * @property {string} username - The username of the current user.\r\n * @property {(options: SendMessageOptions) => Promise<void>} onSendMessagePress - Function to handle sending messages.\r\n * @property {string} backgroundColor - Background color of the message panel.\r\n * @property {boolean} focusedInput - Indicates if the input field is focused.\r\n * @property {EventType} eventType - The type of event, e.g., 'webinar'.\r\n * @property {string} member - The member associated with the chat.\r\n * @property {string} islevel - The level of the user.\r\n * @property {boolean} startDirectMessage - Indicates if a direct message should be started.\r\n * @property {(start: boolean) => void} updateStartDirectMessage - Function to update the startDirectMessage state.\r\n * @property {Participant | null} directMessageDetails - Details of the participant for direct messaging.\r\n * @property {(participant: Participant | null) => void} updateDirectMessageDetails - Function to update directMessageDetails.\r\n * @property {CoHostResponsibility[]} coHostResponsibility - Array of co-host responsibilities.\r\n * @property {string} coHost - The co-host of the chat.\r\n * @property {string} roomName - The name of the chat room.\r\n * @property {Socket} socket - The socket connection for real-time communication.\r\n * @property {string} chatSetting - Settings for the chat.\r\n * @property {ShowAlert} [showAlert] - Optional function to show alerts.\r\n *\r\n * @property {IconDefinition} faPaperPlane - FontAwesome icon for paper plane.\r\n * @property {IconDefinition} faReply - FontAwesome icon for reply.\r\n *\r\n * @property {any} replyInfo - Information about the reply.\r\n * @property {string | null} senderId - ID of the sender.\r\n * @property {string} directMessageText - Text of the direct message.\r\n * @property {string} groupMessageText - Text of the group message.\r\n *\r\n * @method ngOnInit - Lifecycle hook that is called after data-bound properties are initialized.\r\n * @method defaultSendMessage - Default implementation for sending a message.\r\n * @method handleTextInputChange - Handles changes in the text input field.\r\n * @method openReplyInput - Opens the reply input for a specific sender.\r\n * @method handleSendButton - Handles the send button click event.\r\n *\r\n * @example\r\n * ```html\r\n * <app-message-panel\r\n *   [messages]=\"chatMessages\"\r\n *   [messagesLength]=\"chatMessages.length\"\r\n *   [type]=\"'group'\"\r\n *   [username]=\"'JohnDoe'\"\r\n *   [onSendMessagePress]=\"sendMessage\"\r\n *   [focusedInput]=\"true\"\r\n *   [eventType]=\"'webinar'\"\r\n *   [member]=\"'JohnDoe'\"\r\n *   [islevel]=\"'2'\"\r\n *   [startDirectMessage]=\"false\"\r\n *   [updateStartDirectMessage]=\"updateDirectMessageStart\"\r\n *   [directMessageDetails]=\"selectedParticipant\"\r\n *   [updateDirectMessageDetails]=\"updateParticipantDetails\"\r\n *   [coHostResponsibility]=\"coHostRoles\"\r\n *   [coHost]=\"'coHost123'\"\r\n *   [roomName]=\"'RoomName'\"\r\n *   [socket]=\"chatSocket\"\r\n *   [chatSetting]=\"'enabled'\"\r\n * ></app-message-panel>\r\n * ```\r\n */\r\n\r\n@Component({\r\n    selector: 'app-message-panel',\r\n    templateUrl: './message-panel.component.html',\r\n    styleUrls: ['./message-panel.component.css'],\r\n    imports: [CommonModule, FontAwesomeModule, FormsModule]\r\n})\r\nexport class MessagePanel implements OnInit, OnChanges {\r\n  @Input() messages: Array<any> = [];\r\n  @Input() messagesLength = 0;\r\n  @Input() type = 'group';\r\n  @Input() username = '';\r\n  @Input() onSendMessagePress!: (options: SendMessageOptions) => Promise<void>;\r\n  @Input() backgroundColor = '#f5f5f5';\r\n  @Input() focusedInput = false;\r\n  @Input() eventType: EventType = 'webinar';\r\n  @Input() member = '';\r\n  @Input() islevel = '';\r\n  @Input() startDirectMessage = false;\r\n  @Input() updateStartDirectMessage!: (start: boolean) => void;\r\n  @Input() directMessageDetails: Participant | null = null;\r\n  @Input() updateDirectMessageDetails!: (participant: Participant | null) => void;\r\n  @Input() coHostResponsibility: CoHostResponsibility[] = [];\r\n  @Input() coHost = '';\r\n  @Input() roomName = '';\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input() chatSetting = '';\r\n  @Input() showAlert?: ShowAlert;\r\n\r\n  faPaperPlane = faPaperPlane;\r\n  faReply = faReply;\r\n\r\n  replyInfo: any = null;\r\n  senderId: string | null = null;\r\n  directMessageText = '';\r\n  groupMessageText = '';\r\n\r\n  ngOnInit() {\r\n    if (!this.onSendMessagePress) {\r\n      this.onSendMessagePress = this.defaultSendMessage.bind(this);\r\n    }\r\n  }\r\n\r\n  defaultSendMessage(): Promise<void> {\r\n    // Default send message implementation\r\n    return Promise.resolve();\r\n  }\r\n\r\n  handleTextInputChange(event: Event) {\r\n    const text = (event.target as HTMLInputElement).value;\r\n    if (this.type === 'direct') {\r\n      this.directMessageText = text;\r\n    } else {\r\n      this.groupMessageText = text;\r\n    }\r\n  }\r\n\r\n  ngOnChanges() {\r\n    if (this.startDirectMessage && this.directMessageDetails) {\r\n      this.openReplyInput(this.directMessageDetails['name']);\r\n    }\r\n  }\r\n\r\n  openReplyInput(senderId: string) {\r\n    this.replyInfo = {\r\n      text: 'Replying to: ',\r\n      username: senderId,\r\n    };\r\n    this.senderId = senderId;\r\n  }\r\n\r\n  async handleSendButton() {\r\n    const message = this.type === 'direct' ? this.directMessageText : this.groupMessageText;\r\n\r\n    if (!message) {\r\n      this.showAlert?.({ message: 'Please enter a message', type: 'danger' });\r\n      return;\r\n    }\r\n\r\n    if (message.length > 350) {\r\n      this.showAlert?.({ message: 'Message is too long.', type: 'danger' });\r\n      return;\r\n    }\r\n\r\n    if (message.trim() === '') {\r\n      this.showAlert?.({ message: 'Message cannot be empty.', type: 'danger' });\r\n      return;\r\n    }\r\n\r\n    if (this.type === 'direct' && !this.senderId && this.islevel == '2') {\r\n      this.showAlert?.({ message: 'Please select a user to send a message to.', type: 'danger' });\r\n      return;\r\n    }\r\n\r\n    await this.onSendMessagePress({\r\n      message,\r\n      receivers: this.type === 'direct' && this.senderId ? [this.senderId] : [],\r\n      group: this.type === 'group',\r\n      messagesLength: this.messagesLength,\r\n      member: this.member,\r\n      sender: this.username,\r\n      islevel: this.islevel,\r\n      showAlert: this.showAlert,\r\n      coHostResponsibility: this.coHostResponsibility,\r\n      coHost: this.coHost,\r\n      roomName: this.roomName,\r\n      socket: this.socket,\r\n      chatSetting: this.chatSetting,\r\n    });\r\n\r\n    if (this.type === 'direct') {\r\n      this.directMessageText = '';\r\n    } else {\r\n      this.groupMessageText = '';\r\n    }\r\n\r\n    this.replyInfo = null;\r\n    this.senderId = null;\r\n  }\r\n}\r\n","<div [style.maxHeight]=\"'100%'\" [style.backgroundColor]=\"backgroundColor\" style=\"overflow-y: auto;\">\r\n  <!-- Message rendering logic -->\r\n  <div *ngFor=\"let message of messages; let index = index\" [ngStyle]=\"{ marginBottom: '10px' }\">\r\n    <div [ngStyle]=\"{ display: 'flex', flexDirection: 'column', alignItems: message.sender === username ? 'flex-end' : 'flex-start', marginBottom: '10px' }\">\r\n      <div [ngStyle]=\"{ display: 'flex', flexDirection: 'row', justifyContent: 'space-between', marginBottom: '3px' }\">\r\n        <span *ngIf=\"message.sender === username && !message.group\" [ngStyle]=\"{ fontWeight: 'bold', color: 'black', fontSize: '8px', marginLeft: '6px' }\">To: {{ message.receivers.join(', ') }}</span>\r\n        <span [ngStyle]=\"{ fontWeight: 'bold', color: 'black', fontSize: '8px', marginRight: '10px' }\">{{ message.sender === username ? '' : message.sender }}</span>\r\n        <span [ngStyle]=\"{ fontSize: '8px', color: '#0D0D0DFF' }\">{{ message.timestamp }}</span>\r\n        <div *ngIf=\"message.sender !== username && !message.group\" (click)=\"openReplyInput(message.sender)\" [ngStyle]=\"{ padding: '1px', marginLeft: '5px', borderRadius: '2px', backgroundColor: 'transparent' }\">\r\n          <fa-icon [icon]=\"faReply\" size=\"xs\" color=\"black\"></fa-icon>\r\n        </div>\r\n      </div>\r\n      <div [ngStyle]=\"{ backgroundColor: message.sender === member ? '#DCF8C6' : '#1ce5c7', padding: '10px', borderRadius: '10px' }\">\r\n        <span [ngStyle]=\"{ color: 'black' }\">{{ message.message }}</span>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Reply info -->\r\n  <div *ngIf=\"replyInfo\" [ngStyle]=\"{ flexDirection: 'row', alignItems: 'center', padding: '2px', backgroundColor: '#e6e6e6', borderRadius: '5px', marginBottom: '1px' }\">\r\n    <span [ngStyle]=\"{ fontWeight: 'bold', marginRight: '2px', fontSize: '8px' }\">Replying to: </span>\r\n    <span [ngStyle]=\"{ color: 'red', fontSize: '8px' }\">{{ replyInfo.username }}</span>\r\n  </div>\r\n\r\n  <!-- Input area -->\r\n  <div [ngStyle]=\"{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '10px', marginTop: 'auto' }\">\r\n    <input\r\n      type=\"text\"\r\n      [ngStyle]=\"{ flex: 1, minHeight: '40px', maxHeight: '80px', resize: 'vertical', border: '1px solid gray', borderRadius: '5px', padding: '10px', overflowY: 'auto' }\"\r\n      placeholder=\"{{ type === 'direct' ? (focusedInput && startDirectMessage && directMessageDetails ? 'Send a direct message to ' + directMessageDetails.name : 'Select a message to reply to') : (eventType === 'chat' ? 'Send a message' : 'Send a message to everyone') }}\"\r\n      maxLength=\"350\"\r\n      (input)=\"handleTextInputChange($event)\"\r\n      [value]=\"type === 'direct' ? directMessageText : groupMessageText\"\r\n    />\r\n    <button [ngStyle]=\"{ backgroundColor: '#83c0e9', padding: '10px', borderRadius: '5px', display: 'flex', alignItems: 'center' }\" (click)=\"handleSendButton()\">\r\n      <fa-icon [icon]=\"faPaperPlane\" size=\"sm\" color=\"white\"></fa-icon>\r\n    </button>\r\n  </div>\r\n</div>\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\nimport { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { MessagePanel } from '../message-panel/message-panel.component';\r\nimport {\r\n  CoHostResponsibility,\r\n  EventType,\r\n  Message,\r\n  Participant,\r\n  ShowAlert,\r\n} from '../../../@types/types';\r\nimport {\r\n  SendMessage,\r\n  SendMessageOptions,\r\n} from '../../../methods/message-methods/send-message.service';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface MessagesModalOptions {\r\n  isMessagesModalVisible: boolean;\r\n  onMessagesClose: () => void;\r\n  onSendMessagePress?: (options: SendMessageOptions) => Promise<void>;\r\n  messages: Message[];\r\n  position?: string;\r\n  backgroundColor?: string;\r\n  activeTabBackgroundColor?: string;\r\n  eventType: EventType;\r\n  member: string;\r\n  islevel: string;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  coHost: string;\r\n  startDirectMessage: boolean;\r\n  directMessageDetails: Participant | null;\r\n  updateStartDirectMessage: (start: boolean) => void;\r\n  updateDirectMessageDetails: (participant: Participant | null) => void;\r\n  showAlert?: ShowAlert;\r\n  roomName: string;\r\n  socket: Socket;\r\n  chatSetting: string;\r\n}\r\n\r\nexport type MessagesModalType = (options: MessagesModalOptions) => void;\r\n\r\n/**\r\n * @component MessagesModal\r\n * @description A modal component for managing chat messages in MediaSFU applications, supporting both group and direct messaging, and providing a customizable user interface.\r\n *\r\n * @selector app-messages-modal\r\n * @templateUrl ./messages-modal.component.html\r\n * @styleUrls ./messages-modal.component.css\r\n * @standalone true\r\n * @imports [CommonModule, FontAwesomeModule, MessagePanel]\r\n *\r\n * @example\r\n * ```html\r\n * <app-messages-modal\r\n *   [isMessagesModalVisible]=\"true\"\r\n *   [onMessagesClose]=\"closeMessages\"\r\n *   [messages]=\"chatMessages\"\r\n *   [position]=\"'bottomRight'\"\r\n *   [backgroundColor]=\"'#f5f5f5'\"\r\n *   [eventType]=\"'webinar'\"\r\n *   [member]=\"'JohnDoe'\"\r\n *   [islevel]=\"'2'\"\r\n *   [coHostResponsibility]=\"coHostRoles\"\r\n *   [coHost]=\"'coHost123'\"\r\n *   [startDirectMessage]=\"false\"\r\n *   [directMessageDetails]=\"selectedParticipant\"\r\n *   [updateStartDirectMessage]=\"updateDirectMessageStart\"\r\n *   [updateDirectMessageDetails]=\"updateParticipantDetails\"\r\n *   [showAlert]=\"displayAlert\"\r\n *   [roomName]=\"'RoomName'\"\r\n *   [socket]=\"chatSocket\"\r\n *   [chatSetting]=\"'enabled'\"\r\n * ></app-messages-modal>\r\n * ```\r\n */\r\n\r\n@Component({\r\n    selector: 'app-messages-modal',\r\n    templateUrl: './messages-modal.component.html',\r\n    styleUrls: ['./messages-modal.component.css'],\r\n    imports: [CommonModule, FontAwesomeModule, MessagePanel]\r\n})\r\nexport class MessagesModal implements OnInit, OnChanges {\r\n  constructor(private SendMessageService: SendMessage) {}\r\n\r\n  @Input() isMessagesModalVisible = false;\r\n  @Input() onMessagesClose = () => {};\r\n  @Input() onSendMessagePress!: (options: SendMessageOptions) => Promise<void>;\r\n  @Input() messages: Message[] = [];\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = '#f5f5f5';\r\n  @Input() activeTabBackgroundColor = '#2b7ce5';\r\n  @Input() eventType: EventType = 'webinar';\r\n  @Input() member = '';\r\n  @Input() islevel = '';\r\n  @Input() coHostResponsibility: CoHostResponsibility[] = [];\r\n  @Input() coHost = '';\r\n  @Input() startDirectMessage = false;\r\n  @Input() directMessageDetails: Participant | null = null;\r\n  @Input() updateStartDirectMessage = (start: boolean) => {\r\n    console.log(start);\r\n  };\r\n  @Input() updateDirectMessageDetails = (participant: Participant | null) => {\r\n    console.log(participant);\r\n  };\r\n  @Input() showAlert?: ShowAlert;\r\n  @Input() roomName = '';\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input() chatSetting = '';\r\n\r\n  faTimes = faTimes;\r\n\r\n  directMessages: Array<any> = [];\r\n  groupMessages: Array<any> = [];\r\n  activeTab = 'group';\r\n  focusedInput = false;\r\n  reRender = false;\r\n\r\n  modalContainerStyle: any;\r\n  modalContentStyle: any;\r\n\r\n  ngOnInit() {\r\n    if (!this.onSendMessagePress) {\r\n      this.onSendMessagePress = this.SendMessageService.sendMessage.bind(this.SendMessageService);\r\n    }\r\n\r\n    if (this.eventType == 'webinar' || this.eventType == 'conference') {\r\n      this.activeTab = 'direct';\r\n    } else {\r\n      this.activeTab = 'group';\r\n      this.switchToGroupTab();\r\n    }\r\n\r\n    this.updateModalStyles();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['isMessagesModalVisible']) {\r\n      this.updateModalStyles();\r\n\r\n      if (\r\n        this.eventType != 'webinar' &&\r\n        this.eventType != 'conference' &&\r\n        this.activeTab == 'direct'\r\n      ) {\r\n        this.activeTab = 'group';\r\n        this.focusedInput = false;\r\n        this.switchToGroupTab();\r\n      } else if (this.eventType == 'webinar' || this.eventType == 'conference') {\r\n        if (this.startDirectMessage && this.directMessageDetails) {\r\n          this.activeTab = 'direct';\r\n          this.focusedInput = true;\r\n          this.switchToDirectTab();\r\n        }\r\n      }\r\n\r\n      if (this.isMessagesModalVisible) {\r\n        this.populateMessages();\r\n      }\r\n    }\r\n    if (changes['messages']) {\r\n      this.populateMessages();\r\n    }\r\n  }\r\n\r\n  switchToDirectTab() {\r\n    this.activeTab = 'direct';\r\n    this.reRender = !this.reRender;\r\n  }\r\n\r\n  switchToGroupTab() {\r\n    this.activeTab = 'group';\r\n    this.reRender = !this.reRender;\r\n  }\r\n\r\n  populateMessages() {\r\n    let chatValue = false;\r\n    try {\r\n      chatValue =\r\n        this.coHostResponsibility?.find((item: any) => item.name == 'chat')?.value || false;\r\n    } catch {\r\n      /* handle error */\r\n    }\r\n\r\n    let directMsgs = this.messages ? this.messages.filter((message) => !message.group) : [];\r\n    directMsgs = directMsgs.filter(\r\n      (message) =>\r\n        message.sender == this.member ||\r\n        message.receivers.includes(this.member) ||\r\n        this.islevel == '2' ||\r\n        (this.coHost == this.member && chatValue == true),\r\n    );\r\n    this.directMessages = directMsgs;\r\n\r\n    const groupMsgs = this.messages ? this.messages.filter((message) => message.group) : [];\r\n    this.groupMessages = groupMsgs;\r\n  }\r\n\r\n  closeMessagesModal() {\r\n    this.onMessagesClose();\r\n  }\r\n\r\n  updateModalStyles() {\r\n    const screenWidth = window.innerWidth;\r\n    const modalWidth = Math.min(0.8 * screenWidth, 400);\r\n\r\n    this.modalContainerStyle = {\r\n      position: 'fixed',\r\n      top: 0,\r\n      left: 0,\r\n      width: '100%',\r\n      height: '100%',\r\n      backgroundColor: 'rgba(0, 0, 0, 0.5)',\r\n      display: this.isMessagesModalVisible ? 'block' : 'none',\r\n      zIndex: 999,\r\n    };\r\n\r\n    this.modalContentStyle = {\r\n      position: 'fixed',\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '10px',\r\n      width: `${modalWidth}px`,\r\n      maxWidth: `${modalWidth}px`,\r\n      maxHeight: '75%',\r\n      overflowY: 'auto',\r\n      overflowX: 'hidden',\r\n      top: this.position.includes('top') ? '10px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '10px' : 'auto',\r\n      left: this.position.includes('Left') ? '10px' : 'auto',\r\n      right: this.position.includes('Right') ? '10px' : 'auto',\r\n    };\r\n  }\r\n\r\n  getTabStyle(tab: string) {\r\n    return {\r\n      ...this.styles.tabText,\r\n      ...(this.activeTab == tab ? this.styles.activeTabText : {}),\r\n      ...(this.activeTab == tab ? { backgroundColor: this.activeTabBackgroundColor } : {}),\r\n    };\r\n  }\r\n\r\n  getButtonCloseStyle() {\r\n    return {\r\n      ...this.styles.btnCloseMessages,\r\n      marginLeft: this.eventType == 'webinar' || this.eventType == 'conference' ? '20%' : '65%',\r\n    };\r\n  }\r\n\r\n  get styles() {\r\n    return {\r\n      modalContent: {\r\n        borderRadius: '10px',\r\n        padding: '10px',\r\n      },\r\n      modalBody: {\r\n        marginTop: '10px',\r\n      },\r\n      tabText: {\r\n        paddingRight: '10px',\r\n        paddingLeft: '10px',\r\n        paddingTop: '5px',\r\n        paddingBottom: '5px',\r\n        fontWeight: 'bold',\r\n        marginRight: '10px',\r\n        marginLeft: '10px',\r\n      },\r\n      activeTabText: {\r\n        color: '#ffffff',\r\n        backgroundColor: '#2b7ce5',\r\n        borderRadius: '4px',\r\n      },\r\n      separator: {\r\n        height: '1px',\r\n        backgroundColor: 'black',\r\n        marginVertical: '1px',\r\n      },\r\n      btnCloseMessages: {\r\n        padding: '5px',\r\n        marginRight: '0',\r\n        paddingRight: '0',\r\n      },\r\n      icon: {\r\n        fontSize: '24px',\r\n        color: 'black',\r\n      },\r\n    };\r\n  }\r\n}\r\n","<div [ngStyle]=\"modalContainerStyle\">\r\n  <div [ngStyle]=\"modalContentStyle\">\r\n    <div\r\n      [ngStyle]=\"{\r\n        flexDirection: 'row',\r\n        justifyContent: 'space-between',\r\n        alignItems: 'center'\r\n      }\"\r\n    >\r\n      <button\r\n        *ngIf=\"eventType === 'webinar' || eventType === 'conference'\"\r\n        (click)=\"switchToDirectTab()\"\r\n        [ngStyle]=\"getTabStyle('direct')\"\r\n      >\r\n        Direct\r\n      </button>\r\n      <button\r\n        *ngIf=\"eventType === 'webinar' || eventType === 'conference'\"\r\n        (click)=\"switchToGroupTab()\"\r\n        [ngStyle]=\"getTabStyle('group')\"\r\n      >\r\n        Group\r\n      </button>\r\n      <span (click)=\"closeMessagesModal()\" [ngStyle]=\"getButtonCloseStyle()\">\r\n        <fa-icon [icon]=\"faTimes\" class=\"icon\" size=\"xl\"></fa-icon>\r\n      </span>\r\n    </div>\r\n    <hr [ngStyle]=\"styles.separator\" />\r\n    <div [ngStyle]=\"styles.modalBody\">\r\n      <app-message-panel\r\n        *ngIf=\"\r\n          activeTab === 'direct' &&\r\n          (eventType === 'webinar' || eventType === 'conference')\r\n        \"\r\n        [messages]=\"directMessages\"\r\n        [messagesLength]=\"messages.length\"\r\n        type=\"direct\"\r\n        [onSendMessagePress]=\"onSendMessagePress\"\r\n        [username]=\"member\"\r\n        [backgroundColor]=\"backgroundColor\"\r\n        [focusedInput]=\"focusedInput\"\r\n        [showAlert]=\"showAlert\"\r\n        [eventType]=\"eventType\"\r\n        [member]=\"member\"\r\n        [islevel]=\"islevel\"\r\n        [coHostResponsibility]=\"coHostResponsibility\"\r\n        [coHost]=\"coHost\"\r\n        [directMessageDetails]=\"directMessageDetails\"\r\n        [updateStartDirectMessage]=\"updateStartDirectMessage\"\r\n        [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\r\n        [roomName]=\"roomName\"\r\n        [socket]=\"socket\"\r\n        [chatSetting]=\"chatSetting\"\r\n        [startDirectMessage]=\"startDirectMessage\"\r\n      >\r\n      </app-message-panel>\r\n\r\n      <app-message-panel\r\n        *ngIf=\"activeTab === 'group'\"\r\n        [messages]=\"groupMessages\"\r\n        [messagesLength]=\"messages.length\"\r\n        type=\"group\"\r\n        [onSendMessagePress]=\"onSendMessagePress\"\r\n        [username]=\"member\"\r\n        [backgroundColor]=\"backgroundColor\"\r\n        [focusedInput]=\"focusedInput\"\r\n        [showAlert]=\"showAlert\"\r\n        [eventType]=\"eventType\"\r\n        [member]=\"member\"\r\n        [islevel]=\"islevel\"\r\n        [coHostResponsibility]=\"coHostResponsibility\"\r\n        [coHost]=\"coHost\"\r\n        [directMessageDetails]=\"directMessageDetails\"\r\n        [updateStartDirectMessage]=\"updateStartDirectMessage\"\r\n        [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\r\n        [roomName]=\"roomName\"\r\n        [socket]=\"socket\"\r\n        [chatSetting]=\"chatSetting\"\r\n        [startDirectMessage]=\"startDirectMessage\"\r\n      >\r\n      </app-message-panel>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Input, OnInit, OnDestroy, SimpleChanges } from '@angular/core';\r\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface ConfirmHereModalOptions {\r\n  isConfirmHereModalVisible: boolean;\r\n  position: string;\r\n  backgroundColor: string;\r\n  displayColor: string;\r\n  onConfirmHereClose: () => void;\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n  roomName: string;\r\n  member: string;\r\n  countdownDuration?: number;\r\n}\r\n\r\nexport type ConfirmHereModalType = (options: ConfirmHereModalOptions) => void;\r\n\r\n/**\r\n * @component ConfirmHereModal\r\n * @description Displays a confirmation modal with a countdown timer, allowing users to confirm their presence or be automatically disconnected after the timer expires.\r\n *\r\n * @selector app-confirm-here-modal\r\n * @templateUrl ./confirm-here-modal.component.html\r\n * @styleUrls ./confirm-here-modal.component.css\r\n * @imports [CommonModule, FontAwesomeModule]\r\n *\r\n * @example\r\n * ```html\r\n * <app-confirm-here-modal\r\n *   [isConfirmHereModalVisible]=\"true\"\r\n *   [position]=\"'center'\"\r\n *   [backgroundColor]=\"'#83c0e9'\"\r\n *   [displayColor]=\"'#000000'\"\r\n *   [onConfirmHereClose]=\"closeConfirmModal\"\r\n *   [countdownDuration]=\"120\"\r\n *   [socket]=\"socketInstance\"\r\n *   [localSocket]=\"localSocketInstance\"\r\n *   [roomName]=\"'exampleRoom'\"\r\n *   [member]=\"'exampleMember'\"\r\n * ></app-confirm-here-modal>\r\n * ```\r\n */\r\n\r\n@Component({\r\n  selector: 'app-confirm-here-modal',\r\n  templateUrl: './confirm-here-modal.component.html',\r\n  styleUrls: ['./confirm-here-modal.component.css'],\r\n  imports: [CommonModule, FontAwesomeModule],\r\n  styles: [\r\n    `\r\n      .spinner {\r\n        border: 12px solid #f3f3f3; /* Light grey */\r\n        border-top: 12px solid black; /* Black */\r\n        border-radius: 50%;\r\n        width: 50px;\r\n        height: 50px;\r\n        animation: spin 2s linear infinite;\r\n      }\r\n      @keyframes spin {\r\n        0% {\r\n          transform: rotate(0deg);\r\n        }\r\n        100% {\r\n          transform: rotate(360deg);\r\n        }\r\n      }\r\n      .modal-content {\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n      }\r\n      .loading-text {\r\n        margin-top: 10px;\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ConfirmHereModal implements OnInit, OnDestroy {\r\n  @Input() isConfirmHereModalVisible = false;\r\n  @Input() position = 'center';\r\n  @Input() backgroundColor = '#83c0e9';\r\n  @Input() displayColor = '#000000';\r\n  @Input() onConfirmHereClose!: () => void;\r\n  @Input() countdownDuration?: number = 120;\r\n  @Input() socket!: Socket;\r\n  @Input() localSocket?: Socket; // Added localSocket input\r\n  @Input() roomName!: string;\r\n  @Input() member!: string;\r\n\r\n  faSpinner = faSpinner;\r\n  counter!: number;\r\n  countdownInterval: any;\r\n\r\n  ngOnInit() {\r\n    this.counter = this.countdownDuration ? this.countdownDuration : 120;\r\n    if (this.isConfirmHereModalVisible) {\r\n      this.startCountdown();\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['isConfirmHereModalVisible'] && changes['isConfirmHereModalVisible'].currentValue) {\r\n      this.counter = this.countdownDuration ? this.countdownDuration : 120;\r\n      this.startCountdown();\r\n    } else {\r\n      this.clearCountdown();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.clearCountdown();\r\n  }\r\n\r\n  startCountdown = () => {\r\n    this.countdownInterval = setInterval(() => {\r\n      this.counter--;\r\n      if (this.counter <= 0) {\r\n        this.clearCountdown();\r\n        this.socket.emit('disconnectUser', {\r\n          member: this.member,\r\n          roomName: this.roomName,\r\n          ban: false,\r\n        });\r\n\r\n        // Emit to localSocket if available\r\n        if (this.localSocket && this.localSocket.id) {\r\n          try {\r\n            this.localSocket.emit('disconnectUser', {\r\n              member: this.member,\r\n              roomName: this.roomName,\r\n              ban: false,\r\n            });\r\n          } catch (error) {\r\n            console.error('Error emitting disconnect to localSocket:', error);\r\n          }\r\n        }\r\n\r\n        this.onConfirmHereClose();\r\n      }\r\n    }, 1000);\r\n  };\r\n\r\n  clearCountdown = () => {\r\n    if (this.countdownInterval) {\r\n      clearInterval(this.countdownInterval);\r\n    }\r\n  };\r\n\r\n  handleConfirmHere() {\r\n    this.clearCountdown();\r\n    this.onConfirmHereClose();\r\n  }\r\n\r\n  get spinnerContainerStyle() {\r\n    return {\r\n      marginBottom: '20px',\r\n    };\r\n  }\r\n\r\n  get modalContainerStyle() {\r\n    return {\r\n      'background-color': this.backgroundColor || 'rgba(0, 0, 0, 0.5)',\r\n      display: this.isConfirmHereModalVisible ? 'block' : 'none',\r\n    };\r\n  }\r\n\r\n  get modalContentStyle() {\r\n    return {\r\n      'background-color': this.backgroundColor,\r\n      top: '50%',\r\n      left: '50%',\r\n      transform: 'translate(-50%, -50%)',\r\n    };\r\n  }\r\n}\r\n","<div *ngIf=\"isConfirmHereModalVisible\" [ngStyle]=\"modalContainerStyle\" class=\"modal-container\">\r\n  <div [ngStyle]=\"modalContentStyle\" class=\"modal-content\">\r\n    <div class=\"spinner\" [ngStyle]=\"spinnerContainerStyle\"></div>\r\n    <h2 style=\"font-size: 1.5rem; font-weight: bold; margin-bottom: 1rem; color: black;\">Are you still there?</h2>\r\n    <p style=\"font-size: 1rem; color: black; margin-bottom: 1.5rem;\">Please confirm if you are still present.</p>\r\n    <p style=\"font-size: 0.9rem; color: black; margin-bottom: 1rem;\">Time remaining: <strong>{{ counter }}</strong></p>\r\n    <button (click)=\"handleConfirmHere()\" style=\"background-color: #dc3545; color: white; padding: 0.5rem 1rem; border-radius: 5px; border: none; cursor: pointer; font-weight: bold; font-size: 1rem;\">\r\n      Yes\r\n    </button>\r\n  </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { CreateJoinRoomResponse, CreateJoinRoomError, CreateJoinRoomType, CreateMediaSFURoomOptions, JoinMediaSFURoomOptions } from '../../@types/types';\r\n\r\n/**\r\n * Asynchronously creates a room on MediaSFU.\r\n *\r\n * This method sends a POST request to the MediaSFU API to create a new room.\r\n * It validates the provided credentials and dynamically constructs the API endpoint,\r\n * supporting the Community Edition via a custom `localLink`.\r\n *\r\n * @param {object} options - Configuration options for creating the room.\r\n * @param {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} options.payload -\r\n *   The payload containing the room creation details.\r\n * @param {string} options.apiUserName - The API username, used for authentication.\r\n * @param {string} options.apiKey - The API key, used for authentication.\r\n * @param {string} [options.localLink=\"\"] -\r\n *   The local link for Community Edition users. If provided, it overrides the default API URL.\r\n *\r\n * @returns {Promise<{\r\n*   data: CreateJoinRoomResponse | CreateJoinRoomError | null;\r\n*   success: boolean;\r\n* }>} A promise resolving to an object containing the API response:\r\n* - `data`: The response object, either `CreateJoinRoomResponse` or `CreateJoinRoomError`.\r\n* - `success`: Boolean indicating whether the operation was successful.\r\n*\r\n* @throws {Error} Throws an error if the request fails or if the provided credentials are invalid.\r\n*\r\n* @example\r\n* const response = await createRoomOnMediaSFU.createRoomOnMediaSFU({\r\n*   payload: {\r\n*     action: 'create',\r\n*     duration: 120, // Duration in minutes\r\n*     capacity: 20, // Max participants\r\n*     userName: 'hostUser',\r\n*     scheduledDate: Date.now() + 3600000, // One hour from now\r\n*     secureCode: 'secure123', // Optional\r\n*     eventType: 'webinar', // Optional\r\n*   },\r\n*   apiUserName: 'yourAPIUSERNAME',\r\n*   apiKey: 'yourAPIKEY',\r\n*   localLink: 'http://localhost:3000', // Optional for Community Edition\r\n* });\r\n*\r\n* if (response.success) {\r\n*   console.log('Room created successfully:', response.data);\r\n* } else {\r\n*   console.error('Failed to create room:', response.data?.error);\r\n* }\r\n*/\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class CreateRoomOnMediaSFU {\r\n\r\n\r\n  constructor() {}\r\n\r\n  /**\r\n * Asynchronously creates a room on MediaSFU.\r\n *\r\n * This method sends a POST request to the MediaSFU API to create a new room.\r\n * It validates the provided credentials and dynamically constructs the API endpoint,\r\n * supporting the Community Edition via a custom `localLink`.\r\n *\r\n * @param {object} options - Configuration options for creating the room.\r\n * @param {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} options.payload -\r\n *   The payload containing the room creation details.\r\n * @param {string} options.apiUserName - The API username, used for authentication.\r\n * @param {string} options.apiKey - The API key, used for authentication.\r\n * @param {string} [options.localLink=\"\"] -\r\n *   The local link for Community Edition users. If provided, it overrides the default API URL.\r\n *\r\n * @returns {Promise<{\r\n *   data: CreateJoinRoomResponse | CreateJoinRoomError | null;\r\n  *   success: boolean;\r\n  * }>} A promise resolving to an object containing the API response:\r\n  * - `data`: The response object, either `CreateJoinRoomResponse` or `CreateJoinRoomError`.\r\n  * - `success`: Boolean indicating whether the operation was successful.\r\n  *\r\n  * @throws {Error} Throws an error if the request fails or if the provided credentials are invalid.\r\n  *\r\n  * @example\r\n  * const response = await createRoomOnMediaSFU.createRoomOnMediaSFU({\r\n  *   payload: {\r\n  *     action: 'create',\r\n  *     duration: 120, // Duration in minutes\r\n  *     capacity: 20, // Max participants\r\n  *     userName: 'hostUser',\r\n  *     scheduledDate: Date.now() + 3600000, // One hour from now\r\n  *     secureCode: 'secure123', // Optional\r\n  *     eventType: 'webinar', // Optional\r\n  *   },\r\n  *   apiUserName: 'yourAPIUSERNAME',\r\n  *   apiKey: 'yourAPIKEY',\r\n  *   localLink: 'http://localhost:3000', // Optional for Community Edition\r\n  * });\r\n  *\r\n  * if (response.success) {\r\n  *   console.log('Room created successfully:', response.data);\r\n  * } else {\r\n  *   console.error('Failed to create room:', response.data?.error);\r\n  * }\r\n  */\r\n\r\n  async createRoomOnMediaSFU({\r\n    payload,\r\n    apiUserName,\r\n    apiKey,\r\n    localLink,\r\n  }: {\r\n    payload: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n    apiUserName: string;\r\n    apiKey: string;\r\n    localLink?: string;\r\n  }): Promise<{\r\n    data: CreateJoinRoomResponse | CreateJoinRoomError | null;\r\n    success: boolean;\r\n  }> {\r\n    try {\r\n      if (\r\n        !apiUserName ||\r\n        !apiKey ||\r\n        apiUserName === 'yourAPIUSERNAME' ||\r\n        apiKey === 'yourAPIKEY' ||\r\n        apiKey.length !== 64 ||\r\n        apiUserName.length < 6\r\n      ) {\r\n        return { data: { error: 'Invalid credentials' }, success: false };\r\n      }\r\n\r\n      let API_URL =  'https://mediasfu.com/v1/rooms/';\r\n\r\n      if (localLink && localLink.trim() !== '' && !localLink.includes('mediasfu.com')) {\r\n        localLink = localLink.replace(/\\/$/, '');\r\n        API_URL = localLink + '/createRoom';\r\n      }\r\n\r\n      const response = await fetch(API_URL, {\r\n        method: 'POST',\r\n        headers: {\r\n          'Content-Type': 'application/json',\r\n          Authorization: `Bearer ${apiUserName}:${apiKey}`,\r\n        },\r\n        body: JSON.stringify(payload),\r\n      });\r\n\r\n      if (!response.ok) {\r\n        throw new Error(`HTTP error! Status: ${response.status}`);\r\n      }\r\n\r\n      const data = await response.json();\r\n      return { data, success: true };\r\n    } catch (error) {\r\n      const errorMessage = (error as any).reason ? (error as any).reason : 'unknown error';\r\n      return {\r\n        data: { error: `Unable to create room, ${errorMessage}` },\r\n        success: false,\r\n      };\r\n    }\r\n  }\r\n}\r\n","import { Component, Inject, Input, OnInit, Optional } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  ConnectSocketType, ShowAlert,\r\n  ConnectLocalSocketType, ResponseLocalConnection,\r\n  ResponseLocalConnectionData, RecordingParams, MeetingRoomParams,\r\n  CreateMediaSFURoomOptions,JoinMediaSFURoomOptions,\r\n} from '../../../@types/types';\r\nimport { CheckLimitsAndMakeRequest } from '../../../methods/utils/check-limits-and-make-request.service';\r\nimport { CreateRoomOnMediaSFU } from '../../../methods/utils/create-room-on-media-sfu.service';\r\nimport { CreateRoomOnMediaSFUType, JoinRoomOnMediaSFUType, JoinRoomOnMediaSFU } from '../../../methods/utils/join-room-on-media-sfu.service';\r\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\r\n\r\nexport interface JoinLocalEventRoomParameters {\r\n  eventID: string;\r\n  userName: string;\r\n  secureCode?: string;\r\n  videoPreference?: string | null;\r\n  audioPreference?: string | null;\r\n  audioOutputPreference?: string | null;\r\n}\r\n\r\nexport interface JoinLocalEventRoomOptions {\r\n  joinData: JoinLocalEventRoomParameters;\r\n  link?: string;\r\n}\r\n\r\nexport interface CreateLocalRoomParameters {\r\n  eventID: string;\r\n  duration: number;\r\n  capacity: number;\r\n  userName: string;\r\n  scheduledDate: Date;\r\n  secureCode: string;\r\n  waitRoom?: boolean;\r\n  recordingParams?: RecordingParams;\r\n  eventRoomParams?: MeetingRoomParams;\r\n  videoPreference?: string | null;\r\n  audioPreference?: string | null;\r\n  audioOutputPreference?: string | null;\r\n  mediasfuURL?: string;\r\n}\r\nexport interface CreateLocalRoomOptions {\r\n  createData: CreateLocalRoomParameters;\r\n  link?: string;\r\n}\r\n\r\nexport interface CreateJoinLocalRoomResponse {\r\n  success: boolean;\r\n  secret: string;\r\n  reason?: string;\r\n  url?: string;\r\n}\r\n\r\n// Type definitions for parameters and credentials\r\nexport interface PreJoinPageParameters {\r\n  imgSrc?: string;\r\n  showAlert?: ShowAlert;\r\n  updateIsLoadingModalVisible: (visible: boolean) => void;\r\n  connectSocket: ConnectSocketType;\r\n  connectLocalSocket?: ConnectLocalSocketType;\r\n  updateSocket: (socket: Socket) => void;\r\n  updateLocalSocket?: (socket: Socket) => void;\r\n  updateValidated: (validated: boolean) => void;\r\n  updateApiUserName: (userName: string) => void;\r\n  updateApiToken: (token: string) => void;\r\n  updateLink: (link: string) => void;\r\n  updateRoomName: (roomName: string) => void;\r\n  updateMember: (member: string) => void;\r\n}\r\n\r\nexport interface Credentials {\r\n  apiUserName: string;\r\n  apiKey: string;\r\n}\r\n\r\nexport interface PreJoinPageOptions {\r\n  localLink?: string;\r\n  connectMediaSFU?: boolean;\r\n  parameters: PreJoinPageParameters;\r\n  credentials?: Credentials;\r\n  returnUI?: boolean;\r\n  noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n  createMediaSFURoom?: CreateRoomOnMediaSFUType;\r\n  joinMediaSFURoom?: JoinRoomOnMediaSFUType;\r\n}\r\n\r\nexport type PreJoinPageType = (options: PreJoinPageOptions) => HTMLElement;\r\n\r\n/**\r\n * @fileoverview PreJoinPage component for handling room creation and joining on MediaSFU.\r\n *\r\n * @component\r\n * @selector app-pre-join-page\r\n * @standalone true\r\n * @templateUrl ./pre-join-page.component.html\r\n * @styleUrls ./pre-join-page.component.css\r\n * @imports [CommonModule, ReactiveFormsModule]\r\n *\r\n * @description\r\n * This component provides functionality for users to create or join a room on MediaSFU.\r\n * It includes form validation, error handling, and API requests to the MediaSFU service.\r\n *\r\n * @property {any} parameters - Input parameters for the component.\r\n * @property {Object} credentials - API credentials for MediaSFU.\r\n * @property {string} credentials.apiUserName - API username.\r\n * @property {string} credentials.apiKey - API key.\r\n * @property {boolean} isCreateMode - Flag to toggle between create and join modes.\r\n * @property {FormGroup} preJoinForm - Form group for pre-join form.\r\n * @property {string} error - Error message to display.\r\n *\r\n * @constructor\r\n * @param {FormBuilder} fb - FormBuilder service for creating form groups.\r\n * @param {HttpClient} http - HttpClient service for making HTTP requests.\r\n * @param {CookieService} cookieService - CookieService for managing cookies.\r\n *\r\n * @method ngOnInit\r\n * @description Lifecycle hook that is called after data-bound properties are initialized.\r\n *\r\n * @method toggleMode\r\n * @description Toggles between create and join modes and resets the error message.\r\n *\r\n * @method handleCreateRoom\r\n * @description Handles the creation of a room on MediaSFU. Validates form inputs, sends a request to create a room, and handles the response.\r\n *\r\n * @method handleJoinRoom\r\n * @description Handles joining a room on MediaSFU. Validates form inputs, sends a request to join a room, and handles the response.\r\n *\r\n * @method checkLimitsAndMakeRequest\r\n * @description Checks rate limits and makes a request to connect to a room. Handles unsuccessful attempts and updates the state accordingly.\r\n *\r\n * @method createRoomOnMediaSFU\r\n * @description Sends a request to create a room on MediaSFU.\r\n * @param {Object} params - Parameters for the request.\r\n * @param {any} params.payload - Payload for the request.\r\n * @param {string} params.apiUserName - API username.\r\n * @param {string} params.apiKey - API key.\r\n * @returns {Promise<{ data: CreateJoinRoomResponse | CreateJoinRoomError | null; success: boolean }>} Response from the API.\r\n *\r\n * @method joinRoomOnMediaSFU\r\n * @description Sends a request to join a room on MediaSFU.\r\n * @param {Object} params - Parameters for the request.\r\n * @param {any} params.payload - Payload for the request.\r\n * @param {string} params.apiUserName - API username.\r\n * @param {string} params.apiKey - API key.\r\n * @returns {Promise<{ data: CreateJoinRoomResponse | CreateJoinRoomError | null; success: boolean }>} Response from the API.\r\n *\r\n * @example\r\n * ```html\r\n * <app-pre-join-page\r\n *   [parameters]=\"preJoinPageParameters\"\r\n *   [credentials]=\"{ apiUserName: 'username', apiKey: 'apiKey' }\"\r\n *   [localLink]=\"'http://localhost:3000'\"\r\n *   [connectMediaSFU]=\"false\"\r\n * ></app-pre-join-page>\r\n * ```\r\n */\r\n\r\n@Component({\r\n  selector: 'app-pre-join-page',\r\n  templateUrl: './pre-join-page.component.html',\r\n  styleUrls: ['./pre-join-page.component.css'],\r\n  imports: [CommonModule, ReactiveFormsModule]\r\n})\r\nexport class PreJoinPage implements OnInit {\r\n  @Input() parameters: PreJoinPageParameters = {} as PreJoinPageParameters;\r\n  @Input() credentials: Credentials = { apiUserName: 'yourAPIUSERNAME', apiKey: 'yourAPIKEY' };\r\n  @Input() localLink: string | undefined = \"\";\r\n  @Input() connectMediaSFU: boolean | undefined = true;\r\n  @Input() returnUI?: boolean;\r\n  @Input() noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n  @Input() createMediaSFURoom?: CreateRoomOnMediaSFUType;\r\n  @Input() joinMediaSFURoom?: JoinRoomOnMediaSFUType;\r\n\r\n\r\n  isCreateMode = false;\r\n  preJoinForm: FormGroup;\r\n  error = '';\r\n\r\n  imgSrc: string = this.parameters.imgSrc || '';\r\n\r\n  localConnected = false;\r\n  localData: ResponseLocalConnectionData | undefined = undefined;\r\n  initSocket: Socket | undefined = undefined;\r\n\r\n  pending = new BehaviorSubject<boolean>(false);\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    @Optional() @Inject('parameters') injectedParameters: PreJoinPageParameters,\r\n    @Optional() @Inject('credentials') injectedCredentials: Credentials,\r\n    @Optional() @Inject('localLink') injectedLocalLink: string,\r\n    @Optional() @Inject('connectMediaSFU') injectedConnectMediaSFU: boolean,\r\n    @Optional() @Inject('returnUI') injectedReturnUI: boolean,\r\n    @Optional() @Inject('noUIPreJoinOptions') injectedNoUIPreJoinOptions: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions,\r\n    @Optional() @Inject('createMediaSFURoom') injectedCreateMediaSFURoom: CreateRoomOnMediaSFUType,\r\n    @Optional() @Inject('joinMediaSFURoom') injectedJoinMediaSFURoom: JoinRoomOnMediaSFUType,\r\n\r\n\r\n    private checkLimitsService: CheckLimitsAndMakeRequest,\r\n    private createRoomService: CreateRoomOnMediaSFU,\r\n    private joinRoomService: JoinRoomOnMediaSFU\r\n  ) {\r\n    this.preJoinForm = this.fb.group({\r\n      name: ['', Validators.required],\r\n      duration: [''],\r\n      eventType: [''],\r\n      capacity: [''],\r\n      eventID: [''],\r\n    });\r\n    this.parameters = injectedParameters || this.parameters;\r\n    this.credentials = injectedCredentials || this.credentials;\r\n    this.localLink = injectedLocalLink || this.localLink;\r\n    this.connectMediaSFU = injectedConnectMediaSFU !== undefined ? injectedConnectMediaSFU : this.connectMediaSFU;\r\n    this.returnUI = injectedReturnUI !== undefined ? injectedReturnUI : this.returnUI;\r\n    this.noUIPreJoinOptions = injectedNoUIPreJoinOptions || this.noUIPreJoinOptions;\r\n    this.createMediaSFURoom = injectedCreateMediaSFURoom || this.createMediaSFURoom;\r\n    this.joinMediaSFURoom = injectedJoinMediaSFURoom || this.joinMediaSFURoom;\r\n\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    // If we have a localLink and not connected yet, try to connect\r\n    if (this.localLink && !this.localConnected && !this.initSocket) {\r\n      this.connectLocalSocket().then(() => {\r\n        this.checkProceed();\r\n      });\r\n    } else {\r\n      // If no localLink or already connected, try to proceed\r\n      this.checkProceed();\r\n    }\r\n  }\r\n\r\n  private async connectLocalSocket(): Promise<void> {\r\n    try {\r\n      const response = await this.parameters.connectLocalSocket?.({ link: this.localLink! }) as ResponseLocalConnection;\r\n      if (response) {\r\n        this.localData = response.data;\r\n        this.initSocket = response.socket;\r\n        this.localConnected = true;\r\n      }\r\n    } catch (error: any) {\r\n      this.parameters.showAlert?.({\r\n        message: `Unable to connect to ${this.localLink}. ${error}`,\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n    }\r\n  }\r\n\r\n  private async checkProceed(): Promise<void> {\r\n    // If we do not need to return UI and we have noUIPreJoinOptions, proceed like in the React code\r\n    if (!this.returnUI && this.noUIPreJoinOptions) {\r\n      if ('action' in this.noUIPreJoinOptions && this.noUIPreJoinOptions.action === 'create') {\r\n        const createOptions = this.noUIPreJoinOptions as CreateMediaSFURoomOptions;\r\n        if (!createOptions.userName || !createOptions.duration || !createOptions.eventType || !createOptions.capacity) {\r\n          throw new Error('Please provide all the required parameters: userName, duration, eventType, capacity');\r\n        }\r\n        await this.handleCreateRoom();\r\n      } else if ('action' in this.noUIPreJoinOptions && this.noUIPreJoinOptions.action === 'join') {\r\n        const joinOptions = this.noUIPreJoinOptions as JoinMediaSFURoomOptions;\r\n        if (!joinOptions.userName || !joinOptions.meetingID) {\r\n          throw new Error('Please provide all the required parameters: userName, meetingID');\r\n        }\r\n        await this.handleJoinRoom();\r\n      } else {\r\n        throw new Error('Invalid options provided for creating/joining a room without UI.');\r\n      }\r\n    }\r\n  }\r\n\r\n  toggleMode(): void {\r\n    this.isCreateMode = !this.isCreateMode;\r\n    this.error = '';\r\n  }\r\n\r\n  async joinLocalRoom(options: JoinLocalEventRoomOptions): Promise<void> {\r\n    this.initSocket?.emit('joinEventRoom', options.joinData, (response: CreateJoinLocalRoomResponse) => {\r\n      if (response.success) {\r\n        this.parameters.updateSocket(this.initSocket!);\r\n        this.parameters.updateApiUserName(this.localData?.apiUserName || '');\r\n        this.parameters.updateApiToken(response.secret);\r\n        this.parameters.updateLink(options.link || '');\r\n        this.parameters.updateRoomName(options.joinData.eventID);\r\n        this.parameters.updateMember(options.joinData.userName);\r\n        this.parameters.updateIsLoadingModalVisible(false);\r\n        this.parameters.updateValidated(true);\r\n      } else {\r\n        this.parameters.updateIsLoadingModalVisible(false);\r\n        this.error = `Unable to join room. ${response.reason}`;\r\n      }\r\n    });\r\n  }\r\n\r\n  async createLocalRoom(options: CreateLocalRoomOptions): Promise<void> {\r\n    this.initSocket?.emit('createRoom', options.createData, (response: CreateJoinLocalRoomResponse) => {\r\n      if (response.success) {\r\n        this.parameters.updateSocket(this.initSocket!);\r\n        this.parameters.updateApiUserName(this.localData?.apiUserName || '');\r\n        this.parameters.updateApiToken(response.secret);\r\n        this.parameters.updateLink(options.link || '');\r\n        this.parameters.updateRoomName(options.createData.eventID);\r\n        // Update member as `userName` + \"_2\" to split in the room\r\n        this.parameters.updateMember(`${options.createData.userName}_2`);\r\n        this.parameters.updateIsLoadingModalVisible(false);\r\n        this.parameters.updateValidated(true);\r\n      } else {\r\n        this.parameters.updateIsLoadingModalVisible(false);\r\n        this.error = `Unable to create room. ${response.reason}`;\r\n      }\r\n    });\r\n  }\r\n\r\n  async roomCreator(options: { payload: any; apiUserName: string; apiKey: string; validate?: boolean }): Promise<any> {\r\n    const { payload, apiUserName, apiKey, validate = true } = options;\r\n    if (!this.createMediaSFURoom) {\r\n      this.createMediaSFURoom = this.createRoomService.createRoomOnMediaSFU;\r\n    }\r\n    const response = await this.createMediaSFURoom({\r\n      payload,\r\n      apiUserName,\r\n      apiKey,\r\n      localLink: this.localLink,\r\n    });\r\n\r\n    if (response.success && response.data && 'roomName' in response.data) {\r\n      await this.checkLimitsService.checkLimitsAndMakeRequest({\r\n        apiUserName: response.data.roomName,\r\n        apiToken: response.data.secret,\r\n        link: response.data.link,\r\n        userName: payload.userName,\r\n        parameters: this.parameters,\r\n        validate: validate,\r\n      });\r\n      return response;\r\n    } else {\r\n      this.parameters.updateIsLoadingModalVisible(false);\r\n      this.error = `Unable to create room. ${\r\n        response.data\r\n          ? 'error' in response.data\r\n            ? response.data.error\r\n            : ''\r\n          : ''\r\n      }`;\r\n    }\r\n  }\r\n\r\n  async handleCreateRoom(): Promise<void> {\r\n\r\n    if (this.pending.value) {\r\n      return;\r\n    }\r\n    this.pending.next(true);\r\n    let payload = {} as CreateMediaSFURoomOptions;\r\n\r\n    if (this.returnUI) {\r\n        const { name, duration, eventType, capacity } = this.preJoinForm.value;\r\n\r\n        if (!name || !duration || !eventType || !capacity) {\r\n          this.error = 'Please fill all the fields.';\r\n          return;\r\n        }\r\n\r\n        payload = {\r\n          action: 'create',\r\n          duration: parseInt(duration),\r\n          capacity: parseInt(capacity),\r\n          eventType,\r\n          userName: name,\r\n          recordOnly: false,\r\n        };\r\n      } else {\r\n        if (this.noUIPreJoinOptions && 'action' in this.noUIPreJoinOptions && this.noUIPreJoinOptions.action === 'create') {\r\n          payload = this.noUIPreJoinOptions as CreateMediaSFURoomOptions;\r\n        } else {\r\n          this.error = 'Invalid options provided for creating a room without UI.';\r\n          this.pending.next(false);\r\n          return;\r\n        }\r\n      }\r\n\r\n    this.parameters.updateIsLoadingModalVisible(true);\r\n\r\n    if (this.localLink) {\r\n      const secureCode =\r\n        Math.random().toString(30).substring(2, 14) +\r\n        Math.random().toString(30).substring(2, 14);\r\n      let eventID =\r\n        new Date().getTime().toString(30) +\r\n        new Date().getUTCMilliseconds() +\r\n        Math.floor(10 + Math.random() * 99).toString();\r\n      eventID = 'm' + eventID;\r\n      const eventRoomParams = this.localData?.meetingRoomParams_;\r\n      eventRoomParams!.type = payload.eventType as 'chat' | 'broadcast' | 'webinar' | 'conference';\r\n\r\n      const createData: CreateLocalRoomParameters = {\r\n        eventID: eventID,\r\n        duration: payload.duration,\r\n        capacity: payload.capacity,\r\n        userName: payload.userName,\r\n        scheduledDate: new Date(),\r\n        secureCode: secureCode,\r\n        waitRoom: false,\r\n        recordingParams: this.localData?.recordingParams_,\r\n        eventRoomParams: eventRoomParams,\r\n        videoPreference: null,\r\n        audioPreference: null,\r\n        audioOutputPreference: null,\r\n        mediasfuURL: '',\r\n      };\r\n\r\n      if (\r\n        this.connectMediaSFU &&\r\n        this.initSocket &&\r\n        this.localData &&\r\n        this.localData.apiUserName &&\r\n        this.localData.apiKey\r\n      ) {\r\n        payload.recordOnly = true; // allow production to MediaSFU only; no consumption\r\n        const response = await this.roomCreator({\r\n          payload,\r\n          apiUserName: this.localData.apiUserName,\r\n          apiKey: this.localData.apiKey,\r\n          validate: false,\r\n        });\r\n\r\n        if (response && response.success && response.data && 'roomName' in response.data) {\r\n          createData.eventID = response.data.roomName;\r\n          createData.secureCode = response.data.secureCode;\r\n          createData.mediasfuURL = response.data.publicURL;\r\n          await this.createLocalRoom({ createData: createData, link: response.data.link });\r\n        } else {\r\n          this.pending.next(false);\r\n          this.parameters.updateIsLoadingModalVisible(false);\r\n          this.error = 'Unable to create room on MediaSFU.';\r\n          try {\r\n            this.parameters.updateSocket(this.initSocket!);\r\n            await this.createLocalRoom({ createData: createData });\r\n          } catch (error: any) {\r\n            this.pending.next(false);\r\n            this.parameters.updateIsLoadingModalVisible(false);\r\n            this.error = `Unable to create room. ${error}`;\r\n          }\r\n        }\r\n      } else {\r\n        try {\r\n          this.parameters.updateSocket(this.initSocket!);\r\n          await this.createLocalRoom({ createData: createData });\r\n        } catch (error: any) {\r\n          this.pending.next(false);\r\n          this.parameters.updateIsLoadingModalVisible(false);\r\n          this.error = `Unable to create room. ${error}`;\r\n        }\r\n      }\r\n    } else {\r\n      await this.roomCreator({\r\n        payload,\r\n        apiUserName: this.credentials.apiUserName,\r\n        apiKey: this.credentials.apiKey,\r\n        validate: true,\r\n      });\r\n      this.pending.next(false);\r\n    }\r\n  }\r\n\r\n  async handleJoinRoom(): Promise<void> {\r\n    if (this.pending.value) {\r\n      return;\r\n    }\r\n    this.pending.next(true);\r\n    let payload = {} as JoinMediaSFURoomOptions;\r\n\r\n    if (this.returnUI) {\r\n      const { name, eventID } = this.preJoinForm.value;\r\n\r\n      if (!name || !eventID) {\r\n        this.error = 'Please fill all the fields.';\r\n        return;\r\n      }\r\n\r\n      payload = {\r\n        action: 'join',\r\n        meetingID: eventID,\r\n        userName: name,\r\n      };\r\n    } else {\r\n      if (this.noUIPreJoinOptions && 'action' in this.noUIPreJoinOptions && this.noUIPreJoinOptions.action === 'join') {\r\n        payload = this.noUIPreJoinOptions as JoinMediaSFURoomOptions;\r\n      } else {\r\n        this.error = 'Invalid options provided for joining a room without UI.';\r\n        this.pending.next(false);\r\n        return;\r\n      }\r\n    }\r\n\r\n    if (this.localLink && !this.localLink.includes('mediasfu.com')) {\r\n      const joinData: JoinLocalEventRoomParameters = {\r\n        eventID: payload.meetingID,\r\n        userName: payload.userName,\r\n        secureCode: '',\r\n        videoPreference: null,\r\n        audioPreference: null,\r\n        audioOutputPreference: null,\r\n      };\r\n\r\n      await this.joinLocalRoom({ joinData: joinData });\r\n      this.pending.next(false);\r\n      return;\r\n    }\r\n\r\n    this.parameters.updateIsLoadingModalVisible(true);\r\n    try {\r\n      if (!this.joinMediaSFURoom) {\r\n        this.joinMediaSFURoom = this.joinRoomService.joinRoomOnMediaSFU;\r\n      }\r\n    const response = await this.joinMediaSFURoom({\r\n      payload,\r\n      apiUserName: this.credentials.apiUserName,\r\n      apiKey: this.credentials.apiKey,\r\n      localLink: this.localLink,\r\n    });\r\n\r\n    if (response.success && response.data && 'roomName' in response.data) {\r\n      await this.checkLimitsService.checkLimitsAndMakeRequest({\r\n        apiUserName: response.data.roomName,\r\n        apiToken: response.data.secret,\r\n        link: response.data.link,\r\n        userName: payload.userName,\r\n        parameters: this.parameters,\r\n        validate: true,\r\n      });\r\n    this.error = '';\r\n    this.pending.next(false);\r\n    } else {\r\n      this.parameters.updateIsLoadingModalVisible(false);\r\n        this.pending.next(false);\r\n        this.error = `Unable to connect to room. ${\r\n        response.data ? ('error' in response.data ? response.data.error : '') : ''\r\n      }`;\r\n    }\r\n    } catch (error) {\r\n      this.parameters.updateIsLoadingModalVisible(false);\r\n      this.error = `Unable to connect. ${(error as any).message}`;\r\n  }\r\n}\r\n}\r\n","<div class=\"container-fluid\" *ngIf=\"returnUI !== false\">\r\n  <div class=\"logo-container\">\r\n    <img [src]=\"imgSrc || 'https://mediasfu.com/images/logo192.png'\" class=\"logo-image\" alt=\"Logo\" />\r\n  </div>\r\n  <div class=\"input-container\">\r\n    <form [formGroup]=\"preJoinForm\">\r\n      <input type=\"text\" placeholder=\"Display Name\" formControlName=\"name\" class=\"input-field\" />\r\n      <div *ngIf=\"isCreateMode\">\r\n        <input type=\"text\" placeholder=\"Duration (minutes)\" formControlName=\"duration\" class=\"input-field\" />\r\n        <select formControlName=\"eventType\" class=\"select-field\">\r\n          <option value=\"\">Select Event Type</option>\r\n          <option value=\"chat\">Chat</option>\r\n          <option value=\"broadcast\">Broadcast</option>\r\n          <option value=\"webinar\">Webinar</option>\r\n          <option value=\"conference\">Conference</option>\r\n        </select>\r\n        <input type=\"text\" placeholder=\"Room Capacity\" formControlName=\"capacity\" class=\"input-field\" />\r\n        <button type=\"button\" (click)=\"handleCreateRoom()\" class=\"action-button\">Create Room</button>\r\n      </div>\r\n      <div *ngIf=\"!isCreateMode\">\r\n        <input type=\"text\" placeholder=\"Event ID\" formControlName=\"eventID\" class=\"input-field\" />\r\n        <button type=\"button\" (click)=\"handleJoinRoom()\" class=\"action-button\">Join Room</button>\r\n      </div>\r\n      <p *ngIf=\"error\" class=\"error\">{{ error }}</p>\r\n    </form>\r\n  </div>\r\n  <div class=\"or-container\">\r\n    <span class=\"or-text\">OR</span>\r\n  </div>\r\n  <div class=\"toggle-container\">\r\n    <button type=\"button\" (click)=\"toggleMode()\" class=\"toggle-button\">\r\n      {{ isCreateMode ? 'Switch to Join Mode' : 'Switch to Create Mode' }}\r\n    </button>\r\n  </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { MeetingIdComponent } from '../../menu-components/meeting-id-component/meeting-id-component.component';\r\nimport { MeetingPasscodeComponent } from '../../menu-components/meeting-passcode-component/meeting-passcode-component.component';\r\nimport { ShareButtonsComponent } from '../../menu-components/share-buttons-component/share-buttons-component.component';\r\nimport { EventType } from '../../../@types/types';\r\n\r\nexport interface ShareEventModalOptions {\r\n  backgroundColor?: string;\r\n  isShareEventModalVisible: boolean;\r\n  onShareEventClose: () => void;\r\n  shareButtons?: boolean;\r\n  position?: string;\r\n  roomName: string;\r\n  adminPasscode?: string;\r\n  islevel?: string;\r\n  eventType: EventType;\r\n  localLink?: string;\r\n}\r\n\r\nexport type ShareEventModalType = (options: ShareEventModalOptions) => void;\r\n\r\n/**\r\n * Component for displaying a modal to share event details.\r\n *\r\n * @component\r\n * @selector app-share-event-modal\r\n * @templateUrl ./share-event-modal.component.html\r\n * @styleUrls ./share-event-modal.component.css\r\n *\r\n * @imports CommonModule, FontAwesomeModule, MeetingIdComponent, MeetingPasscodeComponent, ShareButtonsComponent\r\n *\r\n * @property {string} backgroundColor - Background color of the modal content.\r\n * @property {boolean} isShareEventModalVisible - Visibility state of the share event modal.\r\n * @property {Function} onShareEventClose - Callback function to handle modal close event.\r\n * @property {string} roomName - Name of the room to be shared.\r\n * @property {string} adminPasscode - Admin passcode for the room.\r\n * @property {string} islevel - Level of the event (e.g., admin, user).\r\n * @property {string} position - Position of the modal on the screen (e.g., topRight, bottomLeft).\r\n * @property {boolean} shareButtons - Flag to display share buttons in the modal.\r\n * @property {EventType} eventType - Type of event (e.g., chat, broadcast, webinar).\r\n * @property {string} localLink - Local link for the event (Community Edition server).\r\n *\r\n * @method handleClose - Closes the share event modal by invoking the onShareEventClose callback.\r\n *\r\n * @getter modalContainerStyle - Returns the style object for the modal container.\r\n * @getter modalContentStyle - Returns the style object for the modal content.\r\n * @example\r\n * ```html\r\n * <app-share-event-modal\r\n *   [backgroundColor]=\"'rgba(255, 255, 255, 0.25)'\"\r\n *   [isShareEventModalVisible]=\"isModalVisible\"\r\n *   [onShareEventClose]=\"handleModalClose\"\r\n *   [roomName]=\"roomName\"\r\n *   [adminPasscode]=\"adminPasscode\"\r\n *   [islevel]=\"userLevel\"\r\n *   [position]=\"'topRight'\"\r\n *   [shareButtons]=\"true\"\r\n *   [eventType]=\"eventType\"\r\n *   [localLink]=\"localLink\"\r\n * ></app-share-event-modal>\r\n * ```\r\n */\r\n@Component({\r\n    selector: 'app-share-event-modal',\r\n    templateUrl: './share-event-modal.component.html',\r\n    styleUrls: ['./share-event-modal.component.css'],\r\n    imports: [\r\n        CommonModule,\r\n        FontAwesomeModule,\r\n        MeetingIdComponent,\r\n        MeetingPasscodeComponent,\r\n        ShareButtonsComponent,\r\n    ]\r\n})\r\nexport class ShareEventModal {\r\n  @Input() backgroundColor = 'rgba(255, 255, 255, 0.25)';\r\n  @Input() isShareEventModalVisible = false;\r\n  @Input() onShareEventClose!: () => void;\r\n  @Input() roomName!: string;\r\n  @Input() adminPasscode!: string;\r\n  @Input() islevel!: string;\r\n  @Input() position = 'topRight';\r\n  @Input() shareButtons = true;\r\n  @Input() eventType!: EventType;\r\n  @Input() localLink: string = '';\r\n\r\n  faTimes = faTimes;\r\n\r\n  handleClose() {\r\n    this.onShareEventClose();\r\n  }\r\n\r\n  get modalContainerStyle() {\r\n    return {\r\n      position: 'fixed',\r\n      top: 0,\r\n      left: 0,\r\n      width: '100%',\r\n      height: '100%',\r\n      backgroundColor: 'rgba(0, 0, 0, 0.5)',\r\n      display: this.isShareEventModalVisible ? 'block' : 'none',\r\n      zIndex: 999,\r\n    };\r\n  }\r\n\r\n  get modalContentStyle() {\r\n    const screenWidth = window.innerWidth;\r\n    let modalWidth = 0.8 * screenWidth;\r\n    if (modalWidth > 350) {\r\n      modalWidth = 350;\r\n    }\r\n\r\n    return {\r\n      position: 'fixed',\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '10px',\r\n      width: `${modalWidth}px`,\r\n      maxHeight: '60%',\r\n      overflowY: 'auto',\r\n      top: this.position.includes('top') ? '10px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '10px' : 'auto',\r\n      left: this.position.includes('Left') ? '10px' : 'auto',\r\n      right: this.position.includes('Right') ? '10px' : 'auto',\r\n    };\r\n  }\r\n}\r\n","<div [ngStyle]=\"modalContainerStyle\">\r\n  <div [ngStyle]=\"modalContentStyle\">\r\n    <div style=\"display: flex; flex-direction: row-reverse; margin-bottom: 15px;\">\r\n      <div (click)=\"handleClose()\" style=\"padding: 5px;\">\r\n        <fa-icon [icon]=\"faTimes\" size=\"xl\" style=\"font-size: 20px; color: black;\"></fa-icon>\r\n      </div>\r\n    </div>\r\n    <hr style=\"height: 1px; background-color: black; margin: 5px 0;\" />\r\n    <div style=\"flex: 1;\">\r\n      <div style=\"margin-bottom: 10px;\" *ngIf=\"islevel === '2'\">\r\n        <app-meeting-passcode-component [meetingPasscode]=\"adminPasscode\"></app-meeting-passcode-component>\r\n      </div>\r\n      <div style=\"margin-bottom: 10px;\">\r\n        <app-meeting-id-component [meetingID]=\"roomName\"></app-meeting-id-component>\r\n      </div>\r\n      <div *ngIf=\"shareButtons\">\r\n        <app-share-buttons-component [meetingID]=\"roomName\" [eventType]=\"eventType\" [localLink]=\"localLink\"></app-share-buttons-component>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Inject, OnInit, Optional } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faQrcode } from '@fortawesome/free-solid-svg-icons';\r\nimport { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { ZXingScannerModule } from '@zxing/ngx-scanner'; // Import the zxing-ngx-scanner module\r\nimport { Socket } from 'socket.io-client';\r\nimport { ConnectSocketType } from '../../../sockets/socket-manager.service';\r\nimport { ShowAlert } from '../../../@types/types';\r\n\r\nconst MAX_ATTEMPTS = 10; // Maximum number of unsuccessful attempts before rate limiting\r\nconst RATE_LIMIT_DURATION = 3 * 60 * 60 * 1000; // 3 hours in milliseconds\r\n\r\nexport interface WelcomePageParameters {\r\n  imgSrc?: string;\r\n  showAlert?: ShowAlert;\r\n  updateIsLoadingModalVisible: (visible: boolean) => void;\r\n  connectSocket: ConnectSocketType;\r\n  updateSocket: (socket: Socket) => void;\r\n  updateValidated: (validated: boolean) => void;\r\n  updateApiUserName: (apiUserName: string) => void;\r\n  updateApiToken: (apiToken: string) => void;\r\n  updateLink: (link: string) => void;\r\n  updateRoomName: (roomName: string) => void;\r\n  updateMember: (userName: string) => void;\r\n}\r\n\r\n// Define the prop type for the component\r\nexport interface WelcomePageOptions {\r\n  parameters: WelcomePageParameters;\r\n}\r\n\r\n// Define the type for the component function\r\nexport type WelcomePageType = (options: WelcomePageOptions) => HTMLElement;\r\n\r\n/**\r\n * @component WelcomePage\r\n * @description Component for handling room creation and joining on MediaSFU with QR scanning and form submission.\r\n *\r\n * @selector app-welcome-page\r\n * @standalone true\r\n * @templateUrl ./welcome-page.component.html\r\n * @styleUrls ['./welcome-page.component.css']\r\n * @imports [ZXingScannerModule, CommonModule, FontAwesomeModule, ReactiveFormsModule]\r\n *\r\n * @example\r\n * ```html\r\n * <app-welcome-page [parameters]=\"welcomeParameters\"></app-welcome-page>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n    selector: 'app-welcome-page',\r\n    templateUrl: './welcome-page.component.html',\r\n    styleUrls: ['./welcome-page.component.css'],\r\n    imports: [ZXingScannerModule, CommonModule, FontAwesomeModule, ReactiveFormsModule],\r\n    providers: [CookieService]\r\n})\r\nexport class WelcomePage implements OnInit {\r\n  welcomeForm: FormGroup;\r\n  error = '';\r\n  isScannerVisible = false;\r\n  scannedData: any = null;\r\n  parameters: WelcomePageParameters = {} as WelcomePageParameters;\r\n  faQrcode = faQrcode;\r\n  allowedCameras: MediaDeviceInfo[] = []; // List of allowed cameras\r\n  currentDevice: MediaDeviceInfo | null = null; // Active camera device\r\n  imgSrc = '';\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    private cookieService: CookieService,\r\n    @Optional() @Inject('parameters') injectedParameters: WelcomePageParameters,\r\n  ) {\r\n    this.welcomeForm = this.fb.group({\r\n      name: [\r\n        '',\r\n        [Validators.required, Validators.pattern('^[a-zA-Z0-9]+$'), Validators.maxLength(12)],\r\n      ],\r\n      secret: [\r\n        '',\r\n        [Validators.required, Validators.pattern('^[a-zA-Z0-9]+$'), Validators.maxLength(64)],\r\n      ],\r\n      eventID: [\r\n        '',\r\n        [Validators.required, Validators.pattern('^[a-zA-Z0-9]+$'), Validators.maxLength(32)],\r\n      ],\r\n      link: ['', [Validators.required, Validators.pattern('^https?://.+mediasfu\\\\.com.+$')]],\r\n    });\r\n    this.parameters = injectedParameters || this.parameters;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.askForCameraPermission();\r\n  }\r\n\r\n  async checkLimitsAndMakeRequest(\r\n    apiUserName: string,\r\n    apiToken: string,\r\n    link: string,\r\n    userName: string,\r\n  ) {\r\n    const TIMEOUT_DURATION = 10000; // 10 seconds\r\n\r\n    let unsuccessfulAttempts = parseInt(this.cookieService.get('unsuccessfulAttempts')) || 0;\r\n    let lastRequestTimestamp = parseInt(this.cookieService.get('lastRequestTimestamp')) || 0;\r\n\r\n    if (unsuccessfulAttempts >= MAX_ATTEMPTS) {\r\n      if (Date.now() - lastRequestTimestamp < RATE_LIMIT_DURATION) {\r\n        this.parameters.showAlert?.({\r\n          message: 'Too many unsuccessful attempts. Please try again later.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n        this.cookieService.set('lastRequestTimestamp', Date.now().toString());\r\n        return;\r\n      } else {\r\n        unsuccessfulAttempts = 0;\r\n        this.cookieService.set('unsuccessfulAttempts', unsuccessfulAttempts.toString());\r\n        this.cookieService.set('lastRequestTimestamp', Date.now().toString());\r\n      }\r\n    }\r\n\r\n    try {\r\n      this.parameters.updateIsLoadingModalVisible(true);\r\n\r\n      const socketPromise = this.parameters.connectSocket({ apiUserName, apiToken, link });\r\n      const timeoutPromise = new Promise((_, reject) =>\r\n        setTimeout(() => reject(new Error('Request timed out')), TIMEOUT_DURATION),\r\n      );\r\n\r\n      const socket = await Promise.race([socketPromise, timeoutPromise]);\r\n\r\n      if (socket && socket instanceof Socket && socket.id) {\r\n        unsuccessfulAttempts = 0;\r\n        this.cookieService.set('unsuccessfulAttempts', unsuccessfulAttempts.toString());\r\n        this.cookieService.set('lastRequestTimestamp', Date.now().toString());\r\n        this.parameters.updateSocket(socket);\r\n        this.parameters.updateApiUserName(apiUserName);\r\n        this.parameters.updateApiToken(apiToken);\r\n        this.parameters.updateLink(link);\r\n        this.parameters.updateRoomName(apiUserName);\r\n        this.parameters.updateMember(userName);\r\n        this.parameters.updateValidated(true);\r\n      } else {\r\n        unsuccessfulAttempts += 1;\r\n        this.cookieService.set('unsuccessfulAttempts', unsuccessfulAttempts.toString());\r\n        this.cookieService.set('lastRequestTimestamp', Date.now().toString());\r\n        this.parameters.updateIsLoadingModalVisible(false);\r\n\r\n        if (unsuccessfulAttempts >= MAX_ATTEMPTS) {\r\n          this.parameters.showAlert?.({\r\n            message: 'Too many unsuccessful attempts. Please try again later.',\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n        } else {\r\n          this.parameters.showAlert?.({\r\n            message: 'Invalid credentials.',\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n        }\r\n      }\r\n    } catch (error) {\r\n      this.parameters.showAlert?.({\r\n        message: 'Unable to connect. Check your credentials and try again.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n\r\n      unsuccessfulAttempts += 1;\r\n      this.cookieService.set('unsuccessfulAttempts', unsuccessfulAttempts.toString());\r\n      this.cookieService.set('lastRequestTimestamp', Date.now().toString());\r\n      this.parameters.updateIsLoadingModalVisible(false);\r\n    }\r\n  }\r\n\r\n  handleScanSuccess(data: any) {\r\n    try {\r\n      const scannedText = data;\r\n      const parts = scannedText.split(';');\r\n\r\n      if (parts.length === 5) {\r\n        const [userName, link, userSecret, passWord, meetingID] = parts;\r\n\r\n        if (\r\n          !userName.length ||\r\n          !link.length ||\r\n          !userSecret.length ||\r\n          !passWord.length ||\r\n          !meetingID.length ||\r\n          !this.validateAlphanumeric(userName) ||\r\n          !this.validateAlphanumeric(userSecret) ||\r\n          !this.validateAlphanumeric(passWord) ||\r\n          !this.validateAlphanumeric(meetingID) ||\r\n          userSecret.length !== 64 ||\r\n          userName.length > 12 ||\r\n          userName.length < 2 ||\r\n          meetingID.length > 32 ||\r\n          meetingID.length < 8 ||\r\n          !link.includes('mediasfu.com') ||\r\n          meetingID.toLowerCase().startsWith('d')\r\n        ) {\r\n          this.parameters.showAlert?.({\r\n            message: 'Invalid scanned data.',\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n          return;\r\n        }\r\n\r\n        this.welcomeForm.setValue({\r\n          name: userName,\r\n          secret: userSecret,\r\n          eventID: meetingID,\r\n          link: link,\r\n        });\r\n\r\n        this.isScannerVisible = false;\r\n        this.scannedData = null;\r\n\r\n        this.checkLimitsAndMakeRequest(meetingID, userSecret, link, userName);\r\n      } else {\r\n        this.parameters.showAlert?.({\r\n          message: 'Invalid scanned data.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n      }\r\n    } catch (error) {\r\n      this.parameters.showAlert?.({\r\n        message: 'Invalid scanned data.',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n    }\r\n  }\r\n\r\n  validateAlphanumeric(str: string): boolean {\r\n    const alphanumericRegex = /^[a-zA-Z0-9]+$/;\r\n    return alphanumericRegex.test(str);\r\n  }\r\n\r\n  // Method to list available cameras\r\n  askForCameraPermission() {\r\n    navigator.mediaDevices\r\n      .enumerateDevices()\r\n      .then((devices: MediaDeviceInfo[]) => {\r\n        this.allowedCameras = devices.filter((device) => device.kind === 'videoinput');\r\n        if (this.allowedCameras.length > 0) {\r\n          this.currentDevice = this.allowedCameras[0]; // Set the first available camera as the default\r\n        }\r\n      })\r\n      .catch((err) => {\r\n        console.error(err);\r\n        this.parameters.showAlert?.({\r\n          message: 'Camera access denied.',\r\n          type: 'danger',\r\n          duration: 3000,\r\n        });\r\n      });\r\n  }\r\n\r\n  toggleScanner() {\r\n    this.isScannerVisible = !this.isScannerVisible;\r\n    if (this.isScannerVisible) {\r\n      this.askForCameraPermission();\r\n    }\r\n  }\r\n\r\n  async handleConfirm() {\r\n    if (this.welcomeForm.invalid) {\r\n      this.error = 'Please fill all the fields correctly.';\r\n      return;\r\n    }\r\n\r\n    const { name, secret, eventID, link } = this.welcomeForm.value;\r\n\r\n    await this.checkLimitsAndMakeRequest(eventID, secret, link, name);\r\n  }\r\n}\r\n","<div class=\"container\">\r\n  <div class=\"logo-container\">\r\n    <img [src]=\"imgSrc || 'https://mediasfu.com/images/logo192.png'\" class=\"logo-image\" alt=\"Logo\" />\r\n  </div>\r\n  <form [formGroup]=\"welcomeForm\" (ngSubmit)=\"handleConfirm()\">\r\n    <div class=\"input-container\">\r\n      <input\r\n        formControlName=\"name\"\r\n        type=\"text\"\r\n        placeholder=\"Event Display Name\"\r\n        class=\"input-field\"\r\n      />\r\n      <input\r\n        formControlName=\"secret\"\r\n        type=\"text\"\r\n        placeholder=\"Event Token (Secret)\"\r\n        class=\"input-field\"\r\n      />\r\n      <input\r\n        formControlName=\"eventID\"\r\n        type=\"text\"\r\n        placeholder=\"Event ID\"\r\n        class=\"input-field\"\r\n      />\r\n      <input\r\n        formControlName=\"link\"\r\n        type=\"text\"\r\n        placeholder=\"Event Link\"\r\n        class=\"input-field\"\r\n      />\r\n    </div>\r\n    <button type=\"submit\" class=\"confirm-button\">Confirm</button>\r\n  </form>\r\n\r\n  <div class=\"scanner-container\">\r\n    <div class=\"or-container\">\r\n      <hr class=\"horizontal-line\" />\r\n      <span class=\"or-text\">OR</span>\r\n      <hr class=\"horizontal-line\" />\r\n    </div>\r\n    <div *ngIf=\"isScannerVisible\" class=\"scanner-wrapper\">\r\n      <zxing-scanner\r\n        [device]=\"currentDevice!\"\r\n        (scanSuccess)=\"handleScanSuccess($event)\"\r\n        [tryHarder]=\"true\"\r\n      ></zxing-scanner>\r\n    </div>\r\n    <div class=\"scan-button-container\" *ngIf=\"!isScannerVisible\">\r\n      <button (click)=\"toggleScanner()\" class=\"scan-button\">\r\n        <fa-icon [icon]=\"faQrcode\" style=\"margin-right: 5px\"></fa-icon>\r\n        Scan QR Code\r\n      </button>\r\n    </div>\r\n  </div>\r\n\r\n  <div class=\"additional-options-container\">\r\n    <p>\r\n      Provide the event details either by typing manually or scanning the\r\n      QR-code to autofill.\r\n    </p>\r\n    <p>Don't have a secret?</p>\r\n    <a\r\n      href=\"https://meeting.mediasfu.com/meeting/start/\"\r\n      target=\"_blank\"\r\n      class=\"link\"\r\n      >Get one from mediasfu.com</a\r\n    >\r\n  </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  faMicrophone,\r\n  faMicrophoneSlash,\r\n  faComment,\r\n  faTrash,\r\n  faDotCircle,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport {\r\n  CoHostResponsibility,\r\n  MessageParticipantsType,\r\n  MuteParticipantsType,\r\n  Participant,\r\n  RemoveParticipantsType,\r\n  ShowAlert,\r\n} from '../../../@types/types'; // Adjust the import based on your file structure\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface ParticipantListItemOptions {\r\n  participant: Participant;\r\n  isBroadcast: boolean;\r\n  onMuteParticipants: MuteParticipantsType;\r\n  onMessageParticipants: MessageParticipantsType;\r\n  onRemoveParticipants: RemoveParticipantsType;\r\n  socket: Socket;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  member: string;\r\n  islevel: string;\r\n  showAlert?: ShowAlert;\r\n  coHost: string;\r\n  roomName: string;\r\n  participants: Participant[];\r\n  updateIsMessagesModalVisible: (isVisible: boolean) => void;\r\n  updateDirectMessageDetails: (participant: Participant | null) => void;\r\n  updateStartDirectMessage: (start: boolean) => void;\r\n  updateParticipants: (participants: Participant[]) => void;\r\n}\r\n\r\nexport type ParticipantListItemType = (options: ParticipantListItemOptions) => HTMLElement;\r\n\r\n\r\n/**\r\n * Component representing an individual participant item in the participant list.\r\n * Provides controls for muting, messaging, and removing a participant.\r\n *\r\n * @component\r\n * @selector app-participant-list-item\r\n * @standalone true\r\n * @templateUrl ./participant-list-item.component.html\r\n * @styleUrls ['./participant-list-item.component.css']\r\n * @imports [CommonModule, FontAwesomeModule]\r\n *\r\n * @example\r\n * ```html\r\n * <app-participant-list-item [participant]=\"participant\" [isBroadcast]=\"isBroadcast\"\r\n *                            [onMuteParticipants]=\"muteHandler\" [onMessageParticipants]=\"messageHandler\"\r\n *                            [onRemoveParticipants]=\"removeHandler\" [socket]=\"socket\" [member]=\"member\">\r\n * </app-participant-list-item>\r\n * ```\r\n */\r\n\r\n@Component({\r\n    selector: 'app-participant-list-item',\r\n    templateUrl: './participant-list-item.component.html',\r\n    styleUrls: ['./participant-list-item.component.css'],\r\n    imports: [CommonModule, FontAwesomeModule]\r\n})\r\nexport class ParticipantListItem {\r\n  @Input() participant!: Participant;\r\n  @Input() isBroadcast!: boolean;\r\n  @Input() onMuteParticipants!: (params: any) => Promise<void>;\r\n  @Input() onMessageParticipants!: (params: any) => void;\r\n  @Input() onRemoveParticipants!: (params: any) => Promise<void>;\r\n  @Input() socket!: Socket;\r\n  @Input() coHostResponsibility!: CoHostResponsibility[];\r\n  @Input() member!: string;\r\n  @Input() islevel!: string;\r\n  @Input() showAlert?: ShowAlert;\r\n  @Input() coHost!: string;\r\n  @Input() roomName!: string;\r\n  @Input() updateIsMessagesModalVisible!: (isVisible: boolean) => void;\r\n  @Input() updateDirectMessageDetails!: (participant: Participant | null) => void;\r\n  @Input() updateStartDirectMessage!: (start: boolean) => void;\r\n  @Input() participants!: Participant[];\r\n  @Input() updateParticipants!: (participants: Participant[]) => void;\r\n\r\n  faMicrophone = faMicrophone;\r\n  faMicrophoneSlash = faMicrophoneSlash;\r\n  faComment = faComment;\r\n  faTrash = faTrash;\r\n  faDotCircle = faDotCircle;\r\n\r\n  getIconName() {\r\n    return this.participant.muted ? this.faMicrophoneSlash : this.faMicrophone;\r\n  }\r\n\r\n  muteParticipant() {\r\n    if (this.onMuteParticipants) {\r\n      this.onMuteParticipants({\r\n        socket: this.socket,\r\n        participant: this.participant,\r\n        coHostResponsibility: this.coHostResponsibility,\r\n        member: this.member,\r\n        islevel: this.islevel,\r\n        showAlert: this.showAlert,\r\n        coHost: this.coHost,\r\n        roomName: this.roomName,\r\n      });\r\n    }\r\n  }\r\n\r\n  messageParticipant() {\r\n    if (this.onMessageParticipants) {\r\n      this.onMessageParticipants({\r\n        participant: this.participant,\r\n        coHostResponsibility: this.coHostResponsibility,\r\n        member: this.member,\r\n        islevel: this.islevel,\r\n        showAlert: this.showAlert,\r\n        coHost: this.coHost,\r\n        updateIsMessagesModalVisible: this.updateIsMessagesModalVisible,\r\n        updateDirectMessageDetails: this.updateDirectMessageDetails,\r\n        updateStartDirectMessage: this.updateStartDirectMessage,\r\n      });\r\n    }\r\n  }\r\n\r\n  removeParticipant() {\r\n    if (this.onRemoveParticipants) {\r\n      this.onRemoveParticipants({\r\n        socket: this.socket,\r\n        participant: this.participant,\r\n        coHostResponsibility: this.coHostResponsibility,\r\n        member: this.member,\r\n        islevel: this.islevel,\r\n        showAlert: this.showAlert,\r\n        coHost: this.coHost,\r\n        roomName: this.roomName,\r\n        participants: this.participants,\r\n        updateParticipants: this.updateParticipants,\r\n      });\r\n    }\r\n  }\r\n}\r\n","<div class=\"container\" style=\"display: flex; flex-direction: row; align-items: center; margin-bottom: 0px; margin-top: 0px;\">\r\n  <div class=\"nameContainer\" style=\"flex: 4;\">\r\n    <p class=\"nameText\" style=\"font-size: 16px;\">\r\n      {{ participant.islevel === '2' ? participant.name + ' (host)' : participant.name }}\r\n    </p>\r\n  </div>\r\n  <div *ngIf=\"!isBroadcast\" class=\"iconContainer\" style=\"flex: 1; align-items: center;\">\r\n    <fa-icon [icon]=\"participant.muted ? faDotCircle : faDotCircle\" [style.font-size.px]=\"20\" [style.color]=\"participant.muted ? 'red' : 'green'\"></fa-icon>\r\n  </div>\r\n  <div *ngIf=\"!isBroadcast\" class=\"buttonContainer\" style=\"flex: 2; align-items: flex-end;\">\r\n    <button (click)=\"muteParticipant()\" style=\"padding: 5px; border-radius: 5px; align-items: center; background-color: #007bff; color: white;\">\r\n      <fa-icon [icon]=\"getIconName()\" style=\"font-size: 20px;\"></fa-icon>\r\n    </button>\r\n  </div>\r\n  <div *ngIf=\"!isBroadcast\" class=\"buttonContainer\" style=\"flex: 2; align-items: flex-end;\">\r\n    <button (click)=\"messageParticipant()\" style=\"padding: 5px; border-radius: 5px; align-items: center; background-color: #007bff; color: white;\">\r\n      <fa-icon [icon]=\"faComment\" style=\"font-size: 20px; color: white;\"></fa-icon>\r\n    </button>\r\n  </div>\r\n  <div class=\"buttonContainer\" style=\"flex: 2; align-items: flex-end;\">\r\n    <button (click)=\"removeParticipant()\" style=\"padding: 5px; border-radius: 5px; align-items: center; background-color: #dc3545; color: white;\">\r\n      <fa-icon [icon]=\"faTrash\" style=\"font-size: 20px; color: white;\"></fa-icon>\r\n    </button>\r\n  </div>\r\n</div>\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\nimport { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ParticipantListItem } from '../participant-list-item/participant-list-item.component';\r\nimport {\r\n  CoHostResponsibility,\r\n  Participant,\r\n  ShowAlert,\r\n  MuteParticipantsOptions,\r\n  MessageParticipantsOptions,\r\n  RemoveParticipantsOptions,\r\n} from '../../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface ParticipantListOptions {\r\n  participants: Participant[];\r\n  isBroadcast: boolean;\r\n  onMuteParticipants: (options: MuteParticipantsOptions) => Promise<void>;\r\n  onMessageParticipants: (options: MessageParticipantsOptions) => void;\r\n  onRemoveParticipants: (options: RemoveParticipantsOptions) => void;\r\n  socket: Socket;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  member: string;\r\n  islevel: string;\r\n  showAlert?: ShowAlert;\r\n  coHost: string;\r\n  roomName: string;\r\n  updateIsMessagesModalVisible: (isVisible: boolean) => void;\r\n  updateDirectMessageDetails: (participant: Participant | null) => void;\r\n  updateStartDirectMessage: (start: boolean) => void;\r\n  updateParticipants: (participants: Participant[]) => void;\r\n}\r\n\r\n/**\r\n * @component ParticipantList\r\n * @description Displays a list of participants and provides actions like muting, messaging, and removing participants.\r\n *\r\n * @selector app-participant-list\r\n * @standalone true\r\n * @templateUrl ./participant-list.component.html\r\n * @styleUrls ['./participant-list.component.css']\r\n * @imports [CommonModule, ParticipantListItem]\r\n *\r\n * @example\r\n * ```html\r\n * <app-participant-list [participants]=\"participants\" [isBroadcast]=\"isBroadcast\"\r\n *                       [onMuteParticipants]=\"muteParticipantsHandler\"\r\n *                       [onMessageParticipants]=\"messageParticipantsHandler\"\r\n *                       [onRemoveParticipants]=\"removeParticipantsHandler\">\r\n * </app-participant-list>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n    selector: 'app-participant-list',\r\n    imports: [CommonModule, ParticipantListItem],\r\n    templateUrl: './participant-list.component.html',\r\n    styleUrls: ['./participant-list.component.css']\r\n})\r\nexport class ParticipantList {\r\n  @Input() participants: Participant[] = [];\r\n  @Input() isBroadcast = false;\r\n  @Input() onMuteParticipants!: (options: MuteParticipantsOptions) => Promise<void>;\r\n  @Input() onMessageParticipants!: (options: MessageParticipantsOptions) => void;\r\n  @Input() onRemoveParticipants!: (options: RemoveParticipantsOptions) => Promise<void>;\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input() coHostResponsibility: CoHostResponsibility[] = [];\r\n  @Input() member = '';\r\n  @Input() islevel = '';\r\n  @Input() showAlert?: ShowAlert;\r\n  @Input() coHost = '';\r\n  @Input() roomName = '';\r\n  @Input() updateIsMessagesModalVisible: (isVisible: boolean) => void = () => {};\r\n  @Input() updateDirectMessageDetails: (participant: Participant | null) => void = () => {};\r\n  @Input() updateStartDirectMessage: (start: boolean) => void = () => {};\r\n  @Input() updateParticipants: (participants: Participant[]) => void = () => {};\r\n}\r\n","<div *ngFor=\"let participant of participants; let i = index\">\r\n  <app-participant-list-item\r\n    [participant]=\"participant\"\r\n    [isBroadcast]=\"isBroadcast\"\r\n    [onMuteParticipants]=\"onMuteParticipants\"\r\n    [onMessageParticipants]=\"onMessageParticipants\"\r\n    [onRemoveParticipants]=\"onRemoveParticipants\"\r\n    [socket]=\"socket\"\r\n    [coHostResponsibility]=\"coHostResponsibility\"\r\n    [coHost]=\"coHost\"\r\n    [member]=\"member\"\r\n    [islevel]=\"islevel\"\r\n    [roomName]=\"roomName\"\r\n    [participants]=\"participants\"\r\n    [updateIsMessagesModalVisible]=\"updateIsMessagesModalVisible\"\r\n    [updateStartDirectMessage]=\"updateStartDirectMessage\"\r\n    [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\r\n    [updateParticipants]=\"updateParticipants\"\r\n  ></app-participant-list-item>\r\n  <hr *ngIf=\"i < participants.length - 1\" class=\"separator\" />\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faCircle } from '@fortawesome/free-solid-svg-icons';\r\nimport { Participant } from '../../../@types/types';\r\n\r\nexport interface ParticipantListOthersItemOptions {\r\n  participant: Participant;\r\n  member: string;\r\n  coHost: string;\r\n}\r\n\r\nexport type ParticipantListOthersItemType = (\r\n  options: ParticipantListOthersItemOptions,\r\n) => HTMLElement;\r\n\r\n/**\r\n * Component for displaying an individual participant item in the \"others\" participant list.\r\n * Provides a display name with conditional labels for roles such as host, co-host, or self.\r\n *\r\n * @component\r\n * @selector app-participant-list-others-item\r\n * @standalone true\r\n * @templateUrl ./participant-list-others-item.component.html\r\n * @styleUrls ['./participant-list-others-item.component.css']\r\n * @imports [CommonModule, FontAwesomeModule]\r\n *\r\n * @example\r\n * ```html\r\n * <app-participant-list-others-item [participant]=\"participant\" [member]=\"currentMember\" [coHost]=\"coHostID\">\r\n * </app-participant-list-others-item>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n    selector: 'app-participant-list-others-item',\r\n    imports: [CommonModule, FontAwesomeModule],\r\n    templateUrl: './participant-list-others-item.component.html',\r\n    styleUrls: ['./participant-list-others-item.component.css']\r\n})\r\nexport class ParticipantListOthersItem {\r\n  @Input() participant!: Participant;\r\n  @Input() member!: string;\r\n  @Input() coHost!: string;\r\n\r\n  faCircle = faCircle;\r\n\r\n  getParticipantDisplayName(): string {\r\n    if (this.participant.islevel === '2') {\r\n      return this.participant.name === this.member\r\n        ? `${this.participant.name} (you)`\r\n        : `${this.participant.name} (host)`;\r\n    } else {\r\n      if (this.participant.name === this.member) {\r\n        return `${this.participant.name} (you)`;\r\n      } else if (this.coHost === this.participant.name) {\r\n        return `${this.participant.name} (co-host)`;\r\n      } else {\r\n        return this.participant.name;\r\n      }\r\n    }\r\n  }\r\n}\r\n","<div class=\"container\">\r\n  <div class=\"name-container\">\r\n    <span class=\"name-text\">\r\n      {{ getParticipantDisplayName() }}\r\n    </span>\r\n  </div>\r\n  <div class=\"icon-container\">\r\n    <fa-icon [icon]=\"faCircle\" [style.color]=\"participant.muted ? 'red' : 'green'\"></fa-icon>\r\n  </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ParticipantListOthersItem } from '../participant-list-others-item/participant-list-others-item.component';\r\nimport { Participant } from '../../../@types/types';\r\n\r\nexport interface ParticipantListOthersOptions {\r\n  participants: Participant[];\r\n  coHost: string;\r\n  member: string;\r\n}\r\n\r\nexport type ParticipantListOthersType = (options: ParticipantListOthersOptions) => HTMLElement;\r\n\r\n/**\r\n * Component for displaying a list of other participants.\r\n * It renders individual participant items within the list.\r\n *\r\n * @component\r\n * @selector app-participant-list-others\r\n * @standalone true\r\n * @templateUrl ./participant-list-others.component.html\r\n * @styleUrls ['./participant-list-others.component.css']\r\n * @imports [CommonModule, ParticipantListOthersItem]\r\n *\r\n * @example\r\n * ```html\r\n * <app-participant-list-others [participants]=\"participantsList\" [coHost]=\"coHostID\" [member]=\"memberID\">\r\n * </app-participant-list-others>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n    selector: 'app-participant-list-others',\r\n    imports: [CommonModule, ParticipantListOthersItem],\r\n    templateUrl: './participant-list-others.component.html',\r\n    styleUrls: ['./participant-list-others.component.css']\r\n})\r\nexport class ParticipantListOthers {\r\n  @Input() participants: Participant[] = [];\r\n  @Input() coHost = '';\r\n  @Input() member = '';\r\n}\r\n","<div *ngFor=\"let participant of participants; let i = index\">\r\n  <app-participant-list-others-item\r\n    [participant]=\"participant\"\r\n    [coHost]=\"coHost\"\r\n    [member]=\"member\"\r\n  ></app-participant-list-others-item>\r\n  <hr *ngIf=\"i < participants.length - 1\" class=\"separator\" />\r\n</div>\r\n","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { CoHostResponsibility, EventType, Participant, ShowAlert } from '../../../@types/types';\r\nimport { ParticipantList } from '../participant-list/participant-list.component';\r\nimport { ParticipantListOthers } from '../participant-list-others/participant-list-others.component';\r\nimport {\r\n  MuteParticipants,\r\n  MuteParticipantsOptions,\r\n} from '../../../methods/participants-methods/mute-participants.service';\r\nimport {\r\n  MessageParticipants,\r\n  MessageParticipantsOptions,\r\n} from '../../../methods/participants-methods/message-participants.service';\r\nimport {\r\n  RemoveParticipants,\r\n  RemoveParticipantsOptions,\r\n} from '../../../methods/participants-methods/remove-participants.service';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface ParticipantsModalParameters {\r\n  position?: string;\r\n  backgroundColor?: string;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  coHost: string;\r\n  member: string;\r\n  islevel: string;\r\n  participants: Participant[];\r\n  eventType: EventType;\r\n  filteredParticipants: Participant[];\r\n  socket: Socket;\r\n  showAlert?: ShowAlert;\r\n  roomName: string;\r\n  updateIsMessagesModalVisible: (isVisible: boolean) => void;\r\n  updateDirectMessageDetails: (participant: Participant | null) => void;\r\n  updateStartDirectMessage: (start: boolean) => void;\r\n  updateParticipants: (participants: Participant[]) => void;\r\n\r\n  //mediasfu functions\r\n  getUpdatedAllParams: () => ParticipantsModalParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ParticipantsModalOptions {\r\n  isParticipantsModalVisible: boolean;\r\n  onParticipantsClose: () => void;\r\n  onParticipantsFilterChange: (filter: string) => void;\r\n  participantsCounter: number;\r\n  onMuteParticipants?: typeof MuteParticipants;\r\n  onMessageParticipants?: typeof MessageParticipants;\r\n  onRemoveParticipants?: typeof RemoveParticipants;\r\n  RenderParticipantList?: HTMLElement;\r\n  RenderParticipantListOthers?: HTMLElement;\r\n  parameters: ParticipantsModalParameters;\r\n  backgroundColor?: string;\r\n  position?: string;\r\n}\r\n\r\nexport type ParticipantsModalType = (options: ParticipantsModalOptions) => HTMLElement;\r\n\r\n/**\r\n * Component for displaying a modal containing a list of participants with options to mute, message, or remove participants.\r\n * Supports both regular participants and a subset of \"other\" participants.\r\n *\r\n * @component\r\n * @selector app-participants-modal\r\n * @standalone true\r\n * @templateUrl ./participants-modal.component.html\r\n * @styleUrls ['./participants-modal.component.css']\r\n * @imports [CommonModule, FontAwesomeModule, ParticipantList, ParticipantListOthers]\r\n *\r\n * @example\r\n * ```html\r\n * <app-participants-modal\r\n *   [isParticipantsModalVisible]=\"true\"\r\n *   [onParticipantsClose]=\"closeModalFunction\"\r\n *   [onParticipantsFilterChange]=\"filterFunction\"\r\n *   [participantsCounter]=\"5\"\r\n *   [parameters]=\"participantsModalParameters\"\r\n *   [position]=\"'topRight'\"\r\n *   [backgroundColor]=\"'#83c0e9'\"\r\n * ></app-participants-modal>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n    selector: 'app-participants-modal',\r\n    imports: [CommonModule, FontAwesomeModule, ParticipantList, ParticipantListOthers],\r\n    templateUrl: './participants-modal.component.html',\r\n    styleUrls: ['./participants-modal.component.css']\r\n})\r\nexport class ParticipantsModal implements OnInit, OnChanges {\r\n  @Input() isParticipantsModalVisible = false;\r\n  @Input() onParticipantsClose!: () => void;\r\n  @Input() onParticipantsFilterChange!: (filter: string) => void;\r\n  @Input() participantsCounter = 0;\r\n  @Input() onMuteParticipants!: (options: MuteParticipantsOptions) => Promise<void>;\r\n  @Input() onMessageParticipants!: (options: MessageParticipantsOptions) => void;\r\n  @Input() onRemoveParticipants!: (options: RemoveParticipantsOptions) => Promise<void>;\r\n  @Input() parameters: ParticipantsModalParameters = {} as ParticipantsModalParameters;\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = '#83c0e9';\r\n\r\n  participant_s: Participant[] = [];\r\n  participantsCounter_s = 0;\r\n  reRender = false;\r\n\r\n  faTimes = faTimes;\r\n\r\n  constructor(\r\n    private muteParticipantsService: MuteParticipants,\r\n    private messageParticipantsService: MessageParticipants,\r\n    private removeParticipantsService: RemoveParticipants,\r\n  ) {}\r\n\r\n  ngOnInit() {\r\n    this.updateParticipantsData();\r\n    if (!this.onMuteParticipants) {\r\n      this.onMuteParticipants = this.muteParticipantsService.muteParticipants.bind(\r\n        this.muteParticipantsService,\r\n      );\r\n    }\r\n    if (!this.onMessageParticipants) {\r\n      this.onMessageParticipants = this.messageParticipantsService.messageParticipants.bind(\r\n        this.messageParticipantsService,\r\n      );\r\n    }\r\n    if (!this.onRemoveParticipants) {\r\n      this.onRemoveParticipants = this.removeParticipantsService.removeParticipants.bind(\r\n        this.removeParticipantsService,\r\n      );\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['parameters'] || changes['participantsCounter']) {\r\n      this.updateParticipantsData();\r\n    }\r\n  }\r\n\r\n  updateParticipantsData() {\r\n    let { getUpdatedAllParams } = this.parameters;\r\n    this.parameters = getUpdatedAllParams();\r\n    this.participant_s = this.parameters.filteredParticipants;\r\n    this.participantsCounter_s = this.parameters.filteredParticipants.length;\r\n  }\r\n\r\n  handleFilterChange(event: Event) {\r\n    const inputElement = event.target as HTMLInputElement;\r\n    const filterValue = inputElement.value;\r\n    this.onParticipantsFilterChange(filterValue);\r\n    this.reRender = !this.reRender;\r\n  }\r\n\r\n  handleClose() {\r\n    this.onParticipantsClose();\r\n  }\r\n\r\n  canShowParticipantList() {\r\n    const participantsValue = this.parameters.coHostResponsibility?.find(\r\n      (item: any) => item.name === 'participants',\r\n    )?.value;\r\n    return (\r\n      this.parameters.islevel === '2' ||\r\n      (this.parameters.coHost === this.parameters.member && participantsValue === true)\r\n    );\r\n  }\r\n}\r\n","<div *ngIf=\"isParticipantsModalVisible\" class=\"modal-container\" [ngStyle]=\"{'background-color': 'rgba(0, 0, 0, 0.5)'}\">\r\n  <div class=\"modal-content\" [ngStyle]=\"{'background-color': backgroundColor, 'top': position.includes('top') ? '10px' : 'auto', 'bottom': position.includes('bottom') ? '10px' : 'auto', 'left': position.includes('Left') ? '10px' : 'auto', 'right': position.includes('Right') ? '10px' : 'auto'}\">\r\n    <div class=\"modal-header\">\r\n      <div>\r\n        Participants <span class=\"badge\">{{ participantsCounter_s }}</span>\r\n      </div>\r\n      <div class=\"close-icon\" (click)=\"handleClose()\">\r\n        <fa-icon [icon]=\"faTimes\" size=\"xl\"></fa-icon>\r\n      </div>\r\n    </div>\r\n    <div class=\"modal-body\">\r\n      <input type=\"text\" class=\"filter-input\" placeholder=\"Search ...\" (input)=\"handleFilterChange($event)\">\r\n      <ng-container *ngIf=\"parameters.participants\">\r\n        <ng-container *ngIf=\"canShowParticipantList()\">\r\n          <app-participant-list\r\n            [participants]=\"participant_s\"\r\n            [isBroadcast]=\"parameters.eventType === 'broadcast'\"\r\n            [onMuteParticipants]=\"onMuteParticipants\"\r\n            [onMessageParticipants]=\"onMessageParticipants\"\r\n            [onRemoveParticipants]=\"onRemoveParticipants\"\r\n            [socket]=\"parameters.socket\"\r\n            [coHostResponsibility]=\"parameters.coHostResponsibility\"\r\n            [coHost]=\"parameters.coHost\"\r\n            [member]=\"parameters.member\"\r\n            [islevel]=\"parameters.islevel\"\r\n            [roomName]=\"parameters.roomName\"\r\n            [updateIsMessagesModalVisible]=\"parameters.updateIsMessagesModalVisible\"\r\n            [updateStartDirectMessage]=\"parameters.updateStartDirectMessage\"\r\n            [updateDirectMessageDetails]=\"parameters.updateDirectMessageDetails\"\r\n            [updateParticipants]=\"parameters.updateParticipants\"\r\n          >\r\n          </app-participant-list>\r\n        </ng-container>\r\n        <ng-container *ngIf=\"!canShowParticipantList()\">\r\n          <app-participant-list-others\r\n            [participants]=\"participant_s\"\r\n            [coHost]=\"parameters.coHost\"\r\n            [member]=\"parameters.member\"\r\n            >\r\n          </app-participant-list-others>\r\n        </ng-container>\r\n      </ng-container>\r\n      <div *ngIf=\"!parameters.participants\">No participants</div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\nimport { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  Poll,\r\n  ShowAlert,\r\n  HandleCreatePollType,\r\n  HandleEndPollType,\r\n  HandleVotePollType,\r\n} from '../../../@types/types';\r\n\r\nexport interface PollModalOptions {\r\n  isPollModalVisible: boolean;\r\n  onClose: () => void;\r\n  position?: string;\r\n  backgroundColor?: string;\r\n  member: string;\r\n  islevel: string;\r\n  polls: Poll[];\r\n  poll: Poll | null;\r\n  socket: Socket;\r\n  roomName: string;\r\n  showAlert?: ShowAlert;\r\n  updateIsPollModalVisible: (isVisible: boolean) => void;\r\n\r\n  handleCreatePoll: HandleCreatePollType;\r\n  handleEndPoll: HandleEndPollType;\r\n  handleVotePoll: HandleVotePollType;\r\n}\r\n\r\nexport type PollModalType = (options: PollModalOptions) => HTMLElement;\r\n\r\n/**\r\n * Component for displaying a poll modal, allowing users to create, vote, and end polls within a session.\r\n *\r\n * @component\r\n * @selector app-poll-modal\r\n * @standalone true\r\n * @templateUrl ./poll-modal.component.html\r\n * @styleUrls ['./poll-modal.component.css']\r\n * @imports [CommonModule, FontAwesomeModule, FormsModule]\r\n *\r\n * @example\r\n * ```html\r\n * <app-poll-modal\r\n *   [isPollModalVisible]=\"true\"\r\n *   [onClose]=\"closeModalFunction\"\r\n *   [member]=\"currentMember\"\r\n *   [islevel]=\"'2'\"\r\n *   [polls]=\"pollList\"\r\n *   [poll]=\"selectedPoll\"\r\n *   [socket]=\"socketInstance\"\r\n *   [roomName]=\"'exampleRoom'\"\r\n *   [handleCreatePoll]=\"createPollFunction\"\r\n *   [handleEndPoll]=\"endPollFunction\"\r\n *   [handleVotePoll]=\"votePollFunction\"\r\n * ></app-poll-modal>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n    selector: 'app-poll-modal',\r\n    imports: [CommonModule, FontAwesomeModule, FormsModule],\r\n    templateUrl: './poll-modal.component.html',\r\n    styleUrls: ['./poll-modal.component.css']\r\n})\r\nexport class PollModal implements OnInit, OnChanges {\r\n  @Input() isPollModalVisible = false;\r\n  @Input() onClose!: () => void;\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = '#f5f5f5';\r\n  @Input() member = '';\r\n  @Input() islevel = '';\r\n  @Input() polls: Poll[] = [];\r\n  @Input() poll: Poll | null = null;\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input() roomName = '';\r\n  @Input() showAlert: ShowAlert = () => {};\r\n  @Input() updateIsPollModalVisible: (isVisible: boolean) => void = () => {};\r\n  @Input() handleCreatePoll!: HandleCreatePollType;\r\n  @Input() handleEndPoll!: HandleEndPollType;\r\n  @Input() handleVotePoll!: HandleVotePollType;\r\n\r\n  faTimes = faTimes;\r\n  newPoll: any = { question: '', type: '', options: [] };\r\n\r\n  screenWidth: number = window.innerWidth;\r\n  modalWidth: number = this.screenWidth > 500 ? 350 : 0.7 * this.screenWidth;\r\n\r\n  ngOnInit() {\r\n    this.renderPolls();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['isPollModalVisible']) {\r\n      this.renderPolls();\r\n    }\r\n  }\r\n\r\n  renderPolls = () => {\r\n    let activePollCount = 0;\r\n\r\n    this.polls &&\r\n      this.polls.forEach((polled: any) => {\r\n        if (polled.status === 'active' && this.poll && polled.id === this.poll.id) {\r\n          activePollCount++;\r\n        }\r\n      });\r\n\r\n    if (this.islevel == '2' && activePollCount === 0) {\r\n      if (this.poll && this.poll.status === 'active') {\r\n        this.poll.status = 'inactive';\r\n      }\r\n    }\r\n  };\r\n\r\n  calculatePercentage(votes: number[], optionIndex: number): number {\r\n    const totalVotes = votes.reduce((a, b) => a + b, 0);\r\n    return totalVotes > 0 ? parseFloat(((votes[optionIndex] / totalVotes) * 100).toFixed(2)) : 0;\r\n  }\r\n\r\n  handlePollTypeChange(event: any) {\r\n    const type = event.target.value;\r\n    let options: string[] = [];\r\n\r\n    switch (type) {\r\n      case 'trueFalse':\r\n        options = ['True', 'False'];\r\n        break;\r\n      case 'yesNo':\r\n        options = ['Yes', 'No'];\r\n        break;\r\n      case 'custom':\r\n        options = ['', '', '', '', '']; // Preload 5 empty options\r\n        break;\r\n      default:\r\n        options = [];\r\n        break;\r\n    }\r\n\r\n    this.newPoll = { ...this.newPoll, type, options };\r\n  }\r\n\r\n  async validateAndCreatePoll() {\r\n    // Remove empty options before creating the poll\r\n    this.newPoll.options = this.newPoll.options.filter((option: string) => option.trim() !== '');\r\n\r\n    // Ensure there's at least one valid option\r\n    if (this.newPoll.options.length > 0) {\r\n      await this.handleCreatePoll({\r\n        poll: this.newPoll,\r\n        socket: this.socket,\r\n        roomName: this.roomName,\r\n        showAlert: this.showAlert,\r\n        updateIsPollModalVisible: this.updateIsPollModalVisible,\r\n      });\r\n    }\r\n  }\r\n\r\n  handledVotePoll(pollId: string, optionIndex: number) {\r\n    this.handleVotePoll({\r\n      pollId,\r\n      optionIndex,\r\n      socket: this.socket,\r\n      member: this.member,\r\n      roomName: this.roomName,\r\n      showAlert: this.showAlert,\r\n      updateIsPollModalVisible: this.updateIsPollModalVisible,\r\n    });\r\n  }\r\n\r\n  handledEndPoll(pollId: string) {\r\n    this.handleEndPoll({\r\n      pollId,\r\n      socket: this.socket,\r\n      roomName: this.roomName,\r\n      showAlert: this.showAlert,\r\n      updateIsPollModalVisible: this.updateIsPollModalVisible,\r\n    });\r\n  }\r\n\r\n  get modalContainerStyle() {\r\n    return {\r\n      position: 'fixed',\r\n      top: 0,\r\n      left: 0,\r\n      width: '100%',\r\n      height: '100%',\r\n      backgroundColor: 'rgba(0, 0, 0, 0.5)',\r\n      display: this.isPollModalVisible ? 'block' : 'none',\r\n      zIndex: 999,\r\n    };\r\n  }\r\n\r\n  get modalContentStyle() {\r\n    return {\r\n      position: 'fixed',\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '10px',\r\n      width: `${this.modalWidth}px`,\r\n      maxHeight: '75%',\r\n      overflowY: 'auto',\r\n      top: this.position.includes('top') ? '10px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '10px' : 'auto',\r\n      left: this.position.includes('Left') ? '10px' : 'auto',\r\n      right: this.position.includes('Right') ? '10px' : 'auto',\r\n    };\r\n  }\r\n}\r\n","<div [ngStyle]=\"modalContainerStyle\">\r\n  <div [ngStyle]=\"modalContentStyle\">\r\n    <div class=\"modal-header\">\r\n      <h2>Polls</h2>\r\n      <button (click)=\"onClose()\" class=\"close-button\">\r\n        <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n      </button>\r\n    </div>\r\n    <hr />\r\n    <div class=\"modal-body\">\r\n      <!-- Previous Polls Section -->\r\n      <div *ngIf=\"islevel === '2'\">\r\n        <div class=\"previous-polls\">\r\n          <h5>Previous Polls</h5>\r\n          <div *ngIf=\"polls.length === 0\">No polls available</div>\r\n\r\n          <!-- Using ng-container to avoid multiple structural directives on the same element -->\r\n          <ng-container *ngFor=\"let polled of polls\">\r\n            <div\r\n              *ngIf=\"!poll || polled.id !== poll.id || poll.status !== 'active'\"\r\n              class=\"poll\"\r\n            >\r\n              <h6>Question:</h6>\r\n              <textarea\r\n                class=\"form-control\"\r\n                rows=\"3\"\r\n                [disabled]=\"true\"\r\n                [value]=\"polled.question\"\r\n              ></textarea>\r\n              <br />\r\n              <h6>Options:</h6>\r\n              <div *ngFor=\"let option of polled.options; let i = index\">\r\n                {{ option }}: {{ polled.votes[i] }} votes ({{\r\n                  calculatePercentage(polled.votes, i)\r\n                }}%)\r\n              </div>\r\n              <!-- End Poll Button (if poll is active) -->\r\n              <button\r\n                *ngIf=\"polled.status === 'active'\"\r\n                class=\"btn btn-danger\"\r\n                (click)=\"handledEndPoll(polled.id)\"\r\n              >\r\n                End Poll\r\n              </button>\r\n            </div>\r\n          </ng-container>\r\n        </div>\r\n        <hr />\r\n\r\n        <!-- Create Poll Section -->\r\n        <div class=\"create-poll\">\r\n          <h5>Create a New Poll</h5>\r\n          <form (ngSubmit)=\"validateAndCreatePoll()\">\r\n            <div class=\"form-group\">\r\n              <label for=\"pollQuestion\">Poll Question</label>\r\n              <textarea\r\n                class=\"form-control\"\r\n                id=\"pollQuestion\"\r\n                rows=\"3\"\r\n                maxLength=\"300\"\r\n                required\r\n                [(ngModel)]=\"newPoll.question\"\r\n                name=\"question\"\r\n              ></textarea>\r\n            </div>\r\n            <div class=\"form-group\">\r\n              <label for=\"pollType\">Select Poll Answer Type</label>\r\n              <select\r\n                class=\"form-control\"\r\n                id=\"pollType\"\r\n                required\r\n                (change)=\"handlePollTypeChange($event)\"\r\n                [(ngModel)]=\"newPoll.type\"\r\n                name=\"type\"\r\n              >\r\n                <option value=\"\">Choose...</option>\r\n                <option value=\"trueFalse\">True/False</option>\r\n                <option value=\"yesNo\">Yes/No</option>\r\n                <option value=\"custom\">Custom</option>\r\n              </select>\r\n            </div>\r\n\r\n            <!-- Render Poll Options -->\r\n            <div\r\n              *ngIf=\"newPoll.type === 'trueFalse' || newPoll.type === 'yesNo'\"\r\n            >\r\n              <div\r\n                *ngFor=\"let option of newPoll.options; let i = index\"\r\n                class=\"form-check\"\r\n              >\r\n                <input\r\n                  class=\"form-check-input\"\r\n                  type=\"radio\"\r\n                  name=\"pollOption\"\r\n                  [value]=\"option.toLowerCase()\"\r\n                  [id]=\"'option' + option\"\r\n                />\r\n                <label class=\"form-check-label\" [for]=\"'option' + option\">{{\r\n                  option\r\n                }}</label>\r\n              </div>\r\n            </div>\r\n            <div *ngIf=\"newPoll.type === 'custom'\">\r\n              <div\r\n                *ngFor=\"let option of newPoll.options; let i = index\"\r\n                class=\"form-group\"\r\n              >\r\n                <input\r\n                  type=\"text\"\r\n                  class=\"form-control\"\r\n                  placeholder=\"Option {{ i + 1 }}\"\r\n                  maxLength=\"50\"\r\n                  [(ngModel)]=\"newPoll.options[i]\"\r\n                  name=\"option{{ i }}\"\r\n                />\r\n              </div>\r\n            </div>\r\n            <button type=\"submit\" class=\"btn btn-primary\">Create Poll</button>\r\n          </form>\r\n        </div>\r\n        <hr />\r\n      </div>\r\n\r\n      <!-- Current Poll Section -->\r\n      <div class=\"current-poll\">\r\n        <h5>Current Poll</h5>\r\n        <div *ngIf=\"poll && poll.status === 'active'\">\r\n          <h6>Question:</h6>\r\n          <textarea\r\n            class=\"form-control\"\r\n            rows=\"3\"\r\n            [disabled]=\"true\"\r\n            [value]=\"poll.question\"\r\n          ></textarea>\r\n          <h6>Options:</h6>\r\n          <div\r\n            *ngFor=\"let option of poll.options; let i = index\"\r\n            class=\"form-check\"\r\n          >\r\n            <input\r\n              class=\"form-check-input\"\r\n              type=\"radio\"\r\n              name=\"pollOption\"\r\n              [value]=\"i\"\r\n              id=\"pollOption{{ i }}\"\r\n              [checked]=\"poll.voters?.[member] === i\"\r\n              (change)=\"handledVotePoll(poll.id, i)\"\r\n            />\r\n            <label class=\"form-check-label\" [for]=\"'pollOption' + i\">{{\r\n              option\r\n            }}</label>\r\n          </div>\r\n          <button\r\n            *ngIf=\"poll.status === 'active' && islevel === '2'\"\r\n            class=\"btn btn-danger\"\r\n            (click)=\"handledEndPoll(poll.id)\"\r\n          >\r\n            End Poll\r\n          </button>\r\n        </div>\r\n        <div *ngIf=\"!poll || poll.status !== 'active'\">\r\n          <hr />\r\n          No active poll\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { EventType } from '../../../@types/types';\r\n\r\nexport interface StandardPanelParameters {\r\n  recordingMediaOptions: string;\r\n  recordingAudioOptions: string;\r\n  recordingVideoOptions: string;\r\n  recordingAddHLS: boolean;\r\n  updateRecordingMediaOptions: (mediaOptions: string) => void;\r\n  updateRecordingAudioOptions: (audioOptions: string) => void;\r\n  updateRecordingVideoOptions: (videoOptions: string) => void;\r\n  updateRecordingAddHLS: (addHLS: boolean) => void;\r\n  eventType: EventType;\r\n}\r\n\r\nexport type StandardPanelType = (options: StandardPanelParameters) => HTMLElement;\r\n\r\n/**\r\n * @component StandardPanelComponent\r\n * @description This component represents a standard panel for recording options.\r\n * It allows users to select media, audio, and video options, as well as toggle HLS recording.\r\n *\r\n * @selector app-standard-panel-component\r\n * @standalone true\r\n * @templateUrl ./standard-panel-component.component.html\r\n * @styleUrls ./standard-panel-component.component.css\r\n * @imports [CommonModule, FormsModule]\r\n *\r\n * @input {StandardPanelParameters} parameters - The parameters for the standard panel component.\r\n *\r\n * @property {string} selectedRecordingMediaOptions - The selected media options for recording.\r\n * @property {string} selectedRecordingAudioOptions - The selected audio options for recording.\r\n * @property {string} selectedRecordingVideoOptions - The selected video options for recording.\r\n * @property {boolean} selectedRecordingAddHLS - The flag indicating whether HLS recording is enabled.\r\n *\r\n * @method ngOnInit - Initializes the component and sets the initial values for recording options.\r\n * @method ngOnChanges - Handles changes to the input parameters and updates the recording options accordingly.\r\n * @method handleMediaOptionsChange - Handles changes to the media options and updates the parameters.\r\n * @method handleAudioOptionsChange - Handles changes to the audio options and updates the parameters.\r\n * @method handleVideoOptionsChange - Handles changes to the video options and updates the parameters.\r\n * @method handleAddHLSChange - Handles changes to the HLS recording option and updates the parameters.\r\n *\r\n * @param {SimpleChanges} changes - The changes to the input properties.\r\n * @param {any} event - The event object from the change event.\r\n *\r\n * @example\r\n * ```html\r\n * <app-standard-panel-component [parameters]=\"standardPanelParameters\"></app-standard-panel-component>\r\n * ```\r\n */\r\n@Component({\r\n    selector: 'app-standard-panel-component',\r\n    templateUrl: './standard-panel-component.component.html',\r\n    styleUrls: ['./standard-panel-component.component.css'],\r\n    imports: [CommonModule, FormsModule]\r\n})\r\nexport class StandardPanelComponent implements OnInit, OnChanges {\r\n  @Input() parameters: StandardPanelParameters = {} as StandardPanelParameters;\r\n\r\n  selectedRecordingMediaOptions!: string;\r\n  selectedRecordingAudioOptions!: string;\r\n  selectedRecordingVideoOptions!: string;\r\n  selectedRecordingAddHLS!: boolean;\r\n\r\n  ngOnInit() {\r\n    this.selectedRecordingMediaOptions = this.parameters.recordingMediaOptions;\r\n    this.selectedRecordingAudioOptions = this.parameters.recordingAudioOptions;\r\n    this.selectedRecordingVideoOptions = this.parameters.recordingVideoOptions;\r\n    this.selectedRecordingAddHLS = this.parameters.recordingAddHLS;\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['parameters']) {\r\n      this.parameters = changes['parameters'].currentValue;\r\n      this.selectedRecordingMediaOptions = this.parameters.recordingMediaOptions;\r\n      this.selectedRecordingAudioOptions = this.parameters.recordingAudioOptions;\r\n      this.selectedRecordingVideoOptions = this.parameters.recordingVideoOptions;\r\n      this.selectedRecordingAddHLS = this.parameters.recordingAddHLS;\r\n    }\r\n  }\r\n\r\n  handleMediaOptionsChange(event: any) {\r\n    const value = event.target.value;\r\n    this.selectedRecordingMediaOptions = value;\r\n    this.parameters.updateRecordingMediaOptions(value);\r\n  }\r\n\r\n  handleAudioOptionsChange(event: any) {\r\n    const value = event.target.value;\r\n    this.selectedRecordingAudioOptions = value;\r\n    this.parameters.updateRecordingAudioOptions(value);\r\n  }\r\n\r\n  handleVideoOptionsChange(event: any) {\r\n    const value = event.target.value;\r\n    this.selectedRecordingVideoOptions = value;\r\n    this.parameters.updateRecordingVideoOptions(value);\r\n  }\r\n\r\n  handleAddHLSChange(event: any) {\r\n    const value = event.target.value === 'true';\r\n    this.selectedRecordingAddHLS = value;\r\n    this.parameters.updateRecordingAddHLS(value);\r\n  }\r\n}\r\n","<div>\r\n  <!-- Media Options -->\r\n  <div>\r\n    <label style=\"margin-right:10px; font-weight: bold;\">Media Options:</label>\r\n    <select [(ngModel)]=\"selectedRecordingMediaOptions\" (change)=\"handleMediaOptionsChange($event)\">\r\n      <option value=\"video\">Record Video</option>\r\n      <option value=\"audio\">Record Audio Only</option>\r\n    </select>\r\n  </div>\r\n  <hr />\r\n\r\n  <!-- Specific Audios -->\r\n  <div *ngIf=\"parameters.eventType !== 'broadcast'\">\r\n    <div>\r\n      <label style=\"margin-right:10px; font-weight: bold;\">Specific Audios:</label>\r\n      <select [(ngModel)]=\"selectedRecordingAudioOptions\" (change)=\"handleAudioOptionsChange($event)\">\r\n        <option value=\"all\">Add All</option>\r\n        <option value=\"onScreen\">Add All On Screen</option>\r\n        <option value=\"host\">Add Host Only</option>\r\n      </select>\r\n    </div>\r\n    <hr />\r\n\r\n    <!-- Specific Videos -->\r\n    <div id=\"conditionalConference\">\r\n      <label style=\"margin-right:10px; font-weight: bold;\">Specific Videos:</label>\r\n      <select [(ngModel)]=\"selectedRecordingVideoOptions\" (change)=\"handleVideoOptionsChange($event)\">\r\n        <option value=\"all\">Add All</option>\r\n        <option value=\"mainScreen\">Big Screen Only (includes screenshare)</option>\r\n      </select>\r\n    </div>\r\n    <hr />\r\n  </div>\r\n\r\n  <!-- Add HLS -->\r\n  <div id=\"addHLSPart\">\r\n    <label style=\"margin-right:10px; font-weight: bold;\">Add HLS:</label>\r\n    <select [(ngModel)]=\"selectedRecordingAddHLS\" (change)=\"handleAddHLSChange($event)\">\r\n      <option [ngValue]=\"true\">True</option>\r\n      <option [ngValue]=\"false\">False</option>\r\n    </select>\r\n  </div>\r\n  <hr />\r\n</div>\r\n","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { EventType } from '../../../@types/types';\r\n\r\nexport interface AdvancedPanelParameters {\r\n  recordingOrientationVideo: string;\r\n  recordingNameTags: boolean;\r\n  recordingVideoType: string;\r\n  recordingDisplayType: 'video' | 'media' | 'all';\r\n  recordingAddText: boolean;\r\n  recordingCustomText: string;\r\n  recordingCustomTextPosition: string;\r\n  recordingBackgroundColor: string;\r\n  recordingCustomTextColor: string;\r\n  recordingNameTagsColor: string;\r\n  updateRecordingOrientationVideo: (orientation: string) => void;\r\n  updateRecordingNameTags: (nameTags: boolean) => void;\r\n  updateRecordingVideoType: (videoType: string) => void;\r\n  updateRecordingDisplayType: (displayType: 'video' | 'media' | 'all') => void;\r\n  updateRecordingAddText: (addText: boolean) => void;\r\n  updateRecordingCustomText: (customText: string) => void;\r\n  updateRecordingCustomTextPosition: (position: string) => void;\r\n  updateRecordingBackgroundColor: (color: string) => void;\r\n  updateRecordingCustomTextColor: (color: string) => void;\r\n  updateRecordingNameTagsColor: (color: string) => void;\r\n  eventType: EventType;\r\n}\r\n\r\nexport type AdvancedPanelType = (options: AdvancedPanelParameters) => HTMLElement;\r\n\r\n/**\r\n * Component for configuring advanced recording options in a MediaSFU session.\r\n *\r\n * @component\r\n * @selector app-advanced-panel-component\r\n * @standalone true\r\n * @templateUrl ./advanced-panel-component.component.html\r\n * @styleUrls ['./advanced-panel-component.component.css']\r\n * @imports [CommonModule, FormsModule]\r\n *\r\n * @example\r\n * ```html\r\n * <app-advanced-panel-component [parameters]=\"advancedPanelOptions\"></app-advanced-panel-component>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n    selector: 'app-advanced-panel-component',\r\n    templateUrl: './advanced-panel-component.component.html',\r\n    styleUrls: ['./advanced-panel-component.component.css'],\r\n    imports: [CommonModule, FormsModule]\r\n})\r\nexport class AdvancedPanelComponent implements OnInit, OnChanges {\r\n  @Input() parameters: AdvancedPanelParameters = {} as AdvancedPanelParameters;\r\n\r\n  selectedOrientationVideo!: string;\r\n  selectedRecordingNameTags!: boolean;\r\n  selectedRecordingVideoType!: string;\r\n  selectedRecordingDisplayType!: 'video' | 'media' | 'all';\r\n  showBackgroundColorModal = false;\r\n  showNameTagsColorModal = false;\r\n  selectedColorType = '';\r\n  recordingText!: boolean;\r\n  customText!: string;\r\n  recordingPosition!: string;\r\n\r\n  ngOnInit() {\r\n    this.selectedOrientationVideo = this.parameters?.recordingOrientationVideo ?? '';\r\n    this.selectedRecordingNameTags = this.parameters?.recordingNameTags ?? false;\r\n    this.selectedRecordingVideoType = this.parameters?.recordingVideoType ?? '';\r\n    this.selectedRecordingDisplayType = this.parameters?.recordingDisplayType ?? 'media';\r\n    this.recordingText = this.parameters?.recordingAddText ?? false;\r\n    this.customText = this.parameters?.recordingCustomText ?? '';\r\n    this.recordingPosition = this.parameters?.recordingCustomTextPosition ?? '';\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['parameters']) {\r\n      this.parameters = changes['parameters'].currentValue;\r\n      this.selectedOrientationVideo = this.parameters.recordingOrientationVideo;\r\n      this.selectedRecordingNameTags = this.parameters.recordingNameTags;\r\n      this.selectedRecordingVideoType = this.parameters.recordingVideoType;\r\n      this.selectedRecordingDisplayType = this.parameters.recordingDisplayType;\r\n      this.recordingText = this.parameters.recordingAddText;\r\n      this.customText = this.parameters.recordingCustomText;\r\n      this.recordingPosition = this.parameters.recordingCustomTextPosition;\r\n    }\r\n  }\r\n\r\n  validateTextInput(input: string): boolean {\r\n    const regex = /^[a-zA-Z0-9\\s]{1,40}$/;\r\n    return regex.test(input);\r\n  }\r\n\r\n  handleTextChange(value: boolean) {\r\n    this.recordingText = value;\r\n    this.parameters.updateRecordingAddText(value);\r\n  }\r\n\r\n  onChangeTextHandler(text: string) {\r\n    if (text && text.length > 0 && !this.validateTextInput(text)) {\r\n      return;\r\n    }\r\n    this.parameters.updateRecordingCustomText(text);\r\n    this.customText = text;\r\n  }\r\n\r\n  handleColorChange(selectedColor: string, event: Event) {\r\n    const input = event.target as HTMLInputElement;\r\n    const color = input.value;\r\n    if (selectedColor === 'backgroundColor') {\r\n      this.parameters.updateRecordingBackgroundColor(color);\r\n    } else if (selectedColor === 'customTextColor') {\r\n      this.parameters.updateRecordingCustomTextColor(color);\r\n    } else if (selectedColor === 'nameTagsColor') {\r\n      this.parameters.updateRecordingNameTagsColor(color);\r\n    }\r\n  }\r\n}\r\n","<div>\r\n  <!-- Video Type -->\r\n  <div>\r\n    <label class=\"label\">Video Type:</label>\r\n    <select [(ngModel)]=\"selectedRecordingVideoType\" (change)=\"parameters.updateRecordingVideoType(selectedRecordingVideoType)\">\r\n      <option value=\"fullDisplay\">Full Display (no background)</option>\r\n      <option value=\"bestDisplay\">Full Video</option>\r\n      <option value=\"all\">All</option>\r\n    </select>\r\n  </div>\r\n  <hr />\r\n\r\n  <!-- Display Type -->\r\n  <div *ngIf=\"parameters.eventType !== 'broadcast'\">\r\n    <label class=\"label\">Display Type:</label>\r\n    <select [(ngModel)]=\"selectedRecordingDisplayType\" (change)=\"parameters.updateRecordingDisplayType(selectedRecordingDisplayType)\">\r\n      <option value=\"video\">Only Video Participants</option>\r\n      <option value=\"videoOpt\">Only Video Participants (optimized)</option>\r\n      <option value=\"media\">Participants with media</option>\r\n      <option value=\"all\">All Participants</option>\r\n    </select>\r\n  </div>\r\n  <hr />\r\n\r\n  <!-- Background Color -->\r\n  <div>\r\n    <label class=\"label\">Background Color:</label>\r\n    <div class=\"color-preview\" [ngStyle]=\"{'background-color': parameters.recordingBackgroundColor}\">\r\n      {{ parameters.recordingBackgroundColor }}\r\n    </div>\r\n    <input type=\"color\" [(ngModel)]=\"parameters.recordingBackgroundColor\" (change)=\"handleColorChange('backgroundColor', $event)\" />\r\n    <span class=\"label\">Click to select color</span>\r\n  </div>\r\n  <hr />\r\n\r\n  <!-- Add Text -->\r\n  <div>\r\n    <label class=\"label\">Add Text:</label>\r\n    <select [(ngModel)]=\"recordingText\" (change)=\"handleTextChange(recordingText)\">\r\n      <option [ngValue]=\"true\">True</option>\r\n      <option [ngValue]=\"false\">False</option>\r\n    </select>\r\n  </div>\r\n  <hr />\r\n\r\n  <!-- Custom Text -->\r\n  <div *ngIf=\"recordingText\">\r\n    <label class=\"label\">Custom Text:</label>\r\n    <input type=\"text\" [(ngModel)]=\"customText\" (input)=\"onChangeTextHandler(customText)\" />\r\n    <hr />\r\n  </div>\r\n\r\n  <!-- Custom Text Position -->\r\n  <div *ngIf=\"recordingText\">\r\n    <label class=\"label\">Custom Text Position:</label>\r\n    <select [(ngModel)]=\"recordingPosition\" (change)=\"parameters.updateRecordingCustomTextPosition(recordingPosition)\">\r\n      <option value=\"top\">Top</option>\r\n      <option value=\"middle\">Middle</option>\r\n      <option value=\"bottom\">Bottom</option>\r\n    </select>\r\n    <hr />\r\n  </div>\r\n\r\n  <!-- Custom Text Color -->\r\n  <div *ngIf=\"recordingText\">\r\n    <label class=\"label\">Custom Text Color:</label>\r\n    <div class=\"color-preview\" [ngStyle]=\"{'background-color': parameters.recordingCustomTextColor}\">\r\n      {{ parameters.recordingCustomTextColor }}\r\n    </div>\r\n    <input type=\"color\" [(ngModel)]=\"parameters.recordingCustomTextColor\" (change)=\"handleColorChange('customTextColor', $event)\" />\r\n    <span class=\"label\">Click to select color</span>\r\n    <hr />\r\n  </div>\r\n\r\n  <!-- Add Name Tags -->\r\n  <div>\r\n    <label class=\"label\">Add Name Tags:</label>\r\n    <select [(ngModel)]=\"selectedRecordingNameTags\" (change)=\"parameters.updateRecordingNameTags(selectedRecordingNameTags)\">\r\n      <option [ngValue]=\"true\">True</option>\r\n      <option [ngValue]=\"false\">False</option>\r\n    </select>\r\n  </div>\r\n  <hr />\r\n\r\n  <!-- Name Tags Color -->\r\n  <div>\r\n    <label class=\"label\">Name Tags Color:</label>\r\n    <div class=\"color-preview\" [ngStyle]=\"{'background-color': parameters.recordingNameTagsColor}\">\r\n      {{ parameters.recordingNameTagsColor }}\r\n    </div>\r\n    <input type=\"color\" [(ngModel)]=\"parameters.recordingNameTagsColor\" (change)=\"handleColorChange('nameTagsColor', $event)\" />\r\n    <span class=\"label\">Click to select color</span>\r\n  </div>\r\n  <hr />\r\n\r\n  <!-- Orientation (Video) -->\r\n  <div>\r\n    <label class=\"label\">Orientation (Video):</label>\r\n    <select [(ngModel)]=\"selectedOrientationVideo\" (change)=\"parameters.updateRecordingOrientationVideo(selectedOrientationVideo)\">\r\n      <option value=\"landscape\">Landscape</option>\r\n      <option value=\"portrait\">Portrait</option>\r\n      <option value=\"all\">All</option>\r\n    </select>\r\n  </div>\r\n  <hr />\r\n</div>\r\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes, faCheck, faPlay } from '@fortawesome/free-solid-svg-icons';\r\nimport { StandardPanelComponent } from '../standard-panel-component/standard-panel-component.component';\r\nimport { AdvancedPanelComponent } from '../advanced-panel-component/advanced-panel-components.component';\r\nimport {\r\n  EventType,\r\n  ConfirmRecordingParameters,\r\n  StartRecordingParameters,\r\n  ConfirmRecordingOptions,\r\n  StartRecordingOptions,\r\n} from '../../../@types/types';\r\n\r\nexport interface RecordingModalParameters\r\n  extends ConfirmRecordingParameters,\r\n    StartRecordingParameters {\r\n  recordPaused: boolean;\r\n  recordingVideoType: string;\r\n  recordingDisplayType: 'video' | 'media' | 'all';\r\n  recordingBackgroundColor: string;\r\n  recordingNameTagsColor: string;\r\n  recordingOrientationVideo: string;\r\n  recordingNameTags: boolean;\r\n  recordingAddText: boolean;\r\n  recordingCustomText: string;\r\n  recordingCustomTextPosition: string;\r\n  recordingCustomTextColor: string;\r\n  recordingMediaOptions: string;\r\n  recordingAudioOptions: string;\r\n  recordingVideoOptions: string;\r\n  recordingAddHLS: boolean;\r\n  eventType: EventType;\r\n  updateRecordingVideoType: (value: string) => void;\r\n  updateRecordingDisplayType: (value: 'video' | 'media' | 'all') => void;\r\n  updateRecordingBackgroundColor: (value: string) => void;\r\n  updateRecordingNameTagsColor: (value: string) => void;\r\n  updateRecordingOrientationVideo: (value: string) => void;\r\n  updateRecordingNameTags: (value: boolean) => void;\r\n  updateRecordingAddText: (value: boolean) => void;\r\n  updateRecordingCustomText: (value: string) => void;\r\n  updateRecordingCustomTextPosition: (value: string) => void;\r\n  updateRecordingCustomTextColor: (value: string) => void;\r\n  updateRecordingMediaOptions: (value: string) => void;\r\n  updateRecordingAudioOptions: (value: string) => void;\r\n  updateRecordingVideoOptions: (value: string) => void;\r\n  updateRecordingAddHLS: (value: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  getUpdatedAllParams: () => RecordingModalParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface RecordingModalOptions {\r\n  isRecordingModalVisible: boolean;\r\n  onClose: () => void;\r\n  backgroundColor: string;\r\n  position: string;\r\n\r\n  confirmRecording: (options: ConfirmRecordingOptions) => void;\r\n  startRecording: (options: StartRecordingOptions) => void;\r\n  parameters: RecordingModalParameters;\r\n}\r\n\r\nexport type RecordingModalType = (options: RecordingModalOptions) => HTMLElement;\r\n\r\n/**\r\n * Component representing a recording modal.\r\n *\r\n * @selector app-recording-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule, StandardPanelComponent, AdvancedPanelComponent\r\n * @templateUrl ./recording-modal.component.html\r\n * @styleUrls ./recording-modal.component.css\r\n *\r\n * @class RecordingModal\r\n * @implements OnChanges\r\n *\r\n * @property {boolean} isRecordingModalVisible - Determines if the recording modal is visible.\r\n * @property {() => void} onClose - Callback function to close the modal.\r\n * @property {string} backgroundColor - Background color of the modal.\r\n * @property {string} position - Position of the modal on the screen.\r\n * @property {(options: ConfirmRecordingOptions) => void} confirmRecording - Callback function to confirm recording.\r\n * @property {(options: StartRecordingOptions) => void} startRecording - Callback function to start recording.\r\n * @property {RecordingModalParameters} parameters - Parameters for the recording modal.\r\n *\r\n * @property {IconDefinition} faTimes - FontAwesome icon for times (close).\r\n * @property {IconDefinition} faCheck - FontAwesome icon for check (confirm).\r\n * @property {IconDefinition} faPlay - FontAwesome icon for play (start).\r\n *\r\n * @method modalContainerStyle - Returns the style object for the modal container.\r\n * @method modalContentStyle - Returns the style object for the modal content.\r\n * @method ngOnChanges - Lifecycle hook that is called when any data-bound property of a directive changes.\r\n * @method confirm - Calls the confirmRecording callback with the current parameters.\r\n * @method start - Calls the startRecording callback with the current parameters.\r\n * @example\r\n * ```html\r\n * <app-recording-modal\r\n *   [isRecordingModalVisible]=\"true\"\r\n *   [onClose]=\"closeRecordingModal\"\r\n *   [backgroundColor]=\"'#83c0e9'\"\r\n *   [position]=\"'bottomRight'\"\r\n *   [confirmRecording]=\"confirmRecording\"\r\n *   [startRecording]=\"startRecording\"\r\n *   [parameters]=\"recordingModalParams\"\r\n * ></app-recording-modal>\r\n * ```\r\n */\r\n@Component({\r\n    selector: 'app-recording-modal',\r\n    imports: [CommonModule, FontAwesomeModule, StandardPanelComponent, AdvancedPanelComponent],\r\n    templateUrl: './recording-modal.component.html',\r\n    styleUrls: ['./recording-modal.component.css']\r\n})\r\nexport class RecordingModal implements OnChanges {\r\n  @Input() isRecordingModalVisible = false;\r\n  @Input() onClose!: () => void;\r\n  @Input() backgroundColor = '#83c0e9';\r\n  @Input() position = 'bottomRight';\r\n  @Input() confirmRecording!: (options: ConfirmRecordingOptions) => void;\r\n  @Input() startRecording!: (options: StartRecordingOptions) => void;\r\n  @Input() parameters: RecordingModalParameters = {} as RecordingModalParameters;\r\n\r\n  faTimes = faTimes;\r\n  faCheck = faCheck;\r\n  faPlay = faPlay;\r\n\r\n  get modalContainerStyle() {\r\n    return {\r\n      position: 'fixed',\r\n      top: 0,\r\n      left: 0,\r\n      width: '100%',\r\n      height: '100%',\r\n      backgroundColor: 'rgba(0, 0, 0, 0.5)',\r\n      display: this.isRecordingModalVisible ? 'block' : 'none',\r\n      zIndex: 999,\r\n    };\r\n  }\r\n\r\n  get modalContentStyle() {\r\n    const screenWidth = window.innerWidth;\r\n    let modalWidth = 0.8 * screenWidth;\r\n    if (modalWidth > 350) {\r\n      modalWidth = 350;\r\n    }\r\n    return {\r\n      position: 'fixed',\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '10px',\r\n      width: `${modalWidth}px`,\r\n      maxHeight: '85%',\r\n      overflowY: 'auto',\r\n      top: this.position.includes('top') ? '10px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '10px' : 'auto',\r\n      left: this.position.includes('Left') ? '10px' : 'auto',\r\n      right: this.position.includes('Right') ? '10px' : 'auto',\r\n    };\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['isRecordingModalVisible']) {\r\n      if (this.parameters) {\r\n        this.parameters = this.parameters.getUpdatedAllParams();\r\n      }\r\n    }\r\n  }\r\n\r\n  confirm() {\r\n    this.confirmRecording({\r\n      parameters: { ...this.parameters },\r\n    });\r\n  }\r\n\r\n  start() {\r\n    this.startRecording({\r\n      parameters: { ...this.parameters },\r\n    });\r\n  }\r\n}\r\n","<div [ngStyle]=\"modalContainerStyle\">\r\n  <div [ngStyle]=\"modalContentStyle\">\r\n    <div style=\"display: flex; flex-direction: column;\">\r\n      <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;\">\r\n        <h2 style=\"font-size: x-large; font-weight: bold; color: black;\">\r\n          Recording Settings\r\n        </h2>\r\n        <button (click)=\"onClose()\" style=\"border: none; background: none; cursor: pointer;\">\r\n          <fa-icon [icon]=\"faTimes\" size=\"xl\" style=\"font-size: 20px; color: black;\"></fa-icon>\r\n        </button>\r\n      </div>\r\n      <hr style=\"height: 1px; background-color: black; margin: 5px 0;\" />\r\n      <div style=\"flex: 1;\">\r\n        <div style=\"overflow-y: auto; max-height: calc(100% - 120px); padding: 0;\">\r\n          <div style=\"margin: 0; padding: 0;\">\r\n            <app-standard-panel-component [parameters]=\"parameters\"></app-standard-panel-component>\r\n            <app-advanced-panel-component [parameters]=\"parameters\"></app-advanced-panel-component>\r\n          </div>\r\n        </div>\r\n        <div style=\"height: 1px; background-color: white; \"></div>\r\n        <div style=\"display: flex; justify-content: space-between; margin-top: 20px;\">\r\n          <button\r\n            (click)=\"confirm()\"\r\n            style=\"flex: 1; padding: 5px; border-radius: 5px; justify-content: center; align-items: center; margin: 0 10px; background: #4CAF50; cursor: pointer;\">\r\n            <span style=\"color: black; font-size: 14px;\">Confirm</span>\r\n          </button>\r\n          <button *ngIf=\"!parameters.recordPaused\"\r\n            (click)=\"start()\"\r\n            style=\"flex: 1; padding: 5px; border-radius: 5px; justify-content: center; align-items: center; margin: 0 10px; background: #f44336; cursor: pointer;\">\r\n            <span style=\"color: black; font-size: 14px;\">Start <fa-icon [icon]=\"faPlay\"></fa-icon></span>\r\n          </button>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  faMicrophone,\r\n  faDesktop,\r\n  faVideo,\r\n  faComments,\r\n  faCheck,\r\n  faTimes,\r\n  IconDefinition,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { RespondToRequestsType, RespondToRequestsOptions, Request } from '../../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface RenderRequestComponentOptions {\r\n  request: Request;\r\n  onRequestItemPress: RespondToRequestsType;\r\n  requestList: Request[];\r\n  updateRequestList: (newRequestList: Request[]) => void;\r\n  roomName: string;\r\n  socket: Socket;\r\n}\r\n\r\nexport type RenderRequestComponentType = (options: RenderRequestComponentOptions) => HTMLElement;\r\n\r\n/**\r\n * @component RenderRequestComponent\r\n * @description Component to render and manage individual requests in a list. Each request can be responded to with specified actions (e.g., approve, deny).\r\n *\r\n * @selector app-render-request-component\r\n * @standalone true\r\n * @imports [CommonModule, FontAwesomeModule]\r\n * @templateUrl ./render-request-component.component.html\r\n * @styleUrls ./render-request-component.component.css\r\n *\r\n * @example\r\n * ```html\r\n * <app-render-request-component\r\n *   [request]=\"request\"\r\n *   [requestList]=\"requestList\"\r\n *   [roomName]=\"roomName\"\r\n *   [socket]=\"socket\"\r\n *   [onRequestItemPress]=\"handleRequestPress\"\r\n *   [updateRequestList]=\"updateRequestList\">\r\n * </app-render-request-component>\r\n * ```\r\n */\r\n\r\n@Component({\r\n    selector: 'app-render-request-component',\r\n    imports: [CommonModule, FontAwesomeModule],\r\n    templateUrl: './render-request-component.component.html',\r\n    styleUrls: ['./render-request-component.component.css']\r\n})\r\nexport class RenderRequestComponent {\r\n  @Input() request: Request = {} as Request;\r\n  @Input() requestList: Request[] = [];\r\n  @Input() roomName!: string;\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input() onRequestItemPress!: (options: RespondToRequestsOptions) => void;\r\n  @Input() updateRequestList!: (newRequestList: Request[]) => void;\r\n\r\n  faMicrophone = faMicrophone;\r\n  faDesktop = faDesktop;\r\n  faVideo = faVideo;\r\n  faComments = faComments;\r\n  faCheck = faCheck;\r\n  faTimes = faTimes;\r\n\r\n  keyMap: { [key: string]: IconDefinition } = {\r\n    'fa-microphone': this.faMicrophone,\r\n    'fa-desktop': this.faDesktop,\r\n    'fa-video': this.faVideo,\r\n    'fa-comments': this.faComments,\r\n  };\r\n\r\n  getIcon(iconName: string): IconDefinition {\r\n    return this.keyMap[iconName];\r\n  }\r\n\r\n  handleRequestAction = (action: string) => {\r\n    this.onRequestItemPress({\r\n      request: this.request,\r\n      updateRequestList: this.updateRequestList,\r\n      requestList: this.requestList,\r\n      action: action,\r\n      roomName: this.roomName,\r\n      socket: this.socket,\r\n    });\r\n  };\r\n}\r\n","<div class=\"request-container\" *ngIf=\"request\">\r\n  <div class=\"request-name\">{{ request.name }}</div>\r\n  <div class=\"request-icon\">\r\n    <fa-icon [icon]=\"getIcon(request.icon)\" size=\"lg\" color=\"black\"></fa-icon>\r\n  </div>\r\n  <div class=\"request-action accept\">\r\n    <button (click)=\"handleRequestAction('accepted')\">\r\n      <fa-icon [icon]=\"faCheck\" size=\"lg\" style=\"color: green;\"></fa-icon>\r\n    </button>\r\n  </div>\r\n  <div class=\"request-action reject\">\r\n    <button (click)=\"handleRequestAction('rejected')\">\r\n      <fa-icon [icon]=\"faTimes\" size=\"lg\" style=\"color: red;\"></fa-icon>\r\n    </button>\r\n  </div>\r\n</div>\r\n","import { Component, Input, OnChanges, SimpleChanges, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport {\r\n  RenderRequestComponent,\r\n  RenderRequestComponentOptions,\r\n} from '../render-request-component/render-request-component.component';\r\nimport {\r\n  RespondToRequests,\r\n  RespondToRequestsType,\r\n} from '../../../methods/requests-methods/respond-to-requests.service';\r\nimport { Socket } from 'socket.io-client';\r\nimport { Request } from '../../../@types/types';\r\n\r\nexport interface RequestsModalParameters {\r\n  getUpdatedAllParams: () => { filteredRequestList: Request[] };\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface RequestsModalOptions {\r\n  isRequestsModalVisible: boolean;\r\n  requestCounter: number;\r\n  requestList: Request[];\r\n  roomName: string;\r\n  socket: Socket;\r\n  backgroundColor: string;\r\n  position: string;\r\n  parameters: RequestsModalParameters;\r\n  onRequestClose: () => void;\r\n  onRequestFilterChange: (filter: string) => void;\r\n  onRequestItemPress?: RespondToRequestsType;\r\n  updateRequestList: (newRequestList: any[]) => void;\r\n}\r\n\r\nexport type RequestsModalType = (options: RenderRequestComponentOptions) => HTMLElement;\r\n\r\n/**\r\n * @component RequestsModal\r\n * @description A modal component to display and manage requests.\r\n *\r\n * @selector app-requests-modal\r\n * @standalone true\r\n * @imports [CommonModule, FontAwesomeModule, RenderRequestComponent]\r\n * @templateUrl ./requests-modal.component.html\r\n * @styleUrls ./requests-modal.component.css\r\n *\r\n * @property {boolean} isRequestsModalVisible - Determines if the requests modal is visible.\r\n * @property {number} requestCounter - Counter for the number of requests.\r\n * @property {Request[]} requestList - List of requests.\r\n * @property {string} roomName - Name of the room.\r\n * @property {Socket} socket - Socket instance for communication.\r\n * @property {string} backgroundColor - Background color of the modal.\r\n * @property {string} position - Position of the modal.\r\n * @property {any} parameters - Additional parameters for the modal.\r\n * @property {Function} onRequestClose - Callback function when the modal is closed.\r\n * @property {Function} onRequestFilterChange - Callback function when the request filter changes.\r\n * @property {Function} onRequestItemPress - Callback function when a request item is pressed.\r\n * @property {Function} updateRequestList - Function to update the request list.\r\n *\r\n * @property {IconDefinition} faTimes - FontAwesome icon for closing the modal.\r\n * @property {any[]} requestList_s - Filtered list of requests.\r\n * @property {number} requestCounter_s - Counter for the filtered list of requests.\r\n * @property {boolean} reRender - Flag to trigger re-rendering.\r\n *\r\n * @constructor\r\n * @param {RespondToRequests} respondToRequestsService - Service to handle request responses.\r\n *\r\n * @method ngOnInit - Lifecycle hook that is called after data-bound properties are initialized.\r\n * @method ngOnChanges - Lifecycle hook that is called when any data-bound property changes.\r\n * @param {SimpleChanges} changes - Object of current and previous property values.\r\n *\r\n * @method updateRequests - Updates the request list and counter based on the current parameters.\r\n * @method handleModalClose - Handles the modal close action.\r\n * @method handleFilterChange - Handles the filter change event.\r\n * @param {Event} event - The filter change event.\r\n * @example\r\n * ```html\r\n * <app-requests-modal\r\n *   [isRequestsModalVisible]=\"isModalVisible\"\r\n *   [requestCounter]=\"requestCounter\"\r\n *   [requestList]=\"requests\"\r\n *   [roomName]=\"roomName\"\r\n *   [socket]=\"socket\"\r\n *   [backgroundColor]=\"'#83c0e9'\"\r\n *   [position]=\"'topRight'\"\r\n *   [parameters]=\"requestParams\"\r\n *   (onRequestClose)=\"handleModalClose()\"\r\n *   (onRequestFilterChange)=\"handleFilterChange($event)\"\r\n *   (onRequestItemPress)=\"handleRequestPress($event)\"\r\n *   [updateRequestList]=\"updateRequestList\">\r\n * </app-requests-modal>\r\n * ```\r\n */\r\n@Component({\r\n    selector: 'app-requests-modal',\r\n    imports: [CommonModule, FontAwesomeModule, RenderRequestComponent],\r\n    templateUrl: './requests-modal.component.html',\r\n    styleUrls: ['./requests-modal.component.css']\r\n})\r\nexport class RequestsModal implements OnInit, OnChanges {\r\n  @Input() isRequestsModalVisible = false;\r\n  @Input() requestCounter = 0;\r\n  @Input() requestList: Request[] = [];\r\n  @Input() roomName!: string;\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input() backgroundColor = '#83c0e9';\r\n  @Input() position = 'topRight';\r\n  @Input() parameters: any;\r\n  @Input() onRequestClose!: () => void;\r\n  @Input() onRequestFilterChange!: (filter: string) => void;\r\n  @Input() onRequestItemPress!: (params: any) => void;\r\n  @Input() updateRequestList!: (newRequestList: any[]) => void;\r\n\r\n  faTimes = faTimes;\r\n  requestList_s: any[] = [];\r\n  requestCounter_s = 0;\r\n  reRender = false;\r\n\r\n  constructor(private respondToRequestsService: RespondToRequests) {}\r\n\r\n  ngOnInit() {\r\n    if (!this.onRequestItemPress) {\r\n      this.onRequestItemPress = (params: any) =>\r\n        this.respondToRequestsService.respondToRequests(params);\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['requestList'] || changes['reRender'] || changes['requestCounter']) {\r\n      this.updateRequests();\r\n    }\r\n\r\n    if (changes['isRequestsModalVisible'] && this.isRequestsModalVisible) {\r\n      this.parameters = this.parameters.getUpdatedAllParams();\r\n      this.updateRequests();\r\n    }\r\n  }\r\n\r\n  updateRequests() {\r\n    this.parameters = this.parameters.getUpdatedAllParams();\r\n    this.requestList_s = this.parameters.filteredRequestList || [];\r\n    this.requestCounter_s = this.parameters.filteredRequestList.length;\r\n  }\r\n\r\n  handleModalClose() {\r\n    this.onRequestClose();\r\n  }\r\n\r\n  handleFilterChange(event: Event) {\r\n    const input = event.target as HTMLInputElement;\r\n    this.onRequestFilterChange(input.value);\r\n    this.parameters = this.parameters.getUpdatedAllParams();\r\n    this.reRender = !this.reRender;\r\n  }\r\n}\r\n","<div *ngIf=\"isRequestsModalVisible\" class=\"modal-container\" [ngStyle]=\"{'background-color': 'rgba(0, 0, 0, 0.5)'}\">\r\n  <div class=\"modal-content\" [ngStyle]=\"{'background-color': backgroundColor, 'top': position.includes('top') ? '10px' : 'auto', 'bottom': position.includes('bottom') ? '10px' : 'auto', 'left': position.includes('Left') ? '10px' : 'auto', 'right': position.includes('Right') ? '10px' : 'auto'}\">\r\n    <div class=\"modal-header\">\r\n      <div>\r\n        Requests <span class=\"badge text-dark\">{{ requestCounter_s }}</span>\r\n      </div>\r\n      <div class=\"close-icon\" (click)=\"handleModalClose()\">\r\n        <fa-icon [icon]=\"faTimes\" size=\"lg\"></fa-icon>\r\n      </div>\r\n    </div>\r\n    <hr class=\"separator\" />\r\n    <div class=\"modal-body\">\r\n      <input type=\"text\" class=\"filter-input\" placeholder=\"Search ...\" (input)=\"handleFilterChange($event)\">\r\n      <div class=\"request-list\">\r\n        <ng-container *ngFor=\"let requestItem of requestList_s; let i = index\">\r\n          <app-render-request-component\r\n            [request]=\"requestItem\"\r\n            [requestList]=\"requestList\"\r\n            [roomName]=\"roomName\"\r\n            [socket]=\"socket\"\r\n            [onRequestItemPress]=\"onRequestItemPress\"\r\n            [updateRequestList]=\"updateRequestList\">\r\n          </app-render-request-component>\r\n        </ng-container>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\nimport {\r\n  Component,\r\n  Input,\r\n  OnInit,\r\n  ViewChild,\r\n  ElementRef,\r\n  AfterViewInit,\r\n  OnDestroy,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  Optional,\r\n  Inject,\r\n} from '@angular/core';\r\nimport {\r\n  faChevronRight,\r\n  faChevronLeft,\r\n  faPencilAlt,\r\n  faPaintBrush,\r\n  faShapes,\r\n  faEraser,\r\n  faSearch,\r\n  faSearchPlus,\r\n  faSearchMinus,\r\n  faFont,\r\n  faTextHeight,\r\n  faUndo,\r\n  faRedo,\r\n  faSave,\r\n  faTrash,\r\n  faTimes,\r\n  faMousePointer,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { SleepType, ShowAlert } from '../../../@types/types';\r\n\r\nexport interface ScreenboardParameters {\r\n  updateCanvasScreenboard: (canvas: HTMLCanvasElement) => void;\r\n  annotateScreenStream: boolean;\r\n  updateAnnotateScreenStream: (annotateScreenStream: boolean) => void;\r\n  updateIsScreenboardModalVisible: (isVisible: boolean) => void;\r\n  sleep: SleepType;\r\n  showAlert?: ShowAlert;\r\n\r\n  getUpdatedAllParams: () => ScreenboardParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ScreenboardOptions {\r\n  customWidth: number;\r\n  customHeight: number;\r\n  parameters: ScreenboardParameters;\r\n  showAspect: boolean;\r\n}\r\n\r\nexport type ScreenboardType = (options: ScreenboardOptions) => void;\r\n\r\n/**\r\n * @fileoverview Screenboard component for MediaSFU-Angular application.\r\n *\r\n * This component provides a screenboard with drawing, freehand, shape, and erase modes.\r\n * It supports mouse and touch events for drawing on a canvas.\r\n *\r\n * @component\r\n * @selector app-screenboard\r\n * @templateUrl ./screenboard.component.html\r\n * @styleUrls ./screenboard.component.css\r\n * @imports CommonModule, FontAwesomeModule, FormsModule\r\n *\r\n * @class Screenboard\r\n * @implements OnInit, AfterViewInit, OnDestroy, OnChanges\r\n *\r\n * @property {number} customWidth - Custom width for the screenboard.\r\n * @property {number} customHeight - Custom height for the screenboard.\r\n * @property {any} parameters - Parameters for the screenboard.\r\n * @property {boolean} showAspect - Flag to show aspect ratio.\r\n *\r\n * @property {ElementRef<HTMLCanvasElement>} canvasRef - Reference to the canvas element.\r\n * @property {ElementRef<HTMLDivElement>} screenboardRef - Reference to the screenboard div element.\r\n * @property {ElementRef<HTMLDivElement>} screenboardContentRef - Reference to the screenboard content div element.\r\n *\r\n * @property {IconDefinition} faChevronRight - FontAwesome icon for chevron right.\r\n * @property {IconDefinition} faChevronLeft - FontAwesome icon for chevron left.\r\n * @property {IconDefinition} faPencilAlt - FontAwesome icon for pencil.\r\n * @property {IconDefinition} faPaintBrush - FontAwesome icon for paint brush.\r\n * @property {IconDefinition} faShapes - FontAwesome icon for shapes.\r\n * @property {IconDefinition} faEraser - FontAwesome icon for eraser.\r\n * @property {IconDefinition} faSearch - FontAwesome icon for search.\r\n * @property {IconDefinition} faSearchPlus - FontAwesome icon for search plus.\r\n * @property {IconDefinition} faSearchMinus - FontAwesome icon for search minus.\r\n * @property {IconDefinition} faFont - FontAwesome icon for font.\r\n * @property {IconDefinition} faTextHeight - FontAwesome icon for text height.\r\n * @property {IconDefinition} faUndo - FontAwesome icon for undo.\r\n * @property {IconDefinition} faRedo - FontAwesome icon for redo.\r\n * @property {IconDefinition} faSave - FontAwesome icon for save.\r\n * @property {IconDefinition} faTrash - FontAwesome icon for trash.\r\n * @property {IconDefinition} faTimes - FontAwesome icon for times.\r\n * @property {IconDefinition} faMousePointer - FontAwesome icon for mouse pointer.\r\n *\r\n * @property {'draw' | 'freehand' | 'shape' | 'erase'} mode - Current drawing mode.\r\n * @property {boolean} isDrawing - Flag to indicate if drawing is in progress.\r\n * @property {number} startX - Starting X coordinate for drawing.\r\n * @property {number} startY - Starting Y coordinate for drawing.\r\n * @property {number} currentX - Current X coordinate for drawing.\r\n * @property {number} currentY - Current Y coordinate for drawing.\r\n * @property {Array<{ x: number; y: number; color: string; thickness: number }>} freehandDrawing - Array of points for freehand drawing.\r\n * @property {any[]} shapes - Array of shapes drawn on the canvas.\r\n * @property {number} eraserThickness - Thickness of the eraser.\r\n * @property {number} brushThickness - Thickness of the brush.\r\n * @property {number} lineThickness - Thickness of the line.\r\n * @property {string} lineType - Type of the line (solid, dashed, dotted, dashDot).\r\n * @property {string} color - Color for drawing.\r\n * @property {string} font - Font for text.\r\n * @property {number} fontSize - Font size for text.\r\n * @property {string | null} shape - Current shape being drawn.\r\n * @property {boolean} toolbarVisible - Flag to indicate if the toolbar is visible.\r\n * @property {string | null} dropdownOpen - ID of the currently open dropdown.\r\n * @property {HTMLCanvasElement} canvas - Canvas element.\r\n * @property {CanvasRenderingContext2D} ctx - Canvas rendering context.\r\n *\r\n * @constructor\r\n * @param {number} [injectedCustomWidth] - Injected custom width.\r\n * @param {number} [injectedCustomHeight] - Injected custom height.\r\n * @param {any} [injectedParameters] - Injected parameters.\r\n * @param {boolean} [injectedShowAspect] - Injected show aspect flag.\r\n *\r\n * @method ngOnInit - Lifecycle hook that is called after data-bound properties are initialized.\r\n * @method ngOnChanges - Lifecycle hook that is called when any data-bound property changes.\r\n * @method ngAfterViewInit - Lifecycle hook that is called after the component's view has been fully initialized.\r\n * @method ngOnDestroy - Lifecycle hook that is called just before the component is destroyed.\r\n *\r\n * @method addListeners - Adds event listeners to the canvas.\r\n * @method handleMouseDown - Handles mouse down events.\r\n * @method handleMouseMove - Handles mouse move events.\r\n * @method handleMouseUp - Handles mouse up events.\r\n * @method handleTouchStart - Handles touch start events.\r\n * @method handleTouchMove - Handles touch move events.\r\n * @method handleTouchEnd - Handles touch end events.\r\n * @method handleClickOutside - Handles click events outside the component.\r\n * @method handleDropdownClick - Handles dropdown click events.\r\n * @method setDrawMode - Sets the drawing mode.\r\n * @method setFreehandMode - Sets the freehand mode.\r\n * @method setShapeMode - Sets the shape mode.\r\n * @method setEraseMode - Sets the erase mode.\r\n * @method startDrawing - Starts the drawing process.\r\n * @method draw - Draws on the canvas.\r\n * @method stopDrawing - Stops the drawing process.\r\n * @method drawLine - Draws a line on the canvas.\r\n * @method drawShapes - Draws all shapes on the canvas.\r\n * @method drawFreehand - Draws freehand on the canvas.\r\n * @method drawShape - Draws a shape on the canvas.\r\n * @method drawPolygon - Draws a polygon on the canvas.\r\n * @method removeShape - Removes the first shape from the shapes array.\r\n * @method erase - Erases part of the drawing.\r\n * @method isPointNearLine - Checks if a point is near a line.\r\n * @method toggleToolbar - Toggles the visibility of the toolbar.\r\n * @method toggleAnnotate - Toggles the annotation mode.\r\n *\r\n * @example\r\n * ```html\r\n * <app-screenboard\r\n *  [customWidth]=\"customWidth\"\r\n * [customHeight]=\"customHeight\"\r\n * [parameters]=\"screenboardParameters\"\r\n * [showAspect]=\"showAspect\"\r\n * ></app-screenboard>\r\n * ```\r\n */\r\n@Component({\r\n    selector: 'app-screenboard',\r\n    templateUrl: './screenboard.component.html',\r\n    styleUrls: ['./screenboard.component.css'],\r\n    imports: [CommonModule, FontAwesomeModule, FormsModule]\r\n})\r\nexport class Screenboard implements OnInit, AfterViewInit, OnDestroy, OnChanges {\r\n  @Input() customWidth!: number;\r\n  @Input() customHeight!: number;\r\n  @Input() parameters: ScreenboardParameters = {} as ScreenboardParameters;\r\n  @Input() showAspect!: boolean;\r\n\r\n  @ViewChild('canvasRef')\r\n  canvasRef!: ElementRef<HTMLCanvasElement>;\r\n  @ViewChild('screenboardRef')\r\n  screenboardRef!: ElementRef<HTMLDivElement>;\r\n  @ViewChild('screenboardContentRef')\r\n  screenboardContentRef!: ElementRef<HTMLDivElement>;\r\n\r\n  faChevronRight = faChevronRight;\r\n  faChevronLeft = faChevronLeft;\r\n  faPencilAlt = faPencilAlt;\r\n  faPaintBrush = faPaintBrush;\r\n  faShapes = faShapes;\r\n  faEraser = faEraser;\r\n  faSearch = faSearch;\r\n  faSearchPlus = faSearchPlus;\r\n  faSearchMinus = faSearchMinus;\r\n  faFont = faFont;\r\n  faTextHeight = faTextHeight;\r\n  faUndo = faUndo;\r\n  faRedo = faRedo;\r\n  faSave = faSave;\r\n  faTrash = faTrash;\r\n  faTimes = faTimes;\r\n  faMousePointer = faMousePointer;\r\n\r\n  mode: 'draw' | 'freehand' | 'shape' | 'erase' = 'draw';\r\n  isDrawing = false;\r\n  startX = 0;\r\n  startY = 0;\r\n  currentX = 0;\r\n  currentY = 0;\r\n  freehandDrawing: { x: number; y: number; color: string; thickness: number }[] = [];\r\n  shapes: any[] = [];\r\n  eraserThickness = 10;\r\n  brushThickness = 6;\r\n  lineThickness = 6;\r\n  lineType = 'solid';\r\n  color = '#000000';\r\n  font = 'Arial';\r\n  fontSize = 20;\r\n  shape: string | null = null;\r\n  toolbarVisible = false;\r\n  dropdownOpen: string | null = null;\r\n  canvas!: HTMLCanvasElement;\r\n  ctx!: CanvasRenderingContext2D;\r\n\r\n  constructor(\r\n    @Optional() @Inject('customWidth') injectedCustomWidth: number,\r\n    @Optional() @Inject('customHeight') injectedCustomHeight: number,\r\n    @Optional() @Inject('parameters') injectedParameters: any,\r\n    @Optional() @Inject('showAspect') injectedShowAspect: boolean,\r\n  ) {\r\n    this.customWidth = injectedCustomWidth || this.customWidth || 0;\r\n    this.customHeight = injectedCustomHeight || this.customHeight || 0;\r\n    this.parameters = injectedParameters || this.parameters || {};\r\n    this.showAspect = injectedShowAspect || this.showAspect || false;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    setTimeout(() => {\r\n      if (this.parameters) {\r\n        this.parameters = this.parameters.getUpdatedAllParams();\r\n      }\r\n    }, 100);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['showAspect']) {\r\n      if (!this.canvas && this.canvasRef) {\r\n        this.canvas = this.canvasRef!.nativeElement;\r\n        this.addListeners();\r\n      }\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (this.canvasRef && !this.canvas) {\r\n      this.canvas = this.canvasRef!.nativeElement;\r\n      this.addListeners();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.canvas) {\r\n      this.canvas.removeEventListener('mousedown', this.handleMouseDown.bind(this));\r\n      this.canvas.removeEventListener('mousemove', this.handleMouseMove.bind(this));\r\n      this.canvas.removeEventListener('mouseup', this.handleMouseUp.bind(this));\r\n      this.canvas.removeEventListener('mouseout', this.handleMouseUp.bind(this));\r\n\r\n      this.canvas.removeEventListener('touchstart', this.handleTouchStart.bind(this));\r\n      this.canvas.removeEventListener('touchmove', this.handleTouchMove.bind(this));\r\n      this.canvas.removeEventListener('touchend', this.handleTouchEnd.bind(this));\r\n\r\n      document.removeEventListener('mousedown', this.handleClickOutside.bind(this));\r\n    }\r\n  }\r\n\r\n  addListeners = () => {\r\n    if (this.canvas) {\r\n      this.ctx = this.canvas.getContext('2d')!;\r\n      this.parameters.updateCanvasScreenboard(this.canvas);\r\n\r\n      this.canvas.addEventListener('mousedown', this.handleMouseDown.bind(this));\r\n      this.canvas.addEventListener('mousemove', this.handleMouseMove.bind(this));\r\n      this.canvas.addEventListener('mouseup', this.handleMouseUp.bind(this));\r\n      this.canvas.addEventListener('mouseout', this.handleMouseUp.bind(this));\r\n\r\n      this.canvas.addEventListener('touchstart', this.handleTouchStart.bind(this));\r\n      this.canvas.addEventListener('touchmove', this.handleTouchMove.bind(this));\r\n      this.canvas.addEventListener('touchend', this.handleTouchEnd.bind(this));\r\n\r\n      document.addEventListener('mousedown', this.handleClickOutside.bind(this));\r\n    }\r\n  };\r\n\r\n  handleMouseDown(event: MouseEvent) {\r\n    this.startDrawing(event);\r\n  }\r\n\r\n  handleMouseMove(event: MouseEvent) {\r\n    this.draw(event);\r\n  }\r\n\r\n  handleMouseUp() {\r\n    this.stopDrawing();\r\n  }\r\n\r\n  handleTouchStart(e: TouchEvent) {\r\n    e.preventDefault();\r\n    const touch = e.touches[0];\r\n    const mouseEvent = new MouseEvent('mousedown', {\r\n      clientX: touch.clientX,\r\n      clientY: touch.clientY,\r\n    });\r\n    this.canvas.dispatchEvent(mouseEvent);\r\n  }\r\n\r\n  handleTouchMove(e: TouchEvent) {\r\n    e.preventDefault();\r\n    const touch = e.touches[0];\r\n    const mouseEvent = new MouseEvent('mousemove', {\r\n      clientX: touch.clientX,\r\n      clientY: touch.clientY,\r\n    });\r\n    this.canvas.dispatchEvent(mouseEvent);\r\n  }\r\n\r\n  handleTouchEnd(e: TouchEvent) {\r\n    e.preventDefault();\r\n    const mouseEvent = new MouseEvent('mouseup', {});\r\n    this.canvas.dispatchEvent(mouseEvent);\r\n  }\r\n\r\n  handleClickOutside(event: MouseEvent) {\r\n    if (this.dropdownOpen && !(event.target as HTMLElement).closest('.btn-group')) {\r\n      this.dropdownOpen = null;\r\n    }\r\n  }\r\n\r\n  handleDropdownClick(id: string) {\r\n    this.dropdownOpen = this.dropdownOpen === id ? null : id;\r\n  }\r\n\r\n  setDrawMode(thickness: number) {\r\n    this.lineThickness = thickness;\r\n    this.mode = 'draw';\r\n    this.dropdownOpen = null;\r\n  }\r\n\r\n  setFreehandMode(thickness: number) {\r\n    this.brushThickness = thickness;\r\n    this.mode = 'freehand';\r\n    this.dropdownOpen = null;\r\n  }\r\n\r\n  setShapeMode(shape: string) {\r\n    this.shape = shape;\r\n    this.mode = 'shape';\r\n    this.dropdownOpen = null;\r\n  }\r\n\r\n  setEraseMode(thickness: number) {\r\n    this.eraserThickness = thickness;\r\n    this.mode = 'erase';\r\n    this.dropdownOpen = null;\r\n  }\r\n\r\n  startDrawing(event: MouseEvent) {\r\n    this.isDrawing = true;\r\n    this.startX = event.offsetX;\r\n    this.startY = event.offsetY;\r\n\r\n    if (this.mode === 'erase') {\r\n      this.erase(event.offsetX, event.offsetY);\r\n    } else if (this.mode === 'draw' || this.mode === 'freehand') {\r\n      this.ctx.beginPath();\r\n      this.ctx.moveTo(event.offsetX, event.offsetY);\r\n      if (this.mode === 'freehand') {\r\n        this.freehandDrawing = [\r\n          { x: event.offsetX, y: event.offsetY, color: this.color, thickness: this.brushThickness },\r\n        ];\r\n      }\r\n    }\r\n  }\r\n\r\n  draw(event: MouseEvent) {\r\n    if (!this.isDrawing) return;\r\n\r\n    this.currentX = event.offsetX;\r\n    this.currentY = event.offsetY;\r\n\r\n    if (this.mode === 'erase') {\r\n      this.erase(event.offsetX, event.offsetY);\r\n    } else if (this.mode === 'draw') {\r\n      this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n      this.drawShapes();\r\n      this.drawLine(this.startX, this.startY, event.offsetX, event.offsetY);\r\n    } else if (this.mode === 'freehand') {\r\n      this.ctx.lineTo(event.offsetX, event.offsetY);\r\n      this.ctx.strokeStyle = this.color;\r\n      this.ctx.lineWidth = this.brushThickness;\r\n      this.ctx.stroke();\r\n      this.freehandDrawing.push({\r\n        x: event.offsetX,\r\n        y: event.offsetY,\r\n        color: this.color,\r\n        thickness: this.brushThickness,\r\n      });\r\n    } else if (this.mode === 'shape') {\r\n      this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n      this.drawShapes();\r\n      this.drawShape(this.shape!, this.startX, this.startY, event.offsetX, event.offsetY);\r\n    }\r\n  }\r\n\r\n  stopDrawing() {\r\n    this.isDrawing = false;\r\n\r\n    if (this.mode === 'draw') {\r\n      this.shapes.push({\r\n        type: 'line',\r\n        x1: this.startX,\r\n        y1: this.startY,\r\n        x2: this.currentX,\r\n        y2: this.currentY,\r\n        color: this.color,\r\n        thickness: this.lineThickness,\r\n        lineType: this.lineType,\r\n      });\r\n    } else if (this.mode === 'freehand') {\r\n      this.shapes.push({\r\n        type: 'freehand',\r\n        points: this.freehandDrawing,\r\n        color: this.color,\r\n        thickness: this.brushThickness,\r\n      });\r\n      this.freehandDrawing = [];\r\n    } else if (this.mode === 'shape') {\r\n      this.shapes.push({\r\n        type: this.shape!,\r\n        x1: this.startX,\r\n        y1: this.startY,\r\n        x2: this.currentX,\r\n        y2: this.currentY,\r\n        color: this.color,\r\n        thickness: this.lineThickness,\r\n        lineType: this.lineType,\r\n      });\r\n    }\r\n\r\n    setTimeout(() => this.removeShape(), 15000);\r\n  }\r\n\r\n  drawLine = (x1: number, y1: number, x2: number, y2: number) => {\r\n    this.ctx.beginPath();\r\n    this.ctx.strokeStyle = this.color;\r\n    this.ctx.lineWidth = this.lineThickness;\r\n    if (this.lineType === 'dashed') {\r\n      this.ctx.setLineDash([10, 10]);\r\n    } else if (this.lineType === 'dotted') {\r\n      this.ctx.setLineDash([2, 10]);\r\n    } else if (this.lineType === 'dashDot') {\r\n      this.ctx.setLineDash([10, 5, 2, 5]);\r\n    } else {\r\n      this.ctx.setLineDash([]);\r\n    }\r\n    this.ctx.moveTo(x1, y1);\r\n    this.ctx.lineTo(x2, y2);\r\n    this.ctx.stroke();\r\n    this.ctx.setLineDash([]);\r\n  };\r\n\r\n  drawShapes = () => {\r\n    this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n    this.shapes.forEach((shape) => {\r\n      if (shape.type === 'line') {\r\n        this.drawLine(shape.x1, shape.y1, shape.x2, shape.y2);\r\n      } else if (shape.type === 'freehand') {\r\n        this.drawFreehand(shape.points);\r\n      } else {\r\n        this.drawShape(shape.type, shape.x1, shape.y1, shape.x2, shape.y2);\r\n      }\r\n    });\r\n  };\r\n\r\n  drawFreehand = (points: { x: number; y: number; color: string; thickness: number }[]) => {\r\n    if (points.length < 2) return;\r\n    this.ctx.strokeStyle = this.color;\r\n    this.ctx.lineWidth = this.brushThickness;\r\n    this.ctx.beginPath();\r\n    this.ctx.moveTo(points[0].x, points[0].y);\r\n    for (let i = 1; i < points.length; i++) {\r\n      this.ctx.lineTo(points[i].x, points[i].y);\r\n    }\r\n    this.ctx.stroke();\r\n  };\r\n\r\n  drawShape = (type: string, x1: number, y1: number, x2: number, y2: number) => {\r\n    this.ctx.beginPath();\r\n    this.ctx.strokeStyle = this.color;\r\n    this.ctx.lineWidth = this.lineThickness;\r\n    if (this.lineType === 'dashed') {\r\n      this.ctx.setLineDash([10, 10]);\r\n    } else if (this.lineType === 'dotted') {\r\n      this.ctx.setLineDash([2, 10]);\r\n    } else if (this.lineType === 'dashDot') {\r\n      this.ctx.setLineDash([10, 5, 2, 5]);\r\n    } else {\r\n      this.ctx.setLineDash([]);\r\n    }\r\n    if (type === 'rectangle') {\r\n      this.ctx.strokeRect(x1, y1, x2 - x1, y2 - y1);\r\n    } else if (type === 'circle') {\r\n      const radius = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\r\n      this.ctx.arc(x1, y1, radius, 0, 2 * Math.PI);\r\n      this.ctx.stroke();\r\n    } else if (type === 'rhombus') {\r\n      const centerX = (x1 + x2) / 2;\r\n      const centerY = (y1 + y2) / 2;\r\n      this.ctx.moveTo(centerX, y1);\r\n      this.ctx.lineTo(x2, centerY);\r\n      this.ctx.lineTo(centerX, y2);\r\n      this.ctx.lineTo(x1, centerY);\r\n      this.ctx.closePath();\r\n      this.ctx.stroke();\r\n    } else if (type === 'pentagon') {\r\n      this.drawPolygon(5, x1, y1, x2, y2);\r\n    } else if (type === 'hexagon') {\r\n      this.drawPolygon(6, x1, y1, x2, y2);\r\n    } else if (type === 'triangle') {\r\n      const centerXTriangle = (x1 + x2) / 2;\r\n      this.ctx.moveTo(centerXTriangle, y1);\r\n      this.ctx.lineTo(x2, y2);\r\n      this.ctx.lineTo(x1, y2);\r\n      this.ctx.closePath();\r\n      this.ctx.stroke();\r\n    } else if (type === 'square') {\r\n      this.ctx.strokeRect(x1, y1, x2 - x1, x2 - x1);\r\n    } else if (type === 'octagon') {\r\n      this.drawPolygon(8, x1, y1, x2, y2);\r\n    } else if (type === 'oval') {\r\n      const radiusX = Math.abs(x2 - x1) / 2;\r\n      const radiusY = Math.abs(y2 - y1) / 2;\r\n      const centerX = (x1 + x2) / 2;\r\n      const centerY = (y1 + y2) / 2;\r\n      this.ctx.ellipse(centerX, centerY, radiusX, radiusY, 0, 0, 2 * Math.PI);\r\n      this.ctx.stroke();\r\n    } else if (type === 'parallelogram') {\r\n      const centerX = (x1 + x2) / 2;\r\n      this.ctx.moveTo(centerX, y1);\r\n      this.ctx.lineTo(x2, y2);\r\n      this.ctx.lineTo(centerX, y2);\r\n      this.ctx.lineTo(x1, y1);\r\n      this.ctx.closePath();\r\n      this.ctx.stroke();\r\n    }\r\n    this.ctx.setLineDash([]);\r\n  };\r\n\r\n  drawPolygon = (sides: number, x1: number, y1: number, x2: number, y2: number) => {\r\n    const centerX = (x1 + x2) / 2;\r\n    const centerY = (y1 + y2) / 2;\r\n    const radius = Math.min(Math.abs(x2 - x1), Math.abs(y2 - y1)) / 2;\r\n    const angle = (2 * Math.PI) / sides;\r\n    this.ctx.beginPath();\r\n    for (let i = 0; i < sides; i++) {\r\n      const x = centerX + radius * Math.cos(i * angle - Math.PI / 2);\r\n      const y = centerY + radius * Math.sin(i * angle - Math.PI / 2);\r\n      if (i === 0) {\r\n        this.ctx.moveTo(x, y);\r\n      } else {\r\n        this.ctx.lineTo(x, y);\r\n      }\r\n    }\r\n    this.ctx.closePath();\r\n    this.ctx.stroke();\r\n  };\r\n\r\n  removeShape = () => {\r\n    this.shapes.shift();\r\n    this.drawShapes();\r\n  };\r\n\r\n  erase = (x: number, y: number) => {\r\n    this.ctx.save();\r\n    this.ctx.globalCompositeOperation = 'destination-out';\r\n    this.ctx.beginPath();\r\n    this.ctx.arc(x, y, this.eraserThickness / 2, 0, Math.PI * 2, false);\r\n    this.ctx.fill();\r\n    this.ctx.restore();\r\n\r\n    this.shapes = this.shapes\r\n      .map((shape) => {\r\n        if (shape.type === 'freehand') {\r\n          return {\r\n            ...shape,\r\n            points: shape.points.filter((point: any) => {\r\n              const distance = Math.sqrt(Math.pow(point.x - x, 2) + Math.pow(point.y - y, 2));\r\n              return distance > this.eraserThickness / 2;\r\n            }),\r\n          };\r\n        } else if (shape.type === 'line') {\r\n          if (\r\n            this.isPointNearLine(\r\n              x,\r\n              y,\r\n              shape.x1,\r\n              shape.y1,\r\n              shape.x2,\r\n              shape.y2,\r\n              this.eraserThickness / 2,\r\n            )\r\n          ) {\r\n            return null;\r\n          }\r\n        } else if (shape.type === 'text') {\r\n          const textWidth = this.ctx.measureText(shape.text).width;\r\n          if (\r\n            x > shape.x &&\r\n            x < shape.x + textWidth &&\r\n            y > shape.y - shape.fontSize &&\r\n            y < shape.y\r\n          ) {\r\n            return null;\r\n          }\r\n        } else {\r\n          if (x > shape.x1 && x < shape.x2 && y > shape.y1 && y < shape.y2) {\r\n            return null;\r\n          }\r\n        }\r\n        return shape;\r\n      })\r\n      .filter((shape) => shape && (shape.type !== 'freehand' || shape.points.length > 0));\r\n  };\r\n\r\n  isPointNearLine(\r\n    px: number,\r\n    py: number,\r\n    x1: number,\r\n    y1: number,\r\n    x2: number,\r\n    y2: number,\r\n    threshold: number,\r\n  ): boolean {\r\n    const dx = x2 - x1;\r\n    const dy = y2 - y1;\r\n    const length = Math.sqrt(dx * dx + dy * dy);\r\n    const dot = ((px - x1) * dx + (py - y1) * dy) / (length * length);\r\n    const closestX = x1 + dot * dx;\r\n    const closestY = y1 + dot * dy;\r\n    const distance = Math.sqrt(Math.pow(px - closestX, 2) + Math.pow(py - closestY, 2));\r\n    return distance <= threshold;\r\n  }\r\n\r\n  toggleToolbar = () => {\r\n    this.toolbarVisible = !this.toolbarVisible;\r\n  };\r\n\r\n  toggleAnnotate = async () => {\r\n    const annotateScreenStream = this.parameters.annotateScreenStream;\r\n    this.parameters.annotateScreenStream = !annotateScreenStream;\r\n\r\n    setTimeout(() => {\r\n      this.parameters.updateAnnotateScreenStream(!annotateScreenStream);\r\n    });\r\n    if (this.parameters.annotateScreenStream) {\r\n      this.toolbarVisible = true;\r\n      this.parameters.showAlert?.({\r\n        message: `You can now annotate the screen. If you cannot see your annotation controls (on top), try minimizing your screen by using 'Cmd' + '-' (on Mac) or 'Ctrl' + '-' (on Windows).`,\r\n        type: 'success',\r\n        duration: 9000,\r\n      });\r\n    } else {\r\n      this.toolbarVisible = false;\r\n    }\r\n\r\n    this.parameters.updateIsScreenboardModalVisible(true);\r\n    await this.parameters.sleep({ ms: 500 });\r\n    this.parameters.updateIsScreenboardModalVisible(false);\r\n  };\r\n}\r\n","<div id=\"screenboard-interface\" *ngIf=\"showAspect\" style=\"position: relative; display: block; justify-content: center; align-items: center; background-color: transparent; z-index: 1000; width: 100%; height: 100%; max-width: 100%; max-height: 100%; overflow: auto;\" #screenboardRef>\r\n  <div id=\"screenboardContent\" style=\"position: relative; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; overflow: hidden; top: 0; left: 0;\" #screenboardContentRef>\r\n    <button id=\"annotateScreen\" class=\"btn btn-primary btnBoardScreen annotateScreenBtn\" style=\"position: absolute; top: 5px; right: 10px; z-index: 1000;\" (click)=\"toggleAnnotate()\">\r\n      <fa-icon [icon]=\"faPencilAlt\" [ngStyle]=\"{'color': parameters.annotateScreenStream ? 'red' : 'green'}\"></fa-icon>\r\n    </button>\r\n\r\n    <button id=\"toolbarToggleScreen\" *ngIf=\"parameters.annotateScreenStream\" class=\"btn btnBoardScreen btn-primary\" style=\"position: absolute; top: 5px; right: 55px; z-index: 1000;\" (click)=\"toggleToolbar()\">\r\n      <fa-icon [icon]=\"toolbarVisible ? faChevronRight : faChevronLeft\"></fa-icon>\r\n    </button>\r\n\r\n    <div class=\"toolbarScreen mb-3\" id=\"toolbarScreen\" style=\"position: absolute; top: 5px; right: 105px; z-index: 1000; background-color: transparent;\" [style.display]=\"toolbarVisible ? 'block' : 'none'\">\r\n      <!-- Draw Mode Dropdown -->\r\n      <div class=\"btn-group\" role=\"group\">\r\n        <button class=\"btn btnBoardScreen btn-secondary dropdown-toggle\" id=\"drawModeScreen\" (click)=\"handleDropdownClick('drawModeScreen')\">\r\n          <fa-icon [icon]=\"faPencilAlt\"></fa-icon>\r\n        </button>\r\n        <div *ngIf=\"dropdownOpen === 'drawModeScreen'\" class=\"dropdown-menu show\">\r\n          <button class=\"dropdown-item\" (click)=\"setDrawMode(3)\">XX-Small (3px)</button>\r\n          <button class=\"dropdown-item\" (click)=\"setDrawMode(6)\">X-Small (6px)</button>\r\n          <button class=\"dropdown-item\" (click)=\"setDrawMode(12)\">Small (12px)</button>\r\n          <button class=\"dropdown-item\" (click)=\"setDrawMode(18)\">Medium (18px)</button>\r\n          <button class=\"dropdown-item\" (click)=\"setDrawMode(24)\">Large (24px)</button>\r\n          <button class=\"dropdown-item\" (click)=\"setDrawMode(36)\">X-Large (36px)</button>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Freehand Mode Dropdown -->\r\n      <div class=\"btn-group\" role=\"group\">\r\n        <button class=\"btn btnBoardScreen btn-dark dropdown-toggle\" id=\"freehandModeScreen\" (click)=\"handleDropdownClick('freehandModeScreen')\">\r\n          <fa-icon [icon]=\"faPaintBrush\"></fa-icon>\r\n        </button>\r\n        <div *ngIf=\"dropdownOpen === 'freehandModeScreen'\" class=\"dropdown-menu show\">\r\n          <button class=\"dropdown-item\" (click)=\"setFreehandMode(5)\">X-Small (5px)</button>\r\n          <button class=\"dropdown-item\" (click)=\"setFreehandMode(10)\">Small (10px)</button>\r\n          <button class=\"dropdown-item\" (click)=\"setFreehandMode(20)\">Medium (20px)</button>\r\n          <button class=\"dropdown-item\" (click)=\"setFreehandMode(40)\">Large (40px)</button>\r\n          <button class=\"dropdown-item\" (click)=\"setFreehandMode(60)\">X-Large (60px)</button>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Shape Mode Dropdown with Images -->\r\n      <div class=\"btn-group\" role=\"group\">\r\n        <button class=\"btn btnBoardScreen btn-dark dropdown-toggle\" id=\"shapeModeScreen\" (click)=\"handleDropdownClick('shapeModeScreen')\">\r\n          <fa-icon [icon]=\"faShapes\"></fa-icon>\r\n        </button>\r\n        <div *ngIf=\"dropdownOpen === 'shapeModeScreen'\" class=\"dropdown-menu show\">\r\n          <button class=\"dropdown-item\" (click)=\"setShapeMode('square')\">\r\n            <img src=\"https://mediasfu.com/images/svg/square.svg\" alt=\"Square\" class=\"shape-icon\" /> Square\r\n          </button>\r\n          <button class=\"dropdown-item\" (click)=\"setShapeMode('rectangle')\">\r\n            <img src=\"https://mediasfu.com/images/svg/rectangle.svg\" alt=\"Rectangle\" class=\"shape-icon\" /> Rectangle\r\n          </button>\r\n          <button class=\"dropdown-item\" (click)=\"setShapeMode('circle')\">\r\n            <img src=\"https://mediasfu.com/images/svg/circle.svg\" alt=\"Circle\" class=\"shape-icon\" /> Circle\r\n          </button>\r\n          <button class=\"dropdown-item\" (click)=\"setShapeMode('triangle')\">\r\n            <img src=\"https://mediasfu.com/images/svg/triangle.svg\" alt=\"Triangle\" class=\"shape-icon\" /> Triangle\r\n          </button>\r\n          <button class=\"dropdown-item\" (click)=\"setShapeMode('hexagon')\">\r\n            <img src=\"https://mediasfu.com/images/svg/hexagon.svg\" alt=\"Hexagon\" class=\"shape-icon\" /> Hexagon\r\n          </button>\r\n          <button class=\"dropdown-item\" (click)=\"setShapeMode('pentagon')\">\r\n            <img src=\"https://mediasfu.com/images/svg/pentagon.svg\" alt=\"Pentagon\" class=\"shape-icon\" /> Pentagon\r\n          </button>\r\n          <button class=\"dropdown-item\" (click)=\"setShapeMode('rhombus')\">\r\n            <img src=\"https://mediasfu.com/images/svg/rhombus.svg\" alt=\"Rhombus\" class=\"shape-icon\" /> Rhombus\r\n          </button>\r\n          <button class=\"dropdown-item\" (click)=\"setShapeMode('octagon')\">\r\n            <img src=\"https://mediasfu.com/images/svg/octagon.svg\" alt=\"Octagon\" class=\"shape-icon\" /> Octagon\r\n          </button>\r\n          <button class=\"dropdown-item\" (click)=\"setShapeMode('oval')\">\r\n            <img src=\"https://mediasfu.com/images/svg/oval.svg\" alt=\"Oval\" class=\"shape-icon\" /> Oval\r\n          </button>\r\n          <button class=\"dropdown-item\" (click)=\"setShapeMode('parallelogram')\">\r\n            <img src=\"https://mediasfu.com/images/svg/parallelogram.svg\" alt=\"Parallelogram\" class=\"shape-icon\" /> Parallelogram\r\n          </button>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Erase Mode Dropdown -->\r\n      <div class=\"btn-group\" role=\"group\">\r\n        <button class=\"btn btnBoardScreen btn-danger dropdown-toggle\" id=\"eraseModeScreen\" (click)=\"handleDropdownClick('eraseModeScreen')\">\r\n          <fa-icon [icon]=\"faEraser\"></fa-icon>\r\n        </button>\r\n        <div *ngIf=\"dropdownOpen === 'eraseModeScreen'\" class=\"dropdown-menu show\">\r\n          <button class=\"dropdown-item\" (click)=\"setEraseMode(5)\">X-Small (5px)</button>\r\n          <button class=\"dropdown-item\" (click)=\"setEraseMode(10)\">Small (10px)</button>\r\n          <button class=\"dropdown-item\" (click)=\"setEraseMode(20)\">Medium (20px)</button>\r\n          <button class=\"dropdown-item\" (click)=\"setEraseMode(30)\">Large (30px)</button>\r\n          <button class=\"dropdown-item\" (click)=\"setEraseMode(60)\">X-Large (60px)</button>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Additional Toolbar Controls -->\r\n      <button class=\"btn btnBoard btn-success\" id=\"zoomResetScreen\" style=\"display: none;\">\r\n        <fa-icon [icon]=\"faSearch\"></fa-icon>\r\n      </button>\r\n\r\n      <input type=\"color\" class=\"btn\" id=\"colorPickerScreen\" [(ngModel)]=\"color\">\r\n      <select id=\"lineTypePickerScreen\" class=\"custom-select\" style=\"width: auto;\" [(ngModel)]=\"lineType\">\r\n        <option value=\"solid\">Solid</option>\r\n        <option value=\"dashed\">Dashed</option>\r\n        <option value=\"dotted\">Dotted</option>\r\n        <option value=\"dashDot\">Dash-Dot</option>\r\n      </select>\r\n    </div>\r\n\r\n    <canvas id=\"canvasRef\" width=\"1280\" height=\"720\" [ngStyle]=\"{'display': parameters.annotateScreenStream ? 'block' : 'none'}\" style=\"padding: 0; margin: 0;\" #canvasRef></canvas>\r\n  </div>\r\n</div>\r\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\nimport {\r\n  Component,\r\n  Input,\r\n  OnInit,\r\n  OnDestroy,\r\n  ViewChild,\r\n  ElementRef,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  AfterViewInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { Producer } from 'mediasoup-client/lib/types';\r\nimport {\r\n  ConnectSendTransportScreenType,\r\n  CreateSendTransportType,\r\n  DisconnectSendTransportScreenType,\r\n  PrepopulateUserMediaType,\r\n  StopShareScreenType,\r\n  SleepType,\r\n  ConnectSendTransportScreenParameters,\r\n  CreateSendTransportParameters,\r\n  DisconnectSendTransportScreenParameters,\r\n  PrepopulateUserMediaParameters,\r\n  StopShareScreenParameters,\r\n} from '../../../@types/types';\r\n\r\nexport interface ScreenboardModalParameters\r\n  extends ConnectSendTransportScreenParameters,\r\n    CreateSendTransportParameters,\r\n    DisconnectSendTransportScreenParameters,\r\n    PrepopulateUserMediaParameters,\r\n    StopShareScreenParameters {\r\n  localStreamScreen: MediaStream | null;\r\n  shared: boolean;\r\n  hostLabel: string;\r\n  annotateScreenStream: boolean;\r\n  processedScreenStream: MediaStream | null;\r\n  mainScreenCanvas: HTMLCanvasElement | null;\r\n  canvasScreenboard: HTMLCanvasElement | null;\r\n  transportCreated: boolean;\r\n  screenProducer: Producer | null;\r\n\r\n  updateLocalStreamScreen: (stream: MediaStream | null) => void;\r\n  updateProcessedScreenStream: (stream: MediaStream | null) => void;\r\n  updateMainScreenCanvas: (canvas: HTMLCanvasElement | null) => void;\r\n\r\n  // mediasfu functions\r\n  sleep: SleepType;\r\n  createSendTransport: CreateSendTransportType;\r\n  disconnectSendTransportScreen: DisconnectSendTransportScreenType;\r\n  connectSendTransportScreen: ConnectSendTransportScreenType;\r\n  stopShareScreen: StopShareScreenType;\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n\r\n  getUpdatedAllParams: () => ScreenboardModalParameters;\r\n  // [key: string]: any;\r\n}\r\n\r\nexport interface ScreenboardModalOptions {\r\n  parameters: ScreenboardModalParameters;\r\n  isVisible: boolean;\r\n  onClose: () => void;\r\n  position: string;\r\n  backgroundColor: string;\r\n}\r\n\r\nexport type ScreenboardModalType = (options: ScreenboardModalOptions) => HTMLElement;\r\n\r\n/**\r\n * @fileoverview ScreenboardModal component for handling screen annotation and modal visibility.\r\n *\r\n * @component\r\n * @selector app-screenboard-modal\r\n * @standalone true\r\n * @templateUrl ./screenboard-modal.component.html\r\n * @styleUrls ./screenboard-modal.component.css\r\n * @imports CommonModule, FormsModule, FontAwesomeModule\r\n *\r\n * @class ScreenboardModal\r\n * @implements OnInit, OnDestroy, OnChanges, AfterViewInit\r\n *\r\n * @description\r\n * This component is responsible for managing the screen annotation modal, including showing and hiding the modal,\r\n * handling screen annotations, and managing media streams.\r\n *\r\n * @property {ScreenboardModalParameters} parameters - Input parameter for screen annotation modal.\r\n * @property {boolean} isVisible - Input flag to control the visibility of the modal.\r\n * @property {() => void} onClose - Input callback function to be called when the modal is closed.\r\n * @property {string} position - Input string to set the position of the modal.\r\n * @property {string} backgroundColor - Input string to set the background color of the modal.\r\n *\r\n * @property {ElementRef<HTMLVideoElement>} screenVideoRef - ViewChild reference to the screen video element.\r\n * @property {ElementRef<HTMLCanvasElement>} screenCanvasRef - ViewChild reference to the screen canvas element.\r\n *\r\n * @property {IconDefinition} faTimes - FontAwesome icon for the close button.\r\n *\r\n * @property {any} annotationInterval - Interval for annotation updates.\r\n * @property {any} annotationCheckInterval - Interval for checking annotation updates.\r\n * @property {MediaStream | null} clonedStreamScreen - Cloned media stream for screen sharing.\r\n * @property {CanvasRenderingContext2D | null} ctx - Canvas rendering context.\r\n *\r\n * @method ngOnInit - Initialization logic that does not depend on the view.\r\n * @method ngOnDestroy - Cleanup logic when the component is destroyed.\r\n * @method ngOnChanges - Logic to handle changes in input properties.\r\n * @method ngAfterViewInit - Logic that requires view access.\r\n * @method showModal - Method to show the modal and handle screen annotation setup.\r\n * @method hideModal - Method to hide the modal and cleanup screen annotation.\r\n * @method annotatationPreview - Method to handle the preview of screen annotations.\r\n * @method handleScreenTransport - Method to handle screen transport logic.\r\n * @method stopAnnotation - Method to stop the screen annotation.\r\n * @method stopAllTracks - Method to stop all media tracks.\r\n * @returns {HTMLElement} The screenboard modal component.\r\n * @example\r\n * ```html\r\n * <app-screenboard-modal\r\n *  [parameters]=\"screenboardModalParams\"\r\n * [isVisible]=\"isModalVisible\"\r\n * [onClose]=\"closeModal\"\r\n * [position]=\"'topRight'\"\r\n * [backgroundColor]=\"'#83c0e9'\">\r\n * </app-screenboard-modal>\r\n * ```\r\n */\r\n@Component({\r\n    selector: 'app-screenboard-modal',\r\n    templateUrl: './screenboard-modal.component.html',\r\n    styleUrls: ['./screenboard-modal.component.css'],\r\n    imports: [CommonModule, FormsModule, FontAwesomeModule]\r\n})\r\nexport class ScreenboardModal implements OnInit, OnDestroy, OnChanges, AfterViewInit {\r\n  @Input() parameters: ScreenboardModalParameters = {} as ScreenboardModalParameters;\r\n  @Input() isVisible = false;\r\n  @Input() onClose!: () => void;\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = '#83c0e9';\r\n\r\n  @ViewChild('screenVideo') screenVideoRef!: ElementRef<HTMLVideoElement>;\r\n  @ViewChild('screenCanvas') screenCanvasRef!: ElementRef<HTMLCanvasElement>;\r\n\r\n  faTimes = faTimes;\r\n\r\n  private annotationInterval: any;\r\n  private annotationCheckInterval: any;\r\n  private clonedStreamScreen: MediaStream | null = null;\r\n  private ctx: CanvasRenderingContext2D | null = null;\r\n\r\n  ngOnInit() {\r\n    // Initialization logic that does not depend on the view\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.stopAnnotation();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['isVisible']) {\r\n      this.isVisible = changes['isVisible'].currentValue;\r\n      if (this.isVisible) {\r\n        // In case isVisible changes after view init\r\n        if (this.screenCanvasRef && this.screenVideoRef) {\r\n          this.showModal();\r\n        } else {\r\n          setTimeout(() => {\r\n            if (this.screenCanvasRef && this.screenVideoRef) {\r\n              this.showModal();\r\n            }\r\n          }, 100);\r\n        }\r\n      } else {\r\n        if (this.screenCanvasRef && this.screenVideoRef) {\r\n          this.hideModal();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    // Move logic that requires view access here\r\n  }\r\n\r\n  showModal = async () => {\r\n    try {\r\n      this.parameters = this.parameters.getUpdatedAllParams();\r\n      const { annotateScreenStream, shared, createSendTransport, prepopulateUserMedia, hostLabel } =\r\n        this.parameters;\r\n      const annotate = annotateScreenStream;\r\n      const screenVideo = this.screenVideoRef!.nativeElement;\r\n\r\n      if (annotate && shared) {\r\n        screenVideo.classList.remove('d-none');\r\n        await this.annotatationPreview();\r\n        setTimeout(async () => {\r\n          if (!this.parameters.transportCreated) {\r\n            await createSendTransport({ option: 'screen', parameters: this.parameters });\r\n          } else {\r\n            try {\r\n              await this.handleScreenTransport();\r\n              await this.parameters.sleep({ ms: 250 });\r\n            } catch {\r\n              /* handle error */\r\n            }\r\n          }\r\n          await this.parameters.connectSendTransportScreen({\r\n            stream: this.parameters.processedScreenStream,\r\n            parameters: this.parameters,\r\n          });\r\n          await prepopulateUserMedia!({ name: hostLabel, parameters: this.parameters });\r\n        }, 100);\r\n      } else {\r\n        screenVideo.classList.add('d-none');\r\n      }\r\n    } catch {\r\n      /* handle error */\r\n    }\r\n  };\r\n\r\n  hideModal = async () => {\r\n    this.parameters = this.parameters.getUpdatedAllParams();\r\n    const {\r\n      annotateScreenStream,\r\n      shared,\r\n      createSendTransport,\r\n      disconnectSendTransportScreen,\r\n      stopShareScreen,\r\n      prepopulateUserMedia,\r\n      hostLabel,\r\n    } = this.parameters;\r\n    const annotate = annotateScreenStream;\r\n    const screenVideo = this.screenVideoRef && this.screenVideoRef!.nativeElement;\r\n\r\n    try {\r\n      if (!annotate) {\r\n        try {\r\n          await this.stopAnnotation();\r\n        } catch {\r\n          /* handle error */\r\n        }\r\n        if (shared) {\r\n          if (!this.parameters.transportCreated) {\r\n            await createSendTransport({ option: 'screen', parameters: this.parameters });\r\n          } else {\r\n            try {\r\n              await disconnectSendTransportScreen({ parameters: this.parameters });\r\n              await this.parameters.sleep({ ms: 500 });\r\n            } catch {\r\n              /* handle error */\r\n            }\r\n            if (\r\n              this.parameters.localStreamScreen &&\r\n              this.parameters.localStreamScreen.getVideoTracks().length > 0 &&\r\n              this.parameters.localStreamScreen.getVideoTracks()[0].readyState === 'ended'\r\n            ) {\r\n              this.parameters.localStreamScreen.removeTrack(\r\n                this.parameters.localStreamScreen.getVideoTracks()[0],\r\n              );\r\n              if (this.clonedStreamScreen) {\r\n                this.parameters.localStreamScreen.addTrack(\r\n                  this.clonedStreamScreen.getVideoTracks()[0].clone(),\r\n                );\r\n              }\r\n              this.parameters.updateLocalStreamScreen(this.parameters.localStreamScreen);\r\n            }\r\n            if (this.clonedStreamScreen) {\r\n              this.clonedStreamScreen.getVideoTracks()[0].onended = async () => {\r\n                await disconnectSendTransportScreen({ parameters: this.parameters });\r\n                await stopShareScreen({ parameters: this.parameters });\r\n              };\r\n            }\r\n            await this.parameters.connectSendTransportScreen({\r\n              stream: this.parameters.localStreamScreen,\r\n              parameters: this.parameters,\r\n            });\r\n          }\r\n        } else {\r\n          await this.stopAllTracks();\r\n        }\r\n\r\n        await prepopulateUserMedia!({ name: hostLabel, parameters: this.parameters });\r\n      }\r\n      screenVideo && screenVideo.classList.add('d-none');\r\n      if (this.parameters.mainScreenCanvas && this.screenCanvasRef) {\r\n        this.screenCanvasRef.nativeElement.classList.add('d-none');\r\n      }\r\n      this.onClose();\r\n    } catch {\r\n      /* handle error */\r\n    }\r\n  };\r\n\r\n  annotatationPreview = async () => {\r\n    const screenVideo = this.screenVideoRef!.nativeElement;\r\n    if (!this.parameters.mainScreenCanvas) {\r\n      this.parameters.mainScreenCanvas = this.screenCanvasRef.nativeElement;\r\n      this.parameters.updateMainScreenCanvas(this.parameters.mainScreenCanvas);\r\n    }\r\n    const annotate = this.parameters.annotateScreenStream;\r\n\r\n    if (\r\n      annotate &&\r\n      (!this.clonedStreamScreen ||\r\n        (this.clonedStreamScreen &&\r\n          this.clonedStreamScreen.getVideoTracks().length > 0 &&\r\n          this.clonedStreamScreen.getVideoTracks()[0].readyState === 'ended'))\r\n    ) {\r\n      const originalTrack = this.parameters.localStreamScreen!.getVideoTracks()[0];\r\n      const originalSettings = originalTrack.getSettings();\r\n      const cloned = originalTrack.clone();\r\n      await cloned.applyConstraints({\r\n        width: originalSettings.width,\r\n        height: originalSettings.height,\r\n        frameRate: originalSettings.frameRate,\r\n        aspectRatio: originalSettings.aspectRatio,\r\n      });\r\n      this.clonedStreamScreen = new MediaStream([cloned]);\r\n    }\r\n\r\n    if (\r\n      this.clonedStreamScreen &&\r\n      this.parameters.localStreamScreen &&\r\n      this.parameters.localStreamScreen.getVideoTracks().length > 0 &&\r\n      this.parameters.localStreamScreen.getVideoTracks()[0].readyState === 'ended'\r\n    ) {\r\n      this.parameters.localStreamScreen.removeTrack(\r\n        this.parameters.localStreamScreen.getVideoTracks()[0],\r\n      );\r\n      this.parameters.localStreamScreen.addTrack(\r\n        this.clonedStreamScreen.getVideoTracks()[0].clone(),\r\n      );\r\n    }\r\n\r\n    if (this.clonedStreamScreen) {\r\n      this.clonedStreamScreen.getVideoTracks()[0].onended = async () => {\r\n        await this.parameters.disconnectSendTransportScreen({ parameters: this.parameters });\r\n        await this.parameters.stopShareScreen({ parameters: this.parameters });\r\n      };\r\n    }\r\n\r\n    const mediaCanvas = this.parameters.mainScreenCanvas;\r\n    const ctx = mediaCanvas.getContext('2d');\r\n    mediaCanvas.width = this.parameters.localStreamScreen!.getVideoTracks()[0].getSettings().width!;\r\n    mediaCanvas.height = this.parameters\r\n      .localStreamScreen!.getVideoTracks()[0]\r\n      .getSettings().height!;\r\n\r\n    if (!annotate) {\r\n      this.parameters.processedScreenStream = null;\r\n      this.parameters.updateProcessedScreenStream(null);\r\n    }\r\n\r\n    const captureStream = () => {\r\n      const stream = mediaCanvas.captureStream(30);\r\n      this.annotationCheckInterval = setInterval(() => {\r\n        const params = this.parameters.getUpdatedAllParams();\r\n        canvasElement = params.canvasScreenboard;\r\n        const height = canvasElement!.height;\r\n        const width = canvasElement!.width;\r\n        const refHeight = params.localStreamScreen!.getVideoTracks()[0].getSettings().height!;\r\n        const refWidth = params.localStreamScreen!.getVideoTracks()[0].getSettings().width!;\r\n        if (height !== refHeight || width !== refWidth) {\r\n          canvasElement!.width = refWidth;\r\n          canvasElement!.height = refHeight;\r\n          mediaCanvas.width = refWidth;\r\n          mediaCanvas.height = refHeight;\r\n        }\r\n      }, 1000);\r\n      this.annotationInterval = setInterval(() => {\r\n        drawCombined();\r\n      }, 30);\r\n      return stream;\r\n    };\r\n\r\n    const annotateImage = async () => {\r\n      this.parameters.processedScreenStream = await captureStream();\r\n      this.parameters.updateProcessedScreenStream(this.parameters.processedScreenStream);\r\n    };\r\n\r\n    const annotateVideo = this.clonedStreamScreen;\r\n    if (annotateVideo && annotate) {\r\n      screenVideo.style.width = `${annotateVideo.getVideoTracks()[0].getSettings().width}px`;\r\n      screenVideo.style.height = `${annotateVideo.getVideoTracks()[0].getSettings().height}px`;\r\n      screenVideo.srcObject = annotateVideo;\r\n      await annotateImage();\r\n    }\r\n\r\n    let canvasElement = this.parameters.getUpdatedAllParams().canvasScreenboard;\r\n    canvasElement!.width = mediaCanvas.width;\r\n    canvasElement!.height = mediaCanvas.height;\r\n\r\n    const drawCombined = () => {\r\n      ctx!.clearRect(0, 0, canvasElement!.width, canvasElement!.height);\r\n      ctx!.drawImage(screenVideo, 0, 0, canvasElement!.width, canvasElement!.height);\r\n      ctx!.drawImage(canvasElement!, 0, 0, canvasElement!.width, canvasElement!.height);\r\n      ctx!.restore();\r\n    };\r\n  };\r\n\r\n  handleScreenTransport = async () => {\r\n    if (\r\n      this.parameters.localStreamScreen!.getVideoTracks().length > 0 &&\r\n      this.parameters.localStreamScreen!.getVideoTracks()[0].id ===\r\n        this.parameters.screenProducer?.track!.id\r\n    ) {\r\n      if (\r\n        this.clonedStreamScreen &&\r\n        this.clonedStreamScreen.getVideoTracks().length > 0 &&\r\n        this.clonedStreamScreen.getVideoTracks()[0].readyState === 'ended'\r\n      ) {\r\n        this.clonedStreamScreen.removeTrack(this.clonedStreamScreen.getVideoTracks()[0]);\r\n        this.clonedStreamScreen.addTrack(\r\n          this.parameters.localStreamScreen!.getVideoTracks()[0].clone(),\r\n        );\r\n      }\r\n      this.parameters.localStreamScreen!.removeTrack(\r\n        this.parameters.localStreamScreen!.getVideoTracks()[0],\r\n      );\r\n      this.parameters.localStreamScreen!.addTrack(\r\n        this.clonedStreamScreen!.getVideoTracks()[0].clone(),\r\n      );\r\n    }\r\n    await this.parameters.disconnectSendTransportScreen({ parameters: this.parameters });\r\n  };\r\n\r\n  stopAnnotation = async () => {\r\n    if (this.annotationInterval) {\r\n      clearInterval(this.annotationInterval);\r\n      clearInterval(this.annotationCheckInterval);\r\n      this.annotationInterval = null;\r\n      this.annotationCheckInterval = null;\r\n    }\r\n\r\n    if (this.parameters.processedScreenStream) {\r\n      this.parameters.processedScreenStream\r\n        .getTracks()\r\n        .forEach((track: MediaStreamTrack) => track.stop());\r\n      this.parameters.processedScreenStream = null;\r\n      this.parameters.updateProcessedScreenStream(null);\r\n    }\r\n\r\n    if (this.parameters.mainScreenCanvas) {\r\n      this.parameters.mainScreenCanvas\r\n        ?.getContext('2d')!\r\n        .clearRect(\r\n          0,\r\n          0,\r\n          this.parameters.mainScreenCanvas.width,\r\n          this.parameters.mainScreenCanvas.height,\r\n        );\r\n    }\r\n  };\r\n\r\n  stopAllTracks = async () => {\r\n    try {\r\n      if (\r\n        this.parameters.localStreamScreen &&\r\n        this.parameters.localStreamScreen.getVideoTracks().length > 0\r\n      ) {\r\n        this.parameters.localStreamScreen\r\n          .getVideoTracks()\r\n          .forEach((track: MediaStreamTrack) => track.stop());\r\n        this.parameters.updateLocalStreamScreen(null);\r\n      } else {\r\n        this.parameters.updateLocalStreamScreen(null);\r\n      }\r\n    } catch {\r\n      /* handle error */\r\n    }\r\n\r\n    try {\r\n      if (this.clonedStreamScreen && this.clonedStreamScreen.getVideoTracks().length > 0) {\r\n        this.clonedStreamScreen.getVideoTracks().forEach((track) => track.stop());\r\n      }\r\n    } catch {\r\n      /* handle error */\r\n    }\r\n\r\n    try {\r\n      if (this.parameters.processedScreenStream) {\r\n        this.parameters.processedScreenStream\r\n          .getTracks()\r\n          .forEach((track: MediaStreamTrack) => track.stop());\r\n        this.parameters.updateProcessedScreenStream(null);\r\n      }\r\n    } catch {\r\n      /* handle error */\r\n    }\r\n\r\n    this.clonedStreamScreen = null;\r\n  };\r\n}\r\n","<div *ngIf=\"isVisible\" class=\"modal-container\">\r\n  <div class=\"modal-content\">\r\n    <div class=\"modal-header\">\r\n      <div class=\"modal-title\">Screen Annotation</div>\r\n      <div class=\"modal-close\" (click)=\"hideModal()\">\r\n        <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n      </div>\r\n    </div>\r\n    <hr />\r\n    <div class=\"modal-body\">\r\n      <video #screenVideo id=\"screenVideo\" class=\"d-none\" autoplay></video>\r\n      <canvas #screenCanvas id=\"screenCanvas\"></canvas>\r\n    </div>\r\n  </div>\r\n</div>\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\nimport { Component, Input, OnChanges, SimpleChanges, OnInit } from '@angular/core';\r\nimport { faTimes, faCheck } from '@fortawesome/free-solid-svg-icons';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { WaitingRoomParticipant } from '../../@types/types';\r\nimport {\r\n  RespondToWaiting,\r\n  RespondToWaitingOptions,\r\n  RespondToWaitingType,\r\n} from '../../methods/waiting-methods/respond-to-waiting.service';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface WaitingRoomModalParameters {\r\n  filteredWaitingRoomList: WaitingRoomParticipant[];\r\n\r\n  // mediasfu functions\r\n  getUpdatedAllParams: () => WaitingRoomModalParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface WaitingRoomModalOptions {\r\n  isWaitingModalVisible: boolean;\r\n  onWaitingRoomClose: () => void;\r\n  waitingRoomCounter: number;\r\n  onWaitingRoomFilterChange: (filter: string) => void;\r\n  waitingRoomList: WaitingRoomParticipant[];\r\n  updateWaitingList: (updatedList: WaitingRoomParticipant[]) => void;\r\n  roomName: string;\r\n  socket: Socket;\r\n  position?: string;\r\n  backgroundColor?: string;\r\n  parameters: WaitingRoomModalParameters;\r\n\r\n  // mediasfu functions\r\n  onWaitingRoomItemPress?: RespondToWaitingType;\r\n}\r\n\r\nexport type WaitingRoomModalType = (options: WaitingRoomModalOptions) => HTMLElement;\r\n\r\n/**\r\n * Component representing a modal for managing participants in a waiting room.\r\n *\r\n * @component\r\n * @selector app-waiting-room-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule, FormsModule\r\n * @templateUrl ./waiting-room-modal.component.html\r\n * @styleUrls ['./waiting-room-modal.component.css']\r\n *\r\n * @property {boolean} isWaitingModalVisible - Visibility state of the modal.\r\n * @property {number} waitingRoomCounter - Counter for the number of participants in the waiting room.\r\n * @property {WaitingRoomParticipant[]} waitingRoomList - List of participants in the waiting room.\r\n * @property {string} roomName - Name of the room.\r\n * @property {Socket} socket - Socket instance for communication.\r\n * @property {string} position - Position of the modal on the screen.\r\n * @property {string} backgroundColor - Background color of the modal.\r\n * @property {WaitingRoomModalParameters} parameters - Parameters for the waiting room modal.\r\n * @property {function} onWaitingRoomClose - Function to call when the modal is closed.\r\n * @property {function} onWaitingRoomFilterChange - Function to call when the filter value changes.\r\n * @property {function} updateWaitingList - Function to update the waiting list.\r\n * @property {function} onWaitingRoomItemPress - Function to call when an item in the waiting room is pressed.\r\n *\r\n * @property {IconDefinition} faTimes - FontAwesome icon for the close button.\r\n * @property {IconDefinition} faCheck - FontAwesome icon for the check button.\r\n * @property {WaitingRoomParticipant[]} waitingRoomList_s - Filtered list of participants in the waiting room.\r\n * @property {number} waitingRoomCounter_s - Counter for the filtered list of participants in the waiting room.\r\n * @property {boolean} reRender - Flag to trigger re-rendering of the component.\r\n *\r\n * @method ngOnInit - Lifecycle hook that is called after data-bound properties are initialized.\r\n * @method ngOnChanges - Lifecycle hook that is called when any data-bound property of a directive changes.\r\n * @method updateParameters - Updates the parameters for the waiting room modal.\r\n * @method handleModalClose - Handles the closing of the modal.\r\n * @method handleFilterChange - Handles the change in the filter input.\r\n * @method handleItemPress - Handles the pressing of an item in the waiting room.\r\n *\r\n * @getter modalContainerStyle - Returns the style object for the modal container.\r\n * @getter modalContentStyle - Returns the style object for the modal content.\r\n * @getter inputStyle - Returns the style object for the input field.\r\n *\r\n * @example\r\n * ```html\r\n * <app-waiting-room-modal\r\n *  [isWaitingModalVisible]=\"true\"\r\n * [waitingRoomCounter]=\"waitingRoomCounter\"\r\n * [waitingRoomList]=\"waitingRoomList\"\r\n * [roomName]=\"roomName\"\r\n * [socket]=\"socket\"\r\n * [position]=\"'topRight'\"\r\n * [backgroundColor]=\"'#83c0e9'\"\r\n * [parameters]=\"waitingRoomModalParams\"\r\n * [onWaitingRoomClose]=\"closeWaitingRoomModal\"\r\n * [onWaitingRoomFilterChange]=\"filterWaitingRoom\"\r\n * [updateWaitingList]=\"updateWaitingList\"\r\n * [onWaitingRoomItemPress]=\"handleWaitingRoomItemPress\"\r\n * ></app-waiting-room-modal>\r\n * ```\r\n *\r\n */\r\n@Component({\r\n    selector: 'app-waiting-room-modal',\r\n    imports: [CommonModule, FontAwesomeModule, FormsModule],\r\n    templateUrl: './waiting-room-modal.component.html',\r\n    styleUrls: ['./waiting-room-modal.component.css']\r\n})\r\nexport class WaitingRoomModal implements OnChanges, OnInit {\r\n  constructor(private respondToWaitingService: RespondToWaiting) {}\r\n\r\n  @Input() isWaitingModalVisible = false;\r\n  @Input() waitingRoomCounter = 0;\r\n  @Input() waitingRoomList: WaitingRoomParticipant[] = [];\r\n  @Input() roomName = '';\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = '#83c0e9';\r\n  @Input() parameters: WaitingRoomModalParameters = {} as WaitingRoomModalParameters;\r\n  @Input() onWaitingRoomClose: () => void = () => {};\r\n  @Input() onWaitingRoomFilterChange: (value: string) => void = () => {};\r\n  @Input() updateWaitingList: (data: WaitingRoomParticipant[]) => void = () => {};\r\n  @Input() onWaitingRoomItemPress!: (data: RespondToWaitingOptions) => void;\r\n\r\n  faTimes = faTimes;\r\n  faCheck = faCheck;\r\n  waitingRoomList_s: WaitingRoomParticipant[] = [];\r\n  waitingRoomCounter_s = 0;\r\n  reRender = false;\r\n\r\n  ngOnInit() {\r\n    if (!this.onWaitingRoomItemPress) {\r\n      this.onWaitingRoomItemPress = (data: any) =>\r\n        this.respondToWaitingService.respondToWaiting(data);\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['waitingRoomList'] || changes['reRender']) {\r\n      this.updateParameters();\r\n    }\r\n  }\r\n\r\n  updateParameters() {\r\n    let { getUpdatedAllParams } = this.parameters;\r\n    this.parameters = getUpdatedAllParams();\r\n\r\n    this.waitingRoomList_s = this.parameters.filteredWaitingRoomList;\r\n    this.waitingRoomCounter_s = this.parameters.filteredWaitingRoomList.length;\r\n  }\r\n\r\n  handleModalClose() {\r\n    this.onWaitingRoomClose();\r\n  }\r\n\r\n  handleFilterChange(event: Event) {\r\n    const inputElement = event.target as HTMLInputElement;\r\n    const value = inputElement?.value || '';\r\n    this.onWaitingRoomFilterChange(value);\r\n    this.reRender = !this.reRender;\r\n  }\r\n\r\n  handleItemPress(participant: WaitingRoomParticipant, type: boolean) {\r\n    this.onWaitingRoomItemPress({\r\n      participantId: participant.id,\r\n      participantName: participant.name,\r\n      updateWaitingList: this.updateWaitingList,\r\n      waitingList: this.waitingRoomList,\r\n      roomName: this.roomName,\r\n      type: type, // true for accepted, false for rejected\r\n      socket: this.socket,\r\n    });\r\n  }\r\n\r\n  get modalContainerStyle() {\r\n    return {\r\n      position: 'fixed',\r\n      top: '0',\r\n      left: '0',\r\n      width: '100%',\r\n      height: '100%',\r\n      backgroundColor: 'rgba(0, 0, 0, 0.5)',\r\n      display: this.isWaitingModalVisible ? 'block' : 'none',\r\n      zIndex: '999',\r\n    };\r\n  }\r\n\r\n  get modalContentStyle() {\r\n    const screenWidth = window.innerWidth;\r\n    let modalWidth = 0.8 * screenWidth;\r\n    if (modalWidth > 350) {\r\n      modalWidth = 350;\r\n    }\r\n    return {\r\n      position: 'fixed',\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '10px',\r\n      width: `${modalWidth}px`,\r\n      maxHeight: '65%',\r\n      overflowY: 'auto',\r\n      top: this.position.includes('top') ? '10px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '10px' : 'auto',\r\n      left: this.position.includes('Left') ? '10px' : 'auto',\r\n      right: this.position.includes('Right') ? '10px' : 'auto',\r\n    };\r\n  }\r\n\r\n  get inputStyle() {\r\n    return {\r\n      width: '90%',\r\n      padding: '10px',\r\n      borderRadius: '5px',\r\n      border: '1px solid #000',\r\n      fontSize: '16px',\r\n      marginBottom: '10px',\r\n    };\r\n  }\r\n}\r\n","<div *ngIf=\"isWaitingModalVisible\" [ngStyle]=\"modalContainerStyle\">\r\n  <div [ngStyle]=\"modalContentStyle\">\r\n    <div class=\"modal-header\">\r\n      <div class=\"modal-title\">\r\n        Waiting <span class=\"badge\">{{ waitingRoomCounter_s }}</span>\r\n      </div>\r\n      <div (click)=\"handleModalClose()\" class=\"btn-close-waitings\">\r\n        <fa-icon [icon]=\"faTimes\" class=\"icon\"></fa-icon>\r\n      </div>\r\n    </div>\r\n    <hr class=\"hr\" />\r\n    <div class=\"modal-body\">\r\n      <div class=\"form-group\">\r\n        <input\r\n          class=\"form-control\"\r\n          [ngStyle]=\"inputStyle\"\r\n          placeholder=\"Search ...\"\r\n          (input)=\"handleFilterChange($event)\"\r\n        />\r\n      </div>\r\n      <div class=\"waiting-list\">\r\n        <div\r\n          *ngFor=\"let participant of waitingRoomList_s\"\r\n          class=\"waiting-item\"\r\n        >\r\n          <div class=\"col7\">{{ participant.name }}</div>\r\n          <div class=\"col2\">\r\n            <button (click)=\"handleItemPress(participant, true)\">\r\n              <fa-icon [icon]=\"faCheck\" size=\"lg\" color=\"green\"></fa-icon>\r\n            </button>\r\n          </div>\r\n          <div class=\"col2\">\r\n            <button (click)=\"handleItemPress(participant, false)\">\r\n              <fa-icon [icon]=\"faTimes\" size=\"lg\" color=\"red\"></fa-icon>\r\n            </button>\r\n          </div>\r\n          <div class=\"col1\"></div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes, faCheck, faSyncAlt, faPlay, faSave } from '@fortawesome/free-solid-svg-icons';\r\nimport {\r\n  CaptureCanvasStreamParameters,\r\n  CaptureCanvasStreamType,\r\n  EventType,\r\n  OnScreenChangesParameters,\r\n  OnScreenChangesType,\r\n  Participant,\r\n  PrepopulateUserMediaParameters,\r\n  PrepopulateUserMediaType,\r\n  RePortParameters,\r\n  RePortType,\r\n  ShowAlert,\r\n  WhiteboardUpdatedData,\r\n  WhiteboardUser,\r\n} from '../../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nexport interface ConfigureWhiteboardModalParameters\r\n  extends OnScreenChangesParameters,\r\n    CaptureCanvasStreamParameters,\r\n    PrepopulateUserMediaParameters,\r\n    RePortParameters {\r\n  participants: Participant[];\r\n  showAlert?: ShowAlert;\r\n  socket: Socket;\r\n  itemPageLimit: number;\r\n  islevel: string;\r\n  roomName: string;\r\n  eventType: EventType;\r\n  shareScreenStarted: boolean;\r\n  shared: boolean;\r\n  breakOutRoomStarted: boolean;\r\n  breakOutRoomEnded: boolean;\r\n  recordStarted: boolean;\r\n  recordResumed: boolean;\r\n  recordPaused: boolean;\r\n  recordStopped: boolean;\r\n  recordingMediaOptions: string;\r\n  canStartWhiteboard: boolean;\r\n  whiteboardStarted: boolean;\r\n  whiteboardEnded: boolean;\r\n  hostLabel: string;\r\n  updateWhiteboardStarted: (started: boolean) => void;\r\n  updateWhiteboardEnded: (ended: boolean) => void;\r\n  updateWhiteboardUsers: (users: WhiteboardUser[]) => void;\r\n  updateCanStartWhiteboard: (canStart: boolean) => void;\r\n  updateIsConfigureWhiteboardModalVisible: (isVisible: boolean) => void;\r\n\r\n  // mediasfu functions\r\n  onScreenChanges: OnScreenChangesType;\r\n  captureCanvasStream: CaptureCanvasStreamType;\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n  rePort: RePortType;\r\n\r\n  getUpdatedAllParams: () => ConfigureWhiteboardModalParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ConfigureWhiteboardModalOptions {\r\n  isConfigureWhiteboardModalVisible: boolean;\r\n  onClose: () => void;\r\n  position?: string;\r\n  backgroundColor?: string;\r\n  parameters: ConfigureWhiteboardModalParameters;\r\n}\r\n\r\nexport type ConfigureWhiteboardModalType = (\r\n  options: ConfigureWhiteboardModalOptions,\r\n) => HTMLElement;\r\n\r\n/**\r\n * @component ConfigureWhiteboardModal\r\n * @description A modal component to configure and manage whiteboard settings and participants.\r\n *\r\n * @selector app-configure-whiteboard-modal\r\n * @standalone true\r\n * @imports [CommonModule, FontAwesomeModule]\r\n * @templateUrl ./configure-whiteboard-modal.component.html\r\n * @styleUrls ./configure-whiteboard-modal.component.css\r\n *\r\n * @example\r\n * ```html\r\n * <app-configure-whiteboard-modal\r\n *   [isVisible]=\"isWhiteboardModalVisible\"\r\n *   [parameters]=\"whiteboardParameters\"\r\n *   [backgroundColor]=\"'#83c0e9'\"\r\n *   [position]=\"'topRight'\"\r\n *   (onConfigureWhiteboardClose)=\"handleCloseModal()\">\r\n * </app-configure-whiteboard-modal>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n    selector: 'app-configure-whiteboard-modal',\r\n    templateUrl: './configure-whiteboard-modal.component.html',\r\n    styleUrls: ['./configure-whiteboard-modal.component.css'],\r\n    imports: [CommonModule, FontAwesomeModule]\r\n})\r\nexport class ConfigureWhiteboardModal implements OnInit, OnChanges {\r\n  @Input() isVisible = false;\r\n  @Input() parameters: ConfigureWhiteboardModalParameters =\r\n    {} as ConfigureWhiteboardModalParameters;\r\n  @Input() backgroundColor = '#83c0e9';\r\n  @Input() position = 'topRight';\r\n  @Input() onConfigureWhiteboardClose!: () => void;\r\n\r\n  faTimes = faTimes;\r\n  faCheck = faCheck;\r\n  faSyncAlt = faSyncAlt;\r\n  faPlay = faPlay;\r\n  faSave = faSave;\r\n\r\n  participantsCopy: Participant[] = [];\r\n  whiteboardLimit!: number;\r\n  isEditing = false;\r\n  canStartWhiteboard = false;\r\n  assignedParticipants: any[] = [];\r\n  unassignedParticipants: any[] = [];\r\n  whiteboardStarted = false;\r\n  whiteboardEnded = false;\r\n\r\n  private socket: Socket = {} as Socket;\r\n\r\n  ngOnInit() {\r\n    if (this.parameters && this.isVisible) {\r\n      try {\r\n        this.parameters = this.parameters.getUpdatedAllParams();\r\n      } catch {\r\n        /* handle error */\r\n      }\r\n      this.whiteboardLimit = this.parameters.itemPageLimit;\r\n      this.whiteboardStarted = this.parameters.whiteboardStarted;\r\n      this.whiteboardEnded = this.parameters.whiteboardEnded;\r\n      this.checkCanStartWhiteboard();\r\n    }\r\n\r\n    if (this.parameters) {\r\n      this.socket = this.parameters.socket;\r\n      if (this.socket) {\r\n        this.setupSocketListeners();\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['parameters'] && this.parameters) {\r\n      if (this.parameters && this.isVisible) {\r\n        this.whiteboardLimit = this.parameters.itemPageLimit;\r\n        this.whiteboardStarted = this.parameters.whiteboardStarted;\r\n        this.whiteboardEnded = this.parameters.whiteboardEnded;\r\n        this.checkCanStartWhiteboard();\r\n      }\r\n\r\n      this.socket = this.parameters.socket;\r\n      if (this.socket) {\r\n        this.setupSocketListeners();\r\n      }\r\n    }\r\n\r\n    if (changes['isVisible'] && this.isVisible) {\r\n      this.parameters = this.parameters.getUpdatedAllParams();\r\n      if (!this.participantsCopy.length) {\r\n        const filteredParticipants = this.parameters.participants.filter(\r\n          (participant: Participant) => participant.islevel != '2',\r\n        );\r\n        this.participantsCopy = filteredParticipants;\r\n        this.updateParticipantsLists();\r\n      }\r\n      this.checkCanStartWhiteboard();\r\n    }\r\n  }\r\n\r\n  setupSocketListeners = () => {\r\n    if (this.socket && this.socket instanceof Socket) {\r\n      this.socket.on('whiteboardUpdated', async (data: WhiteboardUpdatedData) => {\r\n        if (this.parameters.islevel == '2' && data.members) {\r\n          const filteredParticipants = data.members.filter(\r\n            (participant: any) => !participant.isBanned,\r\n          );\r\n          this.participantsCopy = filteredParticipants;\r\n          this.updateParticipantsLists();\r\n        }\r\n\r\n        this.parameters.updateWhiteboardUsers(data.whiteboardUsers);\r\n\r\n        if (data.status == 'started') {\r\n          this.whiteboardStarted = true;\r\n          this.whiteboardEnded = false;\r\n          this.parameters.updateWhiteboardStarted(true);\r\n          this.parameters.updateWhiteboardEnded(false);\r\n\r\n          if (this.parameters.islevel != '2') {\r\n            this.parameters.shareScreenStarted = true;\r\n            await this.parameters.onScreenChanges({ changed: true, parameters: this.parameters });\r\n          }\r\n        } else if (data.status == 'ended') {\r\n          this.whiteboardEnded = true;\r\n          this.whiteboardStarted = false;\r\n          this.parameters.updateWhiteboardStarted(false);\r\n          this.parameters.updateWhiteboardEnded(true);\r\n\r\n          this.parameters.shareScreenStarted = false;\r\n          await this.parameters.onScreenChanges({ changed: true, parameters: this.parameters });\r\n          await this.parameters.prepopulateUserMedia({\r\n            name: this.parameters.hostLabel,\r\n            parameters: this.parameters,\r\n          });\r\n          await this.parameters.rePort({ restart: true, parameters: this.parameters });\r\n        }\r\n      });\r\n    }\r\n  };\r\n\r\n  toggleParticipant = (participant: any, add: boolean) => {\r\n    this.isEditing = true;\r\n    const selectedParticipants = this.participantsCopy.filter((p) => p.useBoard);\r\n    if (add && selectedParticipants.length >= this.whiteboardLimit - 1) {\r\n      this.parameters.showAlert?.({\r\n        message: `Participant limit exceeded - you can only add ${\r\n          this.whiteboardLimit - 1\r\n        } other participants`,\r\n        type: 'danger',\r\n      });\r\n      return;\r\n    }\r\n\r\n    this.participantsCopy = this.participantsCopy.map((p) =>\r\n      p.name === participant.name ? { ...p, useBoard: add } : p,\r\n    );\r\n    this.updateParticipantsLists();\r\n  };\r\n\r\n  validateWhiteboard() {\r\n    const selectedParticipants = this.participantsCopy.filter(\r\n      (participant) => participant.useBoard,\r\n    );\r\n    if (selectedParticipants.length > this.whiteboardLimit) {\r\n      this.parameters.showAlert?.({ message: 'Participant limit exceeded', type: 'danger' });\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  checkCanStartWhiteboard() {\r\n    const isValid = this.validateWhiteboard();\r\n    this.canStartWhiteboard = isValid;\r\n    this.parameters.updateCanStartWhiteboard(isValid);\r\n  }\r\n\r\n  handleSaveWhiteboard() {\r\n    if (this.validateWhiteboard()) {\r\n      this.isEditing = false;\r\n      this.canStartWhiteboard = true;\r\n      this.parameters.updateCanStartWhiteboard(true);\r\n      this.checkCanStartWhiteboard();\r\n      this.parameters.showAlert?.({ message: 'Whiteboard saved successfully', type: 'success' });\r\n    } else {\r\n      this.parameters.showAlert?.({ message: 'Whiteboard validation failed', type: 'danger' });\r\n    }\r\n  }\r\n\r\n  async handleStartWhiteboard() {\r\n    const {\r\n      shareScreenStarted,\r\n      shared,\r\n      breakOutRoomStarted,\r\n      breakOutRoomEnded,\r\n      roomName,\r\n      socket,\r\n      recordStarted,\r\n      recordResumed,\r\n      recordPaused,\r\n      recordStopped,\r\n      recordingMediaOptions,\r\n      onScreenChanges,\r\n      captureCanvasStream,\r\n      showAlert,\r\n    } = this.parameters;\r\n\r\n    if ((shareScreenStarted || shared) && !this.whiteboardStarted) {\r\n      showAlert?.({\r\n        message: 'You cannot start whiteboard while screen sharing is active',\r\n        type: 'danger',\r\n      });\r\n      return;\r\n    }\r\n\r\n    if (breakOutRoomStarted && !breakOutRoomEnded) {\r\n      showAlert?.({\r\n        message: 'You cannot start whiteboard while breakout rooms are active',\r\n        type: 'danger',\r\n      });\r\n      return;\r\n    }\r\n\r\n    if (this.canStartWhiteboard) {\r\n      const emitName =\r\n        this.whiteboardStarted && !this.whiteboardEnded ? 'updateWhiteboard' : 'startWhiteboard';\r\n      const filteredWhiteboardUsers = this.participantsCopy\r\n        .filter((participant) => participant.useBoard)\r\n        .map(({ name, useBoard }) => ({ name, useBoard }));\r\n      socket.emit(\r\n        emitName,\r\n        { whiteboardUsers: filteredWhiteboardUsers, roomName },\r\n        async (response: any) => {\r\n          if (response.success) {\r\n            showAlert?.({ message: 'Whiteboard active', type: 'success' });\r\n            this.parameters.whiteboardStarted = true;\r\n            this.parameters.whiteboardEnded = false;\r\n            this.parameters.updateWhiteboardStarted(true);\r\n            this.parameters.updateWhiteboardEnded(false);\r\n            this.parameters.updateIsConfigureWhiteboardModalVisible(false);\r\n\r\n            if (this.parameters.islevel != '2') {\r\n              this.parameters.shareScreenStarted = true;\r\n              await onScreenChanges({ changed: true, parameters: this.parameters });\r\n            }\r\n\r\n            if (this.parameters.islevel == '2' && (recordStarted || recordResumed)) {\r\n              if (!(recordPaused || recordStopped) && recordingMediaOptions == 'video') {\r\n                await captureCanvasStream({ parameters: this.parameters });\r\n              }\r\n            }\r\n          } else {\r\n            showAlert?.({ message: response.reason, type: 'danger' });\r\n          }\r\n        },\r\n      );\r\n    }\r\n  }\r\n\r\n  async handleStopWhiteboard() {\r\n    const {\r\n      roomName,\r\n      socket,\r\n      showAlert,\r\n      updateWhiteboardStarted,\r\n      updateWhiteboardEnded,\r\n      updateIsConfigureWhiteboardModalVisible,\r\n      onScreenChanges,\r\n      prepopulateUserMedia,\r\n      rePort,\r\n      hostLabel,\r\n    } = this.parameters;\r\n    socket.emit('stopWhiteboard', { roomName }, async (response: any) => {\r\n      if (response.success) {\r\n        showAlert?.({ message: 'Whiteboard stopped', type: 'success' });\r\n        this.parameters.whiteboardEnded = true;\r\n        this.parameters.whiteboardStarted = false;\r\n        updateWhiteboardStarted(false);\r\n        updateWhiteboardEnded(true);\r\n        updateIsConfigureWhiteboardModalVisible(false);\r\n\r\n        this.parameters.shareScreenStarted = false;\r\n        await onScreenChanges({ changed: true, parameters: this.parameters });\r\n        await prepopulateUserMedia({ name: hostLabel, parameters: this.parameters });\r\n        await rePort({ restart: true, parameters: this.parameters });\r\n      } else {\r\n        showAlert?.({ message: response.reason, type: 'danger' });\r\n      }\r\n    });\r\n  }\r\n\r\n  modalContainerStyle() {\r\n    return {\r\n      position: 'fixed',\r\n      top: 0,\r\n      left: 0,\r\n      width: '100%',\r\n      height: '100%',\r\n      backgroundColor: 'rgba(0, 0, 0, 0.5)',\r\n      display: this.isVisible ? 'block' : 'none',\r\n      zIndex: 999,\r\n    };\r\n  }\r\n\r\n  modalContentStyle() {\r\n    const screenWidth = window.innerWidth;\r\n    let modalWidth = 0.7 * screenWidth;\r\n    if (modalWidth > 400) {\r\n      modalWidth = 400;\r\n    }\r\n    return {\r\n      position: 'fixed',\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '10px',\r\n      width: modalWidth + 'px',\r\n      maxWidth: modalWidth + 'px',\r\n      maxHeight: '75%',\r\n      overflowY: 'auto',\r\n      overflowX: 'hidden',\r\n      top: this.position.includes('top') ? '10px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '10px' : 'auto',\r\n      left: this.position.includes('Left') ? '10px' : 'auto',\r\n      right: this.position.includes('Right') ? '10px' : 'auto',\r\n    };\r\n  }\r\n\r\n  updateParticipantsLists = () => {\r\n    this.assignedParticipants = this.participantsCopy.filter((p) => p.useBoard);\r\n    this.unassignedParticipants = this.participantsCopy.filter((p) => !p.useBoard);\r\n  };\r\n}\r\n","<div [ngStyle]=\"modalContainerStyle()\">\r\n  <div [ngStyle]=\"modalContentStyle()\">\r\n    <div style=\"display: flex; flex-direction: column;\">\r\n      <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;\">\r\n        <h2 style=\"font-size: x-large; font-weight: bold; color: black;\">\r\n          Configure Whiteboard\r\n        </h2>\r\n        <button (click)=\"onConfigureWhiteboardClose()\" style=\"border: none; background: none; cursor: pointer;\">\r\n          <fa-icon [icon]=\"faTimes\" size=\"xl\" style=\"font-size: 20px; color: black;\"></fa-icon>\r\n        </button>\r\n      </div>\r\n      <div class=\"modal-body\">\r\n        <div class=\"row\">\r\n          <div class=\"col-md-6 mb-3\">\r\n            <h6>Assigned</h6>\r\n            <ul class=\"list-group\" style=\"max-height: 200px; overflow-y: auto; border: 1px solid #ccc;\">\r\n              <ng-container *ngIf=\"assignedParticipants.length > 0; else noAssignedParticipants\">\r\n                <li *ngFor=\"let participant of assignedParticipants\" class=\"list-group-item d-flex justify-content-between align-items-center text-dark mb-2 mr-2\">\r\n                  {{ participant.name }}\r\n                  <button class=\"btn btn-danger btn-sm mr-2 ml-2\" (click)=\"toggleParticipant(participant, false)\">\r\n                    <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n                  </button>\r\n                </li>\r\n              </ng-container>\r\n              <ng-template #noAssignedParticipants>\r\n                <li class=\"list-group-item d-flex justify-content-between align-items-center text-dark\">\r\n                  None\r\n                </li>\r\n              </ng-template>\r\n            </ul>\r\n          </div>\r\n          <div class=\"col-md-6 mt-xs-3 mb-3\">\r\n            <h6>Pending</h6>\r\n            <ul class=\"list-group\" style=\"max-height: 200px; overflow-y: auto; border: 1px solid #ccc;\">\r\n              <ng-container *ngIf=\"unassignedParticipants.length > 0; else noPendingParticipants\">\r\n                <li *ngFor=\"let participant of unassignedParticipants\" class=\"list-group-item d-flex justify-content-between align-items-center text-dark mb-2 mr-2\">\r\n                  {{ participant.name }}\r\n                  <button class=\"btn btn-primary btn-sm mr-2 ml-2\" (click)=\"toggleParticipant(participant, true)\">\r\n                    <fa-icon [icon]=\"faCheck\"></fa-icon>\r\n                  </button>\r\n                </li>\r\n              </ng-container>\r\n              <ng-template #noPendingParticipants>\r\n                <li class=\"list-group-item d-flex justify-content-between align-items-center text-dark\">\r\n                  None\r\n                </li>\r\n              </ng-template>\r\n            </ul>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div class=\"modal-footer\">\r\n        <button type=\"button\" class=\"btn btn-info\" (click)=\"handleSaveWhiteboard()\">\r\n          Save <fa-icon [icon]=\"faSave\"></fa-icon>\r\n        </button>\r\n      </div>\r\n      <hr />\r\n      <div *ngIf=\"!isEditing\">\r\n        <button *ngIf=\"canStartWhiteboard && whiteboardStarted && !whiteboardEnded\" class=\"btn btn-warning mb-2 mr-2\" (click)=\"handleStartWhiteboard()\">\r\n          Update <fa-icon [icon]=\"faSyncAlt\"></fa-icon>\r\n        </button>\r\n        <button *ngIf=\"canStartWhiteboard && !whiteboardStarted\" class=\"btn btn-success mb-2 mr-2\" (click)=\"handleStartWhiteboard()\">\r\n          Start <fa-icon [icon]=\"faPlay\"></fa-icon>\r\n        </button>\r\n        <button *ngIf=\"whiteboardStarted && !whiteboardEnded\" class=\"btn btn-danger mb-2 ml-2\" (click)=\"handleStopWhiteboard()\">\r\n          Stop <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\n/**\r\n * Whiteboard component for drawing and manipulating shapes, text, and images on a canvas.\r\n *\r\n * @component\r\n * @selector app-whiteboard\r\n * @templateUrl ./whiteboard.component.html\r\n * @styleUrls ./whiteboard.component.css\r\n * @encapsulation ViewEncapsulation.None\r\n * @imports [CommonModule, FormsModule, FontAwesomeModule]\r\n *\r\n * @class Whiteboard\r\n * @implements OnInit, OnDestroy, OnChanges\r\n *\r\n * @property {number} customWidth - Custom width for the whiteboard.\r\n * @property {number} customHeight - Custom height for the whiteboard.\r\n * @property {WhiteboardParameters} parameters - Parameters for the whiteboard.\r\n * @property {boolean} showAspect - Flag to show aspect ratio.\r\n *\r\n * @property {ElementRef<HTMLCanvasElement>} canvasRef - Reference to the canvas element.\r\n * @property {ElementRef<HTMLTextAreaElement>} textInputRef - Reference to the text input element.\r\n * @property {ElementRef<HTMLButtonElement>} toggleBackgroundRef - Reference to the toggle background button element.\r\n * @property {ElementRef<HTMLAnchorElement>} downloadLinkRef - Reference to the download link element.\r\n * @property {ElementRef<HTMLCanvasElement>} tempCanvasRef - Reference to the temporary canvas element.\r\n *\r\n * @property {IconDefinition} faTimes - FontAwesome icon for times.\r\n * @property {IconDefinition} faUndo - FontAwesome icon for undo.\r\n * @property {IconDefinition} faRedo - FontAwesome icon for redo.\r\n * @property {IconDefinition} faEraser - FontAwesome icon for eraser.\r\n * @property {IconDefinition} faShapes - FontAwesome icon for shapes.\r\n * @property {IconDefinition} faMousePointer - FontAwesome icon for mouse pointer.\r\n * @property {IconDefinition} faHandPaper - FontAwesome icon for hand paper.\r\n * @property {IconDefinition} faTextHeight - FontAwesome icon for text height.\r\n * @property {IconDefinition} faFont - FontAwesome icon for font.\r\n * @property {IconDefinition} faPencilAlt - FontAwesome icon for pencil alt.\r\n * @property {IconDefinition} faPaintBrush - FontAwesome icon for paint brush.\r\n * @property {IconDefinition} faTrash - FontAwesome icon for trash.\r\n * @property {IconDefinition} faSave - FontAwesome icon for save.\r\n * @property {IconDefinition} faSearch - FontAwesome icon for search.\r\n * @property {IconDefinition} faSearchMinus - FontAwesome icon for search minus.\r\n * @property {IconDefinition} faSearchPlus - FontAwesome icon for search plus.\r\n * @property {IconDefinition} faChevronLeft - FontAwesome icon for chevron left.\r\n * @property {IconDefinition} faUpload - FontAwesome icon for upload.\r\n * @property {IconDefinition} faChevronRight - FontAwesome icon for chevron right.\r\n *\r\n * @property {string} mode - Current mode of the whiteboard (e.g., 'pan', 'draw', 'erase').\r\n * @property {boolean} isDrawing - Flag indicating if drawing is in progress.\r\n * @property {boolean} isPanning - Flag indicating if panning is in progress.\r\n * @property {boolean} isDragging - Flag indicating if dragging is in progress.\r\n * @property {number} startX - Starting X coordinate for drawing.\r\n * @property {number} startY - Starting Y coordinate for drawing.\r\n * @property {number} currentX - Current X coordinate for drawing.\r\n * @property {number} currentY - Current Y coordinate for drawing.\r\n * @property {any[]} freehandDrawing - Array of points for freehand drawing.\r\n * @property {any} selectedShape - Currently selected shape.\r\n * @property {any} selectedHandle - Currently selected handle for resizing shapes.\r\n * @property {boolean} movingShape - Flag indicating if a shape is being moved.\r\n * @property {number} panX - X coordinate for panning.\r\n * @property {number} panY - Y coordinate for panning.\r\n * @property {number} scale - Current scale of the canvas.\r\n * @property {number} minScale - Minimum scale of the canvas.\r\n * @property {number} maxScale - Maximum scale of the canvas.\r\n * @property {number} eraserThickness - Thickness of the eraser.\r\n * @property {number} brushThickness - Thickness of the brush.\r\n * @property {number} lineThickness - Thickness of the line.\r\n * @property {string} lineType - Type of the line (e.g., 'solid', 'dashed').\r\n * @property {string} color - Current color for drawing.\r\n * @property {string} font - Current font for text.\r\n * @property {number} fontSize - Current font size for text.\r\n * @property {any} shape - Current shape being drawn.\r\n * @property {HTMLImageElement} backgroundImage - Background image for the canvas.\r\n * @property {boolean} toolbarVisible - Flag indicating if the toolbar is visible.\r\n * @property {string | null} dropdownOpen - Currently open dropdown menu.\r\n * @property {{ clientX: number, clientY: number, offsetX: number, offsetY: number } | null} currentClickPosition - Current click position on the canvas.\r\n * @property {number} maxWidth - Maximum width of the canvas.\r\n * @property {number} maxHeight - Maximum height of the canvas.\r\n * @property {boolean} dimensionsFixed - Flag indicating if the canvas dimensions are fixed.\r\n *\r\n * @method updateLineThickness - Updates the thickness of the line.\r\n * @param {number} thickness - New thickness for the line.\r\n *\r\n * @method updateBrushThickness - Updates the thickness of the brush.\r\n * @param {number} thickness - New thickness for the brush.\r\n *\r\n * @method updateEraserThickness - Updates the thickness of the eraser.\r\n * @param {number} thickness - New thickness for the eraser.\r\n *\r\n * @method updateColor - Updates the color for drawing.\r\n * @param {string} color - New color for drawing.\r\n *\r\n * @method updateFont - Updates the font for text.\r\n * @param {string} font - New font for text.\r\n *\r\n * @method updateFontSize - Updates the font size for text.\r\n * @param {number} fontSize - New font size for text.\r\n *\r\n * @method updateShape - Updates the shape being drawn.\r\n * @param {string} shape - New shape to be drawn.\r\n *\r\n * @constructor\r\n *\r\n * @method ngOnInit - Lifecycle hook that is called after data-bound properties are initialized.\r\n *\r\n * @method ngOnChanges - Lifecycle hook that is called when any data-bound property of a directive changes.\r\n * @param {SimpleChanges} changes - Object of changes.\r\n *\r\n * @method ngOnDestroy - Lifecycle hook that is called when a directive, pipe, or service is destroyed.\r\n *\r\n * @method ngAfterViewInit - Lifecycle hook that is called after a component's view has been fully initialized.\r\n *\r\n * @method handleTextInput - Handles the text input event.\r\n * @param {KeyboardEvent} event - Keyboard event.\r\n *\r\n * @method addListeners - Adds event listeners to the canvas and document.\r\n *\r\n * @method handleTouchStart - Handles the touch start event.\r\n * @param {TouchEvent} e - Touch event.\r\n *\r\n * @method handleTouchMove - Handles the touch move event.\r\n * @param {TouchEvent} e - Touch event.\r\n *\r\n * @method handleTouchEnd - Handles the touch end event.\r\n * @param {TouchEvent} e - Touch event.\r\n *\r\n * @method handleClickOutside - Handles the click outside event.\r\n * @param {MouseEvent} event - Mouse event.\r\n *\r\n * @method handleCanvasClick - Handles the canvas click event.\r\n * @param {MouseEvent} e - Mouse event.\r\n *\r\n * @method startDrawing - Starts the drawing process.\r\n * @param {MouseEvent} e - Mouse event.\r\n *\r\n * @method draw - Draws on the canvas.\r\n * @param {MouseEvent} e - Mouse event.\r\n *\r\n * @method stopDrawing - Stops the drawing process.\r\n * @param {MouseEvent} e - Mouse event.\r\n *\r\n * @method erase - Erases a part of the canvas.\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n *\r\n * @method isPointNearLine - Checks if a point is near a line.\r\n * @param {number} px - X coordinate of the point.\r\n * @param {number} py - Y coordinate of the point.\r\n * @param {number} x1 - X coordinate of the line start.\r\n * @param {number} y1 - Y coordinate of the line start.\r\n * @param {number} x2 - X coordinate of the line end.\r\n * @param {number} y2 - Y coordinate of the line end.\r\n * @param {number} threshold - Distance threshold.\r\n * @returns {boolean} - True if the point is near the line, false otherwise.\r\n *\r\n * @method zoomCanvas - Zooms the canvas.\r\n * @param {number} scaleFactor - Scale factor for zooming.\r\n * @param {MouseEvent} [event] - Mouse event.\r\n *\r\n * @method handleZoom - Handles the zoom event.\r\n * @param {WheelEvent} e - Wheel event.\r\n *\r\n * @method drawEdgeMarkers - Draws edge markers on the canvas.\r\n *\r\n * @method drawShapes - Draws all shapes on the canvas.\r\n *\r\n * @method drawLine - Draws a line on the canvas.\r\n * @param {number} x1 - X coordinate of the line start.\r\n * @param {number} y1 - Y coordinate of the line start.\r\n * @param {number} x2 - X coordinate of the line end.\r\n * @param {number} y2 - Y coordinate of the line end.\r\n * @param {string} color - Color of the line.\r\n * @param {number} thickness - Thickness of the line.\r\n * @param {string} lineType - Type of the line (e.g., 'solid', 'dashed').\r\n *\r\n * @method drawText - Draws text on the canvas.\r\n * @param {string} text - Text to be drawn.\r\n * @param {number} x - X coordinate of the text.\r\n * @param {number} y - Y coordinate of the text.\r\n * @param {string} color - Color of the text.\r\n * @param {string} font - Font of the text.\r\n *\r\n * @method drawFreehand - Draws freehand lines on the canvas.\r\n * @param {{ x: number, y: number }[]} points - Array of points for freehand drawing.\r\n * @param {string} color - Color of the freehand drawing.\r\n * @param {number} thickness - Thickness of the freehand drawing.\r\n *\r\n * @method drawShape - Draws a shape on the canvas.\r\n * @param {string} type - Type of the shape.\r\n * @param {number} x1 - X coordinate of the shape start.\r\n * @param {number} y1 - Y coordinate of the shape start.\r\n * @param {number} x2 - X coordinate of the shape end.\r\n * @param {number} y2 - Y coordinate of the shape end.\r\n * @param {string} color - Color of the shape.\r\n * @param {number} thickness - Thickness of the shape.\r\n * @param {string} lineType - Type of the line (e.g., 'solid', 'dashed').\r\n * @param {CanvasRenderingContext2D} [ctx] - Canvas rendering context.\r\n *\r\n * @method drawPolygon - Draws a polygon on the canvas.\r\n * @param {CanvasRenderingContext2D} ctx - Canvas rendering context.\r\n * @param {number} sides - Number of sides of the polygon.\r\n * @param {number} x1 - X coordinate of the polygon start.\r\n * @param {number} y1 - Y coordinate of the polygon start.\r\n * @param {number} x2 - X coordinate of the polygon end.\r\n * @param {number} y2 - Y coordinate of the polygon end.\r\n *\r\n * @example\r\n * ```html\r\n * <app-whiteboard\r\n *  [customWidth]=\"1280\"\r\n * [customHeight]=\"720\"\r\n * [parameters]=\"{\r\n *  socket: socket,\r\n * showAlert: showAlert,\r\n * islevel: islevel,\r\n * roomName: roomName,\r\n * shapes: shapes,\r\n * useImageBackground: useImageBackground,\r\n * redoStack: redoStack,\r\n * undoStack: undoStack,\r\n * whiteboardStarted: whiteboardStarted,\r\n * whiteboardEnded: whiteboardEnded,\r\n * whiteboardUsers: whiteboardUsers,\r\n * participants: participants,\r\n * participantsAll: participantsAll,\r\n * screenId: screenId,\r\n * recordStarted: recordStarted,\r\n * recordStopped: recordStopped,\r\n * recordPaused: recordPaused,\r\n * recordResumed: recordResumed,\r\n * recordingMediaOptions: recordingMediaOptions,\r\n * member: member,\r\n * shareScreenStarted: shareScreenStarted,\r\n * canvasWhiteboard: canvasWhiteboard,\r\n * targetResolution: targetResolution,\r\n * targetResolutionHost: targetResolutionHost,\r\n * updateShapes: updateShapes,\r\n * updateUseImageBackground: updateUseImageBackground,\r\n * updateRedoStack: updateRedoStack,\r\n * updateUndoStack: updateUndoStack,\r\n * updateWhiteboardStarted: updateWhiteboardStarted,\r\n * updateWhiteboardEnded: updateWhiteboardEnded,\r\n * updateWhiteboardUsers: updateWhiteboardUsers,\r\n * updateParticipants: updateParticipants,\r\n * updateScreenId: updateScreenId,\r\n * updateShareScreenStarted: updateShareScreenStarted,\r\n * updateCanvasWhiteboard: updateCanvasWhiteboard,\r\n * onScreenChanges: onScreenChanges,\r\n * captureCanvasStream: captureCanvasStream,\r\n * getUpdatedAllParams: getUpdatedAllParams\r\n * }\"\r\n * [showAspect]=\"true\"\r\n * ></app-whiteboard>\r\n * ```\r\n */\r\nimport {\r\n  Component,\r\n  ElementRef,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n  ViewChild,\r\n  ViewEncapsulation,\r\n  OnChanges,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  faTimes,\r\n  faUndo,\r\n  faRedo,\r\n  faEraser,\r\n  faShapes,\r\n  faMousePointer,\r\n  faHandPaper,\r\n  faTextHeight,\r\n  faFont,\r\n  faPencilAlt,\r\n  faPaintBrush,\r\n  faTrash,\r\n  faSave,\r\n  faSearch,\r\n  faSearchMinus,\r\n  faSearchPlus,\r\n  faChevronLeft,\r\n  faUpload,\r\n  faChevronRight,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  OnScreenChangesParameters,\r\n  OnScreenChangesType,\r\n} from '../../../consumers/on-screen-changes.service';\r\nimport {\r\n  CaptureCanvasStreamParameters,\r\n  ShowAlert,\r\n  WhiteboardUser,\r\n  Participant,\r\n  CaptureCanvasStreamType,\r\n} from '../../../@types/types';\r\n\r\nexport interface Shape {\r\n  type: string;\r\n  x?: number;\r\n  y?: number;\r\n  x1?: number;\r\n  y1?: number;\r\n  x2?: number;\r\n  y2?: number;\r\n  text?: string;\r\n  color?: string;\r\n  font?: string;\r\n  fontSize?: number;\r\n  thickness?: number;\r\n  lineType?: string;\r\n  points?: Array<{ x: number; y: number }>;\r\n  img?: HTMLImageElement;\r\n  src?: string;\r\n}\r\n\r\nexport interface WhiteboardParameters\r\n  extends OnScreenChangesParameters,\r\n    CaptureCanvasStreamParameters {\r\n  socket: Socket;\r\n  showAlert?: ShowAlert;\r\n  islevel: string;\r\n  roomName: string;\r\n  shapes: Shape[];\r\n  useImageBackground: boolean;\r\n  redoStack: Shape[];\r\n  undoStack: string[];\r\n  whiteboardStarted: boolean;\r\n  whiteboardEnded: boolean;\r\n  whiteboardUsers: WhiteboardUser[];\r\n  participants: Participant[];\r\n  participantsAll: Participant[];\r\n  screenId: string;\r\n  recordStarted: boolean;\r\n  recordStopped: boolean;\r\n  recordPaused: boolean;\r\n  recordResumed: boolean;\r\n  recordingMediaOptions: string;\r\n  member: string;\r\n  shareScreenStarted: boolean;\r\n  canvasWhiteboard: HTMLCanvasElement | null;\r\n  targetResolution?: string;\r\n  targetResolutionHost?: string;\r\n\r\n  updateShapes: (shapes: Shape[]) => void;\r\n  updateUseImageBackground: (useImageBackground: boolean) => void;\r\n  updateRedoStack: (redoStack: Shape[]) => void;\r\n  updateUndoStack: (undoStack: string[]) => void;\r\n  updateWhiteboardStarted: (whiteboardStarted: boolean) => void;\r\n  updateWhiteboardEnded: (whiteboardEnded: boolean) => void;\r\n  updateWhiteboardUsers: (whiteboardUsers: WhiteboardUser[]) => void;\r\n  updateParticipants: (participants: Participant[]) => void;\r\n  updateScreenId: (screenId: string) => void;\r\n  updateShareScreenStarted: (shareScreenStarted: boolean) => void;\r\n  updateCanvasWhiteboard: (canvasWhiteboard: HTMLCanvasElement | null) => void;\r\n\r\n  // mediasfu functions\r\n  onScreenChanges: OnScreenChangesType;\r\n  captureCanvasStream: CaptureCanvasStreamType;\r\n\r\n  getUpdatedAllParams: () => WhiteboardParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface WhiteboardOptions {\r\n  customWidth: number;\r\n  customHeight: number;\r\n  parameters: WhiteboardParameters;\r\n  showAspect: boolean;\r\n}\r\n\r\nexport type WhiteboardType = (options: WhiteboardOptions) => void;\r\n\r\n@Component({\r\n    selector: 'app-whiteboard',\r\n    templateUrl: './whiteboard.component.html',\r\n    styleUrls: ['./whiteboard.component.css'],\r\n    encapsulation: ViewEncapsulation.None,\r\n    imports: [CommonModule, FormsModule, FontAwesomeModule]\r\n})\r\nexport class Whiteboard implements OnInit, OnDestroy, OnChanges {\r\n  @Input() customWidth!: number;\r\n  @Input() customHeight!: number;\r\n  @Input() parameters: WhiteboardParameters = {} as WhiteboardParameters;\r\n  @Input() showAspect!: boolean;\r\n\r\n  @ViewChild('canvasRef', { static: false }) canvasRef!: ElementRef<HTMLCanvasElement>;\r\n  @ViewChild('textInputRef', { static: false }) textInputRef!: ElementRef<HTMLTextAreaElement>;\r\n  @ViewChild('toggleBackgroundRef', { static: false })\r\n  toggleBackgroundRef!: ElementRef<HTMLButtonElement>;\r\n  @ViewChild('downloadLinkRef', { static: false }) downloadLinkRef!: ElementRef<HTMLAnchorElement>;\r\n  @ViewChild('tempCanvasRef', { static: false }) tempCanvasRef!: ElementRef<HTMLCanvasElement>;\r\n\r\n  faTimes = faTimes;\r\n  faUndo = faUndo;\r\n  faRedo = faRedo;\r\n  faEraser = faEraser;\r\n  faShapes = faShapes;\r\n  faMousePointer = faMousePointer;\r\n  faHandPaper = faHandPaper;\r\n  faTextHeight = faTextHeight;\r\n  faFont = faFont;\r\n  faPencilAlt = faPencilAlt;\r\n  faPaintBrush = faPaintBrush;\r\n  faTrash = faTrash;\r\n  faSave = faSave;\r\n  faSearch = faSearch;\r\n  faSearchMinus = faSearchMinus;\r\n  faSearchPlus = faSearchPlus;\r\n  faChevronLeft = faChevronLeft;\r\n  faUpload = faUpload;\r\n  faChevronRight = faChevronRight;\r\n\r\n  private mode = 'pan';\r\n  private isDrawing = false;\r\n  private isPanning = false;\r\n  private isDragging = false;\r\n  private startX = 0;\r\n  private startY = 0;\r\n  private currentX = 0;\r\n  private currentY = 0;\r\n  private freehandDrawing: any[] = [];\r\n  private selectedShape: any = null;\r\n  private selectedHandle: any = null;\r\n  private movingShape = false;\r\n  private panX = 0;\r\n  private panY = 0;\r\n  private scale = 1;\r\n  private minScale = 0.25;\r\n  private maxScale = 1.75;\r\n  private eraserThickness = 10;\r\n  private brushThickness = 6;\r\n  private lineThickness = 6;\r\n  lineType = 'solid';\r\n  color = '#000000';\r\n  private font = 'Arial';\r\n  private fontSize = 20;\r\n  private shape: any = null;\r\n  private backgroundImage = new Image();\r\n  toolbarVisible = true;\r\n  dropdownOpen: string | null = null;\r\n  private currentClickPosition: {\r\n    clientX: number;\r\n    clientY: number;\r\n    offsetX: number;\r\n    offsetY: number;\r\n  } | null = null;\r\n\r\n  private maxWidth = 1280;\r\n  private maxHeight = 720;\r\n  private dimensionsFixed = false;\r\n  private isValidShape = false;\r\n\r\n  updateLineThickness = (thickness: number) => {\r\n    this.lineThickness = thickness;\r\n  };\r\n\r\n  updateBrushThickness = (thickness: number) => {\r\n    this.brushThickness = thickness;\r\n  };\r\n\r\n  updateEraserThickness = (thickness: number) => {\r\n    this.eraserThickness = thickness;\r\n  };\r\n\r\n  updateColor = (color: string) => {\r\n    this.color = color;\r\n  };\r\n\r\n  updateFont = (font: string) => {\r\n    this.font = font;\r\n  };\r\n\r\n  updateFontSize = (fontSize: number) => {\r\n    this.fontSize = fontSize;\r\n  };\r\n\r\n  updateShape = (shape: string) => {\r\n    this.shape = shape;\r\n  };\r\n\r\n  ngOnInit(): void {\r\n    if (this.showAspect) {\r\n      this.addListeners();\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['parameters'] && changes['parameters'].currentValue) {\r\n      this.parameters = changes['parameters'].currentValue;\r\n\r\n      if (this.parameters.socket instanceof Socket) {\r\n        this.parameters.socket.on('whiteboardUpdated', async (data: any) => {\r\n          this.WhiteboardUpdated(data);\r\n        });\r\n\r\n        this.parameters.socket.on('whiteboardAction', (data: any) => {\r\n          this.WhiteboardAction(data);\r\n        });\r\n      }\r\n    }\r\n\r\n    if (changes['showAspect']) {\r\n      if (changes['showAspect'].currentValue) {\r\n        this.addListeners();\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    const canvas = this.canvasRef.nativeElement;\r\n    canvas.removeEventListener('mousedown', this.startDrawing.bind(this));\r\n    canvas.removeEventListener('mousemove', this.draw.bind(this));\r\n    canvas.removeEventListener('mouseup', this.stopDrawing.bind(this));\r\n    canvas.removeEventListener('wheel', this.handleZoom.bind(this));\r\n    canvas.removeEventListener('click', this.handleCanvasClick.bind(this));\r\n\r\n    // touch events\r\n    canvas.removeEventListener('touchstart', this.handleTouchStart.bind(this));\r\n    canvas.removeEventListener('touchmove', this.handleTouchMove.bind(this));\r\n    canvas.removeEventListener('touchend', this.handleTouchEnd.bind(this));\r\n\r\n    document.removeEventListener('mousedown', this.handleClickOutside.bind(this));\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    // Attach the event listener once after the view has been initialized\r\n    const textInput = this.textInputRef.nativeElement;\r\n    textInput.addEventListener('keypress', (event: KeyboardEvent) => {\r\n      if (event.key === 'Enter') {\r\n        this.handleTextInput(event);\r\n      }\r\n    });\r\n  }\r\n\r\n  handleTextInput(event: KeyboardEvent) {\r\n    const textInput = this.textInputRef.nativeElement;\r\n    if (event.key === 'Enter' && this.currentClickPosition) {\r\n      const { offsetX, offsetY } = this.currentClickPosition;\r\n      const text = textInput.value;\r\n      textInput.style.display = 'none';\r\n      textInput.value = '';\r\n\r\n      const x = (offsetX - this.panX) / this.scale;\r\n      const y = (offsetY - this.panY) / this.scale;\r\n\r\n      this.parameters.shapes.push({\r\n        type: 'text',\r\n        text,\r\n        x,\r\n        y,\r\n        color: this.color,\r\n        font: this.font,\r\n        fontSize: this.fontSize,\r\n      });\r\n\r\n      this.drawShapes();\r\n      this.parameters.updateShapes(this.parameters.shapes);\r\n      this.parameters.socket.emit(\r\n        'updateBoardAction',\r\n        {\r\n          action: 'text',\r\n          payload: {\r\n            type: 'text',\r\n            text,\r\n            x,\r\n            y,\r\n            color: this.color,\r\n            font: this.font,\r\n            fontSize: this.fontSize,\r\n          },\r\n        },\r\n        this.handleServerResponse,\r\n      );\r\n    }\r\n  }\r\n\r\n  addListeners = () => {\r\n    if (this.parameters) {\r\n      this.parameters = this.parameters.getUpdatedAllParams();\r\n    }\r\n\r\n    this.backgroundImage.src = 'https://mediasfu.com/images/svg/graph_paper.jpg';\r\n    this.backgroundImage.crossOrigin = 'anonymous';\r\n    this.backgroundImage.onload = () => {\r\n      this.drawShapes();\r\n    };\r\n\r\n    const canvas = this.canvasRef.nativeElement;\r\n\r\n    if (this.canvasRef.nativeElement) {\r\n      try {\r\n        if (\r\n          this.parameters.targetResolution == 'qhd' ||\r\n          this.parameters.targetResolutionHost == 'qhd'\r\n        ) {\r\n          this.maxWidth = 1920;\r\n          this.maxHeight = 1080;\r\n        } else if (\r\n          this.parameters.targetResolution == 'fhd' ||\r\n          this.parameters.targetResolutionHost == 'fhd'\r\n        ) {\r\n          this.maxWidth = 1920;\r\n          this.maxHeight = 1080;\r\n        }\r\n        canvas.width = this.maxWidth;\r\n        canvas.height = this.maxHeight;\r\n        this.dimensionsFixed = true;\r\n      } catch {\r\n        /* handle error */\r\n      }\r\n      this.parameters.updateCanvasWhiteboard(this.canvasRef.nativeElement);\r\n    }\r\n\r\n    canvas.addEventListener('mousedown', this.startDrawing.bind(this));\r\n    canvas.addEventListener('mousemove', this.draw.bind(this));\r\n    canvas.addEventListener('mouseup', this.stopDrawing.bind(this));\r\n    canvas.addEventListener('wheel', this.handleZoom.bind(this));\r\n    canvas.addEventListener('click', this.handleCanvasClick.bind(this));\r\n\r\n    // touch events\r\n    canvas.addEventListener('touchstart', this.handleTouchStart.bind(this));\r\n    canvas.addEventListener('touchmove', this.handleTouchMove.bind(this));\r\n    canvas.addEventListener('touchend', this.handleTouchEnd.bind(this));\r\n\r\n    document.addEventListener('mousedown', this.handleClickOutside.bind(this));\r\n  };\r\n\r\n  handleTouchStart(e: TouchEvent) {\r\n    e.preventDefault();\r\n    const touch = e.touches[0];\r\n    const mouseEvent = new MouseEvent('mousedown', {\r\n      clientX: touch.clientX,\r\n      clientY: touch.clientY,\r\n    });\r\n    this.canvasRef.nativeElement.dispatchEvent(mouseEvent);\r\n  }\r\n\r\n  handleTouchMove(e: TouchEvent) {\r\n    e.preventDefault();\r\n    const touch = e.touches[0];\r\n    const mouseEvent = new MouseEvent('mousemove', {\r\n      clientX: touch.clientX,\r\n      clientY: touch.clientY,\r\n    });\r\n    this.canvasRef.nativeElement.dispatchEvent(mouseEvent);\r\n  }\r\n\r\n  handleTouchEnd(e: TouchEvent) {\r\n    e.preventDefault();\r\n    const mouseEvent = new MouseEvent('mouseup', {});\r\n    this.canvasRef.nativeElement.dispatchEvent(mouseEvent);\r\n  }\r\n\r\n  handleClickOutside(event: MouseEvent) {\r\n    const target = event.target as Element;\r\n    if (this.dropdownOpen && !target.closest('.btn-group')) {\r\n      this.dropdownOpen = null;\r\n    }\r\n  }\r\n\r\n  handleCanvasClick(e: MouseEvent) {\r\n    if (this.mode === 'text') {\r\n      const textInput = this.textInputRef.nativeElement;\r\n      textInput.style.left = e.clientX + 'px';\r\n      textInput.style.top = e.clientY + 'px';\r\n      textInput.style.display = 'block';\r\n      textInput.focus();\r\n      this.currentClickPosition = {\r\n        clientX: e.clientX,\r\n        clientY: e.clientY,\r\n        offsetX: e.offsetX,\r\n        offsetY: e.offsetY,\r\n      };\r\n    }\r\n  }\r\n\r\n  startDrawing(e: MouseEvent) {\r\n    this.isDrawing = true;\r\n    this.startX = (e.offsetX - this.panX) / this.scale;\r\n    this.startY = (e.offsetY - this.panY) / this.scale;\r\n\r\n    if (this.mode === 'erase') {\r\n      this.erase(this.startX, this.startY);\r\n    } else if (this.mode === 'draw' || this.mode === 'freehand') {\r\n      const ctx = this.canvasRef.nativeElement.getContext('2d');\r\n      ctx!.beginPath();\r\n      ctx!.moveTo(this.startX, this.startY);\r\n      if (this.mode === 'freehand') {\r\n        this.freehandDrawing = [{ x: this.startX, y: this.startY }];\r\n      }\r\n    } else if (this.mode === 'pan') {\r\n      this.isPanning = true;\r\n      this.isDragging = false;\r\n    } else if (this.mode === 'select') {\r\n      this.selectedHandle = this.getHandleAtPosition(this.startX, this.startY);\r\n      if (this.selectedHandle) {\r\n        this.isDragging = true;\r\n        this.movingShape = this.selectedHandle.isCenter;\r\n      } else {\r\n        this.selectedShape = this.findShape(this.startX, this.startY);\r\n        if (this.selectedShape) {\r\n          this.drawShapes();\r\n          this.drawSelection(this.selectedShape);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  draw = (e: MouseEvent) => {\r\n    if (!this.dimensionsFixed) {\r\n      try {\r\n        if (\r\n          this.parameters.targetResolution == 'qhd' ||\r\n          this.parameters.targetResolutionHost == 'qhd'\r\n        ) {\r\n          this.maxWidth = 1920;\r\n          this.maxHeight = 1080;\r\n        } else if (\r\n          this.parameters.targetResolution == 'fhd' ||\r\n          this.parameters.targetResolutionHost == 'fhd'\r\n        ) {\r\n          this.maxWidth = 1920;\r\n          this.maxHeight = 1080;\r\n        }\r\n        this.canvasRef.nativeElement.width = this.maxWidth;\r\n        this.canvasRef.nativeElement.height = this.maxHeight;\r\n        this.dimensionsFixed = true;\r\n        this.parameters.updateCanvasWhiteboard(this.canvasRef.nativeElement);\r\n      } catch {\r\n        /* handle error */\r\n      }\r\n    }\r\n    if (!this.isDrawing) return;\r\n    this.currentX = (e.offsetX - this.panX) / this.scale;\r\n    this.currentY = (e.offsetY - this.panY) / this.scale;\r\n\r\n    if (this.mode == 'draw' || this.mode == 'freehand' || this.mode == 'shape') {\r\n      //if more than max width or height or less than 0, return\r\n      if (\r\n        this.currentX > this.maxWidth ||\r\n        this.currentY > this.maxHeight ||\r\n        this.currentX < 0 ||\r\n        this.currentY < 0\r\n      ) {\r\n        this.isValidShape = false;\r\n        return;\r\n      } else {\r\n        this.isValidShape = true;\r\n      }\r\n    }\r\n\r\n    const ctx = this.canvasRef.nativeElement.getContext('2d');\r\n    if (this.mode === 'erase') {\r\n      this.erase(this.currentX, this.currentY);\r\n    } else if (this.mode === 'draw') {\r\n      ctx!.clearRect(0, 0, this.canvasRef.nativeElement.width, this.canvasRef.nativeElement.height);\r\n      this.drawShapes();\r\n      this.drawLine(\r\n        this.startX,\r\n        this.startY,\r\n        this.currentX,\r\n        this.currentY,\r\n        this.color,\r\n        this.lineThickness,\r\n        this.lineType,\r\n      );\r\n    } else if (this.mode === 'freehand') {\r\n      ctx!.lineTo(this.currentX, this.currentY);\r\n      ctx!.strokeStyle = this.color;\r\n      ctx!.lineWidth = this.brushThickness;\r\n      ctx!.stroke();\r\n      this.freehandDrawing.push({ x: this.currentX, y: this.currentY });\r\n    } else if (this.mode === 'shape') {\r\n      ctx!.clearRect(0, 0, this.canvasRef.nativeElement.width, this.canvasRef.nativeElement.height);\r\n      this.drawShapes();\r\n      this.drawShape(\r\n        this.shape,\r\n        this.startX,\r\n        this.startY,\r\n        this.currentX,\r\n        this.currentY,\r\n        this.color,\r\n        this.lineThickness,\r\n        this.lineType,\r\n      );\r\n    } else if (this.mode === 'pan' && this.isPanning) {\r\n      this.isDragging = true;\r\n      const dx = e.clientX - this.startX;\r\n      const dy = e.clientY - this.startY;\r\n      this.panX += dx;\r\n      this.panY += dy;\r\n      this.startX = e.clientX;\r\n      this.startY = e.clientY;\r\n\r\n      ctx!.setTransform(this.scale, 0, 0, this.scale, this.panX, this.panY);\r\n      this.drawShapes();\r\n    } else if (this.mode === 'select' && this.selectedShape) {\r\n      ctx!.clearRect(0, 0, this.canvasRef.nativeElement.width, this.canvasRef.nativeElement.height);\r\n      if (this.movingShape) {\r\n        const dx = this.currentX - this.startX;\r\n        const dy = this.currentY - this.startY;\r\n        this.moveShape(this.selectedShape, dx, dy);\r\n        this.startX = this.currentX;\r\n        this.startY = this.currentY;\r\n      } else if (this.isDragging) {\r\n        this.resizeShape(this.selectedShape, this.selectedHandle, this.currentX, this.currentY);\r\n      }\r\n      this.drawShapes();\r\n      this.drawSelection(this.selectedShape);\r\n    }\r\n  };\r\n\r\n  stopDrawing() {\r\n    this.isDrawing = false;\r\n    this.isPanning = false;\r\n    this.isDragging = false;\r\n\r\n    const ctx = this.canvasRef.nativeElement.getContext('2d');\r\n    ctx!.closePath();\r\n\r\n    if (this.mode === 'draw' && this.isValidShape) {\r\n      this.parameters.shapes.push({\r\n        type: 'line',\r\n        x1: this.startX,\r\n        y1: this.startY,\r\n        x2: this.currentX,\r\n        y2: this.currentY,\r\n        color: this.color,\r\n        thickness: this.lineThickness,\r\n        lineType: this.lineType,\r\n      });\r\n      this.parameters.updateShapes(this.parameters.shapes);\r\n      this.saveState();\r\n      this.parameters.socket.emit(\r\n        'updateBoardAction',\r\n        {\r\n          action: 'draw',\r\n          payload: {\r\n            type: 'line',\r\n            x1: this.startX,\r\n            y1: this.startY,\r\n            x2: this.currentX,\r\n            y2: this.currentY,\r\n            color: this.color,\r\n            thickness: this.lineThickness,\r\n            lineType: this.lineType,\r\n          },\r\n        },\r\n        this.handleServerResponse,\r\n      );\r\n    } else if (this.mode === 'freehand' && this.isValidShape) {\r\n      this.parameters.shapes.push({\r\n        type: 'freehand',\r\n        points: this.freehandDrawing,\r\n        color: this.color,\r\n        thickness: this.brushThickness,\r\n      });\r\n      this.parameters.updateShapes(this.parameters.shapes);\r\n      this.parameters.socket.emit(\r\n        'updateBoardAction',\r\n        {\r\n          action: 'draw',\r\n          payload: {\r\n            type: 'freehand',\r\n            points: this.freehandDrawing,\r\n            color: this.color,\r\n            thickness: this.brushThickness,\r\n          },\r\n        },\r\n        this.handleServerResponse,\r\n      );\r\n      this.freehandDrawing = [];\r\n      this.saveState();\r\n    } else if (this.mode === 'shape' && this.isValidShape) {\r\n      this.parameters.shapes.push({\r\n        type: this.shape,\r\n        x1: this.startX,\r\n        y1: this.startY,\r\n        x2: this.currentX,\r\n        y2: this.currentY,\r\n        color: this.color,\r\n        thickness: this.lineThickness,\r\n        lineType: this.lineType,\r\n      });\r\n      this.parameters.updateShapes(this.parameters.shapes);\r\n      this.saveState();\r\n      this.parameters.socket.emit(\r\n        'updateBoardAction',\r\n        {\r\n          action: 'shape',\r\n          payload: {\r\n            type: this.shape,\r\n            x1: this.startX,\r\n            y1: this.startY,\r\n            x2: this.currentX,\r\n            y2: this.currentY,\r\n            color: this.color,\r\n            thickness: this.lineThickness,\r\n            lineType: this.lineType,\r\n          },\r\n        },\r\n        this.handleServerResponse,\r\n      );\r\n    } else if (this.mode === 'select') {\r\n      if (this.selectedShape && !this.movingShape && !this.isDragging) {\r\n        const shapeFound = this.findShape(this.currentX, this.currentY);\r\n        if (shapeFound) {\r\n          this.selectedShape = shapeFound;\r\n          this.drawShapes();\r\n          this.drawSelection(shapeFound);\r\n        }\r\n      }\r\n      if (this.selectedShape) {\r\n        this.parameters.socket.emit(\r\n          'updateBoardAction',\r\n          { action: 'shapes', payload: { shapes: this.parameters.shapes } },\r\n          this.handleServerResponse,\r\n        );\r\n      }\r\n      this.saveState();\r\n    }\r\n  }\r\n\r\n  erase(x: number, y: number) {\r\n    const ctx = this.canvasRef.nativeElement.getContext('2d');\r\n    ctx!.save();\r\n    ctx!.globalCompositeOperation = 'destination-out';\r\n    ctx!.beginPath();\r\n    ctx!.arc(x, y, this.eraserThickness / 2, 0, Math.PI * 2, false);\r\n    ctx!.fill();\r\n    ctx!.restore();\r\n\r\n    let changeOccurred = false;\r\n    this.parameters.shapes = this.parameters.shapes\r\n      .map((shape: any) => {\r\n        if (shape.type === 'freehand') {\r\n          return {\r\n            ...shape,\r\n            points: shape.points.filter((point: any) => {\r\n              const distance = Math.sqrt(Math.pow(point.x - x, 2) + Math.pow(point.y - y, 2));\r\n              if (distance <= this.eraserThickness / 2) {\r\n                changeOccurred = true;\r\n                return false;\r\n              }\r\n              return distance > this.eraserThickness / 2;\r\n            }),\r\n          };\r\n        } else if (shape.type === 'line') {\r\n          if (\r\n            this.isPointNearLine(\r\n              x,\r\n              y,\r\n              shape.x1,\r\n              shape.y1,\r\n              shape.x2,\r\n              shape.y2,\r\n              this.eraserThickness / 2,\r\n            )\r\n          ) {\r\n            changeOccurred = true;\r\n            return null;\r\n          }\r\n        } else if (shape.type === 'text') {\r\n          const textWidth = ctx!.measureText(shape.text).width;\r\n          if (\r\n            x > shape.x &&\r\n            x < shape.x + textWidth &&\r\n            y > shape.y - shape.fontSize &&\r\n            y < shape.y\r\n          ) {\r\n            changeOccurred = true;\r\n            return null;\r\n          }\r\n        } else if (shape.type === 'image') {\r\n          if (x > shape.x1 && x < shape.x2 && y > shape.y1 && y < shape.y2) {\r\n            changeOccurred = true;\r\n            return null;\r\n          }\r\n        } else {\r\n          if (x > shape.x1 && x < shape.x2 && y > shape.y1 && y < shape.y2) {\r\n            changeOccurred = true;\r\n            return null;\r\n          }\r\n        }\r\n        return shape;\r\n      })\r\n      .filter((shape: any) => shape && (shape.type !== 'freehand' || shape.points.length > 0));\r\n    this.parameters.updateShapes(this.parameters.shapes);\r\n\r\n    this.drawShapes();\r\n    if (changeOccurred) {\r\n      this.parameters.socket.emit(\r\n        'updateBoardAction',\r\n        { action: 'shapes', payload: { shapes: this.parameters.shapes } },\r\n        this.handleServerResponse,\r\n      );\r\n    }\r\n  }\r\n\r\n  isPointNearLine(\r\n    px: number,\r\n    py: number,\r\n    x1: number,\r\n    y1: number,\r\n    x2: number,\r\n    y2: number,\r\n    threshold: number,\r\n  ): boolean {\r\n    const dx = x2 - x1;\r\n    const dy = y2 - y1;\r\n    const length = Math.sqrt(dx * dx + dy * dy);\r\n    const dot = ((px - x1) * dx + (py - y1) * dy) / (length * length);\r\n    const closestX = x1 + dot * dx;\r\n    const closestY = y1 + dot * dy;\r\n    const distance = Math.sqrt(Math.pow(px - closestX, 2) + Math.pow(py - closestY, 2));\r\n    return distance <= threshold;\r\n  }\r\n\r\n  zoomCanvas(\r\n    scaleFactor: number,\r\n    event: MouseEvent = {\r\n      clientX: this.canvasRef.nativeElement.width / 2,\r\n      clientY: this.canvasRef.nativeElement.height / 2,\r\n    } as MouseEvent,\r\n  ) {\r\n    const canvas = this.canvasRef.nativeElement;\r\n    const ctx = canvas.getContext('2d');\r\n    if (scaleFactor === 10) {\r\n      this.scale = 1;\r\n      this.panX = 0;\r\n      this.panY = 0;\r\n    } else {\r\n      let newScale = this.scale * scaleFactor;\r\n      if (newScale < this.minScale) {\r\n        newScale = this.minScale;\r\n      } else if (newScale > this.maxScale) {\r\n        newScale = this.maxScale;\r\n      }\r\n\r\n      const rect = canvas.getBoundingClientRect();\r\n      const offsetX = (event.clientX - rect.left) / rect.width;\r\n      const offsetY = (event.clientY - rect.top) / rect.height;\r\n\r\n      const dx = offsetX * canvas.width * (1 - scaleFactor);\r\n      const dy = offsetY * canvas.height * (1 - scaleFactor);\r\n\r\n      this.scale = newScale;\r\n      this.panX = this.panX * scaleFactor + dx;\r\n      this.panY = this.panY * scaleFactor + dy;\r\n\r\n      const maxPanX = (canvas.width * (this.scale - 1)) / this.scale;\r\n      const maxPanY = (canvas.height * (this.scale - 1)) / this.scale;\r\n      this.panX = Math.min(Math.max(this.panX, -maxPanX), 0);\r\n      this.panY = Math.min(Math.max(this.panY, -maxPanY), 0);\r\n    }\r\n\r\n    ctx!.setTransform(this.scale, 0, 0, this.scale, this.panX, this.panY);\r\n    this.drawShapes();\r\n  }\r\n\r\n  handleZoom(e: WheelEvent) {\r\n    e.preventDefault();\r\n    if (e.deltaY < 0) {\r\n      this.zoomCanvas(1.2, e as any);\r\n    } else {\r\n      this.zoomCanvas(0.8, e as any);\r\n    }\r\n  }\r\n\r\n  drawEdgeMarkers() {\r\n    const ctx = this.canvasRef.nativeElement.getContext('2d');\r\n    ctx!.save();\r\n    ctx!.setTransform(1, 0, 0, 1, 0, 0);\r\n    ctx!.strokeStyle = 'red';\r\n    ctx!.lineWidth = 5;\r\n    ctx!.setLineDash([]); // reset line dash\r\n\r\n    const markerLength = 20;\r\n    const topLeftX = this.panX;\r\n    const topLeftY = this.panY;\r\n    const bottomRightX = this.panX + 1280 * this.scale;\r\n    const bottomRightY = this.panY + 720 * this.scale;\r\n\r\n    ctx!.beginPath();\r\n    ctx!.moveTo(topLeftX, topLeftY + markerLength);\r\n    ctx!.lineTo(topLeftX, topLeftY);\r\n    ctx!.lineTo(topLeftX + markerLength, topLeftY);\r\n    ctx!.stroke();\r\n\r\n    ctx!.beginPath();\r\n    ctx!.moveTo(bottomRightX - markerLength, topLeftY);\r\n    ctx!.lineTo(bottomRightX, topLeftY);\r\n    ctx!.lineTo(bottomRightX, topLeftY + markerLength);\r\n    ctx!.stroke();\r\n\r\n    ctx!.beginPath();\r\n    ctx!.moveTo(bottomRightX, bottomRightY - markerLength);\r\n    ctx!.lineTo(bottomRightX, bottomRightY);\r\n    ctx!.lineTo(bottomRightX - markerLength, bottomRightY);\r\n    ctx!.stroke();\r\n\r\n    ctx!.beginPath();\r\n    ctx!.moveTo(topLeftX + markerLength, bottomRightY);\r\n    ctx!.lineTo(topLeftX, bottomRightY);\r\n    ctx!.lineTo(topLeftX, bottomRightY - markerLength);\r\n    ctx!.stroke();\r\n\r\n    ctx!.restore();\r\n  }\r\n\r\n  drawShapes() {\r\n    const canvas = this.canvasRef.nativeElement;\r\n    const ctx = canvas.getContext('2d');\r\n    ctx!.clearRect(0, 0, canvas.width, canvas.height);\r\n    ctx!.save();\r\n    ctx!.setTransform(this.scale, 0, 0, this.scale, this.panX, this.panY);\r\n    if (this.parameters.useImageBackground) {\r\n      ctx!.drawImage(\r\n        this.backgroundImage,\r\n        -this.panX / this.scale,\r\n        -this.panY / this.scale,\r\n        canvas.width / this.scale,\r\n        canvas.height / this.scale,\r\n      );\r\n    } else {\r\n      ctx!.fillStyle = '#fff';\r\n      ctx!.fillRect(\r\n        -this.panX / this.scale,\r\n        -this.panY / this.scale,\r\n        canvas.width / this.scale,\r\n        canvas.height / this.scale,\r\n      );\r\n    }\r\n    this.parameters.shapes.forEach((shape: any) => {\r\n      if (shape.type === 'line') {\r\n        this.drawLine(\r\n          shape.x1,\r\n          shape.y1,\r\n          shape.x2,\r\n          shape.y2,\r\n          shape.color,\r\n          shape.thickness,\r\n          shape.lineType,\r\n        );\r\n      } else if (shape.type === 'freehand') {\r\n        this.drawFreehand(shape.points, shape.color, shape.thickness);\r\n      } else if (shape.type === 'text') {\r\n        ctx!.font = `${shape.fontSize}px ${shape.font}`;\r\n        ctx!.fillStyle = shape.color;\r\n        ctx!.fillText(shape.text, shape.x, shape.y);\r\n      } else if (shape.type === 'image') {\r\n        ctx!.drawImage(shape.img, shape.x1, shape.y1, shape.x2 - shape.x1, shape.y2 - shape.y1);\r\n      } else {\r\n        this.drawShape(\r\n          shape.type,\r\n          shape.x1,\r\n          shape.y1,\r\n          shape.x2,\r\n          shape.y2,\r\n          shape.color,\r\n          shape.thickness,\r\n          shape.lineType,\r\n        );\r\n      }\r\n    });\r\n    ctx!.restore();\r\n    this.drawEdgeMarkers();\r\n  }\r\n\r\n  drawLine(\r\n    x1: number,\r\n    y1: number,\r\n    x2: number,\r\n    y2: number,\r\n    color: string,\r\n    thickness: number,\r\n    lineType: string,\r\n  ) {\r\n    const ctx = this.canvasRef.nativeElement.getContext('2d');\r\n    ctx!.beginPath();\r\n    ctx!.strokeStyle = color;\r\n    ctx!.lineWidth = thickness;\r\n    if (lineType === 'dashed') {\r\n      ctx!.setLineDash([10, 10]);\r\n    } else if (lineType === 'dotted') {\r\n      ctx!.setLineDash([2, 10]);\r\n    } else if (lineType === 'dashDot') {\r\n      ctx!.setLineDash([10, 5, 2, 5]);\r\n    } else {\r\n      ctx!.setLineDash([]);\r\n    }\r\n    ctx!.moveTo(x1, y1);\r\n    ctx!.lineTo(x2, y2);\r\n    ctx!.stroke();\r\n    ctx!.setLineDash([]);\r\n  }\r\n\r\n  drawText(text: string, x: number, y: number, color: string, font: string) {\r\n    const ctx = this.canvasRef.nativeElement.getContext('2d');\r\n    ctx!.font = `20px ${font}`;\r\n    ctx!.fillStyle = color;\r\n    ctx!.fillText(text, x, y);\r\n  }\r\n\r\n  drawFreehand(points: { x: number; y: number }[], color: string, thickness: number) {\r\n    const ctx = this.canvasRef.nativeElement.getContext('2d');\r\n    if (points.length < 2) return;\r\n    ctx!.strokeStyle = color;\r\n    ctx!.lineWidth = thickness;\r\n    ctx!.beginPath();\r\n    ctx!.moveTo(points[0].x, points[0].y);\r\n    for (let i = 1; i < points.length; i++) {\r\n      ctx!.lineTo(points[i].x, points[i].y);\r\n    }\r\n    ctx!.stroke();\r\n  }\r\n\r\n  drawShape(\r\n    type: string,\r\n    x1: number,\r\n    y1: number,\r\n    x2: number,\r\n    y2: number,\r\n    color: string,\r\n    thickness: number,\r\n    lineType: string,\r\n    ctx: CanvasRenderingContext2D = this.canvasRef.nativeElement.getContext('2d')!,\r\n  ) {\r\n    ctx.beginPath();\r\n    ctx.strokeStyle = color;\r\n    ctx.lineWidth = thickness;\r\n    if (lineType === 'dashed') {\r\n      ctx.setLineDash([10, 10]);\r\n    } else if (lineType === 'dotted') {\r\n      ctx.setLineDash([2, 10]);\r\n    } else if (lineType === 'dashDot') {\r\n      ctx.setLineDash([10, 5, 2, 5]);\r\n    } else {\r\n      ctx.setLineDash([]);\r\n    }\r\n    if (type === 'rectangle') {\r\n      ctx.strokeRect(x1, y1, x2 - x1, y2 - y1);\r\n    } else if (type === 'circle') {\r\n      const radius = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\r\n      ctx.arc(x1, y1, radius, 0, 2 * Math.PI);\r\n      ctx.stroke();\r\n    } else if (type === 'rhombus') {\r\n      const centerX = (x1 + x2) / 2;\r\n      const centerY = (y1 + y2) / 2;\r\n      ctx.moveTo(centerX, y1);\r\n      ctx.lineTo(x2, centerY);\r\n      ctx.lineTo(centerX, y2);\r\n      ctx.lineTo(x1, centerY);\r\n      ctx.closePath();\r\n      ctx.stroke();\r\n    } else if (type === 'pentagon') {\r\n      this.drawPolygon(ctx, 5, x1, y1, x2, y2);\r\n    } else if (type === 'hexagon') {\r\n      this.drawPolygon(ctx, 6, x1, y1, x2, y2);\r\n    } else if (type === 'triangle') {\r\n      const centerX = (x1 + x2) / 2;\r\n      ctx.moveTo(centerX, y1);\r\n      ctx.lineTo(x2, y2);\r\n      ctx.lineTo(x1, y2);\r\n      ctx.closePath();\r\n      ctx.stroke();\r\n    } else if (type === 'square') {\r\n      ctx.strokeRect(x1, y1, x2 - x1, x2 - x1);\r\n    } else if (type === 'octagon') {\r\n      this.drawPolygon(ctx, 8, x1, y1, x2, y2);\r\n    } else if (type === 'oval') {\r\n      const radiusX = Math.abs(x2 - x1) / 2;\r\n      const radiusY = Math.abs(y2 - y1) / 2;\r\n      const centerX = (x1 + x2) / 2;\r\n      const centerY = (y1 + y2) / 2;\r\n      ctx.ellipse(centerX, centerY, radiusX, radiusY, 0, 0, 2 * Math.PI);\r\n      ctx.stroke();\r\n    } else if (type === 'parallelogram') {\r\n      const centerX = (x1 + x2) / 2;\r\n      ctx.moveTo(centerX, y1);\r\n      ctx.lineTo(x2, y2);\r\n      ctx.lineTo(centerX, y2);\r\n      ctx.lineTo(x1, y1);\r\n      ctx.closePath();\r\n      ctx.stroke();\r\n    } else if (type === 'image') {\r\n      ctx.drawImage(this.shape.img, x1, y1, x2 - x1, y2 - y1);\r\n    }\r\n  }\r\n\r\n  drawPolygon(\r\n    ctx: CanvasRenderingContext2D,\r\n    sides: number,\r\n    x1: number,\r\n    y1: number,\r\n    x2: number,\r\n    y2: number,\r\n  ) {\r\n    const centerX = (x1 + x2) / 2;\r\n    const centerY = (y1 + y2) / 2;\r\n    const radius = Math.min(Math.abs(x2 - x1), Math.abs(y2 - y1)) / 2;\r\n    const angle = (2 * Math.PI) / sides;\r\n    ctx.beginPath();\r\n    for (let i = 0; i < sides; i++) {\r\n      const x = centerX + radius * Math.cos(i * angle - Math.PI / 2);\r\n      const y = centerY + radius * Math.sin(i * angle - Math.PI / 2);\r\n      if (i === 0) {\r\n        ctx.moveTo(x, y);\r\n      } else {\r\n        ctx.lineTo(x, y);\r\n      }\r\n    }\r\n    ctx.closePath();\r\n    ctx.stroke();\r\n  }\r\n\r\n  undo() {\r\n    if (this.parameters.shapes.length > 0) {\r\n      this.parameters.redoStack.push(this.parameters.shapes.pop()!);\r\n      this.parameters.updateRedoStack(this.parameters.redoStack);\r\n      this.drawShapes();\r\n      this.parameters.socket.emit(\r\n        'updateBoardAction',\r\n        { action: 'undo' },\r\n        this.handleServerResponse,\r\n      );\r\n    }\r\n  }\r\n\r\n  redo() {\r\n    if (this.parameters.redoStack.length > 0) {\r\n      this.parameters.shapes.push(this.parameters.redoStack.pop()!);\r\n      this.parameters.updateShapes(this.parameters.shapes);\r\n      this.drawShapes();\r\n      this.parameters.socket.emit(\r\n        'updateBoardAction',\r\n        { action: 'redo' },\r\n        this.handleServerResponse,\r\n      );\r\n    }\r\n  }\r\n\r\n  saveState() {\r\n    this.parameters.undoStack.push(JSON.stringify(this.parameters.shapes));\r\n    this.parameters.updateUndoStack(this.parameters.undoStack);\r\n  }\r\n\r\n  findShape(x: number, y: number) {\r\n    return this.parameters.shapes.find((shape: any) => {\r\n      if (shape.type === 'freehand') {\r\n        return shape.points.some((point: any) => {\r\n          const distance = Math.sqrt(Math.pow(point.x - x, 2) + Math.pow(point.y - y, 2));\r\n          return distance < shape.thickness;\r\n        });\r\n      } else if (shape.type === 'text') {\r\n        const ctx = this.canvasRef.nativeElement.getContext('2d');\r\n        ctx!.font = `${shape.fontSize}px ${shape.font}`;\r\n        const textMetrics = ctx!.measureText(shape.text);\r\n        return (\r\n          x > shape.x &&\r\n          x < shape.x + textMetrics.width &&\r\n          y > shape.y - shape.fontSize &&\r\n          y < shape.y\r\n        );\r\n      } else if (shape.type === 'image') {\r\n        return x > shape.x1 && x < shape.x2 && y > shape.y1 && y < shape.y2;\r\n      } else {\r\n        return x > shape.x1 && x < shape.x2 && y > shape.y1 && y < shape.y2;\r\n      }\r\n    });\r\n  }\r\n\r\n  drawSelection(shape: any) {\r\n    const ctx = this.canvasRef.nativeElement.getContext('2d');\r\n    if (!shape) return;\r\n\r\n    const handles = this.getResizeHandles(shape);\r\n    ctx!.strokeStyle = 'red';\r\n    ctx!.lineWidth = 2;\r\n    ctx!.setLineDash([6, 3]);\r\n    if (shape.type === 'line') {\r\n      ctx!.beginPath();\r\n      ctx!.moveTo(shape.x1, shape.y1);\r\n      ctx!.lineTo(shape.x2, shape.y2);\r\n      ctx!.stroke();\r\n    } else if (shape.type === 'circle') {\r\n      const radius = Math.sqrt(Math.pow(shape.x2 - shape.x1, 2) + Math.pow(shape.y2 - shape.y1, 2));\r\n      ctx!.beginPath();\r\n      ctx!.arc(shape.x1, shape.y1, radius, 0, 2 * Math.PI);\r\n      ctx!.stroke();\r\n    } else {\r\n      ctx!.strokeRect(shape.x1, shape.y1, shape.x2 - shape.x1, shape.y2 - shape.y1);\r\n    }\r\n\r\n    ctx!.setLineDash([]);\r\n\r\n    handles.forEach((handle) => {\r\n      ctx!.fillStyle = handle.isCenter ? 'blue' : 'red';\r\n      ctx!.fillRect(handle.x - 6, handle.y - 6, 12, 12);\r\n    });\r\n  }\r\n\r\n  getResizeHandles(shape: any) {\r\n    const handles = [];\r\n    if (shape.type === 'line') {\r\n      handles.push({ x: shape.x1, y: shape.y1 });\r\n      handles.push({ x: shape.x2, y: shape.y2 });\r\n    } else if (shape.type === 'circle') {\r\n      const radius = Math.sqrt(Math.pow(shape.x2 - shape.x1, 2) + Math.pow(shape.y2 - shape.y1, 2));\r\n      handles.push({ x: shape.x1 + radius, y: shape.y1 });\r\n      handles.push({ x: shape.x1 - radius, y: shape.y1 });\r\n      handles.push({ x: shape.x1, y: shape.y1 + radius });\r\n      handles.push({ x: shape.x1, y: shape.y1 - radius });\r\n      handles.push({ x: shape.x1, y: shape.y1, isCenter: true });\r\n    } else if (shape.type === 'text') {\r\n      const ctx = this.canvasRef.nativeElement.getContext('2d');\r\n      const textMetrics = ctx!.measureText(shape.text);\r\n      handles.push({ x: shape.x, y: shape.y - shape.fontSize, isCenter: true });\r\n      handles.push({ x: shape.x + textMetrics.width, y: shape.y, isCenter: false });\r\n    } else if (shape.type === 'image') {\r\n      handles.push({ x: shape.x1, y: shape.y1 });\r\n      handles.push({ x: shape.x2, y: shape.y1 });\r\n      handles.push({ x: shape.x2, y: shape.y2 });\r\n      handles.push({ x: shape.x1, y: shape.y2 });\r\n      handles.push({ x: (shape.x1 + shape.x2) / 2, y: (shape.y1 + shape.y2) / 2, isCenter: true });\r\n    } else {\r\n      handles.push({ x: shape.x1, y: shape.y1 });\r\n      handles.push({ x: shape.x2, y: shape.y1 });\r\n      handles.push({ x: shape.x2, y: shape.y2 });\r\n      handles.push({ x: shape.x1, y: shape.y2 });\r\n      handles.push({ x: (shape.x1 + shape.x2) / 2, y: (shape.y1 + shape.y2) / 2, isCenter: true });\r\n    }\r\n    return handles.map((handle) => ({\r\n      ...handle,\r\n      isCenter: handle.isCenter || false,\r\n    }));\r\n  }\r\n\r\n  getHandleAtPosition(x: number, y: number) {\r\n    if (!this.selectedShape) return null;\r\n    return this.getResizeHandles(this.selectedShape).find((handle) => {\r\n      return Math.abs(handle.x - x) < 6 && Math.abs(handle.y - y) < 6;\r\n    });\r\n  }\r\n\r\n  resizeShape(shape: any, handle: any, x: number, y: number) {\r\n    if (shape.type === 'line') {\r\n      if (handle.x === shape.x1 && handle.y === shape.y1) {\r\n        shape.x1 = x;\r\n        shape.y1 = y;\r\n      } else {\r\n        shape.x2 = x;\r\n        shape.y2 = y;\r\n      }\r\n    } else if (shape.type === 'circle') {\r\n      const dx = x - shape.x1;\r\n      const dy = y - shape.y1;\r\n      const radius = Math.sqrt(dx * dx + dy * dy);\r\n      shape.x2 = shape.x1 + radius;\r\n      shape.y2 = shape.y1;\r\n    } else if (shape.type === 'text') {\r\n      if (handle.isCenter) {\r\n        shape.x = x;\r\n        shape.y = y;\r\n      } else {\r\n        const textMetrics = this.canvasRef.nativeElement.getContext('2d')!.measureText(shape.text);\r\n        shape.x = x - textMetrics.width;\r\n        shape.y = y;\r\n      }\r\n    } else if (shape.type === 'image') {\r\n      if (handle.isCenter) {\r\n        const dx = x - (shape.x1 + shape.x2) / 2;\r\n        const dy = y - (shape.y1 + shape.y2) / 2;\r\n        this.moveShape(shape, dx, dy);\r\n      } else {\r\n        if (handle.x === shape.x1 && handle.y === shape.y1) {\r\n          shape.x1 = x;\r\n          shape.y1 = y;\r\n        } else if (handle.x === shape.x2 && handle.y === shape.y1) {\r\n          shape.x2 = x;\r\n          shape.y1 = y;\r\n        } else if (handle.x === shape.x2 && handle.y === shape.y2) {\r\n          shape.x2 = x;\r\n          shape.y2 = y;\r\n        } else {\r\n          shape.x1 = x;\r\n          shape.y2 = y;\r\n        }\r\n      }\r\n    } else {\r\n      if (handle.isCenter) {\r\n        const dx = x - (shape.x1 + shape.x2) / 2;\r\n        const dy = y - (shape.y1 + shape.y2) / 2;\r\n        this.moveShape(shape, dx, dy);\r\n      } else {\r\n        if (handle.x === shape.x1 && handle.y === shape.y1) {\r\n          shape.x1 = x;\r\n          shape.y1 = y;\r\n        } else if (handle.x === shape.x2 && handle.y === shape.y1) {\r\n          shape.x2 = x;\r\n          shape.y1 = y;\r\n        } else if (handle.x === shape.x2 && handle.y === shape.y2) {\r\n          shape.x2 = x;\r\n          shape.y2 = y;\r\n        } else {\r\n          shape.x1 = x;\r\n          shape.y2 = y;\r\n        }\r\n      }\r\n    }\r\n    this.drawShapes();\r\n  }\r\n\r\n  moveShape(shape: any, dx: number, dy: number) {\r\n    if (shape.type === 'line' || shape.type === 'circle') {\r\n      shape.x1 += dx;\r\n      shape.y1 += dy;\r\n      shape.x2 += dx;\r\n      shape.y2 += dy;\r\n    } else if (shape.type === 'freehand') {\r\n      shape.points.forEach((point: any) => {\r\n        point.x += dx;\r\n        point.y += dy;\r\n      });\r\n    } else if (shape.type === 'text') {\r\n      shape.x += dx;\r\n      shape.y += dy;\r\n    } else if (shape.type === 'image') {\r\n      shape.x1 += dx;\r\n      shape.y1 += dy;\r\n      shape.x2 += dx;\r\n      shape.y2 += dy;\r\n    } else {\r\n      shape.x1 += dx;\r\n      shape.y1 += dy;\r\n      shape.x2 += dx;\r\n      shape.y2 += dy;\r\n    }\r\n  }\r\n\r\n  downloadCanvas(tempCanvas: HTMLCanvasElement) {\r\n    const link = this.downloadLinkRef.nativeElement;\r\n    link.href = tempCanvas.toDataURL();\r\n    link.download = 'whiteboard.png';\r\n    link.click();\r\n  }\r\n\r\n  saveCanvas() {\r\n    const tempCanvas = this.tempCanvasRef.nativeElement;\r\n    const tempCtx = tempCanvas.getContext('2d');\r\n    tempCanvas.width = this.canvasRef.nativeElement.width;\r\n    tempCanvas.height = this.canvasRef.nativeElement.height;\r\n    const notShapes = ['freehand', 'text', 'image', 'line'];\r\n\r\n    if (this.parameters.useImageBackground) {\r\n      const backgroundImage = new Image();\r\n      backgroundImage.crossOrigin = 'anonymous';\r\n      backgroundImage.onload = () => {\r\n        tempCtx!.drawImage(backgroundImage, 0, 0, tempCanvas.width, tempCanvas.height);\r\n        this.parameters.shapes.forEach((shape: any) => {\r\n          !notShapes.includes(shape.type)\r\n            ? this.drawShape(\r\n                shape.type,\r\n                shape.x1,\r\n                shape.y1,\r\n                shape.x2,\r\n                shape.y2,\r\n                shape.color,\r\n                shape.thickness,\r\n                shape.lineType,\r\n                tempCtx!,\r\n              )\r\n            : this.drawShapeOnCanvas(shape, tempCtx!);\r\n        });\r\n        this.downloadCanvas(tempCanvas);\r\n      };\r\n      backgroundImage.src = 'https://mediasfu.com/images/svg/graph_paper.jpg';\r\n    } else {\r\n      tempCtx!.fillStyle = 'white';\r\n      tempCtx!.fillRect(0, 0, tempCanvas.width, tempCanvas.height);\r\n\r\n      this.parameters.shapes.forEach((shape: any) => {\r\n        !notShapes.includes(shape.type)\r\n          ? this.drawShape(\r\n              shape.type,\r\n              shape.x1,\r\n              shape.y1,\r\n              shape.x2,\r\n              shape.y2,\r\n              shape.color,\r\n              shape.thickness,\r\n              shape.lineType,\r\n              tempCtx!,\r\n            )\r\n          : this.drawShapeOnCanvas(shape, tempCtx!);\r\n      });\r\n      this.downloadCanvas(tempCanvas);\r\n    }\r\n  }\r\n\r\n  drawShapeOnCanvas(\r\n    shape: any,\r\n    ctx: CanvasRenderingContext2D = this.canvasRef.nativeElement.getContext('2d')!,\r\n  ) {\r\n    ctx.beginPath();\r\n    ctx.strokeStyle = shape.color;\r\n    ctx.lineWidth = shape.thickness || 2;\r\n    ctx.fillStyle = shape.color;\r\n    ctx.font = `${shape.fontSize}px ${shape.fontFamily}`;\r\n\r\n    const lineType = shape.lineType ? shape.lineType : 'solid';\r\n\r\n    if (lineType === 'dashed') {\r\n      ctx.setLineDash([10, 10]);\r\n    } else if (lineType === 'dotted') {\r\n      ctx.setLineDash([2, 10]);\r\n    } else if (lineType === 'dashDot') {\r\n      ctx.setLineDash([10, 5, 2, 5]);\r\n    } else {\r\n      ctx.setLineDash([]);\r\n    }\r\n    switch (shape.type) {\r\n      case 'line':\r\n        ctx.moveTo(shape.x1, shape.y1);\r\n        ctx.lineTo(shape.x2, shape.y2);\r\n        break;\r\n      case 'freehand':\r\n        try {\r\n          ctx.moveTo(shape.points[0].x, shape.points[0].y);\r\n          shape.points.forEach((point: any) => ctx.lineTo(point.x, point.y));\r\n        } catch {\r\n          //console.log('Error drawing freehand shape');\r\n        }\r\n        break;\r\n      case 'text':\r\n        ctx.fillText(shape.text, shape.x, shape.y);\r\n        break;\r\n      case 'image':\r\n        ctx.drawImage(shape.img, shape.x1, shape.y1, shape.x2 - shape.x1, shape.y2 - shape.y1);\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n    ctx.stroke();\r\n  }\r\n\r\n  deleteShape(doEmits = true) {\r\n    if (!this.checkBoardAccess()) return;\r\n\r\n    if (!this.selectedShape) return;\r\n    if (this.selectedShape) {\r\n      this.parameters.shapes = this.parameters.shapes.filter(\r\n        (shape: any) => shape !== this.selectedShape,\r\n      );\r\n      this.parameters.updateShapes(this.parameters.shapes);\r\n      this.selectedShape = null;\r\n      if (doEmits) {\r\n        this.parameters.socket.emit(\r\n          'updateBoardAction',\r\n          { action: 'shapes', payload: { shapes: this.parameters.shapes } },\r\n          this.handleServerResponse,\r\n        );\r\n      }\r\n      this.drawShapes();\r\n    }\r\n  }\r\n\r\n  toggleBackground = (doEmits = true) => {\r\n    if (doEmits && !this.checkBoardAccess()) return;\r\n    this.parameters.useImageBackground = !this.parameters.useImageBackground;\r\n    this.parameters.updateUseImageBackground(this.parameters.useImageBackground);\r\n    const toggleButton = this.toggleBackgroundRef.nativeElement;\r\n    if (this.parameters.useImageBackground) {\r\n      this.canvasRef.nativeElement.style.backgroundImage = `url('https://mediasfu.com/images/svg/graph_paper.jpg')`;\r\n      toggleButton.classList.remove('active');\r\n    } else {\r\n      this.canvasRef.nativeElement.style.backgroundImage = 'none';\r\n      this.canvasRef.nativeElement.style.backgroundColor = 'white';\r\n      toggleButton.classList.add('active');\r\n    }\r\n    this.drawShapes();\r\n    if (doEmits) {\r\n      this.parameters.socket.emit(\r\n        'updateBoardAction',\r\n        { action: 'toggleBackground', payload: this.parameters.useImageBackground },\r\n        this.handleServerResponse,\r\n      );\r\n    }\r\n  };\r\n\r\n  clearCanvas = (doEmits = true) => {\r\n    if (this.parameters.islevel != '2' && doEmits) {\r\n      this.parameters.showAlert?.({\r\n        message: 'You do not have permission to clear the board',\r\n        type: 'danger',\r\n      });\r\n      return;\r\n    }\r\n    if (this.parameters.shapes.length === 0) return;\r\n    this.parameters.shapes = [];\r\n    this.parameters.updateShapes([]);\r\n    this.drawShapes();\r\n    if (doEmits) {\r\n      this.parameters.socket.emit(\r\n        'updateBoardAction',\r\n        { action: 'clear' },\r\n        this.handleServerResponse,\r\n      );\r\n    }\r\n  };\r\n\r\n  uploadImage = (event: any, doEmits = true) => {\r\n    try {\r\n      if (!this.checkBoardAccess()) return;\r\n      const file = event.target.files[0];\r\n      if (file.size > 1024 * 1024) {\r\n        this.parameters.showAlert?.({ message: 'File size must be less than 1MB', type: 'danger' });\r\n        return;\r\n      }\r\n\r\n      const reader = new FileReader();\r\n      reader.onload = (event: any) => {\r\n        const img = new Image();\r\n        img.crossOrigin = 'anonymous';\r\n        img.onload = () => {\r\n          if (img.height > 600 && img.height > img.width && !file.type.includes('jpeg')) {\r\n            this.parameters.showAlert?.({\r\n              message: 'For better performance, please upload the image in JPG format.',\r\n              type: 'danger',\r\n            });\r\n            return;\r\n          }\r\n\r\n          let imageWidth = 350;\r\n          const aspectRatio = img.height / img.width;\r\n          let imageHeight = imageWidth * aspectRatio;\r\n          const maxHeight = 600;\r\n          if (imageHeight > maxHeight) {\r\n            imageHeight = maxHeight;\r\n            imageWidth = imageHeight / aspectRatio;\r\n            if (imageWidth > 600) {\r\n              imageWidth = 600;\r\n            }\r\n          }\r\n          const imageShape = {\r\n            type: 'image',\r\n            img: img,\r\n            src: event.target.result,\r\n            x1: 50,\r\n            y1: 50,\r\n            x2: 50 + imageWidth,\r\n            y2: 50 + imageHeight,\r\n          };\r\n          this.parameters.shapes.push(imageShape);\r\n          this.parameters.updateShapes(this.parameters.shapes);\r\n          this.drawShapes();\r\n          if (doEmits) {\r\n            this.parameters.socket.emit(\r\n              'updateBoardAction',\r\n              { action: 'uploadImage', payload: imageShape },\r\n              this.handleServerResponse,\r\n            );\r\n          }\r\n        };\r\n        img.onerror = () => {\r\n          this.parameters.showAlert?.({ message: 'Error loading image', type: 'danger' });\r\n        };\r\n        img.src = event.target.result;\r\n      };\r\n      reader.onerror = () => {\r\n        this.parameters.showAlert?.({ message: 'Error reading file', type: 'danger' });\r\n      };\r\n      reader.readAsDataURL(file);\r\n    } catch (error) {\r\n      //console.log(error);\r\n    }\r\n  };\r\n\r\n  handleServerResponse = (response: any) => {\r\n    if (!response.success) {\r\n      this.parameters.showAlert?.({\r\n        message: `Whiteboard action failed: ${response.reason}`,\r\n        type: 'danger',\r\n      });\r\n    }\r\n  };\r\n\r\n  WhiteboardAction = (data: any) => {\r\n    const { action, payload } = data;\r\n\r\n    const ctx = this.canvasRef.nativeElement.getContext('2d');\r\n    if (!ctx) return;\r\n    this.parameters.updateCanvasWhiteboard(this.canvasRef.nativeElement);\r\n\r\n    switch (action) {\r\n      case 'draw':\r\n        if (payload.type === 'freehand') {\r\n          this.drawFreehand(payload.points, payload.color, payload.thickness);\r\n          this.parameters.shapes.push({\r\n            type: 'freehand',\r\n            points: payload.points,\r\n            color: payload.color,\r\n            thickness: payload.thickness,\r\n          });\r\n          this.parameters.updateShapes(this.parameters.shapes);\r\n        } else {\r\n          this.drawLine(\r\n            payload.x1,\r\n            payload.y1,\r\n            payload.x2,\r\n            payload.y2,\r\n            payload.color,\r\n            payload.thickness,\r\n            payload.lineType,\r\n          );\r\n          this.parameters.shapes.push({\r\n            type: 'line',\r\n            x1: payload.x1,\r\n            y1: payload.y1,\r\n            x2: payload.x2,\r\n            y2: payload.y2,\r\n            color: payload.color,\r\n            thickness: payload.thickness,\r\n            lineType: payload.lineType,\r\n          });\r\n          this.parameters.updateShapes(this.parameters.shapes);\r\n        }\r\n        break;\r\n      case 'shape':\r\n        this.drawShape(\r\n          payload.type,\r\n          payload.x1,\r\n          payload.y1,\r\n          payload.x2,\r\n          payload.y2,\r\n          payload.color,\r\n          payload.thickness,\r\n          payload.lineType,\r\n        );\r\n        this.parameters.shapes.push({\r\n          type: payload.type,\r\n          x1: payload.x1,\r\n          y1: payload.y1,\r\n          x2: payload.x2,\r\n          y2: payload.y2,\r\n          color: payload.color,\r\n          thickness: payload.thickness,\r\n          lineType: payload.lineType,\r\n        });\r\n        this.parameters.updateShapes(this.parameters.shapes);\r\n        break;\r\n      case 'erase':\r\n        this.erase(payload.x, payload.y);\r\n        break;\r\n      case 'clear':\r\n        this.clearCanvas(false);\r\n        break;\r\n      case 'uploadImage': {\r\n        const img = new Image();\r\n        img.crossOrigin = 'anonymous';\r\n        img.onload = () => {\r\n          const imageShape = {\r\n            type: 'image',\r\n            img,\r\n            src: payload.src,\r\n            x1: payload.x1,\r\n            y1: payload.y1,\r\n            x2: payload.x2,\r\n            y2: payload.y2,\r\n          };\r\n          this.parameters.shapes.push(imageShape);\r\n          this.parameters.updateShapes(this.parameters.shapes);\r\n          this.drawShapes();\r\n        };\r\n        img.src = payload.src;\r\n        break;\r\n      }\r\n      case 'toggleBackground':\r\n        this.toggleBackground(false);\r\n        this.drawShapes();\r\n        break;\r\n      case 'undo':\r\n        if (this.parameters.shapes.length > 0) {\r\n          this.parameters.redoStack.push(this.parameters.shapes.pop()!);\r\n          this.parameters.updateRedoStack(this.parameters.redoStack);\r\n          this.drawShapes();\r\n        }\r\n        break;\r\n      case 'redo':\r\n        if (this.parameters.redoStack.length > 0) {\r\n          this.parameters.shapes.push(this.parameters.redoStack.pop()!);\r\n          this.parameters.updateShapes(this.parameters.shapes);\r\n          this.drawShapes();\r\n        }\r\n        break;\r\n      case 'text':\r\n        this.parameters.shapes.push({\r\n          type: 'text',\r\n          text: payload.text,\r\n          x: payload.x,\r\n          y: payload.y,\r\n          color: payload.color,\r\n          font: payload.font,\r\n          fontSize: payload.fontSize,\r\n        });\r\n        this.parameters.updateShapes(this.parameters.shapes);\r\n        this.drawShapes();\r\n        break;\r\n      case 'deleteShape':\r\n        this.parameters.shapes = this.parameters.shapes.filter((shape: any) => shape !== payload);\r\n        this.parameters.updateShapes(this.parameters.shapes);\r\n        this.drawShapes();\r\n        break;\r\n      case 'shapes': {\r\n        const oldShapes = this.parameters.shapes.filter((shape: any) => shape.type === 'image');\r\n        this.parameters.shapes = payload.shapes.map((shape: any) => {\r\n          if (shape.type === 'image') {\r\n            const oldShape = oldShapes.find((oldShape: any) => oldShape.src === shape.src);\r\n            if (oldShape) {\r\n              return { ...shape, img: oldShape.img };\r\n            } else {\r\n              const img = new Image();\r\n              img.crossOrigin = 'anonymous';\r\n              img.src = shape.src;\r\n              return { ...shape, img };\r\n            }\r\n          } else {\r\n            return shape;\r\n          }\r\n        });\r\n        this.parameters.updateShapes(this.parameters.shapes);\r\n        this.drawShapes();\r\n        break;\r\n      }\r\n      default:\r\n        break;\r\n    }\r\n  };\r\n\r\n  WhiteboardUpdated = (data: any) => {\r\n    // data = { whiteboardUsers, status}\r\n    // status = 'started', 'ended', 'updated'\r\n    // whiteboardUsers array\r\n    // members (participants) array only sent to the host\r\n    //whiteboardData = {shapes=[], useImageBackground=Boolean, redoStack=[], undoStack=[]} or {} or null\r\n    const ctx = this.canvasRef.nativeElement.getContext('2d');\r\n    if (!ctx) return;\r\n\r\n    if (this.parameters.islevel == '2' && data.members) {\r\n      this.parameters.participantsAll = data.members.map((participant: any) => ({\r\n        isBanned: participant.isBanned,\r\n        name: participant.name,\r\n      }));\r\n      this.parameters.participants = data.members.filter(\r\n        (participant: any) => participant.isBanned == false,\r\n      );\r\n      this.parameters.updateParticipants(this.parameters.participants);\r\n    }\r\n\r\n    this.parameters.whiteboardUsers = data.whiteboardUsers;\r\n    this.parameters.updateWhiteboardUsers(this.parameters.whiteboardUsers);\r\n\r\n    const useBoard = this.parameters.whiteboardUsers.find(\r\n      (user: any) => user.name == this.parameters.member && user.useBoard,\r\n    )\r\n      ? true\r\n      : false;\r\n    if (this.parameters.islevel != '2' && !useBoard && !this.parameters.whiteboardEnded) {\r\n      this.changeMode('pan');\r\n    }\r\n\r\n    if (data.whiteboardData && Object.keys(data.whiteboardData).length > 0) {\r\n      if (data.whiteboardData.shapes) {\r\n        const oldShapes = this.parameters.shapes.filter((shape: any) => shape.type === 'image');\r\n        this.parameters.shapes = data.whiteboardData.shapes.map((shape: any) => {\r\n          if (shape.type === 'image') {\r\n            const oldShape = oldShapes.find((oldShape: any) => oldShape.src === shape.src);\r\n            if (oldShape) {\r\n              return { ...shape, img: oldShape.img };\r\n            } else {\r\n              const img = new Image();\r\n              img.crossOrigin = 'anonymous';\r\n              img.src = shape.src;\r\n              return { ...shape, img };\r\n            }\r\n          } else {\r\n            return shape;\r\n          }\r\n        });\r\n        this.parameters.updateShapes(this.parameters.shapes);\r\n      }\r\n      if (data.whiteboardData.useImageBackground != null) {\r\n        this.parameters.useImageBackground = data.whiteboardData.useImageBackground;\r\n        this.parameters.updateUseImageBackground(this.parameters.useImageBackground);\r\n      } else {\r\n        this.parameters.useImageBackground = true;\r\n        this.parameters.updateUseImageBackground(true);\r\n      }\r\n      if (data.whiteboardData.redoStack) {\r\n        this.parameters.redoStack = data.whiteboardData.redoStack;\r\n        this.parameters.updateRedoStack(this.parameters.redoStack);\r\n      }\r\n      if (data.whiteboardData.undoStack) {\r\n        this.parameters.undoStack = data.whiteboardData.undoStack;\r\n        this.parameters.updateUndoStack(this.parameters.undoStack);\r\n      }\r\n    }\r\n\r\n    if (data.status == 'started' && !this.parameters.whiteboardStarted) {\r\n      this.parameters.whiteboardStarted = true;\r\n      this.parameters.whiteboardEnded = false;\r\n      this.parameters.screenId = `whiteboard-${this.parameters.roomName}`;\r\n\r\n      this.parameters.updateWhiteboardStarted(true);\r\n      this.parameters.updateWhiteboardEnded(false);\r\n      this.parameters.updateScreenId(this.parameters.screenId);\r\n\r\n      if (this.parameters.islevel != '2') {\r\n        this.parameters.shareScreenStarted = true;\r\n        this.parameters.updateShareScreenStarted(true);\r\n        this.parameters.onScreenChanges({ changed: true, parameters: this.parameters });\r\n      }\r\n    } else if (data.status == 'ended') {\r\n      const prevWhiteboardEnded = this.parameters.whiteboardEnded;\r\n      const prevWhiteboardStarted = this.parameters.whiteboardStarted;\r\n      this.parameters.whiteboardEnded = true;\r\n      this.parameters.whiteboardStarted = false;\r\n      this.parameters.updateWhiteboardStarted(false);\r\n      this.parameters.updateWhiteboardEnded(true);\r\n      if (this.parameters.islevel == '2' && prevWhiteboardEnded) {\r\n        // No operation needed\r\n      } else {\r\n        this.parameters.shareScreenStarted = false;\r\n        this.parameters.screenId = '';\r\n\r\n        this.parameters.updateShareScreenStarted(false);\r\n        this.parameters.updateScreenId('');\r\n        this.parameters.onScreenChanges({ changed: true, parameters: this.parameters });\r\n      }\r\n\r\n      try {\r\n        if (\r\n          prevWhiteboardStarted &&\r\n          this.parameters.islevel == '2' &&\r\n          (this.parameters.recordStarted || this.parameters.recordResumed)\r\n        ) {\r\n          if (!(this.parameters.recordPaused || this.parameters.recordStopped)) {\r\n            if (this.parameters.recordingMediaOptions == 'video') {\r\n              this.parameters.captureCanvasStream({ parameters: this.parameters, start: false });\r\n            }\r\n          }\r\n        }\r\n      } catch (error) {\r\n        // Handle error\r\n      }\r\n    } else if (data.status == 'started' && this.parameters.whiteboardStarted) {\r\n      this.parameters.whiteboardStarted = true;\r\n      this.parameters.whiteboardEnded = false;\r\n\r\n      this.parameters.updateWhiteboardStarted(true);\r\n      this.parameters.updateWhiteboardEnded(false);\r\n\r\n      this.parameters.shareScreenStarted = true;\r\n      this.parameters.screenId = `whiteboard-${this.parameters.roomName}`;\r\n\r\n      this.parameters.updateShareScreenStarted(true);\r\n      this.parameters.updateScreenId(this.parameters.screenId);\r\n      this.parameters.onScreenChanges({ changed: true, parameters: this.parameters });\r\n    }\r\n  };\r\n\r\n  handleDropdownClick(id: string) {\r\n    this.dropdownOpen = this.dropdownOpen === id ? null : id;\r\n  }\r\n\r\n  handleItemClick(callback: any, name: string, value: any) {\r\n    callback(value);\r\n    this.dropdownOpen = null;\r\n    if (['draw', 'freehand', 'shape', 'text', 'erase'].includes(name)) {\r\n      this.changeMode(name);\r\n    }\r\n  }\r\n\r\n  dropdownItems(items: any[], name: string, callback: any) {\r\n    return items.map(\r\n      (item, index) =>\r\n        `<button key=\"${index}\" class=\"dropdown-item\" (click)=\"handleItemClick(${callback}, '${name}', ${item.value})\" style=\"padding: 5px;\">\r\n        ${item.label}\r\n      </button>`,\r\n    );\r\n  }\r\n\r\n  toggleToolbar() {\r\n    this.toolbarVisible = !this.toolbarVisible;\r\n  }\r\n\r\n  checkBoardAccess() {\r\n    this.parameters = this.parameters.getUpdatedAllParams();\r\n    if (this.parameters.whiteboardStarted && !this.parameters.whiteboardEnded) {\r\n      const user = this.parameters.whiteboardUsers.find(\r\n        (user: any) => user.name === this.parameters.member,\r\n      );\r\n      if ((!user || !user.useBoard) && this.parameters.islevel != '2') {\r\n        this.parameters.showAlert?.({\r\n          message: 'You are not allowed to use the whiteboard. Please ask the host to assign you.',\r\n          type: 'danger',\r\n        });\r\n        return false;\r\n      } else {\r\n        return true;\r\n      }\r\n    } else {\r\n      return true;\r\n    }\r\n  }\r\n\r\n  changeMode(newMode: string) {\r\n    if (newMode !== 'pan' && !this.checkBoardAccess()) return;\r\n    this.mode = newMode;\r\n    const canvas = this.canvasRef.nativeElement;\r\n    if (newMode === 'pan') {\r\n      canvas.style.cursor = 'grab';\r\n    } else if (newMode === 'select') {\r\n      canvas.style.cursor = 'pointer';\r\n    } else if (newMode === 'erase') {\r\n      canvas.style.cursor = 'crosshair';\r\n    } else {\r\n      canvas.style.cursor = 'crosshair';\r\n    }\r\n    if (newMode !== 'freehand' && this.freehandDrawing.length > 0) {\r\n      this.parameters.shapes.push({\r\n        type: 'freehand',\r\n        points: this.freehandDrawing,\r\n        color: this.color,\r\n        thickness: this.brushThickness,\r\n      });\r\n      this.parameters.updateShapes(this.parameters.shapes);\r\n      this.freehandDrawing = [];\r\n      this.saveState();\r\n    }\r\n  }\r\n}\r\n","<div id=\"whiteboard-interface\" [style.width.px]=\"customWidth\" [style.height.px]=\"customHeight\" [style.display]=\"showAspect ? 'block' : 'none'\" style=\"position: relative; display: flex; justify-content: center; align-items: center; border: 2px solid #000; background-color: #f0f0f0;\">\r\n  <div id=\"whiteboardContent\" style=\"position: relative; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; max-width: 100%; max-height: 100%; overflow: auto;\">\r\n    <button id=\"toolbarToggle\" class=\"btn btnBoard btn-primary\" style=\"position: absolute; top: 5px; left: 55px; z-index: 10;\" (click)=\"toggleToolbar()\">\r\n      <fa-icon [icon]=\"toolbarVisible ? faChevronLeft : faChevronRight\"></fa-icon>\r\n    </button>\r\n    <div *ngIf=\"toolbarVisible\" class=\"toolbar mb-3\" id=\"toolbar\" style=\"position: absolute; top: 5px; left: 100px; z-index: 10; background-color: transparent;\">\r\n      <div class=\"btn-group\" role=\"group\">\r\n        <button class=\"btn btnBoard btn-secondary dropdown-toggle\" id=\"drawMode\" (click)=\"handleDropdownClick('drawMode')\">\r\n          <fa-icon [icon]=\"faPencilAlt\"></fa-icon>\r\n        </button>\r\n        <div *ngIf=\"dropdownOpen === 'drawMode'\" class=\"dropdown-menu show\">\r\n          <button *ngFor=\"let item of [{ label: 'XX-Small (3px)', value: 3 }, { label: 'X-Small (6px)', value: 6 }, { label: 'Small (12px)', value: 12 }, { label: 'Medium (18px)', value: 18 }, { label: 'Large (24px)', value: 24 }, { label: 'X-Large (36px)', value: 36 }]\" class=\"dropdown-item\" (click)=\"handleItemClick(updateLineThickness, 'draw', item.value)\" style=\"padding: 5px;\">\r\n            {{ item.label }}\r\n          </button>\r\n        </div>\r\n      </div>\r\n      <div class=\"btn-group\" role=\"group\">\r\n        <button class=\"btn btnBoard btn-secondary dropdown-toggle\" id=\"freehandMode\" (click)=\"handleDropdownClick('freehandMode')\">\r\n          <fa-icon [icon]=\"faPaintBrush\"></fa-icon>\r\n        </button>\r\n        <div *ngIf=\"dropdownOpen === 'freehandMode'\" class=\"dropdown-menu show\">\r\n          <button *ngFor=\"let item of [{ label: 'X-Small (5px)', value: 5 }, { label: 'Small (10px)', value: 10 }, { label: 'Medium (20px)', value: 20 }, { label: 'Large (40px)', value: 40 }, { label: 'X-Large (60px)', value: 60 }]\" class=\"dropdown-item\" (click)=\"handleItemClick(updateBrushThickness, 'freehand', item.value)\" style=\"padding: 5px;\">\r\n            {{ item.label }}\r\n          </button>\r\n        </div>\r\n      </div>\r\n      <div class=\"btn-group\" role=\"group\">\r\n        <button class=\"btn btnBoard btn-secondary dropdown-toggle\" id=\"shapeMode\" (click)=\"handleDropdownClick('shapeMode')\">\r\n          <fa-icon [icon]=\"faShapes\"></fa-icon>\r\n        </button>\r\n        <div *ngIf=\"dropdownOpen === 'shapeMode'\" class=\"dropdown-menu show\">\r\n          <button *ngFor=\"let item of [\r\n            { label: '<img src=\\'https://mediasfu.com/images/svg/square.svg\\' alt=\\'Square\\' class=\\'shape-icon\\' />', value: 'square' },\r\n            { label: '<img src=\\'https://mediasfu.com/images/svg/rectangle.svg\\' alt=\\'Rectangle\\' class=\\'shape-icon\\' />', value: 'rectangle' },\r\n            { label: '<img src=\\'https://mediasfu.com/images/svg/circle.svg\\' alt=\\'Circle\\' class=\\'shape-icon\\' />', value: 'circle' },\r\n            { label: '<img src=\\'https://mediasfu.com/images/svg/triangle.svg\\' alt=\\'Triangle\\' class=\\'shape-icon\\' />', value: 'triangle' },\r\n            { label: '<img src=\\'https://mediasfu.com/images/svg/hexagon.svg\\' alt=\\'Hexagon\\' class=\\'shape-icon\\' />', value: 'hexagon' },\r\n            { label: '<img src=\\'https://mediasfu.com/images/svg/pentagon.svg\\' alt=\\'Pentagon\\' class=\\'shape-icon\\' />', value: 'pentagon' },\r\n            { label: '<img src=\\'https://mediasfu.com/images/svg/rhombus.svg\\' alt=\\'Rhombus\\' class=\\'shape-icon\\' />', value: 'rhombus' },\r\n            { label: '<img src=\\'https://mediasfu.com/images/svg/octagon.svg\\' alt=\\'Octagon\\' class=\\'shape-icon\\' />', value: 'octagon' },\r\n            { label: '<img src=\\'https://mediasfu.com/images/svg/parallelogram.svg\\' alt=\\'Parallelogram\\' class=\\'shape-icon\\' />', value: 'parallelogram' },\r\n            { label: '<img src=\\'https://mediasfu.com/images/svg/oval.svg\\' alt=\\'Oval\\' class=\\'shape-icon\\' />', value: 'oval' }\r\n          ]\" class=\"dropdown-item\" (click)=\"handleItemClick(updateShape, 'shape', item.value)\" style=\"padding: 5px;\" [innerHTML]=\"item.label\">\r\n          </button>\r\n        </div>\r\n      </div>\r\n      <button class=\"btn btnBoard btn-secondary\" id=\"selectMode\" (click)=\"changeMode('select')\">\r\n        <fa-icon [icon]=\"faMousePointer\"></fa-icon>\r\n      </button>\r\n      <div class=\"btn-group\" role=\"group\">\r\n        <button class=\"btn btnBoard btn-danger dropdown-toggle\" id=\"eraseMode\" (click)=\"handleDropdownClick('eraseMode')\">\r\n          <fa-icon [icon]=\"faEraser\"></fa-icon>\r\n        </button>\r\n        <div *ngIf=\"dropdownOpen === 'eraseMode'\" class=\"dropdown-menu show\">\r\n          <button *ngFor=\"let item of [{ label: 'X-Small (5px)', value: 5 }, { label: 'Small (10px)', value: 10 }, { label: 'Medium (20px)', value: 20 }, { label: 'Large (30px)', value: 30 }, { label: 'X-Large (60px)', value: 60 }]\" class=\"dropdown-item\" (click)=\"handleItemClick(updateEraserThickness, 'erase', item.value)\" style=\"padding: 5px;\">\r\n            {{ item.label }}\r\n          </button>\r\n        </div>\r\n      </div>\r\n      <button class=\"btn btnBoard btn-info\" id=\"panMode\" (click)=\"changeMode('pan')\">\r\n        <fa-icon [icon]=\"faHandPaper\"></fa-icon>\r\n      </button>\r\n      <button class=\"btn btnBoard btn-success\" id=\"zoomIn\" (click)=\"zoomCanvas(1.2, $event)\">\r\n        <fa-icon [icon]=\"faSearchPlus\"></fa-icon>\r\n      </button>\r\n      <button class=\"btn btnBoard btn-success\" id=\"zoomReset\" (click)=\"zoomCanvas(10, $event)\">\r\n        <fa-icon [icon]=\"faSearch\"></fa-icon>\r\n      </button>\r\n      <button class=\"btn btnBoard btn-success\" id=\"zoomOut\" (click)=\"zoomCanvas(0.8, $event)\">\r\n        <fa-icon [icon]=\"faSearchMinus\"></fa-icon>\r\n      </button>\r\n      <div class=\"btn-group\" role=\"group\">\r\n        <button class=\"btn btnBoard btn-secondary dropdown-toggle\" id=\"addText\" (click)=\"handleDropdownClick('addText')\">\r\n          <fa-icon [icon]=\"faFont\"></fa-icon>\r\n        </button>\r\n        <div *ngIf=\"dropdownOpen === 'addText'\" class=\"dropdown-menu show\">\r\n          <button *ngFor=\"let item of [{ label: 'Arial', value: 'Arial' }, { label: 'Times New Roman', value: 'Times New Roman' }, { label: 'Courier New', value: 'Courier New' }, { label: 'Verdana', value: 'Verdana' }]\" class=\"dropdown-item\" (click)=\"handleItemClick(updateFont, 'text', item.value)\" style=\"padding: 5px;\">\r\n            {{ item.label }}\r\n          </button>\r\n        </div>\r\n      </div>\r\n      <div class=\"btn-group\" role=\"group\">\r\n        <button class=\"btn btnBoard btn-secondary dropdown-toggle\" id=\"fontSize\" (click)=\"handleDropdownClick('fontSize')\">\r\n          <fa-icon [icon]=\"faTextHeight\"></fa-icon>\r\n        </button>\r\n        <div *ngIf=\"dropdownOpen === 'fontSize'\" class=\"dropdown-menu show\">\r\n          <button *ngFor=\"let item of [{ label: 'X-Small (5px)', value: 5 }, { label: 'Small (10px)', value: 10 }, { label: 'Medium (20px)', value: 20 }, { label: 'Large (40px)', value: 40 }, { label: 'X-Large (60px)', value: 60 }]\" class=\"dropdown-item\" (click)=\"handleItemClick(updateFontSize, '', item.value)\" style=\"padding: 5px;\">\r\n            {{ item.label }}\r\n          </button>\r\n        </div>\r\n      </div>\r\n      <button class=\"btn btnBoard btn-secondary\" id=\"undo\" (click)=\"undo()\">\r\n        <fa-icon [icon]=\"faUndo\"></fa-icon>\r\n      </button>\r\n      <button class=\"btn btnBoard btn-secondary\" id=\"redo\" (click)=\"redo()\">\r\n        <fa-icon [icon]=\"faRedo\"></fa-icon>\r\n      </button>\r\n      <button class=\"btn btnBoard btn-secondary\" id=\"save\" (click)=\"saveCanvas()\">\r\n        <fa-icon [icon]=\"faSave\"></fa-icon>\r\n      </button>\r\n      <button class=\"btn btnBoard btn-danger\" id=\"delete\" (click)=\"deleteShape()\">\r\n        <fa-icon [icon]=\"faTrash\"></fa-icon>\r\n      </button>\r\n      <button class=\"btn btnBoard btn-secondary\" id=\"clearCanvas\" (click)=\"clearCanvas()\">\r\n        <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n      </button>\r\n      <button id=\"toggleBackgroundRef\" #toggleBackgroundRef class=\"btn btnBoard btn-secondary\" (click)=\"toggleBackground()\">\r\n        <img src=\"https://mediasfu.com/images/svg/graph.jpg\" alt=\"Background\" class=\"toggle-icon\" id=\"backgroundIcon\" />\r\n      </button>\r\n      <input type=\"file\" id=\"uploadBoardImage\" accept=\"image/*\" style=\"display: none;\" (change)=\"uploadImage($event)\" />\r\n      <label for=\"uploadBoardImage\" class=\"btn btnBoard btn-primary\">\r\n        <fa-icon [icon]=\"faUpload\"></fa-icon>\r\n      </label>\r\n      <input type=\"color\" id=\"colorPicker\" class=\"btn\" [(ngModel)]=\"color\" />\r\n      <select id=\"lineTypePicker\" class=\"custom-select\" style=\"width: auto;\" [(ngModel)]=\"lineType\">\r\n        <option value=\"solid\">Solid</option>\r\n        <option value=\"dashed\">Dashed</option>\r\n        <option value=\"dotted\">Dotted</option>\r\n        <option value=\"dashDot\">Dash-Dot</option>\r\n      </select>\r\n    </div>\r\n    <canvas id=\"canvasRef\" width=\"1280\" height=\"720\" style=\"border: 2px solid red;\" #canvasRef></canvas>\r\n    <textarea id=\"textInputRef\" class=\"form-control\" #textInputRef style=\"display: none; position: absolute;\"></textarea>\r\n    <a href=\"#\" id=\"downloadLinkRef\" #downloadLinkRef style=\"display: none;\">Download</a>\r\n    <canvas id=\"tempCanvasRef\" #tempCanvasRef style=\"display: none;\"></canvas>\r\n  </div>\r\n</div>\r\n","// types.ts\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  Consumer,\r\n  DtlsParameters,\r\n  IceCandidate,\r\n  IceParameters,\r\n  RtpCapabilities,\r\n} from 'mediasoup-client/lib/types';\r\nimport { IconDefinition } from '@fortawesome/free-solid-svg-icons';\r\nimport { CustomComponent } from '../components/display-components/control-buttons-component/control-buttons-component.component';\r\nimport { CustomButton } from '../components/menu-components/custom-buttons/custom-buttons.component';\r\nimport { ComponentType } from '@angular/cdk/portal';\r\n\r\n// //consumers/socket-receive-methods\r\nexport * from '../consumers/socket-receive-methods/join-consume-room.service';\r\nexport * from '../consumers/socket-receive-methods/producer-closed.service';\r\nexport * from '../consumers/socket-receive-methods/new-pipe-producer.service';\r\n\r\n// Consumers\r\nexport * from '../consumers/add-videos-grid.service';\r\nexport * from '../consumers/auto-adjust.service';\r\nexport * from '../consumers/calculate-rows-and-columns.service';\r\nexport * from '../consumers/change-vids.service';\r\nexport * from '../consumers/check-grid.service';\r\nexport * from '../consumers/check-permission.service';\r\nexport * from '../consumers/check-screen-share.service';\r\nexport * from '../consumers/close-and-resize.service';\r\nexport * from '../consumers/compare-active-names.service';\r\nexport * from '../consumers/compare-screen-states.service';\r\nexport * from '../consumers/connect-ips.service';\r\nexport * from '../consumers/connect-local-ips.service';\r\nexport * from '../consumers/connect-recv-transport.service';\r\nexport * from '../consumers/connect-send-transport.service';\r\nexport * from '../consumers/connect-send-transport-audio.service';\r\nexport * from '../consumers/connect-send-transport-screen.service';\r\nexport * from '../consumers/connect-send-transport-video.service';\r\nexport * from '../consumers/consumer-resume.service';\r\nexport * from '../consumers/control-media.service';\r\nexport * from '../consumers/create-send-transport.service';\r\nexport * from '../consumers/disconnect-send-transport-audio.service';\r\nexport * from '../consumers/disconnect-send-transport-video.service';\r\nexport * from '../consumers/disconnect-send-transport-screen.service';\r\nexport * from '../consumers/disp-streams.service';\r\nexport * from '../consumers/generate-page-content.service';\r\nexport * from '../consumers/get-estimate.service';\r\nexport * from '../consumers/get-piped-producers-alt.service';\r\nexport * from '../consumers/get-producers-piped.service';\r\nexport * from '../consumers/get-videos.service';\r\nexport * from '../consumers/mix-streams.service';\r\nexport * from '../consumers/on-screen-changes.service';\r\nexport * from '../consumers/prepopulate-user-media.service';\r\nexport * from '../consumers/process-consumer-transports.service';\r\nexport * from '../consumers/process-consumer-transports-audio.service';\r\nexport * from '../consumers/readjust.service';\r\nexport * from '../consumers/receive-all-piped-transports.service';\r\nexport * from '../consumers/reorder-streams.service';\r\nexport * from '../consumers/re-port.service';\r\nexport * from '../consumers/request-screen-share.service';\r\nexport * from '../consumers/resume-pause-audio-streams.service';\r\nexport * from '../consumers/resume-pause-streams.service';\r\nexport * from '../consumers/resume-send-transport-audio.service';\r\nexport * from '../consumers/re-update-inter.service';\r\nexport * from '../consumers/signal-new-consumer-transport.service';\r\nexport * from '../consumers/start-share-screen.service';\r\nexport * from '../consumers/stop-share-screen.service';\r\nexport * from '../consumers/stream-success-audio.service';\r\nexport * from '../consumers/stream-success-audio-switch.service';\r\nexport * from '../consumers/stream-success-screen.service';\r\nexport * from '../consumers/stream-success-video.service';\r\nexport * from '../consumers/switch-user-audio.service';\r\nexport * from '../consumers/switch-user-video.service';\r\nexport * from '../consumers/switch-user-video-alt.service';\r\nexport * from '../consumers/trigger.service';\r\nexport * from '../consumers/update-mini-cards-grid.service';\r\nexport * from '../consumers/update-participant-audio-decibels.service';\r\n\r\n// Utils\r\nexport * from '../methods/utils/producer/a-params.service';\r\nexport * from '../methods/utils/producer/h-params.service';\r\nexport * from '../methods/utils/producer/screen-params.service';\r\nexport * from '../methods/utils/producer/v-params.service';\r\nexport * from '../methods/background-methods/launch-background.service';\r\nexport * from '../methods/breakout-room-methods/launch-breakout-rooms.service';\r\nexport * from '../methods/breakout-room-methods/breakout-room-updated.service';\r\nexport * from '../methods/co-host-methods/launch-co-host.service';\r\nexport * from '../methods/co-host-methods/modify-co-host-settings.service';\r\nexport * from '../methods/display-settings-methods/launch-display-settings.service';\r\nexport * from '../methods/display-settings-methods/modify-display-settings.service';\r\nexport * from '../methods/exit-methods/launch-confirm-exit.service';\r\nexport * from '../methods/exit-methods/confirm-exit.service';\r\nexport * from '../methods/media-settings-methods/launch-media-settings.service';\r\nexport * from '../methods/menu-methods/launch-menu-modal.service';\r\nexport * from '../methods/message-methods/launch-messages.service';\r\nexport * from '../methods/message-methods/send-message.service';\r\nexport * from '../methods/participants-methods/launch-participants.service';\r\nexport * from '../methods/participants-methods/message-participants.service';\r\nexport * from '../methods/participants-methods/mute-participants.service';\r\nexport * from '../methods/participants-methods/remove-participants.service';\r\nexport * from '../methods/polls-methods/handle-create-poll.service';\r\nexport * from '../methods/polls-methods/handle-end-poll.service';\r\nexport * from '../methods/polls-methods/handle-vote-poll.service';\r\nexport * from '../methods/polls-methods/launch-poll.service';\r\nexport * from '../methods/polls-methods/poll-updated.service';\r\nexport * from '../methods/recording-methods/check-pause-state.service';\r\nexport * from '../methods/recording-methods/check-resume-state.service';\r\nexport * from '../methods/recording-methods/confirm-recording.service';\r\nexport * from '../methods/recording-methods/launch-recording.service';\r\nexport * from '../methods/recording-methods/record-pause-timer.service';\r\nexport * from '../methods/recording-methods/record-resume-timer.service';\r\nexport * from '../methods/recording-methods/record-start-timer.service';\r\nexport * from '../methods/recording-methods/record-update-timer.service';\r\nexport * from '../methods/recording-methods/start-recording.service';\r\nexport * from '../methods/recording-methods/stop-recording.service';\r\nexport * from '../methods/recording-methods/update-recording.service';\r\nexport * from '../methods/requests-methods/launch-requests.service';\r\nexport * from '../methods/requests-methods/respond-to-requests.service';\r\nexport * from '../methods/settings-methods/launch-settings.service';\r\nexport * from '../methods/settings-methods/modify-settings.service';\r\nexport * from '../methods/stream-methods/click-audio.service';\r\nexport * from '../methods/stream-methods/click-chat.service';\r\nexport * from '../methods/stream-methods/click-screen-share.service';\r\nexport * from '../methods/stream-methods/click-video.service';\r\nexport * from '../methods/stream-methods/switch-audio.service';\r\nexport * from '../methods/stream-methods/switch-video.service';\r\nexport * from '../methods/stream-methods/switch-video-alt.service';\r\n\r\nexport * from '../methods/utils/join-room-on-media-sfu.service';\r\nexport * from '../methods/utils/meeting-timer/start-meeting-progress-timer.service';\r\nexport * from '../methods/utils/mini-audio-player/mini-audio-player.component';\r\nexport * from '../methods/utils/format-number.service';\r\nexport * from '../methods/utils/generate-random-messages.service';\r\nexport * from '../methods/utils/generate-random-participants.service';\r\nexport * from '../methods/utils/generate-random-polls.service';\r\nexport * from '../methods/utils/generate-random-request-list.service';\r\nexport * from '../methods/utils/generate-random-waiting-room-list.service';\r\nexport * from '../methods/utils/get-modal-position.util';\r\nexport * from '../methods/utils/get-overlay-position.util';\r\nexport * from '../methods/utils/sleep.util';\r\nexport * from '../methods/utils/validate-alphanumeric.service';\r\n\r\n// Waiting Methods\r\nexport * from '../methods/waiting-methods/launch-waiting.service';\r\nexport * from '../methods/waiting-methods/respond-to-waiting.service';\r\n\r\n// Whiteboard Methods\r\nexport * from '../methods/whiteboard-methods/launch-configure-whiteboard.service';\r\nexport * from '../methods/whiteboard-methods/capture-canvas-stream.service';\r\n\r\n// Producer Client Emits\r\nexport * from '../producer-client/producer-client-emits/create-device-client.service';\r\nexport * from '../producer-client/producer-client-emits/join-room-client.service';\r\nexport * from '../producer-client/producer-client-emits/update-room-parameters-client.service';\r\n\r\n// Producers Emits\r\nexport * from '../producers/producer-emits/join-con-room.service';\r\nexport * from '../producers/producer-emits/join-room.service';\r\nexport * from '../producers/producer-emits/join-local-room.service';\r\n\r\n// Socket Receive Methods\r\nexport * from '../producers/socket-receive-methods/all-members.service';\r\nexport * from '../producers/socket-receive-methods/all-members-rest.service';\r\nexport * from '../producers/socket-receive-methods/all-waiting-room-members.service';\r\nexport * from '../producers/socket-receive-methods/ban-participant.service';\r\nexport * from '../producers/socket-receive-methods/control-media-host.service';\r\nexport * from '../producers/socket-receive-methods/disconnect.service';\r\nexport * from '../producers/socket-receive-methods/disconnect-user-self.service';\r\nexport * from '../producers/socket-receive-methods/get-domains.service';\r\nexport * from '../producers/socket-receive-methods/host-request-response.service';\r\nexport * from '../producers/socket-receive-methods/meeting-ended.service';\r\nexport * from '../producers/socket-receive-methods/meeting-still-there.service';\r\nexport * from '../producers/socket-receive-methods/meeting-time-remaining.service';\r\nexport * from '../producers/socket-receive-methods/participant-requested.service';\r\nexport * from '../producers/socket-receive-methods/person-joined.service';\r\nexport * from '../producers/socket-receive-methods/producer-media-closed.service';\r\nexport * from '../producers/socket-receive-methods/producer-media-paused.service';\r\nexport * from '../producers/socket-receive-methods/producer-media-resumed.service';\r\nexport * from '../producers/socket-receive-methods/re-initiate-recording.service';\r\nexport * from '../producers/socket-receive-methods/receive-message.service';\r\nexport * from '../producers/socket-receive-methods/recording-notice.service';\r\nexport * from '../producers/socket-receive-methods/room-record-params.service';\r\nexport * from '../producers/socket-receive-methods/screen-producer-id.service';\r\nexport * from '../producers/socket-receive-methods/start-records.service';\r\nexport * from '../producers/socket-receive-methods/stopped-recording.service';\r\nexport * from '../producers/socket-receive-methods/time-left-recording.service';\r\nexport * from '../producers/socket-receive-methods/update-consuming-domains.service';\r\nexport * from '../producers/socket-receive-methods/update-media-settings.service';\r\nexport * from '../producers/socket-receive-methods/updated-co-host.service';\r\nexport * from '../producers/socket-receive-methods/user-waiting.service';\r\n\r\n// Sockets\r\nexport * from '../sockets/socket-manager.service';\r\n\r\n// Components\r\nexport * from '../components/background-components/background-modal/background-modal.component';\r\nexport * from '../components/breakout-components/breakout-rooms-modal.component';\r\nexport * from '../components/co-host-components/co-host-modal/co-host-modal.component';\r\nexport * from '../components/display-components/alert-component/alert.component.component';\r\nexport * from '../components/display-components/audio-card/audio-card.component';\r\nexport * from '../components/display-components/audio-grid/audio-grid.component';\r\nexport * from '../components/display-components/card-video-display/card-video-display.component';\r\nexport * from '../components/display-components/control-buttons-component/control-buttons-component.component';\r\nexport * from '../components/display-components/control-buttons-alt-component/control-buttons-alt-component.component';\r\nexport * from '../components/display-components/control-buttons-component-touch/control-buttons-component-touch.component';\r\nexport * from '../components/display-components/flexible-grid/flexible-grid.component';\r\nexport * from '../components/display-components/flexible-video/flexible-video.component';\r\nexport * from '../components/display-components/loading-modal/loading-modal.component';\r\nexport * from '../components/display-components/main-aspect-component/main-aspect-component.component';\r\nexport * from '../components/display-components/main-container-component/main-container-component.component';\r\nexport * from '../components/display-components/main-grid-component/main-grid-component.component';\r\nexport * from '../components/display-components/main-screen-component/main-screen-component.component';\r\nexport * from '../components/display-components/meeting-progress-timer/meeting-progress-timer.component';\r\nexport * from '../components/display-components/mini-audio/mini-audio.component';\r\nexport * from '../components/display-components/mini-card/mini-card.component';\r\nexport * from '../components/display-components/mini-card-audio/mini-card-audio.component';\r\nexport * from '../components/display-components/other-grid-component/other-grid-component.component';\r\nexport * from '../components/display-components/pagination/pagination.component';\r\nexport * from '../components/display-components/sub-aspect-component/sub-aspect-component.component';\r\nexport * from '../components/display-components/video-card/video-card.component';\r\nexport * from '../components/display-settings-components/display-settings-modal.component';\r\nexport * from '../components/event-settings-components/event-settings-modal/event-settings-modal.component';\r\nexport * from '../components/exit-components/confirm-exit-modal/confirm-exit-modal.component';\r\nexport * from '../components/media-settings-components/media-settings-modal/media-settings-modal.component';\r\nexport * from '../components/menu-components/menu-modal/menu-modal.component';\r\nexport * from '../components/message-components/messages-modal/messages-modal.component';\r\nexport * from '../components/misc-components/confirm-here-modal/confirm-here-modal.component';\r\nexport * from '../components/misc-components/pre-join-page/pre-join-page.component';\r\nexport * from '../components/misc-components/share-event-modal/share-event-modal.component';\r\nexport * from '../components/misc-components/welcome-page/welcome-page.component';\r\nexport * from '../components/participants-components/participants-modal/participants-modal.component';\r\nexport * from '../components/polls-components/poll-modal/poll-modal.component';\r\nexport * from '../components/recording-components/recording-modal/recording-modal.component';\r\nexport * from '../components/requests-components/requests-modal/requests-modal.component';\r\nexport * from '../components/screenboard-components/screenboard/screenboard.component';\r\nexport * from '../components/screenboard-components/screenboard-modal/screenboard-modal.component';\r\nexport * from '../components/waiting-components/waiting-room-modal.component';\r\nexport * from '../components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component';\r\nexport * from '../components/whiteboard-components/whiteboard/whiteboard.component';\r\nexport * from '../components/menu-components/custom-buttons/custom-buttons.component';\r\n\r\nexport * from '../methods/utils/join-room-on-media-sfu.service';\r\n\r\n\r\nexport interface Participant {\r\n  id?: string;\r\n  audioID: string;\r\n  videoID: string;\r\n  ScreenID?: string;\r\n  ScreenOn?: boolean;\r\n  islevel?: string;\r\n  isAdmin?: boolean;\r\n  isHost?: boolean; // Community Edition support\r\n  name: string;\r\n  muted?: boolean;\r\n  isBanned?: boolean;\r\n  isSuspended?: boolean;\r\n  useBoard?: boolean;\r\n  breakRoom?: number | null;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface Stream {\r\n  producerId: string;\r\n  muted?: boolean;\r\n  stream?: MediaStream;\r\n  socket_?: Socket;\r\n  name?: string;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface Request {\r\n  id: string;\r\n  icon: string;\r\n  name?: string;\r\n  username?: string;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface RequestResponse {\r\n  id: string;\r\n  icon?: string;\r\n  name?: string;\r\n  username?: string;\r\n  action?: string;\r\n  type?: string;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface Transport {\r\n  producerId: string;\r\n  consumer: Consumer;\r\n  socket_: Socket;\r\n  serverConsumerTransportId: string;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ScreenState {\r\n  mainScreenPerson?: string;\r\n  mainScreenProducerId?: string;\r\n  mainScreenFilled: boolean;\r\n  adminOnMainScreen: boolean;\r\n}\r\n\r\nexport interface GridSizes {\r\n  gridWidth?: number;\r\n  gridHeight?: number;\r\n  altGridWidth?: number;\r\n  altGridHeight?: number;\r\n}\r\n\r\nexport interface ComponentSizes {\r\n  mainWidth: number;\r\n  mainHeight: number;\r\n  otherWidth: number;\r\n  otherHeight: number;\r\n}\r\n\r\nexport interface AudioDecibels {\r\n  name: string;\r\n  averageLoudness: number;\r\n}\r\n\r\nexport type ShowAlert = (options: {\r\n  message: string;\r\n  type: 'success' | 'danger';\r\n  duration?: number;\r\n}) => void;\r\n\r\nexport interface CoHostResponsibility {\r\n  name: string;\r\n  value: boolean;\r\n  dedicated: boolean;\r\n}\r\n\r\nexport interface VidCons {\r\n  width: number | { ideal?: number; max?: number; min?: number };\r\n  height: number | { ideal?: number; max?: number; min?: number };\r\n}\r\n\r\nexport type Settings = [string, string, string, string];\r\n\r\nexport interface Message {\r\n  sender: string;\r\n  receivers: string[];\r\n  message: string;\r\n  timestamp: string;\r\n  group: boolean;\r\n}\r\n\r\nexport type MainSpecs = {\r\n  mediaOptions: string;\r\n  audioOptions: string;\r\n  videoOptions: string;\r\n  videoType: string;\r\n  videoOptimized: boolean;\r\n  recordingDisplayType: 'video' | 'media' | 'all';\r\n  addHLS: boolean;\r\n};\r\n\r\nexport type DispSpecs = {\r\n  nameTags: boolean;\r\n  backgroundColor: string;\r\n  nameTagsColor: string;\r\n  orientationVideo: string;\r\n};\r\n\r\nexport type TextSpecs = {\r\n  addText: boolean;\r\n  customText?: string;\r\n  customTextPosition?: string;\r\n  customTextColor?: string;\r\n};\r\n\r\nexport interface UserRecordingParams {\r\n  mainSpecs: MainSpecs;\r\n  dispSpecs: DispSpecs;\r\n  textSpecs?: TextSpecs;\r\n}\r\n\r\nexport type AltDomains = {\r\n  [key: string]: string;\r\n};\r\n\r\nexport type RequestPermissionAudioType = () => Promise<string>;\r\nexport type RequestPermissionCameraType = () => Promise<string>;\r\n\r\nexport type ControlsPosition = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';\r\nexport type InfoPosition = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';\r\n\r\nexport interface Poll {\r\n  id: string;\r\n  question: string;\r\n  type: string;\r\n  options: string[];\r\n  votes: number[];\r\n  status: string;\r\n  voters?: Record<string, number>;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface WaitingRoomParticipant {\r\n  name: string;\r\n  id: string;\r\n}\r\n\r\nexport interface ModalPositionStyle {\r\n  justifyContent: string;\r\n  alignItems: string;\r\n}\r\n\r\nexport interface OverlayPositionStyle {\r\n  top?: number;\r\n  left?: number;\r\n  right?: number;\r\n  bottom?: number;\r\n}\r\n\r\nexport type EventType = 'conference' | 'webinar' | 'chat' | 'broadcast' | 'none';\r\n\r\nexport interface PollUpdatedData {\r\n  polls?: Poll[];\r\n  poll: Poll;\r\n  status: string;\r\n}\r\n\r\nexport interface BreakoutParticipant {\r\n  name: string;\r\n  breakRoom?: number | null;\r\n}\r\n\r\nexport interface BreakoutRoomUpdatedData {\r\n  forHost?: boolean;\r\n  newRoom?: number;\r\n  members?: Participant[];\r\n  breakoutRooms?: BreakoutParticipant[][];\r\n  status?: string;\r\n}\r\n\r\nexport interface ConsumeSocket {\r\n  [ip: string]: Socket;\r\n}\r\n\r\nexport interface WhiteboardUser {\r\n  name: string;\r\n  useBoard: boolean;\r\n}\r\n\r\nexport interface ShapePayload {\r\n  type: string;\r\n  x1: number;\r\n  y1: number;\r\n  x2: number;\r\n  y2: number;\r\n  color: string;\r\n  thickness: number;\r\n  lineType: string;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface Shapes {\r\n  action: string;\r\n  payload: ShapePayload;\r\n}\r\nexport interface WhiteboardData {\r\n  shapes: Shapes[];\r\n  redoStack: Shapes[];\r\n  undoStack: Shapes[];\r\n  useImageBackground: boolean;\r\n}\r\n\r\nexport type SeedData = {\r\n  member?: string;\r\n  host?: string;\r\n  eventType?: EventType;\r\n  participants?: Participant[];\r\n  messages?: Message[];\r\n  polls?: Poll[];\r\n  breakoutRooms?: BreakoutParticipant[][];\r\n  requests?: Request[];\r\n  waitingList?: WaitingRoomParticipant[];\r\n  whiteboardUsers?: WhiteboardUser[];\r\n};\r\n\r\nexport interface MeetingRoomParams {\r\n  itemPageLimit: number; // Limit for items per page\r\n  mediaType: 'audio' | 'video'; // Type of media, could be audio or video\r\n  addCoHost: boolean; // Whether co-hosts can be added\r\n  targetOrientation: 'landscape' | 'neutral' | 'portrait'; // Target orientation, landscape, neutral, or portrait\r\n  targetOrientationHost: 'landscape' | 'neutral' | 'portrait'; // Host's target orientation, landscape, neutral, or portrait\r\n  targetResolution: 'qhd' | 'fhd' | 'hd' | 'sd' | 'QnHD'; // Target resolution for participants\r\n  targetResolutionHost: 'qhd' | 'fhd' | 'hd' | 'sd' | 'QnHD'; // Target resolution for host  type: 'chat' | 'conference' | 'webinar' | 'broadcast'; // Room type: chat, conference, webinar, or broadcast\r\n  type: EventType; // Room type: chat, conference, webinar, or broadcast\r\n  audioSetting: 'allow' | 'approval' | 'disallow'; // Audio setting: allow, approval, or disallow\r\n  videoSetting: 'allow' | 'approval' | 'disallow'; // Video setting: allow, approval, or disallow\r\n  screenshareSetting: 'allow' | 'approval' | 'disallow'; // Screenshare setting: allow, approval, or disallow\r\n  chatSetting: 'allow' | 'disallow'; // Chat setting: allow or disallow\r\n}\r\n\r\nexport interface RecordingParams {\r\n  recordingAudioPausesLimit: number; // Limit on audio recording pauses\r\n  recordingAudioSupport: boolean; // Whether audio recording is supported\r\n  recordingAudioPeopleLimit: number; // Maximum number of people for audio recording\r\n  recordingAudioParticipantsTimeLimit: number; // Time limit for audio participants in recording\r\n\r\n  recordingVideoPausesLimit: number; // Limit on video recording pauses\r\n  recordingVideoSupport: boolean; // Whether video recording is supported\r\n  recordingVideoPeopleLimit: number; // Maximum number of people for video recording\r\n  recordingVideoParticipantsTimeLimit: number; // Time limit for video participants in recording\r\n\r\n  recordingAllParticipantsSupport: boolean; // Whether recording all participants is supported\r\n  recordingVideoParticipantsSupport: boolean; // Whether video recording for participants is supported\r\n  recordingAllParticipantsFullRoomSupport: boolean; // Support for recording the entire room for all participants\r\n  recordingVideoParticipantsFullRoomSupport: boolean; // Support for recording the full room for video participants\r\n\r\n  recordingPreferredOrientation: 'landscape' | 'portrait'; // Preferred recording orientation\r\n  recordingSupportForOtherOrientation: boolean; // Support for orientations other than the preferred one\r\n  recordingMultiFormatsSupport: boolean; // Support for multiple recording formats\r\n  recordingHLSSupport: boolean; // Whether HLS recording is supported\r\n\r\n  recordingAudioPausesCount?: number; // Number of audio recording pauses\r\n  recordingVideoPausesCount?: number; // Number of video recording pauses\r\n}\r\n\r\nexport interface CreateRoomOptions {\r\n  action: 'create' | 'join'; // Either 'create' or 'join' based on the requirement\r\n  meetingID: string; // The meeting ID, initially an empty string\r\n  duration: number; // Duration of the meeting in minutes\r\n  capacity: number; // Max number of participants allowed\r\n  userName: string; // Username of the room host\r\n  scheduledDate: number; // Unix timestamp (in milliseconds) for the scheduled date\r\n  secureCode: string; // Secure code for the room host\r\n  eventType: 'conference' | 'webinar' | 'chat' | 'broadcast'; // Type of event\r\n  recordOnly: boolean; // Whether the room is for recording only\r\n  eventStatus: 'active' | 'inactive'; // Status of the event\r\n  startIndex: number; // Start index for pagination or data fetch\r\n  pageSize: number; // Number of items per page\r\n  safeRoom: boolean; // Whether the room is a safe room\r\n  autoStartSafeRoom: boolean; // Automatically start the safe room feature\r\n  safeRoomAction: 'warn' | 'kick' | 'ban'; // Action for the safe room\r\n  dataBuffer: boolean; // Whether to return data buffer\r\n  bufferType: 'images' | 'audio' | 'all'; // Type of buffer data\r\n}\r\n\r\nexport interface CreateMediaSFURoomOptions {\r\n  action: 'create'; // 'create' action\r\n  duration: number; // Duration of the meeting in minutes\r\n  capacity: number; // Max number of participants allowed\r\n  userName: string; // Username of the room host\r\n  scheduledDate?: number; // Unix timestamp (in milliseconds) for the scheduled date\r\n  secureCode?: string; // Secure code for the room host\r\n  eventType?: 'conference' | 'webinar' | 'chat' | 'broadcast'; // Type of event\r\n  meetingRoomParams?: MeetingRoomParams; // Object containing parameters related to the meeting room\r\n  recordingParams?: RecordingParams; // Object containing parameters related to recording\r\n  recordOnly?: boolean; // Whether the room is for media production only (egress)\r\n  safeRoom?: boolean; // Whether the room is a safe room\r\n  autoStartSafeRoom?: boolean; // Automatically start the safe room feature\r\n  safeRoomAction?: 'warn' | 'kick' | 'ban'; // Action for the safe room\r\n  dataBuffer?: boolean; // Whether to return data buffer\r\n  bufferType?: 'images' | 'audio' | 'all'; // Type of buffer data\r\n}\r\nexport interface JoinMediaSFURoomOptions {\r\n  action: 'join'; // 'join' action\r\n  meetingID: string; // The meeting ID\r\n  userName: string; // Username of the room host\r\n}\r\n\r\nexport interface ResponseJoinLocalRoom {\r\n  rtpCapabilities?: RtpCapabilities | null; // Object containing the RTP capabilities\r\n  isHost: boolean; // Indicates whether the user joining the room is the host.\r\n  eventStarted: boolean; // Indicates whether the event has started.\r\n  isBanned: boolean; // Indicates whether the user is banned from the room.\r\n  hostNotJoined: boolean; // Indicates whether the host has not joined the room.\r\n  eventRoomParams: MeetingRoomParams; // Object containing parameters related to the meeting room.\r\n  recordingParams: RecordingParams; // Object containing parameters related to recording.\r\n  secureCode: string; // Secure code (host password) associated with the host of the room.\r\n  mediasfuURL: string; // Media SFU URL\r\n  apiKey: string; // API key\r\n  apiUserName: string; // API username\r\n  allowRecord: boolean; // Indicates whether recording is allowed.\r\n}\r\n\r\nexport interface ResponseJoinRoom {\r\n  rtpCapabilities?: RtpCapabilities | null; // Object containing the RTP capabilities\r\n  success: boolean; // Indicates whether the operation (joining the room) was successful.\r\n  roomRecvIPs: string[]; // Array of strings containing information about the domains that must be connected to in order to receive media.\r\n  meetingRoomParams: MeetingRoomParams; // Object containing parameters related to the meeting room.\r\n  recordingParams: RecordingParams; // Object containing parameters related to recording.\r\n  secureCode: string; // Secure code (host password) associated with the host of the room.\r\n  recordOnly: boolean; // Indicates whether the room is for recording only.\r\n  isHost: boolean; // Indicates whether the user joining the room is the host.\r\n  safeRoom: boolean; // Indicates whether the room is a safe room.\r\n  autoStartSafeRoom: boolean; // Indicates whether the safe room will automatically start.\r\n  safeRoomStarted: boolean; // Indicates whether the safe room has started.\r\n  safeRoomEnded: boolean; // Indicates whether the safe room has ended.\r\n  reason?: string; // Reason for the success or failure of the operation.\r\n  banned?: boolean; // Indicates whether the user is banned from the room.\r\n  suspended?: boolean; // Indicates whether the user is suspended from the room.\r\n  noAdmin?: boolean; // Indicates whether the room has no host in it.\r\n}\r\n\r\nexport interface AllMembersData {\r\n  members: Participant[]; // Array of objects containing information about all the members in the room.\r\n  requests: Request[]; // Array of objects containing information about the requests.\r\n  coHost?: string; // The co-host information.\r\n  coHostResponsibilities: CoHostResponsibility[]; // Array of objects containing information about the co-host responsibilities.\r\n}\r\n\r\nexport interface AllMembersRestData {\r\n  members: Participant[]; // Array of objects containing information about all the members in the room.\r\n  settings: Settings; // Array of strings containing information about the settings.\r\n  coHost?: string; // The co-host information.\r\n  coHostResponsibilities: CoHostResponsibility[]; // Array of objects containing information about the co-host responsibilities.\r\n}\r\n\r\nexport interface UserWaitingData {\r\n  name: string; // Name of the user waiting to join the room.\r\n}\r\n\r\nexport interface AllWaitingRoomMembersData {\r\n  waitingParticipants?: WaitingRoomParticipant[]; // Array of objects containing information about the participants waiting to join the room.\r\n  waitingParticipantss?: WaitingRoomParticipant[];\r\n}\r\n\r\nexport interface BanData {\r\n  name: string; // Name of the user to ban.\r\n}\r\n\r\nexport interface UpdatedCoHostData {\r\n  coHost: string; // The co-host information.\r\n  coHostResponsibilities: CoHostResponsibility[]; // Array of objects containing information about the co-host responsibilities.\r\n}\r\n\r\nexport interface ParticipantRequestedData {\r\n  userRequest: Request; // Object containing information about the user request.\r\n}\r\n\r\nexport interface ScreenProducerIdData {\r\n  producerId: string; // The producer ID of the screen.\r\n}\r\n\r\nexport interface UpdateMediaSettingsData {\r\n  settings: Settings; // Array of strings containing information about the settings.\r\n}\r\n\r\nexport interface ProducerMediaPausedData {\r\n  producerId: string; // The producer ID of the media that was paused.\r\n  kind: 'audio';\r\n  name: string; // The name of the media that was paused.\r\n}\r\n\r\nexport interface ProducerMediaResumedData {\r\n  kind: 'audio';\r\n  name: string; // The name of the media that was resumed.\r\n}\r\n\r\nexport interface ProducerMediaClosedData {\r\n  producerId: string; // The producer ID of the media that was stopped.\r\n  kind: 'audio' | 'video' | 'screenshare';\r\n  name: string; // The name of the media that was stopped.\r\n}\r\n\r\nexport interface ControlMediaHostData {\r\n  type: 'all' | 'audio' | 'video' | 'screenshare'; // The type of media to control.\r\n}\r\n\r\nexport interface ReceiveMessageData {\r\n  message: Message; // Object containing information about the message.\r\n}\r\n\r\nexport interface MeetingTimeRemainingData {\r\n  timeRemaining: number; // The time remaining for the meeting.\r\n}\r\n\r\nexport interface MeetingStillThereData {\r\n  timeRemaining: number; // The time remaining for the meeting.\r\n}\r\n\r\nexport interface UpdateConsumingDomainsData {\r\n  domains: string[]; // Array of strings containing information about the domains to consume media from.\r\n  alt_domains: AltDomains; // Object containing information about the alternative domains to consume media from.\r\n}\r\n\r\nexport interface RecordingNoticeData {\r\n  state: string; // The state of the recording.\r\n  userRecordingParam: UserRecordingParams; // Object containing information about the user recording parameters.\r\n  pauseCount: number; // The number of times the recording was paused.\r\n  timeDone: number; // The time the recording was paused.\r\n}\r\n\r\nexport interface TimeLeftRecordingData {\r\n  timeLeft: number; // The time left for recording.\r\n}\r\n\r\nexport interface StoppedRecordingData {\r\n  state: string; // The state of the recording.\r\n  reason?: string; // The reason for stopping the recording.\r\n}\r\n\r\nexport interface HostRequestResponseData {\r\n  requestResponse: RequestResponse; // Object containing information about the request response.\r\n}\r\n\r\nexport interface SafeRoomNoticeData {\r\n  state: string; // The state of the safe room.\r\n}\r\n\r\nexport interface UnSafeData {\r\n  time: number; // The time the room was unsafe.\r\n  evidence: ImageData; // The evidence for the room being unsafe.\r\n}\r\n\r\nexport interface UnsafeAlertData {\r\n  name: string; // The name of the user who triggered the unsafe alert.\r\n}\r\n\r\nexport interface DataBufferNotice {\r\n  state: string; // The state of the data buffer.\r\n}\r\n\r\nexport interface AudioData {\r\n  audioBuffer: AudioBuffer; // The audio buffer.\r\n}\r\n\r\nexport interface ImageData {\r\n  jpegBuffer: ImageData; // The JPEG buffer.\r\n}\r\n\r\nexport interface WhiteboardUpdatedData {\r\n  status: 'started' | 'ended'; // The status of the whiteboard.\r\n  whiteboardUsers: WhiteboardUser[]; // Array of objects containing information about the whiteboard users.\r\n  members: Participant[]; // Array of objects containing information about the members.\r\n  whiteboardData: WhiteboardData; // Object containing information about the whiteboard data.\r\n}\r\n\r\nexport interface WhiteboardActionData {\r\n  action: string; // The action to be performed on the whiteboard.\r\n  payload: ShapePayload; // Object containing information about the shape payload.\r\n}\r\n\r\nexport interface CustomMediaComponent {\r\n  component: ComponentType<any>; // The custom media component.\r\n  inputs: any;\r\n}\r\n\r\nexport interface GenericButton {\r\n  name?: string;\r\n  icon?: IconDefinition;\r\n  alternateIcon?: IconDefinition;\r\n  onPress?: () => void;\r\n  color?: string;\r\n  backgroundColor?: {\r\n    default?: string;\r\n  };\r\n}\r\n\r\nexport interface MainButtonAlt extends GenericButton {\r\n  active?: boolean | (() => boolean);\r\n  customComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n  iconComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n  alternateIconComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n  disabled?: boolean | (() => boolean);\r\n  show?: boolean | (() => boolean);\r\n  activeColor?: string | (() => string);\r\n  inActiveColor?: string | (() => string);\r\n}\r\n\r\nexport type MainCustomButton = Pick<\r\n  CustomButton,\r\n  Exclude<keyof CustomButton, 'customComponent'>\r\n> & {\r\n  customComponent?: HTMLElement | CustomComponent | (() => HTMLElement | CustomComponent);\r\n};\r\n\r\nexport type { CustomComponent } from '../components/menu-components/custom-buttons/custom-buttons.component';\r\n\r\nexport type CreateWebRTCTransportResponse = {\r\n  id: string;\r\n  dtlsParameters: DtlsParameters;\r\n  iceCandidates: IceCandidate[];\r\n  iceParameters: IceParameters;\r\n  error?: string;\r\n};\r\n","import { Producer, ProducerOptions, RtpCapabilities, Transport } from 'mediasoup-client/lib/types';\r\nimport {\r\n  AParamsType,\r\n  CoHostResponsibility,\r\n  EventType,\r\n  HParamsType,\r\n  Participant,\r\n  Poll,\r\n  ScreenParamsType,\r\n  Stream,\r\n  VidCons,\r\n  VParamsType,\r\n  ConsumeSocket,\r\n  MeetingRoomParams,\r\n  UserRecordingParams,\r\n  ScreenState,\r\n  AudioDecibels,\r\n  CustomMediaComponent,\r\n  GridSizes,\r\n  Message,\r\n  WaitingRoomParticipant,\r\n  Request,\r\n  BreakoutParticipant,\r\n  WhiteboardUser,\r\n  Shape,\r\n  ResponseJoinRoom,\r\n  ComponentSizes,\r\n  Transport as TransportType,\r\n} from '../../@types/types';\r\nimport { Device } from 'mediasoup-client/lib/types';\r\nimport { Socket } from 'socket.io-client';\r\nimport { SelfieSegmentation } from '@mediapipe/selfie_segmentation';\r\n\r\nexport interface InitialValuesStateType {\r\n  roomName: string;\r\n  member: string;\r\n  adminPasscode: string;\r\n  islevel: string;\r\n  coHost: string;\r\n  coHostResponsibility: CoHostResponsibility[];\r\n  youAreCoHost: boolean;\r\n  youAreHost: boolean;\r\n  confirmedToRecord: boolean;\r\n  meetingDisplayType: string;\r\n  meetingVideoOptimized: boolean;\r\n  eventType: EventType;\r\n  participants: Participant[];\r\n  filteredParticipants: Participant[];\r\n  participantsCounter: number;\r\n  participantsFilter: string;\r\n\r\n  validated: boolean;\r\n  localUIMode: boolean;\r\n  socket: Socket;\r\n  localSocket?: Socket;\r\n  roomData: ResponseJoinRoom | null;\r\n  device: Device | null;\r\n  apiKey: string;\r\n  apiUserName: string;\r\n  apiToken: string;\r\n  link: string;\r\n\r\n  consume_sockets: ConsumeSocket[];\r\n  rtpCapabilities: RtpCapabilities | null;\r\n  roomRecvIPs: string[];\r\n  meetingRoomParams: MeetingRoomParams | null;\r\n  itemPageLimit: number;\r\n  audioOnlyRoom: boolean;\r\n  addForBasic: boolean;\r\n  screenPageLimit: number;\r\n  shareScreenStarted: boolean;\r\n  shared: boolean;\r\n  targetOrientation: string;\r\n  targetResolution: string;\r\n  targetResolutionHost: string;\r\n  vidCons: VidCons;\r\n  frameRate: number;\r\n  hParams: HParamsType;\r\n  vParams: VParamsType;\r\n  screenParams: ScreenParamsType;\r\n  aParams: AParamsType;\r\n\r\n  // Recording Fields\r\n  recordingAudioPausesLimit: number;\r\n  recordingAudioPausesCount: number;\r\n  recordingAudioSupport: boolean;\r\n  recordingAudioPeopleLimit: number;\r\n  recordingAudioParticipantsTimeLimit: number;\r\n  recordingVideoPausesCount: number;\r\n  recordingVideoPausesLimit: number;\r\n  recordingVideoSupport: boolean;\r\n  recordingVideoPeopleLimit: number;\r\n  recordingVideoParticipantsTimeLimit: number;\r\n  recordingAllParticipantsSupport: boolean;\r\n  recordingVideoParticipantsSupport: boolean;\r\n  recordingAllParticipantsFullRoomSupport: boolean;\r\n  recordingVideoParticipantsFullRoomSupport: boolean;\r\n  recordingPreferredOrientation: string;\r\n  recordingSupportForOtherOrientation: boolean;\r\n  recordingMultiFormatsSupport: boolean;\r\n\r\n  userRecordingParams: UserRecordingParams;\r\n\r\n  canRecord: boolean;\r\n  startReport: boolean;\r\n  endReport: boolean;\r\n  recordTimerInterval: NodeJS.Timeout | null;\r\n  recordStartTime: number;\r\n  recordElapsedTime: number;\r\n  isTimerRunning: boolean;\r\n  canPauseResume: boolean;\r\n  recordChangeSeconds: number;\r\n  pauseLimit: number;\r\n  pauseRecordCount: number;\r\n  canLaunchRecord: boolean;\r\n  stopLaunchRecord: boolean;\r\n\r\n  // Room properties\r\n  participantsAll: Participant[];\r\n  firstAll: boolean;\r\n  updateMainWindow: boolean;\r\n  first_round: boolean;\r\n  landScaped: boolean;\r\n  lock_screen: boolean;\r\n  screenId: string;\r\n  allVideoStreams: (Participant | Stream)[];\r\n  newLimitedStreams: (Participant | Stream)[];\r\n  newLimitedStreamsIDs: string[];\r\n  activeSounds: string[];\r\n  screenShareIDStream: string;\r\n  screenShareNameStream: string;\r\n  adminIDStream: string;\r\n  adminNameStream: string;\r\n  youYouStream: (Participant | Stream)[];\r\n  youYouStreamIDs: string[];\r\n  localStream: MediaStream | null;\r\n  recordStarted: boolean;\r\n  recordResumed: boolean;\r\n  recordPaused: boolean;\r\n  recordStopped: boolean;\r\n  adminRestrictSetting: boolean;\r\n  videoRequestState: string | null;\r\n  videoRequestTime: number;\r\n  videoAction: boolean;\r\n  localStreamVideo: MediaStream | null;\r\n  userDefaultVideoInputDevice: string;\r\n  currentFacingMode: string;\r\n  prevFacingMode: string;\r\n  defVideoID: string;\r\n  allowed: boolean;\r\n  dispActiveNames: string[];\r\n  activeNames: string[];\r\n  prevActiveNames: string[];\r\n  p_activeNames: string[];\r\n  p_dispActiveNames: string[];\r\n  membersReceived: boolean;\r\n  deferScreenReceived: boolean;\r\n  hostFirstSwitch: boolean;\r\n  micAction: boolean;\r\n  screenAction: boolean;\r\n  chatAction: boolean;\r\n  audioRequestState: string | null;\r\n  screenRequestState: string | null;\r\n  chatRequestState: string | null;\r\n  audioRequestTime: number;\r\n  screenRequestTime: number;\r\n  chatRequestTime: number;\r\n  updateRequestIntervalSeconds: number;\r\n  oldSoundIds: string[];\r\n  hostLabel: string;\r\n  mainScreenFilled: boolean;\r\n  localStreamScreen: MediaStream | null;\r\n  screenAlreadyOn: boolean;\r\n  chatAlreadyOn: boolean;\r\n  redirectURL: string;\r\n  oldAllStreams: (Participant | Stream)[];\r\n  adminVidID: string;\r\n  streamNames: Stream[];\r\n  non_alVideoStreams: Participant[];\r\n  sortAudioLoudness: boolean;\r\n  audioDecibels: AudioDecibels[];\r\n  mixed_alVideoStreams: (Participant | Stream)[];\r\n  non_alVideoStreams_muted: Participant[];\r\n  paginatedStreams: (Participant | Stream)[][];\r\n  localStreamAudio: MediaStream | null;\r\n  defAudioID: string;\r\n  userDefaultAudioInputDevice: string;\r\n  userDefaultAudioOutputDevice: string;\r\n  prevAudioInputDevice: string;\r\n  prevVideoInputDevice: string;\r\n  audioPaused: boolean;\r\n  mainScreenPerson: string;\r\n  adminOnMainScreen: boolean;\r\n  screenStates: ScreenState[];\r\n  prevScreenStates: ScreenState[];\r\n  updateDateState: number | null;\r\n  lastUpdate: number | null;\r\n  nForReadjustRecord: number;\r\n  fixedPageLimit: number;\r\n  removeAltGrid: boolean;\r\n  nForReadjust: number;\r\n  reorderInterval: number;\r\n  fastReorderInterval: number;\r\n  lastReorderTime: number;\r\n  audStreamNames: Stream[];\r\n  currentUserPage: number;\r\n  mainHeightWidth: number;\r\n  prevMainHeightWidth: number;\r\n  prevDoPaginate: boolean;\r\n  doPaginate: boolean;\r\n  shareEnded: boolean;\r\n  lStreams: (Participant | Stream)[];\r\n  chatRefStreams: (Participant | Stream)[];\r\n  controlHeight: number;\r\n  isWideScreen: boolean;\r\n  isMediumScreen: boolean;\r\n  isSmallScreen: boolean;\r\n  addGrid: boolean;\r\n  addAltGrid: boolean;\r\n  gridRows: number;\r\n  gridCols: number;\r\n  altGridRows: number;\r\n  altGridCols: number;\r\n  numberPages: number;\r\n  currentStreams: (Participant | Stream)[];\r\n  showMiniView: boolean;\r\n  nStream: MediaStream | null;\r\n  defer_receive: boolean;\r\n  allAudioStreams: (Participant | Stream)[];\r\n  remoteScreenStream: Stream[];\r\n  screenProducer: Producer | null;\r\n  localScreenProducer: Producer | null;\r\n  gotAllVids: boolean;\r\n  paginationHeightWidth: number;\r\n  paginationDirection: string;\r\n  gridSizes: GridSizes;\r\n  screenForceFullDisplay: boolean;\r\n  mainGridStream: CustomMediaComponent[];\r\n  otherGridStreams: CustomMediaComponent[][];\r\n  audioOnlyStreams: CustomMediaComponent[];\r\n  videoInputs: MediaDeviceInfo[];\r\n  audioInputs: MediaDeviceInfo[];\r\n  meetingProgressTime: string;\r\n  meetingElapsedTime: number;\r\n  ref_participants: Participant[];\r\n\r\n  // New fields related to messaging, events, modals, and other UI states\r\n  messages: Message[];\r\n  startDirectMessage: boolean;\r\n  directMessageDetails: Participant | null;\r\n  showMessagesBadge: boolean;\r\n  audioSetting: string;\r\n  videoSetting: string;\r\n  screenshareSetting: string;\r\n  chatSetting: string;\r\n  displayOption: string;\r\n  autoWave: boolean;\r\n  forceFullDisplay: boolean;\r\n  prevForceFullDisplay: boolean;\r\n  prevMeetingDisplayType: string;\r\n  waitingRoomFilter: string;\r\n  waitingRoomList: WaitingRoomParticipant[];\r\n  waitingRoomCounter: number;\r\n  filteredWaitingRoomList: WaitingRoomParticipant[];\r\n  requestFilter: string;\r\n  requestList: Request[];\r\n  requestCounter: number;\r\n  filteredRequestList: Request[];\r\n  totalReqWait: number;\r\n  alertVisible: boolean;\r\n  alertMessage: string;\r\n  alertType: 'success' | 'danger';\r\n  alertDuration: number;\r\n  progressTimerVisible: boolean;\r\n  progressTimerValue: number;\r\n  isMenuModalVisible: boolean;\r\n  isRecordingModalVisible: boolean;\r\n  isSettingsModalVisible: boolean;\r\n  isRequestsModalVisible: boolean;\r\n  isWaitingModalVisible: boolean;\r\n  isCoHostModalVisible: boolean;\r\n  isMediaSettingsModalVisible: boolean;\r\n  isDisplaySettingsModalVisible: boolean;\r\n  isParticipantsModalVisible: boolean;\r\n  isMessagesModalVisible: boolean;\r\n  isConfirmExitModalVisible: boolean;\r\n  isConfirmHereModalVisible: boolean;\r\n  isShareEventModalVisible: boolean;\r\n  isLoadingModalVisible: boolean;\r\n\r\n  recordingMediaOptions: string;\r\n  recordingAudioOptions: string;\r\n  recordingVideoOptions: string;\r\n  recordingVideoType: string;\r\n  recordingVideoOptimized: boolean;\r\n  recordingDisplayType: 'video' | 'media' | 'all';\r\n  recordingAddHLS: boolean;\r\n  recordingNameTags: boolean;\r\n  recordingBackgroundColor: string;\r\n  recordingNameTagsColor: string;\r\n  recordingAddText: boolean;\r\n  recordingCustomText: string;\r\n  recordingCustomTextPosition: string;\r\n  recordingCustomTextColor: string;\r\n  recordingOrientationVideo: string;\r\n  clearedToResume: boolean;\r\n  clearedToRecord: boolean;\r\n  recordState: string;\r\n  showRecordButtons: boolean;\r\n  recordingProgressTime: string;\r\n  audioSwitching: boolean;\r\n  videoSwitching: boolean;\r\n  videoAlreadyOn: boolean;\r\n  audioAlreadyOn: boolean;\r\n  componentSizes: ComponentSizes;\r\n  hasCameraPermission: boolean;\r\n  hasAudioPermission: boolean;\r\n  transportCreated: boolean;\r\n  localTransportCreated: boolean;\r\n  transportCreatedVideo: boolean;\r\n  transportCreatedAudio: boolean;\r\n  transportCreatedScreen: boolean;\r\n  producerTransport: Transport | null;\r\n  localProducerTransport: Transport | null;\r\n  videoProducer: Producer | null;\r\n  localVideoProducer: Producer | null;\r\n  params: ProducerOptions;\r\n  videoParams: ProducerOptions;\r\n  audioParams: ProducerOptions;\r\n  audioProducer: Producer | null;\r\n  localAudioProducer: Producer | null;\r\n  consumerTransports: TransportType[];\r\n  consumingTransports: string[];\r\n\r\n  // Polls\r\n  polls: Poll[];\r\n  poll: Poll | null;\r\n  isPollModalVisible: boolean;\r\n\r\n  // Background\r\n  customImage: string;\r\n  selectedImage: string;\r\n  segmentVideo: MediaStream | null;\r\n  selfieSegmentation: SelfieSegmentation | null;\r\n  pauseSegmentation: boolean;\r\n  processedStream: MediaStream | null;\r\n  keepBackground: boolean;\r\n  backgroundHasChanged: boolean;\r\n  virtualStream: MediaStream | null;\r\n  mainCanvas: HTMLCanvasElement | null;\r\n  prevKeepBackground: boolean;\r\n  appliedBackground: boolean;\r\n  isBackgroundModalVisible: boolean;\r\n  autoClickBackground: boolean;\r\n\r\n  // Breakout Rooms\r\n  breakoutRooms: BreakoutParticipant[][];\r\n  currentRoomIndex: number;\r\n  canStartBreakout: boolean;\r\n  breakOutRoomStarted: boolean;\r\n  breakOutRoomEnded: boolean;\r\n  hostNewRoom: number;\r\n  limitedBreakRoom: BreakoutParticipant[];\r\n  mainRoomsLength: number;\r\n  memberRoom: number;\r\n  isBreakoutRoomsModalVisible: boolean;\r\n\r\n  // Whiteboard\r\n  whiteboardUsers: WhiteboardUser[];\r\n  currentWhiteboardIndex: number;\r\n  canStartWhiteboard: boolean;\r\n  whiteboardStarted: boolean;\r\n  whiteboardEnded: boolean;\r\n  whiteboardLimit: number;\r\n  isWhiteboardModalVisible: boolean;\r\n  isConfigureWhiteboardModalVisible: boolean;\r\n  shapes: Shape[];\r\n  useImageBackground: boolean;\r\n  redoStack: Shape[];\r\n  undoStack: string[];\r\n  canvasStream: MediaStream | null;\r\n  canvasWhiteboard: HTMLCanvasElement | null;\r\n\r\n  // Screenboard\r\n  canvasScreenboard: HTMLCanvasElement | null;\r\n  processedScreenStream: MediaStream | null;\r\n  annotateScreenStream: boolean;\r\n  mainScreenCanvas: HTMLCanvasElement | null;\r\n  isScreenboardModalVisible: boolean;\r\n\r\n  // Control Buttons\r\n  micActive: boolean;\r\n  videoActive: boolean;\r\n  screenShareActive: boolean;\r\n  endCallActive: boolean;\r\n  participantsActive: boolean;\r\n  menuActive: boolean;\r\n  commentsActive: boolean;\r\n}\r\n\r\nexport const initialValuesState: InitialValuesStateType = {\r\n  // The following are the initial values\r\n\r\n  roomName: '',\r\n  member: '',\r\n  adminPasscode: '',\r\n  islevel: '1',\r\n  coHost: 'No coHost',\r\n  coHostResponsibility: [\r\n    { name: 'participants', value: false, dedicated: false },\r\n    { name: 'media', value: false, dedicated: false },\r\n    { name: 'waiting', value: false, dedicated: false },\r\n    { name: 'chat', value: false, dedicated: false },\r\n  ],\r\n  youAreCoHost: false,\r\n  youAreHost: false,\r\n  confirmedToRecord: false,\r\n  meetingDisplayType: 'media',\r\n  meetingVideoOptimized: false,\r\n  eventType: 'webinar',\r\n  participants: [],\r\n  filteredParticipants: [],\r\n  participantsCounter: 0,\r\n  participantsFilter: '',\r\n\r\n  validated: false,\r\n  localUIMode: false,\r\n  socket: {} as Socket,\r\n  localSocket: undefined,\r\n  roomData: null,\r\n  device: null,\r\n  apiKey: '',\r\n  apiUserName: '',\r\n  apiToken: '',\r\n  link: '',\r\n\r\n  consume_sockets: [],\r\n  rtpCapabilities: null,\r\n  roomRecvIPs: [],\r\n  meetingRoomParams: null,\r\n  itemPageLimit: 4,\r\n  audioOnlyRoom: false,\r\n  addForBasic: false,\r\n  screenPageLimit: 4,\r\n  shareScreenStarted: false,\r\n  shared: false,\r\n  targetOrientation: 'landscape',\r\n  targetResolution: 'sd',\r\n  targetResolutionHost: 'sd',\r\n  vidCons: { width: 640, height: 360 },\r\n  frameRate: 10,\r\n  hParams: {} as HParamsType,\r\n  vParams: {} as VParamsType,\r\n  screenParams: {} as ScreenParamsType,\r\n  aParams: {} as AParamsType,\r\n\r\n  // Initial Values for New Recording Fields\r\n  recordingAudioPausesLimit: 0,\r\n  recordingAudioPausesCount: 0,\r\n  recordingAudioSupport: false,\r\n  recordingAudioPeopleLimit: 0,\r\n  recordingAudioParticipantsTimeLimit: 0,\r\n  recordingVideoPausesCount: 0,\r\n  recordingVideoPausesLimit: 0,\r\n  recordingVideoSupport: false,\r\n  recordingVideoPeopleLimit: 0,\r\n  recordingVideoParticipantsTimeLimit: 0,\r\n  recordingAllParticipantsSupport: false,\r\n  recordingVideoParticipantsSupport: false,\r\n  recordingAllParticipantsFullRoomSupport: false,\r\n  recordingVideoParticipantsFullRoomSupport: false,\r\n  recordingPreferredOrientation: 'landscape',\r\n  recordingSupportForOtherOrientation: false,\r\n  recordingMultiFormatsSupport: false,\r\n\r\n  userRecordingParams: {\r\n    mainSpecs: {\r\n      mediaOptions: 'video',\r\n      audioOptions: 'all',\r\n      videoOptions: 'all',\r\n      videoType: 'fullDisplay',\r\n      videoOptimized: false,\r\n      recordingDisplayType: 'media',\r\n      addHLS: false,\r\n    },\r\n    dispSpecs: {\r\n      nameTags: true,\r\n      backgroundColor: '#000000',\r\n      nameTagsColor: '#ffffff',\r\n      orientationVideo: 'portrait',\r\n    },\r\n  },\r\n\r\n  canRecord: false,\r\n  startReport: false,\r\n  endReport: false,\r\n  recordTimerInterval: null,\r\n  recordStartTime: 0,\r\n  recordElapsedTime: 0,\r\n  isTimerRunning: false,\r\n  canPauseResume: false,\r\n  recordChangeSeconds: 15000,\r\n  pauseLimit: 0,\r\n  pauseRecordCount: 0,\r\n  canLaunchRecord: true,\r\n  stopLaunchRecord: false,\r\n\r\n  // Room properties\r\n  participantsAll: [],\r\n  firstAll: false,\r\n  updateMainWindow: false,\r\n  first_round: false,\r\n  landScaped: false,\r\n  lock_screen: false,\r\n  screenId: '',\r\n  allVideoStreams: [],\r\n  newLimitedStreams: [],\r\n  newLimitedStreamsIDs: [],\r\n  activeSounds: [],\r\n  screenShareIDStream: '',\r\n  screenShareNameStream: '',\r\n  adminIDStream: '',\r\n  adminNameStream: '',\r\n  youYouStream: [],\r\n  youYouStreamIDs: [],\r\n  localStream: null,\r\n  recordStarted: false,\r\n  recordResumed: false,\r\n  recordPaused: false,\r\n  recordStopped: false,\r\n  adminRestrictSetting: false,\r\n  videoRequestState: null,\r\n  videoRequestTime: 0,\r\n  videoAction: false,\r\n  localStreamVideo: null,\r\n  userDefaultVideoInputDevice: '',\r\n  currentFacingMode: 'user',\r\n  prevFacingMode: 'user',\r\n  defVideoID: '',\r\n  allowed: false,\r\n  dispActiveNames: [],\r\n  activeNames: [],\r\n  prevActiveNames: [],\r\n  p_activeNames: [],\r\n  p_dispActiveNames: [],\r\n  membersReceived: false,\r\n  deferScreenReceived: false,\r\n  hostFirstSwitch: false,\r\n  micAction: false,\r\n  screenAction: false,\r\n  chatAction: false,\r\n  audioRequestState: null,\r\n  screenRequestState: null,\r\n  chatRequestState: null,\r\n  audioRequestTime: 0,\r\n  screenRequestTime: 0,\r\n  chatRequestTime: 0,\r\n  updateRequestIntervalSeconds: 240,\r\n  oldSoundIds: [],\r\n  hostLabel: 'Host',\r\n  mainScreenFilled: false,\r\n  localStreamScreen: null,\r\n  screenAlreadyOn: false,\r\n  chatAlreadyOn: false,\r\n  redirectURL: '',\r\n  oldAllStreams: [],\r\n  adminVidID: '',\r\n  streamNames: [],\r\n  non_alVideoStreams: [],\r\n  sortAudioLoudness: false,\r\n  audioDecibels: [],\r\n  mixed_alVideoStreams: [],\r\n  non_alVideoStreams_muted: [],\r\n  paginatedStreams: [],\r\n  localStreamAudio: null,\r\n  defAudioID: '',\r\n  userDefaultAudioInputDevice: '',\r\n  userDefaultAudioOutputDevice: '',\r\n  prevAudioInputDevice: '',\r\n  prevVideoInputDevice: '',\r\n  audioPaused: false,\r\n  mainScreenPerson: '',\r\n  adminOnMainScreen: false,\r\n  screenStates: [{\r\n    mainScreenPerson: \"\",\r\n    mainScreenProducerId: \"\",\r\n    mainScreenFilled: false,\r\n    adminOnMainScreen: false,\r\n  }],\r\n  prevScreenStates: [{\r\n    mainScreenPerson: \"\",\r\n    mainScreenProducerId: \"\",\r\n    mainScreenFilled: false,\r\n    adminOnMainScreen: false,\r\n  }],\r\n  updateDateState: null,\r\n  lastUpdate: null,\r\n  nForReadjustRecord: 0,\r\n  fixedPageLimit: 4,\r\n  removeAltGrid: false,\r\n  nForReadjust: 0,\r\n  reorderInterval: 30000,\r\n  fastReorderInterval: 10000,\r\n  lastReorderTime: 0,\r\n  audStreamNames: [],\r\n  currentUserPage: 0,\r\n  mainHeightWidth: 0,\r\n  prevMainHeightWidth: 0,\r\n  prevDoPaginate: false,\r\n  doPaginate: false,\r\n  shareEnded: false,\r\n  lStreams: [],\r\n  chatRefStreams: [],\r\n  controlHeight: 0,\r\n  isWideScreen: false,\r\n  isMediumScreen: false,\r\n  isSmallScreen: false,\r\n  addGrid: false,\r\n  addAltGrid: false,\r\n  gridRows: 0,\r\n  gridCols: 0,\r\n  altGridRows: 0,\r\n  altGridCols: 0,\r\n  numberPages: 0,\r\n  currentStreams: [],\r\n  showMiniView: false,\r\n  nStream: null,\r\n  defer_receive: false,\r\n  allAudioStreams: [],\r\n  remoteScreenStream: [],\r\n  screenProducer: null,\r\n  localScreenProducer: null,\r\n  gotAllVids: false,\r\n  paginationHeightWidth: 40,\r\n  paginationDirection: 'horizontal',\r\n  gridSizes: { gridWidth: 0, gridHeight: 0, altGridWidth: 0, altGridHeight: 0 },\r\n  screenForceFullDisplay: false,\r\n  mainGridStream: [],\r\n  otherGridStreams: [[], []],\r\n  audioOnlyStreams: [],\r\n  videoInputs: [],\r\n  audioInputs: [],\r\n  meetingProgressTime: '00:00:00',\r\n  meetingElapsedTime: 0,\r\n  ref_participants: [],\r\n\r\n  // Messaging, event, modals, and other UI states\r\n  messages: [],\r\n  startDirectMessage: false,\r\n  directMessageDetails: null,\r\n  showMessagesBadge: false,\r\n  audioSetting: 'allow',\r\n  videoSetting: 'allow',\r\n  screenshareSetting: 'allow',\r\n  chatSetting: 'allow',\r\n  displayOption: 'media',\r\n  autoWave: true,\r\n  forceFullDisplay: true,\r\n  prevForceFullDisplay: false,\r\n  prevMeetingDisplayType: 'video',\r\n  waitingRoomFilter: '',\r\n  waitingRoomList: [],\r\n  waitingRoomCounter: 0,\r\n  filteredWaitingRoomList: [],\r\n  requestFilter: '',\r\n  requestList: [],\r\n  requestCounter: 0,\r\n  filteredRequestList: [],\r\n  totalReqWait: 0,\r\n  alertVisible: false,\r\n  alertMessage: '',\r\n  alertType: 'success',\r\n  alertDuration: 3000,\r\n  progressTimerVisible: true,\r\n  progressTimerValue: 0,\r\n  isMenuModalVisible: false,\r\n  isRecordingModalVisible: false,\r\n  isSettingsModalVisible: false,\r\n  isRequestsModalVisible: false,\r\n  isWaitingModalVisible: false,\r\n  isCoHostModalVisible: false,\r\n  isMediaSettingsModalVisible: false,\r\n  isDisplaySettingsModalVisible: false,\r\n  isParticipantsModalVisible: false,\r\n  isMessagesModalVisible: false,\r\n  isConfirmExitModalVisible: false,\r\n  isConfirmHereModalVisible: false,\r\n  isShareEventModalVisible: false,\r\n  isLoadingModalVisible: false,\r\n\r\n  recordingMediaOptions: 'video',\r\n  recordingAudioOptions: 'all',\r\n  recordingVideoOptions: 'all',\r\n  recordingVideoType: 'fullDisplay',\r\n  recordingVideoOptimized: false,\r\n  recordingDisplayType: 'video',\r\n  recordingAddHLS: true,\r\n  recordingNameTags: true,\r\n  recordingBackgroundColor: '#83c0e9',\r\n  recordingNameTagsColor: '#ffffff',\r\n  recordingAddText: false,\r\n  recordingCustomText: 'Add Text',\r\n  recordingCustomTextPosition: 'top',\r\n  recordingCustomTextColor: '#ffffff',\r\n  recordingOrientationVideo: 'landscape',\r\n  clearedToResume: true,\r\n  clearedToRecord: true,\r\n  recordState: 'green',\r\n  showRecordButtons: false,\r\n  recordingProgressTime: '00:00:00',\r\n  audioSwitching: false,\r\n  videoSwitching: false,\r\n  videoAlreadyOn: false,\r\n  audioAlreadyOn: false,\r\n  componentSizes: { mainHeight: 0, otherHeight: 0, mainWidth: 0, otherWidth: 0 },\r\n  hasCameraPermission: false,\r\n  hasAudioPermission: false,\r\n  transportCreated: false,\r\n  localTransportCreated: false,\r\n  transportCreatedVideo: false,\r\n  transportCreatedAudio: false,\r\n  transportCreatedScreen: false,\r\n  producerTransport: null,\r\n  localProducerTransport: null,\r\n  videoProducer: null,\r\n  localVideoProducer: null,\r\n  params: {} as ProducerOptions,\r\n  videoParams: {} as ProducerOptions,\r\n  audioParams: {} as ProducerOptions,\r\n  audioProducer: null,\r\n  localAudioProducer: null,\r\n  consumerTransports: [],\r\n  consumingTransports: [],\r\n\r\n  // Polls\r\n  polls: [],\r\n  poll: null,\r\n  isPollModalVisible: false,\r\n\r\n  // Background\r\n  customImage: '',\r\n  selectedImage: '',\r\n  segmentVideo: null,\r\n  selfieSegmentation: null,\r\n  pauseSegmentation: false,\r\n  processedStream: null,\r\n  keepBackground: false,\r\n  backgroundHasChanged: false,\r\n  virtualStream: null,\r\n  mainCanvas: null,\r\n  prevKeepBackground: false,\r\n  appliedBackground: false,\r\n  isBackgroundModalVisible: false,\r\n  autoClickBackground: false,\r\n\r\n  // Breakout Rooms\r\n  breakoutRooms: [],\r\n  currentRoomIndex: 0,\r\n  canStartBreakout: false,\r\n  breakOutRoomStarted: false,\r\n  breakOutRoomEnded: false,\r\n  hostNewRoom: -1,\r\n  limitedBreakRoom: [],\r\n  mainRoomsLength: 0,\r\n  memberRoom: -1,\r\n  isBreakoutRoomsModalVisible: false,\r\n\r\n  // Whiteboard\r\n  whiteboardUsers: [],\r\n  currentWhiteboardIndex: 0,\r\n  canStartWhiteboard: false,\r\n  whiteboardStarted: false,\r\n  whiteboardEnded: false,\r\n  whiteboardLimit: 4,\r\n  isWhiteboardModalVisible: false,\r\n  isConfigureWhiteboardModalVisible: false,\r\n  shapes: [],\r\n  useImageBackground: true,\r\n  redoStack: [],\r\n  undoStack: [],\r\n  canvasStream: null,\r\n  canvasWhiteboard: null,\r\n\r\n  // Screenboard\r\n  canvasScreenboard: null,\r\n  processedScreenStream: null,\r\n  annotateScreenStream: false,\r\n  mainScreenCanvas: null,\r\n  isScreenboardModalVisible: false,\r\n\r\n  // Control Buttons\r\n  micActive: false,\r\n  videoActive: false,\r\n  screenShareActive: false,\r\n  endCallActive: false,\r\n  participantsActive: false,\r\n  menuActive: false,\r\n  commentsActive: false,\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { Message } from '../@types/types';\r\nexport interface ReceiveRoomMessagesOptions {\r\n  socket: Socket;\r\n  roomName: string;\r\n  updateMessages: (messages: Message[]) => void;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type ReceiveRoomMessagesType = (options: ReceiveRoomMessagesOptions) => Promise<void>;\r\n\r\n/**\r\n * Asynchronously retrieves and updates messages for a specified room from the server.\r\n *\r\n * This method communicates with the server to request messages for a specific room and updates the messages array accordingly.\r\n *\r\n * @param {ReceiveRoomMessagesOptions} options - The function parameters.\r\n * @param {Socket} options.socket - The socket instance used for communication.\r\n * @param {string} options.roomName - The name of the room to retrieve messages for.\r\n * @param {function} options.updateMessages - Function to update the messages array with the retrieved messages.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the messages have been successfully retrieved and updated.\r\n *\r\n * @throws Will log an error message if an error occurs during the process of retrieving messages.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = {\r\n *   socket: socketInstance,\r\n *   roomName: 'Room1',\r\n *   updateMessages: (messages) => {\r\n *     // Logic to update messages\r\n *   },\r\n * };\r\n *\r\n * await receiveRoomMessages(options);\r\n * ```\r\n */\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ReceiveRoomMessages {\r\n  /**\r\n   * Asynchronously retrieves and updates messages for a specified room from the server.\r\n   *\r\n   * @param {object} options - The function parameters.\r\n   * @param {object} options.parameters - Additional parameters needed for the function.\r\n   * @param {string} options.parameters.roomName - The name of the room to retrieve messages for.\r\n   * @param {function} options.parameters.updateMessages - Function to update the messages array.\r\n   */\r\n  async receiveRoomMessages({\r\n    socket,\r\n    roomName,\r\n    updateMessages,\r\n  }: ReceiveRoomMessagesOptions): Promise<void> {\r\n    try {\r\n      // Retrieve messages from the server\r\n      await new Promise<void>((resolve, reject) => {\r\n        socket.emit('getMessage', { roomName }, async ({ messages_ }: { messages_: Message[] }) => {\r\n          try {\r\n            const updatedMessages = messages_;\r\n            updateMessages(updatedMessages);\r\n            resolve();\r\n          } catch (err) {\r\n            reject(err);\r\n          }\r\n        });\r\n      });\r\n    } catch (error: any) {\r\n      // Handle errors if any\r\n      console.log('Error tuning messages:', error.message);\r\n    }\r\n  }\r\n}\r\n","import { Component, Input, Inject } from '@angular/core';\r\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\n\r\n/**\r\n * MenuWidget displays an icon with an optional badge counter, used for notifications or alerts.\r\n *\r\n * @selector app-menu-widget\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule\r\n *\r\n * @inputs\r\n * - `icon` (IconDefinition): FontAwesome icon to display.\r\n * - `iconColor` (string): Color of the icon. Default is 'black'.\r\n * - `badgeValue` (number): The numeric value displayed within the badge.\r\n * - `showBadge` (boolean): Controls the visibility of the badge. Default is false.\r\n *\r\n * @example\r\n * ```html\r\n * <app-menu-widget\r\n *   [icon]=\"faBell\"\r\n *   iconColor=\"blue\"\r\n *   [badgeValue]=\"5\"\r\n *   [showBadge]=\"true\"\r\n * ></app-menu-widget>\r\n * ```\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-menu-widget',\r\n    template: `\r\n    <div style=\"position: relative; display: inline-block;\">\r\n      <fa-icon [icon]=\"icon\" size=\"lg\" [ngStyle]=\"{ color: iconColor }\"></fa-icon>\r\n      <div\r\n        style=\"\r\n      position: absolute;\r\n      top: -8px;\r\n      right: -8px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    \"\r\n      >\r\n        <div\r\n          style=\"\r\n        background-color: red;\r\n        border-radius: 8px;\r\n        padding: 4px 8px;\r\n        min-width: 16px; /* Ensure a minimum width for consistent circular shape */\r\n        min-height: 16px; /* Ensure a minimum height for consistent circular shape */\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n      \"\r\n          *ngIf=\"showBadge\"\r\n        >\r\n          <span style=\"color: white; font-size: 8px; font-weight: bold;\">\r\n            {{ badgeValue }}\r\n          </span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  `,\r\n    imports: [CommonModule, FontAwesomeModule]\r\n})\r\nexport class MenuWidget {\r\n  @Input() icon!: IconDefinition;\r\n  @Input() iconColor = 'black';\r\n  @Input() badgeValue!: number;\r\n  @Input() showBadge = false;\r\n\r\n  constructor(\r\n    @Inject('icon') icon: IconDefinition,\r\n    @Inject('iconColor') iconColor: string,\r\n    @Inject('badgeValue') badgeValue: number,\r\n    @Inject('showBadge') showBadge: boolean,\r\n  ) {\r\n    this.icon = icon;\r\n    this.iconColor = iconColor;\r\n    this.badgeValue = badgeValue;\r\n    this.showBadge = showBadge;\r\n  }\r\n}\r\n","import { Component, Input, Inject } from '@angular/core';\r\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\n\r\n\r\n/**\r\n * MessageWidget displays an icon with an optional badge counter, useful for unread message notifications.\r\n *\r\n * @selector app-message-widget\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule\r\n *\r\n * @inputs\r\n * - `icon` (IconDefinition): FontAwesome icon to represent the message feature.\r\n * - `iconColor` (string): Color of the icon. Default is 'black'.\r\n * - `badgeValue` (number): Numeric value displayed in the badge, e.g., unread message count.\r\n * - `showBadge` (boolean): Controls the visibility of the badge. Default is false.\r\n *\r\n * @example\r\n * ```html\r\n * <app-message-widget\r\n *   [icon]=\"faEnvelope\"\r\n *   iconColor=\"blue\"\r\n *   [badgeValue]=\"3\"\r\n *   [showBadge]=\"true\"\r\n * ></app-message-widget>\r\n * ```\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-message-widget',\r\n    template: `\r\n    <div style=\"position: relative; display: inline-block;\">\r\n      <fa-icon [icon]=\"icon\" size=\"lg\" [ngStyle]=\"{ color: iconColor }\"></fa-icon>\r\n      <div\r\n        style=\"\r\n      position: absolute;\r\n      top: -8px;\r\n      right: -8px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    \"\r\n      >\r\n        <div\r\n          style=\"\r\n        background-color: red;\r\n        border-radius: 8px;\r\n        padding: 4px 8px;\r\n        min-width: 16px; /* Ensure a minimum width for consistent circular shape */\r\n        min-height: 16px; /* Ensure a minimum height for consistent circular shape */\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n      \"\r\n          *ngIf=\"showBadge\"\r\n        >\r\n          <span style=\"color: white; font-size: 8px; font-weight: bold;\">\r\n            {{ badgeValue }}\r\n          </span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  `,\r\n    imports: [CommonModule, FontAwesomeModule]\r\n})\r\nexport class MessageWidget {\r\n  @Input() icon!: IconDefinition;\r\n  @Input() iconColor = 'black';\r\n  @Input() badgeValue!: number;\r\n  @Input() showBadge = false;\r\n\r\n  constructor(\r\n    @Inject('icon') icon: IconDefinition,\r\n    @Inject('iconColor') iconColor: string,\r\n    @Inject('badgeValue') badgeValue: number,\r\n    @Inject('showBadge') showBadge: boolean,\r\n  ) {\r\n    this.icon = icon;\r\n    this.iconColor = iconColor;\r\n    this.badgeValue = badgeValue;\r\n    this.showBadge = showBadge;\r\n  }\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlButtonsAltComponent } from '../control-buttons-alt-component/control-buttons-alt-component.component';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\r\n\r\ninterface RecordButton {\r\n  icon?: IconDefinition;\r\n  active?: boolean;\r\n  onPress?: () => void;\r\n  activeColor?: string;\r\n  inActiveColor?: string;\r\n  text?: string;\r\n}\r\n\r\n/**\r\n * MenuRecordWidget is a configurable widget that displays a set of record control buttons, with customizable icon, color, and actions.\r\n *\r\n * @selector app-menu-record-widget\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule, ControlButtonsAltComponent\r\n *\r\n * @inputs\r\n * - `buttons` (RecordButton[]): Array of record button configurations, each with properties for icon, active state, colors, and actions.\r\n * - `direction` ('horizontal' | 'vertical'): Layout direction for the buttons. Default is 'horizontal'.\r\n *\r\n * @example\r\n * ```html\r\n * <app-menu-record-widget\r\n *   [buttons]=\"[\r\n *     { icon: faCircle, text: 'Record', onPress: startRecording, activeColor: 'red' },\r\n *     { icon: faStop, text: 'Stop', onPress: stopRecording, inActiveColor: 'gray' }\r\n *   ]\"\r\n *   direction=\"horizontal\"\r\n * ></app-menu-record-widget>\r\n * ```\r\n **/\r\n\r\n\r\n@Component({\r\n    selector: 'app-menu-record-widget',\r\n    template: `\r\n    <app-control-buttons-alt-component\r\n      [buttons]=\"buttons\"\r\n      [direction]=\"direction\"\r\n      [showAspect]=\"true\"\r\n    ></app-control-buttons-alt-component>\r\n  `,\r\n    imports: [CommonModule, FontAwesomeModule, ControlButtonsAltComponent]\r\n})\r\nexport class MenuRecordWidget {\r\n  buttons: RecordButton[] = [];\r\n  direction: 'horizontal' | 'vertical' = 'horizontal';\r\n\r\n  constructor(\r\n    @Inject('buttons') buttons: RecordButton[],\r\n    @Inject('direction') direction: 'horizontal' | 'vertical',\r\n  ) {\r\n    this.buttons = buttons;\r\n    this.direction = direction;\r\n  }\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/**\r\n * RecordTimerWidget displays the current recording progress time.\r\n *\r\n * @selector app-record-timer-widget\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @inputs\r\n * - `recordingProgressTime` (string): The time to display as recording progress.\r\n *\r\n * @example\r\n * ```html\r\n * <app-record-timer-widget [recordingProgressTime]=\"'00:05:23'\"></app-record-timer-widget>\r\n * ```\r\n **/\r\n\r\n\r\n@Component({\r\n    selector: 'app-record-timer-widget',\r\n    template: `\r\n    <div style=\"background-color: transparent; border-width: 0; padding: 0; margin: 2;\">\r\n      <span style=\"background-color: transparent; border-width: 0; padding: 0; margin: 0;\">\r\n        {{ recordingProgressTime }}\r\n      </span>\r\n    </div>\r\n  `,\r\n    imports: [CommonModule]\r\n})\r\nexport class RecordTimerWidget {\r\n  recordingProgressTime = '';\r\n\r\n  constructor(@Inject('recordingProgressTime') recordingProgressTime: string) {\r\n    this.recordingProgressTime = recordingProgressTime;\r\n  }\r\n}\r\n","import { Component, Input, Inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\r\n\r\n/**\r\n * MenuParticipantsWidget displays an icon and a counter for participants in a compact, customizable widget.\r\n *\r\n * @selector app-menu-participants-widget\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule\r\n *\r\n * @inputs\r\n * - `icon` (IconDefinition): The FontAwesome icon to display.\r\n * - `iconColor` (string): The color of the icon. Default is 'black'.\r\n * - `participantsCounter` (number): The number of participants displayed next to the icon.\r\n *\r\n * @example\r\n * ```html\r\n * <app-menu-participants-widget\r\n *   [icon]=\"faUsers\"\r\n *   iconColor=\"blue\"\r\n *   [participantsCounter]=\"10\"\r\n * ></app-menu-participants-widget>\r\n * ```\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-menu-participants-widget',\r\n    template: `\r\n    <div\r\n      style=\"background-color: transparent; border-width: 0; padding: 0; margin: 5px; display: flex; flex-direction: row; align-items: center; justify-content: center;\"\r\n    >\r\n      <fa-icon [icon]=\"icon\" size=\"lg\" [ngStyle]=\"{ color: iconColor }\"></fa-icon>\r\n      <span style=\"background-color: transparent; border-width: 0; padding: 0; margin: 0;\">\r\n        {{ participantsCounter }}\r\n      </span>\r\n    </div>\r\n  `,\r\n    imports: [CommonModule, FontAwesomeModule]\r\n})\r\nexport class MenuParticipantsWidget {\r\n  @Input() icon!: IconDefinition;\r\n  @Input() iconColor = 'black';\r\n  @Input() participantsCounter!: number;\r\n\r\n  constructor(\r\n    @Inject('icon') icon: IconDefinition,\r\n    @Inject('iconColor') iconColor: string,\r\n    @Inject('participantsCounter') participantsCounter: number,\r\n  ) {\r\n    this.icon = icon;\r\n    this.iconColor = iconColor;\r\n    this.participantsCounter = participantsCounter;\r\n  }\r\n}\r\n","import { Component, Input, Inject, Optional } from '@angular/core';\r\nimport { faDesktop, faBan } from '@fortawesome/free-solid-svg-icons';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\n\r\n/**\r\n * ScreenShareWidget - Component representing a screen share button with an optional disabled state.\r\n *\r\n * This component displays a screen share icon (desktop icon) and an overlay ban icon if disabled.\r\n * The disabled state can be controlled either by an injected dependency or an @Input property.\r\n *\r\n * @component\r\n * @name ScreenShareWidget\r\n * @example\r\n * ```html\r\n * <app-screen-share-button [disabled]=\"isDisabled\"></app-screen-share-button>\r\n * ```\r\n *\r\n * @param {boolean} disabled - Optional input to toggle the disabled state of the button.\r\n *\r\n * @property {boolean} computedDisabled - Internal state to determine if the button is disabled, controlled by either injected value or @Input property.\r\n * @property {faDesktop} faDesktop - FontAwesome desktop icon for screen sharing.\r\n * @property {faBan} faBan - FontAwesome ban icon indicating a disabled state.\r\n *\r\n * @example\r\n * <app-screen-share-button [disabled]=\"true\"></app-screen-share-button>\r\n *\r\n * @constructor\r\n * @param {boolean} [injectedDisabled] - Optional injected disabled value.\r\n *\r\n * @method ngOnChanges - Updates the computedDisabled property based on changes to the @Input disabled.\r\n */\r\n\r\n\r\n@Component({\r\n    selector: 'app-screen-share-button',\r\n    imports: [CommonModule, FontAwesomeModule],\r\n    template: `\r\n    <div style=\"position: relative; display: inline-block;\">\r\n      <!-- Desktop icon, change color based on disabled state -->\r\n      <fa-icon [icon]=\"faDesktop\" size=\"lg\" [style.color]=\"computedDisabled ? 'black' : 'green'\">\r\n      </fa-icon>\r\n\r\n      <!-- Red Ban icon on top if disabled -->\r\n      <fa-icon\r\n        *ngIf=\"computedDisabled\"\r\n        [icon]=\"faBan\"\r\n        size=\"lg\"\r\n        style=\"color: red; position: absolute; top: 0; right: 0;\"\r\n      >\r\n      </fa-icon>\r\n    </div>\r\n  `\r\n})\r\nexport class ScreenShareWidget {\r\n  @Input() disabled = false; // Input to toggle disabled state\r\n\r\n  faDesktop = faDesktop;\r\n  faBan = faBan;\r\n\r\n  computedDisabled: boolean;\r\n\r\n  constructor(@Optional() @Inject('disabled') private injectedDisabled: boolean) {\r\n    // Use the injected value if provided, otherwise fall back to the @Input value\r\n    this.computedDisabled = this.injectedDisabled != null ? this.injectedDisabled : this.disabled;\r\n  }\r\n\r\n  ngOnChanges() {\r\n    // Update computedDisabled whenever the Input changes\r\n    if (this.injectedDisabled == null) {\r\n      this.computedDisabled = this.disabled;\r\n    }\r\n  }\r\n}\r\n","import { ResponseJoinLocalRoom, ResponseJoinRoom } from \"../../@types/types\";\r\n\r\nexport interface CreateResponseJoinRoomOptions {\r\n  localRoom: ResponseJoinLocalRoom;\r\n}\r\n\r\n// Export the type definition for the function\r\nexport type CreateResponseJoinRoomType = (options: CreateResponseJoinRoomOptions) => Promise<ResponseJoinRoom>;\r\n\r\n/**\r\n * Creates a ResponseJoinRoom object from a ResponseJoinLocalRoom object.\r\n *\r\n * @param {CreateResponseJoinRoomOptions} options - The options containing the ResponseJoinLocalRoom object.\r\n * @returns {Promise<ResponseJoinRoom>} - A promise that resolves to a ResponseJoinRoom object.\r\n *\r\n * @example\r\n * ```typescript\r\n * const localRoom: ResponseJoinLocalRoom = {\r\n *   rtpCapabilities: null,\r\n *   isHost: true,\r\n *   eventStarted: false,\r\n *   isBanned: false,\r\n *   hostNotJoined: false,\r\n *   eventRoomParams: { /* MeetingRoomParams * / },\r\n *   recordingParams: { /* RecordingParams * / },\r\n *   secureCode: \"12345\",\r\n *   mediasfuURL: \"https://example.com\",\r\n *   apiKey: \"api-key\",\r\n *   apiUserName: \"user-name\",\r\n *   allowRecord: true,\r\n * };\r\n *\r\n * const joinRoom = await createResponseJoinRoom({ localRoom });\r\n * console.log(joinRoom);\r\n * ```\r\n */\r\n\r\nexport const createResponseJoinRoom: CreateResponseJoinRoomType = async ({\r\n  localRoom,\r\n}: CreateResponseJoinRoomOptions): Promise<ResponseJoinRoom> => {\r\n  return {\r\n    rtpCapabilities: localRoom.rtpCapabilities ?? null,\r\n    success: localRoom.rtpCapabilities !== null,\r\n    roomRecvIPs: [], // Placeholder; populate with necessary values\r\n    meetingRoomParams: localRoom.eventRoomParams,\r\n    recordingParams: localRoom.recordingParams,\r\n    secureCode: localRoom.secureCode,\r\n    recordOnly: false, // Default assumption unless additional logic applies\r\n    isHost: localRoom.isHost,\r\n    safeRoom: false, // Default assumption unless additional logic applies\r\n    autoStartSafeRoom: false, // Default assumption unless additional logic applies\r\n    safeRoomStarted: false, // Default assumption unless additional logic applies\r\n    safeRoomEnded: false, // Default assumption unless additional logic applies\r\n    reason: localRoom.isBanned ? \"User is banned from the room.\" : undefined,\r\n    banned: localRoom.isBanned,\r\n    suspended: false, // Default assumption unless additional logic applies\r\n    noAdmin: localRoom.hostNotJoined,\r\n  };\r\n};\r\n","import {\r\n  Component,\r\n  HostListener,\r\n  Injector,\r\n  ChangeDetectorRef,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  faPlayCircle,\r\n  faPauseCircle,\r\n  faStopCircle,\r\n  faDotCircle,\r\n  faRecordVinyl,\r\n  faCog,\r\n  faUsers,\r\n  faClock,\r\n  faUserPlus,\r\n  faTools,\r\n  faDesktop,\r\n  faPoll,\r\n  faUserFriends,\r\n  faChalkboardTeacher,\r\n  faMicrophone,\r\n  faMicrophoneSlash,\r\n  faVideo,\r\n  faVideoSlash,\r\n  faShareAlt,\r\n  faSync,\r\n  faPhone,\r\n  faBars,\r\n  faComments,\r\n  faChartBar,\r\n} from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport { initialValuesState } from '../../methods/utils/initial-values.util';\r\n\r\nimport { MainAspectComponent } from '../display-components/main-aspect-component/main-aspect-component.component';\r\nimport { LoadingModal } from '../display-components/loading-modal/loading-modal.component';\r\nimport { ControlButtonsComponent } from '../display-components/control-buttons-component/control-buttons-component.component';\r\nimport { ControlButtonsAltComponent } from '../display-components/control-buttons-alt-component/control-buttons-alt-component.component';\r\nimport { ControlButtonsComponentTouch } from '../display-components/control-buttons-component-touch/control-buttons-component-touch.component';\r\nimport { OtherGridComponent } from '../display-components/other-grid-component/other-grid-component.component';\r\nimport { MainScreenComponent } from '../display-components/main-screen-component/main-screen-component.component';\r\nimport { MainGridComponent } from '../display-components/main-grid-component/main-grid-component.component';\r\nimport { SubAspectComponent } from '../display-components/sub-aspect-component/sub-aspect-component.component';\r\nimport { MainContainerComponent } from '../display-components/main-container-component/main-container-component.component';\r\nimport { AlertComponent } from '../display-components/alert-component/alert.component.component';\r\nimport { MenuModal } from '../menu-components/menu-modal/menu-modal.component';\r\nimport { RecordingModal } from '../recording-components/recording-modal/recording-modal.component';\r\nimport { RequestsModal } from '../requests-components/requests-modal/requests-modal.component';\r\nimport { WaitingRoomModal } from '../waiting-components/waiting-room-modal.component';\r\nimport { DisplaySettingsModal } from '../display-settings-components/display-settings-modal.component';\r\nimport { EventSettingsModal } from '../event-settings-components/event-settings-modal/event-settings-modal.component';\r\nimport { CoHostModal } from '../co-host-components/co-host-modal/co-host-modal.component';\r\nimport { ParticipantsModal } from '../participants-components/participants-modal/participants-modal.component';\r\nimport { MessagesModal } from '../message-components/messages-modal/messages-modal.component';\r\nimport { MediaSettingsModal } from '../media-settings-components/media-settings-modal/media-settings-modal.component';\r\nimport { ConfirmExitModal } from '../exit-components/confirm-exit-modal/confirm-exit-modal.component';\r\nimport { ConfirmHereModal } from '../misc-components/confirm-here-modal/confirm-here-modal.component';\r\nimport { ShareEventModal } from '../misc-components/share-event-modal/share-event-modal.component';\r\nimport {\r\n  WelcomePage,\r\n  WelcomePageOptions,\r\n} from '../misc-components/welcome-page/welcome-page.component';\r\n\r\nimport { PollModal } from '../polls-components/poll-modal/poll-modal.component';\r\nimport { BackgroundModal } from '../background-components/background-modal/background-modal.component';\r\nimport { BreakoutRoomsModal } from '../breakout-components/breakout-rooms-modal.component';\r\nimport { ConfigureWhiteboardModal } from '../whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component';\r\nimport { Whiteboard } from '../whiteboard-components/whiteboard/whiteboard.component';\r\nimport { Screenboard } from '../screenboard-components/screenboard/screenboard.component';\r\nimport { ScreenboardModal } from '../screenboard-components/screenboard-modal/screenboard-modal.component';\r\n// pagination and display of media (samples)\r\nimport { Pagination } from '../display-components/pagination/pagination.component';\r\nimport { FlexibleGrid } from '../display-components/flexible-grid/flexible-grid.component';\r\nimport { FlexibleVideo } from '../display-components/flexible-video/flexible-video.component';\r\nimport { AudioGrid } from '../display-components/audio-grid/audio-grid.component';\r\n\r\nimport { MenuWidget } from '../display-components/control-widgets/menu-widget.component';\r\nimport { MessageWidget } from '../display-components/control-widgets/message-widget.component';\r\nimport { MenuRecordWidget } from '../display-components/control-widgets/menu-record-widget.component';\r\nimport { RecordTimerWidget } from '../display-components/control-widgets/record-timer-widget.component';\r\nimport { MenuParticipantsWidget } from '../display-components/control-widgets/menu-participants-widget.component';\r\nimport { ScreenShareWidget } from '../display-components/control-widgets/screenshare-widget.component';\r\n\r\nimport {\r\n  ButtonTouch,\r\n  ResponseJoinRoom,\r\n  ResponseJoinLocalRoom,\r\n  CoHostResponsibility,\r\n  EventType,\r\n  Participant,\r\n  ConsumeSocket,\r\n  MeetingRoomParams,\r\n  VidCons,\r\n  HParamsType,\r\n  VParamsType,\r\n  ScreenParamsType,\r\n  AParamsType,\r\n  UserRecordingParams,\r\n  Stream,\r\n  AudioDecibels,\r\n  ScreenState,\r\n  GridSizes,\r\n  CustomMediaComponent,\r\n  Message,\r\n  WaitingRoomParticipant,\r\n  ComponentSizes,\r\n  Transport as TransportType,\r\n  Shape,\r\n  Poll,\r\n  BreakoutParticipant,\r\n  WhiteboardUser,\r\n  Request,\r\n  AllMembersData,\r\n  AllMembersRestData,\r\n  BreakoutRoomUpdatedData,\r\n  AllWaitingRoomMembersData,\r\n  MainButtonAlt,\r\n  MainCustomButton,\r\n  RecordParams,\r\n  SeedData,\r\n  UpdatedCoHostData,\r\n  Settings,\r\n  UpdateConsumingDomainsData,\r\n  RecordingNoticeData,\r\n  HostRequestResponseData,\r\n  PollUpdatedData,\r\n  PreJoinPageOptions,\r\n  CreateMediaSFURoomOptions,\r\n  JoinMediaSFURoomOptions,\r\n  JoinRoomOnMediaSFUType,\r\n  CreateRoomOnMediaSFUType,\r\n} from '../../@types/types';\r\nimport { createResponseJoinRoom } from '../../methods/utils/create-response-join-room.util';\r\n\r\n//import methods for control (samples)\r\n// Import methods for control (samples)\r\nimport { LaunchMenuModal } from '../../methods/menu-methods/launch-menu-modal.service';\r\nimport { LaunchRecording } from '../../methods/recording-methods/launch-recording.service';\r\nimport { StartRecording } from '../../methods/recording-methods/start-recording.service';\r\nimport { ConfirmRecording } from '../../methods/recording-methods/confirm-recording.service';\r\nimport { LaunchWaiting } from '../../methods/waiting-methods/launch-waiting.service';\r\nimport { launchCoHost } from '../../methods/co-host-methods/launch-co-host.service';\r\nimport { LaunchMediaSettings } from '../../methods/media-settings-methods/launch-media-settings.service';\r\nimport { LaunchDisplaySettings } from '../../methods/display-settings-methods/launch-display-settings.service';\r\nimport { LaunchSettings } from '../../methods/settings-methods/launch-settings.service';\r\nimport { LaunchRequests } from '../../methods/requests-methods/launch-requests.service';\r\nimport { LaunchParticipants } from '../../methods/participants-methods/launch-participants.service';\r\nimport { LaunchMessages } from '../../methods/message-methods/launch-messages.service';\r\nimport { LaunchConfirmExit } from '../../methods/exit-methods/launch-confirm-exit.service';\r\n\r\nimport { LaunchPoll } from '../../methods/polls-methods/launch-poll.service';\r\nimport { LaunchBreakoutRooms } from '../../methods/breakout-room-methods/launch-breakout-rooms.service';\r\nimport { LaunchConfigureWhiteboard } from '../../methods/whiteboard-methods/launch-configure-whiteboard.service';\r\n\r\n// mediasfu functions -- examples\r\nimport { SocketManager } from '../../sockets/socket-manager.service';\r\nimport { JoinRoomClient } from '../../producer-client/producer-client-emits/join-room-client.service';\r\nimport { JoinLocalRoom } from '../../producers/producer-emits/join-local-room.service';\r\nimport { UpdateRoomParametersClient } from '../../producer-client/producer-client-emits/update-room-parameters-client.service';\r\nimport { CreateDeviceClient } from '../../producer-client/producer-client-emits/create-device-client.service';\r\n\r\nimport { SwitchVideoAlt } from '../../methods/stream-methods/switch-video-alt.service';\r\nimport { ClickVideo } from '../../methods/stream-methods/click-video.service';\r\nimport { ClickAudio } from '../../methods/stream-methods/click-audio.service';\r\nimport { ClickScreenShare } from '../../methods/stream-methods/click-screen-share.service';\r\nimport { StreamSuccessVideo } from '../../consumers/stream-success-video.service';\r\nimport { StreamSuccessAudio } from '../../consumers/stream-success-audio.service';\r\nimport { StreamSuccessScreen } from '../../consumers/stream-success-screen.service';\r\nimport { StreamSuccessAudioSwitch } from '../../consumers/stream-success-audio-switch.service';\r\nimport { CheckPermission } from '../../consumers/check-permission.service';\r\n\r\n// mediasfu functions\r\nimport { UpdateMiniCardsGrid } from '../../consumers/update-mini-cards-grid.service';\r\nimport { MixStreams } from '../../consumers/mix-streams.service';\r\nimport { DispStreams } from '../../consumers/disp-streams.service';\r\nimport { StopShareScreen } from '../../consumers/stop-share-screen.service';\r\nimport { CheckScreenShare } from '../../consumers/check-screen-share.service';\r\nimport { StartShareScreen } from '../../consumers/start-share-screen.service';\r\nimport { RequestScreenShare } from '../../consumers/request-screen-share.service';\r\nimport { ReorderStreams } from '../../consumers/reorder-streams.service';\r\nimport { PrepopulateUserMedia } from '../../consumers/prepopulate-user-media.service';\r\nimport { GetVideos } from '../../consumers/get-videos.service';\r\nimport { RePort } from '../../consumers/re-port.service';\r\nimport { Trigger } from '../../consumers/trigger.service';\r\nimport { ConsumerResume } from '../../consumers/consumer-resume.service';\r\nimport { ConnectSendTransportAudio } from '../../consumers/connect-send-transport-audio.service';\r\nimport { ConnectSendTransportVideo } from '../../consumers/connect-send-transport-video.service';\r\nimport { ConnectSendTransportScreen } from '../../consumers/connect-send-transport-screen.service';\r\nimport { ProcessConsumerTransports } from '../../consumers/process-consumer-transports.service';\r\nimport { ResumePauseStreams } from '../../consumers/resume-pause-streams.service';\r\nimport { Readjust } from '../../consumers/readjust.service';\r\nimport { CheckGrid } from '../../consumers/check-grid.service';\r\nimport { GetEstimate } from '../../consumers/get-estimate.service';\r\nimport { CalculateRowsAndColumns } from '../../consumers/calculate-rows-and-columns.service';\r\nimport { AddVideosGrid } from '../../consumers/add-videos-grid.service';\r\nimport { OnScreenChanges } from '../../consumers/on-screen-changes.service';\r\nimport { sleep } from '../../methods/utils/sleep.util';\r\nimport { ChangeVids } from '../../consumers/change-vids.service';\r\nimport { CompareActiveNames } from '../../consumers/compare-active-names.service';\r\nimport { CompareScreenStates } from '../../consumers/compare-screen-states.service';\r\nimport { CreateSendTransport } from '../../consumers/create-send-transport.service';\r\nimport { ResumeSendTransportAudio } from '../../consumers/resume-send-transport-audio.service';\r\nimport { ReceiveAllPipedTransports } from '../../consumers/receive-all-piped-transports.service';\r\nimport { DisconnectSendTransportVideo } from '../../consumers/disconnect-send-transport-video.service';\r\nimport { DisconnectSendTransportAudio } from '../../consumers/disconnect-send-transport-audio.service';\r\nimport { DisconnectSendTransportScreen } from '../../consumers/disconnect-send-transport-screen.service';\r\nimport { ConnectSendTransport } from '../../consumers/connect-send-transport.service';\r\nimport { GetPipedProducersAlt } from '../../consumers/get-piped-producers-alt.service';\r\nimport { SignalNewConsumerTransport } from '../../consumers/signal-new-consumer-transport.service';\r\nimport { ConnectRecvTransport } from '../../consumers/connect-recv-transport.service';\r\nimport { ReUpdateInter } from '../../consumers/re-update-inter.service';\r\nimport { UpdateParticipantAudioDecibels } from '../../consumers/update-participant-audio-decibels.service';\r\nimport { CloseAndResize } from '../../consumers/close-and-resize.service';\r\nimport { AutoAdjust } from '../../consumers/auto-adjust.service';\r\nimport { SwitchUserVideoAlt } from '../../consumers/switch-user-video-alt.service';\r\nimport { SwitchUserVideo } from '../../consumers/switch-user-video.service';\r\nimport { SwitchUserAudio } from '../../consumers/switch-user-audio.service';\r\nimport { ReceiveRoomMessages } from '../../consumers/receive-room-messages.service';\r\nimport { FormatNumber } from '../../methods/utils/format-number.service';\r\nimport { ConnectIps } from '../../consumers/connect-ips.service';\r\nimport { ConnectLocalIps } from '../../consumers/connect-local-ips.service';\r\n\r\nimport { PollUpdated } from '../../methods/polls-methods/poll-updated.service';\r\nimport { HandleCreatePoll } from '../../methods/polls-methods/handle-create-poll.service';\r\nimport { HandleVotePoll } from '../../methods/polls-methods/handle-vote-poll.service';\r\nimport { HandleEndPoll } from '../../methods/polls-methods/handle-end-poll.service';\r\n\r\nimport { BreakoutRoomUpdated } from '../../methods/breakout-room-methods/breakout-room-updated.service';\r\n\r\nimport { StartMeetingProgressTimer } from '../../methods/utils/meeting-timer/start-meeting-progress-timer.service';\r\nimport { UpdateRecording } from '../../methods/recording-methods/update-recording.service';\r\nimport { StopRecording } from '../../methods/recording-methods/stop-recording.service';\r\n\r\nimport { UserWaiting } from '../../producers/socket-receive-methods/user-waiting.service';\r\nimport { PersonJoined } from '../../producers/socket-receive-methods/person-joined.service';\r\nimport { AllWaitingRoomMembers } from '../../producers/socket-receive-methods/all-waiting-room-members.service';\r\nimport { RoomRecordParams } from '../../producers/socket-receive-methods/room-record-params.service';\r\nimport { BanParticipant } from '../../producers/socket-receive-methods/ban-participant.service';\r\nimport { UpdatedCoHost } from '../../producers/socket-receive-methods/updated-co-host.service';\r\nimport { ParticipantRequested } from '../../producers/socket-receive-methods/participant-requested.service';\r\nimport { ScreenProducerId } from '../../producers/socket-receive-methods/screen-producer-id.service';\r\nimport { UpdateMediaSettings } from '../../producers/socket-receive-methods/update-media-settings.service';\r\nimport { ProducerMediaPaused } from '../../producers/socket-receive-methods/producer-media-paused.service';\r\nimport { ProducerMediaResumed } from '../../producers/socket-receive-methods/producer-media-resumed.service';\r\nimport { ProducerMediaClosed } from '../../producers/socket-receive-methods/producer-media-closed.service';\r\nimport { ControlMediaHost } from '../../producers/socket-receive-methods/control-media-host.service';\r\nimport { MeetingEnded } from '../../producers/socket-receive-methods/meeting-ended.service';\r\nimport { DisconnectUserSelf } from '../../producers/socket-receive-methods/disconnect-user-self.service';\r\nimport { ReceiveMessage } from '../../producers/socket-receive-methods/receive-message.service';\r\nimport { MeetingTimeRemaining } from '../../producers/socket-receive-methods/meeting-time-remaining.service';\r\nimport { MeetingStillThere } from '../../producers/socket-receive-methods/meeting-still-there.service';\r\nimport { StartRecords } from '../../producers/socket-receive-methods/start-records.service';\r\nimport { ReInitiateRecording } from '../../producers/socket-receive-methods/re-initiate-recording.service';\r\nimport { GetDomains } from '../../producers/socket-receive-methods/get-domains.service';\r\nimport { UpdateConsumingDomains } from '../../producers/socket-receive-methods/update-consuming-domains.service';\r\nimport { RecordingNotice } from '../../producers/socket-receive-methods/recording-notice.service';\r\nimport { TimeLeftRecording } from '../../producers/socket-receive-methods/time-left-recording.service';\r\nimport { StoppedRecording } from '../../producers/socket-receive-methods/stopped-recording.service';\r\nimport { HostRequestResponse } from '../../producers/socket-receive-methods/host-request-response.service';\r\nimport { AllMembers } from '../../producers/socket-receive-methods/all-members.service';\r\nimport { AllMembersRest } from '../../producers/socket-receive-methods/all-members-rest.service';\r\nimport { Disconnect } from '../../producers/socket-receive-methods/disconnect.service';\r\n\r\nimport { CaptureCanvasStream } from '../../methods/whiteboard-methods/capture-canvas-stream.service';\r\nimport { ResumePauseAudioStreams } from '../../consumers/resume-pause-audio-streams.service';\r\nimport { ProcessConsumerTransportsAudio } from '../../consumers/process-consumer-transports-audio.service';\r\n\r\nimport {\r\n  Device,\r\n  Producer,\r\n  ProducerOptions,\r\n  RtpCapabilities,\r\n  Transport,\r\n} from 'mediasoup-client/lib/types';\r\nimport { SelfieSegmentation } from '@mediapipe/selfie_segmentation';\r\n\r\nexport type MediasfuGenericOptions = {\r\n  PrejoinPage?: (options: PreJoinPageOptions | WelcomePageOptions) => HTMLElement;\r\n  localLink?: string;\r\n  connectMediaSFU?: boolean;\r\n  credentials?: { apiUserName: string; apiKey: string };\r\n  useLocalUIMode?: boolean;\r\n  seedData?: SeedData;\r\n  useSeed?: boolean;\r\n  imgSrc?: string;\r\n  sourceParameters?: { [key: string]: any };\r\n  updateSourceParameters?: (data: { [key: string]: any }) => void;\r\n  returnUI?: boolean;\r\n  noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n  joinMediaSFURoom?: JoinRoomOnMediaSFUType;\r\n  createMediaSFURoom?: CreateRoomOnMediaSFUType;\r\n};\r\n\r\n/**\r\n * MediasfuGeneric component provides a customizable interface with a full suite of modal windows and flexible layout options for interactive media applications.\r\n *\r\n * @component\r\n * @selector app-mediasfu-generic\r\n * @standalone true\r\n * @imports [RouterOutlet, CommonModule, BreakoutRoomsModal, BackgroundModal, CoHostModal, AlertComponent, AudioGrid, ControlButtonsAltComponent, ControlButtonsComponentTouch, ControlButtonsComponent, FlexibleGrid, FlexibleVideo, LoadingModal, Pagination, SubAspectComponent, DisplaySettingsModal, EventSettingsModal, ConfirmExitModal, MediaSettingsModal, MenuModal, MessagesModal, ConfirmHereModal, ShareEventModal, WelcomePage, ParticipantsModal, PollModal, RecordingModal, RequestsModal, MainAspectComponent, MainContainerComponent, MainGridComponent, MainScreenComponent, OtherGridComponent, Screenboard, ScreenboardModal, Whiteboard, ConfigureWhiteboardModal, WaitingRoomModal, MenuWidget, MessageWidget, MenuRecordWidget, RecordTimerWidget, MenuParticipantsWidget, ScreenShareWidget]\r\n *\r\n * @template\r\n * The template structure:\r\n * - Conditional rendering of a PrejoinPage or WelcomePage for introductory or pre-session screens.\r\n * - Main content area with nested components for grid layouts, flexible video, and audio grids.\r\n * - Modals for user interactions, including participant management, event settings, breakout rooms, whiteboarding, and media settings.\r\n *\r\n * @input {any} PrejoinPage - Component for the prejoin page, defaults to `WelcomePage`.\r\n * @input {MediasfuGenericOptions} options - Configuration options for the component.\r\n * @input {boolean} connectMediaSFU - Flag to enable/disable connection to the MediaSFU server.\r\n * @input {string} localLink - Local link for the Community Edition server.\r\n * @input {{ apiUserName: string; apiKey: string }} credentials - API credentials for secure access.\r\n * @input {boolean} useLocalUIMode - Flag to toggle local UI settings.\r\n * @input {SeedData} seedData - Seed data for initializing the component with specific configurations.\r\n * @input {boolean} useSeed - Enable/disable use of seed data.\r\n * @input {string} imgSrc - URL for branding images or logos.\r\n * @input {object} sourceParameters - Additional parameters for the source.\r\n * @input {Function} updateSourceParameters - Function to update the source parameters.\r\n * @input {boolean} returnUI - Flag to return the UI elements.\r\n * @input {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} noUIPreJoinOptions - Options for the prejoin page without UI.\r\n * @input {JoinRoomOnMediaSFUType} joinMediaSFURoom - Function to join a room on MediaSFU.\r\n * @input {CreateRoomOnMediaSFUType} createMediaSFURoom - Function to create a room on MediaSFU.\r\n *\r\n * @property {string} title - The title of the component, defaults to \"MediaSFU-Generic\".\r\n *\r\n * @styles\r\n * Component-specific styles, including full-screen settings and customizable colors for backgrounds.\r\n *\r\n * @providers [CookieService] - Provides cookies service for session handling.\r\n *\r\n * @constructor\r\n * @class MediasfuGeneric\r\n * @implements OnInit, OnDestroy\r\n *\r\n * @method ngOnInit - Initializes the component and its configurations.\r\n * @method ngOnDestroy - Performs cleanup, removing event listeners and intervals as needed.\r\n *\r\n * @example\r\n * ```html\r\n * <app-mediasfu-generic\r\n *   [PrejoinPage]=\"CustomPrejoinComponent\"\r\n *   [localLink]=\"'https://localhost:3000'\"\r\n *   [connectMediaSFU]=\"true\"\r\n *   [credentials]=\"{ apiUserName: 'username', apiKey: 'apikey' }\"\r\n *   [useLocalUIMode]=\"true\"\r\n *   [seedData]=\"seedDataObject\"\r\n *   [useSeed]=\"true\"\r\n *   [imgSrc]=\"https://example.com/logo.png\">\r\n *   [sourceParameters]=\"{ source: 'camera', width: 640, height: 480 }\"\r\n *   [updateSourceParameters]=\"updateSourceParameters\"\r\n *   [returnUI]=\"true\"\r\n *   [noUIPreJoinOptions]=\"{ roomName: 'room1', userName: 'user1' }\"\r\n *   [joinMediaSFURoom]=\"joinMediaSFURoom\"\r\n *   [createMediaSFURoom]=\"createMediaSFURoom\">\r\n * </app-mediasfu-generic>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n  selector: 'app-mediasfu-generic',\r\n  imports: [\r\n    CommonModule,\r\n    BreakoutRoomsModal,\r\n    BackgroundModal,\r\n    CoHostModal,\r\n    AlertComponent,\r\n    AudioGrid,\r\n    ControlButtonsComponentTouch,\r\n    ControlButtonsComponent,\r\n    FlexibleGrid,\r\n    FlexibleVideo,\r\n    LoadingModal,\r\n    Pagination,\r\n    SubAspectComponent,\r\n    DisplaySettingsModal,\r\n    EventSettingsModal,\r\n    ConfirmExitModal,\r\n    MediaSettingsModal,\r\n    MenuModal,\r\n    MessagesModal,\r\n    ConfirmHereModal,\r\n    ShareEventModal,\r\n    ParticipantsModal,\r\n    PollModal,\r\n    RecordingModal,\r\n    RequestsModal,\r\n    MainAspectComponent,\r\n    MainContainerComponent,\r\n    MainGridComponent,\r\n    MainScreenComponent,\r\n    OtherGridComponent,\r\n    ScreenboardModal,\r\n    Whiteboard,\r\n    ConfigureWhiteboardModal,\r\n    WaitingRoomModal,\r\n  ],\r\n  template: `\r\n    <div\r\n      class=\"MediaSFU\"\r\n      [ngStyle]=\"{\r\n        height: '100vh',\r\n        width: '100vw',\r\n        maxWidth: '100vw',\r\n        maxHeight: '100vh',\r\n        overflow: 'hidden'\r\n      }\"\r\n    >\r\n      <ng-container *ngIf=\"!validated.value; else mainContent\">\r\n        <ng-container\r\n          *ngComponentOutlet=\"\r\n            PrejoinPageComponent.component;\r\n            injector: PrejoinPageComponent.injector\r\n          \"\r\n        >\r\n        </ng-container>\r\n      </ng-container>\r\n\r\n      <ng-template #mainContent>\r\n        <app-main-container-component *ngIf=\"returnUI\">\r\n          <app-main-aspect-component\r\n            [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n            [defaultFraction]=\"1 - controlHeight.value\"\r\n            [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\r\n            [updateIsWideScreen]=\"updateIsWideScreen\"\r\n            [updateIsMediumScreen]=\"updateIsMediumScreen\"\r\n            [updateIsSmallScreen]=\"updateIsSmallScreen\"\r\n          >\r\n            <app-main-screen-component\r\n              [doStack]=\"true\"\r\n              [mainSize]=\"mainHeightWidth.value\"\r\n              [defaultFraction]=\"1 - controlHeight.value\"\r\n              [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\r\n              [updateComponentSizes]=\"updateComponentSizes\"\r\n            >\r\n              <app-main-grid-component\r\n                [height]=\"componentSizes.value.mainHeight\"\r\n                [width]=\"componentSizes.value.mainWidth\"\r\n                [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                [mainSize]=\"mainHeightWidth.value\"\r\n                [showAspect]=\"mainHeightWidth.value > 0\"\r\n                [timeBackgroundColor]=\"recordState.value\"\r\n                [meetingProgressTime]=\"meetingProgressTime.value\"\r\n              >\r\n                <app-flexible-video\r\n                  [customWidth]=\"componentSizes.value.mainWidth\"\r\n                  [customHeight]=\"componentSizes.value.mainHeight\"\r\n                  [rows]=\"1\"\r\n                  [columns]=\"1\"\r\n                  [componentsToRender]=\"mainGridStream.value\"\r\n                  [showAspect]=\"\r\n                    mainGridStream.value.length > 0 &&\r\n                    !(whiteboardStarted.value && !whiteboardEnded.value)\r\n                  \"\r\n                  [localStreamScreen]=\"localStreamScreen.value!\"\r\n                  [annotateScreenStream]=\"annotateScreenStream.value\"\r\n                  [Screenboard]=\"shared.value ? ScreenboardWidget : undefined\"\r\n                >\r\n                </app-flexible-video>\r\n                <app-whiteboard\r\n                  [customWidth]=\"componentSizes.value.mainWidth\"\r\n                  [customHeight]=\"componentSizes.value.mainHeight\"\r\n                  [parameters]=\"mediaSFUParameters\"\r\n                  [showAspect]=\"whiteboardStarted.value && !whiteboardEnded.value\"\r\n                ></app-whiteboard>\r\n                <app-control-buttons-component-touch\r\n                  [buttons]=\"controlBroadcastButtons\"\r\n                  [position]=\"'right'\"\r\n                  [location]=\"'bottom'\"\r\n                  [direction]=\"'vertical'\"\r\n                  [showAspect]=\"eventType.value === 'broadcast'\"\r\n                ></app-control-buttons-component-touch>\r\n                <app-control-buttons-component-touch\r\n                  [buttons]=\"recordButton\"\r\n                  [direction]=\"'horizontal'\"\r\n                  [showAspect]=\"\r\n                    eventType.value === 'broadcast' &&\r\n                    !showRecordButtons.value &&\r\n                    islevel.value === '2'\r\n                  \"\r\n                  [location]=\"'bottom'\"\r\n                  [position]=\"'middle'\"\r\n                ></app-control-buttons-component-touch>\r\n                <app-control-buttons-component-touch\r\n                  [buttons]=\"recordButtons\"\r\n                  [direction]=\"'horizontal'\"\r\n                  [showAspect]=\"\r\n                    eventType.value === 'broadcast' &&\r\n                    showRecordButtons.value &&\r\n                    islevel.value === '2'\r\n                  \"\r\n                  [location]=\"'bottom'\"\r\n                  [position]=\"'middle'\"\r\n                ></app-control-buttons-component-touch>\r\n              </app-main-grid-component>\r\n\r\n              <app-other-grid-component\r\n                [height]=\"componentSizes.value.otherHeight\"\r\n                [width]=\"componentSizes.value.otherWidth\"\r\n                [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                [showAspect]=\"mainHeightWidth.value !== 100\"\r\n                [timeBackgroundColor]=\"recordState.value\"\r\n                [showTimer]=\"mainHeightWidth.value === 0\"\r\n                [meetingProgressTime]=\"meetingProgressTime.value\"\r\n              >\r\n                <div\r\n                  *ngIf=\"doPaginate.value\"\r\n                  [ngStyle]=\"{\r\n                    width:\r\n                      paginationDirection.value == 'horizontal'\r\n                        ? componentSizes.value.otherWidth\r\n                        : paginationHeightWidth.value,\r\n                    height:\r\n                      paginationDirection.value == 'horizontal'\r\n                        ? paginationHeightWidth.value\r\n                        : componentSizes.value.otherHeight,\r\n                    display: doPaginate.value ? 'flex' : 'none',\r\n                    'flex-direction': paginationDirection.value == 'horizontal' ? 'row' : 'column',\r\n                    'justify-content': 'center',\r\n                    'align-items': 'center',\r\n                    padding: '0',\r\n                    margin: '0'\r\n                  }\"\r\n                >\r\n                  <app-pagination\r\n                    [totalPages]=\"numberPages.value\"\r\n                    [currentUserPage]=\"currentUserPage.value\"\r\n                    [showAspect]=\"doPaginate.value\"\r\n                    [paginationHeight]=\"paginationHeightWidth.value\"\r\n                    [direction]=\"paginationDirection.value\"\r\n                    [parameters]=\"mediaSFUParameters\"\r\n                  ></app-pagination>\r\n                </div>\r\n\r\n                <app-audio-grid [componentsToRender]=\"audioOnlyStreams.value\"></app-audio-grid>\r\n                <app-control-buttons-component-touch\r\n                  [buttons]=\"controlChatButtons\"\r\n                  [position]=\"'right'\"\r\n                  [location]=\"'bottom'\"\r\n                  [direction]=\"'vertical'\"\r\n                  [showAspect]=\"eventType.value === 'chat'\"\r\n                ></app-control-buttons-component-touch>\r\n                <app-flexible-grid\r\n                  [customWidth]=\"gridSizes.value.gridWidth!\"\r\n                  [customHeight]=\"gridSizes.value.gridHeight!\"\r\n                  [rows]=\"gridRows.value\"\r\n                  [columns]=\"gridCols.value\"\r\n                  [componentsToRender]=\"otherGridStreams.value[0]\"\r\n                  [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                ></app-flexible-grid>\r\n                <app-flexible-grid\r\n                  [customWidth]=\"gridSizes.value.altGridWidth!\"\r\n                  [customHeight]=\"gridSizes.value.altGridHeight!\"\r\n                  [rows]=\"altGridRows.value\"\r\n                  [columns]=\"altGridCols.value\"\r\n                  [componentsToRender]=\"otherGridStreams.value[1]\"\r\n                  [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                ></app-flexible-grid>\r\n              </app-other-grid-component>\r\n            </app-main-screen-component>\r\n          </app-main-aspect-component>\r\n\r\n          <app-sub-aspect-component\r\n            [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n            [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\r\n            [defaultFractionSub]=\"controlHeight.value\"\r\n          >\r\n            <app-control-buttons-component\r\n              [buttons]=\"controlButtons\"\r\n              [buttonColor]=\"'black'\"\r\n              [buttonBackgroundColor]=\"{\r\n                default: 'transparent',\r\n                pressed: 'transparent'\r\n              }\"\r\n              [alignment]=\"'space-between'\"\r\n              [vertical]=\"false\"\r\n              [buttonsContainerStyle]=\"{\r\n                marginTop: '0',\r\n                marginBottom: '0',\r\n                backgroundColor: 'transparent'\r\n              }\"\r\n            ></app-control-buttons-component>\r\n          </app-sub-aspect-component>\r\n        </app-main-container-component>\r\n      </ng-template>\r\n\r\n      <ng-container *ngIf=\"returnUI\">\r\n      <app-menu-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isVisible]=\"isMenuModalVisible.value\"\r\n        [onClose]=\"onCloseMenuModal\"\r\n        [customButtons]=\"customMenuButtons\"\r\n        [roomName]=\"roomName.value\"\r\n        [adminPasscode]=\"adminPasscode.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [localLink]=\"localLink\"\r\n      ></app-menu-modal>\r\n\r\n      <app-event-settings-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isEventSettingsModalVisible]=\"isSettingsModalVisible.value\"\r\n        [onEventSettingsClose]=\"onEventSettingsClose\"\r\n        [audioSetting]=\"audioSetting.value\"\r\n        [videoSetting]=\"videoSetting.value\"\r\n        [screenshareSetting]=\"screenshareSetting.value\"\r\n        [chatSetting]=\"chatSetting.value\"\r\n        [updateAudioSetting]=\"updateAudioSetting\"\r\n        [updateVideoSetting]=\"updateVideoSetting\"\r\n        [updateScreenshareSetting]=\"updateScreenshareSetting\"\r\n        [updateChatSetting]=\"updateChatSetting\"\r\n        [updateIsSettingsModalVisible]=\"updateIsSettingsModalVisible\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [showAlert]=\"showAlert\"\r\n      ></app-event-settings-modal>\r\n\r\n      <app-requests-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isRequestsModalVisible]=\"isRequestsModalVisible.value\"\r\n        [onRequestClose]=\"onRequestClose\"\r\n        [requestCounter]=\"requestCounter.value\"\r\n        [onRequestFilterChange]=\"onRequestFilterChange\"\r\n        [updateRequestList]=\"updateRequestList\"\r\n        [requestList]=\"filteredRequestList.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-requests-modal>\r\n\r\n      <app-waiting-room-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isWaitingModalVisible]=\"isWaitingModalVisible.value\"\r\n        [onWaitingRoomClose]=\"onWaitingRoomClose\"\r\n        [waitingRoomCounter]=\"waitingRoomCounter.value\"\r\n        [onWaitingRoomFilterChange]=\"onWaitingRoomFilterChange\"\r\n        [waitingRoomList]=\"filteredWaitingRoomList.value\"\r\n        [updateWaitingList]=\"updateWaitingRoomList\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [parameters]=\"{\r\n                      filteredWaitingRoomList: waitingRoomList.value,\r\n                      getUpdatedAllParams: getUpdatedAllParams,\r\n                    }\"\r\n      ></app-waiting-room-modal>\r\n\r\n      <app-co-host-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isCoHostModalVisible]=\"isCoHostModalVisible.value\"\r\n        [onCoHostClose]=\"onCoHostClose\"\r\n        [coHostResponsibility]=\"coHostResponsibility.value\"\r\n        [participants]=\"participants.value\"\r\n        [currentCohost]=\"coHost.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [showAlert]=\"showAlert\"\r\n        [updateCoHostResponsibility]=\"updateCoHostResponsibility\"\r\n        [updateCoHost]=\"updateCoHost\"\r\n        [updateIsCoHostModalVisible]=\"updateIsCoHostModalVisible\"\r\n        [socket]=\"socket.value\"\r\n      ></app-co-host-modal>\r\n\r\n      <app-media-settings-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isMediaSettingsModalVisible]=\"isMediaSettingsModalVisible.value\"\r\n        [onMediaSettingsClose]=\"onMediaSettingsClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-media-settings-modal>\r\n\r\n      <app-participants-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isParticipantsModalVisible]=\"isParticipantsModalVisible.value\"\r\n        [onParticipantsClose]=\"onParticipantsClose\"\r\n        [participantsCounter]=\"participantsCounter.value\"\r\n        [onParticipantsFilterChange]=\"onParticipantsFilterChange\"\r\n        [parameters]=\"{\r\n              updateParticipants: updateParticipants,\r\n              filteredParticipants: filteredParticipants.value,\r\n              updateIsParticipantsModalVisible: updateIsParticipantsModalVisible,\r\n              updateDirectMessageDetails: updateDirectMessageDetails,\r\n              updateStartDirectMessage: updateStartDirectMessage,\r\n              updateIsMessagesModalVisible: updateIsMessagesModalVisible,\r\n              showAlert: showAlert,\r\n              participants: filteredParticipants.value,\r\n              roomName: roomName.value,\r\n              islevel: islevel.value,\r\n              member: member.value,\r\n              coHostResponsibility: coHostResponsibility.value,\r\n              coHost: coHost.value,\r\n              eventType: eventType.value,\r\n              startDirectMessage: startDirectMessage.value,\r\n              directMessageDetails: directMessageDetails.value,\r\n              socket: socket.value,\r\n              getUpdatedAllParams: getUpdatedAllParams,\r\n            }\"\r\n      ></app-participants-modal>\r\n\r\n      <app-display-settings-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isDisplaySettingsModalVisible]=\"isDisplaySettingsModalVisible.value\"\r\n        [onDisplaySettingsClose]=\"onDisplaySettingsClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-display-settings-modal>\r\n\r\n      <app-recording-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isRecordingModalVisible]=\"isRecordingModalVisible.value\"\r\n        [onClose]=\"onRecordingClose\"\r\n        [startRecording]=\"startRecording.startRecording\"\r\n        [confirmRecording]=\"confirmRecording.confirmRecording\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-recording-modal>\r\n\r\n      <app-messages-modal\r\n        [backgroundColor]=\"\r\n          eventType.value === 'webinar' || eventType.value === 'conference'\r\n            ? '#f5f5f5'\r\n            : 'rgba(255, 255, 255, 0.25)'\r\n        \"\r\n        [isMessagesModalVisible]=\"isMessagesModalVisible.value\"\r\n        [onMessagesClose]=\"onMessagesClose\"\r\n        [messages]=\"messages.value\"\r\n        [eventType]=\"eventType.value\"\r\n        [member]=\"member.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [coHostResponsibility]=\"coHostResponsibility.value\"\r\n        [coHost]=\"coHost.value\"\r\n        [startDirectMessage]=\"startDirectMessage.value\"\r\n        [directMessageDetails]=\"directMessageDetails.value\"\r\n        [updateStartDirectMessage]=\"updateStartDirectMessage\"\r\n        [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\r\n        [showAlert]=\"showAlert\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [chatSetting]=\"chatSetting.value\"\r\n      ></app-messages-modal>\r\n\r\n      <app-confirm-exit-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isConfirmExitModalVisible]=\"isConfirmExitModalVisible.value\"\r\n        [onConfirmExitClose]=\"onConfirmExitClose\"\r\n        [position]=\"'topRight'\"\r\n        [member]=\"member.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [islevel]=\"islevel.value\"\r\n      ></app-confirm-exit-modal>\r\n\r\n      <app-confirm-here-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isConfirmHereModalVisible]=\"isConfirmHereModalVisible.value\"\r\n        [onConfirmHereClose]=\"onConfirmHereClose\"\r\n        [member]=\"member.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n      ></app-confirm-here-modal>\r\n\r\n      <app-share-event-modal\r\n        [isShareEventModalVisible]=\"isShareEventModalVisible.value\"\r\n        [onShareEventClose]=\"onShareEventClose\"\r\n        [roomName]=\"roomName.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [adminPasscode]=\"adminPasscode.value\"\r\n        [eventType]=\"eventType.value\"\r\n        [localLink]=\"localLink\"\r\n      ></app-share-event-modal>\r\n\r\n      <app-poll-modal\r\n        [isPollModalVisible]=\"isPollModalVisible.value\"\r\n        [onClose]=\"onPollClose\"\r\n        [member]=\"member.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [polls]=\"polls.value\"\r\n        [poll]=\"poll.value\"\r\n        [socket]=\"socket.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [showAlert]=\"showAlert\"\r\n        [updateIsPollModalVisible]=\"updateIsPollModalVisible\"\r\n        [handleCreatePoll]=\"handleCreatePoll.handleCreatePoll\"\r\n        [handleEndPoll]=\"handleEndPoll.handleEndPoll\"\r\n        [handleVotePoll]=\"handleVotePoll.handleVotePoll\"\r\n      ></app-poll-modal>\r\n\r\n      <app-background-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isVisible]=\"isBackgroundModalVisible.value\"\r\n        [onClose]=\"onBackgroundClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-background-modal>\r\n\r\n      <app-breakout-rooms-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isVisible]=\"isBreakoutRoomsModalVisible.value\"\r\n        [onBreakoutRoomsClose]=\"onBreakoutRoomsClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-breakout-rooms-modal>\r\n\r\n      <app-configure-whiteboard-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isVisible]=\"isConfigureWhiteboardModalVisible.value\"\r\n        [onConfigureWhiteboardClose]=\"onConfigureWhiteboardClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-configure-whiteboard-modal>\r\n\r\n      <app-screenboard-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isVisible]=\"isScreenboardModalVisible.value\"\r\n        [onClose]=\"onScreenboardClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-screenboard-modal>\r\n\r\n      <app-alert-component\r\n        [visible]=\"alertVisible.value\"\r\n        [message]=\"alertMessage.value\"\r\n        [type]=\"alertType.value\"\r\n        [duration]=\"alertDuration.value\"\r\n        [onHide]=\"onAlertHide\"\r\n        textColor=\"#ffffff\"\r\n      ></app-alert-component>\r\n\r\n      <app-loading-modal\r\n        [isVisible]=\"isLoadingModalVisible.value\"\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        displayColor=\"black\"\r\n      ></app-loading-modal>\r\n    </ng-container>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .MediaSFU {\r\n        /* Add any component-specific styles here */\r\n      }\r\n    `,\r\n  ],\r\n  providers: [CookieService]\r\n})\r\nexport class MediasfuGeneric implements OnInit, OnDestroy {\r\n  @Input()\r\n  PrejoinPage: any = WelcomePage;\r\n  @Input() localLink = '';\r\n  @Input() connectMediaSFU = true;\r\n  @Input() credentials: { apiUserName: string; apiKey: string } = { apiUserName: '', apiKey: '' };\r\n  @Input() useLocalUIMode = false;\r\n  @Input() seedData?: SeedData;\r\n  @Input() useSeed = false;\r\n  @Input() imgSrc = 'https://mediasfu.com/images/logo192.png';\r\n  @Input() sourceParameters?: { [key: string]: any } = {};\r\n  @Input() updateSourceParameters? = (data: { [key: string]: any }) => { };\r\n  @Input() returnUI? = true;\r\n  @Input() noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n  @Input() joinMediaSFURoom?: JoinRoomOnMediaSFUType;\r\n  @Input() createMediaSFURoom?: CreateRoomOnMediaSFUType;\r\n\r\n  title = 'MediaSFU-Generic';\r\n\r\n  private mainHeightWidthSubscription: Subscription | undefined;\r\n  private validatedSubscription: Subscription | undefined;\r\n  private islevelSubscription: Subscription | undefined;\r\n  private coHostSubscription: Subscription | undefined;\r\n  private buttonSubscriptions: Subscription[] = [];\r\n  private ScreenboardSubscription: Subscription | undefined;\r\n  private recordingSubscription: Subscription | undefined;\r\n\r\n  constructor(\r\n    private cdr: ChangeDetectorRef,\r\n    private injector: Injector,\r\n    public updateMiniCardsGrid: UpdateMiniCardsGrid,\r\n    public mixStreams: MixStreams,\r\n    public dispStreams: DispStreams,\r\n    public stopShareScreen: StopShareScreen,\r\n    public checkScreenShare: CheckScreenShare,\r\n    public startShareScreen: StartShareScreen,\r\n    public requestScreenShare: RequestScreenShare,\r\n    public reorderStreams: ReorderStreams,\r\n    public prepopulateUserMedia: PrepopulateUserMedia,\r\n    public getVideos: GetVideos,\r\n    public rePort: RePort,\r\n    public trigger: Trigger,\r\n    public consumerResume: ConsumerResume,\r\n    public connectSendTransport: ConnectSendTransport,\r\n    public connectSendTransportAudio: ConnectSendTransportAudio,\r\n    public connectSendTransportVideo: ConnectSendTransportVideo,\r\n    public connectSendTransportScreen: ConnectSendTransportScreen,\r\n    public processConsumerTransports: ProcessConsumerTransports,\r\n    public resumePauseStreams: ResumePauseStreams,\r\n    public readjust: Readjust,\r\n    public checkGrid: CheckGrid,\r\n    public getEstimate: GetEstimate,\r\n    public calculateRowsAndColumns: CalculateRowsAndColumns,\r\n    public addVideosGrid: AddVideosGrid,\r\n    public onScreenChanges: OnScreenChanges,\r\n    public changeVids: ChangeVids,\r\n    public compareActiveNames: CompareActiveNames,\r\n    public compareScreenStates: CompareScreenStates,\r\n    public createSendTransport: CreateSendTransport,\r\n    public resumeSendTransportAudio: ResumeSendTransportAudio,\r\n    public receiveAllPipedTransports: ReceiveAllPipedTransports,\r\n    public disconnectSendTransportVideo: DisconnectSendTransportVideo,\r\n    public disconnectSendTransportAudio: DisconnectSendTransportAudio,\r\n    public disconnectSendTransportScreen: DisconnectSendTransportScreen,\r\n    public getPipedProducersAlt: GetPipedProducersAlt,\r\n    public signalNewConsumerTransport: SignalNewConsumerTransport,\r\n    public connectRecvTransport: ConnectRecvTransport,\r\n    public reUpdateInter: ReUpdateInter,\r\n    public updateParticipantAudioDecibels: UpdateParticipantAudioDecibels,\r\n    public closeAndResize: CloseAndResize,\r\n    public autoAdjust: AutoAdjust,\r\n    public switchUserVideoAlt: SwitchUserVideoAlt,\r\n    public switchUserVideo: SwitchUserVideo,\r\n    public switchUserAudio: SwitchUserAudio,\r\n    public getDomains: GetDomains,\r\n    public formatNumber: FormatNumber,\r\n    public connectIps: ConnectIps,\r\n    public connectLocalIps: ConnectLocalIps,\r\n    public createDeviceClient: CreateDeviceClient,\r\n    public handleCreatePoll: HandleCreatePoll,\r\n    public handleEndPoll: HandleEndPoll,\r\n    public handleVotePoll: HandleVotePoll,\r\n    public captureCanvasStream: CaptureCanvasStream,\r\n    public resumePauseAudioStreams: ResumePauseAudioStreams,\r\n    public processConsumerTransportsAudio: ProcessConsumerTransportsAudio,\r\n\r\n    public launchMenuModal: LaunchMenuModal,\r\n    public launchRecording: LaunchRecording,\r\n    public startRecording: StartRecording,\r\n    public confirmRecording: ConfirmRecording,\r\n    public launchWaiting: LaunchWaiting,\r\n    public launchCoHost: launchCoHost,\r\n    public launchMediaSettings: LaunchMediaSettings,\r\n    public launchDisplaySettings: LaunchDisplaySettings,\r\n    public launchSettings: LaunchSettings,\r\n    public launchRequests: LaunchRequests,\r\n    public launchParticipants: LaunchParticipants,\r\n    public launchMessages: LaunchMessages,\r\n    public launchConfirmExit: LaunchConfirmExit,\r\n    public launchPoll: LaunchPoll,\r\n    public launchBreakoutRooms: LaunchBreakoutRooms,\r\n    public launchConfigureWhiteboard: LaunchConfigureWhiteboard,\r\n    public startMeetingProgressTimer: StartMeetingProgressTimer,\r\n    public updateRecording: UpdateRecording,\r\n    public stopRecording: StopRecording,\r\n    public userWaiting: UserWaiting,\r\n    public personJoined: PersonJoined,\r\n    public allWaitingRoomMembers: AllWaitingRoomMembers,\r\n    public roomRecordParams: RoomRecordParams,\r\n    public banParticipant: BanParticipant,\r\n    public updatedCoHost: UpdatedCoHost,\r\n    public participantRequested: ParticipantRequested,\r\n    public screenProducerId: ScreenProducerId,\r\n    public updateMediaSettings: UpdateMediaSettings,\r\n    public producerMediaPaused: ProducerMediaPaused,\r\n    public producerMediaResumed: ProducerMediaResumed,\r\n    public producerMediaClosed: ProducerMediaClosed,\r\n    public controlMediaHost: ControlMediaHost,\r\n    public meetingEnded: MeetingEnded,\r\n    public disconnectUserSelf: DisconnectUserSelf,\r\n    public receiveMessage: ReceiveMessage,\r\n    public meetingTimeRemaining: MeetingTimeRemaining,\r\n    public meetingStillThere: MeetingStillThere,\r\n    public startRecords: StartRecords,\r\n    public reInitiateRecording: ReInitiateRecording,\r\n    public recordingNotice: RecordingNotice,\r\n    public timeLeftRecording: TimeLeftRecording,\r\n    public stoppedRecording: StoppedRecording,\r\n    public hostRequestResponse: HostRequestResponse,\r\n    public allMembers: AllMembers,\r\n    public allMembersRest: AllMembersRest,\r\n    public disconnect: Disconnect,\r\n    public pollUpdated: PollUpdated,\r\n    public breakoutRoomUpdated: BreakoutRoomUpdated,\r\n    public socketManager: SocketManager,\r\n    public joinRoomClient: JoinRoomClient,\r\n    public joinLocalRoom: JoinLocalRoom,\r\n    public updateRoomParametersClient: UpdateRoomParametersClient,\r\n    public clickVideo: ClickVideo,\r\n    public clickAudio: ClickAudio,\r\n    public clickScreenShare: ClickScreenShare,\r\n    public switchVideoAlt: SwitchVideoAlt,\r\n    public streamSuccessVideo: StreamSuccessVideo,\r\n    public streamSuccessAudio: StreamSuccessAudio,\r\n    public streamSuccessScreen: StreamSuccessScreen,\r\n    public streamSuccessAudioSwitch: StreamSuccessAudioSwitch,\r\n    public checkPermission: CheckPermission,\r\n    public updateConsumingDomains: UpdateConsumingDomains,\r\n    public receiveRoomMessages: ReceiveRoomMessages,\r\n  ) { }\r\n\r\n  createInjector(inputs: any) {\r\n    const inj = Injector.create({\r\n      providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\r\n      parent: this.injector,\r\n    });\r\n\r\n    return inj;\r\n  }\r\n\r\n  // Initial values\r\n  mediaSFUFunctions = () => {\r\n    return {\r\n      updateMiniCardsGrid:\r\n        this.updateMiniCardsGrid?.updateMiniCardsGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      mixStreams:\r\n        this.mixStreams?.mixStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      dispStreams:\r\n        this.dispStreams?.dispStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      stopShareScreen:\r\n        this.stopShareScreen?.stopShareScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkScreenShare:\r\n        this.checkScreenShare?.checkScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      startShareScreen:\r\n        this.startShareScreen?.startShareScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestScreenShare:\r\n        this.requestScreenShare?.requestScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      reorderStreams:\r\n        this.reorderStreams?.reorderStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      prepopulateUserMedia:\r\n        this.prepopulateUserMedia?.prepopulateUserMedia ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getVideos:\r\n        this.getVideos?.getVideos ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      rePort:\r\n        this.rePort?.rePort ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      trigger:\r\n        this.trigger?.trigger ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      consumerResume:\r\n        this.consumerResume?.consumerResume ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransport:\r\n        this.connectSendTransport?.connectSendTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportAudio:\r\n        this.connectSendTransportAudio?.connectSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportVideo:\r\n        this.connectSendTransportVideo?.connectSendTransportVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportScreen:\r\n        this.connectSendTransportScreen?.connectSendTransportScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      processConsumerTransports:\r\n        this.processConsumerTransports?.processConsumerTransports ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumePauseStreams:\r\n        this.resumePauseStreams?.resumePauseStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      readjust:\r\n        this.readjust?.readjust ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkGrid:\r\n        this.checkGrid?.checkGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getEstimate:\r\n        this.getEstimate?.getEstimate ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      calculateRowsAndColumns:\r\n        this.calculateRowsAndColumns?.calculateRowsAndColumns ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      addVideosGrid:\r\n        this.addVideosGrid?.addVideosGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      onScreenChanges:\r\n        this.onScreenChanges?.onScreenChanges ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      sleep:\r\n        sleep ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      changeVids:\r\n        this.changeVids?.changeVids ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      compareActiveNames:\r\n        this.compareActiveNames?.compareActiveNames ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      compareScreenStates:\r\n        this.compareScreenStates?.compareScreenStates ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      createSendTransport:\r\n        this.createSendTransport?.createSendTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumeSendTransportAudio:\r\n        this.resumeSendTransportAudio?.resumeSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      receiveAllPipedTransports:\r\n        this.receiveAllPipedTransports?.receiveAllPipedTransports ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportVideo:\r\n        this.disconnectSendTransportVideo?.disconnectSendTransportVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportAudio:\r\n        this.disconnectSendTransportAudio?.disconnectSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportScreen:\r\n        this.disconnectSendTransportScreen?.disconnectSendTransportScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getPipedProducersAlt:\r\n        this.getPipedProducersAlt?.getPipedProducersAlt ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      signalNewConsumerTransport:\r\n        this.signalNewConsumerTransport?.signalNewConsumerTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectRecvTransport:\r\n        this.connectRecvTransport?.connectRecvTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      reUpdateInter:\r\n        this.reUpdateInter?.reUpdateInter ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      updateParticipantAudioDecibels:\r\n        this.updateParticipantAudioDecibels?.updateParticipantAudioDecibels ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      closeAndResize:\r\n        this.closeAndResize?.closeAndResize ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      autoAdjust:\r\n        this.autoAdjust?.autoAdjust ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserVideoAlt:\r\n        this.switchUserVideoAlt?.switchUserVideoAlt ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserVideo:\r\n        this.switchUserVideo?.switchUserVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserAudio:\r\n        this.switchUserAudio?.switchUserAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getDomains:\r\n        this.getDomains?.getDomains ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      formatNumber:\r\n        this.formatNumber?.formatNumber ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectIps:\r\n        this.connectIps?.connectIps ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectLocalIps:\r\n        this.connectLocalIps?.connectLocalIps ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      createDeviceClient:\r\n        this.createDeviceClient?.createDeviceClient ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      handleCreatePoll:\r\n        this.handleCreatePoll?.handleCreatePoll ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      handleEndPoll:\r\n        this.handleEndPoll?.handleEndPoll ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      handleVotePoll:\r\n        this.handleVotePoll?.handleVotePoll ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      captureCanvasStream:\r\n        this.captureCanvasStream?.captureCanvasStream ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumePauseAudioStreams:\r\n        this.resumePauseAudioStreams?.resumePauseAudioStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      processConsumerTransportsAudio:\r\n        this.processConsumerTransportsAudio?.processConsumerTransportsAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkPermission:\r\n        this.checkPermission?.checkPermission ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessVideo:\r\n        this.streamSuccessVideo?.streamSuccessVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessAudio:\r\n        this.streamSuccessAudio?.streamSuccessAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessScreen:\r\n        this.streamSuccessScreen?.streamSuccessScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessAudioSwitch:\r\n        this.streamSuccessAudioSwitch?.streamSuccessAudioSwitch ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickVideo:\r\n        this.clickVideo?.clickVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickAudio:\r\n        this.clickAudio?.clickAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickScreenShare:\r\n        this.clickScreenShare?.clickScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchVideoAlt:\r\n        this.switchVideoAlt?.switchVideoAlt ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestPermissionCamera:\r\n        this.requestPermissionCamera ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestPermissionAudio:\r\n        this.requestPermissionAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n    };\r\n  };\r\n\r\n  validated = new BehaviorSubject<boolean>(false);\r\n  localUIMode = new BehaviorSubject<boolean>(false);\r\n  socket = new BehaviorSubject<Socket>({} as Socket);\r\n  localSocket? = new BehaviorSubject<Socket | undefined>(undefined);\r\n  roomData = new BehaviorSubject<ResponseJoinRoom | null>(null);\r\n  device = new BehaviorSubject<Device | null>(null);\r\n  apiKey = new BehaviorSubject<string>('');\r\n  apiUserName = new BehaviorSubject<string>('');\r\n  apiToken = new BehaviorSubject<string>('');\r\n  link = new BehaviorSubject<string>('');\r\n\r\n  roomName = new BehaviorSubject<string>('');\r\n  member = new BehaviorSubject<string>('');\r\n  adminPasscode = new BehaviorSubject<string>('');\r\n  islevel = new BehaviorSubject<string>('1');\r\n  coHost = new BehaviorSubject<string>('No coHost');\r\n  coHostResponsibility = new BehaviorSubject<CoHostResponsibility[]>([\r\n    { name: 'participants', value: false, dedicated: false },\r\n    { name: 'media', value: false, dedicated: false },\r\n    { name: 'waiting', value: false, dedicated: false },\r\n    { name: 'chat', value: false, dedicated: false },\r\n  ]);\r\n  youAreCoHost = new BehaviorSubject<boolean>(false);\r\n  youAreHost = new BehaviorSubject<boolean>(false);\r\n  confirmedToRecord = new BehaviorSubject<boolean>(false);\r\n  meetingDisplayType = new BehaviorSubject<string>('media');\r\n  meetingVideoOptimized = new BehaviorSubject<boolean>(false);\r\n  eventType = new BehaviorSubject<EventType>('webinar');\r\n  participants = new BehaviorSubject<Participant[]>([]);\r\n  filteredParticipants = new BehaviorSubject<Participant[]>([]);\r\n  participantsCounter = new BehaviorSubject<number>(0);\r\n  participantsFilter = new BehaviorSubject<string>('');\r\n\r\n  consume_sockets = new BehaviorSubject<ConsumeSocket[]>([]);\r\n  rtpCapabilities = new BehaviorSubject<RtpCapabilities | null>(null);\r\n  roomRecvIPs = new BehaviorSubject<string[]>([]);\r\n  meetingRoomParams = new BehaviorSubject<MeetingRoomParams | null>(null);\r\n  itemPageLimit = new BehaviorSubject<number>(4);\r\n  audioOnlyRoom = new BehaviorSubject<boolean>(false);\r\n  addForBasic = new BehaviorSubject<boolean>(false);\r\n  screenPageLimit = new BehaviorSubject<number>(4);\r\n  shareScreenStarted = new BehaviorSubject<boolean>(false);\r\n  shared = new BehaviorSubject<boolean>(false);\r\n  targetOrientation = new BehaviorSubject<string>('landscape');\r\n  targetResolution = new BehaviorSubject<string>('sd');\r\n  targetResolutionHost = new BehaviorSubject<string>('sd');\r\n  vidCons = new BehaviorSubject<VidCons>({ width: 640, height: 360 });\r\n  frameRate = new BehaviorSubject<number>(10);\r\n  hParams = new BehaviorSubject<HParamsType>({} as HParamsType);\r\n  vParams = new BehaviorSubject<VParamsType>({} as VParamsType);\r\n  screenParams = new BehaviorSubject<ScreenParamsType>({} as ScreenParamsType);\r\n  aParams = new BehaviorSubject<AParamsType>({} as AParamsType);\r\n\r\n  recordingAudioPausesLimit = new BehaviorSubject<number>(0);\r\n  recordingAudioPausesCount = new BehaviorSubject<number>(0);\r\n  recordingAudioSupport = new BehaviorSubject<boolean>(false);\r\n  recordingAudioPeopleLimit = new BehaviorSubject<number>(0);\r\n  recordingAudioParticipantsTimeLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoPausesCount = new BehaviorSubject<number>(0);\r\n  recordingVideoPausesLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoPeopleLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoParticipantsTimeLimit = new BehaviorSubject<number>(0);\r\n  recordingAllParticipantsSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoParticipantsSupport = new BehaviorSubject<boolean>(false);\r\n  recordingAllParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\r\n  recordingPreferredOrientation = new BehaviorSubject<string>('landscape');\r\n  recordingSupportForOtherOrientation = new BehaviorSubject<boolean>(false);\r\n  recordingMultiFormatsSupport = new BehaviorSubject<boolean>(false);\r\n\r\n  userRecordingParams = new BehaviorSubject<UserRecordingParams>({\r\n    mainSpecs: {\r\n      mediaOptions: 'video', // 'audio', 'video'\r\n      audioOptions: 'all', // 'all', 'onScreen', 'host'\r\n      videoOptions: 'all', // 'all', 'mainScreen'\r\n      videoType: 'fullDisplay', // 'all', 'bestDisplay', 'fullDisplay'\r\n      videoOptimized: false, // true, false\r\n      recordingDisplayType: 'media', // 'media', 'video', 'all'\r\n      addHLS: false, // true, false\r\n    },\r\n    dispSpecs: {\r\n      nameTags: true, // true, false\r\n      backgroundColor: '#000000', // '#000000', '#ffffff'\r\n      nameTagsColor: '#ffffff', // '#000000', '#ffffff'\r\n      orientationVideo: 'portrait', // 'landscape', 'portrait', 'all'\r\n    },\r\n  });\r\n\r\n  canRecord = new BehaviorSubject<boolean>(false);\r\n  startReport = new BehaviorSubject<boolean>(false);\r\n  endReport = new BehaviorSubject<boolean>(false);\r\n  recordTimerInterval = new BehaviorSubject<NodeJS.Timeout | null>(null);\r\n  recordStartTime = new BehaviorSubject<number>(0);\r\n  recordElapsedTime = new BehaviorSubject<number>(0);\r\n  isTimerRunning = new BehaviorSubject<boolean>(false);\r\n  canPauseResume = new BehaviorSubject<boolean>(false);\r\n  recordChangeSeconds = new BehaviorSubject<number>(15000);\r\n  pauseLimit = new BehaviorSubject<number>(0);\r\n  pauseRecordCount = new BehaviorSubject<number>(0);\r\n  canLaunchRecord = new BehaviorSubject<boolean>(true);\r\n  stopLaunchRecord = new BehaviorSubject<boolean>(false);\r\n\r\n  participantsAll = new BehaviorSubject<Participant[]>([]);\r\n\r\n  firstAll = new BehaviorSubject<boolean>(false);\r\n  updateMainWindow = new BehaviorSubject<boolean>(false);\r\n  first_round = new BehaviorSubject<boolean>(false);\r\n  landScaped = new BehaviorSubject<boolean>(false);\r\n  lock_screen = new BehaviorSubject<boolean>(false);\r\n  screenId = new BehaviorSubject<string>('');\r\n  allVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  newLimitedStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  newLimitedStreamsIDs = new BehaviorSubject<string[]>([]);\r\n  activeSounds = new BehaviorSubject<string[]>([]);\r\n  screenShareIDStream = new BehaviorSubject<string>('');\r\n  screenShareNameStream = new BehaviorSubject<string>('');\r\n  adminIDStream = new BehaviorSubject<string>('');\r\n  adminNameStream = new BehaviorSubject<string>('');\r\n  youYouStream = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  youYouStreamIDs = new BehaviorSubject<string[]>([]);\r\n  localStream = new BehaviorSubject<MediaStream | null>(null);\r\n  recordStarted = new BehaviorSubject<boolean>(false);\r\n  recordResumed = new BehaviorSubject<boolean>(false);\r\n  recordPaused = new BehaviorSubject<boolean>(false);\r\n  recordStopped = new BehaviorSubject<boolean>(false);\r\n  adminRestrictSetting = new BehaviorSubject<boolean>(false);\r\n  videoRequestState = new BehaviorSubject<string | null>(null);\r\n  videoRequestTime = new BehaviorSubject<number>(0);\r\n  videoAction = new BehaviorSubject<boolean>(false);\r\n  localStreamVideo = new BehaviorSubject<MediaStream | null>(null);\r\n  userDefaultVideoInputDevice = new BehaviorSubject<string>('');\r\n  currentFacingMode = new BehaviorSubject<string>('user');\r\n  prevFacingMode = new BehaviorSubject<string>('user');\r\n  defVideoID = new BehaviorSubject<string>('');\r\n  allowed = new BehaviorSubject<boolean>(false);\r\n  dispActiveNames = new BehaviorSubject<string[]>([]);\r\n  p_dispActiveNames = new BehaviorSubject<string[]>([]);\r\n  activeNames = new BehaviorSubject<string[]>([]);\r\n  prevActiveNames = new BehaviorSubject<string[]>([]);\r\n  p_activeNames = new BehaviorSubject<string[]>([]);\r\n  membersReceived = new BehaviorSubject<boolean>(false);\r\n  deferScreenReceived = new BehaviorSubject<boolean>(false);\r\n  hostFirstSwitch = new BehaviorSubject<boolean>(false);\r\n  micAction = new BehaviorSubject<boolean>(false);\r\n  screenAction = new BehaviorSubject<boolean>(false);\r\n  chatAction = new BehaviorSubject<boolean>(false);\r\n  audioRequestState = new BehaviorSubject<string | null>(null);\r\n  screenRequestState = new BehaviorSubject<string | null>(null);\r\n  chatRequestState = new BehaviorSubject<string | null>(null);\r\n  audioRequestTime = new BehaviorSubject<number>(0);\r\n  screenRequestTime = new BehaviorSubject<number>(0);\r\n  chatRequestTime = new BehaviorSubject<number>(0);\r\n  updateRequestIntervalSeconds = new BehaviorSubject<number>(240);\r\n  oldSoundIds = new BehaviorSubject<string[]>([]);\r\n  hostLabel = new BehaviorSubject<string>('Host');\r\n  mainScreenFilled = new BehaviorSubject<boolean>(false);\r\n  localStreamScreen = new BehaviorSubject<MediaStream | null>(null);\r\n  screenAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  chatAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  redirectURL = new BehaviorSubject<string>('');\r\n  oldAllStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  adminVidID = new BehaviorSubject<string>('');\r\n  streamNames = new BehaviorSubject<Stream[]>([]);\r\n  non_alVideoStreams = new BehaviorSubject<Participant[]>([]);\r\n  sortAudioLoudness = new BehaviorSubject<boolean>(false);\r\n  audioDecibels = new BehaviorSubject<AudioDecibels[]>([]);\r\n  mixed_alVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  non_alVideoStreams_muted = new BehaviorSubject<Participant[]>([]);\r\n  paginatedStreams = new BehaviorSubject<(Participant | Stream)[][]>([]);\r\n  localStreamAudio = new BehaviorSubject<MediaStream | null>(null);\r\n  defAudioID = new BehaviorSubject<string>('');\r\n  userDefaultAudioInputDevice = new BehaviorSubject<string>('');\r\n  userDefaultAudioOutputDevice = new BehaviorSubject<string>('');\r\n  prevAudioInputDevice = new BehaviorSubject<string>('');\r\n  prevVideoInputDevice = new BehaviorSubject<string>('');\r\n  audioPaused = new BehaviorSubject<boolean>(false);\r\n  mainScreenPerson = new BehaviorSubject<string>('');\r\n  adminOnMainScreen = new BehaviorSubject<boolean>(false);\r\n  screenStates = new BehaviorSubject<ScreenState[]>([\r\n    {\r\n      mainScreenPerson: '',\r\n      mainScreenProducerId: '',\r\n      mainScreenFilled: false,\r\n      adminOnMainScreen: false,\r\n    },\r\n  ]);\r\n  prevScreenStates = new BehaviorSubject<ScreenState[]>([\r\n    {\r\n      mainScreenPerson: '',\r\n      mainScreenProducerId: '',\r\n      mainScreenFilled: false,\r\n      adminOnMainScreen: false,\r\n    },\r\n  ]);\r\n  updateDateState = new BehaviorSubject<number | null>(null);\r\n  lastUpdate = new BehaviorSubject<number | null>(null);\r\n  nForReadjustRecord = new BehaviorSubject<number>(0);\r\n  fixedPageLimit = new BehaviorSubject<number>(4);\r\n  removeAltGrid = new BehaviorSubject<boolean>(false);\r\n  nForReadjust = new BehaviorSubject<number>(0);\r\n  reorderInterval = new BehaviorSubject<number>(30000);\r\n  fastReorderInterval = new BehaviorSubject<number>(10000);\r\n  lastReorderTime = new BehaviorSubject<number>(0);\r\n  audStreamNames = new BehaviorSubject<Stream[]>([]);\r\n  currentUserPage = new BehaviorSubject<number>(0);\r\n  mainHeightWidth = new BehaviorSubject<number>(\r\n    this.eventType.value == 'webinar' ? 67 : this.eventType.value == 'broadcast' ? 100 : 0,\r\n  );\r\n  prevMainHeightWidth = new BehaviorSubject<number>(this.mainHeightWidth.value);\r\n  prevDoPaginate = new BehaviorSubject<boolean>(false);\r\n  doPaginate = new BehaviorSubject<boolean>(false);\r\n  shareEnded = new BehaviorSubject<boolean>(false);\r\n  lStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  chatRefStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  controlHeight = new BehaviorSubject<number>(\r\n    this.eventType.value === 'webinar' || this.eventType.value === 'conference' ? 0 : 0.06,\r\n  );\r\n  isWideScreen = new BehaviorSubject<boolean>(false);\r\n  isMediumScreen = new BehaviorSubject<boolean>(false);\r\n  isSmallScreen = new BehaviorSubject<boolean>(false);\r\n  addGrid = new BehaviorSubject<boolean>(false);\r\n  addAltGrid = new BehaviorSubject<boolean>(false);\r\n  gridRows = new BehaviorSubject<number>(0);\r\n  gridCols = new BehaviorSubject<number>(0);\r\n  altGridRows = new BehaviorSubject<number>(0);\r\n  altGridCols = new BehaviorSubject<number>(0);\r\n  numberPages = new BehaviorSubject<number>(0);\r\n  currentStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  showMiniView = new BehaviorSubject<boolean>(false);\r\n  nStream = new BehaviorSubject<MediaStream | null>(null);\r\n  defer_receive = new BehaviorSubject<boolean>(false);\r\n  allAudioStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  remoteScreenStream = new BehaviorSubject<Stream[]>([]);\r\n  screenProducer = new BehaviorSubject<Producer | null>(null);\r\n  localScreenProducer = new BehaviorSubject<Producer | null>(null);\r\n  gotAllVids = new BehaviorSubject<boolean>(false);\r\n  paginationHeightWidth = new BehaviorSubject<number>(40);\r\n  paginationDirection = new BehaviorSubject<'horizontal' | 'vertical'>('horizontal');\r\n  gridSizes = new BehaviorSubject<GridSizes>({\r\n    gridWidth: 0,\r\n    gridHeight: 0,\r\n    altGridWidth: 0,\r\n    altGridHeight: 0,\r\n  });\r\n  screenForceFullDisplay = new BehaviorSubject<boolean>(false);\r\n  mainGridStream = new BehaviorSubject<CustomMediaComponent[]>([]);\r\n  otherGridStreams = new BehaviorSubject<CustomMediaComponent[][]>([]);\r\n  audioOnlyStreams = new BehaviorSubject<CustomMediaComponent[]>([]);\r\n  videoInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\r\n  audioInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\r\n  meetingProgressTime = new BehaviorSubject<string>('00:00:00');\r\n  meetingElapsedTime = new BehaviorSubject<number>(0);\r\n  ref_participants = new BehaviorSubject<Participant[]>([]);\r\n\r\n  updateValidated = (value: boolean) => {\r\n    this.validated.next(value);\r\n  };\r\n\r\n  updateSocket = (value: Socket) => {\r\n    this.socket.next(value);\r\n  };\r\n\r\n  updateLocalSocket = (value: Socket | null) => {\r\n    this.localSocket!.next(value!);\r\n  };\r\n\r\n  updateDevice = (value: Device | null) => {\r\n    this.device.next(value);\r\n  };\r\n\r\n  updateRoomData = (value: ResponseJoinRoom | null) => {\r\n    this.roomData.next(value);\r\n  };\r\n\r\n  updateApiKey = (value: string) => {\r\n    this.apiKey.next(value);\r\n  };\r\n\r\n  updateApiUserName = (value: string) => {\r\n    this.apiUserName.next(value);\r\n  };\r\n\r\n  updateApiToken = (value: string) => {\r\n    this.apiToken.next(value);\r\n  };\r\n\r\n  updateLink = (value: string) => {\r\n    this.link.next(value);\r\n  };\r\n\r\n  updateRoomName = (value: string) => {\r\n    this.roomName.next(value);\r\n  };\r\n\r\n  updateMember = (value: string) => {\r\n    if (value.length > 0 && value.includes(\"_\")) {\r\n      this.updateIslevel(value.split(\"_\")[1]);\r\n      value = value.split(\"_\")[0];\r\n    }\r\n    this.member.next(value);\r\n  };\r\n\r\n  updateAdminPasscode = (value: string) => {\r\n    this.adminPasscode.next(value);\r\n  };\r\n\r\n  updateIslevel = (value: string) => {\r\n    this.islevel.next(value);\r\n  };\r\n\r\n  updateCoHost = (value: string) => {\r\n    this.coHost.next(value);\r\n  };\r\n\r\n  updateCoHostResponsibility = (value: CoHostResponsibility[]) => {\r\n    this.coHostResponsibility.next(value);\r\n  };\r\n\r\n  updateYouAreCoHost = (value: boolean) => {\r\n    this.youAreCoHost.next(value);\r\n  };\r\n\r\n  updateYouAreHost = (value: boolean) => {\r\n    this.youAreHost.next(value);\r\n  };\r\n\r\n  updateConfirmedToRecord = (value: boolean) => {\r\n    this.confirmedToRecord.next(value);\r\n  };\r\n\r\n  updateMeetingDisplayType = (value: string) => {\r\n    this.meetingDisplayType.next(value);\r\n  };\r\n\r\n  updateMeetingVideoOptimized = (value: boolean) => {\r\n    this.meetingVideoOptimized.next(value);\r\n  };\r\n\r\n  updateEventType = (value: EventType) => {\r\n    this.eventType.next(value);\r\n    if (value != 'none') {\r\n      try {\r\n        setTimeout(() => {\r\n          this.handleResize();\r\n        }, 2000);\r\n      } catch {\r\n        /* handle error */\r\n      }\r\n    }\r\n  };\r\n\r\n  updateParticipants = (value: Participant[]) => {\r\n    this.participants.next(value);\r\n    this.participantsCounter.next(value.length);\r\n    this.filteredParticipants.next(this.participants.value);\r\n  };\r\n\r\n  updateFilteredParticipants = (value: Participant[]) => {\r\n    this.filteredParticipants.next(value);\r\n  };\r\n\r\n  updateParticipantsCounter = (value: number) => {\r\n    this.participantsCounter.next(value);\r\n  };\r\n\r\n  updateParticipantsFilter = (value: string) => {\r\n    this.participantsFilter.next(value);\r\n  };\r\n\r\n  updateConsume_sockets = (value: ConsumeSocket[]) => {\r\n    this.consume_sockets.next(value);\r\n  };\r\n\r\n  updateRtpCapabilities = (value: RtpCapabilities | null) => {\r\n    this.rtpCapabilities.next(value);\r\n  };\r\n\r\n  updateRoomRecvIPs = (value: string[]) => {\r\n    this.roomRecvIPs.next(value);\r\n  };\r\n\r\n  updateMeetingRoomParams = (value: MeetingRoomParams | null) => {\r\n    this.meetingRoomParams.next(value);\r\n  };\r\n\r\n  updateItemPageLimit = (value: number) => {\r\n    this.itemPageLimit.next(value);\r\n  };\r\n\r\n  updateAudioOnlyRoom = (value: boolean) => {\r\n    this.audioOnlyRoom.next(value);\r\n  };\r\n\r\n  updateAddForBasic = (value: boolean) => {\r\n    this.addForBasic.next(value);\r\n  };\r\n\r\n  updateScreenPageLimit = (value: number) => {\r\n    this.screenPageLimit.next(value);\r\n  };\r\n\r\n  updateShareScreenStarted = (value: boolean) => {\r\n    this.shareScreenStarted.next(value);\r\n  };\r\n\r\n  updateShared = (value: boolean) => {\r\n    this.shared.next(value);\r\n    this.screenShareActive.next(value);\r\n    if (value) {\r\n      setTimeout(async () => {\r\n        window.dispatchEvent(new Event('resize'));\r\n      }, 2000);\r\n    }\r\n  };\r\n\r\n  updateTargetOrientation = (value: string) => {\r\n    this.targetOrientation.next(value);\r\n  };\r\n\r\n  updateTargetResolution = (value: string) => {\r\n    this.targetResolution.next(value);\r\n  };\r\n\r\n  updateTargetResolutionHost = (value: string) => {\r\n    this.targetResolutionHost.next(value);\r\n  };\r\n\r\n  updateVidCons = (value: VidCons) => {\r\n    this.vidCons.next(value);\r\n  };\r\n\r\n  updateFrameRate = (value: number) => {\r\n    this.frameRate.next(value);\r\n  };\r\n\r\n  updateHParams = (value: HParamsType) => {\r\n    this.hParams.next(value);\r\n  };\r\n\r\n  updateVParams = (value: VParamsType) => {\r\n    this.vParams.next(value);\r\n  };\r\n\r\n  updateScreenParams = (value: ScreenParamsType) => {\r\n    this.screenParams.next(value);\r\n  };\r\n\r\n  updateAParams = (value: AParamsType) => {\r\n    this.aParams.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPausesLimit = (value: number) => {\r\n    this.recordingAudioPausesLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPausesCount = (value: number) => {\r\n    this.recordingAudioPausesCount.next(value);\r\n  };\r\n\r\n  updateRecordingAudioSupport = (value: boolean) => {\r\n    this.recordingAudioSupport.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPeopleLimit = (value: number) => {\r\n    this.recordingAudioPeopleLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAudioParticipantsTimeLimit = (value: number) => {\r\n    this.recordingAudioParticipantsTimeLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPausesCount = (value: number) => {\r\n    this.recordingVideoPausesCount.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPausesLimit = (value: number) => {\r\n    this.recordingVideoPausesLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoSupport = (value: boolean) => {\r\n    this.recordingVideoSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPeopleLimit = (value: number) => {\r\n    this.recordingVideoPeopleLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsTimeLimit = (value: number) => {\r\n    this.recordingVideoParticipantsTimeLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAllParticipantsSupport = (value: boolean) => {\r\n    this.recordingAllParticipantsSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsSupport = (value: boolean) => {\r\n    this.recordingVideoParticipantsSupport.next(value);\r\n  };\r\n\r\n  updateRecordingAllParticipantsFullRoomSupport = (value: boolean) => {\r\n    this.recordingAllParticipantsFullRoomSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsFullRoomSupport = (value: boolean) => {\r\n    this.recordingVideoParticipantsFullRoomSupport.next(value);\r\n  };\r\n\r\n  updateRecordingPreferredOrientation = (value: string) => {\r\n    this.recordingPreferredOrientation.next(value);\r\n  };\r\n\r\n  updateRecordingSupportForOtherOrientation = (value: boolean) => {\r\n    this.recordingSupportForOtherOrientation.next(value);\r\n  };\r\n\r\n  updateRecordingMultiFormatsSupport = (value: boolean) => {\r\n    this.recordingMultiFormatsSupport.next(value);\r\n  };\r\n\r\n  updateUserRecordingParams = (value: UserRecordingParams) => {\r\n    this.userRecordingParams.next(value);\r\n  };\r\n\r\n  updateCanRecord = (value: boolean) => {\r\n    this.canRecord.next(value);\r\n  };\r\n\r\n  updateStartReport = (value: boolean) => {\r\n    this.startReport.next(value);\r\n  };\r\n\r\n  updateEndReport = (value: boolean) => {\r\n    this.endReport.next(value);\r\n  };\r\n\r\n  updateRecordTimerInterval = (value: NodeJS.Timeout | null) => {\r\n    this.recordTimerInterval.next(value);\r\n  };\r\n\r\n  updateRecordStartTime = (value: number) => {\r\n    this.recordStartTime.next(value);\r\n  };\r\n\r\n  updateRecordElapsedTime = (value: number) => {\r\n    this.recordElapsedTime.next(value);\r\n  };\r\n\r\n  updateIsTimerRunning = (value: boolean) => {\r\n    this.isTimerRunning.next(value);\r\n  };\r\n\r\n  updateCanPauseResume = (value: boolean) => {\r\n    this.canPauseResume.next(value);\r\n  };\r\n\r\n  updateRecordChangeSeconds = (value: number) => {\r\n    this.recordChangeSeconds.next(value);\r\n  };\r\n\r\n  updatePauseLimit = (value: number) => {\r\n    this.pauseLimit.next(value);\r\n  };\r\n\r\n  updatePauseRecordCount = (value: number) => {\r\n    this.pauseRecordCount.next(value);\r\n  };\r\n\r\n  updateCanLaunchRecord = (value: boolean) => {\r\n    this.canLaunchRecord.next(value);\r\n  };\r\n\r\n  updateStopLaunchRecord = (value: boolean) => {\r\n    this.stopLaunchRecord.next(value);\r\n  };\r\n\r\n  updateParticipantsAll = (value: Participant[]) => {\r\n    this.participantsAll.next(value);\r\n  };\r\n\r\n  updateFirstAll = (value: boolean) => {\r\n    this.firstAll.next(value);\r\n  };\r\n\r\n  updateUpdateMainWindow = (value: boolean) => {\r\n    this.updateMainWindow.next(value);\r\n  };\r\n\r\n  updateFirst_round = (value: boolean) => {\r\n    this.first_round.next(value);\r\n  };\r\n\r\n  updateLandScaped = (value: boolean) => {\r\n    this.landScaped.next(value);\r\n  };\r\n\r\n  updateLock_screen = (value: boolean) => {\r\n    this.lock_screen.next(value);\r\n  };\r\n\r\n  updateScreenId = (value: string) => {\r\n    this.screenId.next(value);\r\n  };\r\n\r\n  updateAllVideoStreams = (value: (Participant | Stream)[]) => {\r\n    this.allVideoStreams.next(value);\r\n  };\r\n\r\n  updateNewLimitedStreams = (value: (Participant | Stream)[]) => {\r\n    this.newLimitedStreams.next(value);\r\n  };\r\n\r\n  updateNewLimitedStreamsIDs = (value: string[]) => {\r\n    this.newLimitedStreamsIDs.next(value);\r\n  };\r\n\r\n  updateActiveSounds = (value: string[]) => {\r\n    this.activeSounds.next(value);\r\n  };\r\n\r\n  updateScreenShareIDStream = (value: string) => {\r\n    this.screenShareIDStream.next(value);\r\n  };\r\n\r\n  updateScreenShareNameStream = (value: string) => {\r\n    this.screenShareNameStream.next(value);\r\n  };\r\n\r\n  updateAdminIDStream = (value: string) => {\r\n    this.adminIDStream.next(value);\r\n  };\r\n\r\n  updateAdminNameStream = (value: string) => {\r\n    this.adminNameStream.next(value);\r\n  };\r\n\r\n  updateYouYouStream = (value: (Participant | Stream)[]) => {\r\n    this.youYouStream.next(value);\r\n  };\r\n\r\n  updateYouYouStreamIDs = (value: string[]) => {\r\n    this.youYouStreamIDs.next(value);\r\n  };\r\n\r\n  updateLocalStream = (value: MediaStream | null) => {\r\n    this.localStream.next(value);\r\n  };\r\n\r\n  updateRecordStarted = (value: boolean) => {\r\n    this.recordStarted.next(value);\r\n  };\r\n\r\n  updateRecordResumed = (value: boolean) => {\r\n    this.recordResumed.next(value);\r\n  };\r\n\r\n  updateRecordPaused = (value: boolean) => {\r\n    this.recordPaused.next(value);\r\n  };\r\n\r\n  updateRecordStopped = (value: boolean) => {\r\n    this.recordStopped.next(value);\r\n  };\r\n\r\n  updateAdminRestrictSetting = (value: boolean) => {\r\n    this.adminRestrictSetting.next(value);\r\n  };\r\n\r\n  updateVideoRequestState = (value: string | null) => {\r\n    this.videoRequestState.next(value);\r\n  };\r\n\r\n  updateVideoRequestTime = (value: number) => {\r\n    this.videoRequestTime.next(value);\r\n  };\r\n\r\n  updateVideoAction = (value: boolean) => {\r\n    this.videoAction.next(value);\r\n  };\r\n\r\n  updateLocalStreamVideo = (value: MediaStream | null) => {\r\n    this.localStreamVideo.next(value);\r\n  };\r\n\r\n  updateUserDefaultVideoInputDevice = (value: string) => {\r\n    this.userDefaultVideoInputDevice.next(value);\r\n  };\r\n\r\n  updateCurrentFacingMode = (value: string) => {\r\n    this.currentFacingMode.next(value);\r\n  };\r\n\r\n  updatePrevFacingMode = (value: string) => {\r\n    this.prevFacingMode.next(value);\r\n  };\r\n\r\n  updateDefVideoID = (value: string) => {\r\n    this.defVideoID.next(value);\r\n  };\r\n\r\n  updateAllowed = (value: boolean) => {\r\n    this.allowed.next(value);\r\n  };\r\n\r\n  updateDispActiveNames = (value: string[]) => {\r\n    this.dispActiveNames.next(value);\r\n  };\r\n\r\n  updateP_dispActiveNames = (value: string[]) => {\r\n    this.p_dispActiveNames.next(value);\r\n  };\r\n\r\n  updateActiveNames = (value: string[]) => {\r\n    this.activeNames.next(value);\r\n  };\r\n\r\n  updatePrevActiveNames = (value: string[]) => {\r\n    this.prevActiveNames.next(value);\r\n  };\r\n\r\n  updateP_activeNames = (value: string[]) => {\r\n    this.p_activeNames.next(value);\r\n  };\r\n\r\n  updateMembersReceived = (value: boolean) => {\r\n    this.membersReceived.next(value);\r\n  };\r\n\r\n  updateDeferScreenReceived = (value: boolean) => {\r\n    this.deferScreenReceived.next(value);\r\n  };\r\n\r\n  updateHostFirstSwitch = (value: boolean) => {\r\n    this.hostFirstSwitch.next(value);\r\n  };\r\n\r\n  updateMicAction = (value: boolean) => {\r\n    this.micAction.next(value);\r\n  };\r\n\r\n  updateScreenAction = (value: boolean) => {\r\n    this.screenAction.next(value);\r\n  };\r\n\r\n  updateChatAction = (value: boolean) => {\r\n    this.chatAction.next(value);\r\n  };\r\n\r\n  updateAudioRequestState = (value: string | null) => {\r\n    this.audioRequestState.next(value);\r\n  };\r\n\r\n  updateScreenRequestState = (value: string | null) => {\r\n    this.screenRequestState.next(value);\r\n  };\r\n\r\n  updateChatRequestState = (value: string | null) => {\r\n    this.chatRequestState.next(value);\r\n  };\r\n\r\n  updateAudioRequestTime = (value: number) => {\r\n    this.audioRequestTime.next(value);\r\n  };\r\n\r\n  updateScreenRequestTime = (value: number) => {\r\n    this.screenRequestTime.next(value);\r\n  };\r\n\r\n  updateChatRequestTime = (value: number) => {\r\n    this.chatRequestTime.next(value);\r\n  };\r\n\r\n  updateOldSoundIds = (value: string[]) => {\r\n    this.oldSoundIds.next(value);\r\n  };\r\n\r\n  updateHostLabel = (value: string) => {\r\n    this.hostLabel.next(value);\r\n  };\r\n\r\n  updateMainScreenFilled = (value: boolean) => {\r\n    this.mainScreenFilled.next(value);\r\n  };\r\n\r\n  updateLocalStreamScreen = (value: MediaStream | null) => {\r\n    this.localStreamScreen.next(value);\r\n  };\r\n\r\n  updateScreenAlreadyOn = (value: boolean) => {\r\n    this.screenAlreadyOn.next(value);\r\n  };\r\n\r\n  updateChatAlreadyOn = (value: boolean) => {\r\n    this.chatAlreadyOn.next(value);\r\n  };\r\n\r\n  updateRedirectURL = (value: string) => {\r\n    this.redirectURL.next(value);\r\n  };\r\n\r\n  updateOldAllStreams = (value: (Participant | Stream)[]) => {\r\n    this.oldAllStreams.next(value);\r\n  };\r\n\r\n  updateAdminVidID = (value: string) => {\r\n    this.adminVidID.next(value);\r\n  };\r\n\r\n  updateStreamNames = (value: Stream[]) => {\r\n    this.streamNames.next(value);\r\n  };\r\n\r\n  updateNon_alVideoStreams = (value: Participant[]) => {\r\n    this.non_alVideoStreams.next(value);\r\n  };\r\n\r\n  updateSortAudioLoudness = (value: boolean) => {\r\n    this.sortAudioLoudness.next(value);\r\n  };\r\n\r\n  updateAudioDecibels = (value: AudioDecibels[]) => {\r\n    this.audioDecibels.next(value);\r\n  };\r\n\r\n  updateMixed_alVideoStreams = (value: (Participant | Stream)[]) => {\r\n    this.mixed_alVideoStreams.next(value);\r\n  };\r\n\r\n  updateNon_alVideoStreams_muted = (value: Participant[]) => {\r\n    this.non_alVideoStreams_muted.next(value);\r\n  };\r\n\r\n  updatePaginatedStreams = (value: (Participant | Stream)[][]) => {\r\n    this.paginatedStreams.next(value);\r\n  };\r\n\r\n  updateLocalStreamAudio = (value: MediaStream | null) => {\r\n    this.localStreamAudio.next(value);\r\n  };\r\n\r\n  updateDefAudioID = (value: string) => {\r\n    this.defAudioID.next(value);\r\n  };\r\n\r\n  updateUserDefaultAudioInputDevice = (value: string) => {\r\n    this.userDefaultAudioInputDevice.next(value);\r\n  };\r\n\r\n  updateUserDefaultAudioOutputDevice = (value: string) => {\r\n    this.userDefaultAudioOutputDevice.next(value);\r\n  };\r\n\r\n  updatePrevAudioInputDevice = (value: string) => {\r\n    this.prevAudioInputDevice.next(value);\r\n  };\r\n\r\n  updatePrevVideoInputDevice = (value: string) => {\r\n    this.prevVideoInputDevice.next(value);\r\n  };\r\n\r\n  updateAudioPaused = (value: boolean) => {\r\n    this.audioPaused.next(value);\r\n  };\r\n\r\n  updateMainScreenPerson = (value: string) => {\r\n    this.mainScreenPerson.next(value);\r\n  };\r\n\r\n  updateAdminOnMainScreen = (value: boolean) => {\r\n    this.adminOnMainScreen.next(value);\r\n  };\r\n\r\n  updateScreenStates = (value: ScreenState[]) => {\r\n    this.screenStates.next(value);\r\n  };\r\n\r\n  updatePrevScreenStates = (value: ScreenState[]) => {\r\n    this.prevScreenStates.next(value);\r\n  };\r\n\r\n  updateUpdateDateState = (value: number | null) => {\r\n    this.updateDateState.next(value);\r\n  };\r\n\r\n  updateLastUpdate = (value: number | null) => {\r\n    this.lastUpdate.next(value);\r\n  };\r\n\r\n  updateNForReadjustRecord = (value: number) => {\r\n    this.nForReadjustRecord.next(value);\r\n  };\r\n\r\n  updateFixedPageLimit = (value: number) => {\r\n    this.fixedPageLimit.next(value);\r\n  };\r\n\r\n  updateRemoveAltGrid = (value: boolean) => {\r\n    this.removeAltGrid.next(value);\r\n  };\r\n\r\n  updateNForReadjust = (value: number) => {\r\n    this.nForReadjust.next(value);\r\n  };\r\n\r\n  updateLastReorderTime = (value: number) => {\r\n    this.lastReorderTime.next(value);\r\n  };\r\n\r\n  updateAudStreamNames = (value: Stream[]) => {\r\n    this.audStreamNames.next(value);\r\n  };\r\n\r\n  updateCurrentUserPage = (value: number) => {\r\n    this.currentUserPage.next(value);\r\n  };\r\n\r\n  updateMainHeightWidth = (value: number) => {\r\n    this.mainHeightWidth.next(value);\r\n  };\r\n\r\n  updatePrevMainHeightWidth = (value: number) => {\r\n    this.prevMainHeightWidth.next(value);\r\n  };\r\n\r\n  updatePrevDoPaginate = (value: boolean) => {\r\n    this.prevDoPaginate.next(value);\r\n  };\r\n\r\n  updateDoPaginate = (value: boolean) => {\r\n    this.doPaginate.next(value);\r\n  };\r\n\r\n  updateShareEnded = (value: boolean) => {\r\n    this.shareEnded.next(value);\r\n  };\r\n\r\n  updateLStreams = (value: (Participant | Stream)[]) => {\r\n    this.lStreams.next(value);\r\n  };\r\n\r\n  updateChatRefStreams = (value: (Participant | Stream)[]) => {\r\n    this.chatRefStreams.next(value);\r\n  };\r\n\r\n  updateControlHeight = (value: number) => {\r\n    this.controlHeight.next(value);\r\n  };\r\n\r\n  updateIsWideScreen = (value: boolean) => {\r\n    this.isWideScreen.next(value);\r\n  };\r\n\r\n  updateIsMediumScreen = (value: boolean) => {\r\n    this.isMediumScreen.next(value);\r\n  };\r\n\r\n  updateIsSmallScreen = (value: boolean) => {\r\n    this.isSmallScreen.next(value);\r\n  };\r\n\r\n  updateAddGrid = (value: boolean) => {\r\n    this.addGrid.next(value);\r\n  };\r\n\r\n  updateAddAltGrid = (value: boolean) => {\r\n    this.addAltGrid.next(value);\r\n  };\r\n\r\n  updateGridRows = (value: number) => {\r\n    this.gridRows.next(value);\r\n  };\r\n\r\n  updateGridCols = (value: number) => {\r\n    this.gridCols.next(value);\r\n  };\r\n\r\n  updateAltGridRows = (value: number) => {\r\n    this.altGridRows.next(value);\r\n  };\r\n\r\n  updateAltGridCols = (value: number) => {\r\n    this.altGridCols.next(value);\r\n  };\r\n\r\n  updateNumberPages = (value: number) => {\r\n    this.numberPages.next(value);\r\n  };\r\n\r\n  updateCurrentStreams = (value: (Participant | Stream)[]) => {\r\n    this.currentStreams.next(value);\r\n  };\r\n\r\n  updateShowMiniView = (value: boolean) => {\r\n    this.showMiniView.next(value);\r\n  };\r\n\r\n  updateNStream = (value: MediaStream | null) => {\r\n    this.nStream.next(value);\r\n  };\r\n\r\n  updateDefer_receive = (value: boolean) => {\r\n    this.defer_receive.next(value);\r\n  };\r\n\r\n  updateAllAudioStreams = (value: (Participant | Stream)[]) => {\r\n    this.allAudioStreams.next(value);\r\n  };\r\n\r\n  updateRemoteScreenStream = (value: Stream[]) => {\r\n    this.remoteScreenStream.next(value);\r\n  };\r\n\r\n  updateScreenProducer = (value: Producer | null) => {\r\n    this.screenProducer.next(value);\r\n  };\r\n\r\n  updateLocalScreenProducer = (value: Producer | null) => {\r\n    this.localScreenProducer.next(value);\r\n  };\r\n\r\n  updateGotAllVids = (value: boolean) => {\r\n    this.gotAllVids.next(value);\r\n  };\r\n\r\n  updatePaginationHeightWidth = (value: number) => {\r\n    this.paginationHeightWidth.next(value);\r\n  };\r\n\r\n  updatePaginationDirection = (value: 'horizontal' | 'vertical') => {\r\n    this.paginationDirection.next(value);\r\n  };\r\n\r\n  updateGridSizes = (value: GridSizes) => {\r\n    this.gridSizes.next(value);\r\n  };\r\n\r\n  updateScreenForceFullDisplay = (value: boolean) => {\r\n    this.screenForceFullDisplay.next(value);\r\n  };\r\n\r\n  updateMainGridStream = (value: CustomMediaComponent[]) => {\r\n    this.mainGridStream.next(value);\r\n  };\r\n\r\n  updateOtherGridStreams = (value: CustomMediaComponent[][]) => {\r\n    this.otherGridStreams.next(value);\r\n  };\r\n\r\n  updateAudioOnlyStreams = (value: CustomMediaComponent[]) => {\r\n    this.audioOnlyStreams.next(value);\r\n  };\r\n\r\n  updateVideoInputs = (value: MediaDeviceInfo[]) => {\r\n    this.videoInputs.next(value);\r\n  };\r\n\r\n  updateAudioInputs = (value: MediaDeviceInfo[]) => {\r\n    this.audioInputs.next(value);\r\n  };\r\n\r\n  updateMeetingProgressTime = (value: string) => {\r\n    this.meetingProgressTime.next(value);\r\n  };\r\n\r\n  updateMeetingElapsedTime = (value: number) => {\r\n    this.meetingElapsedTime.next(value);\r\n  };\r\n\r\n  updateRef_participants = (value: Participant[]) => {\r\n    this.ref_participants.next(value);\r\n  };\r\n\r\n  // Messages\r\n  messages = new BehaviorSubject<Message[]>([]);\r\n  startDirectMessage = new BehaviorSubject<boolean>(false);\r\n  directMessageDetails = new BehaviorSubject<Participant | null>(null);\r\n  showMessagesBadge = new BehaviorSubject<boolean>(false);\r\n\r\n  // Event Settings\r\n  audioSetting = new BehaviorSubject<string>('allow');\r\n  videoSetting = new BehaviorSubject<string>('allow');\r\n  screenshareSetting = new BehaviorSubject<string>('allow');\r\n  chatSetting = new BehaviorSubject<string>('allow');\r\n\r\n  // Display Settings\r\n  displayOption = new BehaviorSubject<string>('media');\r\n  autoWave = new BehaviorSubject<boolean>(true);\r\n  forceFullDisplay = new BehaviorSubject<boolean>(true);\r\n  prevForceFullDisplay = new BehaviorSubject<boolean>(false);\r\n  prevMeetingDisplayType = new BehaviorSubject<string>('video');\r\n\r\n  // Waiting Room\r\n  waitingRoomFilter = new BehaviorSubject<string>('');\r\n  waitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>(\r\n    this.useSeed && this.seedData?.waitingList ? this.seedData.waitingList : [],\r\n  );\r\n  waitingRoomCounter = new BehaviorSubject<number>(0);\r\n  filteredWaitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>(\r\n    this.useSeed && this.seedData?.waitingList ? this.seedData.waitingList : [],\r\n  );\r\n\r\n  // Requests\r\n  requestFilter = new BehaviorSubject<string>('');\r\n  requestList = new BehaviorSubject<Request[]>(\r\n    this.useSeed && this.seedData?.requests ? this.seedData.requests : [],\r\n  );\r\n  requestCounter = new BehaviorSubject<number>(0);\r\n  filteredRequestList = new BehaviorSubject<Request[]>(\r\n    this.useSeed && this.seedData?.requests ? this.seedData.requests : [],\r\n  );\r\n\r\n  // Total Requests and Waiting Room\r\n  totalReqWait = new BehaviorSubject<number>(0);\r\n\r\n  // Alerts\r\n  alertVisible = new BehaviorSubject<boolean>(false);\r\n  alertMessage = new BehaviorSubject<string>('');\r\n  alertType = new BehaviorSubject<'success' | 'danger'>('success');\r\n  alertDuration = new BehaviorSubject<number>(3000);\r\n\r\n  // Progress Timer\r\n  progressTimerVisible = new BehaviorSubject<boolean>(true);\r\n  progressTimerValue = new BehaviorSubject<number>(0);\r\n\r\n  // Menu Modals\r\n  isMenuModalVisible = new BehaviorSubject<boolean>(false);\r\n  isRecordingModalVisible = new BehaviorSubject<boolean>(false);\r\n  isSettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isRequestsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isWaitingModalVisible = new BehaviorSubject<boolean>(false);\r\n  isCoHostModalVisible = new BehaviorSubject<boolean>(false);\r\n  isMediaSettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isDisplaySettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Other Modals\r\n  isParticipantsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isMessagesModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfirmExitModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfirmHereModalVisible = new BehaviorSubject<boolean>(false);\r\n  isShareEventModalVisible = new BehaviorSubject<boolean>(false);\r\n  isLoadingModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Recording Options\r\n  recordingMediaOptions = new BehaviorSubject<string>('video');\r\n  recordingAudioOptions = new BehaviorSubject<string>('all');\r\n  recordingVideoOptions = new BehaviorSubject<string>('all');\r\n  recordingVideoType = new BehaviorSubject<string>('fullDisplay');\r\n  recordingVideoOptimized = new BehaviorSubject<boolean>(false);\r\n  recordingDisplayType = new BehaviorSubject<'video' | 'media' | 'all'>('video');\r\n  recordingAddHLS = new BehaviorSubject<boolean>(true);\r\n  recordingNameTags = new BehaviorSubject<boolean>(true);\r\n  recordingBackgroundColor = new BehaviorSubject<string>('#83c0e9');\r\n  recordingNameTagsColor = new BehaviorSubject<string>('#ffffff');\r\n  recordingAddText = new BehaviorSubject<boolean>(false);\r\n  recordingCustomText = new BehaviorSubject<string>('Add Text');\r\n  recordingCustomTextPosition = new BehaviorSubject<string>('top');\r\n  recordingCustomTextColor = new BehaviorSubject<string>('#ffffff');\r\n  recordingOrientationVideo = new BehaviorSubject<string>('landscape');\r\n  clearedToResume = new BehaviorSubject<boolean>(true);\r\n  clearedToRecord = new BehaviorSubject<boolean>(true);\r\n  recordState = new BehaviorSubject<string>('green');\r\n  showRecordButtons = new BehaviorSubject<boolean>(false);\r\n  recordingProgressTime = new BehaviorSubject<string>('00:00:00');\r\n  audioSwitching = new BehaviorSubject<boolean>(false);\r\n  videoSwitching = new BehaviorSubject<boolean>(false);\r\n\r\n  // Media States\r\n  videoAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  audioAlreadyOn = new BehaviorSubject<boolean>(false);\r\n\r\n  componentSizes = new BehaviorSubject<ComponentSizes>({\r\n    mainHeight: 0,\r\n    otherHeight: 0,\r\n    mainWidth: 0,\r\n    otherWidth: 0,\r\n  });\r\n\r\n  // Permissions\r\n  hasCameraPermission = new BehaviorSubject<boolean>(false);\r\n  hasAudioPermission = new BehaviorSubject<boolean>(false);\r\n\r\n  // Transports\r\n  transportCreated = new BehaviorSubject<boolean>(false);\r\n  localTransportCreated = new BehaviorSubject<boolean>(false);\r\n  transportCreatedVideo = new BehaviorSubject<boolean>(false);\r\n  transportCreatedAudio = new BehaviorSubject<boolean>(false);\r\n  transportCreatedScreen = new BehaviorSubject<boolean>(false);\r\n  producerTransport = new BehaviorSubject<Transport | null>(null);\r\n  localProducerTransport = new BehaviorSubject<Transport | null>(null);\r\n  videoProducer = new BehaviorSubject<Producer | null>(null);\r\n  localVideoProducer = new BehaviorSubject<Producer | null>(null);\r\n  params = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  videoParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  audioParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  audioProducer = new BehaviorSubject<Producer | null>(null);\r\n  audioLevel = new BehaviorSubject<number>(0);\r\n  localAudioProducer = new BehaviorSubject<Producer | null>(null);\r\n  consumerTransports = new BehaviorSubject<TransportType[]>([]);\r\n  consumingTransports = new BehaviorSubject<string[]>([]);\r\n\r\n  // Polls\r\n  polls = new BehaviorSubject<Poll[]>(\r\n    this.useSeed && this.seedData?.polls ? this.seedData.polls : [],\r\n  );\r\n  poll = new BehaviorSubject<Poll | null>(null);\r\n  isPollModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Background\r\n  customImage = new BehaviorSubject<string>('');\r\n  selectedImage = new BehaviorSubject<string>('');\r\n  segmentVideo = new BehaviorSubject<MediaStream | null>(null);\r\n  selfieSegmentation = new BehaviorSubject<SelfieSegmentation | null>(null);\r\n  pauseSegmentation = new BehaviorSubject<boolean>(false);\r\n  processedStream = new BehaviorSubject<MediaStream | null>(null);\r\n  keepBackground = new BehaviorSubject<boolean>(false);\r\n  backgroundHasChanged = new BehaviorSubject<boolean>(false);\r\n  virtualStream = new BehaviorSubject<MediaStream | null>(null);\r\n  mainCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  prevKeepBackground = new BehaviorSubject<boolean>(false);\r\n  appliedBackground = new BehaviorSubject<boolean>(false);\r\n  isBackgroundModalVisible = new BehaviorSubject<boolean>(false);\r\n  autoClickBackground = new BehaviorSubject<boolean>(false);\r\n\r\n  // Breakout Rooms\r\n  breakoutRooms = new BehaviorSubject<BreakoutParticipant[][]>(\r\n    this.useSeed && this.seedData?.breakoutRooms ? this.seedData.breakoutRooms : [],\r\n  );\r\n  currentRoomIndex = new BehaviorSubject<number>(0);\r\n  canStartBreakout = new BehaviorSubject<boolean>(false);\r\n  breakOutRoomStarted = new BehaviorSubject<boolean>(false);\r\n  breakOutRoomEnded = new BehaviorSubject<boolean>(false);\r\n  hostNewRoom = new BehaviorSubject<number>(-1);\r\n  limitedBreakRoom = new BehaviorSubject<BreakoutParticipant[]>([]);\r\n  mainRoomsLength = new BehaviorSubject<number>(0);\r\n  memberRoom = new BehaviorSubject<number>(-1);\r\n  isBreakoutRoomsModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Whiteboard\r\n  whiteboardUsers = new BehaviorSubject<WhiteboardUser[]>(\r\n    this.useSeed && this.seedData?.whiteboardUsers ? this.seedData.whiteboardUsers : [],\r\n  );\r\n  currentWhiteboardIndex = new BehaviorSubject<number>(0);\r\n  canStartWhiteboard = new BehaviorSubject<boolean>(false);\r\n  whiteboardStarted = new BehaviorSubject<boolean>(false);\r\n  whiteboardEnded = new BehaviorSubject<boolean>(false);\r\n  whiteboardLimit = new BehaviorSubject<number>(4);\r\n  isWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfigureWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\r\n  shapes = new BehaviorSubject<Shape[]>([]);\r\n  useImageBackground = new BehaviorSubject<boolean>(true);\r\n  redoStack = new BehaviorSubject<Shape[]>([]);\r\n  undoStack = new BehaviorSubject<string[]>([]);\r\n  canvasStream = new BehaviorSubject<MediaStream | null>(null);\r\n  canvasWhiteboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n\r\n  // Screenboard\r\n  canvasScreenboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  processedScreenStream = new BehaviorSubject<MediaStream | null>(null);\r\n  annotateScreenStream = new BehaviorSubject<boolean>(false);\r\n  mainScreenCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  isScreenboardModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  //state variables for the control buttons\r\n  micActive = new BehaviorSubject<boolean>(\r\n    this.audioAlreadyOn.value ? this.audioAlreadyOn.value : false,\r\n  );\r\n  videoActive = new BehaviorSubject<boolean>(\r\n    this.videoAlreadyOn.value ? this.videoAlreadyOn.value : false,\r\n  );\r\n  screenShareActive = new BehaviorSubject<boolean>(false);\r\n  endCallActive = new BehaviorSubject<boolean>(false);\r\n  participantsActive = new BehaviorSubject<boolean>(false);\r\n  menuActive = new BehaviorSubject<boolean>(false);\r\n  commentsActive = new BehaviorSubject<boolean>(false);\r\n\r\n  // Update functions\r\n  updateMessages = (value: Message[]) => {\r\n    this.messages.next(value);\r\n  };\r\n\r\n  updateStartDirectMessage = (value: boolean) => {\r\n    this.startDirectMessage.next(value);\r\n  };\r\n\r\n  updateDirectMessageDetails = (value: Participant | null) => {\r\n    this.directMessageDetails.next(value);\r\n  };\r\n\r\n  updateShowMessagesBadge = (value: boolean) => {\r\n    this.showMessagesBadge.next(value);\r\n  };\r\n\r\n  updateAudioSetting = (value: string) => {\r\n    this.audioSetting.next(value);\r\n  };\r\n\r\n  updateVideoSetting = (value: string) => {\r\n    this.videoSetting.next(value);\r\n  };\r\n\r\n  updateScreenshareSetting = (value: string) => {\r\n    this.screenshareSetting.next(value);\r\n  };\r\n\r\n  updateChatSetting = (value: string) => {\r\n    this.chatSetting.next(value);\r\n  };\r\n\r\n  updateDisplayOption = (value: string) => {\r\n    this.displayOption.next(value);\r\n  };\r\n\r\n  updateAutoWave = (value: boolean) => {\r\n    this.autoWave.next(value);\r\n  };\r\n\r\n  updateForceFullDisplay = (value: boolean) => {\r\n    this.forceFullDisplay.next(value);\r\n  };\r\n\r\n  updatePrevForceFullDisplay = (value: boolean) => {\r\n    this.prevForceFullDisplay.next(value);\r\n  };\r\n\r\n  updatePrevMeetingDisplayType = (value: string) => {\r\n    this.prevMeetingDisplayType.next(value);\r\n  };\r\n\r\n  updateWaitingRoomCounter = (value: number) => {\r\n    this.waitingRoomCounter.next(value);\r\n  };\r\n\r\n  updateWaitingRoomFilter = (value: string) => {\r\n    this.waitingRoomFilter.next(value);\r\n  };\r\n\r\n  updateWaitingRoomList = (value: WaitingRoomParticipant[]) => {\r\n    this.waitingRoomList.next(value);\r\n    this.filteredWaitingRoomList.next(value);\r\n    this.waitingRoomCounter.next(value.length);\r\n  };\r\n\r\n  onWaitingRoomFilterChange = (value: string) => {\r\n    if (value !== '' && value.length > 0) {\r\n      const filteredWaitingRoom = this.waitingRoomList\r\n        .getValue()\r\n        .filter((waitingRoom: WaitingRoomParticipant) => {\r\n          return waitingRoom.name.toLowerCase().includes(value.toLowerCase());\r\n        });\r\n      this.filteredWaitingRoomList.next(filteredWaitingRoom);\r\n      this.waitingRoomCounter.next(filteredWaitingRoom.length);\r\n    } else {\r\n      this.filteredWaitingRoomList.next(this.waitingRoomList.getValue());\r\n      this.waitingRoomCounter.next(this.waitingRoomList.getValue().length);\r\n    }\r\n  };\r\n\r\n  onWaitingRoomClose = () => {\r\n    this.updateIsWaitingModalVisible(false);\r\n  };\r\n\r\n  updateRequestCounter = (value: number) => {\r\n    this.requestCounter.next(value);\r\n  };\r\n\r\n  updateRequestFilter = (value: string) => {\r\n    this.requestFilter.next(value);\r\n  };\r\n\r\n  updateRequestList = (value: Request[]) => {\r\n    this.requestList.next(value);\r\n    this.filteredRequestList.next(value);\r\n    this.requestCounter.next(value.length);\r\n  };\r\n\r\n  onRequestFilterChange = (value: string) => {\r\n    if (value !== '' && value.length > 0) {\r\n      const filteredRequest = this.requestList.getValue().filter((request: Request) => {\r\n        return request?.name?.toLowerCase().includes(value.toLowerCase());\r\n      });\r\n      this.filteredRequestList.next(filteredRequest);\r\n      this.requestCounter.next(filteredRequest.length);\r\n    } else {\r\n      this.filteredRequestList.next(this.requestList.getValue());\r\n      this.requestCounter.next(this.requestList.getValue().length);\r\n    }\r\n  };\r\n\r\n  onRequestClose = () => {\r\n    this.updateIsRequestsModalVisible(false);\r\n  };\r\n\r\n  updateTotalReqWait = (value: number) => {\r\n    this.totalReqWait.next(value);\r\n  };\r\n\r\n  updateAlertVisible = (value: boolean) => {\r\n    this.alertVisible.next(value);\r\n  };\r\n\r\n  updateAlertMessage = (value: string) => {\r\n    this.alertMessage.next(value);\r\n  };\r\n\r\n  updateAlertType = (value: 'success' | 'danger') => {\r\n    this.alertType.next(value);\r\n  };\r\n\r\n  updateAlertDuration = (value: number) => {\r\n    this.alertDuration.next(value);\r\n  };\r\n\r\n  updateProgressTimerVisible = (value: boolean) => {\r\n    this.progressTimerVisible.next(value);\r\n  };\r\n\r\n  updateProgressTimerValue = (value: number) => {\r\n    this.progressTimerValue.next(value);\r\n  };\r\n\r\n  updateIsMenuModalVisible = (value: boolean) => {\r\n    this.isMenuModalVisible.next(value);\r\n  };\r\n\r\n  updateIsRecordingModalVisible = (value: boolean) => {\r\n    this.isRecordingModalVisible.next(value);\r\n    if (value) {\r\n      this.updateConfirmedToRecord(false);\r\n    } else {\r\n      if (\r\n        this.clearedToRecord.getValue() &&\r\n        this.clearedToResume.getValue() &&\r\n        this.recordStarted.getValue()\r\n      ) {\r\n        this.updateShowRecordButtons(true);\r\n      }\r\n    }\r\n  };\r\n\r\n  updateIsSettingsModalVisible = (value: boolean) => {\r\n    this.isSettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsRequestsModalVisible = (value: boolean) => {\r\n    this.isRequestsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsWaitingModalVisible = (value: boolean) => {\r\n    this.isWaitingModalVisible.next(value);\r\n  };\r\n\r\n  updateIsCoHostModalVisible = (value: boolean) => {\r\n    this.isCoHostModalVisible.next(value);\r\n  };\r\n\r\n  updateIsMediaSettingsModalVisible = (value: boolean) => {\r\n    this.isMediaSettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsDisplaySettingsModalVisible = (value: boolean) => {\r\n    this.isDisplaySettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsParticipantsModalVisible = (value: boolean) => {\r\n    this.isParticipantsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsMessagesModalVisible = (value: boolean) => {\r\n    this.isMessagesModalVisible.next(value);\r\n    if (!value) {\r\n      this.updateShowMessagesBadge(false);\r\n    }\r\n  };\r\n\r\n  updateIsConfirmExitModalVisible = (value: boolean) => {\r\n    this.isConfirmExitModalVisible.next(value);\r\n  };\r\n\r\n  updateIsConfirmHereModalVisible = (value: boolean) => {\r\n    this.isConfirmHereModalVisible.next(value);\r\n  };\r\n\r\n  updateIsLoadingModalVisible = (value: boolean) => {\r\n    this.isLoadingModalVisible.next(value);\r\n  };\r\n\r\n  updateIsShareEventModalVisible = (value: boolean) => {\r\n    this.isShareEventModalVisible.next(value);\r\n  };\r\n\r\n  updateRecordingMediaOptions = (value: string) => {\r\n    this.recordingMediaOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAudioOptions = (value: string) => {\r\n    this.recordingAudioOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoOptions = (value: string) => {\r\n    this.recordingVideoOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoType = (value: string) => {\r\n    this.recordingVideoType.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoOptimized = (value: boolean) => {\r\n    this.recordingVideoOptimized.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingDisplayType = (value: 'video' | 'media' | 'all') => {\r\n    this.recordingDisplayType.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAddHLS = (value: boolean) => {\r\n    this.recordingAddHLS.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAddText = (value: boolean) => {\r\n    this.recordingAddText.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomText = (value: string) => {\r\n    this.recordingCustomText.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomTextPosition = (value: string) => {\r\n    this.recordingCustomTextPosition.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomTextColor = (value: string) => {\r\n    this.recordingCustomTextColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingNameTags = (value: boolean) => {\r\n    this.recordingNameTags.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingBackgroundColor = (value: string) => {\r\n    this.recordingBackgroundColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingNameTagsColor = (value: string) => {\r\n    this.recordingNameTagsColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingOrientationVideo = (value: string) => {\r\n    this.recordingOrientationVideo.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateClearedToResume = (value: boolean) => {\r\n    this.clearedToResume.next(value);\r\n  };\r\n\r\n  updateClearedToRecord = (value: boolean) => {\r\n    this.clearedToRecord.next(value);\r\n  };\r\n\r\n  updateRecordState = (value: string) => {\r\n    if (this.recordStarted.value && !this.recordStopped.value) {\r\n      if (!this.recordPaused.value) {\r\n        this.recordState.next('red');\r\n      } else {\r\n        this.recordState.next('yellow');\r\n      }\r\n    } else {\r\n      this.recordState.next(value);\r\n    }\r\n    this.recordState.next(value);\r\n  };\r\n\r\n  updateShowRecordButtons = (value: boolean) => {\r\n    this.showRecordButtons.next(value);\r\n  };\r\n\r\n  updateRecordingProgressTime = (value: string) => {\r\n    this.recordingProgressTime.next(value);\r\n    this.updateRecordTimerWidget();\r\n  };\r\n\r\n  updateAudioSwitching = (value: boolean) => {\r\n    this.audioSwitching.next(value);\r\n  };\r\n\r\n  updateVideoSwitching = (value: boolean) => {\r\n    this.videoSwitching.next(value);\r\n  };\r\n\r\n  updateVideoAlreadyOn = (value: boolean) => {\r\n    this.videoAlreadyOn.next(value);\r\n    this.videoActive.next(value);\r\n  };\r\n\r\n  updateAudioAlreadyOn = (value: boolean) => {\r\n    this.audioAlreadyOn.next(value);\r\n    this.micActive.next(value);\r\n  };\r\n\r\n  updateComponentSizes = (sizes: ComponentSizes) => {\r\n    this.componentSizes.next(sizes);\r\n  };\r\n\r\n  updateHasCameraPermission = (value: boolean) => {\r\n    this.hasCameraPermission.next(value);\r\n  };\r\n\r\n  updateHasAudioPermission = (value: boolean) => {\r\n    this.hasAudioPermission.next(value);\r\n  };\r\n\r\n  requestPermissionCamera(): Promise<string> {\r\n    // Implement the request permission logic here\r\n    return Promise.resolve('granted');\r\n  }\r\n\r\n  requestPermissionAudio(): Promise<string> {\r\n    // Implement the request permission logic here\r\n    return Promise.resolve('granted');\r\n  }\r\n\r\n  updateTransportCreated = (value: boolean) => {\r\n    this.transportCreated.next(value);\r\n  };\r\n\r\n  updateLocalTransportCreated = (value: boolean) => {\r\n    this.localTransportCreated.next(value);\r\n  };\r\n\r\n  updateTransportCreatedVideo = (value: boolean) => {\r\n    this.transportCreatedVideo.next(value);\r\n  };\r\n\r\n  updateTransportCreatedAudio = (value: boolean) => {\r\n    this.transportCreatedAudio.next(value);\r\n  };\r\n\r\n  updateTransportCreatedScreen = (value: boolean) => {\r\n    this.transportCreatedScreen.next(value);\r\n  };\r\n\r\n  updateProducerTransport = (value: Transport | null) => {\r\n    this.producerTransport.next(value);\r\n  };\r\n\r\n  updateLocalProducerTransport = (value: Transport | null) => {\r\n    this.localProducerTransport.next(value);\r\n  };\r\n\r\n  updateVideoProducer = (value: Producer | null) => {\r\n    this.videoProducer.next(value);\r\n  };\r\n\r\n  updateLocalVideoProducer = (value: Producer | null) => {\r\n    this.localVideoProducer.next(value);\r\n  }\r\n\r\n  updateParams = (value: ProducerOptions) => {\r\n    this.params.next(value);\r\n  };\r\n\r\n  updateVideoParams = (value: ProducerOptions) => {\r\n    this.videoParams.next(value);\r\n  };\r\n\r\n  updateAudioParams = (value: ProducerOptions) => {\r\n    this.audioParams.next(value);\r\n  };\r\n\r\n  updateAudioProducer = (value: Producer | null) => {\r\n    this.audioProducer.next(value);\r\n  };\r\n\r\n  updateAudioLevel = (value: number) => {\r\n    this.audioLevel.next(value);\r\n  };\r\n\r\n  updateLocalAudioProducer = (value: Producer | null) => {\r\n    this.localAudioProducer.next(value);\r\n  };\r\n\r\n  updateConsumerTransports = (value: TransportType[]) => {\r\n    this.consumerTransports.next(value);\r\n  };\r\n\r\n  updateConsumingTransports = (value: string[]) => {\r\n    this.consumingTransports.next(value);\r\n  };\r\n\r\n  updatePolls = (value: Poll[]) => {\r\n    this.polls.next(value);\r\n  };\r\n\r\n  updatePoll = (value: Poll | null) => {\r\n    this.poll.next(value);\r\n  };\r\n\r\n  updateIsPollModalVisible = (value: boolean) => {\r\n    this.isPollModalVisible.next(value);\r\n  };\r\n\r\n  updateCustomImage = (value: string) => {\r\n    this.customImage.next(value);\r\n  };\r\n\r\n  updateSelectedImage = (value: string) => {\r\n    this.selectedImage.next(value);\r\n  };\r\n\r\n  updateSegmentVideo = (value: MediaStream | null) => {\r\n    this.segmentVideo.next(value);\r\n  };\r\n\r\n  updateSelfieSegmentation = (value: SelfieSegmentation | null) => {\r\n    this.selfieSegmentation.next(value);\r\n  };\r\n\r\n  updatePauseSegmentation = (value: boolean) => {\r\n    this.pauseSegmentation.next(value);\r\n  };\r\n\r\n  updateProcessedStream = (value: MediaStream | null) => {\r\n    this.processedStream.next(value);\r\n  };\r\n\r\n  updateKeepBackground = (value: boolean) => {\r\n    this.keepBackground.next(value);\r\n  };\r\n\r\n  updateBackgroundHasChanged = (value: boolean) => {\r\n    this.backgroundHasChanged.next(value);\r\n  };\r\n\r\n  updateVirtualStream = (value: MediaStream | null) => {\r\n    this.virtualStream.next(value);\r\n  };\r\n\r\n  updateMainCanvas = (value: HTMLCanvasElement | null) => {\r\n    this.mainCanvas.next(value);\r\n  };\r\n\r\n  updatePrevKeepBackground = (value: boolean) => {\r\n    this.prevKeepBackground.next(value);\r\n  };\r\n\r\n  updateAppliedBackground = (value: boolean) => {\r\n    this.appliedBackground.next(value);\r\n  };\r\n\r\n  updateIsBackgroundModalVisible = (value: boolean) => {\r\n    this.isBackgroundModalVisible.next(value);\r\n  };\r\n\r\n  updateAutoClickBackground = (value: boolean) => {\r\n    this.autoClickBackground.next(value);\r\n  };\r\n\r\n  updateBreakoutRooms = (value: BreakoutParticipant[][]) => {\r\n    this.breakoutRooms.next(value);\r\n  };\r\n\r\n  updateCurrentRoomIndex = (value: number) => {\r\n    this.currentRoomIndex.next(value);\r\n  };\r\n\r\n  updateCanStartBreakout = (value: boolean) => {\r\n    this.canStartBreakout.next(value);\r\n  };\r\n\r\n  updateBreakOutRoomStarted = (value: boolean) => {\r\n    this.breakOutRoomStarted.next(value);\r\n  };\r\n\r\n  updateBreakOutRoomEnded = (value: boolean) => {\r\n    this.breakOutRoomEnded.next(value);\r\n  };\r\n\r\n  updateHostNewRoom = (value: number) => {\r\n    this.hostNewRoom.next(value);\r\n  };\r\n\r\n  updateLimitedBreakRoom = (value: BreakoutParticipant[]) => {\r\n    this.limitedBreakRoom.next(value);\r\n  };\r\n\r\n  updateMainRoomsLength = (value: number) => {\r\n    this.mainRoomsLength.next(value);\r\n  };\r\n\r\n  updateMemberRoom = (value: number) => {\r\n    this.memberRoom.next(value);\r\n  };\r\n\r\n  updateIsBreakoutRoomsModalVisible = (value: boolean) => {\r\n    this.isBreakoutRoomsModalVisible.next(value);\r\n  };\r\n\r\n  updateWhiteboardUsers = (value: WhiteboardUser[]) => {\r\n    this.whiteboardUsers.next(value);\r\n  };\r\n\r\n  updateCurrentWhiteboardIndex = (value: number) => {\r\n    this.currentWhiteboardIndex.next(value);\r\n  };\r\n\r\n  updateCanStartWhiteboard = (value: boolean) => {\r\n    this.canStartWhiteboard.next(value);\r\n  };\r\n\r\n  updateWhiteboardStarted = (value: boolean) => {\r\n    this.whiteboardStarted.next(value);\r\n  };\r\n\r\n  updateWhiteboardEnded = (value: boolean) => {\r\n    this.whiteboardEnded.next(value);\r\n  };\r\n\r\n  updateWhiteboardLimit = (value: number) => {\r\n    this.whiteboardLimit.next(value);\r\n  };\r\n\r\n  updateIsWhiteboardModalVisible = (value: boolean) => {\r\n    this.isWhiteboardModalVisible.next(value);\r\n  };\r\n\r\n  updateIsConfigureWhiteboardModalVisible = (value: boolean) => {\r\n    this.isConfigureWhiteboardModalVisible.next(value);\r\n  };\r\n\r\n  updateShapes = (value: Shape[]) => {\r\n    this.shapes.next(value);\r\n  };\r\n\r\n  updateUseImageBackground = (value: boolean) => {\r\n    this.useImageBackground.next(value);\r\n  };\r\n\r\n  updateRedoStack = (value: Shape[]) => {\r\n    this.redoStack.next(value);\r\n  };\r\n\r\n  updateUndoStack = (value: string[]) => {\r\n    this.undoStack.next(value);\r\n  };\r\n\r\n  updateCanvasStream = (value: MediaStream | null) => {\r\n    this.canvasStream.next(value);\r\n  };\r\n\r\n  updateCanvasWhiteboard = (value: HTMLCanvasElement | null) => {\r\n    this.canvasWhiteboard.next(value);\r\n  };\r\n\r\n  updateCanvasScreenboard = (value: HTMLCanvasElement | null) => {\r\n    this.canvasScreenboard.next(value);\r\n  };\r\n\r\n  updateProcessedScreenStream = (value: MediaStream | null) => {\r\n    this.processedScreenStream.next(value);\r\n  };\r\n\r\n  updateAnnotateScreenStream = (value: boolean) => {\r\n    this.annotateScreenStream.next(value);\r\n  };\r\n\r\n  updateMainScreenCanvas = (value: HTMLCanvasElement | null) => {\r\n    this.mainScreenCanvas.next(value);\r\n  };\r\n\r\n  updateIsScreenboardModalVisible = (value: boolean) => {\r\n    this.isScreenboardModalVisible.next(value);\r\n  };\r\n\r\n  checkOrientation = () => {\r\n    const isPortrait = window.matchMedia('(orientation: portrait)').matches;\r\n    return isPortrait ? 'portrait' : 'landscape';\r\n  };\r\n\r\n  showAlert = ({\r\n    message,\r\n    type,\r\n    duration = 3000,\r\n  }: {\r\n    message: string;\r\n    type: 'success' | 'danger';\r\n    duration?: number;\r\n  }) => {\r\n    this.updateAlertMessage(message);\r\n    this.updateAlertType(type);\r\n    this.updateAlertDuration(duration);\r\n    this.updateAlertVisible(true);\r\n  };\r\n\r\n  getAllParams() {\r\n    return {\r\n      localUIMode: this.localUIMode.value, // Local UI mode\r\n\r\n      // Room Details\r\n      roomName: this.roomName.value,\r\n      member: this.member.value,\r\n      adminPasscode: this.adminPasscode.value,\r\n      youAreCoHost: this.youAreCoHost.value,\r\n      youAreHost: this.youAreHost.value,\r\n      islevel: this.islevel.value,\r\n      confirmedToRecord: this.confirmedToRecord.value,\r\n      meetingDisplayType: this.meetingDisplayType.value,\r\n      meetingVideoOptimized: this.meetingVideoOptimized.value,\r\n      eventType: this.eventType.value,\r\n      participants: this.participants.value,\r\n      filteredParticipants: this.filteredParticipants.value,\r\n      participantsCounter: this.participantsCounter.value,\r\n      participantsFilter: this.participantsFilter.value,\r\n\r\n      // More room details - media\r\n      consume_sockets: this.consume_sockets.value,\r\n      rtpCapabilities: this.rtpCapabilities.value,\r\n      roomRecvIPs: this.roomRecvIPs.value,\r\n      meetingRoomParams: this.meetingRoomParams.value,\r\n      itemPageLimit: this.itemPageLimit.value,\r\n      audioOnlyRoom: this.audioOnlyRoom.value,\r\n      addForBasic: this.addForBasic.value,\r\n      screenPageLimit: this.screenPageLimit.value,\r\n      shareScreenStarted: this.shareScreenStarted.value,\r\n      shared: this.shared.value,\r\n      targetOrientation: this.targetOrientation.value,\r\n      targetResolution: this.targetResolution.value,\r\n      targetResolutionHost: this.targetResolutionHost.value,\r\n      vidCons: this.vidCons.value,\r\n      frameRate: this.frameRate.value,\r\n      hParams: this.hParams.value,\r\n      vParams: this.vParams.value,\r\n      screenParams: this.screenParams.value,\r\n      aParams: this.aParams.value,\r\n\r\n      // More room details - recording\r\n      recordingAudioPausesLimit: this.recordingAudioPausesLimit.value,\r\n      recordingAudioPausesCount: this.recordingAudioPausesCount.value,\r\n      recordingAudioSupport: this.recordingAudioSupport.value,\r\n      recordingAudioPeopleLimit: this.recordingAudioPeopleLimit.value,\r\n      recordingAudioParticipantsTimeLimit: this.recordingAudioParticipantsTimeLimit.value,\r\n      recordingVideoPausesCount: this.recordingVideoPausesCount.value,\r\n      recordingVideoPausesLimit: this.recordingVideoPausesLimit.value,\r\n      recordingVideoSupport: this.recordingVideoSupport.value,\r\n      recordingVideoPeopleLimit: this.recordingVideoPeopleLimit.value,\r\n      recordingVideoParticipantsTimeLimit: this.recordingVideoParticipantsTimeLimit.value,\r\n      recordingAllParticipantsSupport: this.recordingAllParticipantsSupport.value,\r\n      recordingVideoParticipantsSupport: this.recordingVideoParticipantsSupport.value,\r\n      recordingAllParticipantsFullRoomSupport: this.recordingAllParticipantsFullRoomSupport.value,\r\n      recordingVideoParticipantsFullRoomSupport:\r\n        this.recordingVideoParticipantsFullRoomSupport.value,\r\n      recordingPreferredOrientation: this.recordingPreferredOrientation.value,\r\n      recordingSupportForOtherOrientation: this.recordingSupportForOtherOrientation.value,\r\n      recordingMultiFormatsSupport: this.recordingMultiFormatsSupport.value,\r\n\r\n      userRecordingParams: this.userRecordingParams.value,\r\n      canRecord: this.canRecord.value,\r\n      startReport: this.startReport.value,\r\n      endReport: this.endReport.value,\r\n      recordStartTime: this.recordStartTime.value,\r\n      recordElapsedTime: this.recordElapsedTime.value,\r\n      isTimerRunning: this.isTimerRunning.value,\r\n      canPauseResume: this.canPauseResume.value,\r\n      recordChangeSeconds: this.recordChangeSeconds.value,\r\n      pauseLimit: this.pauseLimit.value,\r\n      pauseRecordCount: this.pauseRecordCount.value,\r\n      canLaunchRecord: this.canLaunchRecord.value,\r\n      stopLaunchRecord: this.stopLaunchRecord.value,\r\n\r\n      participantsAll: this.participantsAll.value,\r\n\r\n      firstAll: this.firstAll.value,\r\n      updateMainWindow: this.updateMainWindow.value,\r\n      first_round: this.first_round.value,\r\n      landScaped: this.landScaped.value,\r\n      lock_screen: this.lock_screen.value,\r\n      screenId: this.screenId.value,\r\n      allVideoStreams: this.allVideoStreams.value,\r\n      newLimitedStreams: this.newLimitedStreams.value,\r\n      newLimitedStreamsIDs: this.newLimitedStreamsIDs.value,\r\n      activeSounds: this.activeSounds.value,\r\n      screenShareIDStream: this.screenShareIDStream.value,\r\n      screenShareNameStream: this.screenShareNameStream.value,\r\n      adminIDStream: this.adminIDStream.value,\r\n      adminNameStream: this.adminNameStream.value,\r\n      youYouStream: this.youYouStream.value,\r\n      youYouStreamIDs: this.youYouStreamIDs.value,\r\n      localStream: this.localStream.value,\r\n      recordStarted: this.recordStarted.value,\r\n      recordResumed: this.recordResumed.value,\r\n      recordPaused: this.recordPaused.value,\r\n      recordStopped: this.recordStopped.value,\r\n      adminRestrictSetting: this.adminRestrictSetting.value,\r\n      videoRequestState: this.videoRequestState.value,\r\n      videoRequestTime: this.videoRequestTime.value,\r\n      videoAction: this.videoAction.value,\r\n      localStreamVideo: this.localStreamVideo.value,\r\n      userDefaultVideoInputDevice: this.userDefaultVideoInputDevice.value,\r\n      currentFacingMode: this.currentFacingMode.value,\r\n      prevFacingMode: this.prevFacingMode.value,\r\n      defVideoID: this.defVideoID.value,\r\n      allowed: this.allowed.value,\r\n      dispActiveNames: this.dispActiveNames.value,\r\n      p_dispActiveNames: this.p_dispActiveNames.value,\r\n      activeNames: this.activeNames.value,\r\n      prevActiveNames: this.prevActiveNames.value,\r\n      p_activeNames: this.p_activeNames.value,\r\n      membersReceived: this.membersReceived.value,\r\n      deferScreenReceived: this.deferScreenReceived.value,\r\n      hostFirstSwitch: this.hostFirstSwitch.value,\r\n      micAction: this.micAction.value,\r\n      screenAction: this.screenAction.value,\r\n      chatAction: this.chatAction.value,\r\n      audioRequestState: this.audioRequestState.value,\r\n      screenRequestState: this.screenRequestState.value,\r\n      chatRequestState: this.chatRequestState.value,\r\n      audioRequestTime: this.audioRequestTime.value,\r\n      screenRequestTime: this.screenRequestTime.value,\r\n      chatRequestTime: this.chatRequestTime.value,\r\n      updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\r\n      oldSoundIds: this.oldSoundIds.value,\r\n      hostLabel: this.hostLabel.value,\r\n      mainScreenFilled: this.mainScreenFilled.value,\r\n      localStreamScreen: this.localStreamScreen.value,\r\n      screenAlreadyOn: this.screenAlreadyOn.value,\r\n      chatAlreadyOn: this.chatAlreadyOn.value,\r\n      redirectURL: this.redirectURL.value,\r\n      oldAllStreams: this.oldAllStreams.value,\r\n      adminVidID: this.adminVidID.value,\r\n      streamNames: this.streamNames.value,\r\n      non_alVideoStreams: this.non_alVideoStreams.value,\r\n      sortAudioLoudness: this.sortAudioLoudness.value,\r\n      audioDecibels: this.audioDecibels.value,\r\n      mixed_alVideoStreams: this.mixed_alVideoStreams.value,\r\n      non_alVideoStreams_muted: this.non_alVideoStreams_muted.value,\r\n      paginatedStreams: this.paginatedStreams.value,\r\n      localStreamAudio: this.localStreamAudio.value,\r\n      defAudioID: this.defAudioID.value,\r\n      userDefaultAudioInputDevice: this.userDefaultAudioInputDevice.value,\r\n      userDefaultAudioOutputDevice: this.userDefaultAudioOutputDevice.value,\r\n      prevAudioInputDevice: this.prevAudioInputDevice.value,\r\n      prevVideoInputDevice: this.prevVideoInputDevice.value,\r\n      audioPaused: this.audioPaused.value,\r\n      mainScreenPerson: this.mainScreenPerson.value,\r\n      adminOnMainScreen: this.adminOnMainScreen.value,\r\n      screenStates: this.screenStates.value,\r\n      prevScreenStates: this.prevScreenStates.value,\r\n      updateDateState: this.updateDateState.value,\r\n      lastUpdate: this.lastUpdate.value,\r\n      nForReadjustRecord: this.nForReadjustRecord.value,\r\n      fixedPageLimit: this.fixedPageLimit.value,\r\n      removeAltGrid: this.removeAltGrid.value,\r\n      nForReadjust: this.nForReadjust.value,\r\n      lastReorderTime: this.lastReorderTime.value,\r\n      reorderInterval: this.reorderInterval.value,\r\n      fastReorderInterval: this.fastReorderInterval.value,\r\n      audStreamNames: this.audStreamNames.value,\r\n      currentUserPage: this.currentUserPage.value,\r\n      mainHeightWidth: this.mainHeightWidth.value,\r\n      prevMainHeightWidth: this.prevMainHeightWidth.value,\r\n      prevDoPaginate: this.prevDoPaginate.value,\r\n      doPaginate: this.doPaginate.value,\r\n      shareEnded: this.shareEnded.value,\r\n      lStreams: this.lStreams.value,\r\n      chatRefStreams: this.chatRefStreams.value,\r\n      controlHeight: this.controlHeight.value,\r\n      isWideScreen: this.isWideScreen.value,\r\n      isMediumScreen: this.isMediumScreen.value,\r\n      isSmallScreen: this.isSmallScreen.value,\r\n      addGrid: this.addGrid.value,\r\n      addAltGrid: this.addAltGrid.value,\r\n      gridRows: this.gridRows.value,\r\n      gridCols: this.gridCols.value,\r\n      altGridRows: this.altGridRows.value,\r\n      altGridCols: this.altGridCols.value,\r\n      numberPages: this.numberPages.value,\r\n      currentStreams: this.currentStreams.value,\r\n      showMiniView: this.showMiniView.value,\r\n      nStream: this.nStream.value,\r\n      defer_receive: this.defer_receive.value,\r\n      allAudioStreams: this.allAudioStreams.value,\r\n      screenProducer: this.screenProducer.value,\r\n      remoteScreenStream: this.remoteScreenStream.value,\r\n      gotAllVids: this.gotAllVids.value,\r\n      paginationHeightWidth: this.paginationHeightWidth.value,\r\n      paginationDirection: this.paginationDirection.value,\r\n      gridSizes: this.gridSizes.value,\r\n      screenForceFullDisplay: this.screenForceFullDisplay.value,\r\n      mainGridStream: this.mainGridStream.value,\r\n      otherGridStreams: this.otherGridStreams.value,\r\n      audioOnlyStreams: this.audioOnlyStreams.value,\r\n      videoInputs: this.videoInputs.value,\r\n      audioInputs: this.audioInputs.value,\r\n      meetingProgressTime: this.meetingProgressTime.value,\r\n      meetingElapsedTime: this.meetingElapsedTime.value,\r\n\r\n      ref_participants: this.ref_participants.value,\r\n\r\n      messages: this.messages.value,\r\n      startDirectMessage: this.startDirectMessage.value,\r\n      directMessageDetails: this.directMessageDetails.value,\r\n      coHost: this.coHost.value,\r\n      coHostResponsibility: this.coHostResponsibility.value,\r\n\r\n      // Event settings\r\n      audioSetting: this.audioSetting.value,\r\n      videoSetting: this.videoSetting.value,\r\n      screenshareSetting: this.screenshareSetting.value,\r\n      chatSetting: this.chatSetting.value,\r\n\r\n      // Display settings\r\n      autoWave: this.autoWave.value,\r\n      forceFullDisplay: this.forceFullDisplay.value,\r\n      prevForceFullDisplay: this.prevForceFullDisplay.value,\r\n      prevMeetingDisplayType: this.prevMeetingDisplayType.value,\r\n\r\n      // Waiting room\r\n      waitingRoomFilter: this.waitingRoomFilter.value,\r\n      waitingRoomList: this.waitingRoomList.value,\r\n      waitingRoomCounter: this.waitingRoomCounter.value,\r\n      filteredWaitingRoomList: this.filteredWaitingRoomList.value,\r\n\r\n      // Requests\r\n      requestFilter: this.requestFilter.value,\r\n      requestList: this.requestList.value,\r\n      requestCounter: this.requestCounter.value,\r\n      filteredRequestList: this.filteredRequestList.value,\r\n\r\n      // Total requests and waiting room\r\n      totalReqWait: this.totalReqWait.value,\r\n\r\n      // Alerts\r\n      alertVisible: this.alertVisible.value,\r\n      alertMessage: this.alertMessage.value,\r\n      alertType: this.alertType.value,\r\n      alertDuration: this.alertDuration.value,\r\n\r\n      // Progress Timer\r\n      progressTimerVisible: this.progressTimerVisible.value,\r\n      progressTimerValue: this.progressTimerValue.value,\r\n\r\n      // Menu modals\r\n      isMenuModalVisible: this.isMenuModalVisible.value,\r\n      isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n      isSettingsModalVisible: this.isSettingsModalVisible.value,\r\n      isRequestsModalVisible: this.isRequestsModalVisible.value,\r\n      isWaitingModalVisible: this.isWaitingModalVisible.value,\r\n      isCoHostModalVisible: this.isCoHostModalVisible.value,\r\n      isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\r\n      isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\r\n\r\n      // Other Modals\r\n      isParticipantsModalVisible: this.isParticipantsModalVisible.value,\r\n      isMessagesModalVisible: this.isMessagesModalVisible.value,\r\n      isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\r\n      isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\r\n      isLoadingModalVisible: this.isLoadingModalVisible.value,\r\n\r\n      // Recording Options\r\n      recordingMediaOptions: this.recordingMediaOptions.value,\r\n      recordingAudioOptions: this.recordingAudioOptions.value,\r\n      recordingVideoOptions: this.recordingVideoOptions.value,\r\n      recordingVideoType: this.recordingVideoType.value,\r\n      recordingVideoOptimized: this.recordingVideoOptimized.value,\r\n      recordingDisplayType: this.recordingDisplayType.value,\r\n      recordingAddHLS: this.recordingAddHLS.value,\r\n      recordingAddText: this.recordingAddText.value,\r\n      recordingCustomText: this.recordingCustomText.value,\r\n      recordingCustomTextPosition: this.recordingCustomTextPosition.value,\r\n      recordingCustomTextColor: this.recordingCustomTextColor.value,\r\n      recordingNameTags: this.recordingNameTags.value,\r\n      recordingBackgroundColor: this.recordingBackgroundColor.value,\r\n      recordingNameTagsColor: this.recordingNameTagsColor.value,\r\n      recordingOrientationVideo: this.recordingOrientationVideo.value,\r\n      clearedToResume: this.clearedToResume.value,\r\n      clearedToRecord: this.clearedToRecord.value,\r\n      recordState: this.recordState.value,\r\n      showRecordButtons: this.showRecordButtons.value,\r\n      recordingProgressTime: this.recordingProgressTime.value,\r\n      audioSwitching: this.audioSwitching.value,\r\n      videoSwitching: this.videoSwitching.value,\r\n\r\n      // Media states\r\n      videoAlreadyOn: this.videoAlreadyOn.value,\r\n      audioAlreadyOn: this.audioAlreadyOn.value,\r\n      componentSizes: this.componentSizes.value,\r\n\r\n      // Permissions\r\n      hasCameraPermission: this.hasCameraPermission.value,\r\n      hasAudioPermission: this.hasAudioPermission.value,\r\n\r\n      // Transports\r\n      transportCreated: this.transportCreated.value,\r\n      localTransportCreated: this.localTransportCreated.value,\r\n      transportCreatedVideo: this.transportCreatedVideo.value,\r\n      transportCreatedAudio: this.transportCreatedAudio.value,\r\n      transportCreatedScreen: this.transportCreatedScreen.value,\r\n      producerTransport: this.producerTransport.value,\r\n      localProducerTransport: this.localProducerTransport.value,\r\n      videoProducer: this.videoProducer.value,\r\n      localVideoProducer: this.localVideoProducer.value,\r\n      params: this.params.value,\r\n      videoParams: this.videoParams.value,\r\n      audioParams: this.audioParams.value,\r\n      audioProducer: this.audioProducer.value,\r\n      audioLevel: this.audioLevel.value,\r\n      localAudioProducer: this.localAudioProducer.value,\r\n      consumerTransports: this.consumerTransports.value,\r\n      consumingTransports: this.consumingTransports.value,\r\n\r\n      // Polls\r\n      polls: this.polls.value,\r\n      poll: this.poll.value,\r\n      isPollModalVisible: this.isPollModalVisible.value,\r\n\r\n      // Background\r\n      customImage: this.customImage.value,\r\n      selectedImage: this.selectedImage.value,\r\n      segmentVideo: this.segmentVideo.value,\r\n      selfieSegmentation: this.selfieSegmentation.value,\r\n      pauseSegmentation: this.pauseSegmentation.value,\r\n      processedStream: this.processedStream.value,\r\n      keepBackground: this.keepBackground.value,\r\n      backgroundHasChanged: this.backgroundHasChanged.value,\r\n      virtualStream: this.virtualStream.value,\r\n      mainCanvas: this.mainCanvas.value,\r\n      prevKeepBackground: this.prevKeepBackground.value,\r\n      appliedBackground: this.appliedBackground.value,\r\n      isBackgroundModalVisible: this.isBackgroundModalVisible.value,\r\n      autoClickBackground: this.autoClickBackground.value,\r\n\r\n      // Breakout rooms\r\n      breakoutRooms: this.breakoutRooms.value,\r\n      currentRoomIndex: this.currentRoomIndex.value,\r\n      canStartBreakout: this.canStartBreakout.value,\r\n      breakOutRoomStarted: this.breakOutRoomStarted.value,\r\n      breakOutRoomEnded: this.breakOutRoomEnded.value,\r\n      hostNewRoom: this.hostNewRoom.value,\r\n      limitedBreakRoom: this.limitedBreakRoom.value,\r\n      mainRoomsLength: this.mainRoomsLength.value,\r\n      memberRoom: this.memberRoom.value,\r\n      isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\r\n\r\n      // Whiteboard\r\n      whiteboardUsers: this.whiteboardUsers.value,\r\n      currentWhiteboardIndex: this.currentWhiteboardIndex.value,\r\n      canStartWhiteboard: this.canStartWhiteboard.value,\r\n      whiteboardStarted: this.whiteboardStarted.value,\r\n      whiteboardEnded: this.whiteboardEnded.value,\r\n      whiteboardLimit: this.whiteboardLimit.value,\r\n      isWhiteboardModalVisible: this.isWhiteboardModalVisible.value,\r\n      isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\r\n      shapes: this.shapes.value,\r\n      useImageBackground: this.useImageBackground.value,\r\n      redoStack: this.redoStack.value,\r\n      undoStack: this.undoStack.value,\r\n      canvasStream: this.canvasStream.value,\r\n      canvasWhiteboard: this.canvasWhiteboard.value,\r\n\r\n      // Screenboard\r\n      canvasScreenboard: this.canvasScreenboard.value,\r\n      processedScreenStream: this.processedScreenStream.value,\r\n      annotateScreenStream: this.annotateScreenStream.value,\r\n      mainScreenCanvas: this.mainScreenCanvas.value,\r\n      isScreenboardModalVisible: this.isScreenboardModalVisible.value,\r\n\r\n      validated: this.validated.value,\r\n      device: this.device.value,\r\n      socket: this.socket.value,\r\n      localSocket: this.localSocket!.value,\r\n      checkMediaPermission: false,\r\n      onWeb: true,\r\n\r\n      // Update functions\r\n      updateRoomName: this.updateRoomName.bind(this),\r\n      updateMember: this.updateMember.bind(this),\r\n      updateAdminPasscode: this.updateAdminPasscode.bind(this),\r\n      updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\r\n      updateYouAreHost: this.updateYouAreHost.bind(this),\r\n      updateIslevel: this.updateIslevel.bind(this),\r\n      updateCoHost: this.updateCoHost.bind(this),\r\n      updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\r\n      updateConfirmedToRecord: this.updateConfirmedToRecord.bind(this),\r\n      updateMeetingDisplayType: this.updateMeetingDisplayType.bind(this),\r\n      updateMeetingVideoOptimized: this.updateMeetingVideoOptimized.bind(this),\r\n      updateEventType: this.updateEventType.bind(this),\r\n      updateParticipants: this.updateParticipants.bind(this),\r\n      updateParticipantsCounter: this.updateParticipantsCounter.bind(this),\r\n      updateParticipantsFilter: this.updateParticipantsFilter.bind(this),\r\n\r\n      // More update functions for media details\r\n      updateConsume_sockets: this.updateConsume_sockets.bind(this),\r\n      updateRtpCapabilities: this.updateRtpCapabilities.bind(this),\r\n      updateRoomRecvIPs: this.updateRoomRecvIPs.bind(this),\r\n      updateMeetingRoomParams: this.updateMeetingRoomParams.bind(this),\r\n      updateItemPageLimit: this.updateItemPageLimit.bind(this),\r\n      updateAudioOnlyRoom: this.updateAudioOnlyRoom.bind(this),\r\n      updateAddForBasic: this.updateAddForBasic.bind(this),\r\n      updateScreenPageLimit: this.updateScreenPageLimit.bind(this),\r\n      updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\r\n      updateShared: this.updateShared.bind(this),\r\n      updateTargetOrientation: this.updateTargetOrientation.bind(this),\r\n      updateTargetResolution: this.updateTargetResolution.bind(this),\r\n      updateTargetResolutionHost: this.updateTargetResolutionHost.bind(this),\r\n      updateVidCons: this.updateVidCons.bind(this),\r\n      updateFrameRate: this.updateFrameRate.bind(this),\r\n      updateHParams: this.updateHParams.bind(this),\r\n      updateVParams: this.updateVParams.bind(this),\r\n      updateScreenParams: this.updateScreenParams.bind(this),\r\n      updateAParams: this.updateAParams.bind(this),\r\n\r\n      // More update functions for recording details\r\n      updateRecordingAudioPausesLimit: this.updateRecordingAudioPausesLimit.bind(this),\r\n      updateRecordingAudioPausesCount: this.updateRecordingAudioPausesCount.bind(this),\r\n      updateRecordingAudioSupport: this.updateRecordingAudioSupport.bind(this),\r\n      updateRecordingAudioPeopleLimit: this.updateRecordingAudioPeopleLimit.bind(this),\r\n      updateRecordingAudioParticipantsTimeLimit:\r\n        this.updateRecordingAudioParticipantsTimeLimit.bind(this),\r\n      updateRecordingVideoPausesCount: this.updateRecordingVideoPausesCount.bind(this),\r\n      updateRecordingVideoPausesLimit: this.updateRecordingVideoPausesLimit.bind(this),\r\n      updateRecordingVideoSupport: this.updateRecordingVideoSupport.bind(this),\r\n      updateRecordingVideoPeopleLimit: this.updateRecordingVideoPeopleLimit.bind(this),\r\n      updateRecordingVideoParticipantsTimeLimit:\r\n        this.updateRecordingVideoParticipantsTimeLimit.bind(this),\r\n      updateRecordingAllParticipantsSupport: this.updateRecordingAllParticipantsSupport.bind(this),\r\n      updateRecordingVideoParticipantsSupport:\r\n        this.updateRecordingVideoParticipantsSupport.bind(this),\r\n      updateRecordingAllParticipantsFullRoomSupport:\r\n        this.updateRecordingAllParticipantsFullRoomSupport.bind(this),\r\n      updateRecordingVideoParticipantsFullRoomSupport:\r\n        this.updateRecordingVideoParticipantsFullRoomSupport.bind(this),\r\n      updateRecordingPreferredOrientation: this.updateRecordingPreferredOrientation.bind(this),\r\n      updateRecordingSupportForOtherOrientation:\r\n        this.updateRecordingSupportForOtherOrientation.bind(this),\r\n      updateRecordingMultiFormatsSupport: this.updateRecordingMultiFormatsSupport.bind(this),\r\n\r\n      updateUserRecordingParams: this.updateUserRecordingParams.bind(this),\r\n      updateCanRecord: this.updateCanRecord.bind(this),\r\n      updateStartReport: this.updateStartReport.bind(this),\r\n      updateEndReport: this.updateEndReport.bind(this),\r\n      updateRecordTimerInterval: this.updateRecordTimerInterval.bind(this),\r\n      updateRecordStartTime: this.updateRecordStartTime.bind(this),\r\n      updateRecordElapsedTime: this.updateRecordElapsedTime.bind(this),\r\n      updateIsTimerRunning: this.updateIsTimerRunning.bind(this),\r\n      updateCanPauseResume: this.updateCanPauseResume.bind(this),\r\n      updateRecordChangeSeconds: this.updateRecordChangeSeconds.bind(this),\r\n      updatePauseLimit: this.updatePauseLimit.bind(this),\r\n      updatePauseRecordCount: this.updatePauseRecordCount.bind(this),\r\n      updateCanLaunchRecord: this.updateCanLaunchRecord.bind(this),\r\n      updateStopLaunchRecord: this.updateStopLaunchRecord.bind(this),\r\n\r\n      updateParticipantsAll: this.updateParticipantsAll.bind(this),\r\n\r\n      updateFirstAll: this.updateFirstAll.bind(this),\r\n      updateUpdateMainWindow: this.updateUpdateMainWindow.bind(this),\r\n      updateFirst_round: this.updateFirst_round.bind(this),\r\n      updateLandScaped: this.updateLandScaped.bind(this),\r\n      updateLock_screen: this.updateLock_screen.bind(this),\r\n      updateScreenId: this.updateScreenId.bind(this),\r\n      updateAllVideoStreams: this.updateAllVideoStreams.bind(this),\r\n      updateNewLimitedStreams: this.updateNewLimitedStreams.bind(this),\r\n      updateNewLimitedStreamsIDs: this.updateNewLimitedStreamsIDs.bind(this),\r\n      updateActiveSounds: this.updateActiveSounds.bind(this),\r\n      updateScreenShareIDStream: this.updateScreenShareIDStream.bind(this),\r\n      updateScreenShareNameStream: this.updateScreenShareNameStream.bind(this),\r\n      updateAdminIDStream: this.updateAdminIDStream.bind(this),\r\n      updateAdminNameStream: this.updateAdminNameStream.bind(this),\r\n      updateYouYouStream: this.updateYouYouStream.bind(this),\r\n      updateYouYouStreamIDs: this.updateYouYouStreamIDs.bind(this),\r\n      updateLocalStream: this.updateLocalStream.bind(this),\r\n      updateRecordStarted: this.updateRecordStarted.bind(this),\r\n      updateRecordResumed: this.updateRecordResumed.bind(this),\r\n      updateRecordPaused: this.updateRecordPaused.bind(this),\r\n      updateRecordStopped: this.updateRecordStopped.bind(this),\r\n      updateAdminRestrictSetting: this.updateAdminRestrictSetting.bind(this),\r\n      updateVideoRequestState: this.updateVideoRequestState.bind(this),\r\n      updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\r\n      updateVideoAction: this.updateVideoAction.bind(this),\r\n      updateLocalStreamVideo: this.updateLocalStreamVideo.bind(this),\r\n      updateUserDefaultVideoInputDevice: this.updateUserDefaultVideoInputDevice.bind(this),\r\n      updateCurrentFacingMode: this.updateCurrentFacingMode.bind(this),\r\n      updatePrevFacingMode: this.updatePrevFacingMode.bind(this),\r\n      updateDefVideoID: this.updateDefVideoID.bind(this),\r\n      updateAllowed: this.updateAllowed.bind(this),\r\n      updateDispActiveNames: this.updateDispActiveNames.bind(this),\r\n      updateP_dispActiveNames: this.updateP_dispActiveNames.bind(this),\r\n      updateActiveNames: this.updateActiveNames.bind(this),\r\n      updatePrevActiveNames: this.updatePrevActiveNames.bind(this),\r\n      updateP_activeNames: this.updateP_activeNames.bind(this),\r\n      updateMembersReceived: this.updateMembersReceived.bind(this),\r\n      updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\r\n      updateHostFirstSwitch: this.updateHostFirstSwitch.bind(this),\r\n      updateMicAction: this.updateMicAction.bind(this),\r\n      updateScreenAction: this.updateScreenAction.bind(this),\r\n      updateChatAction: this.updateChatAction.bind(this),\r\n      updateAudioRequestState: this.updateAudioRequestState.bind(this),\r\n      updateScreenRequestState: this.updateScreenRequestState.bind(this),\r\n      updateChatRequestState: this.updateChatRequestState.bind(this),\r\n      updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\r\n      updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\r\n      updateChatRequestTime: this.updateChatRequestTime.bind(this),\r\n      updateOldSoundIds: this.updateOldSoundIds.bind(this),\r\n      updateHostLabel: this.updateHostLabel.bind(this),\r\n      updateMainScreenFilled: this.updateMainScreenFilled.bind(this),\r\n      updateLocalStreamScreen: this.updateLocalStreamScreen.bind(this),\r\n      updateScreenAlreadyOn: this.updateScreenAlreadyOn.bind(this),\r\n      updateChatAlreadyOn: this.updateChatAlreadyOn.bind(this),\r\n      updateRedirectURL: this.updateRedirectURL.bind(this),\r\n      updateOldAllStreams: this.updateOldAllStreams.bind(this),\r\n      updateAdminVidID: this.updateAdminVidID.bind(this),\r\n      updateStreamNames: this.updateStreamNames.bind(this),\r\n      updateNon_alVideoStreams: this.updateNon_alVideoStreams.bind(this),\r\n      updateSortAudioLoudness: this.updateSortAudioLoudness.bind(this),\r\n      updateAudioDecibels: this.updateAudioDecibels.bind(this),\r\n      updateMixed_alVideoStreams: this.updateMixed_alVideoStreams.bind(this),\r\n      updateNon_alVideoStreams_muted: this.updateNon_alVideoStreams_muted.bind(this),\r\n      updatePaginatedStreams: this.updatePaginatedStreams.bind(this),\r\n      updateLocalStreamAudio: this.updateLocalStreamAudio.bind(this),\r\n      updateDefAudioID: this.updateDefAudioID.bind(this),\r\n      updateUserDefaultAudioInputDevice: this.updateUserDefaultAudioInputDevice.bind(this),\r\n      updateUserDefaultAudioOutputDevice: this.updateUserDefaultAudioOutputDevice.bind(this),\r\n      updatePrevAudioInputDevice: this.updatePrevAudioInputDevice.bind(this),\r\n      updatePrevVideoInputDevice: this.updatePrevVideoInputDevice.bind(this),\r\n      updateAudioPaused: this.updateAudioPaused.bind(this),\r\n      updateMainScreenPerson: this.updateMainScreenPerson.bind(this),\r\n      updateAdminOnMainScreen: this.updateAdminOnMainScreen.bind(this),\r\n      updateScreenStates: this.updateScreenStates.bind(this),\r\n      updatePrevScreenStates: this.updatePrevScreenStates.bind(this),\r\n      updateUpdateDateState: this.updateUpdateDateState.bind(this),\r\n      updateLastUpdate: this.updateLastUpdate.bind(this),\r\n      updateNForReadjustRecord: this.updateNForReadjustRecord.bind(this),\r\n      updateFixedPageLimit: this.updateFixedPageLimit.bind(this),\r\n      updateRemoveAltGrid: this.updateRemoveAltGrid.bind(this),\r\n      updateNForReadjust: this.updateNForReadjust.bind(this),\r\n      updateLastReorderTime: this.updateLastReorderTime.bind(this),\r\n      updateAudStreamNames: this.updateAudStreamNames.bind(this),\r\n      updateCurrentUserPage: this.updateCurrentUserPage.bind(this),\r\n      updateMainHeightWidth: this.updateMainHeightWidth.bind(this),\r\n      updatePrevMainHeightWidth: this.updatePrevMainHeightWidth.bind(this),\r\n      updatePrevDoPaginate: this.updatePrevDoPaginate.bind(this),\r\n      updateDoPaginate: this.updateDoPaginate.bind(this),\r\n      updateShareEnded: this.updateShareEnded.bind(this),\r\n      updateLStreams: this.updateLStreams.bind(this),\r\n      updateChatRefStreams: this.updateChatRefStreams.bind(this),\r\n      updateControlHeight: this.updateControlHeight.bind(this),\r\n      updateIsWideScreen: this.updateIsWideScreen.bind(this),\r\n      updateIsMediumScreen: this.updateIsMediumScreen.bind(this),\r\n      updateIsSmallScreen: this.updateIsSmallScreen.bind(this),\r\n      updateAddGrid: this.updateAddGrid.bind(this),\r\n      updateAddAltGrid: this.updateAddAltGrid.bind(this),\r\n      updateGridRows: this.updateGridRows.bind(this),\r\n      updateGridCols: this.updateGridCols.bind(this),\r\n      updateAltGridRows: this.updateAltGridRows.bind(this),\r\n      updateAltGridCols: this.updateAltGridCols.bind(this),\r\n      updateNumberPages: this.updateNumberPages.bind(this),\r\n      updateCurrentStreams: this.updateCurrentStreams.bind(this),\r\n      updateShowMiniView: this.updateShowMiniView.bind(this),\r\n      updateNStream: this.updateNStream.bind(this),\r\n      updateDefer_receive: this.updateDefer_receive.bind(this),\r\n      updateAllAudioStreams: this.updateAllAudioStreams.bind(this),\r\n      updateRemoteScreenStream: this.updateRemoteScreenStream.bind(this),\r\n      updateScreenProducer: this.updateScreenProducer.bind(this),\r\n      updateGotAllVids: this.updateGotAllVids.bind(this),\r\n      updatePaginationHeightWidth: this.updatePaginationHeightWidth.bind(this),\r\n      updatePaginationDirection: this.updatePaginationDirection.bind(this),\r\n      updateGridSizes: this.updateGridSizes.bind(this),\r\n      updateScreenForceFullDisplay: this.updateScreenForceFullDisplay.bind(this),\r\n      updateMainGridStream: this.updateMainGridStream.bind(this),\r\n      updateOtherGridStreams: this.updateOtherGridStreams.bind(this),\r\n      updateAudioOnlyStreams: this.updateAudioOnlyStreams.bind(this),\r\n      updateVideoInputs: this.updateVideoInputs.bind(this),\r\n      updateAudioInputs: this.updateAudioInputs.bind(this),\r\n      updateMeetingProgressTime: this.updateMeetingProgressTime.bind(this),\r\n      updateMeetingElapsedTime: this.updateMeetingElapsedTime.bind(this),\r\n      updateRef_participants: this.updateRef_participants.bind(this),\r\n\r\n      updateMessages: this.updateMessages.bind(this),\r\n      updateStartDirectMessage: this.updateStartDirectMessage.bind(this),\r\n      updateDirectMessageDetails: this.updateDirectMessageDetails.bind(this),\r\n      updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\r\n\r\n      // Event settings\r\n      updateAudioSetting: this.updateAudioSetting.bind(this),\r\n      updateVideoSetting: this.updateVideoSetting.bind(this),\r\n      updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\r\n      updateChatSetting: this.updateChatSetting.bind(this),\r\n\r\n      // Display settings\r\n      updateAutoWave: this.updateAutoWave.bind(this),\r\n      updateForceFullDisplay: this.updateForceFullDisplay.bind(this),\r\n      updatePrevForceFullDisplay: this.updatePrevForceFullDisplay.bind(this),\r\n      updatePrevMeetingDisplayType: this.updatePrevMeetingDisplayType.bind(this),\r\n\r\n      // Waiting room\r\n      updateWaitingRoomFilter: this.updateWaitingRoomFilter.bind(this),\r\n      updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\r\n      updateWaitingRoomCounter: this.updateWaitingRoomCounter.bind(this),\r\n\r\n      // Requests\r\n      updateRequestFilter: this.updateRequestFilter.bind(this),\r\n      updateRequestList: this.updateRequestList.bind(this),\r\n      updateRequestCounter: this.updateRequestCounter.bind(this),\r\n\r\n      // Total requests and waiting room\r\n      updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n\r\n      // Menu modals\r\n      updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\r\n      updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n      updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\r\n      updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\r\n      updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\r\n      updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\r\n      updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\r\n      updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\r\n\r\n      // Other modals\r\n      updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\r\n      updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\r\n      updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\r\n      updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\r\n      updateIsLoadingModalVisible: this.updateIsLoadingModalVisible.bind(this),\r\n\r\n      // Recording Options\r\n      updateRecordingMediaOptions: this.updateRecordingMediaOptions.bind(this),\r\n      updateRecordingAudioOptions: this.updateRecordingAudioOptions.bind(this),\r\n      updateRecordingVideoOptions: this.updateRecordingVideoOptions.bind(this),\r\n      updateRecordingVideoType: this.updateRecordingVideoType.bind(this),\r\n      updateRecordingVideoOptimized: this.updateRecordingVideoOptimized.bind(this),\r\n      updateRecordingDisplayType: this.updateRecordingDisplayType.bind(this),\r\n      updateRecordingAddHLS: this.updateRecordingAddHLS.bind(this),\r\n      updateRecordingAddText: this.updateRecordingAddText.bind(this),\r\n      updateRecordingCustomText: this.updateRecordingCustomText.bind(this),\r\n      updateRecordingCustomTextPosition: this.updateRecordingCustomTextPosition.bind(this),\r\n      updateRecordingCustomTextColor: this.updateRecordingCustomTextColor.bind(this),\r\n      updateRecordingNameTags: this.updateRecordingNameTags.bind(this),\r\n      updateRecordingBackgroundColor: this.updateRecordingBackgroundColor.bind(this),\r\n      updateRecordingNameTagsColor: this.updateRecordingNameTagsColor.bind(this),\r\n      updateRecordingOrientationVideo: this.updateRecordingOrientationVideo.bind(this),\r\n      updateClearedToResume: this.updateClearedToResume.bind(this),\r\n      updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n      updateRecordState: this.updateRecordState.bind(this),\r\n      updateShowRecordButtons: this.updateShowRecordButtons.bind(this),\r\n      updateRecordingProgressTime: this.updateRecordingProgressTime.bind(this),\r\n      updateAudioSwitching: this.updateAudioSwitching.bind(this),\r\n      updateVideoSwitching: this.updateVideoSwitching.bind(this),\r\n\r\n      // Media states\r\n      updateVideoAlreadyOn: this.updateVideoAlreadyOn.bind(this),\r\n      updateAudioAlreadyOn: this.updateAudioAlreadyOn.bind(this),\r\n      updateComponentSizes: this.updateComponentSizes.bind(this),\r\n\r\n      // Permissions\r\n      updateHasCameraPermission: this.updateHasCameraPermission.bind(this),\r\n      updateHasAudioPermission: this.updateHasAudioPermission.bind(this),\r\n\r\n      // Transports\r\n      updateTransportCreated: this.updateTransportCreated.bind(this),\r\n      updateLocalTransportCreated: this.updateLocalTransportCreated.bind(this),\r\n      updateTransportCreatedVideo: this.updateTransportCreatedVideo.bind(this),\r\n      updateTransportCreatedAudio: this.updateTransportCreatedAudio.bind(this),\r\n      updateTransportCreatedScreen: this.updateTransportCreatedScreen.bind(this),\r\n      updateProducerTransport: this.updateProducerTransport.bind(this),\r\n      updateLocalProducerTransport: this.updateLocalProducerTransport.bind(this),\r\n      updateVideoProducer: this.updateVideoProducer.bind(this),\r\n      updateLocalVideoProducer: this.updateLocalVideoProducer.bind(this),\r\n      updateParams: this.updateParams.bind(this),\r\n      updateVideoParams: this.updateVideoParams.bind(this),\r\n      updateAudioParams: this.updateAudioParams.bind(this),\r\n      updateAudioProducer: this.updateAudioProducer.bind(this),\r\n      updateAudioLevel: this.updateAudioLevel.bind(this),\r\n      updateLocalAudioProducer: this.updateLocalAudioProducer.bind(this),\r\n      updateConsumerTransports: this.updateConsumerTransports.bind(this),\r\n      updateConsumingTransports: this.updateConsumingTransports.bind(this),\r\n\r\n      // Polls\r\n      updatePolls: this.updatePolls.bind(this),\r\n      updatePoll: this.updatePoll.bind(this),\r\n      updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\r\n\r\n      // Background\r\n      updateCustomImage: this.updateCustomImage.bind(this),\r\n      updateSelectedImage: this.updateSelectedImage.bind(this),\r\n      updateSegmentVideo: this.updateSegmentVideo.bind(this),\r\n      updateSelfieSegmentation: this.updateSelfieSegmentation.bind(this),\r\n      updatePauseSegmentation: this.updatePauseSegmentation.bind(this),\r\n      updateProcessedStream: this.updateProcessedStream.bind(this),\r\n      updateKeepBackground: this.updateKeepBackground.bind(this),\r\n      updateBackgroundHasChanged: this.updateBackgroundHasChanged.bind(this),\r\n      updateVirtualStream: this.updateVirtualStream.bind(this),\r\n      updateMainCanvas: this.updateMainCanvas.bind(this),\r\n      updatePrevKeepBackground: this.updatePrevKeepBackground.bind(this),\r\n      updateAppliedBackground: this.updateAppliedBackground.bind(this),\r\n      updateIsBackgroundModalVisible: this.updateIsBackgroundModalVisible.bind(this),\r\n      updateAutoClickBackground: this.updateAutoClickBackground.bind(this),\r\n\r\n      // Breakout rooms\r\n      updateBreakoutRooms: this.updateBreakoutRooms.bind(this),\r\n      updateCurrentRoomIndex: this.updateCurrentRoomIndex.bind(this),\r\n      updateCanStartBreakout: this.updateCanStartBreakout.bind(this),\r\n      updateBreakOutRoomStarted: this.updateBreakOutRoomStarted.bind(this),\r\n      updateBreakOutRoomEnded: this.updateBreakOutRoomEnded.bind(this),\r\n      updateHostNewRoom: this.updateHostNewRoom.bind(this),\r\n      updateLimitedBreakRoom: this.updateLimitedBreakRoom.bind(this),\r\n      updateMainRoomsLength: this.updateMainRoomsLength.bind(this),\r\n      updateMemberRoom: this.updateMemberRoom.bind(this),\r\n      updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\r\n\r\n      // Whiteboard\r\n      updateWhiteboardUsers: this.updateWhiteboardUsers.bind(this),\r\n      updateCurrentWhiteboardIndex: this.updateCurrentWhiteboardIndex.bind(this),\r\n      updateCanStartWhiteboard: this.updateCanStartWhiteboard.bind(this),\r\n      updateWhiteboardStarted: this.updateWhiteboardStarted.bind(this),\r\n      updateWhiteboardEnded: this.updateWhiteboardEnded.bind(this),\r\n      updateWhiteboardLimit: this.updateWhiteboardLimit.bind(this),\r\n      updateIsWhiteboardModalVisible: this.updateIsWhiteboardModalVisible.bind(this),\r\n      updateIsConfigureWhiteboardModalVisible:\r\n        this.updateIsConfigureWhiteboardModalVisible.bind(this),\r\n      updateShapes: this.updateShapes.bind(this),\r\n      updateUseImageBackground: this.updateUseImageBackground.bind(this),\r\n      updateRedoStack: this.updateRedoStack.bind(this),\r\n      updateUndoStack: this.updateUndoStack.bind(this),\r\n      updateCanvasStream: this.updateCanvasStream.bind(this),\r\n      updateCanvasWhiteboard: this.updateCanvasWhiteboard.bind(this),\r\n\r\n      // Screenboard\r\n      updateCanvasScreenboard: this.updateCanvasScreenboard.bind(this),\r\n      updateProcessedScreenStream: this.updateProcessedScreenStream.bind(this),\r\n      updateAnnotateScreenStream: this.updateAnnotateScreenStream.bind(this),\r\n      updateMainScreenCanvas: this.updateMainScreenCanvas.bind(this),\r\n      updateIsScreenboardModalVisible: this.updateIsScreenboardModalVisible.bind(this),\r\n\r\n      // Other functions\r\n      checkOrientation: this.checkOrientation.bind(this),\r\n\r\n      updateDevice: this.updateDevice.bind(this),\r\n      updateSocket: this.updateSocket.bind(this),\r\n      updateLocalSocket: this.updateLocalSocket.bind(this),\r\n      updateValidated: this.updateValidated.bind(this),\r\n\r\n      showAlert: this.showAlert.bind(this),\r\n      getUpdatedAllParams: () => {\r\n\r\n        try {\r\n          if (this.sourceParameters !== null) {\r\n            this.sourceParameters = {\r\n              ...this.getAllParams(),\r\n              ...this.mediaSFUFunctions(),\r\n            };\r\n            if (this.updateSourceParameters) {\r\n              this.updateSourceParameters(this.sourceParameters);\r\n            }\r\n          }\r\n        } catch {\r\n          console.log('error updateSourceParameters');\r\n        }\r\n\r\n        return {\r\n          ...this.getAllParams(),\r\n          ...this.mediaSFUFunctions(),\r\n        };\r\n      },\r\n    };\r\n  }\r\n\r\n  mediaSFUParameters = {\r\n    ...this.getAllParams(),\r\n    ...this.mediaSFUFunctions(),\r\n  };\r\n\r\n  getUpdatedAllParams = () => {\r\n    return {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n  };\r\n\r\n  updateButtonState(buttonType: string, value: boolean) {\r\n    this.controlButtons = this.controlButtons.map((button) => {\r\n      if (buttonType === 'micActive' && button.icon === this.faMicrophoneSlash) {\r\n        return { ...button, active: value };\r\n      }\r\n      if (buttonType === 'videoActive' && button.icon === this.faVideoSlash) {\r\n        return { ...button, active: value };\r\n      }\r\n      if (buttonType === 'screenShareActive' && button.icon === this.faDesktop) {\r\n        if (button.alternateIconComponent) {\r\n          const updatedInjector = this.createInjector({\r\n            disabled: !value,\r\n          });\r\n          return {\r\n            ...button,\r\n            active: true,\r\n            alternateIconComponent: { ...this.screenShareWidget, injector: updatedInjector },\r\n          }; //always default to true for active\r\n        } else {\r\n          return { ...button, active: true }; //always default to true for active\r\n        }\r\n      }\r\n      if (buttonType === 'endCallActive' && button.icon === this.faPhone) {\r\n        return { ...button, active: value };\r\n      }\r\n      if (buttonType === 'participantsActive' && button.icon === this.faUsers) {\r\n        return { ...button, active: value };\r\n      }\r\n      if (\r\n        buttonType === 'showMessagesBadge' &&\r\n        button.customName &&\r\n        button.customName === 'Messages'\r\n      ) {\r\n        const updatedInjector = this.createInjector({\r\n          icon: this.faComments,\r\n          badgeValue: value ? '*' : '',\r\n          iconColor: 'black',\r\n          showBadge: value,\r\n        });\r\n        return { ...button, customComponent: { ...this.messageWidget, injector: updatedInjector } };\r\n      }\r\n      if (buttonType === 'showMenuBadge' && button.customName && button.customName === 'Menu') {\r\n        const updatedInjector = this.createInjector({\r\n          icon: this.faBars,\r\n          badgeValue: this.totalReqWait.value,\r\n          iconColor: 'black',\r\n          showBadge: true,\r\n        });\r\n        return { ...button, customComponent: { ...this.menuWidget, injector: updatedInjector } };\r\n      }\r\n\r\n      return button;\r\n    });\r\n\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  PrejoinPageComponent: any = {\r\n    component: this.PrejoinPage,\r\n    injector: null,\r\n  };\r\n\r\n  updatePrejoinPageComponent = () => {\r\n    const PrejoinComp = {\r\n      component: this.PrejoinPage,\r\n      injector: this.createInjector({\r\n        parameters: {\r\n          showAlert:\r\n            this.showAlert ||\r\n            (() => {\r\n              console.log('showAlert not defined');\r\n            }),\r\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\r\n          connectSocket: this.socketManager.connectSocket,\r\n          connectLocalSocket: this.socketManager.connectLocalSocket,\r\n          updateSocket: this.updateSocket,\r\n          updateLocalSocket: this.updateLocalSocket,\r\n          updateValidated: this.updateValidated,\r\n          updateApiUserName: this.updateApiUserName,\r\n          updateApiToken: this.updateApiToken,\r\n          updateLink: this.updateLink,\r\n          updateRoomName: this.updateRoomName,\r\n          updateMember: this.updateMember,\r\n        },\r\n        credentials: this.credentials,\r\n        localLink: this.localLink,\r\n        connectMediaSFU: this.connectMediaSFU,\r\n        returnUI: this.returnUI,\r\n        noUIPreJoinOptions: this.noUIPreJoinOptions,\r\n        joinMediaSFURoom: this.joinMediaSFURoom,\r\n        createMediaSFURoom: this.createMediaSFURoom,\r\n      }),\r\n    };\r\n\r\n    this.PrejoinPageComponent = { ...PrejoinComp };\r\n\r\n    this.cdr.detectChanges();\r\n  };\r\n\r\n  ngOnInit() {\r\n    if (this.PrejoinPage) {\r\n      this.updatePrejoinPageComponent();\r\n    }\r\n\r\n    this.setupResizeListener();\r\n    if (this.validated) {\r\n      this.connectAndAddSocketMethods();\r\n    }\r\n\r\n    this.mainHeightWidthSubscription = this.mainHeightWidth.subscribe(() => {\r\n      this.updateMainVideoSize();\r\n    });\r\n\r\n    this.recordingSubscription = combineLatest([\r\n      this.recordPaused,\r\n      this.recordStarted,\r\n      this.recordStopped,\r\n      this.recordResumed,\r\n      this.recordingProgressTime,\r\n      this.showRecordButtons,\r\n      this.islevel,\r\n    ]).subscribe(\r\n      ([\r\n        recordPaused,\r\n        recordStarted,\r\n        recordStopped,\r\n        recordResumed,\r\n        recordingProgressTime,\r\n        showRecordButtons,\r\n        islevel,\r\n      ]) => {\r\n        if (\r\n          recordPaused ||\r\n          recordStarted ||\r\n          recordStopped ||\r\n          recordResumed ||\r\n          recordingProgressTime ||\r\n          showRecordButtons ||\r\n          islevel\r\n        ) {\r\n          this.updateRecordButtons();\r\n        }\r\n      },\r\n    );\r\n\r\n    this.ScreenboardSubscription = combineLatest([\r\n      this.shared,\r\n      this.componentSizes,\r\n      this.annotateScreenStream,\r\n    ]).subscribe(([shared, componentSizes]) => {\r\n      this.ScreenboardWidget = {\r\n        component: Screenboard,\r\n        inputs: {\r\n          customWidth: componentSizes.mainWidth,\r\n          customHeight: componentSizes.mainHeight,\r\n          parameters: this.mediaSFUParameters,\r\n          showAspect: shared,\r\n        },\r\n      };\r\n    });\r\n    this.validatedSubscription = this.validated.subscribe((validated) => {\r\n      if (validated) {\r\n        this.handleValidated();\r\n      }\r\n    });\r\n    this.islevelSubscription = this.islevel.subscribe((islevel) => {\r\n      if (islevel) {\r\n        this.updateCustomMenuButtons();\r\n        this.updateControlBroadcastButtons();\r\n        this.updateControlChatButtons();\r\n      }\r\n    });\r\n    this.coHostSubscription = combineLatest([this.coHost, this.coHostResponsibility]).subscribe(\r\n      ([coHost, coHostResponsibility]) => {\r\n        if (coHost || coHostResponsibility) {\r\n          this.updateCustomMenuButtons();\r\n          this.updateControlBroadcastButtons();\r\n          this.updateControlChatButtons();\r\n        }\r\n      },\r\n    );\r\n\r\n    // Subscribe to changes in BehaviorSubject and update the buttons accordingly\r\n    this.buttonSubscriptions.push(\r\n      this.micActive.subscribe((value) => {\r\n        this.updateButtonState('micActive', value);\r\n        this.updateControlBroadcastButtons();\r\n        this.updateControlChatButtons();\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.videoActive.subscribe((value) => {\r\n        this.updateButtonState('videoActive', value);\r\n        this.updateControlBroadcastButtons();\r\n        this.updateControlChatButtons();\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.screenShareActive.subscribe((value) => {\r\n        this.updateButtonState('screenShareActive', value);\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.showMessagesBadge.subscribe((value) => {\r\n        this.updateButtonState('showMessagesBadge', value);\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.totalReqWait.subscribe(() => {\r\n        this.updateButtonState('showMenuBadge', true);\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.participantsCounter.subscribe((value) => {\r\n        this.updateMenuParticipantsWidget(value);\r\n      }),\r\n    );\r\n\r\n    this.mediaSFUParameters = {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    window.removeEventListener('resize', this.handleResize);\r\n    window.removeEventListener('orientationchange', this.handleResize);\r\n    if (this.mainHeightWidthSubscription) {\r\n      this.mainHeightWidthSubscription.unsubscribe();\r\n    }\r\n    if (this.validatedSubscription) {\r\n      this.validatedSubscription.unsubscribe();\r\n    }\r\n    if (this.islevelSubscription) {\r\n      this.islevelSubscription.unsubscribe();\r\n    }\r\n    if (this.coHostSubscription) {\r\n      this.coHostSubscription.unsubscribe();\r\n    }\r\n    if (this.ScreenboardSubscription) {\r\n      this.ScreenboardSubscription.unsubscribe();\r\n    }\r\n    if (this.recordingSubscription) {\r\n      this.recordingSubscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n  updateMainVideoSize = async () => {\r\n    if (!this.lock_screen.value && !this.shared.value) {\r\n      this.prepopulateUserMedia.prepopulateUserMedia({\r\n        name: this.hostLabel.value,\r\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n      });\r\n    } else {\r\n      if (!this.first_round.value) {\r\n        this.prepopulateUserMedia.prepopulateUserMedia({\r\n          name: this.hostLabel.value,\r\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  async connectAndAddSocketMethods() {\r\n    this.mediaSFUParameters = {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n    const socket_ = await this.connect_Socket(this.apiUserName.value, this.apiToken.value);\r\n    if (socket_) {\r\n      this.updateSocket(socket_);\r\n    }\r\n  }\r\n\r\n  async handleValidated() {\r\n    this.updateAllVideoStreams([\r\n      { producerId: 'youyou', stream: undefined, id: 'youyou', name: 'youyou' },\r\n    ]);\r\n\r\n    this.updateStreamNames([{ id: 'youyou', name: 'youyou', producerId: '' }]);\r\n\r\n    if (this.validated.value) {\r\n\r\n      try {\r\n        if (!this.localUIMode.value) {\r\n          this.updateIsLoadingModalVisible(true);\r\n          await this.connectAndAddSocketMethods();\r\n        } else {\r\n          this.updateIsLoadingModalVisible(false);\r\n        }\r\n      } catch (error) {\r\n        console.log('error connectAndaAddSocketMethods', error);\r\n      }\r\n\r\n      this.startMeetingProgressTimer.startMeetingProgressTimer({\r\n        startTime: Date.now() / 1000,\r\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n      });\r\n\r\n      try {\r\n        if (this.sourceParameters !== null) {\r\n          this.sourceParameters = {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          };\r\n          if (this.updateSourceParameters) {\r\n            this.updateSourceParameters(this.sourceParameters);\r\n          }\r\n        }\r\n      } catch {\r\n        console.log('error updateSourceParameters');\r\n      }\r\n\r\n    }\r\n  }\r\n\r\n  @HostListener('window:resize')\r\n  @HostListener('window:orientationchange')\r\n  async handleResize() {\r\n    let fraction = 0;\r\n\r\n    if (\r\n      window.innerHeight < window.innerWidth &&\r\n      (this.eventType.value == 'webinar' || this.eventType.value == 'conference')\r\n    ) {\r\n      const currentHeight = window.innerHeight;\r\n      fraction = Number((40 / currentHeight).toFixed(3));\r\n      if (fraction != this.controlHeight.value) {\r\n        this.updateControlHeight(Number(fraction));\r\n      }\r\n    } else {\r\n      // Set default control button height for portrait mode or other event types\r\n      const currentHeight = window.innerHeight;\r\n      fraction = Number((40 / currentHeight).toFixed(3));\r\n      fraction = Number(fraction);\r\n      if (fraction != this.controlHeight.value) {\r\n        this.updateControlHeight(Number(fraction));\r\n      }\r\n    }\r\n\r\n    const dimensions = this.computeDimensionsMethod({\r\n      containerWidthFraction: 1,\r\n      containerHeightFraction: 1,\r\n      mainSize: this.mainHeightWidth.value,\r\n      doStack: true,\r\n      defaultFraction:\r\n        this.eventType.value == 'webinar' || this.eventType.value == 'conference'\r\n          ? 1 - fraction\r\n          : 1,\r\n    });\r\n\r\n    this.updateComponentSizes(dimensions);\r\n\r\n    const orientation = this.checkOrientation();\r\n    if (orientation == 'portrait') {\r\n      if (!this.isWideScreen.value) {\r\n        if (this.shareScreenStarted.value || this.shared.value) {\r\n          this.updateScreenForceFullDisplay(true);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Updates the main grid view\r\n    await this.prepopulateUserMedia.prepopulateUserMedia({\r\n      name: this.hostLabel.value,\r\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n    });\r\n    // Updates the mini grid view\r\n    await this.onScreenChanges.onScreenChanges({\r\n      changed: true,\r\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n    });\r\n  }\r\n\r\n  async disconnectAllSockets(consume_sockets: ConsumeSocket[]): Promise<void> {\r\n    for (const socket of consume_sockets) {\r\n      try {\r\n        const ip = Object.keys(socket)[0];\r\n        await socket[ip].disconnect();\r\n      } catch (error) {\r\n        console.log(`Error disconnecting socket with IP: ${Object.keys(socket)[0]}`, error);\r\n      }\r\n    }\r\n  }\r\n\r\n  async closeAndReset() {\r\n    //close and clean up all sockets, modals,... and reset all states to initial values\r\n\r\n    this.updateIsMessagesModalVisible(false);\r\n    this.updateIsParticipantsModalVisible(false);\r\n    this.updateIsWaitingModalVisible(false);\r\n    this.updateIsRequestsModalVisible(false);\r\n    this.updateIsCoHostModalVisible(false);\r\n    this.updateIsSettingsModalVisible(false);\r\n    this.updateIsDisplaySettingsModalVisible(false);\r\n    this.updateIsMediaSettingsModalVisible(false);\r\n    this.updateIsMenuModalVisible(false);\r\n    this.updateIsShareEventModalVisible(false);\r\n    this.updateIsConfirmExitModalVisible(false);\r\n    await this.disconnectAllSockets(this.consume_sockets.value);\r\n    await this.updateStatesToInitialValues();\r\n    this.updateMeetingProgressTime('00:00:00');\r\n    this.updateMeetingElapsedTime(0);\r\n    this.updateRecordingProgressTime('00:00:00');\r\n    this.updateRecordElapsedTime(0);\r\n    this.updateShowRecordButtons(false);\r\n\r\n    this.updateIsConfigureWhiteboardModalVisible(false);\r\n    this.updateIsWhiteboardModalVisible(false);\r\n    this.updateIsMenuModalVisible(false);\r\n    this.updateIsRecordingModalVisible(false);\r\n    this.updateIsPollModalVisible(false);\r\n    this.updateIsBreakoutRoomsModalVisible(false);\r\n    this.updateIsBackgroundModalVisible(false);\r\n    this.updateIsLoadingModalVisible(false);\r\n    this.updateIsConfirmHereModalVisible(false);\r\n\r\n    await sleep({ ms: 500 });\r\n    this.updateValidated(false);\r\n    //if on web, reload the page\r\n    window.location.reload();\r\n  }\r\n\r\n  computeDimensionsMethod = ({\r\n    containerWidthFraction = 1,\r\n    containerHeightFraction = 1,\r\n    mainSize,\r\n    doStack = true,\r\n    defaultFraction,\r\n  }: {\r\n    containerWidthFraction?: number;\r\n    containerHeightFraction?: number;\r\n    mainSize: number;\r\n    doStack?: boolean;\r\n    defaultFraction: number;\r\n  }): ComponentSizes => {\r\n    const parentWidth = window.innerWidth * containerWidthFraction;\r\n    const parentHeight = window.innerHeight * containerHeightFraction * defaultFraction;\r\n    let isWideScreen = parentWidth >= 768;\r\n\r\n    if (!isWideScreen && parentWidth > 1.5 * parentHeight) {\r\n      isWideScreen = true;\r\n    }\r\n\r\n    this.updateIsWideScreen(isWideScreen);\r\n\r\n    const dimensions = this.calculateDimensions({\r\n      parentWidth,\r\n      parentHeight,\r\n      isWideScreen,\r\n      mainSize,\r\n      doStack,\r\n    });\r\n    return dimensions;\r\n  };\r\n\r\n  calculateDimensions({\r\n    parentWidth,\r\n    parentHeight,\r\n    isWideScreen,\r\n    mainSize,\r\n    doStack,\r\n  }: {\r\n    parentWidth: number;\r\n    parentHeight: number;\r\n    isWideScreen: boolean;\r\n    mainSize: number;\r\n    doStack: boolean;\r\n  }): ComponentSizes {\r\n    if (doStack) {\r\n      return isWideScreen\r\n        ? {\r\n          mainHeight: Math.floor(parentHeight),\r\n          otherHeight: Math.floor(parentHeight),\r\n          mainWidth: Math.floor((mainSize / 100) * parentWidth),\r\n          otherWidth: Math.floor(((100 - mainSize) / 100) * parentWidth),\r\n        }\r\n        : {\r\n          mainHeight: Math.floor((mainSize / 100) * parentHeight),\r\n          otherHeight: Math.floor(((100 - mainSize) / 100) * parentHeight),\r\n          mainWidth: Math.floor(parentWidth),\r\n          otherWidth: Math.floor(parentWidth),\r\n        };\r\n    } else {\r\n      return {\r\n        mainHeight: Math.floor(parentHeight),\r\n        otherHeight: Math.floor(parentHeight),\r\n        mainWidth: Math.floor(parentWidth),\r\n        otherWidth: Math.floor(parentWidth),\r\n      };\r\n    }\r\n  }\r\n\r\n  handleOrientationChange() {\r\n    window.addEventListener('resize', this.handleResize.bind(this));\r\n    window.addEventListener('orientationchange', this.handleResize.bind(this));\r\n  }\r\n\r\n  setupResizeListener() {\r\n    this.handleResize();\r\n  }\r\n\r\n  orientation = window.innerHeight > window.innerWidth ? 'portrait' : 'landscape';\r\n\r\n  async joinRoom(data: {\r\n    socket: Socket;\r\n    roomName: string;\r\n    islevel: string;\r\n    member: string;\r\n    sec: string;\r\n    apiUserName: string;\r\n  }): Promise<ResponseJoinRoom | null> {\r\n    const { socket, roomName, islevel, member, sec, apiUserName } = data;\r\n\r\n    try {\r\n      const response: ResponseJoinRoom | null = await this.joinRoomClient.joinRoomClient({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n      });\r\n\r\n      return response;\r\n    } catch (error) {\r\n      console.log('Error joining room:', error);\r\n      throw new Error('Failed to join the room. Please check your connection and try again.');\r\n    }\r\n  }\r\n\r\n  async join_Room({\r\n    socket,\r\n    roomName,\r\n    islevel,\r\n    member,\r\n    sec,\r\n    apiUserName,\r\n    isLocal = false,\r\n  }: {\r\n    socket: Socket;\r\n    roomName: string;\r\n    islevel: string;\r\n    member: string;\r\n    sec: string;\r\n    apiUserName: string;\r\n    isLocal?: boolean;\r\n  }): Promise<void> {\r\n    let data: ResponseJoinRoom | null;\r\n\r\n    if (!isLocal) {\r\n      data = await this.joinRoom({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n      });\r\n    } else {\r\n      const localData: ResponseJoinLocalRoom = await this.joinLocalRoom.joinLocalRoom({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n        parameters: {\r\n          showAlert:\r\n            this.showAlert ||\r\n            (() => {\r\n              console.log('showAlert not defined');\r\n            }),\r\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\r\n          connectSocket: this.socketManager.connectSocket,\r\n          connectLocalSocket: this.socketManager.connectLocalSocket,\r\n          updateSocket: this.updateSocket,\r\n          updateLocalSocket: this.updateLocalSocket,\r\n          updateValidated: this.updateValidated,\r\n          updateApiUserName: this.updateApiUserName,\r\n          updateApiToken: this.updateApiToken,\r\n          updateLink: this.updateLink,\r\n          updateRoomName: this.updateRoomName,\r\n          updateMember: this.updateMember,\r\n        },\r\n        checkConnect:\r\n          this.localLink.length > 0 &&\r\n          this.connectMediaSFU === true &&\r\n          !this.link.value.includes('mediasfu.com'),\r\n        localLink: this.localLink,\r\n        joinMediaSFURoom: this.joinMediaSFURoom,\r\n      });\r\n\r\n      data = await createResponseJoinRoom({ localRoom: localData });\r\n    }\r\n\r\n    const updateAndComplete = async (data: ResponseJoinRoom) => {\r\n      // Update room parameters\r\n      try {\r\n        // Check if roomRecvIPs is not empty\r\n        if (!data.roomRecvIPs || data.roomRecvIPs.length === 0) {\r\n          data.roomRecvIPs = ['none'];\r\n\r\n          if (\r\n            this.link.value !== \"\" &&\r\n            this.link.value.includes(\"mediasfu.com\") &&\r\n            !isLocal\r\n          ) {\r\n            // Community Edition Only\r\n            await this.receiveAllPipedTransports.receiveAllPipedTransports({\r\n              community: true,\r\n              nsock: this.getUpdatedAllParams().socket,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n        }\r\n\r\n\r\n        this.updateRoomParametersClient.updateRoomParametersClient({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n            data: data,\r\n          },\r\n        });\r\n\r\n        if (data.isHost) {\r\n          this.updateIslevel('2');\r\n        } else {\r\n          // Issue with isHost for local room\r\n          if (islevel !== '2') {\r\n            this.updateIslevel('1');\r\n          }\r\n        }\r\n\r\n        if (data.secureCode && data.secureCode !== '') {\r\n          this.updateAdminPasscode(data.secureCode);\r\n        }\r\n\r\n        if (data.rtpCapabilities) {\r\n          try {\r\n            const device_ = await this.createDeviceClient.createDeviceClient({\r\n              rtpCapabilities: data.rtpCapabilities,\r\n            });\r\n\r\n            if (device_) {\r\n              this.device.next(device_);\r\n            }\r\n          } catch (error) {\r\n            console.error('Error creating device:', error);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error('Error in updateAndComplete:', error);\r\n      }\r\n    };\r\n\r\n    if (data && data.success) {\r\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && isLocal) {\r\n        this.roomData.next(data);\r\n        return;\r\n      } else if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\r\n        // Update roomData\r\n        if (this.roomData.value) {\r\n          // Updating only the recording and meeting room parameters\r\n          this.roomData.value.recordingParams = data.recordingParams;\r\n          this.roomData.value.meetingRoomParams = data.meetingRoomParams;\r\n          this.roomData.next(this.roomData.value);\r\n        } else {\r\n          this.roomData.next(data);\r\n        }\r\n      } else {\r\n        // Update roomData\r\n        this.roomData.next(data);\r\n        if (!this.link.value.includes('mediasfu.com')) {\r\n          this.roomData.value!.meetingRoomParams = data.meetingRoomParams;\r\n        }\r\n      }\r\n\r\n      await updateAndComplete(data);\r\n    } else {\r\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\r\n        // Join local room only\r\n        if (this.roomData.value) {\r\n          await updateAndComplete(this.roomData.value);\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Might be a wrong room name or room is full or other error; check reason in data object if available\r\n      try {\r\n        if (this.showAlert && data?.reason) {\r\n          this.showAlert({\r\n            message: data.reason,\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n        }\r\n      } catch (error) {\r\n        /* handle error */\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  onParticipantsFilterChange = (value: string): void => {\r\n    if (value && value.length > 0) {\r\n      this.filteredParticipants.next(\r\n        this.participants.value.filter((participant) =>\r\n          participant.name.toLowerCase().includes(value.toLowerCase()),\r\n        ),\r\n      );\r\n      this.participantsCounter.next(this.filteredParticipants.value.length);\r\n    } else {\r\n      this.filteredParticipants.next(this.participants.value);\r\n      this.participantsCounter.next(this.participants.value.length);\r\n    }\r\n  };\r\n\r\n  updateStatesToInitialValues = async () => {\r\n    const initialValues = initialValuesState as { [key: string]: any };\r\n    const updateFunctions = this.getAllParams() as unknown as {\r\n      [key: string]: (value: any) => void;\r\n    };\r\n\r\n    for (const key in initialValues) {\r\n      if (Object.prototype.hasOwnProperty.call(initialValues, key)) {\r\n        const updateFunctionName = `update${key.charAt(0).toUpperCase() + key.slice(1)}`;\r\n        const updateFunction = updateFunctions[updateFunctionName];\r\n\r\n        if (typeof updateFunction === 'function') {\r\n          try {\r\n            updateFunction(initialValues[key]);\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  faRecordVinyl = faRecordVinyl;\r\n  faPlayCircle = faPlayCircle;\r\n  faPauseCircle = faPauseCircle;\r\n  faStopCircle = faStopCircle;\r\n  faDotCircle = faDotCircle;\r\n  faCog = faCog;\r\n  faUsers = faUsers;\r\n  faClock = faClock;\r\n  faUserPlus = faUserPlus;\r\n  faTools = faTools;\r\n  faDesktop = faDesktop;\r\n  faPoll = faPoll;\r\n  faUserFriends = faUserFriends;\r\n  faChalkboardTeacher = faChalkboardTeacher;\r\n  faMicrophone = faMicrophone;\r\n  faMicrophoneSlash = faMicrophoneSlash;\r\n  faVideo = faVideo;\r\n  faVideoSlash = faVideoSlash;\r\n  faSync = faSync;\r\n  faPhone = faPhone;\r\n  faShareAlt = faShareAlt;\r\n  faBars = faBars;\r\n  faComments = faComments;\r\n  faChartBar = faChartBar;\r\n\r\n  onCloseMenuModal = () => {\r\n    this.updateIsMenuModalVisible(false);\r\n  };\r\n\r\n  onEventSettingsClose = () => {\r\n    this.updateIsSettingsModalVisible(false);\r\n  };\r\n\r\n  onCoHostClose = () => {\r\n    this.updateIsCoHostModalVisible(false);\r\n  };\r\n\r\n  onMediaSettingsClose = () => {\r\n    this.updateIsMediaSettingsModalVisible(false);\r\n  };\r\n\r\n  onDisplaySettingsClose = () => {\r\n    this.updateIsDisplaySettingsModalVisible(false);\r\n  };\r\n\r\n  onPollClose = () => {\r\n    this.updateIsPollModalVisible(false);\r\n  };\r\n\r\n  onBreakoutRoomsClose = () => {\r\n    this.updateIsBreakoutRoomsModalVisible(false);\r\n  };\r\n\r\n  onConfigureWhiteboardClose = () => {\r\n    this.updateIsConfigureWhiteboardModalVisible(false);\r\n  };\r\n\r\n  onMessagesClose = () => {\r\n    this.updateIsMessagesModalVisible(false);\r\n  };\r\n\r\n  onRecordingClose = () => {\r\n    this.updateIsRecordingModalVisible(false);\r\n  };\r\n\r\n  onParticipantsClose = () => {\r\n    this.updateIsParticipantsModalVisible(false);\r\n  };\r\n\r\n  onBackgroundClose = () => {\r\n    this.updateIsBackgroundModalVisible(false);\r\n  };\r\n\r\n  onConfirmExitClose = () => {\r\n    this.updateIsConfirmExitModalVisible(false);\r\n  };\r\n\r\n  onConfirmHereClose = () => {\r\n    this.updateIsConfirmHereModalVisible(false);\r\n  };\r\n\r\n  onScreenboardClose = () => {\r\n    this.updateIsScreenboardModalVisible(false);\r\n  };\r\n\r\n  onShareEventClose = () => {\r\n    this.updateIsShareEventModalVisible(false);\r\n  };\r\n\r\n  onAlertHide = () => {\r\n    this.updateAlertVisible(false);\r\n  };\r\n\r\n  ScreenboardWidget = {\r\n    component: Screenboard,\r\n    inputs: {\r\n      customWidth: this.componentSizes.value.mainWidth,\r\n      customHeight: this.componentSizes.value.mainHeight,\r\n      parameters: this.mediaSFUParameters,\r\n      showAspect: this.shared.value,\r\n    },\r\n  };\r\n\r\n  recordTimerWidget = {\r\n    component: RecordTimerWidget,\r\n    injector: this.createInjector({ recordingProgressTime: this.recordingProgressTime.value }),\r\n  };\r\n\r\n  updateRecordTimerWidget = (\r\n    recordingProgressTime: string = this.recordingProgressTime.value,\r\n  ): { component: any; injector: Injector } => {\r\n    const recordTimerWidget = {\r\n      component: RecordTimerWidget,\r\n      injector: this.createInjector({ recordingProgressTime: recordingProgressTime }),\r\n    };\r\n\r\n    this.recordTimerWidget = { ...recordTimerWidget };\r\n\r\n    this.cdr.markForCheck();\r\n\r\n    return recordTimerWidget;\r\n  };\r\n\r\n  recordButton = [\r\n    {\r\n      icon: this.faRecordVinyl,\r\n      text: 'Record',\r\n      onPress: () => {\r\n        this.launchRecording.launchRecording({\r\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n          showAlert: this.showAlert.bind(this),\r\n          stopLaunchRecord: this.stopLaunchRecord.value,\r\n          canLaunchRecord: this.canLaunchRecord.value,\r\n          recordingAudioSupport: this.recordingAudioSupport.value,\r\n          recordingVideoSupport: this.recordingVideoSupport.value,\r\n          updateCanRecord: this.updateCanRecord.bind(this),\r\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n          recordStarted: this.recordStarted.value,\r\n          recordPaused: this.recordPaused.value,\r\n          localUIMode: this.localUIMode.value,\r\n        });\r\n      },\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      show: true,\r\n    },\r\n  ];\r\n\r\n  recordButtons: MainButtonAlt[] = [];\r\n\r\n  recordButtonsArray: MainButtonAlt[] = [\r\n    {\r\n      icon: this.faPlayCircle,\r\n      active: () => !this.recordPaused.value,\r\n      onPress: () =>\r\n        this.updateRecording.updateRecording({\r\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n        }),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      alternateIcon: this.faPauseCircle,\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faStopCircle,\r\n      active: () => false,\r\n      onPress: () =>\r\n        this.stopRecording.stopRecording({\r\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'black',\r\n      show: () => true,\r\n    },\r\n    {\r\n      customComponent: () => this.updateRecordTimerWidget(),\r\n      show: () => true,\r\n      active: () => false,\r\n    },\r\n    {\r\n      icon: this.faDotCircle,\r\n      active: () => false,\r\n      onPress: () => console.log('Status pressed'),\r\n      activeColor: 'black',\r\n      inActiveColor: () => (this.recordPaused.value ? 'yellow' : 'red'),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faCog,\r\n      active: () => false,\r\n      onPress: () =>\r\n        this.launchRecording.launchRecording({\r\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n          showAlert: this.showAlert.bind(this),\r\n          stopLaunchRecord: this.stopLaunchRecord.value,\r\n          canLaunchRecord: this.canLaunchRecord.value,\r\n          recordingAudioSupport: this.recordingAudioSupport.value,\r\n          recordingVideoSupport: this.recordingVideoSupport.value,\r\n          updateCanRecord: this.updateCanRecord.bind(this),\r\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n          recordStarted: this.recordStarted.value,\r\n          recordPaused: this.recordPaused.value,\r\n          localUIMode: this.localUIMode.value,\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'black',\r\n      show: () => true,\r\n    },\r\n  ];\r\n\r\n  async updateRecordButtons() {\r\n    const recordButtons = this.recordButtonsArray.map((button) => {\r\n      return {\r\n        ...button,\r\n        active: typeof button.active === 'function' ? button.active() : button.active,\r\n        show: typeof button.show === 'function' ? button.show() : button.show,\r\n        customComponent: button.customComponent\r\n          ? typeof button.customComponent === 'function'\r\n            ? button.customComponent()\r\n            : button.customComponent\r\n          : undefined,\r\n        activeColor:\r\n          typeof button.inActiveColor === 'function'\r\n            ? button.inActiveColor()\r\n            : button.inActiveColor,\r\n        inActiveColor:\r\n          typeof button.inActiveColor === 'function'\r\n            ? button.inActiveColor()\r\n            : button.inActiveColor,\r\n      };\r\n    });\r\n    this.recordButtons = [...recordButtons];\r\n    await this.updateMenuRecordWidget(recordButtons);\r\n    this.updateCustomMenuButtons();\r\n    this.updateControlBroadcastButtons();\r\n\r\n    this.cdr.markForCheck();\r\n  }\r\n\r\n  // Create instances of the custom widgets\r\n  menuWidget = {\r\n    component: MenuWidget,\r\n    injector: this.createInjector({\r\n      icon: this.faBars,\r\n      badgeValue: this.totalReqWait.value,\r\n      iconColor: 'black',\r\n      showBadge: true,\r\n    }),\r\n  };\r\n\r\n  messageWidget = {\r\n    component: MessageWidget,\r\n    injector: this.createInjector({\r\n      icon: this.faComments,\r\n      showBadge: this.showMessagesBadge.value,\r\n      badgeValue: 1,\r\n      iconColor: 'black',\r\n    }),\r\n  };\r\n\r\n  menuRecordWidget = {\r\n    component: MenuRecordWidget,\r\n    injector: this.createInjector({\r\n      buttons: this.recordButtons,\r\n      showAspect: true,\r\n      direction: 'horizontal',\r\n    }),\r\n  };\r\n\r\n  updateMenuRecordWidget = (recordButtons: MainButtonAlt[] = this.recordButtons): any => {\r\n    const menuRecordWidget = {\r\n      component: MenuRecordWidget,\r\n      injector: this.createInjector({\r\n        buttons: recordButtons,\r\n        showAspect: true,\r\n        direction: 'horizontal',\r\n      }),\r\n    };\r\n\r\n    this.menuRecordWidget = { ...menuRecordWidget };\r\n\r\n    this.cdr.markForCheck();\r\n\r\n    return menuRecordWidget;\r\n  };\r\n\r\n  menuParticipantsWidget = {\r\n    component: MenuParticipantsWidget,\r\n    injector: this.createInjector({\r\n      icon: this.faChartBar,\r\n      participantsCounter: this.participantsCounter.value,\r\n      iconColor: 'black',\r\n    }),\r\n  };\r\n\r\n  updateMenuParticipantsWidget = (count: number = this.participantsCounter.value): any => {\r\n    const menuParticipantsWidget = {\r\n      component: MenuParticipantsWidget,\r\n      injector: this.createInjector({\r\n        icon: this.faChartBar,\r\n        participantsCounter: count,\r\n        iconColor: 'black',\r\n      }),\r\n    };\r\n\r\n    this.menuParticipantsWidget = { ...menuParticipantsWidget };\r\n\r\n    this.cdr.markForCheck();\r\n\r\n    return menuParticipantsWidget;\r\n  };\r\n\r\n  customMenuButtonsArray: MainCustomButton[] = [\r\n    {\r\n      icon: this.faRecordVinyl,\r\n      text: 'Record',\r\n      action: () =>\r\n        this.launchRecording.launchRecording({\r\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n          showAlert: this.showAlert.bind(this),\r\n          stopLaunchRecord: this.stopLaunchRecord.value,\r\n          canLaunchRecord: this.canLaunchRecord.value,\r\n          recordingAudioSupport: this.recordingAudioSupport.value,\r\n          recordingVideoSupport: this.recordingVideoSupport.value,\r\n          updateCanRecord: this.updateCanRecord.bind(this),\r\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n          recordStarted: this.recordStarted.value,\r\n          recordPaused: this.recordPaused.value,\r\n          localUIMode: this.localUIMode.value,\r\n        }),\r\n      show: () => !this.showRecordButtons.value && this.islevel.value == '2',\r\n    },\r\n    {\r\n      customComponent: () => this.updateMenuRecordWidget(),\r\n      show: () => this.showRecordButtons.value && this.islevel.value == '2',\r\n      action: () => console.log('record buttons pressed'),\r\n    },\r\n    {\r\n      icon: this.faCog,\r\n      text: 'Event Settings',\r\n      action: () =>\r\n        this.launchSettings.launchSettings({\r\n          updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\r\n          isSettingsModalVisible: this.isSettingsModalVisible.value,\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faUsers,\r\n      text: 'Requests',\r\n      action: () =>\r\n        this.launchRequests.launchRequests({\r\n          updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\r\n          isRequestsModalVisible: this.isRequestsModalVisible.value,\r\n        }),\r\n      show: () =>\r\n        this.islevel.value == '2' ||\r\n        ((this.coHostResponsibility.value &&\r\n          this.coHost.value &&\r\n          this.coHost.value === this.member.value &&\r\n          !!this.coHostResponsibility?.value?.find((item) => item.name === 'media')?.value) ??\r\n          false) ||\r\n        false,\r\n    },\r\n    {\r\n      icon: this.faClock,\r\n      text: 'Waiting',\r\n      action: () =>\r\n        this.launchWaiting.launchWaiting({\r\n          updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\r\n          isWaitingModalVisible: this.isWaitingModalVisible.value,\r\n        }),\r\n      show: () =>\r\n        this.islevel.value == '2' ||\r\n        (this.coHostResponsibility.value &&\r\n          this.coHost.value &&\r\n          this.coHost.value === this.member.value &&\r\n          this.coHostResponsibility?.value?.find((item) => item.name === 'waiting')?.value ===\r\n          true) ||\r\n        false,\r\n    },\r\n    {\r\n      icon: this.faUserPlus,\r\n      text: 'Co-host',\r\n      action: () =>\r\n        this.launchCoHost.launchCoHost({\r\n          updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\r\n          isCoHostModalVisible: this.isCoHostModalVisible.value,\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faTools,\r\n      text: 'Set Media',\r\n      action: () =>\r\n        this.launchMediaSettings.launchMediaSettings({\r\n          updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\r\n          isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\r\n          audioInputs: this.audioInputs.value,\r\n          videoInputs: this.videoInputs.value,\r\n          updateAudioInputs: this.updateAudioInputs.bind(this),\r\n          updateVideoInputs: this.updateVideoInputs.bind(this),\r\n        }),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faDesktop,\r\n      text: 'Display',\r\n      action: () =>\r\n        this.launchDisplaySettings.launchDisplaySettings({\r\n          updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\r\n          isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\r\n        }),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faPoll,\r\n      text: 'Poll',\r\n      action: () =>\r\n        this.launchPoll.launchPoll({\r\n          updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\r\n          isPollModalVisible: this.isPollModalVisible.value,\r\n        }),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faUserFriends,\r\n      text: 'Breakout Rooms',\r\n      action: () =>\r\n        this.launchBreakoutRooms.launchBreakoutRooms({\r\n          updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\r\n          isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faChalkboardTeacher,\r\n      text: 'Whiteboard',\r\n      action: () =>\r\n        this.launchConfigureWhiteboard.launchConfigureWhiteboard({\r\n          updateIsConfigureWhiteboardModalVisible:\r\n            this.updateIsConfigureWhiteboardModalVisible.bind(this),\r\n          isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n  ];\r\n\r\n  customMenuButtons: MainCustomButton[] = [];\r\n\r\n  updateCustomMenuButtons() {\r\n    this.customMenuButtons = this.customMenuButtonsArray.map((button) => {\r\n      return {\r\n        ...button,\r\n        show: typeof button.show === 'function' ? button.show() : button.show,\r\n        customComponent: button.customComponent\r\n          ? typeof button.customComponent === 'function'\r\n            ? button.customComponent()\r\n            : button.customComponent\r\n          : undefined,\r\n      };\r\n    });\r\n  }\r\n\r\n  controlBroadcastButtons: ButtonTouch[] = [];\r\n\r\n  updateControlBroadcastButtons() {\r\n    this.controlBroadcastButtons = this.controlBroadcastButtonsArray.map((button) => {\r\n      return {\r\n        ...button,\r\n        show: typeof button.show === 'function' ? button.show() : button.show,\r\n        active: typeof button.active === 'function' ? button.active() : button.active,\r\n        customComponent: button.customComponent\r\n          ? typeof button.customComponent === 'function'\r\n            ? button.customComponent()\r\n            : button.customComponent\r\n          : undefined,\r\n      };\r\n    });\r\n  }\r\n\r\n  controlBroadcastButtonsArray: ButtonTouch[] = [\r\n    {\r\n      icon: this.faUsers,\r\n      active: true,\r\n      alternateIcon: this.faUsers,\r\n      onPress: () =>\r\n        this.launchParticipants.launchParticipants({\r\n          updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\r\n          isParticipantsModalVisible: this.isParticipantsModalVisible.value,\r\n        }),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faShareAlt,\r\n      active: true,\r\n      alternateIcon: this.faShareAlt,\r\n      onPress: () => this.updateIsShareEventModalVisible(!this.isShareEventModalVisible.value),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      show: () => true,\r\n    },\r\n    {\r\n      customComponent: this.messageWidget,\r\n      onPress: () =>\r\n        this.launchMessages.launchMessages({\r\n          updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\r\n          isMessagesModalVisible: this.isMessagesModalVisible.value,\r\n        }),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faSync,\r\n      active: true,\r\n      alternateIcon: this.faSync,\r\n      onPress: () =>\r\n        this.switchVideoAlt.switchVideoAlt({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faVideoSlash,\r\n      alternateIcon: this.faVideo,\r\n      active: () => this.videoActive.value,\r\n      onPress: () =>\r\n        this.clickVideo.clickVideo({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n    },\r\n    {\r\n      icon: this.faMicrophoneSlash,\r\n      alternateIcon: this.faMicrophone,\r\n      active: () => this.micActive.value,\r\n      onPress: () =>\r\n        this.clickAudio.clickAudio({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      customComponent: () => this.menuParticipantsWidget,\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faPhone,\r\n      active: this.endCallActive.value,\r\n      onPress: () =>\r\n        this.launchConfirmExit.launchConfirmExit({\r\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\r\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faPhone,\r\n      active: this.endCallActive.value,\r\n      onPress: () => console.log('End Call pressed'),\r\n      activeColor: 'transparent',\r\n      inActiveColor: 'transparent',\r\n      backgroundColor: { default: 'transparent' },\r\n      show: () => false,\r\n    },\r\n  ];\r\n\r\n  controlChatButtons: ButtonTouch[] = [];\r\n\r\n  controlChatButtonsArray: ButtonTouch[] = [\r\n    {\r\n      icon: this.faShareAlt,\r\n      active: true,\r\n      alternateIcon: this.faShareAlt,\r\n      onPress: () => this.updateIsShareEventModalVisible(!this.isShareEventModalVisible.value),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      show: true,\r\n    },\r\n    {\r\n      customComponent: this.messageWidget,\r\n      onPress: () =>\r\n        this.launchMessages.launchMessages({\r\n          updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\r\n          isMessagesModalVisible: this.isMessagesModalVisible.value,\r\n        }),\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faSync,\r\n      active: true,\r\n      alternateIcon: this.faSync,\r\n      onPress: () =>\r\n        this.switchVideoAlt.switchVideoAlt({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faVideoSlash,\r\n      alternateIcon: this.faVideo,\r\n      active: () => this.videoActive.value,\r\n      onPress: () =>\r\n        this.clickVideo.clickVideo({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faMicrophoneSlash,\r\n      alternateIcon: this.faMicrophone,\r\n      active: () => this.micActive.value,\r\n      onPress: () =>\r\n        this.clickAudio.clickAudio({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faPhone,\r\n      active: this.endCallActive.value,\r\n      onPress: () =>\r\n        this.launchConfirmExit.launchConfirmExit({\r\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\r\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      show: true,\r\n    },\r\n  ];\r\n\r\n  updateControlChatButtons() {\r\n    this.controlChatButtons = this.controlChatButtonsArray.map((button) => {\r\n      return {\r\n        ...button,\r\n        show: typeof button.show === 'function' ? button.show() : button.show,\r\n        active: typeof button.active === 'function' ? button.active() : button.active,\r\n      };\r\n    });\r\n  }\r\n\r\n  screenShareWidget = {\r\n    component: ScreenShareWidget,\r\n    injector: this.createInjector({ disabled: !this.screenShareActive.value }),\r\n  };\r\n\r\n  controlButtons = [\r\n    {\r\n      icon: this.faMicrophoneSlash,\r\n      alternateIcon: this.faMicrophone,\r\n      active: this.micActive.value,\r\n      onPress: () =>\r\n        this.clickAudio.clickAudio({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      disabled: this.audioSwitching.value,\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faVideoSlash,\r\n      alternateIcon: this.faVideo,\r\n      active: this.videoActive.value,\r\n      onPress: () =>\r\n        this.clickVideo.clickVideo({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n            MediaStream,\r\n            MediaStreamTrack,\r\n            mediaDevices: MediaDevices,\r\n            device: this.device.value,\r\n            socket: this.socket.value,\r\n            showAlert: this.showAlert.bind(this),\r\n            checkPermission: this.checkPermission.checkPermission,\r\n            streamSuccessVideo: this.streamSuccessVideo.streamSuccessVideo,\r\n            hasCameraPermission: this.hasCameraPermission.value,\r\n            requestPermissionCamera: this.requestPermissionCamera.bind(this),\r\n            checkMediaPermission: 'web' !== 'web',\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      disabled: this.videoSwitching.value,\r\n      show: true,\r\n    },\r\n    {\r\n      //inverted active for inactive state\r\n      icon: faDesktop,\r\n      alternateIconComponent: this.screenShareWidget,\r\n      active: true,\r\n      onPress: () =>\r\n        this.clickScreenShare.clickScreenShare({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      disabled: false,\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faPhone,\r\n      active: this.endCallActive.value,\r\n      onPress: () =>\r\n        this.launchConfirmExit.launchConfirmExit({\r\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\r\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      disabled: false,\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faUsers,\r\n      active: this.participantsActive.value,\r\n      onPress: () =>\r\n        this.launchParticipants.launchParticipants({\r\n          updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\r\n          isParticipantsModalVisible: this.isParticipantsModalVisible.value,\r\n        }),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      disabled: false,\r\n      show: true,\r\n    },\r\n    {\r\n      customComponent: this.menuWidget,\r\n      customName: 'Menu',\r\n      onPress: () =>\r\n        this.launchMenuModal.launchMenuModal({\r\n          updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\r\n          isMenuModalVisible: this.isMenuModalVisible.value,\r\n        }),\r\n      show: true,\r\n    },\r\n    {\r\n      customComponent: this.messageWidget,\r\n      customName: 'Messages',\r\n      onPress: () =>\r\n        this.launchMessages.launchMessages({\r\n          updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\r\n          isMessagesModalVisible: this.isMessagesModalVisible.value,\r\n        }),\r\n      show: true,\r\n    },\r\n  ];\r\n\r\n  async connect_Socket(\r\n    apiUserName: string,\r\n    token: string,\r\n    skipSockets: boolean = false\r\n  ): Promise<Socket | null> {\r\n\r\n    const socketDefault = this.socket.value;\r\n    const socketAlt =\r\n      this.connectMediaSFU && this.localSocket!.value && this.localSocket!.value.id\r\n        ? this.localSocket!.value\r\n        : socketDefault;\r\n\r\n    if (this.socket.value && this.socket.value.id) {\r\n      if (!skipSockets) {\r\n        // Event listeners on socketDefault\r\n        socketDefault.on('disconnect', async () => {\r\n          await this.disconnect.disconnect({\r\n            showAlert: this.showAlert.bind(this),\r\n            redirectURL: this.redirectURL.value,\r\n            onWeb: true,\r\n            updateValidated: this.updateValidated.bind(this),\r\n          });\r\n          if (this.videoAlreadyOn.value) {\r\n            await this.clickVideo.clickVideo({\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n          if (this.audioAlreadyOn.value) {\r\n            await this.clickAudio.clickAudio({\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n          await this.closeAndReset();\r\n        });\r\n\r\n        socketDefault.on('allMembers', async (membersData: AllMembersData) => {\r\n          if (membersData) {\r\n            await this.allMembers.allMembers({\r\n              apiUserName: apiUserName,\r\n              apiKey: '', //not recommended - use apiToken instead. Use for testing/development only\r\n              apiToken: token,\r\n              members: membersData.members,\r\n              requestss: membersData.requests ? membersData.requests : this.requestList.value,\r\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\r\n              coHostRes: membersData.coHostResponsibilities\r\n                ? membersData.coHostResponsibilities\r\n                : this.coHostResponsibility.value,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              consume_sockets: this.consume_sockets.value,\r\n            });\r\n          }\r\n        });\r\n\r\n        socketDefault.on('allMembersRest', async (membersData: AllMembersRestData) => {\r\n          if (membersData) {\r\n            await this.allMembersRest.allMembersRest({\r\n              apiUserName: apiUserName,\r\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\r\n              members: membersData.members,\r\n              apiToken: token,\r\n              settings: membersData.settings,\r\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\r\n              coHostRes: membersData.coHostResponsibilities\r\n                ? membersData.coHostResponsibilities\r\n                : this.coHostResponsibility.value,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              consume_sockets: this.consume_sockets.value,\r\n            });\r\n          }\r\n        });\r\n\r\n        socketDefault.on('userWaiting', async ({ name }: { name: string }) => {\r\n          await this.userWaiting.userWaiting({\r\n            name,\r\n            showAlert: this.showAlert.bind(this),\r\n            totalReqWait: this.totalReqWait.value,\r\n            updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on('personJoined', async ({ name }: { name: string }) => {\r\n          this.personJoined.personJoined({\r\n            name,\r\n            showAlert: this.showAlert.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'allWaitingRoomMembers',\r\n          async (waiting_data: AllWaitingRoomMembersData) => {\r\n            await this.allWaitingRoomMembers.allWaitingRoomMembers({\r\n              waitingParticipants: waiting_data.waitingParticipants\r\n                ? waiting_data.waitingParticipants\r\n                : waiting_data.waitingParticipantss\r\n                  ? waiting_data.waitingParticipantss\r\n                  : this.waitingRoomList.value,\r\n              updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n              updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('ban', async ({ name }: { name: string }) => {\r\n          await this.banParticipant.banParticipant({\r\n            name,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        });\r\n\r\n        socketDefault.on('updatedCoHost', async (cohost_data: UpdatedCoHostData) => {\r\n          await this.updatedCoHost.updatedCoHost({\r\n            coHost: cohost_data.coHost ? cohost_data.coHost : this.coHost.value,\r\n            coHostResponsibility: cohost_data.coHostResponsibilities\r\n              ? cohost_data.coHostResponsibilities\r\n              : this.coHostResponsibility.value,\r\n            youAreCoHost: this.youAreCoHost.value,\r\n            updateCoHost: this.updateCoHost.bind(this),\r\n            updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\r\n            updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\r\n            showAlert: this.showAlert.bind(this),\r\n            eventType: this.eventType.value,\r\n            islevel: this.islevel.value,\r\n            member: this.member.value,\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'participantRequested',\r\n          async ({ userRequest }: { userRequest: Request }) => {\r\n            await this.participantRequested.participantRequested({\r\n              userRequest,\r\n              requestList: this.requestList.value,\r\n              waitingRoomList: this.waitingRoomList.value,\r\n              updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n              updateRequestList: this.updateRequestList.bind(this),\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('screenProducerId', async ({ producerId }: { producerId: string }) => {\r\n          this.screenProducerId.screenProducerId({\r\n            producerId,\r\n            screenId: this.screenId.value,\r\n            membersReceived: this.membersReceived.value,\r\n            shareScreenStarted: this.shareScreenStarted.value,\r\n            deferScreenReceived: this.deferScreenReceived.value,\r\n            participants: this.participants.value,\r\n            updateScreenId: this.updateScreenId.bind(this),\r\n            updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\r\n            updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on('updateMediaSettings', async ({ settings }: { settings: Settings }) => {\r\n          this.updateMediaSettings.updateMediaSettings({\r\n            settings,\r\n            updateAudioSetting: this.updateAudioSetting.bind(this),\r\n            updateVideoSetting: this.updateVideoSetting.bind(this),\r\n            updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\r\n            updateChatSetting: this.updateChatSetting.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'producer-media-paused',\r\n          async ({\r\n            producerId,\r\n            kind,\r\n            name,\r\n          }: {\r\n            producerId: string;\r\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\r\n            name: string;\r\n          }) => {\r\n            await this.producerMediaPaused.producerMediaPaused({\r\n              producerId,\r\n              kind,\r\n              name,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'producer-media-resumed',\r\n          async ({ kind, name }: { kind: 'audio'; name: string }) => {\r\n            await this.producerMediaResumed.producerMediaResumed({\r\n              kind,\r\n              name,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'producer-media-closed',\r\n          async ({\r\n            producerId,\r\n            kind,\r\n          }: {\r\n            producerId: string;\r\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\r\n          }) => {\r\n            if (producerId && kind) {\r\n              await this.producerMediaClosed.producerMediaClosed({\r\n                producerId,\r\n                kind,\r\n                parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              });\r\n            }\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'controlMediaHost',\r\n          async ({ type }: { type: 'video' | 'audio' | 'screenshare' | 'chat' | 'all' }) => {\r\n            await this.controlMediaHost.controlMediaHost({\r\n              type,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('meetingEnded', async () => {\r\n          await this.meetingEnded.meetingEnded({\r\n            showAlert: this.showAlert.bind(this),\r\n            redirectURL: this.redirectURL.value,\r\n            onWeb: true,\r\n            eventType: this.eventType.value,\r\n            updateValidated: this.updateValidated.bind(this),\r\n          });\r\n\r\n          if (this.videoAlreadyOn.value) {\r\n            await this.clickVideo.clickVideo({\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          }\r\n          if (this.audioAlreadyOn.value) {\r\n            await this.clickAudio.clickAudio({\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          }\r\n\r\n          await this.closeAndReset();\r\n        });\r\n\r\n        socketDefault.on('disconnectUserSelf', async () => {\r\n          await this.disconnectUserSelf.disconnectUserSelf({\r\n            socket: socketDefault,\r\n            member: this.member.value,\r\n            roomName: this.roomName.value,\r\n          });\r\n        });\r\n\r\n        socketDefault.on('receiveMessage', async ({ message }: { message: Message }) => {\r\n          await this.receiveMessage.receiveMessage({\r\n            message,\r\n            messages: this.messages.value,\r\n            participantsAll: this.participantsAll.value,\r\n            member: this.member.value,\r\n            eventType: this.eventType.value,\r\n            islevel: this.islevel.value,\r\n            coHost: this.coHost.value,\r\n            updateMessages: this.updateMessages.bind(this),\r\n            updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'meetingTimeRemaining',\r\n          async ({ timeRemaining }: { timeRemaining: number }) => {\r\n            await this.meetingTimeRemaining.meetingTimeRemaining({\r\n              timeRemaining,\r\n              showAlert: this.showAlert.bind(this),\r\n              eventType: this.eventType.value,\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('meetingStillThere', async () => {\r\n          this.meetingStillThere.meetingStillThere({\r\n            updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'updateConsumingDomains',\r\n          async ({ domains, alt_domains }: UpdateConsumingDomainsData) => {\r\n            await this.updateConsumingDomains.updateConsumingDomains({\r\n              domains,\r\n              alt_domains,\r\n              apiUserName,\r\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\r\n              apiToken: token,\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'hostRequestResponse',\r\n          ({ requestResponse }: HostRequestResponseData) => {\r\n            this.hostRequestResponse.hostRequestResponse({\r\n              requestResponse,\r\n              showAlert: this.showAlert.bind(this),\r\n              requestList: this.requestList.value,\r\n              updateRequestList: this.updateRequestList.bind(this),\r\n              updateMicAction: this.updateMicAction.bind(this),\r\n              updateVideoAction: this.updateVideoAction.bind(this),\r\n              updateScreenAction: this.updateScreenAction.bind(this),\r\n              updateChatAction: this.updateChatAction.bind(this),\r\n              updateAudioRequestState: this.updateAudioRequestState.bind(this),\r\n              updateVideoRequestState: this.updateVideoRequestState.bind(this),\r\n              updateScreenRequestState: this.updateScreenRequestState.bind(this),\r\n              updateChatRequestState: this.updateChatRequestState.bind(this),\r\n              updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\r\n              updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\r\n              updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\r\n              updateChatRequestTime: this.updateChatRequestTime.bind(this),\r\n              updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('pollUpdated', async (data: PollUpdatedData) => {\r\n          try {\r\n            await this.pollUpdated.pollUpdated({\r\n              data,\r\n              polls: this.polls.value,\r\n              poll: this.poll.value ? this.poll.value : ({} as Poll),\r\n              member: this.member.value,\r\n              islevel: this.islevel.value,\r\n              showAlert: this.showAlert.bind(this),\r\n              updatePolls: this.updatePolls.bind(this),\r\n              updatePoll: this.updatePoll.bind(this),\r\n              updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\r\n            });\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        });\r\n\r\n        socketDefault.on('breakoutRoomUpdated', async (data: BreakoutRoomUpdatedData) => {\r\n          try {\r\n            await this.breakoutRoomUpdated.breakoutRoomUpdated({\r\n              data,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        });\r\n\r\n      }\r\n\r\n      if (skipSockets) {\r\n        // Remove specific event listeners from socketDefault and socketAlt\r\n        const events = [\r\n          'roomRecordParams',\r\n          'startRecords',\r\n          'reInitiateRecording',\r\n          'RecordingNotice',\r\n          'timeLeftRecording',\r\n          'stoppedRecording',\r\n        ];\r\n        events.forEach((event) => {\r\n          socketDefault.off(event);\r\n          socketAlt.off(event);\r\n        });\r\n      }\r\n\r\n      socketAlt.on(\r\n        'roomRecordParams',\r\n        async ({ recordParams }: { recordParams: RecordParams }) => {\r\n          this.roomRecordParams.roomRecordParams({\r\n            recordParams,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        },\r\n      );\r\n\r\n      socketAlt.on('startRecords', async () => {\r\n        await this.startRecords.startRecords({\r\n          roomName: this.roomName.value,\r\n          member: this.member.value,\r\n          socket: socketAlt,\r\n        });\r\n      });\r\n\r\n      socketAlt.on('reInitiateRecording', async () => {\r\n        await this.reInitiateRecording.reInitiateRecording({\r\n          roomName: this.roomName.value,\r\n          member: this.member.value,\r\n          socket: socketAlt,\r\n          adminRestrictSetting: this.adminRestrictSetting.value,\r\n        });\r\n      });\r\n\r\n      socketAlt.on(\r\n        'RecordingNotice',\r\n        async ({ state, userRecordingParam, pauseCount, timeDone }: RecordingNoticeData) => {\r\n          await this.recordingNotice.RecordingNotice({\r\n            state,\r\n            userRecordingParam,\r\n            pauseCount,\r\n            timeDone,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        },\r\n      );\r\n\r\n      socketAlt.on('timeLeftRecording', async ({ timeLeft }: { timeLeft: number }) => {\r\n        this.timeLeftRecording.timeLeftRecording({\r\n          timeLeft,\r\n          showAlert: this.showAlert.bind(this),\r\n        });\r\n      });\r\n\r\n      socketAlt.on(\r\n        'stoppedRecording',\r\n        async ({ state, reason }: { state: string; reason: string }) => {\r\n          await this.stoppedRecording.stoppedRecording({\r\n            state,\r\n            reason,\r\n            showAlert: this.showAlert.bind(this),\r\n          });\r\n        },\r\n      );\r\n\r\n      if (this.localLink !== \"\" && socketDefault && !skipSockets) {\r\n        await this.join_Room({\r\n          socket: socketDefault,\r\n          roomName: this.roomName.value,\r\n          islevel: this.islevel.value,\r\n          member: this.member.value,\r\n          sec: token,\r\n          apiUserName: apiUserName,\r\n          isLocal: true,\r\n        });\r\n      }\r\n\r\n      // Check if localSocket has changed\r\n      const localChanged =\r\n        this.localSocket!.value && this.localSocket!.value.id && this.localSocket!.value.id !== socketAlt.id;\r\n\r\n\r\n      if (!skipSockets && localChanged) {\r\n        // Re-call connect_Socket with skipSockets = true\r\n        await this.connect_Socket(apiUserName, token, true);\r\n        await sleep({ ms: 1000 })\r\n        this.updateIsLoadingModalVisible(false);\r\n        return socketDefault;\r\n      } else {\r\n        if (this.link.value !== '' && this.link.value.includes('mediasfu.com')) {\r\n          // Token might be different for local room\r\n          const token = this.apiToken.value;\r\n          await this.join_Room({\r\n            socket:\r\n              this.connectMediaSFU && socketAlt && socketAlt.id ? socketAlt : socketDefault,\r\n            roomName: this.roomName.value,\r\n            islevel: this.islevel.value,\r\n            member: this.member.value,\r\n            sec: token,\r\n            apiUserName: apiUserName,\r\n          });\r\n        }\r\n\r\n        await this.receiveRoomMessages.receiveRoomMessages({\r\n          socket: socketDefault,\r\n          roomName: this.roomName.value,\r\n          updateMessages: this.updateMessages.bind(this),\r\n        });\r\n\r\n        if (!skipSockets) {\r\n          await this.prepopulateUserMedia.prepopulateUserMedia({\r\n            name: this.hostLabel.value,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        }\r\n\r\n        return socketDefault;\r\n      }\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  HostListener,\r\n  Injector,\r\n  ChangeDetectorRef,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  faMicrophoneSlash,\r\n  faVideoSlash,\r\n  faPhone,\r\n  faUsers,\r\n  faComments,\r\n  faShareAlt,\r\n  faSync,\r\n  faChartBar,\r\n  faRecordVinyl,\r\n  faCog,\r\n  faPlayCircle,\r\n  faPauseCircle,\r\n  faStopCircle,\r\n  faDotCircle,\r\n  faVideo,\r\n  faMicrophone,\r\n} from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport { initialValuesState } from '../../methods/utils/initial-values.util';\r\n\r\n// Components for display\r\nimport { MainAspectComponent } from '../display-components/main-aspect-component/main-aspect-component.component';\r\nimport { LoadingModal } from '../display-components/loading-modal/loading-modal.component';\r\nimport { ControlButtonsComponentTouch } from '../display-components/control-buttons-component-touch/control-buttons-component-touch.component';\r\nimport { MainScreenComponent } from '../display-components/main-screen-component/main-screen-component.component';\r\nimport { MainGridComponent } from '../display-components/main-grid-component/main-grid-component.component';\r\nimport { MainContainerComponent } from '../display-components/main-container-component/main-container-component.component';\r\nimport { AlertComponent } from '../display-components/alert-component/alert.component.component';\r\nimport { RecordingModal } from '../recording-components/recording-modal/recording-modal.component';\r\nimport { ParticipantsModal } from '../participants-components/participants-modal/participants-modal.component';\r\nimport { MessagesModal } from '../message-components/messages-modal/messages-modal.component';\r\nimport { ConfirmExitModal } from '../exit-components/confirm-exit-modal/confirm-exit-modal.component';\r\nimport { ConfirmHereModal } from '../misc-components/confirm-here-modal/confirm-here-modal.component';\r\nimport { ShareEventModal } from '../misc-components/share-event-modal/share-event-modal.component';\r\nimport {\r\n  WelcomePage,\r\n  WelcomePageOptions,\r\n} from '../misc-components/welcome-page/welcome-page.component';\r\n\r\n// Pagination and display of media\r\nimport { FlexibleVideo } from '../display-components/flexible-video/flexible-video.component';\r\nimport { AudioGrid } from '../display-components/audio-grid/audio-grid.component';\r\n\r\nimport { MessageWidget } from '../display-components/control-widgets/message-widget.component';\r\nimport { MenuRecordWidget } from '../display-components/control-widgets/menu-record-widget.component';\r\nimport { RecordTimerWidget } from '../display-components/control-widgets/record-timer-widget.component';\r\nimport { MenuParticipantsWidget } from '../display-components/control-widgets/menu-participants-widget.component';\r\n\r\nimport {\r\n  ButtonTouch,\r\n  ResponseJoinRoom,\r\n  ResponseJoinLocalRoom,\r\n  CoHostResponsibility,\r\n  EventType,\r\n  Participant,\r\n  ConsumeSocket,\r\n  MeetingRoomParams,\r\n  VidCons,\r\n  HParamsType,\r\n  VParamsType,\r\n  ScreenParamsType,\r\n  AParamsType,\r\n  UserRecordingParams,\r\n  Stream,\r\n  AudioDecibels,\r\n  ScreenState,\r\n  GridSizes,\r\n  CustomMediaComponent,\r\n  Message,\r\n  WaitingRoomParticipant,\r\n  ComponentSizes,\r\n  Transport as TransportType,\r\n  Shape,\r\n  Poll,\r\n  BreakoutParticipant,\r\n  WhiteboardUser,\r\n  Request,\r\n  AllMembersData,\r\n  AllMembersRestData,\r\n  MainButtonAlt,\r\n  RecordParams,\r\n  SeedData,\r\n  UpdateConsumingDomainsData,\r\n  RecordingNoticeData,\r\n  PreJoinPageOptions,\r\n  CreateMediaSFURoomOptions,\r\n  JoinMediaSFURoomOptions,\r\n  JoinRoomOnMediaSFUType,\r\n  CreateRoomOnMediaSFUType,\r\n} from '../../@types/types';\r\nimport { createResponseJoinRoom } from '../../methods/utils/create-response-join-room.util';\r\n\r\n// Import methods for control\r\nimport { LaunchRecording } from '../../methods/recording-methods/launch-recording.service';\r\nimport { StartRecording } from '../../methods/recording-methods/start-recording.service';\r\nimport { ConfirmRecording } from '../../methods/recording-methods/confirm-recording.service';\r\nimport { LaunchParticipants } from '../../methods/participants-methods/launch-participants.service';\r\nimport { LaunchMessages } from '../../methods/message-methods/launch-messages.service';\r\nimport { LaunchConfirmExit } from '../../methods/exit-methods/launch-confirm-exit.service';\r\n\r\n// Mediasfu functions -- examples\r\nimport { SocketManager } from '../../sockets/socket-manager.service';\r\nimport { JoinRoomClient } from '../../producer-client/producer-client-emits/join-room-client.service';\r\nimport { JoinLocalRoom } from '../../producers/producer-emits/join-local-room.service';\r\nimport { UpdateRoomParametersClient } from '../../producer-client/producer-client-emits/update-room-parameters-client.service';\r\nimport { CreateDeviceClient } from '../../producer-client/producer-client-emits/create-device-client.service';\r\n\r\nimport { SwitchVideoAlt } from '../../methods/stream-methods/switch-video-alt.service';\r\nimport { ClickVideo } from '../../methods/stream-methods/click-video.service';\r\nimport { ClickAudio } from '../../methods/stream-methods/click-audio.service';\r\nimport { ClickScreenShare } from '../../methods/stream-methods/click-screen-share.service';\r\nimport { StreamSuccessVideo } from '../../consumers/stream-success-video.service';\r\nimport { StreamSuccessAudio } from '../../consumers/stream-success-audio.service';\r\nimport { StreamSuccessScreen } from '../../consumers/stream-success-screen.service';\r\nimport { StreamSuccessAudioSwitch } from '../../consumers/stream-success-audio-switch.service';\r\nimport { CheckPermission } from '../../consumers/check-permission.service';\r\n\r\n// Mediasfu consumer functions\r\nimport { UpdateMiniCardsGrid } from '../../consumers/update-mini-cards-grid.service';\r\nimport { MixStreams } from '../../consumers/mix-streams.service';\r\nimport { DispStreams } from '../../consumers/disp-streams.service';\r\nimport { StopShareScreen } from '../../consumers/stop-share-screen.service';\r\nimport { CheckScreenShare } from '../../consumers/check-screen-share.service';\r\nimport { StartShareScreen } from '../../consumers/start-share-screen.service';\r\nimport { RequestScreenShare } from '../../consumers/request-screen-share.service';\r\nimport { ReorderStreams } from '../../consumers/reorder-streams.service';\r\nimport { PrepopulateUserMedia } from '../../consumers/prepopulate-user-media.service';\r\nimport { GetVideos } from '../../consumers/get-videos.service';\r\nimport { RePort } from '../../consumers/re-port.service';\r\nimport { Trigger } from '../../consumers/trigger.service';\r\nimport { ConsumerResume } from '../../consumers/consumer-resume.service';\r\nimport { ConnectSendTransportAudio } from '../../consumers/connect-send-transport-audio.service';\r\nimport { ConnectSendTransportVideo } from '../../consumers/connect-send-transport-video.service';\r\nimport { ConnectSendTransportScreen } from '../../consumers/connect-send-transport-screen.service';\r\nimport { ProcessConsumerTransports } from '../../consumers/process-consumer-transports.service';\r\nimport { ResumePauseStreams } from '../../consumers/resume-pause-streams.service';\r\nimport { Readjust } from '../../consumers/readjust.service';\r\nimport { CheckGrid } from '../../consumers/check-grid.service';\r\nimport { GetEstimate } from '../../consumers/get-estimate.service';\r\nimport { CalculateRowsAndColumns } from '../../consumers/calculate-rows-and-columns.service';\r\nimport { AddVideosGrid } from '../../consumers/add-videos-grid.service';\r\nimport { OnScreenChanges } from '../../consumers/on-screen-changes.service';\r\nimport { sleep } from '../../methods/utils/sleep.util';\r\nimport { ChangeVids } from '../../consumers/change-vids.service';\r\nimport { CompareActiveNames } from '../../consumers/compare-active-names.service';\r\nimport { CompareScreenStates } from '../../consumers/compare-screen-states.service';\r\nimport { CreateSendTransport } from '../../consumers/create-send-transport.service';\r\nimport { ResumeSendTransportAudio } from '../../consumers/resume-send-transport-audio.service';\r\nimport { ReceiveAllPipedTransports } from '../../consumers/receive-all-piped-transports.service';\r\nimport { DisconnectSendTransportVideo } from '../../consumers/disconnect-send-transport-video.service';\r\nimport { DisconnectSendTransportAudio } from '../../consumers/disconnect-send-transport-audio.service';\r\nimport { DisconnectSendTransportScreen } from '../../consumers/disconnect-send-transport-screen.service';\r\nimport { ConnectSendTransport } from '../../consumers/connect-send-transport.service';\r\nimport { GetPipedProducersAlt } from '../../consumers/get-piped-producers-alt.service';\r\nimport { SignalNewConsumerTransport } from '../../consumers/signal-new-consumer-transport.service';\r\nimport { ConnectRecvTransport } from '../../consumers/connect-recv-transport.service';\r\nimport { ReUpdateInter } from '../../consumers/re-update-inter.service';\r\nimport { UpdateParticipantAudioDecibels } from '../../consumers/update-participant-audio-decibels.service';\r\nimport { CloseAndResize } from '../../consumers/close-and-resize.service';\r\nimport { AutoAdjust } from '../../consumers/auto-adjust.service';\r\nimport { SwitchUserVideoAlt } from '../../consumers/switch-user-video-alt.service';\r\nimport { SwitchUserVideo } from '../../consumers/switch-user-video.service';\r\nimport { SwitchUserAudio } from '../../consumers/switch-user-audio.service';\r\nimport { ReceiveRoomMessages } from '../../consumers/receive-room-messages.service';\r\nimport { FormatNumber } from '../../methods/utils/format-number.service';\r\nimport { ConnectIps } from '../../consumers/connect-ips.service';\r\nimport { ConnectLocalIps } from '../../consumers/connect-local-ips.service';\r\n// Utility imports for meeting and recording functionality\r\nimport { StartMeetingProgressTimer } from '../../methods/utils/meeting-timer/start-meeting-progress-timer.service';\r\nimport { UpdateRecording } from '../../methods/recording-methods/update-recording.service';\r\nimport { StopRecording } from '../../methods/recording-methods/stop-recording.service';\r\n\r\n// Socket methods for participant and meeting management\r\nimport { PersonJoined } from '../../producers/socket-receive-methods/person-joined.service';\r\nimport { RoomRecordParams } from '../../producers/socket-receive-methods/room-record-params.service';\r\nimport { BanParticipant } from '../../producers/socket-receive-methods/ban-participant.service';\r\nimport { ProducerMediaPaused } from '../../producers/socket-receive-methods/producer-media-paused.service';\r\nimport { ProducerMediaResumed } from '../../producers/socket-receive-methods/producer-media-resumed.service';\r\nimport { ProducerMediaClosed } from '../../producers/socket-receive-methods/producer-media-closed.service';\r\nimport { MeetingEnded } from '../../producers/socket-receive-methods/meeting-ended.service';\r\nimport { DisconnectUserSelf } from '../../producers/socket-receive-methods/disconnect-user-self.service';\r\nimport { ReceiveMessage } from '../../producers/socket-receive-methods/receive-message.service';\r\nimport { MeetingTimeRemaining } from '../../producers/socket-receive-methods/meeting-time-remaining.service';\r\nimport { MeetingStillThere } from '../../producers/socket-receive-methods/meeting-still-there.service';\r\nimport { StartRecords } from '../../producers/socket-receive-methods/start-records.service';\r\nimport { ReInitiateRecording } from '../../producers/socket-receive-methods/re-initiate-recording.service';\r\nimport { GetDomains } from '../../producers/socket-receive-methods/get-domains.service';\r\nimport { UpdateConsumingDomains } from '../../producers/socket-receive-methods/update-consuming-domains.service';\r\nimport { RecordingNotice } from '../../producers/socket-receive-methods/recording-notice.service';\r\nimport { TimeLeftRecording } from '../../producers/socket-receive-methods/time-left-recording.service';\r\nimport { StoppedRecording } from '../../producers/socket-receive-methods/stopped-recording.service';\r\nimport { AllMembers } from '../../producers/socket-receive-methods/all-members.service';\r\nimport { AllMembersRest } from '../../producers/socket-receive-methods/all-members-rest.service';\r\nimport { Disconnect } from '../../producers/socket-receive-methods/disconnect.service';\r\n\r\nimport { CaptureCanvasStream } from '../../methods/whiteboard-methods/capture-canvas-stream.service';\r\nimport { ResumePauseAudioStreams } from '../../consumers/resume-pause-audio-streams.service';\r\nimport { ProcessConsumerTransportsAudio } from '../../consumers/process-consumer-transports-audio.service';\r\n\r\nimport {\r\n  Device,\r\n  Producer,\r\n  ProducerOptions,\r\n  RtpCapabilities,\r\n  Transport,\r\n} from 'mediasoup-client/lib/types';\r\nimport { SelfieSegmentation } from '@mediapipe/selfie_segmentation';\r\n\r\nexport type MediasfuBroadcastOptions = {\r\n  PrejoinPage?: (options: PreJoinPageOptions | WelcomePageOptions) => HTMLElement;\r\n  localLink?: string;\r\n  connectMediaSFU?: boolean;\r\n  credentials?: { apiUserName: string; apiKey: string };\r\n  useLocalUIMode?: boolean;\r\n  seedData?: SeedData;\r\n  useSeed?: boolean;\r\n  imgSrc?: string;\r\n  sourceParameters?: { [key: string]: any };\r\n  updateSourceParameters?: (data: { [key: string]: any }) => void;\r\n  returnUI?: boolean;\r\n  noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n  joinMediaSFURoom?: JoinRoomOnMediaSFUType;\r\n  createMediaSFURoom?: CreateRoomOnMediaSFUType;\r\n};\r\n\r\n/**\r\n * MediasfuBroadcast component provides a streaming broadcast interface with various UI components and settings.\r\n * It handles conditional rendering of a prejoin page or main broadcast content, along with integrated modals and controls.\r\n *\r\n * @component\r\n * @selector app-mediasfu-broadcast\r\n * @standalone true\r\n * @imports [RouterOutlet, CommonModule, AlertComponent, AudioGrid, ControlButtonsComponentTouch, FlexibleVideo, LoadingModal, ConfirmExitModal, MessagesModal, ConfirmHereModal, ShareEventModal, WelcomePage, ParticipantsModal, RecordingModal, MainAspectComponent, MainContainerComponent, MainGridComponent, MainScreenComponent, MessageWidget, MenuRecordWidget, RecordTimerWidget, MenuParticipantsWidget]\r\n *\r\n * @template\r\n * The component's template contains:\r\n * - Conditional rendering of the PrejoinPage component if the user is not validated.\r\n * - The main broadcast content, including video, controls, and optional modals.\r\n * - The `app-main-container-component` manages the main display.\r\n * - Controls for video and audio grid display and interactive modals (Participants, Messages, Recording, etc.)\r\n *\r\n * @input {any} PrejoinPage - Component for the prejoin page, defaults to `WelcomePage`.\r\n * @input {MediasfuBroadcastOptions} options - Configuration options for the component.\r\n * @input {boolean} connectMediaSFU - Flag to enable/disable connection to the MediaSFU server.\r\n * @input {string} localLink - Local link for the Community Edition server.\r\n * @input {{ apiUserName: string; apiKey: string }} credentials - API credentials for secure access.\r\n * @input {boolean} useLocalUIMode - Flag to toggle local UI settings.\r\n * @input {SeedData} seedData - Seed data for initializing the component with specific configurations.\r\n * @input {boolean} useSeed - Enable/disable use of seed data.\r\n * @input {string} imgSrc - URL for branding images or logos.\r\n * @input {object} sourceParameters - Additional parameters for the source.\r\n * @input {Function} updateSourceParameters - Function to update the source parameters.\r\n * @input {boolean} returnUI - Flag to return the UI elements.\r\n * @input {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} noUIPreJoinOptions - Options for the prejoin page without UI.\r\n * @input {JoinRoomOnMediaSFUType} joinMediaSFURoom - Function to join a room on MediaSFU.\r\n * @input {CreateRoomOnMediaSFUType} createMediaSFURoom - Function to create a room on MediaSFU.\r\n *\r\n * @property {string} title - The title of the component, defaults to \"MediaSFU-Broadcast\".\r\n *\r\n * @styles\r\n * Custom styles specific to MediaSFU layout and interactions.\r\n *\r\n * @constructor\r\n * @class MediasfuBroadcast\r\n * @implements OnInit, OnDestroy\r\n *\r\n * @method ngOnInit - Initializes the component, sets up necessary configurations, and event listeners.\r\n * @method ngOnDestroy - Cleanup on component destruction, including removal of event listeners and active intervals.\r\n *\r\n * @example\r\n * ```html\r\n * <app-mediasfu-broadcast\r\n *   [PrejoinPage]=\"CustomPrejoinComponent\"\r\n *   [localLink]=\"'https://localhost:3000'\"\r\n *   [connectMediaSFU]=\"true\"\r\n *   [credentials]=\"{ apiUserName: 'username', apiKey: 'apikey' }\"\r\n *   [useLocalUIMode]=\"true\"\r\n *   [seedData]=\"seedDataObject\"\r\n *   [useSeed]=\"true\"\r\n *   [imgSrc]=\"https://example.com/logo.png\">\r\n *   [sourceParameters]=\"{ source: 'camera', width: 640, height: 480 }\"\r\n *   [updateSourceParameters]=\"updateSourceParameters\"\r\n *   [returnUI]=\"true\"\r\n *   [noUIPreJoinOptions]=\"{ roomName: 'room1', userName: 'user1' }\"\r\n *   [joinMediaSFURoom]=\"joinMediaSFURoom\"\r\n *   [createMediaSFURoom]=\"createMediaSFURoom\">\r\n * </app-mediasfu-broadcast>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n  selector: 'app-mediasfu-broadcast',\r\n  imports: [\r\n    CommonModule,\r\n    AlertComponent,\r\n    AudioGrid,\r\n    ControlButtonsComponentTouch,\r\n    FlexibleVideo,\r\n    LoadingModal,\r\n    ConfirmExitModal,\r\n    MessagesModal,\r\n    ConfirmHereModal,\r\n    ShareEventModal,\r\n    ParticipantsModal,\r\n    RecordingModal,\r\n    MainAspectComponent,\r\n    MainContainerComponent,\r\n    MainGridComponent,\r\n    MainScreenComponent,\r\n\r\n  ],\r\n  template: `\r\n    <div\r\n      class=\"MediaSFU\"\r\n      [ngStyle]=\"{\r\n        height: '100vh',\r\n        width: '100vw',\r\n        maxWidth: '100vw',\r\n        maxHeight: '100vh',\r\n        overflow: 'hidden'\r\n      }\"\r\n    >\r\n      <!-- Conditional Rendering: PrejoinPage or Main Content -->\r\n      <ng-container *ngIf=\"!validated.value; else mainContent\">\r\n        <ng-container\r\n          *ngComponentOutlet=\"\r\n            PrejoinPageComponent.component;\r\n            injector: PrejoinPageComponent.injector\r\n          \"\r\n        >\r\n        </ng-container>\r\n      </ng-container>\r\n\r\n      <ng-template #mainContent>\r\n        <app-main-container-component *ngIf=\"returnUI\">\r\n          <app-main-aspect-component\r\n            [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n            [defaultFraction]=\"1 - controlHeight.value\"\r\n            [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\r\n            [updateIsWideScreen]=\"updateIsWideScreen\"\r\n            [updateIsMediumScreen]=\"updateIsMediumScreen\"\r\n            [updateIsSmallScreen]=\"updateIsSmallScreen\"\r\n          >\r\n            <!-- Main Screen Component -->\r\n            <app-main-screen-component\r\n              [doStack]=\"true\"\r\n              [mainSize]=\"mainHeightWidth.value\"\r\n              [defaultFraction]=\"1 - controlHeight.value\"\r\n              [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\r\n              [updateComponentSizes]=\"updateComponentSizes\"\r\n            >\r\n              <!-- Main Grid Component -->\r\n              <app-main-grid-component\r\n                [height]=\"componentSizes.value.mainHeight\"\r\n                [width]=\"componentSizes.value.mainWidth\"\r\n                [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                [mainSize]=\"mainHeightWidth.value\"\r\n                [showAspect]=\"mainHeightWidth.value > 0\"\r\n                [timeBackgroundColor]=\"recordState.value\"\r\n                [meetingProgressTime]=\"meetingProgressTime.value\"\r\n              >\r\n                <app-flexible-video\r\n                  [customWidth]=\"componentSizes.value.mainWidth\"\r\n                  [customHeight]=\"componentSizes.value.mainHeight\"\r\n                  [rows]=\"1\"\r\n                  [columns]=\"1\"\r\n                  [componentsToRender]=\"mainGridStream.value\"\r\n                  [showAspect]=\"\r\n                    mainGridStream.value.length > 0 &&\r\n                    !(whiteboardStarted.value && !whiteboardEnded.value)\r\n                  \"\r\n                >\r\n                </app-flexible-video>\r\n\r\n                <!-- Control Buttons for Broadcast -->\r\n                <app-control-buttons-component-touch\r\n                  [buttons]=\"controlBroadcastButtons\"\r\n                  [position]=\"'right'\"\r\n                  [location]=\"'bottom'\"\r\n                  [direction]=\"'vertical'\"\r\n                  [showAspect]=\"eventType.value === 'broadcast'\"\r\n                ></app-control-buttons-component-touch>\r\n\r\n                <!-- Recording Buttons -->\r\n                <app-control-buttons-component-touch\r\n                  [buttons]=\"recordButton\"\r\n                  [direction]=\"'horizontal'\"\r\n                  [showAspect]=\"\r\n                    eventType.value === 'broadcast' &&\r\n                    !showRecordButtons.value &&\r\n                    islevel.value === '2'\r\n                  \"\r\n                  [location]=\"'bottom'\"\r\n                  [position]=\"'middle'\"\r\n                ></app-control-buttons-component-touch>\r\n\r\n                <app-control-buttons-component-touch\r\n                  [buttons]=\"recordButtons\"\r\n                  [direction]=\"'horizontal'\"\r\n                  [showAspect]=\"\r\n                    eventType.value === 'broadcast' &&\r\n                    showRecordButtons.value &&\r\n                    islevel.value === '2'\r\n                  \"\r\n                  [location]=\"'bottom'\"\r\n                  [position]=\"'middle'\"\r\n                ></app-control-buttons-component-touch>\r\n\r\n                <!-- AudioGrid -->\r\n                <app-audio-grid [componentsToRender]=\"audioOnlyStreams.value\"></app-audio-grid>\r\n              </app-main-grid-component>\r\n\r\n              <!-- Other Grid Component is not included in MediasfuBroadcast -->\r\n            </app-main-screen-component>\r\n          </app-main-aspect-component>\r\n        </app-main-container-component>\r\n      </ng-template>\r\n\r\n      <!-- Modals to include -->\r\n      <ng-container *ngIf=\"returnUI\">\r\n      <app-participants-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isParticipantsModalVisible]=\"isParticipantsModalVisible.value\"\r\n        [onParticipantsClose]=\"onParticipantsClose\"\r\n        [participantsCounter]=\"participantsCounter.value\"\r\n        [onParticipantsFilterChange]=\"onParticipantsFilterChange\"\r\n        [parameters]=\"{\r\n          updateParticipants: updateParticipants,\r\n          updateIsParticipantsModalVisible: updateIsParticipantsModalVisible,\r\n          updateDirectMessageDetails: updateDirectMessageDetails,\r\n          updateStartDirectMessage: updateStartDirectMessage,\r\n          updateIsMessagesModalVisible: updateIsMessagesModalVisible,\r\n          showAlert: showAlert,\r\n          filteredParticipants: filteredParticipants.value,\r\n          participants: filteredParticipants.value,\r\n          roomName: roomName.value,\r\n          islevel: islevel.value,\r\n          member: member.value,\r\n          coHostResponsibility: coHostResponsibility.value,\r\n          coHost: coHost.value,\r\n          eventType: eventType.value,\r\n          startDirectMessage: startDirectMessage.value,\r\n          directMessageDetails: directMessageDetails.value,\r\n          socket: socket.value,\r\n          getUpdatedAllParams: getUpdatedAllParams,\r\n        }\"\r\n      ></app-participants-modal>\r\n\r\n      <app-recording-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isRecordingModalVisible]=\"isRecordingModalVisible.value\"\r\n        [onClose]=\"onRecordingClose\"\r\n        [startRecording]=\"startRecording.startRecording\"\r\n        [confirmRecording]=\"confirmRecording.confirmRecording\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-recording-modal>\r\n\r\n      <app-messages-modal\r\n        [backgroundColor]=\"\r\n          eventType.value === 'webinar' || eventType.value === 'conference'\r\n            ? '#f5f5f5'\r\n            : 'rgba(255, 255, 255, 0.25)'\r\n        \"\r\n        [isMessagesModalVisible]=\"isMessagesModalVisible.value\"\r\n        [onMessagesClose]=\"onMessagesClose\"\r\n        [messages]=\"messages.value\"\r\n        [eventType]=\"eventType.value\"\r\n        [member]=\"member.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [coHostResponsibility]=\"coHostResponsibility.value\"\r\n        [coHost]=\"coHost.value\"\r\n        [startDirectMessage]=\"startDirectMessage.value\"\r\n        [directMessageDetails]=\"directMessageDetails.value\"\r\n        [updateStartDirectMessage]=\"updateStartDirectMessage\"\r\n        [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\r\n        [showAlert]=\"showAlert\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [chatSetting]=\"chatSetting.value\"\r\n      ></app-messages-modal>\r\n\r\n      <app-confirm-exit-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isConfirmExitModalVisible]=\"isConfirmExitModalVisible.value\"\r\n        [onConfirmExitClose]=\"onConfirmExitClose\"\r\n        [position]=\"'topRight'\"\r\n        [member]=\"member.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [islevel]=\"islevel.value\"\r\n      ></app-confirm-exit-modal>\r\n\r\n      <app-confirm-here-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isConfirmHereModalVisible]=\"isConfirmHereModalVisible.value\"\r\n        [onConfirmHereClose]=\"onConfirmHereClose\"\r\n        [member]=\"member.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n      ></app-confirm-here-modal>\r\n\r\n      <app-share-event-modal\r\n        [isShareEventModalVisible]=\"isShareEventModalVisible.value\"\r\n        [onShareEventClose]=\"onShareEventClose\"\r\n        [roomName]=\"roomName.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [adminPasscode]=\"adminPasscode.value\"\r\n        [eventType]=\"eventType.value\"\r\n        [localLink]=\"localLink\"\r\n      ></app-share-event-modal>\r\n\r\n      <app-alert-component\r\n        [visible]=\"alertVisible.value\"\r\n        [message]=\"alertMessage.value\"\r\n        [type]=\"alertType.value\"\r\n        [duration]=\"alertDuration.value\"\r\n        [onHide]=\"onAlertHide\"\r\n        textColor=\"#ffffff\"\r\n      ></app-alert-component>\r\n\r\n      <app-loading-modal\r\n        [isVisible]=\"isLoadingModalVisible.value\"\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        displayColor=\"black\"\r\n      ></app-loading-modal>\r\n    </ng-container>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .MediaSFU {\r\n        /* Add any component-specific styles here */\r\n      }\r\n    `,\r\n  ],\r\n  providers: [CookieService]\r\n})\r\nexport class MediasfuBroadcast implements OnInit, OnDestroy {\r\n  @Input()\r\n  PrejoinPage: any = WelcomePage;\r\n  @Input() localLink = '';\r\n  @Input() connectMediaSFU = true;\r\n  @Input() credentials: { apiUserName: string; apiKey: string } = { apiUserName: '', apiKey: '' };\r\n  @Input() useLocalUIMode = false;\r\n  @Input() seedData?: SeedData;\r\n  @Input() useSeed = false;\r\n  @Input() imgSrc = 'https://mediasfu.com/images/logo192.png';\r\n  @Input() sourceParameters?: { [key: string]: any } = {};\r\n  @Input() updateSourceParameters? = (data: { [key: string]: any }) => { };\r\n  @Input() returnUI? = true;\r\n  @Input() noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n  @Input() joinMediaSFURoom?: JoinRoomOnMediaSFUType;\r\n  @Input() createMediaSFURoom?: CreateRoomOnMediaSFUType;\r\n\r\n  title = 'MediaSFU-Broadcast';\r\n\r\n  private mainHeightWidthSubscription: Subscription | undefined;\r\n  private validatedSubscription: Subscription | undefined;\r\n  private islevelSubscription: Subscription | undefined;\r\n  private coHostSubscription: Subscription | undefined;\r\n  private buttonSubscriptions: Subscription[] = [];\r\n  private ScreenboardSubscription: Subscription | undefined;\r\n  private recordingSubscription: Subscription | undefined;\r\n\r\n  constructor(\r\n    private cdr: ChangeDetectorRef,\r\n    private injector: Injector,\r\n    public updateMiniCardsGrid: UpdateMiniCardsGrid,\r\n    public mixStreams: MixStreams,\r\n    public dispStreams: DispStreams,\r\n    public stopShareScreen: StopShareScreen,\r\n    public checkScreenShare: CheckScreenShare,\r\n    public startShareScreen: StartShareScreen,\r\n    public requestScreenShare: RequestScreenShare,\r\n    public reorderStreams: ReorderStreams,\r\n    public prepopulateUserMedia: PrepopulateUserMedia,\r\n    public getVideos: GetVideos,\r\n    public rePort: RePort,\r\n    public trigger: Trigger,\r\n    public consumerResume: ConsumerResume,\r\n    public connectSendTransport: ConnectSendTransport,\r\n    public connectSendTransportAudio: ConnectSendTransportAudio,\r\n    public connectSendTransportVideo: ConnectSendTransportVideo,\r\n    public connectSendTransportScreen: ConnectSendTransportScreen,\r\n    public processConsumerTransports: ProcessConsumerTransports,\r\n    public resumePauseStreams: ResumePauseStreams,\r\n    public readjust: Readjust,\r\n    public checkGrid: CheckGrid,\r\n    public getEstimate: GetEstimate,\r\n    public calculateRowsAndColumns: CalculateRowsAndColumns,\r\n    public addVideosGrid: AddVideosGrid,\r\n    public onScreenChanges: OnScreenChanges,\r\n    public changeVids: ChangeVids,\r\n    public compareActiveNames: CompareActiveNames,\r\n    public compareScreenStates: CompareScreenStates,\r\n    public createSendTransport: CreateSendTransport,\r\n    public resumeSendTransportAudio: ResumeSendTransportAudio,\r\n    public receiveAllPipedTransports: ReceiveAllPipedTransports,\r\n    public disconnectSendTransportVideo: DisconnectSendTransportVideo,\r\n    public disconnectSendTransportAudio: DisconnectSendTransportAudio,\r\n    public disconnectSendTransportScreen: DisconnectSendTransportScreen,\r\n    public getPipedProducersAlt: GetPipedProducersAlt,\r\n    public signalNewConsumerTransport: SignalNewConsumerTransport,\r\n    public connectRecvTransport: ConnectRecvTransport,\r\n    public reUpdateInter: ReUpdateInter,\r\n    public updateParticipantAudioDecibels: UpdateParticipantAudioDecibels,\r\n    public closeAndResize: CloseAndResize,\r\n    public autoAdjust: AutoAdjust,\r\n    public switchUserVideoAlt: SwitchUserVideoAlt,\r\n    public switchUserVideo: SwitchUserVideo,\r\n    public switchUserAudio: SwitchUserAudio,\r\n    public getDomains: GetDomains,\r\n    public formatNumber: FormatNumber,\r\n    public connectIps: ConnectIps,\r\n    public connectLocalIps: ConnectLocalIps,\r\n    public createDeviceClient: CreateDeviceClient,\r\n    public captureCanvasStream: CaptureCanvasStream,\r\n    public resumePauseAudioStreams: ResumePauseAudioStreams,\r\n    public processConsumerTransportsAudio: ProcessConsumerTransportsAudio,\r\n\r\n    public launchRecording: LaunchRecording,\r\n    public startRecording: StartRecording,\r\n    public confirmRecording: ConfirmRecording,\r\n    public launchParticipants: LaunchParticipants,\r\n    public launchMessages: LaunchMessages,\r\n    public launchConfirmExit: LaunchConfirmExit,\r\n\r\n    public startMeetingProgressTimer: StartMeetingProgressTimer,\r\n    public updateRecording: UpdateRecording,\r\n    public stopRecording: StopRecording,\r\n\r\n    public personJoined: PersonJoined,\r\n\r\n    public roomRecordParams: RoomRecordParams,\r\n    public banParticipant: BanParticipant,\r\n\r\n    public producerMediaPaused: ProducerMediaPaused,\r\n    public producerMediaResumed: ProducerMediaResumed,\r\n    public producerMediaClosed: ProducerMediaClosed,\r\n\r\n    public meetingEnded: MeetingEnded,\r\n    public disconnectUserSelf: DisconnectUserSelf,\r\n    public receiveMessage: ReceiveMessage,\r\n    public meetingTimeRemaining: MeetingTimeRemaining,\r\n    public meetingStillThere: MeetingStillThere,\r\n    public startRecords: StartRecords,\r\n    public reInitiateRecording: ReInitiateRecording,\r\n    public recordingNotice: RecordingNotice,\r\n    public timeLeftRecording: TimeLeftRecording,\r\n    public stoppedRecording: StoppedRecording,\r\n\r\n    public allMembers: AllMembers,\r\n    public allMembersRest: AllMembersRest,\r\n    public disconnect: Disconnect,\r\n\r\n    public socketManager: SocketManager,\r\n    public joinRoomClient: JoinRoomClient,\r\n    public joinLocalRoom: JoinLocalRoom,\r\n    public updateRoomParametersClient: UpdateRoomParametersClient,\r\n    public clickVideo: ClickVideo,\r\n    public clickAudio: ClickAudio,\r\n    public clickScreenShare: ClickScreenShare,\r\n    public switchVideoAlt: SwitchVideoAlt,\r\n    public streamSuccessVideo: StreamSuccessVideo,\r\n    public streamSuccessAudio: StreamSuccessAudio,\r\n    public streamSuccessScreen: StreamSuccessScreen,\r\n    public streamSuccessAudioSwitch: StreamSuccessAudioSwitch,\r\n    public checkPermission: CheckPermission,\r\n\r\n    public updateConsumingDomains: UpdateConsumingDomains,\r\n    public receiveRoomMessages: ReceiveRoomMessages,\r\n  ) { }\r\n\r\n  createInjector(inputs: any) {\r\n    const inj = Injector.create({\r\n      providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\r\n      parent: this.injector,\r\n    });\r\n\r\n    return inj;\r\n  }\r\n\r\n  // Initial values\r\n  mediaSFUFunctions = () => {\r\n    return {\r\n      updateMiniCardsGrid:\r\n        this.updateMiniCardsGrid?.updateMiniCardsGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      mixStreams:\r\n        this.mixStreams?.mixStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      dispStreams:\r\n        this.dispStreams?.dispStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      stopShareScreen:\r\n        this.stopShareScreen?.stopShareScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkScreenShare:\r\n        this.checkScreenShare?.checkScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      startShareScreen:\r\n        this.startShareScreen?.startShareScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestScreenShare:\r\n        this.requestScreenShare?.requestScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      reorderStreams:\r\n        this.reorderStreams?.reorderStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      prepopulateUserMedia:\r\n        this.prepopulateUserMedia?.prepopulateUserMedia ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getVideos:\r\n        this.getVideos?.getVideos ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      rePort:\r\n        this.rePort?.rePort ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      trigger:\r\n        this.trigger?.trigger ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      consumerResume:\r\n        this.consumerResume?.consumerResume ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransport:\r\n        this.connectSendTransport?.connectSendTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportAudio:\r\n        this.connectSendTransportAudio?.connectSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportVideo:\r\n        this.connectSendTransportVideo?.connectSendTransportVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportScreen:\r\n        this.connectSendTransportScreen?.connectSendTransportScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      processConsumerTransports:\r\n        this.processConsumerTransports?.processConsumerTransports ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumePauseStreams:\r\n        this.resumePauseStreams?.resumePauseStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      readjust:\r\n        this.readjust?.readjust ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkGrid:\r\n        this.checkGrid?.checkGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getEstimate:\r\n        this.getEstimate?.getEstimate ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      calculateRowsAndColumns:\r\n        this.calculateRowsAndColumns?.calculateRowsAndColumns ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      addVideosGrid:\r\n        this.addVideosGrid?.addVideosGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      onScreenChanges:\r\n        this.onScreenChanges?.onScreenChanges ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      sleep:\r\n        sleep ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      changeVids:\r\n        this.changeVids?.changeVids ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      compareActiveNames:\r\n        this.compareActiveNames?.compareActiveNames ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      compareScreenStates:\r\n        this.compareScreenStates?.compareScreenStates ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      createSendTransport:\r\n        this.createSendTransport?.createSendTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumeSendTransportAudio:\r\n        this.resumeSendTransportAudio?.resumeSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      receiveAllPipedTransports:\r\n        this.receiveAllPipedTransports?.receiveAllPipedTransports ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportVideo:\r\n        this.disconnectSendTransportVideo?.disconnectSendTransportVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportAudio:\r\n        this.disconnectSendTransportAudio?.disconnectSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportScreen:\r\n        this.disconnectSendTransportScreen?.disconnectSendTransportScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getPipedProducersAlt:\r\n        this.getPipedProducersAlt?.getPipedProducersAlt ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      signalNewConsumerTransport:\r\n        this.signalNewConsumerTransport?.signalNewConsumerTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectRecvTransport:\r\n        this.connectRecvTransport?.connectRecvTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      reUpdateInter:\r\n        this.reUpdateInter?.reUpdateInter ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      updateParticipantAudioDecibels:\r\n        this.updateParticipantAudioDecibels?.updateParticipantAudioDecibels ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      closeAndResize:\r\n        this.closeAndResize?.closeAndResize ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      autoAdjust:\r\n        this.autoAdjust?.autoAdjust ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserVideoAlt:\r\n        this.switchUserVideoAlt?.switchUserVideoAlt ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserVideo:\r\n        this.switchUserVideo?.switchUserVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserAudio:\r\n        this.switchUserAudio?.switchUserAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getDomains:\r\n        this.getDomains?.getDomains ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      formatNumber:\r\n        this.formatNumber?.formatNumber ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectIps:\r\n        this.connectIps?.connectIps ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectLocalIps:\r\n        this.connectLocalIps?.connectLocalIps ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      createDeviceClient:\r\n        this.createDeviceClient?.createDeviceClient ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      captureCanvasStream:\r\n        this.captureCanvasStream?.captureCanvasStream ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumePauseAudioStreams:\r\n        this.resumePauseAudioStreams?.resumePauseAudioStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      processConsumerTransportsAudio:\r\n        this.processConsumerTransportsAudio?.processConsumerTransportsAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkPermission:\r\n        this.checkPermission?.checkPermission ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessVideo:\r\n        this.streamSuccessVideo?.streamSuccessVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessAudio:\r\n        this.streamSuccessAudio?.streamSuccessAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessScreen:\r\n        this.streamSuccessScreen?.streamSuccessScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessAudioSwitch:\r\n        this.streamSuccessAudioSwitch?.streamSuccessAudioSwitch ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickVideo:\r\n        this.clickVideo?.clickVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickAudio:\r\n        this.clickAudio?.clickAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickScreenShare:\r\n        this.clickScreenShare?.clickScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchVideoAlt:\r\n        this.switchVideoAlt?.switchVideoAlt ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestPermissionCamera:\r\n        this.requestPermissionCamera ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestPermissionAudio:\r\n        this.requestPermissionAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n    };\r\n  };\r\n\r\n  validated = new BehaviorSubject<boolean>(false);\r\n  localUIMode = new BehaviorSubject<boolean>(false);\r\n  socket = new BehaviorSubject<Socket>({} as Socket);\r\n  localSocket? = new BehaviorSubject<Socket | undefined>(undefined);\r\n  roomData = new BehaviorSubject<ResponseJoinRoom | null>(null);\r\n  device = new BehaviorSubject<Device | null>(null);\r\n  apiKey = new BehaviorSubject<string>('');\r\n  apiUserName = new BehaviorSubject<string>('');\r\n  apiToken = new BehaviorSubject<string>('');\r\n  link = new BehaviorSubject<string>('');\r\n\r\n  roomName = new BehaviorSubject<string>('');\r\n  member = new BehaviorSubject<string>('');\r\n  adminPasscode = new BehaviorSubject<string>('');\r\n  islevel = new BehaviorSubject<string>('1');\r\n  coHost = new BehaviorSubject<string>('No coHost');\r\n  coHostResponsibility = new BehaviorSubject<CoHostResponsibility[]>([\r\n    { name: 'participants', value: false, dedicated: false },\r\n    { name: 'media', value: false, dedicated: false },\r\n    { name: 'waiting', value: false, dedicated: false },\r\n    { name: 'chat', value: false, dedicated: false },\r\n  ]);\r\n  youAreCoHost = new BehaviorSubject<boolean>(false);\r\n  youAreHost = new BehaviorSubject<boolean>(false);\r\n  confirmedToRecord = new BehaviorSubject<boolean>(false);\r\n  meetingDisplayType = new BehaviorSubject<string>('media');\r\n  meetingVideoOptimized = new BehaviorSubject<boolean>(false);\r\n  eventType = new BehaviorSubject<EventType>('broadcast');\r\n  participants = new BehaviorSubject<Participant[]>([]);\r\n  filteredParticipants = new BehaviorSubject<Participant[]>([]);\r\n  participantsCounter = new BehaviorSubject<number>(0);\r\n  participantsFilter = new BehaviorSubject<string>('');\r\n\r\n  consume_sockets = new BehaviorSubject<ConsumeSocket[]>([]);\r\n  rtpCapabilities = new BehaviorSubject<RtpCapabilities | null>(null);\r\n  roomRecvIPs = new BehaviorSubject<string[]>([]);\r\n  meetingRoomParams = new BehaviorSubject<MeetingRoomParams | null>(null);\r\n  itemPageLimit = new BehaviorSubject<number>(4);\r\n  audioOnlyRoom = new BehaviorSubject<boolean>(false);\r\n  addForBasic = new BehaviorSubject<boolean>(false);\r\n  screenPageLimit = new BehaviorSubject<number>(4);\r\n  shareScreenStarted = new BehaviorSubject<boolean>(false);\r\n  shared = new BehaviorSubject<boolean>(false);\r\n  targetOrientation = new BehaviorSubject<string>('landscape');\r\n  targetResolution = new BehaviorSubject<string>('sd');\r\n  targetResolutionHost = new BehaviorSubject<string>('sd');\r\n  vidCons = new BehaviorSubject<VidCons>({ width: 640, height: 360 });\r\n  frameRate = new BehaviorSubject<number>(10);\r\n  hParams = new BehaviorSubject<HParamsType>({} as HParamsType);\r\n  vParams = new BehaviorSubject<VParamsType>({} as VParamsType);\r\n  screenParams = new BehaviorSubject<ScreenParamsType>({} as ScreenParamsType);\r\n  aParams = new BehaviorSubject<AParamsType>({} as AParamsType);\r\n\r\n  recordingAudioPausesLimit = new BehaviorSubject<number>(0);\r\n  recordingAudioPausesCount = new BehaviorSubject<number>(0);\r\n  recordingAudioSupport = new BehaviorSubject<boolean>(false);\r\n  recordingAudioPeopleLimit = new BehaviorSubject<number>(0);\r\n  recordingAudioParticipantsTimeLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoPausesCount = new BehaviorSubject<number>(0);\r\n  recordingVideoPausesLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoPeopleLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoParticipantsTimeLimit = new BehaviorSubject<number>(0);\r\n  recordingAllParticipantsSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoParticipantsSupport = new BehaviorSubject<boolean>(false);\r\n  recordingAllParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\r\n  recordingPreferredOrientation = new BehaviorSubject<string>('landscape');\r\n  recordingSupportForOtherOrientation = new BehaviorSubject<boolean>(false);\r\n  recordingMultiFormatsSupport = new BehaviorSubject<boolean>(false);\r\n\r\n  userRecordingParams = new BehaviorSubject<UserRecordingParams>({\r\n    mainSpecs: {\r\n      mediaOptions: 'video', // 'audio', 'video'\r\n      audioOptions: 'all', // 'all', 'onScreen', 'host'\r\n      videoOptions: 'all', // 'all', 'mainScreen'\r\n      videoType: 'fullDisplay', // 'all', 'bestDisplay', 'fullDisplay'\r\n      videoOptimized: false, // true, false\r\n      recordingDisplayType: 'media', // 'media', 'video', 'all'\r\n      addHLS: false, // true, false\r\n    },\r\n    dispSpecs: {\r\n      nameTags: true, // true, false\r\n      backgroundColor: '#000000', // '#000000', '#ffffff'\r\n      nameTagsColor: '#ffffff', // '#000000', '#ffffff'\r\n      orientationVideo: 'portrait', // 'landscape', 'portrait', 'all'\r\n    },\r\n  });\r\n\r\n  canRecord = new BehaviorSubject<boolean>(false);\r\n  startReport = new BehaviorSubject<boolean>(false);\r\n  endReport = new BehaviorSubject<boolean>(false);\r\n  recordTimerInterval = new BehaviorSubject<NodeJS.Timeout | null>(null);\r\n  recordStartTime = new BehaviorSubject<number>(0);\r\n  recordElapsedTime = new BehaviorSubject<number>(0);\r\n  isTimerRunning = new BehaviorSubject<boolean>(false);\r\n  canPauseResume = new BehaviorSubject<boolean>(false);\r\n  recordChangeSeconds = new BehaviorSubject<number>(15000);\r\n  pauseLimit = new BehaviorSubject<number>(0);\r\n  pauseRecordCount = new BehaviorSubject<number>(0);\r\n  canLaunchRecord = new BehaviorSubject<boolean>(true);\r\n  stopLaunchRecord = new BehaviorSubject<boolean>(false);\r\n\r\n  participantsAll = new BehaviorSubject<Participant[]>([]);\r\n\r\n  firstAll = new BehaviorSubject<boolean>(false);\r\n  updateMainWindow = new BehaviorSubject<boolean>(false);\r\n  first_round = new BehaviorSubject<boolean>(false);\r\n  landScaped = new BehaviorSubject<boolean>(false);\r\n  lock_screen = new BehaviorSubject<boolean>(false);\r\n  screenId = new BehaviorSubject<string>('');\r\n  allVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  newLimitedStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  newLimitedStreamsIDs = new BehaviorSubject<string[]>([]);\r\n  activeSounds = new BehaviorSubject<string[]>([]);\r\n  screenShareIDStream = new BehaviorSubject<string>('');\r\n  screenShareNameStream = new BehaviorSubject<string>('');\r\n  adminIDStream = new BehaviorSubject<string>('');\r\n  adminNameStream = new BehaviorSubject<string>('');\r\n  youYouStream = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  youYouStreamIDs = new BehaviorSubject<string[]>([]);\r\n  localStream = new BehaviorSubject<MediaStream | null>(null);\r\n  recordStarted = new BehaviorSubject<boolean>(false);\r\n  recordResumed = new BehaviorSubject<boolean>(false);\r\n  recordPaused = new BehaviorSubject<boolean>(false);\r\n  recordStopped = new BehaviorSubject<boolean>(false);\r\n  adminRestrictSetting = new BehaviorSubject<boolean>(false);\r\n  videoRequestState = new BehaviorSubject<string | null>(null);\r\n  videoRequestTime = new BehaviorSubject<number>(0);\r\n  videoAction = new BehaviorSubject<boolean>(false);\r\n  localStreamVideo = new BehaviorSubject<MediaStream | null>(null);\r\n  userDefaultVideoInputDevice = new BehaviorSubject<string>('');\r\n  currentFacingMode = new BehaviorSubject<string>('user');\r\n  prevFacingMode = new BehaviorSubject<string>('user');\r\n  defVideoID = new BehaviorSubject<string>('');\r\n  allowed = new BehaviorSubject<boolean>(false);\r\n  dispActiveNames = new BehaviorSubject<string[]>([]);\r\n  p_dispActiveNames = new BehaviorSubject<string[]>([]);\r\n  activeNames = new BehaviorSubject<string[]>([]);\r\n  prevActiveNames = new BehaviorSubject<string[]>([]);\r\n  p_activeNames = new BehaviorSubject<string[]>([]);\r\n  membersReceived = new BehaviorSubject<boolean>(false);\r\n  deferScreenReceived = new BehaviorSubject<boolean>(false);\r\n  hostFirstSwitch = new BehaviorSubject<boolean>(false);\r\n  micAction = new BehaviorSubject<boolean>(false);\r\n  screenAction = new BehaviorSubject<boolean>(false);\r\n  chatAction = new BehaviorSubject<boolean>(false);\r\n  audioRequestState = new BehaviorSubject<string | null>(null);\r\n  screenRequestState = new BehaviorSubject<string | null>(null);\r\n  chatRequestState = new BehaviorSubject<string | null>(null);\r\n  audioRequestTime = new BehaviorSubject<number>(0);\r\n  screenRequestTime = new BehaviorSubject<number>(0);\r\n  chatRequestTime = new BehaviorSubject<number>(0);\r\n  updateRequestIntervalSeconds = new BehaviorSubject<number>(240);\r\n  oldSoundIds = new BehaviorSubject<string[]>([]);\r\n  hostLabel = new BehaviorSubject<string>('Host');\r\n  mainScreenFilled = new BehaviorSubject<boolean>(false);\r\n  localStreamScreen = new BehaviorSubject<MediaStream | null>(null);\r\n  screenAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  chatAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  redirectURL = new BehaviorSubject<string>('');\r\n  oldAllStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  adminVidID = new BehaviorSubject<string>('');\r\n  streamNames = new BehaviorSubject<Stream[]>([]);\r\n  non_alVideoStreams = new BehaviorSubject<Participant[]>([]);\r\n  sortAudioLoudness = new BehaviorSubject<boolean>(false);\r\n  audioDecibels = new BehaviorSubject<AudioDecibels[]>([]);\r\n  mixed_alVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  non_alVideoStreams_muted = new BehaviorSubject<Participant[]>([]);\r\n  paginatedStreams = new BehaviorSubject<(Participant | Stream)[][]>([]);\r\n  localStreamAudio = new BehaviorSubject<MediaStream | null>(null);\r\n  defAudioID = new BehaviorSubject<string>('');\r\n  userDefaultAudioInputDevice = new BehaviorSubject<string>('');\r\n  userDefaultAudioOutputDevice = new BehaviorSubject<string>('');\r\n  prevAudioInputDevice = new BehaviorSubject<string>('');\r\n  prevVideoInputDevice = new BehaviorSubject<string>('');\r\n  audioPaused = new BehaviorSubject<boolean>(false);\r\n  mainScreenPerson = new BehaviorSubject<string>('');\r\n  adminOnMainScreen = new BehaviorSubject<boolean>(false);\r\n  screenStates = new BehaviorSubject<ScreenState[]>([\r\n    {\r\n      mainScreenPerson: '',\r\n      mainScreenProducerId: '',\r\n      mainScreenFilled: false,\r\n      adminOnMainScreen: false,\r\n    },\r\n  ]);\r\n  prevScreenStates = new BehaviorSubject<ScreenState[]>([\r\n    {\r\n      mainScreenPerson: '',\r\n      mainScreenProducerId: '',\r\n      mainScreenFilled: false,\r\n      adminOnMainScreen: false,\r\n    },\r\n  ]);\r\n  updateDateState = new BehaviorSubject<number | null>(null);\r\n  lastUpdate = new BehaviorSubject<number | null>(null);\r\n  nForReadjustRecord = new BehaviorSubject<number>(0);\r\n  fixedPageLimit = new BehaviorSubject<number>(4);\r\n  removeAltGrid = new BehaviorSubject<boolean>(false);\r\n  nForReadjust = new BehaviorSubject<number>(0);\r\n  reorderInterval = new BehaviorSubject<number>(30000);\r\n  fastReorderInterval = new BehaviorSubject<number>(10000);\r\n  lastReorderTime = new BehaviorSubject<number>(0);\r\n  audStreamNames = new BehaviorSubject<Stream[]>([]);\r\n  currentUserPage = new BehaviorSubject<number>(0);\r\n  mainHeightWidth = new BehaviorSubject<number>(100);\r\n  prevMainHeightWidth = new BehaviorSubject<number>(this.mainHeightWidth.value);\r\n  prevDoPaginate = new BehaviorSubject<boolean>(false);\r\n  doPaginate = new BehaviorSubject<boolean>(false);\r\n  shareEnded = new BehaviorSubject<boolean>(false);\r\n  lStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  chatRefStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  controlHeight = new BehaviorSubject<number>(\r\n    this.eventType.value === 'webinar' || this.eventType.value === 'conference' ? 0 : 0.06,\r\n  );\r\n  isWideScreen = new BehaviorSubject<boolean>(false);\r\n  isMediumScreen = new BehaviorSubject<boolean>(false);\r\n  isSmallScreen = new BehaviorSubject<boolean>(false);\r\n  addGrid = new BehaviorSubject<boolean>(false);\r\n  addAltGrid = new BehaviorSubject<boolean>(false);\r\n  gridRows = new BehaviorSubject<number>(0);\r\n  gridCols = new BehaviorSubject<number>(0);\r\n  altGridRows = new BehaviorSubject<number>(0);\r\n  altGridCols = new BehaviorSubject<number>(0);\r\n  numberPages = new BehaviorSubject<number>(0);\r\n  currentStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  showMiniView = new BehaviorSubject<boolean>(false);\r\n  nStream = new BehaviorSubject<MediaStream | null>(null);\r\n  defer_receive = new BehaviorSubject<boolean>(false);\r\n  allAudioStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  remoteScreenStream = new BehaviorSubject<Stream[]>([]);\r\n  screenProducer = new BehaviorSubject<Producer | null>(null);\r\n  localScreenProducer = new BehaviorSubject<Producer | null>(null);\r\n  gotAllVids = new BehaviorSubject<boolean>(false);\r\n  paginationHeightWidth = new BehaviorSubject<number>(40);\r\n  paginationDirection = new BehaviorSubject<'horizontal' | 'vertical'>('horizontal');\r\n  gridSizes = new BehaviorSubject<GridSizes>({\r\n    gridWidth: 0,\r\n    gridHeight: 0,\r\n    altGridWidth: 0,\r\n    altGridHeight: 0,\r\n  });\r\n  screenForceFullDisplay = new BehaviorSubject<boolean>(false);\r\n  mainGridStream = new BehaviorSubject<CustomMediaComponent[]>([]);\r\n  otherGridStreams = new BehaviorSubject<CustomMediaComponent[][]>([]);\r\n  audioOnlyStreams = new BehaviorSubject<CustomMediaComponent[]>([]);\r\n  videoInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\r\n  audioInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\r\n  meetingProgressTime = new BehaviorSubject<string>('00:00:00');\r\n  meetingElapsedTime = new BehaviorSubject<number>(0);\r\n  ref_participants = new BehaviorSubject<Participant[]>([]);\r\n\r\n  updateValidated = (value: boolean) => {\r\n    this.validated.next(value);\r\n  };\r\n\r\n  updateSocket = (value: Socket) => {\r\n    this.socket.next(value);\r\n  };\r\n\r\n  updateLocalSocket = (value: Socket | null) => {\r\n    this.localSocket!.next(value!);\r\n  };\r\n\r\n  updateDevice = (value: Device | null) => {\r\n    this.device.next(value);\r\n  };\r\n\r\n  updateRoomData = (value: ResponseJoinRoom | null) => {\r\n    this.roomData.next(value);\r\n  };\r\n\r\n  updateApiKey = (value: string) => {\r\n    this.apiKey.next(value);\r\n  };\r\n\r\n  updateApiUserName = (value: string) => {\r\n    this.apiUserName.next(value);\r\n  };\r\n\r\n  updateApiToken = (value: string) => {\r\n    this.apiToken.next(value);\r\n  };\r\n\r\n  updateLink = (value: string) => {\r\n    this.link.next(value);\r\n  };\r\n\r\n  updateRoomName = (value: string) => {\r\n    this.roomName.next(value);\r\n    if (value.length > 0 && value.includes(\"_\")) {\r\n      this.updateIslevel(value.split(\"_\")[1]);\r\n      value = value.split(\"_\")[0];\r\n    }\r\n  };\r\n\r\n  updateMember = (value: string) => {\r\n    this.member.next(value);\r\n  };\r\n\r\n  updateAdminPasscode = (value: string) => {\r\n    this.adminPasscode.next(value);\r\n  };\r\n\r\n  updateIslevel = (value: string) => {\r\n    this.islevel.next(value);\r\n  };\r\n\r\n  updateCoHost = (value: string) => {\r\n    this.coHost.next(value);\r\n  };\r\n\r\n  updateCoHostResponsibility = (value: CoHostResponsibility[]) => {\r\n    this.coHostResponsibility.next(value);\r\n  };\r\n\r\n  updateYouAreCoHost = (value: boolean) => {\r\n    this.youAreCoHost.next(value);\r\n  };\r\n\r\n  updateYouAreHost = (value: boolean) => {\r\n    this.youAreHost.next(value);\r\n  };\r\n\r\n  updateConfirmedToRecord = (value: boolean) => {\r\n    this.confirmedToRecord.next(value);\r\n  };\r\n\r\n  updateMeetingDisplayType = (value: string) => {\r\n    this.meetingDisplayType.next(value);\r\n  };\r\n\r\n  updateMeetingVideoOptimized = (value: boolean) => {\r\n    this.meetingVideoOptimized.next(value);\r\n  };\r\n\r\n  updateEventType = (value: EventType) => {\r\n    this.eventType.next(value);\r\n  };\r\n\r\n  updateParticipants = (value: Participant[]) => {\r\n    this.participants.next(value);\r\n    this.participantsCounter.next(value.length);\r\n    this.filteredParticipants.next(this.participants.value);\r\n  };\r\n\r\n  updateFilteredParticipants = (value: Participant[]) => {\r\n    this.filteredParticipants.next(value);\r\n  };\r\n\r\n  updateParticipantsCounter = (value: number) => {\r\n    this.participantsCounter.next(value);\r\n  };\r\n\r\n  updateParticipantsFilter = (value: string) => {\r\n    this.participantsFilter.next(value);\r\n  };\r\n\r\n  updateConsume_sockets = (value: ConsumeSocket[]) => {\r\n    this.consume_sockets.next(value);\r\n  };\r\n\r\n  updateRtpCapabilities = (value: RtpCapabilities | null) => {\r\n    this.rtpCapabilities.next(value);\r\n  };\r\n\r\n  updateRoomRecvIPs = (value: string[]) => {\r\n    this.roomRecvIPs.next(value);\r\n  };\r\n\r\n  updateMeetingRoomParams = (value: MeetingRoomParams | null) => {\r\n    this.meetingRoomParams.next(value);\r\n  };\r\n\r\n  updateItemPageLimit = (value: number) => {\r\n    this.itemPageLimit.next(value);\r\n  };\r\n\r\n  updateAudioOnlyRoom = (value: boolean) => {\r\n    this.audioOnlyRoom.next(value);\r\n  };\r\n\r\n  updateAddForBasic = (value: boolean) => {\r\n    this.addForBasic.next(value);\r\n  };\r\n\r\n  updateScreenPageLimit = (value: number) => {\r\n    this.screenPageLimit.next(value);\r\n  };\r\n\r\n  updateShareScreenStarted = (value: boolean) => {\r\n    this.shareScreenStarted.next(value);\r\n  };\r\n\r\n  updateShared = (value: boolean) => {\r\n    this.shared.next(value);\r\n    this.screenShareActive.next(value);\r\n    if (value) {\r\n      setTimeout(async () => {\r\n        window.dispatchEvent(new Event('resize'));\r\n      }, 2000);\r\n    }\r\n  };\r\n\r\n  updateTargetOrientation = (value: string) => {\r\n    this.targetOrientation.next(value);\r\n  };\r\n\r\n  updateTargetResolution = (value: string) => {\r\n    this.targetResolution.next(value);\r\n  };\r\n\r\n  updateTargetResolutionHost = (value: string) => {\r\n    this.targetResolutionHost.next(value);\r\n  };\r\n\r\n  updateVidCons = (value: VidCons) => {\r\n    this.vidCons.next(value);\r\n  };\r\n\r\n  updateFrameRate = (value: number) => {\r\n    this.frameRate.next(value);\r\n  };\r\n\r\n  updateHParams = (value: HParamsType) => {\r\n    this.hParams.next(value);\r\n  };\r\n\r\n  updateVParams = (value: VParamsType) => {\r\n    this.vParams.next(value);\r\n  };\r\n\r\n  updateScreenParams = (value: ScreenParamsType) => {\r\n    this.screenParams.next(value);\r\n  };\r\n\r\n  updateAParams = (value: AParamsType) => {\r\n    this.aParams.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPausesLimit = (value: number) => {\r\n    this.recordingAudioPausesLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPausesCount = (value: number) => {\r\n    this.recordingAudioPausesCount.next(value);\r\n  };\r\n\r\n  updateRecordingAudioSupport = (value: boolean) => {\r\n    this.recordingAudioSupport.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPeopleLimit = (value: number) => {\r\n    this.recordingAudioPeopleLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAudioParticipantsTimeLimit = (value: number) => {\r\n    this.recordingAudioParticipantsTimeLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPausesCount = (value: number) => {\r\n    this.recordingVideoPausesCount.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPausesLimit = (value: number) => {\r\n    this.recordingVideoPausesLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoSupport = (value: boolean) => {\r\n    this.recordingVideoSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPeopleLimit = (value: number) => {\r\n    this.recordingVideoPeopleLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsTimeLimit = (value: number) => {\r\n    this.recordingVideoParticipantsTimeLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAllParticipantsSupport = (value: boolean) => {\r\n    this.recordingAllParticipantsSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsSupport = (value: boolean) => {\r\n    this.recordingVideoParticipantsSupport.next(value);\r\n  };\r\n\r\n  updateRecordingAllParticipantsFullRoomSupport = (value: boolean) => {\r\n    this.recordingAllParticipantsFullRoomSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsFullRoomSupport = (value: boolean) => {\r\n    this.recordingVideoParticipantsFullRoomSupport.next(value);\r\n  };\r\n\r\n  updateRecordingPreferredOrientation = (value: string) => {\r\n    this.recordingPreferredOrientation.next(value);\r\n  };\r\n\r\n  updateRecordingSupportForOtherOrientation = (value: boolean) => {\r\n    this.recordingSupportForOtherOrientation.next(value);\r\n  };\r\n\r\n  updateRecordingMultiFormatsSupport = (value: boolean) => {\r\n    this.recordingMultiFormatsSupport.next(value);\r\n  };\r\n\r\n  updateUserRecordingParams = (value: UserRecordingParams) => {\r\n    this.userRecordingParams.next(value);\r\n  };\r\n\r\n  updateCanRecord = (value: boolean) => {\r\n    this.canRecord.next(value);\r\n  };\r\n\r\n  updateStartReport = (value: boolean) => {\r\n    this.startReport.next(value);\r\n  };\r\n\r\n  updateEndReport = (value: boolean) => {\r\n    this.endReport.next(value);\r\n  };\r\n\r\n  updateRecordTimerInterval = (value: NodeJS.Timeout | null) => {\r\n    this.recordTimerInterval.next(value);\r\n  };\r\n\r\n  updateRecordStartTime = (value: number) => {\r\n    this.recordStartTime.next(value);\r\n  };\r\n\r\n  updateRecordElapsedTime = (value: number) => {\r\n    this.recordElapsedTime.next(value);\r\n  };\r\n\r\n  updateIsTimerRunning = (value: boolean) => {\r\n    this.isTimerRunning.next(value);\r\n  };\r\n\r\n  updateCanPauseResume = (value: boolean) => {\r\n    this.canPauseResume.next(value);\r\n  };\r\n\r\n  updateRecordChangeSeconds = (value: number) => {\r\n    this.recordChangeSeconds.next(value);\r\n  };\r\n\r\n  updatePauseLimit = (value: number) => {\r\n    this.pauseLimit.next(value);\r\n  };\r\n\r\n  updatePauseRecordCount = (value: number) => {\r\n    this.pauseRecordCount.next(value);\r\n  };\r\n\r\n  updateCanLaunchRecord = (value: boolean) => {\r\n    this.canLaunchRecord.next(value);\r\n  };\r\n\r\n  updateStopLaunchRecord = (value: boolean) => {\r\n    this.stopLaunchRecord.next(value);\r\n  };\r\n\r\n  updateParticipantsAll = (value: Participant[]) => {\r\n    this.participantsAll.next(value);\r\n  };\r\n\r\n  updateFirstAll = (value: boolean) => {\r\n    this.firstAll.next(value);\r\n  };\r\n\r\n  updateUpdateMainWindow = (value: boolean) => {\r\n    this.updateMainWindow.next(value);\r\n  };\r\n\r\n  updateFirst_round = (value: boolean) => {\r\n    this.first_round.next(value);\r\n  };\r\n\r\n  updateLandScaped = (value: boolean) => {\r\n    this.landScaped.next(value);\r\n  };\r\n\r\n  updateLock_screen = (value: boolean) => {\r\n    this.lock_screen.next(value);\r\n  };\r\n\r\n  updateScreenId = (value: string) => {\r\n    this.screenId.next(value);\r\n  };\r\n\r\n  updateAllVideoStreams = (value: (Participant | Stream)[]) => {\r\n    this.allVideoStreams.next(value);\r\n  };\r\n\r\n  updateNewLimitedStreams = (value: (Participant | Stream)[]) => {\r\n    this.newLimitedStreams.next(value);\r\n  };\r\n\r\n  updateNewLimitedStreamsIDs = (value: string[]) => {\r\n    this.newLimitedStreamsIDs.next(value);\r\n  };\r\n\r\n  updateActiveSounds = (value: string[]) => {\r\n    this.activeSounds.next(value);\r\n  };\r\n\r\n  updateScreenShareIDStream = (value: string) => {\r\n    this.screenShareIDStream.next(value);\r\n  };\r\n\r\n  updateScreenShareNameStream = (value: string) => {\r\n    this.screenShareNameStream.next(value);\r\n  };\r\n\r\n  updateAdminIDStream = (value: string) => {\r\n    this.adminIDStream.next(value);\r\n  };\r\n\r\n  updateAdminNameStream = (value: string) => {\r\n    this.adminNameStream.next(value);\r\n  };\r\n\r\n  updateYouYouStream = (value: (Participant | Stream)[]) => {\r\n    this.youYouStream.next(value);\r\n  };\r\n\r\n  updateYouYouStreamIDs = (value: string[]) => {\r\n    this.youYouStreamIDs.next(value);\r\n  };\r\n\r\n  updateLocalStream = (value: MediaStream | null) => {\r\n    this.localStream.next(value);\r\n  };\r\n\r\n  updateRecordStarted = (value: boolean) => {\r\n    this.recordStarted.next(value);\r\n  };\r\n\r\n  updateRecordResumed = (value: boolean) => {\r\n    this.recordResumed.next(value);\r\n  };\r\n\r\n  updateRecordPaused = (value: boolean) => {\r\n    this.recordPaused.next(value);\r\n  };\r\n\r\n  updateRecordStopped = (value: boolean) => {\r\n    this.recordStopped.next(value);\r\n  };\r\n\r\n  updateAdminRestrictSetting = (value: boolean) => {\r\n    this.adminRestrictSetting.next(value);\r\n  };\r\n\r\n  updateVideoRequestState = (value: string | null) => {\r\n    this.videoRequestState.next(value);\r\n  };\r\n\r\n  updateVideoRequestTime = (value: number) => {\r\n    this.videoRequestTime.next(value);\r\n  };\r\n\r\n  updateVideoAction = (value: boolean) => {\r\n    this.videoAction.next(value);\r\n  };\r\n\r\n  updateLocalStreamVideo = (value: MediaStream | null) => {\r\n    this.localStreamVideo.next(value);\r\n  };\r\n\r\n  updateUserDefaultVideoInputDevice = (value: string) => {\r\n    this.userDefaultVideoInputDevice.next(value);\r\n  };\r\n\r\n  updateCurrentFacingMode = (value: string) => {\r\n    this.currentFacingMode.next(value);\r\n  };\r\n\r\n  updatePrevFacingMode = (value: string) => {\r\n    this.prevFacingMode.next(value);\r\n  };\r\n\r\n  updateDefVideoID = (value: string) => {\r\n    this.defVideoID.next(value);\r\n  };\r\n\r\n  updateAllowed = (value: boolean) => {\r\n    this.allowed.next(value);\r\n  };\r\n\r\n  updateDispActiveNames = (value: string[]) => {\r\n    this.dispActiveNames.next(value);\r\n  };\r\n\r\n  updateP_dispActiveNames = (value: string[]) => {\r\n    this.p_dispActiveNames.next(value);\r\n  };\r\n\r\n  updateActiveNames = (value: string[]) => {\r\n    this.activeNames.next(value);\r\n  };\r\n\r\n  updatePrevActiveNames = (value: string[]) => {\r\n    this.prevActiveNames.next(value);\r\n  };\r\n\r\n  updateP_activeNames = (value: string[]) => {\r\n    this.p_activeNames.next(value);\r\n  };\r\n\r\n  updateMembersReceived = (value: boolean) => {\r\n    this.membersReceived.next(value);\r\n  };\r\n\r\n  updateDeferScreenReceived = (value: boolean) => {\r\n    this.deferScreenReceived.next(value);\r\n  };\r\n\r\n  updateHostFirstSwitch = (value: boolean) => {\r\n    this.hostFirstSwitch.next(value);\r\n  };\r\n\r\n  updateMicAction = (value: boolean) => {\r\n    this.micAction.next(value);\r\n  };\r\n\r\n  updateScreenAction = (value: boolean) => {\r\n    this.screenAction.next(value);\r\n  };\r\n\r\n  updateChatAction = (value: boolean) => {\r\n    this.chatAction.next(value);\r\n  };\r\n\r\n  updateAudioRequestState = (value: string | null) => {\r\n    this.audioRequestState.next(value);\r\n  };\r\n\r\n  updateScreenRequestState = (value: string | null) => {\r\n    this.screenRequestState.next(value);\r\n  };\r\n\r\n  updateChatRequestState = (value: string | null) => {\r\n    this.chatRequestState.next(value);\r\n  };\r\n\r\n  updateAudioRequestTime = (value: number) => {\r\n    this.audioRequestTime.next(value);\r\n  };\r\n\r\n  updateScreenRequestTime = (value: number) => {\r\n    this.screenRequestTime.next(value);\r\n  };\r\n\r\n  updateChatRequestTime = (value: number) => {\r\n    this.chatRequestTime.next(value);\r\n  };\r\n\r\n  updateOldSoundIds = (value: string[]) => {\r\n    this.oldSoundIds.next(value);\r\n  };\r\n\r\n  updateHostLabel = (value: string) => {\r\n    this.hostLabel.next(value);\r\n  };\r\n\r\n  updateMainScreenFilled = (value: boolean) => {\r\n    this.mainScreenFilled.next(value);\r\n  };\r\n\r\n  updateLocalStreamScreen = (value: MediaStream | null) => {\r\n    this.localStreamScreen.next(value);\r\n  };\r\n\r\n  updateScreenAlreadyOn = (value: boolean) => {\r\n    this.screenAlreadyOn.next(value);\r\n  };\r\n\r\n  updateChatAlreadyOn = (value: boolean) => {\r\n    this.chatAlreadyOn.next(value);\r\n  };\r\n\r\n  updateRedirectURL = (value: string) => {\r\n    this.redirectURL.next(value);\r\n  };\r\n\r\n  updateOldAllStreams = (value: (Participant | Stream)[]) => {\r\n    this.oldAllStreams.next(value);\r\n  };\r\n\r\n  updateAdminVidID = (value: string) => {\r\n    this.adminVidID.next(value);\r\n  };\r\n\r\n  updateStreamNames = (value: Stream[]) => {\r\n    this.streamNames.next(value);\r\n  };\r\n\r\n  updateNon_alVideoStreams = (value: Participant[]) => {\r\n    this.non_alVideoStreams.next(value);\r\n  };\r\n\r\n  updateSortAudioLoudness = (value: boolean) => {\r\n    this.sortAudioLoudness.next(value);\r\n  };\r\n\r\n  updateAudioDecibels = (value: AudioDecibels[]) => {\r\n    this.audioDecibels.next(value);\r\n  };\r\n\r\n  updateMixed_alVideoStreams = (value: (Participant | Stream)[]) => {\r\n    this.mixed_alVideoStreams.next(value);\r\n  };\r\n\r\n  updateNon_alVideoStreams_muted = (value: Participant[]) => {\r\n    this.non_alVideoStreams_muted.next(value);\r\n  };\r\n\r\n  updatePaginatedStreams = (value: (Participant | Stream)[][]) => {\r\n    this.paginatedStreams.next(value);\r\n  };\r\n\r\n  updateLocalStreamAudio = (value: MediaStream | null) => {\r\n    this.localStreamAudio.next(value);\r\n  };\r\n\r\n  updateDefAudioID = (value: string) => {\r\n    this.defAudioID.next(value);\r\n  };\r\n\r\n  updateUserDefaultAudioInputDevice = (value: string) => {\r\n    this.userDefaultAudioInputDevice.next(value);\r\n  };\r\n\r\n  updateUserDefaultAudioOutputDevice = (value: string) => {\r\n    this.userDefaultAudioOutputDevice.next(value);\r\n  };\r\n\r\n  updatePrevAudioInputDevice = (value: string) => {\r\n    this.prevAudioInputDevice.next(value);\r\n  };\r\n\r\n  updatePrevVideoInputDevice = (value: string) => {\r\n    this.prevVideoInputDevice.next(value);\r\n  };\r\n\r\n  updateAudioPaused = (value: boolean) => {\r\n    this.audioPaused.next(value);\r\n  };\r\n\r\n  updateMainScreenPerson = (value: string) => {\r\n    this.mainScreenPerson.next(value);\r\n  };\r\n\r\n  updateAdminOnMainScreen = (value: boolean) => {\r\n    this.adminOnMainScreen.next(value);\r\n  };\r\n\r\n  updateScreenStates = (value: ScreenState[]) => {\r\n    this.screenStates.next(value);\r\n  };\r\n\r\n  updatePrevScreenStates = (value: ScreenState[]) => {\r\n    this.prevScreenStates.next(value);\r\n  };\r\n\r\n  updateUpdateDateState = (value: number | null) => {\r\n    this.updateDateState.next(value);\r\n  };\r\n\r\n  updateLastUpdate = (value: number | null) => {\r\n    this.lastUpdate.next(value);\r\n  };\r\n\r\n  updateNForReadjustRecord = (value: number) => {\r\n    this.nForReadjustRecord.next(value);\r\n  };\r\n\r\n  updateFixedPageLimit = (value: number) => {\r\n    this.fixedPageLimit.next(value);\r\n  };\r\n\r\n  updateRemoveAltGrid = (value: boolean) => {\r\n    this.removeAltGrid.next(value);\r\n  };\r\n\r\n  updateNForReadjust = (value: number) => {\r\n    this.nForReadjust.next(value);\r\n  };\r\n\r\n  updateLastReorderTime = (value: number) => {\r\n    this.lastReorderTime.next(value);\r\n  };\r\n\r\n  updateAudStreamNames = (value: Stream[]) => {\r\n    this.audStreamNames.next(value);\r\n  };\r\n\r\n  updateCurrentUserPage = (value: number) => {\r\n    this.currentUserPage.next(value);\r\n  };\r\n\r\n  updateMainHeightWidth = (value: number) => {\r\n    this.mainHeightWidth.next(value);\r\n  };\r\n\r\n  updatePrevMainHeightWidth = (value: number) => {\r\n    this.prevMainHeightWidth.next(value);\r\n  };\r\n\r\n  updatePrevDoPaginate = (value: boolean) => {\r\n    this.prevDoPaginate.next(value);\r\n  };\r\n\r\n  updateDoPaginate = (value: boolean) => {\r\n    this.doPaginate.next(value);\r\n  };\r\n\r\n  updateShareEnded = (value: boolean) => {\r\n    this.shareEnded.next(value);\r\n  };\r\n\r\n  updateLStreams = (value: (Participant | Stream)[]) => {\r\n    this.lStreams.next(value);\r\n  };\r\n\r\n  updateChatRefStreams = (value: (Participant | Stream)[]) => {\r\n    this.chatRefStreams.next(value);\r\n  };\r\n\r\n  updateControlHeight = (value: number) => {\r\n    this.controlHeight.next(value);\r\n  };\r\n\r\n  updateIsWideScreen = (value: boolean) => {\r\n    this.isWideScreen.next(value);\r\n  };\r\n\r\n  updateIsMediumScreen = (value: boolean) => {\r\n    this.isMediumScreen.next(value);\r\n  };\r\n\r\n  updateIsSmallScreen = (value: boolean) => {\r\n    this.isSmallScreen.next(value);\r\n  };\r\n\r\n  updateAddGrid = (value: boolean) => {\r\n    this.addGrid.next(value);\r\n  };\r\n\r\n  updateAddAltGrid = (value: boolean) => {\r\n    this.addAltGrid.next(value);\r\n  };\r\n\r\n  updateGridRows = (value: number) => {\r\n    this.gridRows.next(value);\r\n  };\r\n\r\n  updateGridCols = (value: number) => {\r\n    this.gridCols.next(value);\r\n  };\r\n\r\n  updateAltGridRows = (value: number) => {\r\n    this.altGridRows.next(value);\r\n  };\r\n\r\n  updateAltGridCols = (value: number) => {\r\n    this.altGridCols.next(value);\r\n  };\r\n\r\n  updateNumberPages = (value: number) => {\r\n    this.numberPages.next(value);\r\n  };\r\n\r\n  updateCurrentStreams = (value: (Participant | Stream)[]) => {\r\n    this.currentStreams.next(value);\r\n  };\r\n\r\n  updateShowMiniView = (value: boolean) => {\r\n    this.showMiniView.next(value);\r\n  };\r\n\r\n  updateNStream = (value: MediaStream | null) => {\r\n    this.nStream.next(value);\r\n  };\r\n\r\n  updateDefer_receive = (value: boolean) => {\r\n    this.defer_receive.next(value);\r\n  };\r\n\r\n  updateAllAudioStreams = (value: (Participant | Stream)[]) => {\r\n    this.allAudioStreams.next(value);\r\n  };\r\n\r\n  updateRemoteScreenStream = (value: Stream[]) => {\r\n    this.remoteScreenStream.next(value);\r\n  };\r\n\r\n  updateScreenProducer = (value: Producer | null) => {\r\n    this.screenProducer.next(value);\r\n  };\r\n\r\n  updateLocalScreenProducer = (value: Producer | null) => {\r\n    this.localScreenProducer.next(value);\r\n  };\r\n\r\n  updateGotAllVids = (value: boolean) => {\r\n    this.gotAllVids.next(value);\r\n  };\r\n\r\n  updatePaginationHeightWidth = (value: number) => {\r\n    this.paginationHeightWidth.next(value);\r\n  };\r\n\r\n  updatePaginationDirection = (value: 'horizontal' | 'vertical') => {\r\n    this.paginationDirection.next(value);\r\n  };\r\n\r\n  updateGridSizes = (value: GridSizes) => {\r\n    this.gridSizes.next(value);\r\n  };\r\n\r\n  updateScreenForceFullDisplay = (value: boolean) => {\r\n    this.screenForceFullDisplay.next(value);\r\n  };\r\n\r\n  updateMainGridStream = (value: CustomMediaComponent[]) => {\r\n    this.mainGridStream.next(value);\r\n  };\r\n\r\n  updateOtherGridStreams = (value: CustomMediaComponent[][]) => {\r\n    this.otherGridStreams.next(value);\r\n  };\r\n\r\n  updateAudioOnlyStreams = (value: CustomMediaComponent[]) => {\r\n    this.audioOnlyStreams.next(value);\r\n  };\r\n\r\n  updateVideoInputs = (value: MediaDeviceInfo[]) => {\r\n    this.videoInputs.next(value);\r\n  };\r\n\r\n  updateAudioInputs = (value: MediaDeviceInfo[]) => {\r\n    this.audioInputs.next(value);\r\n  };\r\n\r\n  updateMeetingProgressTime = (value: string) => {\r\n    this.meetingProgressTime.next(value);\r\n  };\r\n\r\n  updateMeetingElapsedTime = (value: number) => {\r\n    this.meetingElapsedTime.next(value);\r\n  };\r\n\r\n  updateRef_participants = (value: Participant[]) => {\r\n    this.ref_participants.next(value);\r\n  };\r\n\r\n  // Messages\r\n  messages = new BehaviorSubject<Message[]>([]);\r\n  startDirectMessage = new BehaviorSubject<boolean>(false);\r\n  directMessageDetails = new BehaviorSubject<Participant | null>(null);\r\n  showMessagesBadge = new BehaviorSubject<boolean>(false);\r\n\r\n  // Event Settings\r\n  audioSetting = new BehaviorSubject<string>('allow');\r\n  videoSetting = new BehaviorSubject<string>('allow');\r\n  screenshareSetting = new BehaviorSubject<string>('allow');\r\n  chatSetting = new BehaviorSubject<string>('allow');\r\n\r\n  // Display Settings\r\n  displayOption = new BehaviorSubject<string>('media');\r\n  autoWave = new BehaviorSubject<boolean>(true);\r\n  forceFullDisplay = new BehaviorSubject<boolean>(true);\r\n  prevForceFullDisplay = new BehaviorSubject<boolean>(false);\r\n  prevMeetingDisplayType = new BehaviorSubject<string>('video');\r\n\r\n  // Waiting Room\r\n  waitingRoomFilter = new BehaviorSubject<string>('');\r\n  waitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>([]);\r\n  waitingRoomCounter = new BehaviorSubject<number>(0);\r\n  filteredWaitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>([]);\r\n\r\n  // Requests\r\n  requestFilter = new BehaviorSubject<string>('');\r\n  requestList = new BehaviorSubject<Request[]>([]);\r\n  requestCounter = new BehaviorSubject<number>(0);\r\n  filteredRequestList = new BehaviorSubject<Request[]>([]);\r\n\r\n  // Total Requests and Waiting Room\r\n  totalReqWait = new BehaviorSubject<number>(0);\r\n\r\n  // Alerts\r\n  alertVisible = new BehaviorSubject<boolean>(false);\r\n  alertMessage = new BehaviorSubject<string>('');\r\n  alertType = new BehaviorSubject<'success' | 'danger'>('success');\r\n  alertDuration = new BehaviorSubject<number>(3000);\r\n\r\n  // Progress Timer\r\n  progressTimerVisible = new BehaviorSubject<boolean>(true);\r\n  progressTimerValue = new BehaviorSubject<number>(0);\r\n\r\n  // Menu Modals\r\n  isMenuModalVisible = new BehaviorSubject<boolean>(false);\r\n  isRecordingModalVisible = new BehaviorSubject<boolean>(false);\r\n  isSettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isRequestsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isWaitingModalVisible = new BehaviorSubject<boolean>(false);\r\n  isCoHostModalVisible = new BehaviorSubject<boolean>(false);\r\n  isMediaSettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isDisplaySettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Other Modals\r\n  isParticipantsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isMessagesModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfirmExitModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfirmHereModalVisible = new BehaviorSubject<boolean>(false);\r\n  isShareEventModalVisible = new BehaviorSubject<boolean>(false);\r\n  isLoadingModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Recording Options\r\n  recordingMediaOptions = new BehaviorSubject<string>('video');\r\n  recordingAudioOptions = new BehaviorSubject<string>('all');\r\n  recordingVideoOptions = new BehaviorSubject<string>('all');\r\n  recordingVideoType = new BehaviorSubject<string>('fullDisplay');\r\n  recordingVideoOptimized = new BehaviorSubject<boolean>(false);\r\n  recordingDisplayType = new BehaviorSubject<'video' | 'media' | 'all'>('video');\r\n  recordingAddHLS = new BehaviorSubject<boolean>(true);\r\n  recordingNameTags = new BehaviorSubject<boolean>(true);\r\n  recordingBackgroundColor = new BehaviorSubject<string>('#83c0e9');\r\n  recordingNameTagsColor = new BehaviorSubject<string>('#ffffff');\r\n  recordingAddText = new BehaviorSubject<boolean>(false);\r\n  recordingCustomText = new BehaviorSubject<string>('Add Text');\r\n  recordingCustomTextPosition = new BehaviorSubject<string>('top');\r\n  recordingCustomTextColor = new BehaviorSubject<string>('#ffffff');\r\n  recordingOrientationVideo = new BehaviorSubject<string>('landscape');\r\n  clearedToResume = new BehaviorSubject<boolean>(true);\r\n  clearedToRecord = new BehaviorSubject<boolean>(true);\r\n  recordState = new BehaviorSubject<string>('green');\r\n  showRecordButtons = new BehaviorSubject<boolean>(false);\r\n  recordingProgressTime = new BehaviorSubject<string>('00:00:00');\r\n  audioSwitching = new BehaviorSubject<boolean>(false);\r\n  videoSwitching = new BehaviorSubject<boolean>(false);\r\n\r\n  // Media States\r\n  videoAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  audioAlreadyOn = new BehaviorSubject<boolean>(false);\r\n\r\n  componentSizes = new BehaviorSubject<ComponentSizes>({\r\n    mainHeight: 0,\r\n    otherHeight: 0,\r\n    mainWidth: 0,\r\n    otherWidth: 0,\r\n  });\r\n\r\n  // Permissions\r\n  hasCameraPermission = new BehaviorSubject<boolean>(false);\r\n  hasAudioPermission = new BehaviorSubject<boolean>(false);\r\n\r\n  // Transports\r\n  transportCreated = new BehaviorSubject<boolean>(false);\r\n  localTransportCreated = new BehaviorSubject<boolean>(false);\r\n  transportCreatedVideo = new BehaviorSubject<boolean>(false);\r\n  transportCreatedAudio = new BehaviorSubject<boolean>(false);\r\n  transportCreatedScreen = new BehaviorSubject<boolean>(false);\r\n  producerTransport = new BehaviorSubject<Transport | null>(null);\r\n  localProducerTransport = new BehaviorSubject<Transport | null>(null);\r\n  videoProducer = new BehaviorSubject<Producer | null>(null);\r\n  localVideoProducer = new BehaviorSubject<Producer | null>(null);\r\n  params = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  videoParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  audioParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  audioProducer = new BehaviorSubject<Producer | null>(null);\r\n  audioLevel = new BehaviorSubject<number>(0);\r\n  localAudioProducer = new BehaviorSubject<Producer | null>(null);\r\n  consumerTransports = new BehaviorSubject<TransportType[]>([]);\r\n  consumingTransports = new BehaviorSubject<string[]>([]);\r\n\r\n  // Polls\r\n  polls = new BehaviorSubject<Poll[]>([]);\r\n  poll = new BehaviorSubject<Poll | null>(null);\r\n  isPollModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Background\r\n  customImage = new BehaviorSubject<string>('');\r\n  selectedImage = new BehaviorSubject<string>('');\r\n  segmentVideo = new BehaviorSubject<MediaStream | null>(null);\r\n  selfieSegmentation = new BehaviorSubject<SelfieSegmentation | null>(null);\r\n  pauseSegmentation = new BehaviorSubject<boolean>(false);\r\n  processedStream = new BehaviorSubject<MediaStream | null>(null);\r\n  keepBackground = new BehaviorSubject<boolean>(false);\r\n  backgroundHasChanged = new BehaviorSubject<boolean>(false);\r\n  virtualStream = new BehaviorSubject<MediaStream | null>(null);\r\n  mainCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  prevKeepBackground = new BehaviorSubject<boolean>(false);\r\n  appliedBackground = new BehaviorSubject<boolean>(false);\r\n  isBackgroundModalVisible = new BehaviorSubject<boolean>(false);\r\n  autoClickBackground = new BehaviorSubject<boolean>(false);\r\n\r\n  // Breakout Rooms\r\n  breakoutRooms = new BehaviorSubject<BreakoutParticipant[][]>([]);\r\n  currentRoomIndex = new BehaviorSubject<number>(0);\r\n  canStartBreakout = new BehaviorSubject<boolean>(false);\r\n  breakOutRoomStarted = new BehaviorSubject<boolean>(false);\r\n  breakOutRoomEnded = new BehaviorSubject<boolean>(false);\r\n  hostNewRoom = new BehaviorSubject<number>(-1);\r\n  limitedBreakRoom = new BehaviorSubject<BreakoutParticipant[]>([]);\r\n  mainRoomsLength = new BehaviorSubject<number>(0);\r\n  memberRoom = new BehaviorSubject<number>(-1);\r\n  isBreakoutRoomsModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Whiteboard\r\n  whiteboardUsers = new BehaviorSubject<WhiteboardUser[]>([]);\r\n  currentWhiteboardIndex = new BehaviorSubject<number>(0);\r\n  canStartWhiteboard = new BehaviorSubject<boolean>(false);\r\n  whiteboardStarted = new BehaviorSubject<boolean>(false);\r\n  whiteboardEnded = new BehaviorSubject<boolean>(false);\r\n  whiteboardLimit = new BehaviorSubject<number>(4);\r\n  isWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfigureWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\r\n  shapes = new BehaviorSubject<Shape[]>([]);\r\n  useImageBackground = new BehaviorSubject<boolean>(true);\r\n  redoStack = new BehaviorSubject<Shape[]>([]);\r\n  undoStack = new BehaviorSubject<string[]>([]);\r\n  canvasStream = new BehaviorSubject<MediaStream | null>(null);\r\n  canvasWhiteboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n\r\n  // Screenboard\r\n  canvasScreenboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  processedScreenStream = new BehaviorSubject<MediaStream | null>(null);\r\n  annotateScreenStream = new BehaviorSubject<boolean>(false);\r\n  mainScreenCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  isScreenboardModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  //state variables for the control buttons\r\n  micActive = new BehaviorSubject<boolean>(\r\n    this.audioAlreadyOn.value ? this.audioAlreadyOn.value : false,\r\n  );\r\n  videoActive = new BehaviorSubject<boolean>(\r\n    this.videoAlreadyOn.value ? this.videoAlreadyOn.value : false,\r\n  );\r\n  screenShareActive = new BehaviorSubject<boolean>(false);\r\n  endCallActive = new BehaviorSubject<boolean>(false);\r\n  participantsActive = new BehaviorSubject<boolean>(false);\r\n  menuActive = new BehaviorSubject<boolean>(false);\r\n  commentsActive = new BehaviorSubject<boolean>(false);\r\n\r\n  // Update functions\r\n  updateMessages = (value: Message[]) => {\r\n    this.messages.next(value);\r\n  };\r\n\r\n  updateStartDirectMessage = (value: boolean) => {\r\n    this.startDirectMessage.next(value);\r\n  };\r\n\r\n  updateDirectMessageDetails = (value: Participant | null) => {\r\n    this.directMessageDetails.next(value);\r\n  };\r\n\r\n  updateShowMessagesBadge = (value: boolean) => {\r\n    this.showMessagesBadge.next(value);\r\n  };\r\n\r\n  updateAudioSetting = (value: string) => {\r\n    this.audioSetting.next(value);\r\n  };\r\n\r\n  updateVideoSetting = (value: string) => {\r\n    this.videoSetting.next(value);\r\n  };\r\n\r\n  updateScreenshareSetting = (value: string) => {\r\n    this.screenshareSetting.next(value);\r\n  };\r\n\r\n  updateChatSetting = (value: string) => {\r\n    this.chatSetting.next(value);\r\n  };\r\n\r\n  updateDisplayOption = (value: string) => {\r\n    this.displayOption.next(value);\r\n  };\r\n\r\n  updateAutoWave = (value: boolean) => {\r\n    this.autoWave.next(value);\r\n  };\r\n\r\n  updateForceFullDisplay = (value: boolean) => {\r\n    this.forceFullDisplay.next(value);\r\n  };\r\n\r\n  updatePrevForceFullDisplay = (value: boolean) => {\r\n    this.prevForceFullDisplay.next(value);\r\n  };\r\n\r\n  updatePrevMeetingDisplayType = (value: string) => {\r\n    this.prevMeetingDisplayType.next(value);\r\n  };\r\n\r\n  updateWaitingRoomCounter = (value: number) => {\r\n    this.waitingRoomCounter.next(value);\r\n  };\r\n\r\n  updateWaitingRoomFilter = (value: string) => {\r\n    this.waitingRoomFilter.next(value);\r\n  };\r\n\r\n  updateWaitingRoomList = (value: WaitingRoomParticipant[]) => {\r\n    this.waitingRoomList.next(value);\r\n    this.filteredWaitingRoomList.next(value);\r\n    this.waitingRoomCounter.next(value.length);\r\n  };\r\n\r\n  onWaitingRoomClose = () => {\r\n    this.updateIsWaitingModalVisible(false);\r\n  };\r\n\r\n  updateRequestCounter = (value: number) => {\r\n    this.requestCounter.next(value);\r\n  };\r\n\r\n  updateRequestFilter = (value: string) => {\r\n    this.requestFilter.next(value);\r\n  };\r\n\r\n  updateRequestList = (value: Request[]) => {\r\n    this.requestList.next(value);\r\n    this.filteredRequestList.next(value);\r\n    this.requestCounter.next(value.length);\r\n  };\r\n\r\n  onRequestClose = () => {\r\n    this.updateIsRequestsModalVisible(false);\r\n  };\r\n\r\n  updateTotalReqWait = (value: number) => {\r\n    this.totalReqWait.next(value);\r\n  };\r\n\r\n  updateAlertVisible = (value: boolean) => {\r\n    this.alertVisible.next(value);\r\n  };\r\n\r\n  updateAlertMessage = (value: string) => {\r\n    this.alertMessage.next(value);\r\n  };\r\n\r\n  updateAlertType = (value: 'success' | 'danger') => {\r\n    this.alertType.next(value);\r\n  };\r\n\r\n  updateAlertDuration = (value: number) => {\r\n    this.alertDuration.next(value);\r\n  };\r\n\r\n  updateProgressTimerVisible = (value: boolean) => {\r\n    this.progressTimerVisible.next(value);\r\n  };\r\n\r\n  updateProgressTimerValue = (value: number) => {\r\n    this.progressTimerValue.next(value);\r\n  };\r\n\r\n  updateIsMenuModalVisible = (value: boolean) => {\r\n    this.isMenuModalVisible.next(value);\r\n  };\r\n\r\n  updateIsRecordingModalVisible = (value: boolean) => {\r\n    this.isRecordingModalVisible.next(value);\r\n    if (value) {\r\n      this.updateConfirmedToRecord(false);\r\n    } else {\r\n      if (\r\n        this.clearedToRecord.getValue() &&\r\n        this.clearedToResume.getValue() &&\r\n        this.recordStarted.getValue()\r\n      ) {\r\n        this.updateShowRecordButtons(true);\r\n      }\r\n    }\r\n  };\r\n\r\n  updateIsSettingsModalVisible = (value: boolean) => {\r\n    this.isSettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsRequestsModalVisible = (value: boolean) => {\r\n    this.isRequestsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsWaitingModalVisible = (value: boolean) => {\r\n    this.isWaitingModalVisible.next(value);\r\n  };\r\n\r\n  updateIsCoHostModalVisible = (value: boolean) => {\r\n    this.isCoHostModalVisible.next(value);\r\n  };\r\n\r\n  updateIsMediaSettingsModalVisible = (value: boolean) => {\r\n    this.isMediaSettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsDisplaySettingsModalVisible = (value: boolean) => {\r\n    this.isDisplaySettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsParticipantsModalVisible = (value: boolean) => {\r\n    this.isParticipantsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsMessagesModalVisible = (value: boolean) => {\r\n    this.isMessagesModalVisible.next(value);\r\n    if (!value) {\r\n      this.updateShowMessagesBadge(false);\r\n    }\r\n  };\r\n\r\n  updateIsConfirmExitModalVisible = (value: boolean) => {\r\n    this.isConfirmExitModalVisible.next(value);\r\n  };\r\n\r\n  updateIsConfirmHereModalVisible = (value: boolean) => {\r\n    this.isConfirmHereModalVisible.next(value);\r\n  };\r\n\r\n  updateIsLoadingModalVisible = (value: boolean) => {\r\n    this.isLoadingModalVisible.next(value);\r\n  };\r\n\r\n  updateIsShareEventModalVisible = (value: boolean) => {\r\n    this.isShareEventModalVisible.next(value);\r\n  };\r\n\r\n  updateRecordingMediaOptions = (value: string) => {\r\n    this.recordingMediaOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAudioOptions = (value: string) => {\r\n    this.recordingAudioOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoOptions = (value: string) => {\r\n    this.recordingVideoOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoType = (value: string) => {\r\n    this.recordingVideoType.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoOptimized = (value: boolean) => {\r\n    this.recordingVideoOptimized.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingDisplayType = (value: 'video' | 'media' | 'all') => {\r\n    this.recordingDisplayType.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAddHLS = (value: boolean) => {\r\n    this.recordingAddHLS.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAddText = (value: boolean) => {\r\n    this.recordingAddText.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomText = (value: string) => {\r\n    this.recordingCustomText.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomTextPosition = (value: string) => {\r\n    this.recordingCustomTextPosition.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomTextColor = (value: string) => {\r\n    this.recordingCustomTextColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingNameTags = (value: boolean) => {\r\n    this.recordingNameTags.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingBackgroundColor = (value: string) => {\r\n    this.recordingBackgroundColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingNameTagsColor = (value: string) => {\r\n    this.recordingNameTagsColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingOrientationVideo = (value: string) => {\r\n    this.recordingOrientationVideo.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateClearedToResume = (value: boolean) => {\r\n    this.clearedToResume.next(value);\r\n  };\r\n\r\n  updateClearedToRecord = (value: boolean) => {\r\n    this.clearedToRecord.next(value);\r\n  };\r\n\r\n  updateRecordState = (value: string) => {\r\n    if (this.recordStarted.value && !this.recordStopped.value) {\r\n      if (!this.recordPaused.value) {\r\n        this.recordState.next('red');\r\n      } else {\r\n        this.recordState.next('yellow');\r\n      }\r\n    } else {\r\n      this.recordState.next(value);\r\n    }\r\n    this.recordState.next(value);\r\n  };\r\n\r\n  updateShowRecordButtons = (value: boolean) => {\r\n    this.showRecordButtons.next(value);\r\n  };\r\n\r\n  updateRecordingProgressTime = (value: string) => {\r\n    this.recordingProgressTime.next(value);\r\n    this.updateRecordTimerWidget();\r\n  };\r\n\r\n  updateAudioSwitching = (value: boolean) => {\r\n    this.audioSwitching.next(value);\r\n  };\r\n\r\n  updateVideoSwitching = (value: boolean) => {\r\n    this.videoSwitching.next(value);\r\n  };\r\n\r\n  updateVideoAlreadyOn = (value: boolean) => {\r\n    this.videoAlreadyOn.next(value);\r\n    this.videoActive.next(value);\r\n  };\r\n\r\n  updateAudioAlreadyOn = (value: boolean) => {\r\n    this.audioAlreadyOn.next(value);\r\n    this.micActive.next(value);\r\n  };\r\n\r\n  updateComponentSizes = (sizes: ComponentSizes) => {\r\n    this.componentSizes.next(sizes);\r\n  };\r\n\r\n  updateHasCameraPermission = (value: boolean) => {\r\n    this.hasCameraPermission.next(value);\r\n  };\r\n\r\n  updateHasAudioPermission = (value: boolean) => {\r\n    this.hasAudioPermission.next(value);\r\n  };\r\n\r\n  requestPermissionCamera(): Promise<string> {\r\n    // Implement the request permission logic here\r\n    return Promise.resolve('granted');\r\n  }\r\n\r\n  requestPermissionAudio(): Promise<string> {\r\n    // Implement the request permission logic here\r\n    return Promise.resolve('granted');\r\n  }\r\n\r\n  updateTransportCreated = (value: boolean) => {\r\n    this.transportCreated.next(value);\r\n  };\r\n\r\n  updateLocalTransportCreated = (value: boolean) => {\r\n    this.localTransportCreated.next(value);\r\n  };\r\n\r\n  updateTransportCreatedVideo = (value: boolean) => {\r\n    this.transportCreatedVideo.next(value);\r\n  };\r\n\r\n  updateTransportCreatedAudio = (value: boolean) => {\r\n    this.transportCreatedAudio.next(value);\r\n  };\r\n\r\n  updateTransportCreatedScreen = (value: boolean) => {\r\n    this.transportCreatedScreen.next(value);\r\n  };\r\n\r\n  updateProducerTransport = (value: Transport | null) => {\r\n    this.producerTransport.next(value);\r\n  };\r\n\r\n  updateLocalProducerTransport = (value: Transport | null) => {\r\n    this.localProducerTransport.next(value);\r\n  };\r\n\r\n  updateVideoProducer = (value: Producer | null) => {\r\n    this.videoProducer.next(value);\r\n  };\r\n\r\n  updateLocalVideoProducer = (value: Producer | null) => {\r\n    this.localVideoProducer.next(value);\r\n  }\r\n\r\n  updateParams = (value: ProducerOptions) => {\r\n    this.params.next(value);\r\n  };\r\n\r\n  updateVideoParams = (value: ProducerOptions) => {\r\n    this.videoParams.next(value);\r\n  };\r\n\r\n  updateAudioParams = (value: ProducerOptions) => {\r\n    this.audioParams.next(value);\r\n  };\r\n\r\n  updateAudioProducer = (value: Producer | null) => {\r\n    this.audioProducer.next(value);\r\n  };\r\n\r\n  updateAudioLevel = (value: number) => {\r\n    this.audioLevel.next(value);\r\n  };\r\n\r\n  updateLocalAudioProducer = (value: Producer | null) => {\r\n    this.localAudioProducer.next(value);\r\n  };\r\n\r\n  updateConsumerTransports = (value: TransportType[]) => {\r\n    this.consumerTransports.next(value);\r\n  };\r\n\r\n  updateConsumingTransports = (value: string[]) => {\r\n    this.consumingTransports.next(value);\r\n  };\r\n\r\n  updatePolls = (value: Poll[]) => {\r\n    this.polls.next(value);\r\n  };\r\n\r\n  updatePoll = (value: Poll | null) => {\r\n    this.poll.next(value);\r\n  };\r\n\r\n  updateIsPollModalVisible = (value: boolean) => {\r\n    this.isPollModalVisible.next(value);\r\n  };\r\n\r\n  updateCustomImage = (value: string) => {\r\n    this.customImage.next(value);\r\n  };\r\n\r\n  updateSelectedImage = (value: string) => {\r\n    this.selectedImage.next(value);\r\n  };\r\n\r\n  updateSegmentVideo = (value: MediaStream | null) => {\r\n    this.segmentVideo.next(value);\r\n  };\r\n\r\n  updateSelfieSegmentation = (value: SelfieSegmentation | null) => {\r\n    this.selfieSegmentation.next(value);\r\n  };\r\n\r\n  updatePauseSegmentation = (value: boolean) => {\r\n    this.pauseSegmentation.next(value);\r\n  };\r\n\r\n  updateProcessedStream = (value: MediaStream | null) => {\r\n    this.processedStream.next(value);\r\n  };\r\n\r\n  updateKeepBackground = (value: boolean) => {\r\n    this.keepBackground.next(value);\r\n  };\r\n\r\n  updateBackgroundHasChanged = (value: boolean) => {\r\n    this.backgroundHasChanged.next(value);\r\n  };\r\n\r\n  updateVirtualStream = (value: MediaStream | null) => {\r\n    this.virtualStream.next(value);\r\n  };\r\n\r\n  updateMainCanvas = (value: HTMLCanvasElement | null) => {\r\n    this.mainCanvas.next(value);\r\n  };\r\n\r\n  updatePrevKeepBackground = (value: boolean) => {\r\n    this.prevKeepBackground.next(value);\r\n  };\r\n\r\n  updateAppliedBackground = (value: boolean) => {\r\n    this.appliedBackground.next(value);\r\n  };\r\n\r\n  updateIsBackgroundModalVisible = (value: boolean) => {\r\n    this.isBackgroundModalVisible.next(value);\r\n  };\r\n\r\n  updateAutoClickBackground = (value: boolean) => {\r\n    this.autoClickBackground.next(value);\r\n  };\r\n\r\n  updateBreakoutRooms = (value: BreakoutParticipant[][]) => {\r\n    this.breakoutRooms.next(value);\r\n  };\r\n\r\n  updateCurrentRoomIndex = (value: number) => {\r\n    this.currentRoomIndex.next(value);\r\n  };\r\n\r\n  updateCanStartBreakout = (value: boolean) => {\r\n    this.canStartBreakout.next(value);\r\n  };\r\n\r\n  updateBreakOutRoomStarted = (value: boolean) => {\r\n    this.breakOutRoomStarted.next(value);\r\n  };\r\n\r\n  updateBreakOutRoomEnded = (value: boolean) => {\r\n    this.breakOutRoomEnded.next(value);\r\n  };\r\n\r\n  updateHostNewRoom = (value: number) => {\r\n    this.hostNewRoom.next(value);\r\n  };\r\n\r\n  updateLimitedBreakRoom = (value: BreakoutParticipant[]) => {\r\n    this.limitedBreakRoom.next(value);\r\n  };\r\n\r\n  updateMainRoomsLength = (value: number) => {\r\n    this.mainRoomsLength.next(value);\r\n  };\r\n\r\n  updateMemberRoom = (value: number) => {\r\n    this.memberRoom.next(value);\r\n  };\r\n\r\n  updateIsBreakoutRoomsModalVisible = (value: boolean) => {\r\n    this.isBreakoutRoomsModalVisible.next(value);\r\n  };\r\n\r\n  updateWhiteboardUsers = (value: WhiteboardUser[]) => {\r\n    this.whiteboardUsers.next(value);\r\n  };\r\n\r\n  updateCurrentWhiteboardIndex = (value: number) => {\r\n    this.currentWhiteboardIndex.next(value);\r\n  };\r\n\r\n  updateCanStartWhiteboard = (value: boolean) => {\r\n    this.canStartWhiteboard.next(value);\r\n  };\r\n\r\n  updateWhiteboardStarted = (value: boolean) => {\r\n    this.whiteboardStarted.next(value);\r\n  };\r\n\r\n  updateWhiteboardEnded = (value: boolean) => {\r\n    this.whiteboardEnded.next(value);\r\n  };\r\n\r\n  updateWhiteboardLimit = (value: number) => {\r\n    this.whiteboardLimit.next(value);\r\n  };\r\n\r\n  updateIsWhiteboardModalVisible = (value: boolean) => {\r\n    this.isWhiteboardModalVisible.next(value);\r\n  };\r\n\r\n  updateIsConfigureWhiteboardModalVisible = (value: boolean) => {\r\n    this.isConfigureWhiteboardModalVisible.next(value);\r\n  };\r\n\r\n  updateShapes = (value: Shape[]) => {\r\n    this.shapes.next(value);\r\n  };\r\n\r\n  updateUseImageBackground = (value: boolean) => {\r\n    this.useImageBackground.next(value);\r\n  };\r\n\r\n  updateRedoStack = (value: Shape[]) => {\r\n    this.redoStack.next(value);\r\n  };\r\n\r\n  updateUndoStack = (value: string[]) => {\r\n    this.undoStack.next(value);\r\n  };\r\n\r\n  updateCanvasStream = (value: MediaStream | null) => {\r\n    this.canvasStream.next(value);\r\n  };\r\n\r\n  updateCanvasWhiteboard = (value: HTMLCanvasElement | null) => {\r\n    this.canvasWhiteboard.next(value);\r\n  };\r\n\r\n  updateCanvasScreenboard = (value: HTMLCanvasElement | null) => {\r\n    this.canvasScreenboard.next(value);\r\n  };\r\n\r\n  updateProcessedScreenStream = (value: MediaStream | null) => {\r\n    this.processedScreenStream.next(value);\r\n  };\r\n\r\n  updateAnnotateScreenStream = (value: boolean) => {\r\n    this.annotateScreenStream.next(value);\r\n  };\r\n\r\n  updateMainScreenCanvas = (value: HTMLCanvasElement | null) => {\r\n    this.mainScreenCanvas.next(value);\r\n  };\r\n\r\n  updateIsScreenboardModalVisible = (value: boolean) => {\r\n    this.isScreenboardModalVisible.next(value);\r\n  };\r\n\r\n  checkOrientation = () => {\r\n    const isPortrait = window.matchMedia('(orientation: portrait)').matches;\r\n    return isPortrait ? 'portrait' : 'landscape';\r\n  };\r\n\r\n  showAlert = ({\r\n    message,\r\n    type,\r\n    duration = 3000,\r\n  }: {\r\n    message: string;\r\n    type: 'success' | 'danger';\r\n    duration?: number;\r\n  }) => {\r\n    this.updateAlertMessage(message);\r\n    this.updateAlertType(type);\r\n    this.updateAlertDuration(duration);\r\n    this.updateAlertVisible(true);\r\n  };\r\n\r\n  getAllParams() {\r\n    return {\r\n      localUIMode: this.localUIMode.value, // Local UI mode\r\n\r\n      // Room Details\r\n      roomName: this.roomName.value,\r\n      member: this.member.value,\r\n      adminPasscode: this.adminPasscode.value,\r\n      youAreCoHost: this.youAreCoHost.value,\r\n      youAreHost: this.youAreHost.value,\r\n      islevel: this.islevel.value,\r\n      confirmedToRecord: this.confirmedToRecord.value,\r\n      meetingDisplayType: this.meetingDisplayType.value,\r\n      meetingVideoOptimized: this.meetingVideoOptimized.value,\r\n      eventType: this.eventType.value,\r\n      participants: this.participants.value,\r\n      filteredParticipants: this.filteredParticipants.value,\r\n      participantsCounter: this.participantsCounter.value,\r\n      participantsFilter: this.participantsFilter.value,\r\n\r\n      // More room details - media\r\n      consume_sockets: this.consume_sockets.value,\r\n      rtpCapabilities: this.rtpCapabilities.value,\r\n      roomRecvIPs: this.roomRecvIPs.value,\r\n      meetingRoomParams: this.meetingRoomParams.value,\r\n      itemPageLimit: this.itemPageLimit.value,\r\n      audioOnlyRoom: this.audioOnlyRoom.value,\r\n      addForBasic: this.addForBasic.value,\r\n      screenPageLimit: this.screenPageLimit.value,\r\n      shareScreenStarted: this.shareScreenStarted.value,\r\n      shared: this.shared.value,\r\n      targetOrientation: this.targetOrientation.value,\r\n      targetResolution: this.targetResolution.value,\r\n      targetResolutionHost: this.targetResolutionHost.value,\r\n      vidCons: this.vidCons.value,\r\n      frameRate: this.frameRate.value,\r\n      hParams: this.hParams.value,\r\n      vParams: this.vParams.value,\r\n      screenParams: this.screenParams.value,\r\n      aParams: this.aParams.value,\r\n\r\n      // More room details - recording\r\n      recordingAudioPausesLimit: this.recordingAudioPausesLimit.value,\r\n      recordingAudioPausesCount: this.recordingAudioPausesCount.value,\r\n      recordingAudioSupport: this.recordingAudioSupport.value,\r\n      recordingAudioPeopleLimit: this.recordingAudioPeopleLimit.value,\r\n      recordingAudioParticipantsTimeLimit: this.recordingAudioParticipantsTimeLimit.value,\r\n      recordingVideoPausesCount: this.recordingVideoPausesCount.value,\r\n      recordingVideoPausesLimit: this.recordingVideoPausesLimit.value,\r\n      recordingVideoSupport: this.recordingVideoSupport.value,\r\n      recordingVideoPeopleLimit: this.recordingVideoPeopleLimit.value,\r\n      recordingVideoParticipantsTimeLimit: this.recordingVideoParticipantsTimeLimit.value,\r\n      recordingAllParticipantsSupport: this.recordingAllParticipantsSupport.value,\r\n      recordingVideoParticipantsSupport: this.recordingVideoParticipantsSupport.value,\r\n      recordingAllParticipantsFullRoomSupport: this.recordingAllParticipantsFullRoomSupport.value,\r\n      recordingVideoParticipantsFullRoomSupport:\r\n        this.recordingVideoParticipantsFullRoomSupport.value,\r\n      recordingPreferredOrientation: this.recordingPreferredOrientation.value,\r\n      recordingSupportForOtherOrientation: this.recordingSupportForOtherOrientation.value,\r\n      recordingMultiFormatsSupport: this.recordingMultiFormatsSupport.value,\r\n\r\n      userRecordingParams: this.userRecordingParams.value,\r\n      canRecord: this.canRecord.value,\r\n      startReport: this.startReport.value,\r\n      endReport: this.endReport.value,\r\n      recordStartTime: this.recordStartTime.value,\r\n      recordElapsedTime: this.recordElapsedTime.value,\r\n      isTimerRunning: this.isTimerRunning.value,\r\n      canPauseResume: this.canPauseResume.value,\r\n      recordChangeSeconds: this.recordChangeSeconds.value,\r\n      pauseLimit: this.pauseLimit.value,\r\n      pauseRecordCount: this.pauseRecordCount.value,\r\n      canLaunchRecord: this.canLaunchRecord.value,\r\n      stopLaunchRecord: this.stopLaunchRecord.value,\r\n\r\n      participantsAll: this.participantsAll.value,\r\n\r\n      firstAll: this.firstAll.value,\r\n      updateMainWindow: this.updateMainWindow.value,\r\n      first_round: this.first_round.value,\r\n      landScaped: this.landScaped.value,\r\n      lock_screen: this.lock_screen.value,\r\n      screenId: this.screenId.value,\r\n      allVideoStreams: this.allVideoStreams.value,\r\n      newLimitedStreams: this.newLimitedStreams.value,\r\n      newLimitedStreamsIDs: this.newLimitedStreamsIDs.value,\r\n      activeSounds: this.activeSounds.value,\r\n      screenShareIDStream: this.screenShareIDStream.value,\r\n      screenShareNameStream: this.screenShareNameStream.value,\r\n      adminIDStream: this.adminIDStream.value,\r\n      adminNameStream: this.adminNameStream.value,\r\n      youYouStream: this.youYouStream.value,\r\n      youYouStreamIDs: this.youYouStreamIDs.value,\r\n      localStream: this.localStream.value,\r\n      recordStarted: this.recordStarted.value,\r\n      recordResumed: this.recordResumed.value,\r\n      recordPaused: this.recordPaused.value,\r\n      recordStopped: this.recordStopped.value,\r\n      adminRestrictSetting: this.adminRestrictSetting.value,\r\n      videoRequestState: this.videoRequestState.value,\r\n      videoRequestTime: this.videoRequestTime.value,\r\n      videoAction: this.videoAction.value,\r\n      localStreamVideo: this.localStreamVideo.value,\r\n      userDefaultVideoInputDevice: this.userDefaultVideoInputDevice.value,\r\n      currentFacingMode: this.currentFacingMode.value,\r\n      prevFacingMode: this.prevFacingMode.value,\r\n      defVideoID: this.defVideoID.value,\r\n      allowed: this.allowed.value,\r\n      dispActiveNames: this.dispActiveNames.value,\r\n      p_dispActiveNames: this.p_dispActiveNames.value,\r\n      activeNames: this.activeNames.value,\r\n      prevActiveNames: this.prevActiveNames.value,\r\n      p_activeNames: this.p_activeNames.value,\r\n      membersReceived: this.membersReceived.value,\r\n      deferScreenReceived: this.deferScreenReceived.value,\r\n      hostFirstSwitch: this.hostFirstSwitch.value,\r\n      micAction: this.micAction.value,\r\n      screenAction: this.screenAction.value,\r\n      chatAction: this.chatAction.value,\r\n      audioRequestState: this.audioRequestState.value,\r\n      screenRequestState: this.screenRequestState.value,\r\n      chatRequestState: this.chatRequestState.value,\r\n      audioRequestTime: this.audioRequestTime.value,\r\n      screenRequestTime: this.screenRequestTime.value,\r\n      chatRequestTime: this.chatRequestTime.value,\r\n      updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\r\n      oldSoundIds: this.oldSoundIds.value,\r\n      hostLabel: this.hostLabel.value,\r\n      mainScreenFilled: this.mainScreenFilled.value,\r\n      localStreamScreen: this.localStreamScreen.value,\r\n      screenAlreadyOn: this.screenAlreadyOn.value,\r\n      chatAlreadyOn: this.chatAlreadyOn.value,\r\n      redirectURL: this.redirectURL.value,\r\n      oldAllStreams: this.oldAllStreams.value,\r\n      adminVidID: this.adminVidID.value,\r\n      streamNames: this.streamNames.value,\r\n      non_alVideoStreams: this.non_alVideoStreams.value,\r\n      sortAudioLoudness: this.sortAudioLoudness.value,\r\n      audioDecibels: this.audioDecibels.value,\r\n      mixed_alVideoStreams: this.mixed_alVideoStreams.value,\r\n      non_alVideoStreams_muted: this.non_alVideoStreams_muted.value,\r\n      paginatedStreams: this.paginatedStreams.value,\r\n      localStreamAudio: this.localStreamAudio.value,\r\n      defAudioID: this.defAudioID.value,\r\n      userDefaultAudioInputDevice: this.userDefaultAudioInputDevice.value,\r\n      userDefaultAudioOutputDevice: this.userDefaultAudioOutputDevice.value,\r\n      prevAudioInputDevice: this.prevAudioInputDevice.value,\r\n      prevVideoInputDevice: this.prevVideoInputDevice.value,\r\n      audioPaused: this.audioPaused.value,\r\n      mainScreenPerson: this.mainScreenPerson.value,\r\n      adminOnMainScreen: this.adminOnMainScreen.value,\r\n      screenStates: this.screenStates.value,\r\n      prevScreenStates: this.prevScreenStates.value,\r\n      updateDateState: this.updateDateState.value,\r\n      lastUpdate: this.lastUpdate.value,\r\n      nForReadjustRecord: this.nForReadjustRecord.value,\r\n      fixedPageLimit: this.fixedPageLimit.value,\r\n      removeAltGrid: this.removeAltGrid.value,\r\n      nForReadjust: this.nForReadjust.value,\r\n      lastReorderTime: this.lastReorderTime.value,\r\n      reorderInterval: this.reorderInterval.value,\r\n      fastReorderInterval: this.fastReorderInterval.value,\r\n      audStreamNames: this.audStreamNames.value,\r\n      currentUserPage: this.currentUserPage.value,\r\n      mainHeightWidth: this.mainHeightWidth.value,\r\n      prevMainHeightWidth: this.prevMainHeightWidth.value,\r\n      prevDoPaginate: this.prevDoPaginate.value,\r\n      doPaginate: this.doPaginate.value,\r\n      shareEnded: this.shareEnded.value,\r\n      lStreams: this.lStreams.value,\r\n      chatRefStreams: this.chatRefStreams.value,\r\n      controlHeight: this.controlHeight.value,\r\n      isWideScreen: this.isWideScreen.value,\r\n      isMediumScreen: this.isMediumScreen.value,\r\n      isSmallScreen: this.isSmallScreen.value,\r\n      addGrid: this.addGrid.value,\r\n      addAltGrid: this.addAltGrid.value,\r\n      gridRows: this.gridRows.value,\r\n      gridCols: this.gridCols.value,\r\n      altGridRows: this.altGridRows.value,\r\n      altGridCols: this.altGridCols.value,\r\n      numberPages: this.numberPages.value,\r\n      currentStreams: this.currentStreams.value,\r\n      showMiniView: this.showMiniView.value,\r\n      nStream: this.nStream.value,\r\n      defer_receive: this.defer_receive.value,\r\n      allAudioStreams: this.allAudioStreams.value,\r\n      screenProducer: this.screenProducer.value,\r\n      remoteScreenStream: this.remoteScreenStream.value,\r\n      gotAllVids: this.gotAllVids.value,\r\n      paginationHeightWidth: this.paginationHeightWidth.value,\r\n      paginationDirection: this.paginationDirection.value,\r\n      gridSizes: this.gridSizes.value,\r\n      screenForceFullDisplay: this.screenForceFullDisplay.value,\r\n      mainGridStream: this.mainGridStream.value,\r\n      otherGridStreams: this.otherGridStreams.value,\r\n      audioOnlyStreams: this.audioOnlyStreams.value,\r\n      videoInputs: this.videoInputs.value,\r\n      audioInputs: this.audioInputs.value,\r\n      meetingProgressTime: this.meetingProgressTime.value,\r\n      meetingElapsedTime: this.meetingElapsedTime.value,\r\n\r\n      ref_participants: this.ref_participants.value,\r\n\r\n      messages: this.messages.value,\r\n      startDirectMessage: this.startDirectMessage.value,\r\n      directMessageDetails: this.directMessageDetails.value,\r\n      coHost: this.coHost.value,\r\n      coHostResponsibility: this.coHostResponsibility.value,\r\n\r\n      // Event settings\r\n      audioSetting: this.audioSetting.value,\r\n      videoSetting: this.videoSetting.value,\r\n      screenshareSetting: this.screenshareSetting.value,\r\n      chatSetting: this.chatSetting.value,\r\n\r\n      // Display settings\r\n      autoWave: this.autoWave.value,\r\n      forceFullDisplay: this.forceFullDisplay.value,\r\n      prevForceFullDisplay: this.prevForceFullDisplay.value,\r\n      prevMeetingDisplayType: this.prevMeetingDisplayType.value,\r\n\r\n      // Waiting room\r\n      waitingRoomFilter: this.waitingRoomFilter.value,\r\n      waitingRoomList: this.waitingRoomList.value,\r\n      waitingRoomCounter: this.waitingRoomCounter.value,\r\n      filteredWaitingRoomList: this.filteredWaitingRoomList.value,\r\n\r\n      // Requests\r\n      requestFilter: this.requestFilter.value,\r\n      requestList: this.requestList.value,\r\n      requestCounter: this.requestCounter.value,\r\n      filteredRequestList: this.filteredRequestList.value,\r\n\r\n      // Total requests and waiting room\r\n      totalReqWait: this.totalReqWait.value,\r\n\r\n      // Alerts\r\n      alertVisible: this.alertVisible.value,\r\n      alertMessage: this.alertMessage.value,\r\n      alertType: this.alertType.value,\r\n      alertDuration: this.alertDuration.value,\r\n\r\n      // Progress Timer\r\n      progressTimerVisible: this.progressTimerVisible.value,\r\n      progressTimerValue: this.progressTimerValue.value,\r\n\r\n      // Menu modals\r\n      isMenuModalVisible: this.isMenuModalVisible.value,\r\n      isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n      isSettingsModalVisible: this.isSettingsModalVisible.value,\r\n      isRequestsModalVisible: this.isRequestsModalVisible.value,\r\n      isWaitingModalVisible: this.isWaitingModalVisible.value,\r\n      isCoHostModalVisible: this.isCoHostModalVisible.value,\r\n      isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\r\n      isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\r\n\r\n      // Other Modals\r\n      isParticipantsModalVisible: this.isParticipantsModalVisible.value,\r\n      isMessagesModalVisible: this.isMessagesModalVisible.value,\r\n      isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\r\n      isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\r\n      isLoadingModalVisible: this.isLoadingModalVisible.value,\r\n\r\n      // Recording Options\r\n      recordingMediaOptions: this.recordingMediaOptions.value,\r\n      recordingAudioOptions: this.recordingAudioOptions.value,\r\n      recordingVideoOptions: this.recordingVideoOptions.value,\r\n      recordingVideoType: this.recordingVideoType.value,\r\n      recordingVideoOptimized: this.recordingVideoOptimized.value,\r\n      recordingDisplayType: this.recordingDisplayType.value,\r\n      recordingAddHLS: this.recordingAddHLS.value,\r\n      recordingAddText: this.recordingAddText.value,\r\n      recordingCustomText: this.recordingCustomText.value,\r\n      recordingCustomTextPosition: this.recordingCustomTextPosition.value,\r\n      recordingCustomTextColor: this.recordingCustomTextColor.value,\r\n      recordingNameTags: this.recordingNameTags.value,\r\n      recordingBackgroundColor: this.recordingBackgroundColor.value,\r\n      recordingNameTagsColor: this.recordingNameTagsColor.value,\r\n      recordingOrientationVideo: this.recordingOrientationVideo.value,\r\n      clearedToResume: this.clearedToResume.value,\r\n      clearedToRecord: this.clearedToRecord.value,\r\n      recordState: this.recordState.value,\r\n      showRecordButtons: this.showRecordButtons.value,\r\n      recordingProgressTime: this.recordingProgressTime.value,\r\n      audioSwitching: this.audioSwitching.value,\r\n      videoSwitching: this.videoSwitching.value,\r\n\r\n      // Media states\r\n      videoAlreadyOn: this.videoAlreadyOn.value,\r\n      audioAlreadyOn: this.audioAlreadyOn.value,\r\n      componentSizes: this.componentSizes.value,\r\n\r\n      // Permissions\r\n      hasCameraPermission: this.hasCameraPermission.value,\r\n      hasAudioPermission: this.hasAudioPermission.value,\r\n\r\n      // Transports\r\n      transportCreated: this.transportCreated.value,\r\n      localTransportCreated: this.localTransportCreated.value,\r\n      transportCreatedVideo: this.transportCreatedVideo.value,\r\n      transportCreatedAudio: this.transportCreatedAudio.value,\r\n      transportCreatedScreen: this.transportCreatedScreen.value,\r\n      producerTransport: this.producerTransport.value,\r\n      localProducerTransport: this.localProducerTransport.value,\r\n      videoProducer: this.videoProducer.value,\r\n      localVideoProducer: this.localVideoProducer.value,\r\n      params: this.params.value,\r\n      videoParams: this.videoParams.value,\r\n      audioParams: this.audioParams.value,\r\n      audioProducer: this.audioProducer.value,\r\n      audioLevel: this.audioLevel.value,\r\n      localAudioProducer: this.localAudioProducer.value,\r\n      consumerTransports: this.consumerTransports.value,\r\n      consumingTransports: this.consumingTransports.value,\r\n\r\n      // Polls\r\n      polls: this.polls.value,\r\n      poll: this.poll.value,\r\n      isPollModalVisible: this.isPollModalVisible.value,\r\n\r\n      // Background\r\n      customImage: this.customImage.value,\r\n      selectedImage: this.selectedImage.value,\r\n      segmentVideo: this.segmentVideo.value,\r\n      selfieSegmentation: this.selfieSegmentation.value,\r\n      pauseSegmentation: this.pauseSegmentation.value,\r\n      processedStream: this.processedStream.value,\r\n      keepBackground: this.keepBackground.value,\r\n      backgroundHasChanged: this.backgroundHasChanged.value,\r\n      virtualStream: this.virtualStream.value,\r\n      mainCanvas: this.mainCanvas.value,\r\n      prevKeepBackground: this.prevKeepBackground.value,\r\n      appliedBackground: this.appliedBackground.value,\r\n      isBackgroundModalVisible: this.isBackgroundModalVisible.value,\r\n      autoClickBackground: this.autoClickBackground.value,\r\n\r\n      // Breakout rooms\r\n      breakoutRooms: this.breakoutRooms.value,\r\n      currentRoomIndex: this.currentRoomIndex.value,\r\n      canStartBreakout: this.canStartBreakout.value,\r\n      breakOutRoomStarted: this.breakOutRoomStarted.value,\r\n      breakOutRoomEnded: this.breakOutRoomEnded.value,\r\n      hostNewRoom: this.hostNewRoom.value,\r\n      limitedBreakRoom: this.limitedBreakRoom.value,\r\n      mainRoomsLength: this.mainRoomsLength.value,\r\n      memberRoom: this.memberRoom.value,\r\n      isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\r\n\r\n      // Whiteboard\r\n      whiteboardUsers: this.whiteboardUsers.value,\r\n      currentWhiteboardIndex: this.currentWhiteboardIndex.value,\r\n      canStartWhiteboard: this.canStartWhiteboard.value,\r\n      whiteboardStarted: this.whiteboardStarted.value,\r\n      whiteboardEnded: this.whiteboardEnded.value,\r\n      whiteboardLimit: this.whiteboardLimit.value,\r\n      isWhiteboardModalVisible: this.isWhiteboardModalVisible.value,\r\n      isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\r\n      shapes: this.shapes.value,\r\n      useImageBackground: this.useImageBackground.value,\r\n      redoStack: this.redoStack.value,\r\n      undoStack: this.undoStack.value,\r\n      canvasStream: this.canvasStream.value,\r\n      canvasWhiteboard: this.canvasWhiteboard.value,\r\n\r\n      // Screenboard\r\n      canvasScreenboard: this.canvasScreenboard.value,\r\n      processedScreenStream: this.processedScreenStream.value,\r\n      annotateScreenStream: this.annotateScreenStream.value,\r\n      mainScreenCanvas: this.mainScreenCanvas.value,\r\n      isScreenboardModalVisible: this.isScreenboardModalVisible.value,\r\n\r\n      validated: this.validated.value,\r\n      device: this.device.value,\r\n      socket: this.socket.value,\r\n      localSocket: this.localSocket!.value,\r\n      checkMediaPermission: false,\r\n      onWeb: true,\r\n\r\n      // Update functions\r\n      updateRoomName: this.updateRoomName.bind(this),\r\n      updateMember: this.updateMember.bind(this),\r\n      updateAdminPasscode: this.updateAdminPasscode.bind(this),\r\n      updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\r\n      updateYouAreHost: this.updateYouAreHost.bind(this),\r\n      updateIslevel: this.updateIslevel.bind(this),\r\n      updateCoHost: this.updateCoHost.bind(this),\r\n      updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\r\n      updateConfirmedToRecord: this.updateConfirmedToRecord.bind(this),\r\n      updateMeetingDisplayType: this.updateMeetingDisplayType.bind(this),\r\n      updateMeetingVideoOptimized: this.updateMeetingVideoOptimized.bind(this),\r\n      updateEventType: this.updateEventType.bind(this),\r\n      updateParticipants: this.updateParticipants.bind(this),\r\n      updateParticipantsCounter: this.updateParticipantsCounter.bind(this),\r\n      updateParticipantsFilter: this.updateParticipantsFilter.bind(this),\r\n\r\n      // More update functions for media details\r\n      updateConsume_sockets: this.updateConsume_sockets.bind(this),\r\n      updateRtpCapabilities: this.updateRtpCapabilities.bind(this),\r\n      updateRoomRecvIPs: this.updateRoomRecvIPs.bind(this),\r\n      updateMeetingRoomParams: this.updateMeetingRoomParams.bind(this),\r\n      updateItemPageLimit: this.updateItemPageLimit.bind(this),\r\n      updateAudioOnlyRoom: this.updateAudioOnlyRoom.bind(this),\r\n      updateAddForBasic: this.updateAddForBasic.bind(this),\r\n      updateScreenPageLimit: this.updateScreenPageLimit.bind(this),\r\n      updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\r\n      updateShared: this.updateShared.bind(this),\r\n      updateTargetOrientation: this.updateTargetOrientation.bind(this),\r\n      updateTargetResolution: this.updateTargetResolution.bind(this),\r\n      updateTargetResolutionHost: this.updateTargetResolutionHost.bind(this),\r\n      updateVidCons: this.updateVidCons.bind(this),\r\n      updateFrameRate: this.updateFrameRate.bind(this),\r\n      updateHParams: this.updateHParams.bind(this),\r\n      updateVParams: this.updateVParams.bind(this),\r\n      updateScreenParams: this.updateScreenParams.bind(this),\r\n      updateAParams: this.updateAParams.bind(this),\r\n\r\n      // More update functions for recording details\r\n      updateRecordingAudioPausesLimit: this.updateRecordingAudioPausesLimit.bind(this),\r\n      updateRecordingAudioPausesCount: this.updateRecordingAudioPausesCount.bind(this),\r\n      updateRecordingAudioSupport: this.updateRecordingAudioSupport.bind(this),\r\n      updateRecordingAudioPeopleLimit: this.updateRecordingAudioPeopleLimit.bind(this),\r\n      updateRecordingAudioParticipantsTimeLimit:\r\n        this.updateRecordingAudioParticipantsTimeLimit.bind(this),\r\n      updateRecordingVideoPausesCount: this.updateRecordingVideoPausesCount.bind(this),\r\n      updateRecordingVideoPausesLimit: this.updateRecordingVideoPausesLimit.bind(this),\r\n      updateRecordingVideoSupport: this.updateRecordingVideoSupport.bind(this),\r\n      updateRecordingVideoPeopleLimit: this.updateRecordingVideoPeopleLimit.bind(this),\r\n      updateRecordingVideoParticipantsTimeLimit:\r\n        this.updateRecordingVideoParticipantsTimeLimit.bind(this),\r\n      updateRecordingAllParticipantsSupport: this.updateRecordingAllParticipantsSupport.bind(this),\r\n      updateRecordingVideoParticipantsSupport:\r\n        this.updateRecordingVideoParticipantsSupport.bind(this),\r\n      updateRecordingAllParticipantsFullRoomSupport:\r\n        this.updateRecordingAllParticipantsFullRoomSupport.bind(this),\r\n      updateRecordingVideoParticipantsFullRoomSupport:\r\n        this.updateRecordingVideoParticipantsFullRoomSupport.bind(this),\r\n      updateRecordingPreferredOrientation: this.updateRecordingPreferredOrientation.bind(this),\r\n      updateRecordingSupportForOtherOrientation:\r\n        this.updateRecordingSupportForOtherOrientation.bind(this),\r\n      updateRecordingMultiFormatsSupport: this.updateRecordingMultiFormatsSupport.bind(this),\r\n\r\n      updateUserRecordingParams: this.updateUserRecordingParams.bind(this),\r\n      updateCanRecord: this.updateCanRecord.bind(this),\r\n      updateStartReport: this.updateStartReport.bind(this),\r\n      updateEndReport: this.updateEndReport.bind(this),\r\n      updateRecordTimerInterval: this.updateRecordTimerInterval.bind(this),\r\n      updateRecordStartTime: this.updateRecordStartTime.bind(this),\r\n      updateRecordElapsedTime: this.updateRecordElapsedTime.bind(this),\r\n      updateIsTimerRunning: this.updateIsTimerRunning.bind(this),\r\n      updateCanPauseResume: this.updateCanPauseResume.bind(this),\r\n      updateRecordChangeSeconds: this.updateRecordChangeSeconds.bind(this),\r\n      updatePauseLimit: this.updatePauseLimit.bind(this),\r\n      updatePauseRecordCount: this.updatePauseRecordCount.bind(this),\r\n      updateCanLaunchRecord: this.updateCanLaunchRecord.bind(this),\r\n      updateStopLaunchRecord: this.updateStopLaunchRecord.bind(this),\r\n\r\n      updateParticipantsAll: this.updateParticipantsAll.bind(this),\r\n\r\n      updateFirstAll: this.updateFirstAll.bind(this),\r\n      updateUpdateMainWindow: this.updateUpdateMainWindow.bind(this),\r\n      updateFirst_round: this.updateFirst_round.bind(this),\r\n      updateLandScaped: this.updateLandScaped.bind(this),\r\n      updateLock_screen: this.updateLock_screen.bind(this),\r\n      updateScreenId: this.updateScreenId.bind(this),\r\n      updateAllVideoStreams: this.updateAllVideoStreams.bind(this),\r\n      updateNewLimitedStreams: this.updateNewLimitedStreams.bind(this),\r\n      updateNewLimitedStreamsIDs: this.updateNewLimitedStreamsIDs.bind(this),\r\n      updateActiveSounds: this.updateActiveSounds.bind(this),\r\n      updateScreenShareIDStream: this.updateScreenShareIDStream.bind(this),\r\n      updateScreenShareNameStream: this.updateScreenShareNameStream.bind(this),\r\n      updateAdminIDStream: this.updateAdminIDStream.bind(this),\r\n      updateAdminNameStream: this.updateAdminNameStream.bind(this),\r\n      updateYouYouStream: this.updateYouYouStream.bind(this),\r\n      updateYouYouStreamIDs: this.updateYouYouStreamIDs.bind(this),\r\n      updateLocalStream: this.updateLocalStream.bind(this),\r\n      updateRecordStarted: this.updateRecordStarted.bind(this),\r\n      updateRecordResumed: this.updateRecordResumed.bind(this),\r\n      updateRecordPaused: this.updateRecordPaused.bind(this),\r\n      updateRecordStopped: this.updateRecordStopped.bind(this),\r\n      updateAdminRestrictSetting: this.updateAdminRestrictSetting.bind(this),\r\n      updateVideoRequestState: this.updateVideoRequestState.bind(this),\r\n      updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\r\n      updateVideoAction: this.updateVideoAction.bind(this),\r\n      updateLocalStreamVideo: this.updateLocalStreamVideo.bind(this),\r\n      updateUserDefaultVideoInputDevice: this.updateUserDefaultVideoInputDevice.bind(this),\r\n      updateCurrentFacingMode: this.updateCurrentFacingMode.bind(this),\r\n      updatePrevFacingMode: this.updatePrevFacingMode.bind(this),\r\n      updateDefVideoID: this.updateDefVideoID.bind(this),\r\n      updateAllowed: this.updateAllowed.bind(this),\r\n      updateDispActiveNames: this.updateDispActiveNames.bind(this),\r\n      updateP_dispActiveNames: this.updateP_dispActiveNames.bind(this),\r\n      updateActiveNames: this.updateActiveNames.bind(this),\r\n      updatePrevActiveNames: this.updatePrevActiveNames.bind(this),\r\n      updateP_activeNames: this.updateP_activeNames.bind(this),\r\n      updateMembersReceived: this.updateMembersReceived.bind(this),\r\n      updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\r\n      updateHostFirstSwitch: this.updateHostFirstSwitch.bind(this),\r\n      updateMicAction: this.updateMicAction.bind(this),\r\n      updateScreenAction: this.updateScreenAction.bind(this),\r\n      updateChatAction: this.updateChatAction.bind(this),\r\n      updateAudioRequestState: this.updateAudioRequestState.bind(this),\r\n      updateScreenRequestState: this.updateScreenRequestState.bind(this),\r\n      updateChatRequestState: this.updateChatRequestState.bind(this),\r\n      updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\r\n      updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\r\n      updateChatRequestTime: this.updateChatRequestTime.bind(this),\r\n      updateOldSoundIds: this.updateOldSoundIds.bind(this),\r\n      updateHostLabel: this.updateHostLabel.bind(this),\r\n      updateMainScreenFilled: this.updateMainScreenFilled.bind(this),\r\n      updateLocalStreamScreen: this.updateLocalStreamScreen.bind(this),\r\n      updateScreenAlreadyOn: this.updateScreenAlreadyOn.bind(this),\r\n      updateChatAlreadyOn: this.updateChatAlreadyOn.bind(this),\r\n      updateRedirectURL: this.updateRedirectURL.bind(this),\r\n      updateOldAllStreams: this.updateOldAllStreams.bind(this),\r\n      updateAdminVidID: this.updateAdminVidID.bind(this),\r\n      updateStreamNames: this.updateStreamNames.bind(this),\r\n      updateNon_alVideoStreams: this.updateNon_alVideoStreams.bind(this),\r\n      updateSortAudioLoudness: this.updateSortAudioLoudness.bind(this),\r\n      updateAudioDecibels: this.updateAudioDecibels.bind(this),\r\n      updateMixed_alVideoStreams: this.updateMixed_alVideoStreams.bind(this),\r\n      updateNon_alVideoStreams_muted: this.updateNon_alVideoStreams_muted.bind(this),\r\n      updatePaginatedStreams: this.updatePaginatedStreams.bind(this),\r\n      updateLocalStreamAudio: this.updateLocalStreamAudio.bind(this),\r\n      updateDefAudioID: this.updateDefAudioID.bind(this),\r\n      updateUserDefaultAudioInputDevice: this.updateUserDefaultAudioInputDevice.bind(this),\r\n      updateUserDefaultAudioOutputDevice: this.updateUserDefaultAudioOutputDevice.bind(this),\r\n      updatePrevAudioInputDevice: this.updatePrevAudioInputDevice.bind(this),\r\n      updatePrevVideoInputDevice: this.updatePrevVideoInputDevice.bind(this),\r\n      updateAudioPaused: this.updateAudioPaused.bind(this),\r\n      updateMainScreenPerson: this.updateMainScreenPerson.bind(this),\r\n      updateAdminOnMainScreen: this.updateAdminOnMainScreen.bind(this),\r\n      updateScreenStates: this.updateScreenStates.bind(this),\r\n      updatePrevScreenStates: this.updatePrevScreenStates.bind(this),\r\n      updateUpdateDateState: this.updateUpdateDateState.bind(this),\r\n      updateLastUpdate: this.updateLastUpdate.bind(this),\r\n      updateNForReadjustRecord: this.updateNForReadjustRecord.bind(this),\r\n      updateFixedPageLimit: this.updateFixedPageLimit.bind(this),\r\n      updateRemoveAltGrid: this.updateRemoveAltGrid.bind(this),\r\n      updateNForReadjust: this.updateNForReadjust.bind(this),\r\n      updateLastReorderTime: this.updateLastReorderTime.bind(this),\r\n      updateAudStreamNames: this.updateAudStreamNames.bind(this),\r\n      updateCurrentUserPage: this.updateCurrentUserPage.bind(this),\r\n      updateMainHeightWidth: this.updateMainHeightWidth.bind(this),\r\n      updatePrevMainHeightWidth: this.updatePrevMainHeightWidth.bind(this),\r\n      updatePrevDoPaginate: this.updatePrevDoPaginate.bind(this),\r\n      updateDoPaginate: this.updateDoPaginate.bind(this),\r\n      updateShareEnded: this.updateShareEnded.bind(this),\r\n      updateLStreams: this.updateLStreams.bind(this),\r\n      updateChatRefStreams: this.updateChatRefStreams.bind(this),\r\n      updateControlHeight: this.updateControlHeight.bind(this),\r\n      updateIsWideScreen: this.updateIsWideScreen.bind(this),\r\n      updateIsMediumScreen: this.updateIsMediumScreen.bind(this),\r\n      updateIsSmallScreen: this.updateIsSmallScreen.bind(this),\r\n      updateAddGrid: this.updateAddGrid.bind(this),\r\n      updateAddAltGrid: this.updateAddAltGrid.bind(this),\r\n      updateGridRows: this.updateGridRows.bind(this),\r\n      updateGridCols: this.updateGridCols.bind(this),\r\n      updateAltGridRows: this.updateAltGridRows.bind(this),\r\n      updateAltGridCols: this.updateAltGridCols.bind(this),\r\n      updateNumberPages: this.updateNumberPages.bind(this),\r\n      updateCurrentStreams: this.updateCurrentStreams.bind(this),\r\n      updateShowMiniView: this.updateShowMiniView.bind(this),\r\n      updateNStream: this.updateNStream.bind(this),\r\n      updateDefer_receive: this.updateDefer_receive.bind(this),\r\n      updateAllAudioStreams: this.updateAllAudioStreams.bind(this),\r\n      updateRemoteScreenStream: this.updateRemoteScreenStream.bind(this),\r\n      updateScreenProducer: this.updateScreenProducer.bind(this),\r\n      updateGotAllVids: this.updateGotAllVids.bind(this),\r\n      updatePaginationHeightWidth: this.updatePaginationHeightWidth.bind(this),\r\n      updatePaginationDirection: this.updatePaginationDirection.bind(this),\r\n      updateGridSizes: this.updateGridSizes.bind(this),\r\n      updateScreenForceFullDisplay: this.updateScreenForceFullDisplay.bind(this),\r\n      updateMainGridStream: this.updateMainGridStream.bind(this),\r\n      updateOtherGridStreams: this.updateOtherGridStreams.bind(this),\r\n      updateAudioOnlyStreams: this.updateAudioOnlyStreams.bind(this),\r\n      updateVideoInputs: this.updateVideoInputs.bind(this),\r\n      updateAudioInputs: this.updateAudioInputs.bind(this),\r\n      updateMeetingProgressTime: this.updateMeetingProgressTime.bind(this),\r\n      updateMeetingElapsedTime: this.updateMeetingElapsedTime.bind(this),\r\n      updateRef_participants: this.updateRef_participants.bind(this),\r\n\r\n      updateMessages: this.updateMessages.bind(this),\r\n      updateStartDirectMessage: this.updateStartDirectMessage.bind(this),\r\n      updateDirectMessageDetails: this.updateDirectMessageDetails.bind(this),\r\n      updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\r\n\r\n      // Event settings\r\n      updateAudioSetting: this.updateAudioSetting.bind(this),\r\n      updateVideoSetting: this.updateVideoSetting.bind(this),\r\n      updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\r\n      updateChatSetting: this.updateChatSetting.bind(this),\r\n\r\n      // Display settings\r\n      updateAutoWave: this.updateAutoWave.bind(this),\r\n      updateForceFullDisplay: this.updateForceFullDisplay.bind(this),\r\n      updatePrevForceFullDisplay: this.updatePrevForceFullDisplay.bind(this),\r\n      updatePrevMeetingDisplayType: this.updatePrevMeetingDisplayType.bind(this),\r\n\r\n      // Waiting room\r\n      updateWaitingRoomFilter: this.updateWaitingRoomFilter.bind(this),\r\n      updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\r\n      updateWaitingRoomCounter: this.updateWaitingRoomCounter.bind(this),\r\n\r\n      // Requests\r\n      updateRequestFilter: this.updateRequestFilter.bind(this),\r\n      updateRequestList: this.updateRequestList.bind(this),\r\n      updateRequestCounter: this.updateRequestCounter.bind(this),\r\n\r\n      // Total requests and waiting room\r\n      updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n\r\n      // Menu modals\r\n      updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\r\n      updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n      updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\r\n      updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\r\n      updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\r\n      updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\r\n      updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\r\n      updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\r\n\r\n      // Other modals\r\n      updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\r\n      updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\r\n      updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\r\n      updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\r\n      updateIsLoadingModalVisible: this.updateIsLoadingModalVisible.bind(this),\r\n\r\n      // Recording Options\r\n      updateRecordingMediaOptions: this.updateRecordingMediaOptions.bind(this),\r\n      updateRecordingAudioOptions: this.updateRecordingAudioOptions.bind(this),\r\n      updateRecordingVideoOptions: this.updateRecordingVideoOptions.bind(this),\r\n      updateRecordingVideoType: this.updateRecordingVideoType.bind(this),\r\n      updateRecordingVideoOptimized: this.updateRecordingVideoOptimized.bind(this),\r\n      updateRecordingDisplayType: this.updateRecordingDisplayType.bind(this),\r\n      updateRecordingAddHLS: this.updateRecordingAddHLS.bind(this),\r\n      updateRecordingAddText: this.updateRecordingAddText.bind(this),\r\n      updateRecordingCustomText: this.updateRecordingCustomText.bind(this),\r\n      updateRecordingCustomTextPosition: this.updateRecordingCustomTextPosition.bind(this),\r\n      updateRecordingCustomTextColor: this.updateRecordingCustomTextColor.bind(this),\r\n      updateRecordingNameTags: this.updateRecordingNameTags.bind(this),\r\n      updateRecordingBackgroundColor: this.updateRecordingBackgroundColor.bind(this),\r\n      updateRecordingNameTagsColor: this.updateRecordingNameTagsColor.bind(this),\r\n      updateRecordingOrientationVideo: this.updateRecordingOrientationVideo.bind(this),\r\n      updateClearedToResume: this.updateClearedToResume.bind(this),\r\n      updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n      updateRecordState: this.updateRecordState.bind(this),\r\n      updateShowRecordButtons: this.updateShowRecordButtons.bind(this),\r\n      updateRecordingProgressTime: this.updateRecordingProgressTime.bind(this),\r\n      updateAudioSwitching: this.updateAudioSwitching.bind(this),\r\n      updateVideoSwitching: this.updateVideoSwitching.bind(this),\r\n\r\n      // Media states\r\n      updateVideoAlreadyOn: this.updateVideoAlreadyOn.bind(this),\r\n      updateAudioAlreadyOn: this.updateAudioAlreadyOn.bind(this),\r\n      updateComponentSizes: this.updateComponentSizes.bind(this),\r\n\r\n      // Permissions\r\n      updateHasCameraPermission: this.updateHasCameraPermission.bind(this),\r\n      updateHasAudioPermission: this.updateHasAudioPermission.bind(this),\r\n\r\n      // Transports\r\n      updateTransportCreated: this.updateTransportCreated.bind(this),\r\n      updateLocalTransportCreated: this.updateLocalTransportCreated.bind(this),\r\n      updateTransportCreatedVideo: this.updateTransportCreatedVideo.bind(this),\r\n      updateTransportCreatedAudio: this.updateTransportCreatedAudio.bind(this),\r\n      updateTransportCreatedScreen: this.updateTransportCreatedScreen.bind(this),\r\n      updateProducerTransport: this.updateProducerTransport.bind(this),\r\n      updateLocalProducerTransport: this.updateLocalProducerTransport.bind(this),\r\n      updateVideoProducer: this.updateVideoProducer.bind(this),\r\n      updateLocalVideoProducer: this.updateLocalVideoProducer.bind(this),\r\n      updateParams: this.updateParams.bind(this),\r\n      updateVideoParams: this.updateVideoParams.bind(this),\r\n      updateAudioParams: this.updateAudioParams.bind(this),\r\n      updateAudioProducer: this.updateAudioProducer.bind(this),\r\n      updateAudioLevel: this.updateAudioLevel.bind(this),\r\n      updateLocalAudioProducer: this.updateLocalAudioProducer.bind(this),\r\n      updateConsumerTransports: this.updateConsumerTransports.bind(this),\r\n      updateConsumingTransports: this.updateConsumingTransports.bind(this),\r\n\r\n      // Polls\r\n      updatePolls: this.updatePolls.bind(this),\r\n      updatePoll: this.updatePoll.bind(this),\r\n      updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\r\n\r\n      // Background\r\n      updateCustomImage: this.updateCustomImage.bind(this),\r\n      updateSelectedImage: this.updateSelectedImage.bind(this),\r\n      updateSegmentVideo: this.updateSegmentVideo.bind(this),\r\n      updateSelfieSegmentation: this.updateSelfieSegmentation.bind(this),\r\n      updatePauseSegmentation: this.updatePauseSegmentation.bind(this),\r\n      updateProcessedStream: this.updateProcessedStream.bind(this),\r\n      updateKeepBackground: this.updateKeepBackground.bind(this),\r\n      updateBackgroundHasChanged: this.updateBackgroundHasChanged.bind(this),\r\n      updateVirtualStream: this.updateVirtualStream.bind(this),\r\n      updateMainCanvas: this.updateMainCanvas.bind(this),\r\n      updatePrevKeepBackground: this.updatePrevKeepBackground.bind(this),\r\n      updateAppliedBackground: this.updateAppliedBackground.bind(this),\r\n      updateIsBackgroundModalVisible: this.updateIsBackgroundModalVisible.bind(this),\r\n      updateAutoClickBackground: this.updateAutoClickBackground.bind(this),\r\n\r\n      // Breakout rooms\r\n      updateBreakoutRooms: this.updateBreakoutRooms.bind(this),\r\n      updateCurrentRoomIndex: this.updateCurrentRoomIndex.bind(this),\r\n      updateCanStartBreakout: this.updateCanStartBreakout.bind(this),\r\n      updateBreakOutRoomStarted: this.updateBreakOutRoomStarted.bind(this),\r\n      updateBreakOutRoomEnded: this.updateBreakOutRoomEnded.bind(this),\r\n      updateHostNewRoom: this.updateHostNewRoom.bind(this),\r\n      updateLimitedBreakRoom: this.updateLimitedBreakRoom.bind(this),\r\n      updateMainRoomsLength: this.updateMainRoomsLength.bind(this),\r\n      updateMemberRoom: this.updateMemberRoom.bind(this),\r\n      updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\r\n\r\n      // Whiteboard\r\n      updateWhiteboardUsers: this.updateWhiteboardUsers.bind(this),\r\n      updateCurrentWhiteboardIndex: this.updateCurrentWhiteboardIndex.bind(this),\r\n      updateCanStartWhiteboard: this.updateCanStartWhiteboard.bind(this),\r\n      updateWhiteboardStarted: this.updateWhiteboardStarted.bind(this),\r\n      updateWhiteboardEnded: this.updateWhiteboardEnded.bind(this),\r\n      updateWhiteboardLimit: this.updateWhiteboardLimit.bind(this),\r\n      updateIsWhiteboardModalVisible: this.updateIsWhiteboardModalVisible.bind(this),\r\n      updateIsConfigureWhiteboardModalVisible:\r\n        this.updateIsConfigureWhiteboardModalVisible.bind(this),\r\n      updateShapes: this.updateShapes.bind(this),\r\n      updateUseImageBackground: this.updateUseImageBackground.bind(this),\r\n      updateRedoStack: this.updateRedoStack.bind(this),\r\n      updateUndoStack: this.updateUndoStack.bind(this),\r\n      updateCanvasStream: this.updateCanvasStream.bind(this),\r\n      updateCanvasWhiteboard: this.updateCanvasWhiteboard.bind(this),\r\n\r\n      // Screenboard\r\n      updateCanvasScreenboard: this.updateCanvasScreenboard.bind(this),\r\n      updateProcessedScreenStream: this.updateProcessedScreenStream.bind(this),\r\n      updateAnnotateScreenStream: this.updateAnnotateScreenStream.bind(this),\r\n      updateMainScreenCanvas: this.updateMainScreenCanvas.bind(this),\r\n      updateIsScreenboardModalVisible: this.updateIsScreenboardModalVisible.bind(this),\r\n\r\n      // Other functions\r\n      checkOrientation: this.checkOrientation.bind(this),\r\n\r\n      updateDevice: this.updateDevice.bind(this),\r\n      updateSocket: this.updateSocket.bind(this),\r\n      updateLocalSocket: this.updateLocalSocket.bind(this),\r\n      updateValidated: this.updateValidated.bind(this),\r\n\r\n      showAlert: this.showAlert.bind(this),\r\n      getUpdatedAllParams: () => {\r\n\r\n        try {\r\n          if (this.sourceParameters !== null) {\r\n            this.sourceParameters = {\r\n              ...this.getAllParams(),\r\n              ...this.mediaSFUFunctions(),\r\n            };\r\n            if (this.updateSourceParameters) {\r\n              this.updateSourceParameters(this.sourceParameters);\r\n            }\r\n          }\r\n        } catch {\r\n          console.log('error updateSourceParameters');\r\n        }\r\n\r\n        return {\r\n          ...this.getAllParams(),\r\n          ...this.mediaSFUFunctions(),\r\n        };\r\n      },\r\n    };\r\n  }\r\n\r\n  mediaSFUParameters = {\r\n    ...this.getAllParams(),\r\n    ...this.mediaSFUFunctions(),\r\n  };\r\n\r\n  getUpdatedAllParams = () => {\r\n    return {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n  };\r\n\r\n  PrejoinPageComponent: any = {\r\n    component: this.PrejoinPage,\r\n    injector: null,\r\n  };\r\n\r\n  updatePrejoinPageComponent = () => {\r\n    const PrejoinComp = {\r\n      component: this.PrejoinPage,\r\n      injector: this.createInjector({\r\n        parameters: {\r\n          showAlert:\r\n            this.showAlert ||\r\n            (() => {\r\n              console.log('showAlert not defined');\r\n            }),\r\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\r\n          connectSocket: this.socketManager.connectSocket,\r\n          connectLocalSocket: this.socketManager.connectLocalSocket,\r\n          updateSocket: this.updateSocket,\r\n          updateLocalSocket: this.updateLocalSocket,\r\n          updateValidated: this.updateValidated,\r\n          updateApiUserName: this.updateApiUserName,\r\n          updateApiToken: this.updateApiToken,\r\n          updateLink: this.updateLink,\r\n          updateRoomName: this.updateRoomName,\r\n          updateMember: this.updateMember,\r\n        },\r\n        credentials: this.credentials,\r\n        localLink: this.localLink,\r\n        connectMediaSFU: this.connectMediaSFU,\r\n        returnUI: this.returnUI,\r\n        noUIPreJoinOptions: this.noUIPreJoinOptions,\r\n        joinMediaSFURoom: this.joinMediaSFURoom,\r\n        createMediaSFURoom: this.createMediaSFURoom,\r\n      }),\r\n    };\r\n\r\n    this.PrejoinPageComponent = { ...PrejoinComp };\r\n\r\n    this.cdr.detectChanges();\r\n  };\r\n\r\n  ngOnInit() {\r\n    if (this.PrejoinPage) {\r\n      this.updatePrejoinPageComponent();\r\n    }\r\n\r\n    this.setupResizeListener();\r\n    if (this.validated) {\r\n      this.connectAndAddSocketMethods();\r\n    }\r\n\r\n    this.mainHeightWidthSubscription = this.mainHeightWidth.subscribe(() => {\r\n      this.updateMainVideoSize();\r\n    });\r\n\r\n    this.recordingSubscription = combineLatest([\r\n      this.recordPaused,\r\n      this.recordStarted,\r\n      this.recordStopped,\r\n      this.recordResumed,\r\n      this.recordingProgressTime,\r\n      this.showRecordButtons,\r\n      this.islevel,\r\n    ]).subscribe(\r\n      ([\r\n        recordPaused,\r\n        recordStarted,\r\n        recordStopped,\r\n        recordResumed,\r\n        recordingProgressTime,\r\n        showRecordButtons,\r\n        islevel,\r\n      ]) => {\r\n        if (\r\n          recordPaused ||\r\n          recordStarted ||\r\n          recordStopped ||\r\n          recordResumed ||\r\n          recordingProgressTime ||\r\n          showRecordButtons ||\r\n          islevel\r\n        ) {\r\n          this.updateRecordButtons();\r\n        }\r\n      },\r\n    );\r\n    this.validatedSubscription = this.validated.subscribe((validated) => {\r\n      if (validated) {\r\n        this.handleValidated();\r\n      }\r\n    });\r\n    this.islevelSubscription = this.islevel.subscribe((islevel) => {\r\n      if (islevel) {\r\n        this.updateControlBroadcastButtons();\r\n      }\r\n    });\r\n    this.coHostSubscription = combineLatest([this.coHost, this.coHostResponsibility]).subscribe(\r\n      ([coHost, coHostResponsibility]) => {\r\n        if (coHost || coHostResponsibility) {\r\n          this.updateControlBroadcastButtons();\r\n        }\r\n      },\r\n    );\r\n\r\n    // Subscribe to changes in BehaviorSubject and update the buttons accordingly\r\n    this.buttonSubscriptions.push(\r\n      this.micActive.subscribe(() => {\r\n        this.updateControlBroadcastButtons();\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.videoActive.subscribe(() => {\r\n        this.updateControlBroadcastButtons();\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.participantsCounter.subscribe((value) => {\r\n        this.updateMenuParticipantsWidget(value);\r\n      }),\r\n    );\r\n\r\n    this.mediaSFUParameters = {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    window.removeEventListener('resize', this.handleResize);\r\n    window.removeEventListener('orientationchange', this.handleResize);\r\n    if (this.mainHeightWidthSubscription) {\r\n      this.mainHeightWidthSubscription.unsubscribe();\r\n    }\r\n    if (this.validatedSubscription) {\r\n      this.validatedSubscription.unsubscribe();\r\n    }\r\n    if (this.islevelSubscription) {\r\n      this.islevelSubscription.unsubscribe();\r\n    }\r\n    if (this.coHostSubscription) {\r\n      this.coHostSubscription.unsubscribe();\r\n    }\r\n    if (this.ScreenboardSubscription) {\r\n      this.ScreenboardSubscription.unsubscribe();\r\n    }\r\n    if (this.recordingSubscription) {\r\n      this.recordingSubscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n  updateMainVideoSize = async () => {\r\n    if (!this.lock_screen.value && !this.shared.value) {\r\n      this.prepopulateUserMedia.prepopulateUserMedia({\r\n        name: this.hostLabel.value,\r\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n      });\r\n    } else {\r\n      if (!this.first_round.value) {\r\n        this.prepopulateUserMedia.prepopulateUserMedia({\r\n          name: this.hostLabel.value,\r\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  async connectAndAddSocketMethods() {\r\n    this.mediaSFUParameters = {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n    const socket_ = await this.connect_Socket(this.apiUserName.value, this.apiToken.value);\r\n    if (socket_) {\r\n      this.updateSocket(socket_);\r\n    }\r\n  }\r\n\r\n  async handleValidated() {\r\n    this.updateAllVideoStreams([\r\n      { producerId: 'youyou', stream: undefined, id: 'youyou', name: 'youyou' },\r\n    ]);\r\n\r\n    this.updateStreamNames([{ id: 'youyou', name: 'youyou', producerId: '' }]);\r\n\r\n    if (this.validated.value) {\r\n\r\n      try {\r\n        if (!this.localUIMode.value) {\r\n          this.updateIsLoadingModalVisible(true);\r\n          await this.connectAndAddSocketMethods();\r\n        } else {\r\n          this.updateIsLoadingModalVisible(false);\r\n        }\r\n      } catch (error) {\r\n        console.log('error connectAndaAddSocketMethods', error);\r\n      }\r\n\r\n      this.startMeetingProgressTimer.startMeetingProgressTimer({\r\n        startTime: Date.now() / 1000,\r\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n      });\r\n\r\n      try {\r\n        if (this.sourceParameters !== null) {\r\n          this.sourceParameters = {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          };\r\n          if (this.updateSourceParameters) {\r\n            this.updateSourceParameters(this.sourceParameters);\r\n          }\r\n        }\r\n      } catch {\r\n        console.log('error updateSourceParameters');\r\n      }\r\n\r\n    }\r\n  }\r\n\r\n  @HostListener('window:resize')\r\n  @HostListener('window:orientationchange')\r\n  async handleResize() {\r\n    let fraction = 0;\r\n\r\n    if (\r\n      window.innerHeight < window.innerWidth &&\r\n      (this.eventType.value == 'webinar' || this.eventType.value == 'conference')\r\n    ) {\r\n      const currentHeight = window.innerHeight;\r\n      fraction = Number((40 / currentHeight).toFixed(3));\r\n      if (fraction != this.controlHeight.value) {\r\n        this.updateControlHeight(Number(fraction));\r\n      }\r\n    } else {\r\n      // Set default control button height for portrait mode or other event types\r\n      const currentHeight = window.innerHeight;\r\n      fraction = Number((40 / currentHeight).toFixed(3));\r\n      fraction = Number(fraction);\r\n      if (fraction != this.controlHeight.value) {\r\n        this.updateControlHeight(Number(fraction));\r\n      }\r\n    }\r\n\r\n    const dimensions = this.computeDimensionsMethod({\r\n      containerWidthFraction: 1,\r\n      containerHeightFraction: 1,\r\n      mainSize: this.mainHeightWidth.value,\r\n      doStack: true,\r\n      defaultFraction:\r\n        this.eventType.value == 'webinar' || this.eventType.value == 'conference'\r\n          ? 1 - fraction\r\n          : 1,\r\n    });\r\n\r\n    this.updateComponentSizes(dimensions);\r\n\r\n    const orientation = this.checkOrientation();\r\n    if (orientation == 'portrait') {\r\n      if (!this.isWideScreen.value) {\r\n        if (this.shareScreenStarted.value || this.shared.value) {\r\n          this.updateScreenForceFullDisplay(true);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Updates the main grid view\r\n    await this.prepopulateUserMedia.prepopulateUserMedia({\r\n      name: this.hostLabel.value,\r\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n    });\r\n    // Updates the mini grid view\r\n    await this.onScreenChanges.onScreenChanges({\r\n      changed: true,\r\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n    });\r\n  }\r\n\r\n  async disconnectAllSockets(consume_sockets: ConsumeSocket[]): Promise<void> {\r\n    for (const socket of consume_sockets) {\r\n      try {\r\n        const ip = Object.keys(socket)[0];\r\n        await socket[ip].disconnect();\r\n      } catch (error) {\r\n        console.log(`Error disconnecting socket with IP: ${Object.keys(socket)[0]}`, error);\r\n      }\r\n    }\r\n  }\r\n\r\n  async closeAndReset() {\r\n    //close and clean up all sockets, modals,... and reset all states to initial values\r\n\r\n    this.updateIsMessagesModalVisible(false);\r\n    this.updateIsParticipantsModalVisible(false);\r\n    this.updateIsWaitingModalVisible(false);\r\n    this.updateIsRequestsModalVisible(false);\r\n    this.updateIsCoHostModalVisible(false);\r\n    this.updateIsSettingsModalVisible(false);\r\n    this.updateIsDisplaySettingsModalVisible(false);\r\n    this.updateIsMediaSettingsModalVisible(false);\r\n    this.updateIsMenuModalVisible(false);\r\n    this.updateIsShareEventModalVisible(false);\r\n    this.updateIsConfirmExitModalVisible(false);\r\n    await this.disconnectAllSockets(this.consume_sockets.value);\r\n    await this.updateStatesToInitialValues();\r\n    this.updateMeetingProgressTime('00:00:00');\r\n    this.updateMeetingElapsedTime(0);\r\n    this.updateRecordingProgressTime('00:00:00');\r\n    this.updateRecordElapsedTime(0);\r\n    this.updateShowRecordButtons(false);\r\n\r\n    this.updateIsConfigureWhiteboardModalVisible(false);\r\n    this.updateIsWhiteboardModalVisible(false);\r\n    this.updateIsMenuModalVisible(false);\r\n    this.updateIsRecordingModalVisible(false);\r\n    this.updateIsPollModalVisible(false);\r\n    this.updateIsBreakoutRoomsModalVisible(false);\r\n    this.updateIsBackgroundModalVisible(false);\r\n    this.updateIsLoadingModalVisible(false);\r\n    this.updateIsConfirmHereModalVisible(false);\r\n\r\n    await sleep({ ms: 500 });\r\n    this.updateValidated(false);\r\n    //if on web, reload the page\r\n    window.location.reload();\r\n  }\r\n\r\n  computeDimensionsMethod = ({\r\n    containerWidthFraction = 1,\r\n    containerHeightFraction = 1,\r\n    mainSize,\r\n    doStack = true,\r\n    defaultFraction,\r\n  }: {\r\n    containerWidthFraction?: number;\r\n    containerHeightFraction?: number;\r\n    mainSize: number;\r\n    doStack?: boolean;\r\n    defaultFraction: number;\r\n  }): ComponentSizes => {\r\n    const parentWidth = window.innerWidth * containerWidthFraction;\r\n    const parentHeight = window.innerHeight * containerHeightFraction * defaultFraction;\r\n    let isWideScreen = parentWidth >= 768;\r\n\r\n    if (!isWideScreen && parentWidth > 1.5 * parentHeight) {\r\n      isWideScreen = true;\r\n    }\r\n\r\n    this.updateIsWideScreen(isWideScreen);\r\n\r\n    const dimensions = this.calculateDimensions({\r\n      parentWidth,\r\n      parentHeight,\r\n      isWideScreen,\r\n      mainSize,\r\n      doStack,\r\n    });\r\n    return dimensions;\r\n  };\r\n\r\n  calculateDimensions({\r\n    parentWidth,\r\n    parentHeight,\r\n    isWideScreen,\r\n    mainSize,\r\n    doStack,\r\n  }: {\r\n    parentWidth: number;\r\n    parentHeight: number;\r\n    isWideScreen: boolean;\r\n    mainSize: number;\r\n    doStack: boolean;\r\n  }): ComponentSizes {\r\n    if (doStack) {\r\n      return isWideScreen\r\n        ? {\r\n          mainHeight: Math.floor(parentHeight),\r\n          otherHeight: Math.floor(parentHeight),\r\n          mainWidth: Math.floor((mainSize / 100) * parentWidth),\r\n          otherWidth: Math.floor(((100 - mainSize) / 100) * parentWidth),\r\n        }\r\n        : {\r\n          mainHeight: Math.floor((mainSize / 100) * parentHeight),\r\n          otherHeight: Math.floor(((100 - mainSize) / 100) * parentHeight),\r\n          mainWidth: Math.floor(parentWidth),\r\n          otherWidth: Math.floor(parentWidth),\r\n        };\r\n    } else {\r\n      return {\r\n        mainHeight: Math.floor(parentHeight),\r\n        otherHeight: Math.floor(parentHeight),\r\n        mainWidth: Math.floor(parentWidth),\r\n        otherWidth: Math.floor(parentWidth),\r\n      };\r\n    }\r\n  }\r\n\r\n  handleOrientationChange() {\r\n    window.addEventListener('resize', this.handleResize.bind(this));\r\n    window.addEventListener('orientationchange', this.handleResize.bind(this));\r\n  }\r\n\r\n  setupResizeListener() {\r\n    this.handleResize();\r\n  }\r\n\r\n  orientation = window.innerHeight > window.innerWidth ? 'portrait' : 'landscape';\r\n\r\n  async joinRoom(data: {\r\n    socket: Socket;\r\n    roomName: string;\r\n    islevel: string;\r\n    member: string;\r\n    sec: string;\r\n    apiUserName: string;\r\n  }): Promise<ResponseJoinRoom | null> {\r\n    const { socket, roomName, islevel, member, sec, apiUserName } = data;\r\n\r\n    try {\r\n      const response: ResponseJoinRoom | null = await this.joinRoomClient.joinRoomClient({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n      });\r\n\r\n      return response;\r\n    } catch (error) {\r\n      console.log('Error joining room:', error);\r\n      throw new Error('Failed to join the room. Please check your connection and try again.');\r\n    }\r\n  }\r\n\r\n  async join_Room({\r\n    socket,\r\n    roomName,\r\n    islevel,\r\n    member,\r\n    sec,\r\n    apiUserName,\r\n    isLocal = false,\r\n  }: {\r\n    socket: Socket;\r\n    roomName: string;\r\n    islevel: string;\r\n    member: string;\r\n    sec: string;\r\n    apiUserName: string;\r\n    isLocal?: boolean;\r\n  }): Promise<void> {\r\n    let data: ResponseJoinRoom | null;\r\n\r\n    if (!isLocal) {\r\n      data = await this.joinRoom({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n      });\r\n    } else {\r\n      const localData: ResponseJoinLocalRoom = await this.joinLocalRoom.joinLocalRoom({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n        parameters: {\r\n          showAlert:\r\n            this.showAlert ||\r\n            (() => {\r\n              console.log('showAlert not defined');\r\n            }),\r\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\r\n          connectSocket: this.socketManager.connectSocket,\r\n          connectLocalSocket: this.socketManager.connectLocalSocket,\r\n          updateSocket: this.updateSocket,\r\n          updateLocalSocket: this.updateLocalSocket,\r\n          updateValidated: this.updateValidated,\r\n          updateApiUserName: this.updateApiUserName,\r\n          updateApiToken: this.updateApiToken,\r\n          updateLink: this.updateLink,\r\n          updateRoomName: this.updateRoomName,\r\n          updateMember: this.updateMember,\r\n        },\r\n        checkConnect:\r\n          this.localLink.length > 0 &&\r\n          this.connectMediaSFU === true &&\r\n          !this.link.value.includes('mediasfu.com'),\r\n        localLink: this.localLink,\r\n        joinMediaSFURoom: this.joinMediaSFURoom,\r\n      });\r\n\r\n      data = await createResponseJoinRoom({ localRoom: localData });\r\n    }\r\n\r\n    const updateAndComplete = async (data: ResponseJoinRoom) => {\r\n      // Update room parameters\r\n      try {\r\n        // Check if roomRecvIPs is not empty\r\n        if (!data.roomRecvIPs || data.roomRecvIPs.length === 0) {\r\n          data.roomRecvIPs = ['none'];\r\n\r\n          if (\r\n            this.link.value !== \"\" &&\r\n            this.link.value.includes(\"mediasfu.com\") &&\r\n            !isLocal\r\n          ) {\r\n            // Community Edition Only\r\n            await this.receiveAllPipedTransports.receiveAllPipedTransports({\r\n              community: true,\r\n              nsock: this.getUpdatedAllParams().socket,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n        }\r\n\r\n\r\n        this.updateRoomParametersClient.updateRoomParametersClient({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n            data: data,\r\n          },\r\n        });\r\n\r\n        if (data.isHost) {\r\n          this.updateIslevel('2');\r\n        } else {\r\n          // Issue with isHost for local room\r\n          if (islevel !== '2') {\r\n            this.updateIslevel('1');\r\n          }\r\n        }\r\n\r\n        if (data.secureCode && data.secureCode !== '') {\r\n          this.updateAdminPasscode(data.secureCode);\r\n        }\r\n\r\n        if (data.rtpCapabilities) {\r\n          try {\r\n            const device_ = await this.createDeviceClient.createDeviceClient({\r\n              rtpCapabilities: data.rtpCapabilities,\r\n            });\r\n\r\n            if (device_) {\r\n              this.device.next(device_);\r\n            }\r\n          } catch (error) {\r\n            console.error('Error creating device:', error);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error('Error in updateAndComplete:', error);\r\n      }\r\n    };\r\n\r\n    if (data && data.success) {\r\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && isLocal) {\r\n        this.roomData.next(data);\r\n        return;\r\n      } else if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\r\n        // Update roomData\r\n        if (this.roomData.value) {\r\n          // Updating only the recording and meeting room parameters\r\n          this.roomData.value.recordingParams = data.recordingParams;\r\n          this.roomData.value.meetingRoomParams = data.meetingRoomParams;\r\n          this.roomData.next(this.roomData.value);\r\n        } else {\r\n          this.roomData.next(data);\r\n        }\r\n      } else {\r\n        // Update roomData\r\n        this.roomData.next(data);\r\n        if (!this.link.value.includes('mediasfu.com')) {\r\n          this.roomData.value!.meetingRoomParams = data.meetingRoomParams;\r\n        }\r\n      }\r\n\r\n      await updateAndComplete(data);\r\n    } else {\r\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\r\n        // Join local room only\r\n        if (this.roomData.value) {\r\n          await updateAndComplete(this.roomData.value);\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Might be a wrong room name or room is full or other error; check reason in data object if available\r\n      try {\r\n        if (this.showAlert && data?.reason) {\r\n          this.showAlert({\r\n            message: data.reason,\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n        }\r\n      } catch (error) {\r\n        /* handle error */\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  onParticipantsFilterChange = (value: string): void => {\r\n    if (value && value.length > 0) {\r\n      this.filteredParticipants.next(\r\n        this.participants.value.filter((participant) =>\r\n          participant.name.toLowerCase().includes(value.toLowerCase()),\r\n        ),\r\n      );\r\n      this.participantsCounter.next(this.filteredParticipants.value.length);\r\n    } else {\r\n      this.filteredParticipants.next(this.participants.value);\r\n      this.participantsCounter.next(this.participants.value.length);\r\n    }\r\n  };\r\n\r\n  updateStatesToInitialValues = async () => {\r\n    const initialValues = initialValuesState as { [key: string]: any };\r\n    const updateFunctions = this.getAllParams() as unknown as {\r\n      [key: string]: (value: any) => void;\r\n    };\r\n\r\n    for (const key in initialValues) {\r\n      if (Object.prototype.hasOwnProperty.call(initialValues, key)) {\r\n        const updateFunctionName = `update${key.charAt(0).toUpperCase() + key.slice(1)}`;\r\n        const updateFunction = updateFunctions[updateFunctionName];\r\n\r\n        if (typeof updateFunction === 'function') {\r\n          try {\r\n            updateFunction(initialValues[key]);\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  faRecordVinyl = faRecordVinyl;\r\n  faPlayCircle = faPlayCircle;\r\n  faPauseCircle = faPauseCircle;\r\n  faStopCircle = faStopCircle;\r\n  faDotCircle = faDotCircle;\r\n  faCog = faCog;\r\n  faUsers = faUsers;\r\n  faMicrophone = faMicrophone;\r\n  faMicrophoneSlash = faMicrophoneSlash;\r\n  faVideo = faVideo;\r\n  faVideoSlash = faVideoSlash;\r\n  faSync = faSync;\r\n  faPhone = faPhone;\r\n  faShareAlt = faShareAlt;\r\n  faComments = faComments;\r\n  faChartBar = faChartBar;\r\n\r\n  onCloseMenuModal = () => {\r\n    this.updateIsMenuModalVisible(false);\r\n  };\r\n\r\n  onEventSettingsClose = () => {\r\n    this.updateIsSettingsModalVisible(false);\r\n  };\r\n\r\n  onCoHostClose = () => {\r\n    this.updateIsCoHostModalVisible(false);\r\n  };\r\n\r\n  onMediaSettingsClose = () => {\r\n    this.updateIsMediaSettingsModalVisible(false);\r\n  };\r\n\r\n  onDisplaySettingsClose = () => {\r\n    this.updateIsDisplaySettingsModalVisible(false);\r\n  };\r\n\r\n  onPollClose = () => {\r\n    this.updateIsPollModalVisible(false);\r\n  };\r\n\r\n  onBreakoutRoomsClose = () => {\r\n    this.updateIsBreakoutRoomsModalVisible(false);\r\n  };\r\n\r\n  onConfigureWhiteboardClose = () => {\r\n    this.updateIsConfigureWhiteboardModalVisible(false);\r\n  };\r\n\r\n  onMessagesClose = () => {\r\n    this.updateIsMessagesModalVisible(false);\r\n  };\r\n\r\n  onRecordingClose = () => {\r\n    this.updateIsRecordingModalVisible(false);\r\n  };\r\n\r\n  onParticipantsClose = () => {\r\n    this.updateIsParticipantsModalVisible(false);\r\n  };\r\n\r\n  onBackgroundClose = () => {\r\n    this.updateIsBackgroundModalVisible(false);\r\n  };\r\n\r\n  onConfirmExitClose = () => {\r\n    this.updateIsConfirmExitModalVisible(false);\r\n  };\r\n\r\n  onConfirmHereClose = () => {\r\n    this.updateIsConfirmHereModalVisible(false);\r\n  };\r\n\r\n  onScreenboardClose = () => {\r\n    this.updateIsScreenboardModalVisible(false);\r\n  };\r\n\r\n  onShareEventClose = () => {\r\n    this.updateIsShareEventModalVisible(false);\r\n  };\r\n\r\n  onAlertHide = () => {\r\n    this.updateAlertVisible(false);\r\n  };\r\n  recordTimerWidget = {\r\n    component: RecordTimerWidget,\r\n    injector: this.createInjector({ recordingProgressTime: this.recordingProgressTime.value }),\r\n  };\r\n\r\n  updateRecordTimerWidget = (\r\n    recordingProgressTime: string = this.recordingProgressTime.value,\r\n  ): { component: any; injector: Injector } => {\r\n    const recordTimerWidget = {\r\n      component: RecordTimerWidget,\r\n      injector: this.createInjector({ recordingProgressTime: recordingProgressTime }),\r\n    };\r\n\r\n    this.recordTimerWidget = { ...recordTimerWidget };\r\n\r\n    this.cdr.markForCheck();\r\n\r\n    return recordTimerWidget;\r\n  };\r\n\r\n  recordButton = [\r\n    {\r\n      icon: this.faRecordVinyl,\r\n      text: 'Record',\r\n      onPress: () => {\r\n        this.launchRecording.launchRecording({\r\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n          showAlert: this.showAlert.bind(this),\r\n          stopLaunchRecord: this.stopLaunchRecord.value,\r\n          canLaunchRecord: this.canLaunchRecord.value,\r\n          recordingAudioSupport: this.recordingAudioSupport.value,\r\n          recordingVideoSupport: this.recordingVideoSupport.value,\r\n          updateCanRecord: this.updateCanRecord.bind(this),\r\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n          recordStarted: this.recordStarted.value,\r\n          recordPaused: this.recordPaused.value,\r\n          localUIMode: this.localUIMode.value,\r\n        });\r\n      },\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      show: true,\r\n    },\r\n  ];\r\n\r\n  recordButtons: MainButtonAlt[] = [];\r\n\r\n  recordButtonsArray: MainButtonAlt[] = [\r\n    {\r\n      icon: this.faPlayCircle,\r\n      active: () => !this.recordPaused.value,\r\n      onPress: () =>\r\n        this.updateRecording.updateRecording({\r\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n        }),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      alternateIcon: this.faPauseCircle,\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faStopCircle,\r\n      active: () => false,\r\n      onPress: () =>\r\n        this.stopRecording.stopRecording({\r\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'black',\r\n      show: () => true,\r\n    },\r\n    {\r\n      customComponent: () => this.updateRecordTimerWidget(),\r\n      show: () => true,\r\n      active: () => false,\r\n    },\r\n    {\r\n      icon: this.faDotCircle,\r\n      active: () => false,\r\n      onPress: () => console.log('Status pressed'),\r\n      activeColor: 'black',\r\n      inActiveColor: () => (this.recordPaused.value ? 'yellow' : 'red'),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faCog,\r\n      active: () => false,\r\n      onPress: () =>\r\n        this.launchRecording.launchRecording({\r\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n          showAlert: this.showAlert.bind(this),\r\n          stopLaunchRecord: this.stopLaunchRecord.value,\r\n          canLaunchRecord: this.canLaunchRecord.value,\r\n          recordingAudioSupport: this.recordingAudioSupport.value,\r\n          recordingVideoSupport: this.recordingVideoSupport.value,\r\n          updateCanRecord: this.updateCanRecord.bind(this),\r\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n          recordStarted: this.recordStarted.value,\r\n          recordPaused: this.recordPaused.value,\r\n          localUIMode: this.localUIMode.value,\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'black',\r\n      show: () => true,\r\n    },\r\n  ];\r\n\r\n  async updateRecordButtons() {\r\n    const recordButtons = this.recordButtonsArray.map((button) => {\r\n      return {\r\n        ...button,\r\n        active: typeof button.active === 'function' ? button.active() : button.active,\r\n        show: typeof button.show === 'function' ? button.show() : button.show,\r\n        customComponent: button.customComponent\r\n          ? typeof button.customComponent === 'function'\r\n            ? button.customComponent()\r\n            : button.customComponent\r\n          : undefined,\r\n        activeColor:\r\n          typeof button.inActiveColor === 'function'\r\n            ? button.inActiveColor()\r\n            : button.inActiveColor,\r\n        inActiveColor:\r\n          typeof button.inActiveColor === 'function'\r\n            ? button.inActiveColor()\r\n            : button.inActiveColor,\r\n      };\r\n    });\r\n    this.recordButtons = [...recordButtons];\r\n    await this.updateMenuRecordWidget(recordButtons);\r\n    this.updateControlBroadcastButtons();\r\n\r\n    this.cdr.markForCheck();\r\n  }\r\n\r\n  // Create instances of the custom widgets\r\n  messageWidget = {\r\n    component: MessageWidget,\r\n    injector: this.createInjector({\r\n      icon: this.faComments,\r\n      showBadge: this.showMessagesBadge.value,\r\n      badgeValue: 1,\r\n      iconColor: 'black',\r\n    }),\r\n  };\r\n\r\n  menuRecordWidget = {\r\n    component: MenuRecordWidget,\r\n    injector: this.createInjector({\r\n      buttons: this.recordButtons,\r\n      showAspect: true,\r\n      direction: 'horizontal',\r\n    }),\r\n  };\r\n\r\n  updateMenuRecordWidget = (recordButtons: MainButtonAlt[] = this.recordButtons): any => {\r\n    const menuRecordWidget = {\r\n      component: MenuRecordWidget,\r\n      injector: this.createInjector({\r\n        buttons: recordButtons,\r\n        showAspect: true,\r\n        direction: 'horizontal',\r\n      }),\r\n    };\r\n\r\n    this.menuRecordWidget = { ...menuRecordWidget };\r\n\r\n    this.cdr.markForCheck();\r\n\r\n    return menuRecordWidget;\r\n  };\r\n\r\n  menuParticipantsWidget = {\r\n    component: MenuParticipantsWidget,\r\n    injector: this.createInjector({\r\n      icon: this.faChartBar,\r\n      participantsCounter: this.participantsCounter.value,\r\n      iconColor: 'black',\r\n    }),\r\n  };\r\n\r\n  updateMenuParticipantsWidget = (count: number = this.participantsCounter.value): any => {\r\n    const menuParticipantsWidget = {\r\n      component: MenuParticipantsWidget,\r\n      injector: this.createInjector({\r\n        icon: this.faChartBar,\r\n        participantsCounter: count,\r\n        iconColor: 'black',\r\n      }),\r\n    };\r\n\r\n    this.menuParticipantsWidget = { ...menuParticipantsWidget };\r\n\r\n    this.cdr.markForCheck();\r\n\r\n    return menuParticipantsWidget;\r\n  };\r\n\r\n  controlBroadcastButtons: ButtonTouch[] = [];\r\n\r\n  updateControlBroadcastButtons() {\r\n    this.controlBroadcastButtons = this.controlBroadcastButtonsArray.map((button) => {\r\n      return {\r\n        ...button,\r\n        show: typeof button.show === 'function' ? button.show() : button.show,\r\n        active: typeof button.active === 'function' ? button.active() : button.active,\r\n      };\r\n    });\r\n  }\r\n\r\n  controlBroadcastButtonsArray: ButtonTouch[] = [\r\n    {\r\n      icon: this.faUsers,\r\n      active: true,\r\n      alternateIcon: this.faUsers,\r\n      onPress: () =>\r\n        this.launchParticipants.launchParticipants({\r\n          updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\r\n          isParticipantsModalVisible: this.isParticipantsModalVisible.value,\r\n        }),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faShareAlt,\r\n      active: true,\r\n      alternateIcon: this.faShareAlt,\r\n      onPress: () => this.updateIsShareEventModalVisible(!this.isShareEventModalVisible.value),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      show: () => true,\r\n    },\r\n    {\r\n      customComponent: this.messageWidget,\r\n      onPress: () =>\r\n        this.launchMessages.launchMessages({\r\n          updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\r\n          isMessagesModalVisible: this.isMessagesModalVisible.value,\r\n        }),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faSync,\r\n      active: true,\r\n      alternateIcon: this.faSync,\r\n      onPress: () =>\r\n        this.switchVideoAlt.switchVideoAlt({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faVideoSlash,\r\n      alternateIcon: this.faVideo,\r\n      active: () => this.videoActive.value,\r\n      onPress: () =>\r\n        this.clickVideo.clickVideo({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n    },\r\n    {\r\n      icon: this.faMicrophoneSlash,\r\n      alternateIcon: this.faMicrophone,\r\n      active: () => this.micActive.value,\r\n      onPress: () =>\r\n        this.clickAudio.clickAudio({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      customComponent: () => this.menuParticipantsWidget,\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faPhone,\r\n      active: this.endCallActive.value,\r\n      onPress: () =>\r\n        this.launchConfirmExit.launchConfirmExit({\r\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\r\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faPhone,\r\n      active: this.endCallActive.value,\r\n      onPress: () => console.log('End Call pressed'),\r\n      activeColor: 'transparent',\r\n      inActiveColor: 'transparent',\r\n      backgroundColor: { default: 'transparent' },\r\n      show: () => false,\r\n    },\r\n  ];\r\n\r\n  async connect_Socket(\r\n    apiUserName: string,\r\n    token: string,\r\n    skipSockets: boolean = false\r\n  ): Promise<Socket | null> {\r\n\r\n    const socketDefault = this.socket.value;\r\n    const socketAlt =\r\n      this.connectMediaSFU && this.localSocket!.value && this.localSocket!.value.id\r\n        ? this.localSocket!.value\r\n        : socketDefault;\r\n\r\n    if (this.socket.value && this.socket.value.id) {\r\n      if (!skipSockets) {\r\n        // Event listeners on socketDefault\r\n        socketDefault.on('disconnect', async () => {\r\n          await this.disconnect.disconnect({\r\n            showAlert: this.showAlert.bind(this),\r\n            redirectURL: this.redirectURL.value,\r\n            onWeb: true,\r\n            updateValidated: this.updateValidated.bind(this),\r\n          });\r\n          if (this.videoAlreadyOn.value) {\r\n            await this.clickVideo.clickVideo({\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n          if (this.audioAlreadyOn.value) {\r\n            await this.clickAudio.clickAudio({\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n\r\n          await this.closeAndReset();\r\n        });\r\n\r\n        socketDefault.on('allMembers', async (membersData: AllMembersData) => {\r\n          if (membersData) {\r\n            await this.allMembers.allMembers({\r\n              apiUserName: apiUserName,\r\n              apiKey: '', //not recommended - use apiToken instead. Use for testing/development only\r\n              apiToken: token,\r\n              members: membersData.members,\r\n              requestss: membersData.requests ? membersData.requests : this.requestList.value,\r\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\r\n              coHostRes: membersData.coHostResponsibilities\r\n                ? membersData.coHostResponsibilities\r\n                : this.coHostResponsibility.value,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              consume_sockets: this.consume_sockets.value,\r\n            });\r\n          }\r\n        });\r\n\r\n        socketDefault.on('allMembersRest', async (membersData: AllMembersRestData) => {\r\n          if (membersData) {\r\n            await this.allMembersRest.allMembersRest({\r\n              apiUserName: apiUserName,\r\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\r\n              members: membersData.members,\r\n              apiToken: token,\r\n              settings: membersData.settings,\r\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\r\n              coHostRes: membersData.coHostResponsibilities\r\n                ? membersData.coHostResponsibilities\r\n                : this.coHostResponsibility.value,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              consume_sockets: this.consume_sockets.value,\r\n            });\r\n          }\r\n        });\r\n\r\n        socketDefault.on('personJoined', async ({ name }: { name: string }) => {\r\n          this.personJoined.personJoined({\r\n            name,\r\n            showAlert: this.showAlert.bind(this),\r\n          });\r\n        });\r\n\r\n\r\n        socketDefault.on('ban', async ({ name }: { name: string }) => {\r\n          await this.banParticipant.banParticipant({\r\n            name,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'producer-media-paused',\r\n          async ({\r\n            producerId,\r\n            kind,\r\n            name,\r\n          }: {\r\n            producerId: string;\r\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\r\n            name: string;\r\n          }) => {\r\n            await this.producerMediaPaused.producerMediaPaused({\r\n              producerId,\r\n              kind,\r\n              name,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'producer-media-resumed',\r\n          async ({ kind, name }: { kind: 'audio'; name: string }) => {\r\n            await this.producerMediaResumed.producerMediaResumed({\r\n              kind,\r\n              name,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'producer-media-closed',\r\n          async ({\r\n            producerId,\r\n            kind,\r\n          }: {\r\n            producerId: string;\r\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\r\n          }) => {\r\n            if (producerId && kind) {\r\n              await this.producerMediaClosed.producerMediaClosed({\r\n                producerId,\r\n                kind,\r\n                parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              });\r\n            }\r\n          },\r\n        );\r\n\r\n        socketDefault.on('meetingEnded', async () => {\r\n          await this.meetingEnded.meetingEnded({\r\n            showAlert: this.showAlert.bind(this),\r\n            redirectURL: this.redirectURL.value,\r\n            onWeb: true,\r\n            eventType: this.eventType.value,\r\n            updateValidated: this.updateValidated.bind(this),\r\n          });\r\n\r\n          if (this.videoAlreadyOn.value) {\r\n            await this.clickVideo.clickVideo({\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          }\r\n          if (this.audioAlreadyOn.value) {\r\n            await this.clickAudio.clickAudio({\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          }\r\n\r\n          await this.closeAndReset();\r\n        });\r\n\r\n        socketDefault.on('disconnectUserSelf', async () => {\r\n          await this.disconnectUserSelf.disconnectUserSelf({\r\n            socket: socketDefault,\r\n            member: this.member.value,\r\n            roomName: this.roomName.value,\r\n          });\r\n        });\r\n\r\n        socketDefault.on('receiveMessage', async ({ message }: { message: Message }) => {\r\n          await this.receiveMessage.receiveMessage({\r\n            message,\r\n            messages: this.messages.value,\r\n            participantsAll: this.participantsAll.value,\r\n            member: this.member.value,\r\n            eventType: this.eventType.value,\r\n            islevel: this.islevel.value,\r\n            coHost: this.coHost.value,\r\n            updateMessages: this.updateMessages.bind(this),\r\n            updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'meetingTimeRemaining',\r\n          async ({ timeRemaining }: { timeRemaining: number }) => {\r\n            await this.meetingTimeRemaining.meetingTimeRemaining({\r\n              timeRemaining,\r\n              showAlert: this.showAlert.bind(this),\r\n              eventType: this.eventType.value,\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('meetingStillThere', async () => {\r\n          this.meetingStillThere.meetingStillThere({\r\n            updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'updateConsumingDomains',\r\n          async ({ domains, alt_domains }: UpdateConsumingDomainsData) => {\r\n            await this.updateConsumingDomains.updateConsumingDomains({\r\n              domains,\r\n              alt_domains,\r\n              apiUserName,\r\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\r\n              apiToken: token,\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          },\r\n        );\r\n\r\n      }\r\n\r\n      if (skipSockets) {\r\n        // Remove specific event listeners from socketDefault and socketAlt\r\n        const events = [\r\n          'roomRecordParams',\r\n          'startRecords',\r\n          'reInitiateRecording',\r\n          'RecordingNotice',\r\n          'timeLeftRecording',\r\n          'stoppedRecording',\r\n        ];\r\n        events.forEach((event) => {\r\n          socketDefault.off(event);\r\n          socketAlt.off(event);\r\n        });\r\n      }\r\n\r\n      socketAlt.on(\r\n        'roomRecordParams',\r\n        async ({ recordParams }: { recordParams: RecordParams }) => {\r\n          this.roomRecordParams.roomRecordParams({\r\n            recordParams,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        },\r\n      );\r\n\r\n      socketAlt.on('startRecords', async () => {\r\n        await this.startRecords.startRecords({\r\n          roomName: this.roomName.value,\r\n          member: this.member.value,\r\n          socket: socketAlt,\r\n        });\r\n      });\r\n\r\n      socketAlt.on('reInitiateRecording', async () => {\r\n        await this.reInitiateRecording.reInitiateRecording({\r\n          roomName: this.roomName.value,\r\n          member: this.member.value,\r\n          socket: socketAlt,\r\n          adminRestrictSetting: this.adminRestrictSetting.value,\r\n        });\r\n      });\r\n\r\n      socketAlt.on(\r\n        'RecordingNotice',\r\n        async ({ state, userRecordingParam, pauseCount, timeDone }: RecordingNoticeData) => {\r\n          await this.recordingNotice.RecordingNotice({\r\n            state,\r\n            userRecordingParam,\r\n            pauseCount,\r\n            timeDone,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        },\r\n      );\r\n\r\n      socketAlt.on('timeLeftRecording', async ({ timeLeft }: { timeLeft: number }) => {\r\n        this.timeLeftRecording.timeLeftRecording({\r\n          timeLeft,\r\n          showAlert: this.showAlert.bind(this),\r\n        });\r\n      });\r\n\r\n      socketAlt.on(\r\n        'stoppedRecording',\r\n        async ({ state, reason }: { state: string; reason: string }) => {\r\n          await this.stoppedRecording.stoppedRecording({\r\n            state,\r\n            reason,\r\n            showAlert: this.showAlert.bind(this),\r\n          });\r\n        },\r\n      );\r\n\r\n      if (this.localLink !== \"\" && socketDefault && !skipSockets) {\r\n        await this.join_Room({\r\n          socket: socketDefault,\r\n          roomName: this.roomName.value,\r\n          islevel: this.islevel.value,\r\n          member: this.member.value,\r\n          sec: token,\r\n          apiUserName: apiUserName,\r\n          isLocal: true,\r\n        });\r\n      }\r\n\r\n      // Check if localSocket has changed\r\n      const localChanged =\r\n        this.localSocket!.value && this.localSocket!.value.id && this.localSocket!.value.id !== socketAlt.id;\r\n\r\n      if (!skipSockets && localChanged) {\r\n        // Re-call connect_Socket with skipSockets = true\r\n        await this.connect_Socket(apiUserName, token, true);\r\n        await sleep({ ms: 1000 })\r\n        this.updateIsLoadingModalVisible(false);\r\n        return socketDefault;\r\n      } else {\r\n        if (this.link.value !== '' && this.link.value.includes('mediasfu.com')) {\r\n          // Token might be different for local room\r\n          const token = this.apiToken.value;\r\n          await this.join_Room({\r\n            socket:\r\n              this.connectMediaSFU && socketAlt && socketAlt.id ? socketAlt : socketDefault,\r\n            roomName: this.roomName.value,\r\n            islevel: this.islevel.value,\r\n            member: this.member.value,\r\n            sec: token,\r\n            apiUserName: apiUserName,\r\n          });\r\n        }\r\n\r\n        await this.receiveRoomMessages.receiveRoomMessages({\r\n          socket: socketDefault,\r\n          roomName: this.roomName.value,\r\n          updateMessages: this.updateMessages.bind(this),\r\n        });\r\n\r\n        if (!skipSockets) {\r\n          await this.prepopulateUserMedia.prepopulateUserMedia({\r\n            name: this.hostLabel.value,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        }\r\n\r\n        return socketDefault;\r\n      }\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  HostListener,\r\n  Injector,\r\n  ChangeDetectorRef,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  faPlayCircle,\r\n  faPauseCircle,\r\n  faStopCircle,\r\n  faDotCircle,\r\n  faRecordVinyl,\r\n  faCog,\r\n  faUsers,\r\n  faClock,\r\n  faUserPlus,\r\n  faTools,\r\n  faDesktop,\r\n  faPoll,\r\n  faUserFriends,\r\n  faChalkboardTeacher,\r\n  faMicrophone,\r\n  faMicrophoneSlash,\r\n  faVideo,\r\n  faVideoSlash,\r\n  faPhone,\r\n  faBars,\r\n  faComments,\r\n  faChartBar,\r\n} from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport { initialValuesState } from '../../methods/utils/initial-values.util';\r\n\r\nimport { MainAspectComponent } from '../display-components/main-aspect-component/main-aspect-component.component';\r\nimport { LoadingModal } from '../display-components/loading-modal/loading-modal.component';\r\nimport { ControlButtonsComponent } from '../display-components/control-buttons-component/control-buttons-component.component';\r\nimport { ControlButtonsAltComponent } from '../display-components/control-buttons-alt-component/control-buttons-alt-component.component';\r\nimport { OtherGridComponent } from '../display-components/other-grid-component/other-grid-component.component';\r\nimport { MainScreenComponent } from '../display-components/main-screen-component/main-screen-component.component';\r\nimport { MainGridComponent } from '../display-components/main-grid-component/main-grid-component.component';\r\nimport { SubAspectComponent } from '../display-components/sub-aspect-component/sub-aspect-component.component';\r\nimport { MainContainerComponent } from '../display-components/main-container-component/main-container-component.component';\r\nimport { AlertComponent } from '../display-components/alert-component/alert.component.component';\r\nimport { MenuModal } from '../menu-components/menu-modal/menu-modal.component';\r\nimport { RecordingModal } from '../recording-components/recording-modal/recording-modal.component';\r\nimport { RequestsModal } from '../requests-components/requests-modal/requests-modal.component';\r\nimport { WaitingRoomModal } from '../waiting-components/waiting-room-modal.component';\r\nimport { DisplaySettingsModal } from '../display-settings-components/display-settings-modal.component';\r\nimport { EventSettingsModal } from '../event-settings-components/event-settings-modal/event-settings-modal.component';\r\nimport { CoHostModal } from '../co-host-components/co-host-modal/co-host-modal.component';\r\nimport { ParticipantsModal } from '../participants-components/participants-modal/participants-modal.component';\r\nimport { MessagesModal } from '../message-components/messages-modal/messages-modal.component';\r\nimport { MediaSettingsModal } from '../media-settings-components/media-settings-modal/media-settings-modal.component';\r\nimport { ConfirmExitModal } from '../exit-components/confirm-exit-modal/confirm-exit-modal.component';\r\nimport { ConfirmHereModal } from '../misc-components/confirm-here-modal/confirm-here-modal.component';\r\nimport { ShareEventModal } from '../misc-components/share-event-modal/share-event-modal.component';\r\nimport {\r\n  WelcomePage,\r\n  WelcomePageOptions,\r\n} from '../misc-components/welcome-page/welcome-page.component';\r\n\r\nimport { PollModal } from '../polls-components/poll-modal/poll-modal.component';\r\nimport { BackgroundModal } from '../background-components/background-modal/background-modal.component';\r\nimport { BreakoutRoomsModal } from '../breakout-components/breakout-rooms-modal.component';\r\nimport { ConfigureWhiteboardModal } from '../whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component';\r\nimport { Whiteboard } from '../whiteboard-components/whiteboard/whiteboard.component';\r\nimport { Screenboard } from '../screenboard-components/screenboard/screenboard.component';\r\nimport { ScreenboardModal } from '../screenboard-components/screenboard-modal/screenboard-modal.component';\r\n// pagination and display of media (samples)\r\nimport { Pagination } from '../display-components/pagination/pagination.component';\r\nimport { FlexibleGrid } from '../display-components/flexible-grid/flexible-grid.component';\r\nimport { FlexibleVideo } from '../display-components/flexible-video/flexible-video.component';\r\nimport { AudioGrid } from '../display-components/audio-grid/audio-grid.component';\r\n\r\nimport { MenuWidget } from '../display-components/control-widgets/menu-widget.component';\r\nimport { MessageWidget } from '../display-components/control-widgets/message-widget.component';\r\nimport { MenuRecordWidget } from '../display-components/control-widgets/menu-record-widget.component';\r\nimport { RecordTimerWidget } from '../display-components/control-widgets/record-timer-widget.component';\r\nimport { MenuParticipantsWidget } from '../display-components/control-widgets/menu-participants-widget.component';\r\nimport { ScreenShareWidget } from '../display-components/control-widgets/screenshare-widget.component';\r\n\r\nimport {\r\n  ResponseJoinRoom,\r\n  ResponseJoinLocalRoom,\r\n  CoHostResponsibility,\r\n  EventType,\r\n  Participant,\r\n  ConsumeSocket,\r\n  MeetingRoomParams,\r\n  VidCons,\r\n  HParamsType,\r\n  VParamsType,\r\n  ScreenParamsType,\r\n  AParamsType,\r\n  UserRecordingParams,\r\n  Stream,\r\n  AudioDecibels,\r\n  ScreenState,\r\n  GridSizes,\r\n  CustomMediaComponent,\r\n  Message,\r\n  WaitingRoomParticipant,\r\n  ComponentSizes,\r\n  Transport as TransportType,\r\n  Shape,\r\n  Poll,\r\n  BreakoutParticipant,\r\n  WhiteboardUser,\r\n  Request,\r\n  AllMembersData,\r\n  AllMembersRestData,\r\n  BreakoutRoomUpdatedData,\r\n  AllWaitingRoomMembersData,\r\n  MainButtonAlt,\r\n  MainCustomButton,\r\n  RecordParams,\r\n  SeedData,\r\n  UpdatedCoHostData,\r\n  Settings,\r\n  UpdateConsumingDomainsData,\r\n  RecordingNoticeData,\r\n  HostRequestResponseData,\r\n  PollUpdatedData,\r\n  PreJoinPageOptions,\r\n  CreateMediaSFURoomOptions,\r\n  JoinMediaSFURoomOptions,\r\n  JoinRoomOnMediaSFUType,\r\n  CreateRoomOnMediaSFUType,\r\n} from '../../@types/types';\r\nimport { createResponseJoinRoom } from '../../methods/utils/create-response-join-room.util';\r\n\r\n//import methods for control (samples)\r\n// Import methods for control (samples)\r\nimport { LaunchMenuModal } from '../../methods/menu-methods/launch-menu-modal.service';\r\nimport { LaunchRecording } from '../../methods/recording-methods/launch-recording.service';\r\nimport { StartRecording } from '../../methods/recording-methods/start-recording.service';\r\nimport { ConfirmRecording } from '../../methods/recording-methods/confirm-recording.service';\r\nimport { LaunchWaiting } from '../../methods/waiting-methods/launch-waiting.service';\r\nimport { launchCoHost } from '../../methods/co-host-methods/launch-co-host.service';\r\nimport { LaunchMediaSettings } from '../../methods/media-settings-methods/launch-media-settings.service';\r\nimport { LaunchDisplaySettings } from '../../methods/display-settings-methods/launch-display-settings.service';\r\nimport { LaunchSettings } from '../../methods/settings-methods/launch-settings.service';\r\nimport { LaunchRequests } from '../../methods/requests-methods/launch-requests.service';\r\nimport { LaunchParticipants } from '../../methods/participants-methods/launch-participants.service';\r\nimport { LaunchMessages } from '../../methods/message-methods/launch-messages.service';\r\nimport { LaunchConfirmExit } from '../../methods/exit-methods/launch-confirm-exit.service';\r\n\r\nimport { LaunchPoll } from '../../methods/polls-methods/launch-poll.service';\r\nimport { LaunchBreakoutRooms } from '../../methods/breakout-room-methods/launch-breakout-rooms.service';\r\nimport { LaunchConfigureWhiteboard } from '../../methods/whiteboard-methods/launch-configure-whiteboard.service';\r\n\r\n// mediasfu functions -- examples\r\nimport { SocketManager } from '../../sockets/socket-manager.service';\r\nimport { JoinRoomClient } from '../../producer-client/producer-client-emits/join-room-client.service';\r\nimport { JoinLocalRoom } from '../../producers/producer-emits/join-local-room.service';\r\nimport { UpdateRoomParametersClient } from '../../producer-client/producer-client-emits/update-room-parameters-client.service';\r\nimport { CreateDeviceClient } from '../../producer-client/producer-client-emits/create-device-client.service';\r\n\r\nimport { ClickVideo } from '../../methods/stream-methods/click-video.service';\r\nimport { ClickAudio } from '../../methods/stream-methods/click-audio.service';\r\nimport { ClickScreenShare } from '../../methods/stream-methods/click-screen-share.service';\r\nimport { StreamSuccessVideo } from '../../consumers/stream-success-video.service';\r\nimport { StreamSuccessAudio } from '../../consumers/stream-success-audio.service';\r\nimport { StreamSuccessScreen } from '../../consumers/stream-success-screen.service';\r\nimport { StreamSuccessAudioSwitch } from '../../consumers/stream-success-audio-switch.service';\r\nimport { CheckPermission } from '../../consumers/check-permission.service';\r\n\r\n// mediasfu functions\r\nimport { UpdateMiniCardsGrid } from '../../consumers/update-mini-cards-grid.service';\r\nimport { MixStreams } from '../../consumers/mix-streams.service';\r\nimport { DispStreams } from '../../consumers/disp-streams.service';\r\nimport { StopShareScreen } from '../../consumers/stop-share-screen.service';\r\nimport { CheckScreenShare } from '../../consumers/check-screen-share.service';\r\nimport { StartShareScreen } from '../../consumers/start-share-screen.service';\r\nimport { RequestScreenShare } from '../../consumers/request-screen-share.service';\r\nimport { ReorderStreams } from '../../consumers/reorder-streams.service';\r\nimport { PrepopulateUserMedia } from '../../consumers/prepopulate-user-media.service';\r\nimport { GetVideos } from '../../consumers/get-videos.service';\r\nimport { RePort } from '../../consumers/re-port.service';\r\nimport { Trigger } from '../../consumers/trigger.service';\r\nimport { ConsumerResume } from '../../consumers/consumer-resume.service';\r\nimport { ConnectSendTransportAudio } from '../../consumers/connect-send-transport-audio.service';\r\nimport { ConnectSendTransportVideo } from '../../consumers/connect-send-transport-video.service';\r\nimport { ConnectSendTransportScreen } from '../../consumers/connect-send-transport-screen.service';\r\nimport { ProcessConsumerTransports } from '../../consumers/process-consumer-transports.service';\r\nimport { ResumePauseStreams } from '../../consumers/resume-pause-streams.service';\r\nimport { Readjust } from '../../consumers/readjust.service';\r\nimport { CheckGrid } from '../../consumers/check-grid.service';\r\nimport { GetEstimate } from '../../consumers/get-estimate.service';\r\nimport { CalculateRowsAndColumns } from '../../consumers/calculate-rows-and-columns.service';\r\nimport { AddVideosGrid } from '../../consumers/add-videos-grid.service';\r\nimport { OnScreenChanges } from '../../consumers/on-screen-changes.service';\r\nimport { sleep } from '../../methods/utils/sleep.util';\r\nimport { ChangeVids } from '../../consumers/change-vids.service';\r\nimport { CompareActiveNames } from '../../consumers/compare-active-names.service';\r\nimport { CompareScreenStates } from '../../consumers/compare-screen-states.service';\r\nimport { CreateSendTransport } from '../../consumers/create-send-transport.service';\r\nimport { ResumeSendTransportAudio } from '../../consumers/resume-send-transport-audio.service';\r\nimport { ReceiveAllPipedTransports } from '../../consumers/receive-all-piped-transports.service';\r\nimport { DisconnectSendTransportVideo } from '../../consumers/disconnect-send-transport-video.service';\r\nimport { DisconnectSendTransportAudio } from '../../consumers/disconnect-send-transport-audio.service';\r\nimport { DisconnectSendTransportScreen } from '../../consumers/disconnect-send-transport-screen.service';\r\nimport { ConnectSendTransport } from '../../consumers/connect-send-transport.service';\r\nimport { GetPipedProducersAlt } from '../../consumers/get-piped-producers-alt.service';\r\nimport { SignalNewConsumerTransport } from '../../consumers/signal-new-consumer-transport.service';\r\nimport { ConnectRecvTransport } from '../../consumers/connect-recv-transport.service';\r\nimport { ReUpdateInter } from '../../consumers/re-update-inter.service';\r\nimport { UpdateParticipantAudioDecibels } from '../../consumers/update-participant-audio-decibels.service';\r\nimport { CloseAndResize } from '../../consumers/close-and-resize.service';\r\nimport { AutoAdjust } from '../../consumers/auto-adjust.service';\r\nimport { SwitchUserVideoAlt } from '../../consumers/switch-user-video-alt.service';\r\nimport { SwitchUserVideo } from '../../consumers/switch-user-video.service';\r\nimport { SwitchUserAudio } from '../../consumers/switch-user-audio.service';\r\nimport { ReceiveRoomMessages } from '../../consumers/receive-room-messages.service';\r\nimport { FormatNumber } from '../../methods/utils/format-number.service';\r\nimport { ConnectIps } from '../../consumers/connect-ips.service';\r\nimport { ConnectLocalIps } from '../../consumers/connect-local-ips.service';\r\n\r\nimport { PollUpdated } from '../../methods/polls-methods/poll-updated.service';\r\nimport { HandleCreatePoll } from '../../methods/polls-methods/handle-create-poll.service';\r\nimport { HandleVotePoll } from '../../methods/polls-methods/handle-vote-poll.service';\r\nimport { HandleEndPoll } from '../../methods/polls-methods/handle-end-poll.service';\r\n\r\nimport { BreakoutRoomUpdated } from '../../methods/breakout-room-methods/breakout-room-updated.service';\r\n\r\nimport { StartMeetingProgressTimer } from '../../methods/utils/meeting-timer/start-meeting-progress-timer.service';\r\nimport { UpdateRecording } from '../../methods/recording-methods/update-recording.service';\r\nimport { StopRecording } from '../../methods/recording-methods/stop-recording.service';\r\n\r\nimport { UserWaiting } from '../../producers/socket-receive-methods/user-waiting.service';\r\nimport { PersonJoined } from '../../producers/socket-receive-methods/person-joined.service';\r\nimport { AllWaitingRoomMembers } from '../../producers/socket-receive-methods/all-waiting-room-members.service';\r\nimport { RoomRecordParams } from '../../producers/socket-receive-methods/room-record-params.service';\r\nimport { BanParticipant } from '../../producers/socket-receive-methods/ban-participant.service';\r\nimport { UpdatedCoHost } from '../../producers/socket-receive-methods/updated-co-host.service';\r\nimport { ParticipantRequested } from '../../producers/socket-receive-methods/participant-requested.service';\r\nimport { ScreenProducerId } from '../../producers/socket-receive-methods/screen-producer-id.service';\r\nimport { UpdateMediaSettings } from '../../producers/socket-receive-methods/update-media-settings.service';\r\nimport { ProducerMediaPaused } from '../../producers/socket-receive-methods/producer-media-paused.service';\r\nimport { ProducerMediaResumed } from '../../producers/socket-receive-methods/producer-media-resumed.service';\r\nimport { ProducerMediaClosed } from '../../producers/socket-receive-methods/producer-media-closed.service';\r\nimport { ControlMediaHost } from '../../producers/socket-receive-methods/control-media-host.service';\r\nimport { MeetingEnded } from '../../producers/socket-receive-methods/meeting-ended.service';\r\nimport { DisconnectUserSelf } from '../../producers/socket-receive-methods/disconnect-user-self.service';\r\nimport { ReceiveMessage } from '../../producers/socket-receive-methods/receive-message.service';\r\nimport { MeetingTimeRemaining } from '../../producers/socket-receive-methods/meeting-time-remaining.service';\r\nimport { MeetingStillThere } from '../../producers/socket-receive-methods/meeting-still-there.service';\r\nimport { StartRecords } from '../../producers/socket-receive-methods/start-records.service';\r\nimport { ReInitiateRecording } from '../../producers/socket-receive-methods/re-initiate-recording.service';\r\nimport { GetDomains } from '../../producers/socket-receive-methods/get-domains.service';\r\nimport { UpdateConsumingDomains } from '../../producers/socket-receive-methods/update-consuming-domains.service';\r\nimport { RecordingNotice } from '../../producers/socket-receive-methods/recording-notice.service';\r\nimport { TimeLeftRecording } from '../../producers/socket-receive-methods/time-left-recording.service';\r\nimport { StoppedRecording } from '../../producers/socket-receive-methods/stopped-recording.service';\r\nimport { HostRequestResponse } from '../../producers/socket-receive-methods/host-request-response.service';\r\nimport { AllMembers } from '../../producers/socket-receive-methods/all-members.service';\r\nimport { AllMembersRest } from '../../producers/socket-receive-methods/all-members-rest.service';\r\nimport { Disconnect } from '../../producers/socket-receive-methods/disconnect.service';\r\n\r\nimport { CaptureCanvasStream } from '../../methods/whiteboard-methods/capture-canvas-stream.service';\r\nimport { ResumePauseAudioStreams } from '../../consumers/resume-pause-audio-streams.service';\r\nimport { ProcessConsumerTransportsAudio } from '../../consumers/process-consumer-transports-audio.service';\r\n\r\nimport {\r\n  Device,\r\n  Producer,\r\n  ProducerOptions,\r\n  RtpCapabilities,\r\n  Transport,\r\n} from 'mediasoup-client/lib/types';\r\nimport { SelfieSegmentation } from '@mediapipe/selfie_segmentation';\r\n\r\nexport type MediasfuWebinarOptions = {\r\n  PrejoinPage?: (options: PreJoinPageOptions | WelcomePageOptions) => HTMLElement;\r\n  localLink?: string;\r\n  connectMediaSFU?: boolean;\r\n  credentials?: { apiUserName: string; apiKey: string };\r\n  useLocalUIMode?: boolean;\r\n  seedData?: SeedData;\r\n  useSeed?: boolean;\r\n  imgSrc?: string;\r\n  sourceParameters?: { [key: string]: any };\r\n  updateSourceParameters?: (data: { [key: string]: any }) => void;\r\n  returnUI?: boolean;\r\n  noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n  joinMediaSFURoom?: JoinRoomOnMediaSFUType;\r\n  createMediaSFURoom?: CreateRoomOnMediaSFUType;\r\n};\r\n\r\n/**\r\n * Component for managing webinars in the MediaSFU environment.\r\n *\r\n * @selector app-mediasfu-webinar\r\n * @standalone true\r\n * @imports [RouterOutlet, CommonModule, BreakoutRoomsModal, BackgroundModal, CoHostModal, AlertComponent, AudioGrid, ControlButtonsAltComponent, ControlButtonsComponent, FlexibleGrid, FlexibleVideo, LoadingModal, Pagination, SubAspectComponent, DisplaySettingsModal, EventSettingsModal, ConfirmExitModal, MediaSettingsModal, MenuModal, MessagesModal, ConfirmHereModal, ShareEventModal, WelcomePage, ParticipantsModal, PollModal, RecordingModal, RequestsModal, MainAspectComponent, MainContainerComponent, MainGridComponent, MainScreenComponent, OtherGridComponent, Screenboard, ScreenboardModal, Whiteboard, ConfigureWhiteboardModal, WaitingRoomModal, MenuWidget, MessageWidget, MenuRecordWidget, RecordTimerWidget, MenuParticipantsWidget, ScreenShareWidget]\r\n *\r\n * @template\r\n * This component's template includes:\r\n * - A conditional PrejoinPage displayed before main content for user preparation.\r\n * - The main screen layout with flexible configurations for video, control buttons, and layout grids.\r\n * - Modals for participant, settings, polling, and media interactions.\r\n *\r\n * @input {any} PrejoinPage - Component for the prejoin page, defaults to `WelcomePage`.\r\n * @input {MediasfuWebinarOptions} options - Configuration options for the component.\r\n * @input {boolean} connectMediaSFU - Flag to enable/disable connection to the MediaSFU server.\r\n * @input {string} localLink - Local link for the Community Edition server.\r\n * @input {{ apiUserName: string; apiKey: string }} credentials - API credentials for secure access.\r\n * @input {boolean} useLocalUIMode - Flag to toggle local UI settings.\r\n * @input {SeedData} seedData - Seed data for initializing the component with specific configurations.\r\n * @input {boolean} useSeed - Enable/disable use of seed data.\r\n * @input {string} imgSrc - URL for branding images or logos.\r\n * @input {object} sourceParameters - Additional parameters for the source.\r\n * @input {Function} updateSourceParameters - Function to update the source parameters.\r\n * @input {boolean} returnUI - Flag to return the UI elements.\r\n * @input {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} noUIPreJoinOptions - Options for the prejoin page without UI.\r\n * @input {JoinRoomOnMediaSFUType} joinMediaSFURoom - Function to join a room on MediaSFU.\r\n * @input {CreateRoomOnMediaSFUType} createMediaSFURoom - Function to create a room on MediaSFU.\r\n *\r\n * @property {string} title - The title of the component, defaults to \"MediaSFU-Webinar\".\r\n *\r\n * @styles\r\n * Component-specific styles with full-screen properties and customizable modal colors.\r\n *\r\n * @providers [CookieService] - Utilized for session or user state management within the component.\r\n *\r\n * @class MediasfuWebinar\r\n * @implements OnInit, OnDestroy\r\n *\r\n * @method ngOnInit - Initializes session settings, user interfaces, and modals as necessary.\r\n * @method ngOnDestroy - Cleans up event listeners and intervals to prevent memory leaks.\r\n *\r\n * @example\r\n * ```html\r\n * <app-mediasfu-webinar\r\n *   [PrejoinPage]=\"CustomPrejoinComponent\"\r\n *   [localLink]=\"'https://localhost:3000'\"\r\n *   [connectMediaSFU]=\"true\"\r\n *   [credentials]=\"{ apiUserName: 'username', apiKey: 'apikey' }\"\r\n *   [useLocalUIMode]=\"true\"\r\n *   [seedData]=\"seedDataObject\"\r\n *   [useSeed]=\"true\"\r\n *   [imgSrc]=\"https://example.com/logo.png\">\r\n *   [sourceParameters]=\"{ source: 'camera', width: 640, height: 480 }\"\r\n *   [updateSourceParameters]=\"updateSourceParameters\"\r\n *   [returnUI]=\"true\"\r\n *   [noUIPreJoinOptions]=\"{ roomName: 'room1', userName: 'user1' }\"\r\n *   [joinMediaSFURoom]=\"joinMediaSFURoom\"\r\n *   [createMediaSFURoom]=\"createMediaSFURoom\">\r\n * </app-mediasfu-webinar>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n  selector: 'app-mediasfu-webinar',\r\n  imports: [\r\n    CommonModule,\r\n    BreakoutRoomsModal,\r\n    BackgroundModal,\r\n    CoHostModal,\r\n    AlertComponent,\r\n    AudioGrid,\r\n    ControlButtonsComponent,\r\n    FlexibleGrid,\r\n    FlexibleVideo,\r\n    LoadingModal,\r\n    Pagination,\r\n    SubAspectComponent,\r\n    DisplaySettingsModal,\r\n    EventSettingsModal,\r\n    ConfirmExitModal,\r\n    MediaSettingsModal,\r\n    MenuModal,\r\n    MessagesModal,\r\n    ConfirmHereModal,\r\n    ShareEventModal,\r\n    ParticipantsModal,\r\n    PollModal,\r\n    RecordingModal,\r\n    RequestsModal,\r\n    MainAspectComponent,\r\n    MainContainerComponent,\r\n    MainGridComponent,\r\n    MainScreenComponent,\r\n    OtherGridComponent,\r\n    ScreenboardModal,\r\n    Whiteboard,\r\n    ConfigureWhiteboardModal,\r\n    WaitingRoomModal,\r\n  ],\r\n  template: `\r\n    <div\r\n      class=\"MediaSFU\"\r\n      [ngStyle]=\"{\r\n        height: '100vh',\r\n        width: '100vw',\r\n        maxWidth: '100vw',\r\n        maxHeight: '100vh',\r\n        overflow: 'hidden'\r\n      }\"\r\n    >\r\n      <ng-container *ngIf=\"!validated.value; else mainContent\">\r\n        <ng-container\r\n          *ngComponentOutlet=\"\r\n            PrejoinPageComponent.component;\r\n            injector: PrejoinPageComponent.injector\r\n          \"\r\n        >\r\n        </ng-container>\r\n      </ng-container>\r\n\r\n      <ng-template #mainContent>\r\n        <app-main-container-component *ngIf=\"returnUI\">\r\n          <app-main-aspect-component\r\n            [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n            [defaultFraction]=\"1 - controlHeight.value\"\r\n            [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\r\n            [updateIsWideScreen]=\"updateIsWideScreen\"\r\n            [updateIsMediumScreen]=\"updateIsMediumScreen\"\r\n            [updateIsSmallScreen]=\"updateIsSmallScreen\"\r\n          >\r\n            <app-main-screen-component\r\n              [doStack]=\"true\"\r\n              [mainSize]=\"mainHeightWidth.value\"\r\n              [defaultFraction]=\"1 - controlHeight.value\"\r\n              [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\r\n              [updateComponentSizes]=\"updateComponentSizes\"\r\n            >\r\n              <app-main-grid-component\r\n                [height]=\"componentSizes.value.mainHeight\"\r\n                [width]=\"componentSizes.value.mainWidth\"\r\n                [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                [mainSize]=\"mainHeightWidth.value\"\r\n                [showAspect]=\"mainHeightWidth.value > 0\"\r\n                [timeBackgroundColor]=\"recordState.value\"\r\n                [meetingProgressTime]=\"meetingProgressTime.value\"\r\n              >\r\n                <app-flexible-video\r\n                  [customWidth]=\"componentSizes.value.mainWidth\"\r\n                  [customHeight]=\"componentSizes.value.mainHeight\"\r\n                  [rows]=\"1\"\r\n                  [columns]=\"1\"\r\n                  [componentsToRender]=\"mainGridStream.value\"\r\n                  [showAspect]=\"\r\n                    mainGridStream.value.length > 0 &&\r\n                    !(whiteboardStarted.value && !whiteboardEnded.value)\r\n                  \"\r\n                  [localStreamScreen]=\"localStreamScreen.value!\"\r\n                  [annotateScreenStream]=\"annotateScreenStream.value\"\r\n                  [Screenboard]=\"shared.value ? ScreenboardWidget : undefined\"\r\n                >\r\n                </app-flexible-video>\r\n                <app-whiteboard\r\n                  [customWidth]=\"componentSizes.value.mainWidth\"\r\n                  [customHeight]=\"componentSizes.value.mainHeight\"\r\n                  [parameters]=\"mediaSFUParameters\"\r\n                  [showAspect]=\"whiteboardStarted.value && !whiteboardEnded.value\"\r\n                ></app-whiteboard>\r\n              </app-main-grid-component>\r\n\r\n              <app-other-grid-component\r\n                [height]=\"componentSizes.value.otherHeight\"\r\n                [width]=\"componentSizes.value.otherWidth\"\r\n                [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                [showAspect]=\"mainHeightWidth.value !== 100\"\r\n                [timeBackgroundColor]=\"recordState.value\"\r\n                [showTimer]=\"mainHeightWidth.value === 0\"\r\n                [meetingProgressTime]=\"meetingProgressTime.value\"\r\n              >\r\n                <div\r\n                  *ngIf=\"doPaginate.value\"\r\n                  [ngStyle]=\"{\r\n                    width:\r\n                      paginationDirection.value == 'horizontal'\r\n                        ? componentSizes.value.otherWidth\r\n                        : paginationHeightWidth.value,\r\n                    height:\r\n                      paginationDirection.value == 'horizontal'\r\n                        ? paginationHeightWidth.value\r\n                        : componentSizes.value.otherHeight,\r\n                    display: doPaginate.value ? 'flex' : 'none',\r\n                    'flex-direction': paginationDirection.value == 'horizontal' ? 'row' : 'column',\r\n                    'justify-content': 'center',\r\n                    'align-items': 'center',\r\n                    padding: '0',\r\n                    margin: '0'\r\n                  }\"\r\n                >\r\n                  <app-pagination\r\n                    [totalPages]=\"numberPages.value\"\r\n                    [currentUserPage]=\"currentUserPage.value\"\r\n                    [showAspect]=\"doPaginate.value\"\r\n                    [paginationHeight]=\"paginationHeightWidth.value\"\r\n                    [direction]=\"paginationDirection.value\"\r\n                    [parameters]=\"mediaSFUParameters\"\r\n                  ></app-pagination>\r\n                </div>\r\n\r\n                <app-audio-grid [componentsToRender]=\"audioOnlyStreams.value\"></app-audio-grid>\r\n\r\n                <app-flexible-grid\r\n                  [customWidth]=\"gridSizes.value.gridWidth!\"\r\n                  [customHeight]=\"gridSizes.value.gridHeight!\"\r\n                  [rows]=\"gridRows.value\"\r\n                  [columns]=\"gridCols.value\"\r\n                  [componentsToRender]=\"otherGridStreams.value[0]\"\r\n                  [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                ></app-flexible-grid>\r\n                <app-flexible-grid\r\n                  [customWidth]=\"gridSizes.value.altGridWidth!\"\r\n                  [customHeight]=\"gridSizes.value.altGridHeight!\"\r\n                  [rows]=\"altGridRows.value\"\r\n                  [columns]=\"altGridCols.value\"\r\n                  [componentsToRender]=\"otherGridStreams.value[1]\"\r\n                  [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                ></app-flexible-grid>\r\n              </app-other-grid-component>\r\n            </app-main-screen-component>\r\n          </app-main-aspect-component>\r\n\r\n          <app-sub-aspect-component\r\n            [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n            [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\r\n            [defaultFractionSub]=\"controlHeight.value\"\r\n          >\r\n            <app-control-buttons-component\r\n              [buttons]=\"controlButtons\"\r\n              [buttonColor]=\"'black'\"\r\n              [buttonBackgroundColor]=\"{\r\n                default: 'transparent',\r\n                pressed: 'transparent'\r\n              }\"\r\n              [alignment]=\"'space-between'\"\r\n              [vertical]=\"false\"\r\n              [buttonsContainerStyle]=\"{\r\n                marginTop: '0',\r\n                marginBottom: '0',\r\n                backgroundColor: 'transparent'\r\n              }\"\r\n            ></app-control-buttons-component>\r\n          </app-sub-aspect-component>\r\n        </app-main-container-component>\r\n      </ng-template>\r\n\r\n      <ng-container *ngIf=\"returnUI\">\r\n      <app-menu-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isVisible]=\"isMenuModalVisible.value\"\r\n        [onClose]=\"onCloseMenuModal\"\r\n        [customButtons]=\"customMenuButtons\"\r\n        [roomName]=\"roomName.value\"\r\n        [adminPasscode]=\"adminPasscode.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [localLink]=\"localLink\"\r\n      ></app-menu-modal>\r\n\r\n      <app-event-settings-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isEventSettingsModalVisible]=\"isSettingsModalVisible.value\"\r\n        [onEventSettingsClose]=\"onEventSettingsClose\"\r\n        [audioSetting]=\"audioSetting.value\"\r\n        [videoSetting]=\"videoSetting.value\"\r\n        [screenshareSetting]=\"screenshareSetting.value\"\r\n        [chatSetting]=\"chatSetting.value\"\r\n        [updateAudioSetting]=\"updateAudioSetting\"\r\n        [updateVideoSetting]=\"updateVideoSetting\"\r\n        [updateScreenshareSetting]=\"updateScreenshareSetting\"\r\n        [updateChatSetting]=\"updateChatSetting\"\r\n        [updateIsSettingsModalVisible]=\"updateIsSettingsModalVisible\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [showAlert]=\"showAlert\"\r\n      ></app-event-settings-modal>\r\n\r\n      <app-requests-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isRequestsModalVisible]=\"isRequestsModalVisible.value\"\r\n        [onRequestClose]=\"onRequestClose\"\r\n        [requestCounter]=\"requestCounter.value\"\r\n        [onRequestFilterChange]=\"onRequestFilterChange\"\r\n        [updateRequestList]=\"updateRequestList\"\r\n        [requestList]=\"filteredRequestList.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-requests-modal>\r\n\r\n      <app-waiting-room-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isWaitingModalVisible]=\"isWaitingModalVisible.value\"\r\n        [onWaitingRoomClose]=\"onWaitingRoomClose\"\r\n        [waitingRoomCounter]=\"waitingRoomCounter.value\"\r\n        [onWaitingRoomFilterChange]=\"onWaitingRoomFilterChange\"\r\n        [waitingRoomList]=\"filteredWaitingRoomList.value\"\r\n        [updateWaitingList]=\"updateWaitingRoomList\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [parameters]=\"{\r\n                      filteredWaitingRoomList: waitingRoomList.value,\r\n                      getUpdatedAllParams: getUpdatedAllParams,\r\n                    }\"\r\n      ></app-waiting-room-modal>\r\n\r\n      <app-co-host-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isCoHostModalVisible]=\"isCoHostModalVisible.value\"\r\n        [onCoHostClose]=\"onCoHostClose\"\r\n        [coHostResponsibility]=\"coHostResponsibility.value\"\r\n        [participants]=\"participants.value\"\r\n        [currentCohost]=\"coHost.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [showAlert]=\"showAlert\"\r\n        [updateCoHostResponsibility]=\"updateCoHostResponsibility\"\r\n        [updateCoHost]=\"updateCoHost\"\r\n        [updateIsCoHostModalVisible]=\"updateIsCoHostModalVisible\"\r\n        [socket]=\"socket.value\"\r\n      ></app-co-host-modal>\r\n\r\n      <app-media-settings-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isMediaSettingsModalVisible]=\"isMediaSettingsModalVisible.value\"\r\n        [onMediaSettingsClose]=\"onMediaSettingsClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-media-settings-modal>\r\n\r\n      <app-participants-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isParticipantsModalVisible]=\"isParticipantsModalVisible.value\"\r\n        [onParticipantsClose]=\"onParticipantsClose\"\r\n        [participantsCounter]=\"participantsCounter.value\"\r\n        [onParticipantsFilterChange]=\"onParticipantsFilterChange\"\r\n        [parameters]=\"{\r\n              updateParticipants: updateParticipants,\r\n              filteredParticipants: filteredParticipants.value,\r\n              updateIsParticipantsModalVisible: updateIsParticipantsModalVisible,\r\n              updateDirectMessageDetails: updateDirectMessageDetails,\r\n              updateStartDirectMessage: updateStartDirectMessage,\r\n              updateIsMessagesModalVisible: updateIsMessagesModalVisible,\r\n              showAlert: showAlert,\r\n              participants: filteredParticipants.value,\r\n              roomName: roomName.value,\r\n              islevel: islevel.value,\r\n              member: member.value,\r\n              coHostResponsibility: coHostResponsibility.value,\r\n              coHost: coHost.value,\r\n              eventType: eventType.value,\r\n              startDirectMessage: startDirectMessage.value,\r\n              directMessageDetails: directMessageDetails.value,\r\n              socket: socket.value,\r\n              getUpdatedAllParams: getUpdatedAllParams,\r\n            }\"\r\n      ></app-participants-modal>\r\n\r\n      <app-display-settings-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isDisplaySettingsModalVisible]=\"isDisplaySettingsModalVisible.value\"\r\n        [onDisplaySettingsClose]=\"onDisplaySettingsClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-display-settings-modal>\r\n\r\n      <app-recording-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isRecordingModalVisible]=\"isRecordingModalVisible.value\"\r\n        [onClose]=\"onRecordingClose\"\r\n        [startRecording]=\"startRecording.startRecording\"\r\n        [confirmRecording]=\"confirmRecording.confirmRecording\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-recording-modal>\r\n\r\n      <app-messages-modal\r\n        [backgroundColor]=\"\r\n          eventType.value === 'webinar' || eventType.value === 'conference'\r\n            ? '#f5f5f5'\r\n            : 'rgba(255, 255, 255, 0.25)'\r\n        \"\r\n        [isMessagesModalVisible]=\"isMessagesModalVisible.value\"\r\n        [onMessagesClose]=\"onMessagesClose\"\r\n        [messages]=\"messages.value\"\r\n        [eventType]=\"eventType.value\"\r\n        [member]=\"member.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [coHostResponsibility]=\"coHostResponsibility.value\"\r\n        [coHost]=\"coHost.value\"\r\n        [startDirectMessage]=\"startDirectMessage.value\"\r\n        [directMessageDetails]=\"directMessageDetails.value\"\r\n        [updateStartDirectMessage]=\"updateStartDirectMessage\"\r\n        [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\r\n        [showAlert]=\"showAlert\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [chatSetting]=\"chatSetting.value\"\r\n      ></app-messages-modal>\r\n\r\n      <app-confirm-exit-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isConfirmExitModalVisible]=\"isConfirmExitModalVisible.value\"\r\n        [onConfirmExitClose]=\"onConfirmExitClose\"\r\n        [position]=\"'topRight'\"\r\n        [member]=\"member.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [islevel]=\"islevel.value\"\r\n      ></app-confirm-exit-modal>\r\n\r\n      <app-confirm-here-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isConfirmHereModalVisible]=\"isConfirmHereModalVisible.value\"\r\n        [onConfirmHereClose]=\"onConfirmHereClose\"\r\n        [member]=\"member.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n      ></app-confirm-here-modal>\r\n\r\n      <app-share-event-modal\r\n        [isShareEventModalVisible]=\"isShareEventModalVisible.value\"\r\n        [onShareEventClose]=\"onShareEventClose\"\r\n        [roomName]=\"roomName.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [adminPasscode]=\"adminPasscode.value\"\r\n        [eventType]=\"eventType.value\"\r\n        [localLink]=\"localLink\"\r\n      ></app-share-event-modal>\r\n\r\n      <app-poll-modal\r\n        [isPollModalVisible]=\"isPollModalVisible.value\"\r\n        [onClose]=\"onPollClose\"\r\n        [member]=\"member.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [polls]=\"polls.value\"\r\n        [poll]=\"poll.value\"\r\n        [socket]=\"socket.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [showAlert]=\"showAlert\"\r\n        [updateIsPollModalVisible]=\"updateIsPollModalVisible\"\r\n        [handleCreatePoll]=\"handleCreatePoll.handleCreatePoll\"\r\n        [handleEndPoll]=\"handleEndPoll.handleEndPoll\"\r\n        [handleVotePoll]=\"handleVotePoll.handleVotePoll\"\r\n      ></app-poll-modal>\r\n\r\n      <app-background-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isVisible]=\"isBackgroundModalVisible.value\"\r\n        [onClose]=\"onBackgroundClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-background-modal>\r\n\r\n      <app-breakout-rooms-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isVisible]=\"isBreakoutRoomsModalVisible.value\"\r\n        [onBreakoutRoomsClose]=\"onBreakoutRoomsClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-breakout-rooms-modal>\r\n\r\n      <app-configure-whiteboard-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isVisible]=\"isConfigureWhiteboardModalVisible.value\"\r\n        [onConfigureWhiteboardClose]=\"onConfigureWhiteboardClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-configure-whiteboard-modal>\r\n\r\n      <app-screenboard-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isVisible]=\"isScreenboardModalVisible.value\"\r\n        [onClose]=\"onScreenboardClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-screenboard-modal>\r\n\r\n      <app-alert-component\r\n        [visible]=\"alertVisible.value\"\r\n        [message]=\"alertMessage.value\"\r\n        [type]=\"alertType.value\"\r\n        [duration]=\"alertDuration.value\"\r\n        [onHide]=\"onAlertHide\"\r\n        textColor=\"#ffffff\"\r\n      ></app-alert-component>\r\n\r\n      <app-loading-modal\r\n        [isVisible]=\"isLoadingModalVisible.value\"\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        displayColor=\"black\"\r\n      ></app-loading-modal>\r\n    </ng-container>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .MediaSFU {\r\n        /* Add any component-specific styles here */\r\n      }\r\n    `,\r\n  ],\r\n  providers: [CookieService]\r\n})\r\nexport class MediasfuWebinar implements OnInit, OnDestroy {\r\n  @Input()\r\n  PrejoinPage: any = WelcomePage;\r\n  @Input() localLink = '';\r\n  @Input() connectMediaSFU = true;\r\n  @Input() credentials: { apiUserName: string; apiKey: string } = { apiUserName: '', apiKey: '' };\r\n  @Input() useLocalUIMode = false;\r\n  @Input() seedData?: SeedData;\r\n  @Input() useSeed = false;\r\n  @Input() imgSrc = 'https://mediasfu.com/images/logo192.png';\r\n  @Input() sourceParameters?: { [key: string]: any } = {};\r\n  @Input() updateSourceParameters? = (data: { [key: string]: any }) => { };\r\n  @Input() returnUI? = true;\r\n  @Input() noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n  @Input() joinMediaSFURoom?: JoinRoomOnMediaSFUType;\r\n  @Input() createMediaSFURoom?: CreateRoomOnMediaSFUType;\r\n\r\n  title = 'MediaSFU-Webinar';\r\n\r\n  private mainHeightWidthSubscription: Subscription | undefined;\r\n  private validatedSubscription: Subscription | undefined;\r\n  private islevelSubscription: Subscription | undefined;\r\n  private coHostSubscription: Subscription | undefined;\r\n  private buttonSubscriptions: Subscription[] = [];\r\n  private ScreenboardSubscription: Subscription | undefined;\r\n  private recordingSubscription: Subscription | undefined;\r\n\r\n  constructor(\r\n    private cdr: ChangeDetectorRef,\r\n    private injector: Injector,\r\n    public updateMiniCardsGrid: UpdateMiniCardsGrid,\r\n    public mixStreams: MixStreams,\r\n    public dispStreams: DispStreams,\r\n    public stopShareScreen: StopShareScreen,\r\n    public checkScreenShare: CheckScreenShare,\r\n    public startShareScreen: StartShareScreen,\r\n    public requestScreenShare: RequestScreenShare,\r\n    public reorderStreams: ReorderStreams,\r\n    public prepopulateUserMedia: PrepopulateUserMedia,\r\n    public getVideos: GetVideos,\r\n    public rePort: RePort,\r\n    public trigger: Trigger,\r\n    public consumerResume: ConsumerResume,\r\n    public connectSendTransport: ConnectSendTransport,\r\n    public connectSendTransportAudio: ConnectSendTransportAudio,\r\n    public connectSendTransportVideo: ConnectSendTransportVideo,\r\n    public connectSendTransportScreen: ConnectSendTransportScreen,\r\n    public processConsumerTransports: ProcessConsumerTransports,\r\n    public resumePauseStreams: ResumePauseStreams,\r\n    public readjust: Readjust,\r\n    public checkGrid: CheckGrid,\r\n    public getEstimate: GetEstimate,\r\n    public calculateRowsAndColumns: CalculateRowsAndColumns,\r\n    public addVideosGrid: AddVideosGrid,\r\n    public onScreenChanges: OnScreenChanges,\r\n    public changeVids: ChangeVids,\r\n    public compareActiveNames: CompareActiveNames,\r\n    public compareScreenStates: CompareScreenStates,\r\n    public createSendTransport: CreateSendTransport,\r\n    public resumeSendTransportAudio: ResumeSendTransportAudio,\r\n    public receiveAllPipedTransports: ReceiveAllPipedTransports,\r\n    public disconnectSendTransportVideo: DisconnectSendTransportVideo,\r\n    public disconnectSendTransportAudio: DisconnectSendTransportAudio,\r\n    public disconnectSendTransportScreen: DisconnectSendTransportScreen,\r\n    public getPipedProducersAlt: GetPipedProducersAlt,\r\n    public signalNewConsumerTransport: SignalNewConsumerTransport,\r\n    public connectRecvTransport: ConnectRecvTransport,\r\n    public reUpdateInter: ReUpdateInter,\r\n    public updateParticipantAudioDecibels: UpdateParticipantAudioDecibels,\r\n    public closeAndResize: CloseAndResize,\r\n    public autoAdjust: AutoAdjust,\r\n    public switchUserVideoAlt: SwitchUserVideoAlt,\r\n    public switchUserVideo: SwitchUserVideo,\r\n    public switchUserAudio: SwitchUserAudio,\r\n    public getDomains: GetDomains,\r\n    public formatNumber: FormatNumber,\r\n    public connectIps: ConnectIps,\r\n    public connectLocalIps: ConnectLocalIps,\r\n    public createDeviceClient: CreateDeviceClient,\r\n    public handleCreatePoll: HandleCreatePoll,\r\n    public handleEndPoll: HandleEndPoll,\r\n    public handleVotePoll: HandleVotePoll,\r\n    public captureCanvasStream: CaptureCanvasStream,\r\n    public resumePauseAudioStreams: ResumePauseAudioStreams,\r\n    public processConsumerTransportsAudio: ProcessConsumerTransportsAudio,\r\n\r\n    public launchMenuModal: LaunchMenuModal,\r\n    public launchRecording: LaunchRecording,\r\n    public startRecording: StartRecording,\r\n    public confirmRecording: ConfirmRecording,\r\n    public launchWaiting: LaunchWaiting,\r\n    public launchCoHost: launchCoHost,\r\n    public launchMediaSettings: LaunchMediaSettings,\r\n    public launchDisplaySettings: LaunchDisplaySettings,\r\n    public launchSettings: LaunchSettings,\r\n    public launchRequests: LaunchRequests,\r\n    public launchParticipants: LaunchParticipants,\r\n    public launchMessages: LaunchMessages,\r\n    public launchConfirmExit: LaunchConfirmExit,\r\n    public launchPoll: LaunchPoll,\r\n    public launchBreakoutRooms: LaunchBreakoutRooms,\r\n    public launchConfigureWhiteboard: LaunchConfigureWhiteboard,\r\n    public startMeetingProgressTimer: StartMeetingProgressTimer,\r\n    public updateRecording: UpdateRecording,\r\n    public stopRecording: StopRecording,\r\n    public userWaiting: UserWaiting,\r\n    public personJoined: PersonJoined,\r\n    public allWaitingRoomMembers: AllWaitingRoomMembers,\r\n    public roomRecordParams: RoomRecordParams,\r\n    public banParticipant: BanParticipant,\r\n    public updatedCoHost: UpdatedCoHost,\r\n    public participantRequested: ParticipantRequested,\r\n    public screenProducerId: ScreenProducerId,\r\n    public updateMediaSettings: UpdateMediaSettings,\r\n    public producerMediaPaused: ProducerMediaPaused,\r\n    public producerMediaResumed: ProducerMediaResumed,\r\n    public producerMediaClosed: ProducerMediaClosed,\r\n    public controlMediaHost: ControlMediaHost,\r\n    public meetingEnded: MeetingEnded,\r\n    public disconnectUserSelf: DisconnectUserSelf,\r\n    public receiveMessage: ReceiveMessage,\r\n    public meetingTimeRemaining: MeetingTimeRemaining,\r\n    public meetingStillThere: MeetingStillThere,\r\n    public startRecords: StartRecords,\r\n    public reInitiateRecording: ReInitiateRecording,\r\n    public recordingNotice: RecordingNotice,\r\n    public timeLeftRecording: TimeLeftRecording,\r\n    public stoppedRecording: StoppedRecording,\r\n    public hostRequestResponse: HostRequestResponse,\r\n    public allMembers: AllMembers,\r\n    public allMembersRest: AllMembersRest,\r\n    public disconnect: Disconnect,\r\n    public pollUpdated: PollUpdated,\r\n    public breakoutRoomUpdated: BreakoutRoomUpdated,\r\n    public socketManager: SocketManager,\r\n    public joinRoomClient: JoinRoomClient,\r\n    public joinLocalRoom: JoinLocalRoom,\r\n    public updateRoomParametersClient: UpdateRoomParametersClient,\r\n    public clickVideo: ClickVideo,\r\n    public clickAudio: ClickAudio,\r\n    public clickScreenShare: ClickScreenShare,\r\n    public streamSuccessVideo: StreamSuccessVideo,\r\n    public streamSuccessAudio: StreamSuccessAudio,\r\n    public streamSuccessScreen: StreamSuccessScreen,\r\n    public streamSuccessAudioSwitch: StreamSuccessAudioSwitch,\r\n    public checkPermission: CheckPermission,\r\n    public updateConsumingDomains: UpdateConsumingDomains,\r\n    public receiveRoomMessages: ReceiveRoomMessages,\r\n  ) { }\r\n\r\n  createInjector(inputs: any) {\r\n    const inj = Injector.create({\r\n      providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\r\n      parent: this.injector,\r\n    });\r\n\r\n    return inj;\r\n  }\r\n\r\n  // Initial values\r\n  mediaSFUFunctions = () => {\r\n    return {\r\n      updateMiniCardsGrid:\r\n        this.updateMiniCardsGrid?.updateMiniCardsGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      mixStreams:\r\n        this.mixStreams?.mixStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      dispStreams:\r\n        this.dispStreams?.dispStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      stopShareScreen:\r\n        this.stopShareScreen?.stopShareScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkScreenShare:\r\n        this.checkScreenShare?.checkScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      startShareScreen:\r\n        this.startShareScreen?.startShareScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestScreenShare:\r\n        this.requestScreenShare?.requestScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      reorderStreams:\r\n        this.reorderStreams?.reorderStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      prepopulateUserMedia:\r\n        this.prepopulateUserMedia?.prepopulateUserMedia ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getVideos:\r\n        this.getVideos?.getVideos ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      rePort:\r\n        this.rePort?.rePort ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      trigger:\r\n        this.trigger?.trigger ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      consumerResume:\r\n        this.consumerResume?.consumerResume ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransport:\r\n        this.connectSendTransport?.connectSendTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportAudio:\r\n        this.connectSendTransportAudio?.connectSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportVideo:\r\n        this.connectSendTransportVideo?.connectSendTransportVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportScreen:\r\n        this.connectSendTransportScreen?.connectSendTransportScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      processConsumerTransports:\r\n        this.processConsumerTransports?.processConsumerTransports ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumePauseStreams:\r\n        this.resumePauseStreams?.resumePauseStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      readjust:\r\n        this.readjust?.readjust ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkGrid:\r\n        this.checkGrid?.checkGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getEstimate:\r\n        this.getEstimate?.getEstimate ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      calculateRowsAndColumns:\r\n        this.calculateRowsAndColumns?.calculateRowsAndColumns ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      addVideosGrid:\r\n        this.addVideosGrid?.addVideosGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      onScreenChanges:\r\n        this.onScreenChanges?.onScreenChanges ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      sleep:\r\n        sleep ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      changeVids:\r\n        this.changeVids?.changeVids ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      compareActiveNames:\r\n        this.compareActiveNames?.compareActiveNames ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      compareScreenStates:\r\n        this.compareScreenStates?.compareScreenStates ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      createSendTransport:\r\n        this.createSendTransport?.createSendTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumeSendTransportAudio:\r\n        this.resumeSendTransportAudio?.resumeSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      receiveAllPipedTransports:\r\n        this.receiveAllPipedTransports?.receiveAllPipedTransports ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportVideo:\r\n        this.disconnectSendTransportVideo?.disconnectSendTransportVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportAudio:\r\n        this.disconnectSendTransportAudio?.disconnectSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportScreen:\r\n        this.disconnectSendTransportScreen?.disconnectSendTransportScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getPipedProducersAlt:\r\n        this.getPipedProducersAlt?.getPipedProducersAlt ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      signalNewConsumerTransport:\r\n        this.signalNewConsumerTransport?.signalNewConsumerTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectRecvTransport:\r\n        this.connectRecvTransport?.connectRecvTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      reUpdateInter:\r\n        this.reUpdateInter?.reUpdateInter ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      updateParticipantAudioDecibels:\r\n        this.updateParticipantAudioDecibels?.updateParticipantAudioDecibels ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      closeAndResize:\r\n        this.closeAndResize?.closeAndResize ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      autoAdjust:\r\n        this.autoAdjust?.autoAdjust ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserVideoAlt:\r\n        this.switchUserVideoAlt?.switchUserVideoAlt ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserVideo:\r\n        this.switchUserVideo?.switchUserVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserAudio:\r\n        this.switchUserAudio?.switchUserAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getDomains:\r\n        this.getDomains?.getDomains ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      formatNumber:\r\n        this.formatNumber?.formatNumber ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectIps:\r\n        this.connectIps?.connectIps ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectLocalIps:\r\n        this.connectLocalIps?.connectLocalIps ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      createDeviceClient:\r\n        this.createDeviceClient?.createDeviceClient ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      handleCreatePoll:\r\n        this.handleCreatePoll?.handleCreatePoll ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      handleEndPoll:\r\n        this.handleEndPoll?.handleEndPoll ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      handleVotePoll:\r\n        this.handleVotePoll?.handleVotePoll ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      captureCanvasStream:\r\n        this.captureCanvasStream?.captureCanvasStream ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumePauseAudioStreams:\r\n        this.resumePauseAudioStreams?.resumePauseAudioStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      processConsumerTransportsAudio:\r\n        this.processConsumerTransportsAudio?.processConsumerTransportsAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkPermission:\r\n        this.checkPermission?.checkPermission ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessVideo:\r\n        this.streamSuccessVideo?.streamSuccessVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessAudio:\r\n        this.streamSuccessAudio?.streamSuccessAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessScreen:\r\n        this.streamSuccessScreen?.streamSuccessScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessAudioSwitch:\r\n        this.streamSuccessAudioSwitch?.streamSuccessAudioSwitch ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickVideo:\r\n        this.clickVideo?.clickVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickAudio:\r\n        this.clickAudio?.clickAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickScreenShare:\r\n        this.clickScreenShare?.clickScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestPermissionCamera:\r\n        this.requestPermissionCamera ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestPermissionAudio:\r\n        this.requestPermissionAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n    };\r\n  };\r\n\r\n  validated = new BehaviorSubject<boolean>(false);\r\n  localUIMode = new BehaviorSubject<boolean>(false);\r\n  socket = new BehaviorSubject<Socket>({} as Socket);\r\n  localSocket? = new BehaviorSubject<Socket | undefined>(undefined);\r\n  roomData = new BehaviorSubject<ResponseJoinRoom | null>(null);\r\n  device = new BehaviorSubject<Device | null>(null);\r\n  apiKey = new BehaviorSubject<string>('');\r\n  apiUserName = new BehaviorSubject<string>('');\r\n  apiToken = new BehaviorSubject<string>('');\r\n  link = new BehaviorSubject<string>('');\r\n\r\n  roomName = new BehaviorSubject<string>('');\r\n  member = new BehaviorSubject<string>('');\r\n  adminPasscode = new BehaviorSubject<string>('');\r\n  islevel = new BehaviorSubject<string>('1');\r\n  coHost = new BehaviorSubject<string>('No coHost');\r\n  coHostResponsibility = new BehaviorSubject<CoHostResponsibility[]>([\r\n    { name: 'participants', value: false, dedicated: false },\r\n    { name: 'media', value: false, dedicated: false },\r\n    { name: 'waiting', value: false, dedicated: false },\r\n    { name: 'chat', value: false, dedicated: false },\r\n  ]);\r\n  youAreCoHost = new BehaviorSubject<boolean>(false);\r\n  youAreHost = new BehaviorSubject<boolean>(false);\r\n  confirmedToRecord = new BehaviorSubject<boolean>(false);\r\n  meetingDisplayType = new BehaviorSubject<string>('media');\r\n  meetingVideoOptimized = new BehaviorSubject<boolean>(false);\r\n  eventType = new BehaviorSubject<EventType>('webinar');\r\n  participants = new BehaviorSubject<Participant[]>([]);\r\n  filteredParticipants = new BehaviorSubject<Participant[]>([]);\r\n  participantsCounter = new BehaviorSubject<number>(0);\r\n  participantsFilter = new BehaviorSubject<string>('');\r\n\r\n  consume_sockets = new BehaviorSubject<ConsumeSocket[]>([]);\r\n  rtpCapabilities = new BehaviorSubject<RtpCapabilities | null>(null);\r\n  roomRecvIPs = new BehaviorSubject<string[]>([]);\r\n  meetingRoomParams = new BehaviorSubject<MeetingRoomParams | null>(null);\r\n  itemPageLimit = new BehaviorSubject<number>(4);\r\n  audioOnlyRoom = new BehaviorSubject<boolean>(false);\r\n  addForBasic = new BehaviorSubject<boolean>(false);\r\n  screenPageLimit = new BehaviorSubject<number>(4);\r\n  shareScreenStarted = new BehaviorSubject<boolean>(false);\r\n  shared = new BehaviorSubject<boolean>(false);\r\n  targetOrientation = new BehaviorSubject<string>('landscape');\r\n  targetResolution = new BehaviorSubject<string>('sd');\r\n  targetResolutionHost = new BehaviorSubject<string>('sd');\r\n  vidCons = new BehaviorSubject<VidCons>({ width: 640, height: 360 });\r\n  frameRate = new BehaviorSubject<number>(10);\r\n  hParams = new BehaviorSubject<HParamsType>({} as HParamsType);\r\n  vParams = new BehaviorSubject<VParamsType>({} as VParamsType);\r\n  screenParams = new BehaviorSubject<ScreenParamsType>({} as ScreenParamsType);\r\n  aParams = new BehaviorSubject<AParamsType>({} as AParamsType);\r\n\r\n  recordingAudioPausesLimit = new BehaviorSubject<number>(0);\r\n  recordingAudioPausesCount = new BehaviorSubject<number>(0);\r\n  recordingAudioSupport = new BehaviorSubject<boolean>(false);\r\n  recordingAudioPeopleLimit = new BehaviorSubject<number>(0);\r\n  recordingAudioParticipantsTimeLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoPausesCount = new BehaviorSubject<number>(0);\r\n  recordingVideoPausesLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoPeopleLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoParticipantsTimeLimit = new BehaviorSubject<number>(0);\r\n  recordingAllParticipantsSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoParticipantsSupport = new BehaviorSubject<boolean>(false);\r\n  recordingAllParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\r\n  recordingPreferredOrientation = new BehaviorSubject<string>('landscape');\r\n  recordingSupportForOtherOrientation = new BehaviorSubject<boolean>(false);\r\n  recordingMultiFormatsSupport = new BehaviorSubject<boolean>(false);\r\n\r\n  userRecordingParams = new BehaviorSubject<UserRecordingParams>({\r\n    mainSpecs: {\r\n      mediaOptions: 'video', // 'audio', 'video'\r\n      audioOptions: 'all', // 'all', 'onScreen', 'host'\r\n      videoOptions: 'all', // 'all', 'mainScreen'\r\n      videoType: 'fullDisplay', // 'all', 'bestDisplay', 'fullDisplay'\r\n      videoOptimized: false, // true, false\r\n      recordingDisplayType: 'media', // 'media', 'video', 'all'\r\n      addHLS: false, // true, false\r\n    },\r\n    dispSpecs: {\r\n      nameTags: true, // true, false\r\n      backgroundColor: '#000000', // '#000000', '#ffffff'\r\n      nameTagsColor: '#ffffff', // '#000000', '#ffffff'\r\n      orientationVideo: 'portrait', // 'landscape', 'portrait', 'all'\r\n    },\r\n  });\r\n\r\n  canRecord = new BehaviorSubject<boolean>(false);\r\n  startReport = new BehaviorSubject<boolean>(false);\r\n  endReport = new BehaviorSubject<boolean>(false);\r\n  recordTimerInterval = new BehaviorSubject<NodeJS.Timeout | null>(null);\r\n  recordStartTime = new BehaviorSubject<number>(0);\r\n  recordElapsedTime = new BehaviorSubject<number>(0);\r\n  isTimerRunning = new BehaviorSubject<boolean>(false);\r\n  canPauseResume = new BehaviorSubject<boolean>(false);\r\n  recordChangeSeconds = new BehaviorSubject<number>(15000);\r\n  pauseLimit = new BehaviorSubject<number>(0);\r\n  pauseRecordCount = new BehaviorSubject<number>(0);\r\n  canLaunchRecord = new BehaviorSubject<boolean>(true);\r\n  stopLaunchRecord = new BehaviorSubject<boolean>(false);\r\n\r\n  participantsAll = new BehaviorSubject<Participant[]>([]);\r\n\r\n  firstAll = new BehaviorSubject<boolean>(false);\r\n  updateMainWindow = new BehaviorSubject<boolean>(false);\r\n  first_round = new BehaviorSubject<boolean>(false);\r\n  landScaped = new BehaviorSubject<boolean>(false);\r\n  lock_screen = new BehaviorSubject<boolean>(false);\r\n  screenId = new BehaviorSubject<string>('');\r\n  allVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  newLimitedStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  newLimitedStreamsIDs = new BehaviorSubject<string[]>([]);\r\n  activeSounds = new BehaviorSubject<string[]>([]);\r\n  screenShareIDStream = new BehaviorSubject<string>('');\r\n  screenShareNameStream = new BehaviorSubject<string>('');\r\n  adminIDStream = new BehaviorSubject<string>('');\r\n  adminNameStream = new BehaviorSubject<string>('');\r\n  youYouStream = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  youYouStreamIDs = new BehaviorSubject<string[]>([]);\r\n  localStream = new BehaviorSubject<MediaStream | null>(null);\r\n  recordStarted = new BehaviorSubject<boolean>(false);\r\n  recordResumed = new BehaviorSubject<boolean>(false);\r\n  recordPaused = new BehaviorSubject<boolean>(false);\r\n  recordStopped = new BehaviorSubject<boolean>(false);\r\n  adminRestrictSetting = new BehaviorSubject<boolean>(false);\r\n  videoRequestState = new BehaviorSubject<string | null>(null);\r\n  videoRequestTime = new BehaviorSubject<number>(0);\r\n  videoAction = new BehaviorSubject<boolean>(false);\r\n  localStreamVideo = new BehaviorSubject<MediaStream | null>(null);\r\n  userDefaultVideoInputDevice = new BehaviorSubject<string>('');\r\n  currentFacingMode = new BehaviorSubject<string>('user');\r\n  prevFacingMode = new BehaviorSubject<string>('user');\r\n  defVideoID = new BehaviorSubject<string>('');\r\n  allowed = new BehaviorSubject<boolean>(false);\r\n  dispActiveNames = new BehaviorSubject<string[]>([]);\r\n  p_dispActiveNames = new BehaviorSubject<string[]>([]);\r\n  activeNames = new BehaviorSubject<string[]>([]);\r\n  prevActiveNames = new BehaviorSubject<string[]>([]);\r\n  p_activeNames = new BehaviorSubject<string[]>([]);\r\n  membersReceived = new BehaviorSubject<boolean>(false);\r\n  deferScreenReceived = new BehaviorSubject<boolean>(false);\r\n  hostFirstSwitch = new BehaviorSubject<boolean>(false);\r\n  micAction = new BehaviorSubject<boolean>(false);\r\n  screenAction = new BehaviorSubject<boolean>(false);\r\n  chatAction = new BehaviorSubject<boolean>(false);\r\n  audioRequestState = new BehaviorSubject<string | null>(null);\r\n  screenRequestState = new BehaviorSubject<string | null>(null);\r\n  chatRequestState = new BehaviorSubject<string | null>(null);\r\n  audioRequestTime = new BehaviorSubject<number>(0);\r\n  screenRequestTime = new BehaviorSubject<number>(0);\r\n  chatRequestTime = new BehaviorSubject<number>(0);\r\n  updateRequestIntervalSeconds = new BehaviorSubject<number>(240);\r\n  oldSoundIds = new BehaviorSubject<string[]>([]);\r\n  hostLabel = new BehaviorSubject<string>('Host');\r\n  mainScreenFilled = new BehaviorSubject<boolean>(false);\r\n  localStreamScreen = new BehaviorSubject<MediaStream | null>(null);\r\n  screenAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  chatAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  redirectURL = new BehaviorSubject<string>('');\r\n  oldAllStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  adminVidID = new BehaviorSubject<string>('');\r\n  streamNames = new BehaviorSubject<Stream[]>([]);\r\n  non_alVideoStreams = new BehaviorSubject<Participant[]>([]);\r\n  sortAudioLoudness = new BehaviorSubject<boolean>(false);\r\n  audioDecibels = new BehaviorSubject<AudioDecibels[]>([]);\r\n  mixed_alVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  non_alVideoStreams_muted = new BehaviorSubject<Participant[]>([]);\r\n  paginatedStreams = new BehaviorSubject<(Participant | Stream)[][]>([]);\r\n  localStreamAudio = new BehaviorSubject<MediaStream | null>(null);\r\n  defAudioID = new BehaviorSubject<string>('');\r\n  userDefaultAudioInputDevice = new BehaviorSubject<string>('');\r\n  userDefaultAudioOutputDevice = new BehaviorSubject<string>('');\r\n  prevAudioInputDevice = new BehaviorSubject<string>('');\r\n  prevVideoInputDevice = new BehaviorSubject<string>('');\r\n  audioPaused = new BehaviorSubject<boolean>(false);\r\n  mainScreenPerson = new BehaviorSubject<string>('');\r\n  adminOnMainScreen = new BehaviorSubject<boolean>(false);\r\n  screenStates = new BehaviorSubject<ScreenState[]>([\r\n    {\r\n      mainScreenPerson: '',\r\n      mainScreenProducerId: '',\r\n      mainScreenFilled: false,\r\n      adminOnMainScreen: false,\r\n    },\r\n  ]);\r\n  prevScreenStates = new BehaviorSubject<ScreenState[]>([\r\n    {\r\n      mainScreenPerson: '',\r\n      mainScreenProducerId: '',\r\n      mainScreenFilled: false,\r\n      adminOnMainScreen: false,\r\n    },\r\n  ]);\r\n  updateDateState = new BehaviorSubject<number | null>(null);\r\n  lastUpdate = new BehaviorSubject<number | null>(null);\r\n  nForReadjustRecord = new BehaviorSubject<number>(0);\r\n  fixedPageLimit = new BehaviorSubject<number>(4);\r\n  removeAltGrid = new BehaviorSubject<boolean>(false);\r\n  nForReadjust = new BehaviorSubject<number>(0);\r\n  reorderInterval = new BehaviorSubject<number>(30000);\r\n  fastReorderInterval = new BehaviorSubject<number>(10000);\r\n  lastReorderTime = new BehaviorSubject<number>(0);\r\n  audStreamNames = new BehaviorSubject<Stream[]>([]);\r\n  currentUserPage = new BehaviorSubject<number>(0);\r\n  mainHeightWidth = new BehaviorSubject<number>(\r\n    this.eventType.value == 'webinar' ? 67 : this.eventType.value == 'broadcast' ? 100 : 0,\r\n  );\r\n  prevMainHeightWidth = new BehaviorSubject<number>(this.mainHeightWidth.value);\r\n  prevDoPaginate = new BehaviorSubject<boolean>(false);\r\n  doPaginate = new BehaviorSubject<boolean>(false);\r\n  shareEnded = new BehaviorSubject<boolean>(false);\r\n  lStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  chatRefStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  controlHeight = new BehaviorSubject<number>(\r\n    this.eventType.value === 'webinar' || this.eventType.value === 'conference' ? 0 : 0.06,\r\n  );\r\n  isWideScreen = new BehaviorSubject<boolean>(false);\r\n  isMediumScreen = new BehaviorSubject<boolean>(false);\r\n  isSmallScreen = new BehaviorSubject<boolean>(false);\r\n  addGrid = new BehaviorSubject<boolean>(false);\r\n  addAltGrid = new BehaviorSubject<boolean>(false);\r\n  gridRows = new BehaviorSubject<number>(0);\r\n  gridCols = new BehaviorSubject<number>(0);\r\n  altGridRows = new BehaviorSubject<number>(0);\r\n  altGridCols = new BehaviorSubject<number>(0);\r\n  numberPages = new BehaviorSubject<number>(0);\r\n  currentStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  showMiniView = new BehaviorSubject<boolean>(false);\r\n  nStream = new BehaviorSubject<MediaStream | null>(null);\r\n  defer_receive = new BehaviorSubject<boolean>(false);\r\n  allAudioStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  remoteScreenStream = new BehaviorSubject<Stream[]>([]);\r\n  screenProducer = new BehaviorSubject<Producer | null>(null);\r\n  localScreenProducer = new BehaviorSubject<Producer | null>(null);\r\n  gotAllVids = new BehaviorSubject<boolean>(false);\r\n  paginationHeightWidth = new BehaviorSubject<number>(40);\r\n  paginationDirection = new BehaviorSubject<'horizontal' | 'vertical'>('horizontal');\r\n  gridSizes = new BehaviorSubject<GridSizes>({\r\n    gridWidth: 0,\r\n    gridHeight: 0,\r\n    altGridWidth: 0,\r\n    altGridHeight: 0,\r\n  });\r\n  screenForceFullDisplay = new BehaviorSubject<boolean>(false);\r\n  mainGridStream = new BehaviorSubject<CustomMediaComponent[]>([]);\r\n  otherGridStreams = new BehaviorSubject<CustomMediaComponent[][]>([]);\r\n  audioOnlyStreams = new BehaviorSubject<CustomMediaComponent[]>([]);\r\n  videoInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\r\n  audioInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\r\n  meetingProgressTime = new BehaviorSubject<string>('00:00:00');\r\n  meetingElapsedTime = new BehaviorSubject<number>(0);\r\n  ref_participants = new BehaviorSubject<Participant[]>([]);\r\n\r\n  updateValidated = (value: boolean) => {\r\n    this.validated.next(value);\r\n  };\r\n\r\n  updateSocket = (value: Socket) => {\r\n    this.socket.next(value);\r\n  };\r\n\r\n  updateLocalSocket = (value: Socket | null) => {\r\n    this.localSocket!.next(value!);\r\n  };\r\n\r\n  updateDevice = (value: Device | null) => {\r\n    this.device.next(value);\r\n  };\r\n\r\n  updateRoomData = (value: ResponseJoinRoom | null) => {\r\n    this.roomData.next(value);\r\n  };\r\n\r\n  updateApiKey = (value: string) => {\r\n    this.apiKey.next(value);\r\n  };\r\n\r\n  updateApiUserName = (value: string) => {\r\n    this.apiUserName.next(value);\r\n  };\r\n\r\n  updateApiToken = (value: string) => {\r\n    this.apiToken.next(value);\r\n  };\r\n\r\n  updateLink = (value: string) => {\r\n    this.link.next(value);\r\n  };\r\n\r\n  updateRoomName = (value: string) => {\r\n    this.roomName.next(value);\r\n  };\r\n\r\n  updateMember = (value: string) => {\r\n    if (value.length > 0 && value.includes(\"_\")) {\r\n      this.updateIslevel(value.split(\"_\")[1]);\r\n      value = value.split(\"_\")[0];\r\n    }\r\n    this.member.next(value);\r\n  };\r\n\r\n  updateAdminPasscode = (value: string) => {\r\n    this.adminPasscode.next(value);\r\n  };\r\n\r\n  updateIslevel = (value: string) => {\r\n    this.islevel.next(value);\r\n  };\r\n\r\n  updateCoHost = (value: string) => {\r\n    this.coHost.next(value);\r\n  };\r\n\r\n  updateCoHostResponsibility = (value: CoHostResponsibility[]) => {\r\n    this.coHostResponsibility.next(value);\r\n  };\r\n\r\n  updateYouAreCoHost = (value: boolean) => {\r\n    this.youAreCoHost.next(value);\r\n  };\r\n\r\n  updateYouAreHost = (value: boolean) => {\r\n    this.youAreHost.next(value);\r\n  };\r\n\r\n  updateConfirmedToRecord = (value: boolean) => {\r\n    this.confirmedToRecord.next(value);\r\n  };\r\n\r\n  updateMeetingDisplayType = (value: string) => {\r\n    this.meetingDisplayType.next(value);\r\n  };\r\n\r\n  updateMeetingVideoOptimized = (value: boolean) => {\r\n    this.meetingVideoOptimized.next(value);\r\n  };\r\n\r\n  updateEventType = (value: EventType) => {\r\n    this.eventType.next(value);\r\n    if (value != 'none') {\r\n      try {\r\n        setTimeout(() => {\r\n          this.handleResize();\r\n        }, 2000);\r\n      } catch {\r\n        /* handle error */\r\n      }\r\n    }\r\n  };\r\n\r\n  updateParticipants = (value: Participant[]) => {\r\n    this.participants.next(value);\r\n    this.participantsCounter.next(value.length);\r\n    this.filteredParticipants.next(this.participants.value);\r\n  };\r\n\r\n  updateFilteredParticipants = (value: Participant[]) => {\r\n    this.filteredParticipants.next(value);\r\n  };\r\n\r\n  updateParticipantsCounter = (value: number) => {\r\n    this.participantsCounter.next(value);\r\n  };\r\n\r\n  updateParticipantsFilter = (value: string) => {\r\n    this.participantsFilter.next(value);\r\n  };\r\n\r\n  updateConsume_sockets = (value: ConsumeSocket[]) => {\r\n    this.consume_sockets.next(value);\r\n  };\r\n\r\n  updateRtpCapabilities = (value: RtpCapabilities | null) => {\r\n    this.rtpCapabilities.next(value);\r\n  };\r\n\r\n  updateRoomRecvIPs = (value: string[]) => {\r\n    this.roomRecvIPs.next(value);\r\n  };\r\n\r\n  updateMeetingRoomParams = (value: MeetingRoomParams | null) => {\r\n    this.meetingRoomParams.next(value);\r\n  };\r\n\r\n  updateItemPageLimit = (value: number) => {\r\n    this.itemPageLimit.next(value);\r\n  };\r\n\r\n  updateAudioOnlyRoom = (value: boolean) => {\r\n    this.audioOnlyRoom.next(value);\r\n  };\r\n\r\n  updateAddForBasic = (value: boolean) => {\r\n    this.addForBasic.next(value);\r\n  };\r\n\r\n  updateScreenPageLimit = (value: number) => {\r\n    this.screenPageLimit.next(value);\r\n  };\r\n\r\n  updateShareScreenStarted = (value: boolean) => {\r\n    this.shareScreenStarted.next(value);\r\n  };\r\n\r\n  updateShared = (value: boolean) => {\r\n    this.shared.next(value);\r\n    this.screenShareActive.next(value);\r\n    if (value) {\r\n      setTimeout(async () => {\r\n        window.dispatchEvent(new Event('resize'));\r\n      }, 2000);\r\n    }\r\n  };\r\n\r\n  updateTargetOrientation = (value: string) => {\r\n    this.targetOrientation.next(value);\r\n  };\r\n\r\n  updateTargetResolution = (value: string) => {\r\n    this.targetResolution.next(value);\r\n  };\r\n\r\n  updateTargetResolutionHost = (value: string) => {\r\n    this.targetResolutionHost.next(value);\r\n  };\r\n\r\n  updateVidCons = (value: VidCons) => {\r\n    this.vidCons.next(value);\r\n  };\r\n\r\n  updateFrameRate = (value: number) => {\r\n    this.frameRate.next(value);\r\n  };\r\n\r\n  updateHParams = (value: HParamsType) => {\r\n    this.hParams.next(value);\r\n  };\r\n\r\n  updateVParams = (value: VParamsType) => {\r\n    this.vParams.next(value);\r\n  };\r\n\r\n  updateScreenParams = (value: ScreenParamsType) => {\r\n    this.screenParams.next(value);\r\n  };\r\n\r\n  updateAParams = (value: AParamsType) => {\r\n    this.aParams.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPausesLimit = (value: number) => {\r\n    this.recordingAudioPausesLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPausesCount = (value: number) => {\r\n    this.recordingAudioPausesCount.next(value);\r\n  };\r\n\r\n  updateRecordingAudioSupport = (value: boolean) => {\r\n    this.recordingAudioSupport.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPeopleLimit = (value: number) => {\r\n    this.recordingAudioPeopleLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAudioParticipantsTimeLimit = (value: number) => {\r\n    this.recordingAudioParticipantsTimeLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPausesCount = (value: number) => {\r\n    this.recordingVideoPausesCount.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPausesLimit = (value: number) => {\r\n    this.recordingVideoPausesLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoSupport = (value: boolean) => {\r\n    this.recordingVideoSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPeopleLimit = (value: number) => {\r\n    this.recordingVideoPeopleLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsTimeLimit = (value: number) => {\r\n    this.recordingVideoParticipantsTimeLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAllParticipantsSupport = (value: boolean) => {\r\n    this.recordingAllParticipantsSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsSupport = (value: boolean) => {\r\n    this.recordingVideoParticipantsSupport.next(value);\r\n  };\r\n\r\n  updateRecordingAllParticipantsFullRoomSupport = (value: boolean) => {\r\n    this.recordingAllParticipantsFullRoomSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsFullRoomSupport = (value: boolean) => {\r\n    this.recordingVideoParticipantsFullRoomSupport.next(value);\r\n  };\r\n\r\n  updateRecordingPreferredOrientation = (value: string) => {\r\n    this.recordingPreferredOrientation.next(value);\r\n  };\r\n\r\n  updateRecordingSupportForOtherOrientation = (value: boolean) => {\r\n    this.recordingSupportForOtherOrientation.next(value);\r\n  };\r\n\r\n  updateRecordingMultiFormatsSupport = (value: boolean) => {\r\n    this.recordingMultiFormatsSupport.next(value);\r\n  };\r\n\r\n  updateUserRecordingParams = (value: UserRecordingParams) => {\r\n    this.userRecordingParams.next(value);\r\n  };\r\n\r\n  updateCanRecord = (value: boolean) => {\r\n    this.canRecord.next(value);\r\n  };\r\n\r\n  updateStartReport = (value: boolean) => {\r\n    this.startReport.next(value);\r\n  };\r\n\r\n  updateEndReport = (value: boolean) => {\r\n    this.endReport.next(value);\r\n  };\r\n\r\n  updateRecordTimerInterval = (value: NodeJS.Timeout | null) => {\r\n    this.recordTimerInterval.next(value);\r\n  };\r\n\r\n  updateRecordStartTime = (value: number) => {\r\n    this.recordStartTime.next(value);\r\n  };\r\n\r\n  updateRecordElapsedTime = (value: number) => {\r\n    this.recordElapsedTime.next(value);\r\n  };\r\n\r\n  updateIsTimerRunning = (value: boolean) => {\r\n    this.isTimerRunning.next(value);\r\n  };\r\n\r\n  updateCanPauseResume = (value: boolean) => {\r\n    this.canPauseResume.next(value);\r\n  };\r\n\r\n  updateRecordChangeSeconds = (value: number) => {\r\n    this.recordChangeSeconds.next(value);\r\n  };\r\n\r\n  updatePauseLimit = (value: number) => {\r\n    this.pauseLimit.next(value);\r\n  };\r\n\r\n  updatePauseRecordCount = (value: number) => {\r\n    this.pauseRecordCount.next(value);\r\n  };\r\n\r\n  updateCanLaunchRecord = (value: boolean) => {\r\n    this.canLaunchRecord.next(value);\r\n  };\r\n\r\n  updateStopLaunchRecord = (value: boolean) => {\r\n    this.stopLaunchRecord.next(value);\r\n  };\r\n\r\n  updateParticipantsAll = (value: Participant[]) => {\r\n    this.participantsAll.next(value);\r\n  };\r\n\r\n  updateFirstAll = (value: boolean) => {\r\n    this.firstAll.next(value);\r\n  };\r\n\r\n  updateUpdateMainWindow = (value: boolean) => {\r\n    this.updateMainWindow.next(value);\r\n  };\r\n\r\n  updateFirst_round = (value: boolean) => {\r\n    this.first_round.next(value);\r\n  };\r\n\r\n  updateLandScaped = (value: boolean) => {\r\n    this.landScaped.next(value);\r\n  };\r\n\r\n  updateLock_screen = (value: boolean) => {\r\n    this.lock_screen.next(value);\r\n  };\r\n\r\n  updateScreenId = (value: string) => {\r\n    this.screenId.next(value);\r\n  };\r\n\r\n  updateAllVideoStreams = (value: (Participant | Stream)[]) => {\r\n    this.allVideoStreams.next(value);\r\n  };\r\n\r\n  updateNewLimitedStreams = (value: (Participant | Stream)[]) => {\r\n    this.newLimitedStreams.next(value);\r\n  };\r\n\r\n  updateNewLimitedStreamsIDs = (value: string[]) => {\r\n    this.newLimitedStreamsIDs.next(value);\r\n  };\r\n\r\n  updateActiveSounds = (value: string[]) => {\r\n    this.activeSounds.next(value);\r\n  };\r\n\r\n  updateScreenShareIDStream = (value: string) => {\r\n    this.screenShareIDStream.next(value);\r\n  };\r\n\r\n  updateScreenShareNameStream = (value: string) => {\r\n    this.screenShareNameStream.next(value);\r\n  };\r\n\r\n  updateAdminIDStream = (value: string) => {\r\n    this.adminIDStream.next(value);\r\n  };\r\n\r\n  updateAdminNameStream = (value: string) => {\r\n    this.adminNameStream.next(value);\r\n  };\r\n\r\n  updateYouYouStream = (value: (Participant | Stream)[]) => {\r\n    this.youYouStream.next(value);\r\n  };\r\n\r\n  updateYouYouStreamIDs = (value: string[]) => {\r\n    this.youYouStreamIDs.next(value);\r\n  };\r\n\r\n  updateLocalStream = (value: MediaStream | null) => {\r\n    this.localStream.next(value);\r\n  };\r\n\r\n  updateRecordStarted = (value: boolean) => {\r\n    this.recordStarted.next(value);\r\n  };\r\n\r\n  updateRecordResumed = (value: boolean) => {\r\n    this.recordResumed.next(value);\r\n  };\r\n\r\n  updateRecordPaused = (value: boolean) => {\r\n    this.recordPaused.next(value);\r\n  };\r\n\r\n  updateRecordStopped = (value: boolean) => {\r\n    this.recordStopped.next(value);\r\n  };\r\n\r\n  updateAdminRestrictSetting = (value: boolean) => {\r\n    this.adminRestrictSetting.next(value);\r\n  };\r\n\r\n  updateVideoRequestState = (value: string | null) => {\r\n    this.videoRequestState.next(value);\r\n  };\r\n\r\n  updateVideoRequestTime = (value: number) => {\r\n    this.videoRequestTime.next(value);\r\n  };\r\n\r\n  updateVideoAction = (value: boolean) => {\r\n    this.videoAction.next(value);\r\n  };\r\n\r\n  updateLocalStreamVideo = (value: MediaStream | null) => {\r\n    this.localStreamVideo.next(value);\r\n  };\r\n\r\n  updateUserDefaultVideoInputDevice = (value: string) => {\r\n    this.userDefaultVideoInputDevice.next(value);\r\n  };\r\n\r\n  updateCurrentFacingMode = (value: string) => {\r\n    this.currentFacingMode.next(value);\r\n  };\r\n\r\n  updatePrevFacingMode = (value: string) => {\r\n    this.prevFacingMode.next(value);\r\n  };\r\n\r\n  updateDefVideoID = (value: string) => {\r\n    this.defVideoID.next(value);\r\n  };\r\n\r\n  updateAllowed = (value: boolean) => {\r\n    this.allowed.next(value);\r\n  };\r\n\r\n  updateDispActiveNames = (value: string[]) => {\r\n    this.dispActiveNames.next(value);\r\n  };\r\n\r\n  updateP_dispActiveNames = (value: string[]) => {\r\n    this.p_dispActiveNames.next(value);\r\n  };\r\n\r\n  updateActiveNames = (value: string[]) => {\r\n    this.activeNames.next(value);\r\n  };\r\n\r\n  updatePrevActiveNames = (value: string[]) => {\r\n    this.prevActiveNames.next(value);\r\n  };\r\n\r\n  updateP_activeNames = (value: string[]) => {\r\n    this.p_activeNames.next(value);\r\n  };\r\n\r\n  updateMembersReceived = (value: boolean) => {\r\n    this.membersReceived.next(value);\r\n  };\r\n\r\n  updateDeferScreenReceived = (value: boolean) => {\r\n    this.deferScreenReceived.next(value);\r\n  };\r\n\r\n  updateHostFirstSwitch = (value: boolean) => {\r\n    this.hostFirstSwitch.next(value);\r\n  };\r\n\r\n  updateMicAction = (value: boolean) => {\r\n    this.micAction.next(value);\r\n  };\r\n\r\n  updateScreenAction = (value: boolean) => {\r\n    this.screenAction.next(value);\r\n  };\r\n\r\n  updateChatAction = (value: boolean) => {\r\n    this.chatAction.next(value);\r\n  };\r\n\r\n  updateAudioRequestState = (value: string | null) => {\r\n    this.audioRequestState.next(value);\r\n  };\r\n\r\n  updateScreenRequestState = (value: string | null) => {\r\n    this.screenRequestState.next(value);\r\n  };\r\n\r\n  updateChatRequestState = (value: string | null) => {\r\n    this.chatRequestState.next(value);\r\n  };\r\n\r\n  updateAudioRequestTime = (value: number) => {\r\n    this.audioRequestTime.next(value);\r\n  };\r\n\r\n  updateScreenRequestTime = (value: number) => {\r\n    this.screenRequestTime.next(value);\r\n  };\r\n\r\n  updateChatRequestTime = (value: number) => {\r\n    this.chatRequestTime.next(value);\r\n  };\r\n\r\n  updateOldSoundIds = (value: string[]) => {\r\n    this.oldSoundIds.next(value);\r\n  };\r\n\r\n  updateHostLabel = (value: string) => {\r\n    this.hostLabel.next(value);\r\n  };\r\n\r\n  updateMainScreenFilled = (value: boolean) => {\r\n    this.mainScreenFilled.next(value);\r\n  };\r\n\r\n  updateLocalStreamScreen = (value: MediaStream | null) => {\r\n    this.localStreamScreen.next(value);\r\n  };\r\n\r\n  updateScreenAlreadyOn = (value: boolean) => {\r\n    this.screenAlreadyOn.next(value);\r\n  };\r\n\r\n  updateChatAlreadyOn = (value: boolean) => {\r\n    this.chatAlreadyOn.next(value);\r\n  };\r\n\r\n  updateRedirectURL = (value: string) => {\r\n    this.redirectURL.next(value);\r\n  };\r\n\r\n  updateOldAllStreams = (value: (Participant | Stream)[]) => {\r\n    this.oldAllStreams.next(value);\r\n  };\r\n\r\n  updateAdminVidID = (value: string) => {\r\n    this.adminVidID.next(value);\r\n  };\r\n\r\n  updateStreamNames = (value: Stream[]) => {\r\n    this.streamNames.next(value);\r\n  };\r\n\r\n  updateNon_alVideoStreams = (value: Participant[]) => {\r\n    this.non_alVideoStreams.next(value);\r\n  };\r\n\r\n  updateSortAudioLoudness = (value: boolean) => {\r\n    this.sortAudioLoudness.next(value);\r\n  };\r\n\r\n  updateAudioDecibels = (value: AudioDecibels[]) => {\r\n    this.audioDecibels.next(value);\r\n  };\r\n\r\n  updateMixed_alVideoStreams = (value: (Participant | Stream)[]) => {\r\n    this.mixed_alVideoStreams.next(value);\r\n  };\r\n\r\n  updateNon_alVideoStreams_muted = (value: Participant[]) => {\r\n    this.non_alVideoStreams_muted.next(value);\r\n  };\r\n\r\n  updatePaginatedStreams = (value: (Participant | Stream)[][]) => {\r\n    this.paginatedStreams.next(value);\r\n  };\r\n\r\n  updateLocalStreamAudio = (value: MediaStream | null) => {\r\n    this.localStreamAudio.next(value);\r\n  };\r\n\r\n  updateDefAudioID = (value: string) => {\r\n    this.defAudioID.next(value);\r\n  };\r\n\r\n  updateUserDefaultAudioInputDevice = (value: string) => {\r\n    this.userDefaultAudioInputDevice.next(value);\r\n  };\r\n\r\n  updateUserDefaultAudioOutputDevice = (value: string) => {\r\n    this.userDefaultAudioOutputDevice.next(value);\r\n  };\r\n\r\n  updatePrevAudioInputDevice = (value: string) => {\r\n    this.prevAudioInputDevice.next(value);\r\n  };\r\n\r\n  updatePrevVideoInputDevice = (value: string) => {\r\n    this.prevVideoInputDevice.next(value);\r\n  };\r\n\r\n  updateAudioPaused = (value: boolean) => {\r\n    this.audioPaused.next(value);\r\n  };\r\n\r\n  updateMainScreenPerson = (value: string) => {\r\n    this.mainScreenPerson.next(value);\r\n  };\r\n\r\n  updateAdminOnMainScreen = (value: boolean) => {\r\n    this.adminOnMainScreen.next(value);\r\n  };\r\n\r\n  updateScreenStates = (value: ScreenState[]) => {\r\n    this.screenStates.next(value);\r\n  };\r\n\r\n  updatePrevScreenStates = (value: ScreenState[]) => {\r\n    this.prevScreenStates.next(value);\r\n  };\r\n\r\n  updateUpdateDateState = (value: number | null) => {\r\n    this.updateDateState.next(value);\r\n  };\r\n\r\n  updateLastUpdate = (value: number | null) => {\r\n    this.lastUpdate.next(value);\r\n  };\r\n\r\n  updateNForReadjustRecord = (value: number) => {\r\n    this.nForReadjustRecord.next(value);\r\n  };\r\n\r\n  updateFixedPageLimit = (value: number) => {\r\n    this.fixedPageLimit.next(value);\r\n  };\r\n\r\n  updateRemoveAltGrid = (value: boolean) => {\r\n    this.removeAltGrid.next(value);\r\n  };\r\n\r\n  updateNForReadjust = (value: number) => {\r\n    this.nForReadjust.next(value);\r\n  };\r\n\r\n  updateLastReorderTime = (value: number) => {\r\n    this.lastReorderTime.next(value);\r\n  };\r\n\r\n  updateAudStreamNames = (value: Stream[]) => {\r\n    this.audStreamNames.next(value);\r\n  };\r\n\r\n  updateCurrentUserPage = (value: number) => {\r\n    this.currentUserPage.next(value);\r\n  };\r\n\r\n  updateMainHeightWidth = (value: number) => {\r\n    this.mainHeightWidth.next(value);\r\n  };\r\n\r\n  updatePrevMainHeightWidth = (value: number) => {\r\n    this.prevMainHeightWidth.next(value);\r\n  };\r\n\r\n  updatePrevDoPaginate = (value: boolean) => {\r\n    this.prevDoPaginate.next(value);\r\n  };\r\n\r\n  updateDoPaginate = (value: boolean) => {\r\n    this.doPaginate.next(value);\r\n  };\r\n\r\n  updateShareEnded = (value: boolean) => {\r\n    this.shareEnded.next(value);\r\n  };\r\n\r\n  updateLStreams = (value: (Participant | Stream)[]) => {\r\n    this.lStreams.next(value);\r\n  };\r\n\r\n  updateChatRefStreams = (value: (Participant | Stream)[]) => {\r\n    this.chatRefStreams.next(value);\r\n  };\r\n\r\n  updateControlHeight = (value: number) => {\r\n    this.controlHeight.next(value);\r\n  };\r\n\r\n  updateIsWideScreen = (value: boolean) => {\r\n    this.isWideScreen.next(value);\r\n  };\r\n\r\n  updateIsMediumScreen = (value: boolean) => {\r\n    this.isMediumScreen.next(value);\r\n  };\r\n\r\n  updateIsSmallScreen = (value: boolean) => {\r\n    this.isSmallScreen.next(value);\r\n  };\r\n\r\n  updateAddGrid = (value: boolean) => {\r\n    this.addGrid.next(value);\r\n  };\r\n\r\n  updateAddAltGrid = (value: boolean) => {\r\n    this.addAltGrid.next(value);\r\n  };\r\n\r\n  updateGridRows = (value: number) => {\r\n    this.gridRows.next(value);\r\n  };\r\n\r\n  updateGridCols = (value: number) => {\r\n    this.gridCols.next(value);\r\n  };\r\n\r\n  updateAltGridRows = (value: number) => {\r\n    this.altGridRows.next(value);\r\n  };\r\n\r\n  updateAltGridCols = (value: number) => {\r\n    this.altGridCols.next(value);\r\n  };\r\n\r\n  updateNumberPages = (value: number) => {\r\n    this.numberPages.next(value);\r\n  };\r\n\r\n  updateCurrentStreams = (value: (Participant | Stream)[]) => {\r\n    this.currentStreams.next(value);\r\n  };\r\n\r\n  updateShowMiniView = (value: boolean) => {\r\n    this.showMiniView.next(value);\r\n  };\r\n\r\n  updateNStream = (value: MediaStream | null) => {\r\n    this.nStream.next(value);\r\n  };\r\n\r\n  updateDefer_receive = (value: boolean) => {\r\n    this.defer_receive.next(value);\r\n  };\r\n\r\n  updateAllAudioStreams = (value: (Participant | Stream)[]) => {\r\n    this.allAudioStreams.next(value);\r\n  };\r\n\r\n  updateRemoteScreenStream = (value: Stream[]) => {\r\n    this.remoteScreenStream.next(value);\r\n  };\r\n\r\n  updateScreenProducer = (value: Producer | null) => {\r\n    this.screenProducer.next(value);\r\n  };\r\n\r\n  updateLocalScreenProducer = (value: Producer | null) => {\r\n    this.localScreenProducer.next(value);\r\n  };\r\n\r\n  updateGotAllVids = (value: boolean) => {\r\n    this.gotAllVids.next(value);\r\n  };\r\n\r\n  updatePaginationHeightWidth = (value: number) => {\r\n    this.paginationHeightWidth.next(value);\r\n  };\r\n\r\n  updatePaginationDirection = (value: 'horizontal' | 'vertical') => {\r\n    this.paginationDirection.next(value);\r\n  };\r\n\r\n  updateGridSizes = (value: GridSizes) => {\r\n    this.gridSizes.next(value);\r\n  };\r\n\r\n  updateScreenForceFullDisplay = (value: boolean) => {\r\n    this.screenForceFullDisplay.next(value);\r\n  };\r\n\r\n  updateMainGridStream = (value: CustomMediaComponent[]) => {\r\n    this.mainGridStream.next(value);\r\n  };\r\n\r\n  updateOtherGridStreams = (value: CustomMediaComponent[][]) => {\r\n    this.otherGridStreams.next(value);\r\n  };\r\n\r\n  updateAudioOnlyStreams = (value: CustomMediaComponent[]) => {\r\n    this.audioOnlyStreams.next(value);\r\n  };\r\n\r\n  updateVideoInputs = (value: MediaDeviceInfo[]) => {\r\n    this.videoInputs.next(value);\r\n  };\r\n\r\n  updateAudioInputs = (value: MediaDeviceInfo[]) => {\r\n    this.audioInputs.next(value);\r\n  };\r\n\r\n  updateMeetingProgressTime = (value: string) => {\r\n    this.meetingProgressTime.next(value);\r\n  };\r\n\r\n  updateMeetingElapsedTime = (value: number) => {\r\n    this.meetingElapsedTime.next(value);\r\n  };\r\n\r\n  updateRef_participants = (value: Participant[]) => {\r\n    this.ref_participants.next(value);\r\n  };\r\n\r\n  // Messages\r\n  messages = new BehaviorSubject<Message[]>([]);\r\n  startDirectMessage = new BehaviorSubject<boolean>(false);\r\n  directMessageDetails = new BehaviorSubject<Participant | null>(null);\r\n  showMessagesBadge = new BehaviorSubject<boolean>(false);\r\n\r\n  // Event Settings\r\n  audioSetting = new BehaviorSubject<string>('allow');\r\n  videoSetting = new BehaviorSubject<string>('allow');\r\n  screenshareSetting = new BehaviorSubject<string>('allow');\r\n  chatSetting = new BehaviorSubject<string>('allow');\r\n\r\n  // Display Settings\r\n  displayOption = new BehaviorSubject<string>('media');\r\n  autoWave = new BehaviorSubject<boolean>(true);\r\n  forceFullDisplay = new BehaviorSubject<boolean>(true);\r\n  prevForceFullDisplay = new BehaviorSubject<boolean>(false);\r\n  prevMeetingDisplayType = new BehaviorSubject<string>('video');\r\n\r\n  // Waiting Room\r\n  waitingRoomFilter = new BehaviorSubject<string>('');\r\n  waitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>(\r\n    this.useSeed && this.seedData?.waitingList ? this.seedData.waitingList : [],\r\n  );\r\n  waitingRoomCounter = new BehaviorSubject<number>(0);\r\n  filteredWaitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>(\r\n    this.useSeed && this.seedData?.waitingList ? this.seedData.waitingList : [],\r\n  );\r\n\r\n  // Requests\r\n  requestFilter = new BehaviorSubject<string>('');\r\n  requestList = new BehaviorSubject<Request[]>(\r\n    this.useSeed && this.seedData?.requests ? this.seedData.requests : [],\r\n  );\r\n  requestCounter = new BehaviorSubject<number>(0);\r\n  filteredRequestList = new BehaviorSubject<Request[]>(\r\n    this.useSeed && this.seedData?.requests ? this.seedData.requests : [],\r\n  );\r\n\r\n  // Total Requests and Waiting Room\r\n  totalReqWait = new BehaviorSubject<number>(0);\r\n\r\n  // Alerts\r\n  alertVisible = new BehaviorSubject<boolean>(false);\r\n  alertMessage = new BehaviorSubject<string>('');\r\n  alertType = new BehaviorSubject<'success' | 'danger'>('success');\r\n  alertDuration = new BehaviorSubject<number>(3000);\r\n\r\n  // Progress Timer\r\n  progressTimerVisible = new BehaviorSubject<boolean>(true);\r\n  progressTimerValue = new BehaviorSubject<number>(0);\r\n\r\n  // Menu Modals\r\n  isMenuModalVisible = new BehaviorSubject<boolean>(false);\r\n  isRecordingModalVisible = new BehaviorSubject<boolean>(false);\r\n  isSettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isRequestsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isWaitingModalVisible = new BehaviorSubject<boolean>(false);\r\n  isCoHostModalVisible = new BehaviorSubject<boolean>(false);\r\n  isMediaSettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isDisplaySettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Other Modals\r\n  isParticipantsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isMessagesModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfirmExitModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfirmHereModalVisible = new BehaviorSubject<boolean>(false);\r\n  isShareEventModalVisible = new BehaviorSubject<boolean>(false);\r\n  isLoadingModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Recording Options\r\n  recordingMediaOptions = new BehaviorSubject<string>('video');\r\n  recordingAudioOptions = new BehaviorSubject<string>('all');\r\n  recordingVideoOptions = new BehaviorSubject<string>('all');\r\n  recordingVideoType = new BehaviorSubject<string>('fullDisplay');\r\n  recordingVideoOptimized = new BehaviorSubject<boolean>(false);\r\n  recordingDisplayType = new BehaviorSubject<'video' | 'media' | 'all'>('video');\r\n  recordingAddHLS = new BehaviorSubject<boolean>(true);\r\n  recordingNameTags = new BehaviorSubject<boolean>(true);\r\n  recordingBackgroundColor = new BehaviorSubject<string>('#83c0e9');\r\n  recordingNameTagsColor = new BehaviorSubject<string>('#ffffff');\r\n  recordingAddText = new BehaviorSubject<boolean>(false);\r\n  recordingCustomText = new BehaviorSubject<string>('Add Text');\r\n  recordingCustomTextPosition = new BehaviorSubject<string>('top');\r\n  recordingCustomTextColor = new BehaviorSubject<string>('#ffffff');\r\n  recordingOrientationVideo = new BehaviorSubject<string>('landscape');\r\n  clearedToResume = new BehaviorSubject<boolean>(true);\r\n  clearedToRecord = new BehaviorSubject<boolean>(true);\r\n  recordState = new BehaviorSubject<string>('green');\r\n  showRecordButtons = new BehaviorSubject<boolean>(false);\r\n  recordingProgressTime = new BehaviorSubject<string>('00:00:00');\r\n  audioSwitching = new BehaviorSubject<boolean>(false);\r\n  videoSwitching = new BehaviorSubject<boolean>(false);\r\n\r\n  // Media States\r\n  videoAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  audioAlreadyOn = new BehaviorSubject<boolean>(false);\r\n\r\n  componentSizes = new BehaviorSubject<ComponentSizes>({\r\n    mainHeight: 0,\r\n    otherHeight: 0,\r\n    mainWidth: 0,\r\n    otherWidth: 0,\r\n  });\r\n\r\n  // Permissions\r\n  hasCameraPermission = new BehaviorSubject<boolean>(false);\r\n  hasAudioPermission = new BehaviorSubject<boolean>(false);\r\n\r\n  // Transports\r\n  transportCreated = new BehaviorSubject<boolean>(false);\r\n  localTransportCreated = new BehaviorSubject<boolean>(false);\r\n  transportCreatedVideo = new BehaviorSubject<boolean>(false);\r\n  transportCreatedAudio = new BehaviorSubject<boolean>(false);\r\n  transportCreatedScreen = new BehaviorSubject<boolean>(false);\r\n  producerTransport = new BehaviorSubject<Transport | null>(null);\r\n  localProducerTransport = new BehaviorSubject<Transport | null>(null);\r\n  videoProducer = new BehaviorSubject<Producer | null>(null);\r\n  localVideoProducer = new BehaviorSubject<Producer | null>(null);\r\n  params = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  videoParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  audioParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  audioProducer = new BehaviorSubject<Producer | null>(null);\r\n  audioLevel = new BehaviorSubject<number>(0);\r\n  localAudioProducer = new BehaviorSubject<Producer | null>(null);\r\n  consumerTransports = new BehaviorSubject<TransportType[]>([]);\r\n  consumingTransports = new BehaviorSubject<string[]>([]);\r\n\r\n  // Polls\r\n  polls = new BehaviorSubject<Poll[]>(\r\n    this.useSeed && this.seedData?.polls ? this.seedData.polls : [],\r\n  );\r\n  poll = new BehaviorSubject<Poll | null>(null);\r\n  isPollModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Background\r\n  customImage = new BehaviorSubject<string>('');\r\n  selectedImage = new BehaviorSubject<string>('');\r\n  segmentVideo = new BehaviorSubject<MediaStream | null>(null);\r\n  selfieSegmentation = new BehaviorSubject<SelfieSegmentation | null>(null);\r\n  pauseSegmentation = new BehaviorSubject<boolean>(false);\r\n  processedStream = new BehaviorSubject<MediaStream | null>(null);\r\n  keepBackground = new BehaviorSubject<boolean>(false);\r\n  backgroundHasChanged = new BehaviorSubject<boolean>(false);\r\n  virtualStream = new BehaviorSubject<MediaStream | null>(null);\r\n  mainCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  prevKeepBackground = new BehaviorSubject<boolean>(false);\r\n  appliedBackground = new BehaviorSubject<boolean>(false);\r\n  isBackgroundModalVisible = new BehaviorSubject<boolean>(false);\r\n  autoClickBackground = new BehaviorSubject<boolean>(false);\r\n\r\n  // Breakout Rooms\r\n  breakoutRooms = new BehaviorSubject<BreakoutParticipant[][]>(\r\n    this.useSeed && this.seedData?.breakoutRooms ? this.seedData.breakoutRooms : [],\r\n  );\r\n  currentRoomIndex = new BehaviorSubject<number>(0);\r\n  canStartBreakout = new BehaviorSubject<boolean>(false);\r\n  breakOutRoomStarted = new BehaviorSubject<boolean>(false);\r\n  breakOutRoomEnded = new BehaviorSubject<boolean>(false);\r\n  hostNewRoom = new BehaviorSubject<number>(-1);\r\n  limitedBreakRoom = new BehaviorSubject<BreakoutParticipant[]>([]);\r\n  mainRoomsLength = new BehaviorSubject<number>(0);\r\n  memberRoom = new BehaviorSubject<number>(-1);\r\n  isBreakoutRoomsModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Whiteboard\r\n  whiteboardUsers = new BehaviorSubject<WhiteboardUser[]>(\r\n    this.useSeed && this.seedData?.whiteboardUsers ? this.seedData.whiteboardUsers : [],\r\n  );\r\n  currentWhiteboardIndex = new BehaviorSubject<number>(0);\r\n  canStartWhiteboard = new BehaviorSubject<boolean>(false);\r\n  whiteboardStarted = new BehaviorSubject<boolean>(false);\r\n  whiteboardEnded = new BehaviorSubject<boolean>(false);\r\n  whiteboardLimit = new BehaviorSubject<number>(4);\r\n  isWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfigureWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\r\n  shapes = new BehaviorSubject<Shape[]>([]);\r\n  useImageBackground = new BehaviorSubject<boolean>(true);\r\n  redoStack = new BehaviorSubject<Shape[]>([]);\r\n  undoStack = new BehaviorSubject<string[]>([]);\r\n  canvasStream = new BehaviorSubject<MediaStream | null>(null);\r\n  canvasWhiteboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n\r\n  // Screenboard\r\n  canvasScreenboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  processedScreenStream = new BehaviorSubject<MediaStream | null>(null);\r\n  annotateScreenStream = new BehaviorSubject<boolean>(false);\r\n  mainScreenCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  isScreenboardModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  //state variables for the control buttons\r\n  micActive = new BehaviorSubject<boolean>(\r\n    this.audioAlreadyOn.value ? this.audioAlreadyOn.value : false,\r\n  );\r\n  videoActive = new BehaviorSubject<boolean>(\r\n    this.videoAlreadyOn.value ? this.videoAlreadyOn.value : false,\r\n  );\r\n  screenShareActive = new BehaviorSubject<boolean>(false);\r\n  endCallActive = new BehaviorSubject<boolean>(false);\r\n  participantsActive = new BehaviorSubject<boolean>(false);\r\n  menuActive = new BehaviorSubject<boolean>(false);\r\n  commentsActive = new BehaviorSubject<boolean>(false);\r\n\r\n  // Update functions\r\n  updateMessages = (value: Message[]) => {\r\n    this.messages.next(value);\r\n  };\r\n\r\n  updateStartDirectMessage = (value: boolean) => {\r\n    this.startDirectMessage.next(value);\r\n  };\r\n\r\n  updateDirectMessageDetails = (value: Participant | null) => {\r\n    this.directMessageDetails.next(value);\r\n  };\r\n\r\n  updateShowMessagesBadge = (value: boolean) => {\r\n    this.showMessagesBadge.next(value);\r\n  };\r\n\r\n  updateAudioSetting = (value: string) => {\r\n    this.audioSetting.next(value);\r\n  };\r\n\r\n  updateVideoSetting = (value: string) => {\r\n    this.videoSetting.next(value);\r\n  };\r\n\r\n  updateScreenshareSetting = (value: string) => {\r\n    this.screenshareSetting.next(value);\r\n  };\r\n\r\n  updateChatSetting = (value: string) => {\r\n    this.chatSetting.next(value);\r\n  };\r\n\r\n  updateDisplayOption = (value: string) => {\r\n    this.displayOption.next(value);\r\n  };\r\n\r\n  updateAutoWave = (value: boolean) => {\r\n    this.autoWave.next(value);\r\n  };\r\n\r\n  updateForceFullDisplay = (value: boolean) => {\r\n    this.forceFullDisplay.next(value);\r\n  };\r\n\r\n  updatePrevForceFullDisplay = (value: boolean) => {\r\n    this.prevForceFullDisplay.next(value);\r\n  };\r\n\r\n  updatePrevMeetingDisplayType = (value: string) => {\r\n    this.prevMeetingDisplayType.next(value);\r\n  };\r\n\r\n  updateWaitingRoomCounter = (value: number) => {\r\n    this.waitingRoomCounter.next(value);\r\n  };\r\n\r\n  updateWaitingRoomFilter = (value: string) => {\r\n    this.waitingRoomFilter.next(value);\r\n  };\r\n\r\n  updateWaitingRoomList = (value: WaitingRoomParticipant[]) => {\r\n    this.waitingRoomList.next(value);\r\n    this.filteredWaitingRoomList.next(value);\r\n    this.waitingRoomCounter.next(value.length);\r\n  };\r\n\r\n  onWaitingRoomFilterChange = (value: string) => {\r\n    if (value !== '' && value.length > 0) {\r\n      const filteredWaitingRoom = this.waitingRoomList\r\n        .getValue()\r\n        .filter((waitingRoom: WaitingRoomParticipant) => {\r\n          return waitingRoom.name.toLowerCase().includes(value.toLowerCase());\r\n        });\r\n      this.filteredWaitingRoomList.next(filteredWaitingRoom);\r\n      this.waitingRoomCounter.next(filteredWaitingRoom.length);\r\n    } else {\r\n      this.filteredWaitingRoomList.next(this.waitingRoomList.getValue());\r\n      this.waitingRoomCounter.next(this.waitingRoomList.getValue().length);\r\n    }\r\n  };\r\n\r\n  onWaitingRoomClose = () => {\r\n    this.updateIsWaitingModalVisible(false);\r\n  };\r\n\r\n  updateRequestCounter = (value: number) => {\r\n    this.requestCounter.next(value);\r\n  };\r\n\r\n  updateRequestFilter = (value: string) => {\r\n    this.requestFilter.next(value);\r\n  };\r\n\r\n  updateRequestList = (value: Request[]) => {\r\n    this.requestList.next(value);\r\n    this.filteredRequestList.next(value);\r\n    this.requestCounter.next(value.length);\r\n  };\r\n\r\n  onRequestFilterChange = (value: string) => {\r\n    if (value !== '' && value.length > 0) {\r\n      const filteredRequest = this.requestList.getValue().filter((request: Request) => {\r\n        return request?.name?.toLowerCase().includes(value.toLowerCase()) ?? false;\r\n      });\r\n      this.filteredRequestList.next(filteredRequest);\r\n      this.requestCounter.next(filteredRequest.length);\r\n    } else {\r\n      this.filteredRequestList.next(this.requestList.getValue());\r\n      this.requestCounter.next(this.requestList.getValue().length);\r\n    }\r\n  };\r\n\r\n  onRequestClose = () => {\r\n    this.updateIsRequestsModalVisible(false);\r\n  };\r\n\r\n  updateTotalReqWait = (value: number) => {\r\n    this.totalReqWait.next(value);\r\n  };\r\n\r\n  updateAlertVisible = (value: boolean) => {\r\n    this.alertVisible.next(value);\r\n  };\r\n\r\n  updateAlertMessage = (value: string) => {\r\n    this.alertMessage.next(value);\r\n  };\r\n\r\n  updateAlertType = (value: 'success' | 'danger') => {\r\n    this.alertType.next(value);\r\n  };\r\n\r\n  updateAlertDuration = (value: number) => {\r\n    this.alertDuration.next(value);\r\n  };\r\n\r\n  updateProgressTimerVisible = (value: boolean) => {\r\n    this.progressTimerVisible.next(value);\r\n  };\r\n\r\n  updateProgressTimerValue = (value: number) => {\r\n    this.progressTimerValue.next(value);\r\n  };\r\n\r\n  updateIsMenuModalVisible = (value: boolean) => {\r\n    this.isMenuModalVisible.next(value);\r\n  };\r\n\r\n  updateIsRecordingModalVisible = (value: boolean) => {\r\n    this.isRecordingModalVisible.next(value);\r\n    if (value) {\r\n      this.updateConfirmedToRecord(false);\r\n    } else {\r\n      if (\r\n        this.clearedToRecord.getValue() &&\r\n        this.clearedToResume.getValue() &&\r\n        this.recordStarted.getValue()\r\n      ) {\r\n        this.updateShowRecordButtons(true);\r\n      }\r\n    }\r\n  };\r\n\r\n  updateIsSettingsModalVisible = (value: boolean) => {\r\n    this.isSettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsRequestsModalVisible = (value: boolean) => {\r\n    this.isRequestsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsWaitingModalVisible = (value: boolean) => {\r\n    this.isWaitingModalVisible.next(value);\r\n  };\r\n\r\n  updateIsCoHostModalVisible = (value: boolean) => {\r\n    this.isCoHostModalVisible.next(value);\r\n  };\r\n\r\n  updateIsMediaSettingsModalVisible = (value: boolean) => {\r\n    this.isMediaSettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsDisplaySettingsModalVisible = (value: boolean) => {\r\n    this.isDisplaySettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsParticipantsModalVisible = (value: boolean) => {\r\n    this.isParticipantsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsMessagesModalVisible = (value: boolean) => {\r\n    this.isMessagesModalVisible.next(value);\r\n    if (!value) {\r\n      this.updateShowMessagesBadge(false);\r\n    }\r\n  };\r\n\r\n  updateIsConfirmExitModalVisible = (value: boolean) => {\r\n    this.isConfirmExitModalVisible.next(value);\r\n  };\r\n\r\n  updateIsConfirmHereModalVisible = (value: boolean) => {\r\n    this.isConfirmHereModalVisible.next(value);\r\n  };\r\n\r\n  updateIsLoadingModalVisible = (value: boolean) => {\r\n    this.isLoadingModalVisible.next(value);\r\n  };\r\n\r\n  updateIsShareEventModalVisible = (value: boolean) => {\r\n    this.isShareEventModalVisible.next(value);\r\n  };\r\n\r\n  updateRecordingMediaOptions = (value: string) => {\r\n    this.recordingMediaOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAudioOptions = (value: string) => {\r\n    this.recordingAudioOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoOptions = (value: string) => {\r\n    this.recordingVideoOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoType = (value: string) => {\r\n    this.recordingVideoType.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoOptimized = (value: boolean) => {\r\n    this.recordingVideoOptimized.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingDisplayType = (value: 'video' | 'media' | 'all') => {\r\n    this.recordingDisplayType.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAddHLS = (value: boolean) => {\r\n    this.recordingAddHLS.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAddText = (value: boolean) => {\r\n    this.recordingAddText.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomText = (value: string) => {\r\n    this.recordingCustomText.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomTextPosition = (value: string) => {\r\n    this.recordingCustomTextPosition.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomTextColor = (value: string) => {\r\n    this.recordingCustomTextColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingNameTags = (value: boolean) => {\r\n    this.recordingNameTags.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingBackgroundColor = (value: string) => {\r\n    this.recordingBackgroundColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingNameTagsColor = (value: string) => {\r\n    this.recordingNameTagsColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingOrientationVideo = (value: string) => {\r\n    this.recordingOrientationVideo.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateClearedToResume = (value: boolean) => {\r\n    this.clearedToResume.next(value);\r\n  };\r\n\r\n  updateClearedToRecord = (value: boolean) => {\r\n    this.clearedToRecord.next(value);\r\n  };\r\n\r\n  updateRecordState = (value: string) => {\r\n    if (this.recordStarted.value && !this.recordStopped.value) {\r\n      if (!this.recordPaused.value) {\r\n        this.recordState.next('red');\r\n      } else {\r\n        this.recordState.next('yellow');\r\n      }\r\n    } else {\r\n      this.recordState.next(value);\r\n    }\r\n    this.recordState.next(value);\r\n  };\r\n\r\n  updateShowRecordButtons = (value: boolean) => {\r\n    this.showRecordButtons.next(value);\r\n  };\r\n\r\n  updateRecordingProgressTime = (value: string) => {\r\n    this.recordingProgressTime.next(value);\r\n    this.updateRecordTimerWidget();\r\n  };\r\n\r\n  updateAudioSwitching = (value: boolean) => {\r\n    this.audioSwitching.next(value);\r\n  };\r\n\r\n  updateVideoSwitching = (value: boolean) => {\r\n    this.videoSwitching.next(value);\r\n  };\r\n\r\n  updateVideoAlreadyOn = (value: boolean) => {\r\n    this.videoAlreadyOn.next(value);\r\n    this.videoActive.next(value);\r\n  };\r\n\r\n  updateAudioAlreadyOn = (value: boolean) => {\r\n    this.audioAlreadyOn.next(value);\r\n    this.micActive.next(value);\r\n  };\r\n\r\n  updateComponentSizes = (sizes: ComponentSizes) => {\r\n    this.componentSizes.next(sizes);\r\n  };\r\n\r\n  updateHasCameraPermission = (value: boolean) => {\r\n    this.hasCameraPermission.next(value);\r\n  };\r\n\r\n  updateHasAudioPermission = (value: boolean) => {\r\n    this.hasAudioPermission.next(value);\r\n  };\r\n\r\n  requestPermissionCamera(): Promise<string> {\r\n    // Implement the request permission logic here\r\n    return Promise.resolve('granted');\r\n  }\r\n\r\n  requestPermissionAudio(): Promise<string> {\r\n    // Implement the request permission logic here\r\n    return Promise.resolve('granted');\r\n  }\r\n\r\n  updateTransportCreated = (value: boolean) => {\r\n    this.transportCreated.next(value);\r\n  };\r\n\r\n  updateLocalTransportCreated = (value: boolean) => {\r\n    this.localTransportCreated.next(value);\r\n  };\r\n\r\n  updateTransportCreatedVideo = (value: boolean) => {\r\n    this.transportCreatedVideo.next(value);\r\n  };\r\n\r\n  updateTransportCreatedAudio = (value: boolean) => {\r\n    this.transportCreatedAudio.next(value);\r\n  };\r\n\r\n  updateTransportCreatedScreen = (value: boolean) => {\r\n    this.transportCreatedScreen.next(value);\r\n  };\r\n\r\n  updateProducerTransport = (value: Transport | null) => {\r\n    this.producerTransport.next(value);\r\n  };\r\n\r\n  updateLocalProducerTransport = (value: Transport | null) => {\r\n    this.localProducerTransport.next(value);\r\n  };\r\n\r\n  updateVideoProducer = (value: Producer | null) => {\r\n    this.videoProducer.next(value);\r\n  };\r\n\r\n  updateLocalVideoProducer = (value: Producer | null) => {\r\n    this.localVideoProducer.next(value);\r\n  }\r\n\r\n  updateParams = (value: ProducerOptions) => {\r\n    this.params.next(value);\r\n  };\r\n\r\n  updateVideoParams = (value: ProducerOptions) => {\r\n    this.videoParams.next(value);\r\n  };\r\n\r\n  updateAudioParams = (value: ProducerOptions) => {\r\n    this.audioParams.next(value);\r\n  };\r\n\r\n  updateAudioProducer = (value: Producer | null) => {\r\n    this.audioProducer.next(value);\r\n  };\r\n\r\n  updateAudioLevel = (value: number) => {\r\n    this.audioLevel.next(value);\r\n  };\r\n\r\n  updateLocalAudioProducer = (value: Producer | null) => {\r\n    this.localAudioProducer.next(value);\r\n  };\r\n\r\n  updateConsumerTransports = (value: TransportType[]) => {\r\n    this.consumerTransports.next(value);\r\n  };\r\n\r\n  updateConsumingTransports = (value: string[]) => {\r\n    this.consumingTransports.next(value);\r\n  };\r\n\r\n  updatePolls = (value: Poll[]) => {\r\n    this.polls.next(value);\r\n  };\r\n\r\n  updatePoll = (value: Poll | null) => {\r\n    this.poll.next(value);\r\n  };\r\n\r\n  updateIsPollModalVisible = (value: boolean) => {\r\n    this.isPollModalVisible.next(value);\r\n  };\r\n\r\n  updateCustomImage = (value: string) => {\r\n    this.customImage.next(value);\r\n  };\r\n\r\n  updateSelectedImage = (value: string) => {\r\n    this.selectedImage.next(value);\r\n  };\r\n\r\n  updateSegmentVideo = (value: MediaStream | null) => {\r\n    this.segmentVideo.next(value);\r\n  };\r\n\r\n  updateSelfieSegmentation = (value: SelfieSegmentation | null) => {\r\n    this.selfieSegmentation.next(value);\r\n  };\r\n\r\n  updatePauseSegmentation = (value: boolean) => {\r\n    this.pauseSegmentation.next(value);\r\n  };\r\n\r\n  updateProcessedStream = (value: MediaStream | null) => {\r\n    this.processedStream.next(value);\r\n  };\r\n\r\n  updateKeepBackground = (value: boolean) => {\r\n    this.keepBackground.next(value);\r\n  };\r\n\r\n  updateBackgroundHasChanged = (value: boolean) => {\r\n    this.backgroundHasChanged.next(value);\r\n  };\r\n\r\n  updateVirtualStream = (value: MediaStream | null) => {\r\n    this.virtualStream.next(value);\r\n  };\r\n\r\n  updateMainCanvas = (value: HTMLCanvasElement | null) => {\r\n    this.mainCanvas.next(value);\r\n  };\r\n\r\n  updatePrevKeepBackground = (value: boolean) => {\r\n    this.prevKeepBackground.next(value);\r\n  };\r\n\r\n  updateAppliedBackground = (value: boolean) => {\r\n    this.appliedBackground.next(value);\r\n  };\r\n\r\n  updateIsBackgroundModalVisible = (value: boolean) => {\r\n    this.isBackgroundModalVisible.next(value);\r\n  };\r\n\r\n  updateAutoClickBackground = (value: boolean) => {\r\n    this.autoClickBackground.next(value);\r\n  };\r\n\r\n  updateBreakoutRooms = (value: BreakoutParticipant[][]) => {\r\n    this.breakoutRooms.next(value);\r\n  };\r\n\r\n  updateCurrentRoomIndex = (value: number) => {\r\n    this.currentRoomIndex.next(value);\r\n  };\r\n\r\n  updateCanStartBreakout = (value: boolean) => {\r\n    this.canStartBreakout.next(value);\r\n  };\r\n\r\n  updateBreakOutRoomStarted = (value: boolean) => {\r\n    this.breakOutRoomStarted.next(value);\r\n  };\r\n\r\n  updateBreakOutRoomEnded = (value: boolean) => {\r\n    this.breakOutRoomEnded.next(value);\r\n  };\r\n\r\n  updateHostNewRoom = (value: number) => {\r\n    this.hostNewRoom.next(value);\r\n  };\r\n\r\n  updateLimitedBreakRoom = (value: BreakoutParticipant[]) => {\r\n    this.limitedBreakRoom.next(value);\r\n  };\r\n\r\n  updateMainRoomsLength = (value: number) => {\r\n    this.mainRoomsLength.next(value);\r\n  };\r\n\r\n  updateMemberRoom = (value: number) => {\r\n    this.memberRoom.next(value);\r\n  };\r\n\r\n  updateIsBreakoutRoomsModalVisible = (value: boolean) => {\r\n    this.isBreakoutRoomsModalVisible.next(value);\r\n  };\r\n\r\n  updateWhiteboardUsers = (value: WhiteboardUser[]) => {\r\n    this.whiteboardUsers.next(value);\r\n  };\r\n\r\n  updateCurrentWhiteboardIndex = (value: number) => {\r\n    this.currentWhiteboardIndex.next(value);\r\n  };\r\n\r\n  updateCanStartWhiteboard = (value: boolean) => {\r\n    this.canStartWhiteboard.next(value);\r\n  };\r\n\r\n  updateWhiteboardStarted = (value: boolean) => {\r\n    this.whiteboardStarted.next(value);\r\n  };\r\n\r\n  updateWhiteboardEnded = (value: boolean) => {\r\n    this.whiteboardEnded.next(value);\r\n  };\r\n\r\n  updateWhiteboardLimit = (value: number) => {\r\n    this.whiteboardLimit.next(value);\r\n  };\r\n\r\n  updateIsWhiteboardModalVisible = (value: boolean) => {\r\n    this.isWhiteboardModalVisible.next(value);\r\n  };\r\n\r\n  updateIsConfigureWhiteboardModalVisible = (value: boolean) => {\r\n    this.isConfigureWhiteboardModalVisible.next(value);\r\n  };\r\n\r\n  updateShapes = (value: Shape[]) => {\r\n    this.shapes.next(value);\r\n  };\r\n\r\n  updateUseImageBackground = (value: boolean) => {\r\n    this.useImageBackground.next(value);\r\n  };\r\n\r\n  updateRedoStack = (value: Shape[]) => {\r\n    this.redoStack.next(value);\r\n  };\r\n\r\n  updateUndoStack = (value: string[]) => {\r\n    this.undoStack.next(value);\r\n  };\r\n\r\n  updateCanvasStream = (value: MediaStream | null) => {\r\n    this.canvasStream.next(value);\r\n  };\r\n\r\n  updateCanvasWhiteboard = (value: HTMLCanvasElement | null) => {\r\n    this.canvasWhiteboard.next(value);\r\n  };\r\n\r\n  updateCanvasScreenboard = (value: HTMLCanvasElement | null) => {\r\n    this.canvasScreenboard.next(value);\r\n  };\r\n\r\n  updateProcessedScreenStream = (value: MediaStream | null) => {\r\n    this.processedScreenStream.next(value);\r\n  };\r\n\r\n  updateAnnotateScreenStream = (value: boolean) => {\r\n    this.annotateScreenStream.next(value);\r\n  };\r\n\r\n  updateMainScreenCanvas = (value: HTMLCanvasElement | null) => {\r\n    this.mainScreenCanvas.next(value);\r\n  };\r\n\r\n  updateIsScreenboardModalVisible = (value: boolean) => {\r\n    this.isScreenboardModalVisible.next(value);\r\n  };\r\n\r\n  checkOrientation = () => {\r\n    const isPortrait = window.matchMedia('(orientation: portrait)').matches;\r\n    return isPortrait ? 'portrait' : 'landscape';\r\n  };\r\n\r\n  showAlert = ({\r\n    message,\r\n    type,\r\n    duration = 3000,\r\n  }: {\r\n    message: string;\r\n    type: 'success' | 'danger';\r\n    duration?: number;\r\n  }) => {\r\n    this.updateAlertMessage(message);\r\n    this.updateAlertType(type);\r\n    this.updateAlertDuration(duration);\r\n    this.updateAlertVisible(true);\r\n  };\r\n\r\n  getAllParams() {\r\n    return {\r\n      localUIMode: this.localUIMode.value, // Local UI mode\r\n\r\n      // Room Details\r\n      roomName: this.roomName.value,\r\n      member: this.member.value,\r\n      adminPasscode: this.adminPasscode.value,\r\n      youAreCoHost: this.youAreCoHost.value,\r\n      youAreHost: this.youAreHost.value,\r\n      islevel: this.islevel.value,\r\n      confirmedToRecord: this.confirmedToRecord.value,\r\n      meetingDisplayType: this.meetingDisplayType.value,\r\n      meetingVideoOptimized: this.meetingVideoOptimized.value,\r\n      eventType: this.eventType.value,\r\n      participants: this.participants.value,\r\n      filteredParticipants: this.filteredParticipants.value,\r\n      participantsCounter: this.participantsCounter.value,\r\n      participantsFilter: this.participantsFilter.value,\r\n\r\n      // More room details - media\r\n      consume_sockets: this.consume_sockets.value,\r\n      rtpCapabilities: this.rtpCapabilities.value,\r\n      roomRecvIPs: this.roomRecvIPs.value,\r\n      meetingRoomParams: this.meetingRoomParams.value,\r\n      itemPageLimit: this.itemPageLimit.value,\r\n      audioOnlyRoom: this.audioOnlyRoom.value,\r\n      addForBasic: this.addForBasic.value,\r\n      screenPageLimit: this.screenPageLimit.value,\r\n      shareScreenStarted: this.shareScreenStarted.value,\r\n      shared: this.shared.value,\r\n      targetOrientation: this.targetOrientation.value,\r\n      targetResolution: this.targetResolution.value,\r\n      targetResolutionHost: this.targetResolutionHost.value,\r\n      vidCons: this.vidCons.value,\r\n      frameRate: this.frameRate.value,\r\n      hParams: this.hParams.value,\r\n      vParams: this.vParams.value,\r\n      screenParams: this.screenParams.value,\r\n      aParams: this.aParams.value,\r\n\r\n      // More room details - recording\r\n      recordingAudioPausesLimit: this.recordingAudioPausesLimit.value,\r\n      recordingAudioPausesCount: this.recordingAudioPausesCount.value,\r\n      recordingAudioSupport: this.recordingAudioSupport.value,\r\n      recordingAudioPeopleLimit: this.recordingAudioPeopleLimit.value,\r\n      recordingAudioParticipantsTimeLimit: this.recordingAudioParticipantsTimeLimit.value,\r\n      recordingVideoPausesCount: this.recordingVideoPausesCount.value,\r\n      recordingVideoPausesLimit: this.recordingVideoPausesLimit.value,\r\n      recordingVideoSupport: this.recordingVideoSupport.value,\r\n      recordingVideoPeopleLimit: this.recordingVideoPeopleLimit.value,\r\n      recordingVideoParticipantsTimeLimit: this.recordingVideoParticipantsTimeLimit.value,\r\n      recordingAllParticipantsSupport: this.recordingAllParticipantsSupport.value,\r\n      recordingVideoParticipantsSupport: this.recordingVideoParticipantsSupport.value,\r\n      recordingAllParticipantsFullRoomSupport: this.recordingAllParticipantsFullRoomSupport.value,\r\n      recordingVideoParticipantsFullRoomSupport:\r\n        this.recordingVideoParticipantsFullRoomSupport.value,\r\n      recordingPreferredOrientation: this.recordingPreferredOrientation.value,\r\n      recordingSupportForOtherOrientation: this.recordingSupportForOtherOrientation.value,\r\n      recordingMultiFormatsSupport: this.recordingMultiFormatsSupport.value,\r\n\r\n      userRecordingParams: this.userRecordingParams.value,\r\n      canRecord: this.canRecord.value,\r\n      startReport: this.startReport.value,\r\n      endReport: this.endReport.value,\r\n      recordStartTime: this.recordStartTime.value,\r\n      recordElapsedTime: this.recordElapsedTime.value,\r\n      isTimerRunning: this.isTimerRunning.value,\r\n      canPauseResume: this.canPauseResume.value,\r\n      recordChangeSeconds: this.recordChangeSeconds.value,\r\n      pauseLimit: this.pauseLimit.value,\r\n      pauseRecordCount: this.pauseRecordCount.value,\r\n      canLaunchRecord: this.canLaunchRecord.value,\r\n      stopLaunchRecord: this.stopLaunchRecord.value,\r\n\r\n      participantsAll: this.participantsAll.value,\r\n\r\n      firstAll: this.firstAll.value,\r\n      updateMainWindow: this.updateMainWindow.value,\r\n      first_round: this.first_round.value,\r\n      landScaped: this.landScaped.value,\r\n      lock_screen: this.lock_screen.value,\r\n      screenId: this.screenId.value,\r\n      allVideoStreams: this.allVideoStreams.value,\r\n      newLimitedStreams: this.newLimitedStreams.value,\r\n      newLimitedStreamsIDs: this.newLimitedStreamsIDs.value,\r\n      activeSounds: this.activeSounds.value,\r\n      screenShareIDStream: this.screenShareIDStream.value,\r\n      screenShareNameStream: this.screenShareNameStream.value,\r\n      adminIDStream: this.adminIDStream.value,\r\n      adminNameStream: this.adminNameStream.value,\r\n      youYouStream: this.youYouStream.value,\r\n      youYouStreamIDs: this.youYouStreamIDs.value,\r\n      localStream: this.localStream.value,\r\n      recordStarted: this.recordStarted.value,\r\n      recordResumed: this.recordResumed.value,\r\n      recordPaused: this.recordPaused.value,\r\n      recordStopped: this.recordStopped.value,\r\n      adminRestrictSetting: this.adminRestrictSetting.value,\r\n      videoRequestState: this.videoRequestState.value,\r\n      videoRequestTime: this.videoRequestTime.value,\r\n      videoAction: this.videoAction.value,\r\n      localStreamVideo: this.localStreamVideo.value,\r\n      userDefaultVideoInputDevice: this.userDefaultVideoInputDevice.value,\r\n      currentFacingMode: this.currentFacingMode.value,\r\n      prevFacingMode: this.prevFacingMode.value,\r\n      defVideoID: this.defVideoID.value,\r\n      allowed: this.allowed.value,\r\n      dispActiveNames: this.dispActiveNames.value,\r\n      p_dispActiveNames: this.p_dispActiveNames.value,\r\n      activeNames: this.activeNames.value,\r\n      prevActiveNames: this.prevActiveNames.value,\r\n      p_activeNames: this.p_activeNames.value,\r\n      membersReceived: this.membersReceived.value,\r\n      deferScreenReceived: this.deferScreenReceived.value,\r\n      hostFirstSwitch: this.hostFirstSwitch.value,\r\n      micAction: this.micAction.value,\r\n      screenAction: this.screenAction.value,\r\n      chatAction: this.chatAction.value,\r\n      audioRequestState: this.audioRequestState.value,\r\n      screenRequestState: this.screenRequestState.value,\r\n      chatRequestState: this.chatRequestState.value,\r\n      audioRequestTime: this.audioRequestTime.value,\r\n      screenRequestTime: this.screenRequestTime.value,\r\n      chatRequestTime: this.chatRequestTime.value,\r\n      updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\r\n      oldSoundIds: this.oldSoundIds.value,\r\n      hostLabel: this.hostLabel.value,\r\n      mainScreenFilled: this.mainScreenFilled.value,\r\n      localStreamScreen: this.localStreamScreen.value,\r\n      screenAlreadyOn: this.screenAlreadyOn.value,\r\n      chatAlreadyOn: this.chatAlreadyOn.value,\r\n      redirectURL: this.redirectURL.value,\r\n      oldAllStreams: this.oldAllStreams.value,\r\n      adminVidID: this.adminVidID.value,\r\n      streamNames: this.streamNames.value,\r\n      non_alVideoStreams: this.non_alVideoStreams.value,\r\n      sortAudioLoudness: this.sortAudioLoudness.value,\r\n      audioDecibels: this.audioDecibels.value,\r\n      mixed_alVideoStreams: this.mixed_alVideoStreams.value,\r\n      non_alVideoStreams_muted: this.non_alVideoStreams_muted.value,\r\n      paginatedStreams: this.paginatedStreams.value,\r\n      localStreamAudio: this.localStreamAudio.value,\r\n      defAudioID: this.defAudioID.value,\r\n      userDefaultAudioInputDevice: this.userDefaultAudioInputDevice.value,\r\n      userDefaultAudioOutputDevice: this.userDefaultAudioOutputDevice.value,\r\n      prevAudioInputDevice: this.prevAudioInputDevice.value,\r\n      prevVideoInputDevice: this.prevVideoInputDevice.value,\r\n      audioPaused: this.audioPaused.value,\r\n      mainScreenPerson: this.mainScreenPerson.value,\r\n      adminOnMainScreen: this.adminOnMainScreen.value,\r\n      screenStates: this.screenStates.value,\r\n      prevScreenStates: this.prevScreenStates.value,\r\n      updateDateState: this.updateDateState.value,\r\n      lastUpdate: this.lastUpdate.value,\r\n      nForReadjustRecord: this.nForReadjustRecord.value,\r\n      fixedPageLimit: this.fixedPageLimit.value,\r\n      removeAltGrid: this.removeAltGrid.value,\r\n      nForReadjust: this.nForReadjust.value,\r\n      lastReorderTime: this.lastReorderTime.value,\r\n      reorderInterval: this.reorderInterval.value,\r\n      fastReorderInterval: this.fastReorderInterval.value,\r\n      audStreamNames: this.audStreamNames.value,\r\n      currentUserPage: this.currentUserPage.value,\r\n      mainHeightWidth: this.mainHeightWidth.value,\r\n      prevMainHeightWidth: this.prevMainHeightWidth.value,\r\n      prevDoPaginate: this.prevDoPaginate.value,\r\n      doPaginate: this.doPaginate.value,\r\n      shareEnded: this.shareEnded.value,\r\n      lStreams: this.lStreams.value,\r\n      chatRefStreams: this.chatRefStreams.value,\r\n      controlHeight: this.controlHeight.value,\r\n      isWideScreen: this.isWideScreen.value,\r\n      isMediumScreen: this.isMediumScreen.value,\r\n      isSmallScreen: this.isSmallScreen.value,\r\n      addGrid: this.addGrid.value,\r\n      addAltGrid: this.addAltGrid.value,\r\n      gridRows: this.gridRows.value,\r\n      gridCols: this.gridCols.value,\r\n      altGridRows: this.altGridRows.value,\r\n      altGridCols: this.altGridCols.value,\r\n      numberPages: this.numberPages.value,\r\n      currentStreams: this.currentStreams.value,\r\n      showMiniView: this.showMiniView.value,\r\n      nStream: this.nStream.value,\r\n      defer_receive: this.defer_receive.value,\r\n      allAudioStreams: this.allAudioStreams.value,\r\n      screenProducer: this.screenProducer.value,\r\n      remoteScreenStream: this.remoteScreenStream.value,\r\n      gotAllVids: this.gotAllVids.value,\r\n      paginationHeightWidth: this.paginationHeightWidth.value,\r\n      paginationDirection: this.paginationDirection.value,\r\n      gridSizes: this.gridSizes.value,\r\n      screenForceFullDisplay: this.screenForceFullDisplay.value,\r\n      mainGridStream: this.mainGridStream.value,\r\n      otherGridStreams: this.otherGridStreams.value,\r\n      audioOnlyStreams: this.audioOnlyStreams.value,\r\n      videoInputs: this.videoInputs.value,\r\n      audioInputs: this.audioInputs.value,\r\n      meetingProgressTime: this.meetingProgressTime.value,\r\n      meetingElapsedTime: this.meetingElapsedTime.value,\r\n\r\n      ref_participants: this.ref_participants.value,\r\n\r\n      messages: this.messages.value,\r\n      startDirectMessage: this.startDirectMessage.value,\r\n      directMessageDetails: this.directMessageDetails.value,\r\n      coHost: this.coHost.value,\r\n      coHostResponsibility: this.coHostResponsibility.value,\r\n\r\n      // Event settings\r\n      audioSetting: this.audioSetting.value,\r\n      videoSetting: this.videoSetting.value,\r\n      screenshareSetting: this.screenshareSetting.value,\r\n      chatSetting: this.chatSetting.value,\r\n\r\n      // Display settings\r\n      autoWave: this.autoWave.value,\r\n      forceFullDisplay: this.forceFullDisplay.value,\r\n      prevForceFullDisplay: this.prevForceFullDisplay.value,\r\n      prevMeetingDisplayType: this.prevMeetingDisplayType.value,\r\n\r\n      // Waiting room\r\n      waitingRoomFilter: this.waitingRoomFilter.value,\r\n      waitingRoomList: this.waitingRoomList.value,\r\n      waitingRoomCounter: this.waitingRoomCounter.value,\r\n      filteredWaitingRoomList: this.filteredWaitingRoomList.value,\r\n\r\n      // Requests\r\n      requestFilter: this.requestFilter.value,\r\n      requestList: this.requestList.value,\r\n      requestCounter: this.requestCounter.value,\r\n      filteredRequestList: this.filteredRequestList.value,\r\n\r\n      // Total requests and waiting room\r\n      totalReqWait: this.totalReqWait.value,\r\n\r\n      // Alerts\r\n      alertVisible: this.alertVisible.value,\r\n      alertMessage: this.alertMessage.value,\r\n      alertType: this.alertType.value,\r\n      alertDuration: this.alertDuration.value,\r\n\r\n      // Progress Timer\r\n      progressTimerVisible: this.progressTimerVisible.value,\r\n      progressTimerValue: this.progressTimerValue.value,\r\n\r\n      // Menu modals\r\n      isMenuModalVisible: this.isMenuModalVisible.value,\r\n      isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n      isSettingsModalVisible: this.isSettingsModalVisible.value,\r\n      isRequestsModalVisible: this.isRequestsModalVisible.value,\r\n      isWaitingModalVisible: this.isWaitingModalVisible.value,\r\n      isCoHostModalVisible: this.isCoHostModalVisible.value,\r\n      isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\r\n      isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\r\n\r\n      // Other Modals\r\n      isParticipantsModalVisible: this.isParticipantsModalVisible.value,\r\n      isMessagesModalVisible: this.isMessagesModalVisible.value,\r\n      isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\r\n      isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\r\n      isLoadingModalVisible: this.isLoadingModalVisible.value,\r\n\r\n      // Recording Options\r\n      recordingMediaOptions: this.recordingMediaOptions.value,\r\n      recordingAudioOptions: this.recordingAudioOptions.value,\r\n      recordingVideoOptions: this.recordingVideoOptions.value,\r\n      recordingVideoType: this.recordingVideoType.value,\r\n      recordingVideoOptimized: this.recordingVideoOptimized.value,\r\n      recordingDisplayType: this.recordingDisplayType.value,\r\n      recordingAddHLS: this.recordingAddHLS.value,\r\n      recordingAddText: this.recordingAddText.value,\r\n      recordingCustomText: this.recordingCustomText.value,\r\n      recordingCustomTextPosition: this.recordingCustomTextPosition.value,\r\n      recordingCustomTextColor: this.recordingCustomTextColor.value,\r\n      recordingNameTags: this.recordingNameTags.value,\r\n      recordingBackgroundColor: this.recordingBackgroundColor.value,\r\n      recordingNameTagsColor: this.recordingNameTagsColor.value,\r\n      recordingOrientationVideo: this.recordingOrientationVideo.value,\r\n      clearedToResume: this.clearedToResume.value,\r\n      clearedToRecord: this.clearedToRecord.value,\r\n      recordState: this.recordState.value,\r\n      showRecordButtons: this.showRecordButtons.value,\r\n      recordingProgressTime: this.recordingProgressTime.value,\r\n      audioSwitching: this.audioSwitching.value,\r\n      videoSwitching: this.videoSwitching.value,\r\n\r\n      // Media states\r\n      videoAlreadyOn: this.videoAlreadyOn.value,\r\n      audioAlreadyOn: this.audioAlreadyOn.value,\r\n      componentSizes: this.componentSizes.value,\r\n\r\n      // Permissions\r\n      hasCameraPermission: this.hasCameraPermission.value,\r\n      hasAudioPermission: this.hasAudioPermission.value,\r\n\r\n      // Transports\r\n      transportCreated: this.transportCreated.value,\r\n      localTransportCreated: this.localTransportCreated.value,\r\n      transportCreatedVideo: this.transportCreatedVideo.value,\r\n      transportCreatedAudio: this.transportCreatedAudio.value,\r\n      transportCreatedScreen: this.transportCreatedScreen.value,\r\n      producerTransport: this.producerTransport.value,\r\n      localProducerTransport: this.localProducerTransport.value,\r\n      videoProducer: this.videoProducer.value,\r\n      localVideoProducer: this.localVideoProducer.value,\r\n      params: this.params.value,\r\n      videoParams: this.videoParams.value,\r\n      audioParams: this.audioParams.value,\r\n      audioProducer: this.audioProducer.value,\r\n      audioLevel: this.audioLevel.value,\r\n      localAudioProducer: this.localAudioProducer.value,\r\n      consumerTransports: this.consumerTransports.value,\r\n      consumingTransports: this.consumingTransports.value,\r\n\r\n      // Polls\r\n      polls: this.polls.value,\r\n      poll: this.poll.value,\r\n      isPollModalVisible: this.isPollModalVisible.value,\r\n\r\n      // Background\r\n      customImage: this.customImage.value,\r\n      selectedImage: this.selectedImage.value,\r\n      segmentVideo: this.segmentVideo.value,\r\n      selfieSegmentation: this.selfieSegmentation.value,\r\n      pauseSegmentation: this.pauseSegmentation.value,\r\n      processedStream: this.processedStream.value,\r\n      keepBackground: this.keepBackground.value,\r\n      backgroundHasChanged: this.backgroundHasChanged.value,\r\n      virtualStream: this.virtualStream.value,\r\n      mainCanvas: this.mainCanvas.value,\r\n      prevKeepBackground: this.prevKeepBackground.value,\r\n      appliedBackground: this.appliedBackground.value,\r\n      isBackgroundModalVisible: this.isBackgroundModalVisible.value,\r\n      autoClickBackground: this.autoClickBackground.value,\r\n\r\n      // Breakout rooms\r\n      breakoutRooms: this.breakoutRooms.value,\r\n      currentRoomIndex: this.currentRoomIndex.value,\r\n      canStartBreakout: this.canStartBreakout.value,\r\n      breakOutRoomStarted: this.breakOutRoomStarted.value,\r\n      breakOutRoomEnded: this.breakOutRoomEnded.value,\r\n      hostNewRoom: this.hostNewRoom.value,\r\n      limitedBreakRoom: this.limitedBreakRoom.value,\r\n      mainRoomsLength: this.mainRoomsLength.value,\r\n      memberRoom: this.memberRoom.value,\r\n      isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\r\n\r\n      // Whiteboard\r\n      whiteboardUsers: this.whiteboardUsers.value,\r\n      currentWhiteboardIndex: this.currentWhiteboardIndex.value,\r\n      canStartWhiteboard: this.canStartWhiteboard.value,\r\n      whiteboardStarted: this.whiteboardStarted.value,\r\n      whiteboardEnded: this.whiteboardEnded.value,\r\n      whiteboardLimit: this.whiteboardLimit.value,\r\n      isWhiteboardModalVisible: this.isWhiteboardModalVisible.value,\r\n      isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\r\n      shapes: this.shapes.value,\r\n      useImageBackground: this.useImageBackground.value,\r\n      redoStack: this.redoStack.value,\r\n      undoStack: this.undoStack.value,\r\n      canvasStream: this.canvasStream.value,\r\n      canvasWhiteboard: this.canvasWhiteboard.value,\r\n\r\n      // Screenboard\r\n      canvasScreenboard: this.canvasScreenboard.value,\r\n      processedScreenStream: this.processedScreenStream.value,\r\n      annotateScreenStream: this.annotateScreenStream.value,\r\n      mainScreenCanvas: this.mainScreenCanvas.value,\r\n      isScreenboardModalVisible: this.isScreenboardModalVisible.value,\r\n\r\n      validated: this.validated.value,\r\n      device: this.device.value,\r\n      socket: this.socket.value,\r\n      localSocket: this.localSocket!.value,\r\n      checkMediaPermission: false,\r\n      onWeb: true,\r\n\r\n      // Update functions\r\n      updateRoomName: this.updateRoomName.bind(this),\r\n      updateMember: this.updateMember.bind(this),\r\n      updateAdminPasscode: this.updateAdminPasscode.bind(this),\r\n      updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\r\n      updateYouAreHost: this.updateYouAreHost.bind(this),\r\n      updateIslevel: this.updateIslevel.bind(this),\r\n      updateCoHost: this.updateCoHost.bind(this),\r\n      updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\r\n      updateConfirmedToRecord: this.updateConfirmedToRecord.bind(this),\r\n      updateMeetingDisplayType: this.updateMeetingDisplayType.bind(this),\r\n      updateMeetingVideoOptimized: this.updateMeetingVideoOptimized.bind(this),\r\n      updateEventType: this.updateEventType.bind(this),\r\n      updateParticipants: this.updateParticipants.bind(this),\r\n      updateParticipantsCounter: this.updateParticipantsCounter.bind(this),\r\n      updateParticipantsFilter: this.updateParticipantsFilter.bind(this),\r\n\r\n      // More update functions for media details\r\n      updateConsume_sockets: this.updateConsume_sockets.bind(this),\r\n      updateRtpCapabilities: this.updateRtpCapabilities.bind(this),\r\n      updateRoomRecvIPs: this.updateRoomRecvIPs.bind(this),\r\n      updateMeetingRoomParams: this.updateMeetingRoomParams.bind(this),\r\n      updateItemPageLimit: this.updateItemPageLimit.bind(this),\r\n      updateAudioOnlyRoom: this.updateAudioOnlyRoom.bind(this),\r\n      updateAddForBasic: this.updateAddForBasic.bind(this),\r\n      updateScreenPageLimit: this.updateScreenPageLimit.bind(this),\r\n      updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\r\n      updateShared: this.updateShared.bind(this),\r\n      updateTargetOrientation: this.updateTargetOrientation.bind(this),\r\n      updateTargetResolution: this.updateTargetResolution.bind(this),\r\n      updateTargetResolutionHost: this.updateTargetResolutionHost.bind(this),\r\n      updateVidCons: this.updateVidCons.bind(this),\r\n      updateFrameRate: this.updateFrameRate.bind(this),\r\n      updateHParams: this.updateHParams.bind(this),\r\n      updateVParams: this.updateVParams.bind(this),\r\n      updateScreenParams: this.updateScreenParams.bind(this),\r\n      updateAParams: this.updateAParams.bind(this),\r\n\r\n      // More update functions for recording details\r\n      updateRecordingAudioPausesLimit: this.updateRecordingAudioPausesLimit.bind(this),\r\n      updateRecordingAudioPausesCount: this.updateRecordingAudioPausesCount.bind(this),\r\n      updateRecordingAudioSupport: this.updateRecordingAudioSupport.bind(this),\r\n      updateRecordingAudioPeopleLimit: this.updateRecordingAudioPeopleLimit.bind(this),\r\n      updateRecordingAudioParticipantsTimeLimit:\r\n        this.updateRecordingAudioParticipantsTimeLimit.bind(this),\r\n      updateRecordingVideoPausesCount: this.updateRecordingVideoPausesCount.bind(this),\r\n      updateRecordingVideoPausesLimit: this.updateRecordingVideoPausesLimit.bind(this),\r\n      updateRecordingVideoSupport: this.updateRecordingVideoSupport.bind(this),\r\n      updateRecordingVideoPeopleLimit: this.updateRecordingVideoPeopleLimit.bind(this),\r\n      updateRecordingVideoParticipantsTimeLimit:\r\n        this.updateRecordingVideoParticipantsTimeLimit.bind(this),\r\n      updateRecordingAllParticipantsSupport: this.updateRecordingAllParticipantsSupport.bind(this),\r\n      updateRecordingVideoParticipantsSupport:\r\n        this.updateRecordingVideoParticipantsSupport.bind(this),\r\n      updateRecordingAllParticipantsFullRoomSupport:\r\n        this.updateRecordingAllParticipantsFullRoomSupport.bind(this),\r\n      updateRecordingVideoParticipantsFullRoomSupport:\r\n        this.updateRecordingVideoParticipantsFullRoomSupport.bind(this),\r\n      updateRecordingPreferredOrientation: this.updateRecordingPreferredOrientation.bind(this),\r\n      updateRecordingSupportForOtherOrientation:\r\n        this.updateRecordingSupportForOtherOrientation.bind(this),\r\n      updateRecordingMultiFormatsSupport: this.updateRecordingMultiFormatsSupport.bind(this),\r\n\r\n      updateUserRecordingParams: this.updateUserRecordingParams.bind(this),\r\n      updateCanRecord: this.updateCanRecord.bind(this),\r\n      updateStartReport: this.updateStartReport.bind(this),\r\n      updateEndReport: this.updateEndReport.bind(this),\r\n      updateRecordTimerInterval: this.updateRecordTimerInterval.bind(this),\r\n      updateRecordStartTime: this.updateRecordStartTime.bind(this),\r\n      updateRecordElapsedTime: this.updateRecordElapsedTime.bind(this),\r\n      updateIsTimerRunning: this.updateIsTimerRunning.bind(this),\r\n      updateCanPauseResume: this.updateCanPauseResume.bind(this),\r\n      updateRecordChangeSeconds: this.updateRecordChangeSeconds.bind(this),\r\n      updatePauseLimit: this.updatePauseLimit.bind(this),\r\n      updatePauseRecordCount: this.updatePauseRecordCount.bind(this),\r\n      updateCanLaunchRecord: this.updateCanLaunchRecord.bind(this),\r\n      updateStopLaunchRecord: this.updateStopLaunchRecord.bind(this),\r\n\r\n      updateParticipantsAll: this.updateParticipantsAll.bind(this),\r\n\r\n      updateFirstAll: this.updateFirstAll.bind(this),\r\n      updateUpdateMainWindow: this.updateUpdateMainWindow.bind(this),\r\n      updateFirst_round: this.updateFirst_round.bind(this),\r\n      updateLandScaped: this.updateLandScaped.bind(this),\r\n      updateLock_screen: this.updateLock_screen.bind(this),\r\n      updateScreenId: this.updateScreenId.bind(this),\r\n      updateAllVideoStreams: this.updateAllVideoStreams.bind(this),\r\n      updateNewLimitedStreams: this.updateNewLimitedStreams.bind(this),\r\n      updateNewLimitedStreamsIDs: this.updateNewLimitedStreamsIDs.bind(this),\r\n      updateActiveSounds: this.updateActiveSounds.bind(this),\r\n      updateScreenShareIDStream: this.updateScreenShareIDStream.bind(this),\r\n      updateScreenShareNameStream: this.updateScreenShareNameStream.bind(this),\r\n      updateAdminIDStream: this.updateAdminIDStream.bind(this),\r\n      updateAdminNameStream: this.updateAdminNameStream.bind(this),\r\n      updateYouYouStream: this.updateYouYouStream.bind(this),\r\n      updateYouYouStreamIDs: this.updateYouYouStreamIDs.bind(this),\r\n      updateLocalStream: this.updateLocalStream.bind(this),\r\n      updateRecordStarted: this.updateRecordStarted.bind(this),\r\n      updateRecordResumed: this.updateRecordResumed.bind(this),\r\n      updateRecordPaused: this.updateRecordPaused.bind(this),\r\n      updateRecordStopped: this.updateRecordStopped.bind(this),\r\n      updateAdminRestrictSetting: this.updateAdminRestrictSetting.bind(this),\r\n      updateVideoRequestState: this.updateVideoRequestState.bind(this),\r\n      updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\r\n      updateVideoAction: this.updateVideoAction.bind(this),\r\n      updateLocalStreamVideo: this.updateLocalStreamVideo.bind(this),\r\n      updateUserDefaultVideoInputDevice: this.updateUserDefaultVideoInputDevice.bind(this),\r\n      updateCurrentFacingMode: this.updateCurrentFacingMode.bind(this),\r\n      updatePrevFacingMode: this.updatePrevFacingMode.bind(this),\r\n      updateDefVideoID: this.updateDefVideoID.bind(this),\r\n      updateAllowed: this.updateAllowed.bind(this),\r\n      updateDispActiveNames: this.updateDispActiveNames.bind(this),\r\n      updateP_dispActiveNames: this.updateP_dispActiveNames.bind(this),\r\n      updateActiveNames: this.updateActiveNames.bind(this),\r\n      updatePrevActiveNames: this.updatePrevActiveNames.bind(this),\r\n      updateP_activeNames: this.updateP_activeNames.bind(this),\r\n      updateMembersReceived: this.updateMembersReceived.bind(this),\r\n      updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\r\n      updateHostFirstSwitch: this.updateHostFirstSwitch.bind(this),\r\n      updateMicAction: this.updateMicAction.bind(this),\r\n      updateScreenAction: this.updateScreenAction.bind(this),\r\n      updateChatAction: this.updateChatAction.bind(this),\r\n      updateAudioRequestState: this.updateAudioRequestState.bind(this),\r\n      updateScreenRequestState: this.updateScreenRequestState.bind(this),\r\n      updateChatRequestState: this.updateChatRequestState.bind(this),\r\n      updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\r\n      updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\r\n      updateChatRequestTime: this.updateChatRequestTime.bind(this),\r\n      updateOldSoundIds: this.updateOldSoundIds.bind(this),\r\n      updateHostLabel: this.updateHostLabel.bind(this),\r\n      updateMainScreenFilled: this.updateMainScreenFilled.bind(this),\r\n      updateLocalStreamScreen: this.updateLocalStreamScreen.bind(this),\r\n      updateScreenAlreadyOn: this.updateScreenAlreadyOn.bind(this),\r\n      updateChatAlreadyOn: this.updateChatAlreadyOn.bind(this),\r\n      updateRedirectURL: this.updateRedirectURL.bind(this),\r\n      updateOldAllStreams: this.updateOldAllStreams.bind(this),\r\n      updateAdminVidID: this.updateAdminVidID.bind(this),\r\n      updateStreamNames: this.updateStreamNames.bind(this),\r\n      updateNon_alVideoStreams: this.updateNon_alVideoStreams.bind(this),\r\n      updateSortAudioLoudness: this.updateSortAudioLoudness.bind(this),\r\n      updateAudioDecibels: this.updateAudioDecibels.bind(this),\r\n      updateMixed_alVideoStreams: this.updateMixed_alVideoStreams.bind(this),\r\n      updateNon_alVideoStreams_muted: this.updateNon_alVideoStreams_muted.bind(this),\r\n      updatePaginatedStreams: this.updatePaginatedStreams.bind(this),\r\n      updateLocalStreamAudio: this.updateLocalStreamAudio.bind(this),\r\n      updateDefAudioID: this.updateDefAudioID.bind(this),\r\n      updateUserDefaultAudioInputDevice: this.updateUserDefaultAudioInputDevice.bind(this),\r\n      updateUserDefaultAudioOutputDevice: this.updateUserDefaultAudioOutputDevice.bind(this),\r\n      updatePrevAudioInputDevice: this.updatePrevAudioInputDevice.bind(this),\r\n      updatePrevVideoInputDevice: this.updatePrevVideoInputDevice.bind(this),\r\n      updateAudioPaused: this.updateAudioPaused.bind(this),\r\n      updateMainScreenPerson: this.updateMainScreenPerson.bind(this),\r\n      updateAdminOnMainScreen: this.updateAdminOnMainScreen.bind(this),\r\n      updateScreenStates: this.updateScreenStates.bind(this),\r\n      updatePrevScreenStates: this.updatePrevScreenStates.bind(this),\r\n      updateUpdateDateState: this.updateUpdateDateState.bind(this),\r\n      updateLastUpdate: this.updateLastUpdate.bind(this),\r\n      updateNForReadjustRecord: this.updateNForReadjustRecord.bind(this),\r\n      updateFixedPageLimit: this.updateFixedPageLimit.bind(this),\r\n      updateRemoveAltGrid: this.updateRemoveAltGrid.bind(this),\r\n      updateNForReadjust: this.updateNForReadjust.bind(this),\r\n      updateLastReorderTime: this.updateLastReorderTime.bind(this),\r\n      updateAudStreamNames: this.updateAudStreamNames.bind(this),\r\n      updateCurrentUserPage: this.updateCurrentUserPage.bind(this),\r\n      updateMainHeightWidth: this.updateMainHeightWidth.bind(this),\r\n      updatePrevMainHeightWidth: this.updatePrevMainHeightWidth.bind(this),\r\n      updatePrevDoPaginate: this.updatePrevDoPaginate.bind(this),\r\n      updateDoPaginate: this.updateDoPaginate.bind(this),\r\n      updateShareEnded: this.updateShareEnded.bind(this),\r\n      updateLStreams: this.updateLStreams.bind(this),\r\n      updateChatRefStreams: this.updateChatRefStreams.bind(this),\r\n      updateControlHeight: this.updateControlHeight.bind(this),\r\n      updateIsWideScreen: this.updateIsWideScreen.bind(this),\r\n      updateIsMediumScreen: this.updateIsMediumScreen.bind(this),\r\n      updateIsSmallScreen: this.updateIsSmallScreen.bind(this),\r\n      updateAddGrid: this.updateAddGrid.bind(this),\r\n      updateAddAltGrid: this.updateAddAltGrid.bind(this),\r\n      updateGridRows: this.updateGridRows.bind(this),\r\n      updateGridCols: this.updateGridCols.bind(this),\r\n      updateAltGridRows: this.updateAltGridRows.bind(this),\r\n      updateAltGridCols: this.updateAltGridCols.bind(this),\r\n      updateNumberPages: this.updateNumberPages.bind(this),\r\n      updateCurrentStreams: this.updateCurrentStreams.bind(this),\r\n      updateShowMiniView: this.updateShowMiniView.bind(this),\r\n      updateNStream: this.updateNStream.bind(this),\r\n      updateDefer_receive: this.updateDefer_receive.bind(this),\r\n      updateAllAudioStreams: this.updateAllAudioStreams.bind(this),\r\n      updateRemoteScreenStream: this.updateRemoteScreenStream.bind(this),\r\n      updateScreenProducer: this.updateScreenProducer.bind(this),\r\n      updateGotAllVids: this.updateGotAllVids.bind(this),\r\n      updatePaginationHeightWidth: this.updatePaginationHeightWidth.bind(this),\r\n      updatePaginationDirection: this.updatePaginationDirection.bind(this),\r\n      updateGridSizes: this.updateGridSizes.bind(this),\r\n      updateScreenForceFullDisplay: this.updateScreenForceFullDisplay.bind(this),\r\n      updateMainGridStream: this.updateMainGridStream.bind(this),\r\n      updateOtherGridStreams: this.updateOtherGridStreams.bind(this),\r\n      updateAudioOnlyStreams: this.updateAudioOnlyStreams.bind(this),\r\n      updateVideoInputs: this.updateVideoInputs.bind(this),\r\n      updateAudioInputs: this.updateAudioInputs.bind(this),\r\n      updateMeetingProgressTime: this.updateMeetingProgressTime.bind(this),\r\n      updateMeetingElapsedTime: this.updateMeetingElapsedTime.bind(this),\r\n      updateRef_participants: this.updateRef_participants.bind(this),\r\n\r\n      updateMessages: this.updateMessages.bind(this),\r\n      updateStartDirectMessage: this.updateStartDirectMessage.bind(this),\r\n      updateDirectMessageDetails: this.updateDirectMessageDetails.bind(this),\r\n      updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\r\n\r\n      // Event settings\r\n      updateAudioSetting: this.updateAudioSetting.bind(this),\r\n      updateVideoSetting: this.updateVideoSetting.bind(this),\r\n      updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\r\n      updateChatSetting: this.updateChatSetting.bind(this),\r\n\r\n      // Display settings\r\n      updateAutoWave: this.updateAutoWave.bind(this),\r\n      updateForceFullDisplay: this.updateForceFullDisplay.bind(this),\r\n      updatePrevForceFullDisplay: this.updatePrevForceFullDisplay.bind(this),\r\n      updatePrevMeetingDisplayType: this.updatePrevMeetingDisplayType.bind(this),\r\n\r\n      // Waiting room\r\n      updateWaitingRoomFilter: this.updateWaitingRoomFilter.bind(this),\r\n      updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\r\n      updateWaitingRoomCounter: this.updateWaitingRoomCounter.bind(this),\r\n\r\n      // Requests\r\n      updateRequestFilter: this.updateRequestFilter.bind(this),\r\n      updateRequestList: this.updateRequestList.bind(this),\r\n      updateRequestCounter: this.updateRequestCounter.bind(this),\r\n\r\n      // Total requests and waiting room\r\n      updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n\r\n      // Menu modals\r\n      updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\r\n      updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n      updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\r\n      updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\r\n      updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\r\n      updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\r\n      updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\r\n      updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\r\n\r\n      // Other modals\r\n      updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\r\n      updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\r\n      updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\r\n      updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\r\n      updateIsLoadingModalVisible: this.updateIsLoadingModalVisible.bind(this),\r\n\r\n      // Recording Options\r\n      updateRecordingMediaOptions: this.updateRecordingMediaOptions.bind(this),\r\n      updateRecordingAudioOptions: this.updateRecordingAudioOptions.bind(this),\r\n      updateRecordingVideoOptions: this.updateRecordingVideoOptions.bind(this),\r\n      updateRecordingVideoType: this.updateRecordingVideoType.bind(this),\r\n      updateRecordingVideoOptimized: this.updateRecordingVideoOptimized.bind(this),\r\n      updateRecordingDisplayType: this.updateRecordingDisplayType.bind(this),\r\n      updateRecordingAddHLS: this.updateRecordingAddHLS.bind(this),\r\n      updateRecordingAddText: this.updateRecordingAddText.bind(this),\r\n      updateRecordingCustomText: this.updateRecordingCustomText.bind(this),\r\n      updateRecordingCustomTextPosition: this.updateRecordingCustomTextPosition.bind(this),\r\n      updateRecordingCustomTextColor: this.updateRecordingCustomTextColor.bind(this),\r\n      updateRecordingNameTags: this.updateRecordingNameTags.bind(this),\r\n      updateRecordingBackgroundColor: this.updateRecordingBackgroundColor.bind(this),\r\n      updateRecordingNameTagsColor: this.updateRecordingNameTagsColor.bind(this),\r\n      updateRecordingOrientationVideo: this.updateRecordingOrientationVideo.bind(this),\r\n      updateClearedToResume: this.updateClearedToResume.bind(this),\r\n      updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n      updateRecordState: this.updateRecordState.bind(this),\r\n      updateShowRecordButtons: this.updateShowRecordButtons.bind(this),\r\n      updateRecordingProgressTime: this.updateRecordingProgressTime.bind(this),\r\n      updateAudioSwitching: this.updateAudioSwitching.bind(this),\r\n      updateVideoSwitching: this.updateVideoSwitching.bind(this),\r\n\r\n      // Media states\r\n      updateVideoAlreadyOn: this.updateVideoAlreadyOn.bind(this),\r\n      updateAudioAlreadyOn: this.updateAudioAlreadyOn.bind(this),\r\n      updateComponentSizes: this.updateComponentSizes.bind(this),\r\n\r\n      // Permissions\r\n      updateHasCameraPermission: this.updateHasCameraPermission.bind(this),\r\n      updateHasAudioPermission: this.updateHasAudioPermission.bind(this),\r\n\r\n      // Transports\r\n      updateTransportCreated: this.updateTransportCreated.bind(this),\r\n      updateLocalTransportCreated: this.updateLocalTransportCreated.bind(this),\r\n      updateTransportCreatedVideo: this.updateTransportCreatedVideo.bind(this),\r\n      updateTransportCreatedAudio: this.updateTransportCreatedAudio.bind(this),\r\n      updateTransportCreatedScreen: this.updateTransportCreatedScreen.bind(this),\r\n      updateProducerTransport: this.updateProducerTransport.bind(this),\r\n      updateLocalProducerTransport: this.updateLocalProducerTransport.bind(this),\r\n      updateVideoProducer: this.updateVideoProducer.bind(this),\r\n      updateLocalVideoProducer: this.updateLocalVideoProducer.bind(this),\r\n      updateParams: this.updateParams.bind(this),\r\n      updateVideoParams: this.updateVideoParams.bind(this),\r\n      updateAudioParams: this.updateAudioParams.bind(this),\r\n      updateAudioProducer: this.updateAudioProducer.bind(this),\r\n      updateAudioLevel: this.updateAudioLevel.bind(this),\r\n      updateLocalAudioProducer: this.updateLocalAudioProducer.bind(this),\r\n      updateConsumerTransports: this.updateConsumerTransports.bind(this),\r\n      updateConsumingTransports: this.updateConsumingTransports.bind(this),\r\n\r\n      // Polls\r\n      updatePolls: this.updatePolls.bind(this),\r\n      updatePoll: this.updatePoll.bind(this),\r\n      updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\r\n\r\n      // Background\r\n      updateCustomImage: this.updateCustomImage.bind(this),\r\n      updateSelectedImage: this.updateSelectedImage.bind(this),\r\n      updateSegmentVideo: this.updateSegmentVideo.bind(this),\r\n      updateSelfieSegmentation: this.updateSelfieSegmentation.bind(this),\r\n      updatePauseSegmentation: this.updatePauseSegmentation.bind(this),\r\n      updateProcessedStream: this.updateProcessedStream.bind(this),\r\n      updateKeepBackground: this.updateKeepBackground.bind(this),\r\n      updateBackgroundHasChanged: this.updateBackgroundHasChanged.bind(this),\r\n      updateVirtualStream: this.updateVirtualStream.bind(this),\r\n      updateMainCanvas: this.updateMainCanvas.bind(this),\r\n      updatePrevKeepBackground: this.updatePrevKeepBackground.bind(this),\r\n      updateAppliedBackground: this.updateAppliedBackground.bind(this),\r\n      updateIsBackgroundModalVisible: this.updateIsBackgroundModalVisible.bind(this),\r\n      updateAutoClickBackground: this.updateAutoClickBackground.bind(this),\r\n\r\n      // Breakout rooms\r\n      updateBreakoutRooms: this.updateBreakoutRooms.bind(this),\r\n      updateCurrentRoomIndex: this.updateCurrentRoomIndex.bind(this),\r\n      updateCanStartBreakout: this.updateCanStartBreakout.bind(this),\r\n      updateBreakOutRoomStarted: this.updateBreakOutRoomStarted.bind(this),\r\n      updateBreakOutRoomEnded: this.updateBreakOutRoomEnded.bind(this),\r\n      updateHostNewRoom: this.updateHostNewRoom.bind(this),\r\n      updateLimitedBreakRoom: this.updateLimitedBreakRoom.bind(this),\r\n      updateMainRoomsLength: this.updateMainRoomsLength.bind(this),\r\n      updateMemberRoom: this.updateMemberRoom.bind(this),\r\n      updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\r\n\r\n      // Whiteboard\r\n      updateWhiteboardUsers: this.updateWhiteboardUsers.bind(this),\r\n      updateCurrentWhiteboardIndex: this.updateCurrentWhiteboardIndex.bind(this),\r\n      updateCanStartWhiteboard: this.updateCanStartWhiteboard.bind(this),\r\n      updateWhiteboardStarted: this.updateWhiteboardStarted.bind(this),\r\n      updateWhiteboardEnded: this.updateWhiteboardEnded.bind(this),\r\n      updateWhiteboardLimit: this.updateWhiteboardLimit.bind(this),\r\n      updateIsWhiteboardModalVisible: this.updateIsWhiteboardModalVisible.bind(this),\r\n      updateIsConfigureWhiteboardModalVisible:\r\n        this.updateIsConfigureWhiteboardModalVisible.bind(this),\r\n      updateShapes: this.updateShapes.bind(this),\r\n      updateUseImageBackground: this.updateUseImageBackground.bind(this),\r\n      updateRedoStack: this.updateRedoStack.bind(this),\r\n      updateUndoStack: this.updateUndoStack.bind(this),\r\n      updateCanvasStream: this.updateCanvasStream.bind(this),\r\n      updateCanvasWhiteboard: this.updateCanvasWhiteboard.bind(this),\r\n\r\n      // Screenboard\r\n      updateCanvasScreenboard: this.updateCanvasScreenboard.bind(this),\r\n      updateProcessedScreenStream: this.updateProcessedScreenStream.bind(this),\r\n      updateAnnotateScreenStream: this.updateAnnotateScreenStream.bind(this),\r\n      updateMainScreenCanvas: this.updateMainScreenCanvas.bind(this),\r\n      updateIsScreenboardModalVisible: this.updateIsScreenboardModalVisible.bind(this),\r\n\r\n      // Other functions\r\n      checkOrientation: this.checkOrientation.bind(this),\r\n\r\n      updateDevice: this.updateDevice.bind(this),\r\n      updateSocket: this.updateSocket.bind(this),\r\n      updateLocalSocket: this.updateLocalSocket.bind(this),\r\n      updateValidated: this.updateValidated.bind(this),\r\n\r\n      showAlert: this.showAlert.bind(this),\r\n      getUpdatedAllParams: () => {\r\n\r\n        try {\r\n          if (this.sourceParameters !== null) {\r\n            this.sourceParameters = {\r\n              ...this.getAllParams(),\r\n              ...this.mediaSFUFunctions(),\r\n            };\r\n            if (this.updateSourceParameters) {\r\n              this.updateSourceParameters(this.sourceParameters);\r\n            }\r\n          }\r\n        } catch {\r\n          console.log('error updateSourceParameters');\r\n        }\r\n\r\n        return {\r\n          ...this.getAllParams(),\r\n          ...this.mediaSFUFunctions(),\r\n        };\r\n      },\r\n    };\r\n  }\r\n\r\n  mediaSFUParameters = {\r\n    ...this.getAllParams(),\r\n    ...this.mediaSFUFunctions(),\r\n  };\r\n\r\n  getUpdatedAllParams = () => {\r\n    return {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n  };\r\n\r\n  updateButtonState(buttonType: string, value: boolean) {\r\n    this.controlButtons = this.controlButtons.map((button) => {\r\n      if (buttonType === 'micActive' && button.icon === this.faMicrophoneSlash) {\r\n        return { ...button, active: value };\r\n      }\r\n      if (buttonType === 'videoActive' && button.icon === this.faVideoSlash) {\r\n        return { ...button, active: value };\r\n      }\r\n      if (buttonType === 'screenShareActive' && button.icon === this.faDesktop) {\r\n        if (button.alternateIconComponent) {\r\n          const updatedInjector = this.createInjector({\r\n            disabled: !value,\r\n          });\r\n          return {\r\n            ...button,\r\n            active: true,\r\n            alternateIconComponent: { ...this.screenShareWidget, injector: updatedInjector },\r\n          }; //always default to true for active\r\n        } else {\r\n          return { ...button, active: true }; //always default to true for active\r\n        }\r\n      }\r\n      if (buttonType === 'endCallActive' && button.icon === this.faPhone) {\r\n        return { ...button, active: value };\r\n      }\r\n      if (buttonType === 'participantsActive' && button.icon === this.faUsers) {\r\n        return { ...button, active: value };\r\n      }\r\n      if (\r\n        buttonType === 'showMessagesBadge' &&\r\n        button.customName &&\r\n        button.customName === 'Messages'\r\n      ) {\r\n        const updatedInjector = this.createInjector({\r\n          icon: this.faComments,\r\n          badgeValue: value ? '*' : '',\r\n          iconColor: 'black',\r\n          showBadge: value,\r\n        });\r\n        return { ...button, customComponent: { ...this.messageWidget, injector: updatedInjector } };\r\n      }\r\n      if (buttonType === 'showMenuBadge' && button.customName && button.customName === 'Menu') {\r\n        const updatedInjector = this.createInjector({\r\n          icon: this.faBars,\r\n          badgeValue: this.totalReqWait.value,\r\n          iconColor: 'black',\r\n          showBadge: true,\r\n        });\r\n        return { ...button, customComponent: { ...this.menuWidget, injector: updatedInjector } };\r\n      }\r\n\r\n      return button;\r\n    });\r\n\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  PrejoinPageComponent: any = {\r\n    component: this.PrejoinPage,\r\n    injector: null,\r\n  };\r\n\r\n  updatePrejoinPageComponent = () => {\r\n    const PrejoinComp = {\r\n      component: this.PrejoinPage,\r\n      injector: this.createInjector({\r\n        parameters: {\r\n          showAlert:\r\n            this.showAlert ||\r\n            (() => {\r\n              console.log('showAlert not defined');\r\n            }),\r\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\r\n          connectSocket: this.socketManager.connectSocket,\r\n          connectLocalSocket: this.socketManager.connectLocalSocket,\r\n          updateSocket: this.updateSocket,\r\n          updateLocalSocket: this.updateLocalSocket,\r\n          updateValidated: this.updateValidated,\r\n          updateApiUserName: this.updateApiUserName,\r\n          updateApiToken: this.updateApiToken,\r\n          updateLink: this.updateLink,\r\n          updateRoomName: this.updateRoomName,\r\n          updateMember: this.updateMember,\r\n        },\r\n        credentials: this.credentials,\r\n        localLink: this.localLink,\r\n        connectMediaSFU: this.connectMediaSFU,\r\n        returnUI: this.returnUI,\r\n        noUIPreJoinOptions: this.noUIPreJoinOptions,\r\n        joinMediaSFURoom: this.joinMediaSFURoom,\r\n        createMediaSFURoom: this.createMediaSFURoom,\r\n      }),\r\n    };\r\n\r\n    this.PrejoinPageComponent = { ...PrejoinComp };\r\n\r\n    this.cdr.detectChanges();\r\n  };\r\n\r\n  ngOnInit() {\r\n    if (this.PrejoinPage) {\r\n      this.updatePrejoinPageComponent();\r\n    }\r\n\r\n    this.setupResizeListener();\r\n    if (this.validated) {\r\n      this.connectAndAddSocketMethods();\r\n    }\r\n\r\n    this.mainHeightWidthSubscription = this.mainHeightWidth.subscribe(() => {\r\n      this.updateMainVideoSize();\r\n    });\r\n\r\n    this.recordingSubscription = combineLatest([\r\n      this.recordPaused,\r\n      this.recordStarted,\r\n      this.recordStopped,\r\n      this.recordResumed,\r\n      this.recordingProgressTime,\r\n      this.showRecordButtons,\r\n      this.islevel,\r\n    ]).subscribe(\r\n      ([\r\n        recordPaused,\r\n        recordStarted,\r\n        recordStopped,\r\n        recordResumed,\r\n        recordingProgressTime,\r\n        showRecordButtons,\r\n        islevel,\r\n      ]) => {\r\n        if (\r\n          recordPaused ||\r\n          recordStarted ||\r\n          recordStopped ||\r\n          recordResumed ||\r\n          recordingProgressTime ||\r\n          showRecordButtons ||\r\n          islevel\r\n        ) {\r\n          this.updateRecordButtons();\r\n        }\r\n      },\r\n    );\r\n\r\n    this.ScreenboardSubscription = combineLatest([\r\n      this.shared,\r\n      this.componentSizes,\r\n      this.annotateScreenStream,\r\n    ]).subscribe(([shared, componentSizes]) => {\r\n      this.ScreenboardWidget = {\r\n        component: Screenboard,\r\n        inputs: {\r\n          customWidth: componentSizes.mainWidth,\r\n          customHeight: componentSizes.mainHeight,\r\n          parameters: this.mediaSFUParameters,\r\n          showAspect: shared,\r\n        },\r\n      };\r\n    });\r\n    this.validatedSubscription = this.validated.subscribe((validated) => {\r\n      if (validated) {\r\n        this.handleValidated();\r\n      }\r\n    });\r\n    this.islevelSubscription = this.islevel.subscribe((islevel) => {\r\n      if (islevel) {\r\n        this.updateCustomMenuButtons();\r\n      }\r\n    });\r\n    this.coHostSubscription = combineLatest([this.coHost, this.coHostResponsibility]).subscribe(\r\n      ([coHost, coHostResponsibility]) => {\r\n        if (coHost || coHostResponsibility) {\r\n          this.updateCustomMenuButtons();\r\n        }\r\n      },\r\n    );\r\n\r\n    // Subscribe to changes in BehaviorSubject and update the buttons accordingly\r\n    this.buttonSubscriptions.push(\r\n      this.micActive.subscribe((value) => {\r\n        this.updateButtonState('micActive', value);\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.videoActive.subscribe((value) => {\r\n        this.updateButtonState('videoActive', value);\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.screenShareActive.subscribe((value) => {\r\n        this.updateButtonState('screenShareActive', value);\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.showMessagesBadge.subscribe((value) => {\r\n        this.updateButtonState('showMessagesBadge', value);\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.totalReqWait.subscribe(() => {\r\n        this.updateButtonState('showMenuBadge', true);\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.participantsCounter.subscribe((value) => {\r\n        this.updateMenuParticipantsWidget(value);\r\n      }),\r\n    );\r\n\r\n    this.mediaSFUParameters = {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    window.removeEventListener('resize', this.handleResize);\r\n    window.removeEventListener('orientationchange', this.handleResize);\r\n    if (this.mainHeightWidthSubscription) {\r\n      this.mainHeightWidthSubscription.unsubscribe();\r\n    }\r\n    if (this.validatedSubscription) {\r\n      this.validatedSubscription.unsubscribe();\r\n    }\r\n    if (this.islevelSubscription) {\r\n      this.islevelSubscription.unsubscribe();\r\n    }\r\n    if (this.coHostSubscription) {\r\n      this.coHostSubscription.unsubscribe();\r\n    }\r\n    if (this.ScreenboardSubscription) {\r\n      this.ScreenboardSubscription.unsubscribe();\r\n    }\r\n    if (this.recordingSubscription) {\r\n      this.recordingSubscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n  updateMainVideoSize = async () => {\r\n    if (!this.lock_screen.value && !this.shared.value) {\r\n      this.prepopulateUserMedia.prepopulateUserMedia({\r\n        name: this.hostLabel.value,\r\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n      });\r\n    } else {\r\n      if (!this.first_round.value) {\r\n        this.prepopulateUserMedia.prepopulateUserMedia({\r\n          name: this.hostLabel.value,\r\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  async connectAndAddSocketMethods() {\r\n    this.mediaSFUParameters = {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n    const socket_ = await this.connect_Socket(this.apiUserName.value, this.apiToken.value);\r\n    if (socket_) {\r\n      this.updateSocket(socket_);\r\n    }\r\n  }\r\n\r\n  async handleValidated() {\r\n    this.updateAllVideoStreams([\r\n      { producerId: 'youyou', stream: undefined, id: 'youyou', name: 'youyou' },\r\n    ]);\r\n\r\n    this.updateStreamNames([{ id: 'youyou', name: 'youyou', producerId: '' }]);\r\n\r\n    if (this.validated.value) {\r\n\r\n      try {\r\n        if (!this.localUIMode.value) {\r\n          this.updateIsLoadingModalVisible(true);\r\n          await this.connectAndAddSocketMethods();\r\n        } else {\r\n          this.updateIsLoadingModalVisible(false);\r\n        }\r\n      } catch (error) {\r\n        console.log('error connectAndaAddSocketMethods', error);\r\n      }\r\n\r\n      this.startMeetingProgressTimer.startMeetingProgressTimer({\r\n        startTime: Date.now() / 1000,\r\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n      });\r\n\r\n      try {\r\n        if (this.sourceParameters !== null) {\r\n          this.sourceParameters = {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          };\r\n          if (this.updateSourceParameters) {\r\n            this.updateSourceParameters(this.sourceParameters);\r\n          }\r\n        }\r\n      } catch {\r\n        console.log('error updateSourceParameters');\r\n      }\r\n\r\n    }\r\n  }\r\n\r\n  @HostListener('window:resize')\r\n  @HostListener('window:orientationchange')\r\n  async handleResize() {\r\n    let fraction = 0;\r\n\r\n    if (\r\n      window.innerHeight < window.innerWidth &&\r\n      (this.eventType.value == 'webinar' || this.eventType.value == 'conference')\r\n    ) {\r\n      const currentHeight = window.innerHeight;\r\n      fraction = Number((40 / currentHeight).toFixed(3));\r\n      if (fraction != this.controlHeight.value) {\r\n        this.updateControlHeight(Number(fraction));\r\n      }\r\n    } else {\r\n      // Set default control button height for portrait mode or other event types\r\n      const currentHeight = window.innerHeight;\r\n      fraction = Number((40 / currentHeight).toFixed(3));\r\n      fraction = Number(fraction);\r\n      if (fraction != this.controlHeight.value) {\r\n        this.updateControlHeight(Number(fraction));\r\n      }\r\n    }\r\n\r\n    const dimensions = this.computeDimensionsMethod({\r\n      containerWidthFraction: 1,\r\n      containerHeightFraction: 1,\r\n      mainSize: this.mainHeightWidth.value,\r\n      doStack: true,\r\n      defaultFraction:\r\n        this.eventType.value == 'webinar' || this.eventType.value == 'conference'\r\n          ? 1 - fraction\r\n          : 1,\r\n    });\r\n\r\n    this.updateComponentSizes(dimensions);\r\n\r\n    const orientation = this.checkOrientation();\r\n    if (orientation == 'portrait') {\r\n      if (!this.isWideScreen.value) {\r\n        if (this.shareScreenStarted.value || this.shared.value) {\r\n          this.updateScreenForceFullDisplay(true);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Updates the main grid view\r\n    await this.prepopulateUserMedia.prepopulateUserMedia({\r\n      name: this.hostLabel.value,\r\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n    });\r\n    // Updates the mini grid view\r\n    await this.onScreenChanges.onScreenChanges({\r\n      changed: true,\r\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n    });\r\n  }\r\n\r\n  async disconnectAllSockets(consume_sockets: ConsumeSocket[]): Promise<void> {\r\n    for (const socket of consume_sockets) {\r\n      try {\r\n        const ip = Object.keys(socket)[0];\r\n        await socket[ip].disconnect();\r\n      } catch (error) {\r\n        console.log(`Error disconnecting socket with IP: ${Object.keys(socket)[0]}`, error);\r\n      }\r\n    }\r\n  }\r\n\r\n  async closeAndReset() {\r\n    //close and clean up all sockets, modals,... and reset all states to initial values\r\n\r\n    this.updateIsMessagesModalVisible(false);\r\n    this.updateIsParticipantsModalVisible(false);\r\n    this.updateIsWaitingModalVisible(false);\r\n    this.updateIsRequestsModalVisible(false);\r\n    this.updateIsCoHostModalVisible(false);\r\n    this.updateIsSettingsModalVisible(false);\r\n    this.updateIsDisplaySettingsModalVisible(false);\r\n    this.updateIsMediaSettingsModalVisible(false);\r\n    this.updateIsMenuModalVisible(false);\r\n    this.updateIsShareEventModalVisible(false);\r\n    this.updateIsConfirmExitModalVisible(false);\r\n    await this.disconnectAllSockets(this.consume_sockets.value);\r\n    await this.updateStatesToInitialValues();\r\n    this.updateMeetingProgressTime('00:00:00');\r\n    this.updateMeetingElapsedTime(0);\r\n    this.updateRecordingProgressTime('00:00:00');\r\n    this.updateRecordElapsedTime(0);\r\n    this.updateShowRecordButtons(false);\r\n\r\n    this.updateIsConfigureWhiteboardModalVisible(false);\r\n    this.updateIsWhiteboardModalVisible(false);\r\n    this.updateIsMenuModalVisible(false);\r\n    this.updateIsRecordingModalVisible(false);\r\n    this.updateIsPollModalVisible(false);\r\n    this.updateIsBreakoutRoomsModalVisible(false);\r\n    this.updateIsBackgroundModalVisible(false);\r\n    this.updateIsLoadingModalVisible(false);\r\n    this.updateIsConfirmHereModalVisible(false);\r\n\r\n    await sleep({ ms: 500 });\r\n    this.updateValidated(false);\r\n    //if on web, reload the page\r\n    window.location.reload();\r\n  }\r\n\r\n  computeDimensionsMethod = ({\r\n    containerWidthFraction = 1,\r\n    containerHeightFraction = 1,\r\n    mainSize,\r\n    doStack = true,\r\n    defaultFraction,\r\n  }: {\r\n    containerWidthFraction?: number;\r\n    containerHeightFraction?: number;\r\n    mainSize: number;\r\n    doStack?: boolean;\r\n    defaultFraction: number;\r\n  }): ComponentSizes => {\r\n    const parentWidth = window.innerWidth * containerWidthFraction;\r\n    const parentHeight = window.innerHeight * containerHeightFraction * defaultFraction;\r\n    let isWideScreen = parentWidth >= 768;\r\n\r\n    if (!isWideScreen && parentWidth > 1.5 * parentHeight) {\r\n      isWideScreen = true;\r\n    }\r\n\r\n    this.updateIsWideScreen(isWideScreen);\r\n\r\n    const dimensions = this.calculateDimensions({\r\n      parentWidth,\r\n      parentHeight,\r\n      isWideScreen,\r\n      mainSize,\r\n      doStack,\r\n    });\r\n    return dimensions;\r\n  };\r\n\r\n  calculateDimensions({\r\n    parentWidth,\r\n    parentHeight,\r\n    isWideScreen,\r\n    mainSize,\r\n    doStack,\r\n  }: {\r\n    parentWidth: number;\r\n    parentHeight: number;\r\n    isWideScreen: boolean;\r\n    mainSize: number;\r\n    doStack: boolean;\r\n  }): ComponentSizes {\r\n    if (doStack) {\r\n      return isWideScreen\r\n        ? {\r\n          mainHeight: Math.floor(parentHeight),\r\n          otherHeight: Math.floor(parentHeight),\r\n          mainWidth: Math.floor((mainSize / 100) * parentWidth),\r\n          otherWidth: Math.floor(((100 - mainSize) / 100) * parentWidth),\r\n        }\r\n        : {\r\n          mainHeight: Math.floor((mainSize / 100) * parentHeight),\r\n          otherHeight: Math.floor(((100 - mainSize) / 100) * parentHeight),\r\n          mainWidth: Math.floor(parentWidth),\r\n          otherWidth: Math.floor(parentWidth),\r\n        };\r\n    } else {\r\n      return {\r\n        mainHeight: Math.floor(parentHeight),\r\n        otherHeight: Math.floor(parentHeight),\r\n        mainWidth: Math.floor(parentWidth),\r\n        otherWidth: Math.floor(parentWidth),\r\n      };\r\n    }\r\n  }\r\n\r\n  handleOrientationChange() {\r\n    window.addEventListener('resize', this.handleResize.bind(this));\r\n    window.addEventListener('orientationchange', this.handleResize.bind(this));\r\n  }\r\n\r\n  setupResizeListener() {\r\n    this.handleResize();\r\n  }\r\n\r\n  orientation = window.innerHeight > window.innerWidth ? 'portrait' : 'landscape';\r\n\r\n  async joinRoom(data: {\r\n    socket: Socket;\r\n    roomName: string;\r\n    islevel: string;\r\n    member: string;\r\n    sec: string;\r\n    apiUserName: string;\r\n  }): Promise<ResponseJoinRoom | null> {\r\n    const { socket, roomName, islevel, member, sec, apiUserName } = data;\r\n\r\n    try {\r\n      const response: ResponseJoinRoom | null = await this.joinRoomClient.joinRoomClient({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n      });\r\n\r\n      return response;\r\n    } catch (error) {\r\n      console.log('Error joining room:', error);\r\n      throw new Error('Failed to join the room. Please check your connection and try again.');\r\n    }\r\n  }\r\n\r\n  async join_Room({\r\n    socket,\r\n    roomName,\r\n    islevel,\r\n    member,\r\n    sec,\r\n    apiUserName,\r\n    isLocal = false,\r\n  }: {\r\n    socket: Socket;\r\n    roomName: string;\r\n    islevel: string;\r\n    member: string;\r\n    sec: string;\r\n    apiUserName: string;\r\n    isLocal?: boolean;\r\n  }): Promise<void> {\r\n    let data: ResponseJoinRoom | null;\r\n\r\n    if (!isLocal) {\r\n      data = await this.joinRoom({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n      });\r\n    } else {\r\n      const localData: ResponseJoinLocalRoom = await this.joinLocalRoom.joinLocalRoom({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n        parameters: {\r\n          showAlert:\r\n            this.showAlert ||\r\n            (() => {\r\n              console.log('showAlert not defined');\r\n            }),\r\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\r\n          connectSocket: this.socketManager.connectSocket,\r\n          connectLocalSocket: this.socketManager.connectLocalSocket,\r\n          updateSocket: this.updateSocket,\r\n          updateLocalSocket: this.updateLocalSocket,\r\n          updateValidated: this.updateValidated,\r\n          updateApiUserName: this.updateApiUserName,\r\n          updateApiToken: this.updateApiToken,\r\n          updateLink: this.updateLink,\r\n          updateRoomName: this.updateRoomName,\r\n          updateMember: this.updateMember,\r\n        },\r\n        checkConnect:\r\n          this.localLink.length > 0 &&\r\n          this.connectMediaSFU === true &&\r\n          !this.link.value.includes('mediasfu.com'),\r\n        localLink: this.localLink,\r\n        joinMediaSFURoom: this.joinMediaSFURoom,\r\n      });\r\n\r\n      data = await createResponseJoinRoom({ localRoom: localData });\r\n    }\r\n\r\n    const updateAndComplete = async (data: ResponseJoinRoom) => {\r\n      // Update room parameters\r\n      try {\r\n        // Check if roomRecvIPs is not empty\r\n        if (!data.roomRecvIPs || data.roomRecvIPs.length === 0) {\r\n          data.roomRecvIPs = ['none'];\r\n\r\n          if (\r\n            this.link.value !== \"\" &&\r\n            this.link.value.includes(\"mediasfu.com\") &&\r\n            !isLocal\r\n          ) {\r\n            // Community Edition Only\r\n            await this.receiveAllPipedTransports.receiveAllPipedTransports({\r\n              community: true,\r\n              nsock: this.getUpdatedAllParams().socket,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n        }\r\n\r\n\r\n        this.updateRoomParametersClient.updateRoomParametersClient({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n            data: data,\r\n          },\r\n        });\r\n\r\n        if (data.isHost) {\r\n          this.updateIslevel('2');\r\n        } else {\r\n          // Issue with isHost for local room\r\n          if (islevel !== '2') {\r\n            this.updateIslevel('1');\r\n          }\r\n        }\r\n\r\n        if (data.secureCode && data.secureCode !== '') {\r\n          this.updateAdminPasscode(data.secureCode);\r\n        }\r\n\r\n        if (data.rtpCapabilities) {\r\n          try {\r\n            const device_ = await this.createDeviceClient.createDeviceClient({\r\n              rtpCapabilities: data.rtpCapabilities,\r\n            });\r\n\r\n            if (device_) {\r\n              this.device.next(device_);\r\n            }\r\n          } catch (error) {\r\n            console.error('Error creating device:', error);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error('Error in updateAndComplete:', error);\r\n      }\r\n    };\r\n\r\n    if (data && data.success) {\r\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && isLocal) {\r\n        this.roomData.next(data);\r\n        return;\r\n      } else if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\r\n        // Update roomData\r\n        if (this.roomData.value) {\r\n          // Updating only the recording and meeting room parameters\r\n          this.roomData.value.recordingParams = data.recordingParams;\r\n          this.roomData.value.meetingRoomParams = data.meetingRoomParams;\r\n          this.roomData.next(this.roomData.value);\r\n        } else {\r\n          this.roomData.next(data);\r\n        }\r\n      } else {\r\n        // Update roomData\r\n        this.roomData.next(data);\r\n        if (!this.link.value.includes('mediasfu.com')) {\r\n          this.roomData.value!.meetingRoomParams = data.meetingRoomParams;\r\n        }\r\n      }\r\n\r\n      await updateAndComplete(data);\r\n    } else {\r\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\r\n        // Join local room only\r\n        if (this.roomData.value) {\r\n          await updateAndComplete(this.roomData.value);\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Might be a wrong room name or room is full or other error; check reason in data object if available\r\n      try {\r\n        if (this.showAlert && data?.reason) {\r\n          this.showAlert({\r\n            message: data.reason,\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n        }\r\n      } catch (error) {\r\n        /* handle error */\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  onParticipantsFilterChange = (value: string): void => {\r\n    if (value && value.length > 0) {\r\n      this.filteredParticipants.next(\r\n        this.participants.value.filter((participant) =>\r\n          participant.name.toLowerCase().includes(value.toLowerCase()),\r\n        ),\r\n      );\r\n      this.participantsCounter.next(this.filteredParticipants.value.length);\r\n    } else {\r\n      this.filteredParticipants.next(this.participants.value);\r\n      this.participantsCounter.next(this.participants.value.length);\r\n    }\r\n  };\r\n\r\n  updateStatesToInitialValues = async () => {\r\n    const initialValues = initialValuesState as { [key: string]: any };\r\n    const updateFunctions = this.getAllParams() as unknown as {\r\n      [key: string]: (value: any) => void;\r\n    };\r\n\r\n    for (const key in initialValues) {\r\n      if (Object.prototype.hasOwnProperty.call(initialValues, key)) {\r\n        const updateFunctionName = `update${key.charAt(0).toUpperCase() + key.slice(1)}`;\r\n        const updateFunction = updateFunctions[updateFunctionName];\r\n\r\n        if (typeof updateFunction === 'function') {\r\n          try {\r\n            updateFunction(initialValues[key]);\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  faRecordVinyl = faRecordVinyl;\r\n  faPlayCircle = faPlayCircle;\r\n  faPauseCircle = faPauseCircle;\r\n  faStopCircle = faStopCircle;\r\n  faDotCircle = faDotCircle;\r\n  faCog = faCog;\r\n  faUsers = faUsers;\r\n  faClock = faClock;\r\n  faUserPlus = faUserPlus;\r\n  faTools = faTools;\r\n  faDesktop = faDesktop;\r\n  faPoll = faPoll;\r\n  faUserFriends = faUserFriends;\r\n  faChalkboardTeacher = faChalkboardTeacher;\r\n  faMicrophone = faMicrophone;\r\n  faMicrophoneSlash = faMicrophoneSlash;\r\n  faVideo = faVideo;\r\n  faVideoSlash = faVideoSlash;\r\n  faPhone = faPhone;\r\n  faBars = faBars;\r\n  faComments = faComments;\r\n  faChartBar = faChartBar;\r\n\r\n  onCloseMenuModal = () => {\r\n    this.updateIsMenuModalVisible(false);\r\n  };\r\n\r\n  onEventSettingsClose = () => {\r\n    this.updateIsSettingsModalVisible(false);\r\n  };\r\n\r\n  onCoHostClose = () => {\r\n    this.updateIsCoHostModalVisible(false);\r\n  };\r\n\r\n  onMediaSettingsClose = () => {\r\n    this.updateIsMediaSettingsModalVisible(false);\r\n  };\r\n\r\n  onDisplaySettingsClose = () => {\r\n    this.updateIsDisplaySettingsModalVisible(false);\r\n  };\r\n\r\n  onPollClose = () => {\r\n    this.updateIsPollModalVisible(false);\r\n  };\r\n\r\n  onBreakoutRoomsClose = () => {\r\n    this.updateIsBreakoutRoomsModalVisible(false);\r\n  };\r\n\r\n  onConfigureWhiteboardClose = () => {\r\n    this.updateIsConfigureWhiteboardModalVisible(false);\r\n  };\r\n\r\n  onMessagesClose = () => {\r\n    this.updateIsMessagesModalVisible(false);\r\n  };\r\n\r\n  onRecordingClose = () => {\r\n    this.updateIsRecordingModalVisible(false);\r\n  };\r\n\r\n  onParticipantsClose = () => {\r\n    this.updateIsParticipantsModalVisible(false);\r\n  };\r\n\r\n  onBackgroundClose = () => {\r\n    this.updateIsBackgroundModalVisible(false);\r\n  };\r\n\r\n  onConfirmExitClose = () => {\r\n    this.updateIsConfirmExitModalVisible(false);\r\n  };\r\n\r\n  onConfirmHereClose = () => {\r\n    this.updateIsConfirmHereModalVisible(false);\r\n  };\r\n\r\n  onScreenboardClose = () => {\r\n    this.updateIsScreenboardModalVisible(false);\r\n  };\r\n\r\n  onShareEventClose = () => {\r\n    this.updateIsShareEventModalVisible(false);\r\n  };\r\n\r\n  onAlertHide = () => {\r\n    this.updateAlertVisible(false);\r\n  };\r\n\r\n  ScreenboardWidget = {\r\n    component: Screenboard,\r\n    inputs: {\r\n      customWidth: this.componentSizes.value.mainWidth,\r\n      customHeight: this.componentSizes.value.mainHeight,\r\n      parameters: this.mediaSFUParameters,\r\n      showAspect: this.shared.value,\r\n    },\r\n  };\r\n\r\n  recordTimerWidget = {\r\n    component: RecordTimerWidget,\r\n    injector: this.createInjector({ recordingProgressTime: this.recordingProgressTime.value }),\r\n  };\r\n\r\n  updateRecordTimerWidget = (\r\n    recordingProgressTime: string = this.recordingProgressTime.value,\r\n  ): { component: any; injector: Injector } => {\r\n    const recordTimerWidget = {\r\n      component: RecordTimerWidget,\r\n      injector: this.createInjector({ recordingProgressTime: recordingProgressTime }),\r\n    };\r\n\r\n    this.recordTimerWidget = { ...recordTimerWidget };\r\n\r\n    this.cdr.markForCheck();\r\n\r\n    return recordTimerWidget;\r\n  };\r\n\r\n  recordButtons: MainButtonAlt[] = [];\r\n\r\n  recordButtonsArray: MainButtonAlt[] = [\r\n    {\r\n      icon: this.faPlayCircle,\r\n      active: () => !this.recordPaused.value,\r\n      onPress: () =>\r\n        this.updateRecording.updateRecording({\r\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n        }),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      alternateIcon: this.faPauseCircle,\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faStopCircle,\r\n      active: () => false,\r\n      onPress: () =>\r\n        this.stopRecording.stopRecording({\r\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'black',\r\n      show: () => true,\r\n    },\r\n    {\r\n      customComponent: () => this.updateRecordTimerWidget(),\r\n      show: () => true,\r\n      active: () => false,\r\n    },\r\n    {\r\n      icon: this.faDotCircle,\r\n      active: () => false,\r\n      onPress: () => console.log('Status pressed'),\r\n      activeColor: 'black',\r\n      inActiveColor: () => (this.recordPaused.value ? 'yellow' : 'red'),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faCog,\r\n      active: () => false,\r\n      onPress: () =>\r\n        this.launchRecording.launchRecording({\r\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n          showAlert: this.showAlert.bind(this),\r\n          stopLaunchRecord: this.stopLaunchRecord.value,\r\n          canLaunchRecord: this.canLaunchRecord.value,\r\n          recordingAudioSupport: this.recordingAudioSupport.value,\r\n          recordingVideoSupport: this.recordingVideoSupport.value,\r\n          updateCanRecord: this.updateCanRecord.bind(this),\r\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n          recordStarted: this.recordStarted.value,\r\n          recordPaused: this.recordPaused.value,\r\n          localUIMode: this.localUIMode.value,\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'black',\r\n      show: () => true,\r\n    },\r\n  ];\r\n\r\n  async updateRecordButtons() {\r\n    const recordButtons = this.recordButtonsArray.map((button) => {\r\n      return {\r\n        ...button,\r\n        active: typeof button.active === 'function' ? button.active() : button.active,\r\n        show: typeof button.show === 'function' ? button.show() : button.show,\r\n        customComponent: button.customComponent\r\n          ? typeof button.customComponent === 'function'\r\n            ? button.customComponent()\r\n            : button.customComponent\r\n          : undefined,\r\n        activeColor:\r\n          typeof button.inActiveColor === 'function'\r\n            ? button.inActiveColor()\r\n            : button.inActiveColor,\r\n        inActiveColor:\r\n          typeof button.inActiveColor === 'function'\r\n            ? button.inActiveColor()\r\n            : button.inActiveColor,\r\n      };\r\n    });\r\n    this.recordButtons = [...recordButtons];\r\n    await this.updateMenuRecordWidget(recordButtons);\r\n    this.updateCustomMenuButtons();\r\n\r\n    this.cdr.markForCheck();\r\n  }\r\n\r\n  // Create instances of the custom widgets\r\n  menuWidget = {\r\n    component: MenuWidget,\r\n    injector: this.createInjector({\r\n      icon: this.faBars,\r\n      badgeValue: this.totalReqWait.value,\r\n      iconColor: 'black',\r\n      showBadge: true,\r\n    }),\r\n  };\r\n\r\n  messageWidget = {\r\n    component: MessageWidget,\r\n    injector: this.createInjector({\r\n      icon: this.faComments,\r\n      showBadge: this.showMessagesBadge.value,\r\n      badgeValue: 1,\r\n      iconColor: 'black',\r\n    }),\r\n  };\r\n\r\n  menuRecordWidget = {\r\n    component: MenuRecordWidget,\r\n    injector: this.createInjector({\r\n      buttons: this.recordButtons,\r\n      showAspect: true,\r\n      direction: 'horizontal',\r\n    }),\r\n  };\r\n\r\n  updateMenuRecordWidget = (recordButtons: MainButtonAlt[] = this.recordButtons): any => {\r\n    const menuRecordWidget = {\r\n      component: MenuRecordWidget,\r\n      injector: this.createInjector({\r\n        buttons: recordButtons,\r\n        showAspect: true,\r\n        direction: 'horizontal',\r\n      }),\r\n    };\r\n\r\n    this.menuRecordWidget = { ...menuRecordWidget };\r\n\r\n    this.cdr.markForCheck();\r\n\r\n    return menuRecordWidget;\r\n  };\r\n\r\n  menuParticipantsWidget = {\r\n    component: MenuParticipantsWidget,\r\n    injector: this.createInjector({\r\n      icon: this.faChartBar,\r\n      participantsCounter: this.participantsCounter.value,\r\n      iconColor: 'black',\r\n    }),\r\n  };\r\n\r\n  updateMenuParticipantsWidget = (count: number = this.participantsCounter.value): any => {\r\n    const menuParticipantsWidget = {\r\n      component: MenuParticipantsWidget,\r\n      injector: this.createInjector({\r\n        icon: this.faChartBar,\r\n        participantsCounter: count,\r\n        iconColor: 'black',\r\n      }),\r\n    };\r\n\r\n    this.menuParticipantsWidget = { ...menuParticipantsWidget };\r\n\r\n    this.cdr.markForCheck();\r\n\r\n    return menuParticipantsWidget;\r\n  };\r\n\r\n  customMenuButtonsArray: MainCustomButton[] = [\r\n    {\r\n      icon: this.faRecordVinyl,\r\n      text: 'Record',\r\n      action: () =>\r\n        this.launchRecording.launchRecording({\r\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n          showAlert: this.showAlert.bind(this),\r\n          stopLaunchRecord: this.stopLaunchRecord.value,\r\n          canLaunchRecord: this.canLaunchRecord.value,\r\n          recordingAudioSupport: this.recordingAudioSupport.value,\r\n          recordingVideoSupport: this.recordingVideoSupport.value,\r\n          updateCanRecord: this.updateCanRecord.bind(this),\r\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n          recordStarted: this.recordStarted.value,\r\n          recordPaused: this.recordPaused.value,\r\n          localUIMode: this.localUIMode.value,\r\n        }),\r\n      show: () => !this.showRecordButtons.value && this.islevel.value == '2',\r\n    },\r\n    {\r\n      customComponent: () => this.updateMenuRecordWidget(),\r\n      show: () => this.showRecordButtons.value && this.islevel.value == '2',\r\n      action: () => console.log('record buttons pressed'),\r\n    },\r\n    {\r\n      icon: this.faCog,\r\n      text: 'Event Settings',\r\n      action: () =>\r\n        this.launchSettings.launchSettings({\r\n          updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\r\n          isSettingsModalVisible: this.isSettingsModalVisible.value,\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faUsers,\r\n      text: 'Requests',\r\n      action: () =>\r\n        this.launchRequests.launchRequests({\r\n          updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\r\n          isRequestsModalVisible: this.isRequestsModalVisible.value,\r\n        }),\r\n      show: () =>\r\n        this.islevel.value == '2' ||\r\n        (this.coHostResponsibility.value &&\r\n          this.coHost.value &&\r\n          this.coHost.value === this.member.value &&\r\n          !!this.coHostResponsibility?.value?.find((item) => item.name === 'media')?.value) ||\r\n        false,\r\n    },\r\n    {\r\n      icon: this.faClock,\r\n      text: 'Waiting',\r\n      action: () =>\r\n        this.launchWaiting.launchWaiting({\r\n          updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\r\n          isWaitingModalVisible: this.isWaitingModalVisible.value,\r\n        }),\r\n      show: () =>\r\n        this.islevel.value == '2' ||\r\n        (this.coHostResponsibility.value &&\r\n          this.coHost.value &&\r\n          this.coHost.value === this.member.value &&\r\n          this.coHostResponsibility?.value?.find((item) => item.name === 'waiting')?.value ===\r\n          true) ||\r\n        false,\r\n    },\r\n    {\r\n      icon: this.faUserPlus,\r\n      text: 'Co-host',\r\n      action: () =>\r\n        this.launchCoHost.launchCoHost({\r\n          updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\r\n          isCoHostModalVisible: this.isCoHostModalVisible.value,\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faTools,\r\n      text: 'Set Media',\r\n      action: () =>\r\n        this.launchMediaSettings.launchMediaSettings({\r\n          updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\r\n          isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\r\n          audioInputs: this.audioInputs.value,\r\n          videoInputs: this.videoInputs.value,\r\n          updateAudioInputs: this.updateAudioInputs.bind(this),\r\n          updateVideoInputs: this.updateVideoInputs.bind(this),\r\n        }),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faDesktop,\r\n      text: 'Display',\r\n      action: () =>\r\n        this.launchDisplaySettings.launchDisplaySettings({\r\n          updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\r\n          isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\r\n        }),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faPoll,\r\n      text: 'Poll',\r\n      action: () =>\r\n        this.launchPoll.launchPoll({\r\n          updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\r\n          isPollModalVisible: this.isPollModalVisible.value,\r\n        }),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faUserFriends,\r\n      text: 'Breakout Rooms',\r\n      action: () =>\r\n        this.launchBreakoutRooms.launchBreakoutRooms({\r\n          updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\r\n          isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faChalkboardTeacher,\r\n      text: 'Whiteboard',\r\n      action: () =>\r\n        this.launchConfigureWhiteboard.launchConfigureWhiteboard({\r\n          updateIsConfigureWhiteboardModalVisible:\r\n            this.updateIsConfigureWhiteboardModalVisible.bind(this),\r\n          isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n  ];\r\n\r\n  customMenuButtons: MainCustomButton[] = [];\r\n\r\n  updateCustomMenuButtons() {\r\n    this.customMenuButtons = this.customMenuButtonsArray.map((button) => {\r\n      return {\r\n        ...button,\r\n        show: typeof button.show === 'function' ? button.show() : button.show,\r\n        customComponent: button.customComponent\r\n          ? typeof button.customComponent === 'function'\r\n            ? button.customComponent()\r\n            : button.customComponent\r\n          : undefined,\r\n      };\r\n    });\r\n  }\r\n\r\n  screenShareWidget = {\r\n    component: ScreenShareWidget,\r\n    injector: this.createInjector({ disabled: !this.screenShareActive.value }),\r\n  };\r\n\r\n  controlButtons = [\r\n    {\r\n      icon: this.faMicrophoneSlash,\r\n      alternateIcon: this.faMicrophone,\r\n      active: this.micActive.value,\r\n      onPress: () =>\r\n        this.clickAudio.clickAudio({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      disabled: this.audioSwitching.value,\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faVideoSlash,\r\n      alternateIcon: this.faVideo,\r\n      active: this.videoActive.value,\r\n      onPress: () =>\r\n        this.clickVideo.clickVideo({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n            MediaStream,\r\n            MediaStreamTrack,\r\n            mediaDevices: MediaDevices,\r\n            device: this.device.value,\r\n            socket: this.socket.value,\r\n            showAlert: this.showAlert.bind(this),\r\n            checkPermission: this.checkPermission.checkPermission,\r\n            streamSuccessVideo: this.streamSuccessVideo.streamSuccessVideo,\r\n            hasCameraPermission: this.hasCameraPermission.value,\r\n            requestPermissionCamera: this.requestPermissionCamera.bind(this),\r\n            checkMediaPermission: 'web' !== 'web',\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      disabled: this.videoSwitching.value,\r\n      show: true,\r\n    },\r\n    {\r\n      //inverted active for inactive state\r\n      icon: faDesktop,\r\n      alternateIconComponent: this.screenShareWidget,\r\n      active: true,\r\n      onPress: () =>\r\n        this.clickScreenShare.clickScreenShare({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      disabled: false,\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faPhone,\r\n      active: this.endCallActive.value,\r\n      onPress: () =>\r\n        this.launchConfirmExit.launchConfirmExit({\r\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\r\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      disabled: false,\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faUsers,\r\n      active: this.participantsActive.value,\r\n      onPress: () =>\r\n        this.launchParticipants.launchParticipants({\r\n          updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\r\n          isParticipantsModalVisible: this.isParticipantsModalVisible.value,\r\n        }),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      disabled: false,\r\n      show: true,\r\n    },\r\n    {\r\n      customComponent: this.menuWidget,\r\n      customName: 'Menu',\r\n      onPress: () =>\r\n        this.launchMenuModal.launchMenuModal({\r\n          updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\r\n          isMenuModalVisible: this.isMenuModalVisible.value,\r\n        }),\r\n      show: true,\r\n    },\r\n    {\r\n      customComponent: this.messageWidget,\r\n      customName: 'Messages',\r\n      onPress: () =>\r\n        this.launchMessages.launchMessages({\r\n          updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\r\n          isMessagesModalVisible: this.isMessagesModalVisible.value,\r\n        }),\r\n      show: true,\r\n    },\r\n  ];\r\n\r\n  async connect_Socket(\r\n    apiUserName: string,\r\n    token: string,\r\n    skipSockets: boolean = false\r\n  ): Promise<Socket | null> {\r\n\r\n    const socketDefault = this.socket.value;\r\n    const socketAlt =\r\n      this.connectMediaSFU && this.localSocket!.value && this.localSocket!.value.id\r\n        ? this.localSocket!.value\r\n        : socketDefault;\r\n\r\n    if (this.socket.value && this.socket.value.id) {\r\n      if (!skipSockets) {\r\n        // Event listeners on socketDefault\r\n        socketDefault.on('disconnect', async () => {\r\n          await this.disconnect.disconnect({\r\n            showAlert: this.showAlert.bind(this),\r\n            redirectURL: this.redirectURL.value,\r\n            onWeb: true,\r\n            updateValidated: this.updateValidated.bind(this),\r\n          });\r\n          if (this.videoAlreadyOn.value) {\r\n            await this.clickVideo.clickVideo({\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n          if (this.audioAlreadyOn.value) {\r\n            await this.clickAudio.clickAudio({\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n          await this.closeAndReset();\r\n        });\r\n\r\n        socketDefault.on('allMembers', async (membersData: AllMembersData) => {\r\n          if (membersData) {\r\n            await this.allMembers.allMembers({\r\n              apiUserName: apiUserName,\r\n              apiKey: '', //not recommended - use apiToken instead. Use for testing/development only\r\n              apiToken: token,\r\n              members: membersData.members,\r\n              requestss: membersData.requests ? membersData.requests : this.requestList.value,\r\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\r\n              coHostRes: membersData.coHostResponsibilities\r\n                ? membersData.coHostResponsibilities\r\n                : this.coHostResponsibility.value,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              consume_sockets: this.consume_sockets.value,\r\n            });\r\n          }\r\n        });\r\n\r\n        socketDefault.on('allMembersRest', async (membersData: AllMembersRestData) => {\r\n          if (membersData) {\r\n            await this.allMembersRest.allMembersRest({\r\n              apiUserName: apiUserName,\r\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\r\n              members: membersData.members,\r\n              apiToken: token,\r\n              settings: membersData.settings,\r\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\r\n              coHostRes: membersData.coHostResponsibilities\r\n                ? membersData.coHostResponsibilities\r\n                : this.coHostResponsibility.value,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              consume_sockets: this.consume_sockets.value,\r\n            });\r\n          }\r\n        });\r\n\r\n        socketDefault.on('userWaiting', async ({ name }: { name: string }) => {\r\n          await this.userWaiting.userWaiting({\r\n            name,\r\n            showAlert: this.showAlert.bind(this),\r\n            totalReqWait: this.totalReqWait.value,\r\n            updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on('personJoined', async ({ name }: { name: string }) => {\r\n          this.personJoined.personJoined({\r\n            name,\r\n            showAlert: this.showAlert.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'allWaitingRoomMembers',\r\n          async (waiting_data: AllWaitingRoomMembersData) => {\r\n            await this.allWaitingRoomMembers.allWaitingRoomMembers({\r\n              waitingParticipants: waiting_data.waitingParticipants\r\n                ? waiting_data.waitingParticipants\r\n                : waiting_data.waitingParticipantss\r\n                  ? waiting_data.waitingParticipantss\r\n                  : this.waitingRoomList.value,\r\n              updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n              updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('ban', async ({ name }: { name: string }) => {\r\n          await this.banParticipant.banParticipant({\r\n            name,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        });\r\n\r\n        socketDefault.on('updatedCoHost', async (cohost_data: UpdatedCoHostData) => {\r\n          await this.updatedCoHost.updatedCoHost({\r\n            coHost: cohost_data.coHost ? cohost_data.coHost : this.coHost.value,\r\n            coHostResponsibility: cohost_data.coHostResponsibilities\r\n              ? cohost_data.coHostResponsibilities\r\n              : this.coHostResponsibility.value,\r\n            youAreCoHost: this.youAreCoHost.value,\r\n            updateCoHost: this.updateCoHost.bind(this),\r\n            updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\r\n            updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\r\n            showAlert: this.showAlert.bind(this),\r\n            eventType: this.eventType.value,\r\n            islevel: this.islevel.value,\r\n            member: this.member.value,\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'participantRequested',\r\n          async ({ userRequest }: { userRequest: Request }) => {\r\n            await this.participantRequested.participantRequested({\r\n              userRequest,\r\n              requestList: this.requestList.value,\r\n              waitingRoomList: this.waitingRoomList.value,\r\n              updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n              updateRequestList: this.updateRequestList.bind(this),\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('screenProducerId', async ({ producerId }: { producerId: string }) => {\r\n          this.screenProducerId.screenProducerId({\r\n            producerId,\r\n            screenId: this.screenId.value,\r\n            membersReceived: this.membersReceived.value,\r\n            shareScreenStarted: this.shareScreenStarted.value,\r\n            deferScreenReceived: this.deferScreenReceived.value,\r\n            participants: this.participants.value,\r\n            updateScreenId: this.updateScreenId.bind(this),\r\n            updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\r\n            updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on('updateMediaSettings', async ({ settings }: { settings: Settings }) => {\r\n          this.updateMediaSettings.updateMediaSettings({\r\n            settings,\r\n            updateAudioSetting: this.updateAudioSetting.bind(this),\r\n            updateVideoSetting: this.updateVideoSetting.bind(this),\r\n            updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\r\n            updateChatSetting: this.updateChatSetting.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'producer-media-paused',\r\n          async ({\r\n            producerId,\r\n            kind,\r\n            name,\r\n          }: {\r\n            producerId: string;\r\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\r\n            name: string;\r\n          }) => {\r\n            await this.producerMediaPaused.producerMediaPaused({\r\n              producerId,\r\n              kind,\r\n              name,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'producer-media-resumed',\r\n          async ({ kind, name }: { kind: 'audio'; name: string }) => {\r\n            await this.producerMediaResumed.producerMediaResumed({\r\n              kind,\r\n              name,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'producer-media-closed',\r\n          async ({\r\n            producerId,\r\n            kind,\r\n          }: {\r\n            producerId: string;\r\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\r\n          }) => {\r\n            if (producerId && kind) {\r\n              await this.producerMediaClosed.producerMediaClosed({\r\n                producerId,\r\n                kind,\r\n                parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              });\r\n            }\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'controlMediaHost',\r\n          async ({ type }: { type: 'video' | 'audio' | 'screenshare' | 'chat' | 'all' }) => {\r\n            await this.controlMediaHost.controlMediaHost({\r\n              type,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('meetingEnded', async () => {\r\n          await this.meetingEnded.meetingEnded({\r\n            showAlert: this.showAlert.bind(this),\r\n            redirectURL: this.redirectURL.value,\r\n            onWeb: true,\r\n            eventType: this.eventType.value,\r\n            updateValidated: this.updateValidated.bind(this),\r\n          });\r\n\r\n          if (this.videoAlreadyOn.value) {\r\n            await this.clickVideo.clickVideo({\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          }\r\n          if (this.audioAlreadyOn.value) {\r\n            await this.clickAudio.clickAudio({\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          }\r\n\r\n          await this.closeAndReset();\r\n        });\r\n\r\n        socketDefault.on('disconnectUserSelf', async () => {\r\n          await this.disconnectUserSelf.disconnectUserSelf({\r\n            socket: socketDefault,\r\n            member: this.member.value,\r\n            roomName: this.roomName.value,\r\n          });\r\n        });\r\n\r\n        socketDefault.on('receiveMessage', async ({ message }: { message: Message }) => {\r\n          await this.receiveMessage.receiveMessage({\r\n            message,\r\n            messages: this.messages.value,\r\n            participantsAll: this.participantsAll.value,\r\n            member: this.member.value,\r\n            eventType: this.eventType.value,\r\n            islevel: this.islevel.value,\r\n            coHost: this.coHost.value,\r\n            updateMessages: this.updateMessages.bind(this),\r\n            updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'meetingTimeRemaining',\r\n          async ({ timeRemaining }: { timeRemaining: number }) => {\r\n            await this.meetingTimeRemaining.meetingTimeRemaining({\r\n              timeRemaining,\r\n              showAlert: this.showAlert.bind(this),\r\n              eventType: this.eventType.value,\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('meetingStillThere', async () => {\r\n          this.meetingStillThere.meetingStillThere({\r\n            updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'updateConsumingDomains',\r\n          async ({ domains, alt_domains }: UpdateConsumingDomainsData) => {\r\n            await this.updateConsumingDomains.updateConsumingDomains({\r\n              domains,\r\n              alt_domains,\r\n              apiUserName,\r\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\r\n              apiToken: token,\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'hostRequestResponse',\r\n          ({ requestResponse }: HostRequestResponseData) => {\r\n            this.hostRequestResponse.hostRequestResponse({\r\n              requestResponse,\r\n              showAlert: this.showAlert.bind(this),\r\n              requestList: this.requestList.value,\r\n              updateRequestList: this.updateRequestList.bind(this),\r\n              updateMicAction: this.updateMicAction.bind(this),\r\n              updateVideoAction: this.updateVideoAction.bind(this),\r\n              updateScreenAction: this.updateScreenAction.bind(this),\r\n              updateChatAction: this.updateChatAction.bind(this),\r\n              updateAudioRequestState: this.updateAudioRequestState.bind(this),\r\n              updateVideoRequestState: this.updateVideoRequestState.bind(this),\r\n              updateScreenRequestState: this.updateScreenRequestState.bind(this),\r\n              updateChatRequestState: this.updateChatRequestState.bind(this),\r\n              updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\r\n              updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\r\n              updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\r\n              updateChatRequestTime: this.updateChatRequestTime.bind(this),\r\n              updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('pollUpdated', async (data: PollUpdatedData) => {\r\n          try {\r\n            await this.pollUpdated.pollUpdated({\r\n              data,\r\n              polls: this.polls.value,\r\n              poll: this.poll.value ? this.poll.value : ({} as Poll),\r\n              member: this.member.value,\r\n              islevel: this.islevel.value,\r\n              showAlert: this.showAlert.bind(this),\r\n              updatePolls: this.updatePolls.bind(this),\r\n              updatePoll: this.updatePoll.bind(this),\r\n              updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\r\n            });\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        });\r\n\r\n        socketDefault.on('breakoutRoomUpdated', async (data: BreakoutRoomUpdatedData) => {\r\n          try {\r\n            await this.breakoutRoomUpdated.breakoutRoomUpdated({\r\n              data,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        });\r\n\r\n      }\r\n\r\n      if (skipSockets) {\r\n        // Remove specific event listeners from socketDefault and socketAlt\r\n        const events = [\r\n          'roomRecordParams',\r\n          'startRecords',\r\n          'reInitiateRecording',\r\n          'RecordingNotice',\r\n          'timeLeftRecording',\r\n          'stoppedRecording',\r\n        ];\r\n        events.forEach((event) => {\r\n          socketDefault.off(event);\r\n          socketAlt.off(event);\r\n        });\r\n      }\r\n\r\n      socketAlt.on(\r\n        'roomRecordParams',\r\n        async ({ recordParams }: { recordParams: RecordParams }) => {\r\n          this.roomRecordParams.roomRecordParams({\r\n            recordParams,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        },\r\n      );\r\n\r\n      socketAlt.on('startRecords', async () => {\r\n        await this.startRecords.startRecords({\r\n          roomName: this.roomName.value,\r\n          member: this.member.value,\r\n          socket: socketAlt,\r\n        });\r\n      });\r\n\r\n      socketAlt.on('reInitiateRecording', async () => {\r\n        await this.reInitiateRecording.reInitiateRecording({\r\n          roomName: this.roomName.value,\r\n          member: this.member.value,\r\n          socket: socketAlt,\r\n          adminRestrictSetting: this.adminRestrictSetting.value,\r\n        });\r\n      });\r\n\r\n      socketAlt.on(\r\n        'RecordingNotice',\r\n        async ({ state, userRecordingParam, pauseCount, timeDone }: RecordingNoticeData) => {\r\n          await this.recordingNotice.RecordingNotice({\r\n            state,\r\n            userRecordingParam,\r\n            pauseCount,\r\n            timeDone,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        },\r\n      );\r\n\r\n      socketAlt.on('timeLeftRecording', async ({ timeLeft }: { timeLeft: number }) => {\r\n        this.timeLeftRecording.timeLeftRecording({\r\n          timeLeft,\r\n          showAlert: this.showAlert.bind(this),\r\n        });\r\n      });\r\n\r\n      socketAlt.on(\r\n        'stoppedRecording',\r\n        async ({ state, reason }: { state: string; reason: string }) => {\r\n          await this.stoppedRecording.stoppedRecording({\r\n            state,\r\n            reason,\r\n            showAlert: this.showAlert.bind(this),\r\n          });\r\n        },\r\n      );\r\n\r\n      if (this.localLink !== \"\" && socketDefault && !skipSockets) {\r\n        await this.join_Room({\r\n          socket: socketDefault,\r\n          roomName: this.roomName.value,\r\n          islevel: this.islevel.value,\r\n          member: this.member.value,\r\n          sec: token,\r\n          apiUserName: apiUserName,\r\n          isLocal: true,\r\n        });\r\n      }\r\n\r\n      // Check if localSocket has changed\r\n      const localChanged =\r\n        this.localSocket!.value && this.localSocket!.value.id && this.localSocket!.value.id !== socketAlt.id;\r\n\r\n\r\n      if (!skipSockets && localChanged) {\r\n        // Re-call connect_Socket with skipSockets = true\r\n        await this.connect_Socket(apiUserName, token, true);\r\n        await sleep({ ms: 1000 })\r\n        this.updateIsLoadingModalVisible(false);\r\n        return socketDefault;\r\n      } else {\r\n        if (this.link.value !== '' && this.link.value.includes('mediasfu.com')) {\r\n          // Token might be different for local room\r\n          const token = this.apiToken.value;\r\n          await this.join_Room({\r\n            socket:\r\n              this.connectMediaSFU && socketAlt && socketAlt.id ? socketAlt : socketDefault,\r\n            roomName: this.roomName.value,\r\n            islevel: this.islevel.value,\r\n            member: this.member.value,\r\n            sec: token,\r\n            apiUserName: apiUserName,\r\n          });\r\n        }\r\n\r\n        await this.receiveRoomMessages.receiveRoomMessages({\r\n          socket: socketDefault,\r\n          roomName: this.roomName.value,\r\n          updateMessages: this.updateMessages.bind(this),\r\n        });\r\n\r\n        if (!skipSockets) {\r\n          await this.prepopulateUserMedia.prepopulateUserMedia({\r\n            name: this.hostLabel.value,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        }\r\n\r\n        return socketDefault;\r\n      }\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  HostListener,\r\n  Injector,\r\n  ChangeDetectorRef,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  faPlayCircle,\r\n  faPauseCircle,\r\n  faStopCircle,\r\n  faDotCircle,\r\n  faRecordVinyl,\r\n  faCog,\r\n  faUsers,\r\n  faClock,\r\n  faUserPlus,\r\n  faTools,\r\n  faDesktop,\r\n  faPoll,\r\n  faUserFriends,\r\n  faChalkboardTeacher,\r\n  faMicrophone,\r\n  faMicrophoneSlash,\r\n  faVideo,\r\n  faVideoSlash,\r\n  faPhone,\r\n  faBars,\r\n  faComments,\r\n  faChartBar,\r\n} from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport { initialValuesState } from '../../methods/utils/initial-values.util';\r\n\r\nimport { MainAspectComponent } from '../display-components/main-aspect-component/main-aspect-component.component';\r\nimport { LoadingModal } from '../display-components/loading-modal/loading-modal.component';\r\nimport { ControlButtonsComponent } from '../display-components/control-buttons-component/control-buttons-component.component';\r\nimport { ControlButtonsAltComponent } from '../display-components/control-buttons-alt-component/control-buttons-alt-component.component';\r\nimport { OtherGridComponent } from '../display-components/other-grid-component/other-grid-component.component';\r\nimport { MainScreenComponent } from '../display-components/main-screen-component/main-screen-component.component';\r\nimport { MainGridComponent } from '../display-components/main-grid-component/main-grid-component.component';\r\nimport { SubAspectComponent } from '../display-components/sub-aspect-component/sub-aspect-component.component';\r\nimport { MainContainerComponent } from '../display-components/main-container-component/main-container-component.component';\r\nimport { AlertComponent } from '../display-components/alert-component/alert.component.component';\r\nimport { MenuModal } from '../menu-components/menu-modal/menu-modal.component';\r\nimport { RecordingModal } from '../recording-components/recording-modal/recording-modal.component';\r\nimport { RequestsModal } from '../requests-components/requests-modal/requests-modal.component';\r\nimport { WaitingRoomModal } from '../waiting-components/waiting-room-modal.component';\r\nimport { DisplaySettingsModal } from '../display-settings-components/display-settings-modal.component';\r\nimport { EventSettingsModal } from '../event-settings-components/event-settings-modal/event-settings-modal.component';\r\nimport { CoHostModal } from '../co-host-components/co-host-modal/co-host-modal.component';\r\nimport { ParticipantsModal } from '../participants-components/participants-modal/participants-modal.component';\r\nimport { MessagesModal } from '../message-components/messages-modal/messages-modal.component';\r\nimport { MediaSettingsModal } from '../media-settings-components/media-settings-modal/media-settings-modal.component';\r\nimport { ConfirmExitModal } from '../exit-components/confirm-exit-modal/confirm-exit-modal.component';\r\nimport { ConfirmHereModal } from '../misc-components/confirm-here-modal/confirm-here-modal.component';\r\nimport { ShareEventModal } from '../misc-components/share-event-modal/share-event-modal.component';\r\nimport {\r\n  WelcomePage,\r\n  WelcomePageOptions,\r\n} from '../misc-components/welcome-page/welcome-page.component';\r\n\r\nimport { PollModal } from '../polls-components/poll-modal/poll-modal.component';\r\nimport { BackgroundModal } from '../background-components/background-modal/background-modal.component';\r\nimport { BreakoutRoomsModal } from '../breakout-components/breakout-rooms-modal.component';\r\nimport { ConfigureWhiteboardModal } from '../whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component';\r\nimport { Whiteboard } from '../whiteboard-components/whiteboard/whiteboard.component';\r\nimport { Screenboard } from '../screenboard-components/screenboard/screenboard.component';\r\nimport { ScreenboardModal } from '../screenboard-components/screenboard-modal/screenboard-modal.component';\r\n// pagination and display of media (samples)\r\nimport { Pagination } from '../display-components/pagination/pagination.component';\r\nimport { FlexibleGrid } from '../display-components/flexible-grid/flexible-grid.component';\r\nimport { FlexibleVideo } from '../display-components/flexible-video/flexible-video.component';\r\nimport { AudioGrid } from '../display-components/audio-grid/audio-grid.component';\r\n\r\nimport { MenuWidget } from '../display-components/control-widgets/menu-widget.component';\r\nimport { MessageWidget } from '../display-components/control-widgets/message-widget.component';\r\nimport { MenuRecordWidget } from '../display-components/control-widgets/menu-record-widget.component';\r\nimport { RecordTimerWidget } from '../display-components/control-widgets/record-timer-widget.component';\r\nimport { MenuParticipantsWidget } from '../display-components/control-widgets/menu-participants-widget.component';\r\nimport { ScreenShareWidget } from '../display-components/control-widgets/screenshare-widget.component';\r\n\r\nimport {\r\n  ResponseJoinRoom,\r\n  ResponseJoinLocalRoom,\r\n  CoHostResponsibility,\r\n  EventType,\r\n  Participant,\r\n  ConsumeSocket,\r\n  MeetingRoomParams,\r\n  VidCons,\r\n  HParamsType,\r\n  VParamsType,\r\n  ScreenParamsType,\r\n  AParamsType,\r\n  UserRecordingParams,\r\n  Stream,\r\n  AudioDecibels,\r\n  ScreenState,\r\n  GridSizes,\r\n  CustomMediaComponent,\r\n  Message,\r\n  WaitingRoomParticipant,\r\n  ComponentSizes,\r\n  Transport as TransportType,\r\n  Shape,\r\n  Poll,\r\n  BreakoutParticipant,\r\n  WhiteboardUser,\r\n  Request,\r\n  AllMembersData,\r\n  AllMembersRestData,\r\n  BreakoutRoomUpdatedData,\r\n  AllWaitingRoomMembersData,\r\n  MainButtonAlt,\r\n  MainCustomButton,\r\n  RecordParams,\r\n  SeedData,\r\n  UpdatedCoHostData,\r\n  Settings,\r\n  UpdateConsumingDomainsData,\r\n  RecordingNoticeData,\r\n  HostRequestResponseData,\r\n  PollUpdatedData,\r\n  PreJoinPageOptions,\r\n  CreateMediaSFURoomOptions,\r\n  JoinMediaSFURoomOptions,\r\n  JoinRoomOnMediaSFUType,\r\n  CreateRoomOnMediaSFUType,\r\n} from '../../@types/types';\r\nimport { createResponseJoinRoom } from '../../methods/utils/create-response-join-room.util';\r\n\r\n//import methods for control (samples)\r\n// Import methods for control (samples)\r\nimport { LaunchMenuModal } from '../../methods/menu-methods/launch-menu-modal.service';\r\nimport { LaunchRecording } from '../../methods/recording-methods/launch-recording.service';\r\nimport { StartRecording } from '../../methods/recording-methods/start-recording.service';\r\nimport { ConfirmRecording } from '../../methods/recording-methods/confirm-recording.service';\r\nimport { LaunchWaiting } from '../../methods/waiting-methods/launch-waiting.service';\r\nimport { launchCoHost } from '../../methods/co-host-methods/launch-co-host.service';\r\nimport { LaunchMediaSettings } from '../../methods/media-settings-methods/launch-media-settings.service';\r\nimport { LaunchDisplaySettings } from '../../methods/display-settings-methods/launch-display-settings.service';\r\nimport { LaunchSettings } from '../../methods/settings-methods/launch-settings.service';\r\nimport { LaunchRequests } from '../../methods/requests-methods/launch-requests.service';\r\nimport { LaunchParticipants } from '../../methods/participants-methods/launch-participants.service';\r\nimport { LaunchMessages } from '../../methods/message-methods/launch-messages.service';\r\nimport { LaunchConfirmExit } from '../../methods/exit-methods/launch-confirm-exit.service';\r\n\r\nimport { LaunchPoll } from '../../methods/polls-methods/launch-poll.service';\r\nimport { LaunchBreakoutRooms } from '../../methods/breakout-room-methods/launch-breakout-rooms.service';\r\nimport { LaunchConfigureWhiteboard } from '../../methods/whiteboard-methods/launch-configure-whiteboard.service';\r\n\r\n// mediasfu functions -- examples\r\nimport { SocketManager } from '../../sockets/socket-manager.service';\r\nimport { JoinRoomClient } from '../../producer-client/producer-client-emits/join-room-client.service';\r\nimport { JoinLocalRoom } from '../../producers/producer-emits/join-local-room.service';\r\nimport { UpdateRoomParametersClient } from '../../producer-client/producer-client-emits/update-room-parameters-client.service';\r\nimport { CreateDeviceClient } from '../../producer-client/producer-client-emits/create-device-client.service';\r\n\r\nimport { ClickVideo } from '../../methods/stream-methods/click-video.service';\r\nimport { ClickAudio } from '../../methods/stream-methods/click-audio.service';\r\nimport { ClickScreenShare } from '../../methods/stream-methods/click-screen-share.service';\r\nimport { StreamSuccessVideo } from '../../consumers/stream-success-video.service';\r\nimport { StreamSuccessAudio } from '../../consumers/stream-success-audio.service';\r\nimport { StreamSuccessScreen } from '../../consumers/stream-success-screen.service';\r\nimport { StreamSuccessAudioSwitch } from '../../consumers/stream-success-audio-switch.service';\r\nimport { CheckPermission } from '../../consumers/check-permission.service';\r\n\r\n// mediasfu functions\r\nimport { UpdateMiniCardsGrid } from '../../consumers/update-mini-cards-grid.service';\r\nimport { MixStreams } from '../../consumers/mix-streams.service';\r\nimport { DispStreams } from '../../consumers/disp-streams.service';\r\nimport { StopShareScreen } from '../../consumers/stop-share-screen.service';\r\nimport { CheckScreenShare } from '../../consumers/check-screen-share.service';\r\nimport { StartShareScreen } from '../../consumers/start-share-screen.service';\r\nimport { RequestScreenShare } from '../../consumers/request-screen-share.service';\r\nimport { ReorderStreams } from '../../consumers/reorder-streams.service';\r\nimport { PrepopulateUserMedia } from '../../consumers/prepopulate-user-media.service';\r\nimport { GetVideos } from '../../consumers/get-videos.service';\r\nimport { RePort } from '../../consumers/re-port.service';\r\nimport { Trigger } from '../../consumers/trigger.service';\r\nimport { ConsumerResume } from '../../consumers/consumer-resume.service';\r\nimport { ConnectSendTransportAudio } from '../../consumers/connect-send-transport-audio.service';\r\nimport { ConnectSendTransportVideo } from '../../consumers/connect-send-transport-video.service';\r\nimport { ConnectSendTransportScreen } from '../../consumers/connect-send-transport-screen.service';\r\nimport { ProcessConsumerTransports } from '../../consumers/process-consumer-transports.service';\r\nimport { ResumePauseStreams } from '../../consumers/resume-pause-streams.service';\r\nimport { Readjust } from '../../consumers/readjust.service';\r\nimport { CheckGrid } from '../../consumers/check-grid.service';\r\nimport { GetEstimate } from '../../consumers/get-estimate.service';\r\nimport { CalculateRowsAndColumns } from '../../consumers/calculate-rows-and-columns.service';\r\nimport { AddVideosGrid } from '../../consumers/add-videos-grid.service';\r\nimport { OnScreenChanges } from '../../consumers/on-screen-changes.service';\r\nimport { sleep } from '../../methods/utils/sleep.util';\r\nimport { ChangeVids } from '../../consumers/change-vids.service';\r\nimport { CompareActiveNames } from '../../consumers/compare-active-names.service';\r\nimport { CompareScreenStates } from '../../consumers/compare-screen-states.service';\r\nimport { CreateSendTransport } from '../../consumers/create-send-transport.service';\r\nimport { ResumeSendTransportAudio } from '../../consumers/resume-send-transport-audio.service';\r\nimport { ReceiveAllPipedTransports } from '../../consumers/receive-all-piped-transports.service';\r\nimport { DisconnectSendTransportVideo } from '../../consumers/disconnect-send-transport-video.service';\r\nimport { DisconnectSendTransportAudio } from '../../consumers/disconnect-send-transport-audio.service';\r\nimport { DisconnectSendTransportScreen } from '../../consumers/disconnect-send-transport-screen.service';\r\nimport { ConnectSendTransport } from '../../consumers/connect-send-transport.service';\r\nimport { GetPipedProducersAlt } from '../../consumers/get-piped-producers-alt.service';\r\nimport { SignalNewConsumerTransport } from '../../consumers/signal-new-consumer-transport.service';\r\nimport { ConnectRecvTransport } from '../../consumers/connect-recv-transport.service';\r\nimport { ReUpdateInter } from '../../consumers/re-update-inter.service';\r\nimport { UpdateParticipantAudioDecibels } from '../../consumers/update-participant-audio-decibels.service';\r\nimport { CloseAndResize } from '../../consumers/close-and-resize.service';\r\nimport { AutoAdjust } from '../../consumers/auto-adjust.service';\r\nimport { SwitchUserVideoAlt } from '../../consumers/switch-user-video-alt.service';\r\nimport { SwitchUserVideo } from '../../consumers/switch-user-video.service';\r\nimport { SwitchUserAudio } from '../../consumers/switch-user-audio.service';\r\nimport { ReceiveRoomMessages } from '../../consumers/receive-room-messages.service';\r\nimport { FormatNumber } from '../../methods/utils/format-number.service';\r\nimport { ConnectIps } from '../../consumers/connect-ips.service';\r\nimport { ConnectLocalIps } from '../../consumers/connect-local-ips.service';\r\n\r\nimport { PollUpdated } from '../../methods/polls-methods/poll-updated.service';\r\nimport { HandleCreatePoll } from '../../methods/polls-methods/handle-create-poll.service';\r\nimport { HandleVotePoll } from '../../methods/polls-methods/handle-vote-poll.service';\r\nimport { HandleEndPoll } from '../../methods/polls-methods/handle-end-poll.service';\r\n\r\nimport { BreakoutRoomUpdated } from '../../methods/breakout-room-methods/breakout-room-updated.service';\r\n\r\nimport { StartMeetingProgressTimer } from '../../methods/utils/meeting-timer/start-meeting-progress-timer.service';\r\nimport { UpdateRecording } from '../../methods/recording-methods/update-recording.service';\r\nimport { StopRecording } from '../../methods/recording-methods/stop-recording.service';\r\n\r\nimport { UserWaiting } from '../../producers/socket-receive-methods/user-waiting.service';\r\nimport { PersonJoined } from '../../producers/socket-receive-methods/person-joined.service';\r\nimport { AllWaitingRoomMembers } from '../../producers/socket-receive-methods/all-waiting-room-members.service';\r\nimport { RoomRecordParams } from '../../producers/socket-receive-methods/room-record-params.service';\r\nimport { BanParticipant } from '../../producers/socket-receive-methods/ban-participant.service';\r\nimport { UpdatedCoHost } from '../../producers/socket-receive-methods/updated-co-host.service';\r\nimport { ParticipantRequested } from '../../producers/socket-receive-methods/participant-requested.service';\r\nimport { ScreenProducerId } from '../../producers/socket-receive-methods/screen-producer-id.service';\r\nimport { UpdateMediaSettings } from '../../producers/socket-receive-methods/update-media-settings.service';\r\nimport { ProducerMediaPaused } from '../../producers/socket-receive-methods/producer-media-paused.service';\r\nimport { ProducerMediaResumed } from '../../producers/socket-receive-methods/producer-media-resumed.service';\r\nimport { ProducerMediaClosed } from '../../producers/socket-receive-methods/producer-media-closed.service';\r\nimport { ControlMediaHost } from '../../producers/socket-receive-methods/control-media-host.service';\r\nimport { MeetingEnded } from '../../producers/socket-receive-methods/meeting-ended.service';\r\nimport { DisconnectUserSelf } from '../../producers/socket-receive-methods/disconnect-user-self.service';\r\nimport { ReceiveMessage } from '../../producers/socket-receive-methods/receive-message.service';\r\nimport { MeetingTimeRemaining } from '../../producers/socket-receive-methods/meeting-time-remaining.service';\r\nimport { MeetingStillThere } from '../../producers/socket-receive-methods/meeting-still-there.service';\r\nimport { StartRecords } from '../../producers/socket-receive-methods/start-records.service';\r\nimport { ReInitiateRecording } from '../../producers/socket-receive-methods/re-initiate-recording.service';\r\nimport { GetDomains } from '../../producers/socket-receive-methods/get-domains.service';\r\nimport { UpdateConsumingDomains } from '../../producers/socket-receive-methods/update-consuming-domains.service';\r\nimport { RecordingNotice } from '../../producers/socket-receive-methods/recording-notice.service';\r\nimport { TimeLeftRecording } from '../../producers/socket-receive-methods/time-left-recording.service';\r\nimport { StoppedRecording } from '../../producers/socket-receive-methods/stopped-recording.service';\r\nimport { HostRequestResponse } from '../../producers/socket-receive-methods/host-request-response.service';\r\nimport { AllMembers } from '../../producers/socket-receive-methods/all-members.service';\r\nimport { AllMembersRest } from '../../producers/socket-receive-methods/all-members-rest.service';\r\nimport { Disconnect } from '../../producers/socket-receive-methods/disconnect.service';\r\n\r\nimport { CaptureCanvasStream } from '../../methods/whiteboard-methods/capture-canvas-stream.service';\r\nimport { ResumePauseAudioStreams } from '../../consumers/resume-pause-audio-streams.service';\r\nimport { ProcessConsumerTransportsAudio } from '../../consumers/process-consumer-transports-audio.service';\r\n\r\nimport {\r\n  Device,\r\n  Producer,\r\n  ProducerOptions,\r\n  RtpCapabilities,\r\n  Transport,\r\n} from 'mediasoup-client/lib/types';\r\nimport { SelfieSegmentation } from '@mediapipe/selfie_segmentation';\r\n\r\nexport type MediasfuConferenceOptions = {\r\n  PrejoinPage?: (options: PreJoinPageOptions | WelcomePageOptions) => HTMLElement;\r\n  localLink?: string;\r\n  connectMediaSFU?: boolean;\r\n  credentials?: { apiUserName: string; apiKey: string };\r\n  useLocalUIMode?: boolean;\r\n  seedData?: SeedData;\r\n  useSeed?: boolean;\r\n  imgSrc?: string;\r\n  sourceParameters?: { [key: string]: any };\r\n  updateSourceParameters?: (data: { [key: string]: any }) => void;\r\n  returnUI?: boolean;\r\n  noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n  joinMediaSFURoom?: JoinRoomOnMediaSFUType;\r\n  createMediaSFURoom?: CreateRoomOnMediaSFUType;\r\n};\r\n\r\n/**\r\n * MediasfuConference component creates an interactive conference interface, supporting breakout rooms, chat, video and audio management, and custom controls.\r\n *\r\n * @component\r\n * @selector app-mediasfu-conference\r\n * @standalone true\r\n * @imports [RouterOutlet, CommonModule, BreakoutRoomsModal, BackgroundModal, CoHostModal, AlertComponent, AudioGrid, ControlButtonsAltComponent, ControlButtonsComponent, FlexibleGrid, FlexibleVideo, LoadingModal, Pagination, SubAspectComponent, DisplaySettingsModal, EventSettingsModal, ConfirmExitModal, MediaSettingsModal, MenuModal, MessagesModal, ConfirmHereModal, ShareEventModal, WelcomePage, ParticipantsModal, PollModal, RecordingModal, RequestsModal, MainAspectComponent, MainContainerComponent, MainGridComponent, MainScreenComponent, OtherGridComponent, Screenboard, ScreenboardModal, Whiteboard, ConfigureWhiteboardModal, WaitingRoomModal, MenuWidget, MessageWidget, MenuRecordWidget, RecordTimerWidget, MenuParticipantsWidget, ScreenShareWidget]\r\n *\r\n * @template\r\n * The template includes:\r\n * - Conditional rendering for PrejoinPage or WelcomePage component.\r\n * - A main content area with modular components for grid layouts, video streaming, and sub-aspect controls.\r\n * - Modals for participants, settings, recording, breakout rooms, and more, to enhance interactivity and customization in conference settings.\r\n *\r\n * @input {any} PrejoinPage - Component for the prejoin page, defaults to `WelcomePage`.\r\n * @input {MediasfuConferenceOptions} options - Configuration options for the component.\r\n * @input {boolean} connectMediaSFU - Flag to enable/disable connection to the MediaSFU server.\r\n * @input {string} localLink - Local link for the Community Edition server.\r\n * @input {{ apiUserName: string; apiKey: string }} credentials - API credentials for secure access.\r\n * @input {boolean} useLocalUIMode - Flag to toggle local UI settings.\r\n * @input {SeedData} seedData - Seed data for initializing the component with specific configurations.\r\n * @input {boolean} useSeed - Enable/disable use of seed data.\r\n * @input {string} imgSrc - URL for branding images or logos.\r\n * @input {object} sourceParameters - Additional parameters for the source.\r\n * @input {Function} updateSourceParameters - Function to update the source parameters.\r\n * @input {boolean} returnUI - Flag to return the UI elements.\r\n * @input {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} noUIPreJoinOptions - Options for the prejoin page without UI.\r\n * @input {JoinRoomOnMediaSFUType} joinMediaSFURoom - Function to join a room on MediaSFU.\r\n * @input {CreateRoomOnMediaSFUType} createMediaSFURoom - Function to create a room on MediaSFU.\r\n *\r\n * @property {string} title - The title of the component, defaults to \"MediaSFU-Conference\".\r\n *\r\n * @styles\r\n * Customizable styles for component layout, overflow, and specific modal appearances.\r\n *\r\n * @providers [CookieService] - Service for managing cookies within the component.\r\n *\r\n * @constructor\r\n * @class MediasfuConference\r\n * @implements OnInit, OnDestroy\r\n *\r\n * @method ngOnInit - Initializes configurations and input parameters.\r\n * @method ngOnDestroy - Handles cleanup of event listeners or intervals.\r\n *\r\n * @example\r\n * ```html\r\n * <app-mediasfu-conference\r\n *   [PrejoinPage]=\"CustomPrejoinComponent\"\r\n *   [localLink]=\"'https://localhost:3000'\"\r\n *   [connectMediaSFU]=\"true\"\r\n *   [credentials]=\"{ apiUserName: 'username', apiKey: 'apikey' }\"\r\n *   [useLocalUIMode]=\"true\"\r\n *   [seedData]=\"seedDataObject\"\r\n *   [useSeed]=\"true\"\r\n *   [imgSrc]=\"https://example.com/logo.png\">\r\n *   [sourceParameters]=\"{ source: 'camera', width: 640, height: 480 }\"\r\n *   [updateSourceParameters]=\"updateSourceParameters\"\r\n *   [returnUI]=\"true\"\r\n *   [noUIPreJoinOptions]=\"{ roomName: 'room1', userName: 'user1' }\"\r\n *   [joinMediaSFURoom]=\"joinMediaSFURoom\"\r\n *   [createMediaSFURoom]=\"createMediaSFURoom\">\r\n * </app-mediasfu-conference>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n  selector: 'app-mediasfu-conference',\r\n  imports: [\r\n    CommonModule,\r\n    BreakoutRoomsModal,\r\n    BackgroundModal,\r\n    CoHostModal,\r\n    AlertComponent,\r\n    AudioGrid,\r\n    ControlButtonsComponent,\r\n    FlexibleGrid,\r\n    FlexibleVideo,\r\n    LoadingModal,\r\n    Pagination,\r\n    SubAspectComponent,\r\n    DisplaySettingsModal,\r\n    EventSettingsModal,\r\n    ConfirmExitModal,\r\n    MediaSettingsModal,\r\n    MenuModal,\r\n    MessagesModal,\r\n    ConfirmHereModal,\r\n    ShareEventModal,\r\n    ParticipantsModal,\r\n    PollModal,\r\n    RecordingModal,\r\n    RequestsModal,\r\n    MainAspectComponent,\r\n    MainContainerComponent,\r\n    MainGridComponent,\r\n    MainScreenComponent,\r\n    OtherGridComponent,\r\n    ScreenboardModal,\r\n    Whiteboard,\r\n    ConfigureWhiteboardModal,\r\n    WaitingRoomModal,\r\n  ],\r\n  template: `\r\n    <div\r\n      class=\"MediaSFU\"\r\n      [ngStyle]=\"{\r\n        height: '100vh',\r\n        width: '100vw',\r\n        maxWidth: '100vw',\r\n        maxHeight: '100vh',\r\n        overflow: 'hidden'\r\n      }\"\r\n    >\r\n      <ng-container *ngIf=\"!validated.value; else mainContent\">\r\n        <ng-container\r\n          *ngComponentOutlet=\"\r\n            PrejoinPageComponent.component;\r\n            injector: PrejoinPageComponent.injector\r\n          \"\r\n        >\r\n        </ng-container>\r\n      </ng-container>\r\n\r\n      <ng-template #mainContent>\r\n        <app-main-container-component *ngIf=\"returnUI\">\r\n          <app-main-aspect-component\r\n            [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n            [defaultFraction]=\"1 - controlHeight.value\"\r\n            [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\r\n            [updateIsWideScreen]=\"updateIsWideScreen\"\r\n            [updateIsMediumScreen]=\"updateIsMediumScreen\"\r\n            [updateIsSmallScreen]=\"updateIsSmallScreen\"\r\n          >\r\n            <app-main-screen-component\r\n              [doStack]=\"true\"\r\n              [mainSize]=\"mainHeightWidth.value\"\r\n              [defaultFraction]=\"1 - controlHeight.value\"\r\n              [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\r\n              [updateComponentSizes]=\"updateComponentSizes\"\r\n            >\r\n              <app-main-grid-component\r\n                [height]=\"componentSizes.value.mainHeight\"\r\n                [width]=\"componentSizes.value.mainWidth\"\r\n                [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                [mainSize]=\"mainHeightWidth.value\"\r\n                [showAspect]=\"mainHeightWidth.value > 0\"\r\n                [timeBackgroundColor]=\"recordState.value\"\r\n                [meetingProgressTime]=\"meetingProgressTime.value\"\r\n              >\r\n                <app-flexible-video\r\n                  [customWidth]=\"componentSizes.value.mainWidth\"\r\n                  [customHeight]=\"componentSizes.value.mainHeight\"\r\n                  [rows]=\"1\"\r\n                  [columns]=\"1\"\r\n                  [componentsToRender]=\"mainGridStream.value\"\r\n                  [showAspect]=\"\r\n                    mainGridStream.value.length > 0 &&\r\n                    !(whiteboardStarted.value && !whiteboardEnded.value)\r\n                  \"\r\n                  [localStreamScreen]=\"localStreamScreen.value!\"\r\n                  [annotateScreenStream]=\"annotateScreenStream.value\"\r\n                  [Screenboard]=\"shared.value ? ScreenboardWidget : undefined\"\r\n                >\r\n                </app-flexible-video>\r\n                <app-whiteboard\r\n                  [customWidth]=\"componentSizes.value.mainWidth\"\r\n                  [customHeight]=\"componentSizes.value.mainHeight\"\r\n                  [parameters]=\"mediaSFUParameters\"\r\n                  [showAspect]=\"whiteboardStarted.value && !whiteboardEnded.value\"\r\n                ></app-whiteboard>\r\n              </app-main-grid-component>\r\n\r\n              <app-other-grid-component\r\n                [height]=\"componentSizes.value.otherHeight\"\r\n                [width]=\"componentSizes.value.otherWidth\"\r\n                [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                [showAspect]=\"mainHeightWidth.value !== 100\"\r\n                [timeBackgroundColor]=\"recordState.value\"\r\n                [showTimer]=\"mainHeightWidth.value === 0\"\r\n                [meetingProgressTime]=\"meetingProgressTime.value\"\r\n              >\r\n                <div\r\n                  *ngIf=\"doPaginate.value\"\r\n                  [ngStyle]=\"{\r\n                    width:\r\n                      paginationDirection.value == 'horizontal'\r\n                        ? componentSizes.value.otherWidth\r\n                        : paginationHeightWidth.value,\r\n                    height:\r\n                      paginationDirection.value == 'horizontal'\r\n                        ? paginationHeightWidth.value\r\n                        : componentSizes.value.otherHeight,\r\n                    display: doPaginate.value ? 'flex' : 'none',\r\n                    'flex-direction': paginationDirection.value == 'horizontal' ? 'row' : 'column',\r\n                    'justify-content': 'center',\r\n                    'align-items': 'center',\r\n                    padding: '0',\r\n                    margin: '0'\r\n                  }\"\r\n                >\r\n                  <app-pagination\r\n                    [totalPages]=\"numberPages.value\"\r\n                    [currentUserPage]=\"currentUserPage.value\"\r\n                    [showAspect]=\"doPaginate.value\"\r\n                    [paginationHeight]=\"paginationHeightWidth.value\"\r\n                    [direction]=\"paginationDirection.value\"\r\n                    [parameters]=\"mediaSFUParameters\"\r\n                  ></app-pagination>\r\n                </div>\r\n\r\n                <app-audio-grid [componentsToRender]=\"audioOnlyStreams.value\"></app-audio-grid>\r\n\r\n                <app-flexible-grid\r\n                  [customWidth]=\"gridSizes.value.gridWidth!\"\r\n                  [customHeight]=\"gridSizes.value.gridHeight!\"\r\n                  [rows]=\"gridRows.value\"\r\n                  [columns]=\"gridCols.value\"\r\n                  [componentsToRender]=\"otherGridStreams.value[0]\"\r\n                  [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                ></app-flexible-grid>\r\n                <app-flexible-grid\r\n                  [customWidth]=\"gridSizes.value.altGridWidth!\"\r\n                  [customHeight]=\"gridSizes.value.altGridHeight!\"\r\n                  [rows]=\"altGridRows.value\"\r\n                  [columns]=\"altGridCols.value\"\r\n                  [componentsToRender]=\"otherGridStreams.value[1]\"\r\n                  [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                ></app-flexible-grid>\r\n              </app-other-grid-component>\r\n            </app-main-screen-component>\r\n          </app-main-aspect-component>\r\n\r\n          <app-sub-aspect-component\r\n            [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n            [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\r\n            [defaultFractionSub]=\"controlHeight.value\"\r\n          >\r\n            <app-control-buttons-component\r\n              [buttons]=\"controlButtons\"\r\n              [buttonColor]=\"'black'\"\r\n              [buttonBackgroundColor]=\"{\r\n                default: 'transparent',\r\n                pressed: 'transparent'\r\n              }\"\r\n              [alignment]=\"'space-between'\"\r\n              [vertical]=\"false\"\r\n              [buttonsContainerStyle]=\"{\r\n                marginTop: '0',\r\n                marginBottom: '0',\r\n                backgroundColor: 'transparent'\r\n              }\"\r\n            ></app-control-buttons-component>\r\n          </app-sub-aspect-component>\r\n        </app-main-container-component>\r\n      </ng-template>\r\n\r\n      <ng-container *ngIf=\"returnUI\">\r\n      <app-menu-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isVisible]=\"isMenuModalVisible.value\"\r\n        [onClose]=\"onCloseMenuModal\"\r\n        [customButtons]=\"customMenuButtons\"\r\n        [roomName]=\"roomName.value\"\r\n        [adminPasscode]=\"adminPasscode.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [localLink]=\"localLink\"\r\n      ></app-menu-modal>\r\n\r\n      <app-event-settings-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isEventSettingsModalVisible]=\"isSettingsModalVisible.value\"\r\n        [onEventSettingsClose]=\"onEventSettingsClose\"\r\n        [audioSetting]=\"audioSetting.value\"\r\n        [videoSetting]=\"videoSetting.value\"\r\n        [screenshareSetting]=\"screenshareSetting.value\"\r\n        [chatSetting]=\"chatSetting.value\"\r\n        [updateAudioSetting]=\"updateAudioSetting\"\r\n        [updateVideoSetting]=\"updateVideoSetting\"\r\n        [updateScreenshareSetting]=\"updateScreenshareSetting\"\r\n        [updateChatSetting]=\"updateChatSetting\"\r\n        [updateIsSettingsModalVisible]=\"updateIsSettingsModalVisible\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [showAlert]=\"showAlert\"\r\n      ></app-event-settings-modal>\r\n\r\n      <app-requests-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isRequestsModalVisible]=\"isRequestsModalVisible.value\"\r\n        [onRequestClose]=\"onRequestClose\"\r\n        [requestCounter]=\"requestCounter.value\"\r\n        [onRequestFilterChange]=\"onRequestFilterChange\"\r\n        [updateRequestList]=\"updateRequestList\"\r\n        [requestList]=\"filteredRequestList.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-requests-modal>\r\n\r\n      <app-waiting-room-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isWaitingModalVisible]=\"isWaitingModalVisible.value\"\r\n        [onWaitingRoomClose]=\"onWaitingRoomClose\"\r\n        [waitingRoomCounter]=\"waitingRoomCounter.value\"\r\n        [onWaitingRoomFilterChange]=\"onWaitingRoomFilterChange\"\r\n        [waitingRoomList]=\"filteredWaitingRoomList.value\"\r\n        [updateWaitingList]=\"updateWaitingRoomList\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [parameters]=\"{\r\n                      filteredWaitingRoomList: waitingRoomList.value,\r\n                      getUpdatedAllParams: getUpdatedAllParams,\r\n                    }\"\r\n      ></app-waiting-room-modal>\r\n\r\n      <app-co-host-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isCoHostModalVisible]=\"isCoHostModalVisible.value\"\r\n        [onCoHostClose]=\"onCoHostClose\"\r\n        [coHostResponsibility]=\"coHostResponsibility.value\"\r\n        [participants]=\"participants.value\"\r\n        [currentCohost]=\"coHost.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [showAlert]=\"showAlert\"\r\n        [updateCoHostResponsibility]=\"updateCoHostResponsibility\"\r\n        [updateCoHost]=\"updateCoHost\"\r\n        [updateIsCoHostModalVisible]=\"updateIsCoHostModalVisible\"\r\n        [socket]=\"socket.value\"\r\n      ></app-co-host-modal>\r\n\r\n      <app-media-settings-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isMediaSettingsModalVisible]=\"isMediaSettingsModalVisible.value\"\r\n        [onMediaSettingsClose]=\"onMediaSettingsClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-media-settings-modal>\r\n\r\n      <app-participants-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isParticipantsModalVisible]=\"isParticipantsModalVisible.value\"\r\n        [onParticipantsClose]=\"onParticipantsClose\"\r\n        [participantsCounter]=\"participantsCounter.value\"\r\n        [onParticipantsFilterChange]=\"onParticipantsFilterChange\"\r\n        [parameters]=\"{\r\n              updateParticipants: updateParticipants,\r\n              filteredParticipants: filteredParticipants.value,\r\n              updateIsParticipantsModalVisible: updateIsParticipantsModalVisible,\r\n              updateDirectMessageDetails: updateDirectMessageDetails,\r\n              updateStartDirectMessage: updateStartDirectMessage,\r\n              updateIsMessagesModalVisible: updateIsMessagesModalVisible,\r\n              showAlert: showAlert,\r\n              participants: filteredParticipants.value,\r\n              roomName: roomName.value,\r\n              islevel: islevel.value,\r\n              member: member.value,\r\n              coHostResponsibility: coHostResponsibility.value,\r\n              coHost: coHost.value,\r\n              eventType: eventType.value,\r\n              startDirectMessage: startDirectMessage.value,\r\n              directMessageDetails: directMessageDetails.value,\r\n              socket: socket.value,\r\n              getUpdatedAllParams: getUpdatedAllParams,\r\n            }\"\r\n      ></app-participants-modal>\r\n\r\n      <app-display-settings-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isDisplaySettingsModalVisible]=\"isDisplaySettingsModalVisible.value\"\r\n        [onDisplaySettingsClose]=\"onDisplaySettingsClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-display-settings-modal>\r\n\r\n      <app-recording-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isRecordingModalVisible]=\"isRecordingModalVisible.value\"\r\n        [onClose]=\"onRecordingClose\"\r\n        [startRecording]=\"startRecording.startRecording\"\r\n        [confirmRecording]=\"confirmRecording.confirmRecording\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-recording-modal>\r\n\r\n      <app-messages-modal\r\n        [backgroundColor]=\"\r\n          eventType.value === 'webinar' || eventType.value === 'conference'\r\n            ? '#f5f5f5'\r\n            : 'rgba(255, 255, 255, 0.25)'\r\n        \"\r\n        [isMessagesModalVisible]=\"isMessagesModalVisible.value\"\r\n        [onMessagesClose]=\"onMessagesClose\"\r\n        [messages]=\"messages.value\"\r\n        [eventType]=\"eventType.value\"\r\n        [member]=\"member.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [coHostResponsibility]=\"coHostResponsibility.value\"\r\n        [coHost]=\"coHost.value\"\r\n        [startDirectMessage]=\"startDirectMessage.value\"\r\n        [directMessageDetails]=\"directMessageDetails.value\"\r\n        [updateStartDirectMessage]=\"updateStartDirectMessage\"\r\n        [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\r\n        [showAlert]=\"showAlert\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [chatSetting]=\"chatSetting.value\"\r\n      ></app-messages-modal>\r\n\r\n      <app-confirm-exit-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isConfirmExitModalVisible]=\"isConfirmExitModalVisible.value\"\r\n        [onConfirmExitClose]=\"onConfirmExitClose\"\r\n        [position]=\"'topRight'\"\r\n        [member]=\"member.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [islevel]=\"islevel.value\"\r\n      ></app-confirm-exit-modal>\r\n\r\n      <app-confirm-here-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isConfirmHereModalVisible]=\"isConfirmHereModalVisible.value\"\r\n        [onConfirmHereClose]=\"onConfirmHereClose\"\r\n        [member]=\"member.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n      ></app-confirm-here-modal>\r\n\r\n      <app-share-event-modal\r\n        [isShareEventModalVisible]=\"isShareEventModalVisible.value\"\r\n        [onShareEventClose]=\"onShareEventClose\"\r\n        [roomName]=\"roomName.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [adminPasscode]=\"adminPasscode.value\"\r\n        [eventType]=\"eventType.value\"\r\n        [localLink]=\"localLink\"\r\n      ></app-share-event-modal>\r\n\r\n      <app-poll-modal\r\n        [isPollModalVisible]=\"isPollModalVisible.value\"\r\n        [onClose]=\"onPollClose\"\r\n        [member]=\"member.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [polls]=\"polls.value\"\r\n        [poll]=\"poll.value\"\r\n        [socket]=\"socket.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [showAlert]=\"showAlert\"\r\n        [updateIsPollModalVisible]=\"updateIsPollModalVisible\"\r\n        [handleCreatePoll]=\"handleCreatePoll.handleCreatePoll\"\r\n        [handleEndPoll]=\"handleEndPoll.handleEndPoll\"\r\n        [handleVotePoll]=\"handleVotePoll.handleVotePoll\"\r\n      ></app-poll-modal>\r\n\r\n      <app-background-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isVisible]=\"isBackgroundModalVisible.value\"\r\n        [onClose]=\"onBackgroundClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-background-modal>\r\n\r\n      <app-breakout-rooms-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isVisible]=\"isBreakoutRoomsModalVisible.value\"\r\n        [onBreakoutRoomsClose]=\"onBreakoutRoomsClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-breakout-rooms-modal>\r\n\r\n      <app-configure-whiteboard-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isVisible]=\"isConfigureWhiteboardModalVisible.value\"\r\n        [onConfigureWhiteboardClose]=\"onConfigureWhiteboardClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-configure-whiteboard-modal>\r\n\r\n      <app-screenboard-modal\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        [isVisible]=\"isScreenboardModalVisible.value\"\r\n        [onClose]=\"onScreenboardClose\"\r\n        [parameters]=\"mediaSFUParameters\"\r\n      ></app-screenboard-modal>\r\n\r\n      <app-alert-component\r\n        [visible]=\"alertVisible.value\"\r\n        [message]=\"alertMessage.value\"\r\n        [type]=\"alertType.value\"\r\n        [duration]=\"alertDuration.value\"\r\n        [onHide]=\"onAlertHide\"\r\n        textColor=\"#ffffff\"\r\n      ></app-alert-component>\r\n\r\n      <app-loading-modal\r\n        [isVisible]=\"isLoadingModalVisible.value\"\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        displayColor=\"black\"\r\n      ></app-loading-modal>\r\n    </ng-container>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .MediaSFU {\r\n        /* Add any component-specific styles here */\r\n      }\r\n    `,\r\n  ],\r\n  providers: [CookieService]\r\n})\r\nexport class MediasfuConference implements OnInit, OnDestroy {\r\n  @Input()\r\n  PrejoinPage: any = WelcomePage;\r\n  @Input() localLink = '';\r\n  @Input() connectMediaSFU = true;\r\n  @Input() credentials: { apiUserName: string; apiKey: string } = { apiUserName: '', apiKey: '' };\r\n  @Input() useLocalUIMode = false;\r\n  @Input() seedData?: SeedData;\r\n  @Input() useSeed = false;\r\n  @Input() imgSrc = 'https://mediasfu.com/images/logo192.png';\r\n  @Input() sourceParameters?: { [key: string]: any } = {};\r\n  @Input() updateSourceParameters? = (data: { [key: string]: any }) => { };\r\n  @Input() returnUI? = true;\r\n  @Input() noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n  @Input() joinMediaSFURoom?: JoinRoomOnMediaSFUType;\r\n  @Input() createMediaSFURoom?: CreateRoomOnMediaSFUType;\r\n\r\n  title = 'MediaSFU-Conference';\r\n\r\n  private mainHeightWidthSubscription: Subscription | undefined;\r\n  private validatedSubscription: Subscription | undefined;\r\n  private islevelSubscription: Subscription | undefined;\r\n  private coHostSubscription: Subscription | undefined;\r\n  private buttonSubscriptions: Subscription[] = [];\r\n  private ScreenboardSubscription: Subscription | undefined;\r\n  private recordingSubscription: Subscription | undefined;\r\n\r\n  constructor(\r\n    private cdr: ChangeDetectorRef,\r\n    private injector: Injector,\r\n    public updateMiniCardsGrid: UpdateMiniCardsGrid,\r\n    public mixStreams: MixStreams,\r\n    public dispStreams: DispStreams,\r\n    public stopShareScreen: StopShareScreen,\r\n    public checkScreenShare: CheckScreenShare,\r\n    public startShareScreen: StartShareScreen,\r\n    public requestScreenShare: RequestScreenShare,\r\n    public reorderStreams: ReorderStreams,\r\n    public prepopulateUserMedia: PrepopulateUserMedia,\r\n    public getVideos: GetVideos,\r\n    public rePort: RePort,\r\n    public trigger: Trigger,\r\n    public consumerResume: ConsumerResume,\r\n    public connectSendTransport: ConnectSendTransport,\r\n    public connectSendTransportAudio: ConnectSendTransportAudio,\r\n    public connectSendTransportVideo: ConnectSendTransportVideo,\r\n    public connectSendTransportScreen: ConnectSendTransportScreen,\r\n    public processConsumerTransports: ProcessConsumerTransports,\r\n    public resumePauseStreams: ResumePauseStreams,\r\n    public readjust: Readjust,\r\n    public checkGrid: CheckGrid,\r\n    public getEstimate: GetEstimate,\r\n    public calculateRowsAndColumns: CalculateRowsAndColumns,\r\n    public addVideosGrid: AddVideosGrid,\r\n    public onScreenChanges: OnScreenChanges,\r\n    public changeVids: ChangeVids,\r\n    public compareActiveNames: CompareActiveNames,\r\n    public compareScreenStates: CompareScreenStates,\r\n    public createSendTransport: CreateSendTransport,\r\n    public resumeSendTransportAudio: ResumeSendTransportAudio,\r\n    public receiveAllPipedTransports: ReceiveAllPipedTransports,\r\n    public disconnectSendTransportVideo: DisconnectSendTransportVideo,\r\n    public disconnectSendTransportAudio: DisconnectSendTransportAudio,\r\n    public disconnectSendTransportScreen: DisconnectSendTransportScreen,\r\n    public getPipedProducersAlt: GetPipedProducersAlt,\r\n    public signalNewConsumerTransport: SignalNewConsumerTransport,\r\n    public connectRecvTransport: ConnectRecvTransport,\r\n    public reUpdateInter: ReUpdateInter,\r\n    public updateParticipantAudioDecibels: UpdateParticipantAudioDecibels,\r\n    public closeAndResize: CloseAndResize,\r\n    public autoAdjust: AutoAdjust,\r\n    public switchUserVideoAlt: SwitchUserVideoAlt,\r\n    public switchUserVideo: SwitchUserVideo,\r\n    public switchUserAudio: SwitchUserAudio,\r\n    public getDomains: GetDomains,\r\n    public formatNumber: FormatNumber,\r\n    public connectIps: ConnectIps,\r\n    public connectLocalIps: ConnectLocalIps,\r\n    public createDeviceClient: CreateDeviceClient,\r\n    public handleCreatePoll: HandleCreatePoll,\r\n    public handleEndPoll: HandleEndPoll,\r\n    public handleVotePoll: HandleVotePoll,\r\n    public captureCanvasStream: CaptureCanvasStream,\r\n    public resumePauseAudioStreams: ResumePauseAudioStreams,\r\n    public processConsumerTransportsAudio: ProcessConsumerTransportsAudio,\r\n\r\n    public launchMenuModal: LaunchMenuModal,\r\n    public launchRecording: LaunchRecording,\r\n    public startRecording: StartRecording,\r\n    public confirmRecording: ConfirmRecording,\r\n    public launchWaiting: LaunchWaiting,\r\n    public launchCoHost: launchCoHost,\r\n    public launchMediaSettings: LaunchMediaSettings,\r\n    public launchDisplaySettings: LaunchDisplaySettings,\r\n    public launchSettings: LaunchSettings,\r\n    public launchRequests: LaunchRequests,\r\n    public launchParticipants: LaunchParticipants,\r\n    public launchMessages: LaunchMessages,\r\n    public launchConfirmExit: LaunchConfirmExit,\r\n    public launchPoll: LaunchPoll,\r\n    public launchBreakoutRooms: LaunchBreakoutRooms,\r\n    public launchConfigureWhiteboard: LaunchConfigureWhiteboard,\r\n    public startMeetingProgressTimer: StartMeetingProgressTimer,\r\n    public updateRecording: UpdateRecording,\r\n    public stopRecording: StopRecording,\r\n    public userWaiting: UserWaiting,\r\n    public personJoined: PersonJoined,\r\n    public allWaitingRoomMembers: AllWaitingRoomMembers,\r\n    public roomRecordParams: RoomRecordParams,\r\n    public banParticipant: BanParticipant,\r\n    public updatedCoHost: UpdatedCoHost,\r\n    public participantRequested: ParticipantRequested,\r\n    public screenProducerId: ScreenProducerId,\r\n    public updateMediaSettings: UpdateMediaSettings,\r\n    public producerMediaPaused: ProducerMediaPaused,\r\n    public producerMediaResumed: ProducerMediaResumed,\r\n    public producerMediaClosed: ProducerMediaClosed,\r\n    public controlMediaHost: ControlMediaHost,\r\n    public meetingEnded: MeetingEnded,\r\n    public disconnectUserSelf: DisconnectUserSelf,\r\n    public receiveMessage: ReceiveMessage,\r\n    public meetingTimeRemaining: MeetingTimeRemaining,\r\n    public meetingStillThere: MeetingStillThere,\r\n    public startRecords: StartRecords,\r\n    public reInitiateRecording: ReInitiateRecording,\r\n    public recordingNotice: RecordingNotice,\r\n    public timeLeftRecording: TimeLeftRecording,\r\n    public stoppedRecording: StoppedRecording,\r\n    public hostRequestResponse: HostRequestResponse,\r\n    public allMembers: AllMembers,\r\n    public allMembersRest: AllMembersRest,\r\n    public disconnect: Disconnect,\r\n    public pollUpdated: PollUpdated,\r\n    public breakoutRoomUpdated: BreakoutRoomUpdated,\r\n    public socketManager: SocketManager,\r\n    public joinRoomClient: JoinRoomClient,\r\n    public joinLocalRoom: JoinLocalRoom,\r\n    public updateRoomParametersClient: UpdateRoomParametersClient,\r\n    public clickVideo: ClickVideo,\r\n    public clickAudio: ClickAudio,\r\n    public clickScreenShare: ClickScreenShare,\r\n    public streamSuccessVideo: StreamSuccessVideo,\r\n    public streamSuccessAudio: StreamSuccessAudio,\r\n    public streamSuccessScreen: StreamSuccessScreen,\r\n    public streamSuccessAudioSwitch: StreamSuccessAudioSwitch,\r\n    public checkPermission: CheckPermission,\r\n    public updateConsumingDomains: UpdateConsumingDomains,\r\n    public receiveRoomMessages: ReceiveRoomMessages,\r\n  ) { }\r\n\r\n  createInjector(inputs: any) {\r\n    const inj = Injector.create({\r\n      providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\r\n      parent: this.injector,\r\n    });\r\n\r\n    return inj;\r\n  }\r\n\r\n  // Initial values\r\n  mediaSFUFunctions = () => {\r\n    return {\r\n      updateMiniCardsGrid:\r\n        this.updateMiniCardsGrid?.updateMiniCardsGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      mixStreams:\r\n        this.mixStreams?.mixStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      dispStreams:\r\n        this.dispStreams?.dispStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      stopShareScreen:\r\n        this.stopShareScreen?.stopShareScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkScreenShare:\r\n        this.checkScreenShare?.checkScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      startShareScreen:\r\n        this.startShareScreen?.startShareScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestScreenShare:\r\n        this.requestScreenShare?.requestScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      reorderStreams:\r\n        this.reorderStreams?.reorderStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      prepopulateUserMedia:\r\n        this.prepopulateUserMedia?.prepopulateUserMedia ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getVideos:\r\n        this.getVideos?.getVideos ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      rePort:\r\n        this.rePort?.rePort ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      trigger:\r\n        this.trigger?.trigger ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      consumerResume:\r\n        this.consumerResume?.consumerResume ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransport:\r\n        this.connectSendTransport?.connectSendTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportAudio:\r\n        this.connectSendTransportAudio?.connectSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportVideo:\r\n        this.connectSendTransportVideo?.connectSendTransportVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportScreen:\r\n        this.connectSendTransportScreen?.connectSendTransportScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      processConsumerTransports:\r\n        this.processConsumerTransports?.processConsumerTransports ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumePauseStreams:\r\n        this.resumePauseStreams?.resumePauseStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      readjust:\r\n        this.readjust?.readjust ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkGrid:\r\n        this.checkGrid?.checkGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getEstimate:\r\n        this.getEstimate?.getEstimate ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      calculateRowsAndColumns:\r\n        this.calculateRowsAndColumns?.calculateRowsAndColumns ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      addVideosGrid:\r\n        this.addVideosGrid?.addVideosGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      onScreenChanges:\r\n        this.onScreenChanges?.onScreenChanges ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      sleep:\r\n        sleep ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      changeVids:\r\n        this.changeVids?.changeVids ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      compareActiveNames:\r\n        this.compareActiveNames?.compareActiveNames ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      compareScreenStates:\r\n        this.compareScreenStates?.compareScreenStates ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      createSendTransport:\r\n        this.createSendTransport?.createSendTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumeSendTransportAudio:\r\n        this.resumeSendTransportAudio?.resumeSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      receiveAllPipedTransports:\r\n        this.receiveAllPipedTransports?.receiveAllPipedTransports ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportVideo:\r\n        this.disconnectSendTransportVideo?.disconnectSendTransportVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportAudio:\r\n        this.disconnectSendTransportAudio?.disconnectSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportScreen:\r\n        this.disconnectSendTransportScreen?.disconnectSendTransportScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getPipedProducersAlt:\r\n        this.getPipedProducersAlt?.getPipedProducersAlt ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      signalNewConsumerTransport:\r\n        this.signalNewConsumerTransport?.signalNewConsumerTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectRecvTransport:\r\n        this.connectRecvTransport?.connectRecvTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      reUpdateInter:\r\n        this.reUpdateInter?.reUpdateInter ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      updateParticipantAudioDecibels:\r\n        this.updateParticipantAudioDecibels?.updateParticipantAudioDecibels ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      closeAndResize:\r\n        this.closeAndResize?.closeAndResize ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      autoAdjust:\r\n        this.autoAdjust?.autoAdjust ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserVideoAlt:\r\n        this.switchUserVideoAlt?.switchUserVideoAlt ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserVideo:\r\n        this.switchUserVideo?.switchUserVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserAudio:\r\n        this.switchUserAudio?.switchUserAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getDomains:\r\n        this.getDomains?.getDomains ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      formatNumber:\r\n        this.formatNumber?.formatNumber ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectIps:\r\n        this.connectIps?.connectIps ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectLocalIps:\r\n        this.connectLocalIps?.connectLocalIps ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      createDeviceClient:\r\n        this.createDeviceClient?.createDeviceClient ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      handleCreatePoll:\r\n        this.handleCreatePoll?.handleCreatePoll ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      handleEndPoll:\r\n        this.handleEndPoll?.handleEndPoll ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      handleVotePoll:\r\n        this.handleVotePoll?.handleVotePoll ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      captureCanvasStream:\r\n        this.captureCanvasStream?.captureCanvasStream ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumePauseAudioStreams:\r\n        this.resumePauseAudioStreams?.resumePauseAudioStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      processConsumerTransportsAudio:\r\n        this.processConsumerTransportsAudio?.processConsumerTransportsAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkPermission:\r\n        this.checkPermission?.checkPermission ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessVideo:\r\n        this.streamSuccessVideo?.streamSuccessVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessAudio:\r\n        this.streamSuccessAudio?.streamSuccessAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessScreen:\r\n        this.streamSuccessScreen?.streamSuccessScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessAudioSwitch:\r\n        this.streamSuccessAudioSwitch?.streamSuccessAudioSwitch ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickVideo:\r\n        this.clickVideo?.clickVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickAudio:\r\n        this.clickAudio?.clickAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickScreenShare:\r\n        this.clickScreenShare?.clickScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestPermissionCamera:\r\n        this.requestPermissionCamera ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestPermissionAudio:\r\n        this.requestPermissionAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n    };\r\n  };\r\n\r\n  validated = new BehaviorSubject<boolean>(false);\r\n  localUIMode = new BehaviorSubject<boolean>(false);\r\n  socket = new BehaviorSubject<Socket>({} as Socket);\r\n  localSocket? = new BehaviorSubject<Socket | undefined>(undefined);\r\n  roomData = new BehaviorSubject<ResponseJoinRoom | null>(null);\r\n  device = new BehaviorSubject<Device | null>(null);\r\n  apiKey = new BehaviorSubject<string>('');\r\n  apiUserName = new BehaviorSubject<string>('');\r\n  apiToken = new BehaviorSubject<string>('');\r\n  link = new BehaviorSubject<string>('');\r\n\r\n  roomName = new BehaviorSubject<string>('');\r\n  member = new BehaviorSubject<string>('');\r\n  adminPasscode = new BehaviorSubject<string>('');\r\n  islevel = new BehaviorSubject<string>('1');\r\n  coHost = new BehaviorSubject<string>('No coHost');\r\n  coHostResponsibility = new BehaviorSubject<CoHostResponsibility[]>([\r\n    { name: 'participants', value: false, dedicated: false },\r\n    { name: 'media', value: false, dedicated: false },\r\n    { name: 'waiting', value: false, dedicated: false },\r\n    { name: 'chat', value: false, dedicated: false },\r\n  ]);\r\n  youAreCoHost = new BehaviorSubject<boolean>(false);\r\n  youAreHost = new BehaviorSubject<boolean>(false);\r\n  confirmedToRecord = new BehaviorSubject<boolean>(false);\r\n  meetingDisplayType = new BehaviorSubject<string>('media');\r\n  meetingVideoOptimized = new BehaviorSubject<boolean>(false);\r\n  eventType = new BehaviorSubject<EventType>('conference');\r\n  participants = new BehaviorSubject<Participant[]>([]);\r\n  filteredParticipants = new BehaviorSubject<Participant[]>([]);\r\n  participantsCounter = new BehaviorSubject<number>(0);\r\n  participantsFilter = new BehaviorSubject<string>('');\r\n\r\n  consume_sockets = new BehaviorSubject<ConsumeSocket[]>([]);\r\n  rtpCapabilities = new BehaviorSubject<RtpCapabilities | null>(null);\r\n  roomRecvIPs = new BehaviorSubject<string[]>([]);\r\n  meetingRoomParams = new BehaviorSubject<MeetingRoomParams | null>(null);\r\n  itemPageLimit = new BehaviorSubject<number>(4);\r\n  audioOnlyRoom = new BehaviorSubject<boolean>(false);\r\n  addForBasic = new BehaviorSubject<boolean>(false);\r\n  screenPageLimit = new BehaviorSubject<number>(4);\r\n  shareScreenStarted = new BehaviorSubject<boolean>(false);\r\n  shared = new BehaviorSubject<boolean>(false);\r\n  targetOrientation = new BehaviorSubject<string>('landscape');\r\n  targetResolution = new BehaviorSubject<string>('sd');\r\n  targetResolutionHost = new BehaviorSubject<string>('sd');\r\n  vidCons = new BehaviorSubject<VidCons>({ width: 640, height: 360 });\r\n  frameRate = new BehaviorSubject<number>(10);\r\n  hParams = new BehaviorSubject<HParamsType>({} as HParamsType);\r\n  vParams = new BehaviorSubject<VParamsType>({} as VParamsType);\r\n  screenParams = new BehaviorSubject<ScreenParamsType>({} as ScreenParamsType);\r\n  aParams = new BehaviorSubject<AParamsType>({} as AParamsType);\r\n\r\n  recordingAudioPausesLimit = new BehaviorSubject<number>(0);\r\n  recordingAudioPausesCount = new BehaviorSubject<number>(0);\r\n  recordingAudioSupport = new BehaviorSubject<boolean>(false);\r\n  recordingAudioPeopleLimit = new BehaviorSubject<number>(0);\r\n  recordingAudioParticipantsTimeLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoPausesCount = new BehaviorSubject<number>(0);\r\n  recordingVideoPausesLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoPeopleLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoParticipantsTimeLimit = new BehaviorSubject<number>(0);\r\n  recordingAllParticipantsSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoParticipantsSupport = new BehaviorSubject<boolean>(false);\r\n  recordingAllParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\r\n  recordingPreferredOrientation = new BehaviorSubject<string>('landscape');\r\n  recordingSupportForOtherOrientation = new BehaviorSubject<boolean>(false);\r\n  recordingMultiFormatsSupport = new BehaviorSubject<boolean>(false);\r\n\r\n  userRecordingParams = new BehaviorSubject<UserRecordingParams>({\r\n    mainSpecs: {\r\n      mediaOptions: 'video', // 'audio', 'video'\r\n      audioOptions: 'all', // 'all', 'onScreen', 'host'\r\n      videoOptions: 'all', // 'all', 'mainScreen'\r\n      videoType: 'fullDisplay', // 'all', 'bestDisplay', 'fullDisplay'\r\n      videoOptimized: false, // true, false\r\n      recordingDisplayType: 'media', // 'media', 'video', 'all'\r\n      addHLS: false, // true, false\r\n    },\r\n    dispSpecs: {\r\n      nameTags: true, // true, false\r\n      backgroundColor: '#000000', // '#000000', '#ffffff'\r\n      nameTagsColor: '#ffffff', // '#000000', '#ffffff'\r\n      orientationVideo: 'portrait', // 'landscape', 'portrait', 'all'\r\n    },\r\n  });\r\n\r\n  canRecord = new BehaviorSubject<boolean>(false);\r\n  startReport = new BehaviorSubject<boolean>(false);\r\n  endReport = new BehaviorSubject<boolean>(false);\r\n  recordTimerInterval = new BehaviorSubject<NodeJS.Timeout | null>(null);\r\n  recordStartTime = new BehaviorSubject<number>(0);\r\n  recordElapsedTime = new BehaviorSubject<number>(0);\r\n  isTimerRunning = new BehaviorSubject<boolean>(false);\r\n  canPauseResume = new BehaviorSubject<boolean>(false);\r\n  recordChangeSeconds = new BehaviorSubject<number>(15000);\r\n  pauseLimit = new BehaviorSubject<number>(0);\r\n  pauseRecordCount = new BehaviorSubject<number>(0);\r\n  canLaunchRecord = new BehaviorSubject<boolean>(true);\r\n  stopLaunchRecord = new BehaviorSubject<boolean>(false);\r\n\r\n  participantsAll = new BehaviorSubject<Participant[]>([]);\r\n\r\n  firstAll = new BehaviorSubject<boolean>(false);\r\n  updateMainWindow = new BehaviorSubject<boolean>(false);\r\n  first_round = new BehaviorSubject<boolean>(false);\r\n  landScaped = new BehaviorSubject<boolean>(false);\r\n  lock_screen = new BehaviorSubject<boolean>(false);\r\n  screenId = new BehaviorSubject<string>('');\r\n  allVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  newLimitedStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  newLimitedStreamsIDs = new BehaviorSubject<string[]>([]);\r\n  activeSounds = new BehaviorSubject<string[]>([]);\r\n  screenShareIDStream = new BehaviorSubject<string>('');\r\n  screenShareNameStream = new BehaviorSubject<string>('');\r\n  adminIDStream = new BehaviorSubject<string>('');\r\n  adminNameStream = new BehaviorSubject<string>('');\r\n  youYouStream = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  youYouStreamIDs = new BehaviorSubject<string[]>([]);\r\n  localStream = new BehaviorSubject<MediaStream | null>(null);\r\n  recordStarted = new BehaviorSubject<boolean>(false);\r\n  recordResumed = new BehaviorSubject<boolean>(false);\r\n  recordPaused = new BehaviorSubject<boolean>(false);\r\n  recordStopped = new BehaviorSubject<boolean>(false);\r\n  adminRestrictSetting = new BehaviorSubject<boolean>(false);\r\n  videoRequestState = new BehaviorSubject<string | null>(null);\r\n  videoRequestTime = new BehaviorSubject<number>(0);\r\n  videoAction = new BehaviorSubject<boolean>(false);\r\n  localStreamVideo = new BehaviorSubject<MediaStream | null>(null);\r\n  userDefaultVideoInputDevice = new BehaviorSubject<string>('');\r\n  currentFacingMode = new BehaviorSubject<string>('user');\r\n  prevFacingMode = new BehaviorSubject<string>('user');\r\n  defVideoID = new BehaviorSubject<string>('');\r\n  allowed = new BehaviorSubject<boolean>(false);\r\n  dispActiveNames = new BehaviorSubject<string[]>([]);\r\n  p_dispActiveNames = new BehaviorSubject<string[]>([]);\r\n  activeNames = new BehaviorSubject<string[]>([]);\r\n  prevActiveNames = new BehaviorSubject<string[]>([]);\r\n  p_activeNames = new BehaviorSubject<string[]>([]);\r\n  membersReceived = new BehaviorSubject<boolean>(false);\r\n  deferScreenReceived = new BehaviorSubject<boolean>(false);\r\n  hostFirstSwitch = new BehaviorSubject<boolean>(false);\r\n  micAction = new BehaviorSubject<boolean>(false);\r\n  screenAction = new BehaviorSubject<boolean>(false);\r\n  chatAction = new BehaviorSubject<boolean>(false);\r\n  audioRequestState = new BehaviorSubject<string | null>(null);\r\n  screenRequestState = new BehaviorSubject<string | null>(null);\r\n  chatRequestState = new BehaviorSubject<string | null>(null);\r\n  audioRequestTime = new BehaviorSubject<number>(0);\r\n  screenRequestTime = new BehaviorSubject<number>(0);\r\n  chatRequestTime = new BehaviorSubject<number>(0);\r\n  updateRequestIntervalSeconds = new BehaviorSubject<number>(240);\r\n  oldSoundIds = new BehaviorSubject<string[]>([]);\r\n  hostLabel = new BehaviorSubject<string>('Host');\r\n  mainScreenFilled = new BehaviorSubject<boolean>(false);\r\n  localStreamScreen = new BehaviorSubject<MediaStream | null>(null);\r\n  screenAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  chatAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  redirectURL = new BehaviorSubject<string>('');\r\n  oldAllStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  adminVidID = new BehaviorSubject<string>('');\r\n  streamNames = new BehaviorSubject<Stream[]>([]);\r\n  non_alVideoStreams = new BehaviorSubject<Participant[]>([]);\r\n  sortAudioLoudness = new BehaviorSubject<boolean>(false);\r\n  audioDecibels = new BehaviorSubject<AudioDecibels[]>([]);\r\n  mixed_alVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  non_alVideoStreams_muted = new BehaviorSubject<Participant[]>([]);\r\n  paginatedStreams = new BehaviorSubject<(Participant | Stream)[][]>([]);\r\n  localStreamAudio = new BehaviorSubject<MediaStream | null>(null);\r\n  defAudioID = new BehaviorSubject<string>('');\r\n  userDefaultAudioInputDevice = new BehaviorSubject<string>('');\r\n  userDefaultAudioOutputDevice = new BehaviorSubject<string>('');\r\n  prevAudioInputDevice = new BehaviorSubject<string>('');\r\n  prevVideoInputDevice = new BehaviorSubject<string>('');\r\n  audioPaused = new BehaviorSubject<boolean>(false);\r\n  mainScreenPerson = new BehaviorSubject<string>('');\r\n  adminOnMainScreen = new BehaviorSubject<boolean>(false);\r\n  screenStates = new BehaviorSubject<ScreenState[]>([\r\n    {\r\n      mainScreenPerson: '',\r\n      mainScreenProducerId: '',\r\n      mainScreenFilled: false,\r\n      adminOnMainScreen: false,\r\n    },\r\n  ]);\r\n  prevScreenStates = new BehaviorSubject<ScreenState[]>([\r\n    {\r\n      mainScreenPerson: '',\r\n      mainScreenProducerId: '',\r\n      mainScreenFilled: false,\r\n      adminOnMainScreen: false,\r\n    },\r\n  ]);\r\n  updateDateState = new BehaviorSubject<number | null>(null);\r\n  lastUpdate = new BehaviorSubject<number | null>(null);\r\n  nForReadjustRecord = new BehaviorSubject<number>(0);\r\n  fixedPageLimit = new BehaviorSubject<number>(4);\r\n  removeAltGrid = new BehaviorSubject<boolean>(false);\r\n  nForReadjust = new BehaviorSubject<number>(0);\r\n  reorderInterval = new BehaviorSubject<number>(30000);\r\n  fastReorderInterval = new BehaviorSubject<number>(10000);\r\n  lastReorderTime = new BehaviorSubject<number>(0);\r\n  audStreamNames = new BehaviorSubject<Stream[]>([]);\r\n  currentUserPage = new BehaviorSubject<number>(0);\r\n  mainHeightWidth = new BehaviorSubject<number>(\r\n    this.eventType.value == 'webinar' ? 67 : this.eventType.value == 'broadcast' ? 100 : 0,\r\n  );\r\n  prevMainHeightWidth = new BehaviorSubject<number>(this.mainHeightWidth.value);\r\n  prevDoPaginate = new BehaviorSubject<boolean>(false);\r\n  doPaginate = new BehaviorSubject<boolean>(false);\r\n  shareEnded = new BehaviorSubject<boolean>(false);\r\n  lStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  chatRefStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  controlHeight = new BehaviorSubject<number>(\r\n    this.eventType.value === 'webinar' || this.eventType.value === 'conference' ? 0 : 0.06,\r\n  );\r\n  isWideScreen = new BehaviorSubject<boolean>(false);\r\n  isMediumScreen = new BehaviorSubject<boolean>(false);\r\n  isSmallScreen = new BehaviorSubject<boolean>(false);\r\n  addGrid = new BehaviorSubject<boolean>(false);\r\n  addAltGrid = new BehaviorSubject<boolean>(false);\r\n  gridRows = new BehaviorSubject<number>(0);\r\n  gridCols = new BehaviorSubject<number>(0);\r\n  altGridRows = new BehaviorSubject<number>(0);\r\n  altGridCols = new BehaviorSubject<number>(0);\r\n  numberPages = new BehaviorSubject<number>(0);\r\n  currentStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  showMiniView = new BehaviorSubject<boolean>(false);\r\n  nStream = new BehaviorSubject<MediaStream | null>(null);\r\n  defer_receive = new BehaviorSubject<boolean>(false);\r\n  allAudioStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  remoteScreenStream = new BehaviorSubject<Stream[]>([]);\r\n  screenProducer = new BehaviorSubject<Producer | null>(null);\r\n  localScreenProducer = new BehaviorSubject<Producer | null>(null);\r\n  gotAllVids = new BehaviorSubject<boolean>(false);\r\n  paginationHeightWidth = new BehaviorSubject<number>(40);\r\n  paginationDirection = new BehaviorSubject<'horizontal' | 'vertical'>('horizontal');\r\n  gridSizes = new BehaviorSubject<GridSizes>({\r\n    gridWidth: 0,\r\n    gridHeight: 0,\r\n    altGridWidth: 0,\r\n    altGridHeight: 0,\r\n  });\r\n  screenForceFullDisplay = new BehaviorSubject<boolean>(false);\r\n  mainGridStream = new BehaviorSubject<CustomMediaComponent[]>([]);\r\n  otherGridStreams = new BehaviorSubject<CustomMediaComponent[][]>([]);\r\n  audioOnlyStreams = new BehaviorSubject<CustomMediaComponent[]>([]);\r\n  videoInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\r\n  audioInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\r\n  meetingProgressTime = new BehaviorSubject<string>('00:00:00');\r\n  meetingElapsedTime = new BehaviorSubject<number>(0);\r\n  ref_participants = new BehaviorSubject<Participant[]>([]);\r\n\r\n  updateValidated = (value: boolean) => {\r\n    this.validated.next(value);\r\n  };\r\n\r\n  updateSocket = (value: Socket) => {\r\n    this.socket.next(value);\r\n  };\r\n\r\n  updateLocalSocket = (value: Socket | null) => {\r\n    this.localSocket!.next(value!);\r\n  };\r\n\r\n  updateDevice = (value: Device | null) => {\r\n    this.device.next(value);\r\n  };\r\n\r\n  updateRoomData = (value: ResponseJoinRoom | null) => {\r\n    this.roomData.next(value);\r\n  };\r\n\r\n  updateApiKey = (value: string) => {\r\n    this.apiKey.next(value);\r\n  };\r\n\r\n  updateApiUserName = (value: string) => {\r\n    this.apiUserName.next(value);\r\n  };\r\n\r\n  updateApiToken = (value: string) => {\r\n    this.apiToken.next(value);\r\n  };\r\n\r\n  updateLink = (value: string) => {\r\n    this.link.next(value);\r\n  };\r\n\r\n  updateRoomName = (value: string) => {\r\n    this.roomName.next(value);\r\n  };\r\n\r\n  updateMember = (value: string) => {\r\n    if (value.length > 0 && value.includes(\"_\")) {\r\n      this.updateIslevel(value.split(\"_\")[1]);\r\n      value = value.split(\"_\")[0];\r\n    }\r\n    this.member.next(value);\r\n  };\r\n\r\n  updateAdminPasscode = (value: string) => {\r\n    this.adminPasscode.next(value);\r\n  };\r\n\r\n  updateIslevel = (value: string) => {\r\n    this.islevel.next(value);\r\n  };\r\n\r\n  updateCoHost = (value: string) => {\r\n    this.coHost.next(value);\r\n  };\r\n\r\n  updateCoHostResponsibility = (value: CoHostResponsibility[]) => {\r\n    this.coHostResponsibility.next(value);\r\n  };\r\n\r\n  updateYouAreCoHost = (value: boolean) => {\r\n    this.youAreCoHost.next(value);\r\n  };\r\n\r\n  updateYouAreHost = (value: boolean) => {\r\n    this.youAreHost.next(value);\r\n  };\r\n\r\n  updateConfirmedToRecord = (value: boolean) => {\r\n    this.confirmedToRecord.next(value);\r\n  };\r\n\r\n  updateMeetingDisplayType = (value: string) => {\r\n    this.meetingDisplayType.next(value);\r\n  };\r\n\r\n  updateMeetingVideoOptimized = (value: boolean) => {\r\n    this.meetingVideoOptimized.next(value);\r\n  };\r\n\r\n  updateEventType = (value: EventType) => {\r\n    this.eventType.next(value);\r\n    if (value != 'none') {\r\n      try {\r\n        setTimeout(() => {\r\n          this.handleResize();\r\n        }, 2000);\r\n      } catch {\r\n        /* handle error */\r\n      }\r\n    }\r\n  };\r\n\r\n  updateParticipants = (value: Participant[]) => {\r\n    this.participants.next(value);\r\n    this.participantsCounter.next(value.length);\r\n    this.filteredParticipants.next(this.participants.value);\r\n  };\r\n\r\n  updateFilteredParticipants = (value: Participant[]) => {\r\n    this.filteredParticipants.next(value);\r\n  };\r\n\r\n  updateParticipantsCounter = (value: number) => {\r\n    this.participantsCounter.next(value);\r\n  };\r\n\r\n  updateParticipantsFilter = (value: string) => {\r\n    this.participantsFilter.next(value);\r\n  };\r\n\r\n  updateConsume_sockets = (value: ConsumeSocket[]) => {\r\n    this.consume_sockets.next(value);\r\n  };\r\n\r\n  updateRtpCapabilities = (value: RtpCapabilities | null) => {\r\n    this.rtpCapabilities.next(value);\r\n  };\r\n\r\n  updateRoomRecvIPs = (value: string[]) => {\r\n    this.roomRecvIPs.next(value);\r\n  };\r\n\r\n  updateMeetingRoomParams = (value: MeetingRoomParams | null) => {\r\n    this.meetingRoomParams.next(value);\r\n  };\r\n\r\n  updateItemPageLimit = (value: number) => {\r\n    this.itemPageLimit.next(value);\r\n  };\r\n\r\n  updateAudioOnlyRoom = (value: boolean) => {\r\n    this.audioOnlyRoom.next(value);\r\n  };\r\n\r\n  updateAddForBasic = (value: boolean) => {\r\n    this.addForBasic.next(value);\r\n  };\r\n\r\n  updateScreenPageLimit = (value: number) => {\r\n    this.screenPageLimit.next(value);\r\n  };\r\n\r\n  updateShareScreenStarted = (value: boolean) => {\r\n    this.shareScreenStarted.next(value);\r\n  };\r\n\r\n  updateShared = (value: boolean) => {\r\n    this.shared.next(value);\r\n    this.screenShareActive.next(value);\r\n    if (value) {\r\n      setTimeout(async () => {\r\n        window.dispatchEvent(new Event('resize'));\r\n      }, 2000);\r\n    }\r\n  };\r\n\r\n  updateTargetOrientation = (value: string) => {\r\n    this.targetOrientation.next(value);\r\n  };\r\n\r\n  updateTargetResolution = (value: string) => {\r\n    this.targetResolution.next(value);\r\n  };\r\n\r\n  updateTargetResolutionHost = (value: string) => {\r\n    this.targetResolutionHost.next(value);\r\n  };\r\n\r\n  updateVidCons = (value: VidCons) => {\r\n    this.vidCons.next(value);\r\n  };\r\n\r\n  updateFrameRate = (value: number) => {\r\n    this.frameRate.next(value);\r\n  };\r\n\r\n  updateHParams = (value: HParamsType) => {\r\n    this.hParams.next(value);\r\n  };\r\n\r\n  updateVParams = (value: VParamsType) => {\r\n    this.vParams.next(value);\r\n  };\r\n\r\n  updateScreenParams = (value: ScreenParamsType) => {\r\n    this.screenParams.next(value);\r\n  };\r\n\r\n  updateAParams = (value: AParamsType) => {\r\n    this.aParams.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPausesLimit = (value: number) => {\r\n    this.recordingAudioPausesLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPausesCount = (value: number) => {\r\n    this.recordingAudioPausesCount.next(value);\r\n  };\r\n\r\n  updateRecordingAudioSupport = (value: boolean) => {\r\n    this.recordingAudioSupport.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPeopleLimit = (value: number) => {\r\n    this.recordingAudioPeopleLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAudioParticipantsTimeLimit = (value: number) => {\r\n    this.recordingAudioParticipantsTimeLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPausesCount = (value: number) => {\r\n    this.recordingVideoPausesCount.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPausesLimit = (value: number) => {\r\n    this.recordingVideoPausesLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoSupport = (value: boolean) => {\r\n    this.recordingVideoSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPeopleLimit = (value: number) => {\r\n    this.recordingVideoPeopleLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsTimeLimit = (value: number) => {\r\n    this.recordingVideoParticipantsTimeLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAllParticipantsSupport = (value: boolean) => {\r\n    this.recordingAllParticipantsSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsSupport = (value: boolean) => {\r\n    this.recordingVideoParticipantsSupport.next(value);\r\n  };\r\n\r\n  updateRecordingAllParticipantsFullRoomSupport = (value: boolean) => {\r\n    this.recordingAllParticipantsFullRoomSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsFullRoomSupport = (value: boolean) => {\r\n    this.recordingVideoParticipantsFullRoomSupport.next(value);\r\n  };\r\n\r\n  updateRecordingPreferredOrientation = (value: string) => {\r\n    this.recordingPreferredOrientation.next(value);\r\n  };\r\n\r\n  updateRecordingSupportForOtherOrientation = (value: boolean) => {\r\n    this.recordingSupportForOtherOrientation.next(value);\r\n  };\r\n\r\n  updateRecordingMultiFormatsSupport = (value: boolean) => {\r\n    this.recordingMultiFormatsSupport.next(value);\r\n  };\r\n\r\n  updateUserRecordingParams = (value: UserRecordingParams) => {\r\n    this.userRecordingParams.next(value);\r\n  };\r\n\r\n  updateCanRecord = (value: boolean) => {\r\n    this.canRecord.next(value);\r\n  };\r\n\r\n  updateStartReport = (value: boolean) => {\r\n    this.startReport.next(value);\r\n  };\r\n\r\n  updateEndReport = (value: boolean) => {\r\n    this.endReport.next(value);\r\n  };\r\n\r\n  updateRecordTimerInterval = (value: NodeJS.Timeout | null) => {\r\n    this.recordTimerInterval.next(value);\r\n  };\r\n\r\n  updateRecordStartTime = (value: number) => {\r\n    this.recordStartTime.next(value);\r\n  };\r\n\r\n  updateRecordElapsedTime = (value: number) => {\r\n    this.recordElapsedTime.next(value);\r\n  };\r\n\r\n  updateIsTimerRunning = (value: boolean) => {\r\n    this.isTimerRunning.next(value);\r\n  };\r\n\r\n  updateCanPauseResume = (value: boolean) => {\r\n    this.canPauseResume.next(value);\r\n  };\r\n\r\n  updateRecordChangeSeconds = (value: number) => {\r\n    this.recordChangeSeconds.next(value);\r\n  };\r\n\r\n  updatePauseLimit = (value: number) => {\r\n    this.pauseLimit.next(value);\r\n  };\r\n\r\n  updatePauseRecordCount = (value: number) => {\r\n    this.pauseRecordCount.next(value);\r\n  };\r\n\r\n  updateCanLaunchRecord = (value: boolean) => {\r\n    this.canLaunchRecord.next(value);\r\n  };\r\n\r\n  updateStopLaunchRecord = (value: boolean) => {\r\n    this.stopLaunchRecord.next(value);\r\n  };\r\n\r\n  updateParticipantsAll = (value: Participant[]) => {\r\n    this.participantsAll.next(value);\r\n  };\r\n\r\n  updateFirstAll = (value: boolean) => {\r\n    this.firstAll.next(value);\r\n  };\r\n\r\n  updateUpdateMainWindow = (value: boolean) => {\r\n    this.updateMainWindow.next(value);\r\n  };\r\n\r\n  updateFirst_round = (value: boolean) => {\r\n    this.first_round.next(value);\r\n  };\r\n\r\n  updateLandScaped = (value: boolean) => {\r\n    this.landScaped.next(value);\r\n  };\r\n\r\n  updateLock_screen = (value: boolean) => {\r\n    this.lock_screen.next(value);\r\n  };\r\n\r\n  updateScreenId = (value: string) => {\r\n    this.screenId.next(value);\r\n  };\r\n\r\n  updateAllVideoStreams = (value: (Participant | Stream)[]) => {\r\n    this.allVideoStreams.next(value);\r\n  };\r\n\r\n  updateNewLimitedStreams = (value: (Participant | Stream)[]) => {\r\n    this.newLimitedStreams.next(value);\r\n  };\r\n\r\n  updateNewLimitedStreamsIDs = (value: string[]) => {\r\n    this.newLimitedStreamsIDs.next(value);\r\n  };\r\n\r\n  updateActiveSounds = (value: string[]) => {\r\n    this.activeSounds.next(value);\r\n  };\r\n\r\n  updateScreenShareIDStream = (value: string) => {\r\n    this.screenShareIDStream.next(value);\r\n  };\r\n\r\n  updateScreenShareNameStream = (value: string) => {\r\n    this.screenShareNameStream.next(value);\r\n  };\r\n\r\n  updateAdminIDStream = (value: string) => {\r\n    this.adminIDStream.next(value);\r\n  };\r\n\r\n  updateAdminNameStream = (value: string) => {\r\n    this.adminNameStream.next(value);\r\n  };\r\n\r\n  updateYouYouStream = (value: (Participant | Stream)[]) => {\r\n    this.youYouStream.next(value);\r\n  };\r\n\r\n  updateYouYouStreamIDs = (value: string[]) => {\r\n    this.youYouStreamIDs.next(value);\r\n  };\r\n\r\n  updateLocalStream = (value: MediaStream | null) => {\r\n    this.localStream.next(value);\r\n  };\r\n\r\n  updateRecordStarted = (value: boolean) => {\r\n    this.recordStarted.next(value);\r\n  };\r\n\r\n  updateRecordResumed = (value: boolean) => {\r\n    this.recordResumed.next(value);\r\n  };\r\n\r\n  updateRecordPaused = (value: boolean) => {\r\n    this.recordPaused.next(value);\r\n  };\r\n\r\n  updateRecordStopped = (value: boolean) => {\r\n    this.recordStopped.next(value);\r\n  };\r\n\r\n  updateAdminRestrictSetting = (value: boolean) => {\r\n    this.adminRestrictSetting.next(value);\r\n  };\r\n\r\n  updateVideoRequestState = (value: string | null) => {\r\n    this.videoRequestState.next(value);\r\n  };\r\n\r\n  updateVideoRequestTime = (value: number) => {\r\n    this.videoRequestTime.next(value);\r\n  };\r\n\r\n  updateVideoAction = (value: boolean) => {\r\n    this.videoAction.next(value);\r\n  };\r\n\r\n  updateLocalStreamVideo = (value: MediaStream | null) => {\r\n    this.localStreamVideo.next(value);\r\n  };\r\n\r\n  updateUserDefaultVideoInputDevice = (value: string) => {\r\n    this.userDefaultVideoInputDevice.next(value);\r\n  };\r\n\r\n  updateCurrentFacingMode = (value: string) => {\r\n    this.currentFacingMode.next(value);\r\n  };\r\n\r\n  updatePrevFacingMode = (value: string) => {\r\n    this.prevFacingMode.next(value);\r\n  };\r\n\r\n  updateDefVideoID = (value: string) => {\r\n    this.defVideoID.next(value);\r\n  };\r\n\r\n  updateAllowed = (value: boolean) => {\r\n    this.allowed.next(value);\r\n  };\r\n\r\n  updateDispActiveNames = (value: string[]) => {\r\n    this.dispActiveNames.next(value);\r\n  };\r\n\r\n  updateP_dispActiveNames = (value: string[]) => {\r\n    this.p_dispActiveNames.next(value);\r\n  };\r\n\r\n  updateActiveNames = (value: string[]) => {\r\n    this.activeNames.next(value);\r\n  };\r\n\r\n  updatePrevActiveNames = (value: string[]) => {\r\n    this.prevActiveNames.next(value);\r\n  };\r\n\r\n  updateP_activeNames = (value: string[]) => {\r\n    this.p_activeNames.next(value);\r\n  };\r\n\r\n  updateMembersReceived = (value: boolean) => {\r\n    this.membersReceived.next(value);\r\n  };\r\n\r\n  updateDeferScreenReceived = (value: boolean) => {\r\n    this.deferScreenReceived.next(value);\r\n  };\r\n\r\n  updateHostFirstSwitch = (value: boolean) => {\r\n    this.hostFirstSwitch.next(value);\r\n  };\r\n\r\n  updateMicAction = (value: boolean) => {\r\n    this.micAction.next(value);\r\n  };\r\n\r\n  updateScreenAction = (value: boolean) => {\r\n    this.screenAction.next(value);\r\n  };\r\n\r\n  updateChatAction = (value: boolean) => {\r\n    this.chatAction.next(value);\r\n  };\r\n\r\n  updateAudioRequestState = (value: string | null) => {\r\n    this.audioRequestState.next(value);\r\n  };\r\n\r\n  updateScreenRequestState = (value: string | null) => {\r\n    this.screenRequestState.next(value);\r\n  };\r\n\r\n  updateChatRequestState = (value: string | null) => {\r\n    this.chatRequestState.next(value);\r\n  };\r\n\r\n  updateAudioRequestTime = (value: number) => {\r\n    this.audioRequestTime.next(value);\r\n  };\r\n\r\n  updateScreenRequestTime = (value: number) => {\r\n    this.screenRequestTime.next(value);\r\n  };\r\n\r\n  updateChatRequestTime = (value: number) => {\r\n    this.chatRequestTime.next(value);\r\n  };\r\n\r\n  updateOldSoundIds = (value: string[]) => {\r\n    this.oldSoundIds.next(value);\r\n  };\r\n\r\n  updateHostLabel = (value: string) => {\r\n    this.hostLabel.next(value);\r\n  };\r\n\r\n  updateMainScreenFilled = (value: boolean) => {\r\n    this.mainScreenFilled.next(value);\r\n  };\r\n\r\n  updateLocalStreamScreen = (value: MediaStream | null) => {\r\n    this.localStreamScreen.next(value);\r\n  };\r\n\r\n  updateScreenAlreadyOn = (value: boolean) => {\r\n    this.screenAlreadyOn.next(value);\r\n  };\r\n\r\n  updateChatAlreadyOn = (value: boolean) => {\r\n    this.chatAlreadyOn.next(value);\r\n  };\r\n\r\n  updateRedirectURL = (value: string) => {\r\n    this.redirectURL.next(value);\r\n  };\r\n\r\n  updateOldAllStreams = (value: (Participant | Stream)[]) => {\r\n    this.oldAllStreams.next(value);\r\n  };\r\n\r\n  updateAdminVidID = (value: string) => {\r\n    this.adminVidID.next(value);\r\n  };\r\n\r\n  updateStreamNames = (value: Stream[]) => {\r\n    this.streamNames.next(value);\r\n  };\r\n\r\n  updateNon_alVideoStreams = (value: Participant[]) => {\r\n    this.non_alVideoStreams.next(value);\r\n  };\r\n\r\n  updateSortAudioLoudness = (value: boolean) => {\r\n    this.sortAudioLoudness.next(value);\r\n  };\r\n\r\n  updateAudioDecibels = (value: AudioDecibels[]) => {\r\n    this.audioDecibels.next(value);\r\n  };\r\n\r\n  updateMixed_alVideoStreams = (value: (Participant | Stream)[]) => {\r\n    this.mixed_alVideoStreams.next(value);\r\n  };\r\n\r\n  updateNon_alVideoStreams_muted = (value: Participant[]) => {\r\n    this.non_alVideoStreams_muted.next(value);\r\n  };\r\n\r\n  updatePaginatedStreams = (value: (Participant | Stream)[][]) => {\r\n    this.paginatedStreams.next(value);\r\n  };\r\n\r\n  updateLocalStreamAudio = (value: MediaStream | null) => {\r\n    this.localStreamAudio.next(value);\r\n  };\r\n\r\n  updateDefAudioID = (value: string) => {\r\n    this.defAudioID.next(value);\r\n  };\r\n\r\n  updateUserDefaultAudioInputDevice = (value: string) => {\r\n    this.userDefaultAudioInputDevice.next(value);\r\n  };\r\n\r\n  updateUserDefaultAudioOutputDevice = (value: string) => {\r\n    this.userDefaultAudioOutputDevice.next(value);\r\n  };\r\n\r\n  updatePrevAudioInputDevice = (value: string) => {\r\n    this.prevAudioInputDevice.next(value);\r\n  };\r\n\r\n  updatePrevVideoInputDevice = (value: string) => {\r\n    this.prevVideoInputDevice.next(value);\r\n  };\r\n\r\n  updateAudioPaused = (value: boolean) => {\r\n    this.audioPaused.next(value);\r\n  };\r\n\r\n  updateMainScreenPerson = (value: string) => {\r\n    this.mainScreenPerson.next(value);\r\n  };\r\n\r\n  updateAdminOnMainScreen = (value: boolean) => {\r\n    this.adminOnMainScreen.next(value);\r\n  };\r\n\r\n  updateScreenStates = (value: ScreenState[]) => {\r\n    this.screenStates.next(value);\r\n  };\r\n\r\n  updatePrevScreenStates = (value: ScreenState[]) => {\r\n    this.prevScreenStates.next(value);\r\n  };\r\n\r\n  updateUpdateDateState = (value: number | null) => {\r\n    this.updateDateState.next(value);\r\n  };\r\n\r\n  updateLastUpdate = (value: number | null) => {\r\n    this.lastUpdate.next(value);\r\n  };\r\n\r\n  updateNForReadjustRecord = (value: number) => {\r\n    this.nForReadjustRecord.next(value);\r\n  };\r\n\r\n  updateFixedPageLimit = (value: number) => {\r\n    this.fixedPageLimit.next(value);\r\n  };\r\n\r\n  updateRemoveAltGrid = (value: boolean) => {\r\n    this.removeAltGrid.next(value);\r\n  };\r\n\r\n  updateNForReadjust = (value: number) => {\r\n    this.nForReadjust.next(value);\r\n  };\r\n\r\n  updateLastReorderTime = (value: number) => {\r\n    this.lastReorderTime.next(value);\r\n  };\r\n\r\n  updateAudStreamNames = (value: Stream[]) => {\r\n    this.audStreamNames.next(value);\r\n  };\r\n\r\n  updateCurrentUserPage = (value: number) => {\r\n    this.currentUserPage.next(value);\r\n  };\r\n\r\n  updateMainHeightWidth = (value: number) => {\r\n    this.mainHeightWidth.next(value);\r\n  };\r\n\r\n  updatePrevMainHeightWidth = (value: number) => {\r\n    this.prevMainHeightWidth.next(value);\r\n  };\r\n\r\n  updatePrevDoPaginate = (value: boolean) => {\r\n    this.prevDoPaginate.next(value);\r\n  };\r\n\r\n  updateDoPaginate = (value: boolean) => {\r\n    this.doPaginate.next(value);\r\n  };\r\n\r\n  updateShareEnded = (value: boolean) => {\r\n    this.shareEnded.next(value);\r\n  };\r\n\r\n  updateLStreams = (value: (Participant | Stream)[]) => {\r\n    this.lStreams.next(value);\r\n  };\r\n\r\n  updateChatRefStreams = (value: (Participant | Stream)[]) => {\r\n    this.chatRefStreams.next(value);\r\n  };\r\n\r\n  updateControlHeight = (value: number) => {\r\n    this.controlHeight.next(value);\r\n  };\r\n\r\n  updateIsWideScreen = (value: boolean) => {\r\n    this.isWideScreen.next(value);\r\n  };\r\n\r\n  updateIsMediumScreen = (value: boolean) => {\r\n    this.isMediumScreen.next(value);\r\n  };\r\n\r\n  updateIsSmallScreen = (value: boolean) => {\r\n    this.isSmallScreen.next(value);\r\n  };\r\n\r\n  updateAddGrid = (value: boolean) => {\r\n    this.addGrid.next(value);\r\n  };\r\n\r\n  updateAddAltGrid = (value: boolean) => {\r\n    this.addAltGrid.next(value);\r\n  };\r\n\r\n  updateGridRows = (value: number) => {\r\n    this.gridRows.next(value);\r\n  };\r\n\r\n  updateGridCols = (value: number) => {\r\n    this.gridCols.next(value);\r\n  };\r\n\r\n  updateAltGridRows = (value: number) => {\r\n    this.altGridRows.next(value);\r\n  };\r\n\r\n  updateAltGridCols = (value: number) => {\r\n    this.altGridCols.next(value);\r\n  };\r\n\r\n  updateNumberPages = (value: number) => {\r\n    this.numberPages.next(value);\r\n  };\r\n\r\n  updateCurrentStreams = (value: (Participant | Stream)[]) => {\r\n    this.currentStreams.next(value);\r\n  };\r\n\r\n  updateShowMiniView = (value: boolean) => {\r\n    this.showMiniView.next(value);\r\n  };\r\n\r\n  updateNStream = (value: MediaStream | null) => {\r\n    this.nStream.next(value);\r\n  };\r\n\r\n  updateDefer_receive = (value: boolean) => {\r\n    this.defer_receive.next(value);\r\n  };\r\n\r\n  updateAllAudioStreams = (value: (Participant | Stream)[]) => {\r\n    this.allAudioStreams.next(value);\r\n  };\r\n\r\n  updateRemoteScreenStream = (value: Stream[]) => {\r\n    this.remoteScreenStream.next(value);\r\n  };\r\n\r\n  updateScreenProducer = (value: Producer | null) => {\r\n    this.screenProducer.next(value);\r\n  };\r\n\r\n  updateLocalScreenProducer = (value: Producer | null) => {\r\n    this.localScreenProducer.next(value);\r\n  };\r\n\r\n  updateGotAllVids = (value: boolean) => {\r\n    this.gotAllVids.next(value);\r\n  };\r\n\r\n  updatePaginationHeightWidth = (value: number) => {\r\n    this.paginationHeightWidth.next(value);\r\n  };\r\n\r\n  updatePaginationDirection = (value: 'horizontal' | 'vertical') => {\r\n    this.paginationDirection.next(value);\r\n  };\r\n\r\n  updateGridSizes = (value: GridSizes) => {\r\n    this.gridSizes.next(value);\r\n  };\r\n\r\n  updateScreenForceFullDisplay = (value: boolean) => {\r\n    this.screenForceFullDisplay.next(value);\r\n  };\r\n\r\n  updateMainGridStream = (value: CustomMediaComponent[]) => {\r\n    this.mainGridStream.next(value);\r\n  };\r\n\r\n  updateOtherGridStreams = (value: CustomMediaComponent[][]) => {\r\n    this.otherGridStreams.next(value);\r\n  };\r\n\r\n  updateAudioOnlyStreams = (value: CustomMediaComponent[]) => {\r\n    this.audioOnlyStreams.next(value);\r\n  };\r\n\r\n  updateVideoInputs = (value: MediaDeviceInfo[]) => {\r\n    this.videoInputs.next(value);\r\n  };\r\n\r\n  updateAudioInputs = (value: MediaDeviceInfo[]) => {\r\n    this.audioInputs.next(value);\r\n  };\r\n\r\n  updateMeetingProgressTime = (value: string) => {\r\n    this.meetingProgressTime.next(value);\r\n  };\r\n\r\n  updateMeetingElapsedTime = (value: number) => {\r\n    this.meetingElapsedTime.next(value);\r\n  };\r\n\r\n  updateRef_participants = (value: Participant[]) => {\r\n    this.ref_participants.next(value);\r\n  };\r\n\r\n  // Messages\r\n  messages = new BehaviorSubject<Message[]>([]);\r\n  startDirectMessage = new BehaviorSubject<boolean>(false);\r\n  directMessageDetails = new BehaviorSubject<Participant | null>(null);\r\n  showMessagesBadge = new BehaviorSubject<boolean>(false);\r\n\r\n  // Event Settings\r\n  audioSetting = new BehaviorSubject<string>('allow');\r\n  videoSetting = new BehaviorSubject<string>('allow');\r\n  screenshareSetting = new BehaviorSubject<string>('allow');\r\n  chatSetting = new BehaviorSubject<string>('allow');\r\n\r\n  // Display Settings\r\n  displayOption = new BehaviorSubject<string>('media');\r\n  autoWave = new BehaviorSubject<boolean>(true);\r\n  forceFullDisplay = new BehaviorSubject<boolean>(true);\r\n  prevForceFullDisplay = new BehaviorSubject<boolean>(false);\r\n  prevMeetingDisplayType = new BehaviorSubject<string>('video');\r\n\r\n  // Waiting Room\r\n  waitingRoomFilter = new BehaviorSubject<string>('');\r\n  waitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>(\r\n    this.useSeed && this.seedData?.waitingList ? this.seedData.waitingList : [],\r\n  );\r\n  waitingRoomCounter = new BehaviorSubject<number>(0);\r\n  filteredWaitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>(\r\n    this.useSeed && this.seedData?.waitingList ? this.seedData.waitingList : [],\r\n  );\r\n\r\n  // Requests\r\n  requestFilter = new BehaviorSubject<string>('');\r\n  requestList = new BehaviorSubject<Request[]>(\r\n    this.useSeed && this.seedData?.requests ? this.seedData.requests : [],\r\n  );\r\n  requestCounter = new BehaviorSubject<number>(0);\r\n  filteredRequestList = new BehaviorSubject<Request[]>(\r\n    this.useSeed && this.seedData?.requests ? this.seedData.requests : [],\r\n  );\r\n\r\n  // Total Requests and Waiting Room\r\n  totalReqWait = new BehaviorSubject<number>(0);\r\n\r\n  // Alerts\r\n  alertVisible = new BehaviorSubject<boolean>(false);\r\n  alertMessage = new BehaviorSubject<string>('');\r\n  alertType = new BehaviorSubject<'success' | 'danger'>('success');\r\n  alertDuration = new BehaviorSubject<number>(3000);\r\n\r\n  // Progress Timer\r\n  progressTimerVisible = new BehaviorSubject<boolean>(true);\r\n  progressTimerValue = new BehaviorSubject<number>(0);\r\n\r\n  // Menu Modals\r\n  isMenuModalVisible = new BehaviorSubject<boolean>(false);\r\n  isRecordingModalVisible = new BehaviorSubject<boolean>(false);\r\n  isSettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isRequestsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isWaitingModalVisible = new BehaviorSubject<boolean>(false);\r\n  isCoHostModalVisible = new BehaviorSubject<boolean>(false);\r\n  isMediaSettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isDisplaySettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Other Modals\r\n  isParticipantsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isMessagesModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfirmExitModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfirmHereModalVisible = new BehaviorSubject<boolean>(false);\r\n  isShareEventModalVisible = new BehaviorSubject<boolean>(false);\r\n  isLoadingModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Recording Options\r\n  recordingMediaOptions = new BehaviorSubject<string>('video');\r\n  recordingAudioOptions = new BehaviorSubject<string>('all');\r\n  recordingVideoOptions = new BehaviorSubject<string>('all');\r\n  recordingVideoType = new BehaviorSubject<string>('fullDisplay');\r\n  recordingVideoOptimized = new BehaviorSubject<boolean>(false);\r\n  recordingDisplayType = new BehaviorSubject<'video' | 'media' | 'all'>('video');\r\n  recordingAddHLS = new BehaviorSubject<boolean>(true);\r\n  recordingNameTags = new BehaviorSubject<boolean>(true);\r\n  recordingBackgroundColor = new BehaviorSubject<string>('#83c0e9');\r\n  recordingNameTagsColor = new BehaviorSubject<string>('#ffffff');\r\n  recordingAddText = new BehaviorSubject<boolean>(false);\r\n  recordingCustomText = new BehaviorSubject<string>('Add Text');\r\n  recordingCustomTextPosition = new BehaviorSubject<string>('top');\r\n  recordingCustomTextColor = new BehaviorSubject<string>('#ffffff');\r\n  recordingOrientationVideo = new BehaviorSubject<string>('landscape');\r\n  clearedToResume = new BehaviorSubject<boolean>(true);\r\n  clearedToRecord = new BehaviorSubject<boolean>(true);\r\n  recordState = new BehaviorSubject<string>('green');\r\n  showRecordButtons = new BehaviorSubject<boolean>(false);\r\n  recordingProgressTime = new BehaviorSubject<string>('00:00:00');\r\n  audioSwitching = new BehaviorSubject<boolean>(false);\r\n  videoSwitching = new BehaviorSubject<boolean>(false);\r\n\r\n  // Media States\r\n  videoAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  audioAlreadyOn = new BehaviorSubject<boolean>(false);\r\n\r\n  componentSizes = new BehaviorSubject<ComponentSizes>({\r\n    mainHeight: 0,\r\n    otherHeight: 0,\r\n    mainWidth: 0,\r\n    otherWidth: 0,\r\n  });\r\n\r\n  // Permissions\r\n  hasCameraPermission = new BehaviorSubject<boolean>(false);\r\n  hasAudioPermission = new BehaviorSubject<boolean>(false);\r\n\r\n  // Transports\r\n  transportCreated = new BehaviorSubject<boolean>(false);\r\n  localTransportCreated = new BehaviorSubject<boolean>(false);\r\n  transportCreatedVideo = new BehaviorSubject<boolean>(false);\r\n  transportCreatedAudio = new BehaviorSubject<boolean>(false);\r\n  transportCreatedScreen = new BehaviorSubject<boolean>(false);\r\n  producerTransport = new BehaviorSubject<Transport | null>(null);\r\n  localProducerTransport = new BehaviorSubject<Transport | null>(null);\r\n  videoProducer = new BehaviorSubject<Producer | null>(null);\r\n  localVideoProducer = new BehaviorSubject<Producer | null>(null);\r\n  params = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  videoParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  audioParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  audioProducer = new BehaviorSubject<Producer | null>(null);\r\n  audioLevel = new BehaviorSubject<number>(0);\r\n  localAudioProducer = new BehaviorSubject<Producer | null>(null);\r\n  consumerTransports = new BehaviorSubject<TransportType[]>([]);\r\n  consumingTransports = new BehaviorSubject<string[]>([]);\r\n\r\n  // Polls\r\n  polls = new BehaviorSubject<Poll[]>(\r\n    this.useSeed && this.seedData?.polls ? this.seedData.polls : [],\r\n  );\r\n  poll = new BehaviorSubject<Poll | null>(null);\r\n  isPollModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Background\r\n  customImage = new BehaviorSubject<string>('');\r\n  selectedImage = new BehaviorSubject<string>('');\r\n  segmentVideo = new BehaviorSubject<MediaStream | null>(null);\r\n  selfieSegmentation = new BehaviorSubject<SelfieSegmentation | null>(null);\r\n  pauseSegmentation = new BehaviorSubject<boolean>(false);\r\n  processedStream = new BehaviorSubject<MediaStream | null>(null);\r\n  keepBackground = new BehaviorSubject<boolean>(false);\r\n  backgroundHasChanged = new BehaviorSubject<boolean>(false);\r\n  virtualStream = new BehaviorSubject<MediaStream | null>(null);\r\n  mainCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  prevKeepBackground = new BehaviorSubject<boolean>(false);\r\n  appliedBackground = new BehaviorSubject<boolean>(false);\r\n  isBackgroundModalVisible = new BehaviorSubject<boolean>(false);\r\n  autoClickBackground = new BehaviorSubject<boolean>(false);\r\n\r\n  // Breakout Rooms\r\n  breakoutRooms = new BehaviorSubject<BreakoutParticipant[][]>(\r\n    this.useSeed && this.seedData?.breakoutRooms ? this.seedData.breakoutRooms : [],\r\n  );\r\n  currentRoomIndex = new BehaviorSubject<number>(0);\r\n  canStartBreakout = new BehaviorSubject<boolean>(false);\r\n  breakOutRoomStarted = new BehaviorSubject<boolean>(false);\r\n  breakOutRoomEnded = new BehaviorSubject<boolean>(false);\r\n  hostNewRoom = new BehaviorSubject<number>(-1);\r\n  limitedBreakRoom = new BehaviorSubject<BreakoutParticipant[]>([]);\r\n  mainRoomsLength = new BehaviorSubject<number>(0);\r\n  memberRoom = new BehaviorSubject<number>(-1);\r\n  isBreakoutRoomsModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Whiteboard\r\n  whiteboardUsers = new BehaviorSubject<WhiteboardUser[]>(\r\n    this.useSeed && this.seedData?.whiteboardUsers ? this.seedData.whiteboardUsers : [],\r\n  );\r\n  currentWhiteboardIndex = new BehaviorSubject<number>(0);\r\n  canStartWhiteboard = new BehaviorSubject<boolean>(false);\r\n  whiteboardStarted = new BehaviorSubject<boolean>(false);\r\n  whiteboardEnded = new BehaviorSubject<boolean>(false);\r\n  whiteboardLimit = new BehaviorSubject<number>(4);\r\n  isWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfigureWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\r\n  shapes = new BehaviorSubject<Shape[]>([]);\r\n  useImageBackground = new BehaviorSubject<boolean>(true);\r\n  redoStack = new BehaviorSubject<Shape[]>([]);\r\n  undoStack = new BehaviorSubject<string[]>([]);\r\n  canvasStream = new BehaviorSubject<MediaStream | null>(null);\r\n  canvasWhiteboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n\r\n  // Screenboard\r\n  canvasScreenboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  processedScreenStream = new BehaviorSubject<MediaStream | null>(null);\r\n  annotateScreenStream = new BehaviorSubject<boolean>(false);\r\n  mainScreenCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  isScreenboardModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  //state variables for the control buttons\r\n  micActive = new BehaviorSubject<boolean>(\r\n    this.audioAlreadyOn.value ? this.audioAlreadyOn.value : false,\r\n  );\r\n  videoActive = new BehaviorSubject<boolean>(\r\n    this.videoAlreadyOn.value ? this.videoAlreadyOn.value : false,\r\n  );\r\n  screenShareActive = new BehaviorSubject<boolean>(false);\r\n  endCallActive = new BehaviorSubject<boolean>(false);\r\n  participantsActive = new BehaviorSubject<boolean>(false);\r\n  menuActive = new BehaviorSubject<boolean>(false);\r\n  commentsActive = new BehaviorSubject<boolean>(false);\r\n\r\n  // Update functions\r\n  updateMessages = (value: Message[]) => {\r\n    this.messages.next(value);\r\n  };\r\n\r\n  updateStartDirectMessage = (value: boolean) => {\r\n    this.startDirectMessage.next(value);\r\n  };\r\n\r\n  updateDirectMessageDetails = (value: Participant | null) => {\r\n    this.directMessageDetails.next(value);\r\n  };\r\n\r\n  updateShowMessagesBadge = (value: boolean) => {\r\n    this.showMessagesBadge.next(value);\r\n  };\r\n\r\n  updateAudioSetting = (value: string) => {\r\n    this.audioSetting.next(value);\r\n  };\r\n\r\n  updateVideoSetting = (value: string) => {\r\n    this.videoSetting.next(value);\r\n  };\r\n\r\n  updateScreenshareSetting = (value: string) => {\r\n    this.screenshareSetting.next(value);\r\n  };\r\n\r\n  updateChatSetting = (value: string) => {\r\n    this.chatSetting.next(value);\r\n  };\r\n\r\n  updateDisplayOption = (value: string) => {\r\n    this.displayOption.next(value);\r\n  };\r\n\r\n  updateAutoWave = (value: boolean) => {\r\n    this.autoWave.next(value);\r\n  };\r\n\r\n  updateForceFullDisplay = (value: boolean) => {\r\n    this.forceFullDisplay.next(value);\r\n  };\r\n\r\n  updatePrevForceFullDisplay = (value: boolean) => {\r\n    this.prevForceFullDisplay.next(value);\r\n  };\r\n\r\n  updatePrevMeetingDisplayType = (value: string) => {\r\n    this.prevMeetingDisplayType.next(value);\r\n  };\r\n\r\n  updateWaitingRoomCounter = (value: number) => {\r\n    this.waitingRoomCounter.next(value);\r\n  };\r\n\r\n  updateWaitingRoomFilter = (value: string) => {\r\n    this.waitingRoomFilter.next(value);\r\n  };\r\n\r\n  updateWaitingRoomList = (value: WaitingRoomParticipant[]) => {\r\n    this.waitingRoomList.next(value);\r\n    this.filteredWaitingRoomList.next(value);\r\n    this.waitingRoomCounter.next(value.length);\r\n  };\r\n\r\n  onWaitingRoomFilterChange = (value: string) => {\r\n    if (value !== '' && value.length > 0) {\r\n      const filteredWaitingRoom = this.waitingRoomList\r\n        .getValue()\r\n        .filter((waitingRoom: WaitingRoomParticipant) => {\r\n          return waitingRoom.name.toLowerCase().includes(value.toLowerCase());\r\n        });\r\n      this.filteredWaitingRoomList.next(filteredWaitingRoom);\r\n      this.waitingRoomCounter.next(filteredWaitingRoom.length);\r\n    } else {\r\n      this.filteredWaitingRoomList.next(this.waitingRoomList.getValue());\r\n      this.waitingRoomCounter.next(this.waitingRoomList.getValue().length);\r\n    }\r\n  };\r\n\r\n  onWaitingRoomClose = () => {\r\n    this.updateIsWaitingModalVisible(false);\r\n  };\r\n\r\n  updateRequestCounter = (value: number) => {\r\n    this.requestCounter.next(value);\r\n  };\r\n\r\n  updateRequestFilter = (value: string) => {\r\n    this.requestFilter.next(value);\r\n  };\r\n\r\n  updateRequestList = (value: Request[]) => {\r\n    this.requestList.next(value);\r\n    this.filteredRequestList.next(value);\r\n    this.requestCounter.next(value.length);\r\n  };\r\n\r\n  onRequestFilterChange = (value: string) => {\r\n    if (value !== '' && value.length > 0) {\r\n      const filteredRequest = this.requestList.getValue().filter((request: Request) => {\r\n        return request?.name?.toLowerCase().includes(value.toLowerCase());\r\n      });\r\n      this.filteredRequestList.next(filteredRequest);\r\n      this.requestCounter.next(filteredRequest.length);\r\n    } else {\r\n      this.filteredRequestList.next(this.requestList.getValue());\r\n      this.requestCounter.next(this.requestList.getValue().length);\r\n    }\r\n  };\r\n\r\n  onRequestClose = () => {\r\n    this.updateIsRequestsModalVisible(false);\r\n  };\r\n\r\n  updateTotalReqWait = (value: number) => {\r\n    this.totalReqWait.next(value);\r\n  };\r\n\r\n  updateAlertVisible = (value: boolean) => {\r\n    this.alertVisible.next(value);\r\n  };\r\n\r\n  updateAlertMessage = (value: string) => {\r\n    this.alertMessage.next(value);\r\n  };\r\n\r\n  updateAlertType = (value: 'success' | 'danger') => {\r\n    this.alertType.next(value);\r\n  };\r\n\r\n  updateAlertDuration = (value: number) => {\r\n    this.alertDuration.next(value);\r\n  };\r\n\r\n  updateProgressTimerVisible = (value: boolean) => {\r\n    this.progressTimerVisible.next(value);\r\n  };\r\n\r\n  updateProgressTimerValue = (value: number) => {\r\n    this.progressTimerValue.next(value);\r\n  };\r\n\r\n  updateIsMenuModalVisible = (value: boolean) => {\r\n    this.isMenuModalVisible.next(value);\r\n  };\r\n\r\n  updateIsRecordingModalVisible = (value: boolean) => {\r\n    this.isRecordingModalVisible.next(value);\r\n    if (value) {\r\n      this.updateConfirmedToRecord(false);\r\n    } else {\r\n      if (\r\n        this.clearedToRecord.getValue() &&\r\n        this.clearedToResume.getValue() &&\r\n        this.recordStarted.getValue()\r\n      ) {\r\n        this.updateShowRecordButtons(true);\r\n      }\r\n    }\r\n  };\r\n\r\n  updateIsSettingsModalVisible = (value: boolean) => {\r\n    this.isSettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsRequestsModalVisible = (value: boolean) => {\r\n    this.isRequestsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsWaitingModalVisible = (value: boolean) => {\r\n    this.isWaitingModalVisible.next(value);\r\n  };\r\n\r\n  updateIsCoHostModalVisible = (value: boolean) => {\r\n    this.isCoHostModalVisible.next(value);\r\n  };\r\n\r\n  updateIsMediaSettingsModalVisible = (value: boolean) => {\r\n    this.isMediaSettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsDisplaySettingsModalVisible = (value: boolean) => {\r\n    this.isDisplaySettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsParticipantsModalVisible = (value: boolean) => {\r\n    this.isParticipantsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsMessagesModalVisible = (value: boolean) => {\r\n    this.isMessagesModalVisible.next(value);\r\n    if (!value) {\r\n      this.updateShowMessagesBadge(false);\r\n    }\r\n  };\r\n\r\n  updateIsConfirmExitModalVisible = (value: boolean) => {\r\n    this.isConfirmExitModalVisible.next(value);\r\n  };\r\n\r\n  updateIsConfirmHereModalVisible = (value: boolean) => {\r\n    this.isConfirmHereModalVisible.next(value);\r\n  };\r\n\r\n  updateIsLoadingModalVisible = (value: boolean) => {\r\n    this.isLoadingModalVisible.next(value);\r\n  };\r\n\r\n  updateIsShareEventModalVisible = (value: boolean) => {\r\n    this.isShareEventModalVisible.next(value);\r\n  };\r\n\r\n  updateRecordingMediaOptions = (value: string) => {\r\n    this.recordingMediaOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAudioOptions = (value: string) => {\r\n    this.recordingAudioOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoOptions = (value: string) => {\r\n    this.recordingVideoOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoType = (value: string) => {\r\n    this.recordingVideoType.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoOptimized = (value: boolean) => {\r\n    this.recordingVideoOptimized.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingDisplayType = (value: 'video' | 'media' | 'all') => {\r\n    this.recordingDisplayType.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAddHLS = (value: boolean) => {\r\n    this.recordingAddHLS.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAddText = (value: boolean) => {\r\n    this.recordingAddText.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomText = (value: string) => {\r\n    this.recordingCustomText.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomTextPosition = (value: string) => {\r\n    this.recordingCustomTextPosition.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomTextColor = (value: string) => {\r\n    this.recordingCustomTextColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingNameTags = (value: boolean) => {\r\n    this.recordingNameTags.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingBackgroundColor = (value: string) => {\r\n    this.recordingBackgroundColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingNameTagsColor = (value: string) => {\r\n    this.recordingNameTagsColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingOrientationVideo = (value: string) => {\r\n    this.recordingOrientationVideo.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateClearedToResume = (value: boolean) => {\r\n    this.clearedToResume.next(value);\r\n  };\r\n\r\n  updateClearedToRecord = (value: boolean) => {\r\n    this.clearedToRecord.next(value);\r\n  };\r\n\r\n  updateRecordState = (value: string) => {\r\n    if (this.recordStarted.value && !this.recordStopped.value) {\r\n      if (!this.recordPaused.value) {\r\n        this.recordState.next('red');\r\n      } else {\r\n        this.recordState.next('yellow');\r\n      }\r\n    } else {\r\n      this.recordState.next(value);\r\n    }\r\n    this.recordState.next(value);\r\n  };\r\n\r\n  updateShowRecordButtons = (value: boolean) => {\r\n    this.showRecordButtons.next(value);\r\n  };\r\n\r\n  updateRecordingProgressTime = (value: string) => {\r\n    this.recordingProgressTime.next(value);\r\n    this.updateRecordTimerWidget();\r\n  };\r\n\r\n  updateAudioSwitching = (value: boolean) => {\r\n    this.audioSwitching.next(value);\r\n  };\r\n\r\n  updateVideoSwitching = (value: boolean) => {\r\n    this.videoSwitching.next(value);\r\n  };\r\n\r\n  updateVideoAlreadyOn = (value: boolean) => {\r\n    this.videoAlreadyOn.next(value);\r\n    this.videoActive.next(value);\r\n  };\r\n\r\n  updateAudioAlreadyOn = (value: boolean) => {\r\n    this.audioAlreadyOn.next(value);\r\n    this.micActive.next(value);\r\n  };\r\n\r\n  updateComponentSizes = (sizes: ComponentSizes) => {\r\n    this.componentSizes.next(sizes);\r\n  };\r\n\r\n  updateHasCameraPermission = (value: boolean) => {\r\n    this.hasCameraPermission.next(value);\r\n  };\r\n\r\n  updateHasAudioPermission = (value: boolean) => {\r\n    this.hasAudioPermission.next(value);\r\n  };\r\n\r\n  requestPermissionCamera(): Promise<string> {\r\n    // Implement the request permission logic here\r\n    return Promise.resolve('granted');\r\n  }\r\n\r\n  requestPermissionAudio(): Promise<string> {\r\n    // Implement the request permission logic here\r\n    return Promise.resolve('granted');\r\n  }\r\n\r\n  updateTransportCreated = (value: boolean) => {\r\n    this.transportCreated.next(value);\r\n  };\r\n\r\n  updateLocalTransportCreated = (value: boolean) => {\r\n    this.localTransportCreated.next(value);\r\n  };\r\n\r\n  updateTransportCreatedVideo = (value: boolean) => {\r\n    this.transportCreatedVideo.next(value);\r\n  };\r\n\r\n  updateTransportCreatedAudio = (value: boolean) => {\r\n    this.transportCreatedAudio.next(value);\r\n  };\r\n\r\n  updateTransportCreatedScreen = (value: boolean) => {\r\n    this.transportCreatedScreen.next(value);\r\n  };\r\n\r\n  updateProducerTransport = (value: Transport | null) => {\r\n    this.producerTransport.next(value);\r\n  };\r\n\r\n  updateLocalProducerTransport = (value: Transport | null) => {\r\n    this.localProducerTransport.next(value);\r\n  };\r\n\r\n  updateVideoProducer = (value: Producer | null) => {\r\n    this.videoProducer.next(value);\r\n  };\r\n\r\n  updateLocalVideoProducer = (value: Producer | null) => {\r\n    this.localVideoProducer.next(value);\r\n  }\r\n\r\n  updateParams = (value: ProducerOptions) => {\r\n    this.params.next(value);\r\n  };\r\n\r\n  updateVideoParams = (value: ProducerOptions) => {\r\n    this.videoParams.next(value);\r\n  };\r\n\r\n  updateAudioParams = (value: ProducerOptions) => {\r\n    this.audioParams.next(value);\r\n  };\r\n\r\n  updateAudioProducer = (value: Producer | null) => {\r\n    this.audioProducer.next(value);\r\n  };\r\n\r\n  updateAudioLevel = (value: number) => {\r\n    this.audioLevel.next(value);\r\n  };\r\n\r\n  updateLocalAudioProducer = (value: Producer | null) => {\r\n    this.localAudioProducer.next(value);\r\n  };\r\n\r\n  updateConsumerTransports = (value: TransportType[]) => {\r\n    this.consumerTransports.next(value);\r\n  };\r\n\r\n  updateConsumingTransports = (value: string[]) => {\r\n    this.consumingTransports.next(value);\r\n  };\r\n\r\n  updatePolls = (value: Poll[]) => {\r\n    this.polls.next(value);\r\n  };\r\n\r\n  updatePoll = (value: Poll | null) => {\r\n    this.poll.next(value);\r\n  };\r\n\r\n  updateIsPollModalVisible = (value: boolean) => {\r\n    this.isPollModalVisible.next(value);\r\n  };\r\n\r\n  updateCustomImage = (value: string) => {\r\n    this.customImage.next(value);\r\n  };\r\n\r\n  updateSelectedImage = (value: string) => {\r\n    this.selectedImage.next(value);\r\n  };\r\n\r\n  updateSegmentVideo = (value: MediaStream | null) => {\r\n    this.segmentVideo.next(value);\r\n  };\r\n\r\n  updateSelfieSegmentation = (value: SelfieSegmentation | null) => {\r\n    this.selfieSegmentation.next(value);\r\n  };\r\n\r\n  updatePauseSegmentation = (value: boolean) => {\r\n    this.pauseSegmentation.next(value);\r\n  };\r\n\r\n  updateProcessedStream = (value: MediaStream | null) => {\r\n    this.processedStream.next(value);\r\n  };\r\n\r\n  updateKeepBackground = (value: boolean) => {\r\n    this.keepBackground.next(value);\r\n  };\r\n\r\n  updateBackgroundHasChanged = (value: boolean) => {\r\n    this.backgroundHasChanged.next(value);\r\n  };\r\n\r\n  updateVirtualStream = (value: MediaStream | null) => {\r\n    this.virtualStream.next(value);\r\n  };\r\n\r\n  updateMainCanvas = (value: HTMLCanvasElement | null) => {\r\n    this.mainCanvas.next(value);\r\n  };\r\n\r\n  updatePrevKeepBackground = (value: boolean) => {\r\n    this.prevKeepBackground.next(value);\r\n  };\r\n\r\n  updateAppliedBackground = (value: boolean) => {\r\n    this.appliedBackground.next(value);\r\n  };\r\n\r\n  updateIsBackgroundModalVisible = (value: boolean) => {\r\n    this.isBackgroundModalVisible.next(value);\r\n  };\r\n\r\n  updateAutoClickBackground = (value: boolean) => {\r\n    this.autoClickBackground.next(value);\r\n  };\r\n\r\n  updateBreakoutRooms = (value: BreakoutParticipant[][]) => {\r\n    this.breakoutRooms.next(value);\r\n  };\r\n\r\n  updateCurrentRoomIndex = (value: number) => {\r\n    this.currentRoomIndex.next(value);\r\n  };\r\n\r\n  updateCanStartBreakout = (value: boolean) => {\r\n    this.canStartBreakout.next(value);\r\n  };\r\n\r\n  updateBreakOutRoomStarted = (value: boolean) => {\r\n    this.breakOutRoomStarted.next(value);\r\n  };\r\n\r\n  updateBreakOutRoomEnded = (value: boolean) => {\r\n    this.breakOutRoomEnded.next(value);\r\n  };\r\n\r\n  updateHostNewRoom = (value: number) => {\r\n    this.hostNewRoom.next(value);\r\n  };\r\n\r\n  updateLimitedBreakRoom = (value: BreakoutParticipant[]) => {\r\n    this.limitedBreakRoom.next(value);\r\n  };\r\n\r\n  updateMainRoomsLength = (value: number) => {\r\n    this.mainRoomsLength.next(value);\r\n  };\r\n\r\n  updateMemberRoom = (value: number) => {\r\n    this.memberRoom.next(value);\r\n  };\r\n\r\n  updateIsBreakoutRoomsModalVisible = (value: boolean) => {\r\n    this.isBreakoutRoomsModalVisible.next(value);\r\n  };\r\n\r\n  updateWhiteboardUsers = (value: WhiteboardUser[]) => {\r\n    this.whiteboardUsers.next(value);\r\n  };\r\n\r\n  updateCurrentWhiteboardIndex = (value: number) => {\r\n    this.currentWhiteboardIndex.next(value);\r\n  };\r\n\r\n  updateCanStartWhiteboard = (value: boolean) => {\r\n    this.canStartWhiteboard.next(value);\r\n  };\r\n\r\n  updateWhiteboardStarted = (value: boolean) => {\r\n    this.whiteboardStarted.next(value);\r\n  };\r\n\r\n  updateWhiteboardEnded = (value: boolean) => {\r\n    this.whiteboardEnded.next(value);\r\n  };\r\n\r\n  updateWhiteboardLimit = (value: number) => {\r\n    this.whiteboardLimit.next(value);\r\n  };\r\n\r\n  updateIsWhiteboardModalVisible = (value: boolean) => {\r\n    this.isWhiteboardModalVisible.next(value);\r\n  };\r\n\r\n  updateIsConfigureWhiteboardModalVisible = (value: boolean) => {\r\n    this.isConfigureWhiteboardModalVisible.next(value);\r\n  };\r\n\r\n  updateShapes = (value: Shape[]) => {\r\n    this.shapes.next(value);\r\n  };\r\n\r\n  updateUseImageBackground = (value: boolean) => {\r\n    this.useImageBackground.next(value);\r\n  };\r\n\r\n  updateRedoStack = (value: Shape[]) => {\r\n    this.redoStack.next(value);\r\n  };\r\n\r\n  updateUndoStack = (value: string[]) => {\r\n    this.undoStack.next(value);\r\n  };\r\n\r\n  updateCanvasStream = (value: MediaStream | null) => {\r\n    this.canvasStream.next(value);\r\n  };\r\n\r\n  updateCanvasWhiteboard = (value: HTMLCanvasElement | null) => {\r\n    this.canvasWhiteboard.next(value);\r\n  };\r\n\r\n  updateCanvasScreenboard = (value: HTMLCanvasElement | null) => {\r\n    this.canvasScreenboard.next(value);\r\n  };\r\n\r\n  updateProcessedScreenStream = (value: MediaStream | null) => {\r\n    this.processedScreenStream.next(value);\r\n  };\r\n\r\n  updateAnnotateScreenStream = (value: boolean) => {\r\n    this.annotateScreenStream.next(value);\r\n  };\r\n\r\n  updateMainScreenCanvas = (value: HTMLCanvasElement | null) => {\r\n    this.mainScreenCanvas.next(value);\r\n  };\r\n\r\n  updateIsScreenboardModalVisible = (value: boolean) => {\r\n    this.isScreenboardModalVisible.next(value);\r\n  };\r\n\r\n  checkOrientation = () => {\r\n    const isPortrait = window.matchMedia('(orientation: portrait)').matches;\r\n    return isPortrait ? 'portrait' : 'landscape';\r\n  };\r\n\r\n  showAlert = ({\r\n    message,\r\n    type,\r\n    duration = 3000,\r\n  }: {\r\n    message: string;\r\n    type: 'success' | 'danger';\r\n    duration?: number;\r\n  }) => {\r\n    this.updateAlertMessage(message);\r\n    this.updateAlertType(type);\r\n    this.updateAlertDuration(duration);\r\n    this.updateAlertVisible(true);\r\n  };\r\n\r\n  getAllParams() {\r\n    return {\r\n      localUIMode: this.localUIMode.value, // Local UI mode\r\n\r\n      // Room Details\r\n      roomName: this.roomName.value,\r\n      member: this.member.value,\r\n      adminPasscode: this.adminPasscode.value,\r\n      youAreCoHost: this.youAreCoHost.value,\r\n      youAreHost: this.youAreHost.value,\r\n      islevel: this.islevel.value,\r\n      confirmedToRecord: this.confirmedToRecord.value,\r\n      meetingDisplayType: this.meetingDisplayType.value,\r\n      meetingVideoOptimized: this.meetingVideoOptimized.value,\r\n      eventType: this.eventType.value,\r\n      participants: this.participants.value,\r\n      filteredParticipants: this.filteredParticipants.value,\r\n      participantsCounter: this.participantsCounter.value,\r\n      participantsFilter: this.participantsFilter.value,\r\n\r\n      // More room details - media\r\n      consume_sockets: this.consume_sockets.value,\r\n      rtpCapabilities: this.rtpCapabilities.value,\r\n      roomRecvIPs: this.roomRecvIPs.value,\r\n      meetingRoomParams: this.meetingRoomParams.value,\r\n      itemPageLimit: this.itemPageLimit.value,\r\n      audioOnlyRoom: this.audioOnlyRoom.value,\r\n      addForBasic: this.addForBasic.value,\r\n      screenPageLimit: this.screenPageLimit.value,\r\n      shareScreenStarted: this.shareScreenStarted.value,\r\n      shared: this.shared.value,\r\n      targetOrientation: this.targetOrientation.value,\r\n      targetResolution: this.targetResolution.value,\r\n      targetResolutionHost: this.targetResolutionHost.value,\r\n      vidCons: this.vidCons.value,\r\n      frameRate: this.frameRate.value,\r\n      hParams: this.hParams.value,\r\n      vParams: this.vParams.value,\r\n      screenParams: this.screenParams.value,\r\n      aParams: this.aParams.value,\r\n\r\n      // More room details - recording\r\n      recordingAudioPausesLimit: this.recordingAudioPausesLimit.value,\r\n      recordingAudioPausesCount: this.recordingAudioPausesCount.value,\r\n      recordingAudioSupport: this.recordingAudioSupport.value,\r\n      recordingAudioPeopleLimit: this.recordingAudioPeopleLimit.value,\r\n      recordingAudioParticipantsTimeLimit: this.recordingAudioParticipantsTimeLimit.value,\r\n      recordingVideoPausesCount: this.recordingVideoPausesCount.value,\r\n      recordingVideoPausesLimit: this.recordingVideoPausesLimit.value,\r\n      recordingVideoSupport: this.recordingVideoSupport.value,\r\n      recordingVideoPeopleLimit: this.recordingVideoPeopleLimit.value,\r\n      recordingVideoParticipantsTimeLimit: this.recordingVideoParticipantsTimeLimit.value,\r\n      recordingAllParticipantsSupport: this.recordingAllParticipantsSupport.value,\r\n      recordingVideoParticipantsSupport: this.recordingVideoParticipantsSupport.value,\r\n      recordingAllParticipantsFullRoomSupport: this.recordingAllParticipantsFullRoomSupport.value,\r\n      recordingVideoParticipantsFullRoomSupport:\r\n        this.recordingVideoParticipantsFullRoomSupport.value,\r\n      recordingPreferredOrientation: this.recordingPreferredOrientation.value,\r\n      recordingSupportForOtherOrientation: this.recordingSupportForOtherOrientation.value,\r\n      recordingMultiFormatsSupport: this.recordingMultiFormatsSupport.value,\r\n\r\n      userRecordingParams: this.userRecordingParams.value,\r\n      canRecord: this.canRecord.value,\r\n      startReport: this.startReport.value,\r\n      endReport: this.endReport.value,\r\n      recordStartTime: this.recordStartTime.value,\r\n      recordElapsedTime: this.recordElapsedTime.value,\r\n      isTimerRunning: this.isTimerRunning.value,\r\n      canPauseResume: this.canPauseResume.value,\r\n      recordChangeSeconds: this.recordChangeSeconds.value,\r\n      pauseLimit: this.pauseLimit.value,\r\n      pauseRecordCount: this.pauseRecordCount.value,\r\n      canLaunchRecord: this.canLaunchRecord.value,\r\n      stopLaunchRecord: this.stopLaunchRecord.value,\r\n\r\n      participantsAll: this.participantsAll.value,\r\n\r\n      firstAll: this.firstAll.value,\r\n      updateMainWindow: this.updateMainWindow.value,\r\n      first_round: this.first_round.value,\r\n      landScaped: this.landScaped.value,\r\n      lock_screen: this.lock_screen.value,\r\n      screenId: this.screenId.value,\r\n      allVideoStreams: this.allVideoStreams.value,\r\n      newLimitedStreams: this.newLimitedStreams.value,\r\n      newLimitedStreamsIDs: this.newLimitedStreamsIDs.value,\r\n      activeSounds: this.activeSounds.value,\r\n      screenShareIDStream: this.screenShareIDStream.value,\r\n      screenShareNameStream: this.screenShareNameStream.value,\r\n      adminIDStream: this.adminIDStream.value,\r\n      adminNameStream: this.adminNameStream.value,\r\n      youYouStream: this.youYouStream.value,\r\n      youYouStreamIDs: this.youYouStreamIDs.value,\r\n      localStream: this.localStream.value,\r\n      recordStarted: this.recordStarted.value,\r\n      recordResumed: this.recordResumed.value,\r\n      recordPaused: this.recordPaused.value,\r\n      recordStopped: this.recordStopped.value,\r\n      adminRestrictSetting: this.adminRestrictSetting.value,\r\n      videoRequestState: this.videoRequestState.value,\r\n      videoRequestTime: this.videoRequestTime.value,\r\n      videoAction: this.videoAction.value,\r\n      localStreamVideo: this.localStreamVideo.value,\r\n      userDefaultVideoInputDevice: this.userDefaultVideoInputDevice.value,\r\n      currentFacingMode: this.currentFacingMode.value,\r\n      prevFacingMode: this.prevFacingMode.value,\r\n      defVideoID: this.defVideoID.value,\r\n      allowed: this.allowed.value,\r\n      dispActiveNames: this.dispActiveNames.value,\r\n      p_dispActiveNames: this.p_dispActiveNames.value,\r\n      activeNames: this.activeNames.value,\r\n      prevActiveNames: this.prevActiveNames.value,\r\n      p_activeNames: this.p_activeNames.value,\r\n      membersReceived: this.membersReceived.value,\r\n      deferScreenReceived: this.deferScreenReceived.value,\r\n      hostFirstSwitch: this.hostFirstSwitch.value,\r\n      micAction: this.micAction.value,\r\n      screenAction: this.screenAction.value,\r\n      chatAction: this.chatAction.value,\r\n      audioRequestState: this.audioRequestState.value,\r\n      screenRequestState: this.screenRequestState.value,\r\n      chatRequestState: this.chatRequestState.value,\r\n      audioRequestTime: this.audioRequestTime.value,\r\n      screenRequestTime: this.screenRequestTime.value,\r\n      chatRequestTime: this.chatRequestTime.value,\r\n      updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\r\n      oldSoundIds: this.oldSoundIds.value,\r\n      hostLabel: this.hostLabel.value,\r\n      mainScreenFilled: this.mainScreenFilled.value,\r\n      localStreamScreen: this.localStreamScreen.value,\r\n      screenAlreadyOn: this.screenAlreadyOn.value,\r\n      chatAlreadyOn: this.chatAlreadyOn.value,\r\n      redirectURL: this.redirectURL.value,\r\n      oldAllStreams: this.oldAllStreams.value,\r\n      adminVidID: this.adminVidID.value,\r\n      streamNames: this.streamNames.value,\r\n      non_alVideoStreams: this.non_alVideoStreams.value,\r\n      sortAudioLoudness: this.sortAudioLoudness.value,\r\n      audioDecibels: this.audioDecibels.value,\r\n      mixed_alVideoStreams: this.mixed_alVideoStreams.value,\r\n      non_alVideoStreams_muted: this.non_alVideoStreams_muted.value,\r\n      paginatedStreams: this.paginatedStreams.value,\r\n      localStreamAudio: this.localStreamAudio.value,\r\n      defAudioID: this.defAudioID.value,\r\n      userDefaultAudioInputDevice: this.userDefaultAudioInputDevice.value,\r\n      userDefaultAudioOutputDevice: this.userDefaultAudioOutputDevice.value,\r\n      prevAudioInputDevice: this.prevAudioInputDevice.value,\r\n      prevVideoInputDevice: this.prevVideoInputDevice.value,\r\n      audioPaused: this.audioPaused.value,\r\n      mainScreenPerson: this.mainScreenPerson.value,\r\n      adminOnMainScreen: this.adminOnMainScreen.value,\r\n      screenStates: this.screenStates.value,\r\n      prevScreenStates: this.prevScreenStates.value,\r\n      updateDateState: this.updateDateState.value,\r\n      lastUpdate: this.lastUpdate.value,\r\n      nForReadjustRecord: this.nForReadjustRecord.value,\r\n      fixedPageLimit: this.fixedPageLimit.value,\r\n      removeAltGrid: this.removeAltGrid.value,\r\n      nForReadjust: this.nForReadjust.value,\r\n      lastReorderTime: this.lastReorderTime.value,\r\n      reorderInterval: this.reorderInterval.value,\r\n      fastReorderInterval: this.fastReorderInterval.value,\r\n      audStreamNames: this.audStreamNames.value,\r\n      currentUserPage: this.currentUserPage.value,\r\n      mainHeightWidth: this.mainHeightWidth.value,\r\n      prevMainHeightWidth: this.prevMainHeightWidth.value,\r\n      prevDoPaginate: this.prevDoPaginate.value,\r\n      doPaginate: this.doPaginate.value,\r\n      shareEnded: this.shareEnded.value,\r\n      lStreams: this.lStreams.value,\r\n      chatRefStreams: this.chatRefStreams.value,\r\n      controlHeight: this.controlHeight.value,\r\n      isWideScreen: this.isWideScreen.value,\r\n      isMediumScreen: this.isMediumScreen.value,\r\n      isSmallScreen: this.isSmallScreen.value,\r\n      addGrid: this.addGrid.value,\r\n      addAltGrid: this.addAltGrid.value,\r\n      gridRows: this.gridRows.value,\r\n      gridCols: this.gridCols.value,\r\n      altGridRows: this.altGridRows.value,\r\n      altGridCols: this.altGridCols.value,\r\n      numberPages: this.numberPages.value,\r\n      currentStreams: this.currentStreams.value,\r\n      showMiniView: this.showMiniView.value,\r\n      nStream: this.nStream.value,\r\n      defer_receive: this.defer_receive.value,\r\n      allAudioStreams: this.allAudioStreams.value,\r\n      screenProducer: this.screenProducer.value,\r\n      remoteScreenStream: this.remoteScreenStream.value,\r\n      gotAllVids: this.gotAllVids.value,\r\n      paginationHeightWidth: this.paginationHeightWidth.value,\r\n      paginationDirection: this.paginationDirection.value,\r\n      gridSizes: this.gridSizes.value,\r\n      screenForceFullDisplay: this.screenForceFullDisplay.value,\r\n      mainGridStream: this.mainGridStream.value,\r\n      otherGridStreams: this.otherGridStreams.value,\r\n      audioOnlyStreams: this.audioOnlyStreams.value,\r\n      videoInputs: this.videoInputs.value,\r\n      audioInputs: this.audioInputs.value,\r\n      meetingProgressTime: this.meetingProgressTime.value,\r\n      meetingElapsedTime: this.meetingElapsedTime.value,\r\n\r\n      ref_participants: this.ref_participants.value,\r\n\r\n      messages: this.messages.value,\r\n      startDirectMessage: this.startDirectMessage.value,\r\n      directMessageDetails: this.directMessageDetails.value,\r\n      coHost: this.coHost.value,\r\n      coHostResponsibility: this.coHostResponsibility.value,\r\n\r\n      // Event settings\r\n      audioSetting: this.audioSetting.value,\r\n      videoSetting: this.videoSetting.value,\r\n      screenshareSetting: this.screenshareSetting.value,\r\n      chatSetting: this.chatSetting.value,\r\n\r\n      // Display settings\r\n      autoWave: this.autoWave.value,\r\n      forceFullDisplay: this.forceFullDisplay.value,\r\n      prevForceFullDisplay: this.prevForceFullDisplay.value,\r\n      prevMeetingDisplayType: this.prevMeetingDisplayType.value,\r\n\r\n      // Waiting room\r\n      waitingRoomFilter: this.waitingRoomFilter.value,\r\n      waitingRoomList: this.waitingRoomList.value,\r\n      waitingRoomCounter: this.waitingRoomCounter.value,\r\n      filteredWaitingRoomList: this.filteredWaitingRoomList.value,\r\n\r\n      // Requests\r\n      requestFilter: this.requestFilter.value,\r\n      requestList: this.requestList.value,\r\n      requestCounter: this.requestCounter.value,\r\n      filteredRequestList: this.filteredRequestList.value,\r\n\r\n      // Total requests and waiting room\r\n      totalReqWait: this.totalReqWait.value,\r\n\r\n      // Alerts\r\n      alertVisible: this.alertVisible.value,\r\n      alertMessage: this.alertMessage.value,\r\n      alertType: this.alertType.value,\r\n      alertDuration: this.alertDuration.value,\r\n\r\n      // Progress Timer\r\n      progressTimerVisible: this.progressTimerVisible.value,\r\n      progressTimerValue: this.progressTimerValue.value,\r\n\r\n      // Menu modals\r\n      isMenuModalVisible: this.isMenuModalVisible.value,\r\n      isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n      isSettingsModalVisible: this.isSettingsModalVisible.value,\r\n      isRequestsModalVisible: this.isRequestsModalVisible.value,\r\n      isWaitingModalVisible: this.isWaitingModalVisible.value,\r\n      isCoHostModalVisible: this.isCoHostModalVisible.value,\r\n      isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\r\n      isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\r\n\r\n      // Other Modals\r\n      isParticipantsModalVisible: this.isParticipantsModalVisible.value,\r\n      isMessagesModalVisible: this.isMessagesModalVisible.value,\r\n      isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\r\n      isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\r\n      isLoadingModalVisible: this.isLoadingModalVisible.value,\r\n\r\n      // Recording Options\r\n      recordingMediaOptions: this.recordingMediaOptions.value,\r\n      recordingAudioOptions: this.recordingAudioOptions.value,\r\n      recordingVideoOptions: this.recordingVideoOptions.value,\r\n      recordingVideoType: this.recordingVideoType.value,\r\n      recordingVideoOptimized: this.recordingVideoOptimized.value,\r\n      recordingDisplayType: this.recordingDisplayType.value,\r\n      recordingAddHLS: this.recordingAddHLS.value,\r\n      recordingAddText: this.recordingAddText.value,\r\n      recordingCustomText: this.recordingCustomText.value,\r\n      recordingCustomTextPosition: this.recordingCustomTextPosition.value,\r\n      recordingCustomTextColor: this.recordingCustomTextColor.value,\r\n      recordingNameTags: this.recordingNameTags.value,\r\n      recordingBackgroundColor: this.recordingBackgroundColor.value,\r\n      recordingNameTagsColor: this.recordingNameTagsColor.value,\r\n      recordingOrientationVideo: this.recordingOrientationVideo.value,\r\n      clearedToResume: this.clearedToResume.value,\r\n      clearedToRecord: this.clearedToRecord.value,\r\n      recordState: this.recordState.value,\r\n      showRecordButtons: this.showRecordButtons.value,\r\n      recordingProgressTime: this.recordingProgressTime.value,\r\n      audioSwitching: this.audioSwitching.value,\r\n      videoSwitching: this.videoSwitching.value,\r\n\r\n      // Media states\r\n      videoAlreadyOn: this.videoAlreadyOn.value,\r\n      audioAlreadyOn: this.audioAlreadyOn.value,\r\n      componentSizes: this.componentSizes.value,\r\n\r\n      // Permissions\r\n      hasCameraPermission: this.hasCameraPermission.value,\r\n      hasAudioPermission: this.hasAudioPermission.value,\r\n\r\n      // Transports\r\n      transportCreated: this.transportCreated.value,\r\n      localTransportCreated: this.localTransportCreated.value,\r\n      transportCreatedVideo: this.transportCreatedVideo.value,\r\n      transportCreatedAudio: this.transportCreatedAudio.value,\r\n      transportCreatedScreen: this.transportCreatedScreen.value,\r\n      producerTransport: this.producerTransport.value,\r\n      localProducerTransport: this.localProducerTransport.value,\r\n      videoProducer: this.videoProducer.value,\r\n      localVideoProducer: this.localVideoProducer.value,\r\n      params: this.params.value,\r\n      videoParams: this.videoParams.value,\r\n      audioParams: this.audioParams.value,\r\n      audioProducer: this.audioProducer.value,\r\n      audioLevel: this.audioLevel.value,\r\n      localAudioProducer: this.localAudioProducer.value,\r\n      consumerTransports: this.consumerTransports.value,\r\n      consumingTransports: this.consumingTransports.value,\r\n\r\n      // Polls\r\n      polls: this.polls.value,\r\n      poll: this.poll.value,\r\n      isPollModalVisible: this.isPollModalVisible.value,\r\n\r\n      // Background\r\n      customImage: this.customImage.value,\r\n      selectedImage: this.selectedImage.value,\r\n      segmentVideo: this.segmentVideo.value,\r\n      selfieSegmentation: this.selfieSegmentation.value,\r\n      pauseSegmentation: this.pauseSegmentation.value,\r\n      processedStream: this.processedStream.value,\r\n      keepBackground: this.keepBackground.value,\r\n      backgroundHasChanged: this.backgroundHasChanged.value,\r\n      virtualStream: this.virtualStream.value,\r\n      mainCanvas: this.mainCanvas.value,\r\n      prevKeepBackground: this.prevKeepBackground.value,\r\n      appliedBackground: this.appliedBackground.value,\r\n      isBackgroundModalVisible: this.isBackgroundModalVisible.value,\r\n      autoClickBackground: this.autoClickBackground.value,\r\n\r\n      // Breakout rooms\r\n      breakoutRooms: this.breakoutRooms.value,\r\n      currentRoomIndex: this.currentRoomIndex.value,\r\n      canStartBreakout: this.canStartBreakout.value,\r\n      breakOutRoomStarted: this.breakOutRoomStarted.value,\r\n      breakOutRoomEnded: this.breakOutRoomEnded.value,\r\n      hostNewRoom: this.hostNewRoom.value,\r\n      limitedBreakRoom: this.limitedBreakRoom.value,\r\n      mainRoomsLength: this.mainRoomsLength.value,\r\n      memberRoom: this.memberRoom.value,\r\n      isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\r\n\r\n      // Whiteboard\r\n      whiteboardUsers: this.whiteboardUsers.value,\r\n      currentWhiteboardIndex: this.currentWhiteboardIndex.value,\r\n      canStartWhiteboard: this.canStartWhiteboard.value,\r\n      whiteboardStarted: this.whiteboardStarted.value,\r\n      whiteboardEnded: this.whiteboardEnded.value,\r\n      whiteboardLimit: this.whiteboardLimit.value,\r\n      isWhiteboardModalVisible: this.isWhiteboardModalVisible.value,\r\n      isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\r\n      shapes: this.shapes.value,\r\n      useImageBackground: this.useImageBackground.value,\r\n      redoStack: this.redoStack.value,\r\n      undoStack: this.undoStack.value,\r\n      canvasStream: this.canvasStream.value,\r\n      canvasWhiteboard: this.canvasWhiteboard.value,\r\n\r\n      // Screenboard\r\n      canvasScreenboard: this.canvasScreenboard.value,\r\n      processedScreenStream: this.processedScreenStream.value,\r\n      annotateScreenStream: this.annotateScreenStream.value,\r\n      mainScreenCanvas: this.mainScreenCanvas.value,\r\n      isScreenboardModalVisible: this.isScreenboardModalVisible.value,\r\n\r\n      validated: this.validated.value,\r\n      device: this.device.value,\r\n      socket: this.socket.value,\r\n      localSocket: this.localSocket!.value,\r\n      checkMediaPermission: false,\r\n      onWeb: true,\r\n\r\n      // Update functions\r\n      updateRoomName: this.updateRoomName.bind(this),\r\n      updateMember: this.updateMember.bind(this),\r\n      updateAdminPasscode: this.updateAdminPasscode.bind(this),\r\n      updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\r\n      updateYouAreHost: this.updateYouAreHost.bind(this),\r\n      updateIslevel: this.updateIslevel.bind(this),\r\n      updateCoHost: this.updateCoHost.bind(this),\r\n      updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\r\n      updateConfirmedToRecord: this.updateConfirmedToRecord.bind(this),\r\n      updateMeetingDisplayType: this.updateMeetingDisplayType.bind(this),\r\n      updateMeetingVideoOptimized: this.updateMeetingVideoOptimized.bind(this),\r\n      updateEventType: this.updateEventType.bind(this),\r\n      updateParticipants: this.updateParticipants.bind(this),\r\n      updateParticipantsCounter: this.updateParticipantsCounter.bind(this),\r\n      updateParticipantsFilter: this.updateParticipantsFilter.bind(this),\r\n\r\n      // More update functions for media details\r\n      updateConsume_sockets: this.updateConsume_sockets.bind(this),\r\n      updateRtpCapabilities: this.updateRtpCapabilities.bind(this),\r\n      updateRoomRecvIPs: this.updateRoomRecvIPs.bind(this),\r\n      updateMeetingRoomParams: this.updateMeetingRoomParams.bind(this),\r\n      updateItemPageLimit: this.updateItemPageLimit.bind(this),\r\n      updateAudioOnlyRoom: this.updateAudioOnlyRoom.bind(this),\r\n      updateAddForBasic: this.updateAddForBasic.bind(this),\r\n      updateScreenPageLimit: this.updateScreenPageLimit.bind(this),\r\n      updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\r\n      updateShared: this.updateShared.bind(this),\r\n      updateTargetOrientation: this.updateTargetOrientation.bind(this),\r\n      updateTargetResolution: this.updateTargetResolution.bind(this),\r\n      updateTargetResolutionHost: this.updateTargetResolutionHost.bind(this),\r\n      updateVidCons: this.updateVidCons.bind(this),\r\n      updateFrameRate: this.updateFrameRate.bind(this),\r\n      updateHParams: this.updateHParams.bind(this),\r\n      updateVParams: this.updateVParams.bind(this),\r\n      updateScreenParams: this.updateScreenParams.bind(this),\r\n      updateAParams: this.updateAParams.bind(this),\r\n\r\n      // More update functions for recording details\r\n      updateRecordingAudioPausesLimit: this.updateRecordingAudioPausesLimit.bind(this),\r\n      updateRecordingAudioPausesCount: this.updateRecordingAudioPausesCount.bind(this),\r\n      updateRecordingAudioSupport: this.updateRecordingAudioSupport.bind(this),\r\n      updateRecordingAudioPeopleLimit: this.updateRecordingAudioPeopleLimit.bind(this),\r\n      updateRecordingAudioParticipantsTimeLimit:\r\n        this.updateRecordingAudioParticipantsTimeLimit.bind(this),\r\n      updateRecordingVideoPausesCount: this.updateRecordingVideoPausesCount.bind(this),\r\n      updateRecordingVideoPausesLimit: this.updateRecordingVideoPausesLimit.bind(this),\r\n      updateRecordingVideoSupport: this.updateRecordingVideoSupport.bind(this),\r\n      updateRecordingVideoPeopleLimit: this.updateRecordingVideoPeopleLimit.bind(this),\r\n      updateRecordingVideoParticipantsTimeLimit:\r\n        this.updateRecordingVideoParticipantsTimeLimit.bind(this),\r\n      updateRecordingAllParticipantsSupport: this.updateRecordingAllParticipantsSupport.bind(this),\r\n      updateRecordingVideoParticipantsSupport:\r\n        this.updateRecordingVideoParticipantsSupport.bind(this),\r\n      updateRecordingAllParticipantsFullRoomSupport:\r\n        this.updateRecordingAllParticipantsFullRoomSupport.bind(this),\r\n      updateRecordingVideoParticipantsFullRoomSupport:\r\n        this.updateRecordingVideoParticipantsFullRoomSupport.bind(this),\r\n      updateRecordingPreferredOrientation: this.updateRecordingPreferredOrientation.bind(this),\r\n      updateRecordingSupportForOtherOrientation:\r\n        this.updateRecordingSupportForOtherOrientation.bind(this),\r\n      updateRecordingMultiFormatsSupport: this.updateRecordingMultiFormatsSupport.bind(this),\r\n\r\n      updateUserRecordingParams: this.updateUserRecordingParams.bind(this),\r\n      updateCanRecord: this.updateCanRecord.bind(this),\r\n      updateStartReport: this.updateStartReport.bind(this),\r\n      updateEndReport: this.updateEndReport.bind(this),\r\n      updateRecordTimerInterval: this.updateRecordTimerInterval.bind(this),\r\n      updateRecordStartTime: this.updateRecordStartTime.bind(this),\r\n      updateRecordElapsedTime: this.updateRecordElapsedTime.bind(this),\r\n      updateIsTimerRunning: this.updateIsTimerRunning.bind(this),\r\n      updateCanPauseResume: this.updateCanPauseResume.bind(this),\r\n      updateRecordChangeSeconds: this.updateRecordChangeSeconds.bind(this),\r\n      updatePauseLimit: this.updatePauseLimit.bind(this),\r\n      updatePauseRecordCount: this.updatePauseRecordCount.bind(this),\r\n      updateCanLaunchRecord: this.updateCanLaunchRecord.bind(this),\r\n      updateStopLaunchRecord: this.updateStopLaunchRecord.bind(this),\r\n\r\n      updateParticipantsAll: this.updateParticipantsAll.bind(this),\r\n\r\n      updateFirstAll: this.updateFirstAll.bind(this),\r\n      updateUpdateMainWindow: this.updateUpdateMainWindow.bind(this),\r\n      updateFirst_round: this.updateFirst_round.bind(this),\r\n      updateLandScaped: this.updateLandScaped.bind(this),\r\n      updateLock_screen: this.updateLock_screen.bind(this),\r\n      updateScreenId: this.updateScreenId.bind(this),\r\n      updateAllVideoStreams: this.updateAllVideoStreams.bind(this),\r\n      updateNewLimitedStreams: this.updateNewLimitedStreams.bind(this),\r\n      updateNewLimitedStreamsIDs: this.updateNewLimitedStreamsIDs.bind(this),\r\n      updateActiveSounds: this.updateActiveSounds.bind(this),\r\n      updateScreenShareIDStream: this.updateScreenShareIDStream.bind(this),\r\n      updateScreenShareNameStream: this.updateScreenShareNameStream.bind(this),\r\n      updateAdminIDStream: this.updateAdminIDStream.bind(this),\r\n      updateAdminNameStream: this.updateAdminNameStream.bind(this),\r\n      updateYouYouStream: this.updateYouYouStream.bind(this),\r\n      updateYouYouStreamIDs: this.updateYouYouStreamIDs.bind(this),\r\n      updateLocalStream: this.updateLocalStream.bind(this),\r\n      updateRecordStarted: this.updateRecordStarted.bind(this),\r\n      updateRecordResumed: this.updateRecordResumed.bind(this),\r\n      updateRecordPaused: this.updateRecordPaused.bind(this),\r\n      updateRecordStopped: this.updateRecordStopped.bind(this),\r\n      updateAdminRestrictSetting: this.updateAdminRestrictSetting.bind(this),\r\n      updateVideoRequestState: this.updateVideoRequestState.bind(this),\r\n      updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\r\n      updateVideoAction: this.updateVideoAction.bind(this),\r\n      updateLocalStreamVideo: this.updateLocalStreamVideo.bind(this),\r\n      updateUserDefaultVideoInputDevice: this.updateUserDefaultVideoInputDevice.bind(this),\r\n      updateCurrentFacingMode: this.updateCurrentFacingMode.bind(this),\r\n      updatePrevFacingMode: this.updatePrevFacingMode.bind(this),\r\n      updateDefVideoID: this.updateDefVideoID.bind(this),\r\n      updateAllowed: this.updateAllowed.bind(this),\r\n      updateDispActiveNames: this.updateDispActiveNames.bind(this),\r\n      updateP_dispActiveNames: this.updateP_dispActiveNames.bind(this),\r\n      updateActiveNames: this.updateActiveNames.bind(this),\r\n      updatePrevActiveNames: this.updatePrevActiveNames.bind(this),\r\n      updateP_activeNames: this.updateP_activeNames.bind(this),\r\n      updateMembersReceived: this.updateMembersReceived.bind(this),\r\n      updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\r\n      updateHostFirstSwitch: this.updateHostFirstSwitch.bind(this),\r\n      updateMicAction: this.updateMicAction.bind(this),\r\n      updateScreenAction: this.updateScreenAction.bind(this),\r\n      updateChatAction: this.updateChatAction.bind(this),\r\n      updateAudioRequestState: this.updateAudioRequestState.bind(this),\r\n      updateScreenRequestState: this.updateScreenRequestState.bind(this),\r\n      updateChatRequestState: this.updateChatRequestState.bind(this),\r\n      updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\r\n      updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\r\n      updateChatRequestTime: this.updateChatRequestTime.bind(this),\r\n      updateOldSoundIds: this.updateOldSoundIds.bind(this),\r\n      updateHostLabel: this.updateHostLabel.bind(this),\r\n      updateMainScreenFilled: this.updateMainScreenFilled.bind(this),\r\n      updateLocalStreamScreen: this.updateLocalStreamScreen.bind(this),\r\n      updateScreenAlreadyOn: this.updateScreenAlreadyOn.bind(this),\r\n      updateChatAlreadyOn: this.updateChatAlreadyOn.bind(this),\r\n      updateRedirectURL: this.updateRedirectURL.bind(this),\r\n      updateOldAllStreams: this.updateOldAllStreams.bind(this),\r\n      updateAdminVidID: this.updateAdminVidID.bind(this),\r\n      updateStreamNames: this.updateStreamNames.bind(this),\r\n      updateNon_alVideoStreams: this.updateNon_alVideoStreams.bind(this),\r\n      updateSortAudioLoudness: this.updateSortAudioLoudness.bind(this),\r\n      updateAudioDecibels: this.updateAudioDecibels.bind(this),\r\n      updateMixed_alVideoStreams: this.updateMixed_alVideoStreams.bind(this),\r\n      updateNon_alVideoStreams_muted: this.updateNon_alVideoStreams_muted.bind(this),\r\n      updatePaginatedStreams: this.updatePaginatedStreams.bind(this),\r\n      updateLocalStreamAudio: this.updateLocalStreamAudio.bind(this),\r\n      updateDefAudioID: this.updateDefAudioID.bind(this),\r\n      updateUserDefaultAudioInputDevice: this.updateUserDefaultAudioInputDevice.bind(this),\r\n      updateUserDefaultAudioOutputDevice: this.updateUserDefaultAudioOutputDevice.bind(this),\r\n      updatePrevAudioInputDevice: this.updatePrevAudioInputDevice.bind(this),\r\n      updatePrevVideoInputDevice: this.updatePrevVideoInputDevice.bind(this),\r\n      updateAudioPaused: this.updateAudioPaused.bind(this),\r\n      updateMainScreenPerson: this.updateMainScreenPerson.bind(this),\r\n      updateAdminOnMainScreen: this.updateAdminOnMainScreen.bind(this),\r\n      updateScreenStates: this.updateScreenStates.bind(this),\r\n      updatePrevScreenStates: this.updatePrevScreenStates.bind(this),\r\n      updateUpdateDateState: this.updateUpdateDateState.bind(this),\r\n      updateLastUpdate: this.updateLastUpdate.bind(this),\r\n      updateNForReadjustRecord: this.updateNForReadjustRecord.bind(this),\r\n      updateFixedPageLimit: this.updateFixedPageLimit.bind(this),\r\n      updateRemoveAltGrid: this.updateRemoveAltGrid.bind(this),\r\n      updateNForReadjust: this.updateNForReadjust.bind(this),\r\n      updateLastReorderTime: this.updateLastReorderTime.bind(this),\r\n      updateAudStreamNames: this.updateAudStreamNames.bind(this),\r\n      updateCurrentUserPage: this.updateCurrentUserPage.bind(this),\r\n      updateMainHeightWidth: this.updateMainHeightWidth.bind(this),\r\n      updatePrevMainHeightWidth: this.updatePrevMainHeightWidth.bind(this),\r\n      updatePrevDoPaginate: this.updatePrevDoPaginate.bind(this),\r\n      updateDoPaginate: this.updateDoPaginate.bind(this),\r\n      updateShareEnded: this.updateShareEnded.bind(this),\r\n      updateLStreams: this.updateLStreams.bind(this),\r\n      updateChatRefStreams: this.updateChatRefStreams.bind(this),\r\n      updateControlHeight: this.updateControlHeight.bind(this),\r\n      updateIsWideScreen: this.updateIsWideScreen.bind(this),\r\n      updateIsMediumScreen: this.updateIsMediumScreen.bind(this),\r\n      updateIsSmallScreen: this.updateIsSmallScreen.bind(this),\r\n      updateAddGrid: this.updateAddGrid.bind(this),\r\n      updateAddAltGrid: this.updateAddAltGrid.bind(this),\r\n      updateGridRows: this.updateGridRows.bind(this),\r\n      updateGridCols: this.updateGridCols.bind(this),\r\n      updateAltGridRows: this.updateAltGridRows.bind(this),\r\n      updateAltGridCols: this.updateAltGridCols.bind(this),\r\n      updateNumberPages: this.updateNumberPages.bind(this),\r\n      updateCurrentStreams: this.updateCurrentStreams.bind(this),\r\n      updateShowMiniView: this.updateShowMiniView.bind(this),\r\n      updateNStream: this.updateNStream.bind(this),\r\n      updateDefer_receive: this.updateDefer_receive.bind(this),\r\n      updateAllAudioStreams: this.updateAllAudioStreams.bind(this),\r\n      updateRemoteScreenStream: this.updateRemoteScreenStream.bind(this),\r\n      updateScreenProducer: this.updateScreenProducer.bind(this),\r\n      updateGotAllVids: this.updateGotAllVids.bind(this),\r\n      updatePaginationHeightWidth: this.updatePaginationHeightWidth.bind(this),\r\n      updatePaginationDirection: this.updatePaginationDirection.bind(this),\r\n      updateGridSizes: this.updateGridSizes.bind(this),\r\n      updateScreenForceFullDisplay: this.updateScreenForceFullDisplay.bind(this),\r\n      updateMainGridStream: this.updateMainGridStream.bind(this),\r\n      updateOtherGridStreams: this.updateOtherGridStreams.bind(this),\r\n      updateAudioOnlyStreams: this.updateAudioOnlyStreams.bind(this),\r\n      updateVideoInputs: this.updateVideoInputs.bind(this),\r\n      updateAudioInputs: this.updateAudioInputs.bind(this),\r\n      updateMeetingProgressTime: this.updateMeetingProgressTime.bind(this),\r\n      updateMeetingElapsedTime: this.updateMeetingElapsedTime.bind(this),\r\n      updateRef_participants: this.updateRef_participants.bind(this),\r\n\r\n      updateMessages: this.updateMessages.bind(this),\r\n      updateStartDirectMessage: this.updateStartDirectMessage.bind(this),\r\n      updateDirectMessageDetails: this.updateDirectMessageDetails.bind(this),\r\n      updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\r\n\r\n      // Event settings\r\n      updateAudioSetting: this.updateAudioSetting.bind(this),\r\n      updateVideoSetting: this.updateVideoSetting.bind(this),\r\n      updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\r\n      updateChatSetting: this.updateChatSetting.bind(this),\r\n\r\n      // Display settings\r\n      updateAutoWave: this.updateAutoWave.bind(this),\r\n      updateForceFullDisplay: this.updateForceFullDisplay.bind(this),\r\n      updatePrevForceFullDisplay: this.updatePrevForceFullDisplay.bind(this),\r\n      updatePrevMeetingDisplayType: this.updatePrevMeetingDisplayType.bind(this),\r\n\r\n      // Waiting room\r\n      updateWaitingRoomFilter: this.updateWaitingRoomFilter.bind(this),\r\n      updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\r\n      updateWaitingRoomCounter: this.updateWaitingRoomCounter.bind(this),\r\n\r\n      // Requests\r\n      updateRequestFilter: this.updateRequestFilter.bind(this),\r\n      updateRequestList: this.updateRequestList.bind(this),\r\n      updateRequestCounter: this.updateRequestCounter.bind(this),\r\n\r\n      // Total requests and waiting room\r\n      updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n\r\n      // Menu modals\r\n      updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\r\n      updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n      updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\r\n      updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\r\n      updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\r\n      updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\r\n      updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\r\n      updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\r\n\r\n      // Other modals\r\n      updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\r\n      updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\r\n      updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\r\n      updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\r\n      updateIsLoadingModalVisible: this.updateIsLoadingModalVisible.bind(this),\r\n\r\n      // Recording Options\r\n      updateRecordingMediaOptions: this.updateRecordingMediaOptions.bind(this),\r\n      updateRecordingAudioOptions: this.updateRecordingAudioOptions.bind(this),\r\n      updateRecordingVideoOptions: this.updateRecordingVideoOptions.bind(this),\r\n      updateRecordingVideoType: this.updateRecordingVideoType.bind(this),\r\n      updateRecordingVideoOptimized: this.updateRecordingVideoOptimized.bind(this),\r\n      updateRecordingDisplayType: this.updateRecordingDisplayType.bind(this),\r\n      updateRecordingAddHLS: this.updateRecordingAddHLS.bind(this),\r\n      updateRecordingAddText: this.updateRecordingAddText.bind(this),\r\n      updateRecordingCustomText: this.updateRecordingCustomText.bind(this),\r\n      updateRecordingCustomTextPosition: this.updateRecordingCustomTextPosition.bind(this),\r\n      updateRecordingCustomTextColor: this.updateRecordingCustomTextColor.bind(this),\r\n      updateRecordingNameTags: this.updateRecordingNameTags.bind(this),\r\n      updateRecordingBackgroundColor: this.updateRecordingBackgroundColor.bind(this),\r\n      updateRecordingNameTagsColor: this.updateRecordingNameTagsColor.bind(this),\r\n      updateRecordingOrientationVideo: this.updateRecordingOrientationVideo.bind(this),\r\n      updateClearedToResume: this.updateClearedToResume.bind(this),\r\n      updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n      updateRecordState: this.updateRecordState.bind(this),\r\n      updateShowRecordButtons: this.updateShowRecordButtons.bind(this),\r\n      updateRecordingProgressTime: this.updateRecordingProgressTime.bind(this),\r\n      updateAudioSwitching: this.updateAudioSwitching.bind(this),\r\n      updateVideoSwitching: this.updateVideoSwitching.bind(this),\r\n\r\n      // Media states\r\n      updateVideoAlreadyOn: this.updateVideoAlreadyOn.bind(this),\r\n      updateAudioAlreadyOn: this.updateAudioAlreadyOn.bind(this),\r\n      updateComponentSizes: this.updateComponentSizes.bind(this),\r\n\r\n      // Permissions\r\n      updateHasCameraPermission: this.updateHasCameraPermission.bind(this),\r\n      updateHasAudioPermission: this.updateHasAudioPermission.bind(this),\r\n\r\n      // Transports\r\n      updateTransportCreated: this.updateTransportCreated.bind(this),\r\n      updateLocalTransportCreated: this.updateLocalTransportCreated.bind(this),\r\n      updateTransportCreatedVideo: this.updateTransportCreatedVideo.bind(this),\r\n      updateTransportCreatedAudio: this.updateTransportCreatedAudio.bind(this),\r\n      updateTransportCreatedScreen: this.updateTransportCreatedScreen.bind(this),\r\n      updateProducerTransport: this.updateProducerTransport.bind(this),\r\n      updateLocalProducerTransport: this.updateLocalProducerTransport.bind(this),\r\n      updateVideoProducer: this.updateVideoProducer.bind(this),\r\n      updateLocalVideoProducer: this.updateLocalVideoProducer.bind(this),\r\n      updateParams: this.updateParams.bind(this),\r\n      updateVideoParams: this.updateVideoParams.bind(this),\r\n      updateAudioParams: this.updateAudioParams.bind(this),\r\n      updateAudioProducer: this.updateAudioProducer.bind(this),\r\n      updateAudioLevel: this.updateAudioLevel.bind(this),\r\n      updateLocalAudioProducer: this.updateLocalAudioProducer.bind(this),\r\n      updateConsumerTransports: this.updateConsumerTransports.bind(this),\r\n      updateConsumingTransports: this.updateConsumingTransports.bind(this),\r\n\r\n      // Polls\r\n      updatePolls: this.updatePolls.bind(this),\r\n      updatePoll: this.updatePoll.bind(this),\r\n      updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\r\n\r\n      // Background\r\n      updateCustomImage: this.updateCustomImage.bind(this),\r\n      updateSelectedImage: this.updateSelectedImage.bind(this),\r\n      updateSegmentVideo: this.updateSegmentVideo.bind(this),\r\n      updateSelfieSegmentation: this.updateSelfieSegmentation.bind(this),\r\n      updatePauseSegmentation: this.updatePauseSegmentation.bind(this),\r\n      updateProcessedStream: this.updateProcessedStream.bind(this),\r\n      updateKeepBackground: this.updateKeepBackground.bind(this),\r\n      updateBackgroundHasChanged: this.updateBackgroundHasChanged.bind(this),\r\n      updateVirtualStream: this.updateVirtualStream.bind(this),\r\n      updateMainCanvas: this.updateMainCanvas.bind(this),\r\n      updatePrevKeepBackground: this.updatePrevKeepBackground.bind(this),\r\n      updateAppliedBackground: this.updateAppliedBackground.bind(this),\r\n      updateIsBackgroundModalVisible: this.updateIsBackgroundModalVisible.bind(this),\r\n      updateAutoClickBackground: this.updateAutoClickBackground.bind(this),\r\n\r\n      // Breakout rooms\r\n      updateBreakoutRooms: this.updateBreakoutRooms.bind(this),\r\n      updateCurrentRoomIndex: this.updateCurrentRoomIndex.bind(this),\r\n      updateCanStartBreakout: this.updateCanStartBreakout.bind(this),\r\n      updateBreakOutRoomStarted: this.updateBreakOutRoomStarted.bind(this),\r\n      updateBreakOutRoomEnded: this.updateBreakOutRoomEnded.bind(this),\r\n      updateHostNewRoom: this.updateHostNewRoom.bind(this),\r\n      updateLimitedBreakRoom: this.updateLimitedBreakRoom.bind(this),\r\n      updateMainRoomsLength: this.updateMainRoomsLength.bind(this),\r\n      updateMemberRoom: this.updateMemberRoom.bind(this),\r\n      updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\r\n\r\n      // Whiteboard\r\n      updateWhiteboardUsers: this.updateWhiteboardUsers.bind(this),\r\n      updateCurrentWhiteboardIndex: this.updateCurrentWhiteboardIndex.bind(this),\r\n      updateCanStartWhiteboard: this.updateCanStartWhiteboard.bind(this),\r\n      updateWhiteboardStarted: this.updateWhiteboardStarted.bind(this),\r\n      updateWhiteboardEnded: this.updateWhiteboardEnded.bind(this),\r\n      updateWhiteboardLimit: this.updateWhiteboardLimit.bind(this),\r\n      updateIsWhiteboardModalVisible: this.updateIsWhiteboardModalVisible.bind(this),\r\n      updateIsConfigureWhiteboardModalVisible:\r\n        this.updateIsConfigureWhiteboardModalVisible.bind(this),\r\n      updateShapes: this.updateShapes.bind(this),\r\n      updateUseImageBackground: this.updateUseImageBackground.bind(this),\r\n      updateRedoStack: this.updateRedoStack.bind(this),\r\n      updateUndoStack: this.updateUndoStack.bind(this),\r\n      updateCanvasStream: this.updateCanvasStream.bind(this),\r\n      updateCanvasWhiteboard: this.updateCanvasWhiteboard.bind(this),\r\n\r\n      // Screenboard\r\n      updateCanvasScreenboard: this.updateCanvasScreenboard.bind(this),\r\n      updateProcessedScreenStream: this.updateProcessedScreenStream.bind(this),\r\n      updateAnnotateScreenStream: this.updateAnnotateScreenStream.bind(this),\r\n      updateMainScreenCanvas: this.updateMainScreenCanvas.bind(this),\r\n      updateIsScreenboardModalVisible: this.updateIsScreenboardModalVisible.bind(this),\r\n\r\n      // Other functions\r\n      checkOrientation: this.checkOrientation.bind(this),\r\n\r\n      updateDevice: this.updateDevice.bind(this),\r\n      updateSocket: this.updateSocket.bind(this),\r\n      updateLocalSocket: this.updateLocalSocket.bind(this),\r\n      updateValidated: this.updateValidated.bind(this),\r\n\r\n      showAlert: this.showAlert.bind(this),\r\n      getUpdatedAllParams: () => {\r\n\r\n        try {\r\n          if (this.sourceParameters !== null) {\r\n            this.sourceParameters = {\r\n              ...this.getAllParams(),\r\n              ...this.mediaSFUFunctions(),\r\n            };\r\n            if (this.updateSourceParameters) {\r\n              this.updateSourceParameters(this.sourceParameters);\r\n            }\r\n          }\r\n        } catch {\r\n          console.log('error updateSourceParameters');\r\n        }\r\n\r\n        return {\r\n          ...this.getAllParams(),\r\n          ...this.mediaSFUFunctions(),\r\n        };\r\n      },\r\n    };\r\n  }\r\n\r\n  mediaSFUParameters = {\r\n    ...this.getAllParams(),\r\n    ...this.mediaSFUFunctions(),\r\n  };\r\n\r\n  getUpdatedAllParams = () => {\r\n    return {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n  };\r\n\r\n  updateButtonState(buttonType: string, value: boolean) {\r\n    this.controlButtons = this.controlButtons.map((button) => {\r\n      if (buttonType === 'micActive' && button.icon === this.faMicrophoneSlash) {\r\n        return { ...button, active: value };\r\n      }\r\n      if (buttonType === 'videoActive' && button.icon === this.faVideoSlash) {\r\n        return { ...button, active: value };\r\n      }\r\n      if (buttonType === 'screenShareActive' && button.icon === this.faDesktop) {\r\n        if (button.alternateIconComponent) {\r\n          const updatedInjector = this.createInjector({\r\n            disabled: !value,\r\n          });\r\n          return {\r\n            ...button,\r\n            active: true,\r\n            alternateIconComponent: { ...this.screenShareWidget, injector: updatedInjector },\r\n          }; //always default to true for active\r\n        } else {\r\n          return { ...button, active: true }; //always default to true for active\r\n        }\r\n      }\r\n      if (buttonType === 'endCallActive' && button.icon === this.faPhone) {\r\n        return { ...button, active: value };\r\n      }\r\n      if (buttonType === 'participantsActive' && button.icon === this.faUsers) {\r\n        return { ...button, active: value };\r\n      }\r\n      if (\r\n        buttonType === 'showMessagesBadge' &&\r\n        button.customName &&\r\n        button.customName === 'Messages'\r\n      ) {\r\n        const updatedInjector = this.createInjector({\r\n          icon: this.faComments,\r\n          badgeValue: value ? '*' : '',\r\n          iconColor: 'black',\r\n          showBadge: value,\r\n        });\r\n        return { ...button, customComponent: { ...this.messageWidget, injector: updatedInjector } };\r\n      }\r\n      if (buttonType === 'showMenuBadge' && button.customName && button.customName === 'Menu') {\r\n        const updatedInjector = this.createInjector({\r\n          icon: this.faBars,\r\n          badgeValue: this.totalReqWait.value,\r\n          iconColor: 'black',\r\n          showBadge: true,\r\n        });\r\n        return { ...button, customComponent: { ...this.menuWidget, injector: updatedInjector } };\r\n      }\r\n\r\n      return button;\r\n    });\r\n\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  PrejoinPageComponent: any = {\r\n    component: this.PrejoinPage,\r\n    injector: null,\r\n  };\r\n\r\n  updatePrejoinPageComponent = () => {\r\n    const PrejoinComp = {\r\n      component: this.PrejoinPage,\r\n      injector: this.createInjector({\r\n        parameters: {\r\n          showAlert:\r\n            this.showAlert ||\r\n            (() => {\r\n              console.log('showAlert not defined');\r\n            }),\r\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\r\n          connectSocket: this.socketManager.connectSocket,\r\n          connectLocalSocket: this.socketManager.connectLocalSocket,\r\n          updateSocket: this.updateSocket,\r\n          updateLocalSocket: this.updateLocalSocket,\r\n          updateValidated: this.updateValidated,\r\n          updateApiUserName: this.updateApiUserName,\r\n          updateApiToken: this.updateApiToken,\r\n          updateLink: this.updateLink,\r\n          updateRoomName: this.updateRoomName,\r\n          updateMember: this.updateMember,\r\n        },\r\n        credentials: this.credentials,\r\n        localLink: this.localLink,\r\n        connectMediaSFU: this.connectMediaSFU,\r\n        returnUI: this.returnUI,\r\n        noUIPreJoinOptions: this.noUIPreJoinOptions,\r\n        joinMediaSFURoom: this.joinMediaSFURoom,\r\n        createMediaSFURoom: this.createMediaSFURoom,\r\n      }),\r\n    };\r\n\r\n    this.PrejoinPageComponent = { ...PrejoinComp };\r\n\r\n    this.cdr.detectChanges();\r\n  };\r\n\r\n  ngOnInit() {\r\n    if (this.PrejoinPage) {\r\n      this.updatePrejoinPageComponent();\r\n    }\r\n\r\n    this.setupResizeListener();\r\n    if (this.validated) {\r\n      this.connectAndAddSocketMethods();\r\n    }\r\n\r\n    this.mainHeightWidthSubscription = this.mainHeightWidth.subscribe(() => {\r\n      this.updateMainVideoSize();\r\n    });\r\n\r\n    this.recordingSubscription = combineLatest([\r\n      this.recordPaused,\r\n      this.recordStarted,\r\n      this.recordStopped,\r\n      this.recordResumed,\r\n      this.recordingProgressTime,\r\n      this.showRecordButtons,\r\n      this.islevel,\r\n    ]).subscribe(\r\n      ([\r\n        recordPaused,\r\n        recordStarted,\r\n        recordStopped,\r\n        recordResumed,\r\n        recordingProgressTime,\r\n        showRecordButtons,\r\n        islevel,\r\n      ]) => {\r\n        if (\r\n          recordPaused ||\r\n          recordStarted ||\r\n          recordStopped ||\r\n          recordResumed ||\r\n          recordingProgressTime ||\r\n          showRecordButtons ||\r\n          islevel\r\n        ) {\r\n          this.updateRecordButtons();\r\n        }\r\n      },\r\n    );\r\n\r\n    this.ScreenboardSubscription = combineLatest([\r\n      this.shared,\r\n      this.componentSizes,\r\n      this.annotateScreenStream,\r\n    ]).subscribe(([shared, componentSizes]) => {\r\n      this.ScreenboardWidget = {\r\n        component: Screenboard,\r\n        inputs: {\r\n          customWidth: componentSizes.mainWidth,\r\n          customHeight: componentSizes.mainHeight,\r\n          parameters: this.mediaSFUParameters,\r\n          showAspect: shared,\r\n        },\r\n      };\r\n    });\r\n    this.validatedSubscription = this.validated.subscribe((validated) => {\r\n      if (validated) {\r\n        this.handleValidated();\r\n      }\r\n    });\r\n    this.islevelSubscription = this.islevel.subscribe((islevel) => {\r\n      if (islevel) {\r\n        this.updateCustomMenuButtons();\r\n      }\r\n    });\r\n    this.coHostSubscription = combineLatest([this.coHost, this.coHostResponsibility]).subscribe(\r\n      ([coHost, coHostResponsibility]) => {\r\n        if (coHost || coHostResponsibility) {\r\n          this.updateCustomMenuButtons();\r\n        }\r\n      },\r\n    );\r\n\r\n    // Subscribe to changes in BehaviorSubject and update the buttons accordingly\r\n    this.buttonSubscriptions.push(\r\n      this.micActive.subscribe((value) => {\r\n        this.updateButtonState('micActive', value);\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.videoActive.subscribe((value) => {\r\n        this.updateButtonState('videoActive', value);\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.screenShareActive.subscribe((value) => {\r\n        this.updateButtonState('screenShareActive', value);\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.showMessagesBadge.subscribe((value) => {\r\n        this.updateButtonState('showMessagesBadge', value);\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.totalReqWait.subscribe(() => {\r\n        this.updateButtonState('showMenuBadge', true);\r\n      }),\r\n    );\r\n\r\n    this.buttonSubscriptions.push(\r\n      this.participantsCounter.subscribe((value) => {\r\n        this.updateMenuParticipantsWidget(value);\r\n      }),\r\n    );\r\n\r\n    this.mediaSFUParameters = {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    window.removeEventListener('resize', this.handleResize);\r\n    window.removeEventListener('orientationchange', this.handleResize);\r\n    if (this.mainHeightWidthSubscription) {\r\n      this.mainHeightWidthSubscription.unsubscribe();\r\n    }\r\n    if (this.validatedSubscription) {\r\n      this.validatedSubscription.unsubscribe();\r\n    }\r\n    if (this.islevelSubscription) {\r\n      this.islevelSubscription.unsubscribe();\r\n    }\r\n    if (this.coHostSubscription) {\r\n      this.coHostSubscription.unsubscribe();\r\n    }\r\n    if (this.ScreenboardSubscription) {\r\n      this.ScreenboardSubscription.unsubscribe();\r\n    }\r\n    if (this.recordingSubscription) {\r\n      this.recordingSubscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n  updateMainVideoSize = async () => {\r\n    if (!this.lock_screen.value && !this.shared.value) {\r\n      this.prepopulateUserMedia.prepopulateUserMedia({\r\n        name: this.hostLabel.value,\r\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n      });\r\n    } else {\r\n      if (!this.first_round.value) {\r\n        this.prepopulateUserMedia.prepopulateUserMedia({\r\n          name: this.hostLabel.value,\r\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  async connectAndAddSocketMethods() {\r\n    this.mediaSFUParameters = {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n    const socket_ = await this.connect_Socket(this.apiUserName.value, this.apiToken.value);\r\n    if (socket_) {\r\n      this.updateSocket(socket_);\r\n    }\r\n  }\r\n\r\n  async handleValidated() {\r\n    this.updateAllVideoStreams([\r\n      { producerId: 'youyou', stream: undefined, id: 'youyou', name: 'youyou' },\r\n    ]);\r\n\r\n    this.updateStreamNames([{ id: 'youyou', name: 'youyou', producerId: '' }]);\r\n\r\n    if (this.validated.value) {\r\n\r\n      try {\r\n        if (!this.localUIMode.value) {\r\n          this.updateIsLoadingModalVisible(true);\r\n          await this.connectAndAddSocketMethods();\r\n        } else {\r\n          this.updateIsLoadingModalVisible(false);\r\n        }\r\n      } catch (error) {\r\n        console.log('error connectAndaAddSocketMethods', error);\r\n      }\r\n\r\n      this.startMeetingProgressTimer.startMeetingProgressTimer({\r\n        startTime: Date.now() / 1000,\r\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n      });\r\n\r\n      try {\r\n        if (this.sourceParameters !== null) {\r\n          this.sourceParameters = {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          };\r\n          if (this.updateSourceParameters) {\r\n            this.updateSourceParameters(this.sourceParameters);\r\n          }\r\n        }\r\n      } catch {\r\n        console.log('error updateSourceParameters');\r\n      }\r\n\r\n    }\r\n  }\r\n\r\n  @HostListener('window:resize')\r\n  @HostListener('window:orientationchange')\r\n  async handleResize() {\r\n    let fraction = 0;\r\n\r\n    if (\r\n      window.innerHeight < window.innerWidth &&\r\n      (this.eventType.value == 'webinar' || this.eventType.value == 'conference')\r\n    ) {\r\n      const currentHeight = window.innerHeight;\r\n      fraction = Number((40 / currentHeight).toFixed(3));\r\n      if (fraction != this.controlHeight.value) {\r\n        this.updateControlHeight(Number(fraction));\r\n      }\r\n    } else {\r\n      // Set default control button height for portrait mode or other event types\r\n      const currentHeight = window.innerHeight;\r\n      fraction = Number((40 / currentHeight).toFixed(3));\r\n      fraction = Number(fraction);\r\n      if (fraction != this.controlHeight.value) {\r\n        this.updateControlHeight(Number(fraction));\r\n      }\r\n    }\r\n\r\n    const dimensions = this.computeDimensionsMethod({\r\n      containerWidthFraction: 1,\r\n      containerHeightFraction: 1,\r\n      mainSize: this.mainHeightWidth.value,\r\n      doStack: true,\r\n      defaultFraction:\r\n        this.eventType.value == 'webinar' || this.eventType.value == 'conference'\r\n          ? 1 - fraction\r\n          : 1,\r\n    });\r\n\r\n    this.updateComponentSizes(dimensions);\r\n\r\n    const orientation = this.checkOrientation();\r\n    if (orientation == 'portrait') {\r\n      if (!this.isWideScreen.value) {\r\n        if (this.shareScreenStarted.value || this.shared.value) {\r\n          this.updateScreenForceFullDisplay(true);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Updates the main grid view\r\n    await this.prepopulateUserMedia.prepopulateUserMedia({\r\n      name: this.hostLabel.value,\r\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n    });\r\n    // Updates the mini grid view\r\n    await this.onScreenChanges.onScreenChanges({\r\n      changed: true,\r\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n    });\r\n  }\r\n\r\n  async disconnectAllSockets(consume_sockets: ConsumeSocket[]): Promise<void> {\r\n    for (const socket of consume_sockets) {\r\n      try {\r\n        const ip = Object.keys(socket)[0];\r\n        await socket[ip].disconnect();\r\n      } catch (error) {\r\n        console.log(`Error disconnecting socket with IP: ${Object.keys(socket)[0]}`, error);\r\n      }\r\n    }\r\n  }\r\n\r\n  async closeAndReset() {\r\n    //close and clean up all sockets, modals,... and reset all states to initial values\r\n\r\n    this.updateIsMessagesModalVisible(false);\r\n    this.updateIsParticipantsModalVisible(false);\r\n    this.updateIsWaitingModalVisible(false);\r\n    this.updateIsRequestsModalVisible(false);\r\n    this.updateIsCoHostModalVisible(false);\r\n    this.updateIsSettingsModalVisible(false);\r\n    this.updateIsDisplaySettingsModalVisible(false);\r\n    this.updateIsMediaSettingsModalVisible(false);\r\n    this.updateIsMenuModalVisible(false);\r\n    this.updateIsShareEventModalVisible(false);\r\n    this.updateIsConfirmExitModalVisible(false);\r\n    await this.disconnectAllSockets(this.consume_sockets.value);\r\n    await this.updateStatesToInitialValues();\r\n    this.updateMeetingProgressTime('00:00:00');\r\n    this.updateMeetingElapsedTime(0);\r\n    this.updateRecordingProgressTime('00:00:00');\r\n    this.updateRecordElapsedTime(0);\r\n    this.updateShowRecordButtons(false);\r\n\r\n    this.updateIsConfigureWhiteboardModalVisible(false);\r\n    this.updateIsWhiteboardModalVisible(false);\r\n    this.updateIsMenuModalVisible(false);\r\n    this.updateIsRecordingModalVisible(false);\r\n    this.updateIsPollModalVisible(false);\r\n    this.updateIsBreakoutRoomsModalVisible(false);\r\n    this.updateIsBackgroundModalVisible(false);\r\n    this.updateIsLoadingModalVisible(false);\r\n    this.updateIsConfirmHereModalVisible(false);\r\n\r\n    await sleep({ ms: 500 });\r\n    this.updateValidated(false);\r\n    //if on web, reload the page\r\n    window.location.reload();\r\n  }\r\n\r\n  computeDimensionsMethod = ({\r\n    containerWidthFraction = 1,\r\n    containerHeightFraction = 1,\r\n    mainSize,\r\n    doStack = true,\r\n    defaultFraction,\r\n  }: {\r\n    containerWidthFraction?: number;\r\n    containerHeightFraction?: number;\r\n    mainSize: number;\r\n    doStack?: boolean;\r\n    defaultFraction: number;\r\n  }): ComponentSizes => {\r\n    const parentWidth = window.innerWidth * containerWidthFraction;\r\n    const parentHeight = window.innerHeight * containerHeightFraction * defaultFraction;\r\n    let isWideScreen = parentWidth >= 768;\r\n\r\n    if (!isWideScreen && parentWidth > 1.5 * parentHeight) {\r\n      isWideScreen = true;\r\n    }\r\n\r\n    this.updateIsWideScreen(isWideScreen);\r\n\r\n    const dimensions = this.calculateDimensions({\r\n      parentWidth,\r\n      parentHeight,\r\n      isWideScreen,\r\n      mainSize,\r\n      doStack,\r\n    });\r\n    return dimensions;\r\n  };\r\n\r\n  calculateDimensions({\r\n    parentWidth,\r\n    parentHeight,\r\n    isWideScreen,\r\n    mainSize,\r\n    doStack,\r\n  }: {\r\n    parentWidth: number;\r\n    parentHeight: number;\r\n    isWideScreen: boolean;\r\n    mainSize: number;\r\n    doStack: boolean;\r\n  }): ComponentSizes {\r\n    if (doStack) {\r\n      return isWideScreen\r\n        ? {\r\n          mainHeight: Math.floor(parentHeight),\r\n          otherHeight: Math.floor(parentHeight),\r\n          mainWidth: Math.floor((mainSize / 100) * parentWidth),\r\n          otherWidth: Math.floor(((100 - mainSize) / 100) * parentWidth),\r\n        }\r\n        : {\r\n          mainHeight: Math.floor((mainSize / 100) * parentHeight),\r\n          otherHeight: Math.floor(((100 - mainSize) / 100) * parentHeight),\r\n          mainWidth: Math.floor(parentWidth),\r\n          otherWidth: Math.floor(parentWidth),\r\n        };\r\n    } else {\r\n      return {\r\n        mainHeight: Math.floor(parentHeight),\r\n        otherHeight: Math.floor(parentHeight),\r\n        mainWidth: Math.floor(parentWidth),\r\n        otherWidth: Math.floor(parentWidth),\r\n      };\r\n    }\r\n  }\r\n\r\n  handleOrientationChange() {\r\n    window.addEventListener('resize', this.handleResize.bind(this));\r\n    window.addEventListener('orientationchange', this.handleResize.bind(this));\r\n  }\r\n\r\n  setupResizeListener() {\r\n    this.handleResize();\r\n  }\r\n\r\n  orientation = window.innerHeight > window.innerWidth ? 'portrait' : 'landscape';\r\n\r\n  async joinRoom(data: {\r\n    socket: Socket;\r\n    roomName: string;\r\n    islevel: string;\r\n    member: string;\r\n    sec: string;\r\n    apiUserName: string;\r\n  }): Promise<ResponseJoinRoom | null> {\r\n    const { socket, roomName, islevel, member, sec, apiUserName } = data;\r\n\r\n    try {\r\n      const response: ResponseJoinRoom | null = await this.joinRoomClient.joinRoomClient({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n      });\r\n\r\n      return response;\r\n    } catch (error) {\r\n      console.log('Error joining room:', error);\r\n      throw new Error('Failed to join the room. Please check your connection and try again.');\r\n    }\r\n  }\r\n\r\n  async join_Room({\r\n    socket,\r\n    roomName,\r\n    islevel,\r\n    member,\r\n    sec,\r\n    apiUserName,\r\n    isLocal = false,\r\n  }: {\r\n    socket: Socket;\r\n    roomName: string;\r\n    islevel: string;\r\n    member: string;\r\n    sec: string;\r\n    apiUserName: string;\r\n    isLocal?: boolean;\r\n  }): Promise<void> {\r\n    let data: ResponseJoinRoom | null;\r\n\r\n    if (!isLocal) {\r\n      data = await this.joinRoom({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n      });\r\n    } else {\r\n      const localData: ResponseJoinLocalRoom = await this.joinLocalRoom.joinLocalRoom({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n        parameters: {\r\n          showAlert:\r\n            this.showAlert ||\r\n            (() => {\r\n              console.log('showAlert not defined');\r\n            }),\r\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\r\n          connectSocket: this.socketManager.connectSocket,\r\n          connectLocalSocket: this.socketManager.connectLocalSocket,\r\n          updateSocket: this.updateSocket,\r\n          updateLocalSocket: this.updateLocalSocket,\r\n          updateValidated: this.updateValidated,\r\n          updateApiUserName: this.updateApiUserName,\r\n          updateApiToken: this.updateApiToken,\r\n          updateLink: this.updateLink,\r\n          updateRoomName: this.updateRoomName,\r\n          updateMember: this.updateMember,\r\n        },\r\n        checkConnect:\r\n          this.localLink.length > 0 &&\r\n          this.connectMediaSFU === true &&\r\n          !this.link.value.includes('mediasfu.com'),\r\n        localLink: this.localLink,\r\n        joinMediaSFURoom: this.joinMediaSFURoom,\r\n      });\r\n\r\n      data = await createResponseJoinRoom({ localRoom: localData });\r\n    }\r\n\r\n    const updateAndComplete = async (data: ResponseJoinRoom) => {\r\n      // Update room parameters\r\n      try {\r\n        // Check if roomRecvIPs is not empty\r\n        if (!data.roomRecvIPs || data.roomRecvIPs.length === 0) {\r\n          data.roomRecvIPs = ['none'];\r\n\r\n          if (\r\n            this.link.value !== \"\" &&\r\n            this.link.value.includes(\"mediasfu.com\") &&\r\n            !isLocal\r\n          ) {\r\n            // Community Edition Only\r\n            await this.receiveAllPipedTransports.receiveAllPipedTransports({\r\n              community: true,\r\n              nsock: this.getUpdatedAllParams().socket,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n        }\r\n\r\n\r\n        this.updateRoomParametersClient.updateRoomParametersClient({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n            data: data,\r\n          },\r\n        });\r\n\r\n        if (data.isHost) {\r\n          this.updateIslevel('2');\r\n        } else {\r\n          // Issue with isHost for local room\r\n          if (islevel !== '2') {\r\n            this.updateIslevel('1');\r\n          }\r\n        }\r\n\r\n        if (data.secureCode && data.secureCode !== '') {\r\n          this.updateAdminPasscode(data.secureCode);\r\n        }\r\n\r\n        if (data.rtpCapabilities) {\r\n          try {\r\n            const device_ = await this.createDeviceClient.createDeviceClient({\r\n              rtpCapabilities: data.rtpCapabilities,\r\n            });\r\n\r\n            if (device_) {\r\n              this.device.next(device_);\r\n            }\r\n          } catch (error) {\r\n            console.error('Error creating device:', error);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error('Error in updateAndComplete:', error);\r\n      }\r\n    };\r\n\r\n    if (data && data.success) {\r\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && isLocal) {\r\n        this.roomData.next(data);\r\n        return;\r\n      } else if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\r\n        // Update roomData\r\n        if (this.roomData.value) {\r\n          // Updating only the recording and meeting room parameters\r\n          this.roomData.value.recordingParams = data.recordingParams;\r\n          this.roomData.value.meetingRoomParams = data.meetingRoomParams;\r\n          this.roomData.next(this.roomData.value);\r\n        } else {\r\n          this.roomData.next(data);\r\n        }\r\n      } else {\r\n        // Update roomData\r\n        this.roomData.next(data);\r\n        if (!this.link.value.includes('mediasfu.com')) {\r\n          this.roomData.value!.meetingRoomParams = data.meetingRoomParams;\r\n        }\r\n      }\r\n\r\n      await updateAndComplete(data);\r\n    } else {\r\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\r\n        // Join local room only\r\n        if (this.roomData.value) {\r\n          await updateAndComplete(this.roomData.value);\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Might be a wrong room name or room is full or other error; check reason in data object if available\r\n      try {\r\n        if (this.showAlert && data?.reason) {\r\n          this.showAlert({\r\n            message: data.reason,\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n        }\r\n      } catch (error) {\r\n        /* handle error */\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  onParticipantsFilterChange = (value: string): void => {\r\n    if (value && value.length > 0) {\r\n      this.filteredParticipants.next(\r\n        this.participants.value.filter((participant) =>\r\n          participant.name.toLowerCase().includes(value.toLowerCase()),\r\n        ),\r\n      );\r\n      this.participantsCounter.next(this.filteredParticipants.value.length);\r\n    } else {\r\n      this.filteredParticipants.next(this.participants.value);\r\n      this.participantsCounter.next(this.participants.value.length);\r\n    }\r\n  };\r\n\r\n  updateStatesToInitialValues = async () => {\r\n    const initialValues = initialValuesState as { [key: string]: any };\r\n    const updateFunctions = this.getAllParams() as unknown as {\r\n      [key: string]: (value: any) => void;\r\n    };\r\n\r\n    for (const key in initialValues) {\r\n      if (Object.prototype.hasOwnProperty.call(initialValues, key)) {\r\n        const updateFunctionName = `update${key.charAt(0).toUpperCase() + key.slice(1)}`;\r\n        const updateFunction = updateFunctions[updateFunctionName];\r\n\r\n        if (typeof updateFunction === 'function') {\r\n          try {\r\n            updateFunction(initialValues[key]);\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  faRecordVinyl = faRecordVinyl;\r\n  faPlayCircle = faPlayCircle;\r\n  faPauseCircle = faPauseCircle;\r\n  faStopCircle = faStopCircle;\r\n  faDotCircle = faDotCircle;\r\n  faCog = faCog;\r\n  faUsers = faUsers;\r\n  faClock = faClock;\r\n  faUserPlus = faUserPlus;\r\n  faTools = faTools;\r\n  faDesktop = faDesktop;\r\n  faPoll = faPoll;\r\n  faUserFriends = faUserFriends;\r\n  faChalkboardTeacher = faChalkboardTeacher;\r\n  faMicrophone = faMicrophone;\r\n  faMicrophoneSlash = faMicrophoneSlash;\r\n  faVideo = faVideo;\r\n  faVideoSlash = faVideoSlash;\r\n  faPhone = faPhone;\r\n  faBars = faBars;\r\n  faComments = faComments;\r\n  faChartBar = faChartBar;\r\n\r\n  onCloseMenuModal = () => {\r\n    this.updateIsMenuModalVisible(false);\r\n  };\r\n\r\n  onEventSettingsClose = () => {\r\n    this.updateIsSettingsModalVisible(false);\r\n  };\r\n\r\n  onCoHostClose = () => {\r\n    this.updateIsCoHostModalVisible(false);\r\n  };\r\n\r\n  onMediaSettingsClose = () => {\r\n    this.updateIsMediaSettingsModalVisible(false);\r\n  };\r\n\r\n  onDisplaySettingsClose = () => {\r\n    this.updateIsDisplaySettingsModalVisible(false);\r\n  };\r\n\r\n  onPollClose = () => {\r\n    this.updateIsPollModalVisible(false);\r\n  };\r\n\r\n  onBreakoutRoomsClose = () => {\r\n    this.updateIsBreakoutRoomsModalVisible(false);\r\n  };\r\n\r\n  onConfigureWhiteboardClose = () => {\r\n    this.updateIsConfigureWhiteboardModalVisible(false);\r\n  };\r\n\r\n  onMessagesClose = () => {\r\n    this.updateIsMessagesModalVisible(false);\r\n  };\r\n\r\n  onRecordingClose = () => {\r\n    this.updateIsRecordingModalVisible(false);\r\n  };\r\n\r\n  onParticipantsClose = () => {\r\n    this.updateIsParticipantsModalVisible(false);\r\n  };\r\n\r\n  onBackgroundClose = () => {\r\n    this.updateIsBackgroundModalVisible(false);\r\n  };\r\n\r\n  onConfirmExitClose = () => {\r\n    this.updateIsConfirmExitModalVisible(false);\r\n  };\r\n\r\n  onConfirmHereClose = () => {\r\n    this.updateIsConfirmHereModalVisible(false);\r\n  };\r\n\r\n  onScreenboardClose = () => {\r\n    this.updateIsScreenboardModalVisible(false);\r\n  };\r\n\r\n  onShareEventClose = () => {\r\n    this.updateIsShareEventModalVisible(false);\r\n  };\r\n\r\n  onAlertHide = () => {\r\n    this.updateAlertVisible(false);\r\n  };\r\n\r\n  ScreenboardWidget = {\r\n    component: Screenboard,\r\n    inputs: {\r\n      customWidth: this.componentSizes.value.mainWidth,\r\n      customHeight: this.componentSizes.value.mainHeight,\r\n      parameters: this.mediaSFUParameters,\r\n      showAspect: this.shared.value,\r\n    },\r\n  };\r\n\r\n  recordTimerWidget = {\r\n    component: RecordTimerWidget,\r\n    injector: this.createInjector({ recordingProgressTime: this.recordingProgressTime.value }),\r\n  };\r\n\r\n  updateRecordTimerWidget = (\r\n    recordingProgressTime: string = this.recordingProgressTime.value,\r\n  ): { component: any; injector: Injector } => {\r\n    const recordTimerWidget = {\r\n      component: RecordTimerWidget,\r\n      injector: this.createInjector({ recordingProgressTime: recordingProgressTime }),\r\n    };\r\n\r\n    this.recordTimerWidget = { ...recordTimerWidget };\r\n\r\n    this.cdr.markForCheck();\r\n\r\n    return recordTimerWidget;\r\n  };\r\n\r\n  recordButtons: MainButtonAlt[] = [];\r\n\r\n  recordButtonsArray: MainButtonAlt[] = [\r\n    {\r\n      icon: this.faPlayCircle,\r\n      active: () => !this.recordPaused.value,\r\n      onPress: () =>\r\n        this.updateRecording.updateRecording({\r\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n        }),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      alternateIcon: this.faPauseCircle,\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faStopCircle,\r\n      active: () => false,\r\n      onPress: () =>\r\n        this.stopRecording.stopRecording({\r\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'black',\r\n      show: () => true,\r\n    },\r\n    {\r\n      customComponent: () => this.updateRecordTimerWidget(),\r\n      show: () => true,\r\n      active: () => false,\r\n    },\r\n    {\r\n      icon: this.faDotCircle,\r\n      active: () => false,\r\n      onPress: () => console.log('Status pressed'),\r\n      activeColor: 'black',\r\n      inActiveColor: () => (this.recordPaused.value ? 'yellow' : 'red'),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faCog,\r\n      active: () => false,\r\n      onPress: () =>\r\n        this.launchRecording.launchRecording({\r\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n          showAlert: this.showAlert.bind(this),\r\n          stopLaunchRecord: this.stopLaunchRecord.value,\r\n          canLaunchRecord: this.canLaunchRecord.value,\r\n          recordingAudioSupport: this.recordingAudioSupport.value,\r\n          recordingVideoSupport: this.recordingVideoSupport.value,\r\n          updateCanRecord: this.updateCanRecord.bind(this),\r\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n          recordStarted: this.recordStarted.value,\r\n          recordPaused: this.recordPaused.value,\r\n          localUIMode: this.localUIMode.value,\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'black',\r\n      show: () => true,\r\n    },\r\n  ];\r\n\r\n  async updateRecordButtons() {\r\n    const recordButtons = this.recordButtonsArray.map((button) => {\r\n      return {\r\n        ...button,\r\n        active: typeof button.active === 'function' ? button.active() : button.active,\r\n        show: typeof button.show === 'function' ? button.show() : button.show,\r\n        customComponent: button.customComponent\r\n          ? typeof button.customComponent === 'function'\r\n            ? button.customComponent()\r\n            : button.customComponent\r\n          : undefined,\r\n        activeColor:\r\n          typeof button.inActiveColor === 'function'\r\n            ? button.inActiveColor()\r\n            : button.inActiveColor,\r\n        inActiveColor:\r\n          typeof button.inActiveColor === 'function'\r\n            ? button.inActiveColor()\r\n            : button.inActiveColor,\r\n      };\r\n    });\r\n    this.recordButtons = [...recordButtons];\r\n    await this.updateMenuRecordWidget(recordButtons);\r\n    this.updateCustomMenuButtons();\r\n\r\n    this.cdr.markForCheck();\r\n  }\r\n\r\n  // Create instances of the custom widgets\r\n  menuWidget = {\r\n    component: MenuWidget,\r\n    injector: this.createInjector({\r\n      icon: this.faBars,\r\n      badgeValue: this.totalReqWait.value,\r\n      iconColor: 'black',\r\n      showBadge: true,\r\n    }),\r\n  };\r\n\r\n  messageWidget = {\r\n    component: MessageWidget,\r\n    injector: this.createInjector({\r\n      icon: this.faComments,\r\n      showBadge: this.showMessagesBadge.value,\r\n      badgeValue: 1,\r\n      iconColor: 'black',\r\n    }),\r\n  };\r\n\r\n  menuRecordWidget = {\r\n    component: MenuRecordWidget,\r\n    injector: this.createInjector({\r\n      buttons: this.recordButtons,\r\n      showAspect: true,\r\n      direction: 'horizontal',\r\n    }),\r\n  };\r\n\r\n  updateMenuRecordWidget = (recordButtons: MainButtonAlt[] = this.recordButtons): any => {\r\n    const menuRecordWidget = {\r\n      component: MenuRecordWidget,\r\n      injector: this.createInjector({\r\n        buttons: recordButtons,\r\n        showAspect: true,\r\n        direction: 'horizontal',\r\n      }),\r\n    };\r\n\r\n    this.menuRecordWidget = { ...menuRecordWidget };\r\n\r\n    this.cdr.markForCheck();\r\n\r\n    return menuRecordWidget;\r\n  };\r\n\r\n  menuParticipantsWidget = {\r\n    component: MenuParticipantsWidget,\r\n    injector: this.createInjector({\r\n      icon: this.faChartBar,\r\n      participantsCounter: this.participantsCounter.value,\r\n      iconColor: 'black',\r\n    }),\r\n  };\r\n\r\n  updateMenuParticipantsWidget = (count: number = this.participantsCounter.value): any => {\r\n    const menuParticipantsWidget = {\r\n      component: MenuParticipantsWidget,\r\n      injector: this.createInjector({\r\n        icon: this.faChartBar,\r\n        participantsCounter: count,\r\n        iconColor: 'black',\r\n      }),\r\n    };\r\n\r\n    this.menuParticipantsWidget = { ...menuParticipantsWidget };\r\n\r\n    this.cdr.markForCheck();\r\n\r\n    return menuParticipantsWidget;\r\n  };\r\n\r\n  customMenuButtonsArray: MainCustomButton[] = [\r\n    {\r\n      icon: this.faRecordVinyl,\r\n      text: 'Record',\r\n      action: () =>\r\n        this.launchRecording.launchRecording({\r\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n          showAlert: this.showAlert.bind(this),\r\n          stopLaunchRecord: this.stopLaunchRecord.value,\r\n          canLaunchRecord: this.canLaunchRecord.value,\r\n          recordingAudioSupport: this.recordingAudioSupport.value,\r\n          recordingVideoSupport: this.recordingVideoSupport.value,\r\n          updateCanRecord: this.updateCanRecord.bind(this),\r\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n          recordStarted: this.recordStarted.value,\r\n          recordPaused: this.recordPaused.value,\r\n          localUIMode: this.localUIMode.value,\r\n        }),\r\n      show: () => !this.showRecordButtons.value && this.islevel.value == '2',\r\n    },\r\n    {\r\n      customComponent: () => this.updateMenuRecordWidget(),\r\n      show: () => this.showRecordButtons.value && this.islevel.value == '2',\r\n      action: () => console.log('record buttons pressed'),\r\n    },\r\n    {\r\n      icon: this.faCog,\r\n      text: 'Event Settings',\r\n      action: () =>\r\n        this.launchSettings.launchSettings({\r\n          updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\r\n          isSettingsModalVisible: this.isSettingsModalVisible.value,\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faUsers,\r\n      text: 'Requests',\r\n      action: () =>\r\n        this.launchRequests.launchRequests({\r\n          updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\r\n          isRequestsModalVisible: this.isRequestsModalVisible.value,\r\n        }),\r\n      show: () =>\r\n        this.islevel.value == '2' ||\r\n        ((this.coHostResponsibility.value &&\r\n          this.coHost.value &&\r\n          this.coHost.value === this.member.value &&\r\n          !!this.coHostResponsibility?.value?.find((item) => item.name === 'media')?.value) ??\r\n          false) ||\r\n        false,\r\n    },\r\n    {\r\n      icon: this.faClock,\r\n      text: 'Waiting',\r\n      action: () =>\r\n        this.launchWaiting.launchWaiting({\r\n          updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\r\n          isWaitingModalVisible: this.isWaitingModalVisible.value,\r\n        }),\r\n      show: () =>\r\n        this.islevel.value == '2' ||\r\n        (this.coHostResponsibility.value &&\r\n          this.coHost.value &&\r\n          this.coHost.value === this.member.value &&\r\n          this.coHostResponsibility?.value?.find((item) => item.name === 'waiting')?.value ===\r\n          true) ||\r\n        false,\r\n    },\r\n    {\r\n      icon: this.faUserPlus,\r\n      text: 'Co-host',\r\n      action: () =>\r\n        this.launchCoHost.launchCoHost({\r\n          updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\r\n          isCoHostModalVisible: this.isCoHostModalVisible.value,\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faTools,\r\n      text: 'Set Media',\r\n      action: () =>\r\n        this.launchMediaSettings.launchMediaSettings({\r\n          updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\r\n          isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\r\n          audioInputs: this.audioInputs.value,\r\n          videoInputs: this.videoInputs.value,\r\n          updateAudioInputs: this.updateAudioInputs.bind(this),\r\n          updateVideoInputs: this.updateVideoInputs.bind(this),\r\n        }),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faDesktop,\r\n      text: 'Display',\r\n      action: () =>\r\n        this.launchDisplaySettings.launchDisplaySettings({\r\n          updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\r\n          isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\r\n        }),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faPoll,\r\n      text: 'Poll',\r\n      action: () =>\r\n        this.launchPoll.launchPoll({\r\n          updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\r\n          isPollModalVisible: this.isPollModalVisible.value,\r\n        }),\r\n      show: () => true,\r\n    },\r\n    {\r\n      icon: this.faUserFriends,\r\n      text: 'Breakout Rooms',\r\n      action: () =>\r\n        this.launchBreakoutRooms.launchBreakoutRooms({\r\n          updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\r\n          isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n    {\r\n      icon: this.faChalkboardTeacher,\r\n      text: 'Whiteboard',\r\n      action: () =>\r\n        this.launchConfigureWhiteboard.launchConfigureWhiteboard({\r\n          updateIsConfigureWhiteboardModalVisible:\r\n            this.updateIsConfigureWhiteboardModalVisible.bind(this),\r\n          isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\r\n        }),\r\n      show: () => this.islevel.value == '2',\r\n    },\r\n  ];\r\n\r\n  customMenuButtons: MainCustomButton[] = [];\r\n\r\n  updateCustomMenuButtons() {\r\n    this.customMenuButtons = this.customMenuButtonsArray.map((button) => {\r\n      return {\r\n        ...button,\r\n        show: typeof button.show === 'function' ? button.show() : button.show,\r\n        customComponent: button.customComponent\r\n          ? typeof button.customComponent === 'function'\r\n            ? button.customComponent()\r\n            : button.customComponent\r\n          : undefined,\r\n      };\r\n    });\r\n  }\r\n\r\n  screenShareWidget = {\r\n    component: ScreenShareWidget,\r\n    injector: this.createInjector({ disabled: !this.screenShareActive.value }),\r\n  };\r\n\r\n  controlButtons = [\r\n    {\r\n      icon: this.faMicrophoneSlash,\r\n      alternateIcon: this.faMicrophone,\r\n      active: this.micActive.value,\r\n      onPress: () =>\r\n        this.clickAudio.clickAudio({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      disabled: this.audioSwitching.value,\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faVideoSlash,\r\n      alternateIcon: this.faVideo,\r\n      active: this.videoActive.value,\r\n      onPress: () =>\r\n        this.clickVideo.clickVideo({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n            MediaStream,\r\n            MediaStreamTrack,\r\n            mediaDevices: MediaDevices,\r\n            device: this.device.value,\r\n            socket: this.socket.value,\r\n            showAlert: this.showAlert.bind(this),\r\n            checkPermission: this.checkPermission.checkPermission,\r\n            streamSuccessVideo: this.streamSuccessVideo.streamSuccessVideo,\r\n            hasCameraPermission: this.hasCameraPermission.value,\r\n            requestPermissionCamera: this.requestPermissionCamera.bind(this),\r\n            checkMediaPermission: 'web' !== 'web',\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      disabled: this.videoSwitching.value,\r\n      show: true,\r\n    },\r\n    {\r\n      //inverted active for inactive state\r\n      icon: faDesktop,\r\n      alternateIconComponent: this.screenShareWidget,\r\n      active: true,\r\n      onPress: () =>\r\n        this.clickScreenShare.clickScreenShare({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      disabled: false,\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faPhone,\r\n      active: this.endCallActive.value,\r\n      onPress: () =>\r\n        this.launchConfirmExit.launchConfirmExit({\r\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\r\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      disabled: false,\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faUsers,\r\n      active: this.participantsActive.value,\r\n      onPress: () =>\r\n        this.launchParticipants.launchParticipants({\r\n          updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\r\n          isParticipantsModalVisible: this.isParticipantsModalVisible.value,\r\n        }),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      disabled: false,\r\n      show: true,\r\n    },\r\n    {\r\n      customComponent: this.menuWidget,\r\n      customName: 'Menu',\r\n      onPress: () =>\r\n        this.launchMenuModal.launchMenuModal({\r\n          updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\r\n          isMenuModalVisible: this.isMenuModalVisible.value,\r\n        }),\r\n      show: true,\r\n    },\r\n    {\r\n      customComponent: this.messageWidget,\r\n      customName: 'Messages',\r\n      onPress: () =>\r\n        this.launchMessages.launchMessages({\r\n          updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\r\n          isMessagesModalVisible: this.isMessagesModalVisible.value,\r\n        }),\r\n      show: true,\r\n    },\r\n  ];\r\n\r\n  async connect_Socket(\r\n    apiUserName: string,\r\n    token: string,\r\n    skipSockets: boolean = false\r\n  ): Promise<Socket | null> {\r\n\r\n    const socketDefault = this.socket.value;\r\n    const socketAlt =\r\n      this.connectMediaSFU && this.localSocket!.value && this.localSocket!.value.id\r\n        ? this.localSocket!.value\r\n        : socketDefault;\r\n\r\n    if (this.socket.value && this.socket.value.id) {\r\n      if (!skipSockets) {\r\n        // Event listeners on socketDefault\r\n        socketDefault.on('disconnect', async () => {\r\n          await this.disconnect.disconnect({\r\n            showAlert: this.showAlert.bind(this),\r\n            redirectURL: this.redirectURL.value,\r\n            onWeb: true,\r\n            updateValidated: this.updateValidated.bind(this),\r\n          });\r\n          if (this.videoAlreadyOn.value) {\r\n            await this.clickVideo.clickVideo({\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n          if (this.audioAlreadyOn.value) {\r\n            await this.clickAudio.clickAudio({\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n          await this.closeAndReset();\r\n        });\r\n\r\n        socketDefault.on('allMembers', async (membersData: AllMembersData) => {\r\n          if (membersData) {\r\n            await this.allMembers.allMembers({\r\n              apiUserName: apiUserName,\r\n              apiKey: '', //not recommended - use apiToken instead. Use for testing/development only\r\n              apiToken: token,\r\n              members: membersData.members,\r\n              requestss: membersData.requests ? membersData.requests : this.requestList.value,\r\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\r\n              coHostRes: membersData.coHostResponsibilities\r\n                ? membersData.coHostResponsibilities\r\n                : this.coHostResponsibility.value,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              consume_sockets: this.consume_sockets.value,\r\n            });\r\n          }\r\n        });\r\n\r\n        socketDefault.on('allMembersRest', async (membersData: AllMembersRestData) => {\r\n          if (membersData) {\r\n            await this.allMembersRest.allMembersRest({\r\n              apiUserName: apiUserName,\r\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\r\n              members: membersData.members,\r\n              apiToken: token,\r\n              settings: membersData.settings,\r\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\r\n              coHostRes: membersData.coHostResponsibilities\r\n                ? membersData.coHostResponsibilities\r\n                : this.coHostResponsibility.value,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              consume_sockets: this.consume_sockets.value,\r\n            });\r\n          }\r\n        });\r\n\r\n        socketDefault.on('userWaiting', async ({ name }: { name: string }) => {\r\n          await this.userWaiting.userWaiting({\r\n            name,\r\n            showAlert: this.showAlert.bind(this),\r\n            totalReqWait: this.totalReqWait.value,\r\n            updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on('personJoined', async ({ name }: { name: string }) => {\r\n          this.personJoined.personJoined({\r\n            name,\r\n            showAlert: this.showAlert.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'allWaitingRoomMembers',\r\n          async (waiting_data: AllWaitingRoomMembersData) => {\r\n            await this.allWaitingRoomMembers.allWaitingRoomMembers({\r\n              waitingParticipants: waiting_data.waitingParticipants\r\n                ? waiting_data.waitingParticipants\r\n                : waiting_data.waitingParticipantss\r\n                  ? waiting_data.waitingParticipantss\r\n                  : this.waitingRoomList.value,\r\n              updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n              updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('ban', async ({ name }: { name: string }) => {\r\n          await this.banParticipant.banParticipant({\r\n            name,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        });\r\n\r\n        socketDefault.on('updatedCoHost', async (cohost_data: UpdatedCoHostData) => {\r\n          await this.updatedCoHost.updatedCoHost({\r\n            coHost: cohost_data.coHost ? cohost_data.coHost : this.coHost.value,\r\n            coHostResponsibility: cohost_data.coHostResponsibilities\r\n              ? cohost_data.coHostResponsibilities\r\n              : this.coHostResponsibility.value,\r\n            youAreCoHost: this.youAreCoHost.value,\r\n            updateCoHost: this.updateCoHost.bind(this),\r\n            updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\r\n            updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\r\n            showAlert: this.showAlert.bind(this),\r\n            eventType: this.eventType.value,\r\n            islevel: this.islevel.value,\r\n            member: this.member.value,\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'participantRequested',\r\n          async ({ userRequest }: { userRequest: Request }) => {\r\n            await this.participantRequested.participantRequested({\r\n              userRequest,\r\n              requestList: this.requestList.value,\r\n              waitingRoomList: this.waitingRoomList.value,\r\n              updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n              updateRequestList: this.updateRequestList.bind(this),\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('screenProducerId', async ({ producerId }: { producerId: string }) => {\r\n          this.screenProducerId.screenProducerId({\r\n            producerId,\r\n            screenId: this.screenId.value,\r\n            membersReceived: this.membersReceived.value,\r\n            shareScreenStarted: this.shareScreenStarted.value,\r\n            deferScreenReceived: this.deferScreenReceived.value,\r\n            participants: this.participants.value,\r\n            updateScreenId: this.updateScreenId.bind(this),\r\n            updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\r\n            updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on('updateMediaSettings', async ({ settings }: { settings: Settings }) => {\r\n          this.updateMediaSettings.updateMediaSettings({\r\n            settings,\r\n            updateAudioSetting: this.updateAudioSetting.bind(this),\r\n            updateVideoSetting: this.updateVideoSetting.bind(this),\r\n            updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\r\n            updateChatSetting: this.updateChatSetting.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'producer-media-paused',\r\n          async ({\r\n            producerId,\r\n            kind,\r\n            name,\r\n          }: {\r\n            producerId: string;\r\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\r\n            name: string;\r\n          }) => {\r\n            await this.producerMediaPaused.producerMediaPaused({\r\n              producerId,\r\n              kind,\r\n              name,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'producer-media-resumed',\r\n          async ({ kind, name }: { kind: 'audio'; name: string }) => {\r\n            await this.producerMediaResumed.producerMediaResumed({\r\n              kind,\r\n              name,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'producer-media-closed',\r\n          async ({\r\n            producerId,\r\n            kind,\r\n          }: {\r\n            producerId: string;\r\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\r\n          }) => {\r\n            if (producerId && kind) {\r\n              await this.producerMediaClosed.producerMediaClosed({\r\n                producerId,\r\n                kind,\r\n                parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              });\r\n            }\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'controlMediaHost',\r\n          async ({ type }: { type: 'video' | 'audio' | 'screenshare' | 'chat' | 'all' }) => {\r\n            await this.controlMediaHost.controlMediaHost({\r\n              type,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('meetingEnded', async () => {\r\n          await this.meetingEnded.meetingEnded({\r\n            showAlert: this.showAlert.bind(this),\r\n            redirectURL: this.redirectURL.value,\r\n            onWeb: true,\r\n            eventType: this.eventType.value,\r\n            updateValidated: this.updateValidated.bind(this),\r\n          });\r\n\r\n          if (this.videoAlreadyOn.value) {\r\n            await this.clickVideo.clickVideo({\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          }\r\n          if (this.audioAlreadyOn.value) {\r\n            await this.clickAudio.clickAudio({\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          }\r\n\r\n          await this.closeAndReset();\r\n        });\r\n\r\n        socketDefault.on('disconnectUserSelf', async () => {\r\n          await this.disconnectUserSelf.disconnectUserSelf({\r\n            socket: socketDefault,\r\n            member: this.member.value,\r\n            roomName: this.roomName.value,\r\n          });\r\n        });\r\n\r\n        socketDefault.on('receiveMessage', async ({ message }: { message: Message }) => {\r\n          await this.receiveMessage.receiveMessage({\r\n            message,\r\n            messages: this.messages.value,\r\n            participantsAll: this.participantsAll.value,\r\n            member: this.member.value,\r\n            eventType: this.eventType.value,\r\n            islevel: this.islevel.value,\r\n            coHost: this.coHost.value,\r\n            updateMessages: this.updateMessages.bind(this),\r\n            updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'meetingTimeRemaining',\r\n          async ({ timeRemaining }: { timeRemaining: number }) => {\r\n            await this.meetingTimeRemaining.meetingTimeRemaining({\r\n              timeRemaining,\r\n              showAlert: this.showAlert.bind(this),\r\n              eventType: this.eventType.value,\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('meetingStillThere', async () => {\r\n          this.meetingStillThere.meetingStillThere({\r\n            updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'updateConsumingDomains',\r\n          async ({ domains, alt_domains }: UpdateConsumingDomainsData) => {\r\n            await this.updateConsumingDomains.updateConsumingDomains({\r\n              domains,\r\n              alt_domains,\r\n              apiUserName,\r\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\r\n              apiToken: token,\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'hostRequestResponse',\r\n          ({ requestResponse }: HostRequestResponseData) => {\r\n            this.hostRequestResponse.hostRequestResponse({\r\n              requestResponse,\r\n              showAlert: this.showAlert.bind(this),\r\n              requestList: this.requestList.value,\r\n              updateRequestList: this.updateRequestList.bind(this),\r\n              updateMicAction: this.updateMicAction.bind(this),\r\n              updateVideoAction: this.updateVideoAction.bind(this),\r\n              updateScreenAction: this.updateScreenAction.bind(this),\r\n              updateChatAction: this.updateChatAction.bind(this),\r\n              updateAudioRequestState: this.updateAudioRequestState.bind(this),\r\n              updateVideoRequestState: this.updateVideoRequestState.bind(this),\r\n              updateScreenRequestState: this.updateScreenRequestState.bind(this),\r\n              updateChatRequestState: this.updateChatRequestState.bind(this),\r\n              updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\r\n              updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\r\n              updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\r\n              updateChatRequestTime: this.updateChatRequestTime.bind(this),\r\n              updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('pollUpdated', async (data: PollUpdatedData) => {\r\n          try {\r\n            await this.pollUpdated.pollUpdated({\r\n              data,\r\n              polls: this.polls.value,\r\n              poll: this.poll.value ? this.poll.value : ({} as Poll),\r\n              member: this.member.value,\r\n              islevel: this.islevel.value,\r\n              showAlert: this.showAlert.bind(this),\r\n              updatePolls: this.updatePolls.bind(this),\r\n              updatePoll: this.updatePoll.bind(this),\r\n              updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\r\n            });\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        });\r\n\r\n        socketDefault.on('breakoutRoomUpdated', async (data: BreakoutRoomUpdatedData) => {\r\n          try {\r\n            await this.breakoutRoomUpdated.breakoutRoomUpdated({\r\n              data,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        });\r\n\r\n      }\r\n\r\n      if (skipSockets) {\r\n        // Remove specific event listeners from socketDefault and socketAlt\r\n        const events = [\r\n          'roomRecordParams',\r\n          'startRecords',\r\n          'reInitiateRecording',\r\n          'RecordingNotice',\r\n          'timeLeftRecording',\r\n          'stoppedRecording',\r\n        ];\r\n        events.forEach((event) => {\r\n          socketDefault.off(event);\r\n          socketAlt.off(event);\r\n        });\r\n      }\r\n\r\n      socketAlt.on(\r\n        'roomRecordParams',\r\n        async ({ recordParams }: { recordParams: RecordParams }) => {\r\n          this.roomRecordParams.roomRecordParams({\r\n            recordParams,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        },\r\n      );\r\n\r\n      socketAlt.on('startRecords', async () => {\r\n        await this.startRecords.startRecords({\r\n          roomName: this.roomName.value,\r\n          member: this.member.value,\r\n          socket: socketAlt,\r\n        });\r\n      });\r\n\r\n      socketAlt.on('reInitiateRecording', async () => {\r\n        await this.reInitiateRecording.reInitiateRecording({\r\n          roomName: this.roomName.value,\r\n          member: this.member.value,\r\n          socket: socketAlt,\r\n          adminRestrictSetting: this.adminRestrictSetting.value,\r\n        });\r\n      });\r\n\r\n      socketAlt.on(\r\n        'RecordingNotice',\r\n        async ({ state, userRecordingParam, pauseCount, timeDone }: RecordingNoticeData) => {\r\n          await this.recordingNotice.RecordingNotice({\r\n            state,\r\n            userRecordingParam,\r\n            pauseCount,\r\n            timeDone,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        },\r\n      );\r\n\r\n      socketAlt.on('timeLeftRecording', async ({ timeLeft }: { timeLeft: number }) => {\r\n        this.timeLeftRecording.timeLeftRecording({\r\n          timeLeft,\r\n          showAlert: this.showAlert.bind(this),\r\n        });\r\n      });\r\n\r\n      socketAlt.on(\r\n        'stoppedRecording',\r\n        async ({ state, reason }: { state: string; reason: string }) => {\r\n          await this.stoppedRecording.stoppedRecording({\r\n            state,\r\n            reason,\r\n            showAlert: this.showAlert.bind(this),\r\n          });\r\n        },\r\n      );\r\n\r\n      if (this.localLink !== \"\" && socketDefault && !skipSockets) {\r\n        await this.join_Room({\r\n          socket: socketDefault,\r\n          roomName: this.roomName.value,\r\n          islevel: this.islevel.value,\r\n          member: this.member.value,\r\n          sec: token,\r\n          apiUserName: apiUserName,\r\n          isLocal: true,\r\n        });\r\n      }\r\n\r\n      // Check if localSocket has changed\r\n      const localChanged =\r\n        this.localSocket!.value && this.localSocket!.value.id && this.localSocket!.value.id !== socketAlt.id;\r\n\r\n\r\n      if (!skipSockets && localChanged) {\r\n        // Re-call connect_Socket with skipSockets = true\r\n        await this.connect_Socket(apiUserName, token, true);\r\n        await sleep({ ms: 1000 })\r\n        this.updateIsLoadingModalVisible(false);\r\n        return socketDefault;\r\n      } else {\r\n        if (this.link.value !== '' && this.link.value.includes('mediasfu.com')) {\r\n          // Token might be different for local room\r\n          const token = this.apiToken.value;\r\n          await this.join_Room({\r\n            socket:\r\n              this.connectMediaSFU && socketAlt && socketAlt.id ? socketAlt : socketDefault,\r\n            roomName: this.roomName.value,\r\n            islevel: this.islevel.value,\r\n            member: this.member.value,\r\n            sec: token,\r\n            apiUserName: apiUserName,\r\n          });\r\n        }\r\n\r\n        await this.receiveRoomMessages.receiveRoomMessages({\r\n          socket: socketDefault,\r\n          roomName: this.roomName.value,\r\n          updateMessages: this.updateMessages.bind(this),\r\n        });\r\n\r\n        if (!skipSockets) {\r\n          await this.prepopulateUserMedia.prepopulateUserMedia({\r\n            name: this.hostLabel.value,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        }\r\n\r\n        return socketDefault;\r\n      }\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  HostListener,\r\n  Injector,\r\n  ChangeDetectorRef,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  faMicrophoneSlash,\r\n  faVideoSlash,\r\n  faPhone,\r\n  faComments,\r\n  faShareAlt,\r\n  faSync,\r\n  faVideo,\r\n  faMicrophone,\r\n} from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport { initialValuesState } from '../../methods/utils/initial-values.util';\r\n\r\n// Components for display\r\nimport { MainAspectComponent } from '../display-components/main-aspect-component/main-aspect-component.component';\r\nimport { LoadingModal } from '../display-components/loading-modal/loading-modal.component';\r\nimport { ControlButtonsComponentTouch } from '../display-components/control-buttons-component-touch/control-buttons-component-touch.component';\r\nimport { OtherGridComponent } from '../display-components/other-grid-component/other-grid-component.component';\r\nimport { MainScreenComponent } from '../display-components/main-screen-component/main-screen-component.component';\r\nimport { MainContainerComponent } from '../display-components/main-container-component/main-container-component.component';\r\nimport { AlertComponent } from '../display-components/alert-component/alert.component.component';\r\nimport { MessagesModal } from '../message-components/messages-modal/messages-modal.component';\r\nimport { ConfirmExitModal } from '../exit-components/confirm-exit-modal/confirm-exit-modal.component';\r\nimport { ConfirmHereModal } from '../misc-components/confirm-here-modal/confirm-here-modal.component';\r\nimport { ShareEventModal } from '../misc-components/share-event-modal/share-event-modal.component';\r\nimport {\r\n  WelcomePage,\r\n  WelcomePageOptions,\r\n} from '../misc-components/welcome-page/welcome-page.component';\r\n\r\n// Pagination and display of media\r\nimport { FlexibleGrid } from '../display-components/flexible-grid/flexible-grid.component';\r\nimport { AudioGrid } from '../display-components/audio-grid/audio-grid.component';\r\n\r\nimport { MessageWidget } from '../display-components/control-widgets/message-widget.component';\r\n\r\nimport {\r\n  ButtonTouch,\r\n  ResponseJoinRoom,\r\n  ResponseJoinLocalRoom,\r\n  CoHostResponsibility,\r\n  EventType,\r\n  Participant,\r\n  ConsumeSocket,\r\n  MeetingRoomParams,\r\n  VidCons,\r\n  HParamsType,\r\n  VParamsType,\r\n  ScreenParamsType,\r\n  AParamsType,\r\n  UserRecordingParams,\r\n  Stream,\r\n  AudioDecibels,\r\n  ScreenState,\r\n  GridSizes,\r\n  CustomMediaComponent,\r\n  Message,\r\n  WaitingRoomParticipant,\r\n  ComponentSizes,\r\n  Transport as TransportType,\r\n  Shape,\r\n  Poll,\r\n  BreakoutParticipant,\r\n  WhiteboardUser,\r\n  Request,\r\n  AllMembersData,\r\n  AllMembersRestData,\r\n  SeedData,\r\n  UpdateConsumingDomainsData,\r\n  PreJoinPageOptions,\r\n  CreateMediaSFURoomOptions,\r\n  JoinMediaSFURoomOptions,\r\n  JoinRoomOnMediaSFUType,\r\n  CreateRoomOnMediaSFUType,\r\n} from '../../@types/types';\r\nimport { createResponseJoinRoom } from '../../methods/utils/create-response-join-room.util';\r\n\r\n// Import methods for control\r\nimport { LaunchMessages } from '../../methods/message-methods/launch-messages.service';\r\nimport { LaunchConfirmExit } from '../../methods/exit-methods/launch-confirm-exit.service';\r\n\r\n// Mediasfu functions -- examples\r\nimport { SocketManager } from '../../sockets/socket-manager.service';\r\nimport { JoinRoomClient } from '../../producer-client/producer-client-emits/join-room-client.service';\r\nimport { JoinLocalRoom } from '../../producers/producer-emits/join-local-room.service';\r\nimport { UpdateRoomParametersClient } from '../../producer-client/producer-client-emits/update-room-parameters-client.service';\r\nimport { CreateDeviceClient } from '../../producer-client/producer-client-emits/create-device-client.service';\r\n\r\nimport { SwitchVideoAlt } from '../../methods/stream-methods/switch-video-alt.service';\r\nimport { ClickVideo } from '../../methods/stream-methods/click-video.service';\r\nimport { ClickAudio } from '../../methods/stream-methods/click-audio.service';\r\nimport { ClickScreenShare } from '../../methods/stream-methods/click-screen-share.service';\r\nimport { StreamSuccessVideo } from '../../consumers/stream-success-video.service';\r\nimport { StreamSuccessAudio } from '../../consumers/stream-success-audio.service';\r\nimport { StreamSuccessScreen } from '../../consumers/stream-success-screen.service';\r\nimport { StreamSuccessAudioSwitch } from '../../consumers/stream-success-audio-switch.service';\r\nimport { CheckPermission } from '../../consumers/check-permission.service';\r\n\r\n// Mediasfu consumer functions\r\nimport { UpdateMiniCardsGrid } from '../../consumers/update-mini-cards-grid.service';\r\nimport { MixStreams } from '../../consumers/mix-streams.service';\r\nimport { DispStreams } from '../../consumers/disp-streams.service';\r\nimport { StopShareScreen } from '../../consumers/stop-share-screen.service';\r\nimport { CheckScreenShare } from '../../consumers/check-screen-share.service';\r\nimport { StartShareScreen } from '../../consumers/start-share-screen.service';\r\nimport { RequestScreenShare } from '../../consumers/request-screen-share.service';\r\nimport { ReorderStreams } from '../../consumers/reorder-streams.service';\r\nimport { PrepopulateUserMedia } from '../../consumers/prepopulate-user-media.service';\r\nimport { GetVideos } from '../../consumers/get-videos.service';\r\nimport { RePort } from '../../consumers/re-port.service';\r\nimport { Trigger } from '../../consumers/trigger.service';\r\nimport { ConsumerResume } from '../../consumers/consumer-resume.service';\r\nimport { ConnectSendTransportAudio } from '../../consumers/connect-send-transport-audio.service';\r\nimport { ConnectSendTransportVideo } from '../../consumers/connect-send-transport-video.service';\r\nimport { ConnectSendTransportScreen } from '../../consumers/connect-send-transport-screen.service';\r\nimport { ProcessConsumerTransports } from '../../consumers/process-consumer-transports.service';\r\nimport { ResumePauseStreams } from '../../consumers/resume-pause-streams.service';\r\nimport { Readjust } from '../../consumers/readjust.service';\r\nimport { CheckGrid } from '../../consumers/check-grid.service';\r\nimport { GetEstimate } from '../../consumers/get-estimate.service';\r\nimport { CalculateRowsAndColumns } from '../../consumers/calculate-rows-and-columns.service';\r\nimport { AddVideosGrid } from '../../consumers/add-videos-grid.service';\r\nimport { OnScreenChanges } from '../../consumers/on-screen-changes.service';\r\nimport { sleep } from '../../methods/utils/sleep.util';\r\nimport { ChangeVids } from '../../consumers/change-vids.service';\r\nimport { CompareActiveNames } from '../../consumers/compare-active-names.service';\r\nimport { CompareScreenStates } from '../../consumers/compare-screen-states.service';\r\nimport { CreateSendTransport } from '../../consumers/create-send-transport.service';\r\nimport { ResumeSendTransportAudio } from '../../consumers/resume-send-transport-audio.service';\r\nimport { ReceiveAllPipedTransports } from '../../consumers/receive-all-piped-transports.service';\r\nimport { DisconnectSendTransportVideo } from '../../consumers/disconnect-send-transport-video.service';\r\nimport { DisconnectSendTransportAudio } from '../../consumers/disconnect-send-transport-audio.service';\r\nimport { DisconnectSendTransportScreen } from '../../consumers/disconnect-send-transport-screen.service';\r\nimport { ConnectSendTransport } from '../../consumers/connect-send-transport.service';\r\nimport { GetPipedProducersAlt } from '../../consumers/get-piped-producers-alt.service';\r\nimport { SignalNewConsumerTransport } from '../../consumers/signal-new-consumer-transport.service';\r\nimport { ConnectRecvTransport } from '../../consumers/connect-recv-transport.service';\r\nimport { ReUpdateInter } from '../../consumers/re-update-inter.service';\r\nimport { UpdateParticipantAudioDecibels } from '../../consumers/update-participant-audio-decibels.service';\r\nimport { CloseAndResize } from '../../consumers/close-and-resize.service';\r\nimport { AutoAdjust } from '../../consumers/auto-adjust.service';\r\nimport { SwitchUserVideoAlt } from '../../consumers/switch-user-video-alt.service';\r\nimport { SwitchUserVideo } from '../../consumers/switch-user-video.service';\r\nimport { SwitchUserAudio } from '../../consumers/switch-user-audio.service';\r\nimport { ReceiveRoomMessages } from '../../consumers/receive-room-messages.service';\r\nimport { FormatNumber } from '../../methods/utils/format-number.service';\r\nimport { ConnectIps } from '../../consumers/connect-ips.service';\r\nimport { ConnectLocalIps } from '../../consumers/connect-local-ips.service';\r\n\r\n\r\n// Utility imports for meeting and recording functionality\r\nimport { StartMeetingProgressTimer } from '../../methods/utils/meeting-timer/start-meeting-progress-timer.service';\r\n\r\n// Socket methods for participant and meeting management\r\nimport { ProducerMediaPaused } from '../../producers/socket-receive-methods/producer-media-paused.service';\r\nimport { ProducerMediaResumed } from '../../producers/socket-receive-methods/producer-media-resumed.service';\r\nimport { ProducerMediaClosed } from '../../producers/socket-receive-methods/producer-media-closed.service';\r\nimport { MeetingEnded } from '../../producers/socket-receive-methods/meeting-ended.service';\r\nimport { DisconnectUserSelf } from '../../producers/socket-receive-methods/disconnect-user-self.service';\r\nimport { ReceiveMessage } from '../../producers/socket-receive-methods/receive-message.service';\r\nimport { MeetingTimeRemaining } from '../../producers/socket-receive-methods/meeting-time-remaining.service';\r\nimport { MeetingStillThere } from '../../producers/socket-receive-methods/meeting-still-there.service';\r\n\r\nimport { GetDomains } from '../../producers/socket-receive-methods/get-domains.service';\r\nimport { UpdateConsumingDomains } from '../../producers/socket-receive-methods/update-consuming-domains.service';\r\nimport { AllMembers } from '../../producers/socket-receive-methods/all-members.service';\r\nimport { AllMembersRest } from '../../producers/socket-receive-methods/all-members-rest.service';\r\nimport { Disconnect } from '../../producers/socket-receive-methods/disconnect.service';\r\n\r\nimport { CaptureCanvasStream } from '../../methods/whiteboard-methods/capture-canvas-stream.service';\r\nimport { ResumePauseAudioStreams } from '../../consumers/resume-pause-audio-streams.service';\r\nimport { ProcessConsumerTransportsAudio } from '../../consumers/process-consumer-transports-audio.service';\r\n\r\nimport {\r\n  Device,\r\n  Producer,\r\n  ProducerOptions,\r\n  RtpCapabilities,\r\n  Transport,\r\n} from 'mediasoup-client/lib/types';\r\nimport { SelfieSegmentation } from '@mediapipe/selfie_segmentation';\r\n\r\nexport type MediasfuChatOptions = {\r\n  PrejoinPage?: (options: PreJoinPageOptions | WelcomePageOptions) => HTMLElement;\r\n  localLink?: string;\r\n  connectMediaSFU?: boolean;\r\n  credentials?: { apiUserName: string; apiKey: string };\r\n  useLocalUIMode?: boolean;\r\n  seedData?: SeedData;\r\n  useSeed?: boolean;\r\n  imgSrc?: string;\r\n  sourceParameters?: { [key: string]: any };\r\n  updateSourceParameters?: (data: { [key: string]: any }) => void;\r\n  returnUI?: boolean;\r\n  noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n  joinMediaSFURoom?: JoinRoomOnMediaSFUType;\r\n  createMediaSFURoom?: CreateRoomOnMediaSFUType;\r\n};\r\n\r\n/**\r\n * MediasfuChat component provides an interface for chat-based streaming events. It includes a conditional prejoin screen, main content with flexible grids and modals, and supports chat-related settings.\r\n *\r\n * @component\r\n * @selector app-mediasfu-chat\r\n * @standalone true\r\n * @imports [RouterOutlet, CommonModule, AlertComponent, AudioGrid, ControlButtonsComponentTouch, FlexibleGrid, LoadingModal, ConfirmExitModal, MessagesModal, ConfirmHereModal, ShareEventModal, WelcomePage, MainAspectComponent, MainContainerComponent, MainScreenComponent, OtherGridComponent, MessageWidget]\r\n *\r\n * @template\r\n * The template structure:\r\n * - Conditional rendering of a PrejoinPage or WelcomePage for introductory or pre-session screens.\r\n * - Main content area with nested components for grid layouts, flexible video, and audio grids.\r\n * - Modals for user interactions, including participant management, event settings, breakout rooms, whiteboarding, and media settings.\r\n *\r\n * @input {any} PrejoinPage - Component for the prejoin page, defaults to `WelcomePage`.\r\n * @input {MediasfuChatOptions} options - Configuration options for the component.\r\n * @input {boolean} connectMediaSFU - Flag to enable/disable connection to the MediaSFU server.\r\n * @input {string} localLink - Local link for the Community Edition server.\r\n * @input {{ apiUserName: string; apiKey: string }} credentials - API credentials for secure access.\r\n * @input {boolean} useLocalUIMode - Flag to toggle local UI settings.\r\n * @input {SeedData} seedData - Seed data for initializing the component with specific configurations.\r\n * @input {boolean} useSeed - Enable/disable use of seed data.\r\n * @input {string} imgSrc - URL for branding images or logos.\r\n * @input {object} sourceParameters - Additional parameters for the source.\r\n * @input {Function} updateSourceParameters - Function to update the source parameters.\r\n * @input {boolean} returnUI - Flag to return the UI elements.\r\n * @input {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} noUIPreJoinOptions - Options for the prejoin page without UI.\r\n * @input {JoinRoomOnMediaSFUType} joinMediaSFURoom - Function to join a room on MediaSFU.\r\n * @input {CreateRoomOnMediaSFUType} createMediaSFURoom - Function to create a room on MediaSFU.\r\n *\r\n * @property {string} title - The title of the component, defaults to \"MediaSFU-Chat\".\r\n *\r\n * @styles\r\n * Customizable styles for layout and overflow.\r\n *\r\n * @providers [CookieService] - Service for managing cookies within the component.\r\n *\r\n * @constructor\r\n * @class MediasfuChat\r\n * @implements OnInit, OnDestroy\r\n *\r\n * @method ngOnInit - Initializes configurations and parameters.\r\n * @method ngOnDestroy - Handles cleanup and removal of event listeners or intervals.\r\n *\r\n * @example\r\n * ```html\r\n * <app-mediasfu-chat\r\n *   [PrejoinPage]=\"CustomPrejoinComponent\"\r\n *   [localLink]=\"'https://localhost:3000'\"\r\n *   [connectMediaSFU]=\"true\"\r\n *   [credentials]=\"{ apiUserName: 'username', apiKey: 'apikey' }\"\r\n *   [useLocalUIMode]=\"true\"\r\n *   [seedData]=\"seedDataObject\"\r\n *   [useSeed]=\"true\"\r\n *   [imgSrc]=\"https://example.com/logo.png\">\r\n *   [sourceParameters]=\"{ source: 'camera', width: 640, height: 480 }\"\r\n *   [updateSourceParameters]=\"updateSourceParameters\"\r\n *   [returnUI]=\"true\"\r\n *   [noUIPreJoinOptions]=\"{ roomName: 'room1', userName: 'user1' }\"\r\n *   [joinMediaSFURoom]=\"joinMediaSFURoom\"\r\n *   [createMediaSFURoom]=\"createMediaSFURoom\">\r\n * </app-mediasfu-chat>\r\n * ```\r\n */\r\n\r\n\r\n@Component({\r\n  selector: 'app-mediasfu-chat',\r\n  imports: [\r\n    CommonModule,\r\n    AlertComponent,\r\n    AudioGrid,\r\n    ControlButtonsComponentTouch,\r\n    FlexibleGrid,\r\n    LoadingModal,\r\n    ConfirmExitModal,\r\n    MessagesModal,\r\n    ConfirmHereModal,\r\n    ShareEventModal,\r\n\r\n    MainAspectComponent,\r\n    MainContainerComponent,\r\n    MainScreenComponent,\r\n    OtherGridComponent,\r\n\r\n  ],\r\n  template: `\r\n    <div\r\n      class=\"MediaSFU\"\r\n      [ngStyle]=\"{\r\n        height: '100vh',\r\n        width: '100vw',\r\n        maxWidth: '100vw',\r\n        maxHeight: '100vh',\r\n        overflow: 'hidden'\r\n      }\"\r\n    >\r\n      <ng-container *ngIf=\"!validated.value; else mainContent\">\r\n        <ng-container\r\n          *ngComponentOutlet=\"\r\n            PrejoinPageComponent.component;\r\n            injector: PrejoinPageComponent.injector\r\n          \"\r\n        >\r\n        </ng-container>\r\n      </ng-container>\r\n\r\n      <ng-template #mainContent>\r\n        <app-main-container-component *ngIf=\"returnUI\">\r\n          <app-main-aspect-component\r\n            [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n            [defaultFraction]=\"1 - controlHeight.value\"\r\n            [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\r\n            [updateIsWideScreen]=\"updateIsWideScreen\"\r\n            [updateIsMediumScreen]=\"updateIsMediumScreen\"\r\n            [updateIsSmallScreen]=\"updateIsSmallScreen\"\r\n          >\r\n            <app-main-screen-component\r\n              [doStack]=\"true\"\r\n              [mainSize]=\"mainHeightWidth.value\"\r\n              [defaultFraction]=\"1 - controlHeight.value\"\r\n              [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\r\n              [updateComponentSizes]=\"updateComponentSizes\"\r\n            >\r\n              <!-- MainGridComponent removed -->\r\n\r\n              <!-- OtherGridComponent -->\r\n              <app-other-grid-component\r\n                [height]=\"componentSizes.value.otherHeight\"\r\n                [width]=\"componentSizes.value.otherWidth\"\r\n                [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                [showAspect]=\"mainHeightWidth.value !== 100\"\r\n                [timeBackgroundColor]=\"recordState.value\"\r\n                [showTimer]=\"mainHeightWidth.value === 0\"\r\n                [meetingProgressTime]=\"meetingProgressTime.value\"\r\n              >\r\n                <!-- AudioGrid -->\r\n                <app-audio-grid [componentsToRender]=\"audioOnlyStreams.value\"></app-audio-grid>\r\n\r\n                <!-- Control Buttons for Chat -->\r\n                <app-control-buttons-component-touch\r\n                  [buttons]=\"controlChatButtons\"\r\n                  [position]=\"'right'\"\r\n                  [location]=\"'bottom'\"\r\n                  [direction]=\"'vertical'\"\r\n                  [showAspect]=\"eventType.value === 'chat'\"\r\n                ></app-control-buttons-component-touch>\r\n\r\n                <!-- Flexible Grid -->\r\n                <app-flexible-grid\r\n                  [customWidth]=\"gridSizes.value.gridWidth!\"\r\n                  [customHeight]=\"gridSizes.value.gridHeight!\"\r\n                  [rows]=\"gridRows.value\"\r\n                  [columns]=\"gridCols.value\"\r\n                  [componentsToRender]=\"otherGridStreams.value[0]\"\r\n                  [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n                ></app-flexible-grid>\r\n              </app-other-grid-component>\r\n            </app-main-screen-component>\r\n          </app-main-aspect-component>\r\n\r\n          <!-- SubAspectComponent removed -->\r\n        </app-main-container-component>\r\n      </ng-template>\r\n\r\n      <!-- Modals to include -->\r\n      <ng-container *ngIf=\"returnUI\">\r\n      <app-messages-modal\r\n        [backgroundColor]=\"\r\n          eventType.value === 'webinar' || eventType.value === 'conference'\r\n            ? '#f5f5f5'\r\n            : 'rgba(255, 255, 255, 0.25)'\r\n        \"\r\n        [isMessagesModalVisible]=\"isMessagesModalVisible.value\"\r\n        [onMessagesClose]=\"onMessagesClose\"\r\n        [messages]=\"messages.value\"\r\n        [eventType]=\"eventType.value\"\r\n        [member]=\"member.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [coHostResponsibility]=\"coHostResponsibility.value\"\r\n        [coHost]=\"coHost.value\"\r\n        [startDirectMessage]=\"startDirectMessage.value\"\r\n        [directMessageDetails]=\"directMessageDetails.value\"\r\n        [updateStartDirectMessage]=\"updateStartDirectMessage\"\r\n        [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\r\n        [showAlert]=\"showAlert\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [chatSetting]=\"chatSetting.value\"\r\n      ></app-messages-modal>\r\n\r\n      <app-confirm-exit-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isConfirmExitModalVisible]=\"isConfirmExitModalVisible.value\"\r\n        [onConfirmExitClose]=\"onConfirmExitClose\"\r\n        [position]=\"'topRight'\"\r\n        [member]=\"member.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n        [islevel]=\"islevel.value\"\r\n      ></app-confirm-exit-modal>\r\n\r\n      <app-confirm-here-modal\r\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\r\n        [isConfirmHereModalVisible]=\"isConfirmHereModalVisible.value\"\r\n        [onConfirmHereClose]=\"onConfirmHereClose\"\r\n        [member]=\"member.value\"\r\n        [roomName]=\"roomName.value\"\r\n        [socket]=\"socket.value\"\r\n      ></app-confirm-here-modal>\r\n\r\n      <app-share-event-modal\r\n        [isShareEventModalVisible]=\"isShareEventModalVisible.value\"\r\n        [onShareEventClose]=\"onShareEventClose\"\r\n        [roomName]=\"roomName.value\"\r\n        [islevel]=\"islevel.value\"\r\n        [adminPasscode]=\"adminPasscode.value\"\r\n        [eventType]=\"eventType.value\"\r\n        [localLink]=\"localLink\"\r\n      ></app-share-event-modal>\r\n\r\n      <app-alert-component\r\n        [visible]=\"alertVisible.value\"\r\n        [message]=\"alertMessage.value\"\r\n        [type]=\"alertType.value\"\r\n        [duration]=\"alertDuration.value\"\r\n        [onHide]=\"onAlertHide\"\r\n        textColor=\"#ffffff\"\r\n      ></app-alert-component>\r\n\r\n      <app-loading-modal\r\n        [isVisible]=\"isLoadingModalVisible.value\"\r\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\r\n        displayColor=\"black\"\r\n      ></app-loading-modal>\r\n    </ng-container>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .MediaSFU {\r\n        /* Add any component-specific styles here */\r\n      }\r\n    `,\r\n  ],\r\n  providers: [CookieService]\r\n})\r\nexport class MediasfuChat implements OnInit, OnDestroy {\r\n  @Input()\r\n  PrejoinPage: any = WelcomePage;\r\n  @Input() localLink = '';\r\n  @Input() connectMediaSFU = true;\r\n  @Input() credentials: { apiUserName: string; apiKey: string } = { apiUserName: '', apiKey: '' };\r\n  @Input() useLocalUIMode = false;\r\n  @Input() seedData?: SeedData;\r\n  @Input() useSeed = false;\r\n  @Input() imgSrc = 'https://mediasfu.com/images/logo192.png';\r\n  @Input() sourceParameters?: { [key: string]: any } = {};\r\n  @Input() updateSourceParameters? = (data: { [key: string]: any }) => { };\r\n  @Input() returnUI? = true;\r\n  @Input() noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\r\n  @Input() joinMediaSFURoom?: JoinRoomOnMediaSFUType;\r\n  @Input() createMediaSFURoom?: CreateRoomOnMediaSFUType;\r\n\r\n  title = 'MediaSFU-Chat';\r\n\r\n  private mainHeightWidthSubscription: Subscription | undefined;\r\n  private validatedSubscription: Subscription | undefined;\r\n  private islevelSubscription: Subscription | undefined;\r\n  private coHostSubscription: Subscription | undefined;\r\n  private ScreenboardSubscription: Subscription | undefined;\r\n  private recordingSubscription: Subscription | undefined;\r\n\r\n  constructor(\r\n    private cdr: ChangeDetectorRef,\r\n    private injector: Injector,\r\n    public updateMiniCardsGrid: UpdateMiniCardsGrid,\r\n    public mixStreams: MixStreams,\r\n    public dispStreams: DispStreams,\r\n    public stopShareScreen: StopShareScreen,\r\n    public checkScreenShare: CheckScreenShare,\r\n    public startShareScreen: StartShareScreen,\r\n    public requestScreenShare: RequestScreenShare,\r\n    public reorderStreams: ReorderStreams,\r\n    public prepopulateUserMedia: PrepopulateUserMedia,\r\n    public getVideos: GetVideos,\r\n    public rePort: RePort,\r\n    public trigger: Trigger,\r\n    public consumerResume: ConsumerResume,\r\n    public connectSendTransport: ConnectSendTransport,\r\n    public connectSendTransportAudio: ConnectSendTransportAudio,\r\n    public connectSendTransportVideo: ConnectSendTransportVideo,\r\n    public connectSendTransportScreen: ConnectSendTransportScreen,\r\n    public processConsumerTransports: ProcessConsumerTransports,\r\n    public resumePauseStreams: ResumePauseStreams,\r\n    public readjust: Readjust,\r\n    public checkGrid: CheckGrid,\r\n    public getEstimate: GetEstimate,\r\n    public calculateRowsAndColumns: CalculateRowsAndColumns,\r\n    public addVideosGrid: AddVideosGrid,\r\n    public onScreenChanges: OnScreenChanges,\r\n    public changeVids: ChangeVids,\r\n    public compareActiveNames: CompareActiveNames,\r\n    public compareScreenStates: CompareScreenStates,\r\n    public createSendTransport: CreateSendTransport,\r\n    public resumeSendTransportAudio: ResumeSendTransportAudio,\r\n    public receiveAllPipedTransports: ReceiveAllPipedTransports,\r\n    public disconnectSendTransportVideo: DisconnectSendTransportVideo,\r\n    public disconnectSendTransportAudio: DisconnectSendTransportAudio,\r\n    public disconnectSendTransportScreen: DisconnectSendTransportScreen,\r\n    public getPipedProducersAlt: GetPipedProducersAlt,\r\n    public signalNewConsumerTransport: SignalNewConsumerTransport,\r\n    public connectRecvTransport: ConnectRecvTransport,\r\n    public reUpdateInter: ReUpdateInter,\r\n    public updateParticipantAudioDecibels: UpdateParticipantAudioDecibels,\r\n    public closeAndResize: CloseAndResize,\r\n    public autoAdjust: AutoAdjust,\r\n    public switchUserVideoAlt: SwitchUserVideoAlt,\r\n    public switchUserVideo: SwitchUserVideo,\r\n    public switchUserAudio: SwitchUserAudio,\r\n    public getDomains: GetDomains,\r\n    public formatNumber: FormatNumber,\r\n    public connectIps: ConnectIps,\r\n    public connectLocalIps: ConnectLocalIps,\r\n    public createDeviceClient: CreateDeviceClient,\r\n\r\n    public captureCanvasStream: CaptureCanvasStream,\r\n    public resumePauseAudioStreams: ResumePauseAudioStreams,\r\n    public processConsumerTransportsAudio: ProcessConsumerTransportsAudio,\r\n\r\n    public launchMessages: LaunchMessages,\r\n    public launchConfirmExit: LaunchConfirmExit,\r\n\r\n    public startMeetingProgressTimer: StartMeetingProgressTimer,\r\n\r\n    public producerMediaPaused: ProducerMediaPaused,\r\n    public producerMediaResumed: ProducerMediaResumed,\r\n    public producerMediaClosed: ProducerMediaClosed,\r\n    public meetingEnded: MeetingEnded,\r\n    public disconnectUserSelf: DisconnectUserSelf,\r\n    public receiveMessage: ReceiveMessage,\r\n    public meetingTimeRemaining: MeetingTimeRemaining,\r\n    public meetingStillThere: MeetingStillThere,\r\n\r\n    public allMembers: AllMembers,\r\n    public allMembersRest: AllMembersRest,\r\n    public disconnect: Disconnect,\r\n\r\n    public socketManager: SocketManager,\r\n    public joinRoomClient: JoinRoomClient,\r\n    public joinLocalRoom: JoinLocalRoom,\r\n    public updateRoomParametersClient: UpdateRoomParametersClient,\r\n    public clickVideo: ClickVideo,\r\n    public clickAudio: ClickAudio,\r\n    public clickScreenShare: ClickScreenShare,\r\n    public switchVideoAlt: SwitchVideoAlt,\r\n    public streamSuccessVideo: StreamSuccessVideo,\r\n    public streamSuccessAudio: StreamSuccessAudio,\r\n    public streamSuccessScreen: StreamSuccessScreen,\r\n    public streamSuccessAudioSwitch: StreamSuccessAudioSwitch,\r\n    public checkPermission: CheckPermission,\r\n\r\n    public updateConsumingDomains: UpdateConsumingDomains,\r\n    public receiveRoomMessages: ReceiveRoomMessages,\r\n  ) { }\r\n\r\n  createInjector(inputs: any) {\r\n    const inj = Injector.create({\r\n      providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\r\n      parent: this.injector,\r\n    });\r\n\r\n    return inj;\r\n  }\r\n\r\n  // Initial values\r\n  mediaSFUFunctions = () => {\r\n    return {\r\n      updateMiniCardsGrid:\r\n        this.updateMiniCardsGrid?.updateMiniCardsGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      mixStreams:\r\n        this.mixStreams?.mixStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      dispStreams:\r\n        this.dispStreams?.dispStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      stopShareScreen:\r\n        this.stopShareScreen?.stopShareScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkScreenShare:\r\n        this.checkScreenShare?.checkScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      startShareScreen:\r\n        this.startShareScreen?.startShareScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestScreenShare:\r\n        this.requestScreenShare?.requestScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      reorderStreams:\r\n        this.reorderStreams?.reorderStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      prepopulateUserMedia:\r\n        this.prepopulateUserMedia?.prepopulateUserMedia ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getVideos:\r\n        this.getVideos?.getVideos ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      rePort:\r\n        this.rePort?.rePort ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      trigger:\r\n        this.trigger?.trigger ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      consumerResume:\r\n        this.consumerResume?.consumerResume ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransport:\r\n        this.connectSendTransport?.connectSendTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportAudio:\r\n        this.connectSendTransportAudio?.connectSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportVideo:\r\n        this.connectSendTransportVideo?.connectSendTransportVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectSendTransportScreen:\r\n        this.connectSendTransportScreen?.connectSendTransportScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      processConsumerTransports:\r\n        this.processConsumerTransports?.processConsumerTransports ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumePauseStreams:\r\n        this.resumePauseStreams?.resumePauseStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      readjust:\r\n        this.readjust?.readjust ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkGrid:\r\n        this.checkGrid?.checkGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getEstimate:\r\n        this.getEstimate?.getEstimate ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      calculateRowsAndColumns:\r\n        this.calculateRowsAndColumns?.calculateRowsAndColumns ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      addVideosGrid:\r\n        this.addVideosGrid?.addVideosGrid ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      onScreenChanges:\r\n        this.onScreenChanges?.onScreenChanges ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      sleep:\r\n        sleep ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      changeVids:\r\n        this.changeVids?.changeVids ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      compareActiveNames:\r\n        this.compareActiveNames?.compareActiveNames ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      compareScreenStates:\r\n        this.compareScreenStates?.compareScreenStates ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      createSendTransport:\r\n        this.createSendTransport?.createSendTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumeSendTransportAudio:\r\n        this.resumeSendTransportAudio?.resumeSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      receiveAllPipedTransports:\r\n        this.receiveAllPipedTransports?.receiveAllPipedTransports ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportVideo:\r\n        this.disconnectSendTransportVideo?.disconnectSendTransportVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportAudio:\r\n        this.disconnectSendTransportAudio?.disconnectSendTransportAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      disconnectSendTransportScreen:\r\n        this.disconnectSendTransportScreen?.disconnectSendTransportScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getPipedProducersAlt:\r\n        this.getPipedProducersAlt?.getPipedProducersAlt ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      signalNewConsumerTransport:\r\n        this.signalNewConsumerTransport?.signalNewConsumerTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectRecvTransport:\r\n        this.connectRecvTransport?.connectRecvTransport ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      reUpdateInter:\r\n        this.reUpdateInter?.reUpdateInter ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      updateParticipantAudioDecibels:\r\n        this.updateParticipantAudioDecibels?.updateParticipantAudioDecibels ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      closeAndResize:\r\n        this.closeAndResize?.closeAndResize ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      autoAdjust:\r\n        this.autoAdjust?.autoAdjust ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserVideoAlt:\r\n        this.switchUserVideoAlt?.switchUserVideoAlt ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserVideo:\r\n        this.switchUserVideo?.switchUserVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchUserAudio:\r\n        this.switchUserAudio?.switchUserAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      getDomains:\r\n        this.getDomains?.getDomains ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      formatNumber:\r\n        this.formatNumber?.formatNumber ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectIps:\r\n        this.connectIps?.connectIps ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      connectLocalIps:\r\n        this.connectLocalIps?.connectLocalIps ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      createDeviceClient:\r\n        this.createDeviceClient?.createDeviceClient ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      captureCanvasStream:\r\n        this.captureCanvasStream?.captureCanvasStream ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      resumePauseAudioStreams:\r\n        this.resumePauseAudioStreams?.resumePauseAudioStreams ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      processConsumerTransportsAudio:\r\n        this.processConsumerTransportsAudio?.processConsumerTransportsAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      checkPermission:\r\n        this.checkPermission?.checkPermission ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessVideo:\r\n        this.streamSuccessVideo?.streamSuccessVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessAudio:\r\n        this.streamSuccessAudio?.streamSuccessAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessScreen:\r\n        this.streamSuccessScreen?.streamSuccessScreen ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      streamSuccessAudioSwitch:\r\n        this.streamSuccessAudioSwitch?.streamSuccessAudioSwitch ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickVideo:\r\n        this.clickVideo?.clickVideo ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickAudio:\r\n        this.clickAudio?.clickAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      clickScreenShare:\r\n        this.clickScreenShare?.clickScreenShare ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      switchVideoAlt:\r\n        this.switchVideoAlt?.switchVideoAlt ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestPermissionCamera:\r\n        this.requestPermissionCamera ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n      requestPermissionAudio:\r\n        this.requestPermissionAudio ||\r\n        (() => {\r\n          console.log('none');\r\n        }),\r\n    };\r\n  };\r\n\r\n  validated = new BehaviorSubject<boolean>(false);\r\n  localUIMode = new BehaviorSubject<boolean>(false);\r\n  socket = new BehaviorSubject<Socket>({} as Socket);\r\n  localSocket? = new BehaviorSubject<Socket | undefined>(undefined);\r\n  roomData = new BehaviorSubject<ResponseJoinRoom | null>(null);\r\n  device = new BehaviorSubject<Device | null>(null);\r\n  apiKey = new BehaviorSubject<string>('');\r\n  apiUserName = new BehaviorSubject<string>('');\r\n  apiToken = new BehaviorSubject<string>('');\r\n  link = new BehaviorSubject<string>('');\r\n\r\n  roomName = new BehaviorSubject<string>('');\r\n  member = new BehaviorSubject<string>('');\r\n  adminPasscode = new BehaviorSubject<string>('');\r\n  islevel = new BehaviorSubject<string>('1');\r\n  coHost = new BehaviorSubject<string>('No coHost');\r\n  coHostResponsibility = new BehaviorSubject<CoHostResponsibility[]>([\r\n    { name: 'participants', value: false, dedicated: false },\r\n    { name: 'media', value: false, dedicated: false },\r\n    { name: 'waiting', value: false, dedicated: false },\r\n    { name: 'chat', value: false, dedicated: false },\r\n  ]);\r\n  youAreCoHost = new BehaviorSubject<boolean>(false);\r\n  youAreHost = new BehaviorSubject<boolean>(false);\r\n  confirmedToRecord = new BehaviorSubject<boolean>(false);\r\n  meetingDisplayType = new BehaviorSubject<string>('media');\r\n  meetingVideoOptimized = new BehaviorSubject<boolean>(false);\r\n  eventType = new BehaviorSubject<EventType>('chat');\r\n  participants = new BehaviorSubject<Participant[]>([]);\r\n  filteredParticipants = new BehaviorSubject<Participant[]>([]);\r\n  participantsCounter = new BehaviorSubject<number>(0);\r\n  participantsFilter = new BehaviorSubject<string>('');\r\n\r\n  consume_sockets = new BehaviorSubject<ConsumeSocket[]>([]);\r\n  rtpCapabilities = new BehaviorSubject<RtpCapabilities | null>(null);\r\n  roomRecvIPs = new BehaviorSubject<string[]>([]);\r\n  meetingRoomParams = new BehaviorSubject<MeetingRoomParams | null>(null);\r\n  itemPageLimit = new BehaviorSubject<number>(4);\r\n  audioOnlyRoom = new BehaviorSubject<boolean>(false);\r\n  addForBasic = new BehaviorSubject<boolean>(false);\r\n  screenPageLimit = new BehaviorSubject<number>(4);\r\n  shareScreenStarted = new BehaviorSubject<boolean>(false);\r\n  shared = new BehaviorSubject<boolean>(false);\r\n  targetOrientation = new BehaviorSubject<string>('landscape');\r\n  targetResolution = new BehaviorSubject<string>('sd');\r\n  targetResolutionHost = new BehaviorSubject<string>('sd');\r\n  vidCons = new BehaviorSubject<VidCons>({ width: 640, height: 360 });\r\n  frameRate = new BehaviorSubject<number>(10);\r\n  hParams = new BehaviorSubject<HParamsType>({} as HParamsType);\r\n  vParams = new BehaviorSubject<VParamsType>({} as VParamsType);\r\n  screenParams = new BehaviorSubject<ScreenParamsType>({} as ScreenParamsType);\r\n  aParams = new BehaviorSubject<AParamsType>({} as AParamsType);\r\n\r\n  recordingAudioPausesLimit = new BehaviorSubject<number>(0);\r\n  recordingAudioPausesCount = new BehaviorSubject<number>(0);\r\n  recordingAudioSupport = new BehaviorSubject<boolean>(false);\r\n  recordingAudioPeopleLimit = new BehaviorSubject<number>(0);\r\n  recordingAudioParticipantsTimeLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoPausesCount = new BehaviorSubject<number>(0);\r\n  recordingVideoPausesLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoPeopleLimit = new BehaviorSubject<number>(0);\r\n  recordingVideoParticipantsTimeLimit = new BehaviorSubject<number>(0);\r\n  recordingAllParticipantsSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoParticipantsSupport = new BehaviorSubject<boolean>(false);\r\n  recordingAllParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\r\n  recordingVideoParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\r\n  recordingPreferredOrientation = new BehaviorSubject<string>('landscape');\r\n  recordingSupportForOtherOrientation = new BehaviorSubject<boolean>(false);\r\n  recordingMultiFormatsSupport = new BehaviorSubject<boolean>(false);\r\n\r\n  userRecordingParams = new BehaviorSubject<UserRecordingParams>({\r\n    mainSpecs: {\r\n      mediaOptions: 'video', // 'audio', 'video'\r\n      audioOptions: 'all', // 'all', 'onScreen', 'host'\r\n      videoOptions: 'all', // 'all', 'mainScreen'\r\n      videoType: 'fullDisplay', // 'all', 'bestDisplay', 'fullDisplay'\r\n      videoOptimized: false, // true, false\r\n      recordingDisplayType: 'media', // 'media', 'video', 'all'\r\n      addHLS: false, // true, false\r\n    },\r\n    dispSpecs: {\r\n      nameTags: true, // true, false\r\n      backgroundColor: '#000000', // '#000000', '#ffffff'\r\n      nameTagsColor: '#ffffff', // '#000000', '#ffffff'\r\n      orientationVideo: 'portrait', // 'landscape', 'portrait', 'all'\r\n    },\r\n  });\r\n\r\n  canRecord = new BehaviorSubject<boolean>(false);\r\n  startReport = new BehaviorSubject<boolean>(false);\r\n  endReport = new BehaviorSubject<boolean>(false);\r\n  recordTimerInterval = new BehaviorSubject<NodeJS.Timeout | null>(null);\r\n  recordStartTime = new BehaviorSubject<number>(0);\r\n  recordElapsedTime = new BehaviorSubject<number>(0);\r\n  isTimerRunning = new BehaviorSubject<boolean>(false);\r\n  canPauseResume = new BehaviorSubject<boolean>(false);\r\n  recordChangeSeconds = new BehaviorSubject<number>(15000);\r\n  pauseLimit = new BehaviorSubject<number>(0);\r\n  pauseRecordCount = new BehaviorSubject<number>(0);\r\n  canLaunchRecord = new BehaviorSubject<boolean>(true);\r\n  stopLaunchRecord = new BehaviorSubject<boolean>(false);\r\n\r\n  participantsAll = new BehaviorSubject<Participant[]>([]);\r\n\r\n  firstAll = new BehaviorSubject<boolean>(false);\r\n  updateMainWindow = new BehaviorSubject<boolean>(false);\r\n  first_round = new BehaviorSubject<boolean>(false);\r\n  landScaped = new BehaviorSubject<boolean>(false);\r\n  lock_screen = new BehaviorSubject<boolean>(false);\r\n  screenId = new BehaviorSubject<string>('');\r\n  allVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  newLimitedStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  newLimitedStreamsIDs = new BehaviorSubject<string[]>([]);\r\n  activeSounds = new BehaviorSubject<string[]>([]);\r\n  screenShareIDStream = new BehaviorSubject<string>('');\r\n  screenShareNameStream = new BehaviorSubject<string>('');\r\n  adminIDStream = new BehaviorSubject<string>('');\r\n  adminNameStream = new BehaviorSubject<string>('');\r\n  youYouStream = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  youYouStreamIDs = new BehaviorSubject<string[]>([]);\r\n  localStream = new BehaviorSubject<MediaStream | null>(null);\r\n  recordStarted = new BehaviorSubject<boolean>(false);\r\n  recordResumed = new BehaviorSubject<boolean>(false);\r\n  recordPaused = new BehaviorSubject<boolean>(false);\r\n  recordStopped = new BehaviorSubject<boolean>(false);\r\n  adminRestrictSetting = new BehaviorSubject<boolean>(false);\r\n  videoRequestState = new BehaviorSubject<string | null>(null);\r\n  videoRequestTime = new BehaviorSubject<number>(0);\r\n  videoAction = new BehaviorSubject<boolean>(false);\r\n  localStreamVideo = new BehaviorSubject<MediaStream | null>(null);\r\n  userDefaultVideoInputDevice = new BehaviorSubject<string>('');\r\n  currentFacingMode = new BehaviorSubject<string>('user');\r\n  prevFacingMode = new BehaviorSubject<string>('user');\r\n  defVideoID = new BehaviorSubject<string>('');\r\n  allowed = new BehaviorSubject<boolean>(false);\r\n  dispActiveNames = new BehaviorSubject<string[]>([]);\r\n  p_dispActiveNames = new BehaviorSubject<string[]>([]);\r\n  activeNames = new BehaviorSubject<string[]>([]);\r\n  prevActiveNames = new BehaviorSubject<string[]>([]);\r\n  p_activeNames = new BehaviorSubject<string[]>([]);\r\n  membersReceived = new BehaviorSubject<boolean>(false);\r\n  deferScreenReceived = new BehaviorSubject<boolean>(false);\r\n  hostFirstSwitch = new BehaviorSubject<boolean>(false);\r\n  micAction = new BehaviorSubject<boolean>(false);\r\n  screenAction = new BehaviorSubject<boolean>(false);\r\n  chatAction = new BehaviorSubject<boolean>(false);\r\n  audioRequestState = new BehaviorSubject<string | null>(null);\r\n  screenRequestState = new BehaviorSubject<string | null>(null);\r\n  chatRequestState = new BehaviorSubject<string | null>(null);\r\n  audioRequestTime = new BehaviorSubject<number>(0);\r\n  screenRequestTime = new BehaviorSubject<number>(0);\r\n  chatRequestTime = new BehaviorSubject<number>(0);\r\n  updateRequestIntervalSeconds = new BehaviorSubject<number>(240);\r\n  oldSoundIds = new BehaviorSubject<string[]>([]);\r\n  hostLabel = new BehaviorSubject<string>('Host');\r\n  mainScreenFilled = new BehaviorSubject<boolean>(false);\r\n  localStreamScreen = new BehaviorSubject<MediaStream | null>(null);\r\n  screenAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  chatAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  redirectURL = new BehaviorSubject<string>('');\r\n  oldAllStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  adminVidID = new BehaviorSubject<string>('');\r\n  streamNames = new BehaviorSubject<Stream[]>([]);\r\n  non_alVideoStreams = new BehaviorSubject<Participant[]>([]);\r\n  sortAudioLoudness = new BehaviorSubject<boolean>(false);\r\n  audioDecibels = new BehaviorSubject<AudioDecibels[]>([]);\r\n  mixed_alVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  non_alVideoStreams_muted = new BehaviorSubject<Participant[]>([]);\r\n  paginatedStreams = new BehaviorSubject<(Participant | Stream)[][]>([]);\r\n  localStreamAudio = new BehaviorSubject<MediaStream | null>(null);\r\n  defAudioID = new BehaviorSubject<string>('');\r\n  userDefaultAudioInputDevice = new BehaviorSubject<string>('');\r\n  userDefaultAudioOutputDevice = new BehaviorSubject<string>('');\r\n  prevAudioInputDevice = new BehaviorSubject<string>('');\r\n  prevVideoInputDevice = new BehaviorSubject<string>('');\r\n  audioPaused = new BehaviorSubject<boolean>(false);\r\n  mainScreenPerson = new BehaviorSubject<string>('');\r\n  adminOnMainScreen = new BehaviorSubject<boolean>(false);\r\n  screenStates = new BehaviorSubject<ScreenState[]>([\r\n    {\r\n      mainScreenPerson: '',\r\n      mainScreenProducerId: '',\r\n      mainScreenFilled: false,\r\n      adminOnMainScreen: false,\r\n    },\r\n  ]);\r\n  prevScreenStates = new BehaviorSubject<ScreenState[]>([\r\n    {\r\n      mainScreenPerson: '',\r\n      mainScreenProducerId: '',\r\n      mainScreenFilled: false,\r\n      adminOnMainScreen: false,\r\n    },\r\n  ]);\r\n  updateDateState = new BehaviorSubject<number | null>(null);\r\n  lastUpdate = new BehaviorSubject<number | null>(null);\r\n  nForReadjustRecord = new BehaviorSubject<number>(0);\r\n  fixedPageLimit = new BehaviorSubject<number>(4);\r\n  removeAltGrid = new BehaviorSubject<boolean>(false);\r\n  nForReadjust = new BehaviorSubject<number>(0);\r\n  reorderInterval = new BehaviorSubject<number>(30000);\r\n  fastReorderInterval = new BehaviorSubject<number>(10000);\r\n  lastReorderTime = new BehaviorSubject<number>(0);\r\n  audStreamNames = new BehaviorSubject<Stream[]>([]);\r\n  currentUserPage = new BehaviorSubject<number>(0);\r\n  mainHeightWidth = new BehaviorSubject<number>(0);\r\n  prevMainHeightWidth = new BehaviorSubject<number>(this.mainHeightWidth.value);\r\n  prevDoPaginate = new BehaviorSubject<boolean>(false);\r\n  doPaginate = new BehaviorSubject<boolean>(false);\r\n  shareEnded = new BehaviorSubject<boolean>(false);\r\n  lStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  chatRefStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  controlHeight = new BehaviorSubject<number>(\r\n    this.eventType.value === 'webinar' || this.eventType.value === 'conference' ? 0 : 0.06,\r\n  );\r\n  isWideScreen = new BehaviorSubject<boolean>(false);\r\n  isMediumScreen = new BehaviorSubject<boolean>(false);\r\n  isSmallScreen = new BehaviorSubject<boolean>(false);\r\n  addGrid = new BehaviorSubject<boolean>(false);\r\n  addAltGrid = new BehaviorSubject<boolean>(false);\r\n  gridRows = new BehaviorSubject<number>(0);\r\n  gridCols = new BehaviorSubject<number>(0);\r\n  altGridRows = new BehaviorSubject<number>(0);\r\n  altGridCols = new BehaviorSubject<number>(0);\r\n  numberPages = new BehaviorSubject<number>(0);\r\n  currentStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  showMiniView = new BehaviorSubject<boolean>(false);\r\n  nStream = new BehaviorSubject<MediaStream | null>(null);\r\n  defer_receive = new BehaviorSubject<boolean>(false);\r\n  allAudioStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\r\n  remoteScreenStream = new BehaviorSubject<Stream[]>([]);\r\n  screenProducer = new BehaviorSubject<Producer | null>(null);\r\n  localScreenProducer = new BehaviorSubject<Producer | null>(null);\r\n  gotAllVids = new BehaviorSubject<boolean>(false);\r\n  paginationHeightWidth = new BehaviorSubject<number>(40);\r\n  paginationDirection = new BehaviorSubject<'horizontal' | 'vertical'>('horizontal');\r\n  gridSizes = new BehaviorSubject<GridSizes>({\r\n    gridWidth: 0,\r\n    gridHeight: 0,\r\n    altGridWidth: 0,\r\n    altGridHeight: 0,\r\n  });\r\n  screenForceFullDisplay = new BehaviorSubject<boolean>(false);\r\n  mainGridStream = new BehaviorSubject<CustomMediaComponent[]>([]);\r\n  otherGridStreams = new BehaviorSubject<CustomMediaComponent[][]>([]);\r\n  audioOnlyStreams = new BehaviorSubject<CustomMediaComponent[]>([]);\r\n  videoInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\r\n  audioInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\r\n  meetingProgressTime = new BehaviorSubject<string>('00:00:00');\r\n  meetingElapsedTime = new BehaviorSubject<number>(0);\r\n  ref_participants = new BehaviorSubject<Participant[]>([]);\r\n\r\n  updateValidated = (value: boolean) => {\r\n    this.validated.next(value);\r\n  };\r\n\r\n  updateSocket = (value: Socket) => {\r\n    this.socket.next(value);\r\n  };\r\n\r\n  updateLocalSocket = (value: Socket | null) => {\r\n    this.localSocket!.next(value!);\r\n  };\r\n\r\n  updateDevice = (value: Device | null) => {\r\n    this.device.next(value);\r\n  };\r\n\r\n  updateRoomData = (value: ResponseJoinRoom | null) => {\r\n    this.roomData.next(value);\r\n  };\r\n\r\n  updateApiKey = (value: string) => {\r\n    this.apiKey.next(value);\r\n  };\r\n\r\n  updateApiUserName = (value: string) => {\r\n    this.apiUserName.next(value);\r\n  };\r\n\r\n  updateApiToken = (value: string) => {\r\n    this.apiToken.next(value);\r\n  };\r\n\r\n  updateLink = (value: string) => {\r\n    this.link.next(value);\r\n  };\r\n\r\n  updateRoomName = (value: string) => {\r\n    this.roomName.next(value);\r\n  };\r\n\r\n  updateMember = (value: string) => {\r\n    if (value.length > 0 && value.includes(\"_\")) {\r\n      this.updateIslevel(value.split(\"_\")[1]);\r\n      value = value.split(\"_\")[0];\r\n    }\r\n    this.member.next(value);\r\n  };\r\n\r\n  updateAdminPasscode = (value: string) => {\r\n    this.adminPasscode.next(value);\r\n  };\r\n\r\n  updateIslevel = (value: string) => {\r\n    this.islevel.next(value);\r\n  };\r\n\r\n  updateCoHost = (value: string) => {\r\n    this.coHost.next(value);\r\n  };\r\n\r\n  updateCoHostResponsibility = (value: CoHostResponsibility[]) => {\r\n    this.coHostResponsibility.next(value);\r\n  };\r\n\r\n  updateYouAreCoHost = (value: boolean) => {\r\n    this.youAreCoHost.next(value);\r\n  };\r\n\r\n  updateYouAreHost = (value: boolean) => {\r\n    this.youAreHost.next(value);\r\n  };\r\n\r\n  updateConfirmedToRecord = (value: boolean) => {\r\n    this.confirmedToRecord.next(value);\r\n  };\r\n\r\n  updateMeetingDisplayType = (value: string) => {\r\n    this.meetingDisplayType.next(value);\r\n  };\r\n\r\n  updateMeetingVideoOptimized = (value: boolean) => {\r\n    this.meetingVideoOptimized.next(value);\r\n  };\r\n\r\n  updateEventType = (value: EventType) => {\r\n    this.eventType.next(value);\r\n  };\r\n\r\n  updateParticipants = (value: Participant[]) => {\r\n    this.participants.next(value);\r\n    this.participantsCounter.next(value.length);\r\n    this.filteredParticipants.next(this.participants.value);\r\n  };\r\n\r\n  updateFilteredParticipants = (value: Participant[]) => {\r\n    this.filteredParticipants.next(value);\r\n  };\r\n\r\n  updateParticipantsCounter = (value: number) => {\r\n    this.participantsCounter.next(value);\r\n  };\r\n\r\n  updateParticipantsFilter = (value: string) => {\r\n    this.participantsFilter.next(value);\r\n  };\r\n\r\n  updateConsume_sockets = (value: ConsumeSocket[]) => {\r\n    this.consume_sockets.next(value);\r\n  };\r\n\r\n  updateRtpCapabilities = (value: RtpCapabilities | null) => {\r\n    this.rtpCapabilities.next(value);\r\n  };\r\n\r\n  updateRoomRecvIPs = (value: string[]) => {\r\n    this.roomRecvIPs.next(value);\r\n  };\r\n\r\n  updateMeetingRoomParams = (value: MeetingRoomParams | null) => {\r\n    this.meetingRoomParams.next(value);\r\n  };\r\n\r\n  updateItemPageLimit = (value: number) => {\r\n    this.itemPageLimit.next(value);\r\n  };\r\n\r\n  updateAudioOnlyRoom = (value: boolean) => {\r\n    this.audioOnlyRoom.next(value);\r\n  };\r\n\r\n  updateAddForBasic = (value: boolean) => {\r\n    this.addForBasic.next(value);\r\n  };\r\n\r\n  updateScreenPageLimit = (value: number) => {\r\n    this.screenPageLimit.next(value);\r\n  };\r\n\r\n  updateShareScreenStarted = (value: boolean) => {\r\n    this.shareScreenStarted.next(value);\r\n  };\r\n\r\n  updateShared = (value: boolean) => {\r\n    this.shared.next(value);\r\n  };\r\n\r\n  updateTargetOrientation = (value: string) => {\r\n    this.targetOrientation.next(value);\r\n  };\r\n\r\n  updateTargetResolution = (value: string) => {\r\n    this.targetResolution.next(value);\r\n  };\r\n\r\n  updateTargetResolutionHost = (value: string) => {\r\n    this.targetResolutionHost.next(value);\r\n  };\r\n\r\n  updateVidCons = (value: VidCons) => {\r\n    this.vidCons.next(value);\r\n  };\r\n\r\n  updateFrameRate = (value: number) => {\r\n    this.frameRate.next(value);\r\n  };\r\n\r\n  updateHParams = (value: HParamsType) => {\r\n    this.hParams.next(value);\r\n  };\r\n\r\n  updateVParams = (value: VParamsType) => {\r\n    this.vParams.next(value);\r\n  };\r\n\r\n  updateScreenParams = (value: ScreenParamsType) => {\r\n    this.screenParams.next(value);\r\n  };\r\n\r\n  updateAParams = (value: AParamsType) => {\r\n    this.aParams.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPausesLimit = (value: number) => {\r\n    this.recordingAudioPausesLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPausesCount = (value: number) => {\r\n    this.recordingAudioPausesCount.next(value);\r\n  };\r\n\r\n  updateRecordingAudioSupport = (value: boolean) => {\r\n    this.recordingAudioSupport.next(value);\r\n  };\r\n\r\n  updateRecordingAudioPeopleLimit = (value: number) => {\r\n    this.recordingAudioPeopleLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAudioParticipantsTimeLimit = (value: number) => {\r\n    this.recordingAudioParticipantsTimeLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPausesCount = (value: number) => {\r\n    this.recordingVideoPausesCount.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPausesLimit = (value: number) => {\r\n    this.recordingVideoPausesLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoSupport = (value: boolean) => {\r\n    this.recordingVideoSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoPeopleLimit = (value: number) => {\r\n    this.recordingVideoPeopleLimit.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsTimeLimit = (value: number) => {\r\n    this.recordingVideoParticipantsTimeLimit.next(value);\r\n  };\r\n\r\n  updateRecordingAllParticipantsSupport = (value: boolean) => {\r\n    this.recordingAllParticipantsSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsSupport = (value: boolean) => {\r\n    this.recordingVideoParticipantsSupport.next(value);\r\n  };\r\n\r\n  updateRecordingAllParticipantsFullRoomSupport = (value: boolean) => {\r\n    this.recordingAllParticipantsFullRoomSupport.next(value);\r\n  };\r\n\r\n  updateRecordingVideoParticipantsFullRoomSupport = (value: boolean) => {\r\n    this.recordingVideoParticipantsFullRoomSupport.next(value);\r\n  };\r\n\r\n  updateRecordingPreferredOrientation = (value: string) => {\r\n    this.recordingPreferredOrientation.next(value);\r\n  };\r\n\r\n  updateRecordingSupportForOtherOrientation = (value: boolean) => {\r\n    this.recordingSupportForOtherOrientation.next(value);\r\n  };\r\n\r\n  updateRecordingMultiFormatsSupport = (value: boolean) => {\r\n    this.recordingMultiFormatsSupport.next(value);\r\n  };\r\n\r\n  updateUserRecordingParams = (value: UserRecordingParams) => {\r\n    this.userRecordingParams.next(value);\r\n  };\r\n\r\n  updateCanRecord = (value: boolean) => {\r\n    this.canRecord.next(value);\r\n  };\r\n\r\n  updateStartReport = (value: boolean) => {\r\n    this.startReport.next(value);\r\n  };\r\n\r\n  updateEndReport = (value: boolean) => {\r\n    this.endReport.next(value);\r\n  };\r\n\r\n  updateRecordTimerInterval = (value: NodeJS.Timeout | null) => {\r\n    this.recordTimerInterval.next(value);\r\n  };\r\n\r\n  updateRecordStartTime = (value: number) => {\r\n    this.recordStartTime.next(value);\r\n  };\r\n\r\n  updateRecordElapsedTime = (value: number) => {\r\n    this.recordElapsedTime.next(value);\r\n  };\r\n\r\n  updateIsTimerRunning = (value: boolean) => {\r\n    this.isTimerRunning.next(value);\r\n  };\r\n\r\n  updateCanPauseResume = (value: boolean) => {\r\n    this.canPauseResume.next(value);\r\n  };\r\n\r\n  updateRecordChangeSeconds = (value: number) => {\r\n    this.recordChangeSeconds.next(value);\r\n  };\r\n\r\n  updatePauseLimit = (value: number) => {\r\n    this.pauseLimit.next(value);\r\n  };\r\n\r\n  updatePauseRecordCount = (value: number) => {\r\n    this.pauseRecordCount.next(value);\r\n  };\r\n\r\n  updateCanLaunchRecord = (value: boolean) => {\r\n    this.canLaunchRecord.next(value);\r\n  };\r\n\r\n  updateStopLaunchRecord = (value: boolean) => {\r\n    this.stopLaunchRecord.next(value);\r\n  };\r\n\r\n  updateParticipantsAll = (value: Participant[]) => {\r\n    this.participantsAll.next(value);\r\n  };\r\n\r\n  updateFirstAll = (value: boolean) => {\r\n    this.firstAll.next(value);\r\n  };\r\n\r\n  updateUpdateMainWindow = (value: boolean) => {\r\n    this.updateMainWindow.next(value);\r\n  };\r\n\r\n  updateFirst_round = (value: boolean) => {\r\n    this.first_round.next(value);\r\n  };\r\n\r\n  updateLandScaped = (value: boolean) => {\r\n    this.landScaped.next(value);\r\n  };\r\n\r\n  updateLock_screen = (value: boolean) => {\r\n    this.lock_screen.next(value);\r\n  };\r\n\r\n  updateScreenId = (value: string) => {\r\n    this.screenId.next(value);\r\n  };\r\n\r\n  updateAllVideoStreams = (value: (Participant | Stream)[]) => {\r\n    this.allVideoStreams.next(value);\r\n  };\r\n\r\n  updateNewLimitedStreams = (value: (Participant | Stream)[]) => {\r\n    this.newLimitedStreams.next(value);\r\n  };\r\n\r\n  updateNewLimitedStreamsIDs = (value: string[]) => {\r\n    this.newLimitedStreamsIDs.next(value);\r\n  };\r\n\r\n  updateActiveSounds = (value: string[]) => {\r\n    this.activeSounds.next(value);\r\n  };\r\n\r\n  updateScreenShareIDStream = (value: string) => {\r\n    this.screenShareIDStream.next(value);\r\n  };\r\n\r\n  updateScreenShareNameStream = (value: string) => {\r\n    this.screenShareNameStream.next(value);\r\n  };\r\n\r\n  updateAdminIDStream = (value: string) => {\r\n    this.adminIDStream.next(value);\r\n  };\r\n\r\n  updateAdminNameStream = (value: string) => {\r\n    this.adminNameStream.next(value);\r\n  };\r\n\r\n  updateYouYouStream = (value: (Participant | Stream)[]) => {\r\n    this.youYouStream.next(value);\r\n  };\r\n\r\n  updateYouYouStreamIDs = (value: string[]) => {\r\n    this.youYouStreamIDs.next(value);\r\n  };\r\n\r\n  updateLocalStream = (value: MediaStream | null) => {\r\n    this.localStream.next(value);\r\n  };\r\n\r\n  updateRecordStarted = (value: boolean) => {\r\n    this.recordStarted.next(value);\r\n  };\r\n\r\n  updateRecordResumed = (value: boolean) => {\r\n    this.recordResumed.next(value);\r\n  };\r\n\r\n  updateRecordPaused = (value: boolean) => {\r\n    this.recordPaused.next(value);\r\n  };\r\n\r\n  updateRecordStopped = (value: boolean) => {\r\n    this.recordStopped.next(value);\r\n  };\r\n\r\n  updateAdminRestrictSetting = (value: boolean) => {\r\n    this.adminRestrictSetting.next(value);\r\n  };\r\n\r\n  updateVideoRequestState = (value: string | null) => {\r\n    this.videoRequestState.next(value);\r\n  };\r\n\r\n  updateVideoRequestTime = (value: number) => {\r\n    this.videoRequestTime.next(value);\r\n  };\r\n\r\n  updateVideoAction = (value: boolean) => {\r\n    this.videoAction.next(value);\r\n  };\r\n\r\n  updateLocalStreamVideo = (value: MediaStream | null) => {\r\n    this.localStreamVideo.next(value);\r\n  };\r\n\r\n  updateUserDefaultVideoInputDevice = (value: string) => {\r\n    this.userDefaultVideoInputDevice.next(value);\r\n  };\r\n\r\n  updateCurrentFacingMode = (value: string) => {\r\n    this.currentFacingMode.next(value);\r\n  };\r\n\r\n  updatePrevFacingMode = (value: string) => {\r\n    this.prevFacingMode.next(value);\r\n  };\r\n\r\n  updateDefVideoID = (value: string) => {\r\n    this.defVideoID.next(value);\r\n  };\r\n\r\n  updateAllowed = (value: boolean) => {\r\n    this.allowed.next(value);\r\n  };\r\n\r\n  updateDispActiveNames = (value: string[]) => {\r\n    this.dispActiveNames.next(value);\r\n  };\r\n\r\n  updateP_dispActiveNames = (value: string[]) => {\r\n    this.p_dispActiveNames.next(value);\r\n  };\r\n\r\n  updateActiveNames = (value: string[]) => {\r\n    this.activeNames.next(value);\r\n  };\r\n\r\n  updatePrevActiveNames = (value: string[]) => {\r\n    this.prevActiveNames.next(value);\r\n  };\r\n\r\n  updateP_activeNames = (value: string[]) => {\r\n    this.p_activeNames.next(value);\r\n  };\r\n\r\n  updateMembersReceived = (value: boolean) => {\r\n    this.membersReceived.next(value);\r\n  };\r\n\r\n  updateDeferScreenReceived = (value: boolean) => {\r\n    this.deferScreenReceived.next(value);\r\n  };\r\n\r\n  updateHostFirstSwitch = (value: boolean) => {\r\n    this.hostFirstSwitch.next(value);\r\n  };\r\n\r\n  updateMicAction = (value: boolean) => {\r\n    this.micAction.next(value);\r\n  };\r\n\r\n  updateScreenAction = (value: boolean) => {\r\n    this.screenAction.next(value);\r\n  };\r\n\r\n  updateChatAction = (value: boolean) => {\r\n    this.chatAction.next(value);\r\n  };\r\n\r\n  updateAudioRequestState = (value: string | null) => {\r\n    this.audioRequestState.next(value);\r\n  };\r\n\r\n  updateScreenRequestState = (value: string | null) => {\r\n    this.screenRequestState.next(value);\r\n  };\r\n\r\n  updateChatRequestState = (value: string | null) => {\r\n    this.chatRequestState.next(value);\r\n  };\r\n\r\n  updateAudioRequestTime = (value: number) => {\r\n    this.audioRequestTime.next(value);\r\n  };\r\n\r\n  updateScreenRequestTime = (value: number) => {\r\n    this.screenRequestTime.next(value);\r\n  };\r\n\r\n  updateChatRequestTime = (value: number) => {\r\n    this.chatRequestTime.next(value);\r\n  };\r\n\r\n  updateOldSoundIds = (value: string[]) => {\r\n    this.oldSoundIds.next(value);\r\n  };\r\n\r\n  updateHostLabel = (value: string) => {\r\n    this.hostLabel.next(value);\r\n  };\r\n\r\n  updateMainScreenFilled = (value: boolean) => {\r\n    this.mainScreenFilled.next(value);\r\n  };\r\n\r\n  updateLocalStreamScreen = (value: MediaStream | null) => {\r\n    this.localStreamScreen.next(value);\r\n  };\r\n\r\n  updateScreenAlreadyOn = (value: boolean) => {\r\n    this.screenAlreadyOn.next(value);\r\n  };\r\n\r\n  updateChatAlreadyOn = (value: boolean) => {\r\n    this.chatAlreadyOn.next(value);\r\n  };\r\n\r\n  updateRedirectURL = (value: string) => {\r\n    this.redirectURL.next(value);\r\n  };\r\n\r\n  updateOldAllStreams = (value: (Participant | Stream)[]) => {\r\n    this.oldAllStreams.next(value);\r\n  };\r\n\r\n  updateAdminVidID = (value: string) => {\r\n    this.adminVidID.next(value);\r\n  };\r\n\r\n  updateStreamNames = (value: Stream[]) => {\r\n    this.streamNames.next(value);\r\n  };\r\n\r\n  updateNon_alVideoStreams = (value: Participant[]) => {\r\n    this.non_alVideoStreams.next(value);\r\n  };\r\n\r\n  updateSortAudioLoudness = (value: boolean) => {\r\n    this.sortAudioLoudness.next(value);\r\n  };\r\n\r\n  updateAudioDecibels = (value: AudioDecibels[]) => {\r\n    this.audioDecibels.next(value);\r\n  };\r\n\r\n  updateMixed_alVideoStreams = (value: (Participant | Stream)[]) => {\r\n    this.mixed_alVideoStreams.next(value);\r\n  };\r\n\r\n  updateNon_alVideoStreams_muted = (value: Participant[]) => {\r\n    this.non_alVideoStreams_muted.next(value);\r\n  };\r\n\r\n  updatePaginatedStreams = (value: (Participant | Stream)[][]) => {\r\n    this.paginatedStreams.next(value);\r\n  };\r\n\r\n  updateLocalStreamAudio = (value: MediaStream | null) => {\r\n    this.localStreamAudio.next(value);\r\n  };\r\n\r\n  updateDefAudioID = (value: string) => {\r\n    this.defAudioID.next(value);\r\n  };\r\n\r\n  updateUserDefaultAudioInputDevice = (value: string) => {\r\n    this.userDefaultAudioInputDevice.next(value);\r\n  };\r\n\r\n  updateUserDefaultAudioOutputDevice = (value: string) => {\r\n    this.userDefaultAudioOutputDevice.next(value);\r\n  };\r\n\r\n  updatePrevAudioInputDevice = (value: string) => {\r\n    this.prevAudioInputDevice.next(value);\r\n  };\r\n\r\n  updatePrevVideoInputDevice = (value: string) => {\r\n    this.prevVideoInputDevice.next(value);\r\n  };\r\n\r\n  updateAudioPaused = (value: boolean) => {\r\n    this.audioPaused.next(value);\r\n  };\r\n\r\n  updateMainScreenPerson = (value: string) => {\r\n    this.mainScreenPerson.next(value);\r\n  };\r\n\r\n  updateAdminOnMainScreen = (value: boolean) => {\r\n    this.adminOnMainScreen.next(value);\r\n  };\r\n\r\n  updateScreenStates = (value: ScreenState[]) => {\r\n    this.screenStates.next(value);\r\n  };\r\n\r\n  updatePrevScreenStates = (value: ScreenState[]) => {\r\n    this.prevScreenStates.next(value);\r\n  };\r\n\r\n  updateUpdateDateState = (value: number | null) => {\r\n    this.updateDateState.next(value);\r\n  };\r\n\r\n  updateLastUpdate = (value: number | null) => {\r\n    this.lastUpdate.next(value);\r\n  };\r\n\r\n  updateNForReadjustRecord = (value: number) => {\r\n    this.nForReadjustRecord.next(value);\r\n  };\r\n\r\n  updateFixedPageLimit = (value: number) => {\r\n    this.fixedPageLimit.next(value);\r\n  };\r\n\r\n  updateRemoveAltGrid = (value: boolean) => {\r\n    this.removeAltGrid.next(value);\r\n  };\r\n\r\n  updateNForReadjust = (value: number) => {\r\n    this.nForReadjust.next(value);\r\n  };\r\n\r\n  updateLastReorderTime = (value: number) => {\r\n    this.lastReorderTime.next(value);\r\n  };\r\n\r\n  updateAudStreamNames = (value: Stream[]) => {\r\n    this.audStreamNames.next(value);\r\n  };\r\n\r\n  updateCurrentUserPage = (value: number) => {\r\n    this.currentUserPage.next(value);\r\n  };\r\n\r\n  updateMainHeightWidth = (value: number) => {\r\n    this.mainHeightWidth.next(value);\r\n  };\r\n\r\n  updatePrevMainHeightWidth = (value: number) => {\r\n    this.prevMainHeightWidth.next(value);\r\n  };\r\n\r\n  updatePrevDoPaginate = (value: boolean) => {\r\n    this.prevDoPaginate.next(value);\r\n  };\r\n\r\n  updateDoPaginate = (value: boolean) => {\r\n    this.doPaginate.next(value);\r\n  };\r\n\r\n  updateShareEnded = (value: boolean) => {\r\n    this.shareEnded.next(value);\r\n  };\r\n\r\n  updateLStreams = (value: (Participant | Stream)[]) => {\r\n    this.lStreams.next(value);\r\n  };\r\n\r\n  updateChatRefStreams = (value: (Participant | Stream)[]) => {\r\n    this.chatRefStreams.next(value);\r\n  };\r\n\r\n  updateControlHeight = (value: number) => {\r\n    this.controlHeight.next(value);\r\n  };\r\n\r\n  updateIsWideScreen = (value: boolean) => {\r\n    this.isWideScreen.next(value);\r\n  };\r\n\r\n  updateIsMediumScreen = (value: boolean) => {\r\n    this.isMediumScreen.next(value);\r\n  };\r\n\r\n  updateIsSmallScreen = (value: boolean) => {\r\n    this.isSmallScreen.next(value);\r\n  };\r\n\r\n  updateAddGrid = (value: boolean) => {\r\n    this.addGrid.next(value);\r\n  };\r\n\r\n  updateAddAltGrid = (value: boolean) => {\r\n    this.addAltGrid.next(value);\r\n  };\r\n\r\n  updateGridRows = (value: number) => {\r\n    this.gridRows.next(value);\r\n  };\r\n\r\n  updateGridCols = (value: number) => {\r\n    this.gridCols.next(value);\r\n  };\r\n\r\n  updateAltGridRows = (value: number) => {\r\n    this.altGridRows.next(value);\r\n  };\r\n\r\n  updateAltGridCols = (value: number) => {\r\n    this.altGridCols.next(value);\r\n  };\r\n\r\n  updateNumberPages = (value: number) => {\r\n    this.numberPages.next(value);\r\n  };\r\n\r\n  updateCurrentStreams = (value: (Participant | Stream)[]) => {\r\n    this.currentStreams.next(value);\r\n  };\r\n\r\n  updateShowMiniView = (value: boolean) => {\r\n    this.showMiniView.next(value);\r\n  };\r\n\r\n  updateNStream = (value: MediaStream | null) => {\r\n    this.nStream.next(value);\r\n  };\r\n\r\n  updateDefer_receive = (value: boolean) => {\r\n    this.defer_receive.next(value);\r\n  };\r\n\r\n  updateAllAudioStreams = (value: (Participant | Stream)[]) => {\r\n    this.allAudioStreams.next(value);\r\n  };\r\n\r\n  updateRemoteScreenStream = (value: Stream[]) => {\r\n    this.remoteScreenStream.next(value);\r\n  };\r\n\r\n  updateScreenProducer = (value: Producer | null) => {\r\n    this.screenProducer.next(value);\r\n  };\r\n\r\n  updateLocalScreenProducer = (value: Producer | null) => {\r\n    this.localScreenProducer.next(value);\r\n  };\r\n\r\n  updateGotAllVids = (value: boolean) => {\r\n    this.gotAllVids.next(value);\r\n  };\r\n\r\n  updatePaginationHeightWidth = (value: number) => {\r\n    this.paginationHeightWidth.next(value);\r\n  };\r\n\r\n  updatePaginationDirection = (value: 'horizontal' | 'vertical') => {\r\n    this.paginationDirection.next(value);\r\n  };\r\n\r\n  updateGridSizes = (value: GridSizes) => {\r\n    this.gridSizes.next(value);\r\n  };\r\n\r\n  updateScreenForceFullDisplay = (value: boolean) => {\r\n    this.screenForceFullDisplay.next(value);\r\n  };\r\n\r\n  updateMainGridStream = (value: CustomMediaComponent[]) => {\r\n    this.mainGridStream.next(value);\r\n  };\r\n\r\n  updateOtherGridStreams = (value: CustomMediaComponent[][]) => {\r\n    this.otherGridStreams.next(value);\r\n  };\r\n\r\n  updateAudioOnlyStreams = (value: CustomMediaComponent[]) => {\r\n    this.audioOnlyStreams.next(value);\r\n  };\r\n\r\n  updateVideoInputs = (value: MediaDeviceInfo[]) => {\r\n    this.videoInputs.next(value);\r\n  };\r\n\r\n  updateAudioInputs = (value: MediaDeviceInfo[]) => {\r\n    this.audioInputs.next(value);\r\n  };\r\n\r\n  updateMeetingProgressTime = (value: string) => {\r\n    this.meetingProgressTime.next(value);\r\n  };\r\n\r\n  updateMeetingElapsedTime = (value: number) => {\r\n    this.meetingElapsedTime.next(value);\r\n  };\r\n\r\n  updateRef_participants = (value: Participant[]) => {\r\n    this.ref_participants.next(value);\r\n  };\r\n\r\n  // Messages\r\n  messages = new BehaviorSubject<Message[]>([]);\r\n  startDirectMessage = new BehaviorSubject<boolean>(false);\r\n  directMessageDetails = new BehaviorSubject<Participant | null>(null);\r\n  showMessagesBadge = new BehaviorSubject<boolean>(false);\r\n\r\n  // Event Settings\r\n  audioSetting = new BehaviorSubject<string>('allow');\r\n  videoSetting = new BehaviorSubject<string>('allow');\r\n  screenshareSetting = new BehaviorSubject<string>('allow');\r\n  chatSetting = new BehaviorSubject<string>('allow');\r\n\r\n  // Display Settings\r\n  displayOption = new BehaviorSubject<string>('media');\r\n  autoWave = new BehaviorSubject<boolean>(true);\r\n  forceFullDisplay = new BehaviorSubject<boolean>(true);\r\n  prevForceFullDisplay = new BehaviorSubject<boolean>(false);\r\n  prevMeetingDisplayType = new BehaviorSubject<string>('video');\r\n\r\n  // Waiting Room\r\n  waitingRoomFilter = new BehaviorSubject<string>('');\r\n  waitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>([]);\r\n  waitingRoomCounter = new BehaviorSubject<number>(0);\r\n  filteredWaitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>([]);\r\n\r\n  // Requests\r\n  requestFilter = new BehaviorSubject<string>('');\r\n  requestList = new BehaviorSubject<Request[]>([]);\r\n  requestCounter = new BehaviorSubject<number>(0);\r\n  filteredRequestList = new BehaviorSubject<Request[]>([]);\r\n\r\n  // Total Requests and Waiting Room\r\n  totalReqWait = new BehaviorSubject<number>(0);\r\n\r\n  // Alerts\r\n  alertVisible = new BehaviorSubject<boolean>(false);\r\n  alertMessage = new BehaviorSubject<string>('');\r\n  alertType = new BehaviorSubject<'success' | 'danger'>('success');\r\n  alertDuration = new BehaviorSubject<number>(3000);\r\n\r\n  // Progress Timer\r\n  progressTimerVisible = new BehaviorSubject<boolean>(true);\r\n  progressTimerValue = new BehaviorSubject<number>(0);\r\n\r\n  // Menu Modals\r\n  isMenuModalVisible = new BehaviorSubject<boolean>(false);\r\n  isRecordingModalVisible = new BehaviorSubject<boolean>(false);\r\n  isSettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isRequestsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isWaitingModalVisible = new BehaviorSubject<boolean>(false);\r\n  isCoHostModalVisible = new BehaviorSubject<boolean>(false);\r\n  isMediaSettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isDisplaySettingsModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Other Modals\r\n  isParticipantsModalVisible = new BehaviorSubject<boolean>(false);\r\n  isMessagesModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfirmExitModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfirmHereModalVisible = new BehaviorSubject<boolean>(false);\r\n  isShareEventModalVisible = new BehaviorSubject<boolean>(false);\r\n  isLoadingModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Recording Options\r\n  recordingMediaOptions = new BehaviorSubject<string>('video');\r\n  recordingAudioOptions = new BehaviorSubject<string>('all');\r\n  recordingVideoOptions = new BehaviorSubject<string>('all');\r\n  recordingVideoType = new BehaviorSubject<string>('fullDisplay');\r\n  recordingVideoOptimized = new BehaviorSubject<boolean>(false);\r\n  recordingDisplayType = new BehaviorSubject<'video' | 'media' | 'all'>('video');\r\n  recordingAddHLS = new BehaviorSubject<boolean>(true);\r\n  recordingNameTags = new BehaviorSubject<boolean>(true);\r\n  recordingBackgroundColor = new BehaviorSubject<string>('#83c0e9');\r\n  recordingNameTagsColor = new BehaviorSubject<string>('#ffffff');\r\n  recordingAddText = new BehaviorSubject<boolean>(false);\r\n  recordingCustomText = new BehaviorSubject<string>('Add Text');\r\n  recordingCustomTextPosition = new BehaviorSubject<string>('top');\r\n  recordingCustomTextColor = new BehaviorSubject<string>('#ffffff');\r\n  recordingOrientationVideo = new BehaviorSubject<string>('landscape');\r\n  clearedToResume = new BehaviorSubject<boolean>(true);\r\n  clearedToRecord = new BehaviorSubject<boolean>(true);\r\n  recordState = new BehaviorSubject<string>('green');\r\n  showRecordButtons = new BehaviorSubject<boolean>(false);\r\n  recordingProgressTime = new BehaviorSubject<string>('00:00:00');\r\n  audioSwitching = new BehaviorSubject<boolean>(false);\r\n  videoSwitching = new BehaviorSubject<boolean>(false);\r\n\r\n  // Media States\r\n  videoAlreadyOn = new BehaviorSubject<boolean>(false);\r\n  audioAlreadyOn = new BehaviorSubject<boolean>(false);\r\n\r\n  componentSizes = new BehaviorSubject<ComponentSizes>({\r\n    mainHeight: 0,\r\n    otherHeight: 0,\r\n    mainWidth: 0,\r\n    otherWidth: 0,\r\n  });\r\n\r\n  // Permissions\r\n  hasCameraPermission = new BehaviorSubject<boolean>(false);\r\n  hasAudioPermission = new BehaviorSubject<boolean>(false);\r\n\r\n  // Transports\r\n  transportCreated = new BehaviorSubject<boolean>(false);\r\n  localTransportCreated = new BehaviorSubject<boolean>(false);\r\n  transportCreatedVideo = new BehaviorSubject<boolean>(false);\r\n  transportCreatedAudio = new BehaviorSubject<boolean>(false);\r\n  transportCreatedScreen = new BehaviorSubject<boolean>(false);\r\n  producerTransport = new BehaviorSubject<Transport | null>(null);\r\n  localProducerTransport = new BehaviorSubject<Transport | null>(null);\r\n  videoProducer = new BehaviorSubject<Producer | null>(null);\r\n  localVideoProducer = new BehaviorSubject<Producer | null>(null);\r\n  params = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  videoParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  audioParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\r\n  audioProducer = new BehaviorSubject<Producer | null>(null);\r\n  audioLevel = new BehaviorSubject<number>(0);\r\n  localAudioProducer = new BehaviorSubject<Producer | null>(null);\r\n  consumerTransports = new BehaviorSubject<TransportType[]>([]);\r\n  consumingTransports = new BehaviorSubject<string[]>([]);\r\n\r\n  // Polls\r\n  polls = new BehaviorSubject<Poll[]>([]);\r\n  poll = new BehaviorSubject<Poll | null>(null);\r\n  isPollModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Background\r\n  customImage = new BehaviorSubject<string>('');\r\n  selectedImage = new BehaviorSubject<string>('');\r\n  segmentVideo = new BehaviorSubject<MediaStream | null>(null);\r\n  selfieSegmentation = new BehaviorSubject<SelfieSegmentation | null>(null);\r\n  pauseSegmentation = new BehaviorSubject<boolean>(false);\r\n  processedStream = new BehaviorSubject<MediaStream | null>(null);\r\n  keepBackground = new BehaviorSubject<boolean>(false);\r\n  backgroundHasChanged = new BehaviorSubject<boolean>(false);\r\n  virtualStream = new BehaviorSubject<MediaStream | null>(null);\r\n  mainCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  prevKeepBackground = new BehaviorSubject<boolean>(false);\r\n  appliedBackground = new BehaviorSubject<boolean>(false);\r\n  isBackgroundModalVisible = new BehaviorSubject<boolean>(false);\r\n  autoClickBackground = new BehaviorSubject<boolean>(false);\r\n\r\n  // Breakout Rooms\r\n  breakoutRooms = new BehaviorSubject<BreakoutParticipant[][]>([]);\r\n  currentRoomIndex = new BehaviorSubject<number>(0);\r\n  canStartBreakout = new BehaviorSubject<boolean>(false);\r\n  breakOutRoomStarted = new BehaviorSubject<boolean>(false);\r\n  breakOutRoomEnded = new BehaviorSubject<boolean>(false);\r\n  hostNewRoom = new BehaviorSubject<number>(-1);\r\n  limitedBreakRoom = new BehaviorSubject<BreakoutParticipant[]>([]);\r\n  mainRoomsLength = new BehaviorSubject<number>(0);\r\n  memberRoom = new BehaviorSubject<number>(-1);\r\n  isBreakoutRoomsModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  // Whiteboard\r\n  whiteboardUsers = new BehaviorSubject<WhiteboardUser[]>([]);\r\n  currentWhiteboardIndex = new BehaviorSubject<number>(0);\r\n  canStartWhiteboard = new BehaviorSubject<boolean>(false);\r\n  whiteboardStarted = new BehaviorSubject<boolean>(false);\r\n  whiteboardEnded = new BehaviorSubject<boolean>(false);\r\n  whiteboardLimit = new BehaviorSubject<number>(4);\r\n  isWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\r\n  isConfigureWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\r\n  shapes = new BehaviorSubject<Shape[]>([]);\r\n  useImageBackground = new BehaviorSubject<boolean>(true);\r\n  redoStack = new BehaviorSubject<Shape[]>([]);\r\n  undoStack = new BehaviorSubject<string[]>([]);\r\n  canvasStream = new BehaviorSubject<MediaStream | null>(null);\r\n  canvasWhiteboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n\r\n  // Screenboard\r\n  canvasScreenboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  processedScreenStream = new BehaviorSubject<MediaStream | null>(null);\r\n  annotateScreenStream = new BehaviorSubject<boolean>(false);\r\n  mainScreenCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\r\n  isScreenboardModalVisible = new BehaviorSubject<boolean>(false);\r\n\r\n  //state variables for the control buttons\r\n  micActive = new BehaviorSubject<boolean>(\r\n    this.audioAlreadyOn.value ? this.audioAlreadyOn.value : false,\r\n  );\r\n  videoActive = new BehaviorSubject<boolean>(\r\n    this.videoAlreadyOn.value ? this.videoAlreadyOn.value : false,\r\n  );\r\n  screenShareActive = new BehaviorSubject<boolean>(false);\r\n  endCallActive = new BehaviorSubject<boolean>(false);\r\n  participantsActive = new BehaviorSubject<boolean>(false);\r\n  menuActive = new BehaviorSubject<boolean>(false);\r\n  commentsActive = new BehaviorSubject<boolean>(false);\r\n\r\n  // Update functions\r\n  updateMessages = (value: Message[]) => {\r\n    this.messages.next(value);\r\n  };\r\n\r\n  updateStartDirectMessage = (value: boolean) => {\r\n    this.startDirectMessage.next(value);\r\n  };\r\n\r\n  updateDirectMessageDetails = (value: Participant | null) => {\r\n    this.directMessageDetails.next(value);\r\n  };\r\n\r\n  updateShowMessagesBadge = (value: boolean) => {\r\n    this.showMessagesBadge.next(value);\r\n  };\r\n\r\n  updateAudioSetting = (value: string) => {\r\n    this.audioSetting.next(value);\r\n  };\r\n\r\n  updateVideoSetting = (value: string) => {\r\n    this.videoSetting.next(value);\r\n  };\r\n\r\n  updateScreenshareSetting = (value: string) => {\r\n    this.screenshareSetting.next(value);\r\n  };\r\n\r\n  updateChatSetting = (value: string) => {\r\n    this.chatSetting.next(value);\r\n  };\r\n\r\n  updateDisplayOption = (value: string) => {\r\n    this.displayOption.next(value);\r\n  };\r\n\r\n  updateAutoWave = (value: boolean) => {\r\n    this.autoWave.next(value);\r\n  };\r\n\r\n  updateForceFullDisplay = (value: boolean) => {\r\n    this.forceFullDisplay.next(value);\r\n  };\r\n\r\n  updatePrevForceFullDisplay = (value: boolean) => {\r\n    this.prevForceFullDisplay.next(value);\r\n  };\r\n\r\n  updatePrevMeetingDisplayType = (value: string) => {\r\n    this.prevMeetingDisplayType.next(value);\r\n  };\r\n\r\n  updateWaitingRoomCounter = (value: number) => {\r\n    this.waitingRoomCounter.next(value);\r\n  };\r\n\r\n  updateWaitingRoomFilter = (value: string) => {\r\n    this.waitingRoomFilter.next(value);\r\n  };\r\n\r\n  updateWaitingRoomList = (value: WaitingRoomParticipant[]) => {\r\n    this.waitingRoomList.next(value);\r\n    this.filteredWaitingRoomList.next(value);\r\n    this.waitingRoomCounter.next(value.length);\r\n  };\r\n\r\n  onWaitingRoomClose = () => {\r\n    this.updateIsWaitingModalVisible(false);\r\n  };\r\n\r\n  updateRequestCounter = (value: number) => {\r\n    this.requestCounter.next(value);\r\n  };\r\n\r\n  updateRequestFilter = (value: string) => {\r\n    this.requestFilter.next(value);\r\n  };\r\n\r\n  updateRequestList = (value: Request[]) => {\r\n    this.requestList.next(value);\r\n    this.filteredRequestList.next(value);\r\n    this.requestCounter.next(value.length);\r\n  };\r\n\r\n  onRequestClose = () => {\r\n    this.updateIsRequestsModalVisible(false);\r\n  };\r\n\r\n  updateTotalReqWait = (value: number) => {\r\n    this.totalReqWait.next(value);\r\n  };\r\n\r\n  updateAlertVisible = (value: boolean) => {\r\n    this.alertVisible.next(value);\r\n  };\r\n\r\n  updateAlertMessage = (value: string) => {\r\n    this.alertMessage.next(value);\r\n  };\r\n\r\n  updateAlertType = (value: 'success' | 'danger') => {\r\n    this.alertType.next(value);\r\n  };\r\n\r\n  updateAlertDuration = (value: number) => {\r\n    this.alertDuration.next(value);\r\n  };\r\n\r\n  updateProgressTimerVisible = (value: boolean) => {\r\n    this.progressTimerVisible.next(value);\r\n  };\r\n\r\n  updateProgressTimerValue = (value: number) => {\r\n    this.progressTimerValue.next(value);\r\n  };\r\n\r\n  updateIsMenuModalVisible = (value: boolean) => {\r\n    this.isMenuModalVisible.next(value);\r\n  };\r\n\r\n  updateIsRecordingModalVisible = (value: boolean) => {\r\n    this.isRecordingModalVisible.next(value);\r\n    if (value) {\r\n      this.updateConfirmedToRecord(false);\r\n    } else {\r\n      if (\r\n        this.clearedToRecord.getValue() &&\r\n        this.clearedToResume.getValue() &&\r\n        this.recordStarted.getValue()\r\n      ) {\r\n        this.updateShowRecordButtons(true);\r\n      }\r\n    }\r\n  };\r\n\r\n  updateIsSettingsModalVisible = (value: boolean) => {\r\n    this.isSettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsRequestsModalVisible = (value: boolean) => {\r\n    this.isRequestsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsWaitingModalVisible = (value: boolean) => {\r\n    this.isWaitingModalVisible.next(value);\r\n  };\r\n\r\n  updateIsCoHostModalVisible = (value: boolean) => {\r\n    this.isCoHostModalVisible.next(value);\r\n  };\r\n\r\n  updateIsMediaSettingsModalVisible = (value: boolean) => {\r\n    this.isMediaSettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsDisplaySettingsModalVisible = (value: boolean) => {\r\n    this.isDisplaySettingsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsParticipantsModalVisible = (value: boolean) => {\r\n    this.isParticipantsModalVisible.next(value);\r\n  };\r\n\r\n  updateIsMessagesModalVisible = (value: boolean) => {\r\n    this.isMessagesModalVisible.next(value);\r\n    if (!value) {\r\n      this.updateShowMessagesBadge(false);\r\n    }\r\n  };\r\n\r\n  updateIsConfirmExitModalVisible = (value: boolean) => {\r\n    this.isConfirmExitModalVisible.next(value);\r\n  };\r\n\r\n  updateIsConfirmHereModalVisible = (value: boolean) => {\r\n    this.isConfirmHereModalVisible.next(value);\r\n  };\r\n\r\n  updateIsLoadingModalVisible = (value: boolean) => {\r\n    this.isLoadingModalVisible.next(value);\r\n  };\r\n\r\n  updateIsShareEventModalVisible = (value: boolean) => {\r\n    this.isShareEventModalVisible.next(value);\r\n  };\r\n\r\n  updateRecordingMediaOptions = (value: string) => {\r\n    this.recordingMediaOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAudioOptions = (value: string) => {\r\n    this.recordingAudioOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoOptions = (value: string) => {\r\n    this.recordingVideoOptions.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoType = (value: string) => {\r\n    this.recordingVideoType.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingVideoOptimized = (value: boolean) => {\r\n    this.recordingVideoOptimized.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingDisplayType = (value: 'video' | 'media' | 'all') => {\r\n    this.recordingDisplayType.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAddHLS = (value: boolean) => {\r\n    this.recordingAddHLS.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingAddText = (value: boolean) => {\r\n    this.recordingAddText.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomText = (value: string) => {\r\n    this.recordingCustomText.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomTextPosition = (value: string) => {\r\n    this.recordingCustomTextPosition.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingCustomTextColor = (value: string) => {\r\n    this.recordingCustomTextColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingNameTags = (value: boolean) => {\r\n    this.recordingNameTags.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingBackgroundColor = (value: string) => {\r\n    this.recordingBackgroundColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingNameTagsColor = (value: string) => {\r\n    this.recordingNameTagsColor.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateRecordingOrientationVideo = (value: string) => {\r\n    this.recordingOrientationVideo.next(value);\r\n    this.clearedToRecord.next(false);\r\n  };\r\n\r\n  updateClearedToResume = (value: boolean) => {\r\n    this.clearedToResume.next(value);\r\n  };\r\n\r\n  updateClearedToRecord = (value: boolean) => {\r\n    this.clearedToRecord.next(value);\r\n  };\r\n\r\n  updateRecordState = (value: string) => {\r\n    if (this.recordStarted.value && !this.recordStopped.value) {\r\n      if (!this.recordPaused.value) {\r\n        this.recordState.next('red');\r\n      } else {\r\n        this.recordState.next('yellow');\r\n      }\r\n    } else {\r\n      this.recordState.next(value);\r\n    }\r\n    this.recordState.next(value);\r\n  };\r\n\r\n  updateShowRecordButtons = (value: boolean) => {\r\n    this.showRecordButtons.next(value);\r\n  };\r\n\r\n  updateRecordingProgressTime = (value: string) => {\r\n    this.recordingProgressTime.next(value);\r\n  };\r\n\r\n  updateAudioSwitching = (value: boolean) => {\r\n    this.audioSwitching.next(value);\r\n  };\r\n\r\n  updateVideoSwitching = (value: boolean) => {\r\n    this.videoSwitching.next(value);\r\n  };\r\n\r\n  updateVideoAlreadyOn = (value: boolean) => {\r\n    this.videoAlreadyOn.next(value);\r\n    this.videoActive.next(value);\r\n  };\r\n\r\n  updateAudioAlreadyOn = (value: boolean) => {\r\n    this.audioAlreadyOn.next(value);\r\n    this.micActive.next(value);\r\n  };\r\n\r\n  updateComponentSizes = (sizes: ComponentSizes) => {\r\n    this.componentSizes.next(sizes);\r\n  };\r\n\r\n  updateHasCameraPermission = (value: boolean) => {\r\n    this.hasCameraPermission.next(value);\r\n  };\r\n\r\n  updateHasAudioPermission = (value: boolean) => {\r\n    this.hasAudioPermission.next(value);\r\n  };\r\n\r\n  requestPermissionCamera(): Promise<string> {\r\n    // Implement the request permission logic here\r\n    return Promise.resolve('granted');\r\n  }\r\n\r\n  requestPermissionAudio(): Promise<string> {\r\n    // Implement the request permission logic here\r\n    return Promise.resolve('granted');\r\n  }\r\n\r\n  updateTransportCreated = (value: boolean) => {\r\n    this.transportCreated.next(value);\r\n  };\r\n\r\n  updateLocalTransportCreated = (value: boolean) => {\r\n    this.localTransportCreated.next(value);\r\n  };\r\n\r\n  updateTransportCreatedVideo = (value: boolean) => {\r\n    this.transportCreatedVideo.next(value);\r\n  };\r\n\r\n  updateTransportCreatedAudio = (value: boolean) => {\r\n    this.transportCreatedAudio.next(value);\r\n  };\r\n\r\n  updateTransportCreatedScreen = (value: boolean) => {\r\n    this.transportCreatedScreen.next(value);\r\n  };\r\n\r\n  updateProducerTransport = (value: Transport | null) => {\r\n    this.producerTransport.next(value);\r\n  };\r\n\r\n  updateLocalProducerTransport = (value: Transport | null) => {\r\n    this.localProducerTransport.next(value);\r\n  };\r\n\r\n  updateVideoProducer = (value: Producer | null) => {\r\n    this.videoProducer.next(value);\r\n  };\r\n\r\n  updateLocalVideoProducer = (value: Producer | null) => {\r\n    this.localVideoProducer.next(value);\r\n  }\r\n\r\n  updateParams = (value: ProducerOptions) => {\r\n    this.params.next(value);\r\n  };\r\n\r\n  updateVideoParams = (value: ProducerOptions) => {\r\n    this.videoParams.next(value);\r\n  };\r\n\r\n  updateAudioParams = (value: ProducerOptions) => {\r\n    this.audioParams.next(value);\r\n  };\r\n\r\n  updateAudioProducer = (value: Producer | null) => {\r\n    this.audioProducer.next(value);\r\n  };\r\n\r\n  updateAudioLevel = (value: number) => {\r\n    this.audioLevel.next(value);\r\n  };\r\n\r\n  updateLocalAudioProducer = (value: Producer | null) => {\r\n    this.localAudioProducer.next(value);\r\n  };\r\n\r\n  updateConsumerTransports = (value: TransportType[]) => {\r\n    this.consumerTransports.next(value);\r\n  };\r\n\r\n  updateConsumingTransports = (value: string[]) => {\r\n    this.consumingTransports.next(value);\r\n  };\r\n\r\n  updatePolls = (value: Poll[]) => {\r\n    this.polls.next(value);\r\n  };\r\n\r\n  updatePoll = (value: Poll | null) => {\r\n    this.poll.next(value);\r\n  };\r\n\r\n  updateIsPollModalVisible = (value: boolean) => {\r\n    this.isPollModalVisible.next(value);\r\n  };\r\n\r\n  updateCustomImage = (value: string) => {\r\n    this.customImage.next(value);\r\n  };\r\n\r\n  updateSelectedImage = (value: string) => {\r\n    this.selectedImage.next(value);\r\n  };\r\n\r\n  updateSegmentVideo = (value: MediaStream | null) => {\r\n    this.segmentVideo.next(value);\r\n  };\r\n\r\n  updateSelfieSegmentation = (value: SelfieSegmentation | null) => {\r\n    this.selfieSegmentation.next(value);\r\n  };\r\n\r\n  updatePauseSegmentation = (value: boolean) => {\r\n    this.pauseSegmentation.next(value);\r\n  };\r\n\r\n  updateProcessedStream = (value: MediaStream | null) => {\r\n    this.processedStream.next(value);\r\n  };\r\n\r\n  updateKeepBackground = (value: boolean) => {\r\n    this.keepBackground.next(value);\r\n  };\r\n\r\n  updateBackgroundHasChanged = (value: boolean) => {\r\n    this.backgroundHasChanged.next(value);\r\n  };\r\n\r\n  updateVirtualStream = (value: MediaStream | null) => {\r\n    this.virtualStream.next(value);\r\n  };\r\n\r\n  updateMainCanvas = (value: HTMLCanvasElement | null) => {\r\n    this.mainCanvas.next(value);\r\n  };\r\n\r\n  updatePrevKeepBackground = (value: boolean) => {\r\n    this.prevKeepBackground.next(value);\r\n  };\r\n\r\n  updateAppliedBackground = (value: boolean) => {\r\n    this.appliedBackground.next(value);\r\n  };\r\n\r\n  updateIsBackgroundModalVisible = (value: boolean) => {\r\n    this.isBackgroundModalVisible.next(value);\r\n  };\r\n\r\n  updateAutoClickBackground = (value: boolean) => {\r\n    this.autoClickBackground.next(value);\r\n  };\r\n\r\n  updateBreakoutRooms = (value: BreakoutParticipant[][]) => {\r\n    this.breakoutRooms.next(value);\r\n  };\r\n\r\n  updateCurrentRoomIndex = (value: number) => {\r\n    this.currentRoomIndex.next(value);\r\n  };\r\n\r\n  updateCanStartBreakout = (value: boolean) => {\r\n    this.canStartBreakout.next(value);\r\n  };\r\n\r\n  updateBreakOutRoomStarted = (value: boolean) => {\r\n    this.breakOutRoomStarted.next(value);\r\n  };\r\n\r\n  updateBreakOutRoomEnded = (value: boolean) => {\r\n    this.breakOutRoomEnded.next(value);\r\n  };\r\n\r\n  updateHostNewRoom = (value: number) => {\r\n    this.hostNewRoom.next(value);\r\n  };\r\n\r\n  updateLimitedBreakRoom = (value: BreakoutParticipant[]) => {\r\n    this.limitedBreakRoom.next(value);\r\n  };\r\n\r\n  updateMainRoomsLength = (value: number) => {\r\n    this.mainRoomsLength.next(value);\r\n  };\r\n\r\n  updateMemberRoom = (value: number) => {\r\n    this.memberRoom.next(value);\r\n  };\r\n\r\n  updateIsBreakoutRoomsModalVisible = (value: boolean) => {\r\n    this.isBreakoutRoomsModalVisible.next(value);\r\n  };\r\n\r\n  updateWhiteboardUsers = (value: WhiteboardUser[]) => {\r\n    this.whiteboardUsers.next(value);\r\n  };\r\n\r\n  updateCurrentWhiteboardIndex = (value: number) => {\r\n    this.currentWhiteboardIndex.next(value);\r\n  };\r\n\r\n  updateCanStartWhiteboard = (value: boolean) => {\r\n    this.canStartWhiteboard.next(value);\r\n  };\r\n\r\n  updateWhiteboardStarted = (value: boolean) => {\r\n    this.whiteboardStarted.next(value);\r\n  };\r\n\r\n  updateWhiteboardEnded = (value: boolean) => {\r\n    this.whiteboardEnded.next(value);\r\n  };\r\n\r\n  updateWhiteboardLimit = (value: number) => {\r\n    this.whiteboardLimit.next(value);\r\n  };\r\n\r\n  updateIsWhiteboardModalVisible = (value: boolean) => {\r\n    this.isWhiteboardModalVisible.next(value);\r\n  };\r\n\r\n  updateIsConfigureWhiteboardModalVisible = (value: boolean) => {\r\n    this.isConfigureWhiteboardModalVisible.next(value);\r\n  };\r\n\r\n  updateShapes = (value: Shape[]) => {\r\n    this.shapes.next(value);\r\n  };\r\n\r\n  updateUseImageBackground = (value: boolean) => {\r\n    this.useImageBackground.next(value);\r\n  };\r\n\r\n  updateRedoStack = (value: Shape[]) => {\r\n    this.redoStack.next(value);\r\n  };\r\n\r\n  updateUndoStack = (value: string[]) => {\r\n    this.undoStack.next(value);\r\n  };\r\n\r\n  updateCanvasStream = (value: MediaStream | null) => {\r\n    this.canvasStream.next(value);\r\n  };\r\n\r\n  updateCanvasWhiteboard = (value: HTMLCanvasElement | null) => {\r\n    this.canvasWhiteboard.next(value);\r\n  };\r\n\r\n  updateCanvasScreenboard = (value: HTMLCanvasElement | null) => {\r\n    this.canvasScreenboard.next(value);\r\n  };\r\n\r\n  updateProcessedScreenStream = (value: MediaStream | null) => {\r\n    this.processedScreenStream.next(value);\r\n  };\r\n\r\n  updateAnnotateScreenStream = (value: boolean) => {\r\n    this.annotateScreenStream.next(value);\r\n  };\r\n\r\n  updateMainScreenCanvas = (value: HTMLCanvasElement | null) => {\r\n    this.mainScreenCanvas.next(value);\r\n  };\r\n\r\n  updateIsScreenboardModalVisible = (value: boolean) => {\r\n    this.isScreenboardModalVisible.next(value);\r\n  };\r\n\r\n  checkOrientation = () => {\r\n    const isPortrait = window.matchMedia('(orientation: portrait)').matches;\r\n    return isPortrait ? 'portrait' : 'landscape';\r\n  };\r\n\r\n  showAlert = ({\r\n    message,\r\n    type,\r\n    duration = 3000,\r\n  }: {\r\n    message: string;\r\n    type: 'success' | 'danger';\r\n    duration?: number;\r\n  }) => {\r\n    this.updateAlertMessage(message);\r\n    this.updateAlertType(type);\r\n    this.updateAlertDuration(duration);\r\n    this.updateAlertVisible(true);\r\n  };\r\n\r\n  getAllParams() {\r\n    return {\r\n      localUIMode: this.localUIMode.value, // Local UI mode\r\n\r\n      // Room Details\r\n      roomName: this.roomName.value,\r\n      member: this.member.value,\r\n      adminPasscode: this.adminPasscode.value,\r\n      youAreCoHost: this.youAreCoHost.value,\r\n      youAreHost: this.youAreHost.value,\r\n      islevel: this.islevel.value,\r\n      confirmedToRecord: this.confirmedToRecord.value,\r\n      meetingDisplayType: this.meetingDisplayType.value,\r\n      meetingVideoOptimized: this.meetingVideoOptimized.value,\r\n      eventType: this.eventType.value,\r\n      participants: this.participants.value,\r\n      filteredParticipants: this.filteredParticipants.value,\r\n      participantsCounter: this.participantsCounter.value,\r\n      participantsFilter: this.participantsFilter.value,\r\n\r\n      // More room details - media\r\n      consume_sockets: this.consume_sockets.value,\r\n      rtpCapabilities: this.rtpCapabilities.value,\r\n      roomRecvIPs: this.roomRecvIPs.value,\r\n      meetingRoomParams: this.meetingRoomParams.value,\r\n      itemPageLimit: this.itemPageLimit.value,\r\n      audioOnlyRoom: this.audioOnlyRoom.value,\r\n      addForBasic: this.addForBasic.value,\r\n      screenPageLimit: this.screenPageLimit.value,\r\n      shareScreenStarted: this.shareScreenStarted.value,\r\n      shared: this.shared.value,\r\n      targetOrientation: this.targetOrientation.value,\r\n      targetResolution: this.targetResolution.value,\r\n      targetResolutionHost: this.targetResolutionHost.value,\r\n      vidCons: this.vidCons.value,\r\n      frameRate: this.frameRate.value,\r\n      hParams: this.hParams.value,\r\n      vParams: this.vParams.value,\r\n      screenParams: this.screenParams.value,\r\n      aParams: this.aParams.value,\r\n\r\n      // More room details - recording\r\n      recordingAudioPausesLimit: this.recordingAudioPausesLimit.value,\r\n      recordingAudioPausesCount: this.recordingAudioPausesCount.value,\r\n      recordingAudioSupport: this.recordingAudioSupport.value,\r\n      recordingAudioPeopleLimit: this.recordingAudioPeopleLimit.value,\r\n      recordingAudioParticipantsTimeLimit: this.recordingAudioParticipantsTimeLimit.value,\r\n      recordingVideoPausesCount: this.recordingVideoPausesCount.value,\r\n      recordingVideoPausesLimit: this.recordingVideoPausesLimit.value,\r\n      recordingVideoSupport: this.recordingVideoSupport.value,\r\n      recordingVideoPeopleLimit: this.recordingVideoPeopleLimit.value,\r\n      recordingVideoParticipantsTimeLimit: this.recordingVideoParticipantsTimeLimit.value,\r\n      recordingAllParticipantsSupport: this.recordingAllParticipantsSupport.value,\r\n      recordingVideoParticipantsSupport: this.recordingVideoParticipantsSupport.value,\r\n      recordingAllParticipantsFullRoomSupport: this.recordingAllParticipantsFullRoomSupport.value,\r\n      recordingVideoParticipantsFullRoomSupport:\r\n        this.recordingVideoParticipantsFullRoomSupport.value,\r\n      recordingPreferredOrientation: this.recordingPreferredOrientation.value,\r\n      recordingSupportForOtherOrientation: this.recordingSupportForOtherOrientation.value,\r\n      recordingMultiFormatsSupport: this.recordingMultiFormatsSupport.value,\r\n\r\n      userRecordingParams: this.userRecordingParams.value,\r\n      canRecord: this.canRecord.value,\r\n      startReport: this.startReport.value,\r\n      endReport: this.endReport.value,\r\n      recordStartTime: this.recordStartTime.value,\r\n      recordElapsedTime: this.recordElapsedTime.value,\r\n      isTimerRunning: this.isTimerRunning.value,\r\n      canPauseResume: this.canPauseResume.value,\r\n      recordChangeSeconds: this.recordChangeSeconds.value,\r\n      pauseLimit: this.pauseLimit.value,\r\n      pauseRecordCount: this.pauseRecordCount.value,\r\n      canLaunchRecord: this.canLaunchRecord.value,\r\n      stopLaunchRecord: this.stopLaunchRecord.value,\r\n\r\n      participantsAll: this.participantsAll.value,\r\n\r\n      firstAll: this.firstAll.value,\r\n      updateMainWindow: this.updateMainWindow.value,\r\n      first_round: this.first_round.value,\r\n      landScaped: this.landScaped.value,\r\n      lock_screen: this.lock_screen.value,\r\n      screenId: this.screenId.value,\r\n      allVideoStreams: this.allVideoStreams.value,\r\n      newLimitedStreams: this.newLimitedStreams.value,\r\n      newLimitedStreamsIDs: this.newLimitedStreamsIDs.value,\r\n      activeSounds: this.activeSounds.value,\r\n      screenShareIDStream: this.screenShareIDStream.value,\r\n      screenShareNameStream: this.screenShareNameStream.value,\r\n      adminIDStream: this.adminIDStream.value,\r\n      adminNameStream: this.adminNameStream.value,\r\n      youYouStream: this.youYouStream.value,\r\n      youYouStreamIDs: this.youYouStreamIDs.value,\r\n      localStream: this.localStream.value,\r\n      recordStarted: this.recordStarted.value,\r\n      recordResumed: this.recordResumed.value,\r\n      recordPaused: this.recordPaused.value,\r\n      recordStopped: this.recordStopped.value,\r\n      adminRestrictSetting: this.adminRestrictSetting.value,\r\n      videoRequestState: this.videoRequestState.value,\r\n      videoRequestTime: this.videoRequestTime.value,\r\n      videoAction: this.videoAction.value,\r\n      localStreamVideo: this.localStreamVideo.value,\r\n      userDefaultVideoInputDevice: this.userDefaultVideoInputDevice.value,\r\n      currentFacingMode: this.currentFacingMode.value,\r\n      prevFacingMode: this.prevFacingMode.value,\r\n      defVideoID: this.defVideoID.value,\r\n      allowed: this.allowed.value,\r\n      dispActiveNames: this.dispActiveNames.value,\r\n      p_dispActiveNames: this.p_dispActiveNames.value,\r\n      activeNames: this.activeNames.value,\r\n      prevActiveNames: this.prevActiveNames.value,\r\n      p_activeNames: this.p_activeNames.value,\r\n      membersReceived: this.membersReceived.value,\r\n      deferScreenReceived: this.deferScreenReceived.value,\r\n      hostFirstSwitch: this.hostFirstSwitch.value,\r\n      micAction: this.micAction.value,\r\n      screenAction: this.screenAction.value,\r\n      chatAction: this.chatAction.value,\r\n      audioRequestState: this.audioRequestState.value,\r\n      screenRequestState: this.screenRequestState.value,\r\n      chatRequestState: this.chatRequestState.value,\r\n      audioRequestTime: this.audioRequestTime.value,\r\n      screenRequestTime: this.screenRequestTime.value,\r\n      chatRequestTime: this.chatRequestTime.value,\r\n      updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\r\n      oldSoundIds: this.oldSoundIds.value,\r\n      hostLabel: this.hostLabel.value,\r\n      mainScreenFilled: this.mainScreenFilled.value,\r\n      localStreamScreen: this.localStreamScreen.value,\r\n      screenAlreadyOn: this.screenAlreadyOn.value,\r\n      chatAlreadyOn: this.chatAlreadyOn.value,\r\n      redirectURL: this.redirectURL.value,\r\n      oldAllStreams: this.oldAllStreams.value,\r\n      adminVidID: this.adminVidID.value,\r\n      streamNames: this.streamNames.value,\r\n      non_alVideoStreams: this.non_alVideoStreams.value,\r\n      sortAudioLoudness: this.sortAudioLoudness.value,\r\n      audioDecibels: this.audioDecibels.value,\r\n      mixed_alVideoStreams: this.mixed_alVideoStreams.value,\r\n      non_alVideoStreams_muted: this.non_alVideoStreams_muted.value,\r\n      paginatedStreams: this.paginatedStreams.value,\r\n      localStreamAudio: this.localStreamAudio.value,\r\n      defAudioID: this.defAudioID.value,\r\n      userDefaultAudioInputDevice: this.userDefaultAudioInputDevice.value,\r\n      userDefaultAudioOutputDevice: this.userDefaultAudioOutputDevice.value,\r\n      prevAudioInputDevice: this.prevAudioInputDevice.value,\r\n      prevVideoInputDevice: this.prevVideoInputDevice.value,\r\n      audioPaused: this.audioPaused.value,\r\n      mainScreenPerson: this.mainScreenPerson.value,\r\n      adminOnMainScreen: this.adminOnMainScreen.value,\r\n      screenStates: this.screenStates.value,\r\n      prevScreenStates: this.prevScreenStates.value,\r\n      updateDateState: this.updateDateState.value,\r\n      lastUpdate: this.lastUpdate.value,\r\n      nForReadjustRecord: this.nForReadjustRecord.value,\r\n      fixedPageLimit: this.fixedPageLimit.value,\r\n      removeAltGrid: this.removeAltGrid.value,\r\n      nForReadjust: this.nForReadjust.value,\r\n      lastReorderTime: this.lastReorderTime.value,\r\n      reorderInterval: this.reorderInterval.value,\r\n      fastReorderInterval: this.fastReorderInterval.value,\r\n      audStreamNames: this.audStreamNames.value,\r\n      currentUserPage: this.currentUserPage.value,\r\n      mainHeightWidth: this.mainHeightWidth.value,\r\n      prevMainHeightWidth: this.prevMainHeightWidth.value,\r\n      prevDoPaginate: this.prevDoPaginate.value,\r\n      doPaginate: this.doPaginate.value,\r\n      shareEnded: this.shareEnded.value,\r\n      lStreams: this.lStreams.value,\r\n      chatRefStreams: this.chatRefStreams.value,\r\n      controlHeight: this.controlHeight.value,\r\n      isWideScreen: this.isWideScreen.value,\r\n      isMediumScreen: this.isMediumScreen.value,\r\n      isSmallScreen: this.isSmallScreen.value,\r\n      addGrid: this.addGrid.value,\r\n      addAltGrid: this.addAltGrid.value,\r\n      gridRows: this.gridRows.value,\r\n      gridCols: this.gridCols.value,\r\n      altGridRows: this.altGridRows.value,\r\n      altGridCols: this.altGridCols.value,\r\n      numberPages: this.numberPages.value,\r\n      currentStreams: this.currentStreams.value,\r\n      showMiniView: this.showMiniView.value,\r\n      nStream: this.nStream.value,\r\n      defer_receive: this.defer_receive.value,\r\n      allAudioStreams: this.allAudioStreams.value,\r\n      screenProducer: this.screenProducer.value,\r\n      remoteScreenStream: this.remoteScreenStream.value,\r\n      gotAllVids: this.gotAllVids.value,\r\n      paginationHeightWidth: this.paginationHeightWidth.value,\r\n      paginationDirection: this.paginationDirection.value,\r\n      gridSizes: this.gridSizes.value,\r\n      screenForceFullDisplay: this.screenForceFullDisplay.value,\r\n      mainGridStream: this.mainGridStream.value,\r\n      otherGridStreams: this.otherGridStreams.value,\r\n      audioOnlyStreams: this.audioOnlyStreams.value,\r\n      videoInputs: this.videoInputs.value,\r\n      audioInputs: this.audioInputs.value,\r\n      meetingProgressTime: this.meetingProgressTime.value,\r\n      meetingElapsedTime: this.meetingElapsedTime.value,\r\n\r\n      ref_participants: this.ref_participants.value,\r\n\r\n      messages: this.messages.value,\r\n      startDirectMessage: this.startDirectMessage.value,\r\n      directMessageDetails: this.directMessageDetails.value,\r\n      coHost: this.coHost.value,\r\n      coHostResponsibility: this.coHostResponsibility.value,\r\n\r\n      // Event settings\r\n      audioSetting: this.audioSetting.value,\r\n      videoSetting: this.videoSetting.value,\r\n      screenshareSetting: this.screenshareSetting.value,\r\n      chatSetting: this.chatSetting.value,\r\n\r\n      // Display settings\r\n      autoWave: this.autoWave.value,\r\n      forceFullDisplay: this.forceFullDisplay.value,\r\n      prevForceFullDisplay: this.prevForceFullDisplay.value,\r\n      prevMeetingDisplayType: this.prevMeetingDisplayType.value,\r\n\r\n      // Waiting room\r\n      waitingRoomFilter: this.waitingRoomFilter.value,\r\n      waitingRoomList: this.waitingRoomList.value,\r\n      waitingRoomCounter: this.waitingRoomCounter.value,\r\n      filteredWaitingRoomList: this.filteredWaitingRoomList.value,\r\n\r\n      // Requests\r\n      requestFilter: this.requestFilter.value,\r\n      requestList: this.requestList.value,\r\n      requestCounter: this.requestCounter.value,\r\n      filteredRequestList: this.filteredRequestList.value,\r\n\r\n      // Total requests and waiting room\r\n      totalReqWait: this.totalReqWait.value,\r\n\r\n      // Alerts\r\n      alertVisible: this.alertVisible.value,\r\n      alertMessage: this.alertMessage.value,\r\n      alertType: this.alertType.value,\r\n      alertDuration: this.alertDuration.value,\r\n\r\n      // Progress Timer\r\n      progressTimerVisible: this.progressTimerVisible.value,\r\n      progressTimerValue: this.progressTimerValue.value,\r\n\r\n      // Menu modals\r\n      isMenuModalVisible: this.isMenuModalVisible.value,\r\n      isRecordingModalVisible: this.isRecordingModalVisible.value,\r\n      isSettingsModalVisible: this.isSettingsModalVisible.value,\r\n      isRequestsModalVisible: this.isRequestsModalVisible.value,\r\n      isWaitingModalVisible: this.isWaitingModalVisible.value,\r\n      isCoHostModalVisible: this.isCoHostModalVisible.value,\r\n      isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\r\n      isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\r\n\r\n      // Other Modals\r\n      isParticipantsModalVisible: this.isParticipantsModalVisible.value,\r\n      isMessagesModalVisible: this.isMessagesModalVisible.value,\r\n      isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\r\n      isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\r\n      isLoadingModalVisible: this.isLoadingModalVisible.value,\r\n\r\n      // Recording Options\r\n      recordingMediaOptions: this.recordingMediaOptions.value,\r\n      recordingAudioOptions: this.recordingAudioOptions.value,\r\n      recordingVideoOptions: this.recordingVideoOptions.value,\r\n      recordingVideoType: this.recordingVideoType.value,\r\n      recordingVideoOptimized: this.recordingVideoOptimized.value,\r\n      recordingDisplayType: this.recordingDisplayType.value,\r\n      recordingAddHLS: this.recordingAddHLS.value,\r\n      recordingAddText: this.recordingAddText.value,\r\n      recordingCustomText: this.recordingCustomText.value,\r\n      recordingCustomTextPosition: this.recordingCustomTextPosition.value,\r\n      recordingCustomTextColor: this.recordingCustomTextColor.value,\r\n      recordingNameTags: this.recordingNameTags.value,\r\n      recordingBackgroundColor: this.recordingBackgroundColor.value,\r\n      recordingNameTagsColor: this.recordingNameTagsColor.value,\r\n      recordingOrientationVideo: this.recordingOrientationVideo.value,\r\n      clearedToResume: this.clearedToResume.value,\r\n      clearedToRecord: this.clearedToRecord.value,\r\n      recordState: this.recordState.value,\r\n      showRecordButtons: this.showRecordButtons.value,\r\n      recordingProgressTime: this.recordingProgressTime.value,\r\n      audioSwitching: this.audioSwitching.value,\r\n      videoSwitching: this.videoSwitching.value,\r\n\r\n      // Media states\r\n      videoAlreadyOn: this.videoAlreadyOn.value,\r\n      audioAlreadyOn: this.audioAlreadyOn.value,\r\n      componentSizes: this.componentSizes.value,\r\n\r\n      // Permissions\r\n      hasCameraPermission: this.hasCameraPermission.value,\r\n      hasAudioPermission: this.hasAudioPermission.value,\r\n\r\n      // Transports\r\n      transportCreated: this.transportCreated.value,\r\n      localTransportCreated: this.localTransportCreated.value,\r\n      transportCreatedVideo: this.transportCreatedVideo.value,\r\n      transportCreatedAudio: this.transportCreatedAudio.value,\r\n      transportCreatedScreen: this.transportCreatedScreen.value,\r\n      producerTransport: this.producerTransport.value,\r\n      localProducerTransport: this.localProducerTransport.value,\r\n      videoProducer: this.videoProducer.value,\r\n      localVideoProducer: this.localVideoProducer.value,\r\n      params: this.params.value,\r\n      videoParams: this.videoParams.value,\r\n      audioParams: this.audioParams.value,\r\n      audioProducer: this.audioProducer.value,\r\n      audioLevel: this.audioLevel.value,\r\n      localAudioProducer: this.localAudioProducer.value,\r\n      consumerTransports: this.consumerTransports.value,\r\n      consumingTransports: this.consumingTransports.value,\r\n\r\n      // Polls\r\n      polls: this.polls.value,\r\n      poll: this.poll.value,\r\n      isPollModalVisible: this.isPollModalVisible.value,\r\n\r\n      // Background\r\n      customImage: this.customImage.value,\r\n      selectedImage: this.selectedImage.value,\r\n      segmentVideo: this.segmentVideo.value,\r\n      selfieSegmentation: this.selfieSegmentation.value,\r\n      pauseSegmentation: this.pauseSegmentation.value,\r\n      processedStream: this.processedStream.value,\r\n      keepBackground: this.keepBackground.value,\r\n      backgroundHasChanged: this.backgroundHasChanged.value,\r\n      virtualStream: this.virtualStream.value,\r\n      mainCanvas: this.mainCanvas.value,\r\n      prevKeepBackground: this.prevKeepBackground.value,\r\n      appliedBackground: this.appliedBackground.value,\r\n      isBackgroundModalVisible: this.isBackgroundModalVisible.value,\r\n      autoClickBackground: this.autoClickBackground.value,\r\n\r\n      // Breakout rooms\r\n      breakoutRooms: this.breakoutRooms.value,\r\n      currentRoomIndex: this.currentRoomIndex.value,\r\n      canStartBreakout: this.canStartBreakout.value,\r\n      breakOutRoomStarted: this.breakOutRoomStarted.value,\r\n      breakOutRoomEnded: this.breakOutRoomEnded.value,\r\n      hostNewRoom: this.hostNewRoom.value,\r\n      limitedBreakRoom: this.limitedBreakRoom.value,\r\n      mainRoomsLength: this.mainRoomsLength.value,\r\n      memberRoom: this.memberRoom.value,\r\n      isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\r\n\r\n      // Whiteboard\r\n      whiteboardUsers: this.whiteboardUsers.value,\r\n      currentWhiteboardIndex: this.currentWhiteboardIndex.value,\r\n      canStartWhiteboard: this.canStartWhiteboard.value,\r\n      whiteboardStarted: this.whiteboardStarted.value,\r\n      whiteboardEnded: this.whiteboardEnded.value,\r\n      whiteboardLimit: this.whiteboardLimit.value,\r\n      isWhiteboardModalVisible: this.isWhiteboardModalVisible.value,\r\n      isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\r\n      shapes: this.shapes.value,\r\n      useImageBackground: this.useImageBackground.value,\r\n      redoStack: this.redoStack.value,\r\n      undoStack: this.undoStack.value,\r\n      canvasStream: this.canvasStream.value,\r\n      canvasWhiteboard: this.canvasWhiteboard.value,\r\n\r\n      // Screenboard\r\n      canvasScreenboard: this.canvasScreenboard.value,\r\n      processedScreenStream: this.processedScreenStream.value,\r\n      annotateScreenStream: this.annotateScreenStream.value,\r\n      mainScreenCanvas: this.mainScreenCanvas.value,\r\n      isScreenboardModalVisible: this.isScreenboardModalVisible.value,\r\n\r\n      validated: this.validated.value,\r\n      device: this.device.value,\r\n      socket: this.socket.value,\r\n      localSocket: this.localSocket!.value,\r\n      checkMediaPermission: false,\r\n      onWeb: true,\r\n\r\n      // Update functions\r\n      updateRoomName: this.updateRoomName.bind(this),\r\n      updateMember: this.updateMember.bind(this),\r\n      updateAdminPasscode: this.updateAdminPasscode.bind(this),\r\n      updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\r\n      updateYouAreHost: this.updateYouAreHost.bind(this),\r\n      updateIslevel: this.updateIslevel.bind(this),\r\n      updateCoHost: this.updateCoHost.bind(this),\r\n      updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\r\n      updateConfirmedToRecord: this.updateConfirmedToRecord.bind(this),\r\n      updateMeetingDisplayType: this.updateMeetingDisplayType.bind(this),\r\n      updateMeetingVideoOptimized: this.updateMeetingVideoOptimized.bind(this),\r\n      updateEventType: this.updateEventType.bind(this),\r\n      updateParticipants: this.updateParticipants.bind(this),\r\n      updateParticipantsCounter: this.updateParticipantsCounter.bind(this),\r\n      updateParticipantsFilter: this.updateParticipantsFilter.bind(this),\r\n\r\n      // More update functions for media details\r\n      updateConsume_sockets: this.updateConsume_sockets.bind(this),\r\n      updateRtpCapabilities: this.updateRtpCapabilities.bind(this),\r\n      updateRoomRecvIPs: this.updateRoomRecvIPs.bind(this),\r\n      updateMeetingRoomParams: this.updateMeetingRoomParams.bind(this),\r\n      updateItemPageLimit: this.updateItemPageLimit.bind(this),\r\n      updateAudioOnlyRoom: this.updateAudioOnlyRoom.bind(this),\r\n      updateAddForBasic: this.updateAddForBasic.bind(this),\r\n      updateScreenPageLimit: this.updateScreenPageLimit.bind(this),\r\n      updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\r\n      updateShared: this.updateShared.bind(this),\r\n      updateTargetOrientation: this.updateTargetOrientation.bind(this),\r\n      updateTargetResolution: this.updateTargetResolution.bind(this),\r\n      updateTargetResolutionHost: this.updateTargetResolutionHost.bind(this),\r\n      updateVidCons: this.updateVidCons.bind(this),\r\n      updateFrameRate: this.updateFrameRate.bind(this),\r\n      updateHParams: this.updateHParams.bind(this),\r\n      updateVParams: this.updateVParams.bind(this),\r\n      updateScreenParams: this.updateScreenParams.bind(this),\r\n      updateAParams: this.updateAParams.bind(this),\r\n\r\n      // More update functions for recording details\r\n      updateRecordingAudioPausesLimit: this.updateRecordingAudioPausesLimit.bind(this),\r\n      updateRecordingAudioPausesCount: this.updateRecordingAudioPausesCount.bind(this),\r\n      updateRecordingAudioSupport: this.updateRecordingAudioSupport.bind(this),\r\n      updateRecordingAudioPeopleLimit: this.updateRecordingAudioPeopleLimit.bind(this),\r\n      updateRecordingAudioParticipantsTimeLimit:\r\n        this.updateRecordingAudioParticipantsTimeLimit.bind(this),\r\n      updateRecordingVideoPausesCount: this.updateRecordingVideoPausesCount.bind(this),\r\n      updateRecordingVideoPausesLimit: this.updateRecordingVideoPausesLimit.bind(this),\r\n      updateRecordingVideoSupport: this.updateRecordingVideoSupport.bind(this),\r\n      updateRecordingVideoPeopleLimit: this.updateRecordingVideoPeopleLimit.bind(this),\r\n      updateRecordingVideoParticipantsTimeLimit:\r\n        this.updateRecordingVideoParticipantsTimeLimit.bind(this),\r\n      updateRecordingAllParticipantsSupport: this.updateRecordingAllParticipantsSupport.bind(this),\r\n      updateRecordingVideoParticipantsSupport:\r\n        this.updateRecordingVideoParticipantsSupport.bind(this),\r\n      updateRecordingAllParticipantsFullRoomSupport:\r\n        this.updateRecordingAllParticipantsFullRoomSupport.bind(this),\r\n      updateRecordingVideoParticipantsFullRoomSupport:\r\n        this.updateRecordingVideoParticipantsFullRoomSupport.bind(this),\r\n      updateRecordingPreferredOrientation: this.updateRecordingPreferredOrientation.bind(this),\r\n      updateRecordingSupportForOtherOrientation:\r\n        this.updateRecordingSupportForOtherOrientation.bind(this),\r\n      updateRecordingMultiFormatsSupport: this.updateRecordingMultiFormatsSupport.bind(this),\r\n\r\n      updateUserRecordingParams: this.updateUserRecordingParams.bind(this),\r\n      updateCanRecord: this.updateCanRecord.bind(this),\r\n      updateStartReport: this.updateStartReport.bind(this),\r\n      updateEndReport: this.updateEndReport.bind(this),\r\n      updateRecordTimerInterval: this.updateRecordTimerInterval.bind(this),\r\n      updateRecordStartTime: this.updateRecordStartTime.bind(this),\r\n      updateRecordElapsedTime: this.updateRecordElapsedTime.bind(this),\r\n      updateIsTimerRunning: this.updateIsTimerRunning.bind(this),\r\n      updateCanPauseResume: this.updateCanPauseResume.bind(this),\r\n      updateRecordChangeSeconds: this.updateRecordChangeSeconds.bind(this),\r\n      updatePauseLimit: this.updatePauseLimit.bind(this),\r\n      updatePauseRecordCount: this.updatePauseRecordCount.bind(this),\r\n      updateCanLaunchRecord: this.updateCanLaunchRecord.bind(this),\r\n      updateStopLaunchRecord: this.updateStopLaunchRecord.bind(this),\r\n\r\n      updateParticipantsAll: this.updateParticipantsAll.bind(this),\r\n\r\n      updateFirstAll: this.updateFirstAll.bind(this),\r\n      updateUpdateMainWindow: this.updateUpdateMainWindow.bind(this),\r\n      updateFirst_round: this.updateFirst_round.bind(this),\r\n      updateLandScaped: this.updateLandScaped.bind(this),\r\n      updateLock_screen: this.updateLock_screen.bind(this),\r\n      updateScreenId: this.updateScreenId.bind(this),\r\n      updateAllVideoStreams: this.updateAllVideoStreams.bind(this),\r\n      updateNewLimitedStreams: this.updateNewLimitedStreams.bind(this),\r\n      updateNewLimitedStreamsIDs: this.updateNewLimitedStreamsIDs.bind(this),\r\n      updateActiveSounds: this.updateActiveSounds.bind(this),\r\n      updateScreenShareIDStream: this.updateScreenShareIDStream.bind(this),\r\n      updateScreenShareNameStream: this.updateScreenShareNameStream.bind(this),\r\n      updateAdminIDStream: this.updateAdminIDStream.bind(this),\r\n      updateAdminNameStream: this.updateAdminNameStream.bind(this),\r\n      updateYouYouStream: this.updateYouYouStream.bind(this),\r\n      updateYouYouStreamIDs: this.updateYouYouStreamIDs.bind(this),\r\n      updateLocalStream: this.updateLocalStream.bind(this),\r\n      updateRecordStarted: this.updateRecordStarted.bind(this),\r\n      updateRecordResumed: this.updateRecordResumed.bind(this),\r\n      updateRecordPaused: this.updateRecordPaused.bind(this),\r\n      updateRecordStopped: this.updateRecordStopped.bind(this),\r\n      updateAdminRestrictSetting: this.updateAdminRestrictSetting.bind(this),\r\n      updateVideoRequestState: this.updateVideoRequestState.bind(this),\r\n      updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\r\n      updateVideoAction: this.updateVideoAction.bind(this),\r\n      updateLocalStreamVideo: this.updateLocalStreamVideo.bind(this),\r\n      updateUserDefaultVideoInputDevice: this.updateUserDefaultVideoInputDevice.bind(this),\r\n      updateCurrentFacingMode: this.updateCurrentFacingMode.bind(this),\r\n      updatePrevFacingMode: this.updatePrevFacingMode.bind(this),\r\n      updateDefVideoID: this.updateDefVideoID.bind(this),\r\n      updateAllowed: this.updateAllowed.bind(this),\r\n      updateDispActiveNames: this.updateDispActiveNames.bind(this),\r\n      updateP_dispActiveNames: this.updateP_dispActiveNames.bind(this),\r\n      updateActiveNames: this.updateActiveNames.bind(this),\r\n      updatePrevActiveNames: this.updatePrevActiveNames.bind(this),\r\n      updateP_activeNames: this.updateP_activeNames.bind(this),\r\n      updateMembersReceived: this.updateMembersReceived.bind(this),\r\n      updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\r\n      updateHostFirstSwitch: this.updateHostFirstSwitch.bind(this),\r\n      updateMicAction: this.updateMicAction.bind(this),\r\n      updateScreenAction: this.updateScreenAction.bind(this),\r\n      updateChatAction: this.updateChatAction.bind(this),\r\n      updateAudioRequestState: this.updateAudioRequestState.bind(this),\r\n      updateScreenRequestState: this.updateScreenRequestState.bind(this),\r\n      updateChatRequestState: this.updateChatRequestState.bind(this),\r\n      updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\r\n      updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\r\n      updateChatRequestTime: this.updateChatRequestTime.bind(this),\r\n      updateOldSoundIds: this.updateOldSoundIds.bind(this),\r\n      updateHostLabel: this.updateHostLabel.bind(this),\r\n      updateMainScreenFilled: this.updateMainScreenFilled.bind(this),\r\n      updateLocalStreamScreen: this.updateLocalStreamScreen.bind(this),\r\n      updateScreenAlreadyOn: this.updateScreenAlreadyOn.bind(this),\r\n      updateChatAlreadyOn: this.updateChatAlreadyOn.bind(this),\r\n      updateRedirectURL: this.updateRedirectURL.bind(this),\r\n      updateOldAllStreams: this.updateOldAllStreams.bind(this),\r\n      updateAdminVidID: this.updateAdminVidID.bind(this),\r\n      updateStreamNames: this.updateStreamNames.bind(this),\r\n      updateNon_alVideoStreams: this.updateNon_alVideoStreams.bind(this),\r\n      updateSortAudioLoudness: this.updateSortAudioLoudness.bind(this),\r\n      updateAudioDecibels: this.updateAudioDecibels.bind(this),\r\n      updateMixed_alVideoStreams: this.updateMixed_alVideoStreams.bind(this),\r\n      updateNon_alVideoStreams_muted: this.updateNon_alVideoStreams_muted.bind(this),\r\n      updatePaginatedStreams: this.updatePaginatedStreams.bind(this),\r\n      updateLocalStreamAudio: this.updateLocalStreamAudio.bind(this),\r\n      updateDefAudioID: this.updateDefAudioID.bind(this),\r\n      updateUserDefaultAudioInputDevice: this.updateUserDefaultAudioInputDevice.bind(this),\r\n      updateUserDefaultAudioOutputDevice: this.updateUserDefaultAudioOutputDevice.bind(this),\r\n      updatePrevAudioInputDevice: this.updatePrevAudioInputDevice.bind(this),\r\n      updatePrevVideoInputDevice: this.updatePrevVideoInputDevice.bind(this),\r\n      updateAudioPaused: this.updateAudioPaused.bind(this),\r\n      updateMainScreenPerson: this.updateMainScreenPerson.bind(this),\r\n      updateAdminOnMainScreen: this.updateAdminOnMainScreen.bind(this),\r\n      updateScreenStates: this.updateScreenStates.bind(this),\r\n      updatePrevScreenStates: this.updatePrevScreenStates.bind(this),\r\n      updateUpdateDateState: this.updateUpdateDateState.bind(this),\r\n      updateLastUpdate: this.updateLastUpdate.bind(this),\r\n      updateNForReadjustRecord: this.updateNForReadjustRecord.bind(this),\r\n      updateFixedPageLimit: this.updateFixedPageLimit.bind(this),\r\n      updateRemoveAltGrid: this.updateRemoveAltGrid.bind(this),\r\n      updateNForReadjust: this.updateNForReadjust.bind(this),\r\n      updateLastReorderTime: this.updateLastReorderTime.bind(this),\r\n      updateAudStreamNames: this.updateAudStreamNames.bind(this),\r\n      updateCurrentUserPage: this.updateCurrentUserPage.bind(this),\r\n      updateMainHeightWidth: this.updateMainHeightWidth.bind(this),\r\n      updatePrevMainHeightWidth: this.updatePrevMainHeightWidth.bind(this),\r\n      updatePrevDoPaginate: this.updatePrevDoPaginate.bind(this),\r\n      updateDoPaginate: this.updateDoPaginate.bind(this),\r\n      updateShareEnded: this.updateShareEnded.bind(this),\r\n      updateLStreams: this.updateLStreams.bind(this),\r\n      updateChatRefStreams: this.updateChatRefStreams.bind(this),\r\n      updateControlHeight: this.updateControlHeight.bind(this),\r\n      updateIsWideScreen: this.updateIsWideScreen.bind(this),\r\n      updateIsMediumScreen: this.updateIsMediumScreen.bind(this),\r\n      updateIsSmallScreen: this.updateIsSmallScreen.bind(this),\r\n      updateAddGrid: this.updateAddGrid.bind(this),\r\n      updateAddAltGrid: this.updateAddAltGrid.bind(this),\r\n      updateGridRows: this.updateGridRows.bind(this),\r\n      updateGridCols: this.updateGridCols.bind(this),\r\n      updateAltGridRows: this.updateAltGridRows.bind(this),\r\n      updateAltGridCols: this.updateAltGridCols.bind(this),\r\n      updateNumberPages: this.updateNumberPages.bind(this),\r\n      updateCurrentStreams: this.updateCurrentStreams.bind(this),\r\n      updateShowMiniView: this.updateShowMiniView.bind(this),\r\n      updateNStream: this.updateNStream.bind(this),\r\n      updateDefer_receive: this.updateDefer_receive.bind(this),\r\n      updateAllAudioStreams: this.updateAllAudioStreams.bind(this),\r\n      updateRemoteScreenStream: this.updateRemoteScreenStream.bind(this),\r\n      updateScreenProducer: this.updateScreenProducer.bind(this),\r\n      updateGotAllVids: this.updateGotAllVids.bind(this),\r\n      updatePaginationHeightWidth: this.updatePaginationHeightWidth.bind(this),\r\n      updatePaginationDirection: this.updatePaginationDirection.bind(this),\r\n      updateGridSizes: this.updateGridSizes.bind(this),\r\n      updateScreenForceFullDisplay: this.updateScreenForceFullDisplay.bind(this),\r\n      updateMainGridStream: this.updateMainGridStream.bind(this),\r\n      updateOtherGridStreams: this.updateOtherGridStreams.bind(this),\r\n      updateAudioOnlyStreams: this.updateAudioOnlyStreams.bind(this),\r\n      updateVideoInputs: this.updateVideoInputs.bind(this),\r\n      updateAudioInputs: this.updateAudioInputs.bind(this),\r\n      updateMeetingProgressTime: this.updateMeetingProgressTime.bind(this),\r\n      updateMeetingElapsedTime: this.updateMeetingElapsedTime.bind(this),\r\n      updateRef_participants: this.updateRef_participants.bind(this),\r\n\r\n      updateMessages: this.updateMessages.bind(this),\r\n      updateStartDirectMessage: this.updateStartDirectMessage.bind(this),\r\n      updateDirectMessageDetails: this.updateDirectMessageDetails.bind(this),\r\n      updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\r\n\r\n      // Event settings\r\n      updateAudioSetting: this.updateAudioSetting.bind(this),\r\n      updateVideoSetting: this.updateVideoSetting.bind(this),\r\n      updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\r\n      updateChatSetting: this.updateChatSetting.bind(this),\r\n\r\n      // Display settings\r\n      updateAutoWave: this.updateAutoWave.bind(this),\r\n      updateForceFullDisplay: this.updateForceFullDisplay.bind(this),\r\n      updatePrevForceFullDisplay: this.updatePrevForceFullDisplay.bind(this),\r\n      updatePrevMeetingDisplayType: this.updatePrevMeetingDisplayType.bind(this),\r\n\r\n      // Waiting room\r\n      updateWaitingRoomFilter: this.updateWaitingRoomFilter.bind(this),\r\n      updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\r\n      updateWaitingRoomCounter: this.updateWaitingRoomCounter.bind(this),\r\n\r\n      // Requests\r\n      updateRequestFilter: this.updateRequestFilter.bind(this),\r\n      updateRequestList: this.updateRequestList.bind(this),\r\n      updateRequestCounter: this.updateRequestCounter.bind(this),\r\n\r\n      // Total requests and waiting room\r\n      updateTotalReqWait: this.updateTotalReqWait.bind(this),\r\n\r\n      // Menu modals\r\n      updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\r\n      updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\r\n      updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\r\n      updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\r\n      updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\r\n      updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\r\n      updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\r\n      updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\r\n\r\n      // Other modals\r\n      updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\r\n      updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\r\n      updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\r\n      updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\r\n      updateIsLoadingModalVisible: this.updateIsLoadingModalVisible.bind(this),\r\n\r\n      // Recording Options\r\n      updateRecordingMediaOptions: this.updateRecordingMediaOptions.bind(this),\r\n      updateRecordingAudioOptions: this.updateRecordingAudioOptions.bind(this),\r\n      updateRecordingVideoOptions: this.updateRecordingVideoOptions.bind(this),\r\n      updateRecordingVideoType: this.updateRecordingVideoType.bind(this),\r\n      updateRecordingVideoOptimized: this.updateRecordingVideoOptimized.bind(this),\r\n      updateRecordingDisplayType: this.updateRecordingDisplayType.bind(this),\r\n      updateRecordingAddHLS: this.updateRecordingAddHLS.bind(this),\r\n      updateRecordingAddText: this.updateRecordingAddText.bind(this),\r\n      updateRecordingCustomText: this.updateRecordingCustomText.bind(this),\r\n      updateRecordingCustomTextPosition: this.updateRecordingCustomTextPosition.bind(this),\r\n      updateRecordingCustomTextColor: this.updateRecordingCustomTextColor.bind(this),\r\n      updateRecordingNameTags: this.updateRecordingNameTags.bind(this),\r\n      updateRecordingBackgroundColor: this.updateRecordingBackgroundColor.bind(this),\r\n      updateRecordingNameTagsColor: this.updateRecordingNameTagsColor.bind(this),\r\n      updateRecordingOrientationVideo: this.updateRecordingOrientationVideo.bind(this),\r\n      updateClearedToResume: this.updateClearedToResume.bind(this),\r\n      updateClearedToRecord: this.updateClearedToRecord.bind(this),\r\n      updateRecordState: this.updateRecordState.bind(this),\r\n      updateShowRecordButtons: this.updateShowRecordButtons.bind(this),\r\n      updateRecordingProgressTime: this.updateRecordingProgressTime.bind(this),\r\n      updateAudioSwitching: this.updateAudioSwitching.bind(this),\r\n      updateVideoSwitching: this.updateVideoSwitching.bind(this),\r\n\r\n      // Media states\r\n      updateVideoAlreadyOn: this.updateVideoAlreadyOn.bind(this),\r\n      updateAudioAlreadyOn: this.updateAudioAlreadyOn.bind(this),\r\n      updateComponentSizes: this.updateComponentSizes.bind(this),\r\n\r\n      // Permissions\r\n      updateHasCameraPermission: this.updateHasCameraPermission.bind(this),\r\n      updateHasAudioPermission: this.updateHasAudioPermission.bind(this),\r\n\r\n      // Transports\r\n      updateTransportCreated: this.updateTransportCreated.bind(this),\r\n      updateLocalTransportCreated: this.updateLocalTransportCreated.bind(this),\r\n      updateTransportCreatedVideo: this.updateTransportCreatedVideo.bind(this),\r\n      updateTransportCreatedAudio: this.updateTransportCreatedAudio.bind(this),\r\n      updateTransportCreatedScreen: this.updateTransportCreatedScreen.bind(this),\r\n      updateProducerTransport: this.updateProducerTransport.bind(this),\r\n      updateLocalProducerTransport: this.updateLocalProducerTransport.bind(this),\r\n      updateVideoProducer: this.updateVideoProducer.bind(this),\r\n      updateLocalVideoProducer: this.updateLocalVideoProducer.bind(this),\r\n      updateParams: this.updateParams.bind(this),\r\n      updateVideoParams: this.updateVideoParams.bind(this),\r\n      updateAudioParams: this.updateAudioParams.bind(this),\r\n      updateAudioProducer: this.updateAudioProducer.bind(this),\r\n      updateAudioLevel: this.updateAudioLevel.bind(this),\r\n      updateLocalAudioProducer: this.updateLocalAudioProducer.bind(this),\r\n      updateConsumerTransports: this.updateConsumerTransports.bind(this),\r\n      updateConsumingTransports: this.updateConsumingTransports.bind(this),\r\n\r\n      // Polls\r\n      updatePolls: this.updatePolls.bind(this),\r\n      updatePoll: this.updatePoll.bind(this),\r\n      updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\r\n\r\n      // Background\r\n      updateCustomImage: this.updateCustomImage.bind(this),\r\n      updateSelectedImage: this.updateSelectedImage.bind(this),\r\n      updateSegmentVideo: this.updateSegmentVideo.bind(this),\r\n      updateSelfieSegmentation: this.updateSelfieSegmentation.bind(this),\r\n      updatePauseSegmentation: this.updatePauseSegmentation.bind(this),\r\n      updateProcessedStream: this.updateProcessedStream.bind(this),\r\n      updateKeepBackground: this.updateKeepBackground.bind(this),\r\n      updateBackgroundHasChanged: this.updateBackgroundHasChanged.bind(this),\r\n      updateVirtualStream: this.updateVirtualStream.bind(this),\r\n      updateMainCanvas: this.updateMainCanvas.bind(this),\r\n      updatePrevKeepBackground: this.updatePrevKeepBackground.bind(this),\r\n      updateAppliedBackground: this.updateAppliedBackground.bind(this),\r\n      updateIsBackgroundModalVisible: this.updateIsBackgroundModalVisible.bind(this),\r\n      updateAutoClickBackground: this.updateAutoClickBackground.bind(this),\r\n\r\n      // Breakout rooms\r\n      updateBreakoutRooms: this.updateBreakoutRooms.bind(this),\r\n      updateCurrentRoomIndex: this.updateCurrentRoomIndex.bind(this),\r\n      updateCanStartBreakout: this.updateCanStartBreakout.bind(this),\r\n      updateBreakOutRoomStarted: this.updateBreakOutRoomStarted.bind(this),\r\n      updateBreakOutRoomEnded: this.updateBreakOutRoomEnded.bind(this),\r\n      updateHostNewRoom: this.updateHostNewRoom.bind(this),\r\n      updateLimitedBreakRoom: this.updateLimitedBreakRoom.bind(this),\r\n      updateMainRoomsLength: this.updateMainRoomsLength.bind(this),\r\n      updateMemberRoom: this.updateMemberRoom.bind(this),\r\n      updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\r\n\r\n      // Whiteboard\r\n      updateWhiteboardUsers: this.updateWhiteboardUsers.bind(this),\r\n      updateCurrentWhiteboardIndex: this.updateCurrentWhiteboardIndex.bind(this),\r\n      updateCanStartWhiteboard: this.updateCanStartWhiteboard.bind(this),\r\n      updateWhiteboardStarted: this.updateWhiteboardStarted.bind(this),\r\n      updateWhiteboardEnded: this.updateWhiteboardEnded.bind(this),\r\n      updateWhiteboardLimit: this.updateWhiteboardLimit.bind(this),\r\n      updateIsWhiteboardModalVisible: this.updateIsWhiteboardModalVisible.bind(this),\r\n      updateIsConfigureWhiteboardModalVisible:\r\n        this.updateIsConfigureWhiteboardModalVisible.bind(this),\r\n      updateShapes: this.updateShapes.bind(this),\r\n      updateUseImageBackground: this.updateUseImageBackground.bind(this),\r\n      updateRedoStack: this.updateRedoStack.bind(this),\r\n      updateUndoStack: this.updateUndoStack.bind(this),\r\n      updateCanvasStream: this.updateCanvasStream.bind(this),\r\n      updateCanvasWhiteboard: this.updateCanvasWhiteboard.bind(this),\r\n\r\n      // Screenboard\r\n      updateCanvasScreenboard: this.updateCanvasScreenboard.bind(this),\r\n      updateProcessedScreenStream: this.updateProcessedScreenStream.bind(this),\r\n      updateAnnotateScreenStream: this.updateAnnotateScreenStream.bind(this),\r\n      updateMainScreenCanvas: this.updateMainScreenCanvas.bind(this),\r\n      updateIsScreenboardModalVisible: this.updateIsScreenboardModalVisible.bind(this),\r\n\r\n      // Other functions\r\n      checkOrientation: this.checkOrientation.bind(this),\r\n\r\n      updateDevice: this.updateDevice.bind(this),\r\n      updateSocket: this.updateSocket.bind(this),\r\n      updateLocalSocket: this.updateLocalSocket.bind(this),\r\n      updateValidated: this.updateValidated.bind(this),\r\n\r\n      showAlert: this.showAlert.bind(this),\r\n      getUpdatedAllParams: () => {\r\n\r\n        try {\r\n          if (this.sourceParameters !== null) {\r\n            this.sourceParameters = {\r\n              ...this.getAllParams(),\r\n              ...this.mediaSFUFunctions(),\r\n            };\r\n            if (this.updateSourceParameters) {\r\n              this.updateSourceParameters(this.sourceParameters);\r\n            }\r\n          }\r\n        } catch {\r\n          console.log('error updateSourceParameters');\r\n        }\r\n\r\n        return {\r\n          ...this.getAllParams(),\r\n          ...this.mediaSFUFunctions(),\r\n        };\r\n      },\r\n    };\r\n  }\r\n\r\n  mediaSFUParameters = {\r\n    ...this.getAllParams(),\r\n    ...this.mediaSFUFunctions(),\r\n  };\r\n\r\n  getUpdatedAllParams = () => {\r\n    return {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n  };\r\n\r\n  PrejoinPageComponent: any = {\r\n    component: this.PrejoinPage,\r\n    injector: null,\r\n  };\r\n\r\n  updatePrejoinPageComponent = () => {\r\n    const PrejoinComp = {\r\n      component: this.PrejoinPage,\r\n      injector: this.createInjector({\r\n        parameters: {\r\n          showAlert:\r\n            this.showAlert ||\r\n            (() => {\r\n              console.log('showAlert not defined');\r\n            }),\r\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\r\n          connectSocket: this.socketManager.connectSocket,\r\n          connectLocalSocket: this.socketManager.connectLocalSocket,\r\n          updateSocket: this.updateSocket,\r\n          updateLocalSocket: this.updateLocalSocket,\r\n          updateValidated: this.updateValidated,\r\n          updateApiUserName: this.updateApiUserName,\r\n          updateApiToken: this.updateApiToken,\r\n          updateLink: this.updateLink,\r\n          updateRoomName: this.updateRoomName,\r\n          updateMember: this.updateMember,\r\n        },\r\n        credentials: this.credentials,\r\n        localLink: this.localLink,\r\n        connectMediaSFU: this.connectMediaSFU,\r\n        returnUI: this.returnUI,\r\n        noUIPreJoinOptions: this.noUIPreJoinOptions,\r\n        joinMediaSFURoom: this.joinMediaSFURoom,\r\n        createMediaSFURoom: this.createMediaSFURoom,\r\n      }),\r\n    };\r\n\r\n    this.PrejoinPageComponent = { ...PrejoinComp };\r\n\r\n    this.cdr.detectChanges();\r\n  };\r\n\r\n  ngOnInit() {\r\n    if (this.PrejoinPage) {\r\n      this.updatePrejoinPageComponent();\r\n    }\r\n\r\n    this.setupResizeListener();\r\n    if (this.validated) {\r\n      this.connectAndAddSocketMethods();\r\n    }\r\n\r\n    this.mainHeightWidthSubscription = this.mainHeightWidth.subscribe(() => {\r\n      this.updateMainVideoSize();\r\n    });\r\n\r\n    this.validatedSubscription = this.validated.subscribe((validated) => {\r\n      if (validated) {\r\n        this.handleValidated();\r\n      }\r\n    });\r\n    this.islevelSubscription = this.islevel.subscribe((islevel) => {\r\n      if (islevel) {\r\n        this.updateControlChatButtons();\r\n      }\r\n    });\r\n    this.coHostSubscription = combineLatest([this.coHost, this.coHostResponsibility]).subscribe(\r\n      ([coHost, coHostResponsibility]) => {\r\n        if (coHost || coHostResponsibility) {\r\n          this.updateControlChatButtons();\r\n        }\r\n      },\r\n    );\r\n\r\n    this.mediaSFUParameters = {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    window.removeEventListener('resize', this.handleResize);\r\n    window.removeEventListener('orientationchange', this.handleResize);\r\n    if (this.mainHeightWidthSubscription) {\r\n      this.mainHeightWidthSubscription.unsubscribe();\r\n    }\r\n    if (this.validatedSubscription) {\r\n      this.validatedSubscription.unsubscribe();\r\n    }\r\n    if (this.islevelSubscription) {\r\n      this.islevelSubscription.unsubscribe();\r\n    }\r\n    if (this.coHostSubscription) {\r\n      this.coHostSubscription.unsubscribe();\r\n    }\r\n    if (this.ScreenboardSubscription) {\r\n      this.ScreenboardSubscription.unsubscribe();\r\n    }\r\n    if (this.recordingSubscription) {\r\n      this.recordingSubscription.unsubscribe();\r\n    }\r\n  }\r\n\r\n  updateMainVideoSize = async () => {\r\n    if (!this.lock_screen.value && !this.shared.value) {\r\n      this.prepopulateUserMedia.prepopulateUserMedia({\r\n        name: this.hostLabel.value,\r\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n      });\r\n    } else {\r\n      if (!this.first_round.value) {\r\n        this.prepopulateUserMedia.prepopulateUserMedia({\r\n          name: this.hostLabel.value,\r\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  async connectAndAddSocketMethods() {\r\n    this.mediaSFUParameters = {\r\n      ...this.getAllParams(),\r\n      ...this.mediaSFUFunctions(),\r\n    };\r\n    const socket_ = await this.connect_Socket(this.apiUserName.value, this.apiToken.value);\r\n    if (socket_) {\r\n      this.updateSocket(socket_);\r\n    }\r\n  }\r\n\r\n  async handleValidated() {\r\n    this.updateAllVideoStreams([\r\n      { producerId: 'youyou', stream: undefined, id: 'youyou', name: 'youyou' },\r\n    ]);\r\n\r\n    this.updateStreamNames([{ id: 'youyou', name: 'youyou', producerId: '' }]);\r\n\r\n    if (this.validated.value) {\r\n\r\n      try {\r\n        if (!this.localUIMode.value) {\r\n          this.updateIsLoadingModalVisible(true);\r\n          await this.connectAndAddSocketMethods();\r\n        } else {\r\n          this.updateIsLoadingModalVisible(false);\r\n        }\r\n      } catch (error) {\r\n        console.log('error connectAndaAddSocketMethods', error);\r\n      }\r\n\r\n      this.startMeetingProgressTimer.startMeetingProgressTimer({\r\n        startTime: Date.now() / 1000,\r\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n      });\r\n\r\n      try {\r\n        if (this.sourceParameters !== null) {\r\n          this.sourceParameters = {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          };\r\n          if (this.updateSourceParameters) {\r\n            this.updateSourceParameters(this.sourceParameters);\r\n          }\r\n        }\r\n      } catch {\r\n        console.log('error updateSourceParameters');\r\n      }\r\n\r\n    }\r\n  }\r\n\r\n  @HostListener('window:resize')\r\n  @HostListener('window:orientationchange')\r\n  async handleResize() {\r\n    let fraction = 0;\r\n\r\n    if (\r\n      window.innerHeight < window.innerWidth &&\r\n      (this.eventType.value == 'webinar' || this.eventType.value == 'conference')\r\n    ) {\r\n      const currentHeight = window.innerHeight;\r\n      fraction = Number((40 / currentHeight).toFixed(3));\r\n      if (fraction != this.controlHeight.value) {\r\n        this.updateControlHeight(Number(fraction));\r\n      }\r\n    } else {\r\n      // Set default control button height for portrait mode or other event types\r\n      const currentHeight = window.innerHeight;\r\n      fraction = Number((40 / currentHeight).toFixed(3));\r\n      fraction = Number(fraction);\r\n      if (fraction != this.controlHeight.value) {\r\n        this.updateControlHeight(Number(fraction));\r\n      }\r\n    }\r\n\r\n    const dimensions = this.computeDimensionsMethod({\r\n      containerWidthFraction: 1,\r\n      containerHeightFraction: 1,\r\n      mainSize: this.mainHeightWidth.value,\r\n      doStack: true,\r\n      defaultFraction:\r\n        this.eventType.value == 'webinar' || this.eventType.value == 'conference'\r\n          ? 1 - fraction\r\n          : 1,\r\n    });\r\n\r\n    this.updateComponentSizes(dimensions);\r\n\r\n    const orientation = this.checkOrientation();\r\n    if (orientation == 'portrait') {\r\n      if (!this.isWideScreen.value) {\r\n        if (this.shareScreenStarted.value || this.shared.value) {\r\n          this.updateScreenForceFullDisplay(true);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Updates the main grid view\r\n    await this.prepopulateUserMedia.prepopulateUserMedia({\r\n      name: this.hostLabel.value,\r\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n    });\r\n    // Updates the mini grid view\r\n    await this.onScreenChanges.onScreenChanges({\r\n      changed: true,\r\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n    });\r\n  }\r\n\r\n  async disconnectAllSockets(consume_sockets: ConsumeSocket[]): Promise<void> {\r\n    for (const socket of consume_sockets) {\r\n      try {\r\n        const ip = Object.keys(socket)[0];\r\n        await socket[ip].disconnect();\r\n      } catch (error) {\r\n        console.log(`Error disconnecting socket with IP: ${Object.keys(socket)[0]}`, error);\r\n      }\r\n    }\r\n  }\r\n\r\n  async closeAndReset() {\r\n    //close and clean up all sockets, modals,... and reset all states to initial values\r\n\r\n    this.updateIsMessagesModalVisible(false);\r\n    this.updateIsParticipantsModalVisible(false);\r\n    this.updateIsWaitingModalVisible(false);\r\n    this.updateIsRequestsModalVisible(false);\r\n    this.updateIsCoHostModalVisible(false);\r\n    this.updateIsSettingsModalVisible(false);\r\n    this.updateIsDisplaySettingsModalVisible(false);\r\n    this.updateIsMediaSettingsModalVisible(false);\r\n    this.updateIsMenuModalVisible(false);\r\n    this.updateIsShareEventModalVisible(false);\r\n    this.updateIsConfirmExitModalVisible(false);\r\n    await this.disconnectAllSockets(this.consume_sockets.value);\r\n    await this.updateStatesToInitialValues();\r\n    this.updateMeetingProgressTime('00:00:00');\r\n    this.updateMeetingElapsedTime(0);\r\n    this.updateRecordingProgressTime('00:00:00');\r\n    this.updateRecordElapsedTime(0);\r\n    this.updateShowRecordButtons(false);\r\n\r\n    this.updateIsConfigureWhiteboardModalVisible(false);\r\n    this.updateIsWhiteboardModalVisible(false);\r\n    this.updateIsMenuModalVisible(false);\r\n    this.updateIsRecordingModalVisible(false);\r\n    this.updateIsPollModalVisible(false);\r\n    this.updateIsBreakoutRoomsModalVisible(false);\r\n    this.updateIsBackgroundModalVisible(false);\r\n    this.updateIsLoadingModalVisible(false);\r\n    this.updateIsConfirmHereModalVisible(false);\r\n\r\n    await sleep({ ms: 500 });\r\n    this.updateValidated(false);\r\n    //if on web, reload the page\r\n    window.location.reload();\r\n  }\r\n\r\n  computeDimensionsMethod = ({\r\n    containerWidthFraction = 1,\r\n    containerHeightFraction = 1,\r\n    mainSize,\r\n    doStack = true,\r\n    defaultFraction,\r\n  }: {\r\n    containerWidthFraction?: number;\r\n    containerHeightFraction?: number;\r\n    mainSize: number;\r\n    doStack?: boolean;\r\n    defaultFraction: number;\r\n  }): ComponentSizes => {\r\n    const parentWidth = window.innerWidth * containerWidthFraction;\r\n    const parentHeight = window.innerHeight * containerHeightFraction * defaultFraction;\r\n    let isWideScreen = parentWidth >= 768;\r\n\r\n    if (!isWideScreen && parentWidth > 1.5 * parentHeight) {\r\n      isWideScreen = true;\r\n    }\r\n\r\n    this.updateIsWideScreen(isWideScreen);\r\n\r\n    const dimensions = this.calculateDimensions({\r\n      parentWidth,\r\n      parentHeight,\r\n      isWideScreen,\r\n      mainSize,\r\n      doStack,\r\n    });\r\n    return dimensions;\r\n  };\r\n\r\n  calculateDimensions({\r\n    parentWidth,\r\n    parentHeight,\r\n    isWideScreen,\r\n    mainSize,\r\n    doStack,\r\n  }: {\r\n    parentWidth: number;\r\n    parentHeight: number;\r\n    isWideScreen: boolean;\r\n    mainSize: number;\r\n    doStack: boolean;\r\n  }): ComponentSizes {\r\n    if (doStack) {\r\n      return isWideScreen\r\n        ? {\r\n          mainHeight: Math.floor(parentHeight),\r\n          otherHeight: Math.floor(parentHeight),\r\n          mainWidth: Math.floor((mainSize / 100) * parentWidth),\r\n          otherWidth: Math.floor(((100 - mainSize) / 100) * parentWidth),\r\n        }\r\n        : {\r\n          mainHeight: Math.floor((mainSize / 100) * parentHeight),\r\n          otherHeight: Math.floor(((100 - mainSize) / 100) * parentHeight),\r\n          mainWidth: Math.floor(parentWidth),\r\n          otherWidth: Math.floor(parentWidth),\r\n        };\r\n    } else {\r\n      return {\r\n        mainHeight: Math.floor(parentHeight),\r\n        otherHeight: Math.floor(parentHeight),\r\n        mainWidth: Math.floor(parentWidth),\r\n        otherWidth: Math.floor(parentWidth),\r\n      };\r\n    }\r\n  }\r\n\r\n  handleOrientationChange() {\r\n    window.addEventListener('resize', this.handleResize.bind(this));\r\n    window.addEventListener('orientationchange', this.handleResize.bind(this));\r\n  }\r\n\r\n  setupResizeListener() {\r\n    this.handleResize();\r\n  }\r\n\r\n  orientation = window.innerHeight > window.innerWidth ? 'portrait' : 'landscape';\r\n\r\n  async joinRoom(data: {\r\n    socket: Socket;\r\n    roomName: string;\r\n    islevel: string;\r\n    member: string;\r\n    sec: string;\r\n    apiUserName: string;\r\n  }): Promise<ResponseJoinRoom | null> {\r\n    const { socket, roomName, islevel, member, sec, apiUserName } = data;\r\n\r\n    try {\r\n      const response: ResponseJoinRoom | null = await this.joinRoomClient.joinRoomClient({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n      });\r\n\r\n      return response;\r\n    } catch (error) {\r\n      console.log('Error joining room:', error);\r\n      throw new Error('Failed to join the room. Please check your connection and try again.');\r\n    }\r\n  }\r\n\r\n  async join_Room({\r\n    socket,\r\n    roomName,\r\n    islevel,\r\n    member,\r\n    sec,\r\n    apiUserName,\r\n    isLocal = false,\r\n  }: {\r\n    socket: Socket;\r\n    roomName: string;\r\n    islevel: string;\r\n    member: string;\r\n    sec: string;\r\n    apiUserName: string;\r\n    isLocal?: boolean;\r\n  }): Promise<void> {\r\n    let data: ResponseJoinRoom | null;\r\n\r\n    if (!isLocal) {\r\n      data = await this.joinRoom({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n      });\r\n    } else {\r\n      const localData: ResponseJoinLocalRoom = await this.joinLocalRoom.joinLocalRoom({\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n        parameters: {\r\n          showAlert:\r\n            this.showAlert ||\r\n            (() => {\r\n              console.log('showAlert not defined');\r\n            }),\r\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\r\n          connectSocket: this.socketManager.connectSocket,\r\n          connectLocalSocket: this.socketManager.connectLocalSocket,\r\n          updateSocket: this.updateSocket,\r\n          updateLocalSocket: this.updateLocalSocket,\r\n          updateValidated: this.updateValidated,\r\n          updateApiUserName: this.updateApiUserName,\r\n          updateApiToken: this.updateApiToken,\r\n          updateLink: this.updateLink,\r\n          updateRoomName: this.updateRoomName,\r\n          updateMember: this.updateMember,\r\n        },\r\n        checkConnect:\r\n          this.localLink.length > 0 &&\r\n          this.connectMediaSFU === true &&\r\n          !this.link.value.includes('mediasfu.com'),\r\n        localLink: this.localLink,\r\n        joinMediaSFURoom: this.joinMediaSFURoom,\r\n      });\r\n\r\n      data = await createResponseJoinRoom({ localRoom: localData });\r\n    }\r\n\r\n    const updateAndComplete = async (data: ResponseJoinRoom) => {\r\n      // Update room parameters\r\n      try {\r\n        // Check if roomRecvIPs is not empty\r\n        if (!data.roomRecvIPs || data.roomRecvIPs.length === 0) {\r\n          data.roomRecvIPs = ['none'];\r\n\r\n          if (\r\n            this.link.value !== \"\" &&\r\n            this.link.value.includes(\"mediasfu.com\") &&\r\n            !isLocal\r\n          ) {\r\n            // Community Edition Only\r\n            await this.receiveAllPipedTransports.receiveAllPipedTransports({\r\n              community: true,\r\n              nsock: this.getUpdatedAllParams().socket,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n        }\r\n\r\n\r\n        this.updateRoomParametersClient.updateRoomParametersClient({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n            data: data,\r\n          },\r\n        });\r\n\r\n        if (data.isHost) {\r\n          this.updateIslevel('2');\r\n        } else {\r\n          // Issue with isHost for local room\r\n          if (islevel !== '2') {\r\n            this.updateIslevel('1');\r\n          }\r\n        }\r\n\r\n        if (data.secureCode && data.secureCode !== '') {\r\n          this.updateAdminPasscode(data.secureCode);\r\n        }\r\n\r\n        if (data.rtpCapabilities) {\r\n          try {\r\n            const device_ = await this.createDeviceClient.createDeviceClient({\r\n              rtpCapabilities: data.rtpCapabilities,\r\n            });\r\n\r\n            if (device_) {\r\n              this.device.next(device_);\r\n            }\r\n          } catch (error) {\r\n            console.error('Error creating device:', error);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error('Error in updateAndComplete:', error);\r\n      }\r\n    };\r\n\r\n    if (data && data.success) {\r\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && isLocal) {\r\n        this.roomData.next(data);\r\n        return;\r\n      } else if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\r\n        // Update roomData\r\n        if (this.roomData.value) {\r\n          // Updating only the recording and meeting room parameters\r\n          this.roomData.value.recordingParams = data.recordingParams;\r\n          this.roomData.value.meetingRoomParams = data.meetingRoomParams;\r\n          this.roomData.next(this.roomData.value);\r\n        } else {\r\n          this.roomData.next(data);\r\n        }\r\n      } else {\r\n        // Update roomData\r\n        this.roomData.next(data);\r\n        if (!this.link.value.includes('mediasfu.com')) {\r\n          this.roomData.value!.meetingRoomParams = data.meetingRoomParams;\r\n        }\r\n      }\r\n\r\n      await updateAndComplete(data);\r\n    } else {\r\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\r\n        // Join local room only\r\n        if (this.roomData.value) {\r\n          await updateAndComplete(this.roomData.value);\r\n        }\r\n        return;\r\n      }\r\n\r\n      // Might be a wrong room name or room is full or other error; check reason in data object if available\r\n      try {\r\n        if (this.showAlert && data?.reason) {\r\n          this.showAlert({\r\n            message: data.reason,\r\n            type: 'danger',\r\n            duration: 3000,\r\n          });\r\n        }\r\n      } catch (error) {\r\n        /* handle error */\r\n      }\r\n    }\r\n  }\r\n\r\n  updateStatesToInitialValues = async () => {\r\n    const initialValues = initialValuesState as { [key: string]: any };\r\n    const updateFunctions = this.getAllParams() as unknown as {\r\n      [key: string]: (value: any) => void;\r\n    };\r\n\r\n    for (const key in initialValues) {\r\n      if (Object.prototype.hasOwnProperty.call(initialValues, key)) {\r\n        const updateFunctionName = `update${key.charAt(0).toUpperCase() + key.slice(1)}`;\r\n        const updateFunction = updateFunctions[updateFunctionName];\r\n\r\n        if (typeof updateFunction === 'function') {\r\n          try {\r\n            updateFunction(initialValues[key]);\r\n          } catch {\r\n            /* handle error */\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  faMicrophone = faMicrophone;\r\n  faMicrophoneSlash = faMicrophoneSlash;\r\n  faVideo = faVideo;\r\n  faVideoSlash = faVideoSlash;\r\n  faSync = faSync;\r\n  faPhone = faPhone;\r\n  faShareAlt = faShareAlt;\r\n  faComments = faComments;\r\n\r\n  onCloseMenuModal = () => {\r\n    this.updateIsMenuModalVisible(false);\r\n  };\r\n\r\n  onEventSettingsClose = () => {\r\n    this.updateIsSettingsModalVisible(false);\r\n  };\r\n\r\n  onCoHostClose = () => {\r\n    this.updateIsCoHostModalVisible(false);\r\n  };\r\n\r\n  onMediaSettingsClose = () => {\r\n    this.updateIsMediaSettingsModalVisible(false);\r\n  };\r\n\r\n  onDisplaySettingsClose = () => {\r\n    this.updateIsDisplaySettingsModalVisible(false);\r\n  };\r\n\r\n  onPollClose = () => {\r\n    this.updateIsPollModalVisible(false);\r\n  };\r\n\r\n  onBreakoutRoomsClose = () => {\r\n    this.updateIsBreakoutRoomsModalVisible(false);\r\n  };\r\n\r\n  onConfigureWhiteboardClose = () => {\r\n    this.updateIsConfigureWhiteboardModalVisible(false);\r\n  };\r\n\r\n  onMessagesClose = () => {\r\n    this.updateIsMessagesModalVisible(false);\r\n  };\r\n\r\n  onRecordingClose = () => {\r\n    this.updateIsRecordingModalVisible(false);\r\n  };\r\n\r\n  onParticipantsClose = () => {\r\n    this.updateIsParticipantsModalVisible(false);\r\n  };\r\n\r\n  onBackgroundClose = () => {\r\n    this.updateIsBackgroundModalVisible(false);\r\n  };\r\n\r\n  onConfirmExitClose = () => {\r\n    this.updateIsConfirmExitModalVisible(false);\r\n  };\r\n\r\n  onConfirmHereClose = () => {\r\n    this.updateIsConfirmHereModalVisible(false);\r\n  };\r\n\r\n  onScreenboardClose = () => {\r\n    this.updateIsScreenboardModalVisible(false);\r\n  };\r\n\r\n  onShareEventClose = () => {\r\n    this.updateIsShareEventModalVisible(false);\r\n  };\r\n\r\n  onAlertHide = () => {\r\n    this.updateAlertVisible(false);\r\n  };\r\n\r\n  messageWidget = {\r\n    component: MessageWidget,\r\n    injector: this.createInjector({\r\n      icon: this.faComments,\r\n      showBadge: this.showMessagesBadge.value,\r\n      badgeValue: 1,\r\n      iconColor: 'black',\r\n    }),\r\n  };\r\n\r\n  controlChatButtons: ButtonTouch[] = [];\r\n\r\n  controlChatButtonsArray: ButtonTouch[] = [\r\n    {\r\n      icon: this.faShareAlt,\r\n      active: true,\r\n      alternateIcon: this.faShareAlt,\r\n      onPress: () => this.updateIsShareEventModalVisible(!this.isShareEventModalVisible.value),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      show: true,\r\n    },\r\n    {\r\n      customComponent: this.messageWidget,\r\n      onPress: () =>\r\n        this.launchMessages.launchMessages({\r\n          updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\r\n          isMessagesModalVisible: this.isMessagesModalVisible.value,\r\n        }),\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faSync,\r\n      active: true,\r\n      alternateIcon: this.faSync,\r\n      onPress: () =>\r\n        this.switchVideoAlt.switchVideoAlt({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'black',\r\n      inActiveColor: 'black',\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faVideoSlash,\r\n      alternateIcon: this.faVideo,\r\n      active: () => this.videoActive.value,\r\n      onPress: () =>\r\n        this.clickVideo.clickVideo({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faMicrophoneSlash,\r\n      alternateIcon: this.faMicrophone,\r\n      active: () => this.micActive.value,\r\n      onPress: () =>\r\n        this.clickAudio.clickAudio({\r\n          parameters: {\r\n            ...this.getAllParams(),\r\n            ...this.mediaSFUFunctions(),\r\n          },\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      show: true,\r\n    },\r\n    {\r\n      icon: this.faPhone,\r\n      active: this.endCallActive.value,\r\n      onPress: () =>\r\n        this.launchConfirmExit.launchConfirmExit({\r\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\r\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\r\n        }),\r\n      activeColor: 'green',\r\n      inActiveColor: 'red',\r\n      show: true,\r\n    },\r\n  ];\r\n\r\n  updateControlChatButtons() {\r\n    this.controlChatButtons = this.controlChatButtonsArray.map((button) => {\r\n      return {\r\n        ...button,\r\n        show: typeof button.show === 'function' ? button.show() : button.show,\r\n        active: typeof button.active === 'function' ? button.active() : button.active,\r\n      };\r\n    });\r\n  }\r\n\r\n  async connect_Socket(\r\n    apiUserName: string,\r\n    token: string,\r\n    skipSockets: boolean = false\r\n  ): Promise<Socket | null> {\r\n\r\n    const socketDefault = this.socket.value;\r\n    const socketAlt =\r\n      this.connectMediaSFU && this.localSocket!.value && this.localSocket!.value.id\r\n        ? this.localSocket!.value\r\n        : socketDefault;\r\n\r\n    if (this.socket.value && this.socket.value.id) {\r\n      if (!skipSockets) {\r\n        // Event listeners on socketDefault\r\n        socketDefault.on('disconnect', async () => {\r\n          await this.disconnect.disconnect({\r\n            showAlert: this.showAlert.bind(this),\r\n            redirectURL: this.redirectURL.value,\r\n            onWeb: true,\r\n            updateValidated: this.updateValidated.bind(this),\r\n          });\r\n          if (this.videoAlreadyOn.value) {\r\n            await this.clickVideo.clickVideo({\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n          if (this.audioAlreadyOn.value) {\r\n            await this.clickAudio.clickAudio({\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          }\r\n\r\n          await this.closeAndReset();\r\n        });\r\n\r\n        socketDefault.on('allMembers', async (membersData: AllMembersData) => {\r\n          if (membersData) {\r\n            await this.allMembers.allMembers({\r\n              apiUserName: apiUserName,\r\n              apiKey: '', //not recommended - use apiToken instead. Use for testing/development only\r\n              apiToken: token,\r\n              members: membersData.members,\r\n              requestss: membersData.requests ? membersData.requests : this.requestList.value,\r\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\r\n              coHostRes: membersData.coHostResponsibilities\r\n                ? membersData.coHostResponsibilities\r\n                : this.coHostResponsibility.value,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              consume_sockets: this.consume_sockets.value,\r\n            });\r\n          }\r\n        });\r\n\r\n        socketDefault.on('allMembersRest', async (membersData: AllMembersRestData) => {\r\n          if (membersData) {\r\n            await this.allMembersRest.allMembersRest({\r\n              apiUserName: apiUserName,\r\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\r\n              members: membersData.members,\r\n              apiToken: token,\r\n              settings: membersData.settings,\r\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\r\n              coHostRes: membersData.coHostResponsibilities\r\n                ? membersData.coHostResponsibilities\r\n                : this.coHostResponsibility.value,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              consume_sockets: this.consume_sockets.value,\r\n            });\r\n          }\r\n        });\r\n\r\n        socketDefault.on(\r\n          'producer-media-paused',\r\n          async ({\r\n            producerId,\r\n            kind,\r\n            name,\r\n          }: {\r\n            producerId: string;\r\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\r\n            name: string;\r\n          }) => {\r\n            await this.producerMediaPaused.producerMediaPaused({\r\n              producerId,\r\n              kind,\r\n              name,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'producer-media-resumed',\r\n          async ({ kind, name }: { kind: 'audio'; name: string }) => {\r\n            await this.producerMediaResumed.producerMediaResumed({\r\n              kind,\r\n              name,\r\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on(\r\n          'producer-media-closed',\r\n          async ({\r\n            producerId,\r\n            kind,\r\n          }: {\r\n            producerId: string;\r\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\r\n          }) => {\r\n            if (producerId && kind) {\r\n              await this.producerMediaClosed.producerMediaClosed({\r\n                producerId,\r\n                kind,\r\n                parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n              });\r\n            }\r\n          },\r\n        );\r\n\r\n        socketDefault.on('meetingEnded', async () => {\r\n          await this.meetingEnded.meetingEnded({\r\n            showAlert: this.showAlert.bind(this),\r\n            redirectURL: this.redirectURL.value,\r\n            onWeb: true,\r\n            eventType: this.eventType.value,\r\n            updateValidated: this.updateValidated.bind(this),\r\n          });\r\n\r\n          if (this.videoAlreadyOn.value) {\r\n            await this.clickVideo.clickVideo({\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          }\r\n          if (this.audioAlreadyOn.value) {\r\n            await this.clickAudio.clickAudio({\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          }\r\n\r\n          await this.closeAndReset();\r\n        });\r\n\r\n        socketDefault.on('disconnectUserSelf', async () => {\r\n          await this.disconnectUserSelf.disconnectUserSelf({\r\n            socket: socketDefault,\r\n            member: this.member.value,\r\n            roomName: this.roomName.value,\r\n          });\r\n        });\r\n\r\n        socketDefault.on('receiveMessage', async ({ message }: { message: Message }) => {\r\n          await this.receiveMessage.receiveMessage({\r\n            message,\r\n            messages: this.messages.value,\r\n            participantsAll: this.participantsAll.value,\r\n            member: this.member.value,\r\n            eventType: this.eventType.value,\r\n            islevel: this.islevel.value,\r\n            coHost: this.coHost.value,\r\n            updateMessages: this.updateMessages.bind(this),\r\n            updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'meetingTimeRemaining',\r\n          async ({ timeRemaining }: { timeRemaining: number }) => {\r\n            await this.meetingTimeRemaining.meetingTimeRemaining({\r\n              timeRemaining,\r\n              showAlert: this.showAlert.bind(this),\r\n              eventType: this.eventType.value,\r\n            });\r\n          },\r\n        );\r\n\r\n        socketDefault.on('meetingStillThere', async () => {\r\n          this.meetingStillThere.meetingStillThere({\r\n            updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\r\n          });\r\n        });\r\n\r\n        socketDefault.on(\r\n          'updateConsumingDomains',\r\n          async ({ domains, alt_domains }: UpdateConsumingDomainsData) => {\r\n            await this.updateConsumingDomains.updateConsumingDomains({\r\n              domains,\r\n              alt_domains,\r\n              apiUserName,\r\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\r\n              apiToken: token,\r\n              parameters: {\r\n                ...this.getAllParams(),\r\n                ...this.mediaSFUFunctions(),\r\n              },\r\n            });\r\n          },\r\n        );\r\n      }\r\n\r\n      if (this.localLink !== \"\" && socketDefault && !skipSockets) {\r\n        await this.join_Room({\r\n          socket: socketDefault,\r\n          roomName: this.roomName.value,\r\n          islevel: this.islevel.value,\r\n          member: this.member.value,\r\n          sec: token,\r\n          apiUserName: apiUserName,\r\n          isLocal: true,\r\n        });\r\n      }\r\n\r\n      // Check if localSocket has changed\r\n      const localChanged =\r\n        this.localSocket!.value && this.localSocket!.value.id && this.localSocket!.value.id !== socketAlt.id;\r\n\r\n\r\n      if (!skipSockets && localChanged) {\r\n        // Re-call connect_Socket with skipSockets = true\r\n        await this.connect_Socket(apiUserName, token, true);\r\n        await sleep({ ms: 1000 })\r\n        this.updateIsLoadingModalVisible(false);\r\n        return socketDefault;\r\n      } else {\r\n        if (this.link.value !== '' && this.link.value.includes('mediasfu.com')) {\r\n          // Token might be different for local room\r\n          const token = this.apiToken.value;\r\n          await this.join_Room({\r\n            socket:\r\n              this.connectMediaSFU && socketAlt && socketAlt.id ? socketAlt : socketDefault,\r\n            roomName: this.roomName.value,\r\n            islevel: this.islevel.value,\r\n            member: this.member.value,\r\n            sec: token,\r\n            apiUserName: apiUserName,\r\n          });\r\n        }\r\n\r\n        await this.receiveRoomMessages.receiveRoomMessages({\r\n          socket: socketDefault,\r\n          roomName: this.roomName.value,\r\n          updateMessages: this.updateMessages.bind(this),\r\n        });\r\n\r\n        if (!skipSockets) {\r\n          await this.prepopulateUserMedia.prepopulateUserMedia({\r\n            name: this.hostLabel.value,\r\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\r\n          });\r\n        }\r\n\r\n        return socketDefault;\r\n      }\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ValidateAlphanumeric","i1.JoinConRoom","i1.SignalNewConsumerTransport","i2","i1.ControlMedia","i1.SocketManager","i2.NewPipeProducer","i3.ProducerClosed","i4.JoinConsumeRoom","i1.NewPipeProducer","i2.ProducerClosed","i1.ClickVideo","i1.RecordUpdateTimer","i1.RecordStartTimer","i2.RecordResumeTimer","i1.RecordPauseTimer","i1.CheckPauseState","i2.CheckResumeState","i3.RecordPauseTimer","i4.RecordResumeTimer","i1.JoinRoom","i2.JoinConRoom","i1.VideoCaptureConstraints","i2.HParams","i3.VParams","i4.ScreenParams","i5.AParams","MAX_ATTEMPTS","RATE_LIMIT_DURATION","i1","i2.CheckLimitsAndMakeRequest","i3.JoinRoomOnMediaSFU","i1.SoundPlayer","i3","i1.ModifyCoHostSettings","i4","i1.GeneratePageContent","i1.ModifyDisplaySettings","i1.ModifySettings","i1.ConfirmExit","i1.SwitchAudio","i2.SwitchVideo","i3.SwitchVideoAlt","i6","i1.SendMessage","i3.CreateRoomOnMediaSFU","i4.JoinRoomOnMediaSFU","i1.MuteParticipants","i2.MessageParticipants","i3.RemoveParticipants","i5","i1.RespondToRequests","i1.RespondToWaiting","BehaviorSubject","i1.UpdateMiniCardsGrid","i2.MixStreams","i3.DispStreams","i4.StopShareScreen","i5.CheckScreenShare","i6.StartShareScreen","i7.RequestScreenShare","i8.ReorderStreams","i9.PrepopulateUserMedia","i10.GetVideos","i11.RePort","i12.Trigger","i13.ConsumerResume","i14.ConnectSendTransport","i15.ConnectSendTransportAudio","i16.ConnectSendTransportVideo","i17.ConnectSendTransportScreen","i18.ProcessConsumerTransports","i19.ResumePauseStreams","i20.Readjust","i21.CheckGrid","i22.GetEstimate","i23.CalculateRowsAndColumns","i24.AddVideosGrid","i25.OnScreenChanges","i26.ChangeVids","i27.CompareActiveNames","i28.CompareScreenStates","i29.CreateSendTransport","i30.ResumeSendTransportAudio","i31.ReceiveAllPipedTransports","i32.DisconnectSendTransportVideo","i33.DisconnectSendTransportAudio","i34.DisconnectSendTransportScreen","i35.GetPipedProducersAlt","i36.SignalNewConsumerTransport","i37.ConnectRecvTransport","i38.ReUpdateInter","i39.UpdateParticipantAudioDecibels","i40.CloseAndResize","i41.AutoAdjust","i42.SwitchUserVideoAlt","i43.SwitchUserVideo","i44.SwitchUserAudio","i45.GetDomains","i46.FormatNumber","i47.ConnectIps","i48.ConnectLocalIps","i49.CreateDeviceClient","i50.HandleCreatePoll","i51.HandleEndPoll","i52.HandleVotePoll","i53.CaptureCanvasStream","i54.ResumePauseAudioStreams","i55.ProcessConsumerTransportsAudio","i56.LaunchMenuModal","i57.LaunchRecording","i58.StartRecording","i59.ConfirmRecording","i60.LaunchWaiting","i61.launchCoHost","i62.LaunchMediaSettings","i63.LaunchDisplaySettings","i64.LaunchSettings","i65.LaunchRequests","i66.LaunchParticipants","i67.LaunchMessages","i68.LaunchConfirmExit","i69.LaunchPoll","i70.LaunchBreakoutRooms","i71.LaunchConfigureWhiteboard","i72.StartMeetingProgressTimer","i73.UpdateRecording","i74.StopRecording","i75.UserWaiting","i76.PersonJoined","i77.AllWaitingRoomMembers","i78.RoomRecordParams","i79.BanParticipant","i80.UpdatedCoHost","i81.ParticipantRequested","i82.ScreenProducerId","i83.UpdateMediaSettings","i84.ProducerMediaPaused","i85.ProducerMediaResumed","i86.ProducerMediaClosed","i87.ControlMediaHost","i88.MeetingEnded","i89.DisconnectUserSelf","i90.ReceiveMessage","i91.MeetingTimeRemaining","i92.MeetingStillThere","i93.StartRecords","i94.ReInitiateRecording","i95.RecordingNotice","i96.TimeLeftRecording","i97.StoppedRecording","i98.HostRequestResponse","i99.AllMembers","i100.AllMembersRest","i101.Disconnect","i102.PollUpdated","i103.BreakoutRoomUpdated","i104.SocketManager","i105.JoinRoomClient","i106.JoinLocalRoom","i107.UpdateRoomParametersClient","i108.ClickVideo","i109.ClickAudio","i110.ClickScreenShare","i111.SwitchVideoAlt","i112.StreamSuccessVideo","i113.StreamSuccessAudio","i114.StreamSuccessScreen","i115.StreamSuccessAudioSwitch","i116.CheckPermission","i117.UpdateConsumingDomains","i118.ReceiveRoomMessages","i119","i50.CaptureCanvasStream","i51.ResumePauseAudioStreams","i52.ProcessConsumerTransportsAudio","i53.LaunchRecording","i54.StartRecording","i55.ConfirmRecording","i56.LaunchParticipants","i57.LaunchMessages","i58.LaunchConfirmExit","i59.StartMeetingProgressTimer","i60.UpdateRecording","i61.StopRecording","i62.PersonJoined","i63.RoomRecordParams","i64.BanParticipant","i65.ProducerMediaPaused","i66.ProducerMediaResumed","i67.ProducerMediaClosed","i68.MeetingEnded","i69.DisconnectUserSelf","i70.ReceiveMessage","i71.MeetingTimeRemaining","i72.MeetingStillThere","i73.StartRecords","i74.ReInitiateRecording","i75.RecordingNotice","i76.TimeLeftRecording","i77.StoppedRecording","i78.AllMembers","i79.AllMembersRest","i80.Disconnect","i81.SocketManager","i82.JoinRoomClient","i83.JoinLocalRoom","i84.UpdateRoomParametersClient","i85.ClickVideo","i86.ClickAudio","i87.ClickScreenShare","i88.SwitchVideoAlt","i89.StreamSuccessVideo","i90.StreamSuccessAudio","i91.StreamSuccessScreen","i92.StreamSuccessAudioSwitch","i93.CheckPermission","i94.UpdateConsumingDomains","i95.ReceiveRoomMessages","i96","i111.StreamSuccessVideo","i112.StreamSuccessAudio","i113.StreamSuccessScreen","i114.StreamSuccessAudioSwitch","i115.CheckPermission","i116.UpdateConsumingDomains","i117.ReceiveRoomMessages","i118","i53.LaunchMessages","i54.LaunchConfirmExit","i55.StartMeetingProgressTimer","i56.ProducerMediaPaused","i57.ProducerMediaResumed","i58.ProducerMediaClosed","i59.MeetingEnded","i60.DisconnectUserSelf","i61.ReceiveMessage","i62.MeetingTimeRemaining","i63.MeetingStillThere","i64.AllMembers","i65.AllMembersRest","i66.Disconnect","i67.SocketManager","i68.JoinRoomClient","i69.JoinLocalRoom","i70.UpdateRoomParametersClient","i71.ClickVideo","i72.ClickAudio","i73.ClickScreenShare","i74.SwitchVideoAlt","i75.StreamSuccessVideo","i76.StreamSuccessAudio","i77.StreamSuccessScreen","i78.StreamSuccessAudioSwitch","i79.CheckPermission","i80.UpdateConsumingDomains","i81.ReceiveRoomMessages","i82"],"mappings":"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"}