{"version":3,"file":"mediasfu-angular.mjs","sources":["../../src/lib/consumers/socket-receive-methods/join-consume-room.service.ts","../../src/lib/consumers/socket-receive-methods/producer-closed.service.ts","../../src/lib/consumers/socket-receive-methods/new-pipe-producer.service.ts","../../src/lib/components/display-components/mini-card/mini-card.component.ts","../../src/lib/components/display-components/card-video-display/card-video-display.component.ts","../../src/lib/components/display-components/card-video-display/card-video-display.component.html","../../src/lib/components/display-components/subtitle-overlay/subtitle-overlay.component.ts","../../src/lib/methods/utils/get-overlay-position.util.ts","../../src/lib/producers/socket-receive-methods/translation-receive-methods.service.ts","../../src/lib/consumers/control-media.service.ts","../../src/lib/services/live-subtitle.service.ts","../../src/lib/components/display-components/video-card/video-card.component.ts","../../src/lib/components/display-components/video-card/video-card.component.html","../../src/lib/modern/display-components/modern-mini-card.component.ts","../../src/lib/components/display-components/audio-card/audio-card.component.ts","../../src/lib/components/display-components/audio-card/audio-card.component.html","../../src/lib/consumers/add-videos-grid.service.ts","../../src/lib/consumers/auto-adjust.service.ts","../../src/lib/consumers/calculate-rows-and-columns.service.ts","../../src/lib/consumers/change-vids.service.ts","../../src/lib/consumers/check-grid.service.ts","../../src/lib/consumers/check-permission.service.ts","../../src/lib/consumers/check-screen-share.service.ts","../../src/lib/consumers/close-and-resize.service.ts","../../src/lib/consumers/compare-active-names.service.ts","../../src/lib/consumers/compare-screen-states.service.ts","../../src/lib/consumers/connect-ips.service.ts","../../src/lib/consumers/connect-local-ips.service.ts","../../src/lib/consumers/connect-recv-transport.service.ts","../../src/lib/consumers/connect-send-transport.service.ts","../../src/lib/consumers/connect-send-transport-audio.service.ts","../../src/lib/consumers/connect-send-transport-screen.service.ts","../../src/lib/consumers/connect-send-transport-video.service.ts","../../src/lib/components/display-components/mini-audio/mini-audio.component.ts","../../src/lib/methods/utils/mini-audio-player/mini-audio-player.component.ts","../../src/lib/methods/utils/mini-audio-player/mini-audio-player.component.html","../../src/lib/consumers/consumer-resume.service.ts","../../src/lib/consumers/create-send-transport.service.ts","../../src/lib/consumers/disconnect-send-transport-audio.service.ts","../../src/lib/consumers/disconnect-send-transport-video.service.ts","../../src/lib/consumers/disconnect-send-transport-screen.service.ts","../../src/lib/consumers/disp-streams.service.ts","../../src/lib/consumers/generate-page-content.service.ts","../../src/lib/consumers/get-estimate.service.ts","../../src/lib/consumers/get-piped-producers-alt.service.ts","../../src/lib/consumers/get-producers-piped.service.ts","../../src/lib/consumers/get-videos.service.ts","../../src/lib/consumers/mix-streams.service.ts","../../src/lib/consumers/on-screen-changes.service.ts","../../src/lib/consumers/prepopulate-user-media.service.ts","../../src/lib/consumers/process-consumer-transports.service.ts","../../src/lib/consumers/process-consumer-transports-audio.service.ts","../../src/lib/consumers/readjust.service.ts","../../src/lib/consumers/receive-all-piped-transports.service.ts","../../src/lib/consumers/reorder-streams.service.ts","../../src/lib/consumers/re-port.service.ts","../../src/lib/consumers/request-screen-share.service.ts","../../src/lib/consumers/resume-pause-audio-streams.service.ts","../../src/lib/consumers/resume-pause-streams.service.ts","../../src/lib/consumers/resume-send-transport-audio.service.ts","../../src/lib/consumers/re-update-inter.service.ts","../../src/lib/consumers/signal-new-consumer-transport.service.ts","../../src/lib/consumers/start-share-screen.service.ts","../../src/lib/consumers/stop-share-screen.service.ts","../../src/lib/consumers/stream-success-audio.service.ts","../../src/lib/consumers/stream-success-audio-switch.service.ts","../../src/lib/consumers/stream-success-screen.service.ts","../../src/lib/consumers/stream-success-video.service.ts","../../src/lib/consumers/switch-user-audio.service.ts","../../src/lib/methods/stream-methods/click-video.service.ts","../../src/lib/consumers/switch-user-video.service.ts","../../src/lib/consumers/switch-user-video-alt.service.ts","../../src/lib/consumers/trigger.service.ts","../../src/lib/consumers/update-mini-cards-grid.service.ts","../../src/lib/consumers/update-participant-audio-decibels.service.ts","../../src/lib/methods/utils/producer/a-params.service.ts","../../src/lib/methods/utils/producer/h-params.service.ts","../../src/lib/methods/utils/producer/screen-params.service.ts","../../src/lib/methods/utils/producer/v-params.service.ts","../../src/lib/methods/background-methods/launch-background.service.ts","../../src/lib/methods/breakout-room-methods/launch-breakout-rooms.service.ts","../../src/lib/methods/breakout-room-methods/breakout-room-updated.service.ts","../../src/lib/methods/co-host-methods/launch-co-host.service.ts","../../src/lib/methods/co-host-methods/modify-co-host-settings.service.ts","../../src/lib/methods/display-settings-methods/launch-display-settings.service.ts","../../src/lib/methods/display-settings-methods/modify-display-settings.service.ts","../../src/lib/methods/exit-methods/launch-confirm-exit.service.ts","../../src/lib/methods/exit-methods/confirm-exit.service.ts","../../src/lib/methods/media-settings-methods/launch-media-settings.service.ts","../../src/lib/methods/menu-methods/launch-menu-modal.service.ts","../../src/lib/methods/message-methods/launch-messages.service.ts","../../src/lib/methods/message-methods/send-message.service.ts","../../src/lib/methods/participants-methods/launch-participants.service.ts","../../src/lib/methods/participants-methods/message-participants.service.ts","../../src/lib/methods/participants-methods/mute-participants.service.ts","../../src/lib/methods/participants-methods/remove-participants.service.ts","../../src/lib/methods/polls-methods/handle-create-poll.service.ts","../../src/lib/methods/polls-methods/handle-end-poll.service.ts","../../src/lib/methods/polls-methods/handle-vote-poll.service.ts","../../src/lib/methods/polls-methods/launch-poll.service.ts","../../src/lib/methods/polls-methods/poll-updated.service.ts","../../src/lib/methods/recording-methods/check-pause-state.service.ts","../../src/lib/methods/recording-methods/check-resume-state.service.ts","../../src/lib/methods/recording-methods/confirm-recording.service.ts","../../src/lib/methods/recording-methods/launch-recording.service.ts","../../src/lib/methods/recording-methods/record-pause-timer.service.ts","../../src/lib/methods/recording-methods/record-resume-timer.service.ts","../../src/lib/methods/recording-methods/record-start-timer.service.ts","../../src/lib/methods/recording-methods/record-update-timer.service.ts","../../src/lib/methods/recording-methods/start-recording.service.ts","../../src/lib/methods/recording-methods/stop-recording.service.ts","../../src/lib/methods/recording-methods/update-recording.service.ts","../../src/lib/methods/requests-methods/launch-requests.service.ts","../../src/lib/methods/requests-methods/respond-to-requests.service.ts","../../src/lib/methods/settings-methods/launch-settings.service.ts","../../src/lib/methods/settings-methods/modify-settings.service.ts","../../src/lib/methods/stream-methods/click-audio.service.ts","../../src/lib/methods/stream-methods/click-chat.service.ts","../../src/lib/methods/stream-methods/click-screen-share.service.ts","../../src/lib/methods/stream-methods/switch-audio.service.ts","../../src/lib/methods/stream-methods/switch-video.service.ts","../../src/lib/methods/stream-methods/switch-video-alt.service.ts","../../src/lib/methods/utils/join-room-on-media-sfu.service.ts","../../src/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.ts","../../src/lib/methods/utils/format-number.service.ts","../../src/lib/methods/utils/generate-random-messages.service.ts","../../src/lib/methods/utils/generate-random-participants.service.ts","../../src/lib/methods/utils/generate-random-polls.service.ts","../../src/lib/methods/utils/generate-random-request-list.service.ts","../../src/lib/methods/utils/generate-random-waiting-room-list.service.ts","../../src/lib/methods/utils/get-modal-position.util.ts","../../src/lib/methods/utils/sleep.util.ts","../../src/lib/methods/utils/validate-alphanumeric.service.ts","../../src/lib/methods/waiting-methods/launch-waiting.service.ts","../../src/lib/methods/waiting-methods/respond-to-waiting.service.ts","../../src/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.ts","../../src/lib/methods/whiteboard-methods/capture-canvas-stream.service.ts","../../src/lib/producer-client/producer-client-emits/create-device-client.service.ts","../../src/lib/producer-client/producer-client-emits/join-room-client.service.ts","../../src/lib/producer-client/producer-client-emits/update-room-parameters-client.service.ts","../../src/lib/producers/producer-emits/join-con-room.service.ts","../../src/lib/producers/producer-emits/join-room.service.ts","../../src/lib/producers/producer-emits/join-local-room.service.ts","../../src/lib/producers/socket-receive-methods/all-members.service.ts","../../src/lib/producers/socket-receive-methods/all-members-rest.service.ts","../../src/lib/producers/socket-receive-methods/all-waiting-room-members.service.ts","../../src/lib/producers/socket-receive-methods/ban-participant.service.ts","../../src/lib/producers/socket-receive-methods/control-media-host.service.ts","../../src/lib/producers/socket-receive-methods/disconnect.service.ts","../../src/lib/producers/socket-receive-methods/disconnect-user-self.service.ts","../../src/lib/producers/socket-receive-methods/get-domains.service.ts","../../src/lib/producers/socket-receive-methods/host-request-response.service.ts","../../src/lib/producers/socket-receive-methods/meeting-ended.service.ts","../../src/lib/producers/socket-receive-methods/meeting-still-there.service.ts","../../src/lib/producers/socket-receive-methods/meeting-time-remaining.service.ts","../../src/lib/producers/socket-receive-methods/participant-requested.service.ts","../../src/lib/producers/socket-receive-methods/person-joined.service.ts","../../src/lib/producers/socket-receive-methods/producer-media-closed.service.ts","../../src/lib/producers/socket-receive-methods/producer-media-paused.service.ts","../../src/lib/producers/socket-receive-methods/producer-media-resumed.service.ts","../../src/lib/producers/socket-receive-methods/re-initiate-recording.service.ts","../../src/lib/producers/socket-receive-methods/receive-message.service.ts","../../src/lib/producers/socket-receive-methods/recording-notice.service.ts","../../src/lib/producers/socket-receive-methods/room-record-params.service.ts","../../src/lib/producers/socket-receive-methods/screen-producer-id.service.ts","../../src/lib/producers/socket-receive-methods/start-records.service.ts","../../src/lib/producers/socket-receive-methods/stopped-recording.service.ts","../../src/lib/producers/socket-receive-methods/time-left-recording.service.ts","../../src/lib/producers/socket-receive-methods/update-consuming-domains.service.ts","../../src/lib/producers/socket-receive-methods/update-media-settings.service.ts","../../src/lib/producers/socket-receive-methods/updated-co-host.service.ts","../../src/lib/producers/socket-receive-methods/user-waiting.service.ts","../../src/lib/sockets/socket-manager.service.ts","../../src/lib/modern/utils/render-mode.utils.ts","../../src/lib/components/background-components/background-modal/background-modal.component.ts","../../src/lib/components/background-components/background-modal/background-modal.component.html","../../src/lib/components/breakout-components/room-list/room-list.component.ts","../../src/lib/components/breakout-components/room-list/room-list.component.html","../../src/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.ts","../../src/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.html","../../src/lib/components/breakout-components/breakout-rooms-modal.component.ts","../../src/lib/components/breakout-components/breakout-rooms-modal.component.html","../../src/lib/components/co-host-components/co-host-modal/co-host-modal.component.ts","../../src/lib/components/co-host-components/co-host-modal/co-host-modal.component.html","../../src/lib/components/display-components/alert-component/alert.component.component.ts","../../src/lib/components/display-components/alert-component/alert.component.component.html","../../src/lib/components/display-components/audio-grid/audio-grid.component.ts","../../src/lib/components/display-components/control-buttons-component/control-buttons-component.component.ts","../../src/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.ts","../../src/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.html","../../src/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.ts","../../src/lib/components/display-components/flexible-grid/flexible-grid.component.ts","../../src/lib/components/display-components/flexible-video/flexible-video.component.ts","../../src/lib/components/display-components/loading-modal/loading-modal.component.ts","../../src/lib/components/display-components/main-aspect-component/main-aspect-component.component.ts","../../src/lib/components/display-components/main-container-component/main-container-component.component.ts","../../src/lib/modern/display-components/modern-meeting-progress-timer.component.ts","../../src/lib/components/display-components/main-grid-component/main-grid-component.component.ts","../../src/lib/components/display-components/main-screen-component/main-screen-component.component.ts","../../src/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.ts","../../src/lib/components/display-components/mini-card-audio/mini-card-audio.component.ts","../../src/lib/components/display-components/other-grid-component/other-grid-component.component.ts","../../src/lib/components/display-components/pagination/pagination.component.ts","../../src/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.ts","../../src/lib/components/display-settings-components/display-settings-modal.component.ts","../../src/lib/components/display-settings-components/display-settings-modal.component.html","../../src/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.ts","../../src/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.html","../../src/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.ts","../../src/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.html","../../src/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.ts","../../src/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.html","../../src/lib/components/menu-components/custom-buttons/custom-buttons.component.ts","../../src/lib/components/menu-components/custom-buttons/custom-buttons.component.html","../../src/lib/components/menu-components/meeting-id-component/meeting-id-component.component.ts","../../src/lib/components/menu-components/meeting-id-component/meeting-id-component.component.html","../../src/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.ts","../../src/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.html","../../src/lib/components/menu-components/share-buttons-component/share-buttons-component.component.ts","../../src/lib/components/menu-components/share-buttons-component/share-buttons-component.component.html","../../src/lib/components/menu-components/menu-modal/menu-modal.component.ts","../../src/lib/components/menu-components/menu-modal/menu-modal.component.html","../../src/lib/components/message-components/message-panel/message-panel.component.ts","../../src/lib/components/message-components/message-panel/message-panel.component.html","../../src/lib/components/message-components/messages-modal/messages-modal.component.ts","../../src/lib/components/message-components/messages-modal/messages-modal.component.html","../../src/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.ts","../../src/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.html","../../src/lib/modern/primitives/modern-button.component.ts","../../src/lib/modern/primitives/modern-field.component.ts","../../src/lib/modern/primitives/modern-surface.component.ts","../../src/lib/modern/primitives/modern-entry-shell.component.ts","../../src/lib/methods/utils/check-limits-and-make-request.service.ts","../../src/lib/methods/utils/create-room-on-media-sfu.service.ts","../../src/lib/components/misc-components/pre-join-page/pre-join-page.component.ts","../../src/lib/components/misc-components/pre-join-page/pre-join-page.component.html","../../src/lib/components/misc-components/share-event-modal/share-event-modal.component.ts","../../src/lib/components/misc-components/share-event-modal/share-event-modal.component.html","../../src/lib/components/misc-components/welcome-page/welcome-page.component.ts","../../src/lib/components/misc-components/welcome-page/welcome-page.component.html","../../src/lib/methods/utils/translation-languages.util.ts","../../src/lib/components/translation-components/translation-settings-modal/translation-settings-modal.component.ts","../../src/lib/components/translation-components/translation-settings-modal/translation-settings-modal.component.html","../../src/lib/components/participants-components/participant-list-item/participant-list-item.component.ts","../../src/lib/components/participants-components/participant-list-item/participant-list-item.component.html","../../src/lib/components/participants-components/participant-list/participant-list.component.ts","../../src/lib/components/participants-components/participant-list/participant-list.component.html","../../src/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.ts","../../src/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.html","../../src/lib/components/participants-components/participant-list-others/participant-list-others.component.ts","../../src/lib/components/participants-components/participant-list-others/participant-list-others.component.html","../../src/lib/components/participants-components/participants-modal/participants-modal.component.ts","../../src/lib/components/participants-components/participants-modal/participants-modal.component.html","../../src/lib/components/polls-components/poll-modal/poll-modal.component.ts","../../src/lib/components/polls-components/poll-modal/poll-modal.component.html","../../src/lib/components/recording-components/standard-panel-component/standard-panel-component.component.ts","../../src/lib/components/recording-components/standard-panel-component/standard-panel-component.component.html","../../src/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.ts","../../src/lib/components/recording-components/advanced-panel-component/advanced-panel-component.component.html","../../src/lib/components/recording-components/recording-modal/recording-modal.component.ts","../../src/lib/components/recording-components/recording-modal/recording-modal.component.html","../../src/lib/components/requests-components/render-request-component/render-request-component.component.ts","../../src/lib/components/requests-components/render-request-component/render-request-component.component.html","../../src/lib/components/requests-components/requests-modal/requests-modal.component.ts","../../src/lib/components/requests-components/requests-modal/requests-modal.component.html","../../src/lib/components/screenboard-components/screenboard/screenboard.component.ts","../../src/lib/components/screenboard-components/screenboard/screenboard.component.html","../../src/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.ts","../../src/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.html","../../src/lib/components/waiting-components/waiting-room-modal.component.ts","../../src/lib/components/waiting-components/waiting-room-modal.component.html","../../src/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.ts","../../src/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.html","../../src/lib/components/whiteboard-components/whiteboard/whiteboard.component.ts","../../src/lib/components/whiteboard-components/whiteboard/whiteboard.component.html","../../src/lib/@types/custom-component.types.ts","../../src/lib/methods/panelists-methods/add-panelist.service.ts","../../src/lib/methods/panelists-methods/remove-panelist.service.ts","../../src/lib/methods/panelists-methods/focus-panelists.service.ts","../../src/lib/methods/permissions-methods/update-participant-permission.service.ts","../../src/lib/methods/permissions-methods/bulk-update-participant-permissions.service.ts","../../src/lib/methods/permissions-methods/update-permission-config.service.ts","../../src/lib/consumers/translation-consumer-switch.service.ts","../../src/lib/producers/socket-receive-methods/panelists-updated.service.ts","../../src/lib/producers/socket-receive-methods/panelist-focus-changed.service.ts","../../src/lib/producers/socket-receive-methods/receive-control-media.service.ts","../../src/lib/producers/socket-receive-methods/added-as-panelist.service.ts","../../src/lib/producers/socket-receive-methods/removed-from-panelists.service.ts","../../src/lib/producers/socket-receive-methods/permission-updated.service.ts","../../src/lib/producers/socket-receive-methods/permission-config-updated.service.ts","../../src/lib/@types/types.ts","../../src/lib/@types/ui-overrides.types.ts","../../src/lib/services/ui-override-resolver.service.ts","../../src/lib/directives/with-override.directive.ts","../../src/lib/methods/utils/initial-values.util.ts","../../src/lib/modern/modal-components/modern-messages-modal.component.ts","../../src/lib/modern/modal-components/modern-poll-modal.component.ts","../../src/lib/modern/modal-components/modern-recording-modal.component.ts","../../src/lib/services/custom-component-injection.service.ts","../../src/lib/consumers/receive-room-messages.service.ts","../../src/lib/modern/modal-components/modern-co-host-modal.component.ts","../../src/lib/modern/modal-components/modern-confirm-exit-modal.component.ts","../../src/lib/modern/modal-components/modern-confirm-here-modal.component.ts","../../src/lib/modern/modal-components/modern-display-settings-modal.component.ts","../../src/lib/modern/modal-components/modern-event-settings-modal.component.ts","../../src/lib/modern/modal-components/modern-media-settings-modal.component.ts","../../src/lib/modern/modal-components/modern-menu-modal.component.ts","../../src/lib/modern/modal-components/modern-participants-modal.component.ts","../../src/lib/modern/modal-components/modern-requests-modal.component.ts","../../src/lib/modern/modal-components/modern-share-event-modal.component.ts","../../src/lib/modern/modal-components/modern-waiting-room-modal.component.ts","../../src/lib/modern/display-components/modern-alert.component.ts","../../src/lib/modern/display-components/modern-loading-modal.component.ts","../../src/lib/modern/primitives/modern-sidebar-panel.component.ts","../../src/lib/modern/display-components/modern-participants-counter-badge.component.ts","../../src/lib/modern/display-components/modern-pagination.component.ts","../../src/lib/components/display-components/control-widgets/control-icon-badge-widget.component.ts","../../src/lib/components/display-components/control-widgets/menu-widget.component.ts","../../src/lib/components/display-components/control-widgets/message-widget.component.ts","../../src/lib/components/display-components/control-widgets/menu-record-widget.component.ts","../../src/lib/components/display-components/control-widgets/record-timer-widget.component.ts","../../src/lib/components/display-components/control-widgets/menu-participants-widget.component.ts","../../src/lib/components/display-components/control-widgets/screenshare-widget.component.ts","../../src/lib/methods/utils/create-response-join-room.util.ts","../../src/lib/components/mediasfu-components/mediasfu-generic.component.ts","../../src/lib/components/mediasfu-components/mediasfu-broadcast.component.ts","../../src/lib/components/mediasfu-components/mediasfu-webinar.component.ts","../../src/lib/components/mediasfu-components/mediasfu-conference.component.ts","../../src/lib/components/mediasfu-components/mediasfu-chat.component.ts","../../src/lib/methods/utils/sound-player.service.ts","../../src/lib/components/panelists-components/panelists-modal/panelists-modal.component.ts","../../src/lib/components/panelists-components/panelists-modal/panelists-modal.component.html","../../src/lib/components/permissions-components/permissions-modal/permissions-modal.component.ts","../../src/lib/components/permissions-components/permissions-modal/permissions-modal.component.html","../../src/mediasfu-angular.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\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 { types } from 'mediasoup-client';\r\nimport { joinConsumeRoom as sharedJoinConsumeRoom } from 'mediasfu-shared';\r\ntype Device = types.Device;\r\ntype RtpCapabilities = types.RtpCapabilities;\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  getUpdatedAllParams: () => JoinConsumeRoomParameters;\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  async joinConsumeRoom({\r\n    remote_sock,\r\n    apiToken,\r\n    apiUserName,\r\n    parameters,\r\n  }: JoinConsumeRoomOptions): Promise<JoinConsumeRoomResponse> {\r\n    return sharedJoinConsumeRoom({\r\n      remote_sock,\r\n      apiToken,\r\n      apiUserName,\r\n      parameters,\r\n    } as unknown as Parameters<typeof sharedJoinConsumeRoom>[0]) as unknown as Promise<JoinConsumeRoomResponse>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Transport, CloseAndResizeParameters, CloseAndResizeType } from '../../@types/types';\r\nimport { producerClosed as sharedProducerClosed } from 'mediasfu-shared';\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  async producerClosed({\r\n    remoteProducerId,\r\n    parameters,\r\n  }: ProducerClosedOptions): Promise<void> {\r\n    return sharedProducerClosed({\r\n      remoteProducerId,\r\n      parameters: parameters as unknown as Parameters<typeof sharedProducerClosed>[0]['parameters'],\r\n    }) as Promise<void>;\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  SignalNewConsumerTransportParameters,\r\n  ConnectRecvTransportParameters,\r\n  ConnectRecvTransportType,\r\n  ShowAlert,\r\n} from '../../@types/types';\r\nimport { types } from 'mediasoup-client';\r\nimport { newPipeProducer as sharedNewPipeProducer } from 'mediasfu-shared';\r\ntype Device = types.Device;\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  async newPipeProducer({\r\n    producerId,\r\n    islevel,\r\n    nsock,\r\n    parameters,\r\n  }: NewPipeProducerOptions): Promise<void> {\r\n    return sharedNewPipeProducer({\r\n      producerId,\r\n      islevel,\r\n      nsock,\r\n      parameters,\r\n    } as unknown as Parameters<typeof sharedNewPipeProducer>[0]) as Promise<void>;\r\n  }\r\n}\r\n","import { Component, Input, Inject, Optional, OnChanges, SimpleChanges } 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 class=\"mini-card__avatar\" [ngStyle]=\"getAvatarStyle()\">\r\n        <ng-container *ngIf=\"hasRenderableImage; else noImage\">\r\n          <img\r\n            [src]=\"imageSource\"\r\n            alt=\"Profile\"\r\n            class=\"mini-card__image\"\r\n            [ngStyle]=\"getMergedImageStyles()\"\r\n            (error)=\"handleImageError()\"\r\n          />\r\n        </ng-container>\r\n        <ng-template #noImage>\r\n          <div class=\"mini-card__initials\" [ngStyle]=\"getInitialsStyle()\">\r\n            {{ resolvedInitials }}\r\n          </div>\r\n        </ng-template>\r\n        <span class=\"mini-card__gloss\" aria-hidden=\"true\"></span>\r\n      </div>\r\n    </div>\r\n  `,\r\n    styleUrls: ['./mini-card.component.css']\r\n})\r\nexport class MiniCard implements OnChanges {\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 = true;\r\n  @Input() imageStyle: Partial<CSSStyleDeclaration> = {};\r\n  imageLoadFailed = false;\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  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['imageSource']) {\r\n      this.imageLoadFailed = false;\r\n    }\r\n  }\r\n\r\n  getMergedCardStyles() {\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      color: '#ffffff',\r\n      fontFamily:\r\n        \"var(--ms-modern-font-family, 'Segoe UI', 'Aptos', 'Trebuchet MS', sans-serif)\",\r\n      overflow: 'hidden',\r\n      background: 'transparent',\r\n      ...this.customStyle,\r\n    };\r\n  }\r\n\r\n  getAvatarStyle() {\r\n    return {\r\n      width: 'min(140px, 82%)',\r\n      height: 'min(140px, 82%)',\r\n      maxWidth: '82%',\r\n      maxHeight: '82%',\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n      position: 'relative',\r\n      overflow: 'hidden',\r\n      borderRadius: this.roundedImage ? '50%' : '24px',\r\n      background: this.hasRenderableImage\r\n        ? 'rgba(15, 23, 42, 0.18)'\r\n        : 'linear-gradient(135deg, rgba(79, 70, 229, 0.92) 0%, rgba(20, 184, 166, 0.88) 55%, rgba(245, 158, 11, 0.82) 100%)',\r\n      border: '1px solid rgba(255, 255, 255, 0.22)',\r\n      boxShadow: '0 18px 34px rgba(15, 23, 42, 0.18)',\r\n    };\r\n  }\r\n\r\n  getMergedImageStyles() {\r\n    return {\r\n      width: '100%',\r\n      height: '100%',\r\n      objectFit: 'cover',\r\n      borderRadius: this.roundedImage ? '50%' : '24px',\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.getDisplayFontSize() + 'px',\r\n      fontWeight: '800',\r\n      letterSpacing: this.resolvedInitials.length > 4 ? '0.02em' : '0.08em',\r\n      textTransform: 'none',\r\n      lineHeight: '1',\r\n      color: '#ffffff',\r\n      textShadow: '0 2px 10px rgba(15, 23, 42, 0.22)',\r\n    };\r\n  }\r\n\r\n  get resolvedInitials(): string {\r\n    const trimmedLabel = (this.initials || '').trim();\r\n\r\n    if (!trimmedLabel) {\r\n      return '';\r\n    }\r\n\r\n    return trimmedLabel.length > 10 ? trimmedLabel.substring(0, 10) : trimmedLabel;\r\n  }\r\n\r\n  getDisplayFontSize(): number {\r\n    if (this.resolvedInitials.length > 8) {\r\n      return Math.min(this.fontSize, 12);\r\n    }\r\n\r\n    if (this.resolvedInitials.length > 5) {\r\n      return Math.min(this.fontSize, 14);\r\n    }\r\n\r\n    return this.fontSize;\r\n  }\r\n\r\n  get hasRenderableImage(): boolean {\r\n    return Boolean(this.imageSource) && !this.imageLoadFailed;\r\n  }\r\n\r\n  handleImageError() {\r\n    this.imageLoadFailed = true;\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: this.backgroundColor || 'rgba(8, 17, 32, 0.92)',\r\n      borderRadius: 'inherit',\r\n      overflow: 'hidden',\r\n      position: 'relative',\r\n    };\r\n  }\r\n\r\n  getVideoStyle() {\r\n    const baseStyles: any = {\r\n      width: '100%',\r\n      height: '100%',\r\n      maxWidth: '100%',\r\n      maxHeight: '100%',\r\n      objectFit: this.forceFullDisplay ? 'cover' : 'contain',\r\n      backgroundColor: this.backgroundColor || 'transparent',\r\n      display: 'block',\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 class=\"videoContainer\" [ngStyle]=\"videoContainerStyle\">\r\n  <video #videoElement autoplay muted playsinline [ngStyle]=\"getVideoStyle()\"></video>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'app-subtitle-overlay',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  template: `\r\n    <div *ngIf=\"subtitle\" class=\"subtitle-overlay\">\r\n      <div class=\"subtitle-overlay__shell\">\r\n        <span class=\"subtitle-overlay__text\">{{ subtitle }}</span>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .subtitle-overlay {\r\n        position: absolute;\r\n        left: 10px;\r\n        right: 10px;\r\n        bottom: 12px;\r\n        display: flex;\r\n        justify-content: center;\r\n        z-index: 3;\r\n        pointer-events: none;\r\n      }\r\n\r\n      .subtitle-overlay__shell {\r\n        max-width: 90%;\r\n        padding: 8px 12px;\r\n        background: rgba(0, 0, 0, 0.6);\r\n        backdrop-filter: blur(10px);\r\n        -webkit-backdrop-filter: blur(10px);\r\n        border: 1px solid rgba(255, 255, 255, 0.15);\r\n        border-radius: 12px;\r\n      }\r\n\r\n      .subtitle-overlay__text {\r\n        color: #ffffff;\r\n        font-size: 13px;\r\n        font-weight: 500;\r\n        text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);\r\n        text-align: center;\r\n        display: -webkit-box;\r\n        overflow: hidden;\r\n        -webkit-line-clamp: 3;\r\n        -webkit-box-orient: vertical;\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class SubtitleOverlayComponent {\r\n  @Input() subtitle: string | null = null;\r\n}","import { getOverlayPosition as sharedGetOverlayPosition } from 'mediasfu-shared';\r\nimport { 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  return sharedGetOverlayPosition({ position }) as OverlayPositionStyle;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport {\n  createLiveSubtitle,\n  isSubtitleExpired,\n  translationChannelsAvailable as sharedTranslationChannelsAvailable,\n  translationConfigUpdated as sharedTranslationConfigUpdated,\n  translationError as sharedTranslationError,\n  translationLanguageSet as sharedTranslationLanguageSet,\n  translationMemberState as sharedTranslationMemberState,\n  translationProducerClosed as sharedTranslationProducerClosed,\n  translationProducerReady as sharedTranslationProducerReady,\n  translationRoomConfig as sharedTranslationRoomConfig,\n  translationSpeakerOutputChanged as sharedTranslationSpeakerOutputChanged,\n  translationSubscribed as sharedTranslationSubscribed,\n  translationTranscript as sharedTranslationTranscript,\n  translationUnsubscribed as sharedTranslationUnsubscribed,\n} from 'mediasfu-shared';\nimport type {\n  LanguageEntry,\n  LanguageMode,\n  LiveSubtitle,\n  TranslationChannelsAvailableData,\n  TranslationChannelsAvailableOptions,\n  TranslationConfigUpdatedData,\n  TranslationConfigUpdatedOptions,\n  TranslationErrorData,\n  TranslationErrorOptions,\n  TranslationLanguageSetData,\n  TranslationLanguageSetOptions,\n  TranslationMemberStateData,\n  TranslationMemberStateOptions,\n  TranslationProducerClosedData,\n  TranslationProducerClosedOptions,\n  TranslationProducerMap,\n  TranslationProducerReadyData,\n  TranslationProducerReadyOptions,\n  TranslationRoomConfig,\n  TranslationRoomConfigData,\n  TranslationRoomConfigOptions,\n  TranslationSpeakerOutputChangedData,\n  TranslationSpeakerOutputChangedOptions,\n  TranslationSubscribedData,\n  TranslationSubscribedOptions,\n  TranslationTranscriptData,\n  TranslationTranscriptOptions,\n  TranslationUnsubscribedData,\n  TranslationUnsubscribedOptions,\n} from 'mediasfu-shared';\n\nexport type {\n  LanguageEntry,\n  LanguageMode,\n  LiveSubtitle,\n  TranslationChannelsAvailableData,\n  TranslationChannelsAvailableOptions,\n  TranslationConfigUpdatedData,\n  TranslationConfigUpdatedOptions,\n  TranslationErrorData,\n  TranslationErrorOptions,\n  TranslationLanguageSetData,\n  TranslationLanguageSetOptions,\n  TranslationMemberStateData,\n  TranslationMemberStateOptions,\n  TranslationProducerClosedData,\n  TranslationProducerClosedOptions,\n  TranslationProducerMap,\n  TranslationProducerReadyData,\n  TranslationProducerReadyOptions,\n  TranslationRoomConfig,\n  TranslationRoomConfigData,\n  TranslationRoomConfigOptions,\n  TranslationSpeakerOutputChangedData,\n  TranslationSpeakerOutputChangedOptions,\n  TranslationSubscribedData,\n  TranslationSubscribedOptions,\n  TranslationTranscriptData,\n  TranslationTranscriptOptions,\n  TranslationUnsubscribedData,\n  TranslationUnsubscribedOptions,\n} from 'mediasfu-shared';\n\nexport { createLiveSubtitle, isSubtitleExpired } from 'mediasfu-shared';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TranslationReceiveMethods {\n  async translationRoomConfig(options: TranslationRoomConfigOptions): Promise<void> {\n    return sharedTranslationRoomConfig(options);\n  }\n\n  async translationConfigUpdated(options: TranslationConfigUpdatedOptions): Promise<void> {\n    return sharedTranslationConfigUpdated(options);\n  }\n\n  async translationLanguageSet(options: TranslationLanguageSetOptions): Promise<void> {\n    return sharedTranslationLanguageSet(options);\n  }\n\n  async translationSubscribed(options: TranslationSubscribedOptions): Promise<void> {\n    return sharedTranslationSubscribed(options);\n  }\n\n  async translationUnsubscribed(options: TranslationUnsubscribedOptions): Promise<void> {\n    return sharedTranslationUnsubscribed(options);\n  }\n\n  async translationProducerReady(options: TranslationProducerReadyOptions): Promise<void> {\n    return sharedTranslationProducerReady(options);\n  }\n\n  async translationProducerClosed(options: TranslationProducerClosedOptions): Promise<void> {\n    return sharedTranslationProducerClosed(options);\n  }\n\n  async translationChannelsAvailable(options: TranslationChannelsAvailableOptions): Promise<void> {\n    return sharedTranslationChannelsAvailable(options);\n  }\n\n  async translationMemberState(options: TranslationMemberStateOptions): Promise<void> {\n    return sharedTranslationMemberState(options);\n  }\n\n  async translationError(options: TranslationErrorOptions): Promise<void> {\n    return sharedTranslationError(options);\n  }\n\n  async translationTranscript(options: TranslationTranscriptOptions): Promise<void> {\n    return sharedTranslationTranscript(options);\n  }\n\n  async translationSpeakerOutputChanged(options: TranslationSpeakerOutputChangedOptions): Promise<void> {\n    return sharedTranslationSpeakerOutputChanged(options);\n  }\n}\n","import { Injectable } from '@angular/core';\r\nimport { controlMedia as sharedControlMedia } from 'mediasfu-shared';\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    return sharedControlMedia({\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    } as unknown as Parameters<typeof sharedControlMedia>[0]) as Promise<void>;\r\n\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 { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { LiveSubtitle } from '../producers/socket-receive-methods/translation-receive-methods.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class LiveSubtitleService {\n  private liveSubtitlesSubject = new BehaviorSubject<Map<string, LiveSubtitle>>(new Map());\n  private showSubtitlesOnCardsSubject = new BehaviorSubject<boolean>(true);\n\n  liveSubtitles$ = this.liveSubtitlesSubject.asObservable();\n  showSubtitlesOnCards$ = this.showSubtitlesOnCardsSubject.asObservable();\n\n  setLiveSubtitles(subtitles: Map<string, LiveSubtitle>): void {\n    this.liveSubtitlesSubject.next(subtitles);\n  }\n\n  getLiveSubtitles(): Map<string, LiveSubtitle> {\n    return this.liveSubtitlesSubject.getValue();\n  }\n\n  setShowSubtitlesOnCards(show: boolean): void {\n    this.showSubtitlesOnCardsSubject.next(show);\n  }\n\n  getShowSubtitlesOnCards(): boolean {\n    return this.showSubtitlesOnCardsSubject.getValue();\n  }\n\n  getSubtitleForSpeaker(speakerId: string, speakerName: string): LiveSubtitle | null {\n    const subtitles = this.liveSubtitlesSubject.getValue();\n    \n    if (speakerId && subtitles.has(speakerId)) {\n      return subtitles.get(speakerId) || null;\n    }\n    \n    if (speakerName && subtitles.has(speakerName)) {\n      return subtitles.get(speakerName) || null;\n    }\n    \n    return null;\n  }\n}\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 { SubtitleOverlayComponent } from '../subtitle-overlay/subtitle-overlay.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\nimport { LiveSubtitleService } from '../../../services/live-subtitle.service';\r\nimport { isSubtitleExpired } from '../../../producers/socket-receive-methods/translation-receive-methods.service';\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, SubtitleOverlayComponent],\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: 5 }, () => 3);\r\n  showWaveform = false;\r\n  audioLevelInterval: any;\r\n  waveformInterval: any;\r\n  isDarkModeEnabled = false;\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    private liveSubtitleService: LiveSubtitleService,\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  get liveSubtitleText(): string | null {\r\n    if (!this.liveSubtitleService.getShowSubtitlesOnCards()) {\r\n      return null;\r\n    }\r\n\r\n    const speakerId = this.participant?.id || '';\r\n    const speakerName = this.participant?.name || this.name || '';\r\n    const subtitle = this.liveSubtitleService.getSubtitleForSpeaker(speakerId, speakerName);\r\n\r\n    if (!subtitle || isSubtitleExpired(subtitle)) {\r\n      return null;\r\n    }\r\n\r\n    return subtitle.text;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.syncThemeMode(this.parameters?.getUpdatedAllParams?.());\r\n\r\n    this.audioLevelInterval = setInterval(() => {\r\n      const params = this.parameters.getUpdatedAllParams();\r\n      const { audioDecibels, participants } = params;\r\n      this.syncThemeMode(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.audioLevelInterval);\r\n    clearInterval(this.waveformInterval);\r\n  }\r\n\r\n  animateWaveform() {\r\n    this.showWaveform = true;\r\n\r\n    if (this.waveformInterval) {\r\n      return;\r\n    }\r\n\r\n    this.waveformInterval = setInterval(() => {\r\n      this.waveformAnimations = this.waveformAnimations.map(\r\n        () => Math.floor(Math.random() * 18) + 4,\r\n      );\r\n    }, 150);\r\n  }\r\n\r\n  resetWaveform() {\r\n    this.showWaveform = false;\r\n\r\n    if (this.waveformInterval) {\r\n      clearInterval(this.waveformInterval);\r\n      this.waveformInterval = null;\r\n    }\r\n\r\n    this.waveformAnimations = this.waveformAnimations.map(() => 3);\r\n  }\r\n\r\n  syncThemeMode(params?: any) {\r\n    if (typeof params?.isDarkModeValue === 'boolean') {\r\n      this.isDarkModeEnabled = params.isDarkModeValue;\r\n      return;\r\n    }\r\n\r\n    this.isDarkModeEnabled =\r\n      typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n        ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n        : false;\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  class=\"video-card\"\r\n  [ngStyle]=\"customStyle\"\r\n  [style.background]=\"backgroundColor || null\"\r\n  [class.video-card--dark]=\"isDarkModeEnabled\"\r\n  [class.video-card--light]=\"!isDarkModeEnabled\"\r\n>\r\n  <app-card-video-display\r\n    class=\"video-card__media\"\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    class=\"video-card__overlay video-card__overlay--info\"\r\n    [ngStyle]=\"getOverlayPosition(infoPosition)\"\r\n    [ngClass]=\"showControls ? 'video-card__overlay--with-controls' : 'video-card__overlay--compact'\"\r\n  >\r\n    <div class=\"video-card__identity\">\r\n      <span\r\n        class=\"video-card__status-dot\"\r\n        [class.video-card__status-dot--muted]=\"participant?.muted\"\r\n      ></span>\r\n      <span class=\"video-card__name\" [style.color]=\"textColor\">{{ participant?.name || name }}</span>\r\n    </div>\r\n    <div *ngIf=\"showWaveform\" class=\"video-card__waveform\">\r\n      <div\r\n        *ngFor=\"let animation of waveformAnimations\"\r\n        class=\"video-card__bar\"\r\n        [style.height.px]=\"animation\"\r\n        [style.backgroundColor]=\"barColor\"\r\n      ></div>\r\n    </div>\r\n  </div>\r\n\r\n  <div\r\n    *ngIf=\"showControls\"\r\n    class=\"video-card__overlay video-card__overlay--controls\"\r\n    [ngStyle]=\"getOverlayPosition(controlsPosition)\"\r\n  >\r\n    <ng-container *ngIf=\"!videoControlsComponent\">\r\n      <div class=\"video-card__controls-row\">\r\n        <button type=\"button\" class=\"video-card__control-button\" (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 type=\"button\" class=\"video-card__control-button\" (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\r\n  <app-subtitle-overlay [subtitle]=\"liveSubtitleText\"></app-subtitle-overlay>\r\n</div>\r\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface ModernMiniCardOptions {\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 ModernMiniCardType = (options: ModernMiniCardOptions) => HTMLElement;\r\n\r\n@Component({\r\n  selector: 'app-modern-mini-card',\r\n  imports: [CommonModule],\r\n  template: `\r\n    <div class=\"mini-card\" [ngStyle]=\"getMergedCardStyles()\">\r\n      <div class=\"mini-card__avatar\" [ngStyle]=\"getAvatarStyle()\">\r\n        <ng-container *ngIf=\"hasRenderableImage; else noImage\">\r\n          <img\r\n            [src]=\"imageSource\"\r\n            alt=\"Profile\"\r\n            class=\"mini-card__image\"\r\n            [ngStyle]=\"getMergedImageStyles()\"\r\n            (error)=\"handleImageError()\"\r\n          />\r\n        </ng-container>\r\n        <ng-template #noImage>\r\n          <div class=\"mini-card__initials\" [ngStyle]=\"getInitialsStyle()\">\r\n            {{ resolvedInitials }}\r\n          </div>\r\n        </ng-template>\r\n        <span class=\"mini-card__gloss\" aria-hidden=\"true\"></span>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      :host {\r\n        display: block;\r\n        width: 100%;\r\n        height: 100%;\r\n      }\r\n\r\n      .mini-card {\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        width: 100%;\r\n        height: 100%;\r\n        color: #ffffff;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', 'Aptos', 'Trebuchet MS', sans-serif);\r\n        overflow: hidden;\r\n      }\r\n\r\n      .mini-card__avatar {\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        position: relative;\r\n      }\r\n\r\n      .mini-card__image {\r\n        width: 100%;\r\n        height: 100%;\r\n        object-fit: cover;\r\n      }\r\n\r\n      .mini-card__initials {\r\n        position: relative;\r\n        z-index: 1;\r\n        font-weight: 800;\r\n      }\r\n\r\n      .mini-card__gloss {\r\n        position: absolute;\r\n        inset: 0;\r\n        background: linear-gradient(135deg, rgba(255, 255, 255, 0.18) 0%, transparent 55%);\r\n        pointer-events: none;\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernMiniCardComponent implements OnChanges {\r\n  @Input() initials = '';\r\n  @Input() fontSize = 14;\r\n  @Input() customStyle: Partial<CSSStyleDeclaration> = {};\r\n  @Input() imageSource = '';\r\n  @Input() roundedImage = true;\r\n  @Input() imageStyle: Partial<CSSStyleDeclaration> = {};\r\n\r\n  imageLoadFailed = false;\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['imageSource']) {\r\n      this.imageLoadFailed = false;\r\n    }\r\n  }\r\n\r\n  getMergedCardStyles() {\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      color: '#ffffff',\r\n      fontFamily:\r\n        \"var(--ms-modern-font-family, 'Segoe UI', 'Aptos', 'Trebuchet MS', sans-serif)\",\r\n      overflow: 'hidden',\r\n      background: 'transparent',\r\n      ...this.customStyle,\r\n    };\r\n  }\r\n\r\n  getAvatarStyle() {\r\n    return {\r\n      width: 'min(140px, 82%)',\r\n      height: 'min(140px, 82%)',\r\n      maxWidth: '82%',\r\n      maxHeight: '82%',\r\n      display: 'flex',\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n      position: 'relative',\r\n      overflow: 'hidden',\r\n      borderRadius: this.roundedImage ? '50%' : '24px',\r\n      background: this.hasRenderableImage\r\n        ? 'rgba(15, 23, 42, 0.18)'\r\n        : 'linear-gradient(135deg, rgba(79, 70, 229, 0.92) 0%, rgba(20, 184, 166, 0.88) 55%, rgba(245, 158, 11, 0.82) 100%)',\r\n      border: '1px solid rgba(255, 255, 255, 0.22)',\r\n      boxShadow: '0 18px 34px rgba(15, 23, 42, 0.18)',\r\n    };\r\n  }\r\n\r\n  getMergedImageStyles() {\r\n    return {\r\n      width: '100%',\r\n      height: '100%',\r\n      objectFit: 'cover',\r\n      borderRadius: this.roundedImage ? '50%' : '24px',\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.getDisplayFontSize() + 'px',\r\n      fontWeight: '800',\r\n      letterSpacing: this.resolvedInitials.length > 4 ? '0.02em' : '0.08em',\r\n      textTransform: 'none',\r\n      lineHeight: '1',\r\n      color: '#ffffff',\r\n      textShadow: '0 2px 10px rgba(15, 23, 42, 0.22)',\r\n    };\r\n  }\r\n\r\n  get resolvedInitials(): string {\r\n    const trimmedLabel = (this.initials || '').trim();\r\n\r\n    if (!trimmedLabel) {\r\n      return '';\r\n    }\r\n\r\n    return trimmedLabel.length > 10 ? trimmedLabel.substring(0, 10) : trimmedLabel;\r\n  }\r\n\r\n  getDisplayFontSize(): number {\r\n    if (this.resolvedInitials.length > 8) {\r\n      return Math.min(this.fontSize, 12);\r\n    }\r\n\r\n    if (this.resolvedInitials.length > 5) {\r\n      return Math.min(this.fontSize, 14);\r\n    }\r\n\r\n    return this.fontSize;\r\n  }\r\n\r\n  get hasRenderableImage(): boolean {\r\n    return Boolean(this.imageSource) && !this.imageLoadFailed;\r\n  }\r\n\r\n  handleImageError() {\r\n    this.imageLoadFailed = true;\r\n  }\r\n}","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, 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 { ModernMiniCardComponent } from '../../../modern/display-components/modern-mini-card.component';\r\nimport { SubtitleOverlayComponent } from '../subtitle-overlay/subtitle-overlay.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\nimport { LiveSubtitleService } from '../../../services/live-subtitle.service';\r\nimport { isSubtitleExpired } from '../../../producers/socket-receive-methods/translation-receive-methods.service';\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, ModernMiniCardComponent, SubtitleOverlayComponent],\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, OnChanges {\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: 5 }, () => 3);\r\n  ringBarIndices = Array.from({ length: 9 }, (_, index) => index);\r\n  showWaveform = false;\r\n  audioLevelInterval: any;\r\n  waveformInterval: any;\r\n  isDarkModeEnabled = false;\r\n  imageLoadFailed = false;\r\n\r\n  constructor(\r\n    private controlMediaService: ControlMedia,\r\n    private liveSubtitleService: LiveSubtitleService,\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  get liveSubtitleText(): string | null {\r\n    if (!this.liveSubtitleService.getShowSubtitlesOnCards()) {\r\n      return null;\r\n    }\r\n\r\n    const speakerId = this.participant?.id || '';\r\n    const speakerName = this.participant?.name || this.name || '';\r\n    const subtitle = this.liveSubtitleService.getSubtitleForSpeaker(speakerId, speakerName);\r\n\r\n    if (!subtitle || isSubtitleExpired(subtitle)) {\r\n      return null;\r\n    }\r\n\r\n    return subtitle.text;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.syncThemeMode(this.parameters?.getUpdatedAllParams?.());\r\n\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.audioLevelInterval = setInterval(() => {\r\n        const params = this.parameters.getUpdatedAllParams();\r\n        const { audioDecibels, participants } = params;\r\n        this.syncThemeMode(params);\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  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['imageSource']) {\r\n      this.imageLoadFailed = false;\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    clearInterval(this.audioLevelInterval);\r\n    clearInterval(this.waveformInterval);\r\n  }\r\n\r\n  get hasRenderableImage(): boolean {\r\n    return Boolean(this.imageSource) && !this.imageLoadFailed;\r\n  }\r\n\r\n  get isSpeaking(): boolean {\r\n    return this.showWaveform && !this.participant?.muted;\r\n  }\r\n\r\n  getWaveformRingHeight(index: number): number {\r\n    const value = this.waveformAnimations[index % this.waveformAnimations.length] ?? 8;\r\n    return Math.max(8, Math.min(28, value));\r\n  }\r\n\r\n  handleImageError() {\r\n    this.imageLoadFailed = true;\r\n  }\r\n\r\n  animateWaveform() {\r\n    this.showWaveform = true;\r\n\r\n    if (this.waveformInterval) {\r\n      return;\r\n    }\r\n\r\n    this.waveformInterval = setInterval(() => {\r\n      this.waveformAnimations = this.waveformAnimations.map(\r\n        () => Math.floor(Math.random() * 18) + 4,\r\n      );\r\n    }, 150);\r\n  }\r\n\r\n  resetWaveform() {\r\n    this.showWaveform = false;\r\n\r\n    if (this.waveformInterval) {\r\n      clearInterval(this.waveformInterval);\r\n      this.waveformInterval = null;\r\n    }\r\n\r\n    this.waveformAnimations = this.waveformAnimations.map(() => 3);\r\n  }\r\n\r\n  syncThemeMode(params?: any) {\r\n    if (typeof params?.isDarkModeValue === 'boolean') {\r\n      this.isDarkModeEnabled = params.isDarkModeValue;\r\n      return;\r\n    }\r\n\r\n    this.isDarkModeEnabled =\r\n      typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n        ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n        : false;\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.background]=\"backgroundColor && backgroundColor !== 'transparent' ? backgroundColor : null\"\r\n  [class.card--dark]=\"isDarkModeEnabled\"\r\n  [class.card--light]=\"!isDarkModeEnabled\"\r\n  [class.card--speaking]=\"isSpeaking\"\r\n>\r\n  <div class=\"card__body\">\r\n    <div class=\"card__avatar-shell\">\r\n      <div *ngIf=\"showWaveform\" class=\"card__waveform-ring\" aria-hidden=\"true\">\r\n        <div\r\n          *ngFor=\"let ringIndex of ringBarIndices\"\r\n          class=\"card__waveform-ring-bar\"\r\n          [style.height.px]=\"getWaveformRingHeight(ringIndex)\"\r\n          [style.transform]=\"'rotate(' + (ringIndex * 40) + 'deg) translateY(-90px)'\"\r\n          [style.backgroundColor]=\"barColor\"\r\n        ></div>\r\n      </div>\r\n\r\n      <ng-container *ngIf=\"hasRenderableImage; else noImage\">\r\n        <div class=\"card__avatar-frame\">\r\n          <img\r\n            [src]=\"imageSource\"\r\n            [ngStyle]=\"combineStyles(imageStyle, { 'border-radius': roundedImage ? '50%' : '22px' })\"\r\n            class=\"card__avatar-image\"\r\n            (error)=\"handleImageError()\"\r\n          />\r\n          <span class=\"card__avatar-gloss\" aria-hidden=\"true\"></span>\r\n        </div>\r\n      </ng-container>\r\n      <ng-template #noImage>\r\n        <div class=\"card__avatar-frame\">\r\n          <app-modern-mini-card\r\n            class=\"card__mini-card\"\r\n            [initials]=\"name\"\r\n            [fontSize]=\"24\"\r\n          ></app-modern-mini-card>\r\n        </div>\r\n      </ng-template>\r\n    </div>\r\n  </div>\r\n\r\n  <span class=\"card__glass-overlay\" aria-hidden=\"true\"></span>\r\n\r\n  <ng-container *ngIf=\"showInfo\">\r\n    <div\r\n      class=\"card__overlay card__overlay--info\"\r\n      [ngStyle]=\"getOverlayPosition(infoPosition)\"\r\n      [ngClass]=\"showControls ? 'card__overlay--with-controls' : 'card__overlay--compact'\"\r\n    >\r\n      <div class=\"card__identity\">\r\n        <span\r\n          class=\"card__status-dot\"\r\n          [class.card__status-dot--muted]=\"participant?.muted\"\r\n          [class.card__status-dot--speaking]=\"isSpeaking\"\r\n        ></span>\r\n        <p [ngStyle]=\"{ color: textColor }\" class=\"card__name\" [class.card__name--muted]=\"participant?.muted\">\r\n          {{ name }}\r\n        </p>\r\n      </div>\r\n      <div *ngIf=\"showWaveform\" class=\"card__waveform\">\r\n        <div\r\n          *ngFor=\"let animation of waveformAnimations\"\r\n          class=\"card__bar\"\r\n          [style.height.px]=\"animation\"\r\n          [style.backgroundColor]=\"barColor\"\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=\"card__overlay card__overlay--controls\"\r\n      [ngStyle]=\"getOverlayPosition(controlsPosition)\"\r\n      role=\"group\"\r\n      aria-label=\"Participant controls\"\r\n    >\r\n      <ng-container *ngIf=\"!videoControlsComponent\">\r\n        <button\r\n          type=\"button\"\r\n          class=\"card__control-button\"\r\n          (click)=\"toggleAudio()\"\r\n          [attr.aria-label]=\"participant?.muted ? 'Participant muted' : 'Mute participant'\"\r\n          [title]=\"participant?.muted ? 'Participant is muted' : 'Mute participant'\"\r\n        >\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\r\n          type=\"button\"\r\n          class=\"card__control-button\"\r\n          (click)=\"toggleVideo()\"\r\n          [attr.aria-label]=\"participant?.['videoOn'] ? 'Turn off camera' : 'Camera is off'\"\r\n          [title]=\"participant?.['videoOn'] ? 'Turn off camera' : 'Camera is off'\"\r\n        >\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\r\n  <app-subtitle-overlay [subtitle]=\"liveSubtitleText\"></app-subtitle-overlay>\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  // Custom component builders\r\n  customVideoCard?: any;\r\n  customAudioCard?: any;\r\n  customMiniCard?: any;\r\n\r\n  // Override-provided components\r\n  videoCardComponent?: any;\r\n  audioCardComponent?: any;\r\n  miniCardComponent?: any;\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      customVideoCard,\r\n      customAudioCard,\r\n      customMiniCard,\r\n      videoCardComponent,\r\n      audioCardComponent,\r\n      miniCardComponent,\r\n    } = parameters;\r\n\r\n    const VideoCardComponentOverride = videoCardComponent ?? VideoCard;\r\n    const AudioCardComponentOverride = audioCardComponent ?? AudioCard;\r\n    const MiniCardComponentOverride = miniCardComponent ?? MiniCard;\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: customAudioCard || AudioCardComponentOverride,\r\n            inputs: {\r\n              name: participant.name,\r\n              barColor: 'red',\r\n              textColor: 'white',\r\n              controlsPosition: 'topLeft',\r\n              infoPosition: 'topRight',\r\n              showWaveform: true,\r\n              roundedImage: true,\r\n              parameters,\r\n              showControls: eventType !== 'chat',\r\n              participant,\r\n            },\r\n          });\r\n        } else {\r\n          newComponents[0].push({\r\n            component: customMiniCard || MiniCardComponentOverride,\r\n            inputs: {\r\n              initials: participant.name,\r\n              fontSize: 20,\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: customMiniCard || MiniCardComponentOverride,\r\n              inputs: {\r\n                initials: name,\r\n                fontSize: 20,\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: customVideoCard || VideoCardComponentOverride,\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                participant: participant,\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: customVideoCard || VideoCardComponentOverride,\r\n              inputs: {\r\n                videoStream: participant.stream ? participant.stream : null,\r\n                remoteProducerId,\r\n                eventType,\r\n                forceFullDisplay,\r\n                participant: participant_,\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: customAudioCard || AudioCardComponentOverride,\r\n              inputs: {\r\n                name: participant.name,\r\n                barColor: 'red',\r\n                textColor: 'white',\r\n                controlsPosition: 'topLeft',\r\n                infoPosition: 'topRight',\r\n                showWaveform: true,\r\n                roundedImage: true,\r\n                parameters,\r\n                showControls: eventType !== 'chat',\r\n                participant,\r\n              },\r\n            });\r\n          } else {\r\n            newComponents[1].push({\r\n              component: customMiniCard || MiniCardComponentOverride,\r\n              inputs: {\r\n                initials: participant.name,\r\n                fontSize: 20,\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: customVideoCard || VideoCardComponentOverride,\r\n            inputs: {\r\n              videoStream: participant_ && participant_['stream'] ? participant_['stream'] : null,\r\n              remoteProducerId,\r\n              eventType,\r\n              forceFullDisplay,\r\n              participant: participant_,\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 === altGridStreams.length - 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 { autoAdjust as sharedAutoAdjust } from 'mediasfu-shared';\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  async autoAdjust({\r\n    n,\r\n    eventType,\r\n    shareScreenStarted,\r\n    shared,\r\n  }: AutoAdjustOptions): Promise<number[]> {\r\n    return sharedAutoAdjust({\r\n      n,\r\n      eventType,\r\n      shareScreenStarted,\r\n      shared,\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { calculateRowsAndColumns as sharedCalculateRowsAndColumns } from 'mediasfu-shared';\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  calculateRowsAndColumns({ n }: CalculateRowsAndColumnsOptions): [number, number] {\r\n    return sharedCalculateRowsAndColumns({ n });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { changeVids as sharedChangeVids } from 'mediasfu-shared';\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  async changeVids({ screenChanged = false, parameters }: ChangeVidsOptions): Promise<void> {\r\n    return sharedChangeVids({\r\n      screenChanged,\r\n      parameters: parameters as unknown as Parameters<typeof sharedChangeVids>[0]['parameters'],\r\n    }) as Promise<void>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { checkGrid as sharedCheckGrid } from 'mediasfu-shared';\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  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    return sharedCheckGrid({\r\n      rows,\r\n      cols,\r\n      actives,\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { checkPermission as sharedCheckPermission } from 'mediasfu-shared';\r\nimport { PermissionConfig } from '../methods/permissions-methods/update-permission-config.service';\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  permissionConfig?: PermissionConfig | null;\r\n  participantLevel?: string;\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    permissionConfig,\r\n    participantLevel,\r\n  }: CheckPermissionOptions): Promise<number> {\r\n    return sharedCheckPermission({\r\n      permissionType,\r\n      audioSetting,\r\n      videoSetting,\r\n      screenshareSetting,\r\n      chatSetting,\r\n      permissionConfig,\r\n      participantLevel,\r\n    }) as Promise<number>;\r\n\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 { checkScreenShare as sharedCheckScreenShare } from 'mediasfu-shared';\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  checkScreenShare = async ({ parameters }: CheckScreenShareOptions): Promise<void> => {\r\n    return sharedCheckScreenShare({\r\n      parameters: parameters as unknown as Parameters<typeof sharedCheckScreenShare>[0]['parameters'],\r\n    }) as Promise<void>;\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { closeAndResize as sharedCloseAndResize } from 'mediasfu-shared';\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    return sharedCloseAndResize({\r\n      producerId,\r\n      kind,\r\n      parameters: parameters as unknown as Parameters<typeof sharedCloseAndResize>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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 { compareActiveNames as sharedCompareActiveNames } from 'mediasfu-shared';\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  async compareActiveNames({\r\n    restart = false,\r\n    parameters,\r\n  }: CompareActiveNamesOptions): Promise<void> {\r\n    return sharedCompareActiveNames({\r\n      restart,\r\n      parameters: parameters as unknown as Parameters<typeof sharedCompareActiveNames>[0]['parameters'],\r\n    }) as Promise<void>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { compareScreenStates as sharedCompareScreenStates } from 'mediasfu-shared';\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  async compareScreenStates({\r\n    restart = false,\r\n    parameters,\r\n  }: CompareScreenStatesOptions): Promise<void> {\r\n    return sharedCompareScreenStates({\r\n      restart,\r\n      parameters: parameters as unknown as Parameters<typeof sharedCompareScreenStates>[0]['parameters'],\r\n    }) as Promise<void>;\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\nimport { JoinConsumeRoom } from './socket-receive-methods/join-consume-room.service';\r\nimport { connectIps as sharedConnectIps } from 'mediasfu-shared';\r\nimport { types } from 'mediasoup-client';\r\ntype Device = types.Device;\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 newPipeProducerService: NewPipeProducer,\r\n    private producerClosedService: ProducerClosed,\r\n    private joinConsumeRoomService: JoinConsumeRoom,\r\n  ) {}\r\n  connectIps: ConnectIpsType = async ({\r\n    consume_sockets,\r\n    remIP,\r\n    apiUserName,\r\n    apiKey = '',\r\n    apiToken = '',\r\n    newProducerMethod,\r\n    closedProducerMethod,\r\n    joinConsumeRoomMethod,\r\n    parameters,\r\n  }: ConnectIpsOptions): Promise<[Record<string, any>[], string[]]> => {\r\n    const resolvedNewProducerMethod =\r\n      newProducerMethod ??\r\n      this.newPipeProducerService.newPipeProducer.bind(this.newPipeProducerService);\r\n    const resolvedClosedProducerMethod =\r\n      closedProducerMethod ??\r\n      this.producerClosedService.producerClosed.bind(this.producerClosedService);\r\n    const resolvedJoinConsumeRoomMethod =\r\n      joinConsumeRoomMethod ??\r\n      this.joinConsumeRoomService.joinConsumeRoom.bind(this.joinConsumeRoomService);\r\n\r\n    return sharedConnectIps({\r\n      consume_sockets:\r\n        consume_sockets as unknown as Parameters<typeof sharedConnectIps>[0]['consume_sockets'],\r\n      remIP,\r\n      apiUserName,\r\n      apiKey,\r\n      apiToken,\r\n      newProducerMethod:\r\n        resolvedNewProducerMethod as unknown as Parameters<typeof sharedConnectIps>[0]['newProducerMethod'],\r\n      closedProducerMethod:\r\n        resolvedClosedProducerMethod as unknown as Parameters<typeof sharedConnectIps>[0]['closedProducerMethod'],\r\n      joinConsumeRoomMethod:\r\n        resolvedJoinConsumeRoomMethod as unknown as Parameters<typeof sharedConnectIps>[0]['joinConsumeRoomMethod'],\r\n      parameters: parameters as unknown as Parameters<typeof sharedConnectIps>[0]['parameters'],\r\n    }) as unknown as Promise<[Record<string, any>[], string[]]>;\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\nimport { connectLocalIps as sharedConnectLocalIps } from 'mediasfu-shared';\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  connectLocalIps: ConnectLocalIpsType = async ({\r\n    socket,\r\n    newProducerMethod,\r\n    closedProducerMethod,\r\n    parameters,\r\n  }: ConnectLocalIpsOptions): Promise<void> => {\r\n    const resolvedNewProducerMethod =\r\n      newProducerMethod ??\r\n      this.newPipeProducerService.newPipeProducer.bind(this.newPipeProducerService);\r\n    const resolvedClosedProducerMethod =\r\n      closedProducerMethod ??\r\n      this.producerClosedService.producerClosed.bind(this.producerClosedService);\r\n\r\n    return sharedConnectLocalIps({\r\n      socket: socket as unknown as Parameters<typeof sharedConnectLocalIps>[0]['socket'],\r\n      newProducerMethod:\r\n        resolvedNewProducerMethod as unknown as Parameters<typeof sharedConnectLocalIps>[0]['newProducerMethod'],\r\n      closedProducerMethod:\r\n        resolvedClosedProducerMethod as unknown as Parameters<typeof sharedConnectLocalIps>[0]['closedProducerMethod'],\r\n      parameters: parameters as unknown as Parameters<typeof sharedConnectLocalIps>[0]['parameters'],\r\n    }) as Promise<void>;\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { connectRecvTransport as sharedConnectRecvTransport } from 'mediasfu-shared';\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 { types } from 'mediasoup-client';\r\ntype Consumer = types.Consumer;\r\ntype Device = types.Device;\r\ntype Transport = types.Transport;\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    return sharedConnectRecvTransport({\r\n      consumerTransport:\r\n        consumerTransport as unknown as Parameters<typeof sharedConnectRecvTransport>[0]['consumerTransport'],\r\n      remoteProducerId,\r\n      serverConsumerTransportId,\r\n      nsock: nsock as unknown as Parameters<typeof sharedConnectRecvTransport>[0]['nsock'],\r\n      parameters:\r\n        parameters as unknown as Parameters<typeof sharedConnectRecvTransport>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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\nimport { connectSendTransport as sharedConnectSendTransport } from 'mediasfu-shared';\r\n\r\nimport { types } from 'mediasoup-client';\r\ntype ProducerOptions = types.ProducerOptions;\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    return sharedConnectSendTransport({\r\n      option,\r\n      targetOption,\r\n      parameters: parameters as unknown as Parameters<typeof sharedConnectSendTransport>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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\nimport { connectSendTransportAudio as sharedConnectSendTransportAudio } from 'mediasfu-shared';\r\n\r\nimport { types } from 'mediasoup-client';\r\ntype Transport = types.Transport;\r\ntype Producer = types.Producer;\r\ntype ProducerOptions = types.ProducerOptions;\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    return sharedConnectSendTransportAudio({\r\n      audioParams,\r\n      parameters,\r\n    } as unknown as Parameters<typeof sharedConnectSendTransportAudio>[0]) as Promise<void>;\r\n\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 { connectSendTransportScreen as sharedConnectSendTransportScreen } from 'mediasfu-shared';\r\nimport { types } from 'mediasoup-client';\r\ntype Transport = types.Transport;\r\ntype Producer = types.Producer;\r\ntype Device = types.Device;\r\ntype ProducerOptions = types.ProducerOptions;\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    return sharedConnectSendTransportScreen({\r\n      stream,\r\n      parameters,\r\n      targetOption,\r\n    } as unknown as Parameters<typeof sharedConnectSendTransportScreen>[0]) as Promise<void>;\r\n\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 { connectSendTransportVideo as sharedConnectSendTransportVideo } from 'mediasfu-shared';\r\nimport { types } from 'mediasoup-client';\r\ntype Device = types.Device;\r\ntype Producer = types.Producer;\r\ntype ProducerOptions = types.ProducerOptions;\r\ntype Transport = types.Transport;\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    return sharedConnectSendTransportVideo({\r\n      videoParams,\r\n      parameters,\r\n      targetOption,\r\n    } as unknown as Parameters<typeof sharedConnectSendTransportVideo>[0]) as Promise<void>;\r\n\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 {\r\n  Component,\r\n  Input,\r\n  OnInit,\r\n  OnDestroy,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  HostListener,\r\n  Optional,\r\n  Inject,\r\n} 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      [class.modal-container--dragging]=\"isDragging\"\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        <div [ngStyle]=\"getOverlayPosition(overlayPosition)\" class=\"overlay-web\">\r\n          <div class=\"waveform-web\">\r\n            <ng-container *ngIf=\"showWaveform\">\r\n              <div class=\"pulse-ring\" [ngStyle]=\"{ borderColor: barColor, animationDelay: '0s' }\"></div>\r\n              <div class=\"pulse-ring\" [ngStyle]=\"{ borderColor: barColor, animationDelay: '0.5s' }\"></div>\r\n            </ng-container>\r\n\r\n            <div *ngIf=\"!hasRenderableImage\" class=\"avatar-fallback\" [ngStyle]=\"{ borderColor: barColor }\">\r\n              {{ fallbackInitials }}\r\n            </div>\r\n\r\n          <img\r\n            *ngIf=\"hasRenderableImage\"\r\n            [src]=\"imageSource\"\r\n            [ngStyle]=\"getImageStyle()\"\r\n            [alt]=\"name || 'Audio participant'\"\r\n            class=\"background-image\"\r\n            (error)=\"handleImageError()\"\r\n          />\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"name-text\" [ngStyle]=\"combineStyles({ color: textColor }, nameTextStyling)\">\r\n          {{ name }}\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        background-color: transparent;\r\n        z-index: 8;\r\n        elevation: 8;\r\n        cursor: grab;\r\n        user-select: none;\r\n        transition: transform 160ms ease, filter 160ms ease;\r\n      }\r\n\r\n      .modal-container--dragging {\r\n        cursor: grabbing;\r\n        filter: drop-shadow(0 18px 28px rgba(15, 23, 42, 0.32));\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        position: relative;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        overflow: hidden;\r\n        border-radius: 12px;\r\n        border: 1px solid rgba(255, 255, 255, 0.1);\r\n        background: linear-gradient(145deg, rgba(30, 41, 59, 0.95), rgba(15, 23, 42, 0.98));\r\n        box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(255, 255, 255, 0.05);\r\n        backdrop-filter: blur(12px);\r\n      }\r\n\r\n      .background-image {\r\n        position: relative;\r\n        width: 52px;\r\n        height: 52px;\r\n        z-index: 2;\r\n        object-fit: cover;\r\n        border-radius: 50%;\r\n        border: 2px solid rgba(255, 255, 255, 0.2);\r\n        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\r\n      }\r\n\r\n      .avatar-fallback {\r\n        width: 52px;\r\n        height: 52px;\r\n        position: relative;\r\n        z-index: 2;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 50%;\r\n        border: 2px solid;\r\n        background: linear-gradient(135deg, rgba(59, 130, 246, 0.78), rgba(20, 184, 166, 0.74));\r\n        color: #ffffff;\r\n        font-size: 0.8rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.05em;\r\n      }\r\n\r\n      .name-text {\r\n        position: absolute;\r\n        left: 0;\r\n        right: 0;\r\n        bottom: 0;\r\n        font-size: 11px;\r\n        font-weight: 700;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        background: linear-gradient(to top, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.4));\r\n        backdrop-filter: blur(4px);\r\n        width: 100%;\r\n        min-height: 24px;\r\n        padding: 6px 4px;\r\n        text-align: center;\r\n        text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);\r\n        letter-spacing: 0.2px;\r\n        overflow: hidden;\r\n        text-overflow: ellipsis;\r\n        white-space: nowrap;\r\n        z-index: 4;\r\n      }\r\n\r\n      .overlay-web {\r\n        position: absolute;\r\n        inset: 0 0 24px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\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        width: 70px;\r\n        height: 70px;\r\n        position: relative;\r\n        border-radius: 50%;\r\n        padding: 0;\r\n      }\r\n\r\n      .pulse-ring {\r\n        position: absolute;\r\n        inset: 0;\r\n        border-radius: 50%;\r\n        border: 2px solid;\r\n        opacity: 0.6;\r\n        animation: miniAudioPulse 1.5s ease-in-out infinite;\r\n      }\r\n\r\n      @keyframes miniAudioPulse {\r\n        0% {\r\n          transform: scale(1);\r\n          opacity: 0.6;\r\n        }\r\n        50% {\r\n          transform: scale(1.15);\r\n          opacity: 0.3;\r\n        }\r\n        100% {\r\n          transform: scale(1.3);\r\n          opacity: 0;\r\n        }\r\n      }\r\n    `,\r\n    ]\r\n})\r\nexport class MiniAudio implements OnInit, OnDestroy, OnChanges {\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: ReturnType<typeof setInterval>[] = [];\r\n  timeouts: ReturnType<typeof setTimeout>[] = [];\r\n  position = { x: 0, y: 0 };\r\n  isDragging = false;\r\n  dragOffset = { x: 0, y: 0 };\r\n  imageLoadFailed = false;\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    this.syncWaveformState();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['showWaveform']) {\r\n      this.syncWaveformState();\r\n    }\r\n\r\n    if (changes['imageSource']) {\r\n      this.imageLoadFailed = false;\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.clearIntervals();\r\n    this.clearTimeouts();\r\n  }\r\n\r\n  syncWaveformState() {\r\n    if (this.showWaveform) {\r\n      this.animateWaveform();\r\n    } else {\r\n      this.resetWaveform();\r\n    }\r\n  }\r\n\r\n  animateWaveform() {\r\n    this.clearIntervals();\r\n    this.clearTimeouts();\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    const timeout = setTimeout(() => {\r\n      this.waveformAnimations[index] = 0;\r\n    }, this.getAnimationDuration(index));\r\n    this.timeouts.push(timeout);\r\n  }\r\n\r\n  resetWaveform() {\r\n    this.clearIntervals();\r\n    this.clearTimeouts();\r\n    this.waveformAnimations.fill(0);\r\n  }\r\n\r\n  clearIntervals() {\r\n    this.intervals.forEach((interval) => clearInterval(interval));\r\n    this.intervals = [];\r\n  }\r\n\r\n  clearTimeouts() {\r\n    this.timeouts.forEach((timeout) => clearTimeout(timeout));\r\n    this.timeouts = [];\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: '50%' } : {}),\r\n    };\r\n  }\r\n\r\n  get hasRenderableImage(): boolean {\r\n    return Boolean(this.imageSource) && !this.imageLoadFailed;\r\n  }\r\n\r\n  get fallbackInitials(): string {\r\n    const trimmedName = this.name.trim();\r\n    if (!trimmedName) {\r\n      return 'AU';\r\n    }\r\n\r\n    return trimmedName\r\n      .split(/\\s+/)\r\n      .slice(0, 2)\r\n      .map((part) => part.charAt(0).toUpperCase())\r\n      .join('');\r\n  }\r\n\r\n  handleImageError() {\r\n    this.imageLoadFailed = true;\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 { types } from 'mediasoup-client';\r\ntype Consumer = types.Consumer;\r\n\r\ninterface SpeakerTranslationState {\r\n  enabled?: boolean;\r\n  originalProducerId?: string;\r\n}\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  private previousMiniAudioProps: Record<string, any> | null = null;\r\n  private audioStateRetryTimer: ReturnType<typeof setTimeout> | 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.scheduleAudioStateSync();\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    this.clearAudioStateRetryTimer();\r\n  }\r\n\r\n  private clearAudioStateRetryTimer(): void {\r\n    if (this.audioStateRetryTimer) {\r\n      clearTimeout(this.audioStateRetryTimer);\r\n      this.audioStateRetryTimer = null;\r\n    }\r\n  }\r\n\r\n  private getParticipantForProducer(updatedParams: MiniAudioPlayerParameters): Participant | undefined {\r\n    return updatedParams.participants?.find(\r\n      (participant: Participant) => participant.audioID == this.remoteProducerId,\r\n    );\r\n  }\r\n\r\n  private isTranslationAudio(updatedParams: MiniAudioPlayerParameters): boolean {\r\n    const activeTranslationProducerIds = updatedParams.activeTranslationProducerIds as Set<string> | undefined;\r\n\r\n    return Boolean(\r\n      activeTranslationProducerIds?.has(this.remoteProducerId)\r\n      || this.consumer?.appData?.type === 'translation'\r\n      || this.consumer?.appData?.isTranslation,\r\n    );\r\n  }\r\n\r\n  private isTranslationSuppressingOriginal(\r\n    updatedParams: MiniAudioPlayerParameters,\r\n    participant?: Participant,\r\n  ): boolean {\r\n    if (!participant?.name) {\r\n      return false;\r\n    }\r\n\r\n    const speakerTranslationStates = updatedParams.speakerTranslationStates as\r\n      | Map<string, SpeakerTranslationState>\r\n      | undefined;\r\n    const speakerState = speakerTranslationStates?.get(participant.name);\r\n\r\n    return Boolean(\r\n      speakerState?.enabled\r\n      && speakerState.originalProducerId === this.remoteProducerId,\r\n    );\r\n  }\r\n\r\n  private syncAudioElementState(muted: boolean, pausePlayback = false): void {\r\n    const audioElement = this.audioElement?.nativeElement;\r\n\r\n    if (!audioElement) {\r\n      return;\r\n    }\r\n\r\n    audioElement.muted = muted;\r\n\r\n    if (pausePlayback || !this.stream) {\r\n      audioElement.pause();\r\n      return;\r\n    }\r\n\r\n    const playPromise = audioElement.play();\r\n    if (playPromise instanceof Promise) {\r\n      playPromise.catch(() => {\r\n        // Ignore autoplay rejection\r\n      });\r\n    }\r\n  }\r\n\r\n  private scheduleAudioStateSync(): void {\r\n    this.clearAudioStateRetryTimer();\r\n\r\n    let attempts = 0;\r\n    const maxAttempts = 8;\r\n\r\n    const run = () => {\r\n      this.audioStateRetryTimer = null;\r\n\r\n      const updatedParams = this.parameters.getUpdatedAllParams?.() ?? this.parameters;\r\n      const participant = this.getParticipantForProducer(updatedParams);\r\n      const isTranslationAudio = this.isTranslationAudio(updatedParams);\r\n      const translationSuppressingOriginal = this.isTranslationSuppressingOriginal(\r\n        updatedParams,\r\n        participant,\r\n      );\r\n\r\n      if (isTranslationAudio) {\r\n        this.showWaveModal = false;\r\n        this.isMuted = false;\r\n        this.syncAudioElementState(false, false);\r\n      } else {\r\n        this.isMuted = Boolean(participant?.muted) || translationSuppressingOriginal;\r\n        this.syncAudioElementState(this.isMuted, translationSuppressingOriginal);\r\n      }\r\n\r\n      if (!this.stream || attempts >= maxAttempts) {\r\n        return;\r\n      }\r\n\r\n      attempts += 1;\r\n      this.audioStateRetryTimer = setTimeout(run, 120);\r\n    };\r\n\r\n    setTimeout(run, 0);\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        meetingDisplayType,\r\n        participants,\r\n        paginatedStreams,\r\n        currentUserPage,\r\n        adminNameStream,\r\n        dispActiveNames,\r\n        activeSounds,\r\n        autoWave,\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 = this.getParticipantForProducer(updatedParams);\r\n      const isTranslationAudio = this.isTranslationAudio(updatedParams);\r\n      const translationSuppressingOriginal = this.isTranslationSuppressingOriginal(\r\n        updatedParams,\r\n        participant,\r\n      );\r\n\r\n      if (isTranslationAudio) {\r\n        this.showWaveModal = false;\r\n        this.isMuted = false;\r\n        this.syncAudioElementState(false, false);\r\n        return;\r\n      }\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 (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) || translationSuppressingOriginal;\r\n        this.syncAudioElementState(this.isMuted, translationSuppressingOriginal);\r\n\r\n        if (translationSuppressingOriginal) {\r\n          this.showWaveModal = false;\r\n\r\n          if (participant.name && activeSounds.includes(participant.name)) {\r\n            activeSounds.splice(activeSounds.indexOf(participant.name), 1);\r\n          }\r\n\r\n          updateActiveSounds(activeSounds);\r\n          return;\r\n        }\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 =\r\n          paginatedStreams[currentUserPage]?.findIndex(\r\n            (obj: any) => obj.name == participant.name,\r\n          ) ?? -1;\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 (participant.name && !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 (participant.name && 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 (!autoWave) {\r\n              this.showWaveModal = false;\r\n            } else {\r\n              this.showWaveModal = true;\r\n            }\r\n\r\n            if (participant.name && !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 (participant.name && 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        this.syncAudioElementState(true, 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      this.miniAudioProps !== this.previousMiniAudioProps\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      this.previousMiniAudioProps = this.miniAudioProps;\r\n    }\r\n    return this.cachedMiniAudioProps;\r\n  }\r\n}\r\n","<div class=\"container\">\r\n  <audio *ngIf=\"stream\" autoplay playsinline #audioElement [muted]=\"isMuted\" [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 { types } from 'mediasoup-client';\r\ntype Consumer = types.Consumer;\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        const activeTranslationProducerIds = (parameters as any).activeTranslationProducerIds as Set<string> | undefined;\r\n        const isTranslationAudio = Boolean(\r\n          activeTranslationProducerIds?.has(remoteProducerId) ||\r\n          consumer.appData?.type === 'translation' ||\r\n          consumer.appData?.isTranslation,\r\n        );\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 (isTranslationAudio && !name__) {\r\n          const translationMeta = consumer.appData?.translationMeta as {\r\n            speakerName?: string;\r\n            speakerId?: string;\r\n            language?: string;\r\n          } | undefined;\r\n\r\n          name__ = translationMeta?.speakerName || `Translation-${remoteProducerId.slice(0, 8)}`;\r\n        }\r\n\r\n        if (name__ === member && !isTranslationAudio) 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 || isTranslationAudio) {\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 (!isTranslationAudio && !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\r\n          if (isTranslationAudio) {\r\n            return;\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 { createSendTransport as sharedCreateSendTransport } from 'mediasfu-shared';\nimport { Socket } from 'socket.io-client';\nimport { types } from 'mediasoup-client';\ntype Device = types.Device;\ntype Transport = types.Transport;\ntype DtlsParameters = types.DtlsParameters;\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    return sharedCreateSendTransport({\n      option,\n      parameters: parameters as unknown as Parameters<typeof sharedCreateSendTransport>[0]['parameters'],\n    }) as Promise<void>;\n\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 { disconnectSendTransportAudio as sharedDisconnectSendTransportAudio } from 'mediasfu-shared';\r\nimport { Socket } from 'socket.io-client';\r\nimport { PrepopulateUserMediaType, PrepopulateUserMediaParameters } from '../@types/types';\r\nimport { types } from 'mediasoup-client';\r\ntype Producer = types.Producer;\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    return sharedDisconnectSendTransportAudio({\r\n      parameters: parameters as unknown as Parameters<typeof sharedDisconnectSendTransportAudio>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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 { disconnectSendTransportVideo as sharedDisconnectSendTransportVideo } from 'mediasfu-shared';\r\nimport { types } from 'mediasoup-client';\r\ntype Producer = types.Producer;\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    return sharedDisconnectSendTransportVideo({\r\n      parameters: parameters as unknown as Parameters<typeof sharedDisconnectSendTransportVideo>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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 { disconnectSendTransportScreen as sharedDisconnectSendTransportScreen } from 'mediasfu-shared';\r\nimport { types } from 'mediasoup-client';\r\ntype Producer = types.Producer;\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    return sharedDisconnectSendTransportScreen({\r\n      parameters: parameters as unknown as Parameters<typeof sharedDisconnectSendTransportScreen>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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\nimport { dispStreams as sharedDispStreams } from 'mediasfu-shared';\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  breakOutRoomStarted: boolean;\r\n  breakOutRoomEnded: boolean;\r\n  keepBackground: boolean;\r\n  virtualStream: MediaStream | null;\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  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  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\nexport type DispStreamsType = (options: DispStreamsOptions) => Promise<void>;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class DispStreams {\r\n  async dispStreams({\r\n    lStreams,\r\n    ind,\r\n    auto = false,\r\n    ChatSkip = false,\r\n    forChatCard,\r\n    forChatID = null,\r\n    parameters,\r\n    breakRoom = -1,\r\n    inBreakRoom = false,\r\n  }: DispStreamsOptions): Promise<void> {\r\n    return sharedDispStreams({\r\n      lStreams,\r\n      ind,\r\n      auto,\r\n      ChatSkip,\r\n      forChatCard,\r\n      forChatID,\r\n      parameters,\r\n      breakRoom,\r\n      inBreakRoom,\r\n    } as unknown as Parameters<typeof sharedDispStreams>[0]) as Promise<void>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { generatePageContent as sharedGeneratePageContent } from 'mediasfu-shared';\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  async generatePageContent({\r\n    page,\r\n    parameters,\r\n    breakRoom = -1,\r\n    inBreakRoom = false,\r\n  }: GeneratePageContentOptions): Promise<void> {\r\n    return sharedGeneratePageContent({\r\n      page,\r\n      parameters: parameters.getUpdatedAllParams(),\r\n      breakRoom,\r\n      inBreakRoom,\r\n    } as unknown as Parameters<typeof sharedGeneratePageContent>[0]) as Promise<void>;\r\n  }\r\n}\r\n","// estimate.service.ts\r\nimport { Injectable } from '@angular/core';\r\nimport { getEstimate as sharedGetEstimate } from 'mediasfu-shared';\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  getEstimate({ n, parameters }: GetEstimateOptions): [number, number, number] {\r\n    return sharedGetEstimate({\r\n      n,\r\n      parameters: parameters as unknown as Parameters<typeof sharedGetEstimate>[0]['parameters'],\r\n    }) as [number, number, number];\r\n  }\r\n}\r\n","// piped-producers.service.ts\r\nimport { Injectable } from '@angular/core';\r\nimport { getPipedProducersAlt as sharedGetPipedProducersAlt } from 'mediasfu-shared';\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    return sharedGetPipedProducersAlt({\r\n      community,\r\n      nsock,\r\n      islevel,\r\n      parameters,\r\n    } as unknown as Parameters<typeof sharedGetPipedProducersAlt>[0]) as Promise<void>;\r\n\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 { getProducersPiped as sharedGetProducersPiped } from 'mediasfu-shared';\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    return sharedGetProducersPiped({\r\n      nsock,\r\n      islevel,\r\n      parameters,\r\n    } as unknown as Parameters<typeof sharedGetProducersPiped>[0]) as Promise<void>;\r\n\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 { getVideos as sharedGetVideos } from 'mediasfu-shared';\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    return sharedGetVideos({\r\n      participants,\r\n      allVideoStreams,\r\n      oldAllStreams,\r\n      adminVidID,\r\n      updateAllVideoStreams,\r\n      updateOldAllStreams,\r\n    } as unknown as Parameters<typeof sharedGetVideos>[0]) as Promise<void>;\r\n\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\nimport { mixStreams as sharedMixStreams } from 'mediasfu-shared';\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  async mixStreams({\r\n    alVideoStreams,\r\n    non_alVideoStreams,\r\n    ref_participants,\r\n  }: MixStreamsOptions): Promise<(Stream | Participant)[]> {\r\n    return sharedMixStreams({\r\n      alVideoStreams,\r\n      non_alVideoStreams,\r\n      ref_participants,\r\n    } as unknown as Parameters<typeof sharedMixStreams>[0]) as Promise<(Stream | Participant)[]>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ReorderStreamsType, ReorderStreamsParameters, EventType } from '../@types/types';\r\nimport { onScreenChanges as sharedOnScreenChanges } from 'mediasfu-shared';\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  async onScreenChanges({\r\n    changed = false,\r\n    parameters,\r\n  }: OnScreenChangesOptions): Promise<void> {\r\n    return sharedOnScreenChanges({\r\n      changed,\r\n      parameters: parameters as unknown as Parameters<typeof sharedOnScreenChanges>[0]['parameters'],\r\n    }) as Promise<void>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { MiniCard } from '../components/display-components/mini-card/mini-card.component';\nimport { VideoCard } from '../components/display-components/video-card/video-card.component';\nimport { AudioCard } from '../components/display-components/audio-card/audio-card.component';\nimport {\n  Participant,\n  Stream,\n  AudioCardParameters,\n  EventType,\n  CustomMediaComponent,\n} from '../@types/types';\n\nexport interface PrepopulateUserMediaParameters extends AudioCardParameters {\n  participants: Participant[];\n  allVideoStreams: (Stream | Participant)[];\n  islevel: string;\n  member: string;\n  shared: boolean;\n  shareScreenStarted: boolean;\n  eventType: EventType;\n  screenId?: string;\n  forceFullDisplay: boolean;\n  updateMainWindow: boolean;\n  mainScreenFilled: boolean;\n  adminOnMainScreen: boolean;\n  mainScreenPerson: string;\n  videoAlreadyOn: boolean;\n  audioAlreadyOn: boolean;\n  oldAllStreams: (Stream | Participant)[];\n  checkOrientation: () => string;\n  screenForceFullDisplay: boolean;\n  localStreamScreen: MediaStream | null;\n  remoteScreenStream: Stream[];\n  localStreamVideo: MediaStream | null;\n  mainHeightWidth: number;\n  isWideScreen: boolean;\n  localUIMode: boolean;\n  whiteboardStarted: boolean;\n  whiteboardEnded: boolean;\n  virtualStream: MediaStream | null;\n  keepBackground: boolean;\n  annotateScreenStream: boolean;\n  updateMainScreenPerson: (person: string) => void;\n  updateMainScreenFilled: (filled: boolean) => void;\n  updateAdminOnMainScreen: (admin: boolean) => void;\n  updateMainHeightWidth: (heightWidth: number) => void;\n  updateScreenForceFullDisplay: (force: boolean) => void;\n  updateUpdateMainWindow: (update: boolean) => void;\n  updateMainGridStream: (components: CustomMediaComponent[]) => void;\n\n  // Custom component builders\n  customVideoCard?: any;\n  customAudioCard?: any;\n  customMiniCard?: any;\n\n  // Override-provided components\n  videoCardComponent?: any;\n  audioCardComponent?: any;\n  miniCardComponent?: any;\n\n  // mediasfu functions\n  getUpdatedAllParams: () => PrepopulateUserMediaParameters;\n  [key: string]: any;\n}\n\nexport interface PrepopulateUserMediaOptions {\n  name: string;\n  parameters: PrepopulateUserMediaParameters;\n}\n\n// Export the type definition for the function\nexport type PrepopulateUserMediaType = (options: {\n  name: string;\n  parameters: any;\n}) => Promise<{ component: any; inputs: any }[] | void>;\n\n/**\n * Prepopulates the user media based on the provided options.\n *\n * This method prepares the UI components for the user's media based on the event type and participant information.\n * It manages the display of video and audio cards, mini cards, and handles screen sharing scenarios.\n *\n * @param {PrepopulateUserMediaOptions} options - The options for prepopulating user media.\n * @param {string} options.name - The name of the user.\n * @param {PrepopulateUserMediaParameters} options.parameters - The parameters for prepopulating user media.\n * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\n * @param {Array<Participant>} options.parameters.participants - List of participants.\n * @param {Array<Stream>} options.parameters.allVideoStreams - List of all video streams.\n * @param {string} options.parameters.islevel - The level of the user.\n * @param {string} options.parameters.member - The member name.\n * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\n * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.\n * @param {string} options.parameters.eventType - The type of event (e.g., \"broadcast\", \"chat\", \"conference\").\n * @param {string} options.parameters.screenId - The ID of the screen.\n * @param {boolean} options.parameters.forceFullDisplay - Indicates if full display is forced.\n * @param {Function} options.parameters.updateMainWindow - Function to update the main window.\n * @param {boolean} options.parameters.mainScreenFilled - Indicates if the main screen is filled.\n * @param {boolean} options.parameters.adminOnMainScreen - Indicates if admin is on the main screen.\n * @param {string} options.parameters.mainScreenPerson - The person on the main screen.\n * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is already on.\n * @param {boolean} options.parameters.audioAlreadyOn - Indicates if the audio is already on.\n * @param {Array<Stream>} options.parameters.oldAllStreams - List of old all streams.\n * @param {Function} options.parameters.checkOrientation - Function to check orientation.\n * @param {boolean} options.parameters.screenForceFullDisplay - Indicates if screen force full display is enabled.\n * @param {Stream} options.parameters.localStreamScreen - The local screen stream.\n * @param {Array<Stream>} options.parameters.remoteScreenStream - List of remote screen streams.\n * @param {Stream} options.parameters.localStreamVideo - The local video stream.\n * @param {number} options.parameters.mainHeightWidth - The main height and width.\n * @param {boolean} options.parameters.isWideScreen - Indicates if the screen is wide.\n * @param {boolean} options.parameters.localUIMode - Indicates if local UI mode is enabled.\n * @param {boolean} options.parameters.whiteboardStarted - Indicates if whiteboard has started.\n * @param {boolean} options.parameters.whiteboardEnded - Indicates if whiteboard has ended.\n * @param {Stream} options.parameters.virtualStream - The virtual stream.\n * @param {boolean} options.parameters.keepBackground - Indicates if background should be kept.\n * @param {Stream} options.parameters.annotateScreenStream - The annotate screen stream.\n * @param {Function} options.parameters.updateMainScreenPerson - Function to update the main screen person.\n * @param {Function} options.parameters.updateMainScreenFilled - Function to update if the main screen is filled.\n * @param {Function} options.parameters.updateAdminOnMainScreen - Function to update if admin is on the main screen.\n * @param {Function} options.parameters.updateMainHeightWidth - Function to update the main height and width.\n * @param {Function} options.parameters.updateScreenForceFullDisplay - Function to update screen force full display.\n * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window update status.\n * @param {Function} options.parameters.updateMainGridStream - Function to update the main grid stream.\n *\n * @returns {Promise<{ component: any; inputs: any }[] | void>} A promise that resolves with the components and inputs or void.\n *\n * @throws {Error} Throws an error if there is an issue preparing and populating the main screen.\n *\n * @example\n * ```typescript\n * const options = {\n *   name: 'John Doe',\n *   parameters: {\n *     getUpdatedAllParams: () => { },\n *     participants: [],\n *     allVideoStreams: [],\n *     islevel: '1',\n *     member: 'John',\n *     shared: false,\n *     shareScreenStarted: false,\n *     eventType: 'conference',\n *     screenId: 'screen123',\n *     forceFullDisplay: false,\n *     updateMainWindow: false,\n *     mainScreenFilled: false,\n *     adminOnMainScreen: false,\n *     mainScreenPerson: '',\n *     videoAlreadyOn: false,\n *     audioAlreadyOn: false,\n *     oldAllStreams: [],\n *     checkOrientation: () => 'landscape',\n *     screenForceFullDisplay: false,\n *     localStreamScreen: null,\n *     remoteScreenStream: [],\n *     localStreamVideo: null,\n *     mainHeightWidth: 100,\n *     isWideScreen: true,\n *     localUIMode: false,\n *     whiteboardStarted: false,\n *     whiteboardEnded: false,\n *     virtualStream: null,\n *     keepBackground: false,\n *     annotateScreenStream: false,\n *     updateMainScreenPerson: (person) => { console.log(updated) },\n *     updateMainScreenFilled: (filled) => { console.log(updated) },\n *     updateAdminOnMainScreen: (admin) => { console.log(updated) },\n *     updateMainHeightWidth: (heightWidth) => { console.log(updated) },\n *     updateScreenForceFullDisplay: (force) => { console.log(updated) },\n *     updateUpdateMainWindow: (update) => { console.log(updated) },\n *     updateMainGridStream: (components) => { console.log(updated) },\n *   },\n * };\n *\n * await prepopulateUserMedia(options);\n * ```\n */\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PrepopulateUserMedia {\n  /**\n   * Prepopulates the user media based on the provided options.\n   *\n   * @param {PrepopulateUserMediaOptions} options - The options for prepopulating user media.\n   * @param {string} options.name - The name of the user.\n   * @param {Parameters} options.parameters - The parameters for prepopulating user media.\n   * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.\n   * @param {Array<Participant>} options.parameters.participants - List of participants.\n   * @param {Array<Stream>} options.parameters.allVideoStreams - List of all video streams.\n   * @param {string} options.parameters.islevel - The level of the user.\n   * @param {string} options.parameters.member - The member name.\n   * @param {boolean} options.parameters.shared - Indicates if the screen is shared.\n   * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.\n   * @param {string} options.parameters.eventType - The type of event.\n   * @param {string} options.parameters.screenId - The screen ID.\n   * @param {boolean} options.parameters.forceFullDisplay - Indicates if full display is forced.\n   * @param {Function} options.parameters.updateMainWindow - Function to update the main window.\n   * @param {boolean} options.parameters.mainScreenFilled - Indicates if the main screen is filled.\n   * @param {boolean} options.parameters.adminOnMainScreen - Indicates if admin is on the main screen.\n   * @param {string} options.parameters.mainScreenPerson - The person on the main screen.\n   * @param {boolean} options.parameters.videoAlreadyOn - Indicates if the video is already on.\n   * @param {boolean} options.parameters.audioAlreadyOn - Indicates if the audio is already on.\n   * @param {Array<Stream>} options.parameters.oldAllStreams - List of old all streams.\n   * @param {Function} options.parameters.checkOrientation - Function to check orientation.\n   * @param {boolean} options.parameters.screenForceFullDisplay - Indicates if screen force full display is enabled.\n   * @param {Stream} options.parameters.localStreamScreen - The local screen stream.\n   * @param {Array<Stream>} options.parameters.remoteScreenStream - List of remote screen streams.\n   * @param {Stream} options.parameters.localStreamVideo - The local video stream.\n   * @param {number} options.parameters.mainHeightWidth - The main height and width.\n   * @param {boolean} options.parameters.isWideScreen - Indicates if the screen is wide.\n   * @param {boolean} options.parameters.localUIMode - Indicates if local UI mode is enabled.\n   * @param {boolean} options.parameters.whiteboardStarted - Indicates if whiteboard has started.\n   * @param {boolean} options.parameters.whiteboardEnded - Indicates if whiteboard has ended.\n   * @param {Stream} options.parameters.virtualStream - The virtual stream.\n   * @param {boolean} options.parameters.keepBackground - Indicates if background should be kept.\n   * @param {Stream} options.parameters.annotateScreenStream - The annotate screen stream.\n   * @param {Function} options.parameters.updateMainScreenPerson - Function to update the main screen person.\n   * @param {Function} options.parameters.updateMainScreenFilled - Function to update if the main screen is filled.\n   * @param {Function} options.parameters.updateAdminOnMainScreen - Function to update if admin is on the main screen.\n   * @param {Function} options.parameters.updateMainHeightWidth - Function to update the main height and width.\n   * @param {Function} options.parameters.updateScreenForceFullDisplay - Function to update screen force full display.\n   * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window update status.\n   * @param {Function} options.parameters.updateMainGridStream - Function to update the main grid stream.\n   *\n   * @returns {Promise<{ component: any, inputs: any }[] | void>} A promise that resolves with the components and inputs or void.\n   */\n  prepopulateUserMedia = async ({\n    name,\n    parameters,\n  }: PrepopulateUserMediaOptions): Promise<{ component: any; inputs: any }[] | void> => {\n    try {\n      // Destructure parameters\n\n      let { getUpdatedAllParams } = parameters;\n      parameters = getUpdatedAllParams();\n\n      let {\n        participants,\n        allVideoStreams,\n        islevel,\n        member,\n        shared,\n        shareScreenStarted,\n        eventType,\n        screenId,\n        forceFullDisplay,\n        updateMainWindow,\n        mainScreenFilled,\n        adminOnMainScreen,\n        mainScreenPerson,\n        videoAlreadyOn,\n        audioAlreadyOn,\n        oldAllStreams,\n        checkOrientation,\n        screenForceFullDisplay,\n\n        localStreamScreen,\n        remoteScreenStream,\n        localStreamVideo,\n        mainHeightWidth,\n        isWideScreen,\n        localUIMode,\n        whiteboardStarted,\n        whiteboardEnded,\n\n        virtualStream,\n        keepBackground,\n        annotateScreenStream,\n\n        updateMainScreenPerson,\n        updateMainScreenFilled,\n        updateAdminOnMainScreen,\n        updateMainHeightWidth,\n        updateScreenForceFullDisplay,\n        updateUpdateMainWindow,\n        updateMainGridStream,\n        customVideoCard,\n        customAudioCard,\n        customMiniCard,\n        videoCardComponent,\n        audioCardComponent,\n        miniCardComponent,\n      } = parameters;\n\n      const VideoCardComponentOverride = videoCardComponent ?? VideoCard;\n      const AudioCardComponentOverride = audioCardComponent ?? AudioCard;\n      const MiniCardComponentOverride = miniCardComponent ?? MiniCard;\n\n      // If the event type is 'chat', return early\n      if (eventType == 'chat') {\n        return;\n      }\n\n      // Initialize variables\n      let host: Participant | null;\n      let hostStream: any;\n      let newComponents: { component: any; inputs: any }[] = [];\n\n      // Check if screen sharing is started or shared\n      if (shareScreenStarted || shared) {\n        // Handle main grid visibility based on the event type\n        if (eventType == 'conference') {\n          if (shared || shareScreenStarted) {\n            if (mainHeightWidth == 0) {\n              // Add the main grid if not present\n              updateMainHeightWidth(84);\n            }\n          } else {\n            // Remove the main grid if not shared or started\n            updateMainHeightWidth(0);\n          }\n        }\n\n        // Switch display to optimize for screen share\n        screenForceFullDisplay = forceFullDisplay;\n\n        updateScreenForceFullDisplay(screenForceFullDisplay);\n\n        // Get the orientation and adjust forceFullDisplay\n        let orientation = checkOrientation();\n        if (orientation == 'portrait' || !isWideScreen) {\n          if (shareScreenStarted || shared) {\n            screenForceFullDisplay = false;\n            updateScreenForceFullDisplay(screenForceFullDisplay);\n          }\n        }\n\n        // Check if the user is sharing the screen\n        if (shared) {\n          // User is sharing\n          host = { name: member, audioID: '', videoID: '' };\n          hostStream = localStreamScreen;\n\n          // Update admin on the main screen\n          adminOnMainScreen = islevel == '2';\n          updateAdminOnMainScreen(adminOnMainScreen);\n\n          // Update main screen person\n          mainScreenPerson = host.name || '';\n          updateMainScreenPerson(mainScreenPerson);\n        } else {\n          //someone else is sharing\n          host =\n            participants.find(\n              (participant: Participant) =>\n                participant.ScreenID == screenId && participant.ScreenOn == true,\n            ) ?? null;\n\n          if (whiteboardStarted && !whiteboardEnded) {\n            host = { name: 'WhiteboardActive', islevel: '2', audioID: '', videoID: '' };\n            hostStream = { producerId: 'WhiteboardActive' };\n          }\n\n          if (host == null) {\n            // remoteScreenStream\n            host =\n              participants.find((participant: Participant) => participant.ScreenOn == true) ?? null;\n          }\n\n          // check remoteScreenStream\n          if (host != null && !host?.name?.includes('WhiteboardActive')) {\n            if (remoteScreenStream.length == 0) {\n              hostStream =\n                allVideoStreams.find(\n                  (stream: Stream | Participant) => stream.producerId == host?.ScreenID,\n                ) ?? null;\n            } else {\n              hostStream = remoteScreenStream[0];\n            }\n          }\n\n          // Update admin on the main screen\n          adminOnMainScreen = (host && host.islevel == '2') ?? false;\n          updateAdminOnMainScreen(adminOnMainScreen);\n\n          // Update main screen person\n          mainScreenPerson = host?.name ?? '';\n          updateMainScreenPerson(mainScreenPerson);\n        }\n      } else {\n        // Screen share not started\n        if (eventType == 'conference') {\n          // No main grid for conferences\n          return;\n        }\n\n        // Find the host with level '2'\n        host = participants.find((participant: Participant) => participant.islevel == '2') ?? null;\n\n        // Update main screen person\n        mainScreenPerson = host?.name ?? '';\n        updateMainScreenPerson(mainScreenPerson);\n      }\n\n      // If host is not null, check if host videoIsOn\n      const modernMainMiniCardStyle = {\n        background:\n          'radial-gradient(circle at 50% 42%, rgba(79, 70, 229, 0.16) 0%, rgba(79, 70, 229, 0.06) 22%, transparent 52%), radial-gradient(circle at 78% 18%, rgba(20, 184, 166, 0.18) 0%, transparent 38%)',\n        border: 'none',\n        backdropFilter: 'blur(14px)',\n      };\n\n      if (host) {\n        // Populate the main screen with the host video\n        if (shareScreenStarted || shared) {\n          forceFullDisplay = screenForceFullDisplay;\n          if (whiteboardStarted && !whiteboardEnded) {\n            // Whiteboard is active\n          } else {\n            newComponents.push({\n              component: customVideoCard || VideoCardComponentOverride,\n              inputs: {\n                videoStream: shared ? hostStream : hostStream.stream,\n                remoteProducerId: host.ScreenID,\n                eventType,\n                forceFullDisplay: annotateScreenStream && shared ? false : forceFullDisplay,\n                participant: host,\n                backgroundColor: 'rgba(217, 227, 234, 0.99)',\n                showControls: false,\n                showInfo: true,\n                name: host.name,\n                doMirror: false,\n                parameters,\n              },\n            });\n          }\n\n          updateMainGridStream(newComponents);\n\n          mainScreenFilled = true;\n          updateMainScreenFilled(mainScreenFilled);\n          adminOnMainScreen = host.islevel == '2';\n          updateAdminOnMainScreen(adminOnMainScreen);\n          mainScreenPerson = host.name ?? '';\n          updateMainScreenPerson(mainScreenPerson);\n\n          return newComponents;\n        }\n\n        // Check if video is already on or not\n        if (\n          (islevel != '2' && !host['videoOn']) ||\n          (islevel == '2' && (!host['videoOn'] || !videoAlreadyOn)) ||\n          localUIMode == true\n        ) {\n          // Video is off\n          if (islevel == '2' && videoAlreadyOn) {\n            // Admin's video is on\n            newComponents.push({\n              component: customVideoCard || VideoCardComponentOverride,\n              inputs: {\n                videoStream: keepBackground && virtualStream ? virtualStream : localStreamVideo,\n                remoteProducerId: host.videoID,\n                eventType,\n                forceFullDisplay,\n                participant: host,\n                backgroundColor: 'rgba(217, 227, 234, 0.99)',\n                showControls: false,\n                showInfo: true,\n                name: host.name,\n                doMirror: true,\n                parameters,\n              },\n            });\n            updateMainGridStream(newComponents);\n\n            mainScreenFilled = true;\n            updateMainScreenFilled(mainScreenFilled);\n            adminOnMainScreen = true;\n            updateAdminOnMainScreen(adminOnMainScreen);\n            mainScreenPerson = host.name ?? '';\n            updateMainScreenPerson(mainScreenPerson);\n          } else {\n            // Video is off and not admin\n            let audOn;\n\n            if (islevel == '2' && audioAlreadyOn) {\n              audOn = true;\n            } else {\n              if (host != null && islevel != '2') {\n                audOn = host['muted'] == false;\n              }\n            }\n\n            if (audOn) {\n              // Audio is on\n              try {\n                newComponents.push({\n                  component: customAudioCard || AudioCardComponentOverride,\n                  inputs: {\n                    name: host.name,\n                    barColor: 'red',\n                    textColor: 'white',\n                    controlsPosition: 'topLeft',\n                    infoPosition: 'topRight',\n                    showWaveform: true,\n                    roundedImage: true,\n                    parameters: parameters,\n                    showControls: false,\n                  },\n                });\n\n                updateMainGridStream(newComponents);\n              } catch (error) {\n                // Handle audio card creation error\n              }\n\n              mainScreenFilled = true;\n              updateMainScreenFilled(mainScreenFilled);\n              adminOnMainScreen = islevel == '2';\n              updateAdminOnMainScreen(adminOnMainScreen);\n              mainScreenPerson = host.name ?? '';\n              updateMainScreenPerson(mainScreenPerson);\n            } else {\n              // Audio is off\n              try {\n                newComponents.push({\n                  component: customMiniCard || MiniCardComponentOverride,\n                  inputs: {\n                    initials: name,\n                    fontSize: 22,\n                    customStyle: modernMainMiniCardStyle,\n                  },\n                });\n                updateMainGridStream(newComponents);\n              } catch (error) {\n                // Handle mini card creation error\n              }\n\n              mainScreenFilled = false;\n              updateMainScreenFilled(mainScreenFilled);\n              adminOnMainScreen = islevel == '2';\n              updateAdminOnMainScreen(adminOnMainScreen);\n              mainScreenPerson = host.name ?? '';\n              updateMainScreenPerson(mainScreenPerson);\n            }\n          }\n        } else {\n          // Video is on\n          if (shareScreenStarted || shared) {\n            // Screen share is on\n            if (whiteboardStarted && !whiteboardEnded) {\n              // Whiteboard is active\n            } else {\n              try {\n                newComponents.push({\n                  component: customVideoCard || VideoCardComponentOverride,\n                  inputs: {\n                    videoStream: shared ? hostStream : hostStream.stream,\n                    remoteProducerId: host.ScreenID,\n                    eventType,\n                    forceFullDisplay,\n                    participant: host,\n                    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n                    showControls: false,\n                    showInfo: true,\n                    name: host.name,\n                    doMirror: false,\n                    parameters,\n                  },\n                });\n\n                updateMainGridStream(newComponents);\n\n                mainScreenFilled = true;\n                updateMainScreenFilled(mainScreenFilled);\n                adminOnMainScreen = host.islevel == '2';\n                updateAdminOnMainScreen(adminOnMainScreen);\n                mainScreenPerson = host.name ?? '';\n                updateMainScreenPerson(mainScreenPerson);\n              } catch (error) {\n                // Handle video card creation error\n              }\n            }\n          } else {\n            // Screen share is off\n            let streame;\n            if (islevel == '2') {\n              host['stream'] = keepBackground && virtualStream ? virtualStream : localStreamVideo;\n            } else {\n              streame = oldAllStreams.find(\n                (streame: Stream | Participant) => streame.producerId == host.videoID,\n              );\n              host['stream'] = streame && streame.stream;\n            }\n\n            try {\n              if (host['stream']) {\n                newComponents.push({\n                  component: customVideoCard || VideoCardComponentOverride,\n                  inputs: {\n                    videoStream: host['stream'],\n                    remoteProducerId: host.videoID,\n                    eventType,\n                    forceFullDisplay,\n                    participant: host,\n                    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n                    showControls: false,\n                    showInfo: true,\n                    name: host.name,\n                    doMirror: member == host.name,\n                    parameters,\n                  },\n                });\n\n                updateMainGridStream(newComponents);\n\n                mainScreenFilled = true;\n                adminOnMainScreen = host.islevel == '2';\n                mainScreenPerson = host.name ?? '';\n              } else {\n                newComponents.push({\n                  component: customMiniCard || MiniCardComponentOverride,\n                  inputs: {\n                    initials: name,\n                    fontSize: 22,\n                    customStyle: modernMainMiniCardStyle,\n                  },\n                });\n\n                updateMainGridStream(newComponents);\n                mainScreenFilled = false;\n                adminOnMainScreen = islevel == '2';\n                mainScreenPerson = host.name ?? '';\n              }\n\n              updateMainScreenFilled(mainScreenFilled);\n\n              updateAdminOnMainScreen(adminOnMainScreen);\n\n              updateMainScreenPerson(mainScreenPerson);\n            } catch (error) {\n              // Handle video card creation error\n            }\n          }\n        }\n      } else {\n        // Host is null, add a mini card\n        try {\n          newComponents.push({\n            component: customMiniCard || MiniCardComponentOverride,\n            inputs: {\n              initials: name,\n              fontSize: 22,\n              customStyle: modernMainMiniCardStyle,\n            },\n          });\n\n          updateMainGridStream(newComponents);\n\n          mainScreenFilled = false;\n          adminOnMainScreen = false;\n          mainScreenPerson = '';\n          updateMainScreenFilled(mainScreenFilled);\n          updateAdminOnMainScreen(adminOnMainScreen);\n          updateMainScreenPerson(mainScreenPerson);\n        } catch (error) {\n          // Handle mini card creation error\n        }\n      }\n\n      updateMainWindow = false;\n      updateUpdateMainWindow(updateMainWindow);\n\n      return newComponents;\n    } catch (error: any) {\n      // Handle errors during the process of preparing and populating the main screen\n      console.log('Error preparing and populating the main screen:', error.message);\n      return [];\n    }\n  };\n}\n","import { Injectable } from '@angular/core';\r\nimport { Stream, Participant, Transport, SleepType } from '../@types/types';\r\nimport { processConsumerTransports as sharedProcessConsumerTransports } from 'mediasfu-shared';\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\nexport type ProcessConsumerTransportsType = (\r\n  options: ProcessConsumerTransportsOptions,\r\n) => Promise<void>;\r\n\r\n/**\r\n * @service ProcessConsumerTransports\r\n * @description Service adapter for the shared consumer transport pause/resume orchestration.\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ProcessConsumerTransports {\r\n  async processConsumerTransports({\r\n    consumerTransports,\r\n    lStreams_,\r\n    parameters,\r\n  }: ProcessConsumerTransportsOptions): Promise<void> {\r\n    return sharedProcessConsumerTransports({\r\n      consumerTransports,\r\n      lStreams_,\r\n      parameters,\r\n    } as unknown as Parameters<typeof sharedProcessConsumerTransports>[0]) as Promise<void>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Stream, Transport, Participant, SleepType } from '../@types/types';\r\nimport { processConsumerTransportsAudio as sharedProcessConsumerTransportsAudio } from 'mediasfu-shared';\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  async processConsumerTransportsAudio({\r\n    consumerTransports,\r\n    lStreams,\r\n    parameters,\r\n  }: ProcessConsumerTransportsAudioOptions): Promise<void> {\r\n    return sharedProcessConsumerTransportsAudio({\r\n      consumerTransports,\r\n      lStreams,\r\n      parameters,\r\n    } as unknown as Parameters<typeof sharedProcessConsumerTransportsAudio>[0]) as Promise<void>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { readjust as sharedReadjust } from 'mediasfu-shared';\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    return sharedReadjust({\r\n      n,\r\n      state,\r\n      parameters: parameters as unknown as Parameters<typeof sharedReadjust>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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 { receiveAllPipedTransports as sharedReceiveAllPipedTransports } from 'mediasfu-shared';\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    return sharedReceiveAllPipedTransports({\r\n      nsock,\r\n      community,\r\n      parameters,\r\n    } as unknown as Parameters<typeof sharedReceiveAllPipedTransports>[0]) as Promise<void>;\r\n\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\nimport { reorderStreams as sharedReorderStreams } from 'mediasfu-shared';\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  async reorderStreams({\r\n    add = false,\r\n    screenChanged = false,\r\n    parameters,\r\n  }: ReorderStreamsOptions): Promise<void> {\r\n    return sharedReorderStreams({\r\n      add,\r\n      screenChanged,\r\n      parameters: parameters as unknown as Parameters<typeof sharedReorderStreams>[0]['parameters'],\r\n    }) as Promise<void>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { rePort as sharedRePort } from 'mediasfu-shared';\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    return sharedRePort({\r\n      restart,\r\n      parameters: parameters as unknown as Parameters<typeof sharedRePort>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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 { requestScreenShare as sharedRequestScreenShare } from 'mediasfu-shared';\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    return sharedRequestScreenShare({\r\n      parameters: parameters as unknown as Parameters<typeof sharedRequestScreenShare>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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 { resumePauseAudioStreams as sharedResumePauseAudioStreams } from 'mediasfu-shared';\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    return sharedResumePauseAudioStreams({\r\n      breakRoom,\r\n      inBreakRoom,\r\n      parameters: parameters as unknown as Parameters<typeof sharedResumePauseAudioStreams>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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 { resumePauseStreams as sharedResumePauseStreams } from 'mediasfu-shared';\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    return sharedResumePauseStreams({\r\n      parameters: parameters as unknown as Parameters<typeof sharedResumePauseStreams>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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 { resumeSendTransportAudio as sharedResumeSendTransportAudio } from 'mediasfu-shared';\r\nimport { types } from 'mediasoup-client';\r\ntype Producer = types.Producer;\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    return sharedResumeSendTransportAudio({\r\n      parameters: parameters as unknown as Parameters<typeof sharedResumeSendTransportAudio>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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 { reUpdateInter as sharedReUpdateInter } from 'mediasfu-shared';\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  async reUpdateInter({\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    return sharedReUpdateInter({\r\n      name,\r\n      add,\r\n      force,\r\n      average,\r\n      parameters: parameters as unknown as Parameters<typeof sharedReUpdateInter>[0]['parameters'],\r\n    }) as Promise<void>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { signalNewConsumerTransport as sharedSignalNewConsumerTransport } from 'mediasfu-shared';\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 { types } from 'mediasoup-client';\r\ntype Device = types.Device;\r\ntype DtlsParameters = types.DtlsParameters;\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    return sharedSignalNewConsumerTransport({\r\n      remoteProducerId,\r\n      islevel,\r\n      nsock,\r\n      parameters,\r\n    } as unknown as Parameters<typeof sharedSignalNewConsumerTransport>[0]) as Promise<string[] | void>;\r\n\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 { startShareScreen as sharedStartShareScreen } from 'mediasfu-shared';\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    return sharedStartShareScreen({\r\n      parameters: parameters as unknown as Parameters<typeof sharedStartShareScreen>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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 { stopShareScreen as sharedStopShareScreen } from 'mediasfu-shared';\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    return sharedStopShareScreen({\n      parameters: parameters as unknown as Parameters<typeof sharedStopShareScreen>[0]['parameters'],\n    }) as Promise<void>;\n\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 { streamSuccessAudio as sharedStreamSuccessAudio } from 'mediasfu-shared';\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 { types } from 'mediasoup-client';\r\ntype ProducerOptions = types.ProducerOptions;\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    return sharedStreamSuccessAudio({\r\n      stream,\r\n      parameters,\r\n    } as unknown as Parameters<typeof sharedStreamSuccessAudio>[0]) as Promise<void>;\r\n\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 { streamSuccessAudioSwitch as sharedStreamSuccessAudioSwitch } from 'mediasfu-shared';\r\nimport { types } from 'mediasoup-client';\r\ntype Producer = types.Producer;\r\ntype ProducerCodecOptions = types.ProducerCodecOptions;\r\ntype ProducerOptions = types.ProducerOptions;\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    return sharedStreamSuccessAudioSwitch({\r\n      stream,\r\n      parameters,\r\n    } as unknown as Parameters<typeof sharedStreamSuccessAudioSwitch>[0]) as Promise<void>;\r\n\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 { streamSuccessScreen as sharedStreamSuccessScreen } from 'mediasfu-shared';\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    return sharedStreamSuccessScreen({\n      stream,\n      parameters,\n    } as unknown as Parameters<typeof sharedStreamSuccessScreen>[0]) as Promise<void>;\n\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 { types } from 'mediasoup-client';\r\ntype Device = types.Device;\r\ntype ProducerOptions = types.ProducerOptions;\r\ntype Producer = types.Producer;\r\ntype RtpCodecCapability = types.RtpCodecCapability;\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        } 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      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 { switchUserAudio as sharedSwitchUserAudio } from 'mediasfu-shared';\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    return sharedSwitchUserAudio({\r\n      audioPreference,\r\n      parameters: parameters as unknown as Parameters<typeof sharedSwitchUserAudio>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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\nimport { clickVideo as sharedClickVideo } from 'mediasfu-shared';\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    await sharedClickVideo(\r\n      {\r\n        parameters: {\r\n          mediaDevices: navigator.mediaDevices,\r\n          ...parameters,\r\n        },\r\n      } as unknown as Parameters<typeof sharedClickVideo>[0],\r\n    );\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { switchUserVideo as sharedSwitchUserVideo } from 'mediasfu-shared';\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    return sharedSwitchUserVideo({\r\n      videoPreference,\r\n      checkoff,\r\n      parameters: parameters as unknown as Parameters<typeof sharedSwitchUserVideo>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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 { switchUserVideoAlt as sharedSwitchUserVideoAlt } from 'mediasfu-shared';\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    return sharedSwitchUserVideoAlt({\r\n      videoPreference,\r\n      checkoff,\r\n      parameters: parameters as unknown as Parameters<typeof sharedSwitchUserVideoAlt>[0]['parameters'],\r\n    }) as Promise<void>;\r\n\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 { trigger as sharedTrigger } from 'mediasfu-shared';\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\nexport type TriggerType = (options: TriggerOptions) => Promise<void>;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Trigger {\r\n  async trigger({ ref_ActiveNames, parameters }: TriggerOptions): Promise<void> {\r\n    return sharedTrigger({\r\n      ref_ActiveNames,\r\n      parameters: parameters as unknown as Parameters<typeof sharedTrigger>[0]['parameters'],\r\n    }) as Promise<void>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { GridSizes, ComponentSizes, EventType } from '../@types/types';\r\nimport { updateMiniCardsGrid as sharedUpdateMiniCardsGrid } from 'mediasfu-shared';\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  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    return sharedUpdateMiniCardsGrid({\r\n      rows,\r\n      cols,\r\n      defal,\r\n      actualRows,\r\n      parameters: parameters as unknown as Parameters<typeof sharedUpdateMiniCardsGrid>[0]['parameters'],\r\n    }) as Promise<void>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { updateParticipantAudioDecibels as sharedUpdateParticipantAudioDecibels } from 'mediasfu-shared';\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    return sharedUpdateParticipantAudioDecibels({\r\n      name,\r\n      averageLoudness,\r\n      audioDecibels,\r\n      updateAudioDecibels,\r\n    } as unknown as Parameters<typeof sharedUpdateParticipantAudioDecibels>[0]) as void;\r\n\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 { aParams as sharedAParams } from 'mediasfu-shared';\r\nimport type { AParamsType as SharedAParamsType } from 'mediasfu-shared';\r\n\r\nexport type AParamsType = SharedAParamsType;\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 = sharedAParams;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { hParams as sharedHParams } from 'mediasfu-shared';\r\nimport type { HParamsType as SharedHParamsType } from 'mediasfu-shared';\r\n\r\nexport type HParamsType = SharedHParamsType;\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 = sharedHParams;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { screenParams as sharedScreenParams } from 'mediasfu-shared';\r\nimport type { ScreenParamsType as SharedScreenParamsType } from 'mediasfu-shared';\r\n\r\nexport type ScreenParamsType = SharedScreenParamsType;\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 = sharedScreenParams;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { vParams as sharedVParams } from 'mediasfu-shared';\r\nimport type { VParamsType as SharedVParamsType } from 'mediasfu-shared';\r\n\r\nexport type VParamsType = SharedVParamsType;\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 = sharedVParams;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { launchBackground as sharedLaunchBackground } from 'mediasfu-shared';\r\nimport type { LaunchBackgroundOptions } from 'mediasfu-shared';\r\nexport type { LaunchBackgroundOptions, LaunchBackgroundType } from 'mediasfu-shared';\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    sharedLaunchBackground({\r\n      updateIsBackgroundModalVisible,\r\n      isBackgroundModalVisible,\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { launchBreakoutRooms as sharedLaunchBreakoutRooms } from 'mediasfu-shared';\r\nimport type { LaunchBreakoutRoomsOptions } from 'mediasfu-shared';\r\nexport type { LaunchBreakoutRoomsOptions, LaunchBreakoutRoomsType } from 'mediasfu-shared';\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    sharedLaunchBreakoutRooms({ updateIsBreakoutRoomsModalVisible, isBreakoutRoomsModalVisible });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { breakoutRoomUpdated as sharedBreakoutRoomUpdated } from 'mediasfu-shared';\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    return sharedBreakoutRoomUpdated(\r\n      { data, parameters } as unknown as Parameters<typeof sharedBreakoutRoomUpdated>[0],\r\n    );\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { launchCoHost as sharedLaunchCoHost } from 'mediasfu-shared';\r\nimport type { LaunchCoHostOptions } from 'mediasfu-shared';\r\nexport type { LaunchCoHostOptions, LaunchCoHostType } from 'mediasfu-shared';\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    sharedLaunchCoHost({ 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 { modifyCoHostSettings as sharedModifyCoHostSettings } from 'mediasfu-shared';\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\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    return sharedModifyCoHostSettings(\r\n      {\r\n        roomName,\r\n        selectedParticipant,\r\n        coHost,\r\n        coHostResponsibility,\r\n        updateIsCoHostModalVisible,\r\n        updateCoHostResponsibility,\r\n        updateCoHost,\r\n        socket,\r\n      } as unknown as Parameters<typeof sharedModifyCoHostSettings>[0],\r\n    );\r\n  }\r\n}\r\n","// display-settings.service.ts\r\nimport { Injectable } from '@angular/core';\r\nimport { launchDisplaySettings as sharedLaunchDisplaySettings } from 'mediasfu-shared';\r\nimport type { LaunchDisplaySettingsOptions } from 'mediasfu-shared';\r\nexport type { LaunchDisplaySettingsOptions, LaunchDisplaySettingsType } from 'mediasfu-shared';\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    sharedLaunchDisplaySettings({\r\n      updateIsDisplaySettingsModalVisible,\r\n      isDisplaySettingsModalVisible,\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { modifyDisplaySettings as sharedModifyDisplaySettings } from 'mediasfu-shared';\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  showSubtitlesOnCards?: 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  updateShowSubtitlesOnCards?: (showSubtitlesOnCards: 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    return sharedModifyDisplaySettings(\r\n      { parameters } as unknown as Parameters<typeof sharedModifyDisplaySettings>[0],\r\n    );\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { launchConfirmExit as sharedLaunchConfirmExit } from 'mediasfu-shared';\r\nimport type { LaunchConfirmExitOptions } from 'mediasfu-shared';\r\nexport type { LaunchConfirmExitOptions, LaunchConfirmExitType } from 'mediasfu-shared';\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    sharedLaunchConfirmExit({\r\n      updateIsConfirmExitModalVisible,\r\n      isConfirmExitModalVisible,\r\n    });\r\n  }\r\n}\r\n","// confirm-exit.service.ts\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { confirmExit as sharedConfirmExit } from 'mediasfu-shared';\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\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    return sharedConfirmExit(\r\n      {\r\n        socket,\r\n        localSocket,\r\n        member,\r\n        roomName,\r\n        ban,\r\n      } as unknown as Parameters<typeof sharedConfirmExit>[0],\r\n    );\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { launchMediaSettings as sharedLaunchMediaSettings } from 'mediasfu-shared';\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    return sharedLaunchMediaSettings({\r\n      updateIsMediaSettingsModalVisible,\r\n      isMediaSettingsModalVisible,\r\n      mediaDevices: navigator.mediaDevices,\r\n      audioInputs,\r\n      videoInputs,\r\n      updateAudioInputs,\r\n      updateVideoInputs,\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { launchMenuModal as sharedLaunchMenuModal } from 'mediasfu-shared';\r\nimport type { LaunchMenuModalOptions } from 'mediasfu-shared';\r\nexport type { LaunchMenuModalOptions, LaunchMenuModalType } from 'mediasfu-shared';\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    sharedLaunchMenuModal({ updateIsMenuModalVisible, isMenuModalVisible });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { launchMessages as sharedLaunchMessages } from 'mediasfu-shared';\r\nimport type { LaunchMessagesOptions } from 'mediasfu-shared';\r\nexport type { LaunchMessagesOptions, LaunchMessagesType } from 'mediasfu-shared';\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    sharedLaunchMessages({ updateIsMessagesModalVisible, isMessagesModalVisible });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { CoHostResponsibility, 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    message,\r\n    receivers,\r\n    group,\r\n    messagesLength,\r\n    member,\r\n    sender,\r\n    islevel,\r\n    showAlert,\r\n    coHostResponsibility,\r\n    coHost,\r\n    roomName,\r\n    socket,\r\n    chatSetting,\r\n  }: SendMessageOptions): Promise<void> {\r\n    let chatValue = false;\r\n    const normalizedReceivers = (receivers ?? []).filter(\r\n      (receiver): receiver is string => typeof receiver === 'string' && receiver.trim().length > 0,\r\n    );\r\n\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    if (!message || message === '') {\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    if (normalizedReceivers.length < 1 && group === false && islevel === '2') {\r\n      showAlert?.({\r\n        message: 'Please select a message to reply to',\r\n        type: 'danger',\r\n        duration: 3000,\r\n      });\r\n      return;\r\n    }\r\n\r\n    const messageObject = {\r\n      sender: sender ? sender : member,\r\n      receivers: normalizedReceivers,\r\n      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      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)) && !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    socket.emit('sendMessage', {\r\n      messageObject,\r\n      roomName,\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { launchParticipants as sharedLaunchParticipants } from 'mediasfu-shared';\r\nimport type { LaunchParticipantsOptions } from 'mediasfu-shared';\r\nexport type { LaunchParticipantsOptions, LaunchParticipantsType } from 'mediasfu-shared';\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    sharedLaunchParticipants({ updateIsParticipantsModalVisible, isParticipantsModalVisible });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { messageParticipants as sharedMessageParticipants } from 'mediasfu-shared';\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    sharedMessageParticipants(\r\n      {\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      } as unknown as Parameters<typeof sharedMessageParticipants>[0],\r\n    );\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { muteParticipants as sharedMuteParticipants } from 'mediasfu-shared';\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    return sharedMuteParticipants(\r\n      {\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      } as unknown as Parameters<typeof sharedMuteParticipants>[0],\r\n    );\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { removeParticipants as sharedRemoveParticipants } from 'mediasfu-shared';\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    return sharedRemoveParticipants(\r\n      {\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      } as unknown as Parameters<typeof sharedRemoveParticipants>[0],\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\nimport { handleCreatePoll as sharedHandleCreatePoll } from 'mediasfu-shared';\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(options: HandleCreatePollOptions): Promise<void> {\r\n    await sharedHandleCreatePoll(\r\n      options as unknown as Parameters<typeof sharedHandleCreatePoll>[0],\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\nimport { handleEndPoll as sharedHandleEndPoll } from 'mediasfu-shared';\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(options: HandleEndPollOptions): Promise<void> {\r\n    await sharedHandleEndPoll(options as unknown as Parameters<typeof sharedHandleEndPoll>[0]);\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\nimport { handleVotePoll as sharedHandleVotePoll } from 'mediasfu-shared';\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(options: HandleVotePollOptions): Promise<void> {\r\n    await sharedHandleVotePoll(options as unknown as Parameters<typeof sharedHandleVotePoll>[0]);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { launchPoll as sharedLaunchPoll } from 'mediasfu-shared';\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    sharedLaunchPoll({ updateIsPollModalVisible, isPollModalVisible });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Poll, ShowAlert, PollUpdatedData } from '../../@types/types';\r\nimport { pollUpdated as sharedPollUpdated } from 'mediasfu-shared';\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(options: PollUpdatedOptions): Promise<void> {\r\n    await sharedPollUpdated(options as unknown as Parameters<typeof sharedPollUpdated>[0]);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { checkPauseState as sharedCheckPauseState } from 'mediasfu-shared';\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  checkPauseState = async (options: CheckPauseStateOptions): Promise<boolean> => {\r\n    return sharedCheckPauseState(options);\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { checkResumeState as sharedCheckResumeState } from 'mediasfu-shared';\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  checkResumeState = async (options: CheckResumeStateOptions): Promise<boolean> => {\r\n    return sharedCheckResumeState(options);\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { confirmRecording as sharedConfirmRecording } from 'mediasfu-shared';\r\nimport {\r\n  ShowAlert,\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  getUpdatedAllParams: () => ConfirmRecordingParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ConfirmRecordingOptions {\r\n  parameters: ConfirmRecordingParameters;\r\n}\r\n\r\nexport type ConfirmRecordingType = (options: ConfirmRecordingOptions) => Promise<void>;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ConfirmRecording {\r\n  confirmRecording = async ({ parameters }: ConfirmRecordingOptions): Promise<void> => {\r\n    await sharedConfirmRecording(\r\n      { parameters } as unknown as Parameters<typeof sharedConfirmRecording>[0],\r\n    );\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { launchRecording as sharedLaunchRecording } from 'mediasfu-shared';\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  launchRecording(options: LaunchRecordingOptions): void {\r\n    sharedLaunchRecording(options);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { recordPauseTimer as sharedRecordPauseTimer } from 'mediasfu-shared';\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  recordPauseTimer = (options: RecordPauseTimerOptions): boolean => {\r\n    return sharedRecordPauseTimer(options);\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\nimport { recordResumeTimer as sharedRecordResumeTimer } from 'mediasfu-shared';\r\n\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  getUpdatedAllParams: () => RecordResumeTimerParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface RecordResumeTimerOptions {\r\n  parameters: RecordResumeTimerParameters;\r\n}\r\n\r\nexport type RecordResumeTimerType = (options: RecordResumeTimerOptions) => Promise<boolean>;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class RecordResumeTimer {\r\n  recordResumeTimer = async ({ parameters }: RecordResumeTimerOptions): Promise<boolean> => {\r\n    return sharedRecordResumeTimer(\r\n      { parameters } as unknown as Parameters<typeof sharedRecordResumeTimer>[0],\r\n    );\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { recordStartTimer as sharedRecordStartTimer } from 'mediasfu-shared';\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  recordStartTimer = async ({ parameters }: RecordStartTimerOptions): Promise<void> => {\r\n    await sharedRecordStartTimer(\r\n      { parameters } as unknown as Parameters<typeof sharedRecordStartTimer>[0],\r\n    );\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { recordUpdateTimer as sharedRecordUpdateTimer } from 'mediasfu-shared';\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  recordUpdateTimer(options: RecordUpdateTimerOptions): void {\r\n    sharedRecordUpdateTimer(options);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\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\nimport { startRecording as sharedStartRecording } from 'mediasfu-shared';\r\nimport { RecordResumeTimerParameters } from './record-resume-timer.service';\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  rePort: RePortType;\r\n  captureCanvasStream: CaptureCanvasStreamType;\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\nexport type StartRecordingType = (options: StartRecordingOptions) => Promise<boolean | undefined>;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StartRecording {\r\n  startRecording = async ({ parameters }: StartRecordingOptions): Promise<boolean | undefined> => {\r\n    return sharedStartRecording(\r\n      { parameters } as unknown as Parameters<typeof sharedStartRecording>[0],\r\n    );\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\nimport { stopRecording as sharedStopRecording } from 'mediasfu-shared';\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  captureCanvasStream: (options: { parameters: any; start?: boolean }) => void;\r\n  getUpdatedAllParams: () => StopRecordingParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface StopRecordingOptions {\r\n  parameters: StopRecordingParameters;\r\n}\r\n\r\nexport type StopRecordingType = (options: StopRecordingOptions) => Promise<void>;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class StopRecording {\r\n  async stopRecording({ parameters }: StopRecordingOptions): Promise<void> {\r\n    await sharedStopRecording(\r\n      { parameters } as unknown as Parameters<typeof sharedStopRecording>[0],\r\n    );\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { RePortParameters, RePortType, ShowAlert, UserRecordingParams } from '../../@types/types';\r\nimport { Socket } from 'socket.io-client';\r\nimport { updateRecording as sharedUpdateRecording } from 'mediasfu-shared';\r\nimport { RecordResumeTimerParameters } from './record-resume-timer.service';\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  rePort: RePortType;\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\nexport type UpdateRecordingType = (options: UpdateRecordingOptions) => Promise<void>;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UpdateRecording {\r\n  updateRecording = async ({ parameters }: UpdateRecordingOptions): Promise<void> => {\r\n    await sharedUpdateRecording(\r\n      { parameters } as unknown as Parameters<typeof sharedUpdateRecording>[0],\r\n    );\r\n  };\r\n}\r\n","// requests.service.ts\r\nimport { Injectable } from '@angular/core';\r\nimport { launchRequests as sharedLaunchRequests } from 'mediasfu-shared';\r\nimport type { LaunchRequestsOptions } from 'mediasfu-shared';\r\nexport type { LaunchRequestsOptions, LaunchRequestsType } from 'mediasfu-shared';\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    sharedLaunchRequests({\r\n      updateIsRequestsModalVisible,\r\n      isRequestsModalVisible,\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { respondToRequests as sharedRespondToRequests } from 'mediasfu-shared';\r\nimport { Socket } from 'socket.io-client';\r\nimport { Request } 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\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    return sharedRespondToRequests(\r\n      {\r\n        socket,\r\n        request,\r\n        updateRequestList,\r\n        requestList,\r\n        action,\r\n        roomName,\r\n      } as unknown as Parameters<typeof sharedRespondToRequests>[0],\r\n    );\r\n  }\r\n}\r\n","// settings.service.ts\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { launchSettings as sharedLaunchSettings } from 'mediasfu-shared';\r\nimport type { LaunchSettingsOptions } from 'mediasfu-shared';\r\nexport type { LaunchSettingsOptions, LaunchSettingsType } from 'mediasfu-shared';\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    sharedLaunchSettings({ 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\nimport { modifySettings as sharedModifySettings } from 'mediasfu-shared';\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    return sharedModifySettings(\r\n      {\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      } as unknown as Parameters<typeof sharedModifySettings>[0],\r\n    );\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\nimport { clickAudio as sharedClickAudio } from 'mediasfu-shared';\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    await sharedClickAudio(\r\n      {\r\n        parameters: {\r\n          mediaDevices: navigator.mediaDevices,\r\n          ...parameters,\r\n        },\r\n      } as unknown as Parameters<typeof sharedClickAudio>[0],\r\n    );\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\nimport { clickChat as sharedClickChat } from 'mediasfu-shared';\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(options: ClickChatOptions): Promise<void> {\r\n    await sharedClickChat(options as unknown as Parameters<typeof sharedClickChat>[0]);\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\nimport { clickScreenShare as sharedClickScreenShare } from 'mediasfu-shared';\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    await sharedClickScreenShare(\r\n      {\r\n        parameters: {\r\n          ...parameters,\r\n          ...parameters.getUpdatedAllParams(),\r\n        },\r\n      } as unknown as Parameters<typeof sharedClickScreenShare>[0],\r\n    );\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SwitchUserAudioType, SwitchUserAudioParameters } from '../../@types/types';\r\nimport { switchAudio as sharedSwitchAudio } from 'mediasfu-shared';\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    await sharedSwitchAudio(\r\n      { audioPreference, parameters } as unknown as Parameters<typeof sharedSwitchAudio>[0],\r\n    );\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert, SwitchUserVideoParameters, SwitchUserVideoType } from '../../@types/types';\r\nimport { switchVideo as sharedSwitchVideo } from 'mediasfu-shared';\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    await sharedSwitchVideo(\r\n      { videoPreference, parameters } as unknown as Parameters<typeof sharedSwitchVideo>[0],\r\n    );\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert, SwitchUserVideoAltType, SwitchUserVideoParameters } from '../../@types/types';\r\nimport { switchVideoAlt as sharedSwitchVideoAlt } from 'mediasfu-shared';\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    await sharedSwitchVideoAlt(\r\n      { parameters } as unknown as Parameters<typeof sharedSwitchVideoAlt>[0],\r\n    );\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { joinRoomOnMediaSFU as sharedJoinRoomOnMediaSFU } from 'mediasfu-shared';\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    return sharedJoinRoomOnMediaSFU({\r\n      payload: payload as JoinMediaSFURoomOptions,\r\n      apiUserName,\r\n      apiKey,\r\n      localLink,\r\n    }) as Promise<{\r\n      data: CreateJoinRoomResponse | CreateJoinRoomError | null;\r\n      success: boolean;\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\nimport { formatNumber as sharedFormatNumber } from 'mediasfu-shared';\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    return sharedFormatNumber({ number });\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 { getModalPosition as sharedGetModalPosition } from 'mediasfu-shared';\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  return sharedGetModalPosition({ position }) as ModalPositionStyle;\r\n}\r\n","import { sleep as sharedSleep } from 'mediasfu-shared';\r\nexport 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 sharedSleep({ ms });\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { validateAlphanumeric as sharedValidateAlphanumeric } from 'mediasfu-shared';\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    return sharedValidateAlphanumeric({ str });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { launchWaiting as sharedLaunchWaiting } from 'mediasfu-shared';\r\nimport type { LaunchWaitingOptions } from 'mediasfu-shared';\r\nexport type { LaunchWaitingOptions, LaunchWaitingType } from 'mediasfu-shared';\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    sharedLaunchWaiting({\r\n      updateIsWaitingModalVisible,\r\n      isWaitingModalVisible,\r\n    });\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\nimport { respondToWaiting as sharedRespondToWaiting } from 'mediasfu-shared';\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    return sharedRespondToWaiting(\r\n      {\r\n        participantId,\r\n        participantName,\r\n        updateWaitingList,\r\n        waitingList,\r\n        type,\r\n        roomName,\r\n        socket,\r\n      } as unknown as Parameters<typeof sharedRespondToWaiting>[0],\r\n    );\r\n  }\r\n}\r\n","// whiteboard.service.ts\r\nimport { Injectable } from '@angular/core';\r\nimport { launchConfigureWhiteboard as sharedLaunchConfigureWhiteboard } from 'mediasfu-shared';\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    sharedLaunchConfigureWhiteboard({\r\n      updateIsConfigureWhiteboardModalVisible,\r\n      isConfigureWhiteboardModalVisible,\r\n    });\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 { types } from 'mediasoup-client';\r\ntype Producer = types.Producer;\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 { types } from 'mediasoup-client';\r\ntype RtpCapabilities = types.RtpCapabilities;\r\ntype Device = types.Device;\r\nimport { createDeviceClient as sharedCreateDeviceClient } from 'mediasfu-shared';\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  async createDeviceClient({ rtpCapabilities }: CreateDeviceClientOptions): Promise<Device | null> {\r\n    return sharedCreateDeviceClient(\r\n      { rtpCapabilities } as unknown as Parameters<typeof sharedCreateDeviceClient>[0],\r\n    ) as unknown as Promise<Device | null>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { joinRoomClient as sharedJoinRoomClient } from 'mediasfu-shared';\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  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    return sharedJoinRoomClient(\r\n      {\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n        consume,\r\n      } as unknown as Parameters<typeof sharedJoinRoomClient>[0],\r\n    ) as unknown as Promise<any>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HParamsType } from '../../methods/utils/producer/h-params.service';\r\nimport { VParamsType } from '../../methods/utils/producer/v-params.service';\r\nimport { types } from 'mediasoup-client';\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\nimport { updateRoomParametersClient as sharedUpdateRoomParametersClient } from 'mediasfu-shared';\r\n\r\ntype RtpCapabilities = types.RtpCapabilities;\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: VidCons;\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  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: VidCons) => 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  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\nexport type UpdateRoomParametersClientType = (options: UpdateRoomParametersClientOptions) => void;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UpdateRoomParametersClient {\r\n  updateRoomParametersClient = ({ parameters }: UpdateRoomParametersClientOptions): void => {\r\n    sharedUpdateRoomParametersClient(\r\n      { parameters } as unknown as Parameters<typeof sharedUpdateRoomParametersClient>[0],\r\n    );\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { types } from 'mediasoup-client';\r\ntype RtpCapabilities = types.RtpCapabilities;\r\nimport { joinConRoom as sharedJoinConRoom } from 'mediasfu-shared';\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  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 sharedJoinConRoom(\r\n      {\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n      } as unknown as Parameters<typeof sharedJoinConRoom>[0],\r\n    ) as unknown as Promise<object>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { joinRoom as sharedJoinRoom } from 'mediasfu-shared';\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  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 sharedJoinRoom(\r\n      {\r\n        socket,\r\n        roomName,\r\n        islevel,\r\n        member,\r\n        sec,\r\n        apiUserName,\r\n      } as unknown as Parameters<typeof sharedJoinRoom>[0],\r\n    ) as unknown as Promise<object>;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  ResponseJoinLocalRoom,\r\n  PreJoinPageParameters,\r\n  JoinMediaSFURoomOptions,\r\n} from '../../@types/types';\r\nimport { JoinRoomOnMediaSFU, JoinRoomOnMediaSFUType } from '../../methods/utils/join-room-on-media-sfu.service';\r\nimport {\r\n  checkMediasfuURL as sharedCheckMediasfuURL,\r\n  joinLocalRoom as sharedJoinLocalRoom,\r\n} from 'mediasfu-shared';\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\nexport type JoinLocalRoomType = (\r\n  options: JoinLocalRoomOptions,\r\n) => Promise<ResponseJoinLocalRoom>;\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\nexport type CheckMediasfuURLType = (options: CheckMediasfuURLOptions) => Promise<void>;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class JoinLocalRoom {\r\n  constructor(private joinRoomOnMediaSFU: JoinRoomOnMediaSFU) {}\r\n\r\n  checkMediasfuURL: CheckMediasfuURLType = async (\r\n    options: CheckMediasfuURLOptions,\r\n  ): Promise<void> => {\r\n    const resolvedJoinMediaSFURoom =\r\n      options.joinMediaSFURoom ??\r\n      this.joinRoomOnMediaSFU.joinRoomOnMediaSFU.bind(this.joinRoomOnMediaSFU);\r\n\r\n    await sharedCheckMediasfuURL(\r\n      {\r\n        ...options,\r\n        socket: options.socket,\r\n        parameters: options.parameters,\r\n        joinMediaSFURoom: resolvedJoinMediaSFURoom,\r\n      } as unknown as Parameters<typeof sharedCheckMediasfuURL>[0],\r\n    );\r\n  };\r\n\r\n  joinLocalRoom: JoinLocalRoomType = async (\r\n    options: JoinLocalRoomOptions,\r\n  ): Promise<ResponseJoinLocalRoom> => {\r\n    const resolvedJoinMediaSFURoom =\r\n      options.joinMediaSFURoom ??\r\n      this.joinRoomOnMediaSFU.joinRoomOnMediaSFU.bind(this.joinRoomOnMediaSFU);\r\n\r\n    return sharedJoinLocalRoom(\r\n      {\r\n        ...options,\r\n        socket: options.socket,\r\n        parameters: options.parameters,\r\n        joinMediaSFURoom: resolvedJoinMediaSFURoom,\r\n      } as unknown as Parameters<typeof sharedJoinLocalRoom>[0],\r\n    ) as unknown as Promise<ResponseJoinLocalRoom>;\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\nimport { allMembers as sharedAllMembers } from 'mediasfu-shared';\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  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  onScreenChanges: OnScreenChangesType;\r\n  connectIps: ConnectIpsType;\r\n  connectLocalIps?: ConnectLocalIpsType;\r\n  sleep: SleepType;\r\n  reorderStreams: ReorderStreamsType;\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\nexport type AllMembersType = (options: AllMembersOptions) => Promise<void>;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AllMembers {\r\n  allMembers = async (options: AllMembersOptions): Promise<void> => {\r\n    return sharedAllMembers(options);\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\nimport { allMembersRest as sharedAllMembersRest } from 'mediasfu-shared';\r\n\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  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  onScreenChanges: OnScreenChangesType;\r\n  connectIps: ConnectIpsType;\r\n  connectLocalIps?: ConnectLocalIpsType;\r\n  sleep: SleepType;\r\n  reorderStreams: ReorderStreamsType;\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\nexport type AllMembersRestType = (options: AllMembersRestOptions) => Promise<void>;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AllMembersRest {\r\n  async allMembersRest(options: AllMembersRestOptions): Promise<void> {\r\n    return sharedAllMembersRest(options);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { WaitingRoomParticipant } from '../../@types/types';\r\nimport { allWaitingRoomMembers as sharedAllWaitingRoomMembers } from 'mediasfu-shared';\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    return sharedAllWaitingRoomMembers({\r\n      waitingParticipants,\r\n      updateWaitingRoomList,\r\n      updateTotalReqWait,\r\n    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Participant, ReorderStreamsType, ReorderStreamsParameters } from '../../@types/types';\r\nimport { banParticipant as sharedBanParticipant } from 'mediasfu-shared';\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    return sharedBanParticipant({\r\n      name,\r\n      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\nimport { controlMediaHost as sharedControlMediaHost } from 'mediasfu-shared';\r\n\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  updateScreenAlreadyOn: (value: boolean) => void;\r\n  updateVideoAlreadyOn: (value: boolean) => void;\r\n  updateChatAlreadyOn: (value: boolean) => void;\r\n  onScreenChanges: OnScreenChangesType;\r\n  stopShareScreen: StopShareScreenType;\r\n  disconnectSendTransportVideo: DisconnectSendTransportVideoType;\r\n  disconnectSendTransportAudio: DisconnectSendTransportAudioType;\r\n  disconnectSendTransportScreen: DisconnectSendTransportScreenType;\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\nexport type ControlMediaHostType = (options: ControlMediaHostOptions) => Promise<void>;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ControlMediaHost {\r\n  controlMediaHost = async (options: ControlMediaHostOptions): Promise<void> => {\r\n    return sharedControlMediaHost(options);\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\nimport { disconnect as sharedDisconnect } from 'mediasfu-shared';\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    return sharedDisconnect({ showAlert, redirectURL, onWeb });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { disconnectUserSelf as sharedDisconnectUserSelf } from 'mediasfu-shared';\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    return sharedDisconnectUserSelf({\r\n      member,\r\n      roomName,\r\n      socket,\r\n      localSocket,\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 { types } from 'mediasoup-client';\r\nimport { getDomains as sharedGetDomains } from 'mediasfu-shared';\r\ntype RtpCapabilities = types.RtpCapabilities;\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    return sharedGetDomains({\r\n      domains,\r\n      alt_domains,\r\n      apiUserName,\r\n      apiKey,\r\n      apiToken,\r\n      parameters,\r\n    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert, Request, RequestResponse } from '../../@types/types';\r\nimport { hostRequestResponse as sharedHostRequestResponse } from 'mediasfu-shared';\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    return sharedHostRequestResponse({\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    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EventType, ShowAlert } from '../../@types/types';\r\nimport { meetingEnded as sharedMeetingEnded } from 'mediasfu-shared';\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    return sharedMeetingEnded({ showAlert, redirectURL, onWeb, eventType });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { meetingStillThere as sharedMeetingStillThere } from 'mediasfu-shared';\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 = async ({ updateIsConfirmHereModalVisible }: MeetingStillThereOptions): Promise<void> => {\r\n    return sharedMeetingStillThere({ updateIsConfirmHereModalVisible });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EventType, ShowAlert } from '../../@types/types';\r\nimport { meetingTimeRemaining as sharedMeetingTimeRemaining } from 'mediasfu-shared';\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    return sharedMeetingTimeRemaining({ timeRemaining, showAlert, eventType });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Request, WaitingRoomParticipant } from '../../@types/types';\r\nimport { participantRequested as sharedParticipantRequested } from 'mediasfu-shared';\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    return sharedParticipantRequested({\r\n      userRequest,\r\n      requestList,\r\n      waitingRoomList,\r\n      updateTotalReqWait,\r\n      updateRequestList,\r\n    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\nimport { personJoined as sharedPersonJoined } from 'mediasfu-shared';\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 = async ({ name, showAlert }: PersonJoinedOptions): Promise<void> => {\r\n    return sharedPersonJoined({ name, showAlert });\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\nimport { producerMediaClosed as sharedProducerMediaClosed } from 'mediasfu-shared';\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    return sharedProducerMediaClosed({\r\n      producerId,\r\n      kind,\r\n      parameters,\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\nimport { producerMediaPaused as sharedProducerMediaPaused } from 'mediasfu-shared';\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  reorderStreams: ReorderStreamsType;\r\n  prepopulateUserMedia: PrepopulateUserMediaType;\r\n  reUpdateInter: ReUpdateInterType;\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\nexport type ProducerMediaPausedType = (options: ProducerMediaPausedOptions) => Promise<void>;\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ProducerMediaPaused {\r\n  producerMediaPaused = async ({\r\n    producerId,\r\n    kind,\r\n    name,\r\n    parameters,\r\n  }: ProducerMediaPausedOptions): Promise<void> => {\r\n    return sharedProducerMediaPaused({\r\n      producerId,\r\n      kind,\r\n      name,\r\n      parameters,\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\nimport { producerMediaResumed as sharedProducerMediaResumed } from 'mediasfu-shared';\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    kind,\r\n    parameters,\r\n  }: ProducerMediaResumedOptions): Promise<void> => {\r\n    return sharedProducerMediaResumed({\r\n      name,\r\n      kind,\r\n      parameters,\r\n    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { reInitiateRecording as sharedReInitiateRecording } from 'mediasfu-shared';\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    return sharedReInitiateRecording({\r\n      roomName,\r\n      member,\r\n      socket,\r\n      adminRestrictSetting,\r\n    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EventType, Message, Participant } from '../../@types/types';\r\nimport { receiveMessage as sharedReceiveMessage } from 'mediasfu-shared';\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    return sharedReceiveMessage({\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    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EventType, UserRecordingParams } from '../../@types/types';\r\nimport { recordingNotice as sharedRecordingNotice } from 'mediasfu-shared';\r\n\r\nexport interface RecordingNoticeParameters {\r\n  islevel: string;\r\n  userRecordingParams: UserRecordingParams;\r\n  pauseRecordCount: number;\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  /**\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    return sharedRecordingNotice({\r\n      state,\r\n      userRecordingParam,\r\n      pauseCount,\r\n      timeDone,\r\n      parameters,\r\n    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { roomRecordParams as sharedRoomRecordParams } from 'mediasfu-shared';\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 = async ({\r\n    recordParams,\r\n    parameters,\r\n  }: RoomRecordParamsOptions): Promise<void> => {\r\n    return sharedRoomRecordParams({ recordParams, parameters });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Participant } from '../../@types/types';\r\nimport { screenProducerId as sharedScreenProducerId } from 'mediasfu-shared';\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    return sharedScreenProducerId({\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    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport { startRecords as sharedStartRecords } from 'mediasfu-shared';\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    return sharedStartRecords({\r\n      roomName,\r\n      member,\r\n      socket,\r\n    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\nimport { stoppedRecording as sharedStoppedRecording } from 'mediasfu-shared';\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    return sharedStoppedRecording({\r\n      state,\r\n      reason,\r\n      showAlert,\r\n    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\nimport { timeLeftRecording as sharedTimeLeftRecording } from 'mediasfu-shared';\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    return sharedTimeLeftRecording({ timeLeft, showAlert });\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\nimport { updateConsumingDomains as sharedUpdateConsumingDomains } from 'mediasfu-shared';\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    return sharedUpdateConsumingDomains<UpdateConsumingDomainsParameters, Participant, ConsumeSocket>({\r\n      domains,\r\n      alt_domains,\r\n      apiUserName,\r\n      apiKey,\r\n      apiToken,\r\n      parameters,\r\n    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Settings } from '../../@types/types';\r\nimport { updateMediaSettings as sharedUpdateMediaSettings } from 'mediasfu-shared';\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    return sharedUpdateMediaSettings({\r\n      settings,\r\n      updateAudioSetting,\r\n      updateVideoSetting,\r\n      updateScreenshareSetting,\r\n      updateChatSetting,\r\n    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CoHostResponsibility, EventType, ShowAlert } from '../../@types/types';\r\nimport { updatedCoHost as sharedUpdatedCoHost } from 'mediasfu-shared';\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    return sharedUpdatedCoHost({\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    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ShowAlert } from '../../@types/types';\r\nimport { userWaiting as sharedUserWaiting } from 'mediasfu-shared';\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    return sharedUserWaiting({\r\n      name,\r\n      showAlert,\r\n      totalReqWait,\r\n      updateTotalReqWait,\r\n    });\r\n  };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Socket } from 'socket.io-client';\r\nimport {\r\n  connectSocket as sharedConnectSocket,\r\n  connectLocalSocket as sharedConnectLocalSocket,\r\n  disconnectSocket as sharedDisconnectSocket,\r\n} from 'mediasfu-shared';\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  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    return sharedConnectSocket(\r\n      {\r\n        apiUserName,\r\n        apiKey,\r\n        apiToken,\r\n        link,\r\n      } as unknown as Parameters<typeof sharedConnectSocket>[0],\r\n    ) as unknown as Promise<Socket>;\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    return sharedConnectLocalSocket(\r\n      { link } as unknown as Parameters<typeof sharedConnectLocalSocket>[0],\r\n    ) as unknown as Promise<ResponseLocalConnection>;\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    return sharedDisconnectSocket(\r\n      { socket } as unknown as Parameters<typeof sharedDisconnectSocket>[0],\r\n    );\r\n  };\r\n}\r\n","export type ModernRenderMode = 'modal' | 'sidebar' | 'inline';\r\n\r\nexport const isEmbeddedRenderMode = (renderMode: ModernRenderMode): boolean => {\r\n  return renderMode === 'sidebar' || renderMode === 'inline';\r\n};\r\n\r\nexport const resolveModernHeaderTitle = (\r\n  title: string | false | null | undefined,\r\n  fallbackTitle: string,\r\n): string => {\r\n  if (typeof title === 'string' && title.trim()) {\r\n    return title;\r\n  }\r\n\r\n  return fallbackTitle;\r\n};","/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\nimport {\r\n  Component,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\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 { types } from 'mediasoup-client';\r\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../../../modern/utils/render-mode.utils';\r\ntype Producer = types.Producer;\r\ntype ProducerOptions = types.ProducerOptions;\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  isDarkMode?: boolean;\r\n  onClose: () => void;\r\n  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: any;\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, OnDestroy {\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() isDarkMode?: boolean;\r\n  @Input() onClose: () => void = () => {\r\n    console.log('onClose');\r\n  };\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n\r\n  @ViewChild('defaultImagesContainer') defaultImagesContainerRef!: ElementRef;\r\n  @ViewChild('uploadImageInput') uploadImageInputRef!: ElementRef;\r\n  @ViewChild('backgroundCanvas') backgroundCanvasRef!: ElementRef;\r\n  @ViewChild('mainCanvas') mainCanvasRef!: 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  private previewLoopVersion = 0;\r\n  private previewAnimationFrameId: number | null = null;\r\n  private previewCaptureTimeoutId: ReturnType<typeof setTimeout> | 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 | null) => 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  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\r\n\r\n  private resolveParameters(): BackgroundModalParameters {\r\n    if (this.parameters?.getUpdatedAllParams) {\r\n      return this.parameters.getUpdatedAllParams();\r\n    }\r\n\r\n    return this.parameters;\r\n  }\r\n\r\n  isVisibleState(): boolean {\r\n    return this.isEmbedded() || this.isVisible;\r\n  }\r\n\r\n  shouldRetainProcessingSurface(): boolean {\r\n    return !!(\r\n      this.videoAlreadyOn &&\r\n      this.keepBackground &&\r\n      this.appliedBackground &&\r\n      this.processedStream?.getVideoTracks().some((track) => track.readyState === 'live')\r\n    );\r\n  }\r\n\r\n  shouldRenderState(): boolean {\r\n    return this.isVisibleState() || this.shouldRetainProcessingSurface();\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  hasSelectedBackground(): boolean {\r\n    return !!(this.selectedImage || this.customImage);\r\n  }\r\n\r\n  stageStatusCopy(): string {\r\n    if (!this.videoAlreadyOn) {\r\n      return this.hasSelectedBackground() ? 'Saved for camera on' : 'Camera off';\r\n    }\r\n\r\n    if (this.keepBackground && this.appliedBackground) {\r\n      return 'Ready to save';\r\n    }\r\n\r\n    if (this.hasSelectedBackground()) {\r\n      return 'Selection loaded';\r\n    }\r\n\r\n    return 'Choose a background';\r\n  }\r\n\r\n  guidanceCopy(): string {\r\n    if (!this.videoAlreadyOn && this.hasSelectedBackground()) {\r\n      return 'Background saved - it will apply when your camera turns on.';\r\n    }\r\n\r\n    if (!this.videoAlreadyOn) {\r\n      return 'Camera is currently off. Turn video on to preview your background live.';\r\n    }\r\n\r\n    if (this.keepBackground && this.appliedBackground) {\r\n      return 'Preview looks ready. Save to keep this background in the active stream.';\r\n    }\r\n\r\n    if (this.hasSelectedBackground()) {\r\n      return 'Background selected. Preview it here before saving it to the room.';\r\n    }\r\n\r\n    return 'Choose a built-in backdrop or upload a custom image to start.';\r\n  }\r\n\r\n  guidanceTone(): 'info' | 'success' {\r\n    return !this.videoAlreadyOn && this.hasSelectedBackground()\r\n      ? 'success'\r\n      : this.keepBackground && this.appliedBackground\r\n        ? 'success'\r\n        : 'info';\r\n  }\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  ngOnDestroy() {\r\n    this.cleanupPreviewLifecycle(true);\r\n  }\r\n\r\n  private previewSurfaceReady(): boolean {\r\n    return !!(\r\n      this.backgroundCanvasRef?.nativeElement &&\r\n      this.videoPreviewRef?.nativeElement &&\r\n      this.captureVideoRef?.nativeElement\r\n    );\r\n  }\r\n\r\n  private interactiveViewReady(): boolean {\r\n    return !!(\r\n      this.defaultImagesContainerRef?.nativeElement &&\r\n      this.backgroundCanvasRef?.nativeElement &&\r\n      this.mainCanvasRef?.nativeElement &&\r\n      this.videoPreviewRef?.nativeElement &&\r\n      this.captureVideoRef?.nativeElement &&\r\n      this.applyBackgroundButtonRef?.nativeElement &&\r\n      this.saveBackgroundButtonRef?.nativeElement &&\r\n      this.loadingOverlayRef?.nativeElement\r\n    );\r\n  }\r\n\r\n  private async waitForInteractiveView(): Promise<boolean> {\r\n    for (let attempt = 0; attempt < 20; attempt += 1) {\r\n      if (this.interactiveViewReady()) {\r\n        return true;\r\n      }\r\n\r\n      await new Promise<void>((resolve) => {\r\n        setTimeout(() => resolve(), 100);\r\n      });\r\n    }\r\n\r\n    return this.interactiveViewReady();\r\n  }\r\n\r\n  private syncMainCanvasRef() {\r\n    const mainCanvasElement = this.mainCanvasRef?.nativeElement ?? null;\r\n\r\n    if (!this.mainCanvas && mainCanvasElement) {\r\n      this.mainCanvas = mainCanvasElement;\r\n      this.updateMainCanvas?.(mainCanvasElement);\r\n    }\r\n  }\r\n\r\n  private async waitForProcessedStream(): Promise<void> {\r\n    for (let attempt = 0; !this.processedStream && attempt < 30; attempt += 1) {\r\n      await new Promise<void>((resolve) => {\r\n        setTimeout(() => resolve(), 100);\r\n      });\r\n\r\n      const updatedParams = this.parameters?.getUpdatedAllParams?.();\r\n      this.processedStream = updatedParams?.processedStream || this.processedStream;\r\n    }\r\n  }\r\n\r\n  private cleanupPreviewLifecycle(force = false) {\r\n    if (!this.previewSurfaceReady()) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      if (force) {\r\n        this.stopPreviewProcessing();\r\n      }\r\n\r\n      if (!force && this.shouldRetainProcessingSurface()) {\r\n        this.hideLoading();\r\n        return;\r\n      }\r\n\r\n      this.stopPreviewProcessing();\r\n\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          if (refVideo?.srcObject) {\r\n            refVideo.srcObject.getTracks().forEach((track: any) => track.stop());\r\n            refVideo.srcObject = null;\r\n          }\r\n\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          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      this.hideLoading();\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  private stopPreviewProcessing() {\r\n    this.previewLoopVersion += 1;\r\n\r\n    if (this.previewAnimationFrameId !== null) {\r\n      cancelAnimationFrame(this.previewAnimationFrameId);\r\n      this.previewAnimationFrameId = null;\r\n    }\r\n\r\n    if (this.previewCaptureTimeoutId !== null) {\r\n      clearTimeout(this.previewCaptureTimeoutId);\r\n      this.previewCaptureTimeoutId = null;\r\n    }\r\n  }\r\n\r\n  updateVariables() {\r\n    const params = this.resolveParameters();\r\n\r\n    this.customImage = params.customImage || '';\r\n    this.selectedImage = params.selectedImage || '';\r\n    this.segmentVideo = params.segmentVideo || null;\r\n    this.selfieSegmentation = params.selfieSegmentation || null;\r\n    this.pauseSegmentation = params.pauseSegmentation || false;\r\n    this.processedStream = params.processedStream || null;\r\n    this.keepBackground = params.keepBackground || false;\r\n    this.backgroundHasChanged = params.backgroundHasChanged || false;\r\n    this.virtualStream = params.virtualStream || null;\r\n    this.mainCanvas = params.mainCanvas || this.mainCanvasRef?.nativeElement || null;\r\n    this.prevKeepBackground = params.prevKeepBackground || false;\r\n    this.appliedBackground = params.appliedBackground || false;\r\n    this.videoAlreadyOn = params.videoAlreadyOn || false;\r\n    this.audioOnlyRoom = params.audioOnlyRoom || false;\r\n    this.islevel = params.islevel || '0';\r\n    this.recordStarted = params.recordStarted || false;\r\n    this.recordResumed = params.recordResumed || false;\r\n    this.recordPaused = params.recordPaused || false;\r\n    this.recordStopped = params.recordStopped || false;\r\n    this.recordingMediaOptions = params.recordingMediaOptions || '';\r\n    this.vidCons = params.vidCons || {};\r\n    this.frameRate = params.frameRate || 5;\r\n    this.videoParams = params.videoParams || null;\r\n    this.autoClickBackground = params.autoClickBackground || false;\r\n    this.localStreamVideo = params.localStreamVideo || null;\r\n\r\n    // Assign method references\r\n    this.updateCustomImage = params.updateCustomImage;\r\n    this.updateSelectedImage = params.updateSelectedImage;\r\n    this.updateSegmentVideo = params.updateSegmentVideo;\r\n    this.updateSelfieSegmentation = params.updateSelfieSegmentation;\r\n    this.updatePauseSegmentation = params.updatePauseSegmentation;\r\n    this.updateProcessedStream = params.updateProcessedStream;\r\n    this.updateKeepBackground = params.updateKeepBackground;\r\n    this.updateBackgroundHasChanged = params.updateBackgroundHasChanged;\r\n    this.updateVirtualStream = params.updateVirtualStream;\r\n    this.updateMainCanvas = params.updateMainCanvas;\r\n    this.updatePrevKeepBackground = params.updatePrevKeepBackground;\r\n    this.updateAppliedBackground = params.updateAppliedBackground;\r\n    this.updateVideoParams = params.updateVideoParams;\r\n    this.updateAutoClickBackground = params.updateAutoClickBackground;\r\n\r\n    this.createSendTransport = params.createSendTransport;\r\n    this.connectSendTransportVideo = params.connectSendTransportVideo;\r\n    this.disconnectSendTransportVideo = params.disconnectSendTransportVideo;\r\n    this.onScreenChanges = params.onScreenChanges;\r\n    this.sleep = params.sleep;\r\n  }\r\n\r\n  onVisibilityChange = async () => {\r\n    if (this.parameters) {\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\r\n      if (!(await this.waitForInteractiveView())) {\r\n        return;\r\n      }\r\n\r\n      this.syncMainCanvasRef();\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        if (!(await this.waitForInteractiveView())) {\r\n          console.error('Background modal refs not ready after waiting');\r\n          this.autoClickBackground = false;\r\n          this.updateAutoClickBackground(false);\r\n          this.handleModalClose();\r\n          return;\r\n        }\r\n\r\n        try {\r\n          await this.applyBackground();\r\n          await this.saveBackground();\r\n        } catch (error) {\r\n          console.error('Error auto-applying background:', error);\r\n        } finally {\r\n          this.autoClickBackground = false;\r\n          this.updateAutoClickBackground(this.autoClickBackground);\r\n          this.handleModalClose();\r\n        }\r\n      }\r\n    } else {\r\n      this.cleanupPreviewLifecycle();\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    if (!defaultImagesContainer) {\r\n      return;\r\n    }\r\n\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      const params = this.resolveParameters();\r\n\r\n      if (this.audioOnlyRoom) {\r\n        params.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      if (doSegmentation) {\r\n        await this.waitForProcessedStream();\r\n      }\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 (doSegmentation && this.selectedImage) {\r\n      await new Promise<void>((resolve) => {\r\n        if (virtualImage.complete && virtualImage.naturalWidth > 0) {\r\n          resolve();\r\n          return;\r\n        }\r\n\r\n        virtualImage.onload = () => resolve();\r\n        virtualImage.onerror = () => resolve();\r\n      });\r\n    }\r\n\r\n    if (!this.mainCanvas) {\r\n      this.mainCanvas = this.mainCanvasRef?.nativeElement || this.backgroundCanvasRef.nativeElement;\r\n      this.updateMainCanvas?.(this.mainCanvas);\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    let firstFrameResolved = !doSegmentation;\r\n    let resolveFirstFrame: (() => void) | null = null;\r\n    const firstFrameRendered = new Promise<void>((resolve) => {\r\n      resolveFirstFrame = resolve;\r\n    });\r\n\r\n    const markFirstFrameRendered = () => {\r\n      if (firstFrameResolved) {\r\n        return;\r\n      }\r\n\r\n      firstFrameResolved = true;\r\n      resolveFirstFrame?.();\r\n      resolveFirstFrame = null;\r\n    };\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 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!.save();\r\n          try {\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 repeatPattern =\r\n              virtualImage.width < mediaCanvas.width || virtualImage.height < mediaCanvas.height\r\n                ? 'repeat'\r\n                : 'no-repeat';\r\n            const pat = ctx!.createPattern(virtualImage, repeatPattern);\r\n            if (pat) {\r\n              ctx!.fillStyle = pat;\r\n            }\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            markFirstFrameRendered();\r\n          } finally {\r\n            ctx!.restore();\r\n          }\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    const segmentImage = async (videoElement: HTMLVideoElement) => {\r\n      this.stopPreviewProcessing();\r\n\r\n      const previewLoopVersion = this.previewLoopVersion;\r\n      let startedProcessing = false;\r\n\r\n      const startProcessing = () => {\r\n        if (startedProcessing) {\r\n          return;\r\n        }\r\n\r\n        startedProcessing = true;\r\n        void processFrame();\r\n      };\r\n\r\n      const processFrame = () => {\r\n        if (\r\n          previewLoopVersion !== this.previewLoopVersion ||\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\r\n        void this.selfieSegmentation.send({ image: videoElement }).catch(() => undefined);\r\n\r\n        this.previewAnimationFrameId = requestAnimationFrame(() => {\r\n          processFrame();\r\n        });\r\n      };\r\n\r\n      videoElement.onloadeddata = () => {\r\n        startProcessing();\r\n      };\r\n\r\n      if (videoElement.readyState >= 2 && videoElement.videoWidth > 0 && videoElement.videoHeight > 0) {\r\n        startProcessing();\r\n      }\r\n\r\n      this.previewCaptureTimeoutId = setTimeout(async () => {\r\n        if (previewLoopVersion !== this.previewLoopVersion) {\r\n          return;\r\n        }\r\n\r\n        await Promise.race([\r\n          firstFrameRendered,\r\n          new Promise<void>((resolve) => {\r\n            setTimeout(() => resolve(), 1200);\r\n          }),\r\n        ]);\r\n\r\n        if (previewLoopVersion !== this.previewLoopVersion) {\r\n          return;\r\n        }\r\n\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\r\n  saveBackground = async () => {\r\n    const params = this.resolveParameters();\r\n\r\n    if (this.audioOnlyRoom) {\r\n      params.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              params.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 (!params.transportCreated) {\r\n          await this.createSendTransport({\r\n            option: 'video',\r\n            parameters: { ...params, videoParams: this.videoParams },\r\n          });\r\n        } else {\r\n          try {\r\n            if (\r\n              params.videoProducer?.id &&\r\n              params.videoProducer.track?.id !== this.videoParams?.track?.id\r\n            ) {\r\n              await this.disconnectSendTransportVideo({ parameters: params });\r\n              await this.sleep({ ms: 500 });\r\n            }\r\n            await this.connectSendTransportVideo({\r\n              videoParams: this.videoParams,\r\n              parameters: params,\r\n            });\r\n          } catch (error) {\r\n            console.log(error);\r\n          }\r\n        }\r\n        await this.onScreenChanges({ changed: true, parameters: params });\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      this.cleanupPreviewLifecycle();\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  getCombinedOverlayStyle() {\r\n    const isDarkMode = this.resolvedIsDarkMode;\r\n    return {\r\n      position: this.isEmbedded() ? 'static' : 'fixed',\r\n      top: this.isEmbedded() ? 'auto' : 0,\r\n      left: this.isEmbedded() ? 'auto' : 0,\r\n      width: '100%',\r\n      height: '100%',\r\n      minHeight: this.isEmbedded() ? 0 : undefined,\r\n      backgroundColor: this.isEmbedded()\r\n        ? 'transparent'\r\n        : isDarkMode\r\n          ? 'rgba(2, 6, 23, 0.62)'\r\n          : 'rgba(15, 23, 42, 0.18)',\r\n      backdropFilter: this.isEmbedded() ? 'none' : 'blur(10px)',\r\n      display: this.isEmbedded() ? 'block' : this.isVisible ? 'flex' : 'none',\r\n      alignItems: this.isEmbedded()\r\n        ? undefined\r\n        : this.position.includes('top')\r\n          ? 'flex-start'\r\n          : this.position.includes('bottom')\r\n            ? 'flex-end'\r\n            : 'center',\r\n      justifyContent: this.isEmbedded()\r\n        ? undefined\r\n        : this.position.includes('Left')\r\n          ? 'flex-start'\r\n          : this.position.includes('Right')\r\n            ? 'flex-end'\r\n            : 'center',\r\n      padding: this.isEmbedded() ? '0' : '18px',\r\n      zIndex: this.isEmbedded() ? 'auto' : 999,\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    const isDarkMode = this.resolvedIsDarkMode;\r\n    return {\r\n      background: this.isEmbedded()\r\n        ? 'transparent'\r\n        : typeof this.isDarkMode === 'boolean'\r\n          ? isDarkMode\r\n            ? 'linear-gradient(135deg, rgba(15, 23, 42, 0.96) 0%, rgba(30, 41, 59, 0.94) 100%)'\r\n            : 'linear-gradient(135deg, rgba(255, 255, 255, 0.98) 0%, rgba(241, 245, 249, 0.96) 100%)'\r\n          : this.backgroundColor,\r\n      borderRadius: this.isEmbedded() ? '0' : '24px',\r\n      border: this.isEmbedded()\r\n        ? 'none'\r\n        : isDarkMode\r\n          ? '1px solid rgba(148, 163, 184, 0.18)'\r\n          : '1px solid rgba(148, 163, 184, 0.22)',\r\n      boxShadow: this.isEmbedded() ? 'none' : '0 24px 48px rgba(15, 23, 42, 0.18)',\r\n      padding: this.isEmbedded() ? '0' : '20px',\r\n      width: this.isEmbedded() ? '100%' : 'min(500px, calc(100vw - 36px))',\r\n      maxWidth: this.isEmbedded() ? 'none' : undefined,\r\n      height: this.isEmbedded() ? '100%' : undefined,\r\n      maxHeight: this.isEmbedded() ? 'none' : '84vh',\r\n      overflowY: 'auto',\r\n      overflowX: 'hidden',\r\n      color: isDarkMode ? '#e2e8f0' : '#0f172a',\r\n      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<ng-container *ngIf=\"shouldRenderState() && customTemplate\">\r\n  <ng-container\r\n    *ngTemplateOutlet=\"\r\n      customTemplate;\r\n      context: {\r\n        isVisible: isVisibleState(),\r\n        parameters: parameters,\r\n        position: position,\r\n        backgroundColor: backgroundColor,\r\n        onClose: onClose\r\n      }\r\n    \"\r\n  >\r\n  </ng-container>\r\n</ng-container>\r\n\r\n<div\r\n  *ngIf=\"shouldRenderState() && !customTemplate\"\r\n  class=\"background-modal__overlay\"\r\n  [class.background-modal__overlay--dark]=\"resolvedIsDarkMode\"\r\n  [class.background-modal__overlay--light]=\"!resolvedIsDarkMode\"\r\n  [class.background-modal__overlay--embedded]=\"isEmbedded()\"\r\n  [ngStyle]=\"getCombinedOverlayStyle()\"\r\n>\r\n    <div\r\n      class=\"background-modal__content\"\r\n      [class.background-modal__content--embedded]=\"isEmbedded()\"\r\n      [ngStyle]=\"getCombinedContentStyle()\"\r\n    >\r\n      <div *ngIf=\"showHeader\" class=\"background-modal__header\">\r\n        <div class=\"background-modal__heading\">\r\n          <div class=\"background-modal__eyebrow\">{{ isEmbedded() ? 'Shared sidebar' : 'Camera effects' }}</div>\r\n          <h2 class=\"background-modal__title\">Background Settings</h2>\r\n          <p class=\"background-modal__subtitle\">Select a built-in backdrop or upload a custom image before previewing your camera feed.</p>\r\n        </div>\r\n        <button (click)=\"handleModalClose()\" class=\"background-modal__close\">\r\n          <fa-icon [icon]=\"faTimes\" size=\"xl\" class=\"background-modal__close-icon\"></fa-icon>\r\n        </button>\r\n      </div>\r\n      <hr *ngIf=\"showHeader\" class=\"background-modal__divider\" />\r\n      <div class=\"background-modal__body\">\r\n        <div class=\"background-modal__status\" [class.background-modal__status--success]=\"guidanceTone() === 'success'\">\r\n          <span class=\"background-modal__status-chip\">{{ stageStatusCopy() }}</span>\r\n          <p class=\"background-modal__status-copy\">{{ guidanceCopy() }}</p>\r\n        </div>\r\n        <div id=\"defaultImages\" #defaultImagesContainer class=\"background-modal__gallery\"></div>\r\n        <p class=\"background-modal__hint\">Black screen? Change the selected image to update or clear the preview.</p>\r\n        <div class=\"background-modal__upload\">\r\n          <label for=\"uploadImage\" class=\"background-modal__label\">Upload Custom Image</label>\r\n          <p class=\"background-modal__upload-copy\">PNG and JPG files work best for background replacement.</p>\r\n          <input type=\"file\" class=\"background-modal__file-input\" id=\"uploadImage\" #uploadImageInput (change)=\"handleImageUpload($event)\" />\r\n        </div>\r\n        <canvas id=\"mainCanvas\" #mainCanvas class=\"d-none\"></canvas>\r\n        <div class=\"background-modal__preview-shell\">\r\n          <div class=\"background-modal__preview-header\">\r\n            <div class=\"background-modal__preview-copy\">\r\n              <span class=\"background-modal__preview-label\">Preview stage</span>\r\n              <span class=\"background-modal__preview-caption\">Live background preview updates here.</span>\r\n            </div>\r\n            <span class=\"background-modal__preview-state\">{{ stageStatusCopy() }}</span>\r\n          </div>\r\n          <div class=\"background-modal__preview\">\r\n            <canvas id=\"backgroundCanvas\" #backgroundCanvas class=\"d-none background-modal__stage\"></canvas>\r\n            <video id=\"captureVideo\" #captureVideo class=\"d-none\" muted autoplay playsinline></video>\r\n            <video id=\"previewVideo\" #videoPreview class=\"d-none background-modal__stage\" muted autoplay playsinline></video>\r\n            <div id=\"loadingOverlay\" #loadingOverlay class=\"background-modal__loading d-none\">\r\n              <div class=\"background-modal__spinner-shell\">\r\n                <div class=\"background-modal__spinner-halo\"></div>\r\n                <div class=\"background-modal__spinner\"></div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div class=\"background-modal__actions\">\r\n          <button id=\"applyBackgroundButton\" #applyBackgroundButton class=\"background-modal__action background-modal__action--primary\" (click)=\"applyBackground()\">Preview Background</button>\r\n          <button id=\"saveBackgroundButton\" #saveBackgroundButton class=\"background-modal__action background-modal__action--success d-none\" (click)=\"saveBackground()\">Save Background</button>\r\n        </div>\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  @Input() isDarkMode?: boolean;\r\n  @Input() editingRoomIndex: number | null = null;\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  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\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  isEditingRoom(roomIndex: number): boolean {\r\n    return this.editingRoomIndex === roomIndex;\r\n  }\r\n}\r\n","<div\r\n  *ngIf=\"rooms.length === 0\"\r\n  class=\"room-list__empty-state\"\r\n  [class.room-list__empty-state--dark]=\"resolvedIsDarkMode\"\r\n  [class.room-list__empty-state--light]=\"!resolvedIsDarkMode\"\r\n>\r\n  No breakout rooms configured. Click Random Assign or Add Room to start.\r\n</div>\r\n\r\n<div\r\n  *ngFor=\"let room of rooms; let roomIndex = index\"\r\n  class=\"room-card\"\r\n  [class.room-card--dark]=\"resolvedIsDarkMode\"\r\n  [class.room-card--light]=\"!resolvedIsDarkMode\"\r\n>\r\n    <div class=\"room-card__header\">\r\n      <span class=\"room-card__title\">\r\n        Room {{ roomIndex + 1 }} <fa-icon [icon]=\"faUsers\"></fa-icon>\r\n        <span class=\"room-card__meta\">({{ room.length }} participants)</span>\r\n      </span>\r\n      <div class=\"room-card__controls\">\r\n        <button\r\n          class=\"room-card__icon-button room-card__icon-button--neutral\"\r\n          [class.room-card__icon-button--active]=\"isEditingRoom(roomIndex)\"\r\n          [attr.aria-label]=\"isEditingRoom(roomIndex) ? 'Close room editor' : 'Edit room participants'\"\r\n          (click)=\"handleEditRoom(roomIndex)\"\r\n          type=\"button\"\r\n        >\r\n          <fa-icon [icon]=\"isEditingRoom(roomIndex) ? faTimes : faPen\"></fa-icon>\r\n        </button>\r\n        <button class=\"room-card__icon-button room-card__icon-button--danger\" aria-label=\"Delete room\" (click)=\"handleDeleteRoom(roomIndex)\" type=\"button\">\r\n          <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n        </button>\r\n      </div>\r\n    </div>\r\n    <div class=\"room-card__body\">\r\n      <ul class=\"room-card__list\">\r\n        <li *ngFor=\"let participant of room; let index = index\" class=\"room-card__item\">\r\n          {{ participant.name }}\r\n          <button class=\"room-card__icon-button room-card__icon-button--danger\" aria-label=\"Remove participant from room\" (click)=\"handleRemoveParticipant(roomIndex, participant)\" type=\"button\">\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </li>\r\n        <li *ngIf=\"room.length === 0\" class=\"room-card__empty\">No participants assigned yet.</li>\r\n      </ul>\r\n    </div>\r\n  </div>\r\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy } 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\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../../../modern/utils/render-mode.utils';\r\n\r\n/**\r\n * EditRoomModal - Sub-modal for editing individual breakout room participants\r\n * \r\n * @component\r\n * @description\r\n * Allows host to add/remove participants for a specific breakout room.\r\n * Used within the BreakoutRoomsModal workflow for detailed room management.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with assigned/unassigned participant lists\r\n * 2. **Style Customization**: Override modal appearance with inline styles\r\n * 3. **Full Override**: Replace entire modal with custom implementation\r\n * \r\n * Key Features:\r\n * - View current room participants\r\n * - Add participants from unassigned pool\r\n * - Remove participants from room\r\n * - Responsive modal sizing\r\n * - Room index tracking\r\n * \r\n * @selector app-edit-room-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule\r\n * \r\n * @input editRoomModalVisible - Whether the modal is currently visible. Default: `false`\r\n * @input currentRoom - Array of participants currently in the room being edited. Default: `[]`\r\n * @input participantsRef - Array of all available participants. Default: `[]`\r\n * @input currentRoomIndex - Index of the room being edited. Default: `0`\r\n * @input position - Modal position on screen ('center', etc.). Default: `'center'`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#fff'`\r\n * \r\n * @output setEditRoomModalVisible - EventEmitter to toggle modal visibility. Emits: `boolean`\r\n * @output addParticipant - EventEmitter to add participant to room. Emits: `{ roomIndex: number; participant: Participant | BreakoutParticipant }`\r\n * @output removeParticipant - EventEmitter to remove participant from room. Emits: `{ roomIndex: number; participant: Participant | BreakoutParticipant }`\r\n * \r\n * @method ngOnInit - Initializes modal width and resize listener\r\n * @method ngOnDestroy - Removes resize event listener\r\n * @method calculateModalWidth - Dynamically sets modal width based on screen size\r\n * @method handleAddParticipant - Emits event to add participant to current room\r\n * @method handleRemoveParticipant - Emits event to remove participant from current room\r\n * @method closeModal - Closes modal by emitting visibility change\r\n * @method unassignedParticipants - Returns filtered list of participants not assigned to any room\r\n * @method modalContainerStyle - Returns computed overlay styles\r\n * @method modalContentStyle - Returns computed content styles\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, OnDestroy {\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  @Input() isDarkMode?: boolean;\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\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  private readonly resizeHandler = () => this.calculateModalWidth();\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.calculateModalWidth();\r\n    window.addEventListener('resize', this.resizeHandler);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    window.removeEventListener('resize', this.resizeHandler);\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  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  modalContainerStyle() {\r\n    return this.isEmbedded()\r\n      ? {\r\n          position: 'static',\r\n          top: 'auto',\r\n          left: 'auto',\r\n          width: '100%',\r\n          height: 'auto',\r\n          backgroundColor: 'transparent',\r\n          backdropFilter: 'none',\r\n          zIndex: 'auto',\r\n          display: 'block',\r\n          padding: '16px 0 0',\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          top: 0,\r\n          left: 0,\r\n          width: '100%',\r\n          height: '100%',\r\n          backgroundColor: this.resolvedIsDarkMode ? 'rgba(2, 6, 23, 0.62)' : 'rgba(15, 23, 42, 0.18)',\r\n          backdropFilter: 'blur(8px)',\r\n          zIndex: 1000,\r\n          display: 'flex',\r\n          justifyContent: 'center',\r\n          alignItems: 'center',\r\n          padding: '18px',\r\n        };\r\n  }\r\n\r\n  modalContentStyle() {\r\n    const isDarkMode = this.resolvedIsDarkMode;\r\n    return {\r\n      background: typeof this.isDarkMode === 'boolean'\r\n        ? isDarkMode\r\n          ? 'linear-gradient(135deg, rgba(15, 23, 42, 0.96) 0%, rgba(30, 41, 59, 0.94) 100%)'\r\n          : 'linear-gradient(135deg, rgba(255, 255, 255, 0.98) 0%, rgba(241, 245, 249, 0.96) 100%)'\r\n        : this.backgroundColor,\r\n      borderRadius: this.isEmbedded() ? '20px' : '24px',\r\n      border: isDarkMode\r\n        ? '1px solid rgba(148, 163, 184, 0.18)'\r\n        : '1px solid rgba(148, 163, 184, 0.22)',\r\n      boxShadow: this.isEmbedded()\r\n        ? '0 18px 36px rgba(15, 23, 42, 0.14)'\r\n        : '0 24px 48px rgba(15, 23, 42, 0.18)',\r\n      padding: this.isEmbedded() ? '18px' : '20px',\r\n      width: this.isEmbedded() ? '100%' : `${this.modalWidth}px`,\r\n      maxWidth: '100%',\r\n      maxHeight: this.isEmbedded() ? 'none' : '80%',\r\n      overflowY: 'auto',\r\n      color: isDarkMode ? '#e2e8f0' : '#0f172a',\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  getCombinedOverlayStyle() {\r\n    return {\r\n      ...this.modalContainerStyle(),\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.modalContentStyle(),\r\n      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<ng-container *ngIf=\"editRoomModalVisible && customTemplate\">\r\n  <ng-container\r\n    *ngTemplateOutlet=\"\r\n      customTemplate;\r\n      context: {\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      }\r\n    \"\r\n  >\r\n  </ng-container>\r\n</ng-container>\r\n\r\n<div\r\n  *ngIf=\"editRoomModalVisible && !customTemplate\"\r\n  class=\"modal-container\"\r\n  [class.modal-container--dark]=\"resolvedIsDarkMode\"\r\n  [class.modal-container--light]=\"!resolvedIsDarkMode\"\r\n  [ngStyle]=\"getCombinedOverlayStyle()\"\r\n>\r\n  <div\r\n    class=\"modal-content edit-room-modal__content\"\r\n    [class.edit-room-modal__content--embedded]=\"isEmbedded()\"\r\n    [ngStyle]=\"getCombinedContentStyle()\"\r\n  >\r\n    <div *ngIf=\"!isEmbedded()\" class=\"modal-header edit-room-modal__header\">\r\n      <h5 class=\"modal-title edit-room-modal__title\">Edit Room {{ currentRoomIndex + 1 }} <fa-icon [icon]=\"faPen\"></fa-icon></h5>\r\n      <button type=\"button\" class=\"edit-room-modal__close\" (click)=\"closeModal()\">\r\n        <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n      </button>\r\n    </div>\r\n\r\n    <div *ngIf=\"isEmbedded()\" class=\"edit-room-modal__embedded-heading\">\r\n      <span class=\"edit-room-modal__embedded-badge\">Inline editor</span>\r\n      <span class=\"edit-room-modal__embedded-title\">Room {{ currentRoomIndex + 1 }} assignments</span>\r\n    </div>\r\n\r\n    <div class=\"modal-body edit-room-modal__body\" [class.edit-room-modal__body--embedded]=\"isEmbedded()\">\r\n      <div class=\"list-container edit-room-modal__list-container\">\r\n        <h5>{{ isEmbedded() ? 'Assigned' : 'Assigned Participants' }} <fa-icon [icon]=\"faUsers\"></fa-icon></h5>\r\n        <ul class=\"list-group edit-room-modal__list\">\r\n          <li *ngFor=\"let participant of currentRoom; let i = index\" class=\"list-group-item edit-room-modal__item d-flex justify-content-between align-items-center\">\r\n            {{ participant.name }}\r\n            <button class=\"edit-room-modal__icon-button edit-room-modal__icon-button--danger\" (click)=\"handleRemoveParticipant(currentRoomIndex, participant)\" type=\"button\">\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 edit-room-modal__item d-flex justify-content-between align-items-center\">\r\n            {{ isEmbedded() ? 'No participants' : 'None assigned' }}\r\n          </li>\r\n        </ul>\r\n      </div>\r\n      <div class=\"list-container edit-room-modal__list-container\">\r\n        <h5>{{ isEmbedded() ? 'Unassigned' : 'Unassigned Participants' }} <fa-icon [icon]=\"faUsers\"></fa-icon></h5>\r\n        <ul class=\"list-group edit-room-modal__list\">\r\n          <li *ngFor=\"let participant of unassignedParticipants(); let i = index\" class=\"list-group-item edit-room-modal__item d-flex justify-content-between align-items-center\">\r\n            {{ participant.name }}\r\n            <button class=\"edit-room-modal__icon-button edit-room-modal__icon-button--primary\" (click)=\"handleAddParticipant(currentRoomIndex, participant)\" type=\"button\">\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 edit-room-modal__item d-flex justify-content-between align-items-center\">\r\n            {{ isEmbedded() ? 'None available' : 'None pending' }}\r\n          </li>\r\n        </ul>\r\n      </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"!isEmbedded()\" class=\"modal-footer edit-room-modal__footer\">\r\n      <button type=\"button\" class=\"edit-room-modal__button\" (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\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../../modern/utils/render-mode.utils';\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  isDarkMode?: boolean;\r\n  onBreakoutRoomsClose: () => void;\r\n  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: any;\r\n}\r\n\r\n/**\r\n * BreakoutRoomsModal - Modal for creating and managing breakout rooms\r\n * \r\n * @component\r\n * @description\r\n * Allows hosts to create, configure, and manage breakout rooms for splitting participants into smaller groups.\r\n * Supports random assignment, manual assignment, and room editing.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with room list, assignment controls, and edit room modal\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Create multiple breakout rooms\r\n * - Random participant assignment\r\n * - Manual participant assignment with drag-and-drop\r\n * - Edit room participants\r\n * - Delete rooms\r\n * - Start/stop breakout sessions\r\n * - Room validation and error handling\r\n * \r\n * @selector app-breakout-rooms-modal\r\n * @standalone true\r\n * @imports CommonModule, FormsModule, FontAwesomeModule, RoomListComponent, EditRoomModalComponent\r\n * \r\n * @input isVisible - Whether the modal is currently visible. Default: `false`\r\n * @input parameters - Object containing participants, breakout rooms, and update functions. Default: `{}`\r\n * @input position - Modal position on screen ('topRight', 'topLeft', 'bottomRight', 'bottomLeft'). Default: `'topRight'`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input onBreakoutRoomsClose - Callback function to close the modal. Default: `() => {}`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method ngOnInit - Initializes modal width and breakout rooms\r\n * @method ngOnChanges - Updates breakout rooms when inputs change\r\n * @method calculateModalWidth - Dynamically sets modal width based on screen size\r\n * @method initializeBreakoutRooms - Sets up initial breakout rooms from parameters\r\n * @method handleRandomAssign - Randomly distributes participants to rooms\r\n * @method handleManualAssign - Initializes empty rooms for manual assignment\r\n * @method handleAddRoom - Adds new breakout room\r\n * @method handleSaveRooms - Validates and saves room configurations\r\n * @method validateRooms - Validates room setup and participant assignments\r\n * @method checkCanStartBreakout - Checks if breakout session can start\r\n * @method handleStartBreakout - Starts breakout session\r\n * @method handleStopBreakout - Stops breakout session\r\n * @method handleEditRoom - Opens edit modal for specific room\r\n * @method handleDeleteRoom - Removes room and reassigns participants\r\n * @method handleAddParticipant - Adds participant to room\r\n * @method handleRemoveParticipant - Removes participant from room\r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\r\n * @method modalContainerStyle - Returns computed overlay styles\r\n * @method modalContentStyle - Returns computed content styles\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() isDarkMode?: boolean;\r\n  @Input() onBreakoutRoomsClose: () => void = () => {\r\n    console.log('Breakout rooms closed');\r\n  };\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\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  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\r\n\r\n  private resolveParameters(): BreakoutRoomsModalParameters {\r\n    if (this.parameters?.getUpdatedAllParams) {\r\n      return this.parameters.getUpdatedAllParams();\r\n    }\r\n\r\n    return this.parameters;\r\n  }\r\n\r\n  isVisibleState(): boolean {\r\n    return this.isEmbedded() || this.isVisible;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\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 this.isEmbedded()\r\n      ? {\r\n          display: 'block',\r\n          position: 'static',\r\n          top: 'auto',\r\n          left: 'auto',\r\n          width: '100%',\r\n          height: '100%',\r\n          minHeight: 0,\r\n          backgroundColor: 'transparent',\r\n          backdropFilter: 'none',\r\n          padding: '0',\r\n          zIndex: 'auto',\r\n        }\r\n      : {\r\n          display: this.isVisible ? 'flex' : 'none',\r\n          position: 'fixed',\r\n          top: '0',\r\n          left: '0',\r\n          width: '100%',\r\n          height: '100%',\r\n          backgroundColor: this.resolvedIsDarkMode ? 'rgba(2, 6, 23, 0.62)' : 'rgba(15, 23, 42, 0.18)',\r\n          backdropFilter: 'blur(10px)',\r\n          alignItems: this.position.includes('top') ? 'flex-start' : this.position.includes('bottom') ? 'flex-end' : 'center',\r\n          justifyContent: this.position.includes('Left') ? 'flex-start' : this.position.includes('Right') ? 'flex-end' : 'center',\r\n          padding: '18px',\r\n          zIndex: '999',\r\n        };\r\n  }\r\n\r\n  modalContentStyle() {\r\n    const isDarkMode = this.resolvedIsDarkMode;\r\n    return this.isEmbedded()\r\n      ? {\r\n          background: 'transparent',\r\n          borderRadius: '0',\r\n          border: 'none',\r\n          boxShadow: 'none',\r\n          padding: '0',\r\n          width: '100%',\r\n          maxWidth: 'none',\r\n          height: '100%',\r\n          maxHeight: 'none',\r\n          overflowX: 'hidden',\r\n          overflowY: 'auto',\r\n          color: isDarkMode ? '#e2e8f0' : '#0f172a',\r\n        }\r\n      : {\r\n          background: typeof this.isDarkMode === 'boolean'\r\n            ? isDarkMode\r\n              ? 'linear-gradient(135deg, rgba(15, 23, 42, 0.96) 0%, rgba(30, 41, 59, 0.94) 100%)'\r\n              : 'linear-gradient(135deg, rgba(255, 255, 255, 0.98) 0%, rgba(241, 245, 249, 0.96) 100%)'\r\n            : this.backgroundColor,\r\n          borderRadius: '24px',\r\n          border: isDarkMode\r\n            ? '1px solid rgba(148, 163, 184, 0.18)'\r\n            : '1px solid rgba(148, 163, 184, 0.22)',\r\n          boxShadow: '0 24px 48px rgba(15, 23, 42, 0.18)',\r\n          padding: '20px',\r\n          width: `${this.modalWidth}px`,\r\n          maxHeight: '84vh',\r\n          overflowX: 'hidden',\r\n          overflowY: 'auto',\r\n          color: isDarkMode ? '#e2e8f0' : '#0f172a',\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    const params = this.resolveParameters();\r\n    const filteredParticipants = params.participants.filter(\r\n      (participant: any) => participant.islevel != '2',\r\n    );\r\n    this.participantsRef = filteredParticipants;\r\n    this.breakoutRoomsRef =\r\n      params.breakoutRooms && params.breakoutRooms.length > 0\r\n        ? [...params.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    const params = this.resolveParameters();\r\n    if (params.canStartBreakout) {\r\n      this.startBreakoutButtonVisible = true;\r\n      this.stopBreakoutButtonVisible =\r\n        params.breakOutRoomStarted && !params.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    const params = this.resolveParameters();\r\n    if (params.shareScreenStarted || params.shared) {\r\n      params.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 (params.canStartBreakout) {\r\n      const emitName =\r\n        params.breakOutRoomStarted && !params.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      params.socket.emit(\r\n        emitName,\r\n        {\r\n          breakoutRooms: filteredBreakoutRooms,\r\n          newParticipantAction: this.newParticipantAction,\r\n          roomName: params.roomName,\r\n        },\r\n        (response: { success: any; reason: any }) => {\r\n          if (response.success) {\r\n            params.showAlert?.({ message: 'Breakout rooms active', type: 'success' });\r\n            params.updateBreakOutRoomStarted(true);\r\n            params.updateBreakOutRoomEnded(false);\r\n\r\n            this.onBreakoutRoomsClose();\r\n            if (params.meetingDisplayType != 'all') {\r\n              params.updateMeetingDisplayType('all');\r\n            }\r\n          } else {\r\n            params.showAlert?.({ message: response.reason, type: 'danger' });\r\n          }\r\n        },\r\n      );\r\n\r\n      if (params.localSocket && params.localSocket.id) {\r\n        try {\r\n          params.localSocket.emit(\r\n            emitName,\r\n            {\r\n              breakoutRooms: filteredBreakoutRooms,\r\n              newParticipantAction: this.newParticipantAction,\r\n              roomName: params.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    if (this.editRoomModalVisible && this.parameters.currentRoomIndex === roomIndex) {\r\n      this.editRoomModalVisible = false;\r\n      this.currentRoom = null;\r\n      return;\r\n    }\r\n\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 activeRoomIndex = this.parameters.currentRoomIndex;\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\r\n      if (this.editRoomModalVisible && activeRoomIndex != null) {\r\n        if (activeRoomIndex === roomIndex) {\r\n          this.editRoomModalVisible = false;\r\n          this.currentRoom = null;\r\n        } else if (activeRoomIndex > roomIndex) {\r\n          const nextRoomIndex = activeRoomIndex - 1;\r\n          this.parameters.updateCurrentRoomIndex(nextRoomIndex);\r\n          this.currentRoom = this.breakoutRoomsRef[nextRoomIndex] ?? null;\r\n        } else {\r\n          this.currentRoom = this.breakoutRoomsRef[activeRoomIndex] ?? null;\r\n        }\r\n      }\r\n\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    const params = this.resolveParameters();\r\n    if (this.breakoutRoomsRef[roomIndex].length < params.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 (params.currentRoomIndex != null) {\r\n        this.handleEditRoom(params.currentRoomIndex);\r\n      }\r\n    } else {\r\n      params.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  getCombinedOverlayStyle() {\r\n    return {\r\n      ...this.modalContainerStyle(),\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.modalContentStyle(),\r\n      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<ng-container *ngIf=\"isVisibleState() && customTemplate\">\r\n  <ng-container\r\n    *ngTemplateOutlet=\"\r\n      customTemplate;\r\n      context: {\r\n        isVisible: isVisibleState(),\r\n        parameters: parameters,\r\n        position: position,\r\n        backgroundColor: backgroundColor,\r\n        onBreakoutRoomsClose: onBreakoutRoomsClose\r\n      }\r\n    \"\r\n  >\r\n  </ng-container>\r\n</ng-container>\r\n\r\n<div\r\n  *ngIf=\"isVisibleState() && !customTemplate\"\r\n  class=\"modal-container\"\r\n  [class.modal-container--dark]=\"resolvedIsDarkMode\"\r\n  [class.modal-container--light]=\"!resolvedIsDarkMode\"\r\n  [ngStyle]=\"getCombinedOverlayStyle()\"\r\n>\r\n  <div\r\n    class=\"modal-content breakout-modal__content\"\r\n    [class.breakout-modal__content--embedded]=\"isEmbedded()\"\r\n    [ngStyle]=\"getCombinedContentStyle()\"\r\n  >\r\n    <div *ngIf=\"showHeader\" class=\"modal-header breakout-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 *ngIf=\"showHeader\" class=\"breakout-modal__divider\">\r\n    <div class=\"breakout-modal__controls-card\">\r\n      <div *ngIf=\"isEmbedded()\" class=\"breakout-modal__summary\">\r\n        <span class=\"breakout-modal__summary-badge\">Shared sidebar</span>\r\n        <p>Build rooms, review assignments, then save before starting or updating breakout sessions.</p>\r\n      </div>\r\n\r\n      <div class=\"form-group breakout-modal__field\">\r\n        <label for=\"numRooms\">Number of Rooms <fa-icon [icon]=\"faUsers\"></fa-icon></label>\r\n        <input type=\"number\" class=\"form-control breakout-modal__input\" id=\"numRooms\" [(ngModel)]=\"numRooms\">\r\n      </div>\r\n\r\n      <div class=\"form-group breakout-modal__actions\">\r\n        <button class=\"btn breakout-modal__button breakout-modal__button--primary\" (click)=\"handleRandomAssign()\">Random Assign <fa-icon [icon]=\"faRandom\"></fa-icon></button>\r\n        <button *ngIf=\"!isEmbedded()\" class=\"btn breakout-modal__button breakout-modal__button--secondary\" (click)=\"handleManualAssign()\">Manual Assign <fa-icon [icon]=\"faHandPointer\"></fa-icon></button>\r\n        <button class=\"btn breakout-modal__button breakout-modal__button--success\" (click)=\"handleAddRoom()\">Add Room <fa-icon [icon]=\"faPlus\"></fa-icon></button>\r\n        <button *ngIf=\"!isEmbedded()\" class=\"btn breakout-modal__button breakout-modal__button--info\" (click)=\"handleSaveRooms()\">Save Rooms <fa-icon [icon]=\"faSave\"></fa-icon></button>\r\n      </div>\r\n\r\n      <div class=\"form-group breakout-modal__field\">\r\n        <label for=\"newParticipantAction\">New Participant Action <fa-icon [icon]=\"faUsers\"></fa-icon></label>\r\n        <select class=\"form-control breakout-modal__input\" 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>\r\n\r\n    <div #roomsContainer class=\"breakout-modal__rooms\">\r\n      <app-room-list [rooms]=\"breakoutRoomsRef\" [isDarkMode]=\"resolvedIsDarkMode\" [editingRoomIndex]=\"editRoomModalVisible ? parameters.currentRoomIndex : null\" (editRoom)=\"handleEditRoom($event)\" (deleteRoom)=\"handleDeleteRoom($event)\" (removeParticipant)=\"handleRemoveParticipant($event)\"></app-room-list>\r\n    </div>\r\n\r\n    <div *ngIf=\"isEmbedded()\" class=\"breakout-modal__footer breakout-modal__footer--embedded\">\r\n      <button class=\"btn breakout-modal__button breakout-modal__button--info\" (click)=\"handleSaveRooms()\">\r\n        Save <fa-icon [icon]=\"faSave\"></fa-icon>\r\n      </button>\r\n      <button *ngIf=\"startBreakoutButtonVisible\" class=\"btn breakout-modal__button breakout-modal__button--primary\" (click)=\"handleStartBreakout()\">\r\n        {{ parameters.breakOutRoomStarted && !parameters.breakOutRoomEnded ? 'Update' : 'Start' }} <fa-icon [icon]=\"parameters.breakOutRoomStarted && !parameters.breakOutRoomEnded ? faSyncAlt : faPlay\"></fa-icon>\r\n      </button>\r\n      <button *ngIf=\"stopBreakoutButtonVisible\" class=\"btn breakout-modal__button breakout-modal__button--danger\" (click)=\"handleStopBreakout()\">\r\n        End <fa-icon [icon]=\"faStop\"></fa-icon>\r\n      </button>\r\n    </div>\r\n\r\n    <div *ngIf=\"!isEmbedded() && startBreakoutButtonVisible\" class=\"breakout-modal__footer\">\r\n      <button class=\"btn breakout-modal__button breakout-modal__button--primary\" (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\r\n    <div *ngIf=\"!isEmbedded() && stopBreakoutButtonVisible\" class=\"breakout-modal__footer\">\r\n      <button class=\"btn breakout-modal__button breakout-modal__button--danger\" (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!\" [isDarkMode]=\"resolvedIsDarkMode\" [renderMode]=\"isEmbedded() ? 'inline' : 'modal'\" (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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: any;\r\n}\r\n\r\nexport type CoHostModalType = (options: CoHostModalOptions) => HTMLElement;\r\n\r\n/**\r\n * CoHostModal - Modal for designating and configuring co-host permissions\r\n * \r\n * @component\r\n * @description\r\n * Allows host to select a co-host and configure their specific permissions/responsibilities.\r\n * Co-hosts can assist with managing the session with delegated authority.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with co-host selector and responsibility toggles\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Select co-host from participant list\r\n * - Configure co-host responsibilities (manage participants, media, chat, etc.)\r\n * - Save co-host settings to room\r\n * - Remove co-host designation\r\n * - Socket-based permission sync\r\n * \r\n * @selector app-co-host-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule, FormsModule\r\n * \r\n * @input isCoHostModalVisible - Whether the modal is currently visible. Default: `false`\r\n * @input currentCohost - Name/ID of current co-host. Default: `'No coHost'`\r\n * @input participants - Array of participant objects. Default: `[]`\r\n * @input coHostResponsibility - Array of co-host responsibility objects with toggles. Default: `[]`\r\n * @input position - Modal position on screen ('topRight', 'center', etc.). Default: `'topRight'`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input roomName - Name of the room/session. Default: `''`\r\n * @input showAlert - Optional alert function for displaying messages. Default: `undefined`\r\n * @input updateCoHostResponsibility - Function to update co-host responsibilities. Default: `() => {}`\r\n * @input updateCoHost - Function to update co-host selection. Default: `() => {}`\r\n * @input updateIsCoHostModalVisible - Function to update modal visibility. Default: `() => {}`\r\n * @input socket - Socket.io client instance for real-time communication. Default: `undefined`\r\n * @input onCoHostClose - Callback function to close the modal. Default: `() => {}`\r\n * @input onModifyCoHost - Callback to save co-host settings. Default: `modifyCoHostSettingsService.modifyCoHostSettings`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method ngOnInit - Initializes component and sets default co-host modification handler\r\n * @method ngOnChanges - Updates responsibilities and modal width when inputs change\r\n * @method initializeResponsibilities - Sets up initial responsibility toggles\r\n * @method handleToggleSwitch - Toggles specific co-host responsibility\r\n * @method handleSave - Saves co-host selection and responsibilities\r\n * @method handleClose - Closes modal via onCoHostClose callback\r\n * @method calculateModalWidth - Dynamically sets modal width based on screen size\r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\r\n * @method modalContainerStyle - Returns computed overlay styles\r\n * @method modalContentStyle - Returns computed content styles\r\n * @getter filteredParticipants - Returns participants excluding current co-host\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\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  getCombinedOverlayStyle() {\r\n    return {\r\n      ...this.modalContainerStyle(),\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.modalContentStyle(),\r\n      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<!-- co-host-modal.component.html -->\r\n<ng-container *ngIf=\"isCoHostModalVisible && customTemplate\">\r\n  <ng-container\r\n    *ngTemplateOutlet=\"\r\n      customTemplate;\r\n      context: {\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      }\r\n    \"\r\n  >\r\n  </ng-container>\r\n</ng-container>\r\n\r\n<div *ngIf=\"isCoHostModalVisible && !customTemplate\" [ngStyle]=\"getCombinedOverlayStyle()\">\r\n  <div [ngStyle]=\"getCombinedContentStyle()\">\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, OnDestroy, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport type AlertTone = 'success' | 'danger' | 'info' | 'warning';\r\n\r\nexport type AlertPosition =\r\n  | 'top'\r\n  | 'bottom'\r\n  | 'top-right'\r\n  | 'top-left'\r\n  | 'bottom-right'\r\n  | 'bottom-left'\r\n  | 'center';\r\n\r\nexport interface AlertComponentOptions {\r\n  visible: boolean;\r\n  message: string;\r\n  type: AlertTone;\r\n  duration?: number; // Optional with default value\r\n  onHide?: () => void; // Optional callback function\r\n  textColor?: string; // Optional text color\r\n  position?: AlertPosition;\r\n  isDarkMode?: boolean;\r\n  alertStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\r\n}\r\n\r\nexport type AlertComponentType = (options: AlertComponentOptions) => HTMLElement;\r\n\r\n/**\r\n * AlertComponent - Toast-style notification component for success and error messages\r\n * \r\n * @component\r\n * @description\r\n * Displays toast-style alert messages with automatic dismiss timer and manual close option.\r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default alert styles with custom message and type\r\n * 2. **Style Customization**: Override alert appearance with alertStyle prop\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Auto-dismiss with configurable duration\r\n * - Success/danger type indicators\r\n * - Manual dismiss capability\r\n * - Customizable text color and styling\r\n * - Full template override support\r\n * \r\n * @example\r\n * Basic Usage:\r\n * ```html\r\n * <app-alert-component\r\n *   [visible]=\"showAlert\"\r\n *   [message]=\"'Operation completed successfully!'\"\r\n *   [type]=\"'success'\"\r\n *   [duration]=\"5000\"\r\n *   [onHide]=\"handleAlertClose\">\r\n * </app-alert-component>\r\n * ```\r\n * \r\n * @example\r\n * Style Customization:\r\n * ```html\r\n * <app-alert-component\r\n *   [visible]=\"showError\"\r\n *   [message]=\"'An error occurred'\"\r\n *   [type]=\"'danger'\"\r\n *   [textColor]=\"'white'\"\r\n *   [alertStyle]=\"{\r\n *     backgroundColor: '#dc3545',\r\n *     border: '2px solid #c82333',\r\n *     borderRadius: '8px',\r\n *     padding: '15px 20px'\r\n *   }\"\r\n *   [onHide]=\"handleErrorClose\">\r\n * </app-alert-component>\r\n * ```\r\n * \r\n * @example\r\n * Custom Template Override:\r\n * ```html\r\n * <app-alert-component\r\n *   [visible]=\"showAlert\"\r\n *   [message]=\"alertMessage\"\r\n *   [type]=\"alertType\"\r\n *   [customTemplate]=\"customAlertTemplate\"\r\n *   [onHide]=\"handleAlertClose\">\r\n * </app-alert-component>\r\n * \r\n * <ng-template #customAlertTemplate let-visible=\"visible\" let-message=\"message\" let-type=\"type\">\r\n *   <div class=\"custom-alert\" [class.success]=\"type === 'success'\" [class.danger]=\"type === 'danger'\">\r\n *     <i [class]=\"type === 'success' ? 'fa fa-check-circle' : 'fa fa-exclamation-triangle'\"></i>\r\n *     <span>{{ message }}</span>\r\n *     <button (click)=\"handleAlertClose()\">×</button>\r\n *   </div>\r\n * </ng-template>\r\n * ```\r\n * \r\n * @selector app-alert-component\r\n * @standalone true\r\n * @imports CommonModule\r\n * \r\n * @input visible - Whether the alert is currently visible. Default: `false`\r\n * @input message - The message text to display in the alert. Default: `''`\r\n * @input type - Alert type ('success' or 'danger') affecting color scheme. Default: `'success'`\r\n * @input duration - Auto-dismiss duration in milliseconds. Default: `4000`\r\n * @input textColor - Color of the message text. Default: `'black'`\r\n * @input onHide - Callback function invoked when alert is dismissed (auto or manual). Default: `undefined`\r\n * @input alertStyle - Custom CSS styles to apply to the alert container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default alert template. Default: `undefined`\r\n * \r\n * @method ngOnChanges - Handles input changes and triggers auto-dismiss timer when visible\r\n * @method handlePress - Manually dismisses the alert by invoking onHide callback\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, OnDestroy {\r\n  @Input() visible = false;\r\n  @Input() message = '';\r\n  @Input() type: AlertTone = 'success';\r\n  @Input() duration = 4000;\r\n  @Input() textColor = '';\r\n  @Input() position: AlertPosition = 'top';\r\n  @Input() isDarkMode?: boolean;\r\n  @Input() onHide!: () => void;\r\n  @Input() alertStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\r\n\r\n  alertType: AlertTone = 'success';\r\n  private hideTimeout?: ReturnType<typeof setTimeout>;\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.hideTimeout) {\r\n        clearTimeout(this.hideTimeout);\r\n        this.hideTimeout = undefined;\r\n      }\r\n\r\n      if (this.visible) {\r\n        this.hideTimeout = setTimeout(() => {\r\n          this.onHide?.();\r\n          this.hideTimeout = undefined;\r\n        }, this.duration);\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.hideTimeout) {\r\n      clearTimeout(this.hideTimeout);\r\n      this.hideTimeout = undefined;\r\n    }\r\n  }\r\n\r\n  handlePress() {\r\n    this.onHide?.();\r\n  }\r\n\r\n  get alertLabel(): string {\r\n    switch (this.alertType) {\r\n      case 'danger':\r\n        return 'Attention';\r\n      case 'info':\r\n        return 'Update';\r\n      case 'warning':\r\n        return 'Warning';\r\n      default:\r\n        return 'Success';\r\n    }\r\n  }\r\n\r\n  get alertMeta(): string {\r\n    switch (this.alertType) {\r\n      case 'danger':\r\n        return 'Action needed';\r\n      case 'info':\r\n        return 'Room update';\r\n      case 'warning':\r\n        return 'Review needed';\r\n      default:\r\n        return 'Completed';\r\n    }\r\n  }\r\n\r\n  get alertIcon(): string {\r\n    switch (this.alertType) {\r\n      case 'danger':\r\n        return '!';\r\n      case 'info':\r\n        return 'i';\r\n      case 'warning':\r\n        return '!';\r\n      default:\r\n        return '✓';\r\n    }\r\n  }\r\n\r\n  get alertRole(): 'alert' | 'status' {\r\n    return this.alertType === 'danger' || this.alertType === 'warning' ? 'alert' : 'status';\r\n  }\r\n\r\n  get shellStyle(): Record<string, string> {\r\n    const positionStyles: Record<AlertPosition, { justifyContent: string; alignItems: string }> = {\r\n      top: { justifyContent: 'center', alignItems: 'flex-start' },\r\n      bottom: { justifyContent: 'center', alignItems: 'flex-end' },\r\n      'top-right': { justifyContent: 'flex-end', alignItems: 'flex-start' },\r\n      'top-left': { justifyContent: 'flex-start', alignItems: 'flex-start' },\r\n      'bottom-right': { justifyContent: 'flex-end', alignItems: 'flex-end' },\r\n      'bottom-left': { justifyContent: 'flex-start', alignItems: 'flex-end' },\r\n      center: { justifyContent: 'center', alignItems: 'center' },\r\n    };\r\n\r\n    return positionStyles[this.position] || positionStyles.top;\r\n  }\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\r\n}\r\n","<!-- Custom template override -->\r\n<ng-container *ngIf=\"visible && customTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n    $implicit: {\r\n      visible,\r\n      message,\r\n      type: alertType,\r\n      textColor,\r\n      handlePress: handlePress.bind(this)\r\n    }\r\n  }\"></ng-container>\r\n</ng-container>\r\n\r\n<!-- Default template -->\r\n<div\r\n  *ngIf=\"visible && !customTemplate\"\r\n  class=\"alert-shell\"\r\n  [class.alert-shell--dark]=\"resolvedIsDarkMode\"\r\n  [class.alert-shell--light]=\"!resolvedIsDarkMode\"\r\n  [ngStyle]=\"shellStyle\"\r\n>\r\n  <div\r\n    (click)=\"handlePress()\"\r\n    class=\"alert-card\"\r\n    [class.alert-card--success]=\"alertType === 'success'\"\r\n    [class.alert-card--danger]=\"alertType === 'danger'\"\r\n    [class.alert-card--info]=\"alertType === 'info'\"\r\n    [class.alert-card--warning]=\"alertType === 'warning'\"\r\n    [ngStyle]=\"alertStyle\"\r\n    [attr.role]=\"alertRole\"\r\n    [attr.aria-live]=\"alertRole === 'alert' ? 'assertive' : 'polite'\"\r\n  >\r\n    <div class=\"alert-accent\" aria-hidden=\"true\"></div>\r\n    <div class=\"alert-icon\" aria-hidden=\"true\">{{ alertIcon }}</div>\r\n    <div class=\"alert-copy\">\r\n      <div class=\"alert-header-row\">\r\n        <div class=\"alert-label\">{{ alertLabel }}</div>\r\n        <div class=\"alert-meta\">{{ alertMeta }}</div>\r\n      </div>\r\n      <p [ngStyle]=\"textColor ? { color: textColor } : null\" class=\"alert-message\">{{ message }}</p>\r\n    </div>\r\n    <button type=\"button\" class=\"alert-close\" aria-label=\"Dismiss notification\" (click)=\"handlePress(); $event.stopPropagation()\">×</button>\r\n  </div>\r\n</div>\r\n","import { Component, Input, Injector, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface AudioGridOptions {\r\n  componentsToRender: { component: any; inputs?: any }[];\r\n  containerStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\r\n}\r\n\r\nexport type AudioGridType = (options: AudioGridOptions) => HTMLElement;\r\n\r\n\r\n/**\r\n * @component AudioGrid\r\n * \r\n * A dynamic grid component specifically designed for rendering audio-only participants with customizable\r\n * layout and styling. Supports full template customization for complete control over participant presentation.\r\n *\r\n * @description\r\n * AudioGrid provides three levels of customization to display audio-only participants:\r\n * \r\n * 1. **Basic Usage**: Use the default vertical stacked layout for audio participants\r\n * 2. **Style Customization**: Apply custom styles via `containerStyle` to modify grid appearance\r\n * 3. **Full Template Override**: Provide a custom `ng-template` via `customTemplate` for complete control\r\n * \r\n * **Key Features:**\r\n * - Dynamic rendering of audio-only participant components\r\n * - Efficient injector caching for performance optimization\r\n * - Automatic cache clearing on component changes to prevent memory leaks\r\n * - Customizable container styling\r\n * - Full template override support for custom layouts\r\n * \r\n * @selector app-audio-grid\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @example\r\n * Basic Usage:\r\n * ```html\r\n * <app-audio-grid \r\n *   [componentsToRender]=\"[\r\n *     { component: AudioCard, inputs: { name: 'John Doe', audioLevel: 0.8 } },\r\n *     { component: AudioCard, inputs: { name: 'Jane Smith', audioLevel: 0.5 } }\r\n *   ]\">\r\n * </app-audio-grid>\r\n * ```\r\n *\r\n * @example\r\n * Style Customization:\r\n * ```html\r\n * <app-audio-grid \r\n *   [componentsToRender]=\"audioParticipants\"\r\n *   [containerStyle]=\"{\r\n *     display: 'flex',\r\n *     flexWrap: 'wrap',\r\n *     gap: '12px',\r\n *     padding: '20px',\r\n *     backgroundColor: '#f5f5f5',\r\n *     borderRadius: '8px'\r\n *   }\">\r\n * </app-audio-grid>\r\n * ```\r\n *\r\n * @example\r\n * Custom Template Override:\r\n * ```typescript\r\n * // In your component\r\n * @Component({\r\n *   template: `\r\n *     <app-audio-grid\r\n *       [componentsToRender]=\"audioParticipants\"\r\n *       [customTemplate]=\"customAudioLayout\">\r\n *     </app-audio-grid>\r\n *     \r\n *     <ng-template #customAudioLayout let-gridData>\r\n *       <div class=\"custom-audio-grid\">\r\n *         <h3>Audio Participants ({{ gridData.componentsToRender.length }})</h3>\r\n *         <div class=\"audio-list\">\r\n *           <div *ngFor=\"let item of gridData.componentsToRender; let i = index\"\r\n *                class=\"audio-item\"\r\n *                [class.active]=\"i === activeIndex\">\r\n *             <span class=\"index\">{{ i + 1 }}</span>\r\n *             <ng-container *ngComponentOutlet=\"item.component; injector: createInjector(item.inputs)\"></ng-container>\r\n *           </div>\r\n *         </div>\r\n *       </div>\r\n *     </ng-template>\r\n *   `\r\n * })\r\n * ```\r\n *\r\n * @input componentsToRender - Array of components with optional inputs to render in the grid\r\n * @input containerStyle - Custom CSS styles for the grid container\r\n * @input customTemplate - Custom ng-template for complete grid layout override\r\n *\r\n * @method ngOnChanges - Clears the injector cache on changes to componentsToRender\r\n * @method createInjector - Creates and caches an injector with specific inputs for each component\r\n * @method clearInjectorCache - Clears the cache to avoid memory leaks and ensure updated injectors\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-audio-grid',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div *ngIf=\"customTemplate; else defaultTemplate\" [ngStyle]=\"computedContainerStyle\">\r\n      <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n        $implicit: {\r\n          componentsToRender\r\n        }\r\n      }\"></ng-container>\r\n    </div>\r\n    <ng-template #defaultTemplate>\r\n      <div [ngStyle]=\"computedContainerStyle\">\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    </ng-template>\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  @Input() containerStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\r\n\r\n  private injectorCache = new WeakMap<any, Injector>();\r\n\r\n  constructor(private injector: Injector) {}\r\n\r\n  get hasRenderableItems(): boolean {\r\n    return this.componentsToRender.length > 0;\r\n  }\r\n\r\n  get computedContainerStyle() {\r\n    const baseStyles = {\r\n      'z-index': '9',\r\n      display: this.hasRenderableItems ? 'flex' : 'none',\r\n      'flex-direction': 'column',\r\n      gap: '8px',\r\n      width: '100%',\r\n      height: 'auto',\r\n    };\r\n    return {\r\n      ...baseStyles,\r\n      ...(this.containerStyle ?? {}),\r\n    };\r\n  }\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 (!inputs || typeof inputs !== 'object') {\r\n      return this.injector;\r\n    }\r\n\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 | (() => string);\r\n  tooltip?: string;\r\n  customName?: 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    pressed?: 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\ninterface HoveredTooltipState {\r\n  id: string;\r\n  label: string;\r\n  left: number;\r\n  top: number;\r\n}\r\n\r\n@Component({\r\n    selector: 'app-control-buttons-component',\r\n    imports: [CommonModule, FontAwesomeModule],\r\n    template: `\r\n    <div\r\n      class=\"container\"\r\n      [class.container--dark]=\"resolvedIsDarkMode\"\r\n      [class.container--light]=\"!resolvedIsDarkMode\"\r\n      [ngStyle]=\"getContainerStyle()\"\r\n    >\r\n      <ng-container *ngFor=\"let button of buttons; let i = index\">\r\n      <button\r\n        *ngIf=\"isButtonVisible(button)\"\r\n        type=\"button\"\r\n        class=\"buttonContainer\"\r\n        [ngClass]=\"{ verticalButton: vertical, activeButton: isButtonActive(button) }\"\r\n        [ngStyle]=\"getButtonStyle(button)\"\r\n        [disabled]=\"isButtonDisabled(button)\"\r\n        (click)=\"button.onPress ? button.onPress() : null\"\r\n        (mouseenter)=\"showTooltip(button, i, $event)\"\r\n        (focus)=\"showTooltip(button, i, $event)\"\r\n        (mouseleave)=\"hideTooltip()\"\r\n        (blur)=\"hideTooltip()\"\r\n        [attr.aria-label]=\"getButtonLabel(button)\"\r\n        [attr.aria-pressed]=\"isButtonActive(button)\"\r\n        [attr.aria-describedby]=\"hoveredTooltip && hoveredTooltip.id === getTooltipId(i) ? hoveredTooltip.id : 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=\"isButtonActive(button)\"\r\n              [icon]=\"button.alternateIcon! || button.icon\"\r\n              [style.color]=\"resolveColor(button.activeColor, '#ffffff')\"\r\n            ></fa-icon>\r\n            <fa-icon\r\n              *ngIf=\"!isButtonActive(button)\"\r\n              [icon]=\"button.icon!\"\r\n              [style.color]=\"resolveColor(button.inActiveColor, 'rgba(255, 255, 255, 0.82)')\"\r\n            ></fa-icon>\r\n          </ng-template>\r\n        </ng-template>\r\n\r\n        <!-- Button text -->\r\n        <span\r\n          *ngIf=\"vertical && getButtonName(button) as resolvedName\"\r\n          class=\"buttonText\"\r\n          [ngStyle]=\"{ color: getButtonTextColor(button) }\"\r\n        >\r\n          {{ resolvedName }}\r\n        </span>\r\n      </button>\r\n      </ng-container>\r\n    </div>\r\n\r\n    <div\r\n      *ngIf=\"hoveredTooltip\"\r\n      [id]=\"hoveredTooltip.id\"\r\n      role=\"tooltip\"\r\n      class=\"buttonTooltip\"\r\n      [class.buttonTooltip--dark]=\"resolvedIsDarkMode\"\r\n      [class.buttonTooltip--light]=\"!resolvedIsDarkMode\"\r\n      [ngStyle]=\"{\r\n        left: hoveredTooltip.left + 'px',\r\n        top: hoveredTooltip.top + 'px'\r\n      }\"\r\n    >\r\n      {{ hoveredTooltip.label }}\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() isDarkMode?: boolean;\r\n  @Input() alignment = 'flex-start';\r\n  @Input() vertical = false;\r\n  @Input() buttonsContainerStyle: any = {};\r\n\r\n  hoveredTooltip: HoveredTooltipState | null = null;\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : true;\r\n  }\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  getContainerStyle() {\r\n    const customStyles = { ...(this.buttonsContainerStyle ?? {}) };\r\n\r\n    if (this.isTransparentColor(customStyles['backgroundColor'])) {\r\n      delete customStyles['backgroundColor'];\r\n    }\r\n\r\n    return this.mergeStyles(this.getAlignmentStyle(), customStyles);\r\n  }\r\n\r\n  getButtonStyle(button: Button) {\r\n    const isActive = this.isButtonActive(button);\r\n    const isVisible = this.isButtonVisible(button);\r\n    const defaultBackground =\r\n      button.backgroundColor?.default || this.buttonBackgroundColor?.default || 'transparent';\r\n    const pressedBackground =\r\n      button.backgroundColor?.pressed ||\r\n      this.buttonBackgroundColor?.pressed ||\r\n      defaultBackground;\r\n\r\n    return {\r\n      color: this.getButtonTextColor(button),\r\n      backgroundColor: !isVisible ? 'transparent' : isActive ? pressedBackground : defaultBackground,\r\n      borderColor: 'transparent',\r\n      boxShadow: 'none',\r\n    };\r\n  }\r\n\r\n  isButtonVisible(button: Button): boolean {\r\n    return this.resolveBoolean(button.show, true);\r\n  }\r\n\r\n  isButtonActive(button: Button): boolean {\r\n    return this.resolveBoolean(button.active, false);\r\n  }\r\n\r\n  isButtonDisabled(button: Button): boolean {\r\n    return this.resolveBoolean(button.disabled, false);\r\n  }\r\n\r\n  getButtonName(button: Button): string | null {\r\n    const rawName = typeof button.name === 'function' ? button.name() : button.name;\r\n    const normalizedName = typeof rawName === 'string' ? rawName.trim() : '';\r\n    return normalizedName.length > 0 ? normalizedName : null;\r\n  }\r\n\r\n  getButtonLabel(button: Button): string {\r\n    return button.tooltip || this.getButtonName(button) || button.customName || 'Control button';\r\n  }\r\n\r\n  getButtonTextColor(button: Button): string {\r\n    return button.color || this.buttonColor || '#ffffff';\r\n  }\r\n\r\n  showTooltip(button: Button, index: number, event: MouseEvent | FocusEvent): void {\r\n    const label = getResolvedTooltipLabel(this.getButtonLabel(button));\r\n    const target = event.currentTarget as HTMLElement | null;\r\n\r\n    if (!label || !target || this.isButtonDisabled(button)) {\r\n      this.hoveredTooltip = null;\r\n      return;\r\n    }\r\n\r\n    const rect = target.getBoundingClientRect();\r\n    const viewportWidth = typeof window !== 'undefined' ? window.innerWidth : rect.right + 24;\r\n    const estimatedHalfWidth = Math.min(Math.max(label.length * 4.5 + 18, 44), 122);\r\n    const centeredLeft = rect.left + rect.width / 2;\r\n    const clampedLeft = Math.min(\r\n      viewportWidth - estimatedHalfWidth - 12,\r\n      Math.max(estimatedHalfWidth + 12, centeredLeft),\r\n    );\r\n\r\n    this.hoveredTooltip = {\r\n      id: this.getTooltipId(index),\r\n      label,\r\n      left: clampedLeft,\r\n      top: Math.max(12, rect.top - 14),\r\n    };\r\n  }\r\n\r\n  hideTooltip(): void {\r\n    this.hoveredTooltip = null;\r\n  }\r\n\r\n  getTooltipId(index: number): string {\r\n    return `control-button-tooltip-${index}`;\r\n  }\r\n\r\n  resolveColor(value: string | (() => string) | undefined, fallback: string): string {\r\n    return typeof value === 'function' ? value() : value || fallback;\r\n  }\r\n\r\n  private isTransparentColor(value: string | undefined): boolean {\r\n    if (!value) {\r\n      return true;\r\n    }\r\n\r\n    const normalized = value.replace(/\\s+/g, '').toLowerCase();\r\n    return normalized === 'transparent'\r\n      || normalized === 'rgba(0,0,0,0)'\r\n      || normalized === 'rgba(255,255,255,0)'\r\n      || normalized === 'hsla(0,0%,0%,0)';\r\n  }\r\n\r\n  private resolveBoolean(value: boolean | (() => boolean) | undefined, fallback: boolean): boolean {\r\n    return typeof value === 'function' ? value() : value ?? fallback;\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\r\nfunction getResolvedTooltipLabel(label: string | null): string | null {\r\n  if (!label) {\r\n    return null;\r\n  }\r\n\r\n  const trimmed = label.trim();\r\n  return trimmed.length > 0 ? trimmed : null;\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      class=\"control-buttons-touch\"\r\n      [ngClass]=\"{ 'control-buttons-touch--vertical': direction === 'vertical' }\"\r\n      [ngStyle]=\"mergeStyles(getContainerStyle(), buttonsContainerStyle)\"\r\n    >\r\n      <ng-container *ngFor=\"let button of buttons\">\r\n      <button\r\n        *ngIf=\"isButtonVisible(button)\"\r\n        class=\"control-buttons-touch__button\"\r\n        [class.control-buttons-touch__button--active]=\"isButtonActive(button)\"\r\n        [ngStyle]=\"getButtonStyle(button)\"\r\n        (click)=\"button.onPress ? button.onPress() : null\"\r\n        [disabled]=\"isButtonDisabled(button)\"\r\n        [attr.aria-label]=\"button.name || 'Control button'\"\r\n        [attr.aria-pressed]=\"isButtonActive(button)\"\r\n      >\r\n        <ng-container *ngIf=\"button.icon\">\r\n          <fa-icon\r\n            *ngIf=\"isButtonActive(button)\"\r\n            [icon]=\"button.alternateIcon || button.icon\"\r\n            [style.color]=\"resolveColor(button.activeColor, '#ffffff')\"\r\n          ></fa-icon>\r\n          <fa-icon\r\n            *ngIf=\"!isButtonActive(button)\"\r\n            [icon]=\"button.icon\"\r\n            [style.color]=\"resolveColor(button.inActiveColor, 'rgba(255, 255, 255, 0.82)')\"\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          class=\"control-buttons-touch__label\"\r\n          [style.color]=\"button.color || '#ffffff'\"\r\n        >\r\n          {{ button.name }}\r\n        </span>\r\n      </button>\r\n      </ng-container>\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      .control-buttons-touch {\r\n        box-shadow: 0 14px 36px rgba(15, 23, 42, 0.24);\r\n        backdrop-filter: blur(16px);\r\n      }\r\n\r\n      .control-buttons-touch__button {\r\n        position: relative;\r\n        font-size: 18px;\r\n        transition: transform 160ms ease, background 160ms ease, box-shadow 160ms ease, opacity 160ms ease;\r\n      }\r\n\r\n      .control-buttons-touch__button:hover:not(:disabled) {\r\n        transform: translateY(-1px) scale(1.05);\r\n        background: rgba(255, 255, 255, 0.14) !important;\r\n      }\r\n\r\n      .control-buttons-touch__button:disabled {\r\n        cursor: not-allowed !important;\r\n        opacity: 0.45;\r\n      }\r\n\r\n      .control-buttons-touch__button--active {\r\n        box-shadow: 0 8px 18px rgba(15, 23, 42, 0.24);\r\n      }\r\n\r\n      .control-buttons-touch__label {\r\n        display: none;\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  getContainerStyle() {\r\n    const style: Record<string, string | number> = {\r\n      position: 'absolute',\r\n      width: 'fit-content',\r\n      padding: '8px',\r\n      margin: '10px',\r\n      elevation: 9,\r\n      'z-index': 9,\r\n      'background-color': 'rgba(0, 0, 0, 0.25)',\r\n      'border-radius': '12px',\r\n      display: this.showAspect ? 'flex' : 'none',\r\n      'flex-direction': this.direction === 'vertical' ? 'column' : 'row',\r\n      'align-items': 'center',\r\n      'justify-content': 'center',\r\n      gap: '4px',\r\n    };\r\n\r\n    if (this.location === 'bottom') {\r\n      style.bottom = '0';\r\n      style.top = 'auto';\r\n    } else if (this.location === 'center') {\r\n      style.top = '50%';\r\n      style.bottom = 'auto';\r\n      style.transform = 'translateY(-50%)';\r\n    } else {\r\n      style.top = '0';\r\n      style.bottom = 'auto';\r\n    }\r\n\r\n    if (this.position === 'right') {\r\n      style.right = '0';\r\n      style.left = 'auto';\r\n    } else if (this.position === 'middle') {\r\n      style.left = '50%';\r\n      style.right = 'auto';\r\n      style.transform = this.location === 'center' ? 'translate(-50%, -50%)' : 'translateX(-50%)';\r\n    } else {\r\n      style.left = '0';\r\n      style.right = 'auto';\r\n    }\r\n\r\n    return style;\r\n  }\r\n\r\n  getButtonStyle(button: ButtonTouch) {\r\n    const isActive = this.isButtonActive(button);\r\n\r\n    return {\r\n      width: '48px',\r\n      height: '48px',\r\n      padding: '0',\r\n      margin: '0',\r\n      display: 'flex',\r\n      'align-items': 'center',\r\n      'justify-content': 'center',\r\n      border: 'none',\r\n      'border-radius': '999px',\r\n      cursor: 'pointer',\r\n      'background-color': isActive\r\n        ? button.backgroundColor?.default || 'rgba(255, 255, 255, 0.14)'\r\n        : button.backgroundColor?.default || 'rgba(255, 255, 255, 0.08)',\r\n    };\r\n  }\r\n\r\n  isButtonVisible(button: ButtonTouch): boolean {\r\n    const visible = this.resolveBoolean(button.show, true);\r\n    if (!visible) {\r\n      return button.inActiveColor === 'transparent' && button.activeColor === 'transparent';\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  isButtonActive(button: ButtonTouch): boolean {\r\n    return this.resolveBoolean(button.active, false);\r\n  }\r\n\r\n  isButtonDisabled(button: ButtonTouch): boolean {\r\n    return this.resolveBoolean(button.disabled, false);\r\n  }\r\n\r\n  resolveColor(value: string | (() => string) | undefined, fallback: string): string {\r\n    return typeof value === 'function' ? value() : value || fallback;\r\n  }\r\n\r\n  private resolveBoolean(value: boolean | (() => boolean) | undefined, fallback: boolean): boolean {\r\n    return typeof value === 'function' ? value() : value ?? fallback;\r\n  }\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, TemplateRef } 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  containerStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\r\n  isDarkMode?: boolean;\r\n  enableGlassmorphism?: boolean;\r\n  cellBorderRadius?: number;\r\n}\r\n\r\nexport type FlexibleGridType = (options: FlexibleGridOptions) => HTMLElement;\r\n\r\n/**\r\n * @component FlexibleGrid\r\n * \r\n * A dynamic, highly customizable grid component that renders a specified number of rows and columns,\r\n * with each grid item containing a provided component. Supports full template customization and style overrides.\r\n *\r\n * @description\r\n * FlexibleGrid offers three levels of customization to fit your application's needs:\r\n * \r\n * 1. **Basic Usage**: Use the default grid layout with configurable rows, columns, and components\r\n * 2. **Style Customization**: Apply custom styles via `containerStyle` to modify grid appearance\r\n * 3. **Full Template Override**: Provide a custom `ng-template` via `customTemplate` for complete control\r\n * \r\n * **Key Features:**\r\n * - Dynamic grid generation based on rows and columns\r\n * - Flexible component rendering with input injection\r\n * - Automatic grid recalculation on property changes\r\n * - Customizable grid item dimensions and background colors\r\n * - Full template override support for custom layouts\r\n * \r\n * @selector app-flexible-grid\r\n * @standalone true\r\n * @imports CommonModule\r\n *\r\n * @example\r\n * Basic Usage:\r\n * ```html\r\n * <app-flexible-grid\r\n *   [customWidth]=\"200\"\r\n *   [customHeight]=\"150\"\r\n *   [rows]=\"2\"\r\n *   [columns]=\"3\"\r\n *   [componentsToRender]=\"videoComponents\"\r\n *   backgroundColor=\"#f0f0f0\">\r\n * </app-flexible-grid>\r\n * ```\r\n *\r\n * @example\r\n * Style Customization:\r\n * ```html\r\n * <app-flexible-grid\r\n *   [customWidth]=\"250\"\r\n *   [customHeight]=\"200\"\r\n *   [rows]=\"3\"\r\n *   [columns]=\"4\"\r\n *   [componentsToRender]=\"participantComponents\"\r\n *   [containerStyle]=\"{\r\n *     padding: '20px',\r\n *     borderRadius: '12px',\r\n *     boxShadow: '0 4px 6px rgba(0,0,0,0.1)'\r\n *   }\"\r\n *   backgroundColor=\"white\">\r\n * </app-flexible-grid>\r\n * ```\r\n *\r\n * @example\r\n * Custom Template Override:\r\n * ```typescript\r\n * // In your component\r\n * @Component({\r\n *   template: `\r\n *     <app-flexible-grid\r\n *       [customWidth]=\"300\"\r\n *       [customHeight]=\"200\"\r\n *       [rows]=\"2\"\r\n *       [columns]=\"2\"\r\n *       [componentsToRender]=\"components\"\r\n *       [customTemplate]=\"customGridTemplate\">\r\n *     </app-flexible-grid>\r\n *     \r\n *     <ng-template #customGridTemplate let-gridData>\r\n *       <div class=\"my-custom-grid\">\r\n *         <h3>Custom Grid Layout</h3>\r\n *         <div class=\"grid-container\" \r\n *              [style.grid-template-columns]=\"'repeat(' + gridData.columns + ', 1fr)'\">\r\n *           <div *ngFor=\"let row of gridData.grid\" class=\"grid-row\">\r\n *             <div *ngFor=\"let component of row\" class=\"grid-item\">\r\n *               <ng-container *ngComponentOutlet=\"component.component\"></ng-container>\r\n *             </div>\r\n *           </div>\r\n *         </div>\r\n *       </div>\r\n *     </ng-template>\r\n *   `\r\n * })\r\n * ```\r\n *\r\n * @input customWidth - Width for each grid item in pixels. Default: 0\r\n * @input customHeight - Height for each grid item in pixels. Default: 0\r\n * @input rows - Number of rows in the grid. Default: 0\r\n * @input columns - Number of columns in the grid. Default: 0\r\n * @input componentsToRender - Array of components to render in the grid, each with optional inputs\r\n * @input backgroundColor - Background color for each grid item. Default: 'transparent'\r\n * @input containerStyle - Custom CSS styles for the grid container\r\n * @input customTemplate - Custom ng-template for complete grid layout override\r\n *\r\n * @method ngOnInit - Initializes and generates the grid on component load\r\n * @method ngOnChanges - Regenerates the grid if columns, componentsToRender, or rows change\r\n * @method generateGrid - Builds the grid based on the row, column, and component configurations\r\n * @method getGridItemStyle - Returns a style object for each grid item\r\n * @method createInjector - Creates a cached injector for each component to support dynamic inputs\r\n **/\r\n\r\n@Component({\r\n    selector: 'app-flexible-grid',\r\n    imports: [CommonModule],\r\n    template: `\r\n    <div *ngIf=\"customTemplate; else defaultTemplate\" class=\"flexible-grid flexible-grid--custom\">\r\n      <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n        $implicit: {\r\n          customWidth,\r\n          customHeight,\r\n          rows,\r\n          columns,\r\n          componentsToRender,\r\n          backgroundColor,\r\n          grid\r\n        }\r\n      }\"></ng-container>\r\n    </div>\r\n    <ng-template #defaultTemplate>\r\n      <div class=\"flexible-grid\" [ngStyle]=\"getGridWrapperStyle()\">\r\n        <div\r\n          *ngFor=\"let rowComponents of grid; let rowIndex = index\"\r\n          class=\"flexible-grid__row\"\r\n        >\r\n          <div\r\n            *ngFor=\"let component of rowComponents; let colIndex = index\"\r\n            class=\"flexible-grid__cell\"\r\n            [ngStyle]=\"getGridItemStyle(component)\"\r\n          >\r\n            <ng-container *ngIf=\"component?.component; else emptyCell\">\r\n              <ng-container\r\n                *ngComponentOutlet=\"component.component; injector: createInjector(component.inputs)\"\r\n              ></ng-container>\r\n            </ng-container>\r\n            <ng-template #emptyCell>\r\n              <div class=\"flexible-grid__placeholder\">\r\n                <span class=\"flexible-grid__placeholder-core\"></span>\r\n              </div>\r\n            </ng-template>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </ng-template>\r\n  `,\r\n    styles: [\r\n        `\r\n      .flexible-grid {\r\n        padding: 0;\r\n        display: flex;\r\n        flex-direction: column;\r\n      }\r\n\r\n      .flexible-grid__row {\r\n        display: flex;\r\n        flex-direction: row;\r\n      }\r\n\r\n      .flexible-grid__cell {\r\n        position: relative;\r\n      }\r\n\r\n      .flexible-grid__placeholder {\r\n        width: 100%;\r\n        height: 100%;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n      }\r\n\r\n      .flexible-grid__placeholder-core {\r\n        width: 40px;\r\n        height: 40px;\r\n        border-radius: 50%;\r\n        background: linear-gradient(135deg, rgba(148, 163, 184, 0.16) 0%, rgba(20, 184, 166, 0.16) 100%);\r\n        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.16);\r\n      }\r\n    `,\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  @Input() containerStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\r\n  @Input() isDarkMode = true;\r\n  @Input() enableGlassmorphism = true;\r\n  @Input() cellBorderRadius = 8;\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  getGridWrapperStyle() {\r\n    return {\r\n      ...(this.containerStyle ?? {}),\r\n    };\r\n  }\r\n\r\n  getGridItemStyle(component?: { component: any; inputs?: any }) {\r\n    const hasContent = !!component?.component;\r\n    const emptyBackground = this.enableGlassmorphism\r\n      ? this.isDarkMode\r\n        ? 'rgba(255, 255, 255, 0.03)'\r\n        : 'rgba(0, 0, 0, 0.02)'\r\n      : this.backgroundColor;\r\n    const borderColor = this.enableGlassmorphism\r\n      ? this.isDarkMode\r\n        ? 'rgba(255, 255, 255, 0.06)'\r\n        : 'rgba(0, 0, 0, 0.04)'\r\n      : 'transparent';\r\n\r\n    const baseStyles = {\r\n      flex: 1,\r\n      width: this.customWidth + 'px',\r\n      height: this.customHeight + 'px',\r\n      background: hasContent ? this.backgroundColor : emptyBackground,\r\n      margin: '1px',\r\n      padding: 0,\r\n      borderRadius: `${Math.max(this.cellBorderRadius, 0)}px`,\r\n      border: !hasContent && this.enableGlassmorphism ? `1px solid ${borderColor}` : 'none',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'center',\r\n    };\r\n\r\n    return baseStyles;\r\n  }\r\n\r\n  createInjector(inputs: any) {\r\n    if (!inputs || typeof inputs !== 'object') {\r\n      return this.injector;\r\n    }\r\n\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  isDarkMode?: boolean;\r\n  enableGlassmorphism?: boolean;\r\n  cellBorderRadius?: number;\r\n  enableGlow?: boolean;\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 *ngIf=\"showAspect\" class=\"flexible-video\" [ngStyle]=\"getContainerStyle()\">\r\n      <div\r\n        *ngFor=\"let rowComponents of grid; let rowIndex = index\"\r\n        class=\"flexible-video__row\"\r\n      >\r\n        <div\r\n          *ngFor=\"let component of rowComponents; let colIndex = index\"\r\n          class=\"flexible-video__cell\"\r\n          [ngStyle]=\"getCellStyle(component)\"\r\n        >\r\n          <ng-container *ngIf=\"component?.component; else emptyCell\">\r\n            <ng-container\r\n              *ngComponentOutlet=\"component.component; injector: createInjector(component.inputs)\"\r\n            ></ng-container>\r\n          </ng-container>\r\n          <ng-template #emptyCell>\r\n            <div class=\"flexible-video__placeholder\">\r\n              <span class=\"flexible-video__placeholder-core\"></span>\r\n            </div>\r\n          </ng-template>\r\n        </div>\r\n      </div>\r\n      <div\r\n        *ngIf=\"Screenboard && Screenboard.component\"\r\n        class=\"flexible-video__screenboard\"\r\n        [ngStyle]=\"getScreenboardStyle()\"\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    styles: [\r\n        `\r\n      .flexible-video {\r\n        padding: 0;\r\n        flex: 1;\r\n        margin: 0;\r\n        position: relative;\r\n        display: flex;\r\n        flex-direction: column;\r\n        overflow-x: hidden;\r\n        overflow-y: auto;\r\n      }\r\n\r\n      .flexible-video__row {\r\n        display: flex;\r\n        flex-direction: row;\r\n      }\r\n\r\n      .flexible-video__cell {\r\n        position: relative;\r\n      }\r\n\r\n      .flexible-video__placeholder {\r\n        width: 100%;\r\n        height: 100%;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n      }\r\n\r\n      .flexible-video__placeholder-core {\r\n        width: 44px;\r\n        height: 44px;\r\n        border-radius: 50%;\r\n        background: linear-gradient(135deg, rgba(148, 163, 184, 0.18) 0%, rgba(79, 70, 229, 0.18) 100%);\r\n        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.16);\r\n      }\r\n\r\n      .flexible-video__screenboard {\r\n        position: absolute;\r\n        top: 0;\r\n        z-index: 2;\r\n        overflow: hidden;\r\n      }\r\n    `,\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  @Input() isDarkMode = true;\r\n  @Input() enableGlassmorphism = true;\r\n  @Input() cellBorderRadius = 0;\r\n  @Input() enableGlow = false;\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    this.updateDimensions();\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      this.updateDimensions();\r\n      if (this.showAspect) {\r\n        this.key++;\r\n        this.generateGrid();\r\n      }\r\n    }\r\n\r\n    if (changes['annotateScreenStream'] || changes['localStreamScreen']) {\r\n      this.updateDimensions();\r\n    }\r\n  }\r\n\r\n  updateDimensions() {\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  getContainerStyle() {\r\n    return {\r\n      maxWidth: this.customWidth + 'px',\r\n      left: (this.cardLeft > 0 ? this.cardLeft : 0) + 'px',\r\n    };\r\n  }\r\n\r\n  getCellStyle(component?: CustomMediaComponent) {\r\n    const hasContent = !!component?.component;\r\n    const borderRadius = `${Math.max(this.cellBorderRadius, 0)}px`;\r\n    const baseBackground = hasContent\r\n      ? this.backgroundColor || 'transparent'\r\n      : this.enableGlassmorphism\r\n        ? this.isDarkMode\r\n          ? 'rgba(30, 30, 40, 0.6)'\r\n          : 'rgba(255, 255, 255, 0.6)'\r\n        : this.backgroundColor || 'transparent';\r\n    const borderColor = this.enableGlassmorphism\r\n      ? this.isDarkMode\r\n        ? 'rgba(255, 255, 255, 0.1)'\r\n        : 'rgba(0, 0, 0, 0.1)'\r\n      : 'transparent';\r\n\r\n    return {\r\n      flex: 1,\r\n      width: this.cardWidth + 'px',\r\n      height: this.cardHeight + 'px',\r\n      background: baseBackground,\r\n      margin: '1px',\r\n      padding: '0',\r\n      borderRadius,\r\n      left: this.cardLeft + 'px',\r\n      overflow: 'hidden',\r\n      border: !hasContent && this.enableGlassmorphism ? `1px solid ${borderColor}` : 'none',\r\n      backdropFilter: !hasContent && this.enableGlassmorphism ? 'blur(10px)' : 'none',\r\n      boxShadow: this.enableGlow ? '0 4px 16px rgba(0,0,0,0.18), 0 2px 6px rgba(0,0,0,0.10)' : 'none',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'center',\r\n      position: 'relative',\r\n    };\r\n  }\r\n\r\n  getScreenboardStyle() {\r\n    return {\r\n      left: this.canvasLeft + 'px',\r\n      width: this.cardWidth + 'px',\r\n      height: this.cardHeight + 'px',\r\n      backgroundColor: 'rgba(0, 0, 0, 0.005)',\r\n      borderRadius: `${Math.max(this.cellBorderRadius, 0)}px`,\r\n      boxShadow: this.enableGlow ? '0 4px 16px rgba(0,0,0,0.18), 0 2px 6px rgba(0,0,0,0.10)' : 'none',\r\n      border:\r\n        this.enableGlassmorphism\r\n          ? `1px solid ${this.isDarkMode ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.1)'}`\r\n          : 'none',\r\n    };\r\n  }\r\n\r\n  createInjector(inputs: any) {\r\n    if (!inputs || typeof inputs !== 'object') {\r\n      return this.injector;\r\n    }\r\n\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, TemplateRef } 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  isDarkMode?: boolean;\r\n  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  spinnerStyle?: Partial<CSSStyleDeclaration>;\r\n  textStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\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 && customTemplate\" [ngStyle]=\"modalContainerStyle\" class=\"loading-overlay\">\r\n      <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n        $implicit: {\r\n          isVisible,\r\n          backgroundColor,\r\n          displayColor\r\n        }\r\n      }\"></ng-container>\r\n    </div>\r\n    <div *ngIf=\"isVisible && !customTemplate\" [ngStyle]=\"modalContainerStyle\" class=\"loading-overlay\">\r\n      <div [ngStyle]=\"modalContentStyle\" class=\"modal-content loading-panel\">\r\n        <div class=\"spinner-shell\">\r\n          <div class=\"spinner-halo\" aria-hidden=\"true\"></div>\r\n          <div class=\"spinner\" [ngStyle]=\"spinnerContainerStyle\"></div>\r\n        </div>\r\n        <div [ngStyle]=\"loadingTextStyle\" class=\"loading-text\">{{ loadingText }}</div>\r\n      </div>\r\n    </div>\r\n  `,\r\n    styles: [\r\n        `\r\n      .loading-overlay {\r\n        animation: loading-fade-in 180ms ease-out;\r\n      }\r\n      .loading-panel {\r\n        animation: loading-panel-in 220ms cubic-bezier(0.22, 1, 0.36, 1);\r\n      }\r\n      .spinner {\r\n        border: 4px solid rgba(255, 255, 255, 0.16);\r\n        border-top: 4px solid #60a5fa;\r\n        border-radius: 50%;\r\n        width: 52px;\r\n        height: 52px;\r\n        animation: spin 1s linear infinite;\r\n      }\r\n      .spinner-shell {\r\n        position: relative;\r\n        width: 72px;\r\n        height: 72px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 50%;\r\n        background: linear-gradient(135deg, rgba(59, 130, 246, 0.18) 0%, rgba(79, 70, 229, 0.18) 100%);\r\n        animation: loading-pulse 1.6s ease-in-out infinite;\r\n      }\r\n      .spinner-halo {\r\n        position: absolute;\r\n        inset: -8px;\r\n        border-radius: 50%;\r\n        background: radial-gradient(circle, rgba(96, 165, 250, 0.18) 0%, rgba(96, 165, 250, 0) 72%);\r\n        animation: loading-halo 1.8s ease-in-out 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        gap: 14px;\r\n      }\r\n      .loading-text {\r\n        margin-top: 0;\r\n      }\r\n      @keyframes loading-fade-in {\r\n        from {\r\n          opacity: 0;\r\n        }\r\n        to {\r\n          opacity: 1;\r\n        }\r\n      }\r\n      @keyframes loading-panel-in {\r\n        from {\r\n          opacity: 0;\r\n          transform: translateY(10px) scale(0.96);\r\n        }\r\n        to {\r\n          opacity: 1;\r\n          transform: translateY(0) scale(1);\r\n        }\r\n      }\r\n      @keyframes loading-pulse {\r\n        0%,\r\n        100% {\r\n          transform: scale(0.98);\r\n        }\r\n        50% {\r\n          transform: scale(1.02);\r\n        }\r\n      }\r\n      @keyframes loading-halo {\r\n        0%,\r\n        100% {\r\n          opacity: 0.65;\r\n          transform: scale(0.96);\r\n        }\r\n        50% {\r\n          opacity: 1;\r\n          transform: scale(1.04);\r\n        }\r\n      }\r\n      @media (prefers-reduced-motion: reduce) {\r\n        .loading-overlay,\r\n        .loading-panel,\r\n        .spinner-shell,\r\n        .spinner-halo,\r\n        .spinner {\r\n          animation: none;\r\n        }\r\n      }\r\n    `,\r\n    ]\r\n})\r\nexport class LoadingModal {\r\n  @Input() isVisible = false;\r\n  @Input() backgroundColor?: string = '';\r\n  @Input() displayColor?: string = '';\r\n  @Input() isDarkMode?: boolean;\r\n  @Input() loadingText = 'Loading...';\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() spinnerStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() textStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\r\n\r\n  get modalContainerStyle() {\r\n    const isDarkMode = this.resolvedIsDarkMode;\r\n    const baseStyles = {\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 || (isDarkMode ? 'rgba(2, 6, 23, 0.72)' : 'rgba(15, 23, 42, 0.34)'),\r\n      backdropFilter: 'blur(14px)',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'center',\r\n      zIndex: '999',\r\n    };\r\n    return {\r\n      ...baseStyles,\r\n      ...(this.overlayStyle ?? {}),\r\n    };\r\n  }\r\n\r\n  get modalContentStyle() {\r\n    const isDarkMode = this.resolvedIsDarkMode;\r\n    const baseStyles = {\r\n      background: isDarkMode\r\n        ? 'linear-gradient(135deg, rgba(15, 23, 42, 0.94) 0%, rgba(30, 41, 59, 0.92) 100%)'\r\n        : 'linear-gradient(135deg, rgba(255, 255, 255, 0.96) 0%, rgba(241, 245, 249, 0.94) 100%)',\r\n      borderRadius: '28px',\r\n      padding: '28px 32px',\r\n      minWidth: '240px',\r\n      border: isDarkMode\r\n        ? '1px solid rgba(148, 163, 184, 0.18)'\r\n        : '1px solid rgba(148, 163, 184, 0.24)',\r\n      boxShadow: '0 28px 56px rgba(15, 23, 42, 0.24), 0 0 28px rgba(96, 165, 250, 0.12)',\r\n      textAlign: 'center',\r\n    };\r\n    return {\r\n      ...baseStyles,\r\n      ...(this.contentStyle ?? {}),\r\n    };\r\n  }\r\n\r\n  get spinnerContainerStyle() {\r\n    const baseStyles = {\r\n      marginBottom: '0',\r\n    };\r\n    return {\r\n      ...baseStyles,\r\n      ...(this.spinnerStyle ?? {}),\r\n    };\r\n  }\r\n\r\n  get loadingTextStyle() {\r\n    const isDarkMode = this.resolvedIsDarkMode;\r\n    const baseStyles = {\r\n      color: this.displayColor || (isDarkMode ? '#e2e8f0' : '#0f172a'),\r\n      fontSize: '0.98rem',\r\n      fontWeight: '700',\r\n      letterSpacing: '0.08em',\r\n      textTransform: 'uppercase',\r\n    };\r\n    return {\r\n      ...baseStyles,\r\n      ...(this.textStyle ?? {}),\r\n    };\r\n  }\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\r\n}\r\n","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, TemplateRef } 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  containerStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\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 *ngIf=\"customTemplate; else defaultTemplate\"\r\n      [ngStyle]=\"aspectStyles\"\r\n      [style.backgroundColor]=\"backgroundColor\"\r\n      class=\"aspect-container\"\r\n    >\r\n      <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n        $implicit: {\r\n          backgroundColor,\r\n          showControls,\r\n          containerWidthFraction,\r\n          containerHeightFraction,\r\n          defaultFraction\r\n        }\r\n      }\"></ng-container>\r\n    </div>\r\n    <ng-template #defaultTemplate>\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    </ng-template>\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  @Input() containerStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\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    const baseStyles = {\r\n      height: parentHeight + 'px',\r\n      width: parentWidth + 'px',\r\n    };\r\n\r\n    this.aspectStyles = {\r\n      ...baseStyles,\r\n      ...(this.containerStyle ?? {}),\r\n    };\r\n  };\r\n}\r\n","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, TemplateRef } 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  containerStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\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 *ngIf=\"customTemplate; else defaultTemplate\" [ngStyle]=\"containerStyles\">\r\n      <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n        $implicit: {\r\n          backgroundColor,\r\n          containerWidthFraction,\r\n          containerHeightFraction,\r\n          marginLeft,\r\n          marginRight,\r\n          marginTop,\r\n          marginBottom,\r\n          padding\r\n        }\r\n      }\"></ng-container>\r\n    </div>\r\n    <ng-template #defaultTemplate>\r\n      <div [ngStyle]=\"containerStyles\">\r\n        <ng-content></ng-content>\r\n      </div>\r\n    </ng-template>\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  @Input() containerStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\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    const baseStyles = {\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    this.containerStyles = {\r\n      ...baseStyles,\r\n      ...(this.containerStyle ?? {}),\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 { faClock } from '@fortawesome/free-solid-svg-icons';\r\n\r\ntype TimerTone = 'success' | 'warning' | 'danger' | 'recording';\r\n\r\nexport interface ModernMeetingProgressTimerOptions {\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 ModernMeetingProgressTimerType = (\r\n  options: ModernMeetingProgressTimerOptions,\r\n) => HTMLElement;\r\n\r\n@Component({\r\n  selector: 'app-modern-meeting-progress-timer',\r\n  imports: [CommonModule, FontAwesomeModule],\r\n  template: `\r\n    <div *ngIf=\"showTimer\" [ngStyle]=\"positionStyle\" class=\"badge-container\">\r\n      <div\r\n        [ngStyle]=\"badgeStyle\"\r\n        [attr.title]=\"badgeTitle\"\r\n        [attr.aria-label]=\"ariaLabel\"\r\n        class=\"progress-timer\"\r\n      >\r\n        <span class=\"progress-timer-icon\" [ngClass]=\"iconToneClass\">\r\n          <span *ngIf=\"isRecordingState(); else timerClock\" class=\"progress-timer-dot\"></span>\r\n          <ng-template #timerClock>\r\n            <fa-icon [icon]=\"faClock\"></fa-icon>\r\n          </ng-template>\r\n        </span>\r\n        <span [ngStyle]=\"textStyle\" class=\"progress-timer-text\">{{ meetingProgressTime }}</span>\r\n        <span *ngIf=\"isRecordingState()\" class=\"progress-timer-status\">REC</span>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .badge-container {\r\n        position: relative;\r\n        z-index: 1000;\r\n      }\r\n\r\n      .progress-timer {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        padding: 8px 14px;\r\n        border-radius: 999px;\r\n        border: 1px solid var(--timer-border, rgba(148, 163, 184, 0.28));\r\n        backdrop-filter: blur(12px);\r\n        box-shadow:\r\n          0 18px 34px rgba(15, 23, 42, 0.18),\r\n          0 0 0 1px var(--timer-outline, rgba(255, 255, 255, 0.04));\r\n        color: white;\r\n        animation: progress-timer-enter 180ms ease-out;\r\n      }\r\n\r\n      .progress-timer-icon {\r\n        width: 24px;\r\n        height: 24px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 50%;\r\n        background: var(--timer-icon-background, rgba(255, 255, 255, 0.18));\r\n        color: var(--timer-icon-color, #ffffff);\r\n        flex-shrink: 0;\r\n      }\r\n\r\n      .progress-timer-icon--warning {\r\n        color: #f59e0b;\r\n      }\r\n\r\n      .progress-timer-icon--danger,\r\n      .progress-timer-icon--recording {\r\n        color: #ef4444;\r\n      }\r\n\r\n      .progress-timer-dot {\r\n        width: 10px;\r\n        height: 10px;\r\n        border-radius: 50%;\r\n        background: currentColor;\r\n        animation: progress-timer-pulse 1s ease-in-out infinite;\r\n      }\r\n\r\n      .progress-timer-text {\r\n        color: #ffffff;\r\n        font-family: var(--ms-modern-mono-font-family, 'Consolas', 'Cascadia Code', 'Aptos Mono', monospace);\r\n        font-size: 0.92rem;\r\n        font-weight: 700;\r\n        letter-spacing: 0.06em;\r\n      }\r\n\r\n      .progress-timer-status {\r\n        color: #fca5a5;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', 'Aptos', 'Trebuchet MS', sans-serif);\r\n        font-size: 0.7rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.16em;\r\n      }\r\n\r\n      @keyframes progress-timer-enter {\r\n        from {\r\n          opacity: 0;\r\n          transform: translateY(-6px) scale(0.96);\r\n        }\r\n\r\n        to {\r\n          opacity: 1;\r\n          transform: translateY(0) scale(1);\r\n        }\r\n      }\r\n\r\n      @keyframes progress-timer-pulse {\r\n        0%,\r\n        100% {\r\n          opacity: 1;\r\n          transform: scale(1);\r\n        }\r\n\r\n        50% {\r\n          opacity: 0.42;\r\n          transform: scale(1.24);\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernMeetingProgressTimerComponent {\r\n  @Input() 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  readonly faClock = faClock;\r\n\r\n  get positionStyle(): { [key: string]: string } {\r\n    const positions = {\r\n      topLeft: { position: 'absolute', top: '10px', left: '10px' },\r\n      topRight: { position: 'absolute', top: '10px', right: '10px' },\r\n      bottomLeft: { position: 'absolute', bottom: '10px', left: '10px' },\r\n      bottomRight: { position: 'absolute', bottom: '10px', right: '10px' },\r\n    };\r\n\r\n    return positions[this.position];\r\n  }\r\n\r\n  get badgeStyle(): { [key: string]: string } {\r\n    const accentColor = this.getAccentColor();\r\n\r\n    return {\r\n      background: this.getResolvedBackground(),\r\n      '--timer-border': this.isCustomBackground()\r\n        ? 'rgba(255, 255, 255, 0.18)'\r\n        : this.withAlpha(accentColor, 0.32),\r\n      '--timer-outline': this.withAlpha(accentColor, 0.16),\r\n      '--timer-icon-background': this.withAlpha(accentColor, 0.2),\r\n      '--timer-icon-color': accentColor,\r\n    };\r\n  }\r\n\r\n  get iconToneClass(): string {\r\n    return `progress-timer-icon--${this.resolvedTone}`;\r\n  }\r\n\r\n  get badgeTitle(): string {\r\n    return this.isRecordingState() ? 'Recording in progress' : 'Meeting duration';\r\n  }\r\n\r\n  get ariaLabel(): string {\r\n    return this.isRecordingState()\r\n      ? `Recording in progress ${this.meetingProgressTime}`\r\n      : `Meeting duration ${this.meetingProgressTime}`;\r\n  }\r\n\r\n  isRecordingState(): boolean {\r\n    return this.resolvedTone === 'recording';\r\n  }\r\n\r\n  private get resolvedTone(): TimerTone {\r\n    const normalizedColor = this.normalizeColor(this.initialBackgroundColor);\r\n\r\n    if (normalizedColor === 'red') {\r\n      return 'recording';\r\n    }\r\n\r\n    const elapsedSeconds = this.parseTimeInSeconds(this.meetingProgressTime);\r\n\r\n    if (elapsedSeconds > 55 * 60) {\r\n      return 'danger';\r\n    }\r\n\r\n    if (elapsedSeconds > 45 * 60) {\r\n      return 'warning';\r\n    }\r\n\r\n    if (normalizedColor === 'yellow') {\r\n      return 'warning';\r\n    }\r\n\r\n    return 'success';\r\n  }\r\n\r\n  private getAccentColor(): string {\r\n    if (this.isCustomBackground() && this.resolvedTone === 'success') {\r\n      return '#ffffff';\r\n    }\r\n\r\n    switch (this.resolvedTone) {\r\n      case 'recording':\r\n      case 'danger':\r\n        return '#ef4444';\r\n      case 'warning':\r\n        return '#f59e0b';\r\n      case 'success':\r\n      default:\r\n        return '#22c55e';\r\n    }\r\n  }\r\n\r\n  private getResolvedBackground(): string {\r\n    if (this.isCustomBackground() && this.resolvedTone === 'success') {\r\n      return this.initialBackgroundColor;\r\n    }\r\n\r\n    return 'linear-gradient(135deg, rgba(15, 23, 42, 0.9) 0%, rgba(30, 41, 59, 0.86) 100%)';\r\n  }\r\n\r\n  private isCustomBackground(): boolean {\r\n    return !!this.initialBackgroundColor && !this.normalizeColor(this.initialBackgroundColor);\r\n  }\r\n\r\n  private parseTimeInSeconds(value: string): number {\r\n    const parts = value\r\n      .split(':')\r\n      .map((part) => Number(part))\r\n      .filter((part) => Number.isFinite(part));\r\n\r\n    if (parts.length === 3) {\r\n      return parts[0] * 3600 + parts[1] * 60 + parts[2];\r\n    }\r\n\r\n    if (parts.length === 2) {\r\n      return parts[0] * 60 + parts[1];\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  private normalizeColor(value?: string): string | null {\r\n    if (!value) {\r\n      return null;\r\n    }\r\n\r\n    const normalized = value.trim().toLowerCase();\r\n\r\n    if (['red', '#ff0000', '#ef4444', 'rgb(255, 0, 0)'].includes(normalized)) {\r\n      return 'red';\r\n    }\r\n\r\n    if (['yellow', '#ffff00', '#f59e0b', 'rgb(255, 255, 0)'].includes(normalized)) {\r\n      return 'yellow';\r\n    }\r\n\r\n    if (['green', '#008000', '#22c55e', 'rgb(0, 128, 0)'].includes(normalized)) {\r\n      return 'green';\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private withAlpha(color: string, alpha: number): string {\r\n    const normalized = color.trim();\r\n\r\n    if (normalized.startsWith('rgba(')) {\r\n      return normalized.replace(/rgba\\(([^)]+),\\s*[^,]+\\)$/, (_match, channels) => {\r\n        return `rgba(${channels}, ${alpha})`;\r\n      });\r\n    }\r\n\r\n    if (normalized.startsWith('rgb(')) {\r\n      return normalized.replace('rgb(', 'rgba(').replace(')', `, ${alpha})`);\r\n    }\r\n\r\n    if (normalized.startsWith('#')) {\r\n      const hex = normalized.replace('#', '');\r\n      const validHex = hex.length === 3 ? hex.split('').map((char) => char + char).join('') : hex;\r\n\r\n      if (validHex.length === 6) {\r\n        const red = parseInt(validHex.slice(0, 2), 16);\r\n        const green = parseInt(validHex.slice(2, 4), 16);\r\n        const blue = parseInt(validHex.slice(4, 6), 16);\r\n\r\n        return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\r\n      }\r\n    }\r\n\r\n    return color;\r\n  }\r\n}","import { Component, Input, TemplateRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ModernMeetingProgressTimerComponent } from '../../../modern/display-components/modern-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  containerStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\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, ModernMeetingProgressTimerComponent],\r\n    template: `\r\n    <div *ngIf=\"customTemplate; else defaultTemplate\" [ngStyle]=\"maingridContainerStyle\">\r\n      <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n        $implicit: {\r\n          backgroundColor,\r\n          mainSize,\r\n          height,\r\n          width,\r\n          showAspect,\r\n          timeBackgroundColor,\r\n          showTimer,\r\n          meetingProgressTime\r\n        }\r\n      }\"></ng-container>\r\n    </div>\r\n    <ng-template #defaultTemplate>\r\n      <div [ngStyle]=\"maingridContainerStyle\">\r\n        <app-modern-meeting-progress-timer\r\n          *ngIf=\"showTimer\"\r\n          [meetingProgressTime]=\"meetingProgressTime\"\r\n          [initialBackgroundColor]=\"timeBackgroundColor\"\r\n        ></app-modern-meeting-progress-timer>\r\n        <ng-content></ng-content>\r\n      </div>\r\n    </ng-template>\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  @Input() containerStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\r\n\r\n  get maingridContainerStyle() {\r\n    const baseStyles = {\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      position: 'relative',\r\n      flexDirection: 'row',\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n      overflow: 'hidden',\r\n      boxSizing: 'border-box',\r\n      borderStyle: 'solid',\r\n      borderColor: 'rgba(148, 163, 184, 0.12)',\r\n      borderWidth: '1px',\r\n    };\r\n    return {\r\n      ...baseStyles,\r\n      ...(this.containerStyle ?? {}),\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  TemplateRef,\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  containerStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\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    <ng-container *ngIf=\"customTemplate; else defaultTemplate\">\r\n      <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n        $implicit: {\r\n          mainSize: mainSize,\r\n          doStack: doStack,\r\n          isWideScreen: isWideScreen,\r\n          parentWidth: parentWidth,\r\n          parentHeight: parentHeight\r\n        }\r\n      }\"></ng-container>\r\n    </ng-container>\r\n    <ng-template #defaultTemplate>\r\n      <div [ngStyle]=\"computedContainerStyle\">\r\n        <ng-content></ng-content>\r\n      </div>\r\n    </ng-template>\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  @Input() containerStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\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['containerWidthFraction'] ||\r\n      changes['containerHeightFraction'] ||\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 computedContainerStyle() {\r\n    const baseStyle = {\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      minWidth: '0',\r\n      position: 'relative',\r\n      boxSizing: 'border-box',\r\n    };\r\n    return { ...baseStyle, ...this.containerStyle };\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 } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faClock } from '@fortawesome/free-solid-svg-icons';\r\n\r\ntype TimerTone = 'success' | 'warning' | 'danger' | 'recording';\r\n\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, FontAwesomeModule],\r\n    template: `\r\n    <div *ngIf=\"showTimer\" [ngStyle]=\"positionStyle\" class=\"badge-container\">\r\n      <div\r\n        [ngStyle]=\"badgeStyle\"\r\n        [attr.title]=\"badgeTitle\"\r\n        [attr.aria-label]=\"ariaLabel\"\r\n        class=\"progress-timer\"\r\n      >\r\n        <span class=\"progress-timer-icon\" [ngClass]=\"iconToneClass\">\r\n          <span *ngIf=\"isRecordingState(); else timerClock\" class=\"progress-timer-dot\"></span>\r\n          <ng-template #timerClock>\r\n            <fa-icon [icon]=\"faClock\"></fa-icon>\r\n          </ng-template>\r\n        </span>\r\n        <span [ngStyle]=\"textStyle\" class=\"progress-timer-text\">{{ meetingProgressTime }}</span>\r\n        <span *ngIf=\"isRecordingState()\" class=\"progress-timer-status\">REC</span>\r\n      </div>\r\n    </div>\r\n  `,\r\n    styles: [\r\n        `\r\n      .badge-container {\r\n        position: relative;\r\n        z-index: 1000;\r\n      }\r\n\r\n      .progress-timer {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        padding: 8px 14px;\r\n        border-radius: 999px;\r\n        border: 1px solid var(--timer-border, rgba(148, 163, 184, 0.28));\r\n        backdrop-filter: blur(12px);\r\n        box-shadow:\r\n          0 18px 34px rgba(15, 23, 42, 0.18),\r\n          0 0 0 1px var(--timer-outline, rgba(255, 255, 255, 0.04));\r\n        color: white;\r\n        animation: progress-timer-enter 180ms ease-out;\r\n      }\r\n\r\n      .progress-timer-icon {\r\n        width: 24px;\r\n        height: 24px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 50%;\r\n        background: var(--timer-icon-background, rgba(255, 255, 255, 0.18));\r\n        color: var(--timer-icon-color, #ffffff);\r\n        flex-shrink: 0;\r\n      }\r\n\r\n      .progress-timer-icon--warning {\r\n        color: #f59e0b;\r\n      }\r\n\r\n      .progress-timer-icon--danger,\r\n      .progress-timer-icon--recording {\r\n        color: #ef4444;\r\n      }\r\n\r\n      .progress-timer-dot {\r\n        width: 10px;\r\n        height: 10px;\r\n        border-radius: 50%;\r\n        background: currentColor;\r\n        animation: progress-timer-pulse 1s ease-in-out infinite;\r\n      }\r\n\r\n      .progress-timer-text {\r\n        color: #ffffff;\r\n        font-family: var(--ms-modern-mono-font-family, 'Consolas', 'Cascadia Code', 'Aptos Mono', monospace);\r\n        font-size: 0.92rem;\r\n        font-weight: 700;\r\n        letter-spacing: 0.06em;\r\n      }\r\n\r\n      .progress-timer-status {\r\n        color: #fca5a5;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', 'Aptos', 'Trebuchet MS', sans-serif);\r\n        font-size: 0.7rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.16em;\r\n      }\r\n\r\n      @keyframes progress-timer-enter {\r\n        from {\r\n          opacity: 0;\r\n          transform: translateY(-6px) scale(0.96);\r\n        }\r\n\r\n        to {\r\n          opacity: 1;\r\n          transform: translateY(0) scale(1);\r\n        }\r\n      }\r\n\r\n      @keyframes progress-timer-pulse {\r\n        0%,\r\n        100% {\r\n          opacity: 1;\r\n          transform: scale(1);\r\n        }\r\n\r\n        50% {\r\n          opacity: 0.42;\r\n          transform: scale(1.24);\r\n        }\r\n      }\r\n    `,\r\n    ]\r\n})\r\nexport class MeetingProgressTimer {\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  readonly faClock = faClock;\r\n\r\n  get positionStyle(): { [key: string]: string } {\r\n    const positions = {\r\n      topLeft: { position: 'absolute', top: '10px', left: '10px' },\r\n      topRight: { position: 'absolute', top: '10px', right: '10px' },\r\n      bottomLeft: { position: 'absolute', bottom: '10px', left: '10px' },\r\n      bottomRight: { position: 'absolute', bottom: '10px', right: '10px' },\r\n    };\r\n\r\n    return positions[this.position];\r\n  }\r\n\r\n  get badgeStyle(): { [key: string]: string } {\r\n    const accentColor = this.getAccentColor();\r\n\r\n    return {\r\n      background: this.getResolvedBackground(),\r\n      '--timer-border': this.isCustomBackground()\r\n        ? 'rgba(255, 255, 255, 0.18)'\r\n        : this.withAlpha(accentColor, 0.32),\r\n      '--timer-outline': this.withAlpha(accentColor, 0.16),\r\n      '--timer-icon-background': this.withAlpha(accentColor, 0.2),\r\n      '--timer-icon-color': accentColor,\r\n    };\r\n  }\r\n\r\n  get iconToneClass(): string {\r\n    return `progress-timer-icon--${this.resolvedTone}`;\r\n  }\r\n\r\n  get badgeTitle(): string {\r\n    return this.isRecordingState() ? 'Recording in progress' : 'Meeting duration';\r\n  }\r\n\r\n  get ariaLabel(): string {\r\n    return this.isRecordingState()\r\n      ? `Recording in progress ${this.meetingProgressTime}`\r\n      : `Meeting duration ${this.meetingProgressTime}`;\r\n  }\r\n\r\n  isRecordingState(): boolean {\r\n    return this.resolvedTone === 'recording';\r\n  }\r\n\r\n  private get resolvedTone(): TimerTone {\r\n    const normalizedColor = this.normalizeColor(this.initialBackgroundColor);\r\n\r\n    if (normalizedColor === 'red') {\r\n      return 'recording';\r\n    }\r\n\r\n    const elapsedSeconds = this.parseTimeInSeconds(this.meetingProgressTime);\r\n\r\n    if (elapsedSeconds > 55 * 60) {\r\n      return 'danger';\r\n    }\r\n\r\n    if (elapsedSeconds > 45 * 60) {\r\n      return 'warning';\r\n    }\r\n\r\n    if (normalizedColor === 'yellow') {\r\n      return 'warning';\r\n    }\r\n\r\n    return 'success';\r\n  }\r\n\r\n  private getAccentColor(): string {\r\n    if (this.isCustomBackground() && this.resolvedTone === 'success') {\r\n      return '#ffffff';\r\n    }\r\n\r\n    switch (this.resolvedTone) {\r\n      case 'recording':\r\n      case 'danger':\r\n        return '#ef4444';\r\n      case 'warning':\r\n        return '#f59e0b';\r\n      case 'success':\r\n      default:\r\n        return '#22c55e';\r\n    }\r\n  }\r\n\r\n  private getResolvedBackground(): string {\r\n    if (this.isCustomBackground() && this.resolvedTone === 'success') {\r\n      return this.initialBackgroundColor;\r\n    }\r\n\r\n    return 'linear-gradient(135deg, rgba(15, 23, 42, 0.9) 0%, rgba(30, 41, 59, 0.86) 100%)';\r\n  }\r\n\r\n  private isCustomBackground(): boolean {\r\n    return !!this.initialBackgroundColor && !this.normalizeColor(this.initialBackgroundColor);\r\n  }\r\n\r\n  private parseTimeInSeconds(value: string): number {\r\n    const parts = value\r\n      .split(':')\r\n      .map((part) => Number(part))\r\n      .filter((part) => Number.isFinite(part));\r\n\r\n    if (parts.length === 3) {\r\n      return parts[0] * 3600 + parts[1] * 60 + parts[2];\r\n    }\r\n\r\n    if (parts.length === 2) {\r\n      return parts[0] * 60 + parts[1];\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  private normalizeColor(value?: string): string | null {\r\n    if (!value) {\r\n      return null;\r\n    }\r\n\r\n    const normalized = value.trim().toLowerCase();\r\n\r\n    if (['red', '#ff0000', '#ef4444', 'rgb(255, 0, 0)'].includes(normalized)) {\r\n      return 'red';\r\n    }\r\n\r\n    if (['yellow', '#ffff00', '#f59e0b', 'rgb(255, 255, 0)'].includes(normalized)) {\r\n      return 'yellow';\r\n    }\r\n\r\n    if (['green', '#008000', '#22c55e', 'rgb(0, 128, 0)'].includes(normalized)) {\r\n      return 'green';\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private withAlpha(hexColor: string, alpha: number): string {\r\n    const normalizedHex = hexColor.replace('#', '');\r\n    const hex = normalizedHex.length === 3\r\n      ? normalizedHex\r\n          .split('')\r\n          .map((char) => `${char}${char}`)\r\n          .join('')\r\n      : normalizedHex;\r\n\r\n    const red = Number.parseInt(hex.slice(0, 2), 16);\r\n    const green = Number.parseInt(hex.slice(2, 4), 16);\r\n    const blue = Number.parseInt(hex.slice(4, 6), 16);\r\n\r\n    return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\r\n  }\r\n}\r\n","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, 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=\"hasRenderableImage\" [src]=\"imageSource\" [ngStyle]=\"getImageStyle()\" [alt]=\"name || 'Audio participant'\" class=\"background-image\" (error)=\"handleImageError()\" />\r\n      <div *ngIf=\"!hasRenderableImage\" class=\"avatar-fallback\" [ngStyle]=\"{ borderColor: barColor }\">{{ fallbackInitials }}</div>\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        position: relative;\r\n        overflow: hidden;\r\n        border-radius: 14px;\r\n        background: linear-gradient(145deg, rgba(30, 41, 59, 0.95), rgba(15, 23, 42, 0.98));\r\n        box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);\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        top: 50%;\r\n        left: 50%;\r\n        object-fit: cover;\r\n        border-radius: 18px;\r\n        border: 2px solid rgba(255, 255, 255, 0.16);\r\n        transform: translate(-40px, -40px);\r\n      }\r\n      .avatar-fallback {\r\n        position: absolute;\r\n        width: 80px;\r\n        height: 80px;\r\n        top: 50%;\r\n        left: 50%;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 18px;\r\n        border: 2px solid;\r\n        background: linear-gradient(135deg, rgba(59, 130, 246, 0.78), rgba(20, 184, 166, 0.74));\r\n        color: #ffffff;\r\n        font-size: 1rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.05em;\r\n        transform: translate(-40px, -40px);\r\n      }\r\n      .rounded-image {\r\n        border-radius: 20px;\r\n      }\r\n    `,\r\n    ]\r\n})\r\nexport class MiniCardAudio implements OnInit, OnDestroy, OnChanges {\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: ReturnType<typeof setInterval>[] = [];\r\n  imageLoadFailed = false;\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    this.syncWaveformState();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['showWaveform']) {\r\n      this.syncWaveformState();\r\n    }\r\n\r\n    if (changes['imageSource']) {\r\n      this.imageLoadFailed = false;\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.clearIntervals();\r\n  }\r\n\r\n  syncWaveformState() {\r\n    if (this.showWaveform) {\r\n      this.animateWaveform();\r\n    } else {\r\n      this.resetWaveform();\r\n    }\r\n  }\r\n\r\n  animateWaveform() {\r\n    this.clearIntervals();\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.clearIntervals();\r\n    this.waveformAnimations.fill(0);\r\n  }\r\n\r\n  clearIntervals() {\r\n    this.intervals.forEach((interval) => clearInterval(interval));\r\n    this.intervals = [];\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  get hasRenderableImage(): boolean {\r\n    return Boolean(this.imageSource) && !this.imageLoadFailed;\r\n  }\r\n\r\n  get fallbackInitials(): string {\r\n    const trimmedName = this.name.trim();\r\n    if (!trimmedName) {\r\n      return 'AU';\r\n    }\r\n\r\n    return trimmedName\r\n      .split(/\\s+/)\r\n      .slice(0, 2)\r\n      .map((part) => part.charAt(0).toUpperCase())\r\n      .join('');\r\n  }\r\n\r\n  handleImageError() {\r\n    this.imageLoadFailed = true;\r\n  }\r\n\r\n  getOverlayPosition(position: string) {\r\n    return getOverlayPosition({ position });\r\n  }\r\n}\r\n","import { Component, Input, TemplateRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ModernMeetingProgressTimerComponent } from '../../../modern/display-components/modern-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  containerStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\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, ModernMeetingProgressTimerComponent],\r\n    template: `\r\n    <div *ngIf=\"customTemplate; else defaultTemplate\" [ngStyle]=\"otherGridContainerStyle\">\r\n      <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n        $implicit: {\r\n          backgroundColor,\r\n          width,\r\n          height,\r\n          showAspect,\r\n          timeBackgroundColor,\r\n          showTimer,\r\n          meetingProgressTime\r\n        }\r\n      }\"></ng-container>\r\n    </div>\r\n    <ng-template #defaultTemplate>\r\n      <div [ngStyle]=\"otherGridContainerStyle\">\r\n        <app-modern-meeting-progress-timer\r\n          *ngIf=\"showTimer\"\r\n          [meetingProgressTime]=\"meetingProgressTime\"\r\n          [initialBackgroundColor]=\"timeBackgroundColor\"\r\n          [showTimer]=\"showTimer\"\r\n        ></app-modern-meeting-progress-timer>\r\n        <ng-content></ng-content>\r\n      </div>\r\n    </ng-template>\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  @Input() containerStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\r\n\r\n  get otherGridContainerStyle() {\r\n    const baseStyles = {\r\n      'background-color': this.backgroundColor,\r\n      width: this.width + 'px',\r\n      height: this.height + 'px',\r\n      display: this.showAspect ? 'block' : 'none',\r\n      overflow: 'hidden',\r\n      position: 'relative',\r\n      boxSizing: 'border-box',\r\n      'border-style': 'solid',\r\n      'border-color': 'rgba(148, 163, 184, 0.12)',\r\n      'border-width': '1px',\r\n      'border-radius': '0',\r\n      margin: '0',\r\n      padding: '0'\r\n    };\r\n    return {\r\n      ...baseStyles,\r\n      ...(this.containerStyle ?? {}),\r\n    };\r\n  }\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 {\r\n  faChevronDown,\r\n  faChevronLeft,\r\n  faChevronRight,\r\n  faChevronUp,\r\n  faHome,\r\n  faLock,\r\n  faStar,\r\n  faUsers,\r\n} 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 class=\"pagination\" [ngStyle]=\"getContainerStyle()\">\r\n      <button\r\n        *ngIf=\"shouldShowNavigationArrows()\"\r\n        type=\"button\"\r\n        class=\"pagination__button pagination__button--arrow\"\r\n        [ngStyle]=\"getArrowStyle(!canNavigateBack())\"\r\n        [disabled]=\"!canNavigateBack()\"\r\n        [attr.aria-label]=\"direction === 'vertical' ? 'Previous pages' : 'Previous pages'\"\r\n        (click)=\"shiftWindowBack()\"\r\n      >\r\n        <fa-icon [icon]=\"direction === 'vertical' ? faChevronUp : faChevronLeft\"></fa-icon>\r\n      </button>\r\n      <ng-container *ngFor=\"let item of data; let index = index\">\r\n        <button\r\n          type=\"button\"\r\n          class=\"pagination__button\"\r\n          [ngClass]=\"{ 'pagination__button--active': item == currentUserPage }\"\r\n          [ngStyle]=\"getPageStyle(item)\"\r\n          [attr.aria-label]=\"getPageAriaLabel(item)\"\r\n          (click)=\"handleClick(item)\"\r\n        >\r\n          <fa-icon\r\n            *ngIf=\"item == 0\"\r\n            [icon]=\"faHome\"\r\n            [style.color]=\"item == currentUserPage ? '#ffffff' : getHomeIconColor()\"\r\n          ></fa-icon>\r\n          <fa-icon\r\n            *ngIf=\"isBreakoutRoom(item)\"\r\n            class=\"pagination__room-icon\"\r\n            [icon]=\"faUsers\"\r\n          ></fa-icon>\r\n          <span\r\n            *ngIf=\"item !== 0\"\r\n            class=\"pagination__label\"\r\n            [ngStyle]=\"getPageLabelStyle(item)\"\r\n          >\r\n            {{ getDisplayItem(item) }}\r\n          </span>\r\n          <fa-icon\r\n            *ngIf=\"isBreakoutRoom(item) && showBreakoutLock(item)\"\r\n            class=\"pagination__badge\"\r\n            [icon]=\"faLock\"\r\n          ></fa-icon>\r\n          <fa-icon\r\n            *ngIf=\"isBreakoutRoom(item) && isCurrentBreakoutRoom(item)\"\r\n            class=\"pagination__badge pagination__badge--star\"\r\n            [icon]=\"faStar\"\r\n          ></fa-icon>\r\n        </button>\r\n      </ng-container>\r\n      <button\r\n        *ngIf=\"shouldShowNavigationArrows()\"\r\n        type=\"button\"\r\n        class=\"pagination__button pagination__button--arrow\"\r\n        [ngStyle]=\"getArrowStyle(!canNavigateForward())\"\r\n        [disabled]=\"!canNavigateForward()\"\r\n        [attr.aria-label]=\"direction === 'vertical' ? 'Next pages' : 'Next pages'\"\r\n        (click)=\"shiftWindowForward()\"\r\n      >\r\n        <fa-icon [icon]=\"direction === 'vertical' ? faChevronDown : faChevronRight\"></fa-icon>\r\n      </button>\r\n    </div>\r\n  `,\r\n    styles: [\r\n        `\r\n      .pagination {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        box-sizing: border-box;\r\n        gap: 6px;\r\n        padding: 2px 6px;\r\n        border-radius: 14px;\r\n        overflow-x: auto;\r\n        overflow-y: hidden;\r\n        scrollbar-width: none;\r\n        backdrop-filter: blur(12px);\r\n        box-shadow: 0 8px 18px rgba(15, 23, 42, 0.14);\r\n      }\r\n\r\n      .pagination::-webkit-scrollbar {\r\n        display: none;\r\n      }\r\n\r\n      .pagination__button {\r\n        min-width: 30px;\r\n        height: 30px;\r\n        padding: 0 9px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 6px;\r\n        border: none;\r\n        border-radius: 12px;\r\n        cursor: pointer;\r\n        transition: transform 0.16s ease, box-shadow 0.16s ease, background-color 0.16s ease;\r\n        flex: 0 0 auto;\r\n      }\r\n\r\n      .pagination__button--active {\r\n        transform: translateY(-1px);\r\n      }\r\n\r\n      .pagination__label {\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', 'Aptos', 'Trebuchet MS', sans-serif);\r\n        font-size: 0.76rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.04em;\r\n        white-space: nowrap;\r\n      }\r\n\r\n      .pagination__badge {\r\n        font-size: 0.72rem;\r\n      }\r\n\r\n      .pagination__badge--star {\r\n        color: #f59e0b;\r\n      }\r\n\r\n      .pagination__button--arrow {\r\n        min-width: 28px;\r\n        width: 28px;\r\n        padding: 0;\r\n        background: transparent;\r\n        box-shadow: none;\r\n      }\r\n\r\n      .pagination__room-icon {\r\n        font-size: 0.74rem;\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() maxVisiblePages = 5;\r\n  @Input() parameters: PaginationParameters = {} as PaginationParameters;\r\n\r\n  constructor(private generatePageContentService: GeneratePageContent) {}\r\n\r\n  faHome = faHome;\r\n  faStar = faStar;\r\n  faLock = faLock;\r\n  faUsers = faUsers;\r\n  faChevronLeft = faChevronLeft;\r\n  faChevronRight = faChevronRight;\r\n  faChevronUp = faChevronUp;\r\n  faChevronDown = faChevronDown;\r\n\r\n  data: number[] = [];\r\n  private windowStart = 1;\r\n\r\n  ngOnInit() {\r\n    this.componentSizes = this.resolveParameters().componentSizes;\r\n    if (!this.handlePageChange) {\r\n      this.handlePageChange = this.generatePageContentService.generatePageContent.bind(\r\n        this.generatePageContentService,\r\n      );\r\n    }\r\n    this.refreshVisiblePages();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['totalPages'] || changes['currentUserPage'] || changes['parameters']) {\r\n      this.refreshVisiblePages();\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    const resolvedParameters = this.resolveParameters();\r\n    const params = { ...resolvedParameters };\r\n    this.componentSizes = params.componentSizes;\r\n\r\n    if (resolvedParameters.breakOutRoomStarted && !resolvedParameters.breakOutRoomEnded && page !== 0) {\r\n      const roomMember = resolvedParameters.breakoutRooms.find((r: any[]) =>\r\n        r.find((p) => p.name == resolvedParameters.member),\r\n      );\r\n      const pageInt = page - resolvedParameters.mainRoomsLength;\r\n      let memberBreakRoom = -1;\r\n      if (roomMember) {\r\n        memberBreakRoom = resolvedParameters.breakoutRooms.indexOf(roomMember);\r\n      }\r\n\r\n      if ((memberBreakRoom == -1 || memberBreakRoom !== pageInt) && pageInt >= 0) {\r\n        if (resolvedParameters.islevel !== '2') {\r\n          if (resolvedParameters.showAlert) {\r\n            resolvedParameters.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 (resolvedParameters.hostNewRoom !== pageInt) {\r\n          resolvedParameters.socket.emit('updateHostBreakout', {\r\n            newRoom: pageInt,\r\n            roomName: resolvedParameters.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 (resolvedParameters.islevel == '2' && resolvedParameters.hostNewRoom !== -1) {\r\n          resolvedParameters.socket.emit('updateHostBreakout', {\r\n            prevRoom: resolvedParameters.hostNewRoom,\r\n            newRoom: -1,\r\n            roomName: resolvedParameters.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 (resolvedParameters.islevel == '2' && resolvedParameters.hostNewRoom !== -1) {\r\n        resolvedParameters.socket.emit('updateHostBreakout', {\r\n          prevRoom: resolvedParameters.hostNewRoom,\r\n          newRoom: -1,\r\n          roomName: resolvedParameters.roomName,\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  componentSizes: ComponentSizes = {} as ComponentSizes;\r\n\r\n  resolveParameters(): PaginationParameters {\r\n    if (this.parameters?.getUpdatedAllParams) {\r\n      return this.parameters.getUpdatedAllParams();\r\n    }\r\n\r\n    return this.parameters;\r\n  }\r\n\r\n  isDarkModeEnabled(): boolean {\r\n    const params = this.resolveParameters();\r\n\r\n    if (typeof params?.isDarkModeValue === 'boolean') {\r\n      return params.isDarkModeValue;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  refreshVisiblePages(): void {\r\n    this.syncWindowToCurrentPage();\r\n\r\n    if (!this.shouldShowNavigationArrows()) {\r\n      this.data = Array.from({ length: this.totalPages + 1 }, (_, index) => index);\r\n      return;\r\n    }\r\n\r\n    const windowEnd = Math.min(this.windowStart + this.maxVisiblePages - 1, this.totalPages);\r\n    this.data = [0];\r\n\r\n    for (let page = this.windowStart; page <= windowEnd; page += 1) {\r\n      this.data.push(page);\r\n    }\r\n  }\r\n\r\n  shouldShowNavigationArrows(): boolean {\r\n    return this.totalPages > this.maxVisiblePages + 1;\r\n  }\r\n\r\n  canNavigateBack(): boolean {\r\n    return this.windowStart > 1;\r\n  }\r\n\r\n  canNavigateForward(): boolean {\r\n    return this.windowStart + this.maxVisiblePages <= this.totalPages;\r\n  }\r\n\r\n  shiftWindowBack(): void {\r\n    if (!this.canNavigateBack()) {\r\n      return;\r\n    }\r\n\r\n    this.windowStart = this.clampWindowStart(this.windowStart - this.getWindowShiftAmount());\r\n    this.refreshVisiblePages();\r\n  }\r\n\r\n  shiftWindowForward(): void {\r\n    if (!this.canNavigateForward()) {\r\n      return;\r\n    }\r\n\r\n    this.windowStart = this.clampWindowStart(this.windowStart + this.getWindowShiftAmount());\r\n    this.refreshVisiblePages();\r\n  }\r\n\r\n  getArrowStyle(disabled: boolean) {\r\n    const isDarkMode = this.isDarkModeEnabled();\r\n\r\n    return {\r\n      color: disabled\r\n        ? isDarkMode\r\n          ? 'rgba(226, 232, 240, 0.32)'\r\n          : 'rgba(15, 23, 42, 0.32)'\r\n        : isDarkMode\r\n          ? 'rgba(226, 232, 240, 0.86)'\r\n          : 'rgba(15, 23, 42, 0.82)',\r\n      cursor: disabled ? 'not-allowed' : 'pointer',\r\n      opacity: disabled ? '0.6' : '1',\r\n    };\r\n  }\r\n\r\n  getHomeIconColor(): string {\r\n    return this.isDarkModeEnabled() ? 'rgba(226, 232, 240, 0.82)' : 'rgba(15, 23, 42, 0.68)';\r\n  }\r\n\r\n  getContainerStyle() {\r\n    const otherHeight = this.componentSizes?.otherHeight || 0;\r\n    const otherWidth = this.componentSizes?.otherWidth || 0;\r\n    const isDarkMode = this.isDarkModeEnabled();\r\n\r\n    return {\r\n      background:\r\n        this.backgroundColor ||\r\n        (isDarkMode\r\n          ? 'linear-gradient(135deg, rgba(15, 23, 42, 0.92) 0%, rgba(30, 41, 59, 0.88) 100%)'\r\n          : 'linear-gradient(135deg, rgba(255, 255, 255, 0.92) 0%, rgba(226, 232, 240, 0.88) 100%)'),\r\n      justifyContent:\r\n        this.position == 'middle'\r\n          ? 'center'\r\n          : this.position == 'left'\r\n            ? 'flex-start'\r\n            : 'flex-end',\r\n      alignItems:\r\n        this.location == 'middle'\r\n          ? 'center'\r\n          : this.location == 'top'\r\n            ? 'flex-start'\r\n            : 'flex-end',\r\n      margin: '0',\r\n      minHeight: this.direction == 'horizontal' ? this.paginationHeight + 'px' : otherHeight + 'px',\r\n      minWidth: this.direction == 'horizontal' ? otherWidth + 'px' : this.paginationHeight + 'px',\r\n      width: this.direction == 'horizontal' ? '100%' : this.paginationHeight + 'px',\r\n      height: this.direction == 'horizontal' ? this.paginationHeight + 'px' : '100%',\r\n      display: this.showAspect ? 'flex' : 'none',\r\n      maxHeight: this.direction == 'horizontal' ? this.paginationHeight + 'px' : '100%',\r\n      maxWidth: this.direction == 'horizontal' ? '100%' : this.paginationHeight + 'px',\r\n      flexDirection: this.direction == 'vertical' ? 'column' : 'row',\r\n      border: isDarkMode\r\n        ? '1px solid rgba(148, 163, 184, 0.18)'\r\n        : '1px solid rgba(148, 163, 184, 0.24)',\r\n      ...(this.buttonsContainerStyle || {}),\r\n    };\r\n  }\r\n\r\n  getPageStyle(item: number) {\r\n    const active = item == this.currentUserPage;\r\n    const isDarkMode = this.isDarkModeEnabled();\r\n\r\n    return {\r\n      background: active\r\n        ? 'linear-gradient(135deg, rgba(37, 99, 235, 0.92) 0%, rgba(79, 70, 229, 0.9) 100%)'\r\n        : isDarkMode\r\n          ? 'rgba(30, 41, 59, 0.82)'\r\n          : 'rgba(255, 255, 255, 0.62)',\r\n      color: active ? '#ffffff' : isDarkMode ? '#e2e8f0' : '#0f172a',\r\n      boxShadow: active\r\n        ? '0 12px 26px rgba(37, 99, 235, 0.24)'\r\n        : isDarkMode\r\n          ? 'inset 0 1px 0 rgba(255, 255, 255, 0.06)'\r\n          : 'inset 0 1px 0 rgba(255, 255, 255, 0.22)',\r\n      ...(active ? this.activePageStyle : this.inactivePageStyle),\r\n    };\r\n  }\r\n\r\n  getPageLabelStyle(item: number) {\r\n    const isDarkMode = this.isDarkModeEnabled();\r\n\r\n    return {\r\n      color: item == this.currentUserPage ? '#ffffff' : isDarkMode ? '#e2e8f0' : '#0f172a',\r\n    };\r\n  }\r\n\r\n  getPageAriaLabel(item: number): string {\r\n    if (item === 0) {\r\n      return 'Go to main room';\r\n    }\r\n\r\n    if (this.isBreakoutRoom(item)) {\r\n      return `Go to breakout room ${this.getBreakoutRoomNumber(item)}`;\r\n    }\r\n\r\n    return `Go to page ${item}`;\r\n  }\r\n\r\n  isBreakoutRoom = (item: number): boolean => {\r\n    const params = this.resolveParameters();\r\n\r\n    return (\r\n      params.breakOutRoomStarted &&\r\n      !params.breakOutRoomEnded &&\r\n      item >= params.mainRoomsLength\r\n    );\r\n  };\r\n\r\n  isCurrentBreakoutRoom(item: number): boolean {\r\n    const params = this.resolveParameters();\r\n\r\n    return this.isBreakoutRoom(item) && params.memberRoom + 1 === item - (params.mainRoomsLength - 1);\r\n  }\r\n\r\n  showBreakoutLock(item: number): boolean {\r\n    const params = this.resolveParameters();\r\n\r\n    return (\r\n      this.isBreakoutRoom(item) &&\r\n      params.memberRoom + 1 !== item - (params.mainRoomsLength - 1) &&\r\n      params.islevel !== '2'\r\n    );\r\n  }\r\n\r\n  getDisplayItem(item: number) {\r\n    const roomNumber = this.getBreakoutRoomNumber(item);\r\n\r\n    if (this.isBreakoutRoom(item)) {\r\n      return roomNumber.toString();\r\n    }\r\n\r\n    return item.toString();\r\n  }\r\n\r\n  private syncWindowToCurrentPage(): void {\r\n    if (!this.shouldShowNavigationArrows()) {\r\n      this.windowStart = 1;\r\n      return;\r\n    }\r\n\r\n    if (this.currentUserPage <= 0) {\r\n      this.windowStart = this.clampWindowStart(this.windowStart);\r\n      return;\r\n    }\r\n\r\n    const windowEnd = this.windowStart + this.maxVisiblePages - 1;\r\n    if (this.currentUserPage >= this.windowStart && this.currentUserPage <= windowEnd) {\r\n      this.windowStart = this.clampWindowStart(this.windowStart);\r\n      return;\r\n    }\r\n\r\n    const centeredStart = this.currentUserPage - Math.floor(this.maxVisiblePages / 2);\r\n    this.windowStart = this.clampWindowStart(centeredStart);\r\n  }\r\n\r\n  private clampWindowStart(candidate: number): number {\r\n    const maxStart = Math.max(1, this.totalPages - this.maxVisiblePages + 1);\r\n\r\n    return Math.max(1, Math.min(candidate, maxStart));\r\n  }\r\n\r\n  private getWindowShiftAmount(): number {\r\n    return Math.max(1, this.maxVisiblePages - 2);\r\n  }\r\n\r\n  private getBreakoutRoomNumber(item: number): number {\r\n    const params = this.resolveParameters();\r\n\r\n    return item - (params.mainRoomsLength - 1);\r\n  }\r\n}\r\n","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, TemplateRef } 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  containerStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\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 *ngIf=\"showControls && customTemplate\" [ngStyle]=\"computedContainerStyle\">\r\n      <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n        $implicit: {\r\n          backgroundColor,\r\n          showControls,\r\n          containerWidthFraction,\r\n          containerHeightFraction,\r\n          defaultFractionSub\r\n        }\r\n      }\"></ng-container>\r\n    </div>\r\n    <div\r\n      *ngIf=\"showControls && !customTemplate\"\r\n      [ngStyle]=\"computedContainerStyle\"\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  @Input() containerStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\r\n\r\n  aspectStyles = {\r\n    height: 0,\r\n    width: 0,\r\n  };\r\n\r\n  private readonly updateAspectStylesHandler = () => {\r\n    this.updateAspectStyles();\r\n  };\r\n\r\n  get computedContainerStyle() {\r\n    const baseStyles = {\r\n      position: 'relative',\r\n      margin: '0',\r\n      backgroundColor: this.backgroundColor,\r\n      display: this.showControls ? 'flex' : 'none',\r\n      flex: '0 0 auto',\r\n      alignSelf: 'stretch',\r\n      height: this.aspectStyles.height + 'px',\r\n      minHeight: this.aspectStyles.height + 'px',\r\n      width: this.aspectStyles.width + 'px',\r\n      maxWidth: '100%',\r\n      boxSizing: 'border-box',\r\n    };\r\n    return {\r\n      ...baseStyles,\r\n      ...(this.containerStyle ?? {}),\r\n    };\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.updateAspectStyles();\r\n    window.addEventListener('resize', this.updateAspectStylesHandler);\r\n    window.addEventListener('orientationchange', this.updateAspectStylesHandler);\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.updateAspectStylesHandler);\r\n    window.removeEventListener('orientationchange', this.updateAspectStylesHandler);\r\n  }\r\n\r\n  private updateAspectStyles() {\r\n    const windowWidth = window.innerWidth;\r\n    const windowHeight = window.innerHeight;\r\n    let height = 0;\r\n\r\n    if (this.showControls) {\r\n      if (\r\n        typeof this.containerHeightFraction === 'number' &&\r\n        this.containerHeightFraction > 0 &&\r\n        this.containerHeightFraction !== 1\r\n      ) {\r\n        height = this.containerHeightFraction * windowHeight;\r\n      } else if (this.defaultFractionSub > 0) {\r\n        height = this.defaultFractionSub * windowHeight;\r\n      } else {\r\n        height = 40;\r\n      }\r\n    }\r\n\r\n    this.aspectStyles = {\r\n      height,\r\n      width: Math.max(0, 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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: any;\r\n}\r\n\r\nexport type DisplaySettingsModalType = (options: DisplaySettingsModalOptions) => HTMLElement;\r\n\r\n/**\r\n * DisplaySettingsModal - Modal for configuring video grid layout and display preferences\r\n * \r\n * @component\r\n * @description\r\n * Provides controls for customizing the meeting video display layout and behavior.\r\n * Includes display type (video, media, all), auto-wave, force full display, and video optimization settings.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with layout toggles and checkboxes\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Display type selection (video, media, all)\r\n * - Auto-wave toggle (show waveform on audio detection)\r\n * - Force full display toggle\r\n * - Video optimization toggle\r\n * - Real-time layout updates\r\n * \r\n * @example\r\n * Basic Usage:\r\n * ```html\r\n * <app-display-settings-modal\r\n *   [isDisplaySettingsModalVisible]=\"showDisplaySettings\"\r\n *   [parameters]=\"displayParams\"\r\n *   [onModifyDisplaySettings]=\"saveDisplaySettings\"\r\n *   [onDisplaySettingsClose]=\"closeDisplaySettings\">\r\n * </app-display-settings-modal>\r\n * ```\r\n * \r\n * @example\r\n * Style Customization:\r\n * ```html\r\n * <app-display-settings-modal\r\n *   [isDisplaySettingsModalVisible]=\"showDisplaySettings\"\r\n *   [parameters]=\"displayParams\"\r\n *   [overlayStyle]=\"{\r\n *     backgroundColor: 'rgba(0, 0, 0, 0.7)'\r\n *   }\"\r\n *   [contentStyle]=\"{\r\n *     backgroundColor: '#ffffff',\r\n *     borderRadius: '12px',\r\n *     padding: '25px',\r\n *     boxShadow: '0 4px 6px rgba(0,0,0,0.1)'\r\n *   }\"\r\n *   [position]=\"'center'\"\r\n *   [backgroundColor]=\"'#f0f0f0'\"\r\n *   [onDisplaySettingsClose]=\"closeDisplaySettings\">\r\n * </app-display-settings-modal>\r\n * ```\r\n * \r\n * @example\r\n * Custom Template Override:\r\n * ```html\r\n * <app-display-settings-modal\r\n *   [isDisplaySettingsModalVisible]=\"showDisplaySettings\"\r\n *   [customTemplate]=\"customDisplayTemplate\"\r\n *   [onDisplaySettingsClose]=\"closeDisplaySettings\">\r\n * </app-display-settings-modal>\r\n * \r\n * <ng-template #customDisplayTemplate let-displayType=\"meetingDisplayType\" let-autoWave=\"autoWave\" let-onSave=\"onSave\">\r\n *   <div class=\"custom-display-settings\">\r\n *     <h3>Layout Settings</h3>\r\n *     <label>\r\n *       Display Type:\r\n *       <select [(ngModel)]=\"displayType\">\r\n *         <option value=\"video\">Video Only</option>\r\n *         <option value=\"media\">Media Only</option>\r\n *         <option value=\"all\">All Participants</option>\r\n *       </select>\r\n *     </label>\r\n *     <label>\r\n *       <input type=\"checkbox\" [(ngModel)]=\"autoWave\">\r\n *       Show audio waveforms\r\n *     </label>\r\n *     <button (click)=\"onSave()\">Apply Settings</button>\r\n *   </div>\r\n * </ng-template>\r\n * ```\r\n * \r\n * @selector app-display-settings-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule, FormsModule\r\n * \r\n * @input isDisplaySettingsModalVisible - Whether the modal is currently visible. Default: `false`\r\n * @input onDisplaySettingsClose - Callback function to close the modal. Default: `() => {}`\r\n * @input onModifyDisplaySettings - Callback to save modified display settings. Default: `modifyDisplaySettingsService.modifyDisplaySettings`\r\n * @input parameters - Object containing current display settings (meetingDisplayType, autoWave, forceFullDisplay, meetingVideoOptimized). Default: `{}`\r\n * @input position - Modal position on screen ('topRight', 'center', etc.). Default: `'topRight'`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method ngOnInit - Initializes component and synchronizes state with parameters\r\n * @method handleSaveSettings - Saves modified display settings and closes modal\r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\r\n\r\n  faTimes = faTimes;\r\n\r\n  meetingDisplayTypeState!: string;\r\n  autoWaveState = false;\r\n  forceFullDisplayState = false;\r\n  showSubtitlesOnCardsState = true;\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.showSubtitlesOnCardsState = this.parameters.showSubtitlesOnCards ?? true;\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        showSubtitlesOnCards: this.showSubtitlesOnCardsState,\r\n        meetingVideoOptimized: this.meetingVideoOptimizedState,\r\n      },\r\n    });\r\n  };\r\n\r\n  getCombinedOverlayStyle() {\r\n    return {\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      'background-color': this.backgroundColor,\r\n      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<!-- Custom template override -->\r\n<ng-container *ngIf=\"isDisplaySettingsModalVisible && customTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"customTemplate; context: { $implicit: { isDisplaySettingsModalVisible, backgroundColor, meetingDisplayTypeState, autoWaveState, forceFullDisplayState, meetingVideoOptimizedState, onDisplaySettingsClose, handleSaveSettings: handleSaveSettings.bind(this) } }\"></ng-container>\r\n</ng-container>\r\n\r\n<!-- Default template -->\r\n<div *ngIf=\"isDisplaySettingsModalVisible && !customTemplate\" class=\"modal-container\" [ngStyle]=\"getCombinedOverlayStyle()\">\r\n  <div class=\"modal-content\" [ngStyle]=\"getCombinedContentStyle()\">\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 class=\"setting-toggle\">\r\n          <label>Show Subtitles on Cards</label>\r\n          <button (click)=\"showSubtitlesOnCardsState = !showSubtitlesOnCardsState\" [ngClass]=\"{ 'active': showSubtitlesOnCardsState }\">\r\n            <span class=\"toggle-icon\">{{ showSubtitlesOnCardsState ? '&#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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: any;\r\n}\r\n\r\nexport type EventSettingsModalType = (options: EventSettingsModalOptions) => HTMLElement;\r\n\r\n/**\r\n * EventSettingsModal - Modal for configuring room-wide event permissions (host only)\r\n * \r\n * @component\r\n * @description\r\n * Provides host/admin controls for managing participant permissions: audio, video, screenshare, and chat.\r\n * Settings are saved to the room and enforced for all participants.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with permission toggles and save functionality\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Audio permission control (allow/disallow, allow but muted)\r\n * - Video permission control (allow/disallow, allow but off)\r\n * - Screenshare permission control (allow/disallow, allow certain roles)\r\n * - Chat permission control (allow/disallow, allow only host)\r\n * - Socket-based setting persistence\r\n * \r\n * @example\r\n * Basic Usage:\r\n * ```html\r\n * <app-event-settings-modal\r\n *   [isEventSettingsModalVisible]=\"showEventSettings\"\r\n *   [audioSetting]=\"currentAudioSetting\"\r\n *   [videoSetting]=\"currentVideoSetting\"\r\n *   [screenshareSetting]=\"currentScreenshareSetting\"\r\n *   [chatSetting]=\"currentChatSetting\"\r\n *   [roomName]=\"currentRoom\"\r\n *   [socket]=\"socketInstance\"\r\n *   [updateAudioSetting]=\"setAudioSetting\"\r\n *   [updateVideoSetting]=\"setVideoSetting\"\r\n *   [updateScreenshareSetting]=\"setScreenshareSetting\"\r\n *   [updateChatSetting]=\"setChatSetting\"\r\n *   [onEventSettingsClose]=\"closeEventSettings\">\r\n * </app-event-settings-modal>\r\n * ```\r\n * \r\n * @example\r\n * Style Customization:\r\n * ```html\r\n * <app-event-settings-modal\r\n *   [isEventSettingsModalVisible]=\"showEventSettings\"\r\n *   [audioSetting]=\"currentAudioSetting\"\r\n *   [videoSetting]=\"currentVideoSetting\"\r\n *   [screenshareSetting]=\"currentScreenshareSetting\"\r\n *   [chatSetting]=\"currentChatSetting\"\r\n *   [roomName]=\"currentRoom\"\r\n *   [socket]=\"socketInstance\"\r\n *   [overlayStyle]=\"{\r\n *     backgroundColor: 'rgba(0, 0, 0, 0.8)'\r\n *   }\"\r\n *   [contentStyle]=\"{\r\n *     backgroundColor: '#1e1e1e',\r\n *     borderRadius: '12px',\r\n *     padding: '25px'\r\n *   }\"\r\n *   [backgroundColor]=\"'#2c3e50'\"\r\n *   [position]=\"'center'\"\r\n *   [onEventSettingsClose]=\"closeEventSettings\">\r\n * </app-event-settings-modal>\r\n * ```\r\n * \r\n * @example\r\n * Custom Template Override:\r\n * ```html\r\n * <app-event-settings-modal\r\n *   [isEventSettingsModalVisible]=\"showEventSettings\"\r\n *   [customTemplate]=\"customSettingsTemplate\"\r\n *   [onEventSettingsClose]=\"closeEventSettings\">\r\n * </app-event-settings-modal>\r\n * \r\n * <ng-template #customSettingsTemplate let-audioSetting=\"audioSetting\" let-videoSetting=\"videoSetting\" let-onSave=\"onSave\">\r\n *   <div class=\"custom-settings\">\r\n *     <h3>Room Permissions</h3>\r\n *     <label>\r\n *       Audio:\r\n *       <select [(ngModel)]=\"audioSetting\">\r\n *         <option value=\"allow\">Allow</option>\r\n *         <option value=\"disallow\">Disallow</option>\r\n *       </select>\r\n *     </label>\r\n *     <label>\r\n *       Video:\r\n *       <select [(ngModel)]=\"videoSetting\">\r\n *         <option value=\"allow\">Allow</option>\r\n *         <option value=\"disallow\">Disallow</option>\r\n *       </select>\r\n *     </label>\r\n *     <button (click)=\"onSave()\">Save Settings</button>\r\n *   </div>\r\n * </ng-template>\r\n * ```\r\n * \r\n * @selector app-event-settings-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule, FormsModule\r\n * \r\n * @input isEventSettingsModalVisible - Whether the modal is currently visible. Default: `false`\r\n * @input onEventSettingsClose - Callback function to close the modal. Default: `() => {}`\r\n * @input onModifyEventSettings - Callback to save modified settings. Default: `modifySettingsService.modifySettings`\r\n * @input position - Modal position on screen ('topLeft', 'topRight', 'bottomLeft', 'bottomRight'). Default: `'topRight'`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input audioSetting - Current audio permission setting. Default: `''`\r\n * @input videoSetting - Current video permission setting. Default: `''`\r\n * @input screenshareSetting - Current screenshare permission setting. Default: `''`\r\n * @input chatSetting - Current chat permission setting. Default: `''`\r\n * @input updateAudioSetting - Function to update audio setting state. Default: `() => {}`\r\n * @input updateVideoSetting - Function to update video setting state. Default: `() => {}`\r\n * @input updateScreenshareSetting - Function to update screenshare setting state. Default: `() => {}`\r\n * @input updateChatSetting - Function to update chat setting state. Default: `() => {}`\r\n * @input updateIsSettingsModalVisible - Function to update modal visibility. Default: `() => {}`\r\n * @input roomName - Name of the room/session. Default: `''`\r\n * @input socket - Socket.io client instance for real-time communication. Default: `undefined`\r\n * @input showAlert - Optional alert function for displaying success/error messages. Default: `undefined`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method ngOnInit - Initializes component and sets up default modify settings handler\r\n * @method ngOnChanges - Updates internal setting states when modal visibility changes\r\n * @method updateStatesFromParameters - Synchronizes internal states with input props\r\n * @method handleSaveSettings - Saves modified settings via socket and closes modal\r\n * @method closeModal - Closes the modal via onEventSettingsClose callback\r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\r\n * @method getModalContentStyle - Returns computed content styles with positioning\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\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  getCombinedOverlayStyle() {\r\n    return {\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.getModalContentStyle(),\r\n      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<!-- event-settings-modal.component.html -->\r\n\r\n<!-- Custom template override -->\r\n<ng-container *ngIf=\"isEventSettingsModalVisible && customTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n    $implicit: {\r\n      isEventSettingsModalVisible,\r\n      position,\r\n      backgroundColor,\r\n      audioState,\r\n      videoState,\r\n      screenshareState,\r\n      chatState,\r\n      closeModal: closeModal.bind(this),\r\n      handleSaveSettings: handleSaveSettings.bind(this),\r\n      onEventSettingsClose\r\n    }\r\n  }\"></ng-container>\r\n</ng-container>\r\n\r\n<!-- Default template -->\r\n<div *ngIf=\"isEventSettingsModalVisible && !customTemplate\"\r\n     class=\"modal-container\"\r\n     [ngStyle]=\"getCombinedOverlayStyle()\">\r\n  <div class=\"modal-content\" [ngStyle]=\"getCombinedContentStyle()\">\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, TemplateRef } 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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\r\n}\r\n\r\nexport type ConfirmExitModalType = (options: ConfirmExitModalOptions) => HTMLElement;\r\n\r\n/**\r\n * ConfirmExitModal - Confirmation dialog for leaving or being removed from a session\r\n * \r\n * @component\r\n * @description\r\n * Displays a confirmation modal when a user attempts to leave a room or session.\r\n * Supports optional ban action for host/admin users.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with custom callbacks and member info\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Exit confirmation with cancel option\r\n * - Optional ban functionality for hosts\r\n * - Socket-based room exit handling\r\n * - Configurable positioning\r\n * - Custom styling support\r\n * \r\n * @example\r\n * Basic Usage:\r\n * ```html\r\n * <app-confirm-exit-modal\r\n *   [isConfirmExitModalVisible]=\"showExitModal\"\r\n *   [member]=\"currentMember\"\r\n *   [roomName]=\"roomName\"\r\n *   [socket]=\"socketInstance\"\r\n *   [islevel]=\"userLevel\"\r\n *   [exitEventOnConfirm]=\"handleConfirmExit\"\r\n *   [onConfirmExitClose]=\"closeExitModal\">\r\n * </app-confirm-exit-modal>\r\n * ```\r\n * \r\n * @example\r\n * Style Customization:\r\n * ```html\r\n * <app-confirm-exit-modal\r\n *   [isConfirmExitModalVisible]=\"showExitModal\"\r\n *   [member]=\"currentMember\"\r\n *   [roomName]=\"roomName\"\r\n *   [socket]=\"socketInstance\"\r\n *   [overlayStyle]=\"{\r\n *     backgroundColor: 'rgba(0, 0, 0, 0.8)'\r\n *   }\"\r\n *   [contentStyle]=\"{\r\n *     backgroundColor: '#2c3e50',\r\n *     borderRadius: '12px',\r\n *     border: '2px solid #e74c3c'\r\n *   }\"\r\n *   [position]=\"'center'\"\r\n *   [exitEventOnConfirm]=\"handleConfirmExit\"\r\n *   [onConfirmExitClose]=\"closeExitModal\">\r\n * </app-confirm-exit-modal>\r\n * ```\r\n * \r\n * @example\r\n * Custom Template Override:\r\n * ```html\r\n * <app-confirm-exit-modal\r\n *   [isConfirmExitModalVisible]=\"showExitModal\"\r\n *   [customTemplate]=\"customExitTemplate\"\r\n *   [onConfirmExitClose]=\"closeExitModal\">\r\n * </app-confirm-exit-modal>\r\n * \r\n * <ng-template #customExitTemplate let-member=\"member\" let-ban=\"ban\" let-handleConfirmExit=\"handleConfirmExit\">\r\n *   <div class=\"custom-exit-dialog\">\r\n *     <h3>Confirm {{ ban ? 'Ban & Exit' : 'Exit' }}</h3>\r\n *     <p>Are you sure you want to {{ ban ? 'ban and remove' : 'remove' }} {{ member }}?</p>\r\n *     <div class=\"actions\">\r\n *       <button (click)=\"handleConfirmExit()\">Confirm</button>\r\n *       <button (click)=\"closeExitModal()\">Cancel</button>\r\n *     </div>\r\n *   </div>\r\n * </ng-template>\r\n * ```\r\n * \r\n * @selector app-confirm-exit-modal\r\n * @standalone true\r\n * @imports CommonModule, FormsModule, FontAwesomeModule\r\n * \r\n * @input isConfirmExitModalVisible - Whether the modal is currently visible. Default: `false`\r\n * @input onConfirmExitClose - Callback function to close the modal. Default: `() => {}`\r\n * @input position - Modal position on screen ('topRight', 'topLeft', 'bottomRight', 'bottomLeft'). Default: `'topRight'`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input exitEventOnConfirm - Callback invoked when exit is confirmed. Default: `undefined`\r\n * @input member - Name/ID of the member being removed or leaving. Default: `''`\r\n * @input ban - Whether to ban the member (in addition to removing). Default: `false`\r\n * @input roomName - Name of the room/session being exited. Default: `''`\r\n * @input socket - Socket.io client instance for real-time communication. Default: `undefined`\r\n * @input islevel - User level/role (e.g., '0' for host, '2' for participant). Default: `'2'`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method ngOnInit - Initializes default modal content styles\r\n * @method ngOnChanges - Updates visibility state and modal styles when inputs change\r\n * @method handleConfirmExit - Executes exit confirmation logic and closes modal\r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\r\n\r\n  faTimes = faTimes;\r\n\r\n  modalContentStyle: any;\r\n\r\n  constructor(private confirmExitService: ConfirmExit) {}\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.modalContentStyle,\r\n      ...(this.contentStyle || {})\r\n    };\r\n  }\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","<!-- Custom template override -->\r\n<ng-container *ngIf=\"isConfirmExitModalVisible && customTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n    $implicit: {\r\n      isConfirmExitModalVisible,\r\n      onConfirmExitClose,\r\n      position,\r\n      backgroundColor,\r\n      member,\r\n      ban,\r\n      roomName,\r\n      socket,\r\n      islevel,\r\n      handleConfirmExit: handleConfirmExit.bind(this)\r\n    }\r\n  }\"></ng-container>\r\n</ng-container>\r\n\r\n<!-- Default template -->\r\n<div *ngIf=\"isConfirmExitModalVisible && !customTemplate\"\r\n     class=\"modal-container\"\r\n     [ngStyle]=\"overlayStyle\">\r\n  <div class=\"modal-content\"\r\n       [ngStyle]=\"getCombinedContentStyle()\">\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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: any;\r\n}\r\n\r\nexport type MediaSettingsModalType = (options: MediaSettingsModalOptions) => HTMLElement;\r\n\r\n/**\r\n * MediaSettingsModal - Modal for selecting audio/video devices and virtual backgrounds\r\n * \r\n * @component\r\n * @description\r\n * Provides device selection controls for camera, microphone, and audio output.\r\n * Includes camera switching (front/back), device dropdown selectors, and virtual background access.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with device dropdowns and switch buttons\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Camera device selection dropdown\r\n * - Microphone device selection dropdown\r\n * - Front/back camera toggle (mobile)\r\n * - Virtual background button\r\n * - Real-time device switching\r\n * - Default device persistence\r\n * \r\n * @example\r\n * Basic Usage:\r\n * ```html\r\n * <app-media-settings-modal\r\n *   [isMediaSettingsModalVisible]=\"showMediaSettings\"\r\n *   [parameters]=\"mediaParams\"\r\n *   [switchCameraOnPress]=\"switchCamera\"\r\n *   [switchVideoOnPress]=\"switchVideo\"\r\n *   [switchAudioOnPress]=\"switchAudio\"\r\n *   [onMediaSettingsClose]=\"closeMediaSettings\">\r\n * </app-media-settings-modal>\r\n * ```\r\n * \r\n * @example\r\n * Style Customization:\r\n * ```html\r\n * <app-media-settings-modal\r\n *   [isMediaSettingsModalVisible]=\"showMediaSettings\"\r\n *   [parameters]=\"mediaParams\"\r\n *   [overlayStyle]=\"{\r\n *     backgroundColor: 'rgba(0, 0, 0, 0.75)'\r\n *   }\"\r\n *   [contentStyle]=\"{\r\n *     backgroundColor: '#ffffff',\r\n *     borderRadius: '16px',\r\n *     padding: '30px',\r\n *     minWidth: '400px'\r\n *   }\"\r\n *   [position]=\"'center'\"\r\n *   [backgroundColor]=\"'#f5f5f5'\"\r\n *   [onMediaSettingsClose]=\"closeMediaSettings\">\r\n * </app-media-settings-modal>\r\n * ```\r\n * \r\n * @example\r\n * Custom Template Override:\r\n * ```html\r\n * <app-media-settings-modal\r\n *   [isMediaSettingsModalVisible]=\"showMediaSettings\"\r\n *   [customTemplate]=\"customMediaTemplate\"\r\n *   [onMediaSettingsClose]=\"closeMediaSettings\">\r\n * </app-media-settings-modal>\r\n * \r\n * <ng-template #customMediaTemplate let-videoInputs=\"videoInputs\" let-audioInputs=\"audioInputs\" let-onVideoSwitch=\"onVideoSwitch\">\r\n *   <div class=\"custom-media-settings\">\r\n *     <h3>Device Settings</h3>\r\n *     <label>\r\n *       Camera:\r\n *       <select (change)=\"onVideoSwitch($event)\">\r\n *         <option *ngFor=\"let device of videoInputs\" [value]=\"device.deviceId\">\r\n *           {{ device.label }}\r\n *         </option>\r\n *       </select>\r\n *     </label>\r\n *     <label>\r\n *       Microphone:\r\n *       <select (change)=\"onAudioSwitch($event)\">\r\n *         <option *ngFor=\"let device of audioInputs\" [value]=\"device.deviceId\">\r\n *           {{ device.label }}\r\n *         </option>\r\n *       </select>\r\n *     </label>\r\n *   </div>\r\n * </ng-template>\r\n * ```\r\n * \r\n * @selector app-media-settings-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule, FormsModule\r\n * \r\n * @input isMediaSettingsModalVisible - Whether the modal is currently visible. Default: `false`\r\n * @input onMediaSettingsClose - Callback function to close the modal. Default: `() => {}`\r\n * @input switchCameraOnPress - Function to switch front/back camera. Default: `switchVideoAltService.switchVideoAlt`\r\n * @input switchVideoOnPress - Function to switch video input device. Default: `switchVideoService.switchVideo`\r\n * @input switchAudioOnPress - Function to switch audio input device. Default: `switchAudioService.switchAudio`\r\n * @input parameters - Object containing videoInputs, audioInputs, default devices, and update functions. Default: `{}`\r\n * @input position - Modal position on screen ('topRight', 'center', etc.). Default: `'topRight'`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method ngOnInit - Initializes component, sets up default services, and ensures default device selections\r\n * @method ngOnChanges - Updates modal settings when visibility or parameters change\r\n * @method setupDefaultServices - Configures default device switching services if not provided\r\n * @method updateParameters - Refreshes parameters from getUpdatedAllParams\r\n * @method ensureDefaultSelections - Sets default selected devices if none selected\r\n * @method initializeModalSettings - Initializes selected device states\r\n * @method handleSwitchCamera - Handles front/back camera toggle\r\n * @method handleVideoSwitch - Handles video device selection change\r\n * @method handleAudioSwitch - Handles audio device selection change\r\n * @method handleModalClose - Closes modal via onMediaSettingsClose callback\r\n * @method showVirtual - Opens virtual background modal\r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\r\n * @method modalContentStyle - Returns computed content styles with positioning\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\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 unknown as Event);\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 unknown as Event);\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  getCombinedOverlayStyle() {\r\n    return {\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.modalContentStyle(),\r\n      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<!-- Custom template override -->\r\n<ng-container *ngIf=\"isMediaSettingsModalVisible && customTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n    $implicit: {\r\n      isMediaSettingsModalVisible,\r\n      position,\r\n      backgroundColor,\r\n      parameters,\r\n      selectedVideoInput,\r\n      selectedAudioInput,\r\n      handleModalClose: handleModalClose.bind(this),\r\n      handleSwitchCamera: handleSwitchCamera.bind(this),\r\n      handleVideoSwitch: handleVideoSwitch.bind(this),\r\n      handleAudioSwitch: handleAudioSwitch.bind(this),\r\n      showVirtual: showVirtual.bind(this),\r\n      onMediaSettingsClose\r\n    }\r\n  }\"></ng-container>\r\n</ng-container>\r\n\r\n<!-- Default template -->\r\n<div *ngIf=\"isMediaSettingsModalVisible && !customTemplate\"\r\n     class=\"modal-container\"\r\n     [ngStyle]=\"getCombinedOverlayStyle()\">\r\n  <div class=\"modal-content\" [ngStyle]=\"getCombinedContentStyle()\">\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, TemplateRef } 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) | (() => Promise<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  buttonAttributes?: { [key: string]: any };\r\n  contentAttributes?: { [key: string]: any };\r\n  iconAttributes?: { [key: string]: any };\r\n  renderAsButton?: boolean;\r\n}\r\n\r\nexport interface CustomButtonsOptions {\r\n  buttons: CustomButton[];\r\n  containerAttributes?: { [key: string]: any };\r\n  fallbackSpinner?: TemplateRef<any>;\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  @Input() isDarkMode?: boolean;\r\n  @Input() containerAttributes?: { [key: string]: any };\r\n  @Input() fallbackSpinner?: TemplateRef<any>;\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 resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\r\n\r\n  isButtonVisible(button: CustomButton): boolean {\r\n    const resolvedShow = typeof button.show === 'function' ? button.show() : button.show;\r\n    return resolvedShow !== false;\r\n  }\r\n\r\n  getButtonStyles(button: CustomButton): any {\r\n    const isDarkMode = this.resolvedIsDarkMode;\r\n    const backgroundColor = button.backgroundColor || (isDarkMode\r\n      ? 'rgba(255, 255, 255, 0.06)'\r\n      : 'rgba(148, 163, 184, 0.12)');\r\n    const baseStyle = {\r\n      display: this.isButtonVisible(button) ? 'flex' : 'none',\r\n      width: '100%',\r\n      padding: '14px 16px',\r\n      borderRadius: '18px',\r\n      border: isDarkMode ? '1px solid rgba(148, 163, 184, 0.16)' : '1px solid rgba(148, 163, 184, 0.24)',\r\n      background: backgroundColor,\r\n      color: isDarkMode ? '#e2e8f0' : '#0f172a',\r\n      boxShadow: '0 12px 24px rgba(15, 23, 42, 0.12)',\r\n      opacity: button.disabled ? '0.55' : '1',\r\n      cursor: button.disabled ? 'not-allowed' : 'pointer',\r\n    };\r\n\r\n    if (button.buttonAttributes?.['style']) {\r\n      return { ...baseStyle, ...button.buttonAttributes['style'] };\r\n    }\r\n\r\n    return baseStyle;\r\n  }\r\n\r\n  get customButtonIcon(): any {\r\n    return {\r\n      fontSize: '18px',\r\n      color: 'inherit',\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\" [ngStyle]=\"containerAttributes?.['style']\">\r\n  <ng-container *ngFor=\"let button of buttons; let i = index\">\r\n    <!-- Render as button or div based on renderAsButton -->\r\n    <button\r\n      *ngIf=\"button.renderAsButton !== false && isButtonVisible(button)\"\r\n      (click)=\"button.action && button.action()\"\r\n      (keydown.enter)=\"button.action && button.action()\"\r\n      (keydown.space)=\"button.action && button.action()\"\r\n      class=\"customButton\"\r\n      [ngClass]=\"button.buttonAttributes?.['class']\"\r\n      [ngStyle]=\"getButtonStyles(button)\"\r\n      [disabled]=\"button.disabled\"\r\n      [attr.type]=\"button.buttonAttributes?.['type'] || 'button'\"\r\n      [attr.tabindex]=\"button.buttonAttributes?.['tabindex']\"\r\n      [attr.role]=\"button.buttonAttributes?.['role']\"\r\n    >\r\n      <div class=\"buttonContent\" [ngStyle]=\"button.contentAttributes?.['style']\">\r\n        <ng-container *ngIf=\"button.icon; else customOrSpinner\">\r\n          <fa-icon\r\n            [icon]=\"button.icon\"\r\n            [ngStyle]=\"mergeStyles(customButtonIcon, button.iconStyle)\"\r\n            [ngClass]=\"button.iconAttributes?.['class']\"\r\n          ></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            <ng-container *ngIf=\"fallbackSpinner; else defaultSpinner\">\r\n              <ng-container *ngTemplateOutlet=\"fallbackSpinner\"></ng-container>\r\n            </ng-container>\r\n            <ng-template #defaultSpinner>\r\n              <fa-icon [icon]=\"faSpinner\"></fa-icon>\r\n            </ng-template>\r\n          </ng-container>\r\n        </ng-template>\r\n      </div>\r\n    </button>\r\n\r\n    <!-- Render as div when renderAsButton is false -->\r\n    <div\r\n      *ngIf=\"button.renderAsButton === false && isButtonVisible(button)\"\r\n      (click)=\"button.action && button.action()\"\r\n      (keydown.enter)=\"button.action && button.action()\"\r\n      (keydown.space)=\"button.action && button.action()\"\r\n      class=\"customButton\"\r\n      [ngClass]=\"button.buttonAttributes?.['class']\"\r\n      [ngStyle]=\"getButtonStyles(button)\"\r\n      [attr.aria-disabled]=\"button.disabled || null\"\r\n      [attr.role]=\"button.buttonAttributes?.['role'] || (button.action ? 'button' : null)\"\r\n      [attr.tabindex]=\"button.buttonAttributes?.['tabindex'] !== undefined ? button.buttonAttributes['tabindex'] : (button.action ? 0 : null)\"\r\n    >\r\n      <div class=\"buttonContent\" [ngStyle]=\"button.contentAttributes?.['style']\">\r\n        <ng-container *ngIf=\"button.icon; else customOrSpinnerDiv\">\r\n          <fa-icon\r\n            [icon]=\"button.icon\"\r\n            [ngStyle]=\"mergeStyles(customButtonIcon, button.iconStyle)\"\r\n            [ngClass]=\"button.iconAttributes?.['class']\"\r\n          ></fa-icon>\r\n          <span *ngIf=\"button.text\" class=\"customButtonText\" [ngStyle]=\"button.textStyle\">{{ button.text }}</span>\r\n        </ng-container>\r\n        <ng-template #customOrSpinnerDiv>\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            <ng-container *ngIf=\"fallbackSpinner; else defaultSpinnerDiv\">\r\n              <ng-container *ngTemplateOutlet=\"fallbackSpinner\"></ng-container>\r\n            </ng-container>\r\n            <ng-template #defaultSpinnerDiv>\r\n              <fa-icon [icon]=\"faSpinner\"></fa-icon>\r\n            </ng-template>\r\n          </ng-container>\r\n        </ng-template>\r\n      </div>\r\n    </div>\r\n  </ng-container>\r\n</div>\r\n","import { Component, Input, TemplateRef } 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\nimport { faCopy } from '@fortawesome/free-solid-svg-icons';\r\n\r\nexport interface MeetingIdRenderContext {\r\n  isCopied: boolean;\r\n  meetingID: string;\r\n}\r\n\r\nexport interface MeetingIdComponentOptions {\r\n  meetingID?: string;\r\n  labelText?: string;\r\n  containerAttributes?: { [key: string]: any };\r\n  labelAttributes?: { [key: string]: any };\r\n  inputContainerAttributes?: { [key: string]: any };\r\n  inputAttributes?: { [key: string]: any };\r\n  buttonAttributes?: { [key: string]: any };\r\n  iconAttributes?: { [key: string]: any };\r\n  copyIconColors?: {\r\n    default?: string;\r\n    copied?: string;\r\n  };\r\n  customIcon?: IconDefinition;\r\n  renderContainer?: TemplateRef<MeetingIdRenderContext>;\r\n  renderLabel?: TemplateRef<MeetingIdRenderContext>;\r\n  renderInput?: TemplateRef<MeetingIdRenderContext>;\r\n  renderCopyButton?: TemplateRef<MeetingIdRenderContext>;\r\n  renderIcon?: TemplateRef<MeetingIdRenderContext>;\r\n  renderInputGroup?: TemplateRef<MeetingIdRenderContext>;\r\n  renderContent?: TemplateRef<MeetingIdRenderContext>;\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  imports: [CommonModule, FontAwesomeModule],\r\n})\r\nexport class MeetingIdComponent {\r\n  @Input() meetingID = '';\r\n  @Input() isDarkMode?: boolean;\r\n  @Input() labelText?: string;\r\n  @Input() containerAttributes?: { [key: string]: any };\r\n  @Input() labelAttributes?: { [key: string]: any };\r\n  @Input() inputContainerAttributes?: { [key: string]: any };\r\n  @Input() inputAttributes?: { [key: string]: any };\r\n  @Input() buttonAttributes?: { [key: string]: any };\r\n  @Input() iconAttributes?: { [key: string]: any };\r\n  @Input() copyIconColors?: { default?: string; copied?: string };\r\n  @Input() customIcon?: IconDefinition;\r\n  @Input() renderContainer?: TemplateRef<MeetingIdRenderContext>;\r\n  @Input() renderLabel?: TemplateRef<MeetingIdRenderContext>;\r\n  @Input() renderInput?: TemplateRef<MeetingIdRenderContext>;\r\n  @Input() renderCopyButton?: TemplateRef<MeetingIdRenderContext>;\r\n  @Input() renderIcon?: TemplateRef<MeetingIdRenderContext>;\r\n  @Input() renderInputGroup?: TemplateRef<MeetingIdRenderContext>;\r\n  @Input() renderContent?: TemplateRef<MeetingIdRenderContext>;\r\n\r\n  isCopied = false;\r\n  readonly copyIcon = faCopy;\r\n\r\n  get renderContext(): MeetingIdRenderContext {\r\n    return {\r\n      isCopied: this.isCopied,\r\n      meetingID: this.meetingID,\r\n    };\r\n  }\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\r\n\r\n  async handleCopy(): Promise<void> {\r\n    try {\r\n      await navigator.clipboard.writeText(this.meetingID);\r\n      this.isCopied = true;\r\n      setTimeout(() => {\r\n        this.isCopied = false;\r\n      }, 2000);\r\n    } catch {\r\n      // Handle error silently\r\n    }\r\n  }\r\n\r\n  getIconColor(): string {\r\n    if (this.isCopied) {\r\n      return this.copyIconColors?.copied || '#4CAF50';\r\n    }\r\n    return this.copyIconColors?.default || '#0F0F10FF';\r\n  }\r\n\r\n  getLabelText(): string {\r\n    return this.labelText || 'Event ID:';\r\n  }\r\n\r\n  getInputValue(): string {\r\n    return this.inputAttributes?.['value'] !== undefined\r\n      ? this.inputAttributes['value']\r\n      : this.meetingID;\r\n  }\r\n\r\n  getInputReadOnly(): boolean {\r\n    return this.inputAttributes?.['readonly'] !== undefined\r\n      ? this.inputAttributes['readonly']\r\n      : true;\r\n  }\r\n\r\n  getIconStyle(): any {\r\n    const baseStyle = { color: this.getIconColor() };\r\n    if (this.iconAttributes?.['style']) {\r\n      return { ...baseStyle, ...this.iconAttributes['style'] };\r\n    }\r\n    return baseStyle;\r\n  }\r\n}\r\n","<ng-container *ngIf=\"renderContainer; else defaultContainer\">\r\n  <ng-container *ngTemplateOutlet=\"renderContainer; context: renderContext\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-template #defaultContainer>\r\n  <div\r\n    class=\"meeting-field\"\r\n    [class.meeting-field--dark]=\"resolvedIsDarkMode\"\r\n    [class.meeting-field--light]=\"!resolvedIsDarkMode\"\r\n    [ngClass]=\"containerAttributes?.['class']\"\r\n    [ngStyle]=\"containerAttributes?.['style']\"\r\n  >\r\n    <ng-container *ngIf=\"renderContent; else defaultContent\">\r\n      <ng-container *ngTemplateOutlet=\"renderContent; context: renderContext\"></ng-container>\r\n    </ng-container>\r\n\r\n    <ng-template #defaultContent>\r\n      <!-- Label -->\r\n      <ng-container *ngIf=\"renderLabel; else defaultLabel\">\r\n        <ng-container *ngTemplateOutlet=\"renderLabel; context: renderContext\"></ng-container>\r\n      </ng-container>\r\n      <ng-template #defaultLabel>\r\n        <label\r\n          class=\"meeting-field__label\"\r\n          [ngClass]=\"labelAttributes?.['class']\"\r\n          [ngStyle]=\"labelAttributes?.['style']\"\r\n        >\r\n          {{ getLabelText() }}\r\n        </label>\r\n      </ng-template>\r\n\r\n      <!-- Input Group -->\r\n      <ng-container *ngIf=\"renderInputGroup; else defaultInputGroup\">\r\n        <ng-container *ngTemplateOutlet=\"renderInputGroup; context: renderContext\"></ng-container>\r\n      </ng-container>\r\n      <ng-template #defaultInputGroup>\r\n        <div\r\n          class=\"meeting-field__group\"\r\n          [ngClass]=\"inputContainerAttributes?.['class']\"\r\n          [ngStyle]=\"inputContainerAttributes?.['style']\"\r\n        >\r\n          <!-- Input -->\r\n          <ng-container *ngIf=\"renderInput; else defaultInput\">\r\n            <ng-container *ngTemplateOutlet=\"renderInput; context: renderContext\"></ng-container>\r\n          </ng-container>\r\n          <ng-template #defaultInput>\r\n            <input\r\n              class=\"meeting-field__input\"\r\n              [ngClass]=\"inputAttributes?.['class']\"\r\n              [ngStyle]=\"inputAttributes?.['style']\"\r\n              [value]=\"getInputValue()\"\r\n              [readonly]=\"getInputReadOnly()\"\r\n              aria-label=\"Event ID\"\r\n            />\r\n          </ng-template>\r\n\r\n          <!-- Copy Button -->\r\n          <ng-container *ngIf=\"renderCopyButton; else defaultButton\">\r\n            <ng-container *ngTemplateOutlet=\"renderCopyButton; context: renderContext\"></ng-container>\r\n          </ng-container>\r\n          <ng-template #defaultButton>\r\n            <button\r\n              type=\"button\"\r\n              (click)=\"handleCopy()\"\r\n              class=\"meeting-field__button\"\r\n              [ngClass]=\"buttonAttributes?.['class']\"\r\n              [ngStyle]=\"buttonAttributes?.['style']\"\r\n              aria-label=\"Copy Event ID\"\r\n            >\r\n              <!-- Icon -->\r\n              <ng-container *ngIf=\"renderIcon; else defaultIcon\">\r\n                <ng-container *ngTemplateOutlet=\"renderIcon; context: renderContext\"></ng-container>\r\n              </ng-container>\r\n              <ng-template #defaultIcon>\r\n                <fa-icon\r\n                  [icon]=\"customIcon || copyIcon\"\r\n                  [ngClass]=\"iconAttributes?.['class']\"\r\n                  [ngStyle]=\"getIconStyle()\"\r\n                ></fa-icon>\r\n              </ng-template>\r\n            </button>\r\n          </ng-template>\r\n        </div>\r\n      </ng-template>\r\n    </ng-template>\r\n  </div>\r\n</ng-template>\r\n","import { Component, Input, TemplateRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faCopy, faEye, faEyeSlash } from '@fortawesome/free-solid-svg-icons';\r\n\r\nexport interface MeetingPasscodeRenderContext {\r\n  meetingPasscode: string;\r\n}\r\n\r\nexport interface MeetingPasscodeComponentOptions {\r\n  meetingPasscode: string;\r\n  labelText?: string;\r\n  containerAttributes?: { [key: string]: any };\r\n  labelAttributes?: { [key: string]: any };\r\n  inputAttributes?: { [key: string]: any };\r\n  renderContainer?: TemplateRef<MeetingPasscodeRenderContext>;\r\n  renderLabel?: TemplateRef<MeetingPasscodeRenderContext>;\r\n  renderInput?: TemplateRef<MeetingPasscodeRenderContext>;\r\n  renderContent?: TemplateRef<MeetingPasscodeRenderContext>;\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  imports: [CommonModule, FontAwesomeModule],\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  @Input() isDarkMode?: boolean;\r\n  @Input() labelText?: string;\r\n  @Input() containerAttributes?: { [key: string]: any };\r\n  @Input() labelAttributes?: { [key: string]: any };\r\n  @Input() inputAttributes?: { [key: string]: any };\r\n  @Input() renderContainer?: TemplateRef<MeetingPasscodeRenderContext>;\r\n  @Input() renderLabel?: TemplateRef<MeetingPasscodeRenderContext>;\r\n  @Input() renderInput?: TemplateRef<MeetingPasscodeRenderContext>;\r\n  @Input() renderContent?: TemplateRef<MeetingPasscodeRenderContext>;\r\n\r\n  readonly copyIcon = faCopy;\r\n  readonly revealIcon = faEye;\r\n  readonly hideIcon = faEyeSlash;\r\n  isCopied = false;\r\n  isRevealed = false;\r\n\r\n  get renderContext(): MeetingPasscodeRenderContext {\r\n    return {\r\n      meetingPasscode: this.meetingPasscode,\r\n    };\r\n  }\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\r\n\r\n  async handleCopy(): Promise<void> {\r\n    try {\r\n      await navigator.clipboard.writeText(this.meetingPasscode);\r\n      this.isCopied = true;\r\n      setTimeout(() => {\r\n        this.isCopied = false;\r\n      }, 2000);\r\n    } catch {\r\n      // Handle error silently\r\n    }\r\n  }\r\n\r\n  toggleVisibility(): void {\r\n    this.isRevealed = !this.isRevealed;\r\n  }\r\n\r\n  getLabelText(): string {\r\n    return this.labelText || 'Event Passcode (Host):';\r\n  }\r\n\r\n  getInputValue(): string {\r\n    return this.inputAttributes?.['value'] !== undefined\r\n      ? this.inputAttributes['value']\r\n      : this.isRevealed\r\n      ? this.meetingPasscode\r\n      : '•'.repeat(Math.max(this.meetingPasscode.length, 6));\r\n  }\r\n\r\n  getInputReadOnly(): boolean {\r\n    return this.inputAttributes?.['readonly'] !== undefined\r\n      ? this.inputAttributes['readonly']\r\n      : true;\r\n  }\r\n}\r\n","<ng-container *ngIf=\"renderContainer; else defaultContainer\">\r\n  <ng-container *ngTemplateOutlet=\"renderContainer; context: renderContext\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-template #defaultContainer>\r\n  <div\r\n    class=\"meeting-passcode\"\r\n    [class.meeting-passcode--dark]=\"resolvedIsDarkMode\"\r\n    [class.meeting-passcode--light]=\"!resolvedIsDarkMode\"\r\n    [ngClass]=\"containerAttributes?.['class']\"\r\n    [ngStyle]=\"containerAttributes?.['style']\"\r\n  >\r\n    <ng-container *ngIf=\"renderContent; else defaultContent\">\r\n      <ng-container *ngTemplateOutlet=\"renderContent; context: renderContext\"></ng-container>\r\n    </ng-container>\r\n\r\n    <ng-template #defaultContent>\r\n      <!-- Label -->\r\n      <ng-container *ngIf=\"renderLabel; else defaultLabel\">\r\n        <ng-container *ngTemplateOutlet=\"renderLabel; context: renderContext\"></ng-container>\r\n      </ng-container>\r\n      <ng-template #defaultLabel>\r\n        <label\r\n          class=\"meeting-passcode__label\"\r\n          [ngClass]=\"labelAttributes?.['class']\"\r\n          [ngStyle]=\"labelAttributes?.['style']\"\r\n        >\r\n          {{ getLabelText() }}\r\n        </label>\r\n      </ng-template>\r\n\r\n      <!-- Input -->\r\n      <ng-container *ngIf=\"renderInput; else defaultInput\">\r\n        <ng-container *ngTemplateOutlet=\"renderInput; context: renderContext\"></ng-container>\r\n      </ng-container>\r\n      <ng-template #defaultInput>\r\n        <div class=\"meeting-passcode__group\">\r\n          <input\r\n            class=\"meeting-passcode__input\"\r\n            [ngClass]=\"inputAttributes?.['class']\"\r\n            [ngStyle]=\"inputAttributes?.['style']\"\r\n            [value]=\"getInputValue()\"\r\n            [readonly]=\"getInputReadOnly()\"\r\n          />\r\n          <button type=\"button\" class=\"meeting-passcode__button\" (click)=\"toggleVisibility()\" aria-label=\"Toggle event passcode visibility\">\r\n            <fa-icon [icon]=\"isRevealed ? hideIcon : revealIcon\"></fa-icon>\r\n          </button>\r\n          <button type=\"button\" class=\"meeting-passcode__button\" (click)=\"handleCopy()\" aria-label=\"Copy event passcode\">\r\n            <fa-icon [icon]=\"copyIcon\" [style.color]=\"isCopied ? '#22c55e' : null\"></fa-icon>\r\n          </button>\r\n        </div>\r\n      </ng-template>\r\n    </ng-template>\r\n  </div>\r\n</ng-template>\r\n","import { Component, Input, TemplateRef } 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, faTwitter } 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 | Promise<void>;\r\n  show: boolean;\r\n  color?: string;\r\n  iconColor?: string;\r\n  wrapperAttributes?: { [key: string]: any };\r\n  iconAttributes?: { [key: string]: any };\r\n}\r\n\r\nexport interface ShareButtonRenderContext {\r\n  button: ShareButton;\r\n  index: number;\r\n  shareUrl: string;\r\n}\r\n\r\nexport interface ShareButtonsRenderContext {\r\n  buttons: ShareButton[];\r\n  shareUrl: 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  containerAttributes?: { [key: string]: any };\r\n  renderContainer?: TemplateRef<ShareButtonsRenderContext>;\r\n  renderButtons?: TemplateRef<ShareButtonsRenderContext>;\r\n  renderButton?: TemplateRef<ShareButtonRenderContext>;\r\n  renderIcon?: TemplateRef<ShareButtonRenderContext>;\r\n  getShareUrl?: (options: { meetingID: string; eventType: EventType; localLink?: string }) => 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() isDarkMode?: boolean;\r\n  @Input() shareButtons: ShareButton[] = [];\r\n  @Input() eventType!: EventType;\r\n  @Input() localLink?: string;\r\n  @Input() containerAttributes?: { [key: string]: any };\r\n  @Input() renderContainer?: TemplateRef<ShareButtonsRenderContext>;\r\n  @Input() renderButtons?: TemplateRef<ShareButtonsRenderContext>;\r\n  @Input() renderButton?: TemplateRef<ShareButtonRenderContext>;\r\n  @Input() renderIcon?: TemplateRef<ShareButtonRenderContext>;\r\n  @Input() getShareUrlFn?: (options: { meetingID: string; eventType: EventType; localLink?: string }) => string;\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\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      color: '#64748b',\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      color: '#ea4335',\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      color: '#1877f2',\r\n    },\r\n    {\r\n      icon: faTwitter,\r\n      action: () => {\r\n        const twitterUrl = `https://twitter.com/intent/tweet?text=${encodeURIComponent(\r\n          `Join my ${this.shareName}: ${this.getShareUrl()}`\r\n        )}`;\r\n        window.open(twitterUrl, '_blank');\r\n      },\r\n      show: true,\r\n      color: '#1da1f2',\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      color: '#25d366',\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      color: '#0088cc',\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.getShareUrlFn) {\r\n      return this.getShareUrlFn({\r\n        meetingID: this.meetingID,\r\n        eventType: this.eventType,\r\n        localLink: this.localLink,\r\n      });\r\n    }\r\n\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  get shareButtonsRenderContext(): ShareButtonsRenderContext {\r\n    return {\r\n      buttons: this.filteredShareButtons,\r\n      shareUrl: this.getShareUrl(),\r\n    };\r\n  }\r\n\r\n  getButtonRenderContext(button: ShareButton, index: number): ShareButtonRenderContext {\r\n    return {\r\n      button,\r\n      index,\r\n      shareUrl: this.getShareUrl(),\r\n    };\r\n  }\r\n\r\n  getButtonStyle(button: ShareButton, index: number): any {\r\n    const isDarkMode = this.resolvedIsDarkMode;\r\n    const baseStyle = {\r\n      width: '44px',\r\n      height: '44px',\r\n      alignItems: 'center',\r\n      justifyContent: 'center',\r\n      padding: '0',\r\n      borderRadius: '14px',\r\n      border: isDarkMode ? '1px solid rgba(148, 163, 184, 0.14)' : '1px solid rgba(148, 163, 184, 0.22)',\r\n      backgroundColor: button.color || (isDarkMode ? '#1e293b' : '#0f172a'),\r\n      boxShadow: '0 12px 24px rgba(15, 23, 42, 0.14)',\r\n      cursor: 'pointer',\r\n    };\r\n\r\n    if (button.wrapperAttributes?.['style']) {\r\n      return { ...baseStyle, ...button.wrapperAttributes['style'] };\r\n    }\r\n\r\n    return baseStyle;\r\n  }\r\n\r\n  getIconStyle(button: ShareButton): any {\r\n    const baseStyle = {\r\n      fontSize: '18px',\r\n      color: button.iconColor || 'white',\r\n    };\r\n\r\n    if (button.iconAttributes?.['style']) {\r\n      return { ...baseStyle, ...button.iconAttributes['style'] };\r\n    }\r\n\r\n    return baseStyle;\r\n  }\r\n\r\n  getButtonAriaLabel(index: number): string {\r\n    const labels = ['Copy link', 'Share by email', 'Share on Facebook', 'Share on Twitter', 'Share on WhatsApp', 'Share on Telegram'];\r\n    return labels[index] || 'Share';\r\n  }\r\n}\r\n","<ng-container *ngIf=\"renderContainer; else defaultContainer\">\r\n  <ng-container *ngTemplateOutlet=\"renderContainer; context: shareButtonsRenderContext\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-template #defaultContainer>\r\n  <div\r\n    class=\"share-buttons-container\"\r\n    [class.share-buttons-container--dark]=\"resolvedIsDarkMode\"\r\n    [class.share-buttons-container--light]=\"!resolvedIsDarkMode\"\r\n    [ngClass]=\"containerAttributes?.['class']\"\r\n    [ngStyle]=\"containerAttributes?.['style']\"\r\n  >\r\n    <ng-container *ngIf=\"renderButtons; else defaultButtons\">\r\n      <ng-container *ngTemplateOutlet=\"renderButtons; context: shareButtonsRenderContext\"></ng-container>\r\n    </ng-container>\r\n\r\n    <ng-template #defaultButtons>\r\n      <ng-container *ngFor=\"let button of filteredShareButtons; let i = index\">\r\n        <ng-container *ngIf=\"renderButton; else defaultButton\">\r\n          <ng-container *ngTemplateOutlet=\"renderButton; context: getButtonRenderContext(button, i)\"></ng-container>\r\n        </ng-container>\r\n\r\n        <ng-template #defaultButton>\r\n          <button\r\n            type=\"button\"\r\n            (click)=\"button.action()\"\r\n            class=\"share-button\"\r\n            [ngClass]=\"button.wrapperAttributes?.['class']\"\r\n            [ngStyle]=\"getButtonStyle(button, i)\"\r\n            [attr.aria-label]=\"getButtonAriaLabel(i)\"\r\n          >\r\n            <ng-container *ngIf=\"renderIcon; else defaultIcon\">\r\n              <ng-container *ngTemplateOutlet=\"renderIcon; context: getButtonRenderContext(button, i)\"></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultIcon>\r\n              <fa-icon\r\n                [icon]=\"button.icon\"\r\n                [ngClass]=\"button.iconAttributes?.['class']\"\r\n                [ngStyle]=\"getIconStyle(button)\"\r\n              ></fa-icon>\r\n            </ng-template>\r\n          </button>\r\n        </ng-template>\r\n      </ng-container>\r\n    </ng-template>\r\n  </div>\r\n</ng-template>\r\n","import { Component, Input, TemplateRef } 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 MenuModalRenderContext {\r\n  onClose: () => void;\r\n}\r\n\r\nexport interface MenuModalOptions {\r\n  backgroundColor?: string;\r\n  isVisible: boolean;\r\n  isDarkMode?: boolean;\r\n  onToggleTheme?: (value: boolean) => void;\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  title?: string;\r\n  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\r\n  overlayAttributes?: { [key: string]: any };\r\n  contentAttributes?: { [key: string]: any };\r\n  headerAttributes?: { [key: string]: any };\r\n  titleWrapperAttributes?: { [key: string]: any };\r\n  badgeWrapperAttributes?: { [key: string]: any };\r\n  closeButtonAttributes?: { [key: string]: any };\r\n  menuIconAttributes?: { [key: string]: any };\r\n  closeIconAttributes?: { [key: string]: any };\r\n  dividerAttributes?: { [key: string]: any };\r\n  bodyAttributes?: { [key: string]: any };\r\n  scrollWrapperAttributes?: { [key: string]: any };\r\n  customButtonsWrapperAttributes?: { [key: string]: any };\r\n  renderHeader?: TemplateRef<MenuModalRenderContext>;\r\n  renderTitle?: TemplateRef<any>;\r\n  renderCustomButtons?: TemplateRef<any>;\r\n  renderMeetingPasscode?: TemplateRef<any>;\r\n  renderMeetingId?: TemplateRef<any>;\r\n  renderShareButtons?: TemplateRef<any>;\r\n  renderBody?: TemplateRef<any>;\r\n  renderContent?: TemplateRef<any>;\r\n\r\n  onClose: () => void;\r\n}\r\n\r\nexport type MenuModalType = (options: MenuModalOptions) => HTMLElement;\r\n\r\n/**\r\n * MenuModal - Customizable menu modal with extensive override capabilities\r\n * \r\n * @component\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 * @description\r\n * A fully customizable menu modal supporting three levels of customization:\r\n * 1. **Style Overrides**: Customize overlay and content styles via `overlayStyle` and `contentStyle`\r\n * 2. **Template Sections**: Override specific sections using render* props (header, title, buttons, etc.)\r\n * 3. **Complete Replacement**: Provide a `customTemplate` to replace the entire modal UI\r\n *\r\n * @example\r\n * **Basic Usage with Default Template**\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 * @example\r\n * **Style Customization**\r\n * ```html\r\n * <app-menu-modal\r\n *   [isVisible]=\"true\"\r\n *   [overlayStyle]=\"{ backgroundColor: 'rgba(0, 0, 0, 0.8)' }\"\r\n *   [contentStyle]=\"{ borderRadius: '20px', boxShadow: '0 10px 40px rgba(0,0,0,0.5)' }\"\r\n *   roomName=\"Room 123\"\r\n *   (onClose)=\"closeMenu()\">\r\n * </app-menu-modal>\r\n * ```\r\n *\r\n * @example\r\n * **Custom Template (Complete Override)**\r\n * ```html\r\n * <app-menu-modal\r\n *   [isVisible]=\"true\"\r\n *   [customTemplate]=\"customMenuTemplate\"\r\n *   roomName=\"Room 123\"\r\n *   (onClose)=\"closeMenu()\">\r\n * </app-menu-modal>\r\n * \r\n * <ng-template #customMenuTemplate let-context>\r\n *   <div class=\"my-custom-menu\">\r\n *     <h2>{{ context.roomName }}</h2>\r\n *     <button (click)=\"context.onClose()\">Close</button>\r\n *   </div>\r\n * </ng-template>\r\n * ```\r\n *\r\n * @example\r\n * **Section Override with renderTitle**\r\n * ```html\r\n * <app-menu-modal\r\n *   [isVisible]=\"true\"\r\n *   [renderTitle]=\"customTitle\"\r\n *   roomName=\"Room 123\"\r\n *   (onClose)=\"closeMenu()\">\r\n * </app-menu-modal>\r\n * \r\n * <ng-template #customTitle let-context>\r\n *   <h1 class=\"custom-title\">🎯 {{ context.title || 'Menu' }}</h1>\r\n * </ng-template>\r\n * ```\r\n *\r\n * @input {boolean} isVisible - Controls modal visibility\r\n * @input {string} backgroundColor - Background color of the modal content (default: '#83c0e9')\r\n * @input {string} position - Modal position: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' (default: 'bottomRight')\r\n * @input {string} roomName - Room name to display\r\n * @input {string} adminPasscode - Admin passcode for the room\r\n * @input {string} islevel - User level indicator\r\n * @input {EventType} eventType - Type of event (meeting, webinar, etc.)\r\n * @input {CustomButton[]} customButtons - Array of custom action buttons\r\n * @input {boolean} shareButtons - Show/hide share buttons (default: true)\r\n * @input {string} localLink - Local link for sharing\r\n * @input {string} title - Optional custom title\r\n * @input {Partial<CSSStyleDeclaration>} overlayStyle - Custom styles for modal overlay\r\n * @input {Partial<CSSStyleDeclaration>} contentStyle - Custom styles for modal content\r\n * @input {TemplateRef<any>} customTemplate - Complete template override\r\n * @input {TemplateRef<MenuModalRenderContext>} renderHeader - Custom header template\r\n * @input {TemplateRef<any>} renderTitle - Custom title template\r\n * @input {TemplateRef<any>} renderCustomButtons - Custom buttons section template\r\n * @input {TemplateRef<any>} renderMeetingPasscode - Custom meeting passcode template\r\n * @input {TemplateRef<any>} renderMeetingId - Custom meeting ID template\r\n * @input {TemplateRef<any>} renderShareButtons - Custom share buttons template\r\n * @input {TemplateRef<any>} renderBody - Custom body template\r\n * @input {TemplateRef<any>} renderContent - Custom content template\r\n * @output {void} onClose - Event emitted when modal is closed\r\n *\r\n * @see {@link MenuModalOptions} for complete options interface\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 = '';\r\n  @Input() isVisible!: boolean;\r\n  @Input() isDarkMode?: boolean;\r\n  @Input() onToggleTheme?: (value: boolean) => void;\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  @Input() title?: string;\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\r\n  @Input() overlayAttributes?: { [key: string]: any };\r\n  @Input() contentAttributes?: { [key: string]: any };\r\n  @Input() headerAttributes?: { [key: string]: any };\r\n  @Input() titleWrapperAttributes?: { [key: string]: any };\r\n  @Input() badgeWrapperAttributes?: { [key: string]: any };\r\n  @Input() closeButtonAttributes?: { [key: string]: any };\r\n  @Input() menuIconAttributes?: { [key: string]: any };\r\n  @Input() closeIconAttributes?: { [key: string]: any };\r\n  @Input() dividerAttributes?: { [key: string]: any };\r\n  @Input() bodyAttributes?: { [key: string]: any };\r\n  @Input() scrollWrapperAttributes?: { [key: string]: any };\r\n  @Input() customButtonsWrapperAttributes?: { [key: string]: any };\r\n  @Input() renderHeader?: TemplateRef<MenuModalRenderContext>;\r\n  @Input() renderTitle?: TemplateRef<any>;\r\n  @Input() renderCustomButtons?: TemplateRef<any>;\r\n  @Input() renderMeetingPasscode?: TemplateRef<any>;\r\n  @Input() renderMeetingId?: TemplateRef<any>;\r\n  @Input() renderShareButtons?: TemplateRef<any>;\r\n  @Input() renderBody?: TemplateRef<any>;\r\n  @Input() renderContent?: TemplateRef<any>;\r\n  // Define inputs for functions\r\n  @Input() onClose!: () => void;\r\n\r\n  get renderContext(): MenuModalRenderContext {\r\n    return {\r\n      onClose: this.onClose,\r\n    };\r\n  }\r\n\r\n  getTitle(): string {\r\n    return this.title || 'Menu';\r\n  }\r\n\r\n  faBars = faBars;\r\n  faTimes = faTimes;\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\r\n\r\n  modalContainerStyle() {\r\n    const position = this.position || 'bottomRight';\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.resolvedIsDarkMode ? 'rgba(2, 6, 23, 0.62)' : 'rgba(15, 23, 42, 0.18)',\r\n      backdropFilter: 'blur(10px)',\r\n      display: this.isVisible ? 'flex' : 'none',\r\n      alignItems: position.includes('top') ? 'flex-start' : position.includes('bottom') ? 'flex-end' : 'center',\r\n      justifyContent: position.includes('Left') ? 'flex-start' : position.includes('Right') ? 'flex-end' : 'center',\r\n      padding: '18px',\r\n      zIndex: 999,\r\n    };\r\n  }\r\n\r\n  modalContentStyle() {\r\n    const screenWidth = typeof window !== 'undefined' ? window.innerWidth : 1280;\r\n    let modalWidth = 0.7 * screenWidth;\r\n\r\n    if (modalWidth > 420) {\r\n      modalWidth = 420;\r\n    }\r\n\r\n    const isDarkMode = this.resolvedIsDarkMode;\r\n\r\n    return {\r\n      background: this.backgroundColor || (isDarkMode\r\n        ? 'linear-gradient(135deg, rgba(15, 23, 42, 0.96) 0%, rgba(30, 41, 59, 0.94) 100%)'\r\n        : 'linear-gradient(135deg, rgba(255, 255, 255, 0.98) 0%, rgba(241, 245, 249, 0.96) 100%)'),\r\n      borderRadius: '24px',\r\n      border: isDarkMode\r\n        ? '1px solid rgba(148, 163, 184, 0.18)'\r\n        : '1px solid rgba(148, 163, 184, 0.22)',\r\n      padding: '20px',\r\n      width: `${modalWidth}px`,\r\n      maxHeight: '80%',\r\n      overflow: 'hidden',\r\n      boxShadow: '0 24px 48px rgba(15, 23, 42, 0.18)',\r\n      color: isDarkMode ? '#e2e8f0' : '#0f172a',\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.modalContentStyle(),\r\n      ...this.contentStyle,\r\n    };\r\n  }\r\n\r\n  handleClose() {\r\n    this.onClose();\r\n  }\r\n\r\n  getDividerStyle() {\r\n    return {\r\n      backgroundColor: this.resolvedIsDarkMode ? 'rgba(148, 163, 184, 0.22)' : 'rgba(148, 163, 184, 0.32)',\r\n    };\r\n  }\r\n}\r\n","<!-- Custom template override - if provided, use it instead of default -->\r\n<ng-container *ngIf=\"isVisible && customTemplate; else defaultTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"customTemplate; context: renderContext\"></ng-container>\r\n</ng-container>\r\n\r\n<!-- Default template with customization hooks -->\r\n<ng-template #defaultTemplate>\r\n  <!-- Overlay wrapper with custom attributes -->\r\n  <div\r\n    *ngIf=\"isVisible\"\r\n    class=\"menu-modal__overlay\"\r\n    [ngStyle]=\"modalContainerStyle()\"\r\n    [attr.data-testid]=\"overlayAttributes?.['data-testid']\"\r\n    [ngClass]=\"overlayAttributes?.['class']\">\r\n\r\n    <!-- Content wrapper with custom attributes and styles -->\r\n    <div\r\n      class=\"menu-modal__content\"\r\n      [ngStyle]=\"getCombinedContentStyle()\"\r\n      [attr.data-testid]=\"contentAttributes?.['data-testid']\"\r\n      [ngClass]=\"contentAttributes?.['class']\">\r\n\r\n      <!-- Header section - customizable via renderHeader template -->\r\n      <ng-container *ngIf=\"renderHeader; else defaultHeader\">\r\n        <ng-container *ngTemplateOutlet=\"renderHeader; context: renderContext\"></ng-container>\r\n      </ng-container>\r\n\r\n      <!-- Default header -->\r\n      <ng-template #defaultHeader>\r\n        <div\r\n          class=\"menu-modal__header\"\r\n          [attr.data-testid]=\"headerAttributes?.['data-testid']\"\r\n          [ngClass]=\"headerAttributes?.['class']\">\r\n\r\n          <!-- Title section - customizable via renderTitle template -->\r\n          <ng-container *ngIf=\"renderTitle; else defaultTitle\">\r\n            <ng-container *ngTemplateOutlet=\"renderTitle\"></ng-container>\r\n          </ng-container>\r\n\r\n          <!-- Default title -->\r\n          <ng-template #defaultTitle>\r\n            <div\r\n              class=\"menu-modal__title\"\r\n              [attr.data-testid]=\"titleWrapperAttributes?.['data-testid']\"\r\n              [ngClass]=\"titleWrapperAttributes?.['class']\">\r\n              <fa-icon\r\n                [icon]=\"faBars\"\r\n                class=\"menu-modal__title-icon\"\r\n                [attr.data-testid]=\"menuIconAttributes?.['data-testid']\"\r\n                [ngClass]=\"menuIconAttributes?.['class']\"></fa-icon>\r\n              {{ getTitle() }}\r\n            </div>\r\n          </ng-template>\r\n\r\n          <!-- Close button with custom attributes -->\r\n          <div\r\n            (click)=\"handleClose()\"\r\n            class=\"menu-modal__close\"\r\n            [attr.data-testid]=\"closeButtonAttributes?.['data-testid']\"\r\n            [ngClass]=\"closeButtonAttributes?.['class']\">\r\n            <fa-icon\r\n              [icon]=\"faTimes\"\r\n              class=\"menu-modal__close-icon\"\r\n              [attr.data-testid]=\"closeIconAttributes?.['data-testid']\"\r\n              [ngClass]=\"closeIconAttributes?.['class']\"></fa-icon>\r\n          </div>\r\n        </div>\r\n      </ng-template>\r\n\r\n      <!-- Divider with custom attributes -->\r\n      <hr\r\n        class=\"menu-modal__divider\"\r\n        [ngStyle]=\"getDividerStyle()\"\r\n        [attr.data-testid]=\"dividerAttributes?.['data-testid']\"\r\n        [ngClass]=\"dividerAttributes?.['class']\" />\r\n\r\n      <!-- Body section - customizable via renderBody template -->\r\n      <ng-container *ngIf=\"renderBody; else defaultBody\">\r\n        <ng-container *ngTemplateOutlet=\"renderBody\"></ng-container>\r\n      </ng-container>\r\n\r\n      <!-- Default body -->\r\n      <ng-template #defaultBody>\r\n        <div\r\n          class=\"menu-modal__body\"\r\n          [attr.data-testid]=\"bodyAttributes?.['data-testid']\"\r\n          [ngClass]=\"bodyAttributes?.['class']\">\r\n\r\n          <div\r\n            class=\"menu-modal__scroll\"\r\n            [attr.data-testid]=\"scrollWrapperAttributes?.['data-testid']\"\r\n            [ngClass]=\"scrollWrapperAttributes?.['class']\">\r\n\r\n            <div *ngIf=\"onToggleTheme\" class=\"menu-modal__section menu-modal__section--theme\">\r\n              <div class=\"menu-modal__section-label\">Theme</div>\r\n              <div class=\"menu-modal__theme-toggle\">\r\n                <button\r\n                  type=\"button\"\r\n                  class=\"menu-modal__theme-button\"\r\n                  [class.menu-modal__theme-button--active]=\"resolvedIsDarkMode\"\r\n                  (click)=\"onToggleTheme(true)\"\r\n                >\r\n                  Dark\r\n                </button>\r\n                <button\r\n                  type=\"button\"\r\n                  class=\"menu-modal__theme-button\"\r\n                  [class.menu-modal__theme-button--active]=\"!resolvedIsDarkMode\"\r\n                  (click)=\"onToggleTheme(false)\"\r\n                >\r\n                  Light\r\n                </button>\r\n              </div>\r\n            </div>\r\n\r\n            <div *ngIf=\"onToggleTheme\" class=\"menu-modal__section-divider\"></div>\r\n\r\n            <!-- Custom buttons - customizable via renderCustomButtons template -->\r\n            <ng-container *ngIf=\"renderCustomButtons; else defaultCustomButtons\">\r\n              <ng-container *ngTemplateOutlet=\"renderCustomButtons\"></ng-container>\r\n            </ng-container>\r\n\r\n            <!-- Default custom buttons -->\r\n            <ng-template #defaultCustomButtons>\r\n              <div\r\n                class=\"menu-modal__section\"\r\n                [attr.data-testid]=\"customButtonsWrapperAttributes?.['data-testid']\"\r\n                [ngClass]=\"customButtonsWrapperAttributes?.['class']\">\r\n                <app-custom-buttons [buttons]=\"customButtons\" [isDarkMode]=\"resolvedIsDarkMode\"></app-custom-buttons>\r\n              </div>\r\n            </ng-template>\r\n\r\n            <div class=\"menu-modal__section-divider\"></div>\r\n\r\n            <!-- Meeting passcode - customizable via renderMeetingPasscode template -->\r\n            <ng-container *ngIf=\"islevel === '2'\">\r\n              <ng-container *ngIf=\"renderMeetingPasscode; else defaultMeetingPasscode\">\r\n                <ng-container *ngTemplateOutlet=\"renderMeetingPasscode\"></ng-container>\r\n              </ng-container>\r\n\r\n              <!-- Default meeting passcode -->\r\n              <ng-template #defaultMeetingPasscode>\r\n                <div class=\"menu-modal__section\">\r\n                  <app-meeting-passcode-component\r\n                    [meetingPasscode]=\"adminPasscode\"\r\n                    [isDarkMode]=\"resolvedIsDarkMode\">\r\n                  </app-meeting-passcode-component>\r\n                </div>\r\n              </ng-template>\r\n            </ng-container>\r\n\r\n            <!-- Meeting ID - customizable via renderMeetingId template -->\r\n            <ng-container *ngIf=\"renderMeetingId; else defaultMeetingId\">\r\n              <ng-container *ngTemplateOutlet=\"renderMeetingId\"></ng-container>\r\n            </ng-container>\r\n\r\n            <!-- Default meeting ID -->\r\n            <ng-template #defaultMeetingId>\r\n              <div class=\"menu-modal__section\">\r\n                <app-meeting-id-component [meetingID]=\"roomName\" [isDarkMode]=\"resolvedIsDarkMode\"></app-meeting-id-component>\r\n              </div>\r\n            </ng-template>\r\n\r\n            <!-- Share buttons - customizable via renderShareButtons template -->\r\n            <ng-container *ngIf=\"shareButtons\">\r\n              <ng-container *ngIf=\"renderShareButtons; else defaultShareButtons\">\r\n                <ng-container *ngTemplateOutlet=\"renderShareButtons\"></ng-container>\r\n              </ng-container>\r\n\r\n              <!-- Default share buttons -->\r\n              <ng-template #defaultShareButtons>\r\n                <div class=\"menu-modal__section menu-modal__section--share\">\r\n                  <app-share-buttons-component\r\n                    [meetingID]=\"roomName\"\r\n                    [eventType]=\"eventType\"\r\n                    [isDarkMode]=\"resolvedIsDarkMode\"\r\n                    [localLink]=\"localLink\">\r\n                  </app-share-buttons-component>\r\n                </div>\r\n              </ng-template>\r\n            </ng-container>\r\n          </div>\r\n        </div>\r\n      </ng-template>\r\n    </div>\r\n  </div>\r\n</ng-template>\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  getComposerPlaceholder() {\r\n    if (this.type === 'direct') {\r\n      if (this.senderId) {\r\n        return `Send a direct message to ${this.senderId}`;\r\n      }\r\n\r\n      if (this.directMessageDetails) {\r\n        return `Send a direct message to ${this.directMessageDetails.name}`;\r\n      }\r\n\r\n      return this.islevel === '2'\r\n        ? 'Select a message to reply to'\r\n        : 'Send a direct message to the host';\r\n    }\r\n\r\n    return this.eventType === 'chat' ? 'Send a message' : 'Send a message to everyone';\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 message to reply 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 class=\"message-panel\" [style.background]=\"backgroundColor || 'transparent'\">\r\n  <div class=\"message-panel__scroll\">\r\n    <div *ngIf=\"!messages?.length\" class=\"message-panel__empty\">\r\n      No messages yet.\r\n    </div>\r\n\r\n    <div\r\n      *ngFor=\"let message of messages; let index = index\"\r\n      class=\"message-panel__row\"\r\n      [class.message-panel__row--self]=\"message.sender === username\"\r\n    >\r\n      <div class=\"message-panel__meta\">\r\n        <span *ngIf=\"message.sender === username && !message.group\" class=\"message-panel__sender\">\r\n          To: {{ message.receivers.join(', ') }}\r\n        </span>\r\n        <span *ngIf=\"message.sender !== username\" class=\"message-panel__sender\">\r\n          {{ message.sender }}\r\n        </span>\r\n        <span class=\"message-panel__time\">{{ message.timestamp }}</span>\r\n        <button\r\n          *ngIf=\"message.sender !== username && !message.group\"\r\n          type=\"button\"\r\n          class=\"message-panel__reply\"\r\n          (click)=\"openReplyInput(message.sender)\"\r\n          aria-label=\"Reply\"\r\n        >\r\n          <fa-icon [icon]=\"faReply\" size=\"xs\"></fa-icon>\r\n        </button>\r\n      </div>\r\n\r\n      <div class=\"message-panel__bubble\" [class.message-panel__bubble--self]=\"message.sender === member\">\r\n        {{ message.message }}\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <div *ngIf=\"replyInfo\" class=\"message-panel__replying\">\r\n    <span>Replying to</span>\r\n    <strong>{{ replyInfo.username }}</strong>\r\n  </div>\r\n\r\n  <div class=\"message-panel__composer\">\r\n    <input\r\n      type=\"text\"\r\n      class=\"message-panel__input\"\r\n      [placeholder]=\"getComposerPlaceholder()\"\r\n      maxLength=\"350\"\r\n      (input)=\"handleTextInputChange($event)\"\r\n      [value]=\"type === 'direct' ? directMessageText : groupMessageText\"\r\n    />\r\n    <button type=\"button\" class=\"message-panel__send\" (click)=\"handleSendButton()\" aria-label=\"Send message\">\r\n      <fa-icon [icon]=\"faPaperPlane\" size=\"sm\"></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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: any;\r\n}\r\n\r\nexport type MessagesModalType = (options: MessagesModalOptions) => void;\r\n\r\n/**\r\n * MessagesModal - Full-featured chat modal with group and direct messaging\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 * @standalone true\r\n * @imports [CommonModule, FontAwesomeModule, MessagePanel]\r\n *\r\n * @description\r\n * A comprehensive chat modal supporting group and direct messaging with full UI customization.\r\n * Supports three levels of customization:\r\n * 1. **Style Overrides**: Customize appearance with `overlayStyle` and `contentStyle`\r\n * 2. **Component Integration**: Integrates with MediaSFU messaging system\r\n * 3. **Complete Replacement**: Use `customTemplate` for full UI control\r\n *\r\n * Features:\r\n * - Group chat for all participants\r\n * - Direct messaging between participants\r\n * - Message history and real-time updates\r\n * - Read receipts and sender identification\r\n * - Host/co-host message controls\r\n * - Socket-based real-time messaging\r\n *\r\n * @example\r\n * **Basic Usage**\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 *   [roomName]=\"'RoomName'\"\r\n *   [socket]=\"chatSocket\">\r\n * </app-messages-modal>\r\n * ```\r\n *\r\n * @example\r\n * **With Style Customization**\r\n * ```html\r\n * <app-messages-modal\r\n *   [isMessagesModalVisible]=\"true\"\r\n *   [overlayStyle]=\"{ backgroundColor: 'rgba(0, 0, 0, 0.85)' }\"\r\n *   [contentStyle]=\"{ borderRadius: '12px', maxHeight: '600px' }\"\r\n *   [onMessagesClose]=\"closeMessages\"\r\n *   [messages]=\"chatMessages\"\r\n *   [socket]=\"chatSocket\">\r\n * </app-messages-modal>\r\n * ```\r\n *\r\n * @example\r\n * **Custom Template Override**\r\n * ```html\r\n * <app-messages-modal\r\n *   [isMessagesModalVisible]=\"true\"\r\n *   [customTemplate]=\"customChatTemplate\"\r\n *   [messages]=\"chatMessages\"\r\n *   [onMessagesClose]=\"closeMessages\">\r\n * </app-messages-modal>\r\n * \r\n * <ng-template #customChatTemplate let-context>\r\n *   <div class=\"my-chat-modal\">\r\n *     <h2>Chat ({{ context.messages.length }} messages)</h2>\r\n *     <div *ngFor=\"let message of context.messages\">\r\n *       <strong>{{ message.sender }}:</strong> {{ message.message }}\r\n *     </div>\r\n *   </div>\r\n * </ng-template>\r\n * ```\r\n *\r\n * @input {boolean} isMessagesModalVisible - Controls modal visibility\r\n * @input {() => void} onMessagesClose - Callback when modal is closed\r\n * @input {Message[]} messages - Array of chat messages\r\n * @input {string} position - Modal position (default: 'bottomRight')\r\n * @input {string} backgroundColor - Modal background color (default: '#f5f5f5')\r\n * @input {EventType} eventType - Type of event (meeting, webinar, etc.)\r\n * @input {string} member - Current user's name/ID\r\n * @input {string} islevel - User's privilege level\r\n * @input {Socket} socket - Socket.io connection for real-time messaging\r\n * @input {string} roomName - Room identifier\r\n * @input {Partial<CSSStyleDeclaration>} overlayStyle - Custom overlay styles\r\n * @input {Partial<CSSStyleDeclaration>} contentStyle - Custom content styles\r\n * @input {TemplateRef<any>} customTemplate - Complete template override\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\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  getCombinedOverlayStyle() {\r\n    return {\r\n      ...this.modalContainerStyle,\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.modalContentStyle,\r\n      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<!-- Custom template override -->\r\n<ng-container *ngIf=\"isMessagesModalVisible && customTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"customTemplate; context: { $implicit: { isMessagesModalVisible, eventType, activeTab, messages, member, closeMessagesModal: closeMessagesModal.bind(this) } }\"></ng-container>\r\n</ng-container>\r\n\r\n<!-- Default template -->\r\n<div *ngIf=\"isMessagesModalVisible && !customTemplate\" [ngStyle]=\"getCombinedOverlayStyle()\">\r\n  <div [ngStyle]=\"getCombinedContentStyle()\">\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, TemplateRef } 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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\r\n}\r\n\r\nexport type ConfirmHereModalType = (options: ConfirmHereModalOptions) => void;\r\n\r\n/**\r\n * ConfirmHereModal - Presence confirmation modal with countdown timer\r\n * \r\n * @component\r\n * @description\r\n * Displays an \"Are you still here?\" modal with countdown timer to confirm user presence.\r\n * Automatically disconnects user if they don't respond within the countdown duration.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with custom countdown and callbacks\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Countdown timer with visual feedback\r\n * - Automatic disconnect on timeout\r\n * - Socket-based presence confirmation\r\n * - \"Yes, I'm here\" confirmation button\r\n * - Configurable duration and styling\r\n * \r\n * @example\r\n * Basic Usage:\r\n * ```html\r\n * <app-confirm-here-modal\r\n *   [isConfirmHereModalVisible]=\"showPresenceCheck\"\r\n *   [socket]=\"socketInstance\"\r\n *   [roomName]=\"currentRoom\"\r\n *   [member]=\"currentMember\"\r\n *   [countdownDuration]=\"120\"\r\n *   [onConfirmHereClose]=\"handlePresenceConfirmed\">\r\n * </app-confirm-here-modal>\r\n * ```\r\n * \r\n * @example\r\n * Style Customization:\r\n * ```html\r\n * <app-confirm-here-modal\r\n *   [isConfirmHereModalVisible]=\"showPresenceCheck\"\r\n *   [socket]=\"socketInstance\"\r\n *   [roomName]=\"currentRoom\"\r\n *   [member]=\"currentMember\"\r\n *   [countdownDuration]=\"90\"\r\n *   [overlayStyle]=\"{\r\n *     backgroundColor: 'rgba(0, 0, 0, 0.9)'\r\n *   }\"\r\n *   [contentStyle]=\"{\r\n *     backgroundColor: '#1e1e1e',\r\n *     border: '3px solid #ff6b6b',\r\n *     borderRadius: '15px',\r\n *     padding: '30px'\r\n *   }\"\r\n *   [displayColor]=\"'#ff6b6b'\"\r\n *   [onConfirmHereClose]=\"handlePresenceConfirmed\">\r\n * </app-confirm-here-modal>\r\n * ```\r\n * \r\n * @example\r\n * Custom Template Override:\r\n * ```html\r\n * <app-confirm-here-modal\r\n *   [isConfirmHereModalVisible]=\"showPresenceCheck\"\r\n *   [customTemplate]=\"customPresenceTemplate\"\r\n *   [onConfirmHereClose]=\"handlePresenceConfirmed\">\r\n * </app-confirm-here-modal>\r\n * \r\n * <ng-template #customPresenceTemplate let-counter=\"counter\" let-onConfirm=\"onConfirm\">\r\n *   <div class=\"custom-presence-check\">\r\n *     <div class=\"countdown-circle\">{{ counter }}</div>\r\n *     <h3>Still there?</h3>\r\n *     <p>You'll be disconnected in {{ counter }} seconds</p>\r\n *     <button (click)=\"onConfirm()\" class=\"confirm-btn\">I'm here!</button>\r\n *   </div>\r\n * </ng-template>\r\n * ```\r\n * \r\n * @selector app-confirm-here-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule\r\n * \r\n * @input isConfirmHereModalVisible - Whether the modal is currently visible. Default: `false`\r\n * @input position - Modal position on screen (e.g., 'center', 'topCenter'). Default: `'center'`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input displayColor - Color of the countdown timer text. Default: `'#000000'`\r\n * @input onConfirmHereClose - Callback function when user confirms presence or modal closes. Default: `() => {}`\r\n * @input socket - Socket.io client instance for real-time communication. Default: `undefined`\r\n * @input localSocket - Optional local socket instance for community edition. Default: `undefined`\r\n * @input roomName - Name of the room/session for presence confirmation. Default: `''`\r\n * @input member - Name/ID of the member confirming presence. Default: `''`\r\n * @input countdownDuration - Countdown duration in seconds before auto-disconnect. Default: `120`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method ngOnInit - Initializes countdown timer and socket listeners\r\n * @method ngOnDestroy - Cleans up timers and socket listeners\r\n * @method startCountdown - Begins countdown timer\r\n * @method stopCountdown - Stops countdown timer\r\n * @method handleConfirmHere - Handles user confirmation and sends socket event\r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\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  getCombinedOverlayStyle() {\r\n    return {\r\n      ...this.modalContainerStyle,\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.modalContentStyle,\r\n      ...(this.contentStyle || {})\r\n    };\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","<!-- Custom template override -->\r\n<ng-container *ngIf=\"isConfirmHereModalVisible && customTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n    $implicit: {\r\n      isConfirmHereModalVisible,\r\n      position,\r\n      backgroundColor,\r\n      displayColor,\r\n      counter,\r\n      handleConfirmHere: handleConfirmHere.bind(this),\r\n      onConfirmHereClose\r\n    }\r\n  }\"></ng-container>\r\n</ng-container>\r\n\r\n<!-- Default template -->\r\n<div *ngIf=\"isConfirmHereModalVisible && !customTemplate\"\r\n     [ngStyle]=\"getCombinedOverlayStyle()\"\r\n     class=\"modal-container\">\r\n  <div [ngStyle]=\"getCombinedContentStyle()\" 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 { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'app-modern-button',\r\n  imports: [CommonModule],\r\n  template: `\r\n    <button\r\n      class=\"ms-modern-button\"\r\n      [class.ms-modern-button--primary]=\"variant === 'primary'\"\r\n      [class.ms-modern-button--secondary]=\"variant === 'secondary'\"\r\n      [class.ms-modern-button--ghost]=\"variant === 'ghost'\"\r\n      [class.ms-modern-button--md]=\"size === 'md'\"\r\n      [class.ms-modern-button--lg]=\"size === 'lg'\"\r\n      [class.ms-modern-button--block]=\"block\"\r\n      [type]=\"type\"\r\n      [disabled]=\"disabled\"\r\n    >\r\n      <ng-content></ng-content>\r\n    </button>\r\n  `,\r\n  styles: [\r\n    `\r\n      :host {\r\n        display: inline-flex;\r\n      }\r\n\r\n      :host(.ms-modern-button-host--block) {\r\n        display: flex;\r\n      }\r\n\r\n      .ms-modern-button {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: var(--ms-modern-spacing-sm);\r\n        border-radius: var(--ms-modern-radius-pill);\r\n        border: 1px solid transparent;\r\n        font-family: var(--ms-modern-font-family);\r\n        font-size: var(--ms-modern-font-body);\r\n        font-weight: 700;\r\n        line-height: 1;\r\n        cursor: pointer;\r\n        transition:\r\n          transform var(--ms-modern-motion-fast) var(--ms-modern-motion-easing),\r\n          background var(--ms-modern-motion-base) var(--ms-modern-motion-easing),\r\n          border-color var(--ms-modern-motion-base) var(--ms-modern-motion-easing),\r\n          box-shadow var(--ms-modern-motion-base) var(--ms-modern-motion-easing);\r\n      }\r\n\r\n      .ms-modern-button:hover:not(:disabled) {\r\n        transform: translateY(-1px);\r\n      }\r\n\r\n      .ms-modern-button:focus-visible {\r\n        outline: none;\r\n        box-shadow: var(--ms-modern-focus-ring);\r\n      }\r\n\r\n      .ms-modern-button:disabled {\r\n        opacity: 0.62;\r\n        cursor: not-allowed;\r\n      }\r\n\r\n      .ms-modern-button--primary {\r\n        color: #ffffff;\r\n        background: linear-gradient(135deg, var(--ms-modern-accent), var(--ms-modern-accent-strong));\r\n        box-shadow: 0 14px 30px rgba(20, 118, 210, 0.24);\r\n      }\r\n\r\n      .ms-modern-button--secondary {\r\n        color: var(--ms-modern-text-primary);\r\n        background: color-mix(in srgb, var(--ms-modern-accent) 10%, transparent);\r\n        border-color: color-mix(in srgb, var(--ms-modern-accent) 22%, transparent);\r\n      }\r\n\r\n      .ms-modern-button--ghost {\r\n        color: var(--ms-modern-text-secondary);\r\n        background: color-mix(in srgb, var(--ms-modern-panel-surface) 68%, transparent);\r\n        border-color: var(--ms-modern-border-subtle);\r\n      }\r\n\r\n      .ms-modern-button--md {\r\n        min-height: 46px;\r\n        padding: 0 20px;\r\n      }\r\n\r\n      .ms-modern-button--lg {\r\n        min-height: 54px;\r\n        padding: 0 24px;\r\n      }\r\n\r\n      .ms-modern-button--block {\r\n        width: 100%;\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernButtonComponent {\r\n  @Input() type: 'button' | 'submit' | 'reset' = 'button';\r\n  @Input() variant: 'primary' | 'secondary' | 'ghost' = 'primary';\r\n  @Input() size: 'md' | 'lg' = 'md';\r\n  @Input() block = false;\r\n  @Input() disabled = false;\r\n}","import { CommonModule } from '@angular/common';\r\nimport {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  forwardRef,\r\n} from '@angular/core';\r\nimport {\r\n  ControlValueAccessor,\r\n  NG_VALUE_ACCESSOR,\r\n} from '@angular/forms';\r\n\r\nexport interface ModernFieldOption {\r\n  label: string;\r\n  value: string;\r\n}\r\n\r\n@Component({\r\n  selector: 'app-modern-field',\r\n  imports: [CommonModule],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => ModernFieldComponent),\r\n      multi: true,\r\n    },\r\n  ],\r\n  template: `\r\n    <label class=\"ms-modern-field\">\r\n      <span *ngIf=\"label\" class=\"ms-modern-field__label\">{{ label }}</span>\r\n\r\n      <ng-container [ngSwitch]=\"controlType\">\r\n        <select\r\n          *ngSwitchCase=\"'select'\"\r\n          class=\"ms-modern-field__control\"\r\n          [disabled]=\"isDisabled\"\r\n          [value]=\"internalValue\"\r\n          (change)=\"handleValueChange($event)\"\r\n          (blur)=\"handleBlur()\"\r\n        >\r\n          <option *ngFor=\"let option of options; trackBy: trackOption\" [value]=\"option.value\">\r\n            {{ option.label }}\r\n          </option>\r\n        </select>\r\n\r\n        <textarea\r\n          *ngSwitchCase=\"'textarea'\"\r\n          class=\"ms-modern-field__control ms-modern-field__control--textarea\"\r\n          [attr.placeholder]=\"placeholder || null\"\r\n          [disabled]=\"isDisabled\"\r\n          [value]=\"internalValue\"\r\n          [attr.rows]=\"rows\"\r\n          (input)=\"handleValueChange($event)\"\r\n          (blur)=\"handleBlur()\"\r\n        ></textarea>\r\n\r\n        <input\r\n          *ngSwitchDefault\r\n          class=\"ms-modern-field__control\"\r\n          [attr.type]=\"type\"\r\n          [attr.placeholder]=\"placeholder || null\"\r\n          [attr.inputmode]=\"inputMode || null\"\r\n          [attr.autocomplete]=\"autocomplete || null\"\r\n          [disabled]=\"isDisabled\"\r\n          [value]=\"internalValue\"\r\n          (input)=\"handleValueChange($event)\"\r\n          (blur)=\"handleBlur()\"\r\n        />\r\n      </ng-container>\r\n\r\n      <span *ngIf=\"hint\" class=\"ms-modern-field__hint\">{{ hint }}</span>\r\n    </label>\r\n  `,\r\n  styles: [\r\n    `\r\n      :host {\r\n        display: block;\r\n        width: 100%;\r\n      }\r\n\r\n      .ms-modern-field {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 6px;\r\n        width: 100%;\r\n      }\r\n\r\n      .ms-modern-field__label {\r\n        color: var(--ms-modern-text-secondary);\r\n        font-family: var(--ms-modern-font-family);\r\n        font-size: var(--ms-modern-font-label);\r\n        font-weight: 700;\r\n        letter-spacing: 0.08em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-field__control {\r\n        width: 100%;\r\n        box-sizing: border-box;\r\n        min-height: 50px;\r\n        border: 1px solid var(--ms-modern-border-subtle);\r\n        border-radius: var(--ms-modern-radius-md);\r\n        background: var(--ms-modern-field-background);\r\n        color: var(--ms-modern-text-primary);\r\n        font-family: var(--ms-modern-font-family);\r\n        font-size: var(--ms-modern-font-body);\r\n        padding: 0 16px;\r\n        transition:\r\n          border-color var(--ms-modern-motion-base) var(--ms-modern-motion-easing),\r\n          box-shadow var(--ms-modern-motion-base) var(--ms-modern-motion-easing),\r\n          background var(--ms-modern-motion-base) var(--ms-modern-motion-easing);\r\n      }\r\n\r\n      .ms-modern-field__control--textarea {\r\n        min-height: 120px;\r\n        padding-top: 14px;\r\n        padding-bottom: 14px;\r\n        resize: vertical;\r\n      }\r\n\r\n      .ms-modern-field__control:focus {\r\n        outline: none;\r\n        border-color: var(--ms-modern-border-strong);\r\n        box-shadow: var(--ms-modern-focus-ring);\r\n      }\r\n\r\n      .ms-modern-field__control::placeholder {\r\n        color: var(--ms-modern-text-muted);\r\n      }\r\n\r\n      .ms-modern-field__hint {\r\n        color: var(--ms-modern-text-muted);\r\n        font-family: var(--ms-modern-font-family);\r\n        font-size: var(--ms-modern-font-caption);\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernFieldComponent implements ControlValueAccessor {\r\n  @Input() controlType: 'input' | 'select' | 'textarea' = 'input';\r\n  @Input() type = 'text';\r\n  @Input() label = '';\r\n  @Input() hint = '';\r\n  @Input() placeholder = '';\r\n  @Input() inputMode = '';\r\n  @Input() autocomplete = '';\r\n  @Input() rows = 4;\r\n  @Input() options: ReadonlyArray<ModernFieldOption> = [];\r\n  @Output() blurred = new EventEmitter<void>();\r\n\r\n  internalValue = '';\r\n  isDisabled = false;\r\n\r\n  private onChange: (value: string) => void = () => {};\r\n  private onTouched: () => void = () => {};\r\n\r\n  writeValue(value: string | null | undefined): void {\r\n    this.internalValue = value ?? '';\r\n  }\r\n\r\n  registerOnChange(fn: (value: string) => void): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: () => void): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.isDisabled = isDisabled;\r\n  }\r\n\r\n  handleValueChange(event: Event): void {\r\n    const nextValue = (event.target as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement)\r\n      .value;\r\n    this.internalValue = nextValue;\r\n    this.onChange(nextValue);\r\n  }\r\n\r\n  handleBlur(): void {\r\n    this.onTouched();\r\n    this.blurred.emit();\r\n  }\r\n\r\n  trackOption = (_index: number, option: ModernFieldOption): string => option.value;\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'app-modern-surface',\r\n  imports: [CommonModule],\r\n  template: `\r\n    <div\r\n      class=\"ms-modern-surface\"\r\n      [class.ms-modern-surface--elevated]=\"tone === 'elevated'\"\r\n      [class.ms-modern-surface--interactive]=\"interactive\"\r\n    >\r\n      <ng-content></ng-content>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      :host {\r\n        display: block;\r\n      }\r\n\r\n      .ms-modern-surface {\r\n        background:\r\n          linear-gradient(180deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0)),\r\n          var(--ms-modern-panel-surface);\r\n        border: 1px solid var(--ms-modern-border-subtle);\r\n        border-radius: var(--ms-modern-radius-lg);\r\n        box-shadow: var(--ms-modern-shadow-panel);\r\n        backdrop-filter: blur(18px);\r\n      }\r\n\r\n      .ms-modern-surface--elevated {\r\n        background:\r\n          linear-gradient(180deg, rgba(20, 118, 210, 0.08), rgba(255, 255, 255, 0)),\r\n          var(--ms-modern-panel-surface-elevated);\r\n        border-color: var(--ms-modern-border-strong);\r\n      }\r\n\r\n      .ms-modern-surface--interactive {\r\n        transition:\r\n          transform var(--ms-modern-motion-base) var(--ms-modern-motion-easing),\r\n          border-color var(--ms-modern-motion-base) var(--ms-modern-motion-easing),\r\n          box-shadow var(--ms-modern-motion-base) var(--ms-modern-motion-easing);\r\n      }\r\n\r\n      .ms-modern-surface--interactive:hover {\r\n        transform: translateY(-2px);\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernSurfaceComponent {\r\n  @Input() tone: 'base' | 'elevated' = 'base';\r\n  @Input() interactive = false;\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\nimport { ModernSurfaceComponent } from './modern-surface.component';\r\n\r\n@Component({\r\n  selector: 'app-modern-entry-shell',\r\n  imports: [CommonModule, ModernSurfaceComponent],\r\n  styleUrls: ['../theme/modern-tokens.css'],\r\n  template: `\r\n    <div class=\"ms-modern-entry-shell\">\r\n      <div class=\"ms-modern-entry-shell__background\"></div>\r\n\r\n      <div\r\n        class=\"ms-modern-entry-shell__content\"\r\n        [class.ms-modern-entry-shell__content--compact]=\"compact\"\r\n      >\r\n        <app-modern-surface class=\"ms-modern-entry-shell__panel\" tone=\"elevated\">\r\n          <div class=\"ms-modern-entry-shell__panel-content\">\r\n            <div class=\"ms-modern-entry-shell__header\">\r\n              <ng-content select=\"[msEntryEyebrow]\"></ng-content>\r\n              <ng-content select=\"[msEntryTitle]\"></ng-content>\r\n              <ng-content select=\"[msEntryDescription]\"></ng-content>\r\n            </div>\r\n\r\n            <div class=\"ms-modern-entry-shell__body\">\r\n              <ng-content></ng-content>\r\n            </div>\r\n\r\n            <div class=\"ms-modern-entry-shell__footer\">\r\n              <ng-content select=\"[msEntryFooter]\"></ng-content>\r\n            </div>\r\n          </div>\r\n        </app-modern-surface>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      :host {\r\n        display: block;\r\n      }\r\n\r\n      .ms-modern-entry-shell {\r\n        position: relative;\r\n        width: 100%;\r\n        min-height: 100vh;\r\n        min-height: 100dvh;\r\n        overflow-x: hidden;\r\n        overflow-y: auto;\r\n        overscroll-behavior: contain;\r\n        background:\r\n          radial-gradient(circle at top left, rgba(20, 118, 210, 0.14), transparent 34%),\r\n          radial-gradient(circle at bottom right, rgba(20, 125, 100, 0.12), transparent 30%),\r\n          linear-gradient(180deg, var(--ms-modern-page-background), var(--ms-modern-page-background-accent));\r\n      }\r\n\r\n      .ms-modern-entry-shell__background {\r\n        position: absolute;\r\n        inset: 0;\r\n        background-image:\r\n          linear-gradient(rgba(120, 143, 173, 0.08) 1px, transparent 1px),\r\n          linear-gradient(90deg, rgba(120, 143, 173, 0.08) 1px, transparent 1px);\r\n        background-size: 56px 56px;\r\n        mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.8), transparent 85%);\r\n      }\r\n\r\n      .ms-modern-entry-shell__content {\r\n        position: relative;\r\n        z-index: 1;\r\n        width: min(calc(100% - 48px), var(--ms-modern-onboarding-card-max-width));\r\n        min-height: 100vh;\r\n        min-height: 100dvh;\r\n        margin: 0 auto;\r\n        padding: clamp(24px, 5vh, 52px) 0;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        box-sizing: border-box;\r\n      }\r\n\r\n      .ms-modern-entry-shell__content--compact {\r\n        align-items: center;\r\n      }\r\n\r\n      .ms-modern-entry-shell__panel {\r\n        width: min(100%, var(--ms-modern-onboarding-card-max-width));\r\n      }\r\n\r\n      .ms-modern-entry-shell__panel-content {\r\n        padding: var(--ms-modern-spacing-xl);\r\n      }\r\n\r\n      .ms-modern-entry-shell__header,\r\n      .ms-modern-entry-shell__body,\r\n      .ms-modern-entry-shell__footer {\r\n        display: flex;\r\n        flex-direction: column;\r\n      }\r\n\r\n      .ms-modern-entry-shell__header {\r\n        gap: var(--ms-modern-spacing-md);\r\n        align-items: center;\r\n        text-align: center;\r\n        color: var(--ms-modern-text-primary);\r\n        margin-bottom: var(--ms-modern-spacing-xl);\r\n      }\r\n\r\n      .ms-modern-entry-shell__body {\r\n        gap: var(--ms-modern-spacing-lg);\r\n      }\r\n\r\n      .ms-modern-entry-shell__footer:empty {\r\n        display: none;\r\n      }\r\n\r\n      @media (max-width: 640px) {\r\n        .ms-modern-entry-shell__content {\r\n          width: min(calc(100% - 28px), var(--ms-modern-onboarding-card-max-width));\r\n          padding: 16px 0 24px;\r\n        }\r\n\r\n        .ms-modern-entry-shell__content--compact {\r\n          align-items: center;\r\n        }\r\n\r\n        .ms-modern-entry-shell__panel-content {\r\n          padding: var(--ms-modern-spacing-lg);\r\n        }\r\n      }\r\n\r\n      @media (max-height: 900px) {\r\n        .ms-modern-entry-shell__content {\r\n          padding: 18px 0 28px;\r\n        }\r\n\r\n        .ms-modern-entry-shell__content--compact {\r\n          align-items: center;\r\n        }\r\n\r\n        .ms-modern-entry-shell__panel-content {\r\n          padding: var(--ms-modern-spacing-lg);\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernEntryShellComponent {\r\n  @Input() compact = false;\r\n}","import { Injectable } from '@angular/core';\r\nimport { checkLimitsAndMakeRequest as sharedCheckLimitsAndMakeRequest } from 'mediasfu-shared';\r\nimport { PreJoinPageParameters } from '../../@types/types';\r\nimport { CookieService } from 'ngx-cookie-service';\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    await (sharedCheckLimitsAndMakeRequest as unknown as (options: {\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      apiUserName,\r\n      apiToken,\r\n      link,\r\n      apiKey,\r\n      userName,\r\n      parameters,\r\n      validate,\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { createRoomOnMediaSFU as sharedCreateRoomOnMediaSFU } from 'mediasfu-shared';\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`. The method includes\r\n * a 30-second protection mechanism to prevent duplicate room creation requests.\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: 60, // Duration in minutes\r\n*     capacity: 10, // Max participants\r\n*     userName: 'hostUser',\r\n*     scheduledDate: Date.now() + 3600000, // One hour from now\r\n*     secureCode: 'secure123', // Optional\r\n*     eventType: 'conference', // 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`. The method includes\r\n * a 30-second protection mechanism to prevent duplicate room creation requests.\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: 60, // Duration in minutes\r\n  *     capacity: 10, // Max participants\r\n  *     userName: 'hostUser',\r\n  *     scheduledDate: Date.now() + 3600000, // One hour from now\r\n  *     secureCode: 'secure123', // Optional\r\n  *     eventType: 'conference', // 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    return sharedCreateRoomOnMediaSFU({\r\n      payload: payload as CreateMediaSFURoomOptions,\r\n      apiUserName,\r\n      apiKey,\r\n      localLink,\r\n    }) as Promise<{\r\n      data: CreateJoinRoomResponse | CreateJoinRoomError | null;\r\n      success: boolean;\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\nimport { ModernButtonComponent } from '../../../modern/primitives/modern-button.component';\r\nimport {\r\n  ModernFieldComponent,\r\n  type ModernFieldOption,\r\n} from '../../../modern/primitives/modern-field.component';\r\nimport { ModernEntryShellComponent } from '../../../modern/primitives/modern-entry-shell.component';\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\nconst EMPTY_CREDENTIALS: Credentials = {\r\n  apiUserName: '',\r\n  apiKey: '',\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: [\r\n    CommonModule,\r\n    ReactiveFormsModule,\r\n    ModernButtonComponent,\r\n    ModernEntryShellComponent,\r\n    ModernFieldComponent,\r\n  ]\r\n})\r\nexport class PreJoinPage implements OnInit {\r\n  @Input() parameters: PreJoinPageParameters = {} as PreJoinPageParameters;\r\n  @Input() credentials: Credentials = { ...EMPTY_CREDENTIALS };\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  readonly eventTypeOptions: ReadonlyArray<ModernFieldOption> = [\r\n    { label: 'Select Event Type', value: '' },\r\n    { label: 'Chat', value: 'chat' },\r\n    { label: 'Broadcast', value: 'broadcast' },\r\n    { label: 'Webinar', value: 'webinar' },\r\n    { label: 'Conference', value: 'conference' },\r\n  ];\r\n\r\n  private hasCloudCredentials(credentials: Credentials = this.credentials): boolean {\r\n    return Boolean(credentials.apiUserName?.trim() && credentials.apiKey?.trim());\r\n  }\r\n\r\n  private failMissingCloudCredentials(): void {\r\n    const message = 'MediaSFU Cloud credentials are required when using cloud create or join flows.';\r\n    this.error = message;\r\n    this.pending.next(false);\r\n    this.parameters.updateIsLoadingModalVisible(false);\r\n    this.parameters.showAlert?.({\r\n      message,\r\n      type: 'danger',\r\n      duration: 3000,\r\n    });\r\n  }\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    this.imgSrc = this.parameters.imgSrc || '';\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    this.error = '';\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          this.pending.next(false);\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    if (!this.localLink && !this.hasCloudCredentials()) {\r\n      this.failMissingCloudCredentials();\r\n      return;\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        // Store references to prevent race conditions\r\n        const apiUserName = this.localData.apiUserName;\r\n        const apiKey = this.localData.apiKey;\r\n\r\n        // Build a unique identifier for this create request\r\n        const roomIdentifier = `local_create_${payload.userName}_${payload.duration}_${payload.capacity}`;\r\n        const pendingKey = `prejoin_pending_${roomIdentifier}`;\r\n        const PENDING_TIMEOUT = 30 * 1000; // 30 seconds\r\n\r\n        // Check pending status to prevent duplicate requests\r\n        try {\r\n          const pendingRequest = localStorage.getItem(pendingKey);\r\n          if (pendingRequest) {\r\n            const pendingData = JSON.parse(pendingRequest);\r\n            const timeSincePending = Date.now() - (pendingData?.timestamp ?? 0);\r\n            if (timeSincePending < PENDING_TIMEOUT) {\r\n              this.pending.next(false);\r\n              this.parameters.updateIsLoadingModalVisible(false);\r\n              this.error = 'Room creation already in progress';\r\n              return;\r\n            } else {\r\n              // Stale lock, clear it\r\n              try {\r\n                localStorage.removeItem(pendingKey);\r\n              } catch {\r\n                // Ignore localStorage errors\r\n              }\r\n            }\r\n          }\r\n        } catch {\r\n          // Ignore localStorage read/JSON errors\r\n        }\r\n\r\n        // Mark request as pending\r\n        try {\r\n          localStorage.setItem(\r\n            pendingKey,\r\n            JSON.stringify({\r\n              timestamp: Date.now(),\r\n              payload: {\r\n                action: 'create',\r\n                userName: payload.userName,\r\n                duration: payload.duration,\r\n                capacity: payload.capacity,\r\n              },\r\n            })\r\n          );\r\n\r\n          // Auto-clear the pending flag after timeout to avoid stale locks\r\n          setTimeout(() => {\r\n            try {\r\n              localStorage.removeItem(pendingKey);\r\n            } catch {\r\n              // Ignore localStorage errors\r\n            }\r\n          }, PENDING_TIMEOUT);\r\n        } catch {\r\n          // Ignore localStorage write errors\r\n        }\r\n\r\n        payload.recordOnly = true; // allow production to MediaSFU only; no consumption\r\n\r\n        try {\r\n          const response = await this.roomCreator({\r\n            payload,\r\n            apiUserName: apiUserName,\r\n            apiKey: apiKey,\r\n            validate: false,\r\n          });\r\n\r\n          // Clear pending status on completion\r\n          try {\r\n            localStorage.removeItem(pendingKey);\r\n          } catch {\r\n            /* ignore */\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              this.pending.next(false);\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        } catch (error: any) {\r\n          // Clear pending status on error\r\n          try {\r\n            localStorage.removeItem(pendingKey);\r\n          } catch {\r\n            /* ignore */\r\n          }\r\n          this.pending.next(false);\r\n          this.parameters.updateIsLoadingModalVisible(false);\r\n          this.error = `Unable to create room on MediaSFU. ${error}`;\r\n        }\r\n      } else {\r\n        try {\r\n          this.parameters.updateSocket(this.initSocket!);\r\n          await this.createLocalRoom({ createData: createData });\r\n          this.pending.next(false);\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      // Build a unique identifier for this create request (non-local)\r\n      const roomIdentifier = `mediasfu_create_${payload.userName}_${payload.duration}_${payload.capacity}`;\r\n      const pendingKey = `prejoin_pending_${roomIdentifier}`;\r\n      const PENDING_TIMEOUT = 30 * 1000; // 30 seconds\r\n\r\n      // Check pending status to prevent duplicate requests\r\n      try {\r\n        const pendingRequest = localStorage.getItem(pendingKey);\r\n        if (pendingRequest) {\r\n          const pendingData = JSON.parse(pendingRequest);\r\n          const timeSincePending = Date.now() - (pendingData?.timestamp ?? 0);\r\n          if (timeSincePending < PENDING_TIMEOUT) {\r\n            this.pending.next(false);\r\n            this.parameters.updateIsLoadingModalVisible(false);\r\n            this.error = 'Room creation already in progress';\r\n            return;\r\n          } else {\r\n            // Stale lock, clear it\r\n            try {\r\n              localStorage.removeItem(pendingKey);\r\n            } catch {\r\n              // Ignore localStorage errors\r\n            }\r\n          }\r\n        }\r\n      } catch {\r\n        // Ignore localStorage read/JSON errors\r\n      }\r\n\r\n      // Mark request as pending\r\n      try {\r\n        localStorage.setItem(\r\n          pendingKey,\r\n          JSON.stringify({\r\n            timestamp: Date.now(),\r\n            payload: {\r\n              action: 'create',\r\n              userName: payload.userName,\r\n              duration: payload.duration,\r\n              capacity: payload.capacity,\r\n            },\r\n          })\r\n        );\r\n\r\n        // Auto-clear the pending flag after timeout to avoid stale locks\r\n        setTimeout(() => {\r\n          try {\r\n            localStorage.removeItem(pendingKey);\r\n          } catch {\r\n            // Ignore localStorage errors\r\n          }\r\n        }, PENDING_TIMEOUT);\r\n      } catch {\r\n        // Ignore localStorage write errors\r\n      }\r\n\r\n      try {\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\r\n        // Clear pending status on completion\r\n        try {\r\n          localStorage.removeItem(pendingKey);\r\n        } catch {\r\n          /* ignore */\r\n        }\r\n\r\n        this.pending.next(false);\r\n      } catch (error: any) {\r\n        // Clear pending status on error\r\n        try {\r\n          localStorage.removeItem(pendingKey);\r\n        } catch {\r\n          /* ignore */\r\n        }\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  }\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    this.error = '';\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        this.pending.next(false);\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    if (!this.hasCloudCredentials()) {\r\n      this.failMissingCloudCredentials();\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.pending.next(false);\r\n      this.error = `Unable to connect. ${(error as Error).message}`;\r\n  }\r\n}\r\n}\r\n","<app-modern-entry-shell *ngIf=\"returnUI !== false\" [compact]=\"isCreateMode\">\r\n  <div msEntryTitle class=\"ms-modern-prejoin__title-wrap\">\r\n    <img\r\n      [src]=\"imgSrc || 'https://mediasfu.com/images/logo192.png'\"\r\n      class=\"ms-modern-prejoin__logo\"\r\n      alt=\"MediaSFU\"\r\n    />\r\n    <h1 class=\"ms-modern-prejoin__title\">\r\n      {{ isCreateMode ? 'Create a Room' : 'Join a Room' }}\r\n    </h1>\r\n  </div>\r\n\r\n  <p msEntryDescription class=\"ms-modern-prejoin__description\">\r\n    {{\r\n      isCreateMode\r\n        ? 'Start a new session with your audience using the same room flow and transport logic.'\r\n        : 'Enter your display name and event ID to connect.'\r\n    }}\r\n  </p>\r\n\r\n  <form class=\"ms-modern-prejoin__form\" [formGroup]=\"preJoinForm\">\r\n    <app-modern-field\r\n      label=\"Display Name\"\r\n      hint=\"Use the name you want to appear in the room.\"\r\n      placeholder=\"Display Name\"\r\n      formControlName=\"name\"\r\n    ></app-modern-field>\r\n\r\n    <ng-container *ngIf=\"isCreateMode; else joinRoomForm\">\r\n      <app-modern-field\r\n        label=\"Duration\"\r\n        hint=\"Room duration in minutes.\"\r\n        placeholder=\"Duration (minutes)\"\r\n        type=\"number\"\r\n        inputMode=\"numeric\"\r\n        formControlName=\"duration\"\r\n      ></app-modern-field>\r\n\r\n      <app-modern-field\r\n        controlType=\"select\"\r\n        label=\"Event Type\"\r\n        hint=\"Choose the room mode to create.\"\r\n        [options]=\"eventTypeOptions\"\r\n        formControlName=\"eventType\"\r\n      ></app-modern-field>\r\n\r\n      <app-modern-field\r\n        label=\"Room Capacity\"\r\n        hint=\"Maximum number of participants to allow.\"\r\n        placeholder=\"Room Capacity\"\r\n        type=\"number\"\r\n        inputMode=\"numeric\"\r\n        formControlName=\"capacity\"\r\n      ></app-modern-field>\r\n\r\n      <app-modern-button\r\n        type=\"button\"\r\n        size=\"lg\"\r\n        [block]=\"true\"\r\n        [disabled]=\"pending.value\"\r\n        (click)=\"handleCreateRoom()\"\r\n      >\r\n        Create Room\r\n      </app-modern-button>\r\n    </ng-container>\r\n\r\n    <ng-template #joinRoomForm>\r\n      <app-modern-field\r\n        label=\"Event ID\"\r\n        hint=\"Enter the identifier issued for the room.\"\r\n        placeholder=\"Event ID\"\r\n        formControlName=\"eventID\"\r\n      ></app-modern-field>\r\n\r\n      <app-modern-button\r\n        type=\"button\"\r\n        size=\"lg\"\r\n        [block]=\"true\"\r\n        [disabled]=\"pending.value\"\r\n        (click)=\"handleJoinRoom()\"\r\n      >\r\n        Join Room\r\n      </app-modern-button>\r\n    </ng-template>\r\n\r\n    <p *ngIf=\"error\" class=\"ms-modern-prejoin__error\">{{ error }}</p>\r\n\r\n    <div class=\"ms-modern-prejoin__divider\" aria-hidden=\"true\">\r\n      <span>or</span>\r\n    </div>\r\n\r\n    <app-modern-button\r\n      type=\"button\"\r\n      variant=\"ghost\"\r\n      [block]=\"true\"\r\n      [disabled]=\"pending.value\"\r\n      (click)=\"toggleMode()\"\r\n    >\r\n      {{ isCreateMode ? 'Switch to Join Mode' : 'Switch to Create Mode' }}\r\n    </app-modern-button>\r\n  </form>\r\n</app-modern-entry-shell>\r\n","import { Component, Input, TemplateRef } 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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\r\n}\r\n\r\nexport type ShareEventModalType = (options: ShareEventModalOptions) => void;\r\n\r\n/**\r\n * ShareEventModal - Modal for sharing room/event access details\r\n * \r\n * @component\r\n * @description\r\n * Displays a modal with meeting ID, passcode, and share options for inviting participants.\r\n * Includes social sharing buttons and copy-to-clipboard functionality.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with room details and share buttons\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Meeting ID display with copy functionality\r\n * - Admin passcode display (for hosts)\r\n * - Social media share buttons (optional)\r\n * - Support for custom/local server links\r\n * - Event type-specific sharing\r\n * \r\n * @example\r\n * Basic Usage:\r\n * ```html\r\n * <app-share-event-modal\r\n *   [isShareEventModalVisible]=\"showShareModal\"\r\n *   [roomName]=\"currentRoom\"\r\n *   [adminPasscode]=\"hostPasscode\"\r\n *   [islevel]=\"'0'\"\r\n *   [eventType]=\"'webinar'\"\r\n *   [shareButtons]=\"true\"\r\n *   [onShareEventClose]=\"closeShareModal\">\r\n * </app-share-event-modal>\r\n * ```\r\n * \r\n * @example\r\n * Style Customization:\r\n * ```html\r\n * <app-share-event-modal\r\n *   [isShareEventModalVisible]=\"showShareModal\"\r\n *   [roomName]=\"currentRoom\"\r\n *   [adminPasscode]=\"hostPasscode\"\r\n *   [eventType]=\"'conference'\"\r\n *   [overlayStyle]=\"{\r\n *     backgroundColor: 'rgba(0, 0, 0, 0.75)'\r\n *   }\"\r\n *   [contentStyle]=\"{\r\n *     backgroundColor: '#ffffff',\r\n *     borderRadius: '16px',\r\n *     padding: '30px',\r\n *     maxWidth: '500px'\r\n *   }\"\r\n *   [position]=\"'center'\"\r\n *   [shareButtons]=\"true\"\r\n *   [onShareEventClose]=\"closeShareModal\">\r\n * </app-share-event-modal>\r\n * ```\r\n * \r\n * @example\r\n * Custom Template Override:\r\n * ```html\r\n * <app-share-event-modal\r\n *   [isShareEventModalVisible]=\"showShareModal\"\r\n *   [customTemplate]=\"customShareTemplate\"\r\n *   [onShareEventClose]=\"closeShareModal\">\r\n * </app-share-event-modal>\r\n * \r\n * <ng-template #customShareTemplate let-roomName=\"roomName\" let-adminPasscode=\"adminPasscode\">\r\n *   <div class=\"custom-share-dialog\">\r\n *     <h3>Invite Participants</h3>\r\n *     <div class=\"share-item\">\r\n *       <label>Meeting ID:</label>\r\n *       <code>{{ roomName }}</code>\r\n *       <button (click)=\"copyToClipboard(roomName)\">Copy</button>\r\n *     </div>\r\n *     <div class=\"share-item\" *ngIf=\"adminPasscode\">\r\n *       <label>Host Code:</label>\r\n *       <code>{{ adminPasscode }}</code>\r\n *       <button (click)=\"copyToClipboard(adminPasscode)\">Copy</button>\r\n *     </div>\r\n *   </div>\r\n * </ng-template>\r\n * ```\r\n * \r\n * @selector app-share-event-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule, MeetingIdComponent, MeetingPasscodeComponent, ShareButtonsComponent\r\n * \r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input isShareEventModalVisible - Whether the modal is currently visible. Default: `false`\r\n * @input onShareEventClose - Callback function to close the modal. Default: `() => {}`\r\n * @input shareButtons - Whether to display social media share buttons. Default: `true`\r\n * @input position - Modal position on screen (e.g., 'topRight', 'center'). Default: `'topRight'`\r\n * @input roomName - Room/meeting ID to be shared. Default: `''`\r\n * @input adminPasscode - Admin/host passcode (shown only to hosts). Default: `undefined`\r\n * @input islevel - User level/role ('0' for host, '2' for participant). Default: `'2'`\r\n * @input eventType - Type of event ('chat', 'broadcast', 'webinar', 'conference'). Default: `'webinar'`\r\n * @input localLink - Custom server link for community edition deployments. Default: `undefined`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method handleClose - Closes the modal by invoking onShareEventClose callback\r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\r\n * @getter modalContainerStyle - Returns computed overlay styles\r\n * @getter modalContentStyle - Returns computed content styles\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\r\n\r\n  faTimes = faTimes;\r\n\r\n  handleClose() {\r\n    this.onShareEventClose();\r\n  }\r\n\r\n  getCombinedOverlayStyle() {\r\n    return {\r\n      ...this.modalContainerStyle,\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.modalContentStyle,\r\n      ...(this.contentStyle || {})\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.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","<!-- Custom template override -->\r\n<ng-container *ngIf=\"isShareEventModalVisible && customTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n    $implicit: {\r\n      isShareEventModalVisible,\r\n      backgroundColor,\r\n      position,\r\n      roomName,\r\n      adminPasscode,\r\n      islevel,\r\n      shareButtons,\r\n      eventType,\r\n      localLink,\r\n      handleClose: handleClose.bind(this),\r\n      onShareEventClose\r\n    }\r\n  }\"></ng-container>\r\n</ng-container>\r\n\r\n<!-- Default template -->\r\n<div *ngIf=\"isShareEventModalVisible && !customTemplate\"\r\n     [ngStyle]=\"getCombinedOverlayStyle()\">\r\n  <div [ngStyle]=\"getCombinedContentStyle()\">\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\nimport { ModernButtonComponent } from '../../../modern/primitives/modern-button.component';\r\nimport { ModernEntryShellComponent } from '../../../modern/primitives/modern-entry-shell.component';\r\nimport { ModernFieldComponent } from '../../../modern/primitives/modern-field.component';\r\nimport { ModernSurfaceComponent } from '../../../modern/primitives/modern-surface.component';\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: [\r\n      ZXingScannerModule,\r\n      CommonModule,\r\n      FontAwesomeModule,\r\n      ReactiveFormsModule,\r\n      ModernButtonComponent,\r\n      ModernEntryShellComponent,\r\n      ModernFieldComponent,\r\n      ModernSurfaceComponent,\r\n    ],\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.imgSrc = this.parameters.imgSrc || '';\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    this.error = '';\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","<app-modern-entry-shell>\r\n  <div msEntryTitle class=\"ms-modern-welcome__title-wrap\">\r\n    <img [src]=\"imgSrc || 'https://mediasfu.com/images/logo192.png'\" class=\"ms-modern-welcome__logo\" alt=\"MediaSFU\" />\r\n    <h1 class=\"ms-modern-welcome__title\">Welcome to MediaSFU</h1>\r\n  </div>\r\n\r\n  <p msEntryDescription class=\"ms-modern-welcome__description\">\r\n    Enter your event details to join, or scan a QR code to fill them automatically.\r\n  </p>\r\n\r\n  <form class=\"ms-modern-welcome__form\" [formGroup]=\"welcomeForm\" (ngSubmit)=\"handleConfirm()\">\r\n    <app-modern-field\r\n      label=\"Display Name\"\r\n      hint=\"Up to 12 alphanumeric characters.\"\r\n      placeholder=\"Event Display Name\"\r\n      formControlName=\"name\"\r\n    ></app-modern-field>\r\n\r\n    <app-modern-field\r\n      label=\"Event Token\"\r\n      hint=\"Paste the secret token exactly as provided.\"\r\n      placeholder=\"Event Token (Secret)\"\r\n      formControlName=\"secret\"\r\n    ></app-modern-field>\r\n\r\n    <app-modern-field\r\n      label=\"Event ID\"\r\n      hint=\"Use the event identifier associated with the room.\"\r\n      placeholder=\"Event ID\"\r\n      formControlName=\"eventID\"\r\n    ></app-modern-field>\r\n\r\n    <app-modern-field\r\n      label=\"Event Link\"\r\n      hint=\"Enter the meeting URL that issued your credentials.\"\r\n      placeholder=\"Event Link\"\r\n      type=\"url\"\r\n      autocomplete=\"url\"\r\n      formControlName=\"link\"\r\n    ></app-modern-field>\r\n\r\n    <p *ngIf=\"error\" class=\"ms-modern-welcome__error\">{{ error }}</p>\r\n\r\n    <app-modern-button type=\"submit\" size=\"lg\" [block]=\"true\">\r\n      Confirm\r\n    </app-modern-button>\r\n  </form>\r\n\r\n  <div class=\"ms-modern-welcome__divider\" aria-hidden=\"true\">\r\n    <span>or</span>\r\n  </div>\r\n\r\n  <app-modern-surface class=\"ms-modern-welcome__scanner-shell\" [interactive]=\"!isScannerVisible\">\r\n    <div *ngIf=\"isScannerVisible\" class=\"ms-modern-welcome__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\r\n    <div class=\"ms-modern-welcome__scan-button-container\" *ngIf=\"!isScannerVisible\">\r\n      <app-modern-button type=\"button\" variant=\"secondary\" [block]=\"true\" (click)=\"toggleScanner()\">\r\n        <fa-icon [icon]=\"faQrcode\"></fa-icon>\r\n        <span>Scan QR Code</span>\r\n      </app-modern-button>\r\n    </div>\r\n  </app-modern-surface>\r\n\r\n  <div msEntryFooter class=\"ms-modern-welcome__help\">\r\n    <p>Provide the event details manually or scan the QR code to autofill.</p>\r\n    <p>\r\n      Need credentials?\r\n      <a href=\"https://meeting.mediasfu.com/meeting/start/\" target=\"_blank\" rel=\"noreferrer\">\r\n        Get one from mediasfu.com\r\n      </a>\r\n    </p>\r\n  </div>\r\n</app-modern-entry-shell>\r\n","/**\r\n * Central Language Definitions for Translation Pipeline (Frontend)\r\n * \r\n * This module provides a single source of truth for all supported languages,\r\n * language codes, and voice configurations across the frontend application.\r\n * \r\n * Language Code Standards:\r\n * - ISO 639-1: 2-letter codes (e.g., 'en', 'es') - PRIMARY STANDARD\r\n * - ISO 639-2: 3-letter codes (e.g., 'eng', 'spa') - for extended languages\r\n * - BCP 47: Language tags with regions (e.g., 'en-US', 'pt-BR')\r\n */\r\n\r\nimport {\r\n  SUPPORTED_LANGUAGE_CODES as SHARED_SUPPORTED_LANGUAGE_CODES,\r\n  getLanguageMetadata as sharedGetLanguageMetadata,\r\n  getLanguageName as sharedGetLanguageName,\r\n  getLanguageNativeName as sharedGetLanguageNativeName,\r\n  getSupportedLanguages as sharedGetSupportedLanguages,\r\n  isLanguageSupported as sharedIsLanguageSupported,\r\n  normalizeLanguageCode as sharedNormalizeLanguageCode,\r\n} from 'mediasfu-shared';\r\n\r\n// ============================================================================\r\n// TYPES\r\n// ============================================================================\r\n\r\nexport type VoiceGender = 'male' | 'female' | 'neutral';\r\n\r\nexport type TTSSupport = 'excellent' | 'good' | 'moderate' | 'limited' | 'unknown' | 'n/a';\r\n\r\nexport type LanguageRegion = \r\n  | 'global' | 'europe' | 'asia' | 'south-asia' | 'mena' \r\n  | 'africa' | 'caucasus' | 'central-asia' | 'constructed' | 'special' | 'other';\r\n\r\nexport interface LanguageMetadata {\r\n  name: string;\r\n  nativeName: string;\r\n  region: LanguageRegion;\r\n  ttsSupport: TTSSupport;\r\n}\r\n\r\nexport interface LanguageOption {\r\n  code: string;\r\n  name: string;\r\n  nativeName: string;\r\n  ttsSupport: TTSSupport;\r\n  region: LanguageRegion;\r\n}\r\n\r\nexport interface VoiceOption {\r\n  id: string;\r\n  name: string;\r\n  gender: VoiceGender;\r\n  provider: string;\r\n  language: string;\r\n  style?: string;\r\n}\r\n\r\nexport interface VoiceSelectionPreference {\r\n  gender: VoiceGender;\r\n  voiceId?: string; // Specific voice ID (advanced mode)\r\n  style?: string;   // Voice style (e.g., 'cheerful', 'professional')\r\n}\r\n\r\n/**\r\n * Voice configuration for translation\r\n * Used in translation:subscribe and per-language voice settings\r\n */\r\nexport interface TranslationVoiceConfig {\r\n  // Basic Mode: Gender preference (simple selection)\r\n  voiceGender?: VoiceGender;\r\n  \r\n  // Advanced Mode: Explicit voice ID from provider\r\n  voiceId?: string;\r\n  \r\n  // Voice Cloning (future feature)\r\n  voiceClone?: {\r\n    provider: 'elevenlabs' | 'playht' | 'coqui';\r\n    voiceId: string;\r\n    stability?: number;  // 0-1, ElevenLabs\r\n    similarity?: number; // 0-1, ElevenLabs\r\n  };\r\n  \r\n  // Pipeline nicknames (for custom STT/LLM/TTS providers)\r\n  sttNickName?: string;\r\n  llmNickName?: string;\r\n  ttsNickName?: string;\r\n  \r\n  // Pipeline params (provider-specific settings)\r\n  sttParams?: Record<string, string | number | boolean>;\r\n  llmParams?: Record<string, string | number | boolean>;\r\n  ttsParams?: Record<string, string | number | boolean>;\r\n}\r\n\r\n/**\r\n * Language entry with voice config override\r\n */\r\nexport interface TranslationLanguageEntry {\r\n  code: string;        // ISO 639-1 code\r\n  nickname?: string;   // Display name override\r\n  voiceConfig?: TranslationVoiceConfig; // Per-language voice settings\r\n}\r\n\r\n// ============================================================================\r\n// LANGUAGE DEFINITIONS\r\n// ============================================================================\r\n\r\n/**\r\n * Complete list of supported language codes (ISO 639-1 primarily)\r\n */\r\nexport const SUPPORTED_LANGUAGE_CODES: string[] = [...SHARED_SUPPORTED_LANGUAGE_CODES];\r\n\r\n/**\r\n * Language metadata with display names and additional info\r\n */\r\nexport const LANGUAGE_METADATA: Record<string, LanguageMetadata> = {\r\n  // Major World Languages\r\n  'en': { name: 'English', nativeName: 'English', region: 'global', ttsSupport: 'excellent' },\r\n  'es': { name: 'Spanish', nativeName: 'Español', region: 'global', ttsSupport: 'excellent' },\r\n  'fr': { name: 'French', nativeName: 'Français', region: 'europe', ttsSupport: 'excellent' },\r\n  'de': { name: 'German', nativeName: 'Deutsch', region: 'europe', ttsSupport: 'excellent' },\r\n  'it': { name: 'Italian', nativeName: 'Italiano', region: 'europe', ttsSupport: 'excellent' },\r\n  'pt': { name: 'Portuguese', nativeName: 'Português', region: 'global', ttsSupport: 'excellent' },\r\n  'ru': { name: 'Russian', nativeName: 'Русский', region: 'europe', ttsSupport: 'excellent' },\r\n  'zh': { name: 'Chinese', nativeName: '中文', region: 'asia', ttsSupport: 'excellent' },\r\n  'ja': { name: 'Japanese', nativeName: '日本語', region: 'asia', ttsSupport: 'excellent' },\r\n  'ko': { name: 'Korean', nativeName: '한국어', region: 'asia', ttsSupport: 'excellent' },\r\n  'ar': { name: 'Arabic', nativeName: 'العربية', region: 'mena', ttsSupport: 'excellent' },\r\n\r\n  // South Asian Languages\r\n  'hi': { name: 'Hindi', nativeName: 'हिन्दी', region: 'south-asia', ttsSupport: 'good' },\r\n  'bn': { name: 'Bengali', nativeName: 'বাংলা', region: 'south-asia', ttsSupport: 'good' },\r\n  'pa': { name: 'Punjabi', nativeName: 'ਪੰਜਾਬੀ', region: 'south-asia', ttsSupport: 'moderate' },\r\n  'te': { name: 'Telugu', nativeName: 'తెలుగు', region: 'south-asia', ttsSupport: 'good' },\r\n  'mr': { name: 'Marathi', nativeName: 'मराठी', region: 'south-asia', ttsSupport: 'good' },\r\n  'ta': { name: 'Tamil', nativeName: 'தமிழ்', region: 'south-asia', ttsSupport: 'good' },\r\n  'ur': { name: 'Urdu', nativeName: 'اردو', region: 'south-asia', ttsSupport: 'good' },\r\n  'gu': { name: 'Gujarati', nativeName: 'ગુજરાતી', region: 'south-asia', ttsSupport: 'moderate' },\r\n  'kn': { name: 'Kannada', nativeName: 'ಕನ್ನಡ', region: 'south-asia', ttsSupport: 'moderate' },\r\n  'ml': { name: 'Malayalam', nativeName: 'മലയാളം', region: 'south-asia', ttsSupport: 'moderate' },\r\n  'ne': { name: 'Nepali', nativeName: 'नेपाली', region: 'south-asia', ttsSupport: 'limited' },\r\n  'si': { name: 'Sinhala', nativeName: 'සිංහල', region: 'south-asia', ttsSupport: 'limited' },\r\n\r\n  // European Languages\r\n  'nl': { name: 'Dutch', nativeName: 'Nederlands', region: 'europe', ttsSupport: 'excellent' },\r\n  'pl': { name: 'Polish', nativeName: 'Polski', region: 'europe', ttsSupport: 'excellent' },\r\n  'tr': { name: 'Turkish', nativeName: 'Türkçe', region: 'europe', ttsSupport: 'excellent' },\r\n  'cs': { name: 'Czech', nativeName: 'Čeština', region: 'europe', ttsSupport: 'good' },\r\n  'el': { name: 'Greek', nativeName: 'Ελληνικά', region: 'europe', ttsSupport: 'good' },\r\n  'hu': { name: 'Hungarian', nativeName: 'Magyar', region: 'europe', ttsSupport: 'good' },\r\n  'ro': { name: 'Romanian', nativeName: 'Română', region: 'europe', ttsSupport: 'good' },\r\n  'sv': { name: 'Swedish', nativeName: 'Svenska', region: 'europe', ttsSupport: 'excellent' },\r\n  'da': { name: 'Danish', nativeName: 'Dansk', region: 'europe', ttsSupport: 'good' },\r\n  'fi': { name: 'Finnish', nativeName: 'Suomi', region: 'europe', ttsSupport: 'good' },\r\n  'no': { name: 'Norwegian', nativeName: 'Norsk', region: 'europe', ttsSupport: 'good' },\r\n  'sk': { name: 'Slovak', nativeName: 'Slovenčina', region: 'europe', ttsSupport: 'moderate' },\r\n  'uk': { name: 'Ukrainian', nativeName: 'Українська', region: 'europe', ttsSupport: 'good' },\r\n  'bg': { name: 'Bulgarian', nativeName: 'Български', region: 'europe', ttsSupport: 'moderate' },\r\n  'hr': { name: 'Croatian', nativeName: 'Hrvatski', region: 'europe', ttsSupport: 'moderate' },\r\n  'et': { name: 'Estonian', nativeName: 'Eesti', region: 'europe', ttsSupport: 'moderate' },\r\n  'lt': { name: 'Lithuanian', nativeName: 'Lietuvių', region: 'europe', ttsSupport: 'moderate' },\r\n  'lv': { name: 'Latvian', nativeName: 'Latviešu', region: 'europe', ttsSupport: 'moderate' },\r\n  'sl': { name: 'Slovenian', nativeName: 'Slovenščina', region: 'europe', ttsSupport: 'moderate' },\r\n  'sr': { name: 'Serbian', nativeName: 'Српски', region: 'europe', ttsSupport: 'moderate' },\r\n  'bs': { name: 'Bosnian', nativeName: 'Bosanski', region: 'europe', ttsSupport: 'limited' },\r\n  'mk': { name: 'Macedonian', nativeName: 'Македонски', region: 'europe', ttsSupport: 'limited' },\r\n  'is': { name: 'Icelandic', nativeName: 'Íslenska', region: 'europe', ttsSupport: 'moderate' },\r\n  'ga': { name: 'Irish', nativeName: 'Gaeilge', region: 'europe', ttsSupport: 'limited' },\r\n  'cy': { name: 'Welsh', nativeName: 'Cymraeg', region: 'europe', ttsSupport: 'moderate' },\r\n  'mt': { name: 'Maltese', nativeName: 'Malti', region: 'europe', ttsSupport: 'limited' },\r\n  'lb': { name: 'Luxembourgish', nativeName: 'Lëtzebuergesch', region: 'europe', ttsSupport: 'limited' },\r\n  'sq': { name: 'Albanian', nativeName: 'Shqip', region: 'europe', ttsSupport: 'limited' },\r\n  'be': { name: 'Belarusian', nativeName: 'Беларуская', region: 'europe', ttsSupport: 'limited' },\r\n\r\n  // Middle Eastern Languages\r\n  'he': { name: 'Hebrew', nativeName: 'עברית', region: 'mena', ttsSupport: 'good' },\r\n  'fa': { name: 'Persian', nativeName: 'فارسی', region: 'mena', ttsSupport: 'moderate' },\r\n  'ps': { name: 'Pashto', nativeName: 'پښتو', region: 'mena', ttsSupport: 'limited' },\r\n  'ku': { name: 'Kurdish', nativeName: 'Kurdî', region: 'mena', ttsSupport: 'limited' },\r\n\r\n  // Southeast Asian Languages\r\n  'vi': { name: 'Vietnamese', nativeName: 'Tiếng Việt', region: 'asia', ttsSupport: 'good' },\r\n  'th': { name: 'Thai', nativeName: 'ไทย', region: 'asia', ttsSupport: 'good' },\r\n  'id': { name: 'Indonesian', nativeName: 'Bahasa Indonesia', region: 'asia', ttsSupport: 'good' },\r\n  'ms': { name: 'Malay', nativeName: 'Bahasa Melayu', region: 'asia', ttsSupport: 'good' },\r\n  'tl': { name: 'Filipino', nativeName: 'Tagalog', region: 'asia', ttsSupport: 'moderate' },\r\n  'km': { name: 'Khmer', nativeName: 'ខ្មែរ', region: 'asia', ttsSupport: 'limited' },\r\n  'lo': { name: 'Lao', nativeName: 'ລາວ', region: 'asia', ttsSupport: 'limited' },\r\n  'my': { name: 'Burmese', nativeName: 'မြန်မာစာ', region: 'asia', ttsSupport: 'limited' },\r\n\r\n  // African Languages\r\n  'sw': { name: 'Swahili', nativeName: 'Kiswahili', region: 'africa', ttsSupport: 'moderate' },\r\n  'yo': { name: 'Yoruba', nativeName: 'Yorùbá', region: 'africa', ttsSupport: 'limited' },\r\n  'ig': { name: 'Igbo', nativeName: 'Igbo', region: 'africa', ttsSupport: 'limited' },\r\n  'ha': { name: 'Hausa', nativeName: 'Hausa', region: 'africa', ttsSupport: 'limited' },\r\n  'zu': { name: 'Zulu', nativeName: 'isiZulu', region: 'africa', ttsSupport: 'moderate' },\r\n  'xh': { name: 'Xhosa', nativeName: 'isiXhosa', region: 'africa', ttsSupport: 'limited' },\r\n  'af': { name: 'Afrikaans', nativeName: 'Afrikaans', region: 'africa', ttsSupport: 'good' },\r\n  'st': { name: 'Sesotho', nativeName: 'Sesotho', region: 'africa', ttsSupport: 'limited' },\r\n  'tn': { name: 'Setswana', nativeName: 'Setswana', region: 'africa', ttsSupport: 'limited' },\r\n  'sn': { name: 'Shona', nativeName: 'chiShona', region: 'africa', ttsSupport: 'limited' },\r\n  'am': { name: 'Amharic', nativeName: 'አማርኛ', region: 'africa', ttsSupport: 'moderate' },\r\n  'so': { name: 'Somali', nativeName: 'Soomaali', region: 'africa', ttsSupport: 'limited' },\r\n  'rw': { name: 'Kinyarwanda', nativeName: 'Ikinyarwanda', region: 'africa', ttsSupport: 'limited' },\r\n  'mg': { name: 'Malagasy', nativeName: 'Malagasy', region: 'africa', ttsSupport: 'limited' },\r\n  'ny': { name: 'Chichewa', nativeName: 'Chichewa', region: 'africa', ttsSupport: 'limited' },\r\n  'ee': { name: 'Ewe', nativeName: 'Eʋegbe', region: 'africa', ttsSupport: 'limited' },\r\n  'tw': { name: 'Twi', nativeName: 'Twi', region: 'africa', ttsSupport: 'limited' },\r\n  'gaa': { name: 'Ga', nativeName: 'Gã', region: 'africa', ttsSupport: 'limited' },\r\n\r\n  // Caucasian Languages\r\n  'ka': { name: 'Georgian', nativeName: 'ქართული', region: 'caucasus', ttsSupport: 'moderate' },\r\n  'hy': { name: 'Armenian', nativeName: 'Հայերեն', region: 'caucasus', ttsSupport: 'moderate' },\r\n  'az': { name: 'Azerbaijani', nativeName: 'Azərbaycanca', region: 'caucasus', ttsSupport: 'moderate' },\r\n\r\n  // Regional European Languages\r\n  'eu': { name: 'Basque', nativeName: 'Euskara', region: 'europe', ttsSupport: 'limited' },\r\n  'gl': { name: 'Galician', nativeName: 'Galego', region: 'europe', ttsSupport: 'moderate' },\r\n  'ca': { name: 'Catalan', nativeName: 'Català', region: 'europe', ttsSupport: 'good' },\r\n  'la': { name: 'Latin', nativeName: 'Latina', region: 'europe', ttsSupport: 'limited' },\r\n  'eo': { name: 'Esperanto', nativeName: 'Esperanto', region: 'constructed', ttsSupport: 'limited' },\r\n\r\n  // Central Asian\r\n  'kk': { name: 'Kazakh', nativeName: 'Қазақша', region: 'central-asia', ttsSupport: 'moderate' },\r\n  'uz': { name: 'Uzbek', nativeName: \"O'zbek\", region: 'central-asia', ttsSupport: 'moderate' },\r\n  'tg': { name: 'Tajik', nativeName: 'Тоҷикӣ', region: 'central-asia', ttsSupport: 'limited' },\r\n  'ky': { name: 'Kyrgyz', nativeName: 'Кыргызча', region: 'central-asia', ttsSupport: 'limited' },\r\n  'tk': { name: 'Turkmen', nativeName: 'Türkmen', region: 'central-asia', ttsSupport: 'limited' },\r\n  'mn': { name: 'Mongolian', nativeName: 'Монгол', region: 'central-asia', ttsSupport: 'moderate' },\r\n\r\n  // Special\r\n  'auto': { name: 'Auto-detect', nativeName: 'Auto', region: 'special', ttsSupport: 'n/a' },\r\n};\r\n\r\n// ============================================================================\r\n// VOICE DEFINITIONS\r\n// ============================================================================\r\n\r\nexport const VOICE_GENDERS: Record<string, VoiceGender> = {\r\n  MALE: 'male',\r\n  FEMALE: 'female',\r\n  NEUTRAL: 'neutral',\r\n};\r\n\r\n/**\r\n * Default voice gender per language\r\n */\r\nexport const DEFAULT_VOICE_GENDERS: Record<string, VoiceGender> = {\r\n  'en': 'female',\r\n  'es': 'female',\r\n  'fr': 'female',\r\n  'de': 'male',\r\n  'it': 'female',\r\n  'pt': 'female',\r\n  'ru': 'female',\r\n  'zh': 'female',\r\n  'ja': 'female',\r\n  'ko': 'female',\r\n  'ar': 'male',\r\n};\r\n\r\n/**\r\n * Azure Neural Voice mappings by language and gender\r\n */\r\nexport const AZURE_NEURAL_VOICES: Record<string, { male: string[]; female: string[] }> = {\r\n  'en': {\r\n    male: ['en-US-GuyNeural', 'en-US-DavisNeural', 'en-GB-RyanNeural'],\r\n    female: ['en-US-JennyNeural', 'en-US-AriaNeural', 'en-GB-SoniaNeural'],\r\n  },\r\n  'es': {\r\n    male: ['es-ES-AlvaroNeural', 'es-MX-JorgeNeural'],\r\n    female: ['es-ES-ElviraNeural', 'es-MX-DaliaNeural'],\r\n  },\r\n  'fr': {\r\n    male: ['fr-FR-HenriNeural', 'fr-CA-AntoineNeural'],\r\n    female: ['fr-FR-DeniseNeural', 'fr-CA-SylvieNeural'],\r\n  },\r\n  'de': {\r\n    male: ['de-DE-ConradNeural', 'de-DE-KillianNeural'],\r\n    female: ['de-DE-KatjaNeural', 'de-DE-AmalaNeural'],\r\n  },\r\n  'it': {\r\n    male: ['it-IT-DiegoNeural', 'it-IT-GiuseppeNeural'],\r\n    female: ['it-IT-ElsaNeural', 'it-IT-IsabellaNeural'],\r\n  },\r\n  'pt': {\r\n    male: ['pt-BR-AntonioNeural', 'pt-PT-DuarteNeural'],\r\n    female: ['pt-BR-FranciscaNeural', 'pt-PT-RaquelNeural'],\r\n  },\r\n  'ru': {\r\n    male: ['ru-RU-DmitryNeural'],\r\n    female: ['ru-RU-SvetlanaNeural', 'ru-RU-DariyaNeural'],\r\n  },\r\n  'zh': {\r\n    male: ['zh-CN-YunxiNeural', 'zh-CN-YunjianNeural'],\r\n    female: ['zh-CN-XiaoxiaoNeural', 'zh-CN-XiaoyiNeural'],\r\n  },\r\n  'ja': {\r\n    male: ['ja-JP-KeitaNeural'],\r\n    female: ['ja-JP-NanamiNeural', 'ja-JP-AoiNeural'],\r\n  },\r\n  'ko': {\r\n    male: ['ko-KR-InJoonNeural'],\r\n    female: ['ko-KR-SunHiNeural', 'ko-KR-JiMinNeural'],\r\n  },\r\n  'ar': {\r\n    male: ['ar-SA-HamedNeural', 'ar-EG-ShakirNeural'],\r\n    female: ['ar-SA-ZariyahNeural', 'ar-EG-SalmaNeural'],\r\n  },\r\n  'hi': {\r\n    male: ['hi-IN-MadhurNeural'],\r\n    female: ['hi-IN-SwaraNeural'],\r\n  },\r\n};\r\n\r\n/**\r\n * Google Cloud TTS voice mappings\r\n */\r\nexport const GOOGLE_VOICES: Record<string, { male: string[]; female: string[] }> = {\r\n  'en': {\r\n    male: ['en-US-Neural2-D', 'en-US-Neural2-J', 'en-GB-Neural2-B'],\r\n    female: ['en-US-Neural2-C', 'en-US-Neural2-F', 'en-GB-Neural2-A'],\r\n  },\r\n  'es': {\r\n    male: ['es-ES-Neural2-B', 'es-US-Neural2-B'],\r\n    female: ['es-ES-Neural2-A', 'es-US-Neural2-A'],\r\n  },\r\n  'fr': {\r\n    male: ['fr-FR-Neural2-B', 'fr-FR-Neural2-D'],\r\n    female: ['fr-FR-Neural2-A', 'fr-FR-Neural2-C'],\r\n  },\r\n  'de': {\r\n    male: ['de-DE-Neural2-B', 'de-DE-Neural2-D'],\r\n    female: ['de-DE-Neural2-A', 'de-DE-Neural2-C'],\r\n  },\r\n  'ja': {\r\n    male: ['ja-JP-Neural2-C', 'ja-JP-Neural2-D'],\r\n    female: ['ja-JP-Neural2-B'],\r\n  },\r\n  'ko': {\r\n    male: ['ko-KR-Neural2-C'],\r\n    female: ['ko-KR-Neural2-A', 'ko-KR-Neural2-B'],\r\n  },\r\n  'zh': {\r\n    male: ['cmn-CN-Neural2-C', 'cmn-CN-Neural2-D'],\r\n    female: ['cmn-CN-Neural2-A', 'cmn-CN-Neural2-B'],\r\n  },\r\n};\r\n\r\n/**\r\n * AWS Polly voice mappings\r\n */\r\nexport const AWS_POLLY_VOICES: Record<string, { male: string[]; female: string[]; neural?: { male: string[]; female: string[] } }> = {\r\n  'en': {\r\n    male: ['Matthew', 'Joey', 'Stephen'],\r\n    female: ['Joanna', 'Salli', 'Kendra', 'Ivy'],\r\n    neural: { male: ['Matthew'], female: ['Joanna', 'Salli'] },\r\n  },\r\n  'es': {\r\n    male: ['Miguel', 'Enrique'],\r\n    female: ['Penelope', 'Lucia', 'Lupe'],\r\n    neural: { male: ['Sergio'], female: ['Lucia', 'Lupe'] },\r\n  },\r\n  'fr': {\r\n    male: ['Mathieu'],\r\n    female: ['Celine', 'Lea'],\r\n    neural: { male: [], female: ['Lea'] },\r\n  },\r\n  'de': {\r\n    male: ['Hans'],\r\n    female: ['Marlene', 'Vicki'],\r\n    neural: { male: ['Daniel'], female: ['Vicki'] },\r\n  },\r\n  'ja': {\r\n    male: ['Takumi'],\r\n    female: ['Mizuki'],\r\n    neural: { male: ['Takumi'], female: ['Kazuha'] },\r\n  },\r\n};\r\n\r\n/**\r\n * Deepgram Aura voice mappings (multilingual)\r\n */\r\nexport interface DeepgramVoice {\r\n  id: string;\r\n  name: string;\r\n}\r\n\r\nexport const DEEPGRAM_VOICES: { premade: { male: DeepgramVoice[]; female: DeepgramVoice[] } } = {\r\n  premade: {\r\n    male: [\r\n      { id: 'aura-orion-en', name: 'Orion' },\r\n      { id: 'aura-arcas-en', name: 'Arcas' },\r\n      { id: 'aura-perseus-en', name: 'Perseus' },\r\n      { id: 'aura-angus-en', name: 'Angus' },\r\n      { id: 'aura-orpheus-en', name: 'Orpheus' },\r\n      { id: 'aura-helios-en', name: 'Helios' },\r\n      { id: 'aura-zeus-en', name: 'Zeus' },\r\n    ],\r\n    female: [\r\n      { id: 'aura-asteria-en', name: 'Asteria' },\r\n      { id: 'aura-luna-en', name: 'Luna' },\r\n      { id: 'aura-stella-en', name: 'Stella' },\r\n      { id: 'aura-athena-en', name: 'Athena' },\r\n      { id: 'aura-hera-en', name: 'Hera' },\r\n    ],\r\n  },\r\n};\r\n\r\n/**\r\n * OpenAI TTS voice mappings (multilingual)\r\n */\r\nexport interface OpenAIVoice {\r\n  id: string;\r\n  name: string;\r\n}\r\n\r\nexport const OPENAI_VOICES: { premade: { male: OpenAIVoice[]; female: OpenAIVoice[] } } = {\r\n  premade: {\r\n    male: [\r\n      { id: 'onyx', name: 'Onyx' },\r\n      { id: 'echo', name: 'Echo' },\r\n      { id: 'fable', name: 'Fable' },\r\n    ],\r\n    female: [\r\n      { id: 'alloy', name: 'Alloy' },\r\n      { id: 'nova', name: 'Nova' },\r\n      { id: 'shimmer', name: 'Shimmer' },\r\n    ],\r\n  },\r\n};\r\n\r\n/**\r\n * ElevenLabs pre-made voices (multilingual)\r\n */\r\nexport interface ElevenLabsVoice {\r\n  id: string;\r\n  name: string;\r\n}\r\n\r\nexport const ELEVENLABS_VOICES: { premade: { male: ElevenLabsVoice[]; female: ElevenLabsVoice[] } } = {\r\n  premade: {\r\n    male: [\r\n      { id: '29vD33N1CtxCmqQRPOHJ', name: 'Drew' },\r\n      { id: 'TxGEqnHWrfWFTfGW9XjX', name: 'Josh' },\r\n      { id: 'VR6AewLTigWG4xSOukaG', name: 'Arnold' },\r\n      { id: 'pNInz6obpgDQGcFmaJgB', name: 'Adam' },\r\n    ],\r\n    female: [\r\n      { id: '21m00Tcm4TlvDq8ikWAM', name: 'Rachel' },\r\n      { id: 'EXAVITQu4vr4xnSDxMaL', name: 'Bella' },\r\n      { id: 'MF3mGyEYCl7XYWbV9V6O', name: 'Elli' },\r\n      { id: 'XB0fDUnXU5powFXDhCwa', name: 'Charlotte' },\r\n    ],\r\n  },\r\n};\r\n\r\n/**\r\n * Cartesia Sonic voice mappings\r\n */\r\nexport interface CartesiaVoice {\r\n  id: string;\r\n  name: string;\r\n}\r\n\r\nexport const CARTESIA_VOICES: { premade: { male: CartesiaVoice[]; female: CartesiaVoice[] } } = {\r\n  premade: {\r\n    male: [\r\n      { id: 'a0e99841-438c-4a64-b679-ae501e7d6091', name: 'Barbershop Man' },\r\n      { id: '79a125e8-cd45-4c13-8a67-188112f4dd22', name: 'British Customer Support' },\r\n    ],\r\n    female: [\r\n      { id: '248be419-c632-4f23-adf1-5324ed7dbf1d', name: 'British Lady' },\r\n      { id: 'c2ac25f9-ecc4-4f56-9095-651354df60c0', name: 'California Girl' },\r\n    ],\r\n  },\r\n};\r\n\r\n/**\r\n * Rime AI TTS voice mappings\r\n * Documentation: https://rime.ai/docs/voices\r\n */\r\nexport interface RimeVoice {\r\n  id: string;\r\n  name: string;\r\n}\r\n\r\nexport const RIME_VOICES: { premade: { male: RimeVoice[]; female: RimeVoice[] } } = {\r\n  premade: {\r\n    male: [\r\n      { id: 'mist', name: 'Mist' },\r\n      { id: 'grove', name: 'Grove' },\r\n      { id: 'bay', name: 'Bay' },\r\n      { id: 'cove', name: 'Cove' },\r\n    ],\r\n    female: [\r\n      { id: 'lagoon', name: 'Lagoon' },\r\n      { id: 'marsh', name: 'Marsh' },\r\n      { id: 'meadow', name: 'Meadow' },\r\n      { id: 'brook', name: 'Brook' },\r\n    ],\r\n  },\r\n};\r\n\r\n/**\r\n * Kokoro TTS voice mappings (via Hugging Face)\r\n * Open-source multilingual TTS\r\n */\r\nexport interface KokoroVoice {\r\n  id: string;\r\n  name: string;\r\n}\r\n\r\nexport const KOKORO_VOICES: { premade: { male: KokoroVoice[]; female: KokoroVoice[] } } = {\r\n  premade: {\r\n    male: [\r\n      { id: 'af_sky', name: 'Sky (American)' },\r\n      { id: 'am_adam', name: 'Adam (American)' },\r\n      { id: 'bm_george', name: 'George (British)' },\r\n    ],\r\n    female: [\r\n      { id: 'af_bella', name: 'Bella (American)' },\r\n      { id: 'af_nicole', name: 'Nicole (American)' },\r\n      { id: 'bf_emma', name: 'Emma (British)' },\r\n      { id: 'af_sarah', name: 'Sarah (American)' },\r\n    ],\r\n  },\r\n};\r\n\r\n/**\r\n * Google Gemini TTS voice mappings\r\n */\r\nexport interface GeminiVoice {\r\n  id: string;\r\n  name: string;\r\n}\r\n\r\nexport const GEMINI_VOICES: { premade: { male: GeminiVoice[]; female: GeminiVoice[] } } = {\r\n  premade: {\r\n    male: [\r\n      { id: 'Puck', name: 'Puck' },\r\n      { id: 'Charon', name: 'Charon' },\r\n      { id: 'Kore', name: 'Kore' },\r\n      { id: 'Fenrir', name: 'Fenrir' },\r\n    ],\r\n    female: [\r\n      { id: 'Aoede', name: 'Aoede' },\r\n      { id: 'Zephyr', name: 'Zephyr' },\r\n    ],\r\n  },\r\n};\r\n\r\n/**\r\n * Supported TTS providers\r\n */\r\nexport type TTSProvider = 'deepgram' | 'openai' | 'azure' | 'google' | 'aws' | 'elevenlabs' | 'playht' | 'cartesia' | 'rime' | 'kokoro' | 'gemini' | 'assemblyai';\r\n\r\nexport const TTS_PROVIDERS: Record<TTSProvider, { name: string; supportsSSML: boolean; multilingual?: boolean; isDefault?: boolean }> = {\r\n  deepgram: { name: 'Deepgram Aura', supportsSSML: false, isDefault: true },\r\n  openai: { name: 'OpenAI TTS', supportsSSML: false, multilingual: true },\r\n  azure: { name: 'Azure Neural TTS', supportsSSML: true },\r\n  google: { name: 'Google Cloud TTS', supportsSSML: true },\r\n  aws: { name: 'AWS Polly', supportsSSML: true },\r\n  elevenlabs: { name: 'ElevenLabs', supportsSSML: false, multilingual: true },\r\n  playht: { name: 'PlayHT', supportsSSML: false, multilingual: true },\r\n  cartesia: { name: 'Cartesia Sonic', supportsSSML: false, multilingual: true },\r\n  rime: { name: 'Rime AI', supportsSSML: false, multilingual: true },\r\n  kokoro: { name: 'Kokoro (HuggingFace)', supportsSSML: false, multilingual: true },\r\n  gemini: { name: 'Google Gemini TTS', supportsSSML: false, multilingual: true },\r\n  assemblyai: { name: 'AssemblyAI', supportsSSML: false },\r\n};\r\n\r\n// ============================================================================\r\n// HELPER FUNCTIONS\r\n// ============================================================================\r\n\r\n/**\r\n * Check if a language code is supported\r\n */\r\nexport function isLanguageSupported(code: string): boolean {\r\n  if (!code || typeof code !== 'string') return false;\r\n  return sharedIsLanguageSupported(code);\r\n}\r\n\r\n/**\r\n * Validate a language code format\r\n */\r\nexport function isValidLanguageCode(code: string): boolean {\r\n  if (!code || typeof code !== 'string') return false;\r\n  const trimmed = code.trim().toLowerCase();\r\n  return /^[a-z]{2,3}(-[a-z]{2,4})?$/i.test(trimmed);\r\n}\r\n\r\n/**\r\n * Normalize a language code to ISO 639-1 (2-letter) format\r\n */\r\nexport function normalizeLanguageCode(code: string): string {\r\n  return sharedNormalizeLanguageCode(code);\r\n}\r\n\r\n/**\r\n * Get language display name\r\n */\r\nexport function getLanguageName(code: string, displayLocale = 'en'): string {\r\n  if (!code) return 'Unknown';\r\n\r\n  return sharedGetLanguageName(code, displayLocale);\r\n}\r\n\r\n/**\r\n * Get native language name\r\n */\r\nexport function getLanguageNativeName(code: string): string {\r\n  if (!code) return 'Unknown';\r\n\r\n  return sharedGetLanguageNativeName(code);\r\n}\r\n\r\n/**\r\n * Quality levels for TTS support (ordered from best to worst)\r\n */\r\nexport const QUALITY_LEVELS: TTSSupport[] = ['excellent', 'good', 'moderate', 'limited', 'unknown', 'n/a'];\r\n\r\n/**\r\n * Minimum quality level for languages to be shown in UI\r\n * Languages with ttsSupport below this level will be filtered out\r\n * 'good' = only show 'excellent' and 'good' languages\r\n */\r\nexport const MIN_QUALITY_LEVEL: TTSSupport = 'good';\r\n\r\n/**\r\n * Check if a quality level meets the minimum threshold\r\n */\r\nexport function meetsQualityThreshold(quality: TTSSupport, minQuality: TTSSupport = MIN_QUALITY_LEVEL): boolean {\r\n  const qualityIndex = QUALITY_LEVELS.indexOf(quality || 'unknown');\r\n  const minIndex = QUALITY_LEVELS.indexOf(minQuality);\r\n  return qualityIndex !== -1 && qualityIndex <= minIndex;\r\n}\r\n\r\n/**\r\n * Get all supported languages as array of objects\r\n * @param displayLocale - Locale for display names\r\n * @param filterByQuality - Whether to filter by MIN_QUALITY_LEVEL (default: true)\r\n */\r\nexport function getSupportedLanguages(displayLocale = 'en', filterByQuality = true): LanguageOption[] {\r\n  return sharedGetSupportedLanguages(displayLocale)\r\n    .filter((language) => language.code !== 'auto')\r\n    .map((language) => {\r\n      const metadata = LANGUAGE_METADATA[language.code] || sharedGetLanguageMetadata(language.code);\r\n\r\n      return {\r\n        code: language.code,\r\n        name: language.name,\r\n        nativeName: metadata.nativeName || language.nativeName,\r\n        ttsSupport: metadata.ttsSupport || language.ttsSupport,\r\n        region: metadata.region || language.region,\r\n      };\r\n    })\r\n    .filter((language) => !filterByQuality || meetsQualityThreshold(language.ttsSupport))\r\n    .sort((left, right) => left.name.localeCompare(right.name));\r\n}\r\n\r\n/**\r\n * Get all languages without quality filtering (for admin/debug purposes)\r\n */\r\nexport function getAllLanguages(displayLocale = 'en'): LanguageOption[] {\r\n  return getSupportedLanguages(displayLocale, false);\r\n}\r\n\r\n/**\r\n * Get languages by region (quality-filtered)\r\n */\r\nexport function getLanguagesByRegion(region: LanguageRegion): LanguageOption[] {\r\n  return getSupportedLanguages().filter(lang => lang.region === region);\r\n}\r\n\r\n/**\r\n * Get languages with good TTS support\r\n * Note: getSupportedLanguages() already filters by quality, this is for explicit filtering\r\n */\r\nexport function getLanguagesWithGoodTTS(): LanguageOption[] {\r\n  // Since getSupportedLanguages() now filters by quality, this just returns the same\r\n  return getSupportedLanguages();\r\n}\r\n\r\n/**\r\n * Get default voice for a language and gender\r\n * Supports multiple TTS providers - defaults to Deepgram\r\n */\r\nexport function getDefaultVoice(\r\n  langCode: string, \r\n  gender: VoiceGender = 'female', \r\n  provider: TTSProvider | string = 'deepgram'\r\n): string | null {\r\n  const normalized = normalizeLanguageCode(langCode);\r\n  const providerLower = (provider || 'deepgram').toLowerCase();\r\n  \r\n  // Map 'neutral' to 'female' as fallback (most voice APIs don't have neutral)\r\n  const effectiveGender: 'male' | 'female' = gender === 'neutral' ? 'female' : gender;\r\n  \r\n  // Multilingual providers (not language-specific)\r\n  if (providerLower === 'deepgram') {\r\n    const voices = DEEPGRAM_VOICES.premade[effectiveGender];\r\n    return voices?.[0]?.id || null;\r\n  }\r\n  \r\n  if (providerLower === 'openai') {\r\n    const voices = OPENAI_VOICES.premade[effectiveGender];\r\n    return voices?.[0]?.id || null;\r\n  }\r\n  \r\n  if (providerLower === 'elevenlabs') {\r\n    const voices = ELEVENLABS_VOICES.premade[effectiveGender];\r\n    return voices?.[0]?.id || null;\r\n  }\r\n  \r\n  if (providerLower === 'cartesia') {\r\n    const voices = CARTESIA_VOICES.premade[effectiveGender];\r\n    return voices?.[0]?.id || null;\r\n  }\r\n  \r\n  if (providerLower === 'rime' || providerLower === 'rime-tts') {\r\n    const voices = RIME_VOICES.premade[effectiveGender];\r\n    return voices?.[0]?.id || null;\r\n  }\r\n  \r\n  if (providerLower === 'kokoro' || providerLower === 'kokoro-tts') {\r\n    const voices = KOKORO_VOICES.premade[effectiveGender];\r\n    return voices?.[0]?.id || null;\r\n  }\r\n  \r\n  if (providerLower === 'gemini' || providerLower === 'gemini-tts') {\r\n    const voices = GEMINI_VOICES.premade[effectiveGender];\r\n    return voices?.[0]?.id || null;\r\n  }\r\n  \r\n  // Language-specific voice maps\r\n  let voiceMap: Record<string, { male: string[]; female: string[] }>;\r\n  switch (providerLower) {\r\n    case 'azure':\r\n      voiceMap = AZURE_NEURAL_VOICES;\r\n      break;\r\n    case 'google':\r\n      voiceMap = GOOGLE_VOICES;\r\n      break;\r\n    case 'aws':\r\n    case 'polly':\r\n      voiceMap = AWS_POLLY_VOICES;\r\n      break;\r\n    default: {\r\n      // Default to Deepgram for unknown providers\r\n      const defaultVoices = DEEPGRAM_VOICES.premade[effectiveGender] || DEEPGRAM_VOICES.premade['female'];\r\n      return defaultVoices?.[0]?.id || null;\r\n    }\r\n  }\r\n  \r\n  const langVoices = voiceMap[normalized];\r\n  if (!langVoices) return null;\r\n  \r\n  const genderVoices = langVoices[effectiveGender] || langVoices['female'];\r\n  return genderVoices?.[0] || null;\r\n}\r\n\r\n/**\r\n * Get all available voices for a language\r\n * Supports multiple TTS providers - defaults to Deepgram\r\n */\r\nexport function getAvailableVoices(\r\n  langCode: string, \r\n  provider: TTSProvider | string = 'deepgram'\r\n): { male: (string | ElevenLabsVoice | DeepgramVoice | OpenAIVoice | CartesiaVoice | RimeVoice | KokoroVoice | GeminiVoice)[]; female: (string | ElevenLabsVoice | DeepgramVoice | OpenAIVoice | CartesiaVoice | RimeVoice | KokoroVoice | GeminiVoice)[] } {\r\n  const normalized = normalizeLanguageCode(langCode);\r\n  const providerLower = (provider || 'deepgram').toLowerCase();\r\n  \r\n  // Multilingual providers (not language-specific)\r\n  if (providerLower === 'deepgram') {\r\n    return DEEPGRAM_VOICES.premade;\r\n  }\r\n  \r\n  if (providerLower === 'openai') {\r\n    return OPENAI_VOICES.premade;\r\n  }\r\n  \r\n  if (providerLower === 'elevenlabs') {\r\n    return ELEVENLABS_VOICES.premade;\r\n  }\r\n  \r\n  if (providerLower === 'cartesia') {\r\n    return CARTESIA_VOICES.premade;\r\n  }\r\n  \r\n  if (providerLower === 'rime' || providerLower === 'rime-tts') {\r\n    return RIME_VOICES.premade;\r\n  }\r\n  \r\n  if (providerLower === 'kokoro' || providerLower === 'kokoro-tts') {\r\n    return KOKORO_VOICES.premade;\r\n  }\r\n  \r\n  if (providerLower === 'gemini' || providerLower === 'gemini-tts') {\r\n    return GEMINI_VOICES.premade;\r\n  }\r\n  \r\n  // Language-specific voice maps\r\n  let voiceMap: Record<string, { male: string[]; female: string[] }>;\r\n  switch (providerLower) {\r\n    case 'azure':\r\n      voiceMap = AZURE_NEURAL_VOICES;\r\n      break;\r\n    case 'google':\r\n      voiceMap = GOOGLE_VOICES;\r\n      break;\r\n    case 'aws':\r\n    case 'polly':\r\n      voiceMap = AWS_POLLY_VOICES;\r\n      break;\r\n    default:\r\n      return DEEPGRAM_VOICES.premade;\r\n  }\r\n  \r\n  return voiceMap[normalized] || { male: [], female: [] };\r\n}\r\n\r\n/**\r\n * Get the default voice gender for a language\r\n */\r\nexport function getDefaultVoiceGender(langCode: string): VoiceGender {\r\n  const normalized = normalizeLanguageCode(langCode);\r\n  return DEFAULT_VOICE_GENDERS[normalized] || 'female';\r\n}\r\n\r\n/**\r\n * Format voice option for display in dropdown\r\n */\r\nexport function formatVoiceOption(voiceId: string): VoiceOption {\r\n  // Parse Azure voice ID format: xx-XX-NameNeural\r\n  const parts = voiceId.split('-');\r\n  if (parts.length >= 3) {\r\n    const langCode = parts.slice(0, 2).join('-');\r\n    const name = parts.slice(2).join('-').replace('Neural', '');\r\n    const isMale = name.toLowerCase().includes('guy') || \r\n                   name.toLowerCase().includes('davis') ||\r\n                   name.toLowerCase().includes('ryan') ||\r\n                   name.toLowerCase().includes('conrad') ||\r\n                   name.toLowerCase().includes('diego') ||\r\n                   name.toLowerCase().includes('alvaro') ||\r\n                   name.toLowerCase().includes('jorge') ||\r\n                   name.toLowerCase().includes('henri') ||\r\n                   name.toLowerCase().includes('antonio');\r\n    \r\n    return {\r\n      id: voiceId,\r\n      name,\r\n      gender: isMale ? 'male' : 'female',\r\n      provider: 'azure',\r\n      language: langCode,\r\n    };\r\n  }\r\n  \r\n  return {\r\n    id: voiceId,\r\n    name: voiceId,\r\n    gender: 'female',\r\n    provider: 'unknown',\r\n    language: 'en',\r\n  };\r\n}\r\n\r\n// ============================================================================\r\n// STATIC VOICE DATA (used as fallback when socket fetch fails)\r\n// ============================================================================\r\n\r\n// Voice cache for static fallback only (socket responses are cached server-side)\r\nconst voiceCache: {\r\n  data: Record<string, { male: VoiceOption[]; female: VoiceOption[] }>;\r\n  timestamps: Record<string, number>;\r\n  TTL: number;\r\n} = {\r\n  data: {},\r\n  timestamps: {},\r\n  TTL: 3600000, // 1 hour cache\r\n};\r\n\r\n/**\r\n * Clear voice cache (clears local static cache)\r\n */\r\nexport function clearVoiceCache(provider: string | null = null): void {\r\n  if (provider) {\r\n    delete voiceCache.data[provider];\r\n    delete voiceCache.timestamps[provider];\r\n  } else {\r\n    voiceCache.data = {};\r\n    voiceCache.timestamps = {};\r\n  }\r\n}\r\n\r\n/**\r\n * Set cache TTL\r\n */\r\nexport function setVoiceCacheTTL(ttlMs: number): void {\r\n  voiceCache.TTL = ttlMs;\r\n}\r\n\r\n// ============================================================================\r\n// SOCKET-BASED VOICE FETCHING (The ONLY way to fetch voices from frontend)\r\n// ============================================================================\r\n\r\n/**\r\n * Result from socket voice fetch\r\n */\r\nexport interface SocketVoiceResponse {\r\n  provider: string;\r\n  language: string;\r\n  voices: { male: VoiceOption[]; female: VoiceOption[] };\r\n  providers?: Record<string, unknown>;\r\n  error?: string;\r\n}\r\n\r\n/**\r\n * Fetch voices via socket connection (keeps API keys server-side)\r\n * \r\n * This is the ONLY method for frontend voice fetching as it:\r\n * - Keeps TTS API keys on the server (security)\r\n * - Uses cached results from server\r\n * - Falls back to static lists if fetch fails\r\n * \r\n * The backend will use the room's/user's configured TTS credentials to fetch voices.\r\n * \r\n * @example\r\n * ```typescript\r\n * // In your React component\r\n * const voices = await fetchVoicesViaSocket(socket, 'elevenlabs', 'en');\r\n * console.log(voices.voices.male, voices.voices.female);\r\n * ```\r\n * \r\n * @param socket - Socket.io socket instance\r\n * @param provider - TTS provider name (e.g., 'deepgram', 'elevenlabs', 'openai')\r\n * @param language - Language code (optional, default 'en')\r\n * @returns Promise with voices\r\n */\r\nexport function fetchVoicesViaSocket(\r\n  socket: { emit: (event: string, data: unknown, callback?: (response: SocketVoiceResponse) => void) => void },\r\n  provider: TTSProvider | string = 'deepgram',\r\n  language: string = 'en'\r\n): Promise<SocketVoiceResponse> {\r\n  return new Promise((resolve) => {\r\n    const timeout = setTimeout(() => {\r\n      // On timeout, return static voices as fallback\r\n      const staticVoices = getAvailableVoices(language, provider);\r\n      resolve({\r\n        provider: provider.toString(),\r\n        language,\r\n        voices: {\r\n          male: Array.isArray(staticVoices.male) \r\n            ? staticVoices.male.map(v => typeof v === 'string' ? { id: v, name: v, gender: 'male' as VoiceGender, provider: provider.toString(), language } : v as VoiceOption)\r\n            : [],\r\n          female: Array.isArray(staticVoices.female)\r\n            ? staticVoices.female.map(v => typeof v === 'string' ? { id: v, name: v, gender: 'female' as VoiceGender, provider: provider.toString(), language } : v as VoiceOption)\r\n            : [],\r\n        },\r\n        error: 'Request timed out, using static voices',\r\n      });\r\n    }, 5000);\r\n\r\n    socket.emit('translation:getVoices', { provider, language }, (response: SocketVoiceResponse) => {\r\n      clearTimeout(timeout);\r\n      resolve(response);\r\n    });\r\n  });\r\n}\r\n\r\n/**\r\n * Fetch supported languages via socket\r\n * \r\n * @param socket - Socket.io socket instance  \r\n * @param displayLocale - Locale for display names (default 'en')\r\n * @returns Promise with language options\r\n */\r\nexport function fetchLanguagesViaSocket(\r\n  socket: { emit: (event: string, data: unknown, callback?: (response: { languages: LanguageOption[] }) => void) => void },\r\n  displayLocale: string = 'en'\r\n): Promise<LanguageOption[]> {\r\n  return new Promise((resolve) => {\r\n    const timeout = setTimeout(() => {\r\n      // On timeout, return static languages\r\n      resolve(getSupportedLanguages(displayLocale));\r\n    }, 5000);\r\n\r\n    socket.emit('translation:getLanguages', { displayLocale }, (response: { languages: LanguageOption[] }) => {\r\n      clearTimeout(timeout);\r\n      resolve(response.languages || getSupportedLanguages(displayLocale));\r\n    });\r\n  });\r\n}\r\n\r\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport {\n  faClosedCaptioning,\n  faHeadphones,\n  faLanguage,\n  faMicrophone,\n  faTimes,\n} from '@fortawesome/free-solid-svg-icons';\nimport { Socket } from 'socket.io-client';\n\nimport { Participant, ShowAlert } from '../../../@types/types';\nimport { getLanguageName, getSupportedLanguages } from '../../../methods/utils/translation-languages.util';\nimport { TranslationRoomConfig } from '../../../producers/socket-receive-methods/translation-receive-methods.service';\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../../../modern/utils/render-mode.utils';\n\nexport interface TranslationChannelAvailability {\n  languages: string[];\n  originalProducerId: string;\n}\n\nexport interface TranslationSettingsModalOptions {\n  isVisible: boolean;\n  onClose: () => void;\n  translationSupported: boolean;\n  translationConfig: TranslationRoomConfig | null;\n  member: string;\n  islevel: string;\n  audioProducerId: string | null;\n  participants: Participant[];\n  mySpokenLanguage: string;\n  mySpokenLanguageEnabled: boolean;\n  myDefaultOutputLanguage: string | null;\n  myDefaultListenLanguage: string | null;\n  listenPreferences: Map<string, string>;\n  availableTranslationChannels: Map<string, TranslationChannelAvailability>;\n  updateMySpokenLanguage: (lang: string) => void;\n  updateMySpokenLanguageEnabled: (enabled: boolean) => void;\n  updateMyDefaultOutputLanguage: (lang: string | null) => void;\n  updateMyDefaultListenLanguage: (lang: string | null) => void;\n  updateListenPreferences: (prefs: Map<string, string>) => void;\n  socket: Socket;\n  roomName: string;\n  showAlert?: ShowAlert;\n  showSubtitlesOnCards?: boolean;\n  updateShowSubtitlesOnCards?: (value: boolean) => void;\n  canUsePersonalTranslation?: boolean;\n  personalTranslationUsername?: string;\n}\n\n@Component({\n  selector: 'app-translation-settings-modal',\n  standalone: true,\n  imports: [CommonModule, FormsModule, FontAwesomeModule],\n  templateUrl: './translation-settings-modal.component.html',\n  styleUrls: ['./translation-settings-modal.component.css'],\n})\nexport class TranslationSettingsModal implements OnChanges {\n  @Input() isVisible = false;\n  @Input() onClose!: () => void;\n  @Input() translationSupported = false;\n  @Input() translationConfig: TranslationRoomConfig | null = null;\n  @Input() member = '';\n  @Input() islevel = '1';\n  @Input() audioProducerId: string | null = null;\n  @Input() participants: Participant[] = [];\n  @Input() mySpokenLanguage = 'en';\n  @Input() mySpokenLanguageEnabled = false;\n  @Input() myDefaultOutputLanguage: string | null = null;\n  @Input() myDefaultListenLanguage: string | null = null;\n  @Input() listenPreferences: Map<string, string> = new Map();\n  @Input() availableTranslationChannels: Map<string, TranslationChannelAvailability> = new Map();\n  @Input() updateMySpokenLanguage!: (lang: string) => void;\n  @Input() updateMySpokenLanguageEnabled!: (enabled: boolean) => void;\n  @Input() updateMyDefaultOutputLanguage!: (lang: string | null) => void;\n  @Input() updateMyDefaultListenLanguage!: (lang: string | null) => void;\n  @Input() updateListenPreferences!: (prefs: Map<string, string>) => void;\n  @Input() socket: Socket = {} as Socket;\n  @Input() roomName = '';\n  @Input() showAlert?: ShowAlert;\n  @Input() showSubtitlesOnCards = true;\n  @Input() updateShowSubtitlesOnCards?: (value: boolean) => void;\n  @Input() canUsePersonalTranslation = false;\n  @Input() personalTranslationUsername?: string;\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\n  @Input() isDarkMode = false;\n  @Input() renderMode: ModernRenderMode = 'modal';\n  @Input() showHeader = true;\n\n  readonly faTimes = faTimes;\n  readonly faClosedCaptioning = faClosedCaptioning;\n  readonly faHeadphones = faHeadphones;\n  readonly faLanguage = faLanguage;\n  readonly faMicrophone = faMicrophone;\n  readonly originalAudioValue = '__original_audio__';\n\n  activeTab: 'speaking' | 'listening' = 'speaking';\n  localSpokenLanguage = 'en';\n  localSpokenEnabled = false;\n  localDefaultOutputLanguage = this.originalAudioValue;\n  localDefaultListenLanguage = this.originalAudioValue;\n  localListenPreferences = new Map<string, string>();\n  perSpeakerMode = false;\n  localShowSubtitlesOnCards = true;\n  isSaving = false;\n\n  readonly allLanguageOptions = getSupportedLanguages('en', true).map((language) => ({\n    code: language.code,\n    name: language.name,\n  }));\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ((changes['isVisible'] && this.isVisibleState()) || changes['translationConfig']) {\n      this.syncLocalState();\n    }\n  }\n\n  isVisibleState(): boolean {\n    return this.isEmbedded() || this.isVisible;\n  }\n\n  isEmbedded(): boolean {\n    return isEmbeddedRenderMode(this.renderMode);\n  }\n\n  resolvedOverlayStyle(): Record<string, string | number> {\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\n      ? {\n          position: 'static',\n          inset: 'auto',\n          width: '100%',\n          height: '100%',\n          minHeight: 0,\n          background: 'transparent',\n          padding: 0,\n          zIndex: 'auto',\n        }\n      : {};\n\n    return { ...baseStyle, ...(this.overlayStyle as Record<string, string | number> | undefined) };\n  }\n\n  resolvedContentStyle(): Record<string, string | number> {\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\n      ? {\n          width: '100%',\n          maxWidth: 'none',\n          height: '100%',\n          maxHeight: 'none',\n          margin: 0,\n          borderRadius: 0,\n          boxShadow: 'none',\n          border: 'none',\n        }\n      : {};\n\n    return { ...baseStyle, ...(this.contentStyle as Record<string, string | number> | undefined) };\n  }\n\n  get translationAvailable(): boolean {\n    return this.translationSupported || this.canUsePersonalTranslation;\n  }\n\n  get spokenLanguageOptions(): Array<{ code: string; name: string }> {\n    return this.filterLanguageOptions('spoken');\n  }\n\n  get listenLanguageOptions(): Array<{ code: string; name: string }> {\n    return this.filterLanguageOptions('listen');\n  }\n\n  get listeningParticipants(): Participant[] {\n    return this.participants.filter((participant) => participant.name && participant.name !== this.member);\n  }\n\n  syncLocalState(): void {\n    this.activeTab = 'speaking';\n    this.localSpokenLanguage = this.mySpokenLanguage || 'en';\n    this.localSpokenEnabled = this.mySpokenLanguageEnabled;\n    this.localDefaultOutputLanguage = this.myDefaultOutputLanguage ?? this.originalAudioValue;\n    this.localDefaultListenLanguage = this.myDefaultListenLanguage ?? this.originalAudioValue;\n    this.localListenPreferences = new Map(this.listenPreferences);\n    this.perSpeakerMode = this.listenPreferences.size > 0 && !this.myDefaultListenLanguage;\n    this.localShowSubtitlesOnCards = this.showSubtitlesOnCards;\n  }\n\n  closeModal(): void {\n    this.onClose?.();\n  }\n\n  getLanguageLabel(code: string | null | undefined): string {\n    if (!code || code === this.originalAudioValue) {\n      return 'Original audio';\n    }\n\n    return getLanguageName(code);\n  }\n\n  getSpeakerName(participant: Participant): string {\n    return participant.name || participant.id || 'Unknown participant';\n  }\n\n  getSpeakerSelection(participant: Participant): string {\n    const speakerId = this.resolveSpeakerId(participant);\n    return this.localListenPreferences.get(speakerId) || this.originalAudioValue;\n  }\n\n  getSpeakerOptions(participant: Participant): Array<{ code: string; name: string }> {\n    const channel = this.getChannelAvailability(participant);\n    if (!channel) {\n      return [];\n    }\n\n    return channel.languages\n      .map((code) => ({ code, name: getLanguageName(code) }))\n      .sort((left, right) => left.name.localeCompare(right.name));\n  }\n\n  hasSpeakerOptions(participant: Participant): boolean {\n    return this.getSpeakerOptions(participant).length > 0;\n  }\n\n  updateSpeakerPreference(participant: Participant, language: string): void {\n    const speakerId = this.resolveSpeakerId(participant);\n    const next = new Map(this.localListenPreferences);\n\n    if (!speakerId) {\n      return;\n    }\n\n    if (!language || language === this.originalAudioValue) {\n      next.delete(speakerId);\n    } else {\n      next.set(speakerId, language);\n    }\n\n    this.localListenPreferences = next;\n  }\n\n  async saveSettings(): Promise<void> {\n    if (!this.socket || !this.roomName) {\n      return;\n    }\n\n    this.isSaving = true;\n\n    try {\n      const normalizedOutputLanguage = this.normalizeSelectableValue(this.localDefaultOutputLanguage);\n      const normalizedListenLanguage = this.normalizeSelectableValue(this.localDefaultListenLanguage);\n\n      const spokenChanged =\n        this.localSpokenLanguage !== this.mySpokenLanguage ||\n        this.localSpokenEnabled !== this.mySpokenLanguageEnabled ||\n        normalizedOutputLanguage !== this.myDefaultOutputLanguage;\n\n      if (spokenChanged) {\n        this.socket.emit('translation:setMyLanguage', {\n          roomName: this.roomName,\n          language: this.localSpokenLanguage,\n          defaultOutputLanguage: normalizedOutputLanguage,\n          enabled: this.localSpokenEnabled,\n          producerId: this.audioProducerId || undefined,\n        });\n\n        this.updateMySpokenLanguage(this.localSpokenLanguage);\n        this.updateMySpokenLanguageEnabled(this.localSpokenEnabled);\n        this.updateMyDefaultOutputLanguage(normalizedOutputLanguage);\n      }\n\n      if (!this.perSpeakerMode) {\n        for (const [speakerId, language] of this.listenPreferences.entries()) {\n          this.socket.emit('translation:unsubscribe', {\n            roomName: this.roomName,\n            speakerId,\n            language,\n          });\n        }\n\n        if (\n          normalizedListenLanguage !== this.myDefaultListenLanguage ||\n          this.listenPreferences.size > 0\n        ) {\n          this.socket.emit('translation:setDefaultListenLanguage', {\n            roomName: this.roomName,\n            language: normalizedListenLanguage,\n          });\n\n          this.updateMyDefaultListenLanguage(normalizedListenLanguage);\n          this.updateListenPreferences(new Map());\n        }\n      } else {\n        if (this.myDefaultListenLanguage !== null) {\n          this.socket.emit('translation:setDefaultListenLanguage', {\n            roomName: this.roomName,\n            language: null,\n          });\n        }\n\n        for (const [speakerId, language] of this.localListenPreferences.entries()) {\n          const previousLanguage = this.listenPreferences.get(speakerId);\n          if (previousLanguage !== language) {\n            if (previousLanguage) {\n              this.socket.emit('translation:unsubscribe', {\n                roomName: this.roomName,\n                speakerId,\n                language: previousLanguage,\n              });\n            }\n\n            this.socket.emit('translation:subscribe', {\n              roomName: this.roomName,\n              speakerId,\n              language,\n            });\n          }\n        }\n\n        for (const [speakerId, language] of this.listenPreferences.entries()) {\n          if (!this.localListenPreferences.has(speakerId)) {\n            this.socket.emit('translation:unsubscribe', {\n              roomName: this.roomName,\n              speakerId,\n              language,\n            });\n          }\n        }\n\n        this.updateMyDefaultListenLanguage(null);\n        this.updateListenPreferences(new Map(this.localListenPreferences));\n      }\n\n      if (this.updateShowSubtitlesOnCards && this.localShowSubtitlesOnCards !== this.showSubtitlesOnCards) {\n        this.updateShowSubtitlesOnCards(this.localShowSubtitlesOnCards);\n      }\n\n      this.showAlert?.({\n        message: 'Translation settings saved',\n        type: 'success',\n        duration: 2000,\n      });\n\n      this.closeModal();\n    } catch (error) {\n      console.error('Failed to save translation settings:', error);\n      this.showAlert?.({\n        message: 'Failed to save translation settings',\n        type: 'danger',\n        duration: 3000,\n      });\n    } finally {\n      this.isSaving = false;\n    }\n  }\n\n  private filterLanguageOptions(kind: 'spoken' | 'listen'): Array<{ code: string; name: string }> {\n    if (!this.translationConfig) {\n      return this.allLanguageOptions;\n    }\n\n    const mode = kind === 'spoken'\n      ? this.translationConfig.spokenLanguageMode\n      : this.translationConfig.listenLanguageMode;\n\n    const allowList = kind === 'spoken'\n      ? this.translationConfig.allowedSpokenLanguages?.map((language) => language.code)\n      : this.translationConfig.allowedListenLanguages?.map((language) => language.code);\n\n    const blockList = kind === 'spoken'\n      ? this.translationConfig.blockedSpokenLanguages\n      : this.translationConfig.blockedListenLanguages;\n\n    if (mode === 'allowlist' && allowList && allowList.length > 0) {\n      return this.allLanguageOptions.filter((language) => allowList.includes(language.code));\n    }\n\n    if (mode === 'blocklist' && blockList && blockList.length > 0) {\n      return this.allLanguageOptions.filter((language) => !blockList.includes(language.code));\n    }\n\n    return this.allLanguageOptions;\n  }\n\n  private normalizeSelectableValue(value: string | null): string | null {\n    if (!value || value === this.originalAudioValue) {\n      return null;\n    }\n\n    return value;\n  }\n\n  private getChannelAvailability(participant: Participant): TranslationChannelAvailability | undefined {\n    for (const key of this.getParticipantKeys(participant)) {\n      const channel = this.availableTranslationChannels.get(key);\n      if (channel) {\n        return channel;\n      }\n    }\n\n    return undefined;\n  }\n\n  private resolveSpeakerId(participant: Participant): string {\n    for (const key of this.getParticipantKeys(participant)) {\n      if (this.availableTranslationChannels.has(key) || this.localListenPreferences.has(key) || this.listenPreferences.has(key)) {\n        return key;\n      }\n    }\n\n    return this.getParticipantKeys(participant)[0] || '';\n  }\n\n  private getParticipantKeys(participant: Participant): string[] {\n    return Array.from(\n      new Set(\n        [participant.id, participant.name, participant.audioID]\n          .filter((value): value is string => typeof value === 'string' && value.trim().length > 0)\n      )\n    );\n  }\n}\n","<div\n  *ngIf=\"isVisibleState()\"\n  class=\"translation-modal-overlay\"\n  [class.translation-modal-overlay--embedded]=\"isEmbedded()\"\n  [ngStyle]=\"resolvedOverlayStyle()\"\n>\n  <div\n    class=\"translation-modal\"\n    [class.translation-modal--dark]=\"isDarkMode\"\n    [class.translation-modal--embedded]=\"isEmbedded()\"\n    [ngStyle]=\"resolvedContentStyle()\"\n  >\n    <div *ngIf=\"showHeader\" class=\"translation-modal__header\">\n      <div class=\"translation-modal__title-wrap\">\n        <span class=\"translation-modal__eyebrow\">Language routing</span>\n        <div class=\"translation-modal__title\">\n          <fa-icon [icon]=\"faLanguage\"></fa-icon>\n          <span>Translation Settings</span>\n        </div>\n        <p class=\"translation-modal__subtitle\">\n          Configure how your voice is translated out and how translated audio is routed back in.\n        </p>\n      </div>\n      <button type=\"button\" class=\"translation-modal__close\" (click)=\"closeModal()\" aria-label=\"Close translation settings\">\n        <fa-icon [icon]=\"faTimes\"></fa-icon>\n      </button>\n    </div>\n\n    <div class=\"translation-modal__body\" [class.translation-modal__body--embedded]=\"isEmbedded()\">\n      <div *ngIf=\"!translationAvailable\" class=\"translation-modal__notice translation-modal__notice--warning\">\n        Translation is not enabled for this room yet.\n      </div>\n\n      <div *ngIf=\"canUsePersonalTranslation\" class=\"translation-modal__notice\">\n        Personal translation is available{{ personalTranslationUsername ? ' for ' + personalTranslationUsername : '' }}.\n      </div>\n\n      <div class=\"translation-modal__tabs\" role=\"tablist\" aria-label=\"Translation settings tabs\">\n        <button\n          type=\"button\"\n          class=\"translation-modal__tab\"\n          [class.translation-modal__tab--active]=\"activeTab === 'speaking'\"\n          [attr.aria-selected]=\"activeTab === 'speaking'\"\n          (click)=\"activeTab = 'speaking'\"\n        >\n          <fa-icon [icon]=\"faMicrophone\"></fa-icon>\n          <span>My Voice Output</span>\n        </button>\n\n        <button\n          type=\"button\"\n          class=\"translation-modal__tab\"\n          [class.translation-modal__tab--active]=\"activeTab === 'listening'\"\n          [attr.aria-selected]=\"activeTab === 'listening'\"\n          (click)=\"activeTab = 'listening'\"\n        >\n          <fa-icon [icon]=\"faHeadphones\"></fa-icon>\n          <span>Listen To</span>\n        </button>\n      </div>\n\n      <div *ngIf=\"activeTab === 'speaking'\" class=\"translation-modal__section translation-modal__section--card\">\n        <div class=\"translation-modal__section-heading\">\n          <h3>My Voice Output</h3>\n          <p>\n            Choose your spoken language and decide whether your microphone should be translated for other participants.\n          </p>\n        </div>\n\n        <label class=\"translation-modal__toggle\">\n          <input type=\"checkbox\" [(ngModel)]=\"localSpokenEnabled\" [disabled]=\"!translationAvailable\" />\n          <span>Speak in a different language (translate my voice)</span>\n        </label>\n\n        <label class=\"translation-modal__field\">\n          <span>Spoken Language</span>\n          <select\n            [(ngModel)]=\"localSpokenLanguage\"\n            [disabled]=\"!translationAvailable || (translationConfig?.allowSpokenLanguageChange === false)\"\n          >\n            <option *ngFor=\"let language of spokenLanguageOptions\" [value]=\"language.code\">\n              {{ language.name }}\n            </option>\n          </select>\n        </label>\n\n        <label class=\"translation-modal__field\">\n          <span>Output Language</span>\n          <select [(ngModel)]=\"localDefaultOutputLanguage\" [disabled]=\"!translationAvailable\">\n            <option [value]=\"originalAudioValue\">Same as spoken language</option>\n            <option *ngFor=\"let language of listenLanguageOptions\" [value]=\"language.code\">\n              {{ language.name }}\n            </option>\n          </select>\n        </label>\n      </div>\n\n      <div *ngIf=\"activeTab === 'listening'\" class=\"translation-modal__section translation-modal__section--card\">\n        <div class=\"translation-modal__section-heading\">\n          <h3>Listen To</h3>\n          <p>\n            Pick a default translated feed for the room, or switch to per-speaker routing when individual channels are available.\n          </p>\n        </div>\n\n        <label class=\"translation-modal__toggle\">\n          <input type=\"checkbox\" [(ngModel)]=\"perSpeakerMode\" [disabled]=\"!translationAvailable || (translationConfig?.allowListenLanguageChange === false)\" />\n          <span>Use per-speaker translation preferences</span>\n        </label>\n\n        <label class=\"translation-modal__field\" *ngIf=\"!perSpeakerMode\">\n          <span>Default Listening Language</span>\n          <select\n            [(ngModel)]=\"localDefaultListenLanguage\"\n            [disabled]=\"!translationAvailable || (translationConfig?.allowListenLanguageChange === false)\"\n          >\n            <option [value]=\"originalAudioValue\">Original audio</option>\n            <option *ngFor=\"let language of listenLanguageOptions\" [value]=\"language.code\">\n              {{ language.name }}\n            </option>\n          </select>\n        </label>\n\n        <div *ngIf=\"perSpeakerMode\" class=\"translation-modal__speaker-list\">\n          <div *ngFor=\"let participant of listeningParticipants\" class=\"translation-modal__speaker-row\">\n            <div class=\"translation-modal__speaker-meta\">\n              <span class=\"translation-modal__speaker-name\">{{ getSpeakerName(participant) }}</span>\n              <span class=\"translation-modal__speaker-status\" *ngIf=\"!hasSpeakerOptions(participant)\">\n                No channels announced yet\n              </span>\n            </div>\n\n            <select\n              [ngModel]=\"getSpeakerSelection(participant)\"\n              (ngModelChange)=\"updateSpeakerPreference(participant, $event)\"\n              [disabled]=\"!hasSpeakerOptions(participant) || !translationAvailable\"\n            >\n              <option [value]=\"originalAudioValue\">Original audio</option>\n              <option *ngFor=\"let language of getSpeakerOptions(participant)\" [value]=\"language.code\">\n                {{ language.name }}\n              </option>\n            </select>\n          </div>\n        </div>\n      </div>\n\n      <div *ngIf=\"updateShowSubtitlesOnCards\" class=\"translation-modal__section translation-modal__section--card\">\n        <div class=\"translation-modal__section-heading\">\n          <h3>\n            <fa-icon [icon]=\"faClosedCaptioning\"></fa-icon>\n            <span>Show Subtitles on Video</span>\n          </h3>\n          <p>Display translated speech as subtitles on participant cards.</p>\n        </div>\n\n        <label class=\"translation-modal__toggle\">\n          <input type=\"checkbox\" [(ngModel)]=\"localShowSubtitlesOnCards\" />\n          <span>Show translated speech as live subtitles on participant cards</span>\n        </label>\n      </div>\n    </div>\n\n    <div class=\"translation-modal__footer\">\n      <button type=\"button\" class=\"translation-modal__secondary\" (click)=\"closeModal()\">Cancel</button>\n      <button\n        type=\"button\"\n        class=\"translation-modal__primary\"\n        (click)=\"saveSettings()\"\n        [disabled]=\"isSaving || (!translationAvailable && !updateShowSubtitlesOnCards)\"\n      >\n        {{ isSaving ? 'Saving...' : 'Apply Changes' }}\n      </button>\n    </div>\n  </div>\n</div>\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=\"participant-item\">\r\n  <div class=\"participant-item__identity\">\r\n    <span class=\"participant-item__avatar\">{{ participant.name.charAt(0).toUpperCase() }}</span>\r\n    <p class=\"participant-item__name\">\r\n      {{ participant.islevel === '2' ? participant.name + ' (host)' : participant.name }}\r\n    </p>\r\n  </div>\r\n  <div *ngIf=\"!isBroadcast\" class=\"participant-item__status\" [class.participant-item__status--muted]=\"participant.muted\">\r\n    <fa-icon [icon]=\"faDotCircle\"></fa-icon>\r\n  </div>\r\n  <div *ngIf=\"!isBroadcast\" class=\"participant-item__actions\">\r\n    <button type=\"button\" class=\"participant-item__button\" (click)=\"muteParticipant()\" aria-label=\"Toggle participant audio\">\r\n      <fa-icon [icon]=\"getIconName()\"></fa-icon>\r\n    </button>\r\n    <button type=\"button\" class=\"participant-item__button\" (click)=\"messageParticipant()\" aria-label=\"Message participant\">\r\n      <fa-icon [icon]=\"faComment\"></fa-icon>\r\n    </button>\r\n  </div>\r\n  <div class=\"participant-item__actions participant-item__actions--danger\">\r\n    <button type=\"button\" class=\"participant-item__button participant-item__button--danger\" (click)=\"removeParticipant()\" aria-label=\"Remove participant\">\r\n      <fa-icon [icon]=\"faTrash\"></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 class=\"participant-list\">\r\n<div *ngFor=\"let participant of participants; let i = index\" class=\"participant-list__row\">\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    [showAlert]=\"showAlert\"\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</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 { 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=\"participant-readonly-item\">\r\n  <div class=\"participant-readonly-item__identity\">\r\n    <span class=\"participant-readonly-item__avatar\">{{ participant.name.charAt(0).toUpperCase() }}</span>\r\n    <span class=\"participant-readonly-item__name\">\r\n      {{ getParticipantDisplayName() }}\r\n    </span>\r\n  </div>\r\n  <div class=\"participant-readonly-item__status\" [class.participant-readonly-item__status--muted]=\"participant.muted\">\r\n    <fa-icon [icon]=\"faCircle\"></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 class=\"participant-list-others\">\r\n<div *ngFor=\"let participant of participants; let i = index\" class=\"participant-list-others__row\">\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</div>\r\n</div>\r\n","import { Component, Input, OnInit, OnChanges, SimpleChanges, TemplateRef } 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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\r\n}\r\n\r\nexport type ParticipantsModalType = (options: ParticipantsModalOptions) => HTMLElement;\r\n\r\n/**\r\n * ParticipantsModal - Customizable participants list modal with interaction controls\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 * @description\r\n * A modal for displaying and managing meeting participants with customizable UI.\r\n * Supports three levels of customization:\r\n * 1. **Style Overrides**: Customize modal appearance with `overlayStyle` and `contentStyle`\r\n * 2. **Component Replacement**: Replace participant list rendering components\r\n * 3. **Complete Replacement**: Use `customTemplate` for full UI control\r\n *\r\n * Features:\r\n * - Filter participants by name\r\n * - Mute/unmute participants\r\n * - Send direct messages\r\n * - Remove participants (host/co-host only)\r\n * - Separate lists for active and waiting participants\r\n *\r\n * @example\r\n * **Basic Usage**\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 * @example\r\n * **With Style Customization**\r\n * ```html\r\n * <app-participants-modal\r\n *   [isParticipantsModalVisible]=\"true\"\r\n *   [overlayStyle]=\"{ backgroundColor: 'rgba(0, 0, 0, 0.9)' }\"\r\n *   [contentStyle]=\"{ borderRadius: '16px', maxHeight: '80vh' }\"\r\n *   [onParticipantsClose]=\"closeModalFunction\"\r\n *   [parameters]=\"participantsModalParameters\">\r\n * </app-participants-modal>\r\n * ```\r\n *\r\n * @example\r\n * **Custom Template Override**\r\n * ```html\r\n * <app-participants-modal\r\n *   [isParticipantsModalVisible]=\"true\"\r\n *   [customTemplate]=\"customParticipantsTemplate\"\r\n *   [parameters]=\"participantsModalParameters\"\r\n *   [onParticipantsClose]=\"closeModalFunction\">\r\n * </app-participants-modal>\r\n * \r\n * <ng-template #customParticipantsTemplate let-context>\r\n *   <div class=\"my-participants-modal\">\r\n *     <h2>{{ context.participantsCounter }} Participants</h2>\r\n *     <div *ngFor=\"let participant of context.parameters.participants\">\r\n *       {{ participant.name }}\r\n *     </div>\r\n *     <button (click)=\"context.onParticipantsClose()\">Close</button>\r\n *   </div>\r\n * </ng-template>\r\n * ```\r\n *\r\n * @input {boolean} isParticipantsModalVisible - Controls modal visibility\r\n * @input {() => void} onParticipantsClose - Callback when modal is closed\r\n * @input {(filter: string) => void} onParticipantsFilterChange - Callback when filter changes\r\n * @input {number} participantsCounter - Total number of participants\r\n * @input {ParticipantsModalParameters} parameters - Modal parameters including participants list\r\n * @input {string} position - Modal position (default: 'topRight')\r\n * @input {string} backgroundColor - Modal background color (default: '#83c0e9')\r\n * @input {Partial<CSSStyleDeclaration>} overlayStyle - Custom overlay styles\r\n * @input {Partial<CSSStyleDeclaration>} contentStyle - Custom content styles\r\n * @input {TemplateRef<any>} customTemplate - Complete template override\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\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  getCombinedOverlayStyle() {\r\n    return {\r\n      'background-color': 'rgba(0, 0, 0, 0.5)',\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      'background-color': 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      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<!-- Custom template override -->\r\n<ng-container *ngIf=\"isParticipantsModalVisible && customTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n    $implicit: {\r\n      isParticipantsModalVisible,\r\n      participantsCounter: participantsCounter_s,\r\n      position,\r\n      backgroundColor,\r\n      parameters,\r\n      onParticipantsClose,\r\n      onParticipantsFilterChange,\r\n      handleFilterChange: handleFilterChange.bind(this),\r\n      handleClose: handleClose.bind(this)\r\n    }\r\n  }\"></ng-container>\r\n</ng-container>\r\n\r\n<!-- Default template -->\r\n<div *ngIf=\"isParticipantsModalVisible && !customTemplate\"\r\n     class=\"modal-container\"\r\n     [ngStyle]=\"getCombinedOverlayStyle()\">\r\n  <div class=\"modal-content\"\r\n       [ngStyle]=\"getCombinedContentStyle()\">\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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: any;\r\n}\r\n\r\nexport type PollModalType = (options: PollModalOptions) => HTMLElement;\r\n\r\n/**\r\n * PollModal - Modal for creating, voting, and managing live polls\r\n * \r\n * @component\r\n * @description\r\n * Allows hosts to create/end polls and participants to vote on active polls.\r\n * Supports multiple-choice questions with real-time result updates.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with poll creation/voting forms\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Create polls with question and options (host only)\r\n * - Vote on active polls (all participants)\r\n * - View poll results in real-time\r\n * - End active polls (host only)\r\n * - Socket-based live updates\r\n * \r\n * @selector app-poll-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule, FormsModule\r\n * \r\n * @input isPollModalVisible - Whether the modal is currently visible. Default: `false`\r\n * @input onClose - Callback function to close the modal. Default: `() => {}`\r\n * @input position - Modal position on screen ('topRight', 'center', etc.). Default: `'topRight'`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input member - Name/ID of current participant. Default: `''`\r\n * @input islevel - User level/role ('0' for host, '2' for participant). Default: `'2'`\r\n * @input polls - Array of all poll objects. Default: `[]`\r\n * @input poll - Currently active poll object. Default: `null`\r\n * @input socket - Socket.io client instance for real-time communication. Default: `undefined`\r\n * @input roomName - Name of the room/session. Default: `''`\r\n * @input showAlert - Optional alert function for displaying messages. Default: `undefined`\r\n * @input updateIsPollModalVisible - Function to update modal visibility. Default: `() => {}`\r\n * @input handleCreatePoll - Function to create new poll. Default: `() => {}`\r\n * @input handleEndPoll - Function to end active poll. Default: `() => {}`\r\n * @input handleVotePoll - Function to submit vote. Default: `() => {}`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method ngOnInit - Initializes component state\r\n * @method ngOnChanges - Updates poll state when inputs change\r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\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  getCombinedOverlayStyle() {\r\n    return {\r\n      ...this.modalContainerStyle,\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.modalContentStyle,\r\n      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<ng-container *ngIf=\"isPollModalVisible && customTemplate\">\r\n  <ng-container\r\n    *ngTemplateOutlet=\"\r\n      customTemplate;\r\n      context: {\r\n        isPollModalVisible: isPollModalVisible,\r\n        onClose: onClose,\r\n        position: position,\r\n        backgroundColor: backgroundColor,\r\n        member: member,\r\n        islevel: islevel,\r\n        polls: polls,\r\n        poll: poll,\r\n        socket: socket,\r\n        roomName: roomName,\r\n        showAlert: showAlert,\r\n        updateIsPollModalVisible: updateIsPollModalVisible,\r\n        handleCreatePoll: handleCreatePoll,\r\n        handleEndPoll: handleEndPoll,\r\n        handleVotePoll: handleVotePoll\r\n      }\r\n    \"\r\n  >\r\n  </ng-container>\r\n</ng-container>\r\n\r\n<div *ngIf=\"isPollModalVisible && !customTemplate\" [ngStyle]=\"getCombinedOverlayStyle()\">\r\n  <div [ngStyle]=\"getCombinedContentStyle()\">\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","<section class=\"ms-recording-panel\">\r\n  <header class=\"ms-recording-panel__intro\">\r\n    <span class=\"ms-recording-panel__eyebrow\">Capture basics</span>\r\n    <h3 class=\"ms-recording-panel__title\">Standard settings</h3>\r\n    <p class=\"ms-recording-panel__copy\">\r\n      Choose the media mix and which parts of the room are included in the export.\r\n    </p>\r\n  </header>\r\n\r\n  <div class=\"ms-recording-panel__stack\">\r\n    <label class=\"ms-recording-panel__field\">\r\n      <span class=\"ms-recording-panel__label\">Media Options</span>\r\n      <span class=\"ms-recording-panel__hint\">Switch between a full video capture and an audio-only recording.</span>\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    </label>\r\n\r\n    <ng-container *ngIf=\"parameters.eventType !== 'broadcast'\">\r\n      <label class=\"ms-recording-panel__field\">\r\n        <span class=\"ms-recording-panel__label\">Specific Audios</span>\r\n        <span class=\"ms-recording-panel__hint\">Choose how much of the live audio mix should be captured.</span>\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      </label>\r\n\r\n      <label id=\"conditionalConference\" class=\"ms-recording-panel__field\">\r\n        <span class=\"ms-recording-panel__label\">Specific Videos</span>\r\n        <span class=\"ms-recording-panel__hint\">Keep the full room visible or focus on the main presentation surface.</span>\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      </label>\r\n    </ng-container>\r\n\r\n    <label id=\"addHLSPart\" class=\"ms-recording-panel__field\">\r\n      <span class=\"ms-recording-panel__label\">Adaptive Streaming</span>\r\n      <span class=\"ms-recording-panel__hint\">Enable HLS packaging when the recording needs playback-ready streaming output.</span>\r\n      <select [(ngModel)]=\"selectedRecordingAddHLS\" (change)=\"handleAddHLSChange($event)\">\r\n        <option [ngValue]=\"true\">Enabled</option>\r\n        <option [ngValue]=\"false\">Disabled</option>\r\n      </select>\r\n    </label>\r\n  </div>\r\n</section>\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","<section class=\"ms-recording-panel\">\r\n  <header class=\"ms-recording-panel__intro\">\r\n    <span class=\"ms-recording-panel__eyebrow\">Creative controls</span>\r\n    <h3 class=\"ms-recording-panel__title\">Advanced styling</h3>\r\n    <p class=\"ms-recording-panel__copy\">\r\n      Fine-tune layout emphasis, overlays, and branding details before recording starts.\r\n    </p>\r\n  </header>\r\n\r\n  <div class=\"ms-recording-panel__stack\">\r\n    <label class=\"ms-recording-panel__field\">\r\n      <span class=\"ms-recording-panel__label\">Video Type</span>\r\n      <span class=\"ms-recording-panel__hint\">Choose the visual framing for the exported recording.</span>\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    </label>\r\n\r\n    <label *ngIf=\"parameters.eventType !== 'broadcast'\" class=\"ms-recording-panel__field\">\r\n      <span class=\"ms-recording-panel__label\">Display Type</span>\r\n      <span class=\"ms-recording-panel__hint\">Control whether the capture prioritizes visible video, active media, or the entire room.</span>\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    </label>\r\n\r\n    <section class=\"ms-recording-panel__field ms-recording-panel__field--color\">\r\n      <span class=\"ms-recording-panel__label\">Background Color</span>\r\n      <span class=\"ms-recording-panel__hint\">Set the room backdrop used when the layout includes a generated background.</span>\r\n      <div class=\"ms-recording-panel__color-row\">\r\n        <div class=\"ms-recording-panel__color-preview\" [ngStyle]=\"{'background-color': parameters.recordingBackgroundColor}\">\r\n          <span>Background</span>\r\n          <strong>{{ parameters.recordingBackgroundColor }}</strong>\r\n        </div>\r\n        <label class=\"ms-recording-panel__color-input\">\r\n          <span>Pick color</span>\r\n          <input type=\"color\" [(ngModel)]=\"parameters.recordingBackgroundColor\" (change)=\"handleColorChange('backgroundColor', $event)\" />\r\n        </label>\r\n      </div>\r\n    </section>\r\n\r\n    <label class=\"ms-recording-panel__field\">\r\n      <span class=\"ms-recording-panel__label\">Custom Text Overlay</span>\r\n      <span class=\"ms-recording-panel__hint\">Enable a short label or title card directly in the recording output.</span>\r\n      <select [(ngModel)]=\"recordingText\" (change)=\"handleTextChange(recordingText)\">\r\n        <option [ngValue]=\"true\">Enabled</option>\r\n        <option [ngValue]=\"false\">Disabled</option>\r\n      </select>\r\n    </label>\r\n\r\n    <ng-container *ngIf=\"recordingText\">\r\n      <label class=\"ms-recording-panel__field\">\r\n        <span class=\"ms-recording-panel__label\">Custom Text</span>\r\n        <span class=\"ms-recording-panel__hint\">Use up to 40 letters or numbers for the overlay caption.</span>\r\n        <input type=\"text\" maxlength=\"40\" [(ngModel)]=\"customText\" (input)=\"onChangeTextHandler(customText)\" />\r\n      </label>\r\n\r\n      <label class=\"ms-recording-panel__field\">\r\n        <span class=\"ms-recording-panel__label\">Text Position</span>\r\n        <span class=\"ms-recording-panel__hint\">Place the overlay where it is least likely to cover active participants.</span>\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      </label>\r\n\r\n      <section class=\"ms-recording-panel__field ms-recording-panel__field--color\">\r\n        <span class=\"ms-recording-panel__label\">Text Color</span>\r\n        <span class=\"ms-recording-panel__hint\">Match the overlay to your room palette while keeping it readable.</span>\r\n        <div class=\"ms-recording-panel__color-row\">\r\n          <div class=\"ms-recording-panel__color-preview\" [ngStyle]=\"{'background-color': parameters.recordingCustomTextColor}\">\r\n            <span>Overlay text</span>\r\n            <strong>{{ parameters.recordingCustomTextColor }}</strong>\r\n          </div>\r\n          <label class=\"ms-recording-panel__color-input\">\r\n            <span>Pick color</span>\r\n            <input type=\"color\" [(ngModel)]=\"parameters.recordingCustomTextColor\" (change)=\"handleColorChange('customTextColor', $event)\" />\r\n          </label>\r\n        </div>\r\n      </section>\r\n    </ng-container>\r\n\r\n    <label class=\"ms-recording-panel__field\">\r\n      <span class=\"ms-recording-panel__label\">Name Tags</span>\r\n      <span class=\"ms-recording-panel__hint\">Show participant labels on recorded cards when audience context matters.</span>\r\n      <select [(ngModel)]=\"selectedRecordingNameTags\" (change)=\"parameters.updateRecordingNameTags(selectedRecordingNameTags)\">\r\n        <option [ngValue]=\"true\">Enabled</option>\r\n        <option [ngValue]=\"false\">Disabled</option>\r\n      </select>\r\n    </label>\r\n\r\n    <section class=\"ms-recording-panel__field ms-recording-panel__field--color\">\r\n      <span class=\"ms-recording-panel__label\">Name Tag Color</span>\r\n      <span class=\"ms-recording-panel__hint\">Adjust the label chip tint for better contrast against the room content.</span>\r\n      <div class=\"ms-recording-panel__color-row\">\r\n        <div class=\"ms-recording-panel__color-preview\" [ngStyle]=\"{'background-color': parameters.recordingNameTagsColor}\">\r\n          <span>Name tags</span>\r\n          <strong>{{ parameters.recordingNameTagsColor }}</strong>\r\n        </div>\r\n        <label class=\"ms-recording-panel__color-input\">\r\n          <span>Pick color</span>\r\n          <input type=\"color\" [(ngModel)]=\"parameters.recordingNameTagsColor\" (change)=\"handleColorChange('nameTagsColor', $event)\" />\r\n        </label>\r\n      </div>\r\n    </section>\r\n\r\n    <label class=\"ms-recording-panel__field\">\r\n      <span class=\"ms-recording-panel__label\">Orientation</span>\r\n      <span class=\"ms-recording-panel__hint\">Set the preferred framing direction for participant video in the export.</span>\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    </label>\r\n  </div>\r\n</section>\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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: any;\r\n}\r\n\r\nexport type RecordingModalType = (options: RecordingModalOptions) => HTMLElement;\r\n\r\ntype RecordingDisplayAdviceParameters = {\r\n  meetingDisplayType?: string;\r\n  breakOutRoomStarted?: boolean;\r\n  breakOutRoomEnded?: boolean;\r\n  recordingVideoParticipantsFullRoomSupport?: boolean;\r\n  recordingVideoOptions?: string;\r\n  recordingMediaOptions?: string;\r\n};\r\n\r\nconst getRecordingDisplayAdvice = (parameters?: RecordingDisplayAdviceParameters) => {\r\n  if (!parameters) {\r\n    return null;\r\n  }\r\n\r\n  const normalizedRecordingMediaOptions =\r\n    parameters.recordingMediaOptions === 'all' ? 'video' : parameters.recordingMediaOptions;\r\n\r\n  if (\r\n    !parameters.recordingVideoParticipantsFullRoomSupport &&\r\n    parameters.recordingVideoOptions === 'all' &&\r\n    normalizedRecordingMediaOptions === 'video' &&\r\n    parameters.meetingDisplayType === 'all' &&\r\n    !(parameters.breakOutRoomStarted && !parameters.breakOutRoomEnded)\r\n  ) {\r\n    return 'Meeting display is set to All. This recording setup may be blocked. Switch the meeting display to Media before confirming so only participants with active media are included.';\r\n  }\r\n\r\n  return null;\r\n};\r\n\r\n/**\r\n * RecordingModal - Modal for configuring and controlling session recording\r\n * \r\n * @component\r\n * @description\r\n * Provides recording configuration controls including record type (video/audio/both), format, text overlay, and HLS streaming.\r\n * Includes Standard (quick start) and Advanced (detailed settings) panels.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with Standard/Advanced panels\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Recording type selection (video, audio, all)\r\n * - Custom text overlay with positioning and color\r\n * - HLS streaming toggle\r\n * - Pause/resume recording\r\n * - Standard vs Advanced configuration modes\r\n * \r\n * @selector app-recording-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule, StandardPanelComponent, AdvancedPanelComponent\r\n * \r\n * @input isRecordingModalVisible - Whether the modal is currently visible. Default: `false`\r\n * @input onClose - Callback function to close the modal. Default: `() => {}`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input position - Modal position on screen ('topRight', 'bottomRight', etc.). Default: `'bottomRight'`\r\n * @input confirmRecording - Callback to confirm and start recording. Default: `() => {}`\r\n * @input startRecording - Callback to initiate recording with current settings. Default: `() => {}`\r\n * @input parameters - Object containing recording settings and update functions. Default: `{}`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method ngOnChanges - Updates recording parameters when modal visibility changes\r\n * @method confirm - Validates and confirms recording settings\r\n * @method start - Initiates recording with configured settings\r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\r\n * @method modalContainerStyle - Returns computed overlay styles\r\n * @method modalContentStyle - Returns computed content styles\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\r\n\r\n  faTimes = faTimes;\r\n  faCheck = faCheck;\r\n  faPlay = faPlay;\r\n\r\n  get recordingDisplayAdvice(): string | null {\r\n    return getRecordingDisplayAdvice(this.parameters);\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.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  getCombinedOverlayStyle() {\r\n    return {\r\n      ...this.modalContainerStyle,\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.modalContentStyle,\r\n      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<!-- Custom template override -->\r\n<ng-container *ngIf=\"isRecordingModalVisible && customTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"customTemplate; context: { $implicit: { isRecordingModalVisible, backgroundColor, parameters, onClose, confirm: confirm.bind(this), start: start.bind(this) } }\"></ng-container>\r\n</ng-container>\r\n\r\n<!-- Default template -->\r\n<div *ngIf=\"isRecordingModalVisible && !customTemplate\" [ngStyle]=\"getCombinedOverlayStyle()\">\r\n  <div [ngStyle]=\"getCombinedContentStyle()\">\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 *ngIf=\"recordingDisplayAdvice as advice\"\r\n          style=\"padding: 12px 14px; margin-top: 12px; border-radius: 10px; border: 1px solid rgba(245, 158, 11, 0.35); background: rgba(245, 158, 11, 0.18); color: black; font-size: 13px; font-weight: 600; line-height: 1.45;\">\r\n          {{ advice }}\r\n        </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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: any;\r\n}\r\n\r\nexport type RequestsModalType = (options: RenderRequestComponentOptions) => HTMLElement;\r\n\r\n/**\r\n * RequestsModal - Modal for managing participant requests (screen share, unmute, etc.)\r\n * \r\n * @component\r\n * @description\r\n * Displays and manages incoming requests from participants (e.g., screen share requests, unmute requests).\r\n * Allows host to approve or deny requests with filtering capabilities.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with request list and action handlers\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Request list display with participant names\r\n * - Approve/deny actions for each request\r\n * - Request filtering by name\r\n * - Real-time request counter badge\r\n * - Socket-based request handling\r\n * \r\n * @example\r\n * Basic Usage:\r\n * ```html\r\n * <app-requests-modal\r\n *   [isRequestsModalVisible]=\"showRequestsModal\"\r\n *   [requestCounter]=\"requestCount\"\r\n *   [requestList]=\"pendingRequests\"\r\n *   [roomName]=\"currentRoom\"\r\n *   [socket]=\"socketInstance\"\r\n *   [parameters]=\"requestParams\"\r\n *   [onRequestClose]=\"closeRequestsModal\"\r\n *   [onRequestFilterChange]=\"filterRequests\"\r\n *   [updateRequestList]=\"updateRequests\">\r\n * </app-requests-modal>\r\n * ```\r\n * \r\n * @example\r\n * Style Customization:\r\n * ```html\r\n * <app-requests-modal\r\n *   [isRequestsModalVisible]=\"showRequestsModal\"\r\n *   [requestCounter]=\"requestCount\"\r\n *   [requestList]=\"pendingRequests\"\r\n *   [roomName]=\"currentRoom\"\r\n *   [socket]=\"socketInstance\"\r\n *   [overlayStyle]=\"{\r\n *     backgroundColor: 'rgba(0, 0, 0, 0.85)'\r\n *   }\"\r\n *   [contentStyle]=\"{\r\n *     backgroundColor: '#2c3e50',\r\n *     borderRadius: '12px',\r\n *     maxHeight: '600px'\r\n *   }\"\r\n *   [backgroundColor]=\"'#34495e'\"\r\n *   [position]=\"'topRight'\"\r\n *   [onRequestClose]=\"closeRequestsModal\"\r\n *   [updateRequestList]=\"updateRequests\">\r\n * </app-requests-modal>\r\n * ```\r\n * \r\n * @example\r\n * Custom Template Override:\r\n * ```html\r\n * <app-requests-modal\r\n *   [isRequestsModalVisible]=\"showRequestsModal\"\r\n *   [customTemplate]=\"customRequestsTemplate\"\r\n *   [onRequestClose]=\"closeRequestsModal\">\r\n * </app-requests-modal>\r\n * \r\n * <ng-template #customRequestsTemplate let-requestList=\"requestList\" let-onApprove=\"onApprove\" let-onDeny=\"onDeny\">\r\n *   <div class=\"custom-requests\">\r\n *     <h3>Pending Requests ({{ requestList.length }})</h3>\r\n *     <div *ngFor=\"let request of requestList\" class=\"request-item\">\r\n *       <span>{{ request.name }} wants to {{ request.type }}</span>\r\n *       <button (click)=\"onApprove(request)\">✓</button>\r\n *       <button (click)=\"onDeny(request)\">✗</button>\r\n *     </div>\r\n *   </div>\r\n * </ng-template>\r\n * ```\r\n * \r\n * @selector app-requests-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule, RenderRequestComponent\r\n * \r\n * @input isRequestsModalVisible - Whether the modal is currently visible. Default: `false`\r\n * @input requestCounter - Number of pending requests (for badge display). Default: `0`\r\n * @input requestList - Array of request objects to display. Default: `[]`\r\n * @input roomName - Name of the room/session. Default: `''`\r\n * @input socket - Socket.io client instance for real-time communication. Default: `undefined`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input position - Modal position on screen ('topRight', 'topLeft', etc.). Default: `'topRight'`\r\n * @input parameters - Additional parameters including filtered request list. Default: `{}`\r\n * @input onRequestClose - Callback function to close the modal. Default: `() => {}`\r\n * @input onRequestFilterChange - Callback when filter input changes. Default: `() => {}`\r\n * @input onRequestItemPress - Callback when approve/deny action is pressed. Default: `respondToRequestsService.respondToRequests`\r\n * @input updateRequestList - Function to update the request list state. Default: `() => {}`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method ngOnInit - Initializes component and default styles\r\n * @method ngOnChanges - Updates request list when inputs change\r\n * @method updateRequests - Refreshes filtered request list from parameters\r\n * @method handleModalClose - Closes modal via onRequestClose callback\r\n * @method handleFilterChange - Filters request list based on search input\r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\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  getCombinedOverlayStyle() {\r\n    return {\r\n      'background-color': 'rgba(0, 0, 0, 0.5)',\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      'background-color': 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      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<!-- Custom template override -->\r\n<ng-container *ngIf=\"isRequestsModalVisible && customTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n    $implicit: {\r\n      isRequestsModalVisible,\r\n      requestCounter: requestCounter_s,\r\n      requestList: requestList_s,\r\n      position,\r\n      backgroundColor,\r\n      roomName,\r\n      socket,\r\n      onRequestClose,\r\n      onRequestFilterChange,\r\n      handleFilterChange: handleFilterChange.bind(this),\r\n      handleModalClose: handleModalClose.bind(this)\r\n    }\r\n  }\"></ng-container>\r\n</ng-container>\r\n\r\n<!-- Default template -->\r\n<div *ngIf=\"isRequestsModalVisible && !customTemplate\"\r\n     class=\"modal-container\"\r\n     [ngStyle]=\"getCombinedOverlayStyle()\">\r\n  <div class=\"modal-content\"\r\n       [ngStyle]=\"getCombinedContentStyle()\">\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;\" [style.display]=\"toolbarVisible ? 'flex' : '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 { types } from 'mediasoup-client';\r\ntype Producer = types.Producer;\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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: any;\r\n}\r\n\r\nexport type ScreenboardModalType = (options: ScreenboardModalOptions) => HTMLElement;\r\n\r\n/**\r\n * ScreenboardModal - Modal for annotating on shared screen in real-time\r\n * \r\n * @component\r\n * @description\r\n * Provides drawing/annotation tools for marking up a shared screen during screen sharing.\r\n * Displays canvas overlay for annotations that are visible to all participants.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with canvas annotation tools\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Canvas-based screen annotation\r\n * - Real-time annotation preview\r\n * - Drawing tools (pen, highlighter, shapes)\r\n * - Clear/undo annotations\r\n * - Screen transport management\r\n * - Annotation interval updates\r\n * \r\n * @selector app-screenboard-modal\r\n * @standalone true\r\n * @imports CommonModule, FormsModule, FontAwesomeModule\r\n * \r\n * @input parameters - Object containing screen stream, annotation settings, and MediaSoup transport methods. Default: `{}`\r\n * @input isVisible - Whether the modal is currently visible. Default: `false`\r\n * @input onClose - Callback function to close the modal. Default: `() => {}`\r\n * @input position - Modal position on screen ('topRight', 'fullscreen', etc.). Default: `'topRight'`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method ngOnInit - Initializes component (non-view dependent logic)\r\n * @method ngOnDestroy - Cleanup: stops annotations and removes intervals\r\n * @method ngOnChanges - Updates modal state when visibility changes\r\n * @method ngAfterViewInit - Sets up canvas and video elements after view init\r\n * @method showModal - Shows modal and initializes screen annotation\r\n * @method hideModal - Hides modal and cleans up annotation resources\r\n * @method annotationPreview - Handles real-time annotation preview rendering\r\n * @method handleScreenTransport - Manages screen share transport logic\r\n * @method stopAnnotation - Stops annotation intervals and resets canvas\r\n * @method stopAllTracks - Stops all media tracks in cloned screen stream\r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\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  getCombinedOverlayStyle() {\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 ? 'flex' : 'none',\r\n      justifyContent: 'center',\r\n      alignItems: 'center',\r\n      zIndex: 999,\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      backgroundColor: this.backgroundColor,\r\n      borderRadius: '10px',\r\n      padding: '10px',\r\n      maxWidth: '90%',\r\n      maxHeight: '85%',\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      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<ng-container *ngIf=\"isVisible && customTemplate\">\r\n  <ng-container\r\n    *ngTemplateOutlet=\"\r\n      customTemplate;\r\n      context: {\r\n        parameters: parameters,\r\n        isVisible: isVisible,\r\n        onClose: onClose,\r\n        position: position,\r\n        backgroundColor: backgroundColor\r\n      }\r\n    \"\r\n  >\r\n  </ng-container>\r\n</ng-container>\r\n\r\n<div *ngIf=\"isVisible && !customTemplate\" class=\"modal-container\" [ngStyle]=\"getCombinedOverlayStyle()\">\r\n  <div class=\"modal-content\" [ngStyle]=\"getCombinedContentStyle()\">\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  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: any;\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 * WaitingRoomModal - Modal for managing participants waiting to join the session\r\n * \r\n * @component\r\n * @description\r\n * Displays participants in the waiting room and allows host to admit or reject them.\r\n * Provides filtering and batch admission capabilities.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with waiting participant list and admit/reject actions\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Waiting participant list with names\r\n * - Admit/reject individual participants\r\n * - Participant filtering by name\r\n * - Real-time counter badge\r\n * - Socket-based admission handling\r\n * \r\n * @example\r\n * Basic Usage:\r\n * ```html\r\n * <app-waiting-room-modal\r\n *   [isWaitingModalVisible]=\"showWaitingRoom\"\r\n *   [waitingRoomCounter]=\"waitingCount\"\r\n *   [waitingRoomList]=\"waitingParticipants\"\r\n *   [roomName]=\"currentRoom\"\r\n *   [socket]=\"socketInstance\"\r\n *   [parameters]=\"waitingRoomParams\"\r\n *   [onWaitingRoomClose]=\"closeWaitingRoom\"\r\n *   [onWaitingRoomFilterChange]=\"filterWaiting\"\r\n *   [updateWaitingList]=\"updateWaiting\">\r\n * </app-waiting-room-modal>\r\n * ```\r\n * \r\n * @example\r\n * Style Customization:\r\n * ```html\r\n * <app-waiting-room-modal\r\n *   [isWaitingModalVisible]=\"showWaitingRoom\"\r\n *   [waitingRoomCounter]=\"waitingCount\"\r\n *   [waitingRoomList]=\"waitingParticipants\"\r\n *   [roomName]=\"currentRoom\"\r\n *   [socket]=\"socketInstance\"\r\n *   [overlayStyle]=\"{\r\n *     backgroundColor: 'rgba(0, 0, 0, 0.9)'\r\n *   }\"\r\n *   [contentStyle]=\"{\r\n *     backgroundColor: '#1e1e1e',\r\n *     borderRadius: '10px',\r\n *     border: '1px solid #4a90e2'\r\n *   }\"\r\n *   [backgroundColor]=\"'#2c3e50'\"\r\n *   [position]=\"'center'\"\r\n *   [onWaitingRoomClose]=\"closeWaitingRoom\"\r\n *   [updateWaitingList]=\"updateWaiting\">\r\n * </app-waiting-room-modal>\r\n * ```\r\n * \r\n * @example\r\n * Custom Template Override:\r\n * ```html\r\n * <app-waiting-room-modal\r\n *   [isWaitingModalVisible]=\"showWaitingRoom\"\r\n *   [customTemplate]=\"customWaitingTemplate\"\r\n *   [onWaitingRoomClose]=\"closeWaitingRoom\">\r\n * </app-waiting-room-modal>\r\n * \r\n * <ng-template #customWaitingTemplate let-waitingList=\"waitingRoomList\" let-onAdmit=\"onAdmit\" let-onReject=\"onReject\">\r\n *   <div class=\"custom-waiting-room\">\r\n *     <h3>Waiting to Join ({{ waitingList.length }})</h3>\r\n *     <div *ngFor=\"let participant of waitingList\" class=\"waiting-participant\">\r\n *       <img [src]=\"participant.avatar\" alt=\"avatar\">\r\n *       <span>{{ participant.name }}</span>\r\n *       <button (click)=\"onAdmit(participant)\" class=\"admit\">Admit</button>\r\n *       <button (click)=\"onReject(participant)\" class=\"reject\">Reject</button>\r\n *     </div>\r\n *   </div>\r\n * </ng-template>\r\n * ```\r\n * \r\n * @selector app-waiting-room-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule, FormsModule\r\n * \r\n * @input isWaitingModalVisible - Whether the modal is currently visible. Default: `false`\r\n * @input onWaitingRoomClose - Callback function to close the modal. Default: `() => {}`\r\n * @input waitingRoomCounter - Number of participants in waiting room (for badge). Default: `0`\r\n * @input onWaitingRoomFilterChange - Callback when filter input changes. Default: `() => {}`\r\n * @input waitingRoomList - Array of waiting participant objects. Default: `[]`\r\n * @input updateWaitingList - Function to update the waiting list state. Default: `() => {}`\r\n * @input roomName - Name of the room/session. Default: `''`\r\n * @input socket - Socket.io client instance for real-time communication. Default: `undefined`\r\n * @input position - Modal position on screen ('topRight', 'center', etc.). Default: `'topRight'`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input parameters - Additional parameters including filtered waiting list. Default: `{}`\r\n * @input onWaitingRoomItemPress - Callback when admit/reject action is pressed. Default: `respondToWaitingService.respondToWaiting`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method ngOnInit - Initializes component and default styles\r\n * @method ngOnChanges - Updates waiting list when inputs change\r\n * @method updateParameters - Refreshes filtered waiting list from parameters\r\n * @method handleModalClose - Closes modal via onWaitingRoomClose callback\r\n * @method handleFilterChange - Filters waiting list based on search input\r\n * @method handleItemPress - Handles admit/reject actions for waiting participants\r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\r\n * @getter modalContainerStyle - Returns computed overlay styles\r\n * @getter modalContentStyle - Returns computed content styles\r\n * @getter inputStyle - Returns filter input field styles\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() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\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  getCombinedOverlayStyle() {\r\n    return {\r\n      ...this.modalContainerStyle,\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.modalContentStyle,\r\n      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<!-- Custom template override -->\r\n<ng-container *ngIf=\"isWaitingModalVisible && customTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"customTemplate; context: {\r\n    $implicit: {\r\n      isWaitingModalVisible,\r\n      waitingRoomCounter: waitingRoomCounter_s,\r\n      waitingRoomList: waitingRoomList_s,\r\n      position,\r\n      backgroundColor,\r\n      roomName,\r\n      socket,\r\n      onWaitingRoomClose,\r\n      onWaitingRoomFilterChange,\r\n      handleFilterChange: handleFilterChange.bind(this),\r\n      handleItemPress: handleItemPress.bind(this),\r\n      handleModalClose: handleModalClose.bind(this)\r\n    }\r\n  }\"></ng-container>\r\n</ng-container>\r\n\r\n<!-- Default template -->\r\n<div *ngIf=\"isWaitingModalVisible && !customTemplate\"\r\n     [ngStyle]=\"getCombinedOverlayStyle()\">\r\n  <div [ngStyle]=\"getCombinedContentStyle()\">\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, faSearch, faSyncAlt, faPlay, faSave, faUser } 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\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../../../modern/utils/render-mode.utils';\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  whiteboardUsers: WhiteboardUser[];\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  isDarkMode?: boolean;\r\n  parameters: ConfigureWhiteboardModalParameters;\r\n  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: any;\r\n}\r\n\r\nexport type ConfigureWhiteboardModalType = (\r\n  options: ConfigureWhiteboardModalOptions,\r\n) => HTMLElement;\r\n\r\n/**\r\n * ConfigureWhiteboardModal - Modal for configuring collaborative whiteboard settings\r\n * \r\n * @component\r\n * @description\r\n * Allows host to configure whiteboard participants and settings before launching the whiteboard feature.\r\n * Manages who can annotate and presenter selection.\r\n * \r\n * Supports three levels of customization:\r\n * 1. **Basic Usage**: Use default modal UI with participant list and whiteboard controls\r\n * 2. **Style Customization**: Override modal appearance with overlayStyle and contentStyle\r\n * 3. **Full Override**: Provide a custom template via customTemplate for complete control\r\n * \r\n * Key Features:\r\n * - Select whiteboard participants\r\n * - Set whiteboard presenter\r\n * - Configure annotation permissions\r\n * - Start/launch whiteboard\r\n * - Canvas stream management\r\n * \r\n * @selector app-configure-whiteboard-modal\r\n * @standalone true\r\n * @imports CommonModule, FontAwesomeModule\r\n * \r\n * @input isConfigureWhiteboardModalVisible - Whether the modal is currently visible. Default: `false`\r\n * @input onClose - Callback function to close the modal. Default: `() => {}`\r\n * @input position - Modal position on screen ('topRight', 'center', etc.). Default: `'topRight'`\r\n * @input backgroundColor - Background color of the modal content. Default: `'#83c0e9'`\r\n * @input parameters - Object containing whiteboard settings, participants, and update functions. Default: `{}`\r\n * @input overlayStyle - Custom CSS styles for the modal overlay backdrop. Default: `undefined`\r\n * @input contentStyle - Custom CSS styles for the modal content container. Default: `undefined`\r\n * @input customTemplate - Custom TemplateRef to completely replace default modal template. Default: `undefined`\r\n * \r\n * @method getCombinedOverlayStyle - Merges default and custom overlay styles\r\n * @method getCombinedContentStyle - Merges default and custom content styles\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() isDarkMode?: boolean;\r\n  @Input() onConfigureWhiteboardClose!: () => void;\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: any;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n\r\n  faTimes = faTimes;\r\n  faCheck = faCheck;\r\n  faSearch = faSearch;\r\n  faSyncAlt = faSyncAlt;\r\n  faPlay = faPlay;\r\n  faSave = faSave;\r\n  faUser = faUser;\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  participantSearchTerm = '';\r\n\r\n  private socket: Socket = {} as Socket;\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\r\n\r\n  private resolveParameters(): ConfigureWhiteboardModalParameters {\r\n    if (this.parameters?.getUpdatedAllParams) {\r\n      return this.parameters.getUpdatedAllParams();\r\n    }\r\n\r\n    return this.parameters;\r\n  }\r\n\r\n  private applyResolvedParameters(params: ConfigureWhiteboardModalParameters) {\r\n    this.whiteboardLimit = params.itemPageLimit;\r\n    this.whiteboardStarted = params.whiteboardStarted;\r\n    this.whiteboardEnded = params.whiteboardEnded;\r\n\r\n    this.syncParticipantsCopy(\r\n      (params.participants ?? []).filter((participant: Participant) => participant.islevel != '2'),\r\n      params.whiteboardUsers ?? [],\r\n    );\r\n    this.checkCanStartWhiteboard();\r\n  }\r\n\r\n  private syncParticipantsCopy(participants: Participant[], whiteboardUsers: WhiteboardUser[] = []) {\r\n    const selectedUsers = new Map(\r\n      (whiteboardUsers ?? []).map((user) => [user.name, !!user.useBoard]),\r\n    );\r\n\r\n    this.participantsCopy = participants.map((participant) => ({\r\n      ...participant,\r\n      useBoard: selectedUsers.get(participant.name) ?? !!participant.useBoard,\r\n    }));\r\n    this.updateParticipantsLists();\r\n  }\r\n\r\n  isVisibleState(): boolean {\r\n    return this.isEmbedded() || this.isVisible;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  ngOnInit() {\r\n    if (this.parameters) {\r\n      this.applyResolvedParameters(this.resolveParameters());\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) || (changes['isVisible'] && this.isVisibleState())) {\r\n      this.applyResolvedParameters(this.resolveParameters());\r\n    }\r\n\r\n    if (changes['parameters'] && 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  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 && participant.islevel != '2',\r\n          );\r\n          this.syncParticipantsCopy(filteredParticipants, data.whiteboardUsers ?? []);\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 = !this.isEmbedded();\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    this.checkCanStartWhiteboard();\r\n  };\r\n\r\n  handleParticipantSearch(event: Event) {\r\n    const input = event.target as HTMLInputElement;\r\n    this.participantSearchTerm = input.value || '';\r\n  }\r\n\r\n  filteredParticipants() {\r\n    const searchTerm = this.participantSearchTerm.trim().toLowerCase();\r\n    if (!searchTerm) {\r\n      return this.participantsCopy;\r\n    }\r\n\r\n    return this.participantsCopy.filter((participant) =>\r\n      participant.name?.toLowerCase().includes(searchTerm),\r\n    );\r\n  }\r\n\r\n  isParticipantAssigned(participant: Participant): boolean {\r\n    return !!participant.useBoard;\r\n  }\r\n\r\n  whiteboardStatusCopy(): string {\r\n    return this.whiteboardStarted && !this.whiteboardEnded\r\n      ? '✓ Whiteboard is active'\r\n      : 'Select participants who can use the whiteboard';\r\n  }\r\n\r\n  whiteboardEmptyCopy(): string {\r\n    return this.participantSearchTerm.trim()\r\n      ? 'No participants match your search'\r\n      : 'No other participants available yet. The host can still start whiteboard alone.';\r\n  }\r\n\r\n  whiteboardAdditionalParticipantLimit(): number {\r\n    return Math.max(this.whiteboardLimit - 1, 0);\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            this.parameters.updateWhiteboardUsers(filteredWhiteboardUsers);\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 this.isEmbedded()\r\n      ? {\r\n          position: 'static',\r\n          top: 'auto',\r\n          left: 'auto',\r\n          width: '100%',\r\n          height: '100%',\r\n          minHeight: 0,\r\n          backgroundColor: 'transparent',\r\n          backdropFilter: 'none',\r\n          display: 'block',\r\n          padding: '0',\r\n          zIndex: 'auto',\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          top: 0,\r\n          left: 0,\r\n          width: '100%',\r\n          height: '100%',\r\n          backgroundColor: this.resolvedIsDarkMode ? 'rgba(2, 6, 23, 0.62)' : 'rgba(15, 23, 42, 0.18)',\r\n          backdropFilter: 'blur(10px)',\r\n          display: this.isVisible ? 'flex' : 'none',\r\n          alignItems: this.position.includes('top') ? 'flex-start' : this.position.includes('bottom') ? 'flex-end' : 'center',\r\n          justifyContent: this.position.includes('Left') ? 'flex-start' : this.position.includes('Right') ? 'flex-end' : 'center',\r\n          padding: '18px',\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    const isDarkMode = this.resolvedIsDarkMode;\r\n    return this.isEmbedded()\r\n      ? {\r\n          background: 'transparent',\r\n          borderRadius: '0',\r\n          border: 'none',\r\n          boxShadow: 'none',\r\n          padding: '0',\r\n          width: '100%',\r\n          maxWidth: 'none',\r\n          height: '100%',\r\n          maxHeight: 'none',\r\n          overflowY: 'auto',\r\n          overflowX: 'hidden',\r\n          color: isDarkMode ? '#e2e8f0' : '#0f172a',\r\n        }\r\n      : {\r\n          background: typeof this.isDarkMode === 'boolean'\r\n            ? isDarkMode\r\n              ? 'linear-gradient(135deg, rgba(15, 23, 42, 0.96) 0%, rgba(30, 41, 59, 0.94) 100%)'\r\n              : 'linear-gradient(135deg, rgba(255, 255, 255, 0.98) 0%, rgba(241, 245, 249, 0.96) 100%)'\r\n            : this.backgroundColor,\r\n          borderRadius: '24px',\r\n          border: isDarkMode\r\n            ? '1px solid rgba(148, 163, 184, 0.18)'\r\n            : '1px solid rgba(148, 163, 184, 0.22)',\r\n          boxShadow: '0 24px 48px rgba(15, 23, 42, 0.18)',\r\n          padding: '20px',\r\n          width: modalWidth + 'px',\r\n          maxWidth: modalWidth + 'px',\r\n          maxHeight: '84vh',\r\n          overflowY: 'auto',\r\n          overflowX: 'hidden',\r\n          color: isDarkMode ? '#e2e8f0' : '#0f172a',\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  getCombinedOverlayStyle() {\r\n    return {\r\n      ...this.modalContainerStyle(),\r\n      ...(this.overlayStyle || {})\r\n    };\r\n  }\r\n\r\n  getCombinedContentStyle() {\r\n    return {\r\n      ...this.modalContentStyle(),\r\n      ...(this.contentStyle || {})\r\n    };\r\n  }\r\n}\r\n","<ng-container *ngIf=\"isVisibleState() && customTemplate\">\r\n  <ng-container\r\n    *ngTemplateOutlet=\"\r\n      customTemplate;\r\n      context: {\r\n        isVisible: isVisibleState(),\r\n        parameters: parameters,\r\n        backgroundColor: backgroundColor,\r\n        position: position,\r\n        onConfigureWhiteboardClose: onConfigureWhiteboardClose\r\n      }\r\n    \"\r\n  >\r\n  </ng-container>\r\n</ng-container>\r\n\r\n<div\r\n  *ngIf=\"isVisibleState() && !customTemplate\"\r\n  class=\"whiteboard-modal__overlay\"\r\n  [class.whiteboard-modal__overlay--dark]=\"resolvedIsDarkMode\"\r\n  [class.whiteboard-modal__overlay--light]=\"!resolvedIsDarkMode\"\r\n  [ngStyle]=\"getCombinedOverlayStyle()\"\r\n>\r\n  <div class=\"whiteboard-modal__content\" [ngStyle]=\"getCombinedContentStyle()\">\r\n    <div class=\"whiteboard-modal__stack\">\r\n      <div *ngIf=\"showHeader\" class=\"whiteboard-modal__header\">\r\n        <h2 class=\"whiteboard-modal__title\">\r\n          Configure Whiteboard\r\n        </h2>\r\n        <button (click)=\"onConfigureWhiteboardClose()\" class=\"whiteboard-modal__close\">\r\n          <fa-icon [icon]=\"faTimes\" size=\"xl\" class=\"whiteboard-modal__close-icon\"></fa-icon>\r\n        </button>\r\n      </div>\r\n      <div class=\"modal-body whiteboard-modal__body\">\r\n        <ng-container *ngIf=\"isEmbedded(); else legacyWhiteboardLists\">\r\n          <div class=\"whiteboard-modal__embedded-tools\">\r\n            <div class=\"whiteboard-modal__limit-badge\">\r\n              <fa-icon [icon]=\"faUser\"></fa-icon>\r\n              <span>Limit {{ whiteboardLimit }}</span>\r\n            </div>\r\n            <p class=\"whiteboard-modal__limit-copy\">\r\n              Host can start alone. Add up to {{ whiteboardAdditionalParticipantLimit() }} other participants.\r\n            </p>\r\n          </div>\r\n\r\n          <label class=\"whiteboard-modal__search\">\r\n            <fa-icon [icon]=\"faSearch\" class=\"whiteboard-modal__search-icon\"></fa-icon>\r\n            <input\r\n              type=\"search\"\r\n              placeholder=\"Search participants...\"\r\n              [value]=\"participantSearchTerm\"\r\n              (input)=\"handleParticipantSearch($event)\"\r\n            />\r\n          </label>\r\n\r\n          <div class=\"whiteboard-modal__status\">\r\n            {{ whiteboardStatusCopy() }}\r\n          </div>\r\n\r\n          <div class=\"whiteboard-modal__participant-list\">\r\n            <button\r\n              *ngFor=\"let participant of filteredParticipants()\"\r\n              type=\"button\"\r\n              class=\"whiteboard-modal__participant-row\"\r\n              [class.whiteboard-modal__participant-row--selected]=\"isParticipantAssigned(participant)\"\r\n              (click)=\"toggleParticipant(participant, !isParticipantAssigned(participant))\"\r\n            >\r\n              <span class=\"whiteboard-modal__participant-copy\">\r\n                <fa-icon [icon]=\"faUser\"></fa-icon>\r\n                <span>{{ participant.name }}</span>\r\n              </span>\r\n              <span class=\"whiteboard-modal__participant-check\" [class.whiteboard-modal__participant-check--selected]=\"isParticipantAssigned(participant)\">\r\n                <fa-icon *ngIf=\"isParticipantAssigned(participant)\" [icon]=\"faCheck\"></fa-icon>\r\n              </span>\r\n            </button>\r\n\r\n            <div *ngIf=\"filteredParticipants().length === 0\" class=\"whiteboard-modal__empty-state\">\r\n              {{ whiteboardEmptyCopy() }}\r\n            </div>\r\n          </div>\r\n        </ng-container>\r\n\r\n        <ng-template #legacyWhiteboardLists>\r\n          <div class=\"row whiteboard-modal__columns\">\r\n            <div class=\"col-md-6 mb-3 whiteboard-modal__column\">\r\n              <h6>Assigned</h6>\r\n              <ul class=\"list-group whiteboard-modal__list\">\r\n                <ng-container *ngIf=\"assignedParticipants.length > 0; else noAssignedParticipants\">\r\n                  <li *ngFor=\"let participant of assignedParticipants\" class=\"list-group-item whiteboard-modal__item d-flex justify-content-between align-items-center mb-2 mr-2\">\r\n                    {{ participant.name }}\r\n                    <button class=\"btn whiteboard-modal__icon-button whiteboard-modal__icon-button--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 whiteboard-modal__item d-flex justify-content-between align-items-center\">\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 whiteboard-modal__column\">\r\n              <h6>Pending</h6>\r\n              <ul class=\"list-group whiteboard-modal__list\">\r\n                <ng-container *ngIf=\"unassignedParticipants.length > 0; else noPendingParticipants\">\r\n                  <li *ngFor=\"let participant of unassignedParticipants\" class=\"list-group-item whiteboard-modal__item d-flex justify-content-between align-items-center mb-2 mr-2\">\r\n                    {{ participant.name }}\r\n                    <button class=\"btn whiteboard-modal__icon-button whiteboard-modal__icon-button--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 whiteboard-modal__item d-flex justify-content-between align-items-center\">\r\n                    None\r\n                  </li>\r\n                </ng-template>\r\n              </ul>\r\n            </div>\r\n          </div>\r\n        </ng-template>\r\n      </div>\r\n      <div *ngIf=\"!isEmbedded()\" class=\"modal-footer whiteboard-modal__footer\">\r\n        <button type=\"button\" class=\"btn whiteboard-modal__button whiteboard-modal__button--info\" (click)=\"handleSaveWhiteboard()\">\r\n          Save <fa-icon [icon]=\"faSave\"></fa-icon>\r\n        </button>\r\n      </div>\r\n      <hr *ngIf=\"!isEmbedded()\" class=\"whiteboard-modal__divider\" />\r\n      <div *ngIf=\"isEmbedded() || !isEditing\" class=\"whiteboard-modal__actions\" [class.whiteboard-modal__actions--embedded]=\"isEmbedded()\">\r\n        <button *ngIf=\"canStartWhiteboard && whiteboardStarted && !whiteboardEnded\" class=\"btn whiteboard-modal__button whiteboard-modal__button--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 whiteboard-modal__button whiteboard-modal__button--success mb-2 mr-2\" (click)=\"handleStartWhiteboard()\">\r\n          {{ isEmbedded() ? 'Start Whiteboard' : 'Start' }} <fa-icon [icon]=\"faPlay\"></fa-icon>\r\n        </button>\r\n        <button *ngIf=\"whiteboardStarted && !whiteboardEnded\" class=\"btn whiteboard-modal__button whiteboard-modal__button--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    this.backgroundImage.onerror = () => {\r\n      this.drawShapes();\r\n    };\r\n\r\n    if (!this.parameters.useImageBackground || this.backgroundImage.complete) {\r\n      queueMicrotask(() => 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);\r\n    } else {\r\n      this.zoomCanvas(0.8, e);\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","/**\r\n * Custom component injection types for MediaSFU Angular\r\n * This file defines interfaces and types for custom component injection patterns\r\n * similar to React's component injection but adapted for Angular's architecture\r\n */\r\n\r\nimport { Type, Injector, TemplateRef } from '@angular/core';\r\n\r\n/**\r\n * Custom component structure for Angular component injection\r\n * Can be either a traditional component with injector or a function that returns an element\r\n */\r\nexport interface CustomComponent<T = any> {\r\n  component: Type<T>;\r\n  injector?: Injector;\r\n}\r\n\r\n/**\r\n * Function-based custom component\r\n */\r\nexport type CustomComponentFunction = () => HTMLElement;\r\n\r\n/**\r\n * Union type for all supported custom component types\r\n */\r\nexport type CustomComponentType<T = any> = CustomComponent<T> | CustomComponentFunction | HTMLElement;\r\n\r\n/**\r\n * Options for PrejoinPage custom component injection\r\n */\r\nexport interface PrejoinPageCustomOptions {\r\n  /** Custom welcome/prejoin page component */\r\n  customWelcomeComponent?: CustomComponentType;\r\n  /** Custom form component for room creation/joining */\r\n  customFormComponent?: CustomComponentType;\r\n  /** Custom branding/logo component */\r\n  customBrandingComponent?: CustomComponentType;\r\n}\r\n\r\n/**\r\n * Options for VideoCard custom component injection\r\n */\r\nexport interface VideoCardCustomOptions {\r\n  /** Custom info overlay component */\r\n  customInfoComponent?: CustomComponentType;\r\n  /** Custom controls overlay component */\r\n  customControlsComponent?: CustomComponentType;\r\n  /** Custom entire video card wrapper */\r\n  customVideoCardComponent?: CustomComponentType;\r\n}\r\n\r\n/**\r\n * Options for AudioCard custom component injection\r\n */\r\nexport interface AudioCardCustomOptions {\r\n  /** Custom info overlay component */\r\n  customInfoComponent?: CustomComponentType;\r\n  /** Custom controls overlay component */\r\n  customControlsComponent?: CustomComponentType;\r\n  /** Custom entire audio card wrapper */\r\n  customAudioCardComponent?: CustomComponentType;\r\n}\r\n\r\n/**\r\n * Options for MiniCard custom component injection\r\n */\r\nexport interface MiniCardCustomOptions {\r\n  /** Custom mini card component */\r\n  customMiniCardComponent?: CustomComponentType;\r\n  /** Custom overlay component */\r\n  customOverlayComponent?: CustomComponentType;\r\n}\r\n\r\n/**\r\n * Options for main UI component customization\r\n */\r\nexport interface MainUICustomOptions {\r\n  /** Custom main container component */\r\n  customMainContainerComponent?: CustomComponentType;\r\n  /** Custom main screen component */\r\n  customMainScreenComponent?: CustomComponentType;\r\n  /** Custom main aspect component */\r\n  customMainAspectComponent?: CustomComponentType;\r\n  /** Custom main grid component */\r\n  customMainGridComponent?: CustomComponentType;\r\n  /** Custom control buttons component */\r\n  customControlButtonsComponent?: CustomComponentType;\r\n}\r\n\r\n/**\r\n * Comprehensive custom component options for MediaSFU\r\n */\r\nexport interface MediaSFUCustomComponents {\r\n  prejoinPage?: PrejoinPageCustomOptions;\r\n  videoCard?: VideoCardCustomOptions;\r\n  audioCard?: AudioCardCustomOptions;\r\n  miniCard?: MiniCardCustomOptions;\r\n  mainUI?: MainUICustomOptions;\r\n}\r\n\r\n/**\r\n * Component injection configuration\r\n */\r\nexport interface ComponentInjectionConfig {\r\n  /** Enable/disable custom component injection */\r\n  enabled: boolean;\r\n  /** Override default components with custom ones */\r\n  overrideDefaults: boolean;\r\n  /** Fallback to default if custom component fails */\r\n  fallbackToDefault: boolean;\r\n}\r\n\r\n/**\r\n * Parameters passed to custom components\r\n */\r\nexport interface CustomComponentParameters {\r\n  /** Component-specific parameters */\r\n  [key: string]: any;\r\n}\r\n\r\n/**\r\n * Custom component context for dependency injection\r\n */\r\nexport interface CustomComponentContext {\r\n  /** Component parameters */\r\n  parameters: CustomComponentParameters;\r\n  /** Injector instance for dependency injection */\r\n  injector?: Injector;\r\n  /** Component configuration */\r\n  config?: ComponentInjectionConfig;\r\n}\r\n\r\n/**\r\n * Angular equivalent of React CustomComponentType for full UI replacement\r\n * Component that receives all MediaSFU parameters and replaces the entire interface\r\n */\r\nexport type CustomFullUIComponentType = Type<any> | TemplateRef<any>;\r\n\r\n/**\r\n * Parameters passed to custom full UI components\r\n */\r\nexport interface CustomFullUIParameters {\r\n  /** All MediaSFU parameters and functions */\r\n  [key: string]: any;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { Socket } from 'socket.io-client';\nimport { Participant, ShowAlert } from '../../@types/types';\nimport { addPanelist as sharedAddPanelist } from 'mediasfu-shared';\nimport type { AddPanelistOptions as SharedAddPanelistOptions } from 'mediasfu-shared';\n\nexport interface AddPanelistOptions {\n  socket: Socket;\n  participant: Participant;\n  currentPanelists: Participant[];\n  maxPanelists: number;\n  roomName: string;\n  member: string;\n  islevel: string;\n  showAlert?: ShowAlert;\n}\n\nexport type AddPanelistType = (options: AddPanelistOptions) => Promise<boolean>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AddPanelist {\n  async addPanelist(options: AddPanelistOptions): Promise<boolean> {\n    return sharedAddPanelist(options as unknown as SharedAddPanelistOptions);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Socket } from 'socket.io-client';\nimport { Participant, ShowAlert } from '../../@types/types';\nimport { removePanelist as sharedRemovePanelist } from 'mediasfu-shared';\nimport type { RemovePanelistOptions as SharedRemovePanelistOptions } from 'mediasfu-shared';\n\nexport interface RemovePanelistOptions {\n  socket: Socket;\n  participant: Participant;\n  roomName: string;\n  member: string;\n  islevel: string;\n  showAlert?: ShowAlert;\n}\n\nexport type RemovePanelistType = (options: RemovePanelistOptions) => Promise<void>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class RemovePanelist {\n  async removePanelist(options: RemovePanelistOptions): Promise<void> {\n    await sharedRemovePanelist(options as unknown as SharedRemovePanelistOptions);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Socket } from 'socket.io-client';\nimport { ShowAlert } from '../../@types/types';\nimport { focusPanelists as sharedFocusPanelists } from 'mediasfu-shared';\nimport type { FocusPanelistsOptions as SharedFocusPanelistsOptions } from 'mediasfu-shared';\n\nexport interface FocusPanelistsOptions {\n  socket: Socket;\n  roomName: string;\n  member: string;\n  islevel: string;\n  focusEnabled: boolean;\n  muteOthersMic?: boolean;\n  muteOthersCamera?: boolean;\n  showAlert?: ShowAlert;\n}\n\nexport type FocusPanelistsType = (options: FocusPanelistsOptions) => Promise<void>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class FocusPanelists {\n  async focusPanelists(options: FocusPanelistsOptions): Promise<void> {\n    await sharedFocusPanelists(options as unknown as SharedFocusPanelistsOptions);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Socket } from 'socket.io-client';\nimport { Participant, ShowAlert } from '../../@types/types';\nimport { updateParticipantPermission as sharedUpdateParticipantPermission } from 'mediasfu-shared';\nimport type { UpdateParticipantPermissionOptions as SharedUpdateParticipantPermissionOptions } from 'mediasfu-shared';\n\nexport type PermissionLevel = '0' | '1' | '2';\n\nexport interface UpdateParticipantPermissionOptions {\n  socket: Socket;\n  participant: Participant;\n  newLevel: PermissionLevel;\n  member: string;\n  islevel: string;\n  roomName: string;\n  showAlert?: ShowAlert;\n}\n\nexport type UpdateParticipantPermissionType = (options: UpdateParticipantPermissionOptions) => Promise<void>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class UpdateParticipantPermission {\n  async updateParticipantPermission(options: UpdateParticipantPermissionOptions): Promise<void> {\n    await sharedUpdateParticipantPermission(\n      options as unknown as SharedUpdateParticipantPermissionOptions,\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Socket } from 'socket.io-client';\nimport { Participant, ShowAlert } from '../../@types/types';\nimport { PermissionLevel } from './update-participant-permission.service';\nimport { bulkUpdateParticipantPermissions as sharedBulkUpdateParticipantPermissions } from 'mediasfu-shared';\nimport type { BulkUpdateParticipantPermissionsOptions as SharedBulkUpdateParticipantPermissionsOptions } from 'mediasfu-shared';\n\nexport interface BulkUpdateParticipantPermissionsOptions {\n  socket: Socket;\n  participants: Participant[];\n  newLevel: PermissionLevel;\n  member: string;\n  islevel: string;\n  roomName: string;\n  showAlert?: ShowAlert;\n  maxBatchSize?: number;\n}\n\nexport type BulkUpdateParticipantPermissionsType = (options: BulkUpdateParticipantPermissionsOptions) => Promise<void>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class BulkUpdateParticipantPermissions {\n  async bulkUpdateParticipantPermissions(options: BulkUpdateParticipantPermissionsOptions): Promise<void> {\n    await sharedBulkUpdateParticipantPermissions(\n      options as unknown as SharedBulkUpdateParticipantPermissionsOptions,\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Socket } from 'socket.io-client';\nimport { ShowAlert } from '../../@types/types';\nimport { updatePermissionConfig as sharedUpdatePermissionConfig } from 'mediasfu-shared';\nimport type { UpdatePermissionConfigOptions as SharedUpdatePermissionConfigOptions } from 'mediasfu-shared';\n\nexport interface PermissionCapabilities {\n  useMic: 'allow' | 'approval' | 'disallow';\n  useCamera: 'allow' | 'approval' | 'disallow';\n  useScreen: 'allow' | 'approval' | 'disallow';\n  useChat: 'allow' | 'disallow';\n}\n\nexport interface PermissionConfig {\n  level0: PermissionCapabilities;\n  level1: PermissionCapabilities;\n}\n\nexport interface UpdatePermissionConfigOptions {\n  socket: Socket;\n  config: PermissionConfig;\n  member: string;\n  islevel: string;\n  roomName: string;\n  showAlert?: ShowAlert;\n}\n\nexport type UpdatePermissionConfigType = (options: UpdatePermissionConfigOptions) => Promise<void>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class UpdatePermissionConfig {\n  \n  getDefaultPermissionConfig(): PermissionConfig {\n    return {\n      level0: {\n        useMic: 'approval',\n        useCamera: 'approval',\n        useScreen: 'disallow',\n        useChat: 'allow',\n      },\n      level1: {\n        useMic: 'allow',\n        useCamera: 'allow',\n        useScreen: 'approval',\n        useChat: 'allow',\n      },\n    };\n  }\n\n  getPermissionConfigFromEventSettings(\n    audioSetting: string = 'approval',\n    videoSetting: string = 'approval',\n    screenshareSetting: string = 'disallow',\n    chatSetting: string = 'allow'\n  ): PermissionConfig {\n    const capabilities: PermissionCapabilities = {\n      useMic: audioSetting as 'allow' | 'approval' | 'disallow',\n      useCamera: videoSetting as 'allow' | 'approval' | 'disallow',\n      useScreen: screenshareSetting as 'allow' | 'approval' | 'disallow',\n      useChat: (chatSetting === 'allow' ? 'allow' : 'disallow') as 'allow' | 'disallow',\n    };\n    return {\n      level0: { ...capabilities },\n      level1: { ...capabilities },\n    };\n  }\n\n  async updatePermissionConfig({\n    socket,\n    config,\n    member,\n    islevel,\n    roomName,\n    showAlert,\n  }: UpdatePermissionConfigOptions): Promise<void> {\n    await sharedUpdatePermissionConfig({\n      socket,\n      config,\n      member,\n      islevel,\n      roomName,\n      showAlert,\n    } as unknown as SharedUpdatePermissionConfigOptions);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport {\n  findOriginalProducerForSpeaker as sharedFindOriginalProducerForSpeaker,\n  getActiveTranslationConsumers as sharedGetActiveTranslationConsumers,\n  isConsumingTranslationForSpeaker as sharedIsConsumingTranslationForSpeaker,\n  isSpeakerInMyBreakoutRoom as sharedIsSpeakerInMyBreakoutRoom,\n  pauseOriginalProducer as sharedPauseOriginalProducer,\n  resumeOriginalProducer as sharedResumeOriginalProducer,\n  stopConsumingTranslation as sharedStopConsumingTranslation,\n  syncTranslationStateAfterBreakoutChange as sharedSyncTranslationStateAfterBreakoutChange,\n} from 'mediasfu-shared';\nimport { Transport, BreakoutParticipant, Participant, EventType } from '../@types/types';\n\nexport interface TranslationConsumerSwitchParameters {\n  consumerTransports: Transport[];\n  roomName: string;\n  member: string;\n  updateConsumerTransports: (transports: Transport[]) => void;\n  breakOutRoomStarted?: boolean;\n  breakOutRoomEnded?: boolean;\n  breakoutRooms?: BreakoutParticipant[][];\n  limitedBreakRoom?: BreakoutParticipant[];\n  participants?: Participant[];\n  ref_participants?: Participant[];\n  islevel?: string;\n  eventType?: EventType;\n  hostNewRoom?: number;\n  [key: string]: any;\n}\n\nexport interface PauseOriginalProducerOptions {\n  originalProducerId: string;\n  speakerId?: string;\n  parameters: TranslationConsumerSwitchParameters;\n}\n\nexport interface ResumeOriginalProducerOptions {\n  originalProducerId: string;\n  speakerId?: string;\n  parameters: TranslationConsumerSwitchParameters;\n}\n\nexport interface StopConsumingTranslationOptions {\n  speakerId?: string;\n  language: string;\n  translationProducerMap: Record<string, Record<string, string>>;\n  parameters: TranslationConsumerSwitchParameters;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TranslationConsumerSwitch {\n  isSpeakerInMyBreakoutRoom(\n    speakerName: string,\n    parameters: TranslationConsumerSwitchParameters\n  ): boolean {\n    return sharedIsSpeakerInMyBreakoutRoom(\n      speakerName,\n      parameters as unknown as Parameters<typeof sharedIsSpeakerInMyBreakoutRoom>[1],\n    );\n  }\n\n  async pauseOriginalProducer({\n    originalProducerId,\n    speakerId,\n    parameters,\n  }: PauseOriginalProducerOptions): Promise<void> {\n    return sharedPauseOriginalProducer({\n      originalProducerId,\n      speakerId,\n      parameters,\n    } as unknown as Parameters<typeof sharedPauseOriginalProducer>[0]) as Promise<void>;\n  }\n\n  async resumeOriginalProducer({\n    originalProducerId,\n    speakerId,\n    parameters,\n  }: ResumeOriginalProducerOptions): Promise<void> {\n    return sharedResumeOriginalProducer({\n      originalProducerId,\n      speakerId,\n      parameters,\n    } as unknown as Parameters<typeof sharedResumeOriginalProducer>[0]) as Promise<void>;\n  }\n\n  isConsumingTranslationForSpeaker(\n    speakerId: string,\n    consumerTransports: Transport[],\n    translationProducerMap: Map<string, { translationProducerId: string; originalProducerId: string; language: string }>\n  ): { consuming: boolean; language?: string; translationProducerId?: string; originalProducerId?: string } {\n    return sharedIsConsumingTranslationForSpeaker(\n      speakerId,\n      consumerTransports as unknown as Parameters<typeof sharedIsConsumingTranslationForSpeaker>[1],\n      translationProducerMap\n    ) as {\n      consuming: boolean;\n      language?: string;\n      translationProducerId?: string;\n      originalProducerId?: string;\n    };\n  }\n\n  getActiveTranslationConsumers(\n    translationProducerMap: Map<string, { translationProducerId: string; originalProducerId: string; language: string }>,\n    consumerTransports: Transport[]\n  ): Array<{ speakerId: string; translationProducerId: string; originalProducerId: string; language: string }> {\n    return sharedGetActiveTranslationConsumers(\n      translationProducerMap,\n      consumerTransports as unknown as Parameters<typeof sharedGetActiveTranslationConsumers>[1]\n    ) as Array<{\n      speakerId: string;\n      translationProducerId: string;\n      originalProducerId: string;\n      language: string;\n    }>;\n  }\n\n  findOriginalProducerForSpeaker(\n    speakerId: string,\n    allAudioStreams: Array<{ producerId: string; name?: string; [key: string]: any }>\n  ): string | null {\n    return sharedFindOriginalProducerForSpeaker(speakerId, allAudioStreams);\n  }\n\n  async stopConsumingTranslation(options: StopConsumingTranslationOptions): Promise<string | null> {\n    return sharedStopConsumingTranslation({\n      ...options,\n      parameters: options.parameters,\n    } as unknown as Parameters<typeof sharedStopConsumingTranslation>[0]) as Promise<string | null>;\n  }\n\n  async syncTranslationStateAfterBreakoutChange(\n    translationProducerMap: Record<string, Record<string, string>>,\n    speakerIdByProducerId: Record<string, string>,\n    parameters: TranslationConsumerSwitchParameters\n  ): Promise<void> {\n    return sharedSyncTranslationStateAfterBreakoutChange(\n      translationProducerMap,\n      speakerIdByProducerId,\n      parameters as unknown as Parameters<typeof sharedSyncTranslationStateAfterBreakoutChange>[2]\n    ) as Promise<void>;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Participant } from '../../@types/types';\nimport { panelistsUpdated as sharedPanelistsUpdated } from 'mediasfu-shared';\n\nexport interface PanelistData {\n  id: string;\n  name: string;\n}\n\nexport interface PanelistsUpdatedData {\n  panelists: PanelistData[];\n}\n\nexport interface PanelistsUpdatedOptions {\n  data: PanelistsUpdatedData;\n  updatePanelists?: (panelists: Participant[]) => void;\n}\n\nexport type PanelistsUpdatedType = (options: PanelistsUpdatedOptions) => Promise<void>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PanelistsUpdated {\n  async panelistsUpdated({\n    data,\n    updatePanelists,\n  }: PanelistsUpdatedOptions): Promise<void> {\n    return sharedPanelistsUpdated({ data, updatePanelists });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Participant } from '../../@types/types';\nimport { PanelistData } from './panelists-updated.service';\nimport { panelistFocusChanged as sharedPanelistFocusChanged } from 'mediasfu-shared';\n\nexport interface PanelistFocusChangedData {\n  focusEnabled: boolean;\n  panelists: PanelistData[];\n  muteOthersMic: boolean;\n  muteOthersCamera: boolean;\n}\n\nexport interface PanelistFocusChangedOptions {\n  data: PanelistFocusChangedData;\n  updatePanelistsFocused?: (focused: boolean) => void;\n  updateMuteOthersMic?: (mute: boolean) => void;\n  updateMuteOthersCamera?: (mute: boolean) => void;\n  updatePanelists?: (panelists: Participant[]) => void;\n  currentPanelistsFocused?: boolean;\n  currentPanelists?: Participant[];\n  onScreenChanges?: () => Promise<void>;\n}\n\nexport type PanelistFocusChangedType = (options: PanelistFocusChangedOptions) => Promise<void>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PanelistFocusChanged {\n  async panelistFocusChanged({\n    data,\n    updatePanelistsFocused,\n    updateMuteOthersMic,\n    updateMuteOthersCamera,\n    updatePanelists,\n    currentPanelistsFocused,\n    currentPanelists,\n    onScreenChanges,\n  }: PanelistFocusChangedOptions): Promise<void> {\n    return sharedPanelistFocusChanged({\n      data,\n      updatePanelistsFocused,\n      updateMuteOthersMic,\n      updateMuteOthersCamera,\n      updatePanelists,\n      currentPanelistsFocused,\n      currentPanelists,\n      onScreenChanges,\n    });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ShowAlert } from '../../@types/types';\nimport { panelistControlMedia as sharedPanelistControlMedia } from 'mediasfu-shared';\n\nexport interface ControlMediaData {\n  type: 'audio' | 'video';\n  action: 'mute' | 'unmute';\n  reason?: string;\n}\n\nexport interface ReceiveControlMediaOptions {\n  data: ControlMediaData;\n  showAlert?: ShowAlert;\n  clickAudio?: () => void;\n  clickVideo?: () => void;\n  audioAlreadyOn?: boolean;\n  videoAlreadyOn?: boolean;\n}\n\nexport type ReceiveControlMediaType = (options: ReceiveControlMediaOptions) => Promise<void>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ReceiveControlMedia {\n  async receiveControlMedia({\n    data,\n    showAlert,\n    clickAudio,\n    clickVideo,\n    audioAlreadyOn,\n    videoAlreadyOn,\n  }: ReceiveControlMediaOptions): Promise<void> {\n    return sharedPanelistControlMedia({\n      data,\n      showAlert,\n      clickAudio,\n      clickVideo,\n      audioAlreadyOn,\n      videoAlreadyOn,\n    });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ShowAlert } from '../../@types/types';\nimport { addedAsPanelist as sharedAddedAsPanelist } from 'mediasfu-shared';\n\nexport interface AddedAsPanelistData {\n  message: string;\n}\n\nexport interface AddedAsPanelistOptions {\n  data: AddedAsPanelistData;\n  showAlert?: ShowAlert;\n}\n\nexport type AddedAsPanelistType = (options: AddedAsPanelistOptions) => Promise<void>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AddedAsPanelist {\n  async addedAsPanelist({\n    data,\n    showAlert,\n  }: AddedAsPanelistOptions): Promise<void> {\n    return sharedAddedAsPanelist({ data, showAlert });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ShowAlert } from '../../@types/types';\nimport { removedFromPanelists as sharedRemovedFromPanelists } from 'mediasfu-shared';\n\nexport interface RemovedFromPanelistsData {\n  message: string;\n}\n\nexport interface RemovedFromPanelistsOptions {\n  data: RemovedFromPanelistsData;\n  showAlert?: ShowAlert;\n}\n\nexport type RemovedFromPanelistsType = (options: RemovedFromPanelistsOptions) => Promise<void>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class RemovedFromPanelists {\n  async removedFromPanelists({\n    data,\n    showAlert,\n  }: RemovedFromPanelistsOptions): Promise<void> {\n    return sharedRemovedFromPanelists({ data, showAlert });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ShowAlert } from '../../@types/types';\nimport { permissionUpdated as sharedPermissionUpdated } from 'mediasfu-shared';\n\nexport interface PermissionUpdatedData {\n  newLevel: string;\n  message?: string;\n}\n\nexport interface PermissionUpdatedOptions {\n  data: PermissionUpdatedData;\n  showAlert?: ShowAlert;\n  updateIslevel?: (level: string) => void;\n}\n\nexport type PermissionUpdatedType = (options: PermissionUpdatedOptions) => Promise<void>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PermissionUpdated {\n  async permissionUpdated({\n    data,\n    showAlert,\n    updateIslevel,\n  }: PermissionUpdatedOptions): Promise<void> {\n    return sharedPermissionUpdated({ data, showAlert, updateIslevel });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { PermissionConfig } from '../../methods/permissions-methods/update-permission-config.service';\nimport { permissionConfigUpdated as sharedPermissionConfigUpdated } from 'mediasfu-shared';\n\nexport interface PermissionConfigUpdatedData {\n  config: PermissionConfig;\n}\n\nexport interface PermissionConfigUpdatedOptions {\n  data: PermissionConfigUpdatedData;\n  updatePermissionConfig?: (config: PermissionConfig) => void;\n}\n\nexport type PermissionConfigUpdatedType = (options: PermissionConfigUpdatedOptions) => Promise<void>;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PermissionConfigUpdated {\n  async permissionConfigUpdated({\n    data,\n    updatePermissionConfig,\n  }: PermissionConfigUpdatedOptions): Promise<void> {\n    return sharedPermissionConfigUpdated({ data, updatePermissionConfig });\n  }\n}\n","// types.ts\r\nimport { Socket } from 'socket.io-client';\r\nimport { types } from 'mediasoup-client';\r\ntype Consumer = types.Consumer;\r\ntype DtlsParameters = types.DtlsParameters;\r\ntype IceCandidate = types.IceCandidate;\r\ntype IceParameters = types.IceParameters;\r\ntype RtpCapabilities = types.RtpCapabilities;;\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/translation-components/translation-settings-modal/translation-settings-modal.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 AlertType = 'success' | 'danger' | 'info' | 'warning';\r\n\r\nexport type AlertPosition =\r\n  | 'top'\r\n  | 'bottom'\r\n  | 'top-right'\r\n  | 'top-left'\r\n  | 'bottom-right'\r\n  | 'bottom-left'\r\n  | 'center';\r\n\r\nexport type ShowAlert = (options: {\r\n  message: string;\r\n  type: AlertType;\r\n  duration?: number;\r\n  position?: AlertPosition;\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  directionSIP: 'inbound' | 'outbound' | 'both'; // Direction of SIP\r\n  preferPCMA: boolean; // Whether to prefer PCMA codec for SIP\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  directionSIP?: 'inbound' | 'outbound' | 'both'; // Direction of SIP\r\n  preferPCMA?: boolean; // Whether to prefer PCMA codec for SIP\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\r\n// Custom Component Types\r\nexport * from './custom-component.types';\r\n\r\nexport * from '../methods/panelists-methods/add-panelist.service';\r\nexport * from '../methods/panelists-methods/remove-panelist.service';\r\nexport * from '../methods/panelists-methods/focus-panelists.service';\r\nexport * from '../methods/permissions-methods/update-participant-permission.service';\r\nexport * from '../methods/permissions-methods/bulk-update-participant-permissions.service';\r\nexport * from '../methods/permissions-methods/update-permission-config.service';\r\nexport * from '../consumers/translation-consumer-switch.service';\r\nexport * from '../methods/utils/translation-languages.util';\r\nexport * from '../services/live-subtitle.service';\r\nexport * from '../producers/socket-receive-methods/panelists-updated.service';\r\nexport * from '../producers/socket-receive-methods/panelist-focus-changed.service';\r\nexport * from '../producers/socket-receive-methods/receive-control-media.service';\r\nexport * from '../producers/socket-receive-methods/added-as-panelist.service';\r\nexport * from '../producers/socket-receive-methods/removed-from-panelists.service';\r\nexport * from '../producers/socket-receive-methods/permission-updated.service';\r\nexport * from '../producers/socket-receive-methods/permission-config-updated.service';\r\nexport * from '../producers/socket-receive-methods/translation-receive-methods.service';\r\n","/**\r\n * MediaSFU UI Overrides - Angular Implementation\r\n *\r\n * This file provides TypeScript interfaces for the UI override system,\r\n * mirroring the React SDK's customization capabilities.\r\n *\r\n * The override system allows three customization strategies:\r\n * 1. Component overrides - Replace entire components with custom Angular components\r\n * 2. Render overrides - Wrap or enhance existing component rendering\r\n * 3. Function overrides - Replace or wrap helper functions with custom logic\r\n */\r\n\r\nimport { Type, InjectionToken, TemplateRef } from '@angular/core';\r\n\r\n/**\r\n * Base interface for component overrides\r\n * Allows replacing a component or wrapping its render output\r\n */\r\nexport interface CustomComponentOverride<TComponent = any, TProps = any> {\r\n  /**\r\n   * Replace the component entirely with a custom Angular component\r\n   */\r\n  component?: Type<TComponent>;\r\n\r\n  /**\r\n   * Wrap or enhance the default render output\r\n   * @param props - Props passed to the component\r\n   * @param defaultRender - Function that returns the default component\r\n   */\r\n  render?: (props: TProps, defaultRender?: () => any) => TemplateRef<any> | Type<any>;\r\n}\r\n\r\n/**\r\n * Base interface for function overrides\r\n * Allows replacing a function or wrapping its execution\r\n */\r\nexport interface CustomFunctionOverride<TFunction extends (...args: any[]) => any> {\r\n  /**\r\n   * Completely replace the function implementation\r\n   */\r\n  implementation?: TFunction;\r\n\r\n  /**\r\n   * Wrap the original function to add pre/post logic\r\n   * @param original - The original function implementation\r\n   * @returns Wrapped function with custom logic\r\n   */\r\n  wrap?: (original: TFunction) => TFunction;\r\n}\r\n\r\n/**\r\n * Main UI Overrides interface\r\n * Contains all customizable components and functions in MediaSFU\r\n */\r\nexport interface MediasfuUICustomOverrides {\r\n  // =========================================================\r\n  //              LAYOUT & CONTROL SURFACES\r\n  // =========================================================\r\n  /**\r\n   * Main container component - Root wrapper for the entire UI\r\n   */\r\n  mainContainer?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Main aspect component - Controls aspect ratio and layout\r\n   */\r\n  mainAspect?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Main screen component - Primary video/content display area\r\n   */\r\n  mainScreen?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Main grid component - Grid layout for participants\r\n   */\r\n  mainGrid?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Sub aspect component - Secondary layout container\r\n   */\r\n  subAspect?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Other grid component - Additional participant grid\r\n   */\r\n  otherGrid?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Flexible grid component - Dynamic participant grid\r\n   */\r\n  flexibleGrid?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Alternative flexible grid component\r\n   */\r\n  flexibleGridAlt?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Flexible video component - Individual video display\r\n   */\r\n  flexibleVideo?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Audio grid component - Grid for audio-only participants\r\n   */\r\n  audioGrid?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Pagination component - Page navigation controls\r\n   */\r\n  pagination?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Primary control buttons component\r\n   */\r\n  controlButtons?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Alternative control buttons component\r\n   */\r\n  controlButtonsAlt?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Touch-optimized control buttons component\r\n   */\r\n  controlButtonsTouch?: CustomComponentOverride;\r\n\r\n  // =========================================================\r\n  //              PARTICIPANT CARDS & WIDGETS\r\n  // =========================================================\r\n  /**\r\n   * Video card component - Individual video participant display\r\n   */\r\n  videoCard?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Audio card component - Individual audio-only participant display\r\n   */\r\n  audioCard?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Mini card component - Minimized participant display\r\n   */\r\n  miniCard?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Mini audio component - Minimized audio indicator\r\n   */\r\n  miniAudio?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Meeting progress timer widget\r\n   */\r\n  meetingProgressTimer?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Mini audio player widget\r\n   */\r\n  miniAudioPlayer?: CustomComponentOverride;\r\n\r\n  // =========================================================\r\n  //              MODALS, DIALOGS & COLLABORATION\r\n  // =========================================================\r\n  /**\r\n   * Loading modal - Displayed during connection/loading\r\n   */\r\n  loadingModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Alert component - System notifications and alerts\r\n   */\r\n  alert?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Menu modal - Quick actions menu\r\n   */\r\n  menuModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Event settings modal - Host controls and settings\r\n   */\r\n  eventSettingsModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Requests modal - Media access requests\r\n   */\r\n  requestsModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Waiting room modal - Participant admission queue\r\n   */\r\n  waitingRoomModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Co-host modal - Co-host management\r\n   */\r\n  coHostModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Media settings modal - Camera/microphone settings\r\n   */\r\n  mediaSettingsModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Participants modal - Participant list and management\r\n   */\r\n  participantsModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Messages modal - Chat interface\r\n   */\r\n  messagesModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Display settings modal - Layout and display preferences\r\n   */\r\n  displaySettingsModal?: CustomComponentOverride;\r\n  /**\r\n   * Translation settings modal - Spoken/listening translation controls\r\n   */\r\n  translationSettingsModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Confirm exit modal - Exit confirmation dialog\r\n   */\r\n  confirmExitModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Confirm here modal - Attendance confirmation\r\n   */\r\n  confirmHereModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Share event modal - Event sharing interface\r\n   */\r\n  shareEventModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Recording modal - Recording controls\r\n   */\r\n  recordingModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Poll modal - Polling interface\r\n   */\r\n  pollModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Background modal - Virtual background settings\r\n   */\r\n  backgroundModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Breakout rooms modal - Breakout room management\r\n   */\r\n  breakoutRoomsModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Configure whiteboard modal - Whiteboard settings\r\n   */\r\n  configureWhiteboardModal?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Whiteboard component - Collaborative whiteboard\r\n   */\r\n  whiteboard?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Screenboard component - Screen annotation layer\r\n   */\r\n  screenboard?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Screenboard modal - Screen sharing annotation controls\r\n   */\r\n  screenboardModal?: CustomComponentOverride;\r\n\r\n  // =========================================================\r\n  //              ENTRY FLOWS & CUSTOM RENDERERS\r\n  // =========================================================\r\n  /**\r\n   * Welcome page - Pre-join welcome/marketing page\r\n   */\r\n  welcomePage?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Pre-join page - Room entry wizard\r\n   */\r\n  preJoinPage?: CustomComponentOverride;\r\n\r\n  /**\r\n   * Custom menu buttons renderer - Custom button group renderer\r\n   */\r\n  customMenuButtonsRenderer?: CustomComponentOverride;\r\n\r\n  // =========================================================\r\n  //              FUNCTION OVERRIDES\r\n  // =========================================================\r\n  /**\r\n   * Consumer resume function - Handles resuming paused media consumers\r\n   */\r\n  consumerResume?: CustomFunctionOverride<(params: any) => Promise<void>>;\r\n\r\n  /**\r\n   * Add videos grid function - Handles adding videos to the grid layout\r\n   */\r\n  addVideosGrid?: CustomFunctionOverride<(params: any) => Promise<void>>;\r\n\r\n  /**\r\n   * Prepopulate user media function - Handles initial setup of user media streams\r\n   */\r\n  prepopulateUserMedia?: CustomFunctionOverride<(params: any) => Promise<any>>;\r\n}\r\n\r\n/**\r\n * Injection token for UI overrides\r\n * Use this token to provide overrides at the component or module level\r\n */\r\nexport const MEDIASFU_UI_OVERRIDES = new InjectionToken<MediasfuUICustomOverrides>(\r\n  'mediasfu.ui.overrides'\r\n);\r\n\r\n/**\r\n * Injection token for container styling\r\n * Allows injecting custom styles for the root container\r\n */\r\nexport const MEDIASFU_CONTAINER_STYLE = new InjectionToken<Record<string, any>>(\r\n  'mediasfu.container.style'\r\n);\r\n\r\n/**\r\n * Props structure for custom video card components\r\n */\r\nexport interface CustomVideoCardProps {\r\n  participant: any;\r\n  showControls?: boolean;\r\n  showInfo?: boolean;\r\n  customStyle?: Record<string, any>;\r\n  parameters?: any;\r\n}\r\n\r\n/**\r\n * Type definition for custom video card component\r\n */\r\nexport type CustomVideoCardType = Type<any>;\r\n\r\n/**\r\n * Props structure for custom audio card components\r\n */\r\nexport interface CustomAudioCardProps {\r\n  participant: any;\r\n  showControls?: boolean;\r\n  showInfo?: boolean;\r\n  barColor?: string;\r\n  customStyle?: Record<string, any>;\r\n  parameters?: any;\r\n}\r\n\r\n/**\r\n * Type definition for custom audio card component\r\n */\r\nexport type CustomAudioCardType = Type<any>;\r\n\r\n/**\r\n * Props structure for custom mini card components\r\n */\r\nexport interface CustomMiniCardProps {\r\n  participant: any;\r\n  showControls?: boolean;\r\n  customStyle?: Record<string, any>;\r\n  parameters?: any;\r\n}\r\n\r\n/**\r\n * Type definition for custom mini card component\r\n */\r\nexport type CustomMiniCardType = Type<any>;\r\n\r\n/**\r\n * Type definition for custom component that replaces entire UI\r\n */\r\nexport type CustomFullComponentType = Type<any>;\r\n\r\n/**\r\n * Helper type for component override props\r\n */\r\nexport type OverrideComponentProps<T = any> = T;\r\n\r\n/**\r\n * Helper type for extracting component type from override\r\n */\r\nexport type ExtractComponentType<T> = T extends CustomComponentOverride<infer C> ? C : never;\r\n\r\n/**\r\n * Helper type for extracting props type from override\r\n */\r\nexport type ExtractPropsType<T> = T extends CustomComponentOverride<any, infer P> ? P : never;\r\n","import { Injectable, Type, Inject, Optional, ComponentRef, ViewContainerRef, Injector } from '@angular/core';\r\nimport {\r\n  MediasfuUICustomOverrides,\r\n  CustomComponentOverride,\r\n  CustomFunctionOverride,\r\n  MEDIASFU_UI_OVERRIDES,\r\n} from '../@types/ui-overrides.types';\r\n\r\n/**\r\n * UI Override Resolver Service\r\n *\r\n * This service manages the resolution and application of UI overrides throughout MediaSFU.\r\n * It provides methods to:\r\n * - Check if a component has an override\r\n * - Resolve the appropriate component to render\r\n * - Wrap functions with custom logic\r\n * - Apply function overrides\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UIOverrideResolverService {\r\n  private overrides: MediasfuUICustomOverrides = {};\r\n\r\n  constructor(\r\n    @Optional() @Inject(MEDIASFU_UI_OVERRIDES) injectedOverrides?: MediasfuUICustomOverrides\r\n  ) {\r\n    if (injectedOverrides) {\r\n      this.overrides = injectedOverrides;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set UI overrides programmatically\r\n   * @param overrides - The overrides configuration\r\n   */\r\n  setOverrides(overrides: MediasfuUICustomOverrides): void {\r\n    this.overrides = { ...this.overrides, ...overrides };\r\n  }\r\n\r\n  /**\r\n   * Get all current overrides\r\n   * @returns Current override configuration\r\n   */\r\n  getOverrides(): MediasfuUICustomOverrides {\r\n    return this.overrides;\r\n  }\r\n\r\n  /**\r\n   * Check if a specific component has an override\r\n   * @param key - The component key to check\r\n   * @returns True if an override exists\r\n   */\r\n  hasOverride(key: keyof MediasfuUICustomOverrides): boolean {\r\n    return !!this.overrides[key];\r\n  }\r\n\r\n  /**\r\n   * Get the override configuration for a specific component\r\n   * @param key - The component key\r\n   * @returns The override configuration or undefined\r\n   */\r\n  getComponentOverride<T = any>(key: keyof MediasfuUICustomOverrides): CustomComponentOverride<T> | undefined {\r\n    const override = this.overrides[key];\r\n    if (override && 'component' in override) {\r\n      return override as CustomComponentOverride<T>;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Get the function override for a specific function\r\n   * @param key - The function key\r\n   * @returns The function override or undefined\r\n   */\r\n  getFunctionOverride<T extends (...args: any[]) => any>(\r\n    key: keyof MediasfuUICustomOverrides\r\n  ): CustomFunctionOverride<T> | undefined {\r\n    const override = this.overrides[key];\r\n    if (override && ('implementation' in override || 'wrap' in override)) {\r\n      return override as unknown as CustomFunctionOverride<T>;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Resolve the component to use (default or override)\r\n   * @param key - The component key\r\n   * @param defaultComponent - The default component type\r\n   * @returns The component to render\r\n   */\r\n  resolveComponent<T>(\r\n    key: keyof MediasfuUICustomOverrides,\r\n    defaultComponent: Type<T>\r\n  ): Type<T> {\r\n    const override = this.getComponentOverride<T>(key);\r\n    if (override?.component) {\r\n      return override.component;\r\n    }\r\n    return defaultComponent;\r\n  }\r\n\r\n  /**\r\n   * Apply function override (wrap or replace)\r\n   * @param key - The function key\r\n   * @param originalFunction - The original function implementation\r\n   * @returns The wrapped or replaced function\r\n   */\r\n  applyFunctionOverride<T extends (...args: any[]) => any>(\r\n    key: keyof MediasfuUICustomOverrides,\r\n    originalFunction: T\r\n  ): T {\r\n    const override = this.getFunctionOverride<T>(key);\r\n\r\n    if (!override) {\r\n      return originalFunction;\r\n    }\r\n\r\n    // If there's a complete replacement, use it\r\n    if (override.implementation) {\r\n      return override.implementation;\r\n    }\r\n\r\n    // If there's a wrapper, apply it\r\n    if (override.wrap) {\r\n      return override.wrap(originalFunction);\r\n    }\r\n\r\n    return originalFunction;\r\n  }\r\n\r\n  /**\r\n   * Create a component instance with potential override\r\n   * @param viewContainerRef - The view container to create the component in\r\n   * @param key - The component key\r\n   * @param defaultComponent - The default component type\r\n   * @param injector - Optional custom injector\r\n   * @returns The created component reference\r\n   */\r\n  createComponent<T>(\r\n    viewContainerRef: ViewContainerRef,\r\n    key: keyof MediasfuUICustomOverrides,\r\n    defaultComponent: Type<T>,\r\n    injector?: Injector\r\n  ): ComponentRef<T> {\r\n    const component = this.resolveComponent(key, defaultComponent);\r\n    return viewContainerRef.createComponent(component, { injector });\r\n  }\r\n\r\n  /**\r\n   * Clear all overrides\r\n   */\r\n  clearOverrides(): void {\r\n    this.overrides = {};\r\n  }\r\n\r\n  /**\r\n   * Clear a specific override\r\n   * @param key - The override key to clear\r\n   */\r\n  clearOverride(key: keyof MediasfuUICustomOverrides): void {\r\n    delete this.overrides[key];\r\n  }\r\n\r\n  /**\r\n   * Check if render override exists for a component\r\n   * @param key - The component key\r\n   * @returns True if a render override exists\r\n   */\r\n  hasRenderOverride(key: keyof MediasfuUICustomOverrides): boolean {\r\n    const override = this.getComponentOverride(key);\r\n    return !!override?.render;\r\n  }\r\n\r\n  /**\r\n   * Get the render override function for a component\r\n   * @param key - The component key\r\n   * @returns The render function or undefined\r\n   */\r\n  getRenderOverride(key: keyof MediasfuUICustomOverrides): ((props: any, defaultRender?: () => any) => any) | undefined {\r\n    const override = this.getComponentOverride(key);\r\n    return override?.render;\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  Input,\r\n  ViewContainerRef,\r\n  ComponentRef,\r\n  OnDestroy,\r\n  Type,\r\n  Injector,\r\n  TemplateRef,\r\n  EmbeddedViewRef,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  DoCheck,\r\n} from '@angular/core';\r\nimport { UIOverrideResolverService } from '../services/ui-override-resolver.service';\r\nimport { MediasfuUICustomOverrides } from '../@types/ui-overrides.types';\r\n\r\n/**\r\n * Directive: appWithOverride\r\n *\r\n * Apply UI overrides to components dynamically.\r\n * This directive checks for overrides and either:\r\n * 1. Renders the custom component if an override exists\r\n * 2. Renders the default component if no override exists\r\n *\r\n * Usage:\r\n * ```html\r\n * <ng-container\r\n *   *appWithOverride=\"'mainContainer';\r\n *   default: defaultMainContainer;\r\n *   props: componentProps\">\r\n * </ng-container>\r\n * ```\r\n */\r\n@Directive({\r\n  selector: '[appWithOverride]',\r\n  standalone: true\r\n})\r\nexport class WithOverrideDirective implements OnChanges, OnDestroy, DoCheck {\r\n  @Input('appWithOverride') appWithOverride!: keyof MediasfuUICustomOverrides;\r\n  @Input('appWithOverrideDefault') default!: Type<any>;\r\n  @Input('appWithOverrideProps') props?: Record<string, any> | (() => Record<string, any>);\r\n  @Input('appWithOverrideInjector') customInjector?: Injector;\r\n\r\n  // Keep the old names for backward compatibility in the code\r\n  get appWithOverrideDefault() { return this.default; }\r\n  get appWithOverrideProps() { return this.props; }\r\n  get appWithOverrideInjector() { return this.customInjector; }\r\n\r\n  private componentRef?: ComponentRef<any>;\r\n  private embeddedDefaultView?: EmbeddedViewRef<any>;\r\n  private renderedDefaultView?: EmbeddedViewRef<any>;\r\n\r\n  constructor(\r\n    private templateRef: TemplateRef<any>,\r\n    private viewContainerRef: ViewContainerRef,\r\n    private uiOverrideResolver: UIOverrideResolverService,\r\n    private injector: Injector\r\n  ) {}\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['appWithOverride'] || changes['appWithOverrideProps']) {\r\n      this.render();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.destroyRenderedViews();\r\n  }\r\n\r\n  ngDoCheck(): void {\r\n    if (this.componentRef) {\r\n      this.updateComponentInstanceProps();\r\n    }\r\n  }\r\n\r\n  private destroyRenderedViews(): void {\r\n    if (this.componentRef) {\r\n      this.componentRef.destroy();\r\n      this.componentRef = undefined;\r\n    }\r\n    if (this.embeddedDefaultView) {\r\n      this.embeddedDefaultView.destroy();\r\n      this.embeddedDefaultView = undefined;\r\n    }\r\n    if (this.renderedDefaultView) {\r\n      this.renderedDefaultView.destroy();\r\n      this.renderedDefaultView = undefined;\r\n    }\r\n  }\r\n\r\n  private render(): void {\r\n    this.destroyRenderedViews();\r\n    this.viewContainerRef.clear();\r\n\r\n    const override = this.uiOverrideResolver.getComponentOverride(this.appWithOverride);\r\n\r\n    // Helper to render the default template\r\n    const renderDefaultTemplate = () => {\r\n      this.renderedDefaultView = this.viewContainerRef.createEmbeddedView(this.templateRef);\r\n    };\r\n\r\n    // If there is a render override, allow it to provide a TemplateRef or component type\r\n    if (override?.render) {\r\n      const props = this.resolveProps();\r\n      const rendered = override.render(props, () => this.templateRef);\r\n\r\n      if (rendered instanceof TemplateRef) {\r\n        this.renderedDefaultView = this.viewContainerRef.createEmbeddedView(rendered);\r\n        return;\r\n      }\r\n\r\n      if (rendered) {\r\n        const componentRef = this.viewContainerRef.createComponent(rendered as Type<any>, {\r\n          injector: this.appWithOverrideInjector || this.injector,\r\n        });\r\n        if (props && componentRef.instance) {\r\n          Object.assign(componentRef.instance, props);\r\n        }\r\n        this.componentRef = componentRef;\r\n        this.componentRef.changeDetectorRef.detectChanges();\r\n        return;\r\n      }\r\n\r\n      renderDefaultTemplate();\r\n      return;\r\n    }\r\n\r\n    const componentType = override?.component\r\n      ? override.component\r\n      : this.uiOverrideResolver.resolveComponent(\r\n          this.appWithOverride,\r\n          this.appWithOverrideDefault\r\n        );\r\n\r\n    if (!override?.component) {\r\n      // No component override - render the default template directly\r\n      renderDefaultTemplate();\r\n      return;\r\n    }\r\n\r\n    // When overriding with a custom component, project the default template\r\n    this.embeddedDefaultView = this.templateRef.createEmbeddedView({});\r\n    this.embeddedDefaultView.detectChanges();\r\n\r\n    const projectableNodes = [this.embeddedDefaultView.rootNodes];\r\n    const injectorToUse = this.appWithOverrideInjector || this.injector;\r\n\r\n    const componentRef = this.viewContainerRef.createComponent(componentType, {\r\n      injector: injectorToUse,\r\n      projectableNodes,\r\n    });\r\n\r\n    const props = this.resolveProps();\r\n    if (props && componentRef.instance) {\r\n      Object.assign(componentRef.instance, props);\r\n    }\r\n\r\n    this.componentRef = componentRef;\r\n    this.componentRef.changeDetectorRef.detectChanges();\r\n  }\r\n\r\n  private resolveProps(): Record<string, any> | undefined {\r\n    if (!this.appWithOverrideProps) {\r\n      return undefined;\r\n    }\r\n\r\n    if (typeof this.appWithOverrideProps === 'function') {\r\n      try {\r\n        return this.appWithOverrideProps();\r\n      } catch (error) {\r\n        console.warn('Error resolving override props for', this.appWithOverride, error);\r\n        return undefined;\r\n      }\r\n    }\r\n\r\n    return this.appWithOverrideProps;\r\n  }\r\n\r\n  private updateComponentInstanceProps(): void {\r\n    if (!this.componentRef) {\r\n      return;\r\n    }\r\n\r\n    const props = this.resolveProps();\r\n    if (!props) {\r\n      return;\r\n    }\r\n\r\n    let hasChanges = false;\r\n    const instance = this.componentRef.instance as Record<string, any>;\r\n\r\n    for (const key of Object.keys(props)) {\r\n      const newValue = props[key];\r\n      if (instance[key] !== newValue) {\r\n        instance[key] = newValue;\r\n        hasChanges = true;\r\n      }\r\n    }\r\n\r\n    if (hasChanges) {\r\n      this.componentRef.changeDetectorRef.markForCheck();\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Directive: appWithFunctionOverride\r\n *\r\n * Apply function overrides to method calls.\r\n * This directive wraps a function with override logic.\r\n *\r\n * Usage in TypeScript:\r\n * ```typescript\r\n * @ViewChild(WithFunctionOverrideDirective) functionOverride!: WithFunctionOverrideDirective;\r\n *\r\n * const wrappedFunction = this.functionOverride.applyOverride(\r\n *   'consumerResume',\r\n *   this.originalConsumerResume\r\n * );\r\n * ```\r\n */\r\n@Directive({\r\n  selector: '[appWithFunctionOverride]',\r\n  standalone: false,\r\n})\r\nexport class WithFunctionOverrideDirective {\r\n  constructor(private uiOverrideResolver: UIOverrideResolverService) {}\r\n\r\n  /**\r\n   * Apply function override\r\n   * @param key - The function key\r\n   * @param originalFunction - The original function\r\n   * @returns The wrapped or replaced function\r\n   */\r\n  applyOverride<T extends (...args: any[]) => any>(\r\n    key: keyof MediasfuUICustomOverrides,\r\n    originalFunction: T\r\n  ): T {\r\n    return this.uiOverrideResolver.applyFunctionOverride(key, originalFunction);\r\n  }\r\n}\r\n","import { types } from 'mediasoup-client';\r\ntype Producer = types.Producer;\r\ntype ProducerOptions = types.ProducerOptions;\r\ntype RtpCapabilities = types.RtpCapabilities;\r\ntype Transport = types.Transport;\r\ntype Device = types.Device;\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 { Socket } from 'socket.io-client';\r\nimport { SelfieSegmentation } from '@mediapipe/selfie_segmentation';\r\nimport { TranslationRoomConfig } from '../../producers/socket-receive-methods/translation-receive-methods.service';\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  translationSupported: boolean;\r\n  translationConfig: TranslationRoomConfig | null;\r\n  mySpokenLanguage: string;\r\n  mySpokenLanguageEnabled: boolean;\r\n  myDefaultOutputLanguage: string | null;\r\n  myDefaultListenLanguage: string | null;\r\n  listenPreferences: Map<string, string>;\r\n  translationProducerMap: Record<string, Record<string, string>>;\r\n  availableTranslationChannels: Map<string, { languages: string[]; originalProducerId: string }>;\r\n  canUsePersonalTranslation: boolean;\r\n  personalTranslationUsername?: 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' | 'info' | 'warning';\r\n  alertPosition:\r\n    | 'top'\r\n    | 'bottom'\r\n    | 'top-right'\r\n    | 'top-left'\r\n    | 'bottom-right'\r\n    | 'bottom-left'\r\n    | 'center';\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  isTranslationSettingsModalVisible: 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  translationSupported: false,\r\n  translationConfig: null,\r\n  mySpokenLanguage: 'en',\r\n  mySpokenLanguageEnabled: false,\r\n  myDefaultOutputLanguage: null,\r\n  myDefaultListenLanguage: null,\r\n  listenPreferences: new Map(),\r\n  translationProducerMap: {},\r\n  availableTranslationChannels: new Map(),\r\n  canUsePersonalTranslation: false,\r\n  personalTranslationUsername: undefined,\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  alertPosition: 'top',\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  isTranslationSettingsModalVisible: 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 { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nimport {\r\n  CoHostResponsibility,\r\n  EventType,\r\n  Message,\r\n  Participant,\r\n  ShowAlert,\r\n} from '../../@types/types';\r\nimport { MessagePanel } from '../../components/message-components/message-panel/message-panel.component';\r\nimport {\r\n  SendMessage,\r\n  SendMessageOptions,\r\n} from '../../methods/message-methods/send-message.service';\r\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../utils/render-mode.utils';\r\n\r\n@Component({\r\n  selector: 'app-messages-modal',\r\n  imports: [CommonModule, FontAwesomeModule, MessagePanel],\r\n  template: `\r\n    <ng-container *ngIf=\"isVisible() && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              isMessagesModalVisible: isMessagesModalVisible,\r\n              eventType: eventType,\r\n              activeTab: activeTab,\r\n              messages: messages,\r\n              member: member,\r\n              closeMessagesModal: closeMessagesModal.bind(this)\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isVisible() && !customTemplate\"\r\n      class=\"ms-modern-modal-shell\"\r\n      [class.ms-modern-modal-shell--embedded]=\"isEmbedded()\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n      (click)=\"handleOverlayClick()\"\r\n    >\r\n      <section\r\n        class=\"ms-modern-messages-modal\"\r\n        [class.ms-modern-messages-modal--embedded]=\"isEmbedded()\"\r\n        [ngStyle]=\"resolvedContentStyle()\"\r\n        (click)=\"$event.stopPropagation()\"\r\n      >\r\n        <header *ngIf=\"showHeader\" class=\"ms-modern-messages-modal__header\">\r\n          <div class=\"ms-modern-messages-modal__title-wrap\">\r\n            <h2 class=\"ms-modern-messages-modal__title\">Messages</h2>\r\n            <p class=\"ms-modern-messages-modal__subtitle\">\r\n              {{\r\n                supportsDirectMessages()\r\n                  ? 'Switch between group updates and direct conversations.'\r\n                  : 'Stay in sync with the room conversation.'\r\n              }}\r\n            </p>\r\n          </div>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-messages-modal__close\"\r\n            (click)=\"closeMessagesModal()\"\r\n            aria-label=\"Close messages\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div *ngIf=\"supportsDirectMessages()\" class=\"ms-modern-messages-modal__tabs\">\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-messages-modal__tab\"\r\n            [class.ms-modern-messages-modal__tab--active]=\"activeTab === 'direct'\"\r\n            (click)=\"switchToDirectTab()\"\r\n          >\r\n            Direct\r\n          </button>\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-messages-modal__tab\"\r\n            [class.ms-modern-messages-modal__tab--active]=\"activeTab === 'group'\"\r\n            (click)=\"switchToGroupTab()\"\r\n          >\r\n            Group\r\n          </button>\r\n        </div>\r\n\r\n        <div class=\"ms-modern-messages-modal__body\">\r\n          <div\r\n            *ngIf=\"activeTab === 'direct' && supportsDirectMessages() && !directMessageDetails\"\r\n            class=\"ms-modern-messages-modal__helper\"\r\n          >\r\n            Select a participant to start a direct conversation, or switch back to group chat.\r\n          </div>\r\n\r\n          <div class=\"ms-modern-messages-modal__panel\">\r\n            <app-message-panel\r\n              *ngIf=\"activeTab === 'direct' && supportsDirectMessages()\"\r\n              [messages]=\"directMessages\"\r\n              [messagesLength]=\"messages.length\"\r\n              type=\"direct\"\r\n              [onSendMessagePress]=\"resolvedSendMessageHandler()\"\r\n              [username]=\"member\"\r\n              [backgroundColor]=\"'transparent'\"\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            ></app-message-panel>\r\n\r\n            <app-message-panel\r\n              *ngIf=\"activeTab === 'group' || !supportsDirectMessages()\"\r\n              [messages]=\"groupMessages\"\r\n              [messagesLength]=\"messages.length\"\r\n              type=\"group\"\r\n              [onSendMessagePress]=\"resolvedSendMessageHandler()\"\r\n              [username]=\"member\"\r\n              [backgroundColor]=\"'transparent'\"\r\n              [focusedInput]=\"false\"\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            ></app-message-panel>\r\n          </div>\r\n        </div>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-modal-shell {\r\n        position: fixed;\r\n        inset: 0;\r\n        z-index: 999;\r\n        background: rgba(5, 9, 20, 0.56);\r\n      }\r\n\r\n      .ms-modern-modal-shell--embedded {\r\n        background: transparent;\r\n        z-index: auto;\r\n      }\r\n\r\n      .ms-modern-messages-modal {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 16px;\r\n        overflow: hidden;\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        background:\r\n          linear-gradient(\r\n            180deg,\r\n            var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94)) 0%,\r\n            var(--ms-modern-panel-surface, rgba(255, 255, 255, 0.82)) 100%\r\n          );\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        border-radius: 28px;\r\n        box-shadow: var(--ms-modern-shadow-panel, 0 24px 64px rgba(14, 30, 53, 0.16));\r\n        backdrop-filter: blur(20px);\r\n      }\r\n\r\n      .ms-modern-messages-modal--embedded {\r\n        border-radius: 24px;\r\n      }\r\n\r\n      .ms-modern-messages-modal__header {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        gap: 16px;\r\n        padding: 20px 22px 0;\r\n      }\r\n\r\n      .ms-modern-messages-modal__title-wrap {\r\n        min-width: 0;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 6px;\r\n      }\r\n\r\n      .ms-modern-messages-modal__title {\r\n        margin: 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1rem;\r\n        font-weight: 700;\r\n        line-height: 1.2;\r\n      }\r\n\r\n      .ms-modern-messages-modal__subtitle {\r\n        margin: 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.82rem;\r\n        line-height: 1.55;\r\n      }\r\n\r\n      .ms-modern-messages-modal__close {\r\n        flex: 0 0 auto;\r\n        width: 38px;\r\n        height: 38px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 999px;\r\n        border: 1px solid var(--ms-modern-border-strong, rgba(46, 108, 188, 0.34));\r\n        background:\r\n          linear-gradient(\r\n            180deg,\r\n            var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94)) 0%,\r\n            var(--ms-modern-field-background, rgba(248, 250, 252, 0.92)) 100%\r\n          );\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        box-shadow: 0 12px 28px rgba(14, 30, 53, 0.12);\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-messages-modal__tabs {\r\n        display: grid;\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n        gap: 8px;\r\n        margin: 0 22px;\r\n        padding: 4px;\r\n        border-radius: 999px;\r\n        background: var(--ms-modern-field-background, rgba(248, 250, 252, 0.92));\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n      }\r\n\r\n      .ms-modern-messages-modal__tab {\r\n        min-height: 40px;\r\n        border: 1px solid transparent;\r\n        border-radius: 999px;\r\n        background: transparent;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        font-weight: 600;\r\n        cursor: pointer;\r\n        transition:\r\n          background-color 160ms ease,\r\n          color 160ms ease,\r\n          border-color 160ms ease,\r\n          box-shadow 160ms ease;\r\n      }\r\n\r\n      .ms-modern-messages-modal__tab--active {\r\n        color: #ffffff;\r\n        background: linear-gradient(135deg, var(--ms-modern-accent, #1476d2), var(--ms-modern-accent-strong, #0d5ca8));\r\n        box-shadow: 0 12px 26px rgba(20, 118, 210, 0.22);\r\n      }\r\n\r\n      .ms-modern-messages-modal__body {\r\n        flex: 1;\r\n        min-height: 0;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 14px;\r\n        padding: 0 22px 22px;\r\n      }\r\n\r\n      .ms-modern-messages-modal__helper {\r\n        padding: 12px 14px;\r\n        border-radius: 16px;\r\n        border: 1px solid color-mix(in srgb, var(--ms-modern-info, #0f6db5) 24%, transparent);\r\n        background: color-mix(in srgb, var(--ms-modern-info, #0f6db5) 10%, transparent);\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.84rem;\r\n        line-height: 1.6;\r\n      }\r\n\r\n      .ms-modern-messages-modal__panel {\r\n        flex: 1;\r\n        min-height: 0;\r\n        padding: 16px;\r\n        border-radius: 20px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        background: var(--ms-modern-panel-surface, rgba(255, 255, 255, 0.82));\r\n        overflow: hidden;\r\n      }\r\n\r\n      :host ::ng-deep .message-panel-container,\r\n      :host ::ng-deep .panels-wrapper,\r\n      :host ::ng-deep .group-panel-wrapper,\r\n      :host ::ng-deep .direct-panel-wrapper {\r\n        min-height: 0;\r\n        height: 100%;\r\n      }\r\n\r\n      @media (max-width: 575px) {\r\n        .ms-modern-messages-modal__header {\r\n          padding: 18px 18px 0;\r\n        }\r\n\r\n        .ms-modern-messages-modal__tabs,\r\n        .ms-modern-messages-modal__body {\r\n          margin-left: 18px;\r\n          margin-right: 18px;\r\n          padding-left: 0;\r\n          padding-right: 0;\r\n          padding-bottom: 18px;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernMessagesModalComponent implements OnInit, OnChanges {\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 = 'var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94))';\r\n  @Input() activeTabBackgroundColor = 'var(--ms-modern-accent, #1476d2)';\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  @Input() updateDirectMessageDetails = (_participant: Participant | null) => {};\r\n  @Input() showAlert?: ShowAlert;\r\n  @Input() roomName = '';\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input() chatSetting = '';\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n\r\n  faTimes = faTimes;\r\n  activeTab: 'group' | 'direct' = 'direct';\r\n  focusedInput = false;\r\n  directMessages: Message[] = [];\r\n  groupMessages: Message[] = [];\r\n\r\n  constructor(private readonly sendMessageService: SendMessage) {}\r\n\r\n  ngOnInit() {\r\n    this.ensureSendMessageHandler();\r\n    this.syncState();\r\n  }\r\n\r\n  ngOnChanges(_changes: SimpleChanges) {\r\n    this.ensureSendMessageHandler();\r\n    this.syncState();\r\n  }\r\n\r\n  isVisible(): boolean {\r\n    return this.isEmbedded() || this.isMessagesModalVisible;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  supportsDirectMessages(): boolean {\r\n    return this.eventType === 'webinar' || this.eventType === 'conference';\r\n  }\r\n\r\n  switchToDirectTab() {\r\n    this.activeTab = 'direct';\r\n    this.focusedInput = true;\r\n  }\r\n\r\n  switchToGroupTab() {\r\n    this.activeTab = 'group';\r\n    this.focusedInput = false;\r\n    this.updateStartDirectMessage(false);\r\n  }\r\n\r\n  closeMessagesModal() {\r\n    this.onMessagesClose();\r\n  }\r\n\r\n  handleOverlayClick() {\r\n    if (!this.isEmbedded()) {\r\n      this.closeMessagesModal();\r\n    }\r\n  }\r\n\r\n  resolvedSendMessageHandler(): (options: SendMessageOptions) => Promise<void> {\r\n    return this.onSendMessagePress ?? this.sendMessageService.sendMessage.bind(this.sendMessageService);\r\n  }\r\n\r\n  resolvedOverlayStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'static',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          height: '100%',\r\n          minHeight: 0,\r\n          display: 'block',\r\n          background: 'transparent',\r\n          zIndex: 'auto',\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          inset: 0,\r\n          width: '100%',\r\n          height: '100%',\r\n          background: 'rgba(5, 9, 20, 0.56)',\r\n          zIndex: 999,\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.overlayStyle) };\r\n  }\r\n\r\n  resolvedContentStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'relative',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          maxWidth: 'none',\r\n          height: '100%',\r\n          maxHeight: 'none',\r\n          margin: 0,\r\n          background: this.backgroundColor,\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          top: this.position.includes('top') ? '16px' : 'auto',\r\n          bottom: this.position.includes('bottom') ? '16px' : 'auto',\r\n          left: this.position.includes('Left') ? '16px' : 'auto',\r\n          right: this.position.includes('Right') ? '16px' : 'auto',\r\n          width: 'min(460px, calc(100% - 32px))',\r\n          maxWidth: 'calc(100% - 32px)',\r\n          maxHeight: 'calc(100% - 32px)',\r\n          background: this.backgroundColor,\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.contentStyle) };\r\n  }\r\n\r\n  private ensureSendMessageHandler() {\r\n    if (!this.onSendMessagePress) {\r\n      this.onSendMessagePress = this.sendMessageService.sendMessage.bind(this.sendMessageService);\r\n    }\r\n  }\r\n\r\n  private syncState() {\r\n    if (!this.supportsDirectMessages()) {\r\n      this.activeTab = 'group';\r\n      this.focusedInput = false;\r\n    } else if (this.startDirectMessage && this.directMessageDetails) {\r\n      this.activeTab = 'direct';\r\n      this.focusedInput = true;\r\n    } else if (this.activeTab !== 'direct' && this.activeTab !== 'group') {\r\n      this.activeTab = 'direct';\r\n      this.focusedInput = true;\r\n    }\r\n\r\n    this.populateMessages();\r\n  }\r\n\r\n  private populateMessages() {\r\n    let chatValue = false;\r\n    try {\r\n      chatValue =\r\n        this.coHostResponsibility.find((item) => item.name === 'chat')?.value || false;\r\n    } catch {\r\n      chatValue = false;\r\n    }\r\n\r\n    this.directMessages = (this.messages ?? []).filter(\r\n      (message) =>\r\n        !message.group &&\r\n        (\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    );\r\n\r\n    this.groupMessages = (this.messages ?? []).filter((message) => message.group);\r\n  }\r\n\r\n  private normalizeStyle(\r\n    style?: Partial<CSSStyleDeclaration>,\r\n  ): Record<string, string | number> {\r\n    return style ? ({ ...style } as Record<string, string | number>) : {};\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nimport {\r\n  HandleCreatePollType,\r\n  HandleEndPollType,\r\n  HandleVotePollType,\r\n  Poll,\r\n  ShowAlert,\r\n} from '../../@types/types';\r\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../utils/render-mode.utils';\r\n\r\ninterface NewPollFormState {\r\n  options: string[];\r\n  question: string;\r\n  type: '' | 'custom' | 'trueFalse' | 'yesNo';\r\n}\r\n\r\n@Component({\r\n  selector: 'app-poll-modal',\r\n  imports: [CommonModule, FontAwesomeModule, FormsModule],\r\n  template: `\r\n    <ng-container *ngIf=\"isVisible() && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            isPollModalVisible: isPollModalVisible,\r\n            onClose: onClose,\r\n            position: position,\r\n            backgroundColor: backgroundColor,\r\n            member: member,\r\n            islevel: islevel,\r\n            polls: polls,\r\n            poll: poll,\r\n            socket: socket,\r\n            roomName: roomName,\r\n            showAlert: showAlert,\r\n            updateIsPollModalVisible: updateIsPollModalVisible,\r\n            handleCreatePoll: handleCreatePoll,\r\n            handleEndPoll: handleEndPoll,\r\n            handleVotePoll: handleVotePoll\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isVisible() && !customTemplate\"\r\n      class=\"ms-modern-poll-overlay\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n    >\r\n      <section class=\"ms-modern-poll\" [ngStyle]=\"resolvedContentStyle()\">\r\n        <header *ngIf=\"showHeader\" class=\"ms-modern-poll__header\">\r\n          <div class=\"ms-modern-poll__heading\">\r\n            <span class=\"ms-modern-poll__eyebrow\">Audience interaction</span>\r\n            <h2 class=\"ms-modern-poll__title\">Polls</h2>\r\n            <p class=\"ms-modern-poll__subtitle\">\r\n              Create polls, track current responses, and review completed results in one place.\r\n            </p>\r\n          </div>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-poll__close\"\r\n            aria-label=\"Close polls\"\r\n            (click)=\"onClose()\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div class=\"ms-modern-poll__body\" [class.ms-modern-poll__body--embedded]=\"isEmbedded()\">\r\n          <div *ngIf=\"isEmbedded()\" class=\"ms-modern-poll__tabs\" role=\"tablist\" aria-label=\"Poll views\">\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-poll__tab\"\r\n              [class.ms-modern-poll__tab--active]=\"activeTab === 'active'\"\r\n              (click)=\"setActiveTab('active')\"\r\n            >\r\n              Active\r\n            </button>\r\n            <button\r\n              *ngIf=\"canCreatePoll()\"\r\n              type=\"button\"\r\n              class=\"ms-modern-poll__tab\"\r\n              [class.ms-modern-poll__tab--active]=\"activeTab === 'create'\"\r\n              (click)=\"setActiveTab('create')\"\r\n            >\r\n              Create\r\n            </button>\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-poll__tab\"\r\n              [class.ms-modern-poll__tab--active]=\"activeTab === 'history'\"\r\n              (click)=\"setActiveTab('history')\"\r\n            >\r\n              History\r\n            </button>\r\n          </div>\r\n\r\n          <ng-container *ngIf=\"isEmbedded(); else stackedPollLayout\">\r\n            <article *ngIf=\"activeTab === 'active'\" class=\"ms-modern-poll__card\">\r\n              <div class=\"ms-modern-poll__card-header\">\r\n                <h3>Current poll</h3>\r\n              </div>\r\n              <ng-container *ngTemplateOutlet=\"currentPollTemplate\"></ng-container>\r\n            </article>\r\n\r\n            <article *ngIf=\"activeTab === 'create' && canCreatePoll()\" class=\"ms-modern-poll__card\">\r\n              <div class=\"ms-modern-poll__card-header\">\r\n                <h3>Create a new poll</h3>\r\n              </div>\r\n              <ng-container *ngTemplateOutlet=\"createPollTemplate\"></ng-container>\r\n            </article>\r\n\r\n            <article *ngIf=\"activeTab === 'history'\" class=\"ms-modern-poll__card\">\r\n              <div class=\"ms-modern-poll__card-header\">\r\n                <h3>Previous polls</h3>\r\n                <span>{{ polls.length }}</span>\r\n              </div>\r\n              <ng-container *ngTemplateOutlet=\"historyPollTemplate\"></ng-container>\r\n            </article>\r\n          </ng-container>\r\n\r\n          <ng-template #stackedPollLayout>\r\n            <section *ngIf=\"canCreatePoll()\" class=\"ms-modern-poll__stack\">\r\n              <article class=\"ms-modern-poll__card\">\r\n                <div class=\"ms-modern-poll__card-header\">\r\n                  <h3>Previous polls</h3>\r\n                  <span>{{ polls.length }}</span>\r\n                </div>\r\n                <ng-container *ngTemplateOutlet=\"historyPollTemplate\"></ng-container>\r\n              </article>\r\n\r\n              <article class=\"ms-modern-poll__card\">\r\n                <div class=\"ms-modern-poll__card-header\">\r\n                  <h3>Create a new poll</h3>\r\n                </div>\r\n                <ng-container *ngTemplateOutlet=\"createPollTemplate\"></ng-container>\r\n              </article>\r\n            </section>\r\n\r\n            <article class=\"ms-modern-poll__card\">\r\n              <div class=\"ms-modern-poll__card-header\">\r\n                <h3>Current poll</h3>\r\n              </div>\r\n              <ng-container *ngTemplateOutlet=\"currentPollTemplate\"></ng-container>\r\n            </article>\r\n          </ng-template>\r\n\r\n          <ng-template #historyPollTemplate>\r\n            <div *ngIf=\"polls.length === 0\" class=\"ms-modern-poll__empty-state\">\r\n              {{ isEmbedded() ? 'No previous polls.' : 'No polls available yet.' }}\r\n            </div>\r\n\r\n            <div *ngFor=\"let polled of polls\" class=\"ms-modern-poll__history-item\">\r\n              <ng-container *ngIf=\"!poll || polled.id !== poll.id || poll.status !== 'active'\">\r\n                <strong>{{ polled.question }}</strong>\r\n                <ul class=\"ms-modern-poll__results\">\r\n                  <li *ngFor=\"let option of polled.options; let i = index\">\r\n                    <span>{{ option }}</span>\r\n                    <span>{{ polled.votes[i] }} votes ({{ calculatePercentage(polled.votes, i) }}%)</span>\r\n                  </li>\r\n                </ul>\r\n                <button\r\n                  *ngIf=\"polled.status === 'active'\"\r\n                  type=\"button\"\r\n                  class=\"ms-modern-poll__inline-action ms-modern-poll__inline-action--danger\"\r\n                  (click)=\"handledEndPoll(polled.id)\"\r\n                >\r\n                  End poll\r\n                </button>\r\n              </ng-container>\r\n            </div>\r\n          </ng-template>\r\n\r\n          <ng-template #createPollTemplate>\r\n            <form class=\"ms-modern-poll__form\" (ngSubmit)=\"validateAndCreatePoll()\">\r\n              <label class=\"ms-modern-poll__field\">\r\n                <span>Poll question</span>\r\n                <textarea\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              </label>\r\n\r\n              <label class=\"ms-modern-poll__field\">\r\n                <span>Answer type</span>\r\n                <select\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              </label>\r\n\r\n              <div\r\n                *ngIf=\"newPoll.type === 'trueFalse' || newPoll.type === 'yesNo'\"\r\n                class=\"ms-modern-poll__preset-list\"\r\n              >\r\n                <label *ngFor=\"let option of newPoll.options\" class=\"ms-modern-poll__choice-chip\">\r\n                  <input type=\"radio\" name=\"pollOptionPreset\" [value]=\"option.toLowerCase()\" />\r\n                  <span>{{ option }}</span>\r\n                </label>\r\n              </div>\r\n\r\n              <div *ngIf=\"newPoll.type === 'custom'\" class=\"ms-modern-poll__custom-options\">\r\n                <label\r\n                  *ngFor=\"let option of newPoll.options; let i = index\"\r\n                  class=\"ms-modern-poll__field\"\r\n                >\r\n                  <span>Option {{ i + 1 }}</span>\r\n                  <input\r\n                    type=\"text\"\r\n                    maxlength=\"50\"\r\n                    [(ngModel)]=\"newPoll.options[i]\"\r\n                    name=\"option{{ i }}\"\r\n                  />\r\n                </label>\r\n              </div>\r\n\r\n              <button type=\"submit\" class=\"ms-modern-poll__primary-action\">Create poll</button>\r\n            </form>\r\n          </ng-template>\r\n\r\n          <ng-template #currentPollTemplate>\r\n            <ng-container *ngIf=\"poll && poll.status === 'active'; else noActivePollTemplate\">\r\n              <strong class=\"ms-modern-poll__question\">{{ poll.question }}</strong>\r\n\r\n              <div *ngFor=\"let option of poll.options; let i = index\" class=\"ms-modern-poll__live-option\">\r\n                <label class=\"ms-modern-poll__live-choice\">\r\n                  <input\r\n                    type=\"radio\"\r\n                    name=\"pollOptionLive\"\r\n                    [value]=\"i\"\r\n                    [checked]=\"poll.voters?.[member] === i\"\r\n                    (change)=\"handledVotePoll(poll.id, i)\"\r\n                  />\r\n                  <span>{{ option }}</span>\r\n                </label>\r\n              </div>\r\n\r\n              <button\r\n                *ngIf=\"poll.status === 'active' && canCreatePoll()\"\r\n                type=\"button\"\r\n                class=\"ms-modern-poll__inline-action ms-modern-poll__inline-action--danger\"\r\n                (click)=\"handledEndPoll(poll.id)\"\r\n              >\r\n                End active poll\r\n              </button>\r\n            </ng-container>\r\n\r\n            <ng-template #noActivePollTemplate>\r\n              <div class=\"ms-modern-poll__empty-state\">No active poll.</div>\r\n            </ng-template>\r\n          </ng-template>\r\n        </div>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-poll-overlay {\r\n        position: fixed;\r\n        inset: 0;\r\n        background: rgba(2, 8, 23, 0.66);\r\n        backdrop-filter: blur(10px);\r\n        z-index: 999;\r\n      }\r\n\r\n      .ms-modern-poll {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: column;\r\n        overflow: hidden;\r\n        border-radius: 28px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: linear-gradient(\r\n          180deg,\r\n          var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96)) 0%,\r\n          var(--ms-modern-panel-surface, rgba(248, 250, 252, 0.95)) 100%\r\n        );\r\n        box-shadow: 0 28px 70px rgba(15, 23, 42, 0.28);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n      }\r\n\r\n      .ms-modern-poll * {\r\n        box-sizing: border-box;\r\n      }\r\n\r\n      .ms-modern-poll__header {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        gap: 16px;\r\n        padding: 22px 22px 16px;\r\n        border-bottom: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n      }\r\n\r\n      .ms-modern-poll__eyebrow {\r\n        display: block;\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.7rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.12em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-poll__title {\r\n        margin: 6px 0 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1.34rem;\r\n        font-weight: 800;\r\n        line-height: 1.1;\r\n      }\r\n\r\n      .ms-modern-poll__subtitle {\r\n        margin: 8px 0 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        line-height: 1.5;\r\n      }\r\n\r\n      .ms-modern-poll__close {\r\n        width: 40px;\r\n        height: 40px;\r\n        flex: 0 0 auto;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        border-radius: 999px;\r\n        background: rgba(255, 255, 255, 0.4);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-poll__body,\r\n      .ms-modern-poll__stack,\r\n      .ms-modern-poll__form,\r\n      .ms-modern-poll__custom-options {\r\n        display: grid;\r\n        gap: 16px;\r\n      }\r\n\r\n      .ms-modern-poll__body {\r\n        padding: 18px 22px 22px;\r\n        overflow-y: auto;\r\n        overflow-x: hidden;\r\n      }\r\n\r\n      .ms-modern-poll__body--embedded {\r\n        align-content: start;\r\n      }\r\n\r\n      .ms-modern-poll__tabs {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: 8px;\r\n      }\r\n\r\n      .ms-modern-poll__tab {\r\n        min-height: 38px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        border-radius: 999px;\r\n        padding: 0 14px;\r\n        background: rgba(255, 255, 255, 0.72);\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.82rem;\r\n        font-weight: 800;\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-poll__tab--active {\r\n        border-color: transparent;\r\n        background: linear-gradient(\r\n          135deg,\r\n          var(--ms-modern-brand-primary, #4f46e5) 0%,\r\n          var(--ms-modern-brand-secondary, #14b8a6) 100%\r\n        );\r\n        color: #fff;\r\n        box-shadow: 0 14px 24px rgba(79, 70, 229, 0.18);\r\n      }\r\n\r\n      .ms-modern-poll__card {\r\n        display: grid;\r\n        min-width: 0;\r\n        gap: 14px;\r\n        padding: 16px;\r\n        border-radius: 22px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.72);\r\n      }\r\n\r\n      .ms-modern-poll__card-header {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        gap: 12px;\r\n      }\r\n\r\n      .ms-modern-poll__card-header h3,\r\n      .ms-modern-poll__question {\r\n        margin: 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.98rem;\r\n        font-weight: 800;\r\n      }\r\n\r\n      .ms-modern-poll__card-header span {\r\n        min-width: 28px;\r\n        min-height: 28px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        padding: 0 8px;\r\n        border-radius: 999px;\r\n        background: rgba(79, 70, 229, 0.08);\r\n        color: var(--ms-modern-brand-primary, #4f46e5);\r\n        font-size: 0.8rem;\r\n        font-weight: 800;\r\n      }\r\n\r\n      .ms-modern-poll__history-item {\r\n        display: grid;\r\n        gap: 10px;\r\n        padding-top: 12px;\r\n        border-top: 1px solid rgba(148, 163, 184, 0.18);\r\n      }\r\n\r\n      .ms-modern-poll__results {\r\n        margin: 0;\r\n        padding: 0;\r\n        list-style: none;\r\n        display: grid;\r\n        gap: 8px;\r\n      }\r\n\r\n      .ms-modern-poll__results li,\r\n      .ms-modern-poll__live-option {\r\n        display: flex;\r\n        min-width: 0;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        gap: 12px;\r\n        padding: 10px 12px;\r\n        border-radius: 14px;\r\n        background: rgba(255, 255, 255, 0.76);\r\n      }\r\n\r\n      .ms-modern-poll__field {\r\n        display: grid;\r\n        min-width: 0;\r\n        gap: 8px;\r\n      }\r\n\r\n      .ms-modern-poll__field span {\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.76rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.08em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-poll__field textarea,\r\n      .ms-modern-poll__field select,\r\n      .ms-modern-poll__field input {\r\n        width: 100%;\r\n        max-width: 100%;\r\n        min-width: 0;\r\n        min-height: 46px;\r\n        border-radius: 14px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.94);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.92rem;\r\n        font-weight: 600;\r\n        padding: 10px 14px;\r\n      }\r\n\r\n      .ms-modern-poll__field textarea {\r\n        min-height: 92px;\r\n        resize: vertical;\r\n      }\r\n\r\n      .ms-modern-poll__preset-list {\r\n        display: flex;\r\n        flex-wrap: wrap;\r\n        gap: 10px;\r\n      }\r\n\r\n      .ms-modern-poll__choice-chip,\r\n      .ms-modern-poll__live-choice {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        font-weight: 600;\r\n      }\r\n\r\n      .ms-modern-poll__choice-chip {\r\n        padding: 10px 12px;\r\n        border-radius: 999px;\r\n        background: rgba(255, 255, 255, 0.82);\r\n      }\r\n\r\n      .ms-modern-poll__primary-action,\r\n      .ms-modern-poll__inline-action {\r\n        min-height: 42px;\r\n        border-radius: 999px;\r\n        padding: 0 16px;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-poll__primary-action {\r\n        border: none;\r\n        background: linear-gradient(\r\n          135deg,\r\n          var(--ms-modern-brand-primary, #4f46e5) 0%,\r\n          var(--ms-modern-brand-secondary, #14b8a6) 100%\r\n        );\r\n        color: #fff;\r\n      }\r\n\r\n      .ms-modern-poll__inline-action {\r\n        justify-self: flex-start;\r\n        border: none;\r\n        background: rgba(241, 245, 249, 0.92);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n      }\r\n\r\n      .ms-modern-poll__inline-action--danger {\r\n        background: rgba(254, 242, 242, 0.88);\r\n        color: #b91c1c;\r\n      }\r\n\r\n      .ms-modern-poll__empty-state {\r\n        padding: 12px 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.88rem;\r\n      }\r\n\r\n      @media (max-width: 640px) {\r\n        .ms-modern-poll__results li,\r\n        .ms-modern-poll__live-option {\r\n          flex-direction: column;\r\n          align-items: flex-start;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernPollModalComponent implements OnInit, OnChanges {\r\n  @Input() isPollModalVisible = false;\r\n  @Input() onClose: () => void = () => {};\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = 'var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96))';\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 = async () => {};\r\n  @Input() handleEndPoll: HandleEndPollType = async () => {};\r\n  @Input() handleVotePoll: HandleVotePollType = async () => {};\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n\r\n  readonly faTimes = faTimes;\r\n\r\n  activeTab: 'active' | 'create' | 'history' = 'active';\r\n  newPoll: NewPollFormState = { question: '', type: '', options: [] };\r\n\r\n  ngOnInit() {\r\n    this.renderPolls();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['isPollModalVisible'] || changes['polls'] || changes['poll']) {\r\n      this.renderPolls();\r\n    }\r\n\r\n    if (!this.canCreatePoll() && this.activeTab === 'create') {\r\n      this.activeTab = 'active';\r\n    }\r\n  }\r\n\r\n  isVisible(): boolean {\r\n    return this.isEmbedded() || this.isPollModalVisible;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  renderPolls = () => {\r\n    let activePollCount = 0;\r\n\r\n    this.polls.forEach((polled) => {\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 && this.poll && this.poll.status === 'active') {\r\n      this.poll.status = 'inactive';\r\n    }\r\n  };\r\n\r\n  calculatePercentage(votes: number[], optionIndex: number): number {\r\n    const totalVotes = votes.reduce((sum, value) => sum + value, 0);\r\n    return totalVotes > 0 ? parseFloat(((votes[optionIndex] / totalVotes) * 100).toFixed(2)) : 0;\r\n  }\r\n\r\n  handlePollTypeChange(event: Event) {\r\n    const type = (event.target as HTMLSelectElement).value as NewPollFormState['type'];\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 = ['', '', '', '', ''];\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  canCreatePoll(): boolean {\r\n    return this.islevel === '2';\r\n  }\r\n\r\n  setActiveTab(tab: 'active' | 'create' | 'history') {\r\n    if (tab === 'create' && !this.canCreatePoll()) {\r\n      return;\r\n    }\r\n\r\n    this.activeTab = tab;\r\n  }\r\n\r\n  async validateAndCreatePoll() {\r\n    this.newPoll.options = this.newPoll.options.filter((option) => option.trim() !== '');\r\n\r\n    if (this.newPoll.options.length > 0) {\r\n      await this.handleCreatePoll({\r\n        poll: this.newPoll as Poll,\r\n        socket: this.socket,\r\n        roomName: this.roomName,\r\n        showAlert: this.showAlert,\r\n        updateIsPollModalVisible: this.updateIsPollModalVisible,\r\n      });\r\n      this.activeTab = 'active';\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  resolvedOverlayStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'static',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          height: '100%',\r\n          minHeight: 0,\r\n          background: 'transparent',\r\n          zIndex: 'auto',\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          inset: 0,\r\n          width: '100%',\r\n          height: '100%',\r\n          background: 'rgba(2, 8, 23, 0.66)',\r\n          zIndex: 999,\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.overlayStyle) };\r\n  }\r\n\r\n  resolvedContentStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'relative',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          maxWidth: 'none',\r\n          height: '100%',\r\n          maxHeight: 'none',\r\n          margin: 0,\r\n          overflowY: 'auto',\r\n          background: this.backgroundColor,\r\n        }\r\n      : (() => {\r\n          const screenWidth = window.innerWidth;\r\n          let modalWidth = 0.82 * screenWidth;\r\n          if (modalWidth > 460) {\r\n            modalWidth = 460;\r\n          }\r\n\r\n          return {\r\n            position: 'fixed',\r\n            width: `${modalWidth}px`,\r\n            maxHeight: 'min(82vh, 860px)',\r\n            overflowY: 'auto',\r\n            background: this.backgroundColor,\r\n            ...this.resolvePositionStyle(),\r\n          };\r\n        })();\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.contentStyle) };\r\n  }\r\n\r\n  private resolvePositionStyle(): Record<string, string> {\r\n    const normalizedPosition = this.position.toLowerCase();\r\n\r\n    if (normalizedPosition.includes('center')) {\r\n      return {\r\n        top: '50%',\r\n        left: '50%',\r\n        transform: 'translate(-50%, -50%)',\r\n      };\r\n    }\r\n\r\n    return {\r\n      top: this.position.includes('top') ? '16px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '16px' : 'auto',\r\n      left: this.position.includes('Left') ? '16px' : 'auto',\r\n      right: this.position.includes('Right') ? '16px' : 'auto',\r\n    };\r\n  }\r\n\r\n  private normalizeStyle(style?: Partial<CSSStyleDeclaration>): Record<string, string | number> {\r\n    return style ? ({ ...style } as Record<string, string | number>) : {};\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faCheck, faCog, faPlay, faTimes, faVideo } from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport {\r\n  ConfirmRecordingOptions,\r\n  StartRecordingOptions,\r\n} from '../../@types/types';\r\nimport { AdvancedPanelComponent } from '../../components/recording-components/advanced-panel-component/advanced-panel-components.component';\r\nimport {\r\n  RecordingModalParameters,\r\n} from '../../components/recording-components/recording-modal/recording-modal.component';\r\nimport { StandardPanelComponent } from '../../components/recording-components/standard-panel-component/standard-panel-component.component';\r\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../utils/render-mode.utils';\r\n\r\ntype RecordingDisplayAdviceParameters = {\r\n  meetingDisplayType?: string;\r\n  breakOutRoomStarted?: boolean;\r\n  breakOutRoomEnded?: boolean;\r\n  recordingVideoParticipantsFullRoomSupport?: boolean;\r\n  recordingVideoOptions?: string;\r\n  recordingMediaOptions?: string;\r\n};\r\n\r\nconst getRecordingDisplayAdvice = (parameters?: RecordingDisplayAdviceParameters) => {\r\n  if (!parameters) {\r\n    return null;\r\n  }\r\n\r\n  const normalizedRecordingMediaOptions =\r\n    parameters.recordingMediaOptions === 'all' ? 'video' : parameters.recordingMediaOptions;\r\n\r\n  if (\r\n    !parameters.recordingVideoParticipantsFullRoomSupport &&\r\n    parameters.recordingVideoOptions === 'all' &&\r\n    normalizedRecordingMediaOptions === 'video' &&\r\n    parameters.meetingDisplayType === 'all' &&\r\n    !(parameters.breakOutRoomStarted && !parameters.breakOutRoomEnded)\r\n  ) {\r\n    return 'Meeting display is set to All, so this recording may be blocked. To fix it, go back to the main menu, open Display, choose Media, then return here and confirm.';\r\n  }\r\n\r\n  return null;\r\n};\r\n\r\n@Component({\r\n  selector: 'app-recording-modal',\r\n  imports: [CommonModule, FontAwesomeModule, StandardPanelComponent, AdvancedPanelComponent],\r\n  template: `\r\n    <ng-container *ngIf=\"isVisible() && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              isRecordingModalVisible: isRecordingModalVisible,\r\n              backgroundColor: backgroundColor,\r\n              parameters: resolvedParameters,\r\n              onClose: onClose,\r\n              confirm: confirm.bind(this),\r\n              start: start.bind(this)\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isVisible() && !customTemplate\"\r\n      class=\"ms-modern-recording-overlay\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n    >\r\n      <section class=\"ms-modern-recording\" [ngStyle]=\"resolvedContentStyle()\">\r\n        <header *ngIf=\"showHeader\" class=\"ms-modern-recording__header\">\r\n          <div class=\"ms-modern-recording__heading\">\r\n            <span class=\"ms-modern-recording__eyebrow\">Capture controls</span>\r\n            <h2 class=\"ms-modern-recording__title\">Recording Settings</h2>\r\n            <p class=\"ms-modern-recording__subtitle\">\r\n              Configure your layout, overlays, and output options before you start or confirm recording.\r\n            </p>\r\n          </div>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-recording__close\"\r\n            aria-label=\"Close recording settings\"\r\n            (click)=\"onClose()\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div\r\n          class=\"ms-modern-recording__body\"\r\n          [class.ms-modern-recording__body--embedded]=\"isEmbedded()\"\r\n        >\r\n          <div\r\n            *ngIf=\"isEmbedded()\"\r\n            class=\"ms-modern-recording__tabs\"\r\n            role=\"tablist\"\r\n            aria-label=\"Recording settings panels\"\r\n          >\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-recording__tab\"\r\n              [class.ms-modern-recording__tab--active]=\"activePanel === 'standard'\"\r\n              [attr.aria-selected]=\"activePanel === 'standard'\"\r\n              (click)=\"activePanel = 'standard'\"\r\n            >\r\n              <fa-icon [icon]=\"faVideo\"></fa-icon>\r\n              <span>Standard</span>\r\n            </button>\r\n\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-recording__tab\"\r\n              [class.ms-modern-recording__tab--active]=\"activePanel === 'advanced'\"\r\n              [attr.aria-selected]=\"activePanel === 'advanced'\"\r\n              (click)=\"activePanel = 'advanced'\"\r\n            >\r\n              <fa-icon [icon]=\"faCog\"></fa-icon>\r\n              <span>Advanced</span>\r\n            </button>\r\n          </div>\r\n\r\n          <ng-container *ngIf=\"isEmbedded(); else modalRecordingPanels\">\r\n            <section class=\"ms-modern-recording__panel-shell ms-modern-recording__panel-shell--embedded\">\r\n              <app-standard-panel-component\r\n                *ngIf=\"activePanel === 'standard'\"\r\n                [parameters]=\"resolvedParameters\"\r\n              ></app-standard-panel-component>\r\n\r\n              <app-advanced-panel-component\r\n                *ngIf=\"activePanel === 'advanced'\"\r\n                [parameters]=\"resolvedParameters\"\r\n              ></app-advanced-panel-component>\r\n            </section>\r\n          </ng-container>\r\n\r\n          <ng-template #modalRecordingPanels>\r\n            <section class=\"ms-modern-recording__panel-shell\">\r\n              <app-standard-panel-component\r\n                [parameters]=\"resolvedParameters\"\r\n              ></app-standard-panel-component>\r\n            </section>\r\n\r\n            <section class=\"ms-modern-recording__panel-shell\">\r\n              <app-advanced-panel-component\r\n                [parameters]=\"resolvedParameters\"\r\n              ></app-advanced-panel-component>\r\n            </section>\r\n          </ng-template>\r\n        </div>\r\n\r\n        <footer class=\"ms-modern-recording__footer\">\r\n          <div\r\n            *ngIf=\"recordingDisplayAdvice as advice\"\r\n            class=\"ms-modern-recording__advice\"\r\n          >\r\n            <span class=\"ms-modern-recording__advice-label\">Fix before confirming</span>\r\n            <span>{{ advice }}</span>\r\n          </div>\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-recording__action ms-modern-recording__action--confirm\"\r\n            (click)=\"confirm()\"\r\n          >\r\n            <fa-icon [icon]=\"faCheck\"></fa-icon>\r\n            Confirm\r\n          </button>\r\n\r\n          <button\r\n            *ngIf=\"!resolvedParameters.recordPaused\"\r\n            type=\"button\"\r\n            class=\"ms-modern-recording__action ms-modern-recording__action--start\"\r\n            (click)=\"start()\"\r\n          >\r\n            <fa-icon [icon]=\"faPlay\"></fa-icon>\r\n            Start\r\n          </button>\r\n        </footer>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-recording-overlay {\r\n        position: fixed;\r\n        inset: 0;\r\n        background: rgba(2, 8, 23, 0.66);\r\n        backdrop-filter: blur(10px);\r\n        z-index: 999;\r\n      }\r\n\r\n      .ms-modern-recording {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: column;\r\n        overflow: hidden;\r\n        border-radius: 28px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: linear-gradient(\r\n          180deg,\r\n          var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96)) 0%,\r\n          var(--ms-modern-panel-surface, rgba(248, 250, 252, 0.95)) 100%\r\n        );\r\n        box-shadow: 0 28px 70px rgba(15, 23, 42, 0.28);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n      }\r\n\r\n      .ms-modern-recording * {\r\n        box-sizing: border-box;\r\n      }\r\n\r\n      .ms-modern-recording__header {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        gap: 16px;\r\n        padding: 22px 22px 16px;\r\n        border-bottom: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n      }\r\n\r\n      .ms-modern-recording__eyebrow {\r\n        display: block;\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.7rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.12em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-recording__title {\r\n        margin: 6px 0 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1.34rem;\r\n        font-weight: 800;\r\n        line-height: 1.1;\r\n      }\r\n\r\n      .ms-modern-recording__subtitle {\r\n        margin: 8px 0 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        line-height: 1.5;\r\n      }\r\n\r\n      .ms-modern-recording__close {\r\n        width: 40px;\r\n        height: 40px;\r\n        flex: 0 0 auto;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        border-radius: 999px;\r\n        background: rgba(255, 255, 255, 0.4);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-recording__body {\r\n        display: grid;\r\n        gap: 16px;\r\n        padding: 18px 22px;\r\n        overflow-y: auto;\r\n        overflow-x: hidden;\r\n      }\r\n\r\n      .ms-modern-recording__body--embedded {\r\n        display: flex;\r\n        flex-direction: column;\r\n        min-height: 0;\r\n        overflow: hidden;\r\n      }\r\n\r\n      .ms-modern-recording__tabs {\r\n        display: flex;\r\n        gap: 6px;\r\n        padding: 3px;\r\n        border-radius: 16px;\r\n        background: rgba(15, 23, 42, 0.08);\r\n      }\r\n\r\n      .ms-modern-recording__tab {\r\n        flex: 1;\r\n        min-height: 42px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 8px;\r\n        border: none;\r\n        border-radius: 13px;\r\n        background: transparent;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.84rem;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n        transition: background 160ms ease, color 160ms ease, box-shadow 160ms ease;\r\n      }\r\n\r\n      .ms-modern-recording__tab--active {\r\n        background: rgba(255, 255, 255, 0.88);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        box-shadow: 0 1px 4px rgba(15, 23, 42, 0.12);\r\n      }\r\n\r\n      .ms-modern-recording__panel-shell {\r\n        border-radius: 22px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.72);\r\n        padding: 14px;\r\n      }\r\n\r\n      .ms-modern-recording__panel-shell--embedded {\r\n        flex: 1;\r\n        min-height: 0;\r\n        overflow-y: auto;\r\n        overflow-x: hidden;\r\n      }\r\n\r\n      .ms-modern-recording__footer {\r\n        display: grid;\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n        gap: 12px;\r\n        padding: 0 22px 22px;\r\n      }\r\n\r\n      .ms-modern-recording__advice {\r\n        display: grid;\r\n        gap: 4px;\r\n        grid-column: 1 / -1;\r\n        padding: 12px 14px;\r\n        border-radius: 16px;\r\n        border: 1px solid rgba(245, 158, 11, 0.28);\r\n        background: rgba(245, 158, 11, 0.14);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.82rem;\r\n        font-weight: 600;\r\n        line-height: 1.5;\r\n      }\r\n\r\n      .ms-modern-recording__advice-label {\r\n        font-size: 0.68rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.08em;\r\n        text-transform: uppercase;\r\n        color: #b45309;\r\n      }\r\n\r\n      .ms-modern-recording__action {\r\n        min-height: 46px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 8px;\r\n        border-radius: 999px;\r\n        padding: 0 16px;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.92rem;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-recording__action--confirm {\r\n        border: none;\r\n        background: linear-gradient(135deg, #14b8a6 0%, #22c55e 100%);\r\n        color: #fff;\r\n      }\r\n\r\n      .ms-modern-recording__action--start {\r\n        border: none;\r\n        background: linear-gradient(135deg, #f97316 0%, #ef4444 100%);\r\n        color: #fff;\r\n      }\r\n\r\n      :host-context(.ms-modern-dark),\r\n      :host-context([data-theme='dark']) {\r\n        .ms-modern-recording__tabs {\r\n          background: rgba(255, 255, 255, 0.08);\r\n        }\r\n\r\n        .ms-modern-recording__tab {\r\n          color: rgba(226, 232, 240, 0.72);\r\n        }\r\n\r\n        .ms-modern-recording__tab--active {\r\n          background: rgba(255, 255, 255, 0.12);\r\n          color: #f8fafc;\r\n          box-shadow: 0 1px 4px rgba(2, 8, 23, 0.28);\r\n        }\r\n\r\n        .ms-modern-recording__advice-label {\r\n          color: #fbbf24;\r\n        }\r\n      }\r\n\r\n      @media (max-width: 640px) {\r\n        .ms-modern-recording__footer {\r\n          grid-template-columns: 1fr;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernRecordingModalComponent implements OnChanges {\r\n  @Input() isRecordingModalVisible = false;\r\n  @Input() onClose: () => void = () => {};\r\n  @Input() backgroundColor = 'var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96))';\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  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n\r\n  readonly faCheck = faCheck;\r\n  readonly faCog = faCog;\r\n  readonly faPlay = faPlay;\r\n  readonly faTimes = faTimes;\r\n  readonly faVideo = faVideo;\r\n\r\n  resolvedParameters: RecordingModalParameters = {} as RecordingModalParameters;\r\n  activePanel: 'standard' | 'advanced' = 'standard';\r\n\r\n  get recordingDisplayAdvice(): string | null {\r\n    return getRecordingDisplayAdvice(this.resolvedParameters);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (\r\n      this.isVisible() &&\r\n      (changes['isRecordingModalVisible'] || changes['parameters'])\r\n    ) {\r\n      if (changes['isRecordingModalVisible']) {\r\n        this.activePanel = 'standard';\r\n      }\r\n\r\n      this.refreshParameters();\r\n    }\r\n  }\r\n\r\n  isVisible(): boolean {\r\n    return this.isEmbedded() || this.isRecordingModalVisible;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  confirm() {\r\n    this.confirmRecording({\r\n      parameters: { ...this.resolvedParameters },\r\n    });\r\n  }\r\n\r\n  start() {\r\n    this.startRecording({\r\n      parameters: { ...this.resolvedParameters },\r\n    });\r\n  }\r\n\r\n  resolvedOverlayStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'static',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          height: '100%',\r\n          minHeight: 0,\r\n          background: 'transparent',\r\n          zIndex: 'auto',\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          inset: 0,\r\n          width: '100%',\r\n          height: '100%',\r\n          background: 'rgba(2, 8, 23, 0.66)',\r\n          zIndex: 999,\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.overlayStyle) };\r\n  }\r\n\r\n  resolvedContentStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'relative',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          maxWidth: 'none',\r\n          height: '100%',\r\n          maxHeight: 'none',\r\n          margin: 0,\r\n          overflowY: 'auto',\r\n          background: this.backgroundColor,\r\n        }\r\n      : (() => {\r\n          const screenWidth = window.innerWidth;\r\n          let modalWidth = 0.84 * screenWidth;\r\n          if (modalWidth > 420) {\r\n            modalWidth = 420;\r\n          }\r\n\r\n          return {\r\n            position: 'fixed',\r\n            width: `${modalWidth}px`,\r\n            maxHeight: 'min(86vh, 900px)',\r\n            overflowY: 'auto',\r\n            background: this.backgroundColor,\r\n            ...this.resolvePositionStyle(),\r\n          };\r\n        })();\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.contentStyle) };\r\n  }\r\n\r\n  private refreshParameters() {\r\n    this.resolvedParameters = this.parameters?.getUpdatedAllParams\r\n      ? this.parameters.getUpdatedAllParams()\r\n      : this.parameters;\r\n  }\r\n\r\n  private resolvePositionStyle(): Record<string, string> {\r\n    const normalizedPosition = this.position.toLowerCase();\r\n\r\n    if (normalizedPosition.includes('center')) {\r\n      return {\r\n        top: '50%',\r\n        left: '50%',\r\n        transform: 'translate(-50%, -50%)',\r\n      };\r\n    }\r\n\r\n    return {\r\n      top: this.position.includes('top') ? '16px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '16px' : 'auto',\r\n      left: this.position.includes('Left') ? '16px' : 'auto',\r\n      right: this.position.includes('Right') ? '16px' : 'auto',\r\n    };\r\n  }\r\n\r\n  private normalizeStyle(style?: Partial<CSSStyleDeclaration>): Record<string, string | number> {\r\n    return style ? ({ ...style } as Record<string, string | number>) : {};\r\n  }\r\n}","/**\r\n * Custom Component Injection Service\r\n * Manages custom component injection and rendering for MediaSFU Angular components\r\n */\r\n\r\nimport { Injectable, Injector, ComponentRef, ViewContainerRef, Type, ElementRef } from '@angular/core';\r\nimport {\r\n  CustomComponent,\r\n  CustomComponentType,\r\n  CustomComponentFunction,\r\n  CustomComponentParameters,\r\n  CustomComponentContext,\r\n  ComponentInjectionConfig\r\n} from '../@types/custom-component.types';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CustomComponentInjectionService {\r\n\r\n  private defaultConfig: ComponentInjectionConfig = {\r\n    enabled: true,\r\n    overrideDefaults: false,\r\n    fallbackToDefault: true\r\n  };\r\n\r\n  constructor() {}\r\n\r\n  /**\r\n   * Creates an injector with custom parameters for component injection\r\n   * @param parameters Custom parameters to inject\r\n   * @param parentInjector Parent injector to inherit from\r\n   * @returns New injector with custom parameters\r\n   */\r\n  createCustomInjector(\r\n    parameters: CustomComponentParameters,\r\n    parentInjector?: Injector\r\n  ): Injector {\r\n    const providers = Object.keys(parameters).map(key => ({\r\n      provide: key,\r\n      useValue: parameters[key]\r\n    }));\r\n\r\n    return Injector.create({\r\n      providers,\r\n      parent: parentInjector\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Checks if a component is a custom Angular component\r\n   */\r\n  isCustomComponent<T>(comp: CustomComponentType<T>): comp is CustomComponent<T> {\r\n    return comp && typeof comp === 'object' && 'component' in comp && typeof comp.component === 'function';\r\n  }\r\n\r\n  /**\r\n   * Checks if a component is a function-based component\r\n   */\r\n  isFunctionComponent(comp: CustomComponentType): comp is CustomComponentFunction {\r\n    return typeof comp === 'function';\r\n  }\r\n\r\n  /**\r\n   * Checks if a component is an HTML element\r\n   */\r\n  isHTMLElement(comp: CustomComponentType): comp is HTMLElement {\r\n    return comp instanceof HTMLElement;\r\n  }\r\n\r\n  /**\r\n   * Safely gets the outerHTML of an HTMLElement component\r\n   * @param comp Component that could be HTMLElement or CustomComponent\r\n   * @returns outerHTML string or empty string if not HTMLElement\r\n   */\r\n  getHtmlElementOuterHTML<T>(comp: CustomComponentType<T>): string {\r\n    if (!comp || this.isCustomComponent(comp) || this.isFunctionComponent(comp)) {\r\n      return '';\r\n    }\r\n    return this.isHTMLElement(comp) ? comp.outerHTML || '' : '';\r\n  }\r\n\r\n  /**\r\n   * Renders a custom component in the specified container\r\n   * @param customComponent The custom component to render\r\n   * @param container ViewContainerRef where the component should be rendered\r\n   * @param context Component context with parameters and configuration\r\n   * @returns ComponentRef or HTMLElement reference\r\n   */\r\n  renderCustomComponent<T>(\r\n    customComponent: CustomComponentType<T>,\r\n    container: ViewContainerRef,\r\n    context: CustomComponentContext\r\n  ): ComponentRef<T> | HTMLElement | null {\r\n    if (!customComponent || !container) {\r\n      return null;\r\n    }\r\n\r\n    const config = { ...this.defaultConfig, ...context.config };\r\n\r\n    try {\r\n      // Handle Angular Component\r\n      if (this.isCustomComponent(customComponent)) {\r\n        const injector = customComponent.injector ||\r\n          this.createCustomInjector(context.parameters, context.injector);\r\n\r\n        const componentRef = container.createComponent(\r\n          customComponent.component,\r\n          { injector }\r\n        );\r\n\r\n        return componentRef;\r\n      }\r\n\r\n      // Handle Function Component\r\n      if (this.isFunctionComponent(customComponent)) {\r\n        const element = customComponent();\r\n        if (element) {\r\n          const elementRef = container.element.nativeElement;\r\n          elementRef.appendChild(element);\r\n          return element;\r\n        }\r\n      }\r\n\r\n      // Handle HTML Element\r\n      if (this.isHTMLElement(customComponent)) {\r\n        const elementRef = container.element.nativeElement;\r\n        elementRef.appendChild(customComponent);\r\n        return customComponent;\r\n      }\r\n\r\n    } catch (error) {\r\n      console.error('Error rendering custom component:', error);\r\n\r\n      if (config.fallbackToDefault) {\r\n        console.warn('Falling back to default component rendering');\r\n        return null; // Let the calling component handle fallback\r\n      }\r\n\r\n      throw error;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Creates a component object with injector for dynamic component rendering\r\n   * @param componentType Component type\r\n   * @param parameters Parameters to inject\r\n   * @param parentInjector Parent injector\r\n   * @returns Component object with injector\r\n   */\r\n  createComponentWithInjector<T>(\r\n    componentType: Type<T>,\r\n    parameters: CustomComponentParameters = {},\r\n    parentInjector?: Injector\r\n  ): CustomComponent<T> {\r\n    const injector = this.createCustomInjector(parameters, parentInjector);\r\n\r\n    return {\r\n      component: componentType,\r\n      injector\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Validates if a custom component can be rendered\r\n   * @param customComponent Component to validate\r\n   * @returns boolean indicating if component is valid\r\n   */\r\n  validateCustomComponent<T>(customComponent: CustomComponentType<T>): boolean {\r\n    if (!customComponent) {\r\n      return false;\r\n    }\r\n\r\n    if (this.isCustomComponent(customComponent)) {\r\n      return !!customComponent.component;\r\n    }\r\n\r\n    if (this.isFunctionComponent(customComponent)) {\r\n      return true;\r\n    }\r\n\r\n    if (this.isHTMLElement(customComponent)) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Merges custom component options with defaults\r\n   * @param customOptions Custom component options\r\n   * @param defaultOptions Default component options\r\n   * @returns Merged options\r\n   */\r\n  mergeComponentOptions<T>(\r\n    customOptions: Partial<T>,\r\n    defaultOptions: T\r\n  ): T {\r\n    return { ...defaultOptions, ...customOptions };\r\n  }\r\n\r\n  /**\r\n   * Destroys a custom component and cleans up resources\r\n   * @param componentRef Component reference to destroy\r\n   */\r\n  destroyCustomComponent<T>(componentRef: ComponentRef<T> | HTMLElement | null): void {\r\n    if (!componentRef) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      if ('destroy' in componentRef && typeof componentRef.destroy === 'function') {\r\n        // Angular ComponentRef\r\n        componentRef.destroy();\r\n      } else if (componentRef instanceof HTMLElement && componentRef.parentNode) {\r\n        // HTML Element\r\n        componentRef.parentNode.removeChild(componentRef);\r\n      }\r\n    } catch (error) {\r\n      console.error('Error destroying custom component:', error);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Helper method to resolve component from custom or default\r\n   * This is useful for the pattern: customComponent || defaultComponent\r\n   * @param customComponent Custom component (can be undefined)\r\n   * @param defaultComponent Default fallback component\r\n   * @returns The resolved component\r\n   */\r\n  resolveComponent<T>(\r\n    customComponent: CustomComponentType<T> | undefined,\r\n    defaultComponent: CustomComponentType<T>\r\n  ): CustomComponentType<T> {\r\n    return customComponent || defaultComponent;\r\n  }\r\n\r\n  /**\r\n   * Checks if we should use custom main component (for template restructuring)\r\n   * @param customMainComponent Custom main component\r\n   * @returns boolean indicating if custom main component should be used\r\n   */\r\n  shouldUseCustomMainComponent<T>(customMainComponent: CustomComponentType<T> | undefined): boolean {\r\n    return !!customMainComponent;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { receiveRoomMessages as sharedReceiveRoomMessages } from 'mediasfu-shared';\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    return sharedReceiveRoomMessages({\r\n      socket,\r\n      roomName,\r\n      updateMessages,\r\n    } as unknown as Parameters<typeof sharedReceiveRoomMessages>[0]) as Promise<void>;\r\n\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 { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faCheck, faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nimport {\r\n  CoHostResponsibility,\r\n  Participant,\r\n  ShowAlert,\r\n} from '../../@types/types';\r\nimport {\r\n  ModifyCoHostSettings,\r\n  ModifyCoHostSettingsOptions,\r\n} from '../../methods/co-host-methods/modify-co-host-settings.service';\r\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../utils/render-mode.utils';\r\n\r\ninterface ResponsibilityKey {\r\n  dedicateKey: string;\r\n  label: string;\r\n  manageKey: string;\r\n}\r\n\r\n@Component({\r\n  selector: 'app-co-host-modal',\r\n  imports: [CommonModule, FontAwesomeModule, FormsModule],\r\n  template: `\r\n    <ng-container *ngIf=\"isVisible() && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\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          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isVisible() && !customTemplate\"\r\n      class=\"ms-modern-cohost-overlay\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n    >\r\n      <section class=\"ms-modern-cohost\" [ngStyle]=\"resolvedContentStyle()\">\r\n        <header *ngIf=\"showHeader\" class=\"ms-modern-cohost__header\">\r\n          <div class=\"ms-modern-cohost__heading\">\r\n            <span class=\"ms-modern-cohost__eyebrow\">Role delegation</span>\r\n            <h2 class=\"ms-modern-cohost__title\">Manage co-host</h2>\r\n            <p class=\"ms-modern-cohost__subtitle\">\r\n              Assign a co-host and decide which moderation responsibilities they can control.\r\n            </p>\r\n          </div>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-cohost__close\"\r\n            aria-label=\"Close co-host settings\"\r\n            (click)=\"handleClose()\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div class=\"ms-modern-cohost__body\" [class.ms-modern-cohost__body--embedded]=\"isEmbedded()\">\r\n          <ng-container *ngIf=\"isEmbedded(); else modalBody\">\r\n            <section *ngIf=\"hasAssignedCohost()\" class=\"ms-modern-cohost__section\">\r\n              <label class=\"ms-modern-cohost__section-label\">Current Co-Host</label>\r\n              <div class=\"ms-modern-cohost__current\">{{ displayCurrentCohost() }}</div>\r\n            </section>\r\n\r\n            <section class=\"ms-modern-cohost__section\">\r\n              <label class=\"ms-modern-cohost__section-label\" for=\"modern-cohost-select\">\r\n                Select Co-Host\r\n              </label>\r\n              <select\r\n                id=\"modern-cohost-select\"\r\n                class=\"ms-modern-cohost__select ms-modern-cohost__select--embedded\"\r\n                [(ngModel)]=\"selectedCohost\"\r\n              >\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            </section>\r\n\r\n            <section class=\"ms-modern-cohost__section\">\r\n              <label class=\"ms-modern-cohost__section-label\">Responsibilities</label>\r\n              <div class=\"ms-modern-cohost__embedded-list\">\r\n                <article *ngFor=\"let item of responsibilityKeys\" class=\"ms-modern-cohost__embedded-row\">\r\n                  <span class=\"ms-modern-cohost__embedded-name\">{{ item.label }}</span>\r\n\r\n                  <div class=\"ms-modern-cohost__embedded-controls\">\r\n                    <div class=\"ms-modern-cohost__embedded-control\">\r\n                      <span class=\"ms-modern-cohost__embedded-control-label\">Enabled</span>\r\n                      <button\r\n                        type=\"button\"\r\n                        class=\"ms-modern-cohost__check\"\r\n                        [class.ms-modern-cohost__check--active]=\"responsibilities[item.manageKey]\"\r\n                        [attr.aria-pressed]=\"responsibilities[item.manageKey]\"\r\n                        (click)=\"handleToggleSwitch(item.manageKey)\"\r\n                      >\r\n                        <fa-icon *ngIf=\"responsibilities[item.manageKey]\" [icon]=\"faCheck\"></fa-icon>\r\n                      </button>\r\n                    </div>\r\n\r\n                    <div class=\"ms-modern-cohost__embedded-control\">\r\n                      <span class=\"ms-modern-cohost__embedded-control-label\">Dedicated</span>\r\n                      <button\r\n                        type=\"button\"\r\n                        class=\"ms-modern-cohost__check\"\r\n                        [class.ms-modern-cohost__check--active]=\"\r\n                          responsibilities[item.manageKey] && responsibilities[item.dedicateKey]\r\n                        \"\r\n                        [class.ms-modern-cohost__check--disabled]=\"!responsibilities[item.manageKey]\"\r\n                        [disabled]=\"!responsibilities[item.manageKey]\"\r\n                        [attr.aria-pressed]=\"\r\n                          responsibilities[item.manageKey] && responsibilities[item.dedicateKey]\r\n                        \"\r\n                        (click)=\"handleToggleSwitch(item.dedicateKey)\"\r\n                      >\r\n                        <fa-icon\r\n                          *ngIf=\"responsibilities[item.manageKey] && responsibilities[item.dedicateKey]\"\r\n                          [icon]=\"faCheck\"\r\n                        ></fa-icon>\r\n                      </button>\r\n                    </div>\r\n                  </div>\r\n                </article>\r\n              </div>\r\n            </section>\r\n          </ng-container>\r\n\r\n          <ng-template #modalBody>\r\n            <section class=\"ms-modern-cohost__summary-grid\">\r\n              <article class=\"ms-modern-cohost__summary-card\">\r\n                <span class=\"ms-modern-cohost__summary-label\">Current co-host</span>\r\n                <strong class=\"ms-modern-cohost__summary-value\">{{ currentCohost || 'No co-host' }}</strong>\r\n              </article>\r\n\r\n              <article class=\"ms-modern-cohost__summary-card\">\r\n                <label class=\"ms-modern-cohost__summary-label\" for=\"modern-cohost-select-modal\">\r\n                  Select new co-host\r\n                </label>\r\n                <select\r\n                  id=\"modern-cohost-select-modal\"\r\n                  class=\"ms-modern-cohost__select\"\r\n                  [(ngModel)]=\"selectedCohost\"\r\n                >\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              </article>\r\n            </section>\r\n\r\n            <section class=\"ms-modern-cohost__responsibilities\">\r\n              <header class=\"ms-modern-cohost__table-header\">\r\n                <span>Responsibility</span>\r\n                <span>Enable</span>\r\n                <span>Dedicated</span>\r\n              </header>\r\n\r\n              <article\r\n                *ngFor=\"let item of responsibilityKeys\"\r\n                class=\"ms-modern-cohost__responsibility-row\"\r\n              >\r\n                <div class=\"ms-modern-cohost__responsibility-copy\">\r\n                  <strong>{{ item.label }}</strong>\r\n                  <p>Allow the co-host to manage {{ item.label.toLowerCase() }} controls.</p>\r\n                </div>\r\n\r\n                <label class=\"ms-modern-cohost__toggle\" aria-label=\"Enable responsibility\">\r\n                  <input\r\n                    type=\"checkbox\"\r\n                    [(ngModel)]=\"responsibilities[item.manageKey]\"\r\n                    (change)=\"handleToggleSwitch(item.manageKey)\"\r\n                  />\r\n                  <span></span>\r\n                </label>\r\n\r\n                <label class=\"ms-modern-cohost__toggle\" aria-label=\"Dedicated responsibility\">\r\n                  <input\r\n                    type=\"checkbox\"\r\n                    [(ngModel)]=\"responsibilities[item.dedicateKey]\"\r\n                    (change)=\"handleToggleSwitch(item.dedicateKey)\"\r\n                    [disabled]=\"!responsibilities[item.manageKey]\"\r\n                  />\r\n                  <span></span>\r\n                </label>\r\n              </article>\r\n            </section>\r\n          </ng-template>\r\n        </div>\r\n\r\n        <footer class=\"ms-modern-cohost__footer\" [class.ms-modern-cohost__footer--embedded]=\"isEmbedded()\">\r\n          <ng-container *ngIf=\"isEmbedded(); else modalFooter\">\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-cohost__action ms-modern-cohost__action--primary ms-modern-cohost__action--embedded\"\r\n              (click)=\"handleSave()\"\r\n            >\r\n              Save Changes\r\n            </button>\r\n          </ng-container>\r\n\r\n          <ng-template #modalFooter>\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-cohost__action ms-modern-cohost__action--secondary\"\r\n              (click)=\"handleClose()\"\r\n            >\r\n              Cancel\r\n            </button>\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-cohost__action ms-modern-cohost__action--primary\"\r\n              (click)=\"handleSave()\"\r\n            >\r\n              Save co-host\r\n            </button>\r\n          </ng-template>\r\n        </footer>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-cohost-overlay {\r\n        position: fixed;\r\n        inset: 0;\r\n        background: rgba(2, 8, 23, 0.66);\r\n        backdrop-filter: blur(10px);\r\n        z-index: 999;\r\n      }\r\n\r\n      .ms-modern-cohost {\r\n        display: flex;\r\n        flex-direction: column;\r\n        overflow: hidden;\r\n        border-radius: 28px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: linear-gradient(\r\n          180deg,\r\n          var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96)) 0%,\r\n          var(--ms-modern-panel-surface, rgba(248, 250, 252, 0.95)) 100%\r\n        );\r\n        box-shadow: 0 28px 70px rgba(15, 23, 42, 0.28);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n      }\r\n\r\n      .ms-modern-cohost__header {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        gap: 16px;\r\n        padding: 22px 22px 16px;\r\n        border-bottom: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n      }\r\n\r\n      .ms-modern-cohost__eyebrow {\r\n        display: block;\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.7rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.12em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-cohost__title {\r\n        margin: 6px 0 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1.34rem;\r\n        font-weight: 800;\r\n        line-height: 1.1;\r\n      }\r\n\r\n      .ms-modern-cohost__subtitle {\r\n        margin: 8px 0 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        line-height: 1.5;\r\n      }\r\n\r\n      .ms-modern-cohost__close {\r\n        width: 40px;\r\n        height: 40px;\r\n        flex: 0 0 auto;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        border-radius: 999px;\r\n        background: rgba(255, 255, 255, 0.4);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-cohost__body {\r\n        display: grid;\r\n        gap: 18px;\r\n        padding: 18px 22px;\r\n      }\r\n\r\n      .ms-modern-cohost__body--embedded {\r\n        display: flex;\r\n        flex-direction: column;\r\n      }\r\n\r\n      .ms-modern-cohost__section {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 10px;\r\n      }\r\n\r\n      .ms-modern-cohost__section-label {\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        font-weight: 800;\r\n      }\r\n\r\n      .ms-modern-cohost__current,\r\n      .ms-modern-cohost__embedded-row {\r\n        border-radius: 18px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.72);\r\n      }\r\n\r\n      .ms-modern-cohost__current {\r\n        padding: 14px 16px;\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.95rem;\r\n        font-weight: 700;\r\n      }\r\n\r\n      .ms-modern-cohost__summary-grid {\r\n        display: grid;\r\n        gap: 14px;\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n      }\r\n\r\n      .ms-modern-cohost__summary-card,\r\n      .ms-modern-cohost__responsibility-row {\r\n        border-radius: 20px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.72);\r\n      }\r\n\r\n      .ms-modern-cohost__summary-card {\r\n        display: grid;\r\n        gap: 10px;\r\n        padding: 16px;\r\n      }\r\n\r\n      .ms-modern-cohost__summary-label {\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.76rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.08em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-cohost__summary-value {\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1rem;\r\n        font-weight: 800;\r\n      }\r\n\r\n      .ms-modern-cohost__select {\r\n        width: 100%;\r\n        min-height: 46px;\r\n        appearance: none;\r\n        -webkit-appearance: none;\r\n        -moz-appearance: none;\r\n        border-radius: 16px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background:\r\n          linear-gradient(180deg, rgba(255, 255, 255, 0.98), rgba(244, 248, 255, 0.96));\r\n        background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M5 7.5L10 12.5L15 7.5' stroke='%233b4e68' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");\r\n        background-repeat: no-repeat;\r\n        background-position: right 14px center;\r\n        background-size: 14px 14px;\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.92rem;\r\n        font-weight: 600;\r\n        line-height: 1.35;\r\n        padding: 0 42px 0 14px;\r\n        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.7), 0 10px 22px rgba(15, 23, 42, 0.05);\r\n        transition:\r\n          border-color 160ms ease,\r\n          box-shadow 160ms ease,\r\n          transform 160ms ease;\r\n      }\r\n\r\n      .ms-modern-cohost__select--embedded {\r\n        background-color: rgba(255, 255, 255, 0.96);\r\n      }\r\n\r\n      .ms-modern-cohost__select:hover {\r\n        border-color: rgba(79, 70, 229, 0.26);\r\n        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.78), 0 14px 28px rgba(79, 70, 229, 0.08);\r\n      }\r\n\r\n      .ms-modern-cohost__select:focus {\r\n        outline: none;\r\n        border-color: rgba(79, 70, 229, 0.34);\r\n        box-shadow:\r\n          0 0 0 4px rgba(79, 70, 229, 0.1),\r\n          inset 0 1px 0 rgba(255, 255, 255, 0.82),\r\n          0 16px 32px rgba(79, 70, 229, 0.1);\r\n      }\r\n\r\n      .ms-modern-cohost__select option {\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        background: #ffffff;\r\n      }\r\n\r\n      .ms-modern-cohost__responsibilities {\r\n        display: grid;\r\n        gap: 12px;\r\n      }\r\n\r\n      .ms-modern-cohost__embedded-list {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 12px;\r\n      }\r\n\r\n      .ms-modern-cohost__embedded-row {\r\n        display: grid;\r\n        grid-template-columns: minmax(0, 1fr);\r\n        align-items: start;\r\n        gap: 12px;\r\n        padding: 14px 16px;\r\n      }\r\n\r\n      .ms-modern-cohost__embedded-name {\r\n        min-width: 0;\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.92rem;\r\n        font-weight: 800;\r\n        line-height: 1.25;\r\n      }\r\n\r\n      .ms-modern-cohost__embedded-controls {\r\n        display: grid;\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n        gap: 10px;\r\n        width: 100%;\r\n      }\r\n\r\n      .ms-modern-cohost__embedded-control {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        gap: 12px;\r\n        min-width: 0;\r\n        padding: 10px 12px;\r\n        border-radius: 14px;\r\n        border: 1px solid rgba(148, 163, 184, 0.18);\r\n        background: rgba(255, 255, 255, 0.68);\r\n      }\r\n\r\n      .ms-modern-cohost__embedded-control-label {\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.74rem;\r\n        font-weight: 800;\r\n        line-height: 1.2;\r\n      }\r\n\r\n      .ms-modern-cohost__check {\r\n        width: 20px;\r\n        height: 20px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 4px;\r\n        border: 2px solid rgba(148, 163, 184, 0.5);\r\n        background: transparent;\r\n        color: #fff;\r\n        cursor: pointer;\r\n        transition: all 0.2s ease;\r\n      }\r\n\r\n      .ms-modern-cohost__check--active {\r\n        border-color: transparent;\r\n        background: #22c55e;\r\n      }\r\n\r\n      .ms-modern-cohost__check--disabled {\r\n        opacity: 0.4;\r\n        cursor: not-allowed;\r\n      }\r\n\r\n      .ms-modern-cohost__table-header,\r\n      .ms-modern-cohost__responsibility-row {\r\n        display: grid;\r\n        grid-template-columns: minmax(0, 1fr) 84px 84px;\r\n        gap: 12px;\r\n        align-items: center;\r\n      }\r\n\r\n      .ms-modern-cohost__table-header {\r\n        padding: 0 8px;\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.76rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.08em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-cohost__responsibility-row {\r\n        padding: 16px;\r\n      }\r\n\r\n      .ms-modern-cohost__responsibility-copy strong {\r\n        display: block;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.95rem;\r\n        font-weight: 800;\r\n      }\r\n\r\n      .ms-modern-cohost__responsibility-copy p {\r\n        margin: 4px 0 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.82rem;\r\n        line-height: 1.45;\r\n      }\r\n\r\n      .ms-modern-cohost__toggle {\r\n        display: inline-flex;\r\n        justify-content: center;\r\n      }\r\n\r\n      .ms-modern-cohost__toggle input {\r\n        position: absolute;\r\n        opacity: 0;\r\n        pointer-events: none;\r\n      }\r\n\r\n      .ms-modern-cohost__toggle span {\r\n        position: relative;\r\n        width: 52px;\r\n        height: 30px;\r\n        display: inline-block;\r\n        border-radius: 999px;\r\n        background: rgba(148, 163, 184, 0.4);\r\n        transition: background 0.2s ease;\r\n      }\r\n\r\n      .ms-modern-cohost__toggle span::after {\r\n        content: '';\r\n        position: absolute;\r\n        top: 4px;\r\n        left: 4px;\r\n        width: 22px;\r\n        height: 22px;\r\n        border-radius: 50%;\r\n        background: #fff;\r\n        box-shadow: 0 8px 18px rgba(15, 23, 42, 0.16);\r\n        transition: transform 0.2s ease;\r\n      }\r\n\r\n      .ms-modern-cohost__toggle input:checked + span {\r\n        background: linear-gradient(\r\n          135deg,\r\n          var(--ms-modern-brand-primary, #4f46e5) 0%,\r\n          var(--ms-modern-brand-secondary, #14b8a6) 100%\r\n        );\r\n      }\r\n\r\n      .ms-modern-cohost__toggle input:checked + span::after {\r\n        transform: translateX(22px);\r\n      }\r\n\r\n      .ms-modern-cohost__toggle input:disabled + span {\r\n        opacity: 0.45;\r\n      }\r\n\r\n      .ms-modern-cohost__footer {\r\n        display: grid;\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n        gap: 12px;\r\n        padding: 0 22px 22px;\r\n      }\r\n\r\n      .ms-modern-cohost__footer--embedded {\r\n        grid-template-columns: 1fr;\r\n      }\r\n\r\n      .ms-modern-cohost__action {\r\n        min-height: 46px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 999px;\r\n        padding: 0 16px;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.92rem;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-cohost__action--secondary {\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.64);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n      }\r\n\r\n      .ms-modern-cohost__action--primary {\r\n        border: none;\r\n        background: linear-gradient(\r\n          135deg,\r\n          var(--ms-modern-brand-primary, #4f46e5) 0%,\r\n          var(--ms-modern-brand-secondary, #14b8a6) 55%,\r\n          var(--ms-modern-accent, #f59e0b) 100%\r\n        );\r\n        color: #fff;\r\n        box-shadow: 0 18px 34px rgba(79, 70, 229, 0.18);\r\n      }\r\n\r\n      .ms-modern-cohost__action--embedded {\r\n        width: 100%;\r\n      }\r\n\r\n      @media (max-width: 640px) {\r\n        .ms-modern-cohost__summary-grid,\r\n        .ms-modern-cohost__footer {\r\n          grid-template-columns: 1fr;\r\n        }\r\n\r\n        .ms-modern-cohost__embedded-controls {\r\n          grid-template-columns: 1fr;\r\n        }\r\n\r\n        .ms-modern-cohost__table-header {\r\n          display: none;\r\n        }\r\n\r\n        .ms-modern-cohost__responsibility-row {\r\n          grid-template-columns: 1fr;\r\n        }\r\n\r\n        .ms-modern-cohost__toggle {\r\n          justify-content: flex-start;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernCoHostModalComponent 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 = 'var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96))';\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() onCoHostClose: () => void = () => {};\r\n  @Input() onModifyCoHost?: (settings: ModifyCoHostSettingsOptions) => void;\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n  @Input() parameters?: unknown;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n\r\n  readonly faCheck = faCheck;\r\n  readonly faTimes = faTimes;\r\n\r\n  selectedCohost = this.currentCohost;\r\n  responsibilityKeys: ResponsibilityKey[] = [];\r\n  responsibilities: Record<string, boolean> = {};\r\n\r\n  private coHostResponsibilityCopy: CoHostResponsibility[] = [];\r\n  private modalWidth = 400;\r\n\r\n  constructor(private readonly modifyCoHostSettingsService: ModifyCoHostSettings) {}\r\n\r\n  ngOnInit() {\r\n    if (!this.onModifyCoHost) {\r\n      this.onModifyCoHost = (settings) =>\r\n        this.modifyCoHostSettingsService.modifyCoHostSettings(settings);\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (\r\n      this.isVisible() &&\r\n      (changes['isCoHostModalVisible'] ||\r\n        changes['coHostResponsibility'] ||\r\n        changes['currentCohost'] ||\r\n        changes['participants'])\r\n    ) {\r\n      this.initializeResponsibilities();\r\n      this.calculateModalWidth();\r\n    }\r\n  }\r\n\r\n  isVisible(): boolean {\r\n    return this.isEmbedded() || this.isCoHostModalVisible;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  get filteredParticipants(): Participant[] {\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 responsibility = this.findResponsibility(responsibilityName);\r\n      if (!responsibility || !responsibility.value) {\r\n        return;\r\n      }\r\n\r\n      responsibility.dedicated = !responsibility.dedicated;\r\n      this.responsibilities[key] = responsibility.dedicated;\r\n      return;\r\n    }\r\n\r\n    const responsibilityName = key.replace('manage', '').toLowerCase();\r\n    const responsibility = this.findResponsibility(responsibilityName);\r\n    if (!responsibility) {\r\n      return;\r\n    }\r\n\r\n    responsibility.value = !responsibility.value;\r\n    this.responsibilities[key] = responsibility.value;\r\n\r\n    if (!responsibility.value) {\r\n      responsibility.dedicated = false;\r\n      const dedicateKey = `dedicateToManage${this.formatLabel(responsibility.name)}`;\r\n      this.responsibilities[dedicateKey] = false;\r\n    }\r\n  }\r\n\r\n  async handleSave() {\r\n    await Promise.resolve(\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    if (this.isEmbedded()) {\r\n      this.handleClose();\r\n    }\r\n  }\r\n\r\n  handleClose() {\r\n    this.onCoHostClose();\r\n  }\r\n\r\n  hasAssignedCohost(): boolean {\r\n    return this.displayCurrentCohost().length > 0;\r\n  }\r\n\r\n  displayCurrentCohost(): string {\r\n    const currentCohost = this.currentCohost?.trim() ?? '';\r\n    const normalizedValue = currentCohost.replace(/[\\s-]/g, '').toLowerCase();\r\n\r\n    if (!currentCohost || normalizedValue === 'nocohost') {\r\n      return '';\r\n    }\r\n\r\n    return currentCohost;\r\n  }\r\n\r\n  resolvedOverlayStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'static',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          height: '100%',\r\n          minHeight: 0,\r\n          background: 'transparent',\r\n          zIndex: 'auto',\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          inset: 0,\r\n          width: '100%',\r\n          height: '100%',\r\n          background: 'rgba(2, 8, 23, 0.66)',\r\n          zIndex: 999,\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.overlayStyle) };\r\n  }\r\n\r\n  resolvedContentStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'relative',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          maxWidth: 'none',\r\n          height: '100%',\r\n          maxHeight: 'none',\r\n          margin: 0,\r\n          overflowX: 'hidden',\r\n          overflowY: 'auto',\r\n          background: this.backgroundColor,\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          width: `${this.modalWidth}px`,\r\n          maxHeight: 'min(82vh, 760px)',\r\n          overflowX: 'hidden',\r\n          overflowY: 'auto',\r\n          background: this.backgroundColor,\r\n          ...this.resolvePositionStyle(),\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.contentStyle) };\r\n  }\r\n\r\n  private calculateModalWidth() {\r\n    const screenWidth = window.innerWidth;\r\n    let nextWidth = 0.84 * screenWidth;\r\n    if (nextWidth > 520) {\r\n      nextWidth = 520;\r\n    }\r\n    this.modalWidth = nextWidth;\r\n  }\r\n\r\n  private findResponsibility(name: string): CoHostResponsibility | undefined {\r\n    return this.coHostResponsibilityCopy.find((item) => item.name === name);\r\n  }\r\n\r\n  private formatLabel(name: string): string {\r\n    return name.charAt(0).toUpperCase() + name.slice(1);\r\n  }\r\n\r\n  private initializeResponsibilities() {\r\n    this.selectedCohost = this.currentCohost;\r\n    this.coHostResponsibilityCopy = this.coHostResponsibility.map((item) => ({ ...item }));\r\n    this.responsibilityKeys = this.coHostResponsibilityCopy.map((item) => {\r\n      const label = this.formatLabel(item.name);\r\n      return {\r\n        manageKey: `manage${label}`,\r\n        dedicateKey: `dedicateToManage${label}`,\r\n        label,\r\n      };\r\n    });\r\n\r\n    this.responsibilities = this.coHostResponsibilityCopy.reduce<Record<string, boolean>>(\r\n      (accumulator, item) => {\r\n        const label = this.formatLabel(item.name);\r\n        accumulator[`manage${label}`] = item.value;\r\n        accumulator[`dedicateToManage${label}`] = item.dedicated;\r\n        return accumulator;\r\n      },\r\n      {},\r\n    );\r\n  }\r\n\r\n  private resolvePositionStyle(): Record<string, string> {\r\n    const normalizedPosition = this.position.toLowerCase();\r\n\r\n    if (normalizedPosition.includes('center')) {\r\n      return {\r\n        top: '50%',\r\n        left: '50%',\r\n        transform: 'translate(-50%, -50%)',\r\n      };\r\n    }\r\n\r\n    return {\r\n      top: this.position.includes('top') ? '16px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '16px' : 'auto',\r\n      left: this.position.includes('Left') ? '16px' : 'auto',\r\n      right: this.position.includes('Right') ? '16px' : 'auto',\r\n    };\r\n  }\r\n\r\n  private normalizeStyle(style?: Partial<CSSStyleDeclaration>): Record<string, string | number> {\r\n    return style ? ({ ...style } as Record<string, string | number>) : {};\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnInit, TemplateRef } from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  faExclamationTriangle,\r\n  faSignOutAlt,\r\n  faTimes,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nimport {\r\n  ConfirmExit,\r\n  ConfirmExitOptions,\r\n} from '../../methods/exit-methods/confirm-exit.service';\r\n\r\n@Component({\r\n  selector: 'app-confirm-exit-modal',\r\n  imports: [CommonModule, FontAwesomeModule],\r\n  template: `\r\n    <ng-container *ngIf=\"isConfirmExitModalVisible && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              isConfirmExitModalVisible: isConfirmExitModalVisible,\r\n              onConfirmExitClose: onConfirmExitClose,\r\n              position: position,\r\n              backgroundColor: backgroundColor,\r\n              member: member,\r\n              ban: ban,\r\n              roomName: roomName,\r\n              socket: socket,\r\n              islevel: islevel,\r\n              title: resolvedTitle(),\r\n              message: resolvedMessage(),\r\n              confirmLabel: resolvedConfirmLabel(),\r\n              cancelLabel: resolvedCancelLabel(),\r\n              handleConfirmExit: handleConfirmExit.bind(this)\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isConfirmExitModalVisible && !customTemplate\"\r\n      class=\"ms-modern-confirm-exit-overlay\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n      (click)=\"onConfirmExitClose()\"\r\n    >\r\n      <section\r\n        class=\"ms-modern-confirm-exit\"\r\n        [ngStyle]=\"resolvedContentStyle()\"\r\n        (click)=\"$event.stopPropagation()\"\r\n      >\r\n        <header class=\"ms-modern-confirm-exit__header\">\r\n          <div>\r\n            <span class=\"ms-modern-confirm-exit__eyebrow\">Confirmation</span>\r\n            <h2 class=\"ms-modern-confirm-exit__title\">\r\n              <fa-icon [icon]=\"faSignOutAlt\"></fa-icon>\r\n              {{ resolvedTitle() }}\r\n            </h2>\r\n          </div>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-confirm-exit__close\"\r\n            aria-label=\"Close confirm exit\"\r\n            (click)=\"onConfirmExitClose()\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div class=\"ms-modern-confirm-exit__body\">\r\n          <div class=\"ms-modern-confirm-exit__icon-wrap\">\r\n            <fa-icon [icon]=\"faExclamationTriangle\"></fa-icon>\r\n          </div>\r\n\r\n          <p class=\"ms-modern-confirm-exit__message\">\r\n            {{ resolvedMessage() }}\r\n          </p>\r\n        </div>\r\n\r\n        <footer class=\"ms-modern-confirm-exit__footer\">\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-confirm-exit__action ms-modern-confirm-exit__action--secondary\"\r\n            (click)=\"onConfirmExitClose()\"\r\n          >\r\n            {{ resolvedCancelLabel() }}\r\n          </button>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-confirm-exit__action ms-modern-confirm-exit__action--primary\"\r\n            (click)=\"handleConfirmExit()\"\r\n          >\r\n            {{ resolvedConfirmLabel() }}\r\n          </button>\r\n        </footer>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-confirm-exit-overlay {\r\n        position: fixed;\r\n        inset: 0;\r\n        display: block;\r\n        background: rgba(2, 8, 23, 0.66);\r\n        backdrop-filter: blur(10px);\r\n        z-index: 1000;\r\n      }\r\n\r\n      .ms-modern-confirm-exit {\r\n        display: flex;\r\n        flex-direction: column;\r\n        overflow: hidden;\r\n        border-radius: 26px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: linear-gradient(\r\n          180deg,\r\n          var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96)) 0%,\r\n          var(--ms-modern-panel-surface, rgba(248, 250, 252, 0.95)) 100%\r\n        );\r\n        box-shadow: 0 28px 70px rgba(15, 23, 42, 0.28);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        backdrop-filter: blur(20px);\r\n      }\r\n\r\n      .ms-modern-confirm-exit__header {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        gap: 16px;\r\n        padding: 22px 22px 16px;\r\n        border-bottom: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n      }\r\n\r\n      .ms-modern-confirm-exit__eyebrow {\r\n        display: block;\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.7rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.12em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-confirm-exit__title {\r\n        margin: 6px 0 0;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1.24rem;\r\n        font-weight: 800;\r\n        line-height: 1.15;\r\n        color: #dc2626;\r\n      }\r\n\r\n      .ms-modern-confirm-exit__close {\r\n        width: 40px;\r\n        height: 40px;\r\n        flex: 0 0 auto;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        border-radius: 999px;\r\n        background: rgba(255, 255, 255, 0.4);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-confirm-exit__body {\r\n        display: grid;\r\n        gap: 16px;\r\n        padding: 24px 22px;\r\n        text-align: center;\r\n      }\r\n\r\n      .ms-modern-confirm-exit__icon-wrap {\r\n        width: 68px;\r\n        height: 68px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        margin: 0 auto;\r\n        border-radius: 999px;\r\n        background: rgba(239, 68, 68, 0.12);\r\n        color: #dc2626;\r\n        font-size: 1.7rem;\r\n      }\r\n\r\n      .ms-modern-confirm-exit__message {\r\n        margin: 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.96rem;\r\n        font-weight: 500;\r\n        line-height: 1.6;\r\n      }\r\n\r\n      .ms-modern-confirm-exit__footer {\r\n        display: grid;\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n        gap: 12px;\r\n        padding: 0 22px 22px;\r\n      }\r\n\r\n      .ms-modern-confirm-exit__action {\r\n        min-height: 46px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 999px;\r\n        padding: 0 16px;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.92rem;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-confirm-exit__action--secondary {\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.64);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n      }\r\n\r\n      .ms-modern-confirm-exit__action--primary {\r\n        border: none;\r\n        background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);\r\n        color: #fff;\r\n        box-shadow: 0 16px 32px rgba(220, 38, 38, 0.2);\r\n      }\r\n\r\n      @media (max-width: 640px) {\r\n        .ms-modern-confirm-exit__header,\r\n        .ms-modern-confirm-exit__body,\r\n        .ms-modern-confirm-exit__footer {\r\n          padding-left: 18px;\r\n          padding-right: 18px;\r\n        }\r\n\r\n        .ms-modern-confirm-exit__footer {\r\n          grid-template-columns: 1fr;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernConfirmExitModalComponent implements OnInit {\r\n  @Input() isConfirmExitModalVisible = false;\r\n  @Input() onConfirmExitClose = () => {};\r\n  @Input() position = 'center';\r\n  @Input() backgroundColor = 'var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96))';\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  @Input() title?: string;\r\n  @Input() confirmLabel?: string;\r\n  @Input() cancelLabel?: string;\r\n  @Input() message?: string | ((context: { islevel: string }) => string);\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n\r\n  readonly faExclamationTriangle = faExclamationTriangle;\r\n  readonly faSignOutAlt = faSignOutAlt;\r\n  readonly faTimes = faTimes;\r\n\r\n  constructor(private readonly confirmExitService: ConfirmExit) {}\r\n\r\n  ngOnInit() {\r\n    if (!this.exitEventOnConfirm) {\r\n      this.exitEventOnConfirm = this.confirmExitService.confirmExit.bind(this.confirmExitService);\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  resolvedTitle(): string {\r\n    if (this.title) {\r\n      return this.title;\r\n    }\r\n\r\n    if (this.ban) {\r\n      return 'Ban participant';\r\n    }\r\n\r\n    return this.islevel === '2' ? 'End Meeting' : 'Leave Meeting';\r\n  }\r\n\r\n  resolvedMessage(): string {\r\n    if (typeof this.message === 'function') {\r\n      return this.message({ islevel: this.islevel });\r\n    }\r\n\r\n    if (typeof this.message === 'string' && this.message.trim().length) {\r\n      return this.message;\r\n    }\r\n\r\n    if (this.ban) {\r\n      return `Are you sure you want to remove ${this.member || 'this participant'} and block re-entry?`;\r\n    }\r\n\r\n    return this.islevel === '2'\r\n      ? 'Are you sure you want to end the meeting for everyone?'\r\n      : 'Are you sure you want to leave the meeting?';\r\n  }\r\n\r\n  resolvedConfirmLabel(): string {\r\n    if (this.confirmLabel) {\r\n      return this.confirmLabel;\r\n    }\r\n\r\n    if (this.ban) {\r\n      return 'Ban & Exit';\r\n    }\r\n\r\n    return this.islevel === '2' ? 'End Meeting' : 'Leave';\r\n  }\r\n\r\n  resolvedCancelLabel(): string {\r\n    return this.cancelLabel || 'Cancel';\r\n  }\r\n\r\n  resolvedOverlayStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = {\r\n      position: 'fixed',\r\n      inset: 0,\r\n      width: '100%',\r\n      height: '100%',\r\n      background: 'rgba(2, 8, 23, 0.66)',\r\n      zIndex: 1000,\r\n    };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.overlayStyle) };\r\n  }\r\n\r\n  resolvedContentStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = {\r\n      position: 'fixed',\r\n      width: 'min(400px, calc(100vw - 32px))',\r\n      background: this.backgroundColor,\r\n      ...this.resolvePositionStyle(),\r\n    };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.contentStyle) };\r\n  }\r\n\r\n  private resolvePositionStyle(): Record<string, string> {\r\n    const normalizedPosition = this.position.toLowerCase();\r\n\r\n    if (normalizedPosition.includes('center')) {\r\n      return {\r\n        top: '50%',\r\n        left: '50%',\r\n        transform: 'translate(-50%, -50%)',\r\n      };\r\n    }\r\n\r\n    return {\r\n      top: this.position.includes('top') ? '16px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '16px' : 'auto',\r\n      left: this.position.includes('Left') ? '16px' : 'auto',\r\n      right: this.position.includes('Right') ? '16px' : 'auto',\r\n    };\r\n  }\r\n\r\n  private normalizeStyle(style?: Partial<CSSStyleDeclaration>): Record<string, string | number> {\r\n    return style ? ({ ...style } as Record<string, string | number>) : {};\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport {\r\n  Component,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  OnInit,\r\n  SimpleChanges,\r\n  TemplateRef,\r\n} from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons';\r\nimport { Socket } from 'socket.io-client';\r\n\r\n@Component({\r\n  selector: 'app-confirm-here-modal',\r\n  imports: [CommonModule, FontAwesomeModule],\r\n  template: `\r\n    <ng-container *ngIf=\"isConfirmHereModalVisible && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              isConfirmHereModalVisible: isConfirmHereModalVisible,\r\n              position: position,\r\n              backgroundColor: backgroundColor,\r\n              displayColor: displayColor,\r\n              counter: counter,\r\n              handleConfirmHere: handleConfirmHere.bind(this),\r\n              onConfirmHereClose: onConfirmHereClose,\r\n              onSuppressConfirmHere: onSuppressConfirmHere,\r\n              doNotShowAgain: doNotShowAgain\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isConfirmHereModalVisible && !customTemplate\"\r\n      class=\"ms-modern-confirm-here-overlay\"\r\n      [class.ms-modern-confirm-here-overlay--dark]=\"resolvedIsDarkMode\"\r\n      [class.ms-modern-confirm-here-overlay--light]=\"!resolvedIsDarkMode\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n      (click)=\"handleConfirmHere()\"\r\n    >\r\n      <section\r\n        class=\"ms-modern-confirm-here\"\r\n        [class.ms-modern-confirm-here--dark]=\"resolvedIsDarkMode\"\r\n        [class.ms-modern-confirm-here--light]=\"!resolvedIsDarkMode\"\r\n        [ngStyle]=\"resolvedContentStyle()\"\r\n        (click)=\"$event.stopPropagation()\"\r\n      >\r\n        <div class=\"ms-modern-confirm-here__spinner-wrap\" [ngStyle]=\"{ color: resolvedAccentColor }\">\r\n          <div class=\"ms-modern-confirm-here__spinner-ring\"></div>\r\n          <fa-icon [icon]=\"faSpinner\" class=\"ms-modern-confirm-here__spinner-icon\"></fa-icon>\r\n          <span class=\"ms-modern-confirm-here__count\">{{ counter }}</span>\r\n        </div>\r\n\r\n        <h2 class=\"ms-modern-confirm-here__title\">Are You Still Here?</h2>\r\n        <p class=\"ms-modern-confirm-here__message\">\r\n          Please confirm your presence to stay connected to the meeting.\r\n        </p>\r\n        <p class=\"ms-modern-confirm-here__timer\">\r\n          Time remaining: <strong [ngStyle]=\"{ color: resolvedAccentColor }\">{{ counter }}</strong>\r\n        </p>\r\n\r\n        <label\r\n          *ngIf=\"onSuppressConfirmHere\"\r\n          class=\"ms-modern-confirm-here__toggle\"\r\n        >\r\n          <input\r\n            type=\"checkbox\"\r\n            class=\"ms-modern-confirm-here__toggle-input\"\r\n            [checked]=\"doNotShowAgain\"\r\n            (click)=\"$event.stopPropagation()\"\r\n            (change)=\"updateSuppressConfirmHere($event)\"\r\n          />\r\n          <span>Don't show again this session</span>\r\n        </label>\r\n\r\n        <button\r\n          type=\"button\"\r\n          class=\"ms-modern-confirm-here__action\"\r\n          (click)=\"handleConfirmHere()\"\r\n        >\r\n          Yes, I'm here\r\n        </button>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-confirm-here-overlay {\r\n        position: fixed;\r\n        inset: 0;\r\n        display: block;\r\n        backdrop-filter: blur(10px);\r\n        z-index: 1000;\r\n      }\r\n\r\n      .ms-modern-confirm-here-overlay--dark {\r\n        background: rgba(2, 8, 23, 0.78);\r\n      }\r\n\r\n      .ms-modern-confirm-here-overlay--light {\r\n        background: rgba(15, 23, 42, 0.42);\r\n      }\r\n\r\n      .ms-modern-confirm-here {\r\n        position: fixed;\r\n        top: 50%;\r\n        left: 50%;\r\n        transform: translate(-50%, -50%);\r\n        width: min(420px, calc(100vw - 32px));\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        gap: 14px;\r\n        padding: 28px 24px;\r\n        border-radius: 28px;\r\n        text-align: center;\r\n      }\r\n\r\n      .ms-modern-confirm-here--dark {\r\n        border: 1px solid rgba(148, 163, 184, 0.18);\r\n        background: linear-gradient(180deg, rgba(15, 27, 49, 0.96) 0%, rgba(10, 18, 33, 0.94) 100%);\r\n        box-shadow: 0 28px 70px rgba(2, 8, 23, 0.46);\r\n        color: #f8fafc;\r\n      }\r\n\r\n      .ms-modern-confirm-here--light {\r\n        border: 1px solid rgba(120, 143, 173, 0.22);\r\n        background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(241, 245, 249, 0.95) 100%);\r\n        box-shadow: 0 28px 70px rgba(15, 23, 42, 0.24);\r\n        color: #10233f;\r\n      }\r\n\r\n      .ms-modern-confirm-here__spinner-wrap {\r\n        position: relative;\r\n        width: 92px;\r\n        height: 92px;\r\n        display: grid;\r\n        place-items: center;\r\n      }\r\n\r\n      .ms-modern-confirm-here__spinner-ring {\r\n        position: absolute;\r\n        inset: 0;\r\n        border-radius: 999px;\r\n        border: 6px solid color-mix(in srgb, currentColor 20%, transparent);\r\n        border-top-color: currentColor;\r\n        animation: ms-confirm-here-spin 1.2s linear infinite;\r\n      }\r\n\r\n      .ms-modern-confirm-here__spinner-icon {\r\n        position: absolute;\r\n        top: 18px;\r\n        font-size: 1rem;\r\n        opacity: 0.75;\r\n      }\r\n\r\n      .ms-modern-confirm-here__count {\r\n        position: relative;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1.9rem;\r\n        font-weight: 800;\r\n      }\r\n\r\n      .ms-modern-confirm-here__title {\r\n        margin: 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1.4rem;\r\n        font-weight: 800;\r\n        line-height: 1.1;\r\n      }\r\n\r\n      .ms-modern-confirm-here__message {\r\n        margin: 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.94rem;\r\n        line-height: 1.55;\r\n      }\r\n\r\n      .ms-modern-confirm-here--dark .ms-modern-confirm-here__message,\r\n      .ms-modern-confirm-here--dark .ms-modern-confirm-here__timer,\r\n      .ms-modern-confirm-here--dark .ms-modern-confirm-here__toggle {\r\n        color: rgba(226, 232, 240, 0.82);\r\n      }\r\n\r\n      .ms-modern-confirm-here--light .ms-modern-confirm-here__message,\r\n      .ms-modern-confirm-here--light .ms-modern-confirm-here__timer,\r\n      .ms-modern-confirm-here--light .ms-modern-confirm-here__toggle {\r\n        color: rgba(16, 35, 63, 0.78);\r\n      }\r\n\r\n      .ms-modern-confirm-here__timer {\r\n        margin: 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n      }\r\n\r\n      .ms-modern-confirm-here__toggle {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.82rem;\r\n        line-height: 1.4;\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-confirm-here__toggle-input {\r\n        width: 16px;\r\n        height: 16px;\r\n        margin: 0;\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-confirm-here--dark .ms-modern-confirm-here__toggle-input {\r\n        accent-color: #8bdbff;\r\n      }\r\n\r\n      .ms-modern-confirm-here--light .ms-modern-confirm-here__toggle-input {\r\n        accent-color: #2563eb;\r\n      }\r\n\r\n      .ms-modern-confirm-here__action {\r\n        min-width: 180px;\r\n        min-height: 48px;\r\n        border: none;\r\n        border-radius: 999px;\r\n        padding: 0 20px;\r\n        background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%);\r\n        color: #fff;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.95rem;\r\n        font-weight: 800;\r\n        cursor: pointer;\r\n        box-shadow: 0 18px 34px rgba(34, 197, 94, 0.22);\r\n        transition: transform 140ms ease, box-shadow 140ms ease;\r\n      }\r\n\r\n      .ms-modern-confirm-here__action:hover,\r\n      .ms-modern-confirm-here__action:focus-visible {\r\n        transform: translateY(-1px);\r\n        box-shadow: 0 22px 40px rgba(34, 197, 94, 0.28);\r\n      }\r\n\r\n      .ms-modern-confirm-here__action:focus-visible {\r\n        outline: 2px solid rgba(59, 130, 246, 0.4);\r\n        outline-offset: 2px;\r\n      }\r\n\r\n      @keyframes ms-confirm-here-spin {\r\n        from {\r\n          transform: rotate(0deg);\r\n        }\r\n        to {\r\n          transform: rotate(360deg);\r\n        }\r\n      }\r\n\r\n      @media (max-width: 640px) {\r\n        .ms-modern-confirm-here {\r\n          padding-left: 18px;\r\n          padding-right: 18px;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernConfirmHereModalComponent implements OnInit, OnChanges, OnDestroy {\r\n  @Input() isConfirmHereModalVisible = false;\r\n  @Input() position = 'center';\r\n  @Input() backgroundColor = 'var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96))';\r\n  @Input() displayColor = '';\r\n  @Input() isDarkMode = false;\r\n  @Input() onConfirmHereClose = () => {};\r\n  @Input() onSuppressConfirmHere?: () => void;\r\n  @Input() socket = {} as Socket;\r\n  @Input() localSocket?: Socket;\r\n  @Input() roomName = '';\r\n  @Input() member = '';\r\n  @Input() countdownDuration = 120;\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n\r\n  readonly faSpinner = faSpinner;\r\n\r\n  counter = 120;\r\n  doNotShowAgain = false;\r\n  private countdownInterval?: ReturnType<typeof setInterval>;\r\n\r\n  ngOnInit() {\r\n    this.counter = this.countdownDuration || 120;\r\n\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']?.currentValue) {\r\n      this.counter = this.countdownDuration || 120;\r\n      this.startCountdown();\r\n      return;\r\n    }\r\n\r\n    if (changes['isConfirmHereModalVisible']) {\r\n      this.clearCountdown();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.clearCountdown();\r\n  }\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    return !!this.isDarkMode;\r\n  }\r\n\r\n  get resolvedAccentColor(): string {\r\n    if (this.displayColor) {\r\n      return this.displayColor;\r\n    }\r\n\r\n    if (this.counter <= 30) {\r\n      return '#ef4444';\r\n    }\r\n\r\n    if (this.counter <= 60) {\r\n      return '#f59e0b';\r\n    }\r\n\r\n    return this.resolvedIsDarkMode ? '#8bdbff' : '#2563eb';\r\n  }\r\n\r\n  handleConfirmHere() {\r\n    this.clearCountdown();\r\n\r\n    if (this.doNotShowAgain) {\r\n      this.onSuppressConfirmHere?.();\r\n    }\r\n\r\n    this.onConfirmHereClose();\r\n  }\r\n\r\n  updateSuppressConfirmHere(event: Event) {\r\n    this.doNotShowAgain = !!(event.target as HTMLInputElement | null)?.checked;\r\n  }\r\n\r\n  resolvedOverlayStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = {\r\n      position: 'fixed',\r\n      inset: 0,\r\n      width: '100%',\r\n      height: '100%',\r\n      background: this.resolvedIsDarkMode ? 'rgba(2, 8, 23, 0.78)' : 'rgba(15, 23, 42, 0.42)',\r\n      zIndex: 1000,\r\n    };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.overlayStyle) };\r\n  }\r\n\r\n  resolvedContentStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = {\r\n      position: 'fixed',\r\n      width: 'min(420px, calc(100vw - 32px))',\r\n      background: this.backgroundColor || undefined,\r\n      ...this.resolvePositionStyle(),\r\n    };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.contentStyle) };\r\n  }\r\n\r\n  private startCountdown() {\r\n    this.clearCountdown();\r\n\r\n    this.countdownInterval = setInterval(() => {\r\n      this.counter -= 1;\r\n\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        if (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  private clearCountdown() {\r\n    if (this.countdownInterval) {\r\n      clearInterval(this.countdownInterval);\r\n      this.countdownInterval = undefined;\r\n    }\r\n  }\r\n\r\n  private resolvePositionStyle(): Record<string, string> {\r\n    const normalizedPosition = this.position.toLowerCase();\r\n\r\n    if (normalizedPosition.includes('center')) {\r\n      return {\r\n        top: '50%',\r\n        left: '50%',\r\n        transform: 'translate(-50%, -50%)',\r\n      };\r\n    }\r\n\r\n    return {\r\n      top: this.position.includes('top') ? '16px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '16px' : 'auto',\r\n      left: this.position.includes('Left') ? '16px' : 'auto',\r\n      right: this.position.includes('Right') ? '16px' : 'auto',\r\n    };\r\n  }\r\n\r\n  private normalizeStyle(style?: Partial<CSSStyleDeclaration>): Record<string, string | number> {\r\n    return style ? ({ ...style } as Record<string, string | number>) : {};\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  faCheck,\r\n  faDisplay,\r\n  faExpand,\r\n  faGaugeHigh,\r\n  faTimes,\r\n  faVideo,\r\n  faWaveSquare,\r\n} from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport {\r\n  ModifyDisplaySettings,\r\n  ModifyDisplaySettingsOptions,\r\n  ModifyDisplaySettingsParameters,\r\n} from '../../methods/display-settings-methods/modify-display-settings.service';\r\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../utils/render-mode.utils';\r\n\r\nexport interface ModernDisplaySettingsModalParameters extends ModifyDisplaySettingsParameters {\r\n  meetingDisplayType: string;\r\n  autoWave: boolean;\r\n  forceFullDisplay: boolean;\r\n  meetingVideoOptimized: boolean;\r\n  showSubtitlesOnCards?: boolean;\r\n}\r\n\r\n@Component({\r\n  selector: 'app-display-settings-modal',\r\n  imports: [CommonModule, FontAwesomeModule],\r\n  template: `\r\n    <ng-container *ngIf=\"isVisible() && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              meetingDisplayType: meetingDisplayTypeState,\r\n              autoWave: autoWaveState,\r\n              forceFullDisplay: forceFullDisplayState,\r\n              showSubtitlesOnCards: showSubtitlesOnCardsState,\r\n              meetingVideoOptimized: meetingVideoOptimizedState,\r\n              onSave: handleSaveSettings.bind(this),\r\n              onClose: onDisplaySettingsClose\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isVisible() && !customTemplate\"\r\n      class=\"ms-modern-display-settings-overlay\"\r\n      [class.ms-modern-display-settings-overlay--embedded]=\"isEmbedded()\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n      (click)=\"handleOverlayClick()\"\r\n    >\r\n      <section\r\n        class=\"ms-modern-display-settings\"\r\n        [class.ms-modern-display-settings--embedded]=\"isEmbedded()\"\r\n        [ngStyle]=\"resolvedContentStyle()\"\r\n        [style.--ms-local-accent]=\"resolvedAccentColor()\"\r\n        (click)=\"$event.stopPropagation()\"\r\n      >\r\n        <header *ngIf=\"showHeader\" class=\"ms-modern-display-settings__header\">\r\n          <div>\r\n            <p class=\"ms-modern-display-settings__eyebrow\">Room Layout</p>\r\n            <h2 class=\"ms-modern-display-settings__title\">Display Settings</h2>\r\n          </div>\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-display-settings__close\"\r\n            aria-label=\"Close display settings\"\r\n            (click)=\"onDisplaySettingsClose()\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div class=\"ms-modern-display-settings__content\">\r\n          <section class=\"ms-modern-display-settings__section\">\r\n            <label class=\"ms-modern-display-settings__section-label\">Display Type</label>\r\n            <div\r\n              class=\"ms-modern-display-settings__option-grid\"\r\n              [class.ms-modern-display-settings__option-grid--embedded]=\"isEmbedded()\"\r\n            >\r\n              <button\r\n                *ngFor=\"let option of displayOptions\"\r\n                type=\"button\"\r\n                class=\"ms-modern-display-settings__option\"\r\n                [class.ms-modern-display-settings__option--embedded]=\"isEmbedded()\"\r\n                [class.is-active]=\"meetingDisplayTypeState === option.value\"\r\n                [attr.aria-pressed]=\"meetingDisplayTypeState === option.value\"\r\n                (click)=\"meetingDisplayTypeState = option.value\"\r\n              >\r\n                <span\r\n                  *ngIf=\"isEmbedded() && meetingDisplayTypeState === option.value\"\r\n                  class=\"ms-modern-display-settings__option-active\"\r\n                >\r\n                  <fa-icon [icon]=\"faCheck\"></fa-icon>\r\n                  <span>Active</span>\r\n                </span>\r\n                <fa-icon\r\n                  *ngIf=\"isEmbedded()\"\r\n                  class=\"ms-modern-display-settings__option-icon\"\r\n                  [icon]=\"option.icon\"\r\n                ></fa-icon>\r\n                <span class=\"ms-modern-display-settings__option-title\">{{ option.label }}</span>\r\n                <span *ngIf=\"!isEmbedded()\" class=\"ms-modern-display-settings__option-copy\">\r\n                  {{ option.description }}\r\n                </span>\r\n              </button>\r\n            </div>\r\n          </section>\r\n\r\n          <section class=\"ms-modern-display-settings__section\">\r\n            <label class=\"ms-modern-display-settings__section-label\">Display Options</label>\r\n\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-display-settings__toggle-row\"\r\n              [class.ms-modern-display-settings__toggle-row--embedded]=\"isEmbedded()\"\r\n              (click)=\"autoWaveState = !autoWaveState\"\r\n            >\r\n              <span>\r\n                <span class=\"ms-modern-display-settings__toggle-heading\">\r\n                  <fa-icon *ngIf=\"isEmbedded()\" [icon]=\"faWaveSquare\"></fa-icon>\r\n                  <span class=\"ms-modern-display-settings__toggle-label\">Audio Visualization</span>\r\n                </span>\r\n                <span *ngIf=\"!isEmbedded()\" class=\"ms-modern-display-settings__toggle-copy\">\r\n                  Show audiograph activity across participant cards.\r\n                </span>\r\n              </span>\r\n              <span class=\"ms-modern-display-settings__switch\" [class.is-on]=\"autoWaveState\">\r\n                <span class=\"ms-modern-display-settings__switch-knob\"></span>\r\n              </span>\r\n            </button>\r\n\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-display-settings__toggle-row\"\r\n              [class.ms-modern-display-settings__toggle-row--embedded]=\"isEmbedded()\"\r\n              (click)=\"forceFullDisplayState = !forceFullDisplayState\"\r\n            >\r\n              <span>\r\n                <span class=\"ms-modern-display-settings__toggle-heading\">\r\n                  <fa-icon *ngIf=\"isEmbedded()\" [icon]=\"faExpand\"></fa-icon>\r\n                  <span class=\"ms-modern-display-settings__toggle-label\">Force Full Display</span>\r\n                </span>\r\n                <span *ngIf=\"!isEmbedded()\" class=\"ms-modern-display-settings__toggle-copy\">\r\n                  Keep all participants visible instead of following the active speaker.\r\n                </span>\r\n              </span>\r\n              <span class=\"ms-modern-display-settings__switch\" [class.is-on]=\"forceFullDisplayState\">\r\n                <span class=\"ms-modern-display-settings__switch-knob\"></span>\r\n              </span>\r\n            </button>\r\n\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-display-settings__toggle-row\"\r\n              [class.ms-modern-display-settings__toggle-row--embedded]=\"isEmbedded()\"\r\n              (click)=\"meetingVideoOptimizedState = !meetingVideoOptimizedState\"\r\n            >\r\n              <span>\r\n                <span class=\"ms-modern-display-settings__toggle-heading\">\r\n                  <fa-icon *ngIf=\"isEmbedded()\" [icon]=\"faGaugeHigh\"></fa-icon>\r\n                  <span class=\"ms-modern-display-settings__toggle-label\">\r\n                    {{ isEmbedded() ? 'Video Optimization' : 'Prioritize Video Participants' }}\r\n                  </span>\r\n                </span>\r\n                <span *ngIf=\"!isEmbedded()\" class=\"ms-modern-display-settings__toggle-copy\">\r\n                  Bias the layout toward camera-enabled participants.\r\n                </span>\r\n              </span>\r\n              <span\r\n                class=\"ms-modern-display-settings__switch\"\r\n                [class.is-on]=\"meetingVideoOptimizedState\"\r\n              >\r\n                <span class=\"ms-modern-display-settings__switch-knob\"></span>\r\n              </span>\r\n            </button>\r\n\r\n            <button\r\n              *ngIf=\"!isEmbedded()\"\r\n              type=\"button\"\r\n              class=\"ms-modern-display-settings__toggle-row\"\r\n              (click)=\"showSubtitlesOnCardsState = !showSubtitlesOnCardsState\"\r\n            >\r\n              <span>\r\n                <span class=\"ms-modern-display-settings__toggle-label\">Show Subtitles on Cards</span>\r\n                <span class=\"ms-modern-display-settings__toggle-copy\">\r\n                  Keep transcript snippets visible on participant cards.\r\n                </span>\r\n              </span>\r\n              <span\r\n                class=\"ms-modern-display-settings__switch\"\r\n                [class.is-on]=\"showSubtitlesOnCardsState\"\r\n              >\r\n                <span class=\"ms-modern-display-settings__switch-knob\"></span>\r\n              </span>\r\n            </button>\r\n          </section>\r\n        </div>\r\n\r\n        <footer class=\"ms-modern-display-settings__footer\">\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-display-settings__save\"\r\n            (click)=\"handleSaveSettings()\"\r\n          >\r\n            Apply Settings\r\n          </button>\r\n        </footer>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-display-settings-overlay {\r\n        position: fixed;\r\n        inset: 0;\r\n        z-index: 999;\r\n        background: rgba(2, 8, 23, 0.62);\r\n        backdrop-filter: blur(8px);\r\n        -webkit-backdrop-filter: blur(8px);\r\n      }\r\n\r\n      .ms-modern-display-settings-overlay--embedded {\r\n        position: static;\r\n        inset: auto;\r\n        width: 100%;\r\n        height: 100%;\r\n        min-height: 0;\r\n        background: transparent;\r\n        backdrop-filter: none;\r\n        -webkit-backdrop-filter: none;\r\n        z-index: auto;\r\n      }\r\n\r\n      .ms-modern-display-settings {\r\n        box-sizing: border-box;\r\n        position: fixed;\r\n        width: min(392px, calc(100vw - 32px));\r\n        max-height: min(560px, calc(100vh - 32px));\r\n        display: flex;\r\n        flex-direction: column;\r\n        overflow: hidden;\r\n        border-radius: 28px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        background:\r\n          linear-gradient(\r\n            180deg,\r\n            var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94)) 0%,\r\n            var(--ms-modern-panel-surface, rgba(255, 255, 255, 0.82)) 100%\r\n          );\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        box-shadow: var(--ms-modern-shadow-panel, 0 24px 64px rgba(14, 30, 53, 0.16));\r\n      }\r\n\r\n      .ms-modern-display-settings * {\r\n        box-sizing: border-box;\r\n      }\r\n\r\n      .ms-modern-display-settings--embedded {\r\n        position: relative;\r\n        width: 100%;\r\n        max-width: none;\r\n        max-height: none;\r\n        height: 100%;\r\n        border-radius: 24px;\r\n      }\r\n\r\n      .ms-modern-display-settings__header {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        gap: 16px;\r\n        padding: 22px 22px 18px;\r\n        border-bottom: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n      }\r\n\r\n      .ms-modern-display-settings__eyebrow {\r\n        margin: 0 0 8px;\r\n        color: var(--ms-modern-text-muted, rgba(58, 77, 105, 0.68));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.74rem;\r\n        font-weight: 700;\r\n        letter-spacing: 0.12em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-display-settings__title {\r\n        margin: 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1.18rem;\r\n        font-weight: 700;\r\n      }\r\n\r\n      .ms-modern-display-settings__close {\r\n        width: 40px;\r\n        height: 40px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 999px;\r\n        border: 1px solid var(--ms-modern-border-strong, rgba(46, 108, 188, 0.34));\r\n        background: var(--ms-modern-field-background, rgba(248, 250, 252, 0.92));\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-display-settings__content {\r\n        flex: 1;\r\n        min-height: 0;\r\n        overflow-y: auto;\r\n        overflow-x: hidden;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 18px;\r\n        padding: 22px;\r\n      }\r\n\r\n      .ms-modern-display-settings__section {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 12px;\r\n      }\r\n\r\n      .ms-modern-display-settings__section-label {\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.78rem;\r\n        font-weight: 700;\r\n        letter-spacing: 0.08em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-display-settings__option-grid {\r\n        display: grid;\r\n        gap: 10px;\r\n      }\r\n\r\n      .ms-modern-display-settings__option-grid--embedded {\r\n        grid-template-columns: repeat(3, minmax(0, 1fr));\r\n      }\r\n\r\n      .ms-modern-display-settings__option {\r\n        text-align: left;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 6px;\r\n        padding: 14px 16px;\r\n        border-radius: 18px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        background: var(--ms-modern-panel-surface, rgba(255, 255, 255, 0.82));\r\n        color: inherit;\r\n        cursor: pointer;\r\n        transition:\r\n          border-color 160ms ease,\r\n          box-shadow 160ms ease,\r\n          transform 160ms ease;\r\n      }\r\n\r\n      .ms-modern-display-settings__option--embedded {\r\n        min-height: 92px;\r\n        position: relative;\r\n        align-items: center;\r\n        justify-content: center;\r\n        text-align: center;\r\n        gap: 8px;\r\n        padding: 16px 10px;\r\n      }\r\n\r\n      .ms-modern-display-settings__option.is-active {\r\n        border-color: var(--ms-local-accent, var(--ms-modern-accent, #1476d2));\r\n        background: linear-gradient(\r\n          180deg,\r\n          color-mix(in srgb, var(--ms-local-accent, var(--ms-modern-accent, #1476d2)) 16%, rgba(255, 255, 255, 0.96)) 0%,\r\n          color-mix(in srgb, var(--ms-local-accent, var(--ms-modern-accent, #1476d2)) 8%, rgba(255, 255, 255, 0.88)) 100%\r\n        );\r\n        box-shadow:\r\n          0 14px 28px color-mix(in srgb, var(--ms-local-accent, var(--ms-modern-accent, #1476d2)) 18%, transparent),\r\n          0 0 0 3px color-mix(in srgb, var(--ms-local-accent, var(--ms-modern-accent, #1476d2)) 20%, transparent);\r\n      }\r\n\r\n      .ms-modern-display-settings__option.is-active .ms-modern-display-settings__option-title {\r\n        color: var(--ms-local-accent, var(--ms-modern-accent, #1476d2));\r\n      }\r\n\r\n      .ms-modern-display-settings__option.is-active .ms-modern-display-settings__option-copy {\r\n        color: color-mix(in srgb, var(--ms-local-accent, var(--ms-modern-accent, #1476d2)) 54%, var(--ms-modern-text-primary, #10233f));\r\n      }\r\n\r\n      .ms-modern-display-settings__option-active {\r\n        position: absolute;\r\n        top: 8px;\r\n        right: 8px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 4px;\r\n        padding: 3px 7px;\r\n        border-radius: 999px;\r\n        background: color-mix(in srgb, var(--ms-local-accent, var(--ms-modern-accent, #1476d2)) 18%, rgba(255, 255, 255, 0.96));\r\n        color: var(--ms-local-accent, var(--ms-modern-accent, #1476d2));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.62rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.06em;\r\n        text-transform: uppercase;\r\n        box-shadow: 0 10px 18px color-mix(in srgb, var(--ms-local-accent, var(--ms-modern-accent, #1476d2)) 14%, transparent);\r\n      }\r\n\r\n      .ms-modern-display-settings__option-icon {\r\n        font-size: 1.1rem;\r\n      }\r\n\r\n      .ms-modern-display-settings__option:hover {\r\n        transform: translateY(-1px);\r\n      }\r\n\r\n      .ms-modern-display-settings__option-title {\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.95rem;\r\n        font-weight: 700;\r\n      }\r\n\r\n      .ms-modern-display-settings__option-copy {\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.86rem;\r\n        line-height: 1.55;\r\n      }\r\n\r\n      .ms-modern-display-settings__toggle-row {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        gap: 16px;\r\n        padding: 14px 16px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        border-radius: 18px;\r\n        background: var(--ms-modern-panel-surface, rgba(255, 255, 255, 0.82));\r\n        color: inherit;\r\n        text-align: left;\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-display-settings__toggle-row--embedded {\r\n        border-radius: 14px;\r\n      }\r\n\r\n      .ms-modern-display-settings__toggle-heading {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n      }\r\n\r\n      .ms-modern-display-settings__toggle-label {\r\n        display: block;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.94rem;\r\n        font-weight: 700;\r\n      }\r\n\r\n      .ms-modern-display-settings__toggle-copy {\r\n        display: block;\r\n        margin-top: 4px;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.84rem;\r\n        line-height: 1.55;\r\n      }\r\n\r\n      .ms-modern-display-settings__switch {\r\n        flex: 0 0 auto;\r\n        width: 48px;\r\n        height: 28px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        padding: 3px;\r\n        border-radius: 999px;\r\n        background: color-mix(in srgb, var(--ms-modern-text-muted, rgba(58, 77, 105, 0.68)) 36%, transparent);\r\n        transition: background 160ms ease;\r\n      }\r\n\r\n      .ms-modern-display-settings__switch.is-on {\r\n        background: linear-gradient(135deg, var(--ms-local-accent, var(--ms-modern-accent, #1476d2)), var(--ms-modern-accent-strong, #0d5ca8));\r\n      }\r\n\r\n      .ms-modern-display-settings__switch-knob {\r\n        width: 22px;\r\n        height: 22px;\r\n        border-radius: 999px;\r\n        background: #ffffff;\r\n        transform: translateX(0);\r\n        transition: transform 160ms ease;\r\n      }\r\n\r\n      .ms-modern-display-settings__switch.is-on .ms-modern-display-settings__switch-knob {\r\n        transform: translateX(20px);\r\n      }\r\n\r\n      .ms-modern-display-settings__footer {\r\n        padding: 0 22px 22px;\r\n      }\r\n\r\n      .ms-modern-display-settings__save {\r\n        width: 100%;\r\n        min-height: 48px;\r\n        border: none;\r\n        border-radius: 999px;\r\n        background: linear-gradient(135deg, var(--ms-local-accent, var(--ms-modern-accent, #1476d2)), var(--ms-modern-accent-strong, #0d5ca8));\r\n        color: #ffffff;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.95rem;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n      }\r\n\r\n      @media (max-width: 575px) {\r\n        .ms-modern-display-settings__header,\r\n        .ms-modern-display-settings__content,\r\n        .ms-modern-display-settings__footer {\r\n          padding-left: 18px;\r\n          padding-right: 18px;\r\n        }\r\n\r\n        .ms-modern-display-settings__footer {\r\n          padding-bottom: 18px;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernDisplaySettingsModalComponent implements OnInit, OnChanges {\r\n  @Input() isDisplaySettingsModalVisible = false;\r\n  @Input() onDisplaySettingsClose = () => {};\r\n  @Input() onModifyDisplaySettings?: (options: ModifyDisplaySettingsOptions) => Promise<void> | void;\r\n  @Input() parameters: ModernDisplaySettingsModalParameters = {} as ModernDisplaySettingsModalParameters;\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = 'var(--ms-modern-accent, #1476d2)';\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n\r\n  faCheck = faCheck;\r\n  faDisplay = faDisplay;\r\n  faExpand = faExpand;\r\n  faGaugeHigh = faGaugeHigh;\r\n  faTimes = faTimes;\r\n  faVideo = faVideo;\r\n  faWaveSquare = faWaveSquare;\r\n\r\n  meetingDisplayTypeState = 'media';\r\n  autoWaveState = false;\r\n  forceFullDisplayState = false;\r\n  showSubtitlesOnCardsState = true;\r\n  meetingVideoOptimizedState = false;\r\n\r\n  readonly displayOptions = [\r\n    {\r\n      value: 'video',\r\n      label: 'Video Only',\r\n      description: 'Focus on participants with active camera feeds.',\r\n      icon: faVideo,\r\n    },\r\n    {\r\n      value: 'media',\r\n      label: 'Media',\r\n      description: 'Balance audio and video participants together.',\r\n      icon: faDisplay,\r\n    },\r\n    {\r\n      value: 'all',\r\n      label: 'All Participants',\r\n      description: 'Keep every participant eligible for the layout.',\r\n      icon: faExpand,\r\n    },\r\n  ];\r\n\r\n  constructor(private readonly modifyDisplaySettingsService: ModifyDisplaySettings) {}\r\n\r\n  ngOnInit() {\r\n    this.ensureHandler();\r\n    this.syncFromParameters();\r\n  }\r\n\r\n  ngOnChanges(_changes: SimpleChanges) {\r\n    this.ensureHandler();\r\n    this.syncFromParameters();\r\n  }\r\n\r\n  isVisible(): boolean {\r\n    return this.isEmbedded() || this.isDisplaySettingsModalVisible;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  handleOverlayClick() {\r\n    if (!this.isEmbedded()) {\r\n      this.onDisplaySettingsClose();\r\n    }\r\n  }\r\n\r\n  async handleSaveSettings() {\r\n    await Promise.resolve(\r\n      this.resolvedModifyHandler()({\r\n        parameters: {\r\n          ...this.parameters,\r\n          meetingDisplayType: this.meetingDisplayTypeState,\r\n          autoWave: this.autoWaveState,\r\n          forceFullDisplay: this.forceFullDisplayState,\r\n          showSubtitlesOnCards: this.showSubtitlesOnCardsState,\r\n          meetingVideoOptimized: this.meetingVideoOptimizedState,\r\n        },\r\n      }),\r\n    );\r\n  }\r\n\r\n  resolvedOverlayStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'static',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          height: '100%',\r\n          minHeight: 0,\r\n          background: 'transparent',\r\n          zIndex: 'auto',\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          inset: 0,\r\n          width: '100%',\r\n          height: '100%',\r\n          background: 'rgba(2, 8, 23, 0.62)',\r\n          zIndex: 999,\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.overlayStyle) };\r\n  }\r\n\r\n  resolvedContentStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'relative',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          maxWidth: 'none',\r\n          height: '100%',\r\n          maxHeight: 'none',\r\n          margin: 0,\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          top: this.position.includes('top') ? '16px' : 'auto',\r\n          bottom: this.position.includes('bottom') ? '16px' : 'auto',\r\n          left: this.position.includes('Left') ? '16px' : 'auto',\r\n          right: this.position.includes('Right') ? '16px' : 'auto',\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.contentStyle) };\r\n  }\r\n\r\n  resolvedAccentColor(): string {\r\n    const normalizedBackground = this.backgroundColor.trim().toLowerCase();\r\n    if (\r\n      !normalizedBackground ||\r\n      normalizedBackground === 'transparent' ||\r\n      normalizedBackground === 'rgba(0, 0, 0, 0)'\r\n    ) {\r\n      return 'var(--ms-modern-accent-strong, #1476d2)';\r\n    }\r\n\r\n    return this.backgroundColor;\r\n  }\r\n\r\n  private ensureHandler() {\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  private resolvedModifyHandler() {\r\n    return (\r\n      this.onModifyDisplaySettings ??\r\n      this.modifyDisplaySettingsService.modifyDisplaySettings.bind(this.modifyDisplaySettingsService)\r\n    );\r\n  }\r\n\r\n  private syncFromParameters() {\r\n    if (!this.parameters) {\r\n      return;\r\n    }\r\n\r\n    this.meetingDisplayTypeState = this.parameters.meetingDisplayType ?? 'media';\r\n    this.autoWaveState = this.parameters.autoWave ?? false;\r\n    this.forceFullDisplayState = this.parameters.forceFullDisplay ?? false;\r\n    this.showSubtitlesOnCardsState = this.parameters.showSubtitlesOnCards ?? true;\r\n    this.meetingVideoOptimizedState = this.parameters.meetingVideoOptimized ?? false;\r\n  }\r\n\r\n  private normalizeStyle(\r\n    style?: Partial<CSSStyleDeclaration>,\r\n  ): Record<string, string | number> {\r\n    return style ? ({ ...style } as Record<string, string | number>) : {};\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  faDesktop,\r\n  faBan,\r\n  faCheckCircle,\r\n  faLock,\r\n  faMicrophone,\r\n  faMessage,\r\n  faTimes,\r\n  faVideo,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nimport { ShowAlert } from '../../@types/types';\r\nimport {\r\n  ModifySettings,\r\n  ModifySettingsOptions,\r\n} from '../../methods/settings-methods/modify-settings.service';\r\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../utils/render-mode.utils';\r\n\r\ntype EventSettingValue = 'disallow' | 'allow' | 'approval';\r\ntype ChatSettingValue = 'disallow' | 'allow';\r\ntype EventSettingSectionKey = 'audio' | 'video' | 'screenshare' | 'chat';\r\n\r\n@Component({\r\n  selector: 'app-event-settings-modal',\r\n  imports: [CommonModule, FontAwesomeModule, FormsModule],\r\n  template: `\r\n    <ng-container *ngIf=\"isVisible() && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              isEventSettingsModalVisible: isEventSettingsModalVisible,\r\n              position: position,\r\n              backgroundColor: backgroundColor,\r\n              audioState: audioState,\r\n              videoState: videoState,\r\n              screenshareState: screenshareState,\r\n              chatState: chatState,\r\n              closeModal: closeModal.bind(this),\r\n              handleSaveSettings: handleSaveSettings.bind(this),\r\n              onEventSettingsClose: onEventSettingsClose\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isVisible() && !customTemplate\"\r\n      class=\"ms-modern-event-settings-overlay\"\r\n      [class.ms-modern-event-settings-overlay--dark]=\"resolvedIsDarkMode\"\r\n      [class.ms-modern-event-settings-overlay--light]=\"!resolvedIsDarkMode\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n      (click)=\"handleOverlayClick()\"\r\n    >\r\n      <section\r\n        class=\"ms-modern-event-settings\"\r\n        [class.ms-modern-event-settings--dark]=\"resolvedIsDarkMode\"\r\n        [class.ms-modern-event-settings--light]=\"!resolvedIsDarkMode\"\r\n        [ngStyle]=\"resolvedContentStyle()\"\r\n        (click)=\"$event.stopPropagation()\"\r\n      >\r\n        <header *ngIf=\"showHeader\" class=\"ms-modern-event-settings__header\">\r\n          <div class=\"ms-modern-event-settings__heading\">\r\n            <span class=\"ms-modern-event-settings__eyebrow\">Room policy</span>\r\n            <h2 class=\"ms-modern-event-settings__title\">Event Settings</h2>\r\n            <p class=\"ms-modern-event-settings__subtitle\">\r\n              Control participant permissions for audio, video, screen sharing, and chat.\r\n            </p>\r\n          </div>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-event-settings__close\"\r\n            aria-label=\"Close event settings\"\r\n            (click)=\"closeModal()\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div\r\n          class=\"ms-modern-event-settings__body\"\r\n          [class.ms-modern-event-settings__body--embedded]=\"isEmbedded()\"\r\n        >\r\n          <section\r\n            *ngFor=\"let section of settingSections\"\r\n            class=\"ms-modern-event-settings__setting-card\"\r\n            [class.ms-modern-event-settings__setting-card--embedded]=\"isEmbedded()\"\r\n          >\r\n            <div\r\n              class=\"ms-modern-event-settings__setting-heading\"\r\n              [class.ms-modern-event-settings__setting-heading--embedded]=\"isEmbedded()\"\r\n            >\r\n              <span class=\"ms-modern-event-settings__setting-icon\">\r\n                <fa-icon [icon]=\"section.icon\"></fa-icon>\r\n              </span>\r\n              <div>\r\n                <strong>{{ isEmbedded() ? section.embeddedTitle : section.title }}</strong>\r\n                <p *ngIf=\"!isEmbedded()\">{{ section.description }}</p>\r\n              </div>\r\n            </div>\r\n\r\n            <div\r\n              class=\"ms-modern-event-settings__segments\"\r\n              [class.ms-modern-event-settings__segments--embedded]=\"isEmbedded()\"\r\n              role=\"group\"\r\n              [attr.aria-label]=\"section.ariaLabel\"\r\n            >\r\n              <button\r\n                *ngFor=\"let option of settingOptions\"\r\n                type=\"button\"\r\n                class=\"ms-modern-event-settings__segment\"\r\n                [class.ms-modern-event-settings__segment--embedded]=\"isEmbedded()\"\r\n                [class.ms-modern-event-settings__segment--active]=\"settingValue(section.key) === option.value\"\r\n                (click)=\"setSettingValue(section.key, option.value)\"\r\n              >\r\n                <fa-icon [icon]=\"option.icon\"></fa-icon>\r\n                <span>{{ option.label }}</span>\r\n              </button>\r\n            </div>\r\n          </section>\r\n        </div>\r\n\r\n        <footer\r\n          class=\"ms-modern-event-settings__footer\"\r\n          [class.ms-modern-event-settings__footer--embedded]=\"isEmbedded()\"\r\n        >\r\n          <button\r\n            *ngIf=\"!isEmbedded()\"\r\n            type=\"button\"\r\n            class=\"ms-modern-event-settings__action ms-modern-event-settings__action--secondary\"\r\n            (click)=\"closeModal()\"\r\n          >\r\n            Cancel\r\n          </button>\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-event-settings__action ms-modern-event-settings__action--primary\"\r\n            (click)=\"handleSaveSettings()\"\r\n          >\r\n            Save Settings\r\n          </button>\r\n        </footer>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-event-settings-overlay {\r\n        position: fixed;\r\n        inset: 0;\r\n        display: block;\r\n        background: rgba(2, 8, 23, 0.66);\r\n        backdrop-filter: blur(10px);\r\n        z-index: 999;\r\n      }\r\n\r\n      .ms-modern-event-settings {\r\n        display: flex;\r\n        flex-direction: column;\r\n        overflow: hidden;\r\n        border-radius: 28px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: linear-gradient(\r\n          180deg,\r\n          var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96)) 0%,\r\n          var(--ms-modern-panel-surface, rgba(248, 250, 252, 0.95)) 100%\r\n        );\r\n        box-shadow: 0 28px 70px rgba(15, 23, 42, 0.28);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        backdrop-filter: blur(20px);\r\n      }\r\n\r\n      .ms-modern-event-settings__header {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        gap: 16px;\r\n        padding: 22px 22px 16px;\r\n        border-bottom: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n      }\r\n\r\n      .ms-modern-event-settings__heading {\r\n        min-width: 0;\r\n      }\r\n\r\n      .ms-modern-event-settings__eyebrow {\r\n        display: block;\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.7rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.12em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-event-settings__title {\r\n        margin: 6px 0 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1.34rem;\r\n        font-weight: 800;\r\n        line-height: 1.1;\r\n      }\r\n\r\n      .ms-modern-event-settings__subtitle {\r\n        margin: 8px 0 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        line-height: 1.5;\r\n      }\r\n\r\n      .ms-modern-event-settings__close {\r\n        width: 40px;\r\n        height: 40px;\r\n        flex: 0 0 auto;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        border-radius: 999px;\r\n        background: rgba(255, 255, 255, 0.4);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-event-settings__body {\r\n        display: grid;\r\n        gap: 14px;\r\n        padding: 18px 22px;\r\n      }\r\n\r\n      .ms-modern-event-settings__body--embedded {\r\n        flex: 1;\r\n        align-content: start;\r\n        gap: 12px;\r\n        padding-top: 12px;\r\n      }\r\n\r\n      .ms-modern-event-settings__setting-card {\r\n        display: grid;\r\n        gap: 12px;\r\n        padding: 16px;\r\n        border-radius: 20px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.72);\r\n      }\r\n\r\n      .ms-modern-event-settings__setting-card--embedded {\r\n        gap: 10px;\r\n        padding: 14px;\r\n        border-radius: 18px;\r\n      }\r\n\r\n      .ms-modern-event-settings__setting-heading {\r\n        display: grid;\r\n        grid-template-columns: auto 1fr;\r\n        gap: 12px;\r\n        align-items: flex-start;\r\n      }\r\n\r\n      .ms-modern-event-settings__setting-heading--embedded {\r\n        align-items: center;\r\n      }\r\n\r\n      .ms-modern-event-settings__setting-icon {\r\n        width: 40px;\r\n        height: 40px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 14px;\r\n        background: rgba(79, 70, 229, 0.08);\r\n        color: var(--ms-modern-brand-primary, #4f46e5);\r\n      }\r\n\r\n      .ms-modern-event-settings__setting-heading strong {\r\n        display: block;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.96rem;\r\n        font-weight: 800;\r\n      }\r\n\r\n      .ms-modern-event-settings__setting-heading p {\r\n        margin: 4px 0 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.83rem;\r\n        line-height: 1.45;\r\n      }\r\n\r\n      .ms-modern-event-settings__select {\r\n        width: 100%;\r\n        min-height: 46px;\r\n        border-radius: 14px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.94);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.92rem;\r\n        font-weight: 600;\r\n        padding: 0 14px;\r\n        outline: none;\r\n      }\r\n\r\n      .ms-modern-event-settings__segments {\r\n        display: grid;\r\n        grid-template-columns: repeat(3, minmax(0, 1fr));\r\n        gap: 8px;\r\n      }\r\n\r\n      .ms-modern-event-settings__segments--embedded {\r\n        gap: 6px;\r\n      }\r\n\r\n      .ms-modern-event-settings__segment {\r\n        min-height: 58px;\r\n        display: inline-flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 6px;\r\n        border-radius: 14px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.58);\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.76rem;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n        transition: transform 160ms ease, border-color 160ms ease, background 160ms ease, color 160ms ease;\r\n      }\r\n\r\n      .ms-modern-event-settings__segment--embedded {\r\n        min-height: 54px;\r\n      }\r\n\r\n      .ms-modern-event-settings__segment:hover {\r\n        transform: translateY(-1px);\r\n      }\r\n\r\n      .ms-modern-event-settings__segment--active {\r\n        border-color: rgba(79, 70, 229, 0.34);\r\n        background: rgba(79, 70, 229, 0.12);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        box-shadow: inset 0 0 0 1px rgba(79, 70, 229, 0.08);\r\n      }\r\n\r\n      .ms-modern-event-settings__footer {\r\n        display: grid;\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n        gap: 12px;\r\n        padding: 0 22px 22px;\r\n      }\r\n\r\n      .ms-modern-event-settings__footer--embedded {\r\n        grid-template-columns: 1fr;\r\n        margin-top: auto;\r\n        padding-top: 12px;\r\n      }\r\n\r\n      .ms-modern-event-settings__action {\r\n        min-height: 46px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 999px;\r\n        padding: 0 16px;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.92rem;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-event-settings__action--secondary {\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.64);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n      }\r\n\r\n      .ms-modern-event-settings__action--primary {\r\n        border: none;\r\n        background: linear-gradient(\r\n          135deg,\r\n          var(--ms-modern-brand-primary, #4f46e5) 0%,\r\n          var(--ms-modern-brand-secondary, #14b8a6) 55%,\r\n          var(--ms-modern-accent, #f59e0b) 100%\r\n        );\r\n        color: #fff;\r\n        box-shadow: 0 18px 34px rgba(79, 70, 229, 0.18);\r\n      }\r\n\r\n      .ms-modern-event-settings--dark {\r\n        border-color: rgba(148, 163, 184, 0.18);\r\n        color: #e2e8f0;\r\n      }\r\n\r\n      .ms-modern-event-settings--dark .ms-modern-event-settings__header {\r\n        border-bottom-color: rgba(148, 163, 184, 0.18);\r\n      }\r\n\r\n      .ms-modern-event-settings--dark .ms-modern-event-settings__eyebrow {\r\n        color: rgba(226, 232, 240, 0.62);\r\n      }\r\n\r\n      .ms-modern-event-settings--dark .ms-modern-event-settings__subtitle,\r\n      .ms-modern-event-settings--dark .ms-modern-event-settings__setting-heading p {\r\n        color: rgba(226, 232, 240, 0.74);\r\n      }\r\n\r\n      .ms-modern-event-settings--dark .ms-modern-event-settings__close,\r\n      .ms-modern-event-settings--dark .ms-modern-event-settings__action--secondary {\r\n        border-color: rgba(148, 163, 184, 0.18);\r\n        background: rgba(15, 23, 42, 0.48);\r\n        color: #e2e8f0;\r\n      }\r\n\r\n      .ms-modern-event-settings--dark .ms-modern-event-settings__setting-card {\r\n        border-color: rgba(148, 163, 184, 0.16);\r\n        background: rgba(15, 23, 42, 0.46);\r\n      }\r\n\r\n      .ms-modern-event-settings--dark .ms-modern-event-settings__setting-icon {\r\n        background: rgba(129, 140, 248, 0.14);\r\n        color: #a5b4fc;\r\n      }\r\n\r\n      .ms-modern-event-settings--dark .ms-modern-event-settings__segment {\r\n        border-color: rgba(148, 163, 184, 0.18);\r\n        background: rgba(15, 23, 42, 0.44);\r\n        color: rgba(226, 232, 240, 0.72);\r\n      }\r\n\r\n      .ms-modern-event-settings--dark .ms-modern-event-settings__segment--active {\r\n        border-color: rgba(129, 140, 248, 0.38);\r\n        background: rgba(129, 140, 248, 0.16);\r\n        color: #f8fafc;\r\n      }\r\n\r\n      @media (max-width: 640px) {\r\n        .ms-modern-event-settings__header,\r\n        .ms-modern-event-settings__body,\r\n        .ms-modern-event-settings__footer {\r\n          padding-left: 18px;\r\n          padding-right: 18px;\r\n        }\r\n\r\n        .ms-modern-event-settings__footer {\r\n          grid-template-columns: 1fr;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernEventSettingsModalComponent implements OnInit, OnChanges {\r\n  @Input() isEventSettingsModalVisible = false;\r\n  @Input() onEventSettingsClose = () => {};\r\n  @Input() onModifyEventSettings?: (options: ModifySettingsOptions) => Promise<void>;\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = 'var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96))';\r\n  @Input() isDarkMode?: boolean;\r\n  @Input() audioSetting = '';\r\n  @Input() videoSetting = '';\r\n  @Input() screenshareSetting = '';\r\n  @Input() chatSetting = '';\r\n  @Input() updateAudioSetting = (_setting: string) => {};\r\n  @Input() updateVideoSetting = (_setting: string) => {};\r\n  @Input() updateScreenshareSetting = (_setting: string) => {};\r\n  @Input() updateChatSetting = (_setting: string) => {};\r\n  @Input() updateIsSettingsModalVisible = (_isVisible: boolean) => {};\r\n  @Input() roomName = '';\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input() showAlert?: ShowAlert;\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n\r\n  readonly faMessage = faMessage;\r\n  readonly faMicrophone = faMicrophone;\r\n  readonly faDesktop = faDesktop;\r\n  readonly faBan = faBan;\r\n  readonly faCheckCircle = faCheckCircle;\r\n  readonly faLock = faLock;\r\n  readonly faTimes = faTimes;\r\n  readonly faVideo = faVideo;\r\n\r\n  audioState: EventSettingValue | string = 'allow';\r\n  videoState: EventSettingValue | string = 'allow';\r\n  screenshareState: EventSettingValue | string = 'allow';\r\n  chatState: EventSettingValue | string = 'allow';\r\n\r\n  readonly settingOptions: ReadonlyArray<{\r\n    value: EventSettingValue;\r\n    label: string;\r\n    icon: IconDefinition;\r\n  }> = [\r\n    { value: 'allow', label: 'Allow', icon: faCheckCircle },\r\n    { value: 'approval', label: 'Approval', icon: faLock },\r\n    { value: 'disallow', label: 'Disallow', icon: faBan },\r\n  ];\r\n\r\n  readonly settingSections: ReadonlyArray<{\r\n    key: EventSettingSectionKey;\r\n    title: string;\r\n    embeddedTitle: string;\r\n    description: string;\r\n    icon: IconDefinition;\r\n    ariaLabel: string;\r\n  }> = [\r\n    {\r\n      key: 'audio',\r\n      title: 'User audio',\r\n      embeddedTitle: 'Audio',\r\n      description: 'Choose whether microphones are allowed freely, blocked, or host-approved.',\r\n      icon: faMicrophone,\r\n      ariaLabel: 'User audio setting',\r\n    },\r\n    {\r\n      key: 'video',\r\n      title: 'User video',\r\n      embeddedTitle: 'Video',\r\n      description: 'Choose whether cameras are allowed freely, blocked, or host-approved.',\r\n      icon: faVideo,\r\n      ariaLabel: 'User video setting',\r\n    },\r\n    {\r\n      key: 'screenshare',\r\n      title: 'User screenshare',\r\n      embeddedTitle: 'Screen Share',\r\n      description: 'Control when participants can publish screens or presentations.',\r\n      icon: faDesktop,\r\n      ariaLabel: 'User screenshare setting',\r\n    },\r\n    {\r\n      key: 'chat',\r\n      title: 'User chat',\r\n      embeddedTitle: 'Chat',\r\n      description: 'Decide whether participant chat is available in the room.',\r\n      icon: faMessage,\r\n      ariaLabel: 'User chat setting',\r\n    },\r\n  ];\r\n\r\n  constructor(private readonly modifySettingsService: ModifySettings) {}\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\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 (\r\n      this.isVisible() &&\r\n      (\r\n        changes['isEventSettingsModalVisible'] ||\r\n        changes['audioSetting'] ||\r\n        changes['videoSetting'] ||\r\n        changes['screenshareSetting'] ||\r\n        changes['chatSetting']\r\n      )\r\n    ) {\r\n      this.updateStatesFromParameters();\r\n    }\r\n  }\r\n\r\n  isVisible(): boolean {\r\n    return this.isEmbedded() || this.isEventSettingsModalVisible;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  handleOverlayClick() {\r\n    if (!this.isEmbedded()) {\r\n      this.closeModal();\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  settingValue(section: EventSettingSectionKey): EventSettingValue | string {\r\n    switch (section) {\r\n      case 'audio':\r\n        return this.audioState;\r\n      case 'video':\r\n        return this.videoState;\r\n      case 'screenshare':\r\n        return this.screenshareState;\r\n      case 'chat':\r\n        return this.chatState;\r\n      default:\r\n        return 'allow';\r\n    }\r\n  }\r\n\r\n  setSettingValue(section: EventSettingSectionKey, value: EventSettingValue) {\r\n    switch (section) {\r\n      case 'audio':\r\n        this.audioState = value;\r\n        break;\r\n      case 'video':\r\n        this.videoState = value;\r\n        break;\r\n      case 'screenshare':\r\n        this.screenshareState = value;\r\n        break;\r\n      case 'chat':\r\n        this.chatState = value;\r\n        break;\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    if (this.isEmbedded()) {\r\n      this.closeModal();\r\n    }\r\n  }\r\n\r\n  closeModal() {\r\n    this.onEventSettingsClose();\r\n  }\r\n\r\n  resolvedOverlayStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'static',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          height: '100%',\r\n          minHeight: 0,\r\n          background: 'transparent',\r\n          backdropFilter: 'none',\r\n          zIndex: 'auto',\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          inset: 0,\r\n          width: '100%',\r\n          height: '100%',\r\n          background: this.resolvedIsDarkMode ? 'rgba(2, 8, 23, 0.72)' : 'rgba(15, 23, 42, 0.18)',\r\n          backdropFilter: 'blur(12px)',\r\n          zIndex: 999,\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.overlayStyle) };\r\n  }\r\n\r\n  resolvedContentStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'relative',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          maxWidth: 'none',\r\n          height: '100%',\r\n          maxHeight: 'none',\r\n          margin: 0,\r\n          overflowY: 'auto',\r\n          background: this.resolvedBackground(),\r\n        }\r\n      : (() => {\r\n          const screenWidth = window.innerWidth;\r\n          let modalWidth = 0.84 * screenWidth;\r\n          if (modalWidth > 460) {\r\n            modalWidth = 460;\r\n          }\r\n\r\n          return {\r\n            position: 'fixed',\r\n            width: `${modalWidth}px`,\r\n            maxHeight: 'min(82vh, 760px)',\r\n            overflowY: 'auto',\r\n            background: this.resolvedBackground(),\r\n            ...this.resolvePositionStyle(),\r\n          };\r\n        })();\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.contentStyle) };\r\n  }\r\n\r\n  private resolvePositionStyle(): Record<string, string> {\r\n    const normalizedPosition = this.position.toLowerCase();\r\n\r\n    if (normalizedPosition.includes('center')) {\r\n      return {\r\n        top: '50%',\r\n        left: '50%',\r\n        transform: 'translate(-50%, -50%)',\r\n      };\r\n    }\r\n\r\n    return {\r\n      top: this.position.includes('top') ? '16px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '16px' : 'auto',\r\n      left: this.position.includes('Left') ? '16px' : 'auto',\r\n      right: this.position.includes('Right') ? '16px' : 'auto',\r\n    };\r\n  }\r\n\r\n  private normalizeStyle(style?: Partial<CSSStyleDeclaration>): Record<string, string | number> {\r\n    return style ? ({ ...style } as Record<string, string | number>) : {};\r\n  }\r\n\r\n  private resolvedBackground(): string {\r\n    if (\r\n      this.backgroundColor &&\r\n      this.backgroundColor !== 'var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96))'\r\n    ) {\r\n      return this.backgroundColor;\r\n    }\r\n\r\n    return this.resolvedIsDarkMode\r\n      ? 'linear-gradient(180deg, rgba(15, 23, 42, 0.96) 0%, rgba(30, 41, 59, 0.94) 100%)'\r\n      : 'linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(248, 250, 252, 0.95) 100%)';\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, DoCheck, Input, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  faCamera,\r\n  faCheck,\r\n  faMicrophone,\r\n  faPhotoFilm,\r\n  faSyncAlt,\r\n  faTimes,\r\n  faVideo,\r\n} from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport {\r\n  SwitchAudio,\r\n  SwitchAudioOptions,\r\n} from '../../methods/stream-methods/switch-audio.service';\r\nimport {\r\n  SwitchVideo,\r\n  SwitchVideoOptions,\r\n} from '../../methods/stream-methods/switch-video.service';\r\nimport {\r\n  SwitchVideoAlt,\r\n  SwitchVideoAltOptions,\r\n} from '../../methods/stream-methods/switch-video-alt.service';\r\nimport type { MediaSettingsModalParameters } from '../../components/media-settings-components/media-settings-modal/media-settings-modal.component';\r\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../utils/render-mode.utils';\r\n\r\n@Component({\r\n  selector: 'app-media-settings-modal',\r\n  imports: [CommonModule, FontAwesomeModule],\r\n  template: `\r\n    <ng-container *ngIf=\"isVisible() && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              isMediaSettingsModalVisible: isMediaSettingsModalVisible,\r\n              position: position,\r\n              backgroundColor: backgroundColor,\r\n              parameters: liveParameters,\r\n              selectedVideoInput: selectedVideoInput,\r\n              selectedAudioInput: selectedAudioInput,\r\n              renderMode: renderMode,\r\n              handleModalClose: handleModalClose.bind(this),\r\n              handleSwitchCamera: handleSwitchCamera.bind(this),\r\n              handleVideoSwitch: handleVideoSwitch.bind(this),\r\n              handleAudioSwitch: handleAudioSwitch.bind(this),\r\n              showVirtual: showVirtual.bind(this),\r\n              onMediaSettingsClose: onMediaSettingsClose\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isVisible() && !customTemplate\"\r\n      class=\"ms-modern-media-settings-overlay\"\r\n      [class.ms-modern-media-settings-overlay--embedded]=\"isEmbedded()\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n      (click)=\"handleOverlayClick()\"\r\n    >\r\n      <section\r\n        class=\"ms-modern-media-settings\"\r\n        [class.ms-modern-media-settings--embedded]=\"isEmbedded()\"\r\n        [ngStyle]=\"resolvedContentStyle()\"\r\n        (click)=\"$event.stopPropagation()\"\r\n      >\r\n        <header *ngIf=\"showHeader\" class=\"ms-modern-media-settings__header\">\r\n          <div class=\"ms-modern-media-settings__heading\">\r\n            <span class=\"ms-modern-media-settings__eyebrow\">Devices</span>\r\n            <h2 class=\"ms-modern-media-settings__title\">\r\n              <fa-icon [icon]=\"faVideo\"></fa-icon>\r\n              <span>Media settings</span>\r\n            </h2>\r\n            <p class=\"ms-modern-media-settings__subtitle\">\r\n              Choose active camera and microphone inputs, then open advanced background controls.\r\n            </p>\r\n          </div>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-media-settings__close\"\r\n            aria-label=\"Close media settings\"\r\n            (click)=\"handleModalClose()\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div class=\"ms-modern-media-settings__body\">\r\n          <div *ngIf=\"showCameraHint() && isEmbedded()\" class=\"ms-modern-media-settings__hint\">\r\n            <fa-icon [icon]=\"faCamera\"></fa-icon>\r\n            <div>\r\n              <strong>Camera is currently off</strong>\r\n              <span>\r\n                You can still choose a background now! It will be applied automatically when you turn on your camera.\r\n              </span>\r\n            </div>\r\n          </div>\r\n\r\n          <div\r\n            class=\"ms-modern-media-settings__actions\"\r\n            [class.ms-modern-media-settings__actions--embedded]=\"isEmbedded()\"\r\n          >\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-media-settings__action ms-modern-media-settings__action--secondary\"\r\n              (click)=\"handleSwitchCamera()\"\r\n            >\r\n              <fa-icon [icon]=\"faSyncAlt\"></fa-icon>\r\n              <span>Switch Camera</span>\r\n            </button>\r\n\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-media-settings__action ms-modern-media-settings__action--primary\"\r\n              (click)=\"showVirtual()\"\r\n            >\r\n              <fa-icon [icon]=\"faPhotoFilm\"></fa-icon>\r\n              <span>Virtual Background</span>\r\n            </button>\r\n          </div>\r\n\r\n          <div *ngIf=\"showCameraHint() && !isEmbedded()\" class=\"ms-modern-media-settings__hint\">\r\n            <fa-icon [icon]=\"faCamera\"></fa-icon>\r\n            <div>\r\n              <strong>Camera is currently off</strong>\r\n              <span>\r\n                You can still choose a background now! It will be applied automatically when you turn on your camera.\r\n              </span>\r\n            </div>\r\n          </div>\r\n\r\n          <div\r\n            class=\"ms-modern-media-settings__tabs\"\r\n            [class.ms-modern-media-settings__tabs--embedded]=\"isEmbedded()\"\r\n            role=\"tablist\"\r\n            aria-label=\"Media settings sections\"\r\n          >\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-media-settings__tab\"\r\n              [class.ms-modern-media-settings__tab--active]=\"activeSection === 'video'\"\r\n              [attr.aria-pressed]=\"activeSection === 'video'\"\r\n              (click)=\"activeSection = 'video'\"\r\n            >\r\n              <fa-icon [icon]=\"faCamera\"></fa-icon>\r\n              <span>Video</span>\r\n              <small *ngIf=\"!isEmbedded()\">{{ liveParameters.videoInputs.length }}</small>\r\n            </button>\r\n\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-media-settings__tab\"\r\n              [class.ms-modern-media-settings__tab--active]=\"activeSection === 'audio'\"\r\n              [attr.aria-pressed]=\"activeSection === 'audio'\"\r\n              (click)=\"activeSection = 'audio'\"\r\n            >\r\n              <fa-icon [icon]=\"faMicrophone\"></fa-icon>\r\n              <span>Audio</span>\r\n              <small *ngIf=\"!isEmbedded()\">{{ liveParameters.audioInputs.length }}</small>\r\n            </button>\r\n          </div>\r\n\r\n          <section *ngIf=\"activeSection === 'video'\" class=\"ms-modern-media-settings__section\">\r\n            <div class=\"ms-modern-media-settings__section-heading\">\r\n              <div class=\"ms-modern-media-settings__section-title\">\r\n                <fa-icon [icon]=\"faCamera\"></fa-icon>\r\n                <span>Video Input</span>\r\n              </div>\r\n              <p class=\"ms-modern-media-settings__section-description\">\r\n                {{ getSectionDescription('video') }}\r\n              </p>\r\n            </div>\r\n\r\n            <div *ngIf=\"liveParameters.videoInputs.length > 0; else emptyVideoState\" class=\"ms-modern-media-settings__device-list\">\r\n              <button\r\n                *ngFor=\"let input of liveParameters.videoInputs; let index = index\"\r\n                type=\"button\"\r\n                class=\"ms-modern-media-settings__device\"\r\n                [class.ms-modern-media-settings__device--active]=\"input.deviceId === selectedVideoInput\"\r\n                (click)=\"handleVideoSwitch(input.deviceId)\"\r\n              >\r\n                <span class=\"ms-modern-media-settings__device-name\">\r\n                  {{ getDeviceLabel(input, 'Camera', index) }}\r\n                </span>\r\n                <fa-icon *ngIf=\"input.deviceId === selectedVideoInput\" [icon]=\"faCheck\"></fa-icon>\r\n              </button>\r\n            </div>\r\n          </section>\r\n\r\n          <section *ngIf=\"activeSection === 'audio'\" class=\"ms-modern-media-settings__section\">\r\n            <div class=\"ms-modern-media-settings__section-heading\">\r\n              <div class=\"ms-modern-media-settings__section-title\">\r\n                <fa-icon [icon]=\"faMicrophone\"></fa-icon>\r\n                <span>Audio Input</span>\r\n              </div>\r\n              <p class=\"ms-modern-media-settings__section-description\">\r\n                {{ getSectionDescription('audio') }}\r\n              </p>\r\n            </div>\r\n\r\n            <div *ngIf=\"liveParameters.audioInputs.length > 0; else emptyAudioState\" class=\"ms-modern-media-settings__device-list\">\r\n              <button\r\n                *ngFor=\"let input of liveParameters.audioInputs; let index = index\"\r\n                type=\"button\"\r\n                class=\"ms-modern-media-settings__device\"\r\n                [class.ms-modern-media-settings__device--active]=\"input.deviceId === selectedAudioInput\"\r\n                (click)=\"handleAudioSwitch(input.deviceId)\"\r\n              >\r\n                <span class=\"ms-modern-media-settings__device-name\">\r\n                  {{ getDeviceLabel(input, 'Microphone', index) }}\r\n                </span>\r\n                <fa-icon *ngIf=\"input.deviceId === selectedAudioInput\" [icon]=\"faCheck\"></fa-icon>\r\n              </button>\r\n            </div>\r\n          </section>\r\n        </div>\r\n      </section>\r\n    </div>\r\n\r\n    <ng-template #emptyVideoState>\r\n      <div class=\"ms-modern-media-settings__empty\">\r\n        <strong>No cameras detected</strong>\r\n        <span>Grant camera permission or connect a camera, then reopen media settings.</span>\r\n      </div>\r\n    </ng-template>\r\n\r\n    <ng-template #emptyAudioState>\r\n      <div class=\"ms-modern-media-settings__empty\">\r\n        <strong>No microphones detected</strong>\r\n        <span>Grant microphone permission or connect an input device, then reopen media settings.</span>\r\n      </div>\r\n    </ng-template>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-media-settings-overlay {\r\n        display: block;\r\n      }\r\n\r\n      .ms-modern-media-settings {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: column;\r\n        min-height: 0;\r\n        overflow: hidden;\r\n        border-radius: 28px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: linear-gradient(\r\n          180deg,\r\n          var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96)) 0%,\r\n          var(--ms-modern-panel-surface, rgba(248, 250, 252, 0.95)) 100%\r\n        );\r\n        box-shadow: 0 28px 70px rgba(15, 23, 42, 0.28);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        backdrop-filter: blur(24px);\r\n      }\r\n\r\n      .ms-modern-media-settings * {\r\n        box-sizing: border-box;\r\n      }\r\n\r\n      .ms-modern-media-settings--embedded {\r\n        height: 100%;\r\n        border-radius: 24px;\r\n      }\r\n\r\n      .ms-modern-media-settings__header {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        gap: 16px;\r\n        padding: 22px 22px 16px;\r\n        border-bottom: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: linear-gradient(180deg, rgba(255, 255, 255, 0.36), transparent);\r\n      }\r\n\r\n      .ms-modern-media-settings__heading {\r\n        min-width: 0;\r\n      }\r\n\r\n      .ms-modern-media-settings__eyebrow {\r\n        display: block;\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.7rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.12em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-media-settings__title {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n        margin: 6px 0 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1.38rem;\r\n        font-weight: 800;\r\n        line-height: 1.1;\r\n      }\r\n\r\n      .ms-modern-media-settings__subtitle {\r\n        margin: 8px 0 0;\r\n        max-width: 32rem;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        line-height: 1.5;\r\n      }\r\n\r\n      .ms-modern-media-settings__close {\r\n        width: 40px;\r\n        height: 40px;\r\n        flex: 0 0 auto;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        border-radius: 999px;\r\n        background: rgba(255, 255, 255, 0.42);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-media-settings__body {\r\n        display: flex;\r\n        flex: 1;\r\n        min-height: 0;\r\n        flex-direction: column;\r\n        gap: 14px;\r\n        padding: 18px 22px 22px;\r\n        overflow-y: auto;\r\n        overflow-x: hidden;\r\n      }\r\n\r\n      .ms-modern-media-settings__actions {\r\n        display: grid;\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n        gap: 10px;\r\n      }\r\n\r\n      .ms-modern-media-settings__actions--embedded {\r\n        display: flex;\r\n        flex-direction: column;\r\n      }\r\n\r\n      .ms-modern-media-settings__action {\r\n        min-height: 46px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 9px;\r\n        width: 100%;\r\n        border-radius: 999px;\r\n        padding: 0 16px;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.92rem;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-media-settings__action--primary {\r\n        border: none;\r\n        background: linear-gradient(\r\n          135deg,\r\n          var(--ms-modern-brand-primary, #4f46e5) 0%,\r\n          var(--ms-modern-brand-secondary, #14b8a6) 58%,\r\n          var(--ms-modern-accent, #f59e0b) 100%\r\n        );\r\n        color: #fff;\r\n        box-shadow: 0 20px 40px rgba(79, 70, 229, 0.22);\r\n      }\r\n\r\n      .ms-modern-media-settings__action--secondary {\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.6);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n      }\r\n\r\n      .ms-modern-media-settings__hint {\r\n        display: grid;\r\n        grid-template-columns: auto 1fr;\r\n        gap: 12px;\r\n        align-items: flex-start;\r\n        padding: 14px 16px;\r\n        border-radius: 18px;\r\n        border: 1px solid rgba(59, 130, 246, 0.18);\r\n        background: rgba(59, 130, 246, 0.08);\r\n        color: #1d4ed8;\r\n      }\r\n\r\n      .ms-modern-media-settings__hint strong,\r\n      .ms-modern-media-settings__hint span {\r\n        display: block;\r\n      }\r\n\r\n      .ms-modern-media-settings__hint strong {\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.92rem;\r\n        font-weight: 700;\r\n      }\r\n\r\n      .ms-modern-media-settings__hint span {\r\n        margin-top: 4px;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.82rem;\r\n        line-height: 1.45;\r\n      }\r\n\r\n      .ms-modern-media-settings__tabs {\r\n        display: grid;\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n        gap: 8px;\r\n        padding: 4px;\r\n        border-radius: 18px;\r\n        background: rgba(148, 163, 184, 0.1);\r\n      }\r\n\r\n      .ms-modern-media-settings__tabs--embedded {\r\n        padding: 3px;\r\n        border-radius: 14px;\r\n        background: rgba(15, 23, 42, 0.08);\r\n        box-shadow: inset 0 1px 3px rgba(15, 23, 42, 0.12);\r\n      }\r\n\r\n      .ms-modern-media-settings__tab {\r\n        min-height: 44px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 8px;\r\n        border: none;\r\n        border-radius: 14px;\r\n        background: transparent;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        cursor: pointer;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        font-weight: 700;\r\n      }\r\n\r\n      .ms-modern-media-settings__tab small {\r\n        min-width: 24px;\r\n        padding: 2px 8px;\r\n        border-radius: 999px;\r\n        background: rgba(148, 163, 184, 0.18);\r\n        font-size: 0.74rem;\r\n      }\r\n\r\n      .ms-modern-media-settings__tab--active {\r\n        background: rgba(255, 255, 255, 0.86);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        box-shadow: 0 10px 22px rgba(15, 23, 42, 0.08);\r\n      }\r\n\r\n      .ms-modern-media-settings__section {\r\n        display: grid;\r\n        gap: 12px;\r\n      }\r\n\r\n      .ms-modern-media-settings__section-heading {\r\n        display: grid;\r\n        gap: 4px;\r\n      }\r\n\r\n      .ms-modern-media-settings__section-title {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 9px;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1rem;\r\n        font-weight: 700;\r\n      }\r\n\r\n      .ms-modern-media-settings__section-description {\r\n        margin: 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.84rem;\r\n        line-height: 1.45;\r\n      }\r\n\r\n      .ms-modern-media-settings__device-list {\r\n        display: grid;\r\n        gap: 10px;\r\n      }\r\n\r\n      .ms-modern-media-settings__device {\r\n        min-height: 50px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        gap: 12px;\r\n        width: 100%;\r\n        padding: 0 16px;\r\n        border-radius: 18px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.74);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        cursor: pointer;\r\n        text-align: left;\r\n      }\r\n\r\n      .ms-modern-media-settings__device--active {\r\n        border-color: rgba(79, 70, 229, 0.34);\r\n        background: rgba(79, 70, 229, 0.08);\r\n        box-shadow: inset 0 0 0 1px rgba(79, 70, 229, 0.08);\r\n      }\r\n\r\n      .ms-modern-media-settings__device-name {\r\n        min-width: 0;\r\n        overflow: hidden;\r\n        text-overflow: ellipsis;\r\n        white-space: nowrap;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        font-weight: 600;\r\n      }\r\n\r\n      .ms-modern-media-settings__empty {\r\n        display: grid;\r\n        gap: 4px;\r\n        padding: 20px 16px;\r\n        border-radius: 18px;\r\n        border: 1px dashed var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        text-align: center;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n      }\r\n\r\n      .ms-modern-media-settings__empty strong {\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        font-size: 0.92rem;\r\n      }\r\n\r\n      .ms-modern-media-settings__empty span {\r\n        font-size: 0.82rem;\r\n        line-height: 1.45;\r\n      }\r\n\r\n      @media (max-width: 640px) {\r\n        .ms-modern-media-settings__header,\r\n        .ms-modern-media-settings__body {\r\n          padding-left: 18px;\r\n          padding-right: 18px;\r\n        }\r\n\r\n        .ms-modern-media-settings__actions {\r\n          grid-template-columns: 1fr;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernMediaSettingsModalComponent implements OnInit, OnChanges, DoCheck {\r\n  @Input() isMediaSettingsModalVisible = false;\r\n  @Input() onMediaSettingsClose = () => {};\r\n  @Input() switchCameraOnPress?: (options: SwitchVideoAltOptions) => Promise<void>;\r\n  @Input() switchVideoOnPress?: (options: SwitchVideoOptions) => Promise<void>;\r\n  @Input() switchAudioOnPress?: (options: SwitchAudioOptions) => Promise<void>;\r\n  @Input() parameters: MediaSettingsModalParameters = {} as MediaSettingsModalParameters;\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor =\r\n    'var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96))';\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n  @Input() onOpenBackgroundSidebar?: () => void;\r\n\r\n  readonly faCamera = faCamera;\r\n  readonly faCheck = faCheck;\r\n  readonly faMicrophone = faMicrophone;\r\n  readonly faPhotoFilm = faPhotoFilm;\r\n  readonly faSyncAlt = faSyncAlt;\r\n  readonly faTimes = faTimes;\r\n  readonly faVideo = faVideo;\r\n\r\n  activeSection: 'video' | 'audio' = 'video';\r\n  liveParameters: MediaSettingsModalParameters = {} as MediaSettingsModalParameters;\r\n  selectedVideoInput = '';\r\n  selectedAudioInput = '';\r\n  prevSelectedVideoInput = '';\r\n  prevSelectedAudioInput = '';\r\n  private lastResolvedSignature = '';\r\n\r\n  constructor(\r\n    private readonly switchAudioService: SwitchAudio,\r\n    private readonly switchVideoService: SwitchVideo,\r\n    private readonly switchVideoAltService: SwitchVideoAlt,\r\n  ) {}\r\n\r\n  ngOnInit() {\r\n    this.setupDefaultServices();\r\n    this.refreshState();\r\n  }\r\n\r\n  ngOnChanges(_changes: SimpleChanges) {\r\n    this.setupDefaultServices();\r\n    this.refreshState();\r\n  }\r\n\r\n  ngDoCheck() {\r\n    if (!this.isVisible()) {\r\n      return;\r\n    }\r\n\r\n    this.syncLiveParameters();\r\n  }\r\n\r\n  isVisible(): boolean {\r\n    return this.isEmbedded() || this.isMediaSettingsModalVisible;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  handleOverlayClick() {\r\n    if (!this.isEmbedded()) {\r\n      this.handleModalClose();\r\n    }\r\n  }\r\n\r\n  async handleSwitchCamera() {\r\n    await this.resolvedCameraHandler()({ parameters: this.resolveParameters() });\r\n    this.refreshState();\r\n  }\r\n\r\n  async handleVideoSwitch(eventOrDeviceId: Event | string) {\r\n    const deviceId = this.extractDeviceId(eventOrDeviceId);\r\n\r\n    if (!deviceId || deviceId === this.prevSelectedVideoInput) {\r\n      return;\r\n    }\r\n\r\n    this.selectedVideoInput = deviceId;\r\n    this.prevSelectedVideoInput = deviceId;\r\n    await this.resolvedVideoHandler()({\r\n      videoPreference: deviceId,\r\n      parameters: this.resolveParameters(),\r\n    });\r\n    this.refreshState();\r\n  }\r\n\r\n  async handleAudioSwitch(eventOrDeviceId: Event | string) {\r\n    const deviceId = this.extractDeviceId(eventOrDeviceId);\r\n\r\n    if (!deviceId || deviceId === this.prevSelectedAudioInput) {\r\n      return;\r\n    }\r\n\r\n    this.selectedAudioInput = deviceId;\r\n    this.prevSelectedAudioInput = deviceId;\r\n    await this.resolvedAudioHandler()({\r\n      audioPreference: deviceId,\r\n      parameters: this.resolveParameters(),\r\n    });\r\n    this.refreshState();\r\n  }\r\n\r\n  handleModalClose() {\r\n    this.onMediaSettingsClose();\r\n  }\r\n\r\n  showVirtual() {\r\n    if (this.isEmbedded() && this.onOpenBackgroundSidebar) {\r\n      this.onOpenBackgroundSidebar();\r\n      return;\r\n    }\r\n\r\n    const parameters = this.resolveParameters();\r\n    parameters.updateIsBackgroundModalVisible?.(!parameters.isBackgroundModalVisible);\r\n    this.refreshState();\r\n  }\r\n\r\n  showCameraHint(): boolean {\r\n    return this.liveParameters.videoAlreadyOn === false;\r\n  }\r\n\r\n  getDeviceLabel(device: MediaDeviceInfo, fallback: string, index: number): string {\r\n    const label = device.label?.trim();\r\n\r\n    if (label) {\r\n      return label;\r\n    }\r\n\r\n    if (device.deviceId?.trim()) {\r\n      return `${fallback} ${index + 1}`;\r\n    }\r\n\r\n    return `${fallback} ${index + 1}`;\r\n  }\r\n\r\n  getSectionDescription(section: 'video' | 'audio'): string {\r\n    const inputs = section === 'video' ? this.liveParameters.videoInputs : this.liveParameters.audioInputs;\r\n    const baseDescription =\r\n      section === 'video'\r\n        ? 'Select the camera used for this room.'\r\n        : 'Select the microphone used for this room.';\r\n\r\n    if (inputs.length > 0 && inputs.every((device) => !device.label?.trim())) {\r\n      return `${baseDescription} Device names appear after camera and microphone access is granted.`;\r\n    }\r\n\r\n    return baseDescription;\r\n  }\r\n\r\n  resolvedOverlayStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'static',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          height: '100%',\r\n          minHeight: 0,\r\n          background: 'transparent',\r\n          zIndex: 'auto',\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          inset: 0,\r\n          width: '100%',\r\n          height: '100%',\r\n          background: 'rgba(2, 8, 23, 0.68)',\r\n          zIndex: 999,\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.overlayStyle) };\r\n  }\r\n\r\n  resolvedContentStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'relative',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          maxWidth: 'none',\r\n          height: '100%',\r\n          maxHeight: 'none',\r\n          margin: 0,\r\n          background: this.backgroundColor,\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          width: 'min(480px, calc(100vw - 32px))',\r\n          maxHeight: 'min(760px, calc(100vh - 32px))',\r\n          background: this.backgroundColor,\r\n          ...this.resolvePositionStyle(),\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.contentStyle) };\r\n  }\r\n\r\n  private setupDefaultServices() {\r\n    if (!this.switchCameraOnPress) {\r\n      this.switchCameraOnPress = this.switchVideoAltService.switchVideoAlt.bind(\r\n        this.switchVideoAltService,\r\n      );\r\n    }\r\n\r\n    if (!this.switchVideoOnPress) {\r\n      this.switchVideoOnPress = this.switchVideoService.switchVideo.bind(this.switchVideoService);\r\n    }\r\n\r\n    if (!this.switchAudioOnPress) {\r\n      this.switchAudioOnPress = this.switchAudioService.switchAudio.bind(this.switchAudioService);\r\n    }\r\n  }\r\n\r\n  private refreshState() {\r\n    this.syncLiveParameters(true);\r\n\r\n    this.ensureDefaultSelections();\r\n  }\r\n\r\n  private syncLiveParameters(force = false) {\r\n    const resolvedParameters = this.resolveParameters();\r\n    const signature = this.createParameterSignature(resolvedParameters);\r\n\r\n    if (!force && signature === this.lastResolvedSignature) {\r\n      return;\r\n    }\r\n\r\n    this.liveParameters = resolvedParameters;\r\n    this.lastResolvedSignature = signature;\r\n\r\n    const videoInputs = resolvedParameters.videoInputs ?? [];\r\n    const audioInputs = resolvedParameters.audioInputs ?? [];\r\n\r\n    this.selectedVideoInput = this.resolveSelectedDevice(\r\n      this.selectedVideoInput,\r\n      resolvedParameters.userDefaultVideoInputDevice,\r\n      videoInputs,\r\n    );\r\n    this.selectedAudioInput = this.resolveSelectedDevice(\r\n      this.selectedAudioInput,\r\n      resolvedParameters.userDefaultAudioInputDevice,\r\n      audioInputs,\r\n    );\r\n    this.prevSelectedVideoInput = this.selectedVideoInput;\r\n    this.prevSelectedAudioInput = this.selectedAudioInput;\r\n\r\n    if (this.activeSection === 'video' && videoInputs.length === 0 && audioInputs.length > 0) {\r\n      this.activeSection = 'audio';\r\n    }\r\n\r\n    if (this.activeSection === 'audio' && audioInputs.length === 0 && videoInputs.length > 0) {\r\n      this.activeSection = 'video';\r\n    }\r\n  }\r\n\r\n  private ensureDefaultSelections() {\r\n    const videoInputs = this.liveParameters.videoInputs ?? [];\r\n    const audioInputs = this.liveParameters.audioInputs ?? [];\r\n\r\n    if (!this.liveParameters.userDefaultVideoInputDevice && videoInputs.length > 0) {\r\n      this.selectedVideoInput = videoInputs[0].deviceId;\r\n      this.prevSelectedVideoInput = '';\r\n      void this.handleVideoSwitch(this.selectedVideoInput);\r\n    }\r\n\r\n    if (!this.liveParameters.userDefaultAudioInputDevice && audioInputs.length > 0) {\r\n      this.selectedAudioInput = audioInputs[0].deviceId;\r\n      this.prevSelectedAudioInput = '';\r\n      void this.handleAudioSwitch(this.selectedAudioInput);\r\n    }\r\n  }\r\n\r\n  private resolveParameters(): MediaSettingsModalParameters {\r\n    const freshParameters = this.parameters?.getUpdatedAllParams\r\n      ? this.parameters.getUpdatedAllParams()\r\n      : this.parameters;\r\n\r\n    return {\r\n      ...(freshParameters ?? {}),\r\n      videoInputs: freshParameters?.videoInputs ?? [],\r\n      audioInputs: freshParameters?.audioInputs ?? [],\r\n      userDefaultVideoInputDevice:\r\n        freshParameters?.userDefaultVideoInputDevice ?? freshParameters?.videoInputs?.[0]?.deviceId ?? '',\r\n      userDefaultAudioInputDevice:\r\n        freshParameters?.userDefaultAudioInputDevice ?? freshParameters?.audioInputs?.[0]?.deviceId ?? '',\r\n      isBackgroundModalVisible: freshParameters?.isBackgroundModalVisible ?? false,\r\n      updateIsBackgroundModalVisible:\r\n        freshParameters?.updateIsBackgroundModalVisible ?? (() => {}),\r\n    } as MediaSettingsModalParameters;\r\n  }\r\n\r\n  private createParameterSignature(parameters: MediaSettingsModalParameters): string {\r\n    const videoSignature = (parameters.videoInputs ?? [])\r\n      .map((device) => `${device.deviceId}:${device.label}:${device.kind}`)\r\n      .join('|');\r\n    const audioSignature = (parameters.audioInputs ?? [])\r\n      .map((device) => `${device.deviceId}:${device.label}:${device.kind}`)\r\n      .join('|');\r\n\r\n    return [\r\n      parameters.userDefaultVideoInputDevice ?? '',\r\n      parameters.userDefaultAudioInputDevice ?? '',\r\n      videoSignature,\r\n      audioSignature,\r\n      parameters.videoAlreadyOn ? '1' : '0',\r\n      parameters.isBackgroundModalVisible ? '1' : '0',\r\n    ].join('::');\r\n  }\r\n\r\n  private resolveSelectedDevice(\r\n    currentSelection: string,\r\n    resolvedSelection: string | undefined,\r\n    inputs: MediaDeviceInfo[],\r\n  ): string {\r\n    if (resolvedSelection) {\r\n      return resolvedSelection;\r\n    }\r\n\r\n    if (currentSelection && inputs.some((input) => input.deviceId === currentSelection)) {\r\n      return currentSelection;\r\n    }\r\n\r\n    return inputs[0]?.deviceId ?? '';\r\n  }\r\n\r\n  private resolvedCameraHandler(): (options: SwitchVideoAltOptions) => Promise<void> {\r\n    return (\r\n      this.switchCameraOnPress ??\r\n      this.switchVideoAltService.switchVideoAlt.bind(this.switchVideoAltService)\r\n    );\r\n  }\r\n\r\n  private resolvedVideoHandler(): (options: SwitchVideoOptions) => Promise<void> {\r\n    return this.switchVideoOnPress ?? this.switchVideoService.switchVideo.bind(this.switchVideoService);\r\n  }\r\n\r\n  private resolvedAudioHandler(): (options: SwitchAudioOptions) => Promise<void> {\r\n    return this.switchAudioOnPress ?? this.switchAudioService.switchAudio.bind(this.switchAudioService);\r\n  }\r\n\r\n  private extractDeviceId(eventOrDeviceId: Event | string): string {\r\n    if (typeof eventOrDeviceId === 'string') {\r\n      return eventOrDeviceId;\r\n    }\r\n\r\n    return (eventOrDeviceId.target as HTMLSelectElement | null)?.value ?? '';\r\n  }\r\n\r\n  private resolvePositionStyle(): Record<string, string> {\r\n    const normalizedPosition = this.position.toLowerCase();\r\n\r\n    if (normalizedPosition.includes('center')) {\r\n      return {\r\n        top: '50%',\r\n        left: '50%',\r\n        transform: 'translate(-50%, -50%)',\r\n      };\r\n    }\r\n\r\n    return {\r\n      top: this.position.includes('top') ? '16px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '16px' : 'auto',\r\n      left: this.position.includes('Left') ? '16px' : 'auto',\r\n      right: this.position.includes('Right') ? '16px' : 'auto',\r\n    };\r\n  }\r\n\r\n  private normalizeStyle(style?: Partial<CSSStyleDeclaration>): Record<string, string | number> {\r\n    return style ? ({ ...style } as Record<string, string | number>) : {};\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, TemplateRef } from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  faArrowLeft,\r\n  faBars,\r\n  faMoon,\r\n  faSun,\r\n  faTimes,\r\n} from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport { EventType } from '../../@types/types';\r\nimport { CustomButton, CustomButtons } from '../../components/menu-components/custom-buttons/custom-buttons.component';\r\nimport { MeetingIdComponent } from '../../components/menu-components/meeting-id-component/meeting-id-component.component';\r\nimport { MeetingPasscodeComponent } from '../../components/menu-components/meeting-passcode-component/meeting-passcode-component.component';\r\nimport { ShareButtonsComponent } from '../../components/menu-components/share-buttons-component/share-buttons-component.component';\r\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../utils/render-mode.utils';\r\n\r\n@Component({\r\n  selector: 'app-modern-menu-modal',\r\n  imports: [\r\n    CommonModule,\r\n    FontAwesomeModule,\r\n    CustomButtons,\r\n    MeetingIdComponent,\r\n    MeetingPasscodeComponent,\r\n    ShareButtonsComponent,\r\n  ],\r\n  template: `\r\n    <ng-container *ngIf=\"isVisible && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              isVisible: isVisible,\r\n              isDarkMode: resolvedIsDarkMode,\r\n              customButtons: customButtons,\r\n              roomName: roomName,\r\n              adminPasscode: adminPasscode,\r\n              islevel: islevel,\r\n              eventType: eventType,\r\n              localLink: localLink,\r\n              onToggleTheme: onToggleTheme,\r\n              onClose: onClose\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isVisible && !customTemplate\"\r\n      class=\"ms-modern-modal-shell\"\r\n      [class.ms-modern-modal-shell--embedded]=\"isEmbedded()\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n      (click)=\"handleOverlayClick()\"\r\n    >\r\n      <section\r\n        class=\"ms-modern-menu-modal\"\r\n        [class.ms-modern-menu-modal--embedded]=\"isEmbedded()\"\r\n        [class.ms-modern-menu-modal--dark]=\"resolvedIsDarkMode\"\r\n        [ngStyle]=\"resolvedContentStyle()\"\r\n        (click)=\"$event.stopPropagation()\"\r\n      >\r\n        <header *ngIf=\"showHeader\" class=\"ms-modern-menu-modal__header\">\r\n          <button\r\n            *ngIf=\"showBackButton\"\r\n            type=\"button\"\r\n            class=\"ms-modern-menu-modal__back\"\r\n            [attr.aria-label]=\"backLabel || 'Back'\"\r\n            (click)=\"handleBack()\"\r\n          >\r\n            <fa-icon [icon]=\"faArrowLeft\"></fa-icon>\r\n            <span>{{ backLabel || 'Back' }}</span>\r\n          </button>\r\n\r\n          <div class=\"ms-modern-menu-modal__title-wrap\">\r\n            <span class=\"ms-modern-menu-modal__eyebrow\">{{ headerEyebrow() }}</span>\r\n            <h2 class=\"ms-modern-menu-modal__title\">\r\n              <fa-icon [icon]=\"faBars\"></fa-icon>\r\n              <span>{{ title || 'Menu' }}</span>\r\n            </h2>\r\n            <p class=\"ms-modern-menu-modal__subtitle\">\r\n              {{ headerSubtitle() }}\r\n            </p>\r\n          </div>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-menu-modal__close\"\r\n            aria-label=\"Close menu\"\r\n            (click)=\"handleClose()\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div class=\"ms-modern-menu-modal__body\">\r\n          <ng-container *ngIf=\"showDefaultSections\">\r\n            <section class=\"ms-modern-menu-modal__panel\">\r\n              <div class=\"ms-modern-menu-modal__panel-heading\">\r\n                <span class=\"ms-modern-menu-modal__panel-label\">Theme</span>\r\n                <span class=\"ms-modern-menu-modal__panel-copy\">Switch the room shell without leaving the sidebar.</span>\r\n              </div>\r\n\r\n              <div class=\"ms-modern-menu-modal__theme-toggle\" role=\"group\" aria-label=\"Theme mode\">\r\n                <button\r\n                  type=\"button\"\r\n                  class=\"ms-modern-menu-modal__theme-button\"\r\n                  [class.ms-modern-menu-modal__theme-button--active]=\"resolvedIsDarkMode\"\r\n                  (click)=\"toggleTheme(true)\"\r\n                >\r\n                  <fa-icon [icon]=\"faMoon\"></fa-icon>\r\n                  <span>Dark</span>\r\n                </button>\r\n\r\n                <button\r\n                  type=\"button\"\r\n                  class=\"ms-modern-menu-modal__theme-button\"\r\n                  [class.ms-modern-menu-modal__theme-button--active]=\"!resolvedIsDarkMode\"\r\n                  (click)=\"toggleTheme(false)\"\r\n                >\r\n                  <fa-icon [icon]=\"faSun\"></fa-icon>\r\n                  <span>Light</span>\r\n                </button>\r\n              </div>\r\n            </section>\r\n\r\n            <section class=\"ms-modern-menu-modal__panel\">\r\n              <div class=\"ms-modern-menu-modal__panel-heading\">\r\n                <span class=\"ms-modern-menu-modal__panel-label\">Actions</span>\r\n                <span class=\"ms-modern-menu-modal__panel-copy\">Launch secondary room tools from the same sidebar surface.</span>\r\n              </div>\r\n\r\n              <app-custom-buttons\r\n                [buttons]=\"customButtons\"\r\n                [isDarkMode]=\"resolvedIsDarkMode\"\r\n                [containerAttributes]=\"{\r\n                  style: {\r\n                    display: 'flex',\r\n                    flexDirection: 'column',\r\n                    gap: '10px'\r\n                  }\r\n                }\"\r\n              ></app-custom-buttons>\r\n            </section>\r\n\r\n            <section class=\"ms-modern-menu-modal__panel\">\r\n              <div class=\"ms-modern-menu-modal__panel-heading\">\r\n                <span class=\"ms-modern-menu-modal__panel-label\">Meeting ID</span>\r\n                <span class=\"ms-modern-menu-modal__panel-copy\">Copy the active room identifier instantly.</span>\r\n              </div>\r\n\r\n              <app-meeting-id-component\r\n                [meetingID]=\"roomName\"\r\n                [labelText]=\"'Meeting ID'\"\r\n                [isDarkMode]=\"resolvedIsDarkMode\"\r\n              ></app-meeting-id-component>\r\n            </section>\r\n\r\n            <section *ngIf=\"islevel === '2'\" class=\"ms-modern-menu-modal__panel\">\r\n              <div class=\"ms-modern-menu-modal__panel-heading\">\r\n                <span class=\"ms-modern-menu-modal__panel-label\">Host Passcode</span>\r\n                <span class=\"ms-modern-menu-modal__panel-copy\">Keep moderator access details close by while you manage the room.</span>\r\n              </div>\r\n\r\n              <app-meeting-passcode-component\r\n                [meetingPasscode]=\"adminPasscode\"\r\n                [labelText]=\"'Host Passcode'\"\r\n                [isDarkMode]=\"resolvedIsDarkMode\"\r\n              ></app-meeting-passcode-component>\r\n            </section>\r\n\r\n            <section *ngIf=\"shareButtons\" class=\"ms-modern-menu-modal__panel\">\r\n              <div class=\"ms-modern-menu-modal__panel-heading\">\r\n                <span class=\"ms-modern-menu-modal__panel-label\">Share</span>\r\n                <span class=\"ms-modern-menu-modal__panel-copy\">Send room access through the built-in sharing actions.</span>\r\n              </div>\r\n\r\n              <app-share-buttons-component\r\n                [meetingID]=\"roomName\"\r\n                [eventType]=\"eventType\"\r\n                [isDarkMode]=\"resolvedIsDarkMode\"\r\n                [localLink]=\"localLink\"\r\n              ></app-share-buttons-component>\r\n            </section>\r\n          </ng-container>\r\n\r\n          <ng-content></ng-content>\r\n        </div>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-modal-shell {\r\n        position: fixed;\r\n        inset: 0;\r\n        z-index: 999;\r\n        background: rgba(5, 9, 20, 0.56);\r\n      }\r\n\r\n      .ms-modern-modal-shell--embedded {\r\n        background: transparent;\r\n        z-index: auto;\r\n      }\r\n\r\n      .ms-modern-menu-modal {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 16px;\r\n        overflow: hidden;\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        background:\r\n          linear-gradient(\r\n            180deg,\r\n            var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94)) 0%,\r\n            var(--ms-modern-panel-surface, rgba(255, 255, 255, 0.82)) 100%\r\n          );\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        border-radius: 28px;\r\n        box-shadow: var(--ms-modern-shadow-panel, 0 24px 64px rgba(14, 30, 53, 0.16));\r\n        backdrop-filter: blur(20px);\r\n      }\r\n\r\n      .ms-modern-menu-modal--embedded {\r\n        border-radius: 24px;\r\n      }\r\n\r\n      .ms-modern-menu-modal__header {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        flex-wrap: wrap;\r\n        gap: 16px;\r\n        padding: 16px 18px 0;\r\n      }\r\n\r\n      .ms-modern-menu-modal__back {\r\n        flex: 0 0 auto;\r\n        min-height: 36px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        padding: 0 14px;\r\n        border-radius: 999px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        background: color-mix(in srgb, var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94)) 88%, rgba(226, 232, 240, 0.72));\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.78rem;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n        box-shadow: 0 10px 24px rgba(14, 30, 53, 0.12);\r\n      }\r\n\r\n      .ms-modern-menu-modal__title-wrap {\r\n        min-width: 0;\r\n        flex: 1 1 220px;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 6px;\r\n      }\r\n\r\n      .ms-modern-menu-modal__eyebrow {\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.68rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.1em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-menu-modal__title {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        margin: 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.94rem;\r\n        font-weight: 800;\r\n        line-height: 1.2;\r\n      }\r\n\r\n      .ms-modern-menu-modal__subtitle {\r\n        margin: 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.78rem;\r\n        line-height: 1.5;\r\n      }\r\n\r\n      .ms-modern-menu-modal__close {\r\n        flex: 0 0 auto;\r\n        width: 36px;\r\n        height: 36px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 999px;\r\n        border: 1px solid var(--ms-modern-border-strong, rgba(46, 108, 188, 0.34));\r\n        background: color-mix(in srgb, var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94)) 86%, rgba(226, 232, 240, 0.8));\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        box-shadow: 0 12px 28px rgba(14, 30, 53, 0.12);\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-menu-modal__body {\r\n        flex: 1;\r\n        min-height: 0;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 12px;\r\n        padding: 0 18px 18px;\r\n        overflow-y: auto;\r\n      }\r\n\r\n      .ms-modern-menu-modal__panel {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 10px;\r\n        padding: 14px 16px;\r\n        border-radius: 18px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        background: color-mix(in srgb, var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94)) 92%, rgba(226, 232, 240, 0.68));\r\n        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.34);\r\n        box-sizing: border-box;\r\n      }\r\n\r\n      .ms-modern-menu-modal__panel-heading {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 4px;\r\n      }\r\n\r\n      .ms-modern-menu-modal__panel-label {\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.72rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.08em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-menu-modal__panel-copy {\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.78rem;\r\n        line-height: 1.45;\r\n      }\r\n\r\n      .ms-modern-menu-modal__theme-toggle {\r\n        display: grid;\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n        gap: 10px;\r\n      }\r\n\r\n      .ms-modern-menu-modal__theme-button {\r\n        min-height: 38px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 8px;\r\n        border-radius: 14px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        background: color-mix(in srgb, var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94)) 86%, rgba(226, 232, 240, 0.72));\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.86rem;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.24);\r\n      }\r\n\r\n      .ms-modern-menu-modal__theme-button--active {\r\n        border-color: var(--ms-modern-border-strong, rgba(46, 108, 188, 0.34));\r\n        background: color-mix(in srgb, var(--ms-modern-accent-strong, rgba(37, 99, 235, 1)) 18%, var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94)));\r\n      }\r\n\r\n      .ms-modern-menu-modal--dark {\r\n        color: #e2e8f0;\r\n        background:\r\n          linear-gradient(\r\n            180deg,\r\n            var(--ms-modern-panel-surface-elevated, rgba(15, 27, 49, 0.94)) 0%,\r\n            var(--ms-modern-panel-surface, rgba(7, 15, 28, 0.88)) 100%\r\n          );\r\n        border-color: rgba(96, 165, 250, 0.2);\r\n        box-shadow: 0 24px 64px rgba(2, 8, 23, 0.34);\r\n      }\r\n\r\n      .ms-modern-menu-modal--dark .ms-modern-menu-modal__eyebrow,\r\n      .ms-modern-menu-modal--dark .ms-modern-menu-modal__panel-copy {\r\n        color: rgba(226, 232, 240, 0.72);\r\n      }\r\n\r\n      .ms-modern-menu-modal--dark .ms-modern-menu-modal__back {\r\n        color: #e2e8f0;\r\n        border-color: rgba(148, 163, 184, 0.18);\r\n        background: color-mix(in srgb, var(--ms-modern-panel-surface-elevated, rgba(15, 27, 49, 0.9)) 88%, rgba(2, 8, 23, 0.46));\r\n        box-shadow: 0 10px 24px rgba(2, 8, 23, 0.28);\r\n      }\r\n\r\n      .ms-modern-menu-modal--dark .ms-modern-menu-modal__subtitle,\r\n      .ms-modern-menu-modal--dark .ms-modern-menu-modal__panel-label {\r\n        color: rgba(226, 232, 240, 0.78);\r\n      }\r\n\r\n      .ms-modern-menu-modal--dark .ms-modern-menu-modal__panel {\r\n        background: color-mix(in srgb, var(--ms-modern-panel-surface-elevated, rgba(15, 27, 49, 0.9)) 88%, rgba(2, 8, 23, 0.42));\r\n        border-color: rgba(148, 163, 184, 0.22);\r\n        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);\r\n      }\r\n\r\n      .ms-modern-menu-modal--dark .ms-modern-menu-modal__close,\r\n      .ms-modern-menu-modal--dark .ms-modern-menu-modal__theme-button {\r\n        color: #e2e8f0;\r\n        background: color-mix(in srgb, var(--ms-modern-panel-surface-elevated, rgba(15, 27, 49, 0.9)) 84%, rgba(2, 8, 23, 0.38));\r\n        border-color: rgba(148, 163, 184, 0.2);\r\n        box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);\r\n      }\r\n\r\n      .ms-modern-menu-modal--dark .ms-modern-menu-modal__theme-button--active {\r\n        border-color: rgba(139, 219, 255, 0.38);\r\n        background: color-mix(in srgb, var(--ms-modern-accent-strong, #8bdbff) 22%, var(--ms-modern-panel-surface-elevated, rgba(15, 27, 49, 0.9)));\r\n      }\r\n\r\n      @media (max-width: 575px) {\r\n        .ms-modern-menu-modal__header,\r\n        .ms-modern-menu-modal__body {\r\n          padding-left: 18px;\r\n          padding-right: 18px;\r\n        }\r\n\r\n        .ms-modern-menu-modal__body {\r\n          padding-bottom: 18px;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernMenuModalComponent {\r\n  @Input() backgroundColor = '';\r\n  @Input() isVisible = false;\r\n  @Input() isDarkMode?: boolean;\r\n  @Input() onToggleTheme?: (value: boolean) => void;\r\n  @Input() customButtons: CustomButton[] = [];\r\n  @Input() shareButtons = true;\r\n  @Input() position = 'bottomRight';\r\n  @Input() roomName = '';\r\n  @Input() adminPasscode = '';\r\n  @Input() islevel = '';\r\n  @Input() eventType!: EventType;\r\n  @Input() localLink?: string;\r\n  @Input() title?: string;\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n  @Input() onClose = () => {};\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n  @Input() showDefaultSections = true;\r\n  @Input() showBackButton = false;\r\n  @Input() backLabel = 'Back';\r\n  @Input() onBack = () => {};\r\n\r\n  protected readonly faArrowLeft = faArrowLeft;\r\n  protected readonly faBars = faBars;\r\n  protected readonly faTimes = faTimes;\r\n  protected readonly faMoon = faMoon;\r\n  protected readonly faSun = faSun;\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    return !!this.isDarkMode;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  headerEyebrow(): string {\r\n    return this.showBackButton ? 'Menu Panel' : 'Workspace';\r\n  }\r\n\r\n  headerSubtitle(): string {\r\n    if (this.showBackButton) {\r\n      return 'This panel stays inside the detached menu so you can move back without reopening it.';\r\n    }\r\n\r\n    return 'Quick controls, room details, and sharing actions for the current session.';\r\n  }\r\n\r\n  resolvedOverlayStyle(): Partial<CSSStyleDeclaration> {\r\n    const viewportWidth = typeof window !== 'undefined' ? window.innerWidth : 1280;\r\n\r\n    if (this.isEmbedded()) {\r\n      return {\r\n        display: 'block',\r\n        position: 'static',\r\n        inset: 'auto',\r\n        background: 'transparent',\r\n        ...this.overlayStyle,\r\n      };\r\n    }\r\n\r\n    return {\r\n      display: 'flex',\r\n      alignItems: this.position.includes('top') ? 'flex-start' : this.position.includes('bottom') ? 'flex-end' : 'center',\r\n      justifyContent: this.position.includes('Left') ? 'flex-start' : this.position.includes('Right') ? 'flex-end' : 'center',\r\n      padding: viewportWidth <= 575 ? '10px' : '18px',\r\n      ...this.overlayStyle,\r\n    };\r\n  }\r\n\r\n  resolvedContentStyle(): Partial<CSSStyleDeclaration> {\r\n    const viewportWidth = typeof window !== 'undefined' ? window.innerWidth : 1280;\r\n    const isEmbedded = this.isEmbedded();\r\n    const width = viewportWidth <= 575\r\n      ? Math.min(Math.max(viewportWidth - 20, 0), 380)\r\n      : Math.min(viewportWidth * 0.72, 420);\r\n    const modalHeight = viewportWidth <= 575\r\n      ? 'calc(100vh - 20px)'\r\n      : 'min(calc(100vh - 96px), 720px)';\r\n\r\n    const resolvedStyle: Partial<CSSStyleDeclaration> = {\r\n      width: isEmbedded ? '100%' : `${width}px`,\r\n      maxWidth: isEmbedded ? '100%' : 'calc(100vw - 20px)',\r\n      height: isEmbedded ? '100%' : modalHeight,\r\n      minHeight: isEmbedded ? '100%' : modalHeight,\r\n      maxHeight: isEmbedded ? '100%' : modalHeight,\r\n      margin: '0',\r\n    };\r\n\r\n    if (!this.isTransparentBackground(this.backgroundColor)) {\r\n      resolvedStyle.background = this.backgroundColor;\r\n    }\r\n\r\n    return {\r\n      ...resolvedStyle,\r\n      ...this.contentStyle,\r\n    };\r\n  }\r\n\r\n  toggleTheme(value: boolean): void {\r\n    this.onToggleTheme?.(value);\r\n  }\r\n\r\n  handleClose(): void {\r\n    this.onClose();\r\n  }\r\n\r\n  handleBack(): void {\r\n    this.onBack();\r\n  }\r\n\r\n  handleOverlayClick(): void {\r\n    if (!this.isEmbedded()) {\r\n      this.handleClose();\r\n    }\r\n  }\r\n\r\n  private isTransparentBackground(value: string | undefined): boolean {\r\n    if (!value) {\r\n      return true;\r\n    }\r\n\r\n    const normalized = value.replace(/\\s+/g, '').toLowerCase();\r\n    return normalized === 'transparent'\r\n      || normalized === 'rgba(0,0,0,0)'\r\n      || normalized === 'rgba(255,255,255,0)'\r\n      || normalized === 'hsla(0,0%,0%,0)';\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport { ParticipantList } from '../../components/participants-components/participant-list/participant-list.component';\r\nimport { ParticipantListOthers } from '../../components/participants-components/participant-list-others/participant-list-others.component';\r\nimport {\r\n  MessageParticipants,\r\n  MessageParticipantsOptions,\r\n} from '../../methods/participants-methods/message-participants.service';\r\nimport {\r\n  MuteParticipants,\r\n  MuteParticipantsOptions,\r\n} from '../../methods/participants-methods/mute-participants.service';\r\nimport {\r\n  RemoveParticipants,\r\n  RemoveParticipantsOptions,\r\n} from '../../methods/participants-methods/remove-participants.service';\r\nimport {\r\n  ParticipantsModalParameters,\r\n} from '../../components/participants-components/participants-modal/participants-modal.component';\r\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../utils/render-mode.utils';\r\n\r\n@Component({\r\n  selector: 'app-participants-modal',\r\n  imports: [CommonModule, FontAwesomeModule, ParticipantList, ParticipantListOthers],\r\n  template: `\r\n    <ng-container *ngIf=\"isVisible() && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              isParticipantsModalVisible: isParticipantsModalVisible,\r\n              participantsCounter: participantsCounter_s,\r\n              position: position,\r\n              backgroundColor: backgroundColor,\r\n              parameters: parameters,\r\n              onParticipantsClose: onParticipantsClose,\r\n              onParticipantsFilterChange: onParticipantsFilterChange,\r\n              handleFilterChange: handleFilterChange.bind(this),\r\n              handleClose: handleClose.bind(this)\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isVisible() && !customTemplate\"\r\n      class=\"ms-modern-modal-shell\"\r\n      [class.ms-modern-modal-shell--embedded]=\"isEmbedded()\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n      (click)=\"handleOverlayClick()\"\r\n    >\r\n      <section\r\n        class=\"ms-modern-participants-modal\"\r\n        [class.ms-modern-participants-modal--embedded]=\"isEmbedded()\"\r\n        [ngStyle]=\"resolvedContentStyle()\"\r\n        (click)=\"$event.stopPropagation()\"\r\n      >\r\n        <header *ngIf=\"showHeader\" class=\"ms-modern-participants-modal__header\">\r\n          <div class=\"ms-modern-participants-modal__title-wrap\">\r\n            <div class=\"ms-modern-participants-modal__title-row\">\r\n              <h2 class=\"ms-modern-participants-modal__title\">Participants</h2>\r\n              <span class=\"ms-modern-participants-modal__badge\">{{ participantsCounter_s }}</span>\r\n            </div>\r\n            <p class=\"ms-modern-participants-modal__subtitle\">\r\n              Search the room roster and take host or co-host actions where permitted.\r\n            </p>\r\n          </div>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-participants-modal__close\"\r\n            (click)=\"handleClose()\"\r\n            aria-label=\"Close participants\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div class=\"ms-modern-participants-modal__body\">\r\n          <label class=\"ms-modern-participants-modal__search\">\r\n            <input\r\n              type=\"text\"\r\n              class=\"ms-modern-participants-modal__search-input\"\r\n              placeholder=\"Search participants\"\r\n              (input)=\"handleFilterChange($event)\"\r\n            />\r\n          </label>\r\n\r\n          <div class=\"ms-modern-participants-modal__lists\">\r\n            <ng-container *ngIf=\"parameters.participants?.length; else emptyState\">\r\n              <div class=\"ms-modern-participants-modal__list-panel\">\r\n                <app-participant-list\r\n                  *ngIf=\"canShowParticipantList(); else readOnlyList\"\r\n                  [participants]=\"participant_s\"\r\n                  [isBroadcast]=\"parameters.eventType === 'broadcast'\"\r\n                  [onMuteParticipants]=\"resolvedMuteHandler()\"\r\n                  [onMessageParticipants]=\"resolvedMessageHandler()\"\r\n                  [onRemoveParticipants]=\"resolvedRemoveHandler()\"\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                ></app-participant-list>\r\n\r\n                <ng-template #readOnlyList>\r\n                  <app-participant-list-others\r\n                    [participants]=\"participant_s\"\r\n                    [coHost]=\"parameters.coHost\"\r\n                    [member]=\"parameters.member\"\r\n                  ></app-participant-list-others>\r\n                </ng-template>\r\n              </div>\r\n            </ng-container>\r\n\r\n            <ng-template #emptyState>\r\n              <div class=\"ms-modern-participants-modal__empty\">\r\n                No participants match the current filter.\r\n              </div>\r\n            </ng-template>\r\n          </div>\r\n        </div>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-modal-shell {\r\n        position: fixed;\r\n        inset: 0;\r\n        z-index: 999;\r\n        background: rgba(5, 9, 20, 0.56);\r\n      }\r\n\r\n      .ms-modern-modal-shell--embedded {\r\n        background: transparent;\r\n        z-index: auto;\r\n      }\r\n\r\n      .ms-modern-participants-modal {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 16px;\r\n        overflow: hidden;\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        background:\r\n          linear-gradient(\r\n            180deg,\r\n            var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94)) 0%,\r\n            var(--ms-modern-panel-surface, rgba(255, 255, 255, 0.82)) 100%\r\n          );\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        border-radius: 28px;\r\n        box-shadow: var(--ms-modern-shadow-panel, 0 24px 64px rgba(14, 30, 53, 0.16));\r\n        backdrop-filter: blur(20px);\r\n      }\r\n\r\n      .ms-modern-participants-modal--embedded {\r\n        border-radius: 24px;\r\n      }\r\n\r\n      .ms-modern-participants-modal__header {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        gap: 16px;\r\n        padding: 20px 22px 0;\r\n      }\r\n\r\n      .ms-modern-participants-modal__title-wrap {\r\n        min-width: 0;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 6px;\r\n      }\r\n\r\n      .ms-modern-participants-modal__title-row {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n      }\r\n\r\n      .ms-modern-participants-modal__title {\r\n        margin: 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1rem;\r\n        font-weight: 700;\r\n        line-height: 1.2;\r\n      }\r\n\r\n      .ms-modern-participants-modal__badge {\r\n        min-width: 36px;\r\n        min-height: 32px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        padding: 0 12px;\r\n        border-radius: 999px;\r\n        background: linear-gradient(135deg, var(--ms-modern-accent, #1476d2), var(--ms-modern-accent-strong, #0d5ca8));\r\n        color: #ffffff;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.8rem;\r\n        font-weight: 700;\r\n      }\r\n\r\n      .ms-modern-participants-modal__subtitle {\r\n        margin: 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.82rem;\r\n        line-height: 1.55;\r\n      }\r\n\r\n      .ms-modern-participants-modal__close {\r\n        flex: 0 0 auto;\r\n        width: 38px;\r\n        height: 38px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 999px;\r\n        border: 1px solid var(--ms-modern-border-strong, rgba(46, 108, 188, 0.34));\r\n        background:\r\n          linear-gradient(\r\n            180deg,\r\n            var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94)) 0%,\r\n            var(--ms-modern-field-background, rgba(248, 250, 252, 0.92)) 100%\r\n          );\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        box-shadow: 0 12px 28px rgba(14, 30, 53, 0.12);\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-participants-modal__body {\r\n        flex: 1;\r\n        min-height: 0;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 14px;\r\n        padding: 0 22px 22px;\r\n      }\r\n\r\n      .ms-modern-participants-modal__search {\r\n        display: block;\r\n      }\r\n\r\n      .ms-modern-participants-modal__search-input {\r\n        width: 100%;\r\n        min-height: 46px;\r\n        padding: 0 16px;\r\n        border-radius: 18px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        background: var(--ms-modern-field-background, rgba(248, 250, 252, 0.92));\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.94rem;\r\n        box-sizing: border-box;\r\n      }\r\n\r\n      .ms-modern-participants-modal__lists {\r\n        flex: 1;\r\n        min-height: 0;\r\n        overflow-y: auto;\r\n      }\r\n\r\n      .ms-modern-participants-modal__list-panel {\r\n        min-height: 100%;\r\n        padding: 12px;\r\n        border-radius: 20px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        background: var(--ms-modern-panel-surface, rgba(255, 255, 255, 0.82));\r\n        box-sizing: border-box;\r\n      }\r\n\r\n      .ms-modern-participants-modal__empty {\r\n        padding: 24px 16px;\r\n        border-radius: 18px;\r\n        border: 1px dashed var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        text-align: center;\r\n      }\r\n\r\n      :host ::ng-deep .container,\r\n      :host ::ng-deep .participant-item,\r\n      :host ::ng-deep .participant-item-others {\r\n        min-width: 0;\r\n      }\r\n\r\n      :host ::ng-deep .participant-item {\r\n        display: grid !important;\r\n        grid-template-columns: minmax(0, 1fr) auto !important;\r\n        grid-template-areas:\r\n          'identity danger'\r\n          'actions actions' !important;\r\n        align-items: center !important;\r\n        column-gap: 10px !important;\r\n        row-gap: 10px !important;\r\n      }\r\n\r\n      :host ::ng-deep .participant-item__identity {\r\n        grid-area: identity !important;\r\n        min-width: 0;\r\n      }\r\n\r\n      :host ::ng-deep .participant-item__status {\r\n        display: none !important;\r\n      }\r\n\r\n      :host ::ng-deep .participant-item__actions:not(.participant-item__actions--danger) {\r\n        grid-area: actions !important;\r\n        justify-content: flex-end !important;\r\n      }\r\n\r\n      :host ::ng-deep .participant-item__actions--danger {\r\n        grid-area: danger !important;\r\n        justify-self: end !important;\r\n      }\r\n\r\n      @media (max-width: 575px) {\r\n        .ms-modern-participants-modal__header,\r\n        .ms-modern-participants-modal__body {\r\n          padding-left: 18px;\r\n          padding-right: 18px;\r\n        }\r\n\r\n        .ms-modern-participants-modal__body {\r\n          padding-bottom: 18px;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernParticipantsModalComponent implements OnInit, OnChanges {\r\n  @Input() isParticipantsModalVisible = false;\r\n  @Input() onParticipantsClose = () => {};\r\n  @Input() onParticipantsFilterChange = (_filter: string) => {};\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 = 'var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94))';\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n\r\n  faTimes = faTimes;\r\n  participant_s = [] as ParticipantsModalParameters['participants'];\r\n  participantsCounter_s = 0;\r\n\r\n  constructor(\r\n    private readonly muteParticipantsService: MuteParticipants,\r\n    private readonly messageParticipantsService: MessageParticipants,\r\n    private readonly removeParticipantsService: RemoveParticipants,\r\n  ) {}\r\n\r\n  ngOnInit() {\r\n    this.ensureHandlers();\r\n    this.updateParticipantsData();\r\n  }\r\n\r\n  ngOnChanges(_changes: SimpleChanges) {\r\n    this.ensureHandlers();\r\n    this.updateParticipantsData();\r\n  }\r\n\r\n  isVisible(): boolean {\r\n    return this.isEmbedded() || this.isParticipantsModalVisible;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  handleOverlayClick() {\r\n    if (!this.isEmbedded()) {\r\n      this.handleClose();\r\n    }\r\n  }\r\n\r\n  handleFilterChange(event: Event) {\r\n    const inputElement = event.target as HTMLInputElement;\r\n    this.onParticipantsFilterChange(inputElement.value);\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\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  resolvedMuteHandler(): (options: MuteParticipantsOptions) => Promise<void> {\r\n    return (\r\n      this.onMuteParticipants ??\r\n      this.muteParticipantsService.muteParticipants.bind(this.muteParticipantsService)\r\n    );\r\n  }\r\n\r\n  resolvedMessageHandler(): (options: MessageParticipantsOptions) => void {\r\n    return (\r\n      this.onMessageParticipants ??\r\n      this.messageParticipantsService.messageParticipants.bind(this.messageParticipantsService)\r\n    );\r\n  }\r\n\r\n  resolvedRemoveHandler(): (options: RemoveParticipantsOptions) => Promise<void> {\r\n    return (\r\n      this.onRemoveParticipants ??\r\n      this.removeParticipantsService.removeParticipants.bind(this.removeParticipantsService)\r\n    );\r\n  }\r\n\r\n  resolvedOverlayStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'static',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          height: '100%',\r\n          minHeight: 0,\r\n          display: 'block',\r\n          background: 'transparent',\r\n          zIndex: 'auto',\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          inset: 0,\r\n          width: '100%',\r\n          height: '100%',\r\n          background: 'rgba(5, 9, 20, 0.56)',\r\n          zIndex: 999,\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.overlayStyle) };\r\n  }\r\n\r\n  resolvedContentStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'relative',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          maxWidth: 'none',\r\n          height: '100%',\r\n          maxHeight: 'none',\r\n          margin: 0,\r\n          background: this.backgroundColor,\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          top: this.position.includes('top') ? '16px' : 'auto',\r\n          bottom: this.position.includes('bottom') ? '16px' : 'auto',\r\n          left: this.position.includes('Left') ? '16px' : 'auto',\r\n          right: this.position.includes('Right') ? '16px' : 'auto',\r\n          width: 'min(460px, calc(100% - 32px))',\r\n          maxWidth: 'calc(100% - 32px)',\r\n          maxHeight: 'calc(100% - 32px)',\r\n          background: this.backgroundColor,\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.contentStyle) };\r\n  }\r\n\r\n  private ensureHandlers() {\r\n    if (!this.onMuteParticipants) {\r\n      this.onMuteParticipants = this.muteParticipantsService.muteParticipants.bind(\r\n        this.muteParticipantsService,\r\n      );\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\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  private updateParticipantsData() {\r\n    const freshParameters = this.parameters?.getUpdatedAllParams\r\n      ? this.parameters.getUpdatedAllParams()\r\n      : this.parameters;\r\n\r\n    this.parameters = freshParameters ?? ({} as ParticipantsModalParameters);\r\n    this.participant_s = this.parameters.filteredParticipants ?? [];\r\n    this.participantsCounter_s = this.participant_s.length;\r\n  }\r\n\r\n  private normalizeStyle(\r\n    style?: Partial<CSSStyleDeclaration>,\r\n  ): Record<string, string | number> {\r\n    return style ? ({ ...style } as Record<string, string | number>) : {};\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  IconDefinition,\r\n  faCheck,\r\n  faComments,\r\n  faDesktop,\r\n  faMicrophone,\r\n  faSearch,\r\n  faTimes,\r\n  faVideo,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { Socket } from 'socket.io-client';\r\n\r\nimport { Request } from '../../@types/types';\r\nimport {\r\n  RespondToRequests,\r\n  RespondToRequestsType,\r\n} from '../../methods/requests-methods/respond-to-requests.service';\r\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../utils/render-mode.utils';\r\n\r\nexport interface ModernRequestsModalParameters {\r\n  filteredRequestList?: Request[];\r\n  getUpdatedAllParams?: () => { filteredRequestList: Request[] };\r\n  [key: string]: any;\r\n}\r\n\r\n@Component({\r\n  selector: 'app-requests-modal',\r\n  imports: [CommonModule, FontAwesomeModule],\r\n  template: `\r\n    <ng-container *ngIf=\"isVisible() && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              isRequestsModalVisible: isRequestsModalVisible,\r\n              requestCounter: requestCounter_s,\r\n              requestList: requestList_s,\r\n              roomName: roomName,\r\n              socket: socket,\r\n              onRequestClose: onRequestClose,\r\n              onRequestFilterChange: onRequestFilterChange,\r\n              handleFilterChange: handleFilterChange.bind(this),\r\n              handleModalClose: handleModalClose.bind(this)\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isVisible() && !customTemplate\"\r\n      class=\"ms-modern-requests-overlay\"\r\n      [class.ms-modern-requests-overlay--embedded]=\"isEmbedded()\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n      (click)=\"handleOverlayClick()\"\r\n    >\r\n      <section\r\n        class=\"ms-modern-requests-modal\"\r\n        [class.ms-modern-requests-modal--embedded]=\"isEmbedded()\"\r\n        [ngStyle]=\"resolvedContentStyle()\"\r\n        (click)=\"$event.stopPropagation()\"\r\n      >\r\n        <header *ngIf=\"showHeader\" class=\"ms-modern-requests-modal__header\">\r\n          <div class=\"ms-modern-requests-modal__title-wrap\">\r\n            <div class=\"ms-modern-requests-modal__title-row\">\r\n              <h2 class=\"ms-modern-requests-modal__title\">Requests</h2>\r\n              <span class=\"ms-modern-requests-modal__badge\">{{ requestCounter_s }}</span>\r\n            </div>\r\n            <p class=\"ms-modern-requests-modal__subtitle\">\r\n              Review participant requests and respond without leaving the room workflow.\r\n            </p>\r\n          </div>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-requests-modal__close\"\r\n            aria-label=\"Close requests\"\r\n            (click)=\"handleModalClose()\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div class=\"ms-modern-requests-modal__body\">\r\n          <label class=\"ms-modern-requests-modal__search\">\r\n            <fa-icon [icon]=\"faSearch\" class=\"ms-modern-requests-modal__search-icon\"></fa-icon>\r\n            <input\r\n              type=\"text\"\r\n              class=\"ms-modern-requests-modal__search-input\"\r\n              placeholder=\"Search requests...\"\r\n              [value]=\"requestFilterValue\"\r\n              (input)=\"handleFilterChange($event)\"\r\n            />\r\n          </label>\r\n\r\n          <div class=\"ms-modern-requests-modal__list\">\r\n            <ng-container *ngIf=\"requestList_s.length; else emptyState\">\r\n              <article\r\n                *ngFor=\"let requestItem of requestList_s\"\r\n                class=\"ms-modern-requests-modal__item\"\r\n              >\r\n                <div class=\"ms-modern-requests-modal__item-main\">\r\n                  <div class=\"ms-modern-requests-modal__icon-wrap\">\r\n                    <fa-icon\r\n                      [icon]=\"getIcon(requestItem.icon)\"\r\n                      class=\"ms-modern-requests-modal__icon\"\r\n                    ></fa-icon>\r\n                  </div>\r\n                  <div class=\"ms-modern-requests-modal__copy\">\r\n                    <div class=\"ms-modern-requests-modal__name\">\r\n                      {{ requestItem.name || requestItem.username || 'Participant' }}\r\n                    </div>\r\n                    <div class=\"ms-modern-requests-modal__detail\">\r\n                      {{ describeRequest(requestItem.icon) }}\r\n                    </div>\r\n                  </div>\r\n                </div>\r\n\r\n                <div class=\"ms-modern-requests-modal__actions\">\r\n                  <button\r\n                    type=\"button\"\r\n                    class=\"ms-modern-requests-modal__action ms-modern-requests-modal__action--accept\"\r\n                    aria-label=\"Accept request\"\r\n                    (click)=\"handleRequestAction(requestItem, 'accepted')\"\r\n                  >\r\n                    <fa-icon [icon]=\"faCheck\"></fa-icon>\r\n                  </button>\r\n                  <button\r\n                    type=\"button\"\r\n                    class=\"ms-modern-requests-modal__action ms-modern-requests-modal__action--reject\"\r\n                    aria-label=\"Reject request\"\r\n                    (click)=\"handleRequestAction(requestItem, 'rejected')\"\r\n                  >\r\n                    <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n                  </button>\r\n                </div>\r\n              </article>\r\n            </ng-container>\r\n\r\n            <ng-template #emptyState>\r\n              <div class=\"ms-modern-requests-modal__empty\">\r\n                {{ emptyStateCopy() }}\r\n              </div>\r\n            </ng-template>\r\n          </div>\r\n        </div>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-requests-overlay {\r\n        position: fixed;\r\n        inset: 0;\r\n        z-index: 999;\r\n        background: rgba(2, 8, 23, 0.62);\r\n        backdrop-filter: blur(8px);\r\n        -webkit-backdrop-filter: blur(8px);\r\n      }\r\n\r\n      .ms-modern-requests-overlay--embedded {\r\n        position: static;\r\n        inset: auto;\r\n        width: 100%;\r\n        height: 100%;\r\n        min-height: 0;\r\n        background: transparent;\r\n        backdrop-filter: none;\r\n        -webkit-backdrop-filter: none;\r\n        z-index: auto;\r\n      }\r\n\r\n      .ms-modern-requests-modal {\r\n        position: fixed;\r\n        width: min(420px, calc(100vw - 32px));\r\n        max-height: min(580px, calc(100vh - 32px));\r\n        display: flex;\r\n        flex-direction: column;\r\n        overflow: hidden;\r\n        border-radius: 28px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        background:\r\n          linear-gradient(\r\n            180deg,\r\n            var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94)) 0%,\r\n            var(--ms-modern-panel-surface, rgba(255, 255, 255, 0.82)) 100%\r\n          );\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        box-shadow: var(--ms-modern-shadow-panel, 0 24px 64px rgba(14, 30, 53, 0.16));\r\n      }\r\n\r\n      .ms-modern-requests-modal--embedded {\r\n        position: relative;\r\n        width: 100%;\r\n        max-width: none;\r\n        max-height: none;\r\n        height: 100%;\r\n        border-radius: 24px;\r\n      }\r\n\r\n      .ms-modern-requests-modal__header {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        gap: 16px;\r\n        padding: 22px 22px 18px;\r\n        border-bottom: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n      }\r\n\r\n      .ms-modern-requests-modal__title-wrap {\r\n        min-width: 0;\r\n      }\r\n\r\n      .ms-modern-requests-modal__title-row {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n      }\r\n\r\n      .ms-modern-requests-modal__title {\r\n        margin: 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1.08rem;\r\n        font-weight: 700;\r\n      }\r\n\r\n      .ms-modern-requests-modal__badge {\r\n        min-width: 36px;\r\n        min-height: 32px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        padding: 0 12px;\r\n        border-radius: 999px;\r\n        background: linear-gradient(135deg, var(--ms-modern-accent, #1476d2), var(--ms-modern-accent-strong, #0d5ca8));\r\n        color: #ffffff;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.8rem;\r\n        font-weight: 700;\r\n      }\r\n\r\n      .ms-modern-requests-modal__subtitle {\r\n        margin: 8px 0 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.82rem;\r\n        line-height: 1.55;\r\n      }\r\n\r\n      .ms-modern-requests-modal__close {\r\n        width: 40px;\r\n        height: 40px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 999px;\r\n        border: 1px solid var(--ms-modern-border-strong, rgba(46, 108, 188, 0.34));\r\n        background: var(--ms-modern-field-background, rgba(248, 250, 252, 0.92));\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-requests-modal__body {\r\n        flex: 1;\r\n        min-height: 0;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 14px;\r\n        padding: 22px;\r\n      }\r\n\r\n      .ms-modern-requests-modal__search-input {\r\n        width: 100%;\r\n        min-height: 46px;\r\n        padding: 0 16px 0 42px;\r\n        border-radius: 18px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        background: var(--ms-modern-field-background, rgba(248, 250, 252, 0.92));\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.94rem;\r\n        box-sizing: border-box;\r\n      }\r\n\r\n      .ms-modern-requests-modal__search {\r\n        position: relative;\r\n        display: block;\r\n      }\r\n\r\n      .ms-modern-requests-modal__search-icon {\r\n        position: absolute;\r\n        top: 50%;\r\n        left: 16px;\r\n        transform: translateY(-50%);\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.52));\r\n        pointer-events: none;\r\n      }\r\n\r\n      .ms-modern-requests-modal__list {\r\n        flex: 1;\r\n        min-height: 0;\r\n        display: grid;\r\n        gap: 12px;\r\n        overflow-y: auto;\r\n      }\r\n\r\n      .ms-modern-requests-modal__item {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        gap: 14px;\r\n        padding: 14px 16px;\r\n        border-radius: 18px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        background: var(--ms-modern-panel-surface, rgba(255, 255, 255, 0.82));\r\n      }\r\n\r\n      .ms-modern-requests-modal__item-main {\r\n        min-width: 0;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 12px;\r\n      }\r\n\r\n      .ms-modern-requests-modal__icon-wrap {\r\n        width: 42px;\r\n        height: 42px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 14px;\r\n        background: color-mix(in srgb, var(--ms-modern-accent, #1476d2) 14%, transparent);\r\n        color: var(--ms-modern-accent, #1476d2);\r\n      }\r\n\r\n      .ms-modern-requests-modal__copy {\r\n        min-width: 0;\r\n      }\r\n\r\n      .ms-modern-requests-modal__name {\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.94rem;\r\n        font-weight: 700;\r\n      }\r\n\r\n      .ms-modern-requests-modal__detail {\r\n        margin-top: 4px;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.82rem;\r\n        line-height: 1.5;\r\n      }\r\n\r\n      .ms-modern-requests-modal__actions {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n      }\r\n\r\n      .ms-modern-requests-modal__action {\r\n        width: 38px;\r\n        height: 38px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 999px;\r\n        border: 1px solid transparent;\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-requests-modal__action--accept {\r\n        background: color-mix(in srgb, var(--ms-modern-success, #147d64) 16%, transparent);\r\n        color: var(--ms-modern-success, #147d64);\r\n      }\r\n\r\n      .ms-modern-requests-modal__action--reject {\r\n        background: color-mix(in srgb, var(--ms-modern-danger, #d9485f) 14%, transparent);\r\n        color: var(--ms-modern-danger, #d9485f);\r\n      }\r\n\r\n      .ms-modern-requests-modal__empty {\r\n        padding: 24px 16px;\r\n        border-radius: 18px;\r\n        border: 1px dashed var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        text-align: center;\r\n      }\r\n\r\n      @media (max-width: 575px) {\r\n        .ms-modern-requests-modal__header,\r\n        .ms-modern-requests-modal__body {\r\n          padding-left: 18px;\r\n          padding-right: 18px;\r\n        }\r\n\r\n        .ms-modern-requests-modal__item {\r\n          align-items: flex-start;\r\n          flex-direction: column;\r\n        }\r\n\r\n        .ms-modern-requests-modal__actions {\r\n          width: 100%;\r\n          justify-content: flex-end;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernRequestsModalComponent implements OnInit, OnChanges {\r\n  @Input() isRequestsModalVisible = false;\r\n  @Input() requestCounter = 0;\r\n  @Input() requestList: Request[] = [];\r\n  @Input() roomName = '';\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input() backgroundColor = 'var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.94))';\r\n  @Input() position = 'topRight';\r\n  @Input() parameters: ModernRequestsModalParameters = {};\r\n  @Input() onRequestClose = () => {};\r\n  @Input() onRequestFilterChange = (_filter: string) => {};\r\n  @Input() onRequestItemPress?: RespondToRequestsType;\r\n  @Input() updateRequestList = (_newRequestList: Request[]) => {};\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n\r\n  faTimes = faTimes;\r\n  faCheck = faCheck;\r\n  faSearch = faSearch;\r\n\r\n  requestList_s: Request[] = [];\r\n  requestCounter_s = 0;\r\n  requestFilterValue = '';\r\n\r\n  private readonly iconMap: Record<string, IconDefinition> = {\r\n    'fa-microphone': faMicrophone,\r\n    'fa-desktop': faDesktop,\r\n    'fa-video': faVideo,\r\n    'fa-comments': faComments,\r\n  };\r\n\r\n  constructor(private readonly respondToRequestsService: RespondToRequests) {}\r\n\r\n  ngOnInit() {\r\n    this.ensureHandler();\r\n    this.updateRequests();\r\n  }\r\n\r\n  ngOnChanges(_changes: SimpleChanges) {\r\n    this.ensureHandler();\r\n    this.updateRequests();\r\n  }\r\n\r\n  isVisible(): boolean {\r\n    return this.isEmbedded() || this.isRequestsModalVisible;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  handleOverlayClick() {\r\n    if (!this.isEmbedded()) {\r\n      this.handleModalClose();\r\n    }\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.requestFilterValue = input.value;\r\n    this.onRequestFilterChange(this.requestFilterValue);\r\n    this.updateRequests();\r\n  }\r\n\r\n  emptyStateCopy(): string {\r\n    return this.requestFilterValue.trim()\r\n      ? 'No requests match the current filter.'\r\n      : 'No pending requests.';\r\n  }\r\n\r\n  handleRequestAction(request: Request, action: string) {\r\n    this.resolvedRequestHandler()({\r\n      request,\r\n      updateRequestList: this.updateRequestList,\r\n      requestList: this.requestList,\r\n      action,\r\n      roomName: this.roomName,\r\n      socket: this.socket,\r\n    });\r\n  }\r\n\r\n  getIcon(iconName: string): IconDefinition {\r\n    return this.iconMap[iconName] ?? faComments;\r\n  }\r\n\r\n  describeRequest(iconName: string): string {\r\n    switch (iconName) {\r\n      case 'fa-microphone':\r\n        return 'Wants permission to unmute and speak.';\r\n      case 'fa-desktop':\r\n        return 'Asked to share a screen or presentation.';\r\n      case 'fa-video':\r\n        return 'Requested camera access in the active room.';\r\n      case 'fa-comments':\r\n        return 'Needs a host response through the room chat flow.';\r\n      default:\r\n        return 'Needs a host response.';\r\n    }\r\n  }\r\n\r\n  resolvedOverlayStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'static',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          height: '100%',\r\n          minHeight: 0,\r\n          background: 'transparent',\r\n          zIndex: 'auto',\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          inset: 0,\r\n          width: '100%',\r\n          height: '100%',\r\n          background: 'rgba(2, 8, 23, 0.62)',\r\n          zIndex: 999,\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.overlayStyle) };\r\n  }\r\n\r\n  resolvedContentStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'relative',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          maxWidth: 'none',\r\n          height: '100%',\r\n          maxHeight: 'none',\r\n          margin: 0,\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          top: this.position.includes('top') ? '16px' : 'auto',\r\n          bottom: this.position.includes('bottom') ? '16px' : 'auto',\r\n          left: this.position.includes('Left') ? '16px' : 'auto',\r\n          right: this.position.includes('Right') ? '16px' : 'auto',\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.contentStyle) };\r\n  }\r\n\r\n  private ensureHandler() {\r\n    if (!this.onRequestItemPress) {\r\n      this.onRequestItemPress = this.respondToRequestsService.respondToRequests.bind(\r\n        this.respondToRequestsService,\r\n      );\r\n    }\r\n  }\r\n\r\n  private resolvedRequestHandler(): RespondToRequestsType {\r\n    return (\r\n      this.onRequestItemPress ??\r\n      this.respondToRequestsService.respondToRequests.bind(this.respondToRequestsService)\r\n    );\r\n  }\r\n\r\n  private updateRequests() {\r\n    const freshParameters = this.parameters?.getUpdatedAllParams\r\n      ? this.parameters.getUpdatedAllParams()\r\n      : this.parameters;\r\n\r\n    this.requestList_s = freshParameters?.filteredRequestList ?? this.requestList ?? [];\r\n    this.requestCounter_s = this.requestList_s.length;\r\n  }\r\n\r\n  private normalizeStyle(\r\n    style?: Partial<CSSStyleDeclaration>,\r\n  ): Record<string, string | number> {\r\n    return style ? ({ ...style } as Record<string, string | number>) : {};\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, TemplateRef } from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  faLink,\r\n  faShareNodes,\r\n  faTimes,\r\n} from '@fortawesome/free-solid-svg-icons';\r\n\r\nimport { EventType } from '../../@types/types';\r\nimport { MeetingIdComponent } from '../../components/menu-components/meeting-id-component/meeting-id-component.component';\r\nimport { MeetingPasscodeComponent } from '../../components/menu-components/meeting-passcode-component/meeting-passcode-component.component';\r\nimport { ShareButtonsComponent } from '../../components/menu-components/share-buttons-component/share-buttons-component.component';\r\nimport { ModernRenderMode, isEmbeddedRenderMode } from '../utils/render-mode.utils';\r\n\r\n@Component({\r\n  selector: 'app-share-event-modal',\r\n  imports: [\r\n    CommonModule,\r\n    FontAwesomeModule,\r\n    MeetingIdComponent,\r\n    MeetingPasscodeComponent,\r\n    ShareButtonsComponent,\r\n  ],\r\n  template: `\r\n    <ng-container *ngIf=\"isVisible() && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              isShareEventModalVisible: isShareEventModalVisible,\r\n              backgroundColor: backgroundColor,\r\n              position: position,\r\n              roomName: roomName,\r\n              adminPasscode: adminPasscode,\r\n              islevel: islevel,\r\n              shareButtons: shareButtons,\r\n              eventType: eventType,\r\n              localLink: localLink,\r\n              handleClose: handleClose.bind(this),\r\n              onShareEventClose: onShareEventClose\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isVisible() && !customTemplate\"\r\n      class=\"ms-modern-share-event-overlay\"\r\n      [class.ms-modern-share-event-overlay--embedded]=\"isEmbedded()\"\r\n      [class.ms-modern-share-event-overlay--dark]=\"resolvedIsDarkMode\"\r\n      [class.ms-modern-share-event-overlay--light]=\"!resolvedIsDarkMode\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n      (click)=\"handleOverlayClick()\"\r\n    >\r\n      <section\r\n        class=\"ms-modern-share-event\"\r\n        [class.ms-modern-share-event--embedded]=\"isEmbedded()\"\r\n        [class.ms-modern-share-event--headerless]=\"!showHeader\"\r\n        [class.ms-modern-share-event--dark]=\"resolvedIsDarkMode\"\r\n        [class.ms-modern-share-event--light]=\"!resolvedIsDarkMode\"\r\n        [ngStyle]=\"resolvedContentStyle()\"\r\n        (click)=\"$event.stopPropagation()\"\r\n      >\r\n        <header *ngIf=\"showHeader\" class=\"ms-modern-share-event__header\">\r\n          <div class=\"ms-modern-share-event__heading\">\r\n            <span class=\"ms-modern-share-event__eyebrow\">Invite</span>\r\n            <h2 class=\"ms-modern-share-event__title\">\r\n              <fa-icon [icon]=\"faShareNodes\"></fa-icon>\r\n              <span>Share event</span>\r\n            </h2>\r\n            <p class=\"ms-modern-share-event__subtitle\">\r\n              Send the room details and access link without leaving the active workflow.\r\n            </p>\r\n          </div>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-share-event__close\"\r\n            aria-label=\"Close share event\"\r\n            (click)=\"handleClose()\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div class=\"ms-modern-share-event__body\">\r\n          <div class=\"ms-modern-share-event__summary\">\r\n            <div class=\"ms-modern-share-event__summary-icon\">\r\n              <fa-icon [icon]=\"faLink\"></fa-icon>\r\n            </div>\r\n\r\n            <div class=\"ms-modern-share-event__summary-copy\">\r\n              <strong>{{ roomName }}</strong>\r\n              <span>{{ resolvedSummary() }}</span>\r\n            </div>\r\n          </div>\r\n\r\n          <div class=\"ms-modern-share-event__panel\" *ngIf=\"islevel === '2'\">\r\n            <span class=\"ms-modern-share-event__panel-label\">Host passcode</span>\r\n            <app-meeting-passcode-component [meetingPasscode]=\"adminPasscode\" [isDarkMode]=\"resolvedIsDarkMode\"></app-meeting-passcode-component>\r\n          </div>\r\n\r\n          <div class=\"ms-modern-share-event__panel\">\r\n            <span class=\"ms-modern-share-event__panel-label\">Meeting ID</span>\r\n            <app-meeting-id-component [meetingID]=\"roomName\" [isDarkMode]=\"resolvedIsDarkMode\"></app-meeting-id-component>\r\n          </div>\r\n\r\n          <div class=\"ms-modern-share-event__panel\" *ngIf=\"shareButtons\">\r\n            <span class=\"ms-modern-share-event__panel-label\">Share actions</span>\r\n            <app-share-buttons-component\r\n              [meetingID]=\"roomName\"\r\n              [eventType]=\"eventType\"\r\n              [isDarkMode]=\"resolvedIsDarkMode\"\r\n              [localLink]=\"localLink\"\r\n            ></app-share-buttons-component>\r\n          </div>\r\n        </div>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-share-event-overlay {\r\n        position: fixed;\r\n        inset: 0;\r\n        display: block;\r\n        background: rgba(2, 8, 23, 0.66);\r\n        backdrop-filter: blur(10px);\r\n        z-index: 999;\r\n      }\r\n\r\n      .ms-modern-share-event-overlay--embedded {\r\n        background: transparent;\r\n        backdrop-filter: none;\r\n      }\r\n\r\n      .ms-modern-share-event {\r\n        box-sizing: border-box;\r\n        display: flex;\r\n        flex-direction: column;\r\n        min-height: 0;\r\n        overflow: hidden;\r\n        border-radius: 28px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: linear-gradient(\r\n          180deg,\r\n          var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96)) 0%,\r\n          var(--ms-modern-panel-surface, rgba(248, 250, 252, 0.95)) 100%\r\n        );\r\n        box-shadow: 0 28px 70px rgba(15, 23, 42, 0.28);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        backdrop-filter: blur(20px);\r\n      }\r\n\r\n      .ms-modern-share-event--embedded {\r\n        height: 100%;\r\n        max-height: none;\r\n        border-radius: 24px;\r\n      }\r\n\r\n      .ms-modern-share-event__header {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        gap: 16px;\r\n        padding: 22px 22px 16px;\r\n        border-bottom: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n      }\r\n\r\n      .ms-modern-share-event__heading {\r\n        min-width: 0;\r\n      }\r\n\r\n      .ms-modern-share-event__eyebrow {\r\n        display: block;\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.7rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.12em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-share-event__title {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n        margin: 6px 0 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1.34rem;\r\n        font-weight: 800;\r\n        line-height: 1.1;\r\n      }\r\n\r\n      .ms-modern-share-event__subtitle {\r\n        margin: 8px 0 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        line-height: 1.5;\r\n      }\r\n\r\n      .ms-modern-share-event__close {\r\n        width: 40px;\r\n        height: 40px;\r\n        flex: 0 0 auto;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        border-radius: 999px;\r\n        background: rgba(255, 255, 255, 0.4);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-share-event--dark {\r\n        background: linear-gradient(180deg, rgba(15, 23, 42, 0.96) 0%, rgba(30, 41, 59, 0.94) 100%);\r\n        color: #e2e8f0;\r\n      }\r\n\r\n      .ms-modern-share-event--dark .ms-modern-share-event__eyebrow,\r\n      .ms-modern-share-event--dark .ms-modern-share-event__panel-label {\r\n        color: rgba(226, 232, 240, 0.68);\r\n      }\r\n\r\n      .ms-modern-share-event--dark .ms-modern-share-event__subtitle,\r\n      .ms-modern-share-event--dark .ms-modern-share-event__summary-copy span {\r\n        color: rgba(226, 232, 240, 0.76);\r\n      }\r\n\r\n      .ms-modern-share-event--dark .ms-modern-share-event__header {\r\n        border-bottom-color: rgba(148, 163, 184, 0.18);\r\n      }\r\n\r\n      .ms-modern-share-event--dark .ms-modern-share-event__close {\r\n        border-color: rgba(148, 163, 184, 0.18);\r\n        background: rgba(15, 23, 42, 0.54);\r\n        color: #e2e8f0;\r\n      }\r\n\r\n      .ms-modern-share-event--dark .ms-modern-share-event__summary {\r\n        border-color: rgba(99, 102, 241, 0.18);\r\n        background: rgba(79, 70, 229, 0.12);\r\n      }\r\n\r\n      .ms-modern-share-event--dark .ms-modern-share-event__panel {\r\n        border-color: rgba(148, 163, 184, 0.18);\r\n        background: rgba(15, 23, 42, 0.46);\r\n      }\r\n\r\n      .ms-modern-share-event--light {\r\n        background: linear-gradient(\r\n          180deg,\r\n          var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96)) 0%,\r\n          var(--ms-modern-panel-surface, rgba(248, 250, 252, 0.95)) 100%\r\n        );\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n      }\r\n\r\n      .ms-modern-share-event__body {\r\n        display: grid;\r\n        flex: 1;\r\n        gap: 14px;\r\n        min-height: 0;\r\n        overflow-y: auto;\r\n        padding: 18px 22px 22px;\r\n      }\r\n\r\n      .ms-modern-share-event--headerless .ms-modern-share-event__body {\r\n        padding-top: 22px;\r\n      }\r\n\r\n      .ms-modern-share-event__summary {\r\n        display: grid;\r\n        grid-template-columns: auto 1fr;\r\n        gap: 14px;\r\n        padding: 16px;\r\n        border-radius: 20px;\r\n        border: 1px solid rgba(79, 70, 229, 0.12);\r\n        background: rgba(79, 70, 229, 0.06);\r\n        align-items: center;\r\n      }\r\n\r\n      .ms-modern-share-event__summary-icon {\r\n        width: 46px;\r\n        height: 46px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 14px;\r\n        background: linear-gradient(135deg, rgba(79, 70, 229, 0.18), rgba(20, 184, 166, 0.16));\r\n        color: var(--ms-modern-brand-primary, #4f46e5);\r\n        font-size: 1.1rem;\r\n      }\r\n\r\n      .ms-modern-share-event__summary-copy {\r\n        min-width: 0;\r\n        display: grid;\r\n        gap: 4px;\r\n      }\r\n\r\n      .ms-modern-share-event__summary-copy strong {\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.98rem;\r\n        font-weight: 800;\r\n        overflow: hidden;\r\n        text-overflow: ellipsis;\r\n        white-space: nowrap;\r\n      }\r\n\r\n      .ms-modern-share-event__summary-copy span {\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.84rem;\r\n        line-height: 1.45;\r\n      }\r\n\r\n      .ms-modern-share-event__panel {\r\n        display: grid;\r\n        gap: 10px;\r\n        padding: 16px;\r\n        border-radius: 20px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.7);\r\n      }\r\n\r\n      .ms-modern-share-event__panel-label {\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.75rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.08em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      @media (max-width: 640px) {\r\n        .ms-modern-share-event__header,\r\n        .ms-modern-share-event__body {\r\n          padding-left: 18px;\r\n          padding-right: 18px;\r\n        }\r\n\r\n        .ms-modern-share-event__summary {\r\n          grid-template-columns: 1fr;\r\n          justify-items: start;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernShareEventModalComponent {\r\n  private readonly defaultBackgroundColor =\r\n    'var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96))';\r\n\r\n  @Input() backgroundColor = this.defaultBackgroundColor;\r\n  @Input() isShareEventModalVisible = false;\r\n  @Input() onShareEventClose = () => {};\r\n  @Input() shareButtons = true;\r\n  @Input() position = 'topRight';\r\n  @Input() roomName = '';\r\n  @Input() adminPasscode = '';\r\n  @Input() islevel = '';\r\n  @Input() eventType = 'webinar' as EventType;\r\n  @Input() localLink = '';\r\n  @Input() isDarkMode?: boolean;\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n\r\n  readonly faLink = faLink;\r\n  readonly faShareNodes = faShareNodes;\r\n  readonly faTimes = faTimes;\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\r\n\r\n  isVisible(): boolean {\r\n    return this.isEmbedded() || this.isShareEventModalVisible;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\r\n  }\r\n\r\n  handleClose() {\r\n    this.onShareEventClose();\r\n  }\r\n\r\n  handleOverlayClick() {\r\n    if (!this.isEmbedded()) {\r\n      this.handleClose();\r\n    }\r\n  }\r\n\r\n  resolvedSummary(): string {\r\n    if (this.localLink?.trim()) {\r\n      return 'Your custom event link is ready to copy and share.';\r\n    }\r\n\r\n    switch (this.eventType) {\r\n      case 'broadcast':\r\n        return 'Share this broadcast entry link with viewers or co-hosts.';\r\n      case 'conference':\r\n        return 'Share this collaboration room with invited participants.';\r\n      case 'chat':\r\n        return 'Share this room link so participants can join the conversation.';\r\n      case 'webinar':\r\n      default:\r\n        return 'Share this webinar invite with attendees and speakers.';\r\n    }\r\n  }\r\n\r\n  resolvedOverlayStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'static',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          height: '100%',\r\n          minHeight: 0,\r\n          display: 'block',\r\n          background: 'transparent',\r\n          backdropFilter: 'none',\r\n          zIndex: 'auto',\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          inset: 0,\r\n          width: '100%',\r\n          height: '100%',\r\n          background: this.resolvedIsDarkMode ? 'rgba(2, 8, 23, 0.72)' : 'rgba(15, 23, 42, 0.18)',\r\n          backdropFilter: 'blur(12px)',\r\n          zIndex: 999,\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.overlayStyle) };\r\n  }\r\n\r\n  resolvedContentStyle(): Record<string, string | number> {\r\n    const screenWidth = typeof window !== 'undefined' ? window.innerWidth : 1280;\r\n    const modalWidth = Math.min(430, Math.round(0.82 * screenWidth));\r\n\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'relative',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          maxWidth: 'none',\r\n          height: '100%',\r\n          maxHeight: 'none',\r\n          margin: 0,\r\n          background: this.resolvedBackground(),\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          width: `${modalWidth}px`,\r\n          maxHeight: 'min(78vh, 720px)',\r\n          background: this.resolvedBackground(),\r\n          ...this.resolvePositionStyle(),\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.contentStyle) };\r\n  }\r\n\r\n  private resolvePositionStyle(): Record<string, string> {\r\n    const normalizedPosition = this.position.toLowerCase();\r\n\r\n    if (normalizedPosition.includes('center')) {\r\n      return {\r\n        top: '50%',\r\n        left: '50%',\r\n        transform: 'translate(-50%, -50%)',\r\n      };\r\n    }\r\n\r\n    return {\r\n      top: this.position.includes('top') ? '16px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '16px' : 'auto',\r\n      left: this.position.includes('Left') ? '16px' : 'auto',\r\n      right: this.position.includes('Right') ? '16px' : 'auto',\r\n    };\r\n  }\r\n\r\n  private normalizeStyle(style?: Partial<CSSStyleDeclaration>): Record<string, string | number> {\r\n    return style ? ({ ...style } as Record<string, string | number>) : {};\r\n  }\r\n\r\n  private resolvedBackground(): string {\r\n    if (this.backgroundColor && this.backgroundColor !== this.defaultBackgroundColor) {\r\n      return this.backgroundColor;\r\n    }\r\n\r\n    return this.resolvedIsDarkMode\r\n      ? 'linear-gradient(180deg, rgba(15, 23, 42, 0.96) 0%, rgba(30, 41, 59, 0.94) 100%)'\r\n      : 'linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(248, 250, 252, 0.95) 100%)';\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, OnChanges, OnInit, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faCheck, faSearch, faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { Socket } from 'socket.io-client';\r\n\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 { ModernRenderMode, isEmbeddedRenderMode } from '../utils/render-mode.utils';\r\n\r\ninterface WaitingRoomModalParameters {\r\n  filteredWaitingRoomList: WaitingRoomParticipant[];\r\n  getUpdatedAllParams?: () => WaitingRoomModalParameters;\r\n  [key: string]: unknown;\r\n}\r\n\r\n@Component({\r\n  selector: 'app-waiting-room-modal',\r\n  imports: [CommonModule, FontAwesomeModule, FormsModule],\r\n  template: `\r\n    <ng-container *ngIf=\"isVisible() && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              isWaitingModalVisible: isWaitingModalVisible,\r\n              waitingRoomCounter: waitingRoomCounterState,\r\n              waitingRoomList: waitingRoomListState,\r\n              position: position,\r\n              backgroundColor: backgroundColor,\r\n              roomName: roomName,\r\n              socket: socket,\r\n              onWaitingRoomClose: onWaitingRoomClose,\r\n              onWaitingRoomFilterChange: onWaitingRoomFilterChange,\r\n              handleFilterChange: handleFilterChange.bind(this),\r\n              handleItemPress: handleItemPress.bind(this),\r\n              handleModalClose: handleModalClose.bind(this)\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"isVisible() && !customTemplate\"\r\n      class=\"ms-modern-waiting-overlay\"\r\n      [ngStyle]=\"resolvedOverlayStyle()\"\r\n    >\r\n      <section class=\"ms-modern-waiting\" [ngStyle]=\"resolvedContentStyle()\">\r\n        <header *ngIf=\"showHeader\" class=\"ms-modern-waiting__header\">\r\n          <div class=\"ms-modern-waiting__heading\">\r\n            <span class=\"ms-modern-waiting__eyebrow\">Lobby control</span>\r\n            <h2 class=\"ms-modern-waiting__title\">\r\n              Waiting room\r\n              <span class=\"ms-modern-waiting__badge\">{{ waitingRoomCounterState }}</span>\r\n            </h2>\r\n            <p class=\"ms-modern-waiting__subtitle\">\r\n              Review pending participants and admit or reject them without leaving the room.\r\n            </p>\r\n          </div>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-waiting__close\"\r\n            aria-label=\"Close waiting room\"\r\n            (click)=\"handleModalClose()\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div class=\"ms-modern-waiting__body\">\r\n          <label class=\"ms-modern-waiting__search\">\r\n            <fa-icon [icon]=\"faSearch\" class=\"ms-modern-waiting__search-icon\"></fa-icon>\r\n            <input\r\n              type=\"search\"\r\n              placeholder=\"Search waiting list...\"\r\n              [value]=\"waitingFilterValue\"\r\n              (input)=\"handleFilterChange($event)\"\r\n            />\r\n          </label>\r\n\r\n          <section class=\"ms-modern-waiting__list\" *ngIf=\"waitingRoomListState.length; else emptyState\">\r\n            <article\r\n              *ngFor=\"let participant of waitingRoomListState\"\r\n              class=\"ms-modern-waiting__item\"\r\n            >\r\n              <div class=\"ms-modern-waiting__participant-copy\">\r\n                <strong>{{ participant.name }}</strong>\r\n                <p>Pending admission to {{ roomName || 'this room' }}.</p>\r\n              </div>\r\n\r\n              <div class=\"ms-modern-waiting__actions\">\r\n                <button\r\n                  type=\"button\"\r\n                  class=\"ms-modern-waiting__action ms-modern-waiting__action--approve\"\r\n                  (click)=\"handleItemPress(participant, true)\"\r\n                >\r\n                  <fa-icon [icon]=\"faCheck\"></fa-icon>\r\n                  Admit\r\n                </button>\r\n\r\n                <button\r\n                  type=\"button\"\r\n                  class=\"ms-modern-waiting__action ms-modern-waiting__action--reject\"\r\n                  (click)=\"handleItemPress(participant, false)\"\r\n                >\r\n                  <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n                  Reject\r\n                </button>\r\n              </div>\r\n            </article>\r\n          </section>\r\n\r\n          <ng-template #emptyState>\r\n            <div class=\"ms-modern-waiting__empty-state\">\r\n              <strong>{{ waitingEmptyTitle() }}</strong>\r\n              <p>{{ waitingEmptyDetail() }}</p>\r\n            </div>\r\n          </ng-template>\r\n        </div>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-waiting-overlay {\r\n        position: fixed;\r\n        inset: 0;\r\n        background: rgba(2, 8, 23, 0.66);\r\n        backdrop-filter: blur(10px);\r\n        z-index: 999;\r\n      }\r\n\r\n      .ms-modern-waiting {\r\n        display: flex;\r\n        flex-direction: column;\r\n        overflow: hidden;\r\n        border-radius: 28px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: linear-gradient(\r\n          180deg,\r\n          var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96)) 0%,\r\n          var(--ms-modern-panel-surface, rgba(248, 250, 252, 0.95)) 100%\r\n        );\r\n        box-shadow: 0 28px 70px rgba(15, 23, 42, 0.28);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n      }\r\n\r\n      .ms-modern-waiting__header {\r\n        display: flex;\r\n        align-items: flex-start;\r\n        justify-content: space-between;\r\n        gap: 16px;\r\n        padding: 22px 22px 16px;\r\n        border-bottom: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n      }\r\n\r\n      .ms-modern-waiting__eyebrow {\r\n        display: block;\r\n        color: var(--ms-modern-text-muted, rgba(59, 78, 104, 0.72));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.7rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.12em;\r\n        text-transform: uppercase;\r\n      }\r\n\r\n      .ms-modern-waiting__title {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n        margin: 6px 0 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 1.34rem;\r\n        font-weight: 800;\r\n        line-height: 1.1;\r\n      }\r\n\r\n      .ms-modern-waiting__badge {\r\n        min-width: 30px;\r\n        min-height: 30px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        padding: 0 10px;\r\n        border-radius: 999px;\r\n        background: linear-gradient(\r\n          135deg,\r\n          var(--ms-modern-brand-primary, #4f46e5) 0%,\r\n          var(--ms-modern-brand-secondary, #14b8a6) 100%\r\n        );\r\n        color: #fff;\r\n        font-size: 0.86rem;\r\n      }\r\n\r\n      .ms-modern-waiting__subtitle {\r\n        margin: 8px 0 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.9rem;\r\n        line-height: 1.5;\r\n      }\r\n\r\n      .ms-modern-waiting__close {\r\n        width: 40px;\r\n        height: 40px;\r\n        flex: 0 0 auto;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        border-radius: 999px;\r\n        background: rgba(255, 255, 255, 0.4);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-waiting__body {\r\n        display: grid;\r\n        gap: 16px;\r\n        padding: 18px 22px 22px;\r\n      }\r\n\r\n      .ms-modern-waiting__search {\r\n        position: relative;\r\n        display: block;\r\n      }\r\n\r\n      .ms-modern-waiting__search input {\r\n        min-height: 46px;\r\n        width: 100%;\r\n        border-radius: 14px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.94);\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.92rem;\r\n        font-weight: 600;\r\n        padding: 0 14px 0 42px;\r\n        box-sizing: border-box;\r\n      }\r\n\r\n      .ms-modern-waiting__search-icon {\r\n        position: absolute;\r\n        top: 50%;\r\n        left: 14px;\r\n        transform: translateY(-50%);\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.52));\r\n        pointer-events: none;\r\n      }\r\n\r\n      .ms-modern-waiting__list {\r\n        display: grid;\r\n        gap: 12px;\r\n      }\r\n\r\n      .ms-modern-waiting__item,\r\n      .ms-modern-waiting__empty-state {\r\n        border-radius: 20px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.22));\r\n        background: rgba(255, 255, 255, 0.72);\r\n      }\r\n\r\n      .ms-modern-waiting__item {\r\n        display: grid;\r\n        gap: 14px;\r\n        grid-template-columns: minmax(0, 1fr) auto;\r\n        align-items: center;\r\n        padding: 16px;\r\n      }\r\n\r\n      .ms-modern-waiting__participant-copy strong {\r\n        display: block;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.95rem;\r\n        font-weight: 800;\r\n      }\r\n\r\n      .ms-modern-waiting__participant-copy p,\r\n      .ms-modern-waiting__empty-state p {\r\n        margin: 4px 0 0;\r\n        color: var(--ms-modern-text-secondary, rgba(16, 35, 63, 0.78));\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.82rem;\r\n        line-height: 1.45;\r\n      }\r\n\r\n      .ms-modern-waiting__actions {\r\n        display: inline-flex;\r\n        gap: 10px;\r\n      }\r\n\r\n      .ms-modern-waiting__action {\r\n        min-height: 40px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 8px;\r\n        border-radius: 999px;\r\n        padding: 0 14px;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.86rem;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n      }\r\n\r\n      .ms-modern-waiting__action--approve {\r\n        border: none;\r\n        background: linear-gradient(135deg, #14b8a6 0%, #22c55e 100%);\r\n        color: #fff;\r\n      }\r\n\r\n      .ms-modern-waiting__action--reject {\r\n        border: 1px solid rgba(239, 68, 68, 0.22);\r\n        background: rgba(254, 242, 242, 0.88);\r\n        color: #b91c1c;\r\n      }\r\n\r\n      .ms-modern-waiting__empty-state {\r\n        padding: 24px;\r\n        text-align: center;\r\n      }\r\n\r\n      .ms-modern-waiting__empty-state strong {\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.96rem;\r\n        font-weight: 800;\r\n      }\r\n\r\n      @media (max-width: 640px) {\r\n        .ms-modern-waiting__item {\r\n          grid-template-columns: 1fr;\r\n        }\r\n\r\n        .ms-modern-waiting__actions {\r\n          width: 100%;\r\n          display: grid;\r\n          grid-template-columns: repeat(2, minmax(0, 1fr));\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernWaitingRoomModalComponent implements OnChanges, OnInit {\r\n  @Input() isWaitingModalVisible = false;\r\n  @Input() onWaitingRoomClose: () => void = () => {};\r\n  @Input() waitingRoomCounter = 0;\r\n  @Input() onWaitingRoomFilterChange: (filter: string) => void = () => {};\r\n  @Input() waitingRoomList: WaitingRoomParticipant[] = [];\r\n  @Input() updateWaitingList: (updatedList: WaitingRoomParticipant[]) => void = () => {};\r\n  @Input() roomName = '';\r\n  @Input() socket: Socket = {} as Socket;\r\n  @Input() position = 'topRight';\r\n  @Input() backgroundColor = 'var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.96))';\r\n  @Input() parameters: WaitingRoomModalParameters = {} as WaitingRoomModalParameters;\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<unknown>;\r\n  @Input() onWaitingRoomItemPress?: RespondToWaitingType;\r\n  @Input() renderMode: ModernRenderMode = 'modal';\r\n  @Input() showHeader = true;\r\n\r\n  readonly faCheck = faCheck;\r\n  readonly faSearch = faSearch;\r\n  readonly faTimes = faTimes;\r\n\r\n  waitingRoomCounterState = 0;\r\n  waitingRoomListState: WaitingRoomParticipant[] = [];\r\n  waitingFilterValue = '';\r\n\r\n  constructor(private readonly respondToWaitingService: RespondToWaiting) {}\r\n\r\n  ngOnInit() {\r\n    if (!this.onWaitingRoomItemPress) {\r\n      this.onWaitingRoomItemPress = (data: RespondToWaitingOptions) =>\r\n        this.respondToWaitingService.respondToWaiting(data);\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (\r\n      this.isVisible() &&\r\n      (changes['isWaitingModalVisible'] || changes['waitingRoomList'] || changes['parameters'])\r\n    ) {\r\n      this.updateParameters();\r\n    }\r\n  }\r\n\r\n  isVisible(): boolean {\r\n    return this.isEmbedded() || this.isWaitingModalVisible;\r\n  }\r\n\r\n  isEmbedded(): boolean {\r\n    return isEmbeddedRenderMode(this.renderMode);\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.waitingFilterValue = value;\r\n    this.onWaitingRoomFilterChange(value);\r\n    this.updateParameters();\r\n  }\r\n\r\n  waitingEmptyTitle(): string {\r\n    return this.waitingFilterValue.trim() ? 'No matching participants' : 'No one is waiting';\r\n  }\r\n\r\n  waitingEmptyDetail(): string {\r\n    return this.waitingFilterValue.trim()\r\n      ? 'No waiting-room entries match the current filter.'\r\n      : 'The waiting room is currently clear.';\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,\r\n      socket: this.socket,\r\n    });\r\n  }\r\n\r\n  resolvedOverlayStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'static',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          height: '100%',\r\n          minHeight: 0,\r\n          background: 'transparent',\r\n          zIndex: 'auto',\r\n        }\r\n      : {\r\n          position: 'fixed',\r\n          inset: 0,\r\n          width: '100%',\r\n          height: '100%',\r\n          background: 'rgba(2, 8, 23, 0.66)',\r\n          zIndex: 999,\r\n        };\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.overlayStyle) };\r\n  }\r\n\r\n  resolvedContentStyle(): Record<string, string | number> {\r\n    const baseStyle: Record<string, string | number> = this.isEmbedded()\r\n      ? {\r\n          position: 'relative',\r\n          inset: 'auto',\r\n          width: '100%',\r\n          maxWidth: 'none',\r\n          height: '100%',\r\n          maxHeight: 'none',\r\n          margin: 0,\r\n          overflowY: 'auto',\r\n          background: this.backgroundColor,\r\n        }\r\n      : (() => {\r\n          const screenWidth = window.innerWidth;\r\n          let modalWidth = 0.84 * screenWidth;\r\n          if (modalWidth > 440) {\r\n            modalWidth = 440;\r\n          }\r\n\r\n          return {\r\n            position: 'fixed',\r\n            width: `${modalWidth}px`,\r\n            maxHeight: 'min(82vh, 760px)',\r\n            overflowY: 'auto',\r\n            background: this.backgroundColor,\r\n            ...this.resolvePositionStyle(),\r\n          };\r\n        })();\r\n\r\n    return { ...baseStyle, ...this.normalizeStyle(this.contentStyle) };\r\n  }\r\n\r\n  private updateParameters() {\r\n    const freshParameters = this.parameters?.getUpdatedAllParams\r\n      ? this.parameters.getUpdatedAllParams()\r\n      : this.parameters;\r\n    const filteredWaitingRoomList = Array.isArray(freshParameters?.filteredWaitingRoomList)\r\n      ? freshParameters.filteredWaitingRoomList\r\n      : this.waitingRoomList;\r\n\r\n    this.waitingRoomListState = filteredWaitingRoomList;\r\n    this.waitingRoomCounterState = filteredWaitingRoomList.length || this.waitingRoomCounter;\r\n  }\r\n\r\n  private resolvePositionStyle(): Record<string, string> {\r\n    const normalizedPosition = this.position.toLowerCase();\r\n\r\n    if (normalizedPosition.includes('center')) {\r\n      return {\r\n        top: '50%',\r\n        left: '50%',\r\n        transform: 'translate(-50%, -50%)',\r\n      };\r\n    }\r\n\r\n    return {\r\n      top: this.position.includes('top') ? '16px' : 'auto',\r\n      bottom: this.position.includes('bottom') ? '16px' : 'auto',\r\n      left: this.position.includes('Left') ? '16px' : 'auto',\r\n      right: this.position.includes('Right') ? '16px' : 'auto',\r\n    };\r\n  }\r\n\r\n  private normalizeStyle(style?: Partial<CSSStyleDeclaration>): Record<string, string | number> {\r\n    return style ? ({ ...style } as Record<string, string | number>) : {};\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport {\r\n  Component,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  SimpleChanges,\r\n  TemplateRef,\r\n} from '@angular/core';\r\n\r\nimport {\r\n  type AlertPosition,\r\n  type AlertTone,\r\n} from '../../components/display-components/alert-component/alert.component.component';\r\n\r\nexport interface ModernAlertComponentOptions {\r\n  visible: boolean;\r\n  message: string;\r\n  type: AlertTone;\r\n  duration?: number;\r\n  onHide?: () => void;\r\n  textColor?: string;\r\n  position?: AlertPosition;\r\n  isDarkMode?: boolean;\r\n  alertStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\r\n}\r\n\r\n@Component({\r\n  selector: 'app-modern-alert-component',\r\n  imports: [CommonModule],\r\n  template: `\r\n    <ng-container *ngIf=\"visible && customTemplate\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              visible,\r\n              message,\r\n              type: alertType,\r\n              textColor,\r\n              handlePress: handlePress.bind(this)\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <div\r\n      *ngIf=\"visible && !customTemplate\"\r\n      class=\"ms-modern-alert-shell\"\r\n      [class.ms-modern-alert-shell--dark]=\"resolvedIsDarkMode\"\r\n      [class.ms-modern-alert-shell--light]=\"!resolvedIsDarkMode\"\r\n      [ngStyle]=\"shellStyle\"\r\n    >\r\n      <div\r\n        (click)=\"handlePress()\"\r\n        class=\"ms-modern-alert-card\"\r\n        [class.ms-modern-alert-card--success]=\"alertType === 'success'\"\r\n        [class.ms-modern-alert-card--danger]=\"alertType === 'danger'\"\r\n        [class.ms-modern-alert-card--info]=\"alertType === 'info'\"\r\n        [class.ms-modern-alert-card--warning]=\"alertType === 'warning'\"\r\n        [ngStyle]=\"alertStyle\"\r\n        [attr.role]=\"alertRole\"\r\n        [attr.aria-live]=\"alertRole === 'alert' ? 'assertive' : 'polite'\"\r\n      >\r\n        <div class=\"ms-modern-alert-accent\" aria-hidden=\"true\"></div>\r\n        <div class=\"ms-modern-alert-icon\" aria-hidden=\"true\">{{ alertIcon }}</div>\r\n        <div class=\"ms-modern-alert-copy\">\r\n          <p [ngStyle]=\"textColor ? { color: textColor } : null\" class=\"ms-modern-alert-message\">\r\n            {{ message }}\r\n          </p>\r\n        </div>\r\n        <button\r\n          type=\"button\"\r\n          class=\"ms-modern-alert-close\"\r\n          aria-label=\"Dismiss notification\"\r\n          (click)=\"handlePress(); $event.stopPropagation()\"\r\n        >\r\n          ×\r\n        </button>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-alert-shell {\r\n        display: flex;\r\n        position: fixed;\r\n        inset: 0;\r\n        padding: 16px;\r\n        pointer-events: none;\r\n        z-index: 1100;\r\n      }\r\n\r\n      .ms-modern-alert-card {\r\n        --alert-border: rgba(20, 125, 100, 0.24);\r\n        --alert-glow: rgba(20, 125, 100, 0.16);\r\n        --alert-icon-bg: rgba(20, 125, 100, 0.14);\r\n        --alert-icon-color: var(--ms-modern-success, #147d64);\r\n        --alert-accent: linear-gradient(180deg, var(--ms-modern-success, #147d64) 0%, rgba(56, 211, 159, 0.9) 100%);\r\n        min-width: min(448px, calc(100vw - 32px));\r\n        max-width: min(448px, calc(100vw - 32px));\r\n        display: grid;\r\n        grid-template-columns: auto minmax(0, 1fr) auto;\r\n        gap: 16px;\r\n        align-items: center;\r\n        padding: 18px 20px 18px 22px;\r\n        border-radius: var(--ms-modern-radius-lg, 28px);\r\n        border: 1px solid var(--alert-border);\r\n        box-shadow: var(--ms-modern-shadow-panel, 0 24px 64px rgba(14, 30, 53, 0.16)), 0 0 32px var(--alert-glow);\r\n        backdrop-filter: blur(22px);\r\n        pointer-events: auto;\r\n        cursor: pointer;\r\n        position: relative;\r\n        overflow: hidden;\r\n        animation: ms-modern-alert-enter var(--ms-modern-motion-base, 220ms) var(--ms-modern-motion-easing, cubic-bezier(0.22, 1, 0.36, 1));\r\n      }\r\n\r\n      .ms-modern-alert-shell--dark .ms-modern-alert-card {\r\n        background: linear-gradient(\r\n          135deg,\r\n          rgba(15, 23, 42, 0.96) 0%,\r\n          var(--ms-modern-panel-surface-elevated, rgba(15, 27, 49, 0.9)) 100%\r\n        );\r\n      }\r\n\r\n      .ms-modern-alert-shell--light .ms-modern-alert-card {\r\n        background: linear-gradient(\r\n          135deg,\r\n          rgba(255, 255, 255, 0.98) 0%,\r\n          var(--ms-modern-panel-surface-elevated, rgba(255, 255, 255, 0.92)) 100%\r\n        );\r\n      }\r\n\r\n      .ms-modern-alert-card--danger {\r\n        --alert-border: rgba(217, 72, 95, 0.28);\r\n        --alert-glow: rgba(217, 72, 95, 0.14);\r\n        --alert-icon-bg: rgba(217, 72, 95, 0.14);\r\n        --alert-icon-color: var(--ms-modern-danger, #d9485f);\r\n        --alert-accent: linear-gradient(180deg, var(--ms-modern-danger, #d9485f) 0%, rgba(248, 113, 113, 0.86) 100%);\r\n      }\r\n\r\n      .ms-modern-alert-card--info {\r\n        --alert-border: rgba(15, 109, 181, 0.28);\r\n        --alert-glow: rgba(15, 109, 181, 0.14);\r\n        --alert-icon-bg: rgba(15, 109, 181, 0.14);\r\n        --alert-icon-color: var(--ms-modern-info, #0f6db5);\r\n        --alert-accent: linear-gradient(180deg, var(--ms-modern-info, #0f6db5) 0%, rgba(100, 182, 255, 0.86) 100%);\r\n      }\r\n\r\n      .ms-modern-alert-card--warning {\r\n        --alert-border: rgba(183, 121, 31, 0.28);\r\n        --alert-glow: rgba(183, 121, 31, 0.14);\r\n        --alert-icon-bg: rgba(183, 121, 31, 0.14);\r\n        --alert-icon-color: var(--ms-modern-warning, #b7791f);\r\n        --alert-accent: linear-gradient(180deg, var(--ms-modern-warning, #b7791f) 0%, rgba(247, 191, 77, 0.88) 100%);\r\n      }\r\n\r\n      .ms-modern-alert-accent {\r\n        position: absolute;\r\n        top: 10px;\r\n        bottom: 10px;\r\n        left: 8px;\r\n        width: 4px;\r\n        border-radius: var(--ms-modern-radius-pill, 999px);\r\n        background: var(--alert-accent);\r\n      }\r\n\r\n      .ms-modern-alert-icon {\r\n        width: 42px;\r\n        height: 42px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 50%;\r\n        font-size: 1rem;\r\n        font-weight: 800;\r\n        background: var(--alert-icon-bg);\r\n        color: var(--alert-icon-color);\r\n        box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n      }\r\n\r\n      .ms-modern-alert-copy {\r\n        min-width: 0;\r\n        display: flex;\r\n        align-items: center;\r\n      }\r\n\r\n      .ms-modern-alert-shell--dark .ms-modern-alert-close {\r\n        color: var(--ms-modern-text-primary, #f8fafc);\r\n      }\r\n\r\n      .ms-modern-alert-shell--light .ms-modern-alert-close {\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n      }\r\n\r\n      .ms-modern-alert-message {\r\n        margin: 0;\r\n        font-size: var(--ms-modern-font-body, 0.98rem);\r\n        line-height: 1.5;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n      }\r\n\r\n      .ms-modern-alert-shell--dark .ms-modern-alert-message {\r\n        color: var(--ms-modern-text-primary, #f8fafc);\r\n      }\r\n\r\n      .ms-modern-alert-shell--light .ms-modern-alert-message {\r\n        color: var(--ms-modern-text-primary, #10233f);\r\n      }\r\n\r\n      .ms-modern-alert-close {\r\n        width: 34px;\r\n        height: 34px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(120, 143, 173, 0.28));\r\n        border-radius: 50%;\r\n        background: transparent;\r\n        font-size: 1.1rem;\r\n        cursor: pointer;\r\n        transition:\r\n          transform var(--ms-modern-motion-fast, 160ms) ease,\r\n          background-color var(--ms-modern-motion-fast, 160ms) ease,\r\n          border-color var(--ms-modern-motion-fast, 160ms) ease;\r\n      }\r\n\r\n      .ms-modern-alert-shell--dark .ms-modern-alert-close {\r\n        background: rgba(255, 255, 255, 0.05);\r\n      }\r\n\r\n      .ms-modern-alert-shell--light .ms-modern-alert-close {\r\n        background: rgba(255, 255, 255, 0.58);\r\n      }\r\n\r\n      .ms-modern-alert-close:hover {\r\n        transform: translateY(-1px);\r\n      }\r\n\r\n      .ms-modern-alert-shell--dark .ms-modern-alert-close:hover {\r\n        background: rgba(255, 255, 255, 0.1);\r\n        border-color: rgba(148, 163, 184, 0.28);\r\n      }\r\n\r\n      .ms-modern-alert-shell--light .ms-modern-alert-close:hover {\r\n        background: rgba(255, 255, 255, 0.8);\r\n        border-color: rgba(148, 163, 184, 0.3);\r\n      }\r\n\r\n      @keyframes ms-modern-alert-enter {\r\n        from {\r\n          opacity: 0;\r\n          transform: translateY(-10px) scale(0.98);\r\n        }\r\n\r\n        to {\r\n          opacity: 1;\r\n          transform: translateY(0) scale(1);\r\n        }\r\n      }\r\n\r\n      @media (max-width: 640px) {\r\n        .ms-modern-alert-shell {\r\n          padding: 12px;\r\n        }\r\n\r\n        .ms-modern-alert-card {\r\n          min-width: min(100vw - 24px, 100%);\r\n          max-width: min(100vw - 24px, 100%);\r\n          gap: 14px;\r\n          padding: 16px 18px 16px 20px;\r\n        }\r\n      }\r\n\r\n      @media (prefers-reduced-motion: reduce) {\r\n        .ms-modern-alert-card,\r\n        .ms-modern-alert-close {\r\n          animation: none;\r\n          transition: none;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernAlertComponent implements OnChanges, OnDestroy {\r\n  @Input() visible = false;\r\n  @Input() message = '';\r\n  @Input() type: AlertTone = 'success';\r\n  @Input() duration = 4000;\r\n  @Input() textColor = '';\r\n  @Input() position: AlertPosition = 'top';\r\n  @Input() isDarkMode?: boolean;\r\n  @Input() onHide?: () => void;\r\n  @Input() alertStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\r\n\r\n  alertType: AlertTone = 'success';\r\n\r\n  private hideTimeout?: ReturnType<typeof setTimeout>;\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['type']) {\r\n      this.alertType = this.type;\r\n    }\r\n\r\n    if (changes['visible']) {\r\n      if (this.hideTimeout) {\r\n        clearTimeout(this.hideTimeout);\r\n        this.hideTimeout = undefined;\r\n      }\r\n\r\n      if (this.visible) {\r\n        this.hideTimeout = setTimeout(() => {\r\n          this.onHide?.();\r\n          this.hideTimeout = undefined;\r\n        }, this.duration);\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.hideTimeout) {\r\n      clearTimeout(this.hideTimeout);\r\n      this.hideTimeout = undefined;\r\n    }\r\n  }\r\n\r\n  handlePress(): void {\r\n    this.onHide?.();\r\n  }\r\n\r\n  get alertLabel(): string {\r\n    switch (this.alertType) {\r\n      case 'danger':\r\n        return 'Attention';\r\n      case 'info':\r\n        return 'Update';\r\n      case 'warning':\r\n        return 'Warning';\r\n      default:\r\n        return 'Success';\r\n    }\r\n  }\r\n\r\n  get alertMeta(): string {\r\n    switch (this.alertType) {\r\n      case 'danger':\r\n        return 'Action needed';\r\n      case 'info':\r\n        return 'Room update';\r\n      case 'warning':\r\n        return 'Review needed';\r\n      default:\r\n        return 'Completed';\r\n    }\r\n  }\r\n\r\n  get alertIcon(): string {\r\n    switch (this.alertType) {\r\n      case 'danger':\r\n        return '!';\r\n      case 'info':\r\n        return 'i';\r\n      case 'warning':\r\n        return '!';\r\n      default:\r\n        return '✓';\r\n    }\r\n  }\r\n\r\n  get alertRole(): 'alert' | 'status' {\r\n    return this.alertType === 'danger' || this.alertType === 'warning' ? 'alert' : 'status';\r\n  }\r\n\r\n  get shellStyle(): Record<string, string> {\r\n    const positionStyles: Record<AlertPosition, { justifyContent: string; alignItems: string }> = {\r\n      top: { justifyContent: 'center', alignItems: 'flex-start' },\r\n      bottom: { justifyContent: 'center', alignItems: 'flex-end' },\r\n      'top-right': { justifyContent: 'flex-end', alignItems: 'flex-start' },\r\n      'top-left': { justifyContent: 'flex-start', alignItems: 'flex-start' },\r\n      'bottom-right': { justifyContent: 'flex-end', alignItems: 'flex-end' },\r\n      'bottom-left': { justifyContent: 'flex-start', alignItems: 'flex-end' },\r\n      center: { justifyContent: 'center', alignItems: 'center' },\r\n    };\r\n\r\n    return positionStyles[this.position] || positionStyles.top;\r\n  }\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, TemplateRef } from '@angular/core';\r\n\r\nexport interface ModernLoadingModalOptions {\r\n  isVisible: boolean;\r\n  backgroundColor?: string;\r\n  displayColor?: string;\r\n  isDarkMode?: boolean;\r\n  loadingText?: string;\r\n  showSpinner?: boolean;\r\n  overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  contentStyle?: Partial<CSSStyleDeclaration>;\r\n  spinnerStyle?: Partial<CSSStyleDeclaration>;\r\n  textStyle?: Partial<CSSStyleDeclaration>;\r\n  customTemplate?: TemplateRef<any>;\r\n}\r\n\r\ntype StyleMap = Record<string, string | number | null | undefined>;\r\n\r\n@Component({\r\n  selector: 'app-modern-loading-modal',\r\n  imports: [CommonModule],\r\n  template: `\r\n    <div *ngIf=\"isVisible && customTemplate\" [ngStyle]=\"modalContainerStyle\" class=\"ms-modern-loading-overlay\">\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          customTemplate;\r\n          context: {\r\n            $implicit: {\r\n              isVisible,\r\n              backgroundColor,\r\n              displayColor,\r\n              loadingText,\r\n              showSpinner\r\n            }\r\n          }\r\n        \"\r\n      ></ng-container>\r\n    </div>\r\n\r\n    <div *ngIf=\"isVisible && !customTemplate\" [ngStyle]=\"modalContainerStyle\" class=\"ms-modern-loading-overlay\">\r\n      <div [ngStyle]=\"modalContentStyle\" class=\"ms-modern-loading-panel\">\r\n        <div *ngIf=\"showSpinner\" class=\"ms-modern-loading-spinner-shell\">\r\n          <div class=\"ms-modern-loading-spinner-halo\" aria-hidden=\"true\"></div>\r\n          <div class=\"ms-modern-loading-spinner\" [ngStyle]=\"spinnerContainerStyle\"></div>\r\n        </div>\r\n        <div [ngStyle]=\"loadingTextStyle\" class=\"ms-modern-loading-text\">{{ loadingText }}</div>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-loading-overlay {\r\n        animation: ms-modern-loading-fade-in var(--ms-modern-motion-fast, 160ms) ease-out;\r\n      }\r\n\r\n      .ms-modern-loading-panel {\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        gap: 14px;\r\n        animation: ms-modern-loading-panel-in var(--ms-modern-motion-base, 220ms)\r\n          var(--ms-modern-motion-easing, cubic-bezier(0.22, 1, 0.36, 1));\r\n      }\r\n\r\n      .ms-modern-loading-spinner {\r\n        border: 4px solid rgba(255, 255, 255, 0.16);\r\n        border-top: 4px solid var(--ms-modern-accent, #1476d2);\r\n        border-radius: 50%;\r\n        width: 52px;\r\n        height: 52px;\r\n        animation: ms-modern-loading-spin 1s linear infinite;\r\n      }\r\n\r\n      .ms-modern-loading-spinner-shell {\r\n        position: relative;\r\n        width: 72px;\r\n        height: 72px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 50%;\r\n        background: linear-gradient(135deg, rgba(20, 118, 210, 0.16) 0%, rgba(15, 109, 181, 0.2) 100%);\r\n        animation: ms-modern-loading-pulse 1.6s ease-in-out infinite;\r\n      }\r\n\r\n      .ms-modern-loading-spinner-halo {\r\n        position: absolute;\r\n        inset: -8px;\r\n        border-radius: 50%;\r\n        background: radial-gradient(circle, rgba(20, 118, 210, 0.18) 0%, rgba(20, 118, 210, 0) 72%);\r\n        animation: ms-modern-loading-halo 1.8s ease-in-out infinite;\r\n      }\r\n\r\n      .ms-modern-loading-text {\r\n        margin-top: 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n      }\r\n\r\n      @keyframes ms-modern-loading-spin {\r\n        0% {\r\n          transform: rotate(0deg);\r\n        }\r\n\r\n        100% {\r\n          transform: rotate(360deg);\r\n        }\r\n      }\r\n\r\n      @keyframes ms-modern-loading-fade-in {\r\n        from {\r\n          opacity: 0;\r\n        }\r\n\r\n        to {\r\n          opacity: 1;\r\n        }\r\n      }\r\n\r\n      @keyframes ms-modern-loading-panel-in {\r\n        from {\r\n          opacity: 0;\r\n          transform: translateY(10px) scale(0.96);\r\n        }\r\n\r\n        to {\r\n          opacity: 1;\r\n          transform: translateY(0) scale(1);\r\n        }\r\n      }\r\n\r\n      @keyframes ms-modern-loading-pulse {\r\n        0%,\r\n        100% {\r\n          transform: scale(0.98);\r\n        }\r\n\r\n        50% {\r\n          transform: scale(1.02);\r\n        }\r\n      }\r\n\r\n      @keyframes ms-modern-loading-halo {\r\n        0%,\r\n        100% {\r\n          opacity: 0.65;\r\n          transform: scale(0.96);\r\n        }\r\n\r\n        50% {\r\n          opacity: 1;\r\n          transform: scale(1.04);\r\n        }\r\n      }\r\n\r\n      @media (prefers-reduced-motion: reduce) {\r\n        .ms-modern-loading-overlay,\r\n        .ms-modern-loading-panel,\r\n        .ms-modern-loading-spinner-shell,\r\n        .ms-modern-loading-spinner-halo,\r\n        .ms-modern-loading-spinner {\r\n          animation: none;\r\n        }\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernLoadingModalComponent {\r\n  @Input() isVisible = false;\r\n  @Input() backgroundColor?: string = '';\r\n  @Input() displayColor?: string = '';\r\n  @Input() isDarkMode?: boolean;\r\n  @Input() loadingText = 'Loading...';\r\n  @Input() showSpinner = true;\r\n  @Input() overlayStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() contentStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() spinnerStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() textStyle?: Partial<CSSStyleDeclaration>;\r\n  @Input() customTemplate?: TemplateRef<any>;\r\n\r\n  get modalContainerStyle(): StyleMap {\r\n    const isDarkMode = this.resolvedIsDarkMode;\r\n    const baseStyles = {\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 || (isDarkMode ? 'rgba(2, 6, 23, 0.72)' : 'rgba(15, 23, 42, 0.34)'),\r\n      backdropFilter: 'blur(14px)',\r\n      display: 'flex',\r\n      alignItems: 'center',\r\n      justifyContent: 'center',\r\n      zIndex: '999',\r\n    };\r\n\r\n    return {\r\n      ...baseStyles,\r\n      ...((this.overlayStyle as StyleMap | undefined) ?? {}),\r\n    };\r\n  }\r\n\r\n  get modalContentStyle(): StyleMap {\r\n    const isDarkMode = this.resolvedIsDarkMode;\r\n    const baseStyles = {\r\n      background: isDarkMode\r\n        ? 'linear-gradient(135deg, rgba(15, 23, 42, 0.94) 0%, rgba(30, 41, 59, 0.92) 100%)'\r\n        : 'linear-gradient(135deg, rgba(255, 255, 255, 0.96) 0%, rgba(241, 245, 249, 0.94) 100%)',\r\n      borderRadius: '28px',\r\n      padding: '28px 32px',\r\n      minWidth: '240px',\r\n      border: isDarkMode\r\n        ? '1px solid rgba(148, 163, 184, 0.18)'\r\n        : '1px solid rgba(148, 163, 184, 0.24)',\r\n      boxShadow: '0 28px 56px rgba(15, 23, 42, 0.24), 0 0 28px rgba(20, 118, 210, 0.12)',\r\n      textAlign: 'center',\r\n    };\r\n\r\n    return {\r\n      ...baseStyles,\r\n      ...((this.contentStyle as StyleMap | undefined) ?? {}),\r\n    };\r\n  }\r\n\r\n  get spinnerContainerStyle(): StyleMap {\r\n    return {\r\n      marginBottom: '0',\r\n      ...((this.spinnerStyle as StyleMap | undefined) ?? {}),\r\n    };\r\n  }\r\n\r\n  get loadingTextStyle(): StyleMap {\r\n    const isDarkMode = this.resolvedIsDarkMode;\r\n    const baseStyles = {\r\n      color: this.displayColor || (isDarkMode ? '#e2e8f0' : '#0f172a'),\r\n      fontSize: '0.98rem',\r\n      fontWeight: '700',\r\n      letterSpacing: '0.08em',\r\n      textTransform: 'uppercase',\r\n    };\r\n\r\n    return {\r\n      ...baseStyles,\r\n      ...((this.textStyle as StyleMap | undefined) ?? {}),\r\n    };\r\n  }\r\n\r\n  get resolvedIsDarkMode(): boolean {\r\n    if (typeof this.isDarkMode === 'boolean') {\r\n      return this.isDarkMode;\r\n    }\r\n\r\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\r\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\r\n      : false;\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport {\r\n  AfterViewInit,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  Output,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faArrowLeft, faTimes } from '@fortawesome/free-solid-svg-icons';\r\n\r\n@Component({\r\n  selector: 'app-modern-sidebar-panel',\r\n  imports: [CommonModule, FontAwesomeModule],\r\n  host: {\r\n    '[style.width.px]': 'visible ? width : 0',\r\n    '[style.flex]': \"visible ? '0 0 ' + width + 'px' : '0 0 0px'\",\r\n    '[style.height.px]': 'height',\r\n    '[style.pointer-events]': \"visible ? 'auto' : 'none'\",\r\n  },\r\n  template: `\r\n    <div\r\n      class=\"ms-modern-sidebar-panel__rail\"\r\n    >\r\n      <section *ngIf=\"visible\" class=\"ms-modern-sidebar-panel\">\r\n        <header class=\"ms-modern-sidebar-panel__header\">\r\n          <div *ngIf=\"canNavigateBack; else titleHeader\" class=\"ms-modern-sidebar-panel__header-main\">\r\n            <button\r\n              type=\"button\"\r\n              class=\"ms-modern-sidebar-panel__back-button\"\r\n              (click)=\"navigateBack.emit()\"\r\n              [attr.aria-label]=\"backLabel\"\r\n            >\r\n              <fa-icon [icon]=\"faArrowLeft\"></fa-icon>\r\n              <span>{{ backLabel }}</span>\r\n            </button>\r\n          </div>\r\n\r\n          <ng-template #titleHeader>\r\n            <div class=\"ms-modern-sidebar-panel__header-main\">\r\n            <h2 class=\"ms-modern-sidebar-panel__title\">{{ title }}</h2>\r\n\r\n            <span *ngIf=\"badgeText !== null && badgeText !== undefined\" class=\"ms-modern-sidebar-panel__badge\">\r\n              {{ badgeText }}\r\n            </span>\r\n            </div>\r\n          </ng-template>\r\n\r\n          <button\r\n            type=\"button\"\r\n            class=\"ms-modern-sidebar-panel__icon-button\"\r\n            (click)=\"close.emit()\"\r\n            aria-label=\"Close sidebar\"\r\n          >\r\n            <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n          </button>\r\n        </header>\r\n\r\n        <div #contentContainer class=\"ms-modern-sidebar-panel__content\">\r\n          <ng-content></ng-content>\r\n        </div>\r\n      </section>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      :host {\r\n        display: block;\r\n        min-width: 0;\r\n        min-height: 0;\r\n        overflow: hidden;\r\n        contain: layout paint;\r\n        transition:\r\n          width 220ms cubic-bezier(0.22, 1, 0.36, 1),\r\n          flex-basis 220ms cubic-bezier(0.22, 1, 0.36, 1);\r\n      }\r\n\r\n      .ms-modern-sidebar-panel__rail {\r\n        position: relative;\r\n        width: 100%;\r\n        height: 100%;\r\n        overflow: hidden;\r\n      }\r\n\r\n      .ms-modern-sidebar-panel {\r\n        box-sizing: border-box;\r\n        height: 100%;\r\n        display: flex;\r\n        flex-direction: column;\r\n        color: var(--ms-modern-text-primary, #e2e8f0);\r\n        background:\r\n          linear-gradient(180deg, rgba(20, 118, 210, 0.08), rgba(255, 255, 255, 0)),\r\n          var(--ms-modern-panel-surface-elevated, rgba(15, 27, 49, 0.9));\r\n        border-left: 1px solid var(--ms-modern-border-strong, rgba(59, 130, 246, 0.22));\r\n        border-radius: 0;\r\n        box-shadow: -18px 0 42px rgba(14, 30, 53, 0.14);\r\n        backdrop-filter: blur(18px);\r\n        overflow: hidden;\r\n      }\r\n\r\n      .ms-modern-sidebar-panel__header {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: space-between;\r\n        gap: 10px;\r\n        min-height: 64px;\r\n        padding: 14px 18px 12px;\r\n        border-bottom: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.18));\r\n      }\r\n\r\n      .ms-modern-sidebar-panel__header-main {\r\n        flex: 1;\r\n        min-width: 0;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 12px;\r\n      }\r\n\r\n      .ms-modern-sidebar-panel__title {\r\n        margin: 0;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.96rem;\r\n        font-weight: 800;\r\n        line-height: 1.2;\r\n      }\r\n\r\n      .ms-modern-sidebar-panel__badge {\r\n        min-width: 28px;\r\n        min-height: 24px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        padding: 0 9px;\r\n        border-radius: 999px;\r\n        background: color-mix(in srgb, var(--ms-modern-accent) 18%, transparent);\r\n        border: 1px solid color-mix(in srgb, var(--ms-modern-accent) 24%, transparent);\r\n        color: var(--ms-modern-text-primary, #e2e8f0);\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.72rem;\r\n        font-weight: 700;\r\n      }\r\n\r\n      .ms-modern-sidebar-panel__icon-button {\r\n        flex: 0 0 auto;\r\n        width: 36px;\r\n        height: 36px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        border-radius: 999px;\r\n        border: 1px solid var(--ms-modern-border-subtle, rgba(148, 163, 184, 0.18));\r\n        background: color-mix(in srgb, var(--ms-modern-panel-surface) 84%, transparent);\r\n        color: var(--ms-modern-text-secondary, rgba(226, 232, 240, 0.78));\r\n        cursor: pointer;\r\n        transition:\r\n          border-color var(--ms-modern-motion-fast, 160ms) ease,\r\n          background-color var(--ms-modern-motion-fast, 160ms) ease,\r\n          color var(--ms-modern-motion-fast, 160ms) ease;\r\n      }\r\n\r\n      .ms-modern-sidebar-panel__icon-button:hover {\r\n        border-color: var(--ms-modern-border-strong, rgba(59, 130, 246, 0.28));\r\n        background: color-mix(in srgb, var(--ms-modern-accent) 12%, transparent);\r\n        color: var(--ms-modern-text-primary, #e2e8f0);\r\n      }\r\n\r\n      .ms-modern-sidebar-panel__back-button {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        min-height: 34px;\r\n        padding: 6px 10px;\r\n        border: 0;\r\n        border-radius: 8px;\r\n        background: transparent;\r\n        color: #22c55e;\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', sans-serif);\r\n        font-size: 0.88rem;\r\n        font-weight: 600;\r\n        cursor: pointer;\r\n        transition:\r\n          background-color var(--ms-modern-motion-fast, 160ms) ease,\r\n          color var(--ms-modern-motion-fast, 160ms) ease;\r\n      }\r\n\r\n      .ms-modern-sidebar-panel__back-button:hover {\r\n        background: color-mix(in srgb, var(--ms-modern-accent) 10%, transparent);\r\n      }\r\n\r\n      .ms-modern-sidebar-panel__content {\r\n        flex: 1;\r\n        min-height: 0;\r\n        overflow-y: auto;\r\n        overflow-x: hidden;\r\n        padding: 16px 18px 18px;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 14px;\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernSidebarPanelComponent implements AfterViewInit, OnChanges, OnDestroy {\r\n  @Input() visible = false;\r\n  @Input() width = 0;\r\n  @Input() height = 0;\r\n  @Input() title = '';\r\n  @Input() badgeText: string | number | null = null;\r\n  @Input() backLabel = 'Back';\r\n  @Input() canNavigateBack = false;\r\n  @Input() contentKey = '';\r\n\r\n  @Output() navigateBack = new EventEmitter<void>();\r\n  @Output() close = new EventEmitter<void>();\r\n\r\n  @ViewChild('contentContainer') private contentContainer?: ElementRef<HTMLDivElement>;\r\n\r\n  private scrollResetTimer: number | null = null;\r\n\r\n  protected readonly faArrowLeft = faArrowLeft;\r\n  protected readonly faTimes = faTimes;\r\n\r\n  ngAfterViewInit() {\r\n    this.scheduleScrollReset();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['visible'] || changes['contentKey']) {\r\n      this.scheduleScrollReset();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.scrollResetTimer !== null && typeof window !== 'undefined') {\r\n      window.clearTimeout(this.scrollResetTimer);\r\n      this.scrollResetTimer = null;\r\n    }\r\n  }\r\n\r\n  private scheduleScrollReset() {\r\n    if (!this.visible || typeof window === 'undefined') {\r\n      return;\r\n    }\r\n\r\n    if (this.scrollResetTimer !== null) {\r\n      window.clearTimeout(this.scrollResetTimer);\r\n    }\r\n\r\n    this.scrollResetTimer = window.setTimeout(() => {\r\n      this.scrollResetTimer = null;\r\n\r\n      if (this.contentContainer?.nativeElement) {\r\n        this.contentContainer.nativeElement.scrollTop = 0;\r\n      }\r\n    }, 0);\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faUsers } from '@fortawesome/free-solid-svg-icons';\r\n\r\nexport type ModernBadgePosition = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';\r\n\r\n@Component({\r\n  selector: 'app-modern-participants-counter-badge',\r\n  imports: [CommonModule, FontAwesomeModule],\r\n  template: `\r\n    <div *ngIf=\"showBadge\" class=\"ms-modern-participants-badge\" [ngStyle]=\"containerStyle\">\r\n      <div\r\n        class=\"ms-modern-participants-badge__pill\"\r\n        [class.ms-modern-participants-badge__pill--dark]=\"isDarkMode\"\r\n        [class.ms-modern-participants-badge__pill--light]=\"!isDarkMode\"\r\n        [ngStyle]=\"badgeStyle\"\r\n      >\r\n        <fa-icon class=\"ms-modern-participants-badge__icon\" [icon]=\"faUsers\"></fa-icon>\r\n        <span class=\"ms-modern-participants-badge__count\">{{ participantsCount }}</span>\r\n      </div>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-participants-badge {\r\n        position: absolute;\r\n        z-index: 100;\r\n        pointer-events: none;\r\n      }\r\n\r\n      .ms-modern-participants-badge__pill {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        padding: 8px 14px;\r\n        border-radius: 20px;\r\n        backdrop-filter: blur(10px);\r\n        -webkit-backdrop-filter: blur(10px);\r\n      }\r\n\r\n      .ms-modern-participants-badge__pill--dark {\r\n        background: rgba(45, 52, 54, 0.85);\r\n        color: #ffffff;\r\n        box-shadow:\r\n          0 4px 12px rgba(0, 0, 0, 0.3),\r\n          inset 0 1px 0 rgba(255, 255, 255, 0.1);\r\n        border: 1px solid rgba(255, 255, 255, 0.15);\r\n      }\r\n\r\n      .ms-modern-participants-badge__pill--light {\r\n        background: rgba(255, 255, 255, 0.9);\r\n        color: #1f2937;\r\n        box-shadow:\r\n          0 4px 12px rgba(0, 0, 0, 0.1),\r\n          inset 0 1px 0 rgba(255, 255, 255, 0.5);\r\n        border: 1px solid rgba(0, 0, 0, 0.1);\r\n      }\r\n\r\n      .ms-modern-participants-badge__icon {\r\n        font-size: 14px;\r\n        opacity: 0.9;\r\n      }\r\n\r\n      .ms-modern-participants-badge__count {\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', 'Aptos', 'Trebuchet MS', sans-serif);\r\n        font-size: 14px;\r\n        font-weight: 600;\r\n        letter-spacing: 0.5px;\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernParticipantsCounterBadgeComponent {\r\n  @Input() participantsCount = 0;\r\n  @Input() position: ModernBadgePosition = 'bottomLeft';\r\n  @Input() showBadge = true;\r\n  @Input() backgroundColor?: string;\r\n  @Input() textColor?: string;\r\n  @Input() isDarkMode = true;\r\n  @Input() customStyle: Record<string, string | number> = {};\r\n\r\n  readonly faUsers = faUsers;\r\n\r\n  get containerStyle(): Record<string, string | number> {\r\n    const offset = 16;\r\n    const positions: Record<ModernBadgePosition, Record<string, string | number>> = {\r\n      topLeft: { top: `${offset}px`, left: `${offset}px` },\r\n      topRight: { top: `${offset}px`, right: `${offset}px` },\r\n      bottomLeft: { bottom: `${offset}px`, left: `${offset}px` },\r\n      bottomRight: { bottom: `${offset}px`, right: `${offset}px` },\r\n    };\r\n\r\n    return {\r\n      ...positions[this.position],\r\n      ...this.customStyle,\r\n    };\r\n  }\r\n\r\n  get badgeStyle(): Record<string, string> {\r\n    const style: Record<string, string> = {};\r\n\r\n    if (this.backgroundColor) {\r\n      style['background'] = this.backgroundColor;\r\n    }\r\n\r\n    if (this.textColor) {\r\n      style['color'] = this.textColor;\r\n    }\r\n\r\n    return style;\r\n  }\r\n}","import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n  faChevronDown,\r\n  faChevronLeft,\r\n  faChevronRight,\r\n  faChevronUp,\r\n  faHome,\r\n  faLock,\r\n  faStar,\r\n  faUsers,\r\n} from '@fortawesome/free-solid-svg-icons';\r\n\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 ModernPaginationParameters 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  getUpdatedAllParams: () => ModernPaginationParameters;\r\n  [key: string]: any;\r\n}\r\n\r\nexport interface ModernPaginationOptions {\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: ModernPaginationParameters;\r\n}\r\n\r\n@Component({\r\n  selector: 'app-modern-pagination',\r\n  imports: [CommonModule, FontAwesomeModule],\r\n  template: `\r\n    <div class=\"ms-modern-pagination\" [ngStyle]=\"getContainerStyle()\">\r\n      <button\r\n        *ngIf=\"shouldShowNavigationArrows()\"\r\n        type=\"button\"\r\n        class=\"ms-modern-pagination__button ms-modern-pagination__button--arrow\"\r\n        [ngStyle]=\"getArrowStyle(!canNavigateBack())\"\r\n        [disabled]=\"!canNavigateBack()\"\r\n        [attr.aria-label]=\"direction === 'vertical' ? 'Previous pages' : 'Previous pages'\"\r\n        (click)=\"shiftWindowBack()\"\r\n      >\r\n        <fa-icon [icon]=\"direction === 'vertical' ? faChevronUp : faChevronLeft\"></fa-icon>\r\n      </button>\r\n\r\n      <ng-container *ngFor=\"let item of data\">\r\n        <button\r\n          type=\"button\"\r\n          class=\"ms-modern-pagination__button\"\r\n          [ngClass]=\"{ 'ms-modern-pagination__button--active': item == currentUserPage }\"\r\n          [ngStyle]=\"getPageStyle(item)\"\r\n          [attr.aria-label]=\"getPageAriaLabel(item)\"\r\n          (click)=\"handleClick(item)\"\r\n        >\r\n          <fa-icon\r\n            *ngIf=\"item == 0\"\r\n            [icon]=\"faHome\"\r\n            [style.color]=\"item == currentUserPage ? '#ffffff' : getHomeIconColor()\"\r\n          ></fa-icon>\r\n          <fa-icon\r\n            *ngIf=\"isBreakoutRoom(item)\"\r\n            class=\"ms-modern-pagination__room-icon\"\r\n            [icon]=\"faUsers\"\r\n          ></fa-icon>\r\n          <span\r\n            *ngIf=\"item !== 0\"\r\n            class=\"ms-modern-pagination__label\"\r\n            [ngStyle]=\"getPageLabelStyle(item)\"\r\n          >\r\n            {{ getDisplayItem(item) }}\r\n          </span>\r\n          <fa-icon\r\n            *ngIf=\"isBreakoutRoom(item) && showBreakoutLock(item)\"\r\n            class=\"ms-modern-pagination__badge\"\r\n            [icon]=\"faLock\"\r\n          ></fa-icon>\r\n          <fa-icon\r\n            *ngIf=\"isBreakoutRoom(item) && isCurrentBreakoutRoom(item)\"\r\n            class=\"ms-modern-pagination__badge ms-modern-pagination__badge--star\"\r\n            [icon]=\"faStar\"\r\n          ></fa-icon>\r\n        </button>\r\n      </ng-container>\r\n\r\n      <button\r\n        *ngIf=\"shouldShowNavigationArrows()\"\r\n        type=\"button\"\r\n        class=\"ms-modern-pagination__button ms-modern-pagination__button--arrow\"\r\n        [ngStyle]=\"getArrowStyle(!canNavigateForward())\"\r\n        [disabled]=\"!canNavigateForward()\"\r\n        [attr.aria-label]=\"direction === 'vertical' ? 'Next pages' : 'Next pages'\"\r\n        (click)=\"shiftWindowForward()\"\r\n      >\r\n        <fa-icon [icon]=\"direction === 'vertical' ? faChevronDown : faChevronRight\"></fa-icon>\r\n      </button>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .ms-modern-pagination {\r\n        box-sizing: border-box;\r\n        gap: 4px;\r\n        padding: 2px 6px;\r\n        border-radius: var(--ms-modern-radius-md, 16px);\r\n        overflow-x: auto;\r\n        overflow-y: hidden;\r\n        scrollbar-width: none;\r\n        backdrop-filter: blur(12px);\r\n        box-shadow: 0 14px 28px rgba(15, 23, 42, 0.16);\r\n      }\r\n\r\n      .ms-modern-pagination::-webkit-scrollbar {\r\n        display: none;\r\n      }\r\n\r\n      .ms-modern-pagination__button {\r\n        box-sizing: border-box;\r\n        min-width: 30px;\r\n        height: 30px;\r\n        padding: 0 10px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 4px;\r\n        border: none;\r\n        border-radius: var(--ms-modern-radius-pill, 999px);\r\n        cursor: pointer;\r\n        transition:\r\n          transform var(--ms-modern-motion-fast, 160ms) ease,\r\n          box-shadow var(--ms-modern-motion-fast, 160ms) ease,\r\n          background-color var(--ms-modern-motion-fast, 160ms) ease;\r\n      }\r\n\r\n      .ms-modern-pagination__button--active {\r\n        transform: translateY(-1px);\r\n      }\r\n\r\n      .ms-modern-pagination__label {\r\n        font-family: var(--ms-modern-font-family, 'Segoe UI', 'Aptos', 'Trebuchet MS', sans-serif);\r\n        font-size: 0.76rem;\r\n        font-weight: 800;\r\n        letter-spacing: 0.04em;\r\n        white-space: nowrap;\r\n      }\r\n\r\n      .ms-modern-pagination__badge {\r\n        font-size: 0.72rem;\r\n      }\r\n\r\n      .ms-modern-pagination__badge--star {\r\n        color: #f59e0b;\r\n      }\r\n\r\n      .ms-modern-pagination__button--arrow {\r\n        min-width: 28px;\r\n        width: 28px;\r\n        height: 28px;\r\n        padding: 0;\r\n        background: transparent;\r\n        box-shadow: none;\r\n      }\r\n\r\n      .ms-modern-pagination__room-icon {\r\n        font-size: 0.68rem;\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ModernPaginationComponent 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() maxVisiblePages = 5;\r\n  @Input() parameters: ModernPaginationParameters = {} as ModernPaginationParameters;\r\n\r\n  constructor(private generatePageContentService: GeneratePageContent) {}\r\n\r\n  faHome = faHome;\r\n  faStar = faStar;\r\n  faLock = faLock;\r\n  faUsers = faUsers;\r\n  faChevronLeft = faChevronLeft;\r\n  faChevronRight = faChevronRight;\r\n  faChevronUp = faChevronUp;\r\n  faChevronDown = faChevronDown;\r\n\r\n  data: number[] = [];\r\n  private windowStart = 1;\r\n  componentSizes: ComponentSizes = {} as ComponentSizes;\r\n\r\n  ngOnInit(): void {\r\n    this.componentSizes = this.resolveParameters().componentSizes;\r\n    if (!this.handlePageChange) {\r\n      this.handlePageChange = this.generatePageContentService.generatePageContent.bind(\r\n        this.generatePageContentService,\r\n      );\r\n    }\r\n    this.refreshVisiblePages();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['totalPages'] || changes['currentUserPage'] || changes['parameters']) {\r\n      this.refreshVisiblePages();\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    const resolvedParameters = this.resolveParameters();\r\n    const params = { ...resolvedParameters };\r\n    this.componentSizes = params.componentSizes;\r\n\r\n    if (resolvedParameters.breakOutRoomStarted && !resolvedParameters.breakOutRoomEnded && page !== 0) {\r\n      const roomMember = resolvedParameters.breakoutRooms.find((room: any[]) =>\r\n        room.find((participant) => participant.name == resolvedParameters.member),\r\n      );\r\n      const pageInt = page - resolvedParameters.mainRoomsLength;\r\n      let memberBreakRoom = -1;\r\n\r\n      if (roomMember) {\r\n        memberBreakRoom = resolvedParameters.breakoutRooms.indexOf(roomMember);\r\n      }\r\n\r\n      if ((memberBreakRoom == -1 || memberBreakRoom !== pageInt) && pageInt >= 0) {\r\n        if (resolvedParameters.islevel !== '2') {\r\n          resolvedParameters.showAlert?.({\r\n            message: `You are not part of the breakout room ${pageInt + 1}.`,\r\n            type: 'danger',\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\r\n        if (resolvedParameters.hostNewRoom !== pageInt) {\r\n          resolvedParameters.socket.emit('updateHostBreakout', {\r\n            newRoom: pageInt,\r\n            roomName: resolvedParameters.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\r\n        if (resolvedParameters.islevel == '2' && resolvedParameters.hostNewRoom !== -1) {\r\n          resolvedParameters.socket.emit('updateHostBreakout', {\r\n            prevRoom: resolvedParameters.hostNewRoom,\r\n            newRoom: -1,\r\n            roomName: resolvedParameters.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 (resolvedParameters.islevel == '2' && resolvedParameters.hostNewRoom !== -1) {\r\n        resolvedParameters.socket.emit('updateHostBreakout', {\r\n          prevRoom: resolvedParameters.hostNewRoom,\r\n          newRoom: -1,\r\n          roomName: resolvedParameters.roomName,\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  resolveParameters(): ModernPaginationParameters {\r\n    if (this.parameters?.getUpdatedAllParams) {\r\n      return this.parameters.getUpdatedAllParams();\r\n    }\r\n\r\n    return this.parameters;\r\n  }\r\n\r\n  isDarkModeEnabled(): boolean {\r\n    const params = this.resolveParameters();\r\n\r\n    if (typeof params?.isDarkModeValue === 'boolean') {\r\n      return params.isDarkModeValue;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  refreshVisiblePages(): void {\r\n    this.syncWindowToCurrentPage();\r\n\r\n    if (!this.shouldShowNavigationArrows()) {\r\n      this.data = Array.from({ length: this.totalPages + 1 }, (_, index) => index);\r\n      return;\r\n    }\r\n\r\n    const windowEnd = Math.min(this.windowStart + this.maxVisiblePages - 1, this.totalPages);\r\n    this.data = [0];\r\n\r\n    for (let page = this.windowStart; page <= windowEnd; page += 1) {\r\n      this.data.push(page);\r\n    }\r\n  }\r\n\r\n  shouldShowNavigationArrows(): boolean {\r\n    return this.totalPages > this.maxVisiblePages + 1;\r\n  }\r\n\r\n  canNavigateBack(): boolean {\r\n    return this.windowStart > 1;\r\n  }\r\n\r\n  canNavigateForward(): boolean {\r\n    return this.windowStart + this.maxVisiblePages <= this.totalPages;\r\n  }\r\n\r\n  shiftWindowBack(): void {\r\n    if (!this.canNavigateBack()) {\r\n      return;\r\n    }\r\n\r\n    this.windowStart = this.clampWindowStart(this.windowStart - this.getWindowShiftAmount());\r\n    this.refreshVisiblePages();\r\n  }\r\n\r\n  shiftWindowForward(): void {\r\n    if (!this.canNavigateForward()) {\r\n      return;\r\n    }\r\n\r\n    this.windowStart = this.clampWindowStart(this.windowStart + this.getWindowShiftAmount());\r\n    this.refreshVisiblePages();\r\n  }\r\n\r\n  getArrowStyle(disabled: boolean): Record<string, string> {\r\n    const isDarkMode = this.isDarkModeEnabled();\r\n\r\n    return {\r\n      color: disabled\r\n        ? isDarkMode\r\n          ? 'rgba(226, 232, 240, 0.32)'\r\n          : 'rgba(15, 23, 42, 0.32)'\r\n        : isDarkMode\r\n          ? 'rgba(226, 232, 240, 0.86)'\r\n          : 'rgba(15, 23, 42, 0.82)',\r\n      cursor: disabled ? 'not-allowed' : 'pointer',\r\n      opacity: disabled ? '0.6' : '1',\r\n    };\r\n  }\r\n\r\n  getHomeIconColor(): string {\r\n    return this.isDarkModeEnabled() ? 'rgba(226, 232, 240, 0.82)' : 'rgba(15, 23, 42, 0.68)';\r\n  }\r\n\r\n  getContainerStyle(): Record<string, string> {\r\n    const otherHeight = this.componentSizes?.otherHeight || 0;\r\n    const otherWidth = this.componentSizes?.otherWidth || 0;\r\n    const isDarkMode = this.isDarkModeEnabled();\r\n\r\n    return {\r\n      background:\r\n        this.backgroundColor ||\r\n        (isDarkMode\r\n          ? 'linear-gradient(135deg, rgba(15, 23, 42, 0.92) 0%, rgba(30, 41, 59, 0.88) 100%)'\r\n          : 'linear-gradient(135deg, rgba(255, 255, 255, 0.92) 0%, rgba(226, 232, 240, 0.88) 100%)'),\r\n      justifyContent:\r\n        this.position == 'middle'\r\n          ? 'center'\r\n          : this.position == 'left'\r\n            ? 'flex-start'\r\n            : 'flex-end',\r\n      alignItems:\r\n        this.location == 'middle'\r\n          ? 'center'\r\n          : this.location == 'top'\r\n            ? 'flex-start'\r\n            : 'flex-end',\r\n      margin: '0',\r\n      minHeight: this.direction == 'horizontal' ? this.paginationHeight + 'px' : otherHeight + 'px',\r\n      minWidth: this.direction == 'horizontal' ? otherWidth + 'px' : this.paginationHeight + 'px',\r\n      width: this.direction == 'horizontal' ? '100%' : this.paginationHeight + 'px',\r\n      height: this.direction == 'horizontal' ? this.paginationHeight + 'px' : '100%',\r\n      display: this.showAspect ? 'flex' : 'none',\r\n      maxHeight: this.direction == 'horizontal' ? this.paginationHeight + 'px' : '100%',\r\n      maxWidth: this.direction == 'horizontal' ? '100%' : this.paginationHeight + 'px',\r\n      flexDirection: this.direction == 'vertical' ? 'column' : 'row',\r\n      border: isDarkMode\r\n        ? '1px solid rgba(148, 163, 184, 0.18)'\r\n        : '1px solid rgba(148, 163, 184, 0.24)',\r\n      ...(this.buttonsContainerStyle || {}),\r\n    };\r\n  }\r\n\r\n  getPageStyle(item: number): Record<string, string> {\r\n    const active = item == this.currentUserPage;\r\n    const isDarkMode = this.isDarkModeEnabled();\r\n\r\n    return {\r\n      background: active\r\n        ? 'linear-gradient(135deg, rgba(37, 99, 235, 0.92) 0%, rgba(79, 70, 229, 0.9) 100%)'\r\n        : isDarkMode\r\n          ? 'rgba(30, 41, 59, 0.82)'\r\n          : 'rgba(255, 255, 255, 0.62)',\r\n      color: active ? '#ffffff' : isDarkMode ? '#e2e8f0' : '#0f172a',\r\n      boxShadow: active\r\n        ? '0 12px 26px rgba(37, 99, 235, 0.24)'\r\n        : isDarkMode\r\n          ? 'inset 0 1px 0 rgba(255, 255, 255, 0.06)'\r\n          : 'inset 0 1px 0 rgba(255, 255, 255, 0.22)',\r\n      ...(active ? this.activePageStyle : this.inactivePageStyle),\r\n    };\r\n  }\r\n\r\n  getPageLabelStyle(item: number): Record<string, string> {\r\n    const isDarkMode = this.isDarkModeEnabled();\r\n\r\n    return {\r\n      color: item == this.currentUserPage ? '#ffffff' : isDarkMode ? '#e2e8f0' : '#0f172a',\r\n    };\r\n  }\r\n\r\n  getPageAriaLabel(item: number): string {\r\n    if (item === 0) {\r\n      return 'Go to main room';\r\n    }\r\n\r\n    if (this.isBreakoutRoom(item)) {\r\n      return `Go to breakout room ${this.getBreakoutRoomNumber(item)}`;\r\n    }\r\n\r\n    return `Go to page ${item}`;\r\n  }\r\n\r\n  isBreakoutRoom = (item: number): boolean => {\r\n    const params = this.resolveParameters();\r\n\r\n    return params.breakOutRoomStarted && !params.breakOutRoomEnded && item >= params.mainRoomsLength;\r\n  };\r\n\r\n  isCurrentBreakoutRoom(item: number): boolean {\r\n    const params = this.resolveParameters();\r\n\r\n    return this.isBreakoutRoom(item) && params.memberRoom + 1 === item - (params.mainRoomsLength - 1);\r\n  }\r\n\r\n  showBreakoutLock(item: number): boolean {\r\n    const params = this.resolveParameters();\r\n\r\n    return (\r\n      this.isBreakoutRoom(item) &&\r\n      params.memberRoom + 1 !== item - (params.mainRoomsLength - 1) &&\r\n      params.islevel !== '2'\r\n    );\r\n  }\r\n\r\n  getDisplayItem(item: number): string {\r\n    const roomNumber = this.getBreakoutRoomNumber(item);\r\n\r\n    if (this.isBreakoutRoom(item)) {\r\n      return roomNumber.toString();\r\n    }\r\n\r\n    return item.toString();\r\n  }\r\n\r\n  private syncWindowToCurrentPage(): void {\r\n    if (!this.shouldShowNavigationArrows()) {\r\n      this.windowStart = 1;\r\n      return;\r\n    }\r\n\r\n    if (this.currentUserPage <= 0) {\r\n      this.windowStart = this.clampWindowStart(this.windowStart);\r\n      return;\r\n    }\r\n\r\n    const windowEnd = this.windowStart + this.maxVisiblePages - 1;\r\n    if (this.currentUserPage >= this.windowStart && this.currentUserPage <= windowEnd) {\r\n      this.windowStart = this.clampWindowStart(this.windowStart);\r\n      return;\r\n    }\r\n\r\n    const centeredStart = this.currentUserPage - Math.floor(this.maxVisiblePages / 2);\r\n    this.windowStart = this.clampWindowStart(centeredStart);\r\n  }\r\n\r\n  private clampWindowStart(candidate: number): number {\r\n    const maxStart = Math.max(1, this.totalPages - this.maxVisiblePages + 1);\r\n\r\n    return Math.max(1, Math.min(candidate, maxStart));\r\n  }\r\n\r\n  private getWindowShiftAmount(): number {\r\n    return Math.max(1, this.maxVisiblePages - 2);\r\n  }\r\n\r\n  private getBreakoutRoomNumber(item: number): number {\r\n    const params = this.resolveParameters();\r\n\r\n    return item - (params.mainRoomsLength - 1);\r\n  }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\r\n\r\n@Component({\r\n  selector: 'app-control-icon-badge-widget',\r\n  standalone: true,\r\n  imports: [CommonModule, FontAwesomeModule],\r\n  template: `\r\n    <div class=\"control-widget control-widget--modern\">\r\n      <span class=\"control-widget__icon-shell\" [style.color]=\"iconColor\">\r\n        <fa-icon [icon]=\"icon\" size=\"lg\"></fa-icon>\r\n      </span>\r\n      <span\r\n        *ngIf=\"shouldRenderBadge\"\r\n        class=\"control-widget__badge\"\r\n        [class.control-widget__badge--dot]=\"isDotBadge\"\r\n      >\r\n        {{ isDotBadge ? '' : normalizedBadgeValue }}\r\n      </span>\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      .control-widget {\r\n        position: relative;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        width: 24px;\r\n        height: 24px;\r\n        line-height: 1;\r\n        isolation: isolate;\r\n      }\r\n\r\n      .control-widget__icon-shell {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        min-width: 24px;\r\n        height: 24px;\r\n        filter: drop-shadow(0 1px 2px rgba(15, 23, 42, 0.24));\r\n      }\r\n\r\n      .control-widget__badge {\r\n        position: absolute;\r\n        top: -7px;\r\n        right: -10px;\r\n        min-width: 18px;\r\n        height: 18px;\r\n        padding: 0 5px;\r\n        border-radius: 999px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        background: linear-gradient(135deg, #fb7185 0%, #ef4444 48%, #dc2626 100%);\r\n        color: #ffffff;\r\n        font-size: 10px;\r\n        font-weight: 700;\r\n        line-height: 1;\r\n        letter-spacing: 0.02em;\r\n        box-sizing: border-box;\r\n        border: 1.5px solid rgba(255, 255, 255, 0.94);\r\n        box-shadow: 0 6px 16px rgba(220, 38, 38, 0.28);\r\n        pointer-events: none;\r\n      }\r\n\r\n      .control-widget__badge--dot {\r\n        top: -3px;\r\n        right: -3px;\r\n        min-width: 10px;\r\n        width: 10px;\r\n        height: 10px;\r\n        padding: 0;\r\n        border-width: 2px;\r\n        box-shadow:\r\n          0 0 0 1px rgba(15, 23, 42, 0.16),\r\n          0 6px 12px rgba(220, 38, 38, 0.3);\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class ControlIconBadgeWidgetComponent {\r\n  @Input() icon!: IconDefinition;\r\n  @Input() iconColor = 'currentColor';\r\n  @Input() badgeValue!: number | string;\r\n  @Input() showBadge = false;\r\n\r\n  get normalizedBadgeValue(): string {\r\n    const rawValue = this.badgeValue == null ? '' : String(this.badgeValue).trim();\r\n\r\n    if (!rawValue) {\r\n      return '';\r\n    }\r\n\r\n    const numericValue = Number(rawValue);\r\n    if (Number.isFinite(numericValue) && /^\\d+$/.test(rawValue)) {\r\n      return numericValue > 99 ? '99+' : rawValue;\r\n    }\r\n\r\n    return rawValue;\r\n  }\r\n\r\n  get isDotBadge(): boolean {\r\n    return this.normalizedBadgeValue === '*' || this.normalizedBadgeValue === '•';\r\n  }\r\n\r\n  get shouldRenderBadge(): boolean {\r\n    return this.showBadge && this.normalizedBadgeValue.length > 0;\r\n  }\r\n}","import { Component, Input, Inject } from '@angular/core';\r\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\r\nimport { ControlIconBadgeWidgetComponent } from './control-icon-badge-widget.component';\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    <app-control-icon-badge-widget\r\n      [icon]=\"icon\"\r\n      [iconColor]=\"iconColor\"\r\n      [badgeValue]=\"badgeValue\"\r\n      [showBadge]=\"showBadge\"\r\n    ></app-control-icon-badge-widget>\r\n  `,\r\n    imports: [ControlIconBadgeWidgetComponent]\r\n})\r\nexport class MenuWidget {\r\n  @Input() icon!: IconDefinition;\r\n  @Input() iconColor = 'black';\r\n  @Input() badgeValue!: number | string;\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 | string,\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 { ControlIconBadgeWidgetComponent } from './control-icon-badge-widget.component';\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    <app-control-icon-badge-widget\r\n      [icon]=\"icon\"\r\n      [iconColor]=\"iconColor\"\r\n      [badgeValue]=\"badgeValue\"\r\n      [showBadge]=\"showBadge\"\r\n    ></app-control-icon-badge-widget>\r\n  `,\r\n    imports: [ControlIconBadgeWidgetComponent]\r\n})\r\nexport class MessageWidget {\r\n  @Input() icon!: IconDefinition;\r\n  @Input() iconColor = 'black';\r\n  @Input() badgeValue!: number | string;\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 | string,\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 class=\"record-timer-widget\" [attr.aria-label]=\"ariaLabel\">\r\n      <span class=\"record-timer-widget__dot\" aria-hidden=\"true\"></span>\r\n      <span class=\"record-timer-widget__label\">REC</span>\r\n      <span class=\"record-timer-widget__value\">{{ displayTime }}</span>\r\n    </div>\r\n  `,\r\n    styles: [\r\n        `\r\n      .record-timer-widget {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 6px;\r\n        min-height: 26px;\r\n        padding: 0 10px;\r\n        margin: 0;\r\n        border-radius: 999px;\r\n        background: linear-gradient(135deg, rgba(127, 29, 29, 0.16) 0%, rgba(220, 38, 38, 0.18) 100%);\r\n        border: 1px solid rgba(248, 113, 113, 0.28);\r\n        box-shadow: 0 10px 20px rgba(127, 29, 29, 0.18);\r\n        color: #991b1b;\r\n        line-height: 1;\r\n        backdrop-filter: blur(10px);\r\n      }\r\n\r\n      .record-timer-widget__dot {\r\n        width: 8px;\r\n        height: 8px;\r\n        border-radius: 999px;\r\n        background: linear-gradient(135deg, #fb7185 0%, #ef4444 60%, #dc2626 100%);\r\n        box-shadow: 0 0 0 4px rgba(248, 113, 113, 0.12);\r\n      }\r\n\r\n      .record-timer-widget__label,\r\n      .record-timer-widget__value {\r\n        font-size: 11px;\r\n        font-weight: 700;\r\n        letter-spacing: 0.04em;\r\n      }\r\n\r\n      .record-timer-widget__label {\r\n        color: #b91c1c;\r\n      }\r\n    `,\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  get displayTime(): string {\r\n    return (this.recordingProgressTime || '00:00:00').trim() || '00:00:00';\r\n  }\r\n\r\n  get ariaLabel(): string {\r\n    return `Recording timer ${this.displayTime}`;\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 class=\"menu-participants-widget\">\r\n      <span class=\"menu-participants-widget__icon\" [style.color]=\"iconColor\">\r\n        <fa-icon [icon]=\"icon\" size=\"lg\"></fa-icon>\r\n      </span>\r\n      <span class=\"menu-participants-widget__value\">{{ normalizedCount }}</span>\r\n    </div>\r\n  `,\r\n    styles: [\r\n        `\r\n      .menu-participants-widget {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 6px;\r\n        min-height: 26px;\r\n        padding: 0 9px 0 7px;\r\n        margin: 0;\r\n        border-radius: 999px;\r\n        background: rgba(15, 23, 42, 0.12);\r\n        border: 1px solid rgba(255, 255, 255, 0.24);\r\n        box-shadow: 0 8px 18px rgba(15, 23, 42, 0.14);\r\n        line-height: 1;\r\n        backdrop-filter: blur(10px);\r\n      }\r\n\r\n      .menu-participants-widget__icon {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        filter: drop-shadow(0 1px 2px rgba(15, 23, 42, 0.18));\r\n      }\r\n\r\n      .menu-participants-widget__value {\r\n        color: currentColor;\r\n        font-size: 11px;\r\n        font-weight: 700;\r\n        letter-spacing: 0.02em;\r\n      }\r\n    `,\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  get normalizedCount(): string {\r\n    return this.participantsCounter > 99 ? '99+' : String(Math.max(this.participantsCounter, 0));\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 class=\"screen-share-widget\" [class.screen-share-widget--disabled]=\"computedDisabled\">\r\n      <fa-icon\r\n        [icon]=\"faDesktop\"\r\n        size=\"lg\"\r\n        class=\"screen-share-widget__icon\"\r\n        [style.color]=\"computedDisabled ? iconColor : '#10b981'\"\r\n      >\r\n      </fa-icon>\r\n\r\n      <span *ngIf=\"computedDisabled\" class=\"screen-share-widget__overlay\" aria-hidden=\"true\">\r\n        <fa-icon [icon]=\"faBan\" size=\"xs\"></fa-icon>\r\n      </span>\r\n    </div>\r\n  `,\r\n    styles: [\r\n        `\r\n      .screen-share-widget {\r\n        position: relative;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        width: 24px;\r\n        height: 24px;\r\n        line-height: 1;\r\n      }\r\n\r\n      .screen-share-widget__icon {\r\n        filter: drop-shadow(0 1px 2px rgba(15, 23, 42, 0.24));\r\n      }\r\n\r\n      .screen-share-widget__overlay {\r\n        position: absolute;\r\n        top: -2px;\r\n        right: -4px;\r\n        width: 12px;\r\n        height: 12px;\r\n        border-radius: 999px;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        background: linear-gradient(135deg, #fb7185 0%, #ef4444 48%, #dc2626 100%);\r\n        color: #ffffff;\r\n        border: 1.5px solid rgba(255, 255, 255, 0.94);\r\n        box-shadow: 0 6px 12px rgba(220, 38, 38, 0.24);\r\n      }\r\n    `,\r\n    ]\r\n})\r\nexport class ScreenShareWidget {\r\n  @Input() disabled = false; // Input to toggle disabled state\r\n  @Input() iconColor = 'currentColor';\r\n\r\n  faDesktop = faDesktop;\r\n  faBan = faBan;\r\n\r\n  computedDisabled: boolean;\r\n\r\n  constructor(\r\n    @Optional() @Inject('disabled') private injectedDisabled: boolean,\r\n    @Optional() @Inject('iconColor') private injectedIconColor: string,\r\n  ) {\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    this.iconColor = this.injectedIconColor || this.iconColor;\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 { createResponseJoinRoom as sharedCreateResponseJoinRoom } from 'mediasfu-shared';\r\nimport { 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 (sharedCreateResponseJoinRoom as unknown as CreateResponseJoinRoomType)({ localRoom });\r\n};\r\n","import {\n  Component,\n  HostListener,\n  Injector,\n  ChangeDetectorRef,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CookieService } from 'ngx-cookie-service';\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\nimport { Socket } from 'socket.io-client';\nimport {\n  faPlayCircle,\n  faPauseCircle,\n  faStopCircle,\n  faDotCircle,\n  faRecordVinyl,\n  faCog,\n  faUsers,\n  faClock,\n  faUserPlus,\n  faTools,\n  faDesktop,\n  faPoll,\n  faUserFriends,\n  faChalkboardTeacher,\n  faMicrophone,\n  faMicrophoneSlash,\n  faVideo,\n  faVideoSlash,\n  faShareAlt,\n  faSync,\n  faPhone,\n  faBars,\n  faComments,\n  faChartBar,\n  faLanguage,\n  faSun,\n  faMoon,\n} from '@fortawesome/free-solid-svg-icons';\n\nimport { initialValuesState } from '../../methods/utils/initial-values.util';\n\nimport { MainAspectComponent } from '../display-components/main-aspect-component/main-aspect-component.component';\nimport { ControlButtonsComponent } from '../display-components/control-buttons-component/control-buttons-component.component';\nimport { ControlButtonsAltComponent } from '../display-components/control-buttons-alt-component/control-buttons-alt-component.component';\nimport { ControlButtonsComponentTouch } from '../display-components/control-buttons-component-touch/control-buttons-component-touch.component';\nimport { OtherGridComponent } from '../display-components/other-grid-component/other-grid-component.component';\nimport { MainScreenComponent } from '../display-components/main-screen-component/main-screen-component.component';\nimport { MainGridComponent } from '../display-components/main-grid-component/main-grid-component.component';\nimport { SubAspectComponent } from '../display-components/sub-aspect-component/sub-aspect-component.component';\nimport { MainContainerComponent } from '../display-components/main-container-component/main-container-component.component';\nimport {\n  TranslationSettingsModal,\n  type TranslationChannelAvailability,\n} from '../translation-components/translation-settings-modal/translation-settings-modal.component';\nimport {\n  WelcomePage,\n  WelcomePageOptions,\n} from '../misc-components/welcome-page/welcome-page.component';\n\nimport { BackgroundModal } from '../background-components/background-modal/background-modal.component';\nimport { BreakoutRoomsModal } from '../breakout-components/breakout-rooms-modal.component';\nimport { ConfigureWhiteboardModal } from '../whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component';\nimport { Whiteboard } from '../whiteboard-components/whiteboard/whiteboard.component';\nimport { Screenboard } from '../screenboard-components/screenboard/screenboard.component';\nimport { ModernCoHostModalComponent } from '../../modern/modal-components/modern-co-host-modal.component';\nimport { ModernConfirmExitModalComponent } from '../../modern/modal-components/modern-confirm-exit-modal.component';\nimport { ModernConfirmHereModalComponent } from '../../modern/modal-components/modern-confirm-here-modal.component';\nimport { ModernDisplaySettingsModalComponent } from '../../modern/modal-components/modern-display-settings-modal.component';\nimport { ModernEventSettingsModalComponent } from '../../modern/modal-components/modern-event-settings-modal.component';\nimport { ModernMediaSettingsModalComponent } from '../../modern/modal-components/modern-media-settings-modal.component';\nimport { ModernMenuModalComponent } from '../../modern/modal-components/modern-menu-modal.component';\nimport { ModernMessagesModalComponent } from '../../modern/modal-components/modern-messages-modal.component';\nimport { ModernPollModalComponent } from '../../modern/modal-components/modern-poll-modal.component';\nimport { ModernParticipantsModalComponent } from '../../modern/modal-components/modern-participants-modal.component';\nimport { ModernRecordingModalComponent } from '../../modern/modal-components/modern-recording-modal.component';\nimport { ModernRequestsModalComponent } from '../../modern/modal-components/modern-requests-modal.component';\nimport { ModernShareEventModalComponent } from '../../modern/modal-components/modern-share-event-modal.component';\nimport { ModernWaitingRoomModalComponent } from '../../modern/modal-components/modern-waiting-room-modal.component';\nimport { ModernAlertComponent } from '../../modern/display-components/modern-alert.component';\nimport { ModernLoadingModalComponent } from '../../modern/display-components/modern-loading-modal.component';\nimport { ModernSidebarPanelComponent } from '../../modern/primitives/modern-sidebar-panel.component';\nimport { ScreenboardModal } from '../screenboard-components/screenboard-modal/screenboard-modal.component';\n// pagination and display of media (samples)\nimport { FlexibleGrid } from '../display-components/flexible-grid/flexible-grid.component';\nimport { FlexibleVideo } from '../display-components/flexible-video/flexible-video.component';\nimport { AudioGrid } from '../display-components/audio-grid/audio-grid.component';\nimport { ModernParticipantsCounterBadgeComponent } from '../../modern/display-components/modern-participants-counter-badge.component';\nimport { ModernPaginationComponent } from '../../modern/display-components/modern-pagination.component';\n\nimport { MenuWidget } from '../display-components/control-widgets/menu-widget.component';\nimport { MessageWidget } from '../display-components/control-widgets/message-widget.component';\nimport { MenuRecordWidget } from '../display-components/control-widgets/menu-record-widget.component';\nimport { RecordTimerWidget } from '../display-components/control-widgets/record-timer-widget.component';\nimport { MenuParticipantsWidget } from '../display-components/control-widgets/menu-participants-widget.component';\nimport { ScreenShareWidget } from '../display-components/control-widgets/screenshare-widget.component';\n\nimport {\n  ButtonTouch,\n  ResponseJoinRoom,\n  ResponseJoinLocalRoom,\n  CoHostResponsibility,\n  EventType,\n  Participant,\n  ConsumeSocket,\n  MeetingRoomParams,\n  VidCons,\n  HParamsType,\n  VParamsType,\n  ScreenParamsType,\n  AParamsType,\n  UserRecordingParams,\n  Stream,\n  AudioDecibels,\n  ScreenState,\n  GridSizes,\n  CustomMediaComponent,\n  Message,\n  WaitingRoomParticipant,\n  ComponentSizes,\n  Transport as TransportType,\n  Shape,\n  Poll,\n  BreakoutParticipant,\n  WhiteboardUser,\n  Request,\n  AllMembersData,\n  AllMembersRestData,\n  BreakoutRoomUpdatedData,\n  AllWaitingRoomMembersData,\n  MainButtonAlt,\n  MainCustomButton,\n  RecordParams,\n  SeedData,\n  UpdatedCoHostData,\n  Settings,\n  UpdateConsumingDomainsData,\n  RecordingNoticeData,\n  HostRequestResponseData,\n  PollUpdatedData,\n  PreJoinPageOptions,\n  CreateMediaSFURoomOptions,\n  JoinMediaSFURoomOptions,\n  JoinRoomOnMediaSFUType,\n  CreateRoomOnMediaSFUType,\n} from '../../@types/types';\nimport { createResponseJoinRoom } from '../../methods/utils/create-response-join-room.util';\n\n//import methods for control (samples)\n// Import methods for control (samples)\nimport { LaunchMenuModal } from '../../methods/menu-methods/launch-menu-modal.service';\nimport { LaunchRecording } from '../../methods/recording-methods/launch-recording.service';\nimport { StartRecording } from '../../methods/recording-methods/start-recording.service';\nimport { ConfirmRecording } from '../../methods/recording-methods/confirm-recording.service';\nimport { LaunchWaiting } from '../../methods/waiting-methods/launch-waiting.service';\nimport { launchCoHost } from '../../methods/co-host-methods/launch-co-host.service';\nimport { LaunchMediaSettings } from '../../methods/media-settings-methods/launch-media-settings.service';\nimport { LaunchDisplaySettings } from '../../methods/display-settings-methods/launch-display-settings.service';\nimport { LaunchSettings } from '../../methods/settings-methods/launch-settings.service';\nimport { LaunchRequests } from '../../methods/requests-methods/launch-requests.service';\nimport { LaunchParticipants } from '../../methods/participants-methods/launch-participants.service';\nimport { LaunchMessages } from '../../methods/message-methods/launch-messages.service';\nimport { LaunchConfirmExit } from '../../methods/exit-methods/launch-confirm-exit.service';\nimport { SendMessage } from '../../methods/message-methods/send-message.service';\nimport { MuteParticipants } from '../../methods/participants-methods/mute-participants.service';\nimport { MessageParticipants } from '../../methods/participants-methods/message-participants.service';\nimport { RemoveParticipants } from '../../methods/participants-methods/remove-participants.service';\n\nimport { LaunchPoll } from '../../methods/polls-methods/launch-poll.service';\nimport { LaunchBreakoutRooms } from '../../methods/breakout-room-methods/launch-breakout-rooms.service';\nimport { LaunchConfigureWhiteboard } from '../../methods/whiteboard-methods/launch-configure-whiteboard.service';\n\n// mediasfu functions -- examples\nimport { SocketManager } from '../../sockets/socket-manager.service';\nimport { JoinRoomClient } from '../../producer-client/producer-client-emits/join-room-client.service';\nimport { JoinLocalRoom } from '../../producers/producer-emits/join-local-room.service';\nimport { UpdateRoomParametersClient } from '../../producer-client/producer-client-emits/update-room-parameters-client.service';\nimport { CreateDeviceClient } from '../../producer-client/producer-client-emits/create-device-client.service';\n\nimport { SwitchVideoAlt } from '../../methods/stream-methods/switch-video-alt.service';\nimport { ClickVideo } from '../../methods/stream-methods/click-video.service';\nimport { ClickAudio } from '../../methods/stream-methods/click-audio.service';\nimport { ClickScreenShare } from '../../methods/stream-methods/click-screen-share.service';\nimport { StreamSuccessVideo } from '../../consumers/stream-success-video.service';\nimport { StreamSuccessAudio } from '../../consumers/stream-success-audio.service';\nimport { StreamSuccessScreen } from '../../consumers/stream-success-screen.service';\nimport { StreamSuccessAudioSwitch } from '../../consumers/stream-success-audio-switch.service';\nimport { CheckPermission } from '../../consumers/check-permission.service';\n\n// mediasfu functions\nimport { UpdateMiniCardsGrid } from '../../consumers/update-mini-cards-grid.service';\nimport { MixStreams } from '../../consumers/mix-streams.service';\nimport { DispStreams } from '../../consumers/disp-streams.service';\nimport { StopShareScreen } from '../../consumers/stop-share-screen.service';\nimport { CheckScreenShare } from '../../consumers/check-screen-share.service';\nimport { StartShareScreen } from '../../consumers/start-share-screen.service';\nimport { RequestScreenShare } from '../../consumers/request-screen-share.service';\nimport { ReorderStreams } from '../../consumers/reorder-streams.service';\nimport { PrepopulateUserMedia } from '../../consumers/prepopulate-user-media.service';\nimport { GetVideos } from '../../consumers/get-videos.service';\nimport { RePort } from '../../consumers/re-port.service';\nimport { Trigger } from '../../consumers/trigger.service';\nimport { ConsumerResume } from '../../consumers/consumer-resume.service';\nimport { ConnectSendTransportAudio } from '../../consumers/connect-send-transport-audio.service';\nimport { ConnectSendTransportVideo } from '../../consumers/connect-send-transport-video.service';\nimport { ConnectSendTransportScreen } from '../../consumers/connect-send-transport-screen.service';\nimport { ProcessConsumerTransports } from '../../consumers/process-consumer-transports.service';\nimport { ResumePauseStreams } from '../../consumers/resume-pause-streams.service';\nimport { Readjust } from '../../consumers/readjust.service';\nimport { CheckGrid } from '../../consumers/check-grid.service';\nimport { GetEstimate } from '../../consumers/get-estimate.service';\nimport { CalculateRowsAndColumns } from '../../consumers/calculate-rows-and-columns.service';\nimport { AddVideosGrid } from '../../consumers/add-videos-grid.service';\nimport { OnScreenChanges } from '../../consumers/on-screen-changes.service';\nimport { sleep } from '../../methods/utils/sleep.util';\nimport { ChangeVids } from '../../consumers/change-vids.service';\nimport { CompareActiveNames } from '../../consumers/compare-active-names.service';\nimport { CompareScreenStates } from '../../consumers/compare-screen-states.service';\nimport { CreateSendTransport } from '../../consumers/create-send-transport.service';\nimport { ResumeSendTransportAudio } from '../../consumers/resume-send-transport-audio.service';\nimport { ReceiveAllPipedTransports } from '../../consumers/receive-all-piped-transports.service';\nimport { DisconnectSendTransportVideo } from '../../consumers/disconnect-send-transport-video.service';\nimport { DisconnectSendTransportAudio } from '../../consumers/disconnect-send-transport-audio.service';\nimport { DisconnectSendTransportScreen } from '../../consumers/disconnect-send-transport-screen.service';\nimport { ConnectSendTransport } from '../../consumers/connect-send-transport.service';\nimport { GetPipedProducersAlt } from '../../consumers/get-piped-producers-alt.service';\nimport { SignalNewConsumerTransport } from '../../consumers/signal-new-consumer-transport.service';\nimport { ConnectRecvTransport } from '../../consumers/connect-recv-transport.service';\nimport { ReUpdateInter } from '../../consumers/re-update-inter.service';\nimport { UpdateParticipantAudioDecibels } from '../../consumers/update-participant-audio-decibels.service';\nimport { CloseAndResize } from '../../consumers/close-and-resize.service';\nimport { AutoAdjust } from '../../consumers/auto-adjust.service';\nimport { SwitchUserVideoAlt } from '../../consumers/switch-user-video-alt.service';\nimport { SwitchUserVideo } from '../../consumers/switch-user-video.service';\nimport { SwitchUserAudio } from '../../consumers/switch-user-audio.service';\nimport { ReceiveRoomMessages } from '../../consumers/receive-room-messages.service';\nimport { FormatNumber } from '../../methods/utils/format-number.service';\nimport { ConnectIps } from '../../consumers/connect-ips.service';\nimport { ConnectLocalIps } from '../../consumers/connect-local-ips.service';\n\nimport { PollUpdated } from '../../methods/polls-methods/poll-updated.service';\nimport { HandleCreatePoll } from '../../methods/polls-methods/handle-create-poll.service';\nimport { HandleVotePoll } from '../../methods/polls-methods/handle-vote-poll.service';\nimport { HandleEndPoll } from '../../methods/polls-methods/handle-end-poll.service';\n\nimport { BreakoutRoomUpdated } from '../../methods/breakout-room-methods/breakout-room-updated.service';\n\nimport { StartMeetingProgressTimer } from '../../methods/utils/meeting-timer/start-meeting-progress-timer.service';\nimport { UpdateRecording } from '../../methods/recording-methods/update-recording.service';\nimport { StopRecording } from '../../methods/recording-methods/stop-recording.service';\n\nimport { UserWaiting } from '../../producers/socket-receive-methods/user-waiting.service';\nimport { PersonJoined } from '../../producers/socket-receive-methods/person-joined.service';\nimport { AllWaitingRoomMembers } from '../../producers/socket-receive-methods/all-waiting-room-members.service';\nimport { RoomRecordParams } from '../../producers/socket-receive-methods/room-record-params.service';\nimport { BanParticipant } from '../../producers/socket-receive-methods/ban-participant.service';\nimport { UpdatedCoHost } from '../../producers/socket-receive-methods/updated-co-host.service';\nimport { ParticipantRequested } from '../../producers/socket-receive-methods/participant-requested.service';\nimport { ScreenProducerId } from '../../producers/socket-receive-methods/screen-producer-id.service';\nimport { UpdateMediaSettings } from '../../producers/socket-receive-methods/update-media-settings.service';\nimport { ProducerMediaPaused } from '../../producers/socket-receive-methods/producer-media-paused.service';\nimport { ProducerMediaResumed } from '../../producers/socket-receive-methods/producer-media-resumed.service';\nimport { ProducerMediaClosed } from '../../producers/socket-receive-methods/producer-media-closed.service';\nimport { ControlMediaHost } from '../../producers/socket-receive-methods/control-media-host.service';\nimport { MeetingEnded } from '../../producers/socket-receive-methods/meeting-ended.service';\nimport { DisconnectUserSelf } from '../../producers/socket-receive-methods/disconnect-user-self.service';\nimport { ReceiveMessage } from '../../producers/socket-receive-methods/receive-message.service';\nimport { MeetingTimeRemaining } from '../../producers/socket-receive-methods/meeting-time-remaining.service';\nimport { MeetingStillThere } from '../../producers/socket-receive-methods/meeting-still-there.service';\nimport { StartRecords } from '../../producers/socket-receive-methods/start-records.service';\nimport { ReInitiateRecording } from '../../producers/socket-receive-methods/re-initiate-recording.service';\nimport { GetDomains } from '../../producers/socket-receive-methods/get-domains.service';\nimport { UpdateConsumingDomains } from '../../producers/socket-receive-methods/update-consuming-domains.service';\nimport { RecordingNotice } from '../../producers/socket-receive-methods/recording-notice.service';\nimport { TimeLeftRecording } from '../../producers/socket-receive-methods/time-left-recording.service';\nimport { StoppedRecording } from '../../producers/socket-receive-methods/stopped-recording.service';\nimport { HostRequestResponse } from '../../producers/socket-receive-methods/host-request-response.service';\nimport { AllMembers } from '../../producers/socket-receive-methods/all-members.service';\nimport { AllMembersRest } from '../../producers/socket-receive-methods/all-members-rest.service';\nimport { Disconnect } from '../../producers/socket-receive-methods/disconnect.service';\nimport { PanelistsUpdated } from '../../producers/socket-receive-methods/panelists-updated.service';\nimport { PanelistFocusChanged } from '../../producers/socket-receive-methods/panelist-focus-changed.service';\nimport { ReceiveControlMedia } from '../../producers/socket-receive-methods/receive-control-media.service';\nimport { AddedAsPanelist } from '../../producers/socket-receive-methods/added-as-panelist.service';\nimport { RemovedFromPanelists } from '../../producers/socket-receive-methods/removed-from-panelists.service';\nimport { PermissionUpdated } from '../../producers/socket-receive-methods/permission-updated.service';\nimport { PermissionConfigUpdated } from '../../producers/socket-receive-methods/permission-config-updated.service';\nimport {\n  createLiveSubtitle,\n  isSubtitleExpired,\n  TranslationReceiveMethods,\n  type TranslationProducerMap,\n  type TranslationRoomConfig,\n  type TranslationTranscriptData,\n} from '../../producers/socket-receive-methods/translation-receive-methods.service';\nimport { TranslationConsumerSwitch } from '../../consumers/translation-consumer-switch.service';\nimport { PermissionConfig } from '../../methods/permissions-methods/update-permission-config.service';\nimport { LiveSubtitleService } from '../../services/live-subtitle.service';\n\nimport { CaptureCanvasStream } from '../../methods/whiteboard-methods/capture-canvas-stream.service';\nimport { ResumePauseAudioStreams } from '../../consumers/resume-pause-audio-streams.service';\nimport { ProcessConsumerTransportsAudio } from '../../consumers/process-consumer-transports-audio.service';\n\nimport { types } from 'mediasoup-client';\ntype Device = types.Device;\ntype Producer = types.Producer;\ntype ProducerOptions = types.ProducerOptions;\ntype RtpCapabilities = types.RtpCapabilities;\ntype Transport = types.Transport;;\nimport { SelfieSegmentation } from '@mediapipe/selfie_segmentation';\nimport { MediasfuUICustomOverrides } from '../../@types/ui-overrides.types';\nimport { UIOverrideResolverService } from '../../services/ui-override-resolver.service';\nimport { WithOverrideDirective } from '../../directives/with-override.directive';\n\ninterface TranslationAwareParticipant extends Participant {\n  translationEnabled?: boolean;\n  translationDefaultOutputLanguage?: string | null;\n  translationOriginalProducerId?: string | null;\n  translationInputLanguage?: string | null;\n}\n\ninterface SpeakerTranslationState {\n  speakerId: string;\n  speakerName: string;\n  inputLanguage: string;\n  outputLanguage: string;\n  originalProducerId: string;\n  enabled: boolean;\n}\n\ninterface SpeakerTranslationStateUpdateOptions {\n  speakerName?: string;\n  inputLanguage?: string;\n  enabled?: boolean;\n}\n\nexport type MediasfuGenericOptions = {\n  PrejoinPage?: (options: PreJoinPageOptions | WelcomePageOptions) => HTMLElement;\n  localLink?: string;\n  connectMediaSFU?: boolean;\n  credentials?: { apiUserName: string; apiKey: string };\n  useLocalUIMode?: boolean;\n  seedData?: SeedData;\n  useSeed?: boolean;\n  imgSrc?: string;\n  sourceParameters?: { [key: string]: any };\n  updateSourceParameters?: (data: { [key: string]: any }) => void;\n  returnUI?: boolean;\n  noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\n  joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n  createMediaSFURoom?: CreateRoomOnMediaSFUType;\n  canUsePersonalTranslation?: boolean;\n  personalTranslationUsername?: string;\n};\n\ntype SidebarPanelContent =\n  | 'menu'\n  | 'messages'\n  | 'participants'\n  | 'shareEvent'\n  | 'recording'\n  | 'eventSettings'\n  | 'translation'\n  | 'requests'\n  | 'waiting'\n  | 'coHost'\n  | 'mediaSettings'\n  | 'background'\n  | 'displaySettings'\n  | 'poll'\n  | 'breakoutRooms'\n  | 'configureWhiteboard';\n\ntype SidebarContent = 'none' | SidebarPanelContent;\n\n/**\n * MediasfuGeneric component provides a customizable interface with a full suite of modal windows and flexible layout options for interactive media applications.\n *\n * @component\n * @selector app-mediasfu-generic\n * @standalone true\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]\n *\n * @template\n * The template structure:\n * - Conditional rendering of a PrejoinPage or WelcomePage for introductory or pre-session screens.\n * - Main content area with nested components for grid layouts, flexible video, and audio grids.\n * - Modals for user interactions, including participant management, event settings, breakout rooms, whiteboarding, and media settings.\n *\n * @input {any} PrejoinPage - Component for the prejoin page, defaults to `WelcomePage`.\n * @input {MediasfuGenericOptions} options - Configuration options for the component.\n * @input {boolean} connectMediaSFU - Flag to enable/disable connection to the MediaSFU server.\n * @input {string} localLink - Local link for the Community Edition server.\n * @input {{ apiUserName: string; apiKey: string }} credentials - API credentials for secure access.\n * @input {boolean} useLocalUIMode - Flag to toggle local UI settings.\n * @input {SeedData} seedData - Seed data for initializing the component with specific configurations.\n * @input {boolean} useSeed - Enable/disable use of seed data.\n * @input {string} imgSrc - URL for branding images or logos.\n * @input {object} sourceParameters - Additional parameters for the source.\n * @input {Function} updateSourceParameters - Function to update the source parameters.\n * @input {boolean} returnUI - Flag to return the UI elements.\n * @input {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} noUIPreJoinOptions - Options for the prejoin page without UI.\n * @input {JoinRoomOnMediaSFUType} joinMediaSFURoom - Function to join a room on MediaSFU.\n * @input {CreateRoomOnMediaSFUType} createMediaSFURoom - Function to create a room on MediaSFU.\n * @input {any} customVideoCard - Custom component to replace the default VideoCard component.\n * @input {any} customAudioCard - Custom component to replace the default AudioCard component.\n * @input {any} customMiniCard - Custom component to replace the default MiniCard component.\n * @input {any} customMainComponent - Custom component that provides complete control over the main UI, bypassing default MediaSFU styling.\n *\n * @property {string} title - The title of the component, defaults to \"MediaSFU-Generic\".\n *\n * @styles\n * Component-specific styles, including full-screen settings and customizable colors for backgrounds.\n *\n * @providers [CookieService] - Provides cookies service for session handling.\n *\n * @constructor\n * @class MediasfuGeneric\n * @implements OnInit, OnDestroy\n *\n * @method ngOnInit - Initializes the component and its configurations.\n * @method ngOnDestroy - Performs cleanup, removing event listeners and intervals as needed.\n *\n * @example\n * ```html\n * <app-mediasfu-generic\n *   [PrejoinPage]=\"CustomPrejoinComponent\"\n *   [localLink]=\"'https://localhost:3000'\"\n *   [connectMediaSFU]=\"true\"\n *   [credentials]=\"{ apiUserName: 'username', apiKey: 'apikey' }\"\n *   [useLocalUIMode]=\"true\"\n *   [seedData]=\"seedDataObject\"\n *   [useSeed]=\"true\"\n *   [imgSrc]=\"'https://example.com/logo.png'\"\n *   [sourceParameters]=\"{ source: 'camera', width: 640, height: 480 }\"\n *   [updateSourceParameters]=\"updateSourceParameters\"\n *   [returnUI]=\"true\"\n *   [noUIPreJoinOptions]=\"{ roomName: 'room1', userName: 'user1' }\"\n *   [joinMediaSFURoom]=\"joinMediaSFURoom\"\n *   [createMediaSFURoom]=\"createMediaSFURoom\"\n *   [customVideoCard]=\"CustomVideoCardComponent\"\n *   [customAudioCard]=\"CustomAudioCardComponent\"\n *   [customMiniCard]=\"CustomMiniCardComponent\"\n *   [customMainComponent]=\"CustomMainComponent\">\n * </app-mediasfu-generic>\n * ```\n */\n\n\n@Component({\n  selector: 'app-mediasfu-generic',\n  imports: [\n    CommonModule,\n    BreakoutRoomsModal,\n    BackgroundModal,\n    ModernCoHostModalComponent,\n    ModernAlertComponent,\n    AudioGrid,\n    ControlButtonsComponentTouch,\n    ControlButtonsComponent,\n    FlexibleGrid,\n    FlexibleVideo,\n    ModernLoadingModalComponent,\n    ModernPaginationComponent,\n    ModernParticipantsCounterBadgeComponent,\n    SubAspectComponent,\n    ModernDisplaySettingsModalComponent,\n    ModernEventSettingsModalComponent,\n    ModernConfirmExitModalComponent,\n    TranslationSettingsModal,\n    ModernMenuModalComponent,\n    ModernMessagesModalComponent,\n    ModernConfirmHereModalComponent,\n    ModernShareEventModalComponent,\n    ModernParticipantsModalComponent,\n    ModernPollModalComponent,\n    ModernRecordingModalComponent,\n    ModernRequestsModalComponent,\n    ModernMediaSettingsModalComponent,\n    MainAspectComponent,\n    MainContainerComponent,\n    MainGridComponent,\n    MainScreenComponent,\n    ModernSidebarPanelComponent,\n    OtherGridComponent,\n    ScreenboardModal,\n    Whiteboard,\n    ConfigureWhiteboardModal,\n    ModernWaitingRoomModalComponent,\n    WithOverrideDirective,\n  ],\n  template: `\n    <!-- Custom Main Component (if provided) - full control over styling -->\n    <ng-container *ngIf=\"customMainComponent && validated.value\">\n      <ng-container\n        *ngComponentOutlet=\"\n          customMainComponent.component || customMainComponent;\n          injector: customMainComponent.injector\n        \"\n      >\n      </ng-container>\n    </ng-container>\n\n    <!-- Default MediaSFU wrapper with standard styling -->\n    <div\n      *ngIf=\"!customMainComponent\"\n      class=\"MediaSFU\"\n      [ngStyle]=\"containerStyle\"\n    >\n      <ng-container *ngIf=\"!validated.value; else mainContent\">\n        <ng-container\n          *ngComponentOutlet=\"\n            PrejoinPageComponent.component;\n            injector: PrejoinPageComponent.injector\n          \"\n        >\n        </ng-container>\n      </ng-container>\n\n      <ng-template #mainContent>\n        <!-- Custom Main Component (if provided) -->\n        <ng-container *ngIf=\"customMainComponent\">\n          <ng-container\n            *ngComponentOutlet=\"\n              customMainComponent.component || customMainComponent;\n              injector: customMainComponent.injector\n            \"\n          >\n          </ng-container>\n        </ng-container>\n\n        <!-- Default Main Component -->\n        <ng-container *ngIf=\"returnUI && !customMainComponent\">\n          <ng-container\n            *appWithOverride=\"\n              'mainContainer';\n              default: MainContainerComponentRef;\n              props: mainContainerOverrideProps\n            \"\n          >\n            <app-main-container-component>\n              <ng-container\n                *appWithOverride=\"\n                  'mainAspect';\n                  default: MainAspectComponentRef;\n                  props: mainAspectOverrideProps\n                \"\n              >\n                <app-main-aspect-component\n                  [backgroundColor]=\"roomSurfaceColor()\"\n                  [defaultFraction]=\"1 - controlHeight.value\"\n                  [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\n                  [updateIsWideScreen]=\"updateIsWideScreen\"\n                  [updateIsMediumScreen]=\"updateIsMediumScreen\"\n                  [updateIsSmallScreen]=\"updateIsSmallScreen\"\n                  [containerStyle]=\"mainAspectContainerStyle()\"\n                >\n                  <ng-container\n                    *appWithOverride=\"\n                      'mainScreen';\n                      default: MainScreenComponentRef;\n                      props: mainScreenOverrideProps\n                    \"\n                  >\n                    <app-main-screen-component\n                      [doStack]=\"true\"\n                      [mainSize]=\"mainHeightWidth.value\"\n                      [containerWidthFraction]=\"mainScreenWidthFraction()\"\n                      [defaultFraction]=\"1 - controlHeight.value\"\n                      [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\n                      [containerStyle]=\"mainScreenContainerStyle()\"\n                      [updateComponentSizes]=\"updateComponentSizes\"\n                    >\n                      <ng-container\n                        *appWithOverride=\"\n                          'mainGrid';\n                          default: MainGridComponentRef;\n                          props: mainGridOverrideProps\n                        \"\n                      >\n                        <app-main-grid-component\n                          [height]=\"componentSizes.value.mainHeight\"\n                          [width]=\"componentSizes.value.mainWidth\"\n                          [backgroundColor]=\"roomSurfaceColor()\"\n                          [mainSize]=\"mainHeightWidth.value\"\n                          [showAspect]=\"mainHeightWidth.value > 0\"\n                          [timeBackgroundColor]=\"recordState.value\"\n                          [meetingProgressTime]=\"meetingProgressTime.value\"\n                        >\n                          <ng-container\n                            *appWithOverride=\"\n                              'flexibleVideo';\n                              default: FlexibleVideoComponentRef;\n                              props: flexibleVideoOverrideProps\n                            \"\n                          >\n                            <app-flexible-video\n                              [customWidth]=\"componentSizes.value.mainWidth\"\n                              [customHeight]=\"componentSizes.value.mainHeight\"\n                              [rows]=\"1\"\n                              [columns]=\"1\"\n                              [componentsToRender]=\"mainGridStream.value\"\n                              [showAspect]=\"\n                                mainGridStream.value.length > 0 &&\n                                !(whiteboardStarted.value && !whiteboardEnded.value)\n                              \"\n                              [localStreamScreen]=\"localStreamScreen.value!\"\n                              [annotateScreenStream]=\"annotateScreenStream.value\"\n                              [Screenboard]=\"shared.value ? ScreenboardWidget : undefined\"\n                            >\n                            </app-flexible-video>\n                          </ng-container>\n                          <ng-container\n                            *appWithOverride=\"\n                              'whiteboard';\n                              default: WhiteboardComponentRef;\n                              props: whiteboardOverrideProps\n                            \"\n                          >\n                            <app-whiteboard\n                              [customWidth]=\"componentSizes.value.mainWidth\"\n                              [customHeight]=\"componentSizes.value.mainHeight\"\n                              [parameters]=\"mediaSFUParameters\"\n                              [showAspect]=\"whiteboardStarted.value && !whiteboardEnded.value\"\n                            ></app-whiteboard>\n                          </ng-container>\n                          <ng-container\n                            *appWithOverride=\"\n                              'controlButtonsTouch';\n                              default: ControlButtonsTouchComponentRef;\n                              props: controlButtonsTouchBroadcastOverrideProps\n                            \"\n                          >\n                            <app-control-buttons-component-touch\n                              [buttons]=\"controlBroadcastButtons\"\n                              [position]=\"'right'\"\n                              [location]=\"'bottom'\"\n                              [direction]=\"'vertical'\"\n                              [showAspect]=\"eventType.value === 'broadcast'\"\n                            ></app-control-buttons-component-touch>\n                          </ng-container>\n                          <ng-container\n                            *appWithOverride=\"\n                              'controlButtonsTouch';\n                              default: ControlButtonsTouchComponentRef;\n                              props: controlButtonsTouchRecordOverrideProps\n                            \"\n                          >\n                            <app-control-buttons-component-touch\n                              [buttons]=\"recordButton\"\n                              [direction]=\"'horizontal'\"\n                              [showAspect]=\"\n                                eventType.value === 'broadcast' &&\n                                !showRecordButtons.value &&\n                                islevel.value === '2'\n                              \"\n                              [location]=\"'bottom'\"\n                              [position]=\"'middle'\"\n                            ></app-control-buttons-component-touch>\n                          </ng-container>\n                          <ng-container\n                            *appWithOverride=\"\n                              'controlButtonsTouch';\n                              default: ControlButtonsTouchComponentRef;\n                              props: controlButtonsTouchRecordAltOverrideProps\n                            \"\n                          >\n                            <app-control-buttons-component-touch\n                              [buttons]=\"recordButtons\"\n                              [direction]=\"'horizontal'\"\n                              [showAspect]=\"\n                                eventType.value === 'broadcast' &&\n                                showRecordButtons.value &&\n                                islevel.value === '2'\n                              \"\n                              [location]=\"'bottom'\"\n                              [position]=\"'middle'\"\n                            ></app-control-buttons-component-touch>\n                          </ng-container>\n                          <app-modern-participants-counter-badge\n                            [participantsCount]=\"participantsCounter.value\"\n                            [position]=\"'bottomLeft'\"\n                            [showBadge]=\"mainHeightWidth.value > 0\"\n                            [isDarkMode]=\"modernMenuDarkMode.value\"\n                          ></app-modern-participants-counter-badge>\n                        </app-main-grid-component>\n                      </ng-container>\n\n                      <ng-container\n                        *appWithOverride=\"\n                          'otherGrid';\n                          default: OtherGridComponentRef;\n                          props: otherGridOverrideProps\n                        \"\n                      >\n                        <app-other-grid-component\n                          [height]=\"componentSizes.value.otherHeight\"\n                          [width]=\"componentSizes.value.otherWidth\"\n                          [backgroundColor]=\"roomSurfaceColor()\"\n                          [showAspect]=\"mainHeightWidth.value !== 100\"\n                          [timeBackgroundColor]=\"recordState.value\"\n                          [showTimer]=\"mainHeightWidth.value === 0\"\n                          [meetingProgressTime]=\"meetingProgressTime.value\"\n                        >\n                          <div\n                            *ngIf=\"doPaginate.value\"\n                            [style.width]=\"paginationDirection.value == 'horizontal' ? componentSizes.value.otherWidth + 'px' : paginationHeightWidth.value + 'px'\"\n                            [style.height]=\"paginationDirection.value == 'horizontal' ? paginationHeightWidth.value + 'px' : componentSizes.value.otherHeight + 'px'\"\n                            [style.display]=\"doPaginate.value ? 'flex' : 'none'\"\n                            [style.flex-direction]=\"paginationDirection.value == 'horizontal' ? 'row' : 'column'\"\n                            [style.justify-content]=\"'center'\"\n                            [style.align-items]=\"'center'\"\n                            [style.padding]=\"'0'\"\n                            [style.margin]=\"'0'\"\n                          >\n                            <ng-container\n                              *appWithOverride=\"\n                                'pagination';\n                                default: PaginationComponentRef;\n                                props: paginationOverrideProps\n                              \"\n                            >\n                              <app-modern-pagination\n                                [totalPages]=\"numberPages.value\"\n                                [currentUserPage]=\"currentUserPage.value\"\n                                [showAspect]=\"doPaginate.value\"\n                                [paginationHeight]=\"paginationHeightWidth.value\"\n                                [direction]=\"paginationDirection.value\"\n                                [parameters]=\"mediaSFUParameters\"\n                              ></app-modern-pagination>\n                            </ng-container>\n                          </div>\n\n                          <ng-container\n                            *appWithOverride=\"\n                              'audioGrid';\n                              default: AudioGridComponentRef;\n                              props: audioGridOverrideProps\n                            \"\n                          >\n                            <app-audio-grid [componentsToRender]=\"audioOnlyStreams.value\"></app-audio-grid>\n                          </ng-container>\n\n                          <ng-container\n                            *appWithOverride=\"\n                              'controlButtonsTouch';\n                              default: ControlButtonsTouchComponentRef;\n                              props: controlButtonsTouchChatOverrideProps\n                            \"\n                          >\n                            <app-control-buttons-component-touch\n                              [buttons]=\"controlChatButtons\"\n                              [position]=\"'right'\"\n                              [location]=\"'bottom'\"\n                              [direction]=\"'vertical'\"\n                              [showAspect]=\"eventType.value === 'chat'\"\n                            ></app-control-buttons-component-touch>\n                          </ng-container>\n\n                          <ng-container\n                            *appWithOverride=\"\n                              'flexibleGrid';\n                              default: FlexibleGridComponentRef;\n                              props: flexibleGridOverrideProps\n                            \"\n                          >\n                            <app-flexible-grid\n                              [customWidth]=\"gridSizes.value.gridWidth!\"\n                              [customHeight]=\"gridSizes.value.gridHeight!\"\n                              [rows]=\"gridRows.value\"\n                              [columns]=\"gridCols.value\"\n                              [componentsToRender]=\"otherGridStreams.value[0]\"\n                              [backgroundColor]=\"roomSurfaceColor()\"\n                            ></app-flexible-grid>\n                          </ng-container>\n                          <ng-container\n                            *appWithOverride=\"\n                              'flexibleGridAlt';\n                              default: FlexibleGridComponentRef;\n                              props: flexibleGridAltOverrideProps\n                            \"\n                          >\n                            <app-flexible-grid\n                              [customWidth]=\"gridSizes.value.altGridWidth!\"\n                              [customHeight]=\"gridSizes.value.altGridHeight!\"\n                              [rows]=\"altGridRows.value\"\n                              [columns]=\"altGridCols.value\"\n                              [componentsToRender]=\"otherGridStreams.value[1]\"\n                              [backgroundColor]=\"roomSurfaceColor()\"\n                            ></app-flexible-grid>\n                          </ng-container>\n                          <app-modern-participants-counter-badge\n                            [participantsCount]=\"participantsCounter.value\"\n                            [position]=\"'topRight'\"\n                            [showBadge]=\"mainHeightWidth.value === 0\"\n                            [isDarkMode]=\"modernMenuDarkMode.value\"\n                          ></app-modern-participants-counter-badge>\n                        </app-other-grid-component>\n                      </ng-container>\n                    </app-main-screen-component>\n                  </ng-container>\n\n                  <app-modern-sidebar-panel\n                    *ngIf=\"shouldUseSidebar()\"\n                    [ngStyle]=\"sidebarThemeVars()\"\n                    [style.position]=\"'absolute'\"\n                    [style.top.px]=\"0\"\n                    [style.right.px]=\"0\"\n                    [style.zIndex]=\"12\"\n                    [style.width.px]=\"isSidebarVisible() ? sidebarWidth() : 0\"\n                    [style.height.px]=\"componentSizes.value.mainHeight || 0\"\n                    [style.pointer-events]=\"isSidebarVisible() ? 'auto' : 'none'\"\n                    [visible]=\"isSidebarVisible()\"\n                    [width]=\"sidebarWidth()\"\n                    [height]=\"componentSizes.value.mainHeight || 0\"\n                    [title]=\"sidebarTitle()\"\n                    [badgeText]=\"sidebarBadgeText()\"\n                    [contentKey]=\"activeSidebarContent.value\"\n                    [backLabel]=\"sidebarBackLabel()\"\n                    [canNavigateBack]=\"sidebarNavigationStack.value.length > 0\"\n                    (navigateBack)=\"sidebarNavigateBack()\"\n                    (close)=\"closeSidebar()\"\n                  >\n                        <ng-container [ngSwitch]=\"activeSidebarContent.value\">\n                              <ng-container *ngSwitchCase=\"'menu'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'menuModal';\n                                    default: SidebarMenuModalComponentRef;\n                                    props: sidebarMenuModalOverrideProps\n                                  \"\n                                >\n                                  <app-modern-menu-modal\n                                    [backgroundColor]=\"'transparent'\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [isVisible]=\"true\"\n                                    [isDarkMode]=\"modernMenuDarkMode.value\"\n                                    [onToggleTheme]=\"updateModernThemeDarkMode\"\n                                    [onClose]=\"closeSidebar\"\n                                    [customButtons]=\"customMenuButtons\"\n                                    [roomName]=\"roomName.value\"\n                                    [adminPasscode]=\"adminPasscode.value\"\n                                    [islevel]=\"islevel.value\"\n                                    [eventType]=\"eventType.value\"\n                                    [localLink]=\"localLink\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-modern-menu-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'messages'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'messagesModal';\n                                    default: MessagesModalComponentRef;\n                                    props: sidebarMessagesModalOverrideProps\n                                  \"\n                                >\n                                  <app-messages-modal\n                                    [backgroundColor]=\"'transparent'\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [isMessagesModalVisible]=\"true\"\n                                    [onMessagesClose]=\"closeSidebar\"\n                                    [messages]=\"messages.value\"\n                                    [eventType]=\"eventType.value\"\n                                    [member]=\"member.value\"\n                                    [islevel]=\"islevel.value\"\n                                    [coHostResponsibility]=\"coHostResponsibility.value\"\n                                    [coHost]=\"coHost.value\"\n                                    [startDirectMessage]=\"startDirectMessage.value\"\n                                    [directMessageDetails]=\"directMessageDetails.value\"\n                                    [updateStartDirectMessage]=\"updateStartDirectMessage\"\n                                    [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\n                                    [showAlert]=\"showAlert\"\n                                    [roomName]=\"roomName.value\"\n                                    [socket]=\"socket.value\"\n                                    [chatSetting]=\"chatSetting.value\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-messages-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'shareEvent'\">\n                                <app-share-event-modal\n                                  [isShareEventModalVisible]=\"true\"\n                                  [isDarkMode]=\"modernMenuDarkMode.value\"\n                                  [onShareEventClose]=\"onShareEventClose\"\n                                  [roomName]=\"roomName.value\"\n                                  [islevel]=\"islevel.value\"\n                                  [adminPasscode]=\"adminPasscode.value\"\n                                  [eventType]=\"eventType.value\"\n                                  [localLink]=\"localLink\"\n                                  [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                  [renderMode]=\"'inline'\"\n                                  [showHeader]=\"false\"\n                                ></app-share-event-modal>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'participants'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'participantsModal';\n                                    default: ParticipantsModalComponentRef;\n                                    props: sidebarParticipantsModalOverrideProps\n                                  \"\n                                >\n                                  <app-participants-modal\n                                    [backgroundColor]=\"'transparent'\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [isParticipantsModalVisible]=\"true\"\n                                    [onParticipantsClose]=\"closeSidebar\"\n                                    [participantsCounter]=\"filteredParticipants.value.length\"\n                                    [onParticipantsFilterChange]=\"onParticipantsFilterChange\"\n                                    [parameters]=\"participantsModalOverrideProps().parameters\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-participants-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'recording'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'recordingModal';\n                                    default: RecordingModalComponentRef;\n                                    props: sidebarRecordingModalOverrideProps\n                                  \"\n                                >\n                                  <app-recording-modal\n                                    [backgroundColor]=\"'transparent'\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [isRecordingModalVisible]=\"true\"\n                                    [onClose]=\"onRecordingClose\"\n                                    [startRecording]=\"startRecording.startRecording\"\n                                    [confirmRecording]=\"confirmRecording.confirmRecording\"\n                                    [parameters]=\"mediaSFUParameters\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-recording-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'eventSettings'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'eventSettingsModal';\n                                    default: EventSettingsModalComponentRef;\n                                    props: sidebarEventSettingsModalOverrideProps\n                                  \"\n                                >\n                                  <app-event-settings-modal\n                                    [isEventSettingsModalVisible]=\"true\"\n                                    [isDarkMode]=\"modernMenuDarkMode.value\"\n                                    [onEventSettingsClose]=\"onEventSettingsClose\"\n                                    [audioSetting]=\"audioSetting.value\"\n                                    [videoSetting]=\"videoSetting.value\"\n                                    [screenshareSetting]=\"screenshareSetting.value\"\n                                    [chatSetting]=\"chatSetting.value\"\n                                    [updateAudioSetting]=\"updateAudioSetting\"\n                                    [updateVideoSetting]=\"updateVideoSetting\"\n                                    [updateScreenshareSetting]=\"updateScreenshareSetting\"\n                                    [updateChatSetting]=\"updateChatSetting\"\n                                    [updateIsSettingsModalVisible]=\"updateIsSettingsModalVisible\"\n                                    [roomName]=\"roomName.value\"\n                                    [socket]=\"socket.value\"\n                                    [showAlert]=\"showAlert\"\n                                    [backgroundColor]=\"'transparent'\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-event-settings-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'translation'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'translationSettingsModal';\n                                    default: TranslationSettingsModalComponentRef;\n                                    props: sidebarTranslationSettingsModalOverrideProps\n                                  \"\n                                >\n                                  <app-translation-settings-modal\n                                    [isVisible]=\"true\"\n                                    [onClose]=\"onTranslationSettingsClose\"\n                                    [isDarkMode]=\"modernMenuDarkMode.value\"\n                                    [translationSupported]=\"translationSupported.value\"\n                                    [translationConfig]=\"translationConfig.value\"\n                                    [member]=\"member.value\"\n                                    [islevel]=\"islevel.value\"\n                                    [audioProducerId]=\"audioProducer.value?.id ?? null\"\n                                    [participants]=\"participants.value\"\n                                    [mySpokenLanguage]=\"mySpokenLanguage.value\"\n                                    [mySpokenLanguageEnabled]=\"mySpokenLanguageEnabled.value\"\n                                    [myDefaultOutputLanguage]=\"myDefaultOutputLanguage.value\"\n                                    [myDefaultListenLanguage]=\"myDefaultListenLanguage.value\"\n                                    [listenPreferences]=\"listenPreferences.value\"\n                                    [availableTranslationChannels]=\"availableTranslationChannels.value\"\n                                    [updateMySpokenLanguage]=\"updateMySpokenLanguage\"\n                                    [updateMySpokenLanguageEnabled]=\"updateMySpokenLanguageEnabled\"\n                                    [updateMyDefaultOutputLanguage]=\"updateMyDefaultOutputLanguage\"\n                                    [updateMyDefaultListenLanguage]=\"updateMyDefaultListenLanguage\"\n                                    [updateListenPreferences]=\"updateListenPreferences\"\n                                    [socket]=\"socket.value\"\n                                    [roomName]=\"roomName.value\"\n                                    [showAlert]=\"showAlert\"\n                                    [showSubtitlesOnCards]=\"liveSubtitleService.getShowSubtitlesOnCards()\"\n                                    [updateShowSubtitlesOnCards]=\"updateShowSubtitlesOnCards\"\n                                    [canUsePersonalTranslation]=\"canUsePersonalTranslation\"\n                                    [personalTranslationUsername]=\"personalTranslationUsername\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-translation-settings-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'requests'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'requestsModal';\n                                    default: RequestsModalComponentRef;\n                                    props: sidebarRequestsModalOverrideProps\n                                  \"\n                                >\n                                  <app-requests-modal\n                                    [backgroundColor]=\"'transparent'\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [isRequestsModalVisible]=\"true\"\n                                    [onRequestClose]=\"onRequestClose\"\n                                    [requestCounter]=\"requestCounter.value\"\n                                    [onRequestFilterChange]=\"onRequestFilterChange\"\n                                    [updateRequestList]=\"updateRequestList\"\n                                    [requestList]=\"filteredRequestList.value\"\n                                    [roomName]=\"roomName.value\"\n                                    [socket]=\"socket.value\"\n                                    [parameters]=\"mediaSFUParameters\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-requests-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'waiting'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'waitingRoomModal';\n                                    default: WaitingRoomModalComponentRef;\n                                    props: sidebarWaitingRoomModalOverrideProps\n                                  \"\n                                >\n                                  <app-waiting-room-modal\n                                    [backgroundColor]=\"'transparent'\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [isWaitingModalVisible]=\"true\"\n                                    [onWaitingRoomClose]=\"onWaitingRoomClose\"\n                                    [waitingRoomCounter]=\"waitingRoomCounter.value\"\n                                    [onWaitingRoomFilterChange]=\"onWaitingRoomFilterChange\"\n                                    [waitingRoomList]=\"filteredWaitingRoomList.value\"\n                                    [updateWaitingList]=\"updateWaitingRoomList\"\n                                    [roomName]=\"roomName.value\"\n                                    [socket]=\"socket.value\"\n                                    [parameters]=\"waitingRoomModalOverrideProps().parameters\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-waiting-room-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'coHost'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'coHostModal';\n                                    default: CoHostModalComponentRef;\n                                    props: sidebarCoHostModalOverrideProps\n                                  \"\n                                >\n                                  <app-co-host-modal\n                                    [backgroundColor]=\"'transparent'\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [isCoHostModalVisible]=\"true\"\n                                    [onCoHostClose]=\"onCoHostClose\"\n                                    [coHostResponsibility]=\"coHostResponsibility.value\"\n                                    [participants]=\"participants.value\"\n                                    [currentCohost]=\"coHost.value\"\n                                    [roomName]=\"roomName.value\"\n                                    [showAlert]=\"showAlert\"\n                                    [updateCoHostResponsibility]=\"updateCoHostResponsibility\"\n                                    [updateCoHost]=\"updateCoHost\"\n                                    [updateIsCoHostModalVisible]=\"updateIsCoHostModalVisible\"\n                                    [socket]=\"socket.value\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-co-host-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'mediaSettings'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'mediaSettingsModal';\n                                    default: MediaSettingsModalComponentRef;\n                                    props: sidebarMediaSettingsModalOverrideProps\n                                  \"\n                                >\n                                  <app-media-settings-modal\n                                    [backgroundColor]=\"'transparent'\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [isMediaSettingsModalVisible]=\"true\"\n                                    [onMediaSettingsClose]=\"onMediaSettingsClose\"\n                                    [parameters]=\"mediaSFUParameters\"\n                                    [onOpenBackgroundSidebar]=\"openSidebarBackground\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-media-settings-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'background'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'backgroundModal';\n                                    default: BackgroundModalComponentRef;\n                                    props: sidebarBackgroundModalOverrideProps\n                                  \"\n                                >\n                                  <app-background-modal\n                                    [isVisible]=\"true\"\n                                    [backgroundColor]=\"'transparent'\"\n                                    [isDarkMode]=\"modernMenuDarkMode.value\"\n                                    [onClose]=\"onBackgroundClose\"\n                                    [parameters]=\"mediaSFUParameters\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-background-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'displaySettings'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'displaySettingsModal';\n                                    default: DisplaySettingsModalComponentRef;\n                                    props: sidebarDisplaySettingsModalOverrideProps\n                                  \"\n                                >\n                                  <app-display-settings-modal\n                                    [backgroundColor]=\"'transparent'\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [isDisplaySettingsModalVisible]=\"true\"\n                                    [onDisplaySettingsClose]=\"onDisplaySettingsClose\"\n                                    [parameters]=\"mediaSFUParameters\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-display-settings-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'poll'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'pollModal';\n                                    default: PollModalComponentRef;\n                                    props: sidebarPollModalOverrideProps\n                                  \"\n                                >\n                                  <app-poll-modal\n                                    [backgroundColor]=\"'transparent'\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [isPollModalVisible]=\"true\"\n                                    [onClose]=\"onPollClose\"\n                                    [member]=\"member.value\"\n                                    [islevel]=\"islevel.value\"\n                                    [polls]=\"polls.value\"\n                                    [poll]=\"poll.value\"\n                                    [socket]=\"socket.value\"\n                                    [roomName]=\"roomName.value\"\n                                    [showAlert]=\"showAlert\"\n                                    [updateIsPollModalVisible]=\"updateIsPollModalVisible\"\n                                    [handleCreatePoll]=\"handleCreatePoll.handleCreatePoll\"\n                                    [handleEndPoll]=\"handleEndPoll.handleEndPoll\"\n                                    [handleVotePoll]=\"handleVotePoll.handleVotePoll\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-poll-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'breakoutRooms'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'breakoutRoomsModal';\n                                    default: BreakoutRoomsModalComponentRef;\n                                    props: sidebarBreakoutRoomsModalOverrideProps\n                                  \"\n                                >\n                                  <app-breakout-rooms-modal\n                                    [isVisible]=\"true\"\n                                    [backgroundColor]=\"'transparent'\"\n                                    [isDarkMode]=\"modernMenuDarkMode.value\"\n                                    [onBreakoutRoomsClose]=\"onBreakoutRoomsClose\"\n                                    [parameters]=\"mediaSFUParameters\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-breakout-rooms-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchCase=\"'configureWhiteboard'\">\n                                <ng-container\n                                  *appWithOverride=\"\n                                    'configureWhiteboardModal';\n                                    default: ConfigureWhiteboardModalComponentRef;\n                                    props: sidebarConfigureWhiteboardModalOverrideProps\n                                  \"\n                                >\n                                  <app-configure-whiteboard-modal\n                                    [isVisible]=\"true\"\n                                    [backgroundColor]=\"'transparent'\"\n                                    [isDarkMode]=\"modernMenuDarkMode.value\"\n                                    [onConfigureWhiteboardClose]=\"onConfigureWhiteboardClose\"\n                                    [parameters]=\"mediaSFUParameters\"\n                                    [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n                                    [renderMode]=\"'inline'\"\n                                    [showHeader]=\"false\"\n                                  ></app-configure-whiteboard-modal>\n                                </ng-container>\n                              </ng-container>\n\n                              <ng-container *ngSwitchDefault>\n                                <div\n                                  [style.padding]=\"'16px 18px'\"\n                                  [style.border-radius]=\"'20px'\"\n                                  [style.background]=\"'color-mix(in srgb, var(--ms-modern-panel-surface) 84%, transparent)'\"\n                                  [style.border]=\"'1px solid var(--ms-modern-border-subtle)'\"\n                                  [style.color]=\"'var(--ms-modern-text-primary)'\"\n                                  [style.line-height]=\"'1.65'\"\n                                >\n                                  {{ sidebarPlaceholderCopy() }}\n                                </div>\n                              </ng-container>\n                        </ng-container>\n                  </app-modern-sidebar-panel>\n                </app-main-aspect-component>\n              </ng-container>\n\n              <ng-container\n                *appWithOverride=\"\n                  'subAspect';\n                  default: SubAspectComponentRef;\n                  props: subAspectOverrideProps\n                \"\n              >\n                <app-sub-aspect-component\n                  [backgroundColor]=\"roomSurfaceColor()\"\n                  [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\n                  [containerWidthFraction]=\"subAspectWidthFraction()\"\n                  [defaultFractionSub]=\"controlHeight.value\"\n                >\n                  <ng-container\n                    *appWithOverride=\"\n                      'controlButtons';\n                      default: ControlButtonsComponentRef;\n                      props: controlButtonsOverrideProps\n                    \"\n                  >\n                    <app-control-buttons-component\n                      [buttons]=\"controlButtons\"\n                      [isDarkMode]=\"modernMenuDarkMode.value\"\n                      [buttonColor]=\"controlStripTextColor()\"\n                      [buttonBackgroundColor]=\"{\n                        default: 'transparent',\n                        pressed: 'transparent'\n                      }\"\n                      [alignment]=\"'space-between'\"\n                      [vertical]=\"false\"\n                      [buttonsContainerStyle]=\"{\n                        width: '100%',\n                        marginTop: '0',\n                        marginBottom: '0',\n                        backgroundColor: 'transparent'\n                      }\"\n                    ></app-control-buttons-component>\n                  </ng-container>\n                </app-sub-aspect-component>\n              </ng-container>\n            </app-main-container-component>\n          </ng-container>\n        </ng-container>\n      </ng-template>\n\n      <ng-container *ngIf=\"returnUI && !customMainComponent\">\n      <app-modern-menu-modal\n        *appWithOverride=\"\n          'menuModal';\n          default: MenuModalComponentRef;\n          props: menuModalOverrideProps\n        \"\n        [isVisible]=\"isMenuModalVisible.value\"\n        [isDarkMode]=\"modernMenuDarkMode.value\"\n        [onToggleTheme]=\"updateModernThemeDarkMode\"\n        [onClose]=\"onCloseMenuModal\"\n        [onBack]=\"sidebarNavigateBack\"\n        [customButtons]=\"customMenuButtons\"\n        [roomName]=\"roomName.value\"\n        [adminPasscode]=\"adminPasscode.value\"\n        [islevel]=\"islevel.value\"\n        [eventType]=\"eventType.value\"\n        [localLink]=\"localLink\"\n        [title]=\"sidebarTitle()\"\n        [showHeader]=\"mobileMenuUsesSharedHeader()\"\n        [showBackButton]=\"mobileMenuShowsBackButton()\"\n        [backLabel]=\"sidebarBackLabel()\"\n        [showDefaultSections]=\"mobileMenuShellContent() === 'menu'\"\n      >\n        <ng-container [ngSwitch]=\"mobileMenuShellContent()\">\n          <ng-container *ngSwitchCase=\"'eventSettings'\">\n            <app-event-settings-modal\n              [isEventSettingsModalVisible]=\"true\"\n              [isDarkMode]=\"modernMenuDarkMode.value\"\n              [onEventSettingsClose]=\"onEventSettingsClose\"\n              [audioSetting]=\"audioSetting.value\"\n              [videoSetting]=\"videoSetting.value\"\n              [screenshareSetting]=\"screenshareSetting.value\"\n              [chatSetting]=\"chatSetting.value\"\n              [updateAudioSetting]=\"updateAudioSetting\"\n              [updateVideoSetting]=\"updateVideoSetting\"\n              [updateScreenshareSetting]=\"updateScreenshareSetting\"\n              [updateChatSetting]=\"updateChatSetting\"\n              [updateIsSettingsModalVisible]=\"updateIsSettingsModalVisible\"\n              [roomName]=\"roomName.value\"\n              [socket]=\"socket.value\"\n              [showAlert]=\"showAlert\"\n              [backgroundColor]=\"'transparent'\"\n              [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n              [showHeader]=\"false\"\n              [renderMode]=\"'inline'\"\n            ></app-event-settings-modal>\n          </ng-container>\n\n          <ng-container *ngSwitchCase=\"'shareEvent'\">\n            <app-share-event-modal\n              [isShareEventModalVisible]=\"true\"\n              [isDarkMode]=\"modernMenuDarkMode.value\"\n              [onShareEventClose]=\"onShareEventClose\"\n              [roomName]=\"roomName.value\"\n              [islevel]=\"islevel.value\"\n              [adminPasscode]=\"adminPasscode.value\"\n              [eventType]=\"eventType.value\"\n              [localLink]=\"localLink\"\n              [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n              [showHeader]=\"false\"\n              [renderMode]=\"'inline'\"\n            ></app-share-event-modal>\n          </ng-container>\n\n          <ng-container *ngSwitchCase=\"'translation'\">\n            <app-translation-settings-modal\n              [isVisible]=\"true\"\n              [onClose]=\"onTranslationSettingsClose\"\n              [isDarkMode]=\"modernMenuDarkMode.value\"\n              [translationSupported]=\"translationSupported.value\"\n              [translationConfig]=\"translationConfig.value\"\n              [member]=\"member.value\"\n              [islevel]=\"islevel.value\"\n              [audioProducerId]=\"audioProducer.value?.id ?? null\"\n              [participants]=\"participants.value\"\n              [mySpokenLanguage]=\"mySpokenLanguage.value\"\n              [mySpokenLanguageEnabled]=\"mySpokenLanguageEnabled.value\"\n              [myDefaultOutputLanguage]=\"myDefaultOutputLanguage.value\"\n              [myDefaultListenLanguage]=\"myDefaultListenLanguage.value\"\n              [listenPreferences]=\"listenPreferences.value\"\n              [availableTranslationChannels]=\"availableTranslationChannels.value\"\n              [updateMySpokenLanguage]=\"updateMySpokenLanguage\"\n              [updateMySpokenLanguageEnabled]=\"updateMySpokenLanguageEnabled\"\n              [updateMyDefaultOutputLanguage]=\"updateMyDefaultOutputLanguage\"\n              [updateMyDefaultListenLanguage]=\"updateMyDefaultListenLanguage\"\n              [updateListenPreferences]=\"updateListenPreferences\"\n              [socket]=\"socket.value\"\n              [roomName]=\"roomName.value\"\n              [showAlert]=\"showAlert\"\n              [showSubtitlesOnCards]=\"liveSubtitleService.getShowSubtitlesOnCards()\"\n              [updateShowSubtitlesOnCards]=\"updateShowSubtitlesOnCards\"\n              [canUsePersonalTranslation]=\"canUsePersonalTranslation\"\n              [personalTranslationUsername]=\"personalTranslationUsername\"\n              [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n              [renderMode]=\"'inline'\"\n            ></app-translation-settings-modal>\n          </ng-container>\n\n          <ng-container *ngSwitchCase=\"'requests'\">\n            <app-requests-modal\n              [backgroundColor]=\"'transparent'\"\n              [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n              [isRequestsModalVisible]=\"true\"\n              [onRequestClose]=\"onRequestClose\"\n              [requestCounter]=\"requestCounter.value\"\n              [onRequestFilterChange]=\"onRequestFilterChange\"\n              [updateRequestList]=\"updateRequestList\"\n              [requestList]=\"filteredRequestList.value\"\n              [roomName]=\"roomName.value\"\n              [socket]=\"socket.value\"\n              [parameters]=\"mediaSFUParameters\"\n              [showHeader]=\"false\"\n              [renderMode]=\"'inline'\"\n            ></app-requests-modal>\n          </ng-container>\n\n          <ng-container *ngSwitchCase=\"'waiting'\">\n            <app-waiting-room-modal\n              [backgroundColor]=\"'transparent'\"\n              [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n              [isWaitingModalVisible]=\"true\"\n              [onWaitingRoomClose]=\"onWaitingRoomClose\"\n              [waitingRoomCounter]=\"waitingRoomCounter.value\"\n              [onWaitingRoomFilterChange]=\"onWaitingRoomFilterChange\"\n              [waitingRoomList]=\"filteredWaitingRoomList.value\"\n              [updateWaitingList]=\"updateWaitingRoomList\"\n              [roomName]=\"roomName.value\"\n              [socket]=\"socket.value\"\n              [parameters]=\"waitingRoomModalOverrideProps().parameters\"\n              [showHeader]=\"false\"\n              [renderMode]=\"'inline'\"\n            ></app-waiting-room-modal>\n          </ng-container>\n\n          <ng-container *ngSwitchCase=\"'coHost'\">\n            <app-co-host-modal\n              [backgroundColor]=\"'transparent'\"\n              [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n              [isCoHostModalVisible]=\"true\"\n              [onCoHostClose]=\"onCoHostClose\"\n              [coHostResponsibility]=\"coHostResponsibility.value\"\n              [participants]=\"participants.value\"\n              [currentCohost]=\"coHost.value\"\n              [roomName]=\"roomName.value\"\n              [showAlert]=\"showAlert\"\n              [updateCoHostResponsibility]=\"updateCoHostResponsibility\"\n              [updateCoHost]=\"updateCoHost\"\n              [updateIsCoHostModalVisible]=\"updateIsCoHostModalVisible\"\n              [socket]=\"socket.value\"\n              [showHeader]=\"false\"\n              [renderMode]=\"'inline'\"\n            ></app-co-host-modal>\n          </ng-container>\n\n          <ng-container *ngSwitchCase=\"'mediaSettings'\">\n            <app-media-settings-modal\n              [backgroundColor]=\"'transparent'\"\n              [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n              [isMediaSettingsModalVisible]=\"true\"\n              [onMediaSettingsClose]=\"onMediaSettingsClose\"\n              [parameters]=\"mediaSFUParameters\"\n              [onOpenBackgroundSidebar]=\"openSidebarBackground\"\n              [showHeader]=\"false\"\n              [renderMode]=\"'inline'\"\n            ></app-media-settings-modal>\n          </ng-container>\n\n          <ng-container *ngSwitchCase=\"'background'\">\n            <app-background-modal\n              [isVisible]=\"true\"\n              [backgroundColor]=\"'transparent'\"\n              [isDarkMode]=\"modernMenuDarkMode.value\"\n              [onClose]=\"onBackgroundClose\"\n              [parameters]=\"mediaSFUParameters\"\n              [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n              [renderMode]=\"'inline'\"\n            ></app-background-modal>\n          </ng-container>\n\n          <ng-container *ngSwitchCase=\"'displaySettings'\">\n            <app-display-settings-modal\n              [backgroundColor]=\"'transparent'\"\n              [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n              [isDisplaySettingsModalVisible]=\"true\"\n              [onDisplaySettingsClose]=\"onDisplaySettingsClose\"\n              [parameters]=\"mediaSFUParameters\"\n              [showHeader]=\"false\"\n              [renderMode]=\"'inline'\"\n            ></app-display-settings-modal>\n          </ng-container>\n\n          <ng-container *ngSwitchCase=\"'recording'\">\n            <app-recording-modal\n              [backgroundColor]=\"'transparent'\"\n              [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n              [isRecordingModalVisible]=\"true\"\n              [onClose]=\"onRecordingClose\"\n              [startRecording]=\"startRecording.startRecording\"\n              [confirmRecording]=\"confirmRecording.confirmRecording\"\n              [parameters]=\"mediaSFUParameters\"\n              [showHeader]=\"false\"\n              [renderMode]=\"'inline'\"\n            ></app-recording-modal>\n          </ng-container>\n\n          <ng-container *ngSwitchCase=\"'poll'\">\n            <app-poll-modal\n              [backgroundColor]=\"'transparent'\"\n              [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n              [isPollModalVisible]=\"true\"\n              [onClose]=\"onPollClose\"\n              [member]=\"member.value\"\n              [islevel]=\"islevel.value\"\n              [polls]=\"polls.value\"\n              [poll]=\"poll.value\"\n              [socket]=\"socket.value\"\n              [roomName]=\"roomName.value\"\n              [showAlert]=\"showAlert\"\n              [updateIsPollModalVisible]=\"updateIsPollModalVisible\"\n              [handleCreatePoll]=\"handleCreatePoll.handleCreatePoll\"\n              [handleEndPoll]=\"handleEndPoll.handleEndPoll\"\n              [handleVotePoll]=\"handleVotePoll.handleVotePoll\"\n              [showHeader]=\"false\"\n              [renderMode]=\"'inline'\"\n            ></app-poll-modal>\n          </ng-container>\n\n          <ng-container *ngSwitchCase=\"'breakoutRooms'\">\n            <app-breakout-rooms-modal\n              [isVisible]=\"true\"\n              [backgroundColor]=\"'transparent'\"\n              [isDarkMode]=\"modernMenuDarkMode.value\"\n              [onBreakoutRoomsClose]=\"onBreakoutRoomsClose\"\n              [parameters]=\"mediaSFUParameters\"\n              [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n              [renderMode]=\"'inline'\"\n            ></app-breakout-rooms-modal>\n          </ng-container>\n\n          <ng-container *ngSwitchCase=\"'configureWhiteboard'\">\n            <app-configure-whiteboard-modal\n              [isVisible]=\"true\"\n              [backgroundColor]=\"'transparent'\"\n              [isDarkMode]=\"modernMenuDarkMode.value\"\n              [onConfigureWhiteboardClose]=\"onConfigureWhiteboardClose\"\n              [parameters]=\"mediaSFUParameters\"\n              [contentStyle]=\"sidebarEmbeddedModalContentStyle\"\n              [renderMode]=\"'inline'\"\n            ></app-configure-whiteboard-modal>\n          </ng-container>\n        </ng-container>\n      </app-modern-menu-modal>\n\n      <app-event-settings-modal\n        *appWithOverride=\"\n          'eventSettingsModal';\n          default: EventSettingsModalComponentRef;\n          props: eventSettingsModalOverrideProps\n        \"\n        [isEventSettingsModalVisible]=\"isSettingsModalVisible.value\"\n        [isDarkMode]=\"modernMenuDarkMode.value\"\n        [onEventSettingsClose]=\"onEventSettingsClose\"\n        [audioSetting]=\"audioSetting.value\"\n        [videoSetting]=\"videoSetting.value\"\n        [screenshareSetting]=\"screenshareSetting.value\"\n        [chatSetting]=\"chatSetting.value\"\n        [updateAudioSetting]=\"updateAudioSetting\"\n        [updateVideoSetting]=\"updateVideoSetting\"\n        [updateScreenshareSetting]=\"updateScreenshareSetting\"\n        [updateChatSetting]=\"updateChatSetting\"\n        [updateIsSettingsModalVisible]=\"updateIsSettingsModalVisible\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [showAlert]=\"showAlert\"\n      ></app-event-settings-modal>\n\n      <app-translation-settings-modal\n        *appWithOverride=\"\n          'translationSettingsModal';\n          default: TranslationSettingsModalComponentRef;\n          props: translationSettingsModalOverrideProps\n        \"\n        [isVisible]=\"isTranslationSettingsModalVisible.value\"\n        [onClose]=\"onTranslationSettingsClose\"\n        [isDarkMode]=\"modernMenuDarkMode.value\"\n        [translationSupported]=\"translationSupported.value\"\n        [translationConfig]=\"translationConfig.value\"\n        [member]=\"member.value\"\n        [islevel]=\"islevel.value\"\n        [audioProducerId]=\"audioProducer.value?.id ?? null\"\n        [participants]=\"participants.value\"\n        [mySpokenLanguage]=\"mySpokenLanguage.value\"\n        [mySpokenLanguageEnabled]=\"mySpokenLanguageEnabled.value\"\n        [myDefaultOutputLanguage]=\"myDefaultOutputLanguage.value\"\n        [myDefaultListenLanguage]=\"myDefaultListenLanguage.value\"\n        [listenPreferences]=\"listenPreferences.value\"\n        [availableTranslationChannels]=\"availableTranslationChannels.value\"\n        [updateMySpokenLanguage]=\"updateMySpokenLanguage\"\n        [updateMySpokenLanguageEnabled]=\"updateMySpokenLanguageEnabled\"\n        [updateMyDefaultOutputLanguage]=\"updateMyDefaultOutputLanguage\"\n        [updateMyDefaultListenLanguage]=\"updateMyDefaultListenLanguage\"\n        [updateListenPreferences]=\"updateListenPreferences\"\n        [socket]=\"socket.value\"\n        [roomName]=\"roomName.value\"\n        [showAlert]=\"showAlert\"\n        [showSubtitlesOnCards]=\"liveSubtitleService.getShowSubtitlesOnCards()\"\n        [updateShowSubtitlesOnCards]=\"updateShowSubtitlesOnCards\"\n        [canUsePersonalTranslation]=\"canUsePersonalTranslation\"\n        [personalTranslationUsername]=\"personalTranslationUsername\"\n      ></app-translation-settings-modal>\n\n      <app-requests-modal\n        *appWithOverride=\"\n          'requestsModal';\n          default: RequestsModalComponentRef;\n          props: requestsModalOverrideProps\n        \"\n        [backgroundColor]=\"roomModalSurfaceColor()\"\n        [isRequestsModalVisible]=\"isRequestsModalVisible.value\"\n        [onRequestClose]=\"onRequestClose\"\n        [requestCounter]=\"requestCounter.value\"\n        [onRequestFilterChange]=\"onRequestFilterChange\"\n        [updateRequestList]=\"updateRequestList\"\n        [requestList]=\"filteredRequestList.value\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-requests-modal>\n\n      <app-waiting-room-modal\n        *appWithOverride=\"\n          'waitingRoomModal';\n          default: WaitingRoomModalComponentRef;\n          props: waitingRoomModalOverrideProps\n        \"\n        [backgroundColor]=\"roomModalSurfaceColor()\"\n        [isWaitingModalVisible]=\"isWaitingModalVisible.value\"\n        [onWaitingRoomClose]=\"onWaitingRoomClose\"\n        [waitingRoomCounter]=\"waitingRoomCounter.value\"\n        [onWaitingRoomFilterChange]=\"onWaitingRoomFilterChange\"\n        [waitingRoomList]=\"filteredWaitingRoomList.value\"\n        [updateWaitingList]=\"updateWaitingRoomList\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [parameters]=\"{\n                      filteredWaitingRoomList: waitingRoomList.value,\n                      getUpdatedAllParams: getUpdatedAllParams,\n                    }\"\n      ></app-waiting-room-modal>\n\n      <app-co-host-modal\n        *appWithOverride=\"\n          'coHostModal';\n          default: CoHostModalComponentRef;\n          props: coHostModalOverrideProps\n        \"\n        [backgroundColor]=\"roomModalSurfaceColor()\"\n        [isCoHostModalVisible]=\"isCoHostModalVisible.value\"\n        [onCoHostClose]=\"onCoHostClose\"\n        [coHostResponsibility]=\"coHostResponsibility.value\"\n        [participants]=\"participants.value\"\n        [currentCohost]=\"coHost.value\"\n        [roomName]=\"roomName.value\"\n        [showAlert]=\"showAlert\"\n        [updateCoHostResponsibility]=\"updateCoHostResponsibility\"\n        [updateCoHost]=\"updateCoHost\"\n        [updateIsCoHostModalVisible]=\"updateIsCoHostModalVisible\"\n        [socket]=\"socket.value\"\n      ></app-co-host-modal>\n\n      <app-media-settings-modal\n        *appWithOverride=\"\n          'mediaSettingsModal';\n          default: MediaSettingsModalComponentRef;\n          props: mediaSettingsModalOverrideProps\n        \"\n        [backgroundColor]=\"roomAccentSurfaceColor()\"\n        [isMediaSettingsModalVisible]=\"isMediaSettingsModalVisible.value\"\n        [onMediaSettingsClose]=\"onMediaSettingsClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-media-settings-modal>\n\n      <app-participants-modal\n        *appWithOverride=\"\n          'participantsModal';\n          default: ParticipantsModalComponentRef;\n          props: participantsModalOverrideProps\n        \"\n        [backgroundColor]=\"roomModalSurfaceColor()\"\n        [isParticipantsModalVisible]=\"isParticipantsModalVisible.value\"\n        [onParticipantsClose]=\"onParticipantsClose\"\n        [participantsCounter]=\"participantsCounter.value\"\n        [onParticipantsFilterChange]=\"onParticipantsFilterChange\"\n        [parameters]=\"{\n              updateParticipants: updateParticipants,\n              filteredParticipants: filteredParticipants.value,\n              updateIsParticipantsModalVisible: updateIsParticipantsModalVisible,\n              updateDirectMessageDetails: updateDirectMessageDetails,\n              updateStartDirectMessage: updateStartDirectMessage,\n              updateIsMessagesModalVisible: updateIsMessagesModalVisible,\n              showAlert: showAlert,\n              participants: filteredParticipants.value,\n              roomName: roomName.value,\n              islevel: islevel.value,\n              member: member.value,\n              coHostResponsibility: coHostResponsibility.value,\n              coHost: coHost.value,\n              eventType: eventType.value,\n              startDirectMessage: startDirectMessage.value,\n              directMessageDetails: directMessageDetails.value,\n              socket: socket.value,\n              getUpdatedAllParams: getUpdatedAllParams,\n            }\"\n      ></app-participants-modal>\n\n      <app-display-settings-modal\n        *appWithOverride=\"\n          'displaySettingsModal';\n          default: DisplaySettingsModalComponentRef;\n          props: displaySettingsModalOverrideProps\n        \"\n        [backgroundColor]=\"roomModalSurfaceColor()\"\n        [isDisplaySettingsModalVisible]=\"isDisplaySettingsModalVisible.value\"\n        [onDisplaySettingsClose]=\"onDisplaySettingsClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-display-settings-modal>\n\n      <app-recording-modal\n        *appWithOverride=\"\n          'recordingModal';\n          default: RecordingModalComponentRef;\n          props: recordingModalOverrideProps\n        \"\n        [backgroundColor]=\"roomModalSurfaceColor()\"\n        [isRecordingModalVisible]=\"isRecordingModalVisible.value\"\n        [onClose]=\"onRecordingClose\"\n        [startRecording]=\"startRecording.startRecording\"\n        [confirmRecording]=\"confirmRecording.confirmRecording\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-recording-modal>\n\n      <app-messages-modal\n        *appWithOverride=\"\n          'messagesModal';\n          default: MessagesModalComponentRef;\n          props: messagesModalOverrideProps\n        \"\n        [backgroundColor]=\"modernMenuDarkMode.value ? 'rgba(15, 27, 49, 0.96)' : eventType.value === 'webinar' || eventType.value === 'conference' ? '#f5f5f5' : 'rgba(255, 255, 255, 0.25)'\"\n        [isMessagesModalVisible]=\"isMessagesModalVisible.value\"\n        [onMessagesClose]=\"onMessagesClose\"\n        [messages]=\"messages.value\"\n        [eventType]=\"eventType.value\"\n        [member]=\"member.value\"\n        [islevel]=\"islevel.value\"\n        [coHostResponsibility]=\"coHostResponsibility.value\"\n        [coHost]=\"coHost.value\"\n        [startDirectMessage]=\"startDirectMessage.value\"\n        [directMessageDetails]=\"directMessageDetails.value\"\n        [updateStartDirectMessage]=\"updateStartDirectMessage\"\n        [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\n        [showAlert]=\"showAlert\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [chatSetting]=\"chatSetting.value\"\n      ></app-messages-modal>\n\n      <app-confirm-exit-modal\n        *appWithOverride=\"\n          'confirmExitModal';\n          default: ConfirmExitModalComponentRef;\n          props: confirmExitModalOverrideProps\n        \"\n        [backgroundColor]=\"roomAccentSurfaceColor()\"\n        [isConfirmExitModalVisible]=\"isConfirmExitModalVisible.value\"\n        [onConfirmExitClose]=\"onConfirmExitClose\"\n        [position]=\"'center'\"\n        [member]=\"member.value\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [islevel]=\"islevel.value\"\n      ></app-confirm-exit-modal>\n\n      <app-confirm-here-modal\n        *appWithOverride=\"\n          'confirmHereModal';\n          default: ConfirmHereModalComponentRef;\n          props: confirmHereModalOverrideProps\n        \"\n        [backgroundColor]=\"roomModalSurfaceColor()\"\n        [isDarkMode]=\"modernMenuDarkMode.value\"\n        [isConfirmHereModalVisible]=\"isConfirmHereModalVisible.value\"\n        [onConfirmHereClose]=\"onConfirmHereClose\"\n        [onSuppressConfirmHere]=\"onSuppressConfirmHere\"\n        [member]=\"member.value\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n      ></app-confirm-here-modal>\n\n      <app-share-event-modal\n        *appWithOverride=\"\n          'shareEventModal';\n          default: ShareEventModalComponentRef;\n          props: shareEventModalOverrideProps\n        \"\n        [isShareEventModalVisible]=\"isShareEventModalVisible.value\"\n        [isDarkMode]=\"modernMenuDarkMode.value\"\n        [onShareEventClose]=\"onShareEventClose\"\n        [roomName]=\"roomName.value\"\n        [islevel]=\"islevel.value\"\n        [adminPasscode]=\"adminPasscode.value\"\n        [eventType]=\"eventType.value\"\n        [localLink]=\"localLink\"\n      ></app-share-event-modal>\n\n      <app-poll-modal\n        *appWithOverride=\"\n          'pollModal';\n          default: PollModalComponentRef;\n          props: pollModalOverrideProps\n        \"\n        [isPollModalVisible]=\"isPollModalVisible.value\"\n        [onClose]=\"onPollClose\"\n        [member]=\"member.value\"\n        [islevel]=\"islevel.value\"\n        [polls]=\"polls.value\"\n        [poll]=\"poll.value\"\n        [socket]=\"socket.value\"\n        [roomName]=\"roomName.value\"\n        [showAlert]=\"showAlert\"\n        [updateIsPollModalVisible]=\"updateIsPollModalVisible\"\n        [handleCreatePoll]=\"handleCreatePoll.handleCreatePoll\"\n        [handleEndPoll]=\"handleEndPoll.handleEndPoll\"\n        [handleVotePoll]=\"handleVotePoll.handleVotePoll\"\n      ></app-poll-modal>\n\n      <app-background-modal\n        *appWithOverride=\"\n          'backgroundModal';\n          default: BackgroundModalComponentRef;\n          props: backgroundModalOverrideProps\n        \"\n        [isVisible]=\"isBackgroundModalVisible.value\"\n        [isDarkMode]=\"modernMenuDarkMode.value\"\n        [onClose]=\"onBackgroundClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-background-modal>\n\n      <app-breakout-rooms-modal\n        *appWithOverride=\"\n          'breakoutRoomsModal';\n          default: BreakoutRoomsModalComponentRef;\n          props: breakoutRoomsModalOverrideProps\n        \"\n        [isVisible]=\"isBreakoutRoomsModalVisible.value\"\n        [isDarkMode]=\"modernMenuDarkMode.value\"\n        [onBreakoutRoomsClose]=\"onBreakoutRoomsClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-breakout-rooms-modal>\n\n      <app-configure-whiteboard-modal\n        *appWithOverride=\"\n          'configureWhiteboardModal';\n          default: ConfigureWhiteboardModalComponentRef;\n          props: configureWhiteboardModalOverrideProps\n        \"\n        [isVisible]=\"isConfigureWhiteboardModalVisible.value\"\n        [isDarkMode]=\"modernMenuDarkMode.value\"\n        [onConfigureWhiteboardClose]=\"onConfigureWhiteboardClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-configure-whiteboard-modal>\n\n      <app-screenboard-modal\n        *appWithOverride=\"\n          'screenboardModal';\n          default: ScreenboardModalComponentRef;\n          props: screenboardModalOverrideProps\n        \"\n        [backgroundColor]=\"roomModalSurfaceColor()\"\n        [isVisible]=\"isScreenboardModalVisible.value\"\n        [onClose]=\"onScreenboardClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-screenboard-modal>\n\n      <ng-container\n        *appWithOverride=\"'alert'; default: AlertComponentRef; props: alertOverrideProps\"\n      >\n        <app-modern-alert-component\n          [visible]=\"alertVisible.value\"\n          [message]=\"alertMessage.value\"\n          [type]=\"alertType.value\"\n          [position]=\"alertPosition.value\"\n          [duration]=\"alertDuration.value\"\n          [onHide]=\"onAlertHide\"\n          [isDarkMode]=\"modernMenuDarkMode.value\"\n        ></app-modern-alert-component>\n      </ng-container>\n\n      <ng-container\n        *appWithOverride=\"'loadingModal'; default: LoadingModalComponentRef; props: loadingModalOverrideProps\"\n      >\n        <app-modern-loading-modal\n          [isVisible]=\"isLoadingModalVisible.value\"\n          [isDarkMode]=\"modernMenuDarkMode.value\"\n        ></app-modern-loading-modal>\n      </ng-container>\n    </ng-container>\n    </div>\n\n    <!-- Prejoin page for custom component (when not validated) -->\n    <ng-container *ngIf=\"customMainComponent && !validated.value\">\n      <ng-container\n        *ngComponentOutlet=\"\n          PrejoinPageComponent.component;\n          injector: PrejoinPageComponent.injector\n        \"\n      >\n      </ng-container>\n    </ng-container>\n  `,\n  styles: [\n    `\n      .MediaSFU {\n        height: 100vh;\n        width: 100vw;\n        max-width: 100vw;\n        max-height: 100vh;\n        overflow: hidden;\n      }\n    `,\n  ],\n  providers: [CookieService]\n})\nexport class MediasfuGeneric implements OnInit, OnDestroy {\n  @Input()\n  PrejoinPage: any = WelcomePage;\n  @Input() localLink = '';\n  @Input() connectMediaSFU = true;\n  @Input() credentials: { apiUserName: string; apiKey: string } = { apiUserName: '', apiKey: '' };\n  @Input() useLocalUIMode = false;\n  @Input() seedData?: SeedData;\n  @Input() useSeed = false;\n  @Input() imgSrc = 'https://mediasfu.com/images/logo192.png';\n  @Input() sourceParameters: { [key: string]: any } = {};\n  @Input() updateSourceParameters? = (data: { [key: string]: any }) => { };\n  @Input() returnUI? = true;\n  @Input() noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\n  @Input() joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n  @Input() createMediaSFURoom?: CreateRoomOnMediaSFUType;\n  @Input() canUsePersonalTranslation = false;\n  @Input() personalTranslationUsername?: string;\n\n  // Custom component inputs\n  @Input() customVideoCard?: any;\n  @Input() customAudioCard?: any;\n  @Input() customMiniCard?: any;\n  @Input() customMainComponent?: any;\n\n  // UI override inputs\n  @Input() containerStyle?: Record<string, any>;\n  @Input() uiOverrides?: MediasfuUICustomOverrides;\n\n  title = 'MediaSFU-Generic';\n\n  protected readonly MainContainerComponentRef = MainContainerComponent;\n  protected readonly MainAspectComponentRef = MainAspectComponent;\n  protected readonly MainScreenComponentRef = MainScreenComponent;\n  protected readonly MainGridComponentRef = MainGridComponent;\n  protected readonly OtherGridComponentRef = OtherGridComponent;\n  protected readonly FlexibleVideoComponentRef = FlexibleVideo;\n  protected readonly WhiteboardComponentRef = Whiteboard;\n  protected readonly PaginationComponentRef = ModernPaginationComponent;\n  protected readonly AudioGridComponentRef = AudioGrid;\n  protected readonly FlexibleGridComponentRef = FlexibleGrid;\n  protected readonly SubAspectComponentRef = SubAspectComponent;\n  protected readonly ControlButtonsComponentRef = ControlButtonsComponent;\n  protected readonly ControlButtonsTouchComponentRef = ControlButtonsComponentTouch;\n  protected readonly ControlButtonsAltComponentRef = ControlButtonsAltComponent;\n  protected readonly AlertComponentRef = ModernAlertComponent;\n  protected readonly MenuModalComponentRef = ModernMenuModalComponent;\n  protected readonly SidebarMenuModalComponentRef = ModernMenuModalComponent;\n  protected readonly EventSettingsModalComponentRef = ModernEventSettingsModalComponent;\n  protected readonly TranslationSettingsModalComponentRef = TranslationSettingsModal;\n  protected readonly RequestsModalComponentRef = ModernRequestsModalComponent;\n  protected readonly WaitingRoomModalComponentRef = ModernWaitingRoomModalComponent;\n  protected readonly CoHostModalComponentRef = ModernCoHostModalComponent;\n  protected readonly MediaSettingsModalComponentRef = ModernMediaSettingsModalComponent;\n  protected readonly ParticipantsModalComponentRef = ModernParticipantsModalComponent;\n  protected readonly MessagesModalComponentRef = ModernMessagesModalComponent;\n  protected readonly DisplaySettingsModalComponentRef = ModernDisplaySettingsModalComponent;\n  protected readonly ConfirmExitModalComponentRef = ModernConfirmExitModalComponent;\n  protected readonly ConfirmHereModalComponentRef = ModernConfirmHereModalComponent;\n  protected readonly ShareEventModalComponentRef = ModernShareEventModalComponent;\n  protected readonly RecordingModalComponentRef = ModernRecordingModalComponent;\n  protected readonly PollModalComponentRef = ModernPollModalComponent;\n  protected readonly BackgroundModalComponentRef = BackgroundModal;\n  protected readonly BreakoutRoomsModalComponentRef = BreakoutRoomsModal;\n  protected readonly ConfigureWhiteboardModalComponentRef = ConfigureWhiteboardModal;\n  protected readonly ScreenboardModalComponentRef = ScreenboardModal;\n  protected readonly ScreenboardComponentRef = Screenboard;\n  protected readonly LoadingModalComponentRef = ModernLoadingModalComponent;\n\n  mainContainerOverrideProps = () => ({\n    containerStyle: this.containerStyle,\n    controlHeight: this.controlHeight.value,\n    eventType: this.eventType.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  roomSurfaceColor = (): string =>\n    this.modernMenuDarkMode.value\n      ? 'rgba(9, 18, 32, 0.98)'\n      : 'rgba(217, 227, 234, 0.99)';\n\n  roomModalSurfaceColor = (): string =>\n    this.modernMenuDarkMode.value\n      ? 'rgba(15, 27, 49, 0.96)'\n      : 'rgba(217, 227, 234, 0.99)';\n\n  roomAccentSurfaceColor = (): string =>\n    this.modernMenuDarkMode.value\n      ? 'rgba(14, 33, 45, 0.96)'\n      : 'rgba(181, 233, 229, 0.97)';\n\n  controlStripTextColor = (): string =>\n    this.modernMenuDarkMode.value ? '#f8fafc' : '#10233f';\n\n  mainAspectContainerStyle = (): Partial<CSSStyleDeclaration> => ({\n    display: 'flex',\n    flexDirection: 'row',\n    flex: '1 1 auto',\n    minWidth: '0',\n    width: 'auto',\n    position: 'relative',\n    boxSizing: 'border-box',\n  });\n\n  mainScreenContainerStyle = (): Partial<CSSStyleDeclaration> => ({\n    flex: '1 1 auto',\n    minWidth: '0',\n  });\n\n  mainAspectOverrideProps = () => ({\n    backgroundColor: this.roomSurfaceColor(),\n    defaultFraction: 1 - this.controlHeight.value,\n    showControls:\n      this.eventType.value === 'webinar' ||\n      this.eventType.value === 'conference',\n    updateIsWideScreen: this.updateIsWideScreen,\n    updateIsMediumScreen: this.updateIsMediumScreen,\n    updateIsSmallScreen: this.updateIsSmallScreen,\n    containerStyle: this.mainAspectContainerStyle(),\n    parameters: this.mediaSFUParameters,\n  });\n\n  mainScreenOverrideProps = () => ({\n    doStack: true,\n    mainSize: this.mainHeightWidth.value,\n    defaultFraction: 1 - this.controlHeight.value,\n    showControls:\n      this.eventType.value === 'webinar' ||\n      this.eventType.value === 'conference',\n    containerWidthFraction: this.mainScreenWidthFraction(),\n    containerStyle: this.mainScreenContainerStyle(),\n    updateComponentSizes: this.updateComponentSizes,\n    parameters: this.mediaSFUParameters,\n  });\n\n  mainGridOverrideProps = () => ({\n    height: this.componentSizes.value.mainHeight,\n    width: this.componentSizes.value.mainWidth,\n    backgroundColor: this.roomSurfaceColor(),\n    mainSize: this.mainHeightWidth.value,\n    showAspect: this.mainHeightWidth.value > 0,\n    timeBackgroundColor: this.recordState.value,\n    meetingProgressTime: this.meetingProgressTime.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  flexibleVideoOverrideProps = () => ({\n    customWidth: this.componentSizes.value.mainWidth,\n    customHeight: this.componentSizes.value.mainHeight,\n    rows: 1,\n    columns: 1,\n    componentsToRender: this.mainGridStream.value,\n    showAspect:\n      this.mainGridStream.value.length > 0 &&\n      !(this.whiteboardStarted.value && !this.whiteboardEnded.value),\n    localStreamScreen: this.localStreamScreen.value ?? undefined,\n    annotateScreenStream: this.annotateScreenStream.value,\n    Screenboard: this.shared.value ? this.ScreenboardWidget : undefined,\n    parameters: this.mediaSFUParameters,\n    customVideoCard: this.customVideoCard,\n    customAudioCard: this.customAudioCard,\n    customMiniCard: this.customMiniCard,\n  });\n\n  whiteboardOverrideProps = () => ({\n    customWidth: this.componentSizes.value.mainWidth,\n    customHeight: this.componentSizes.value.mainHeight,\n    parameters: this.mediaSFUParameters,\n    showAspect: this.whiteboardStarted.value && !this.whiteboardEnded.value,\n  });\n\n  otherGridOverrideProps = () => ({\n    height: this.componentSizes.value.otherHeight,\n    width: this.componentSizes.value.otherWidth,\n    backgroundColor: this.roomSurfaceColor(),\n    showAspect: this.mainHeightWidth.value !== 100,\n    timeBackgroundColor: this.recordState.value,\n    showTimer: this.mainHeightWidth.value === 0,\n    meetingProgressTime: this.meetingProgressTime.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  paginationOverrideProps = () => ({\n    totalPages: this.numberPages.value,\n    currentUserPage: this.currentUserPage.value,\n    showAspect: this.doPaginate.value,\n    paginationHeight: this.paginationHeightWidth.value,\n    direction: this.paginationDirection.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  audioGridOverrideProps = () => ({\n    componentsToRender: this.audioOnlyStreams.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  flexibleGridOverrideProps = () => ({\n    customWidth: this.gridSizes.value.gridWidth ?? 0,\n    customHeight: this.gridSizes.value.gridHeight ?? 0,\n    rows: this.gridRows.value,\n    columns: this.gridCols.value,\n    componentsToRender: this.otherGridStreams.value[0] ?? [],\n    backgroundColor: this.roomSurfaceColor(),\n    parameters: this.mediaSFUParameters,\n    customVideoCard: this.customVideoCard,\n    customAudioCard: this.customAudioCard,\n    customMiniCard: this.customMiniCard,\n  });\n\n  flexibleGridAltOverrideProps = () => ({\n    customWidth: this.gridSizes.value.altGridWidth ?? 0,\n    customHeight: this.gridSizes.value.altGridHeight ?? 0,\n    rows: this.altGridRows.value,\n    columns: this.altGridCols.value,\n    componentsToRender: this.otherGridStreams.value[1] ?? [],\n    backgroundColor: this.roomSurfaceColor(),\n    parameters: this.mediaSFUParameters,\n    customVideoCard: this.customVideoCard,\n    customAudioCard: this.customAudioCard,\n    customMiniCard: this.customMiniCard,\n  });\n\n  subAspectOverrideProps = () => ({\n    backgroundColor: this.roomSurfaceColor(),\n    showControls:\n      this.eventType.value === 'webinar' ||\n      this.eventType.value === 'conference',\n    containerWidthFraction: this.subAspectWidthFraction(),\n    defaultFractionSub: this.controlHeight.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  controlButtonsOverrideProps = () => ({\n    buttons: this.controlButtons,\n    isDarkMode: this.modernMenuDarkMode.value,\n    buttonColor: this.controlStripTextColor(),\n    buttonBackgroundColor: {\n      default: 'transparent',\n      pressed: 'transparent',\n    },\n    alignment: 'space-between',\n    vertical: false,\n    buttonsContainerStyle: {\n      width: '100%',\n      marginTop: '0',\n      marginBottom: '0',\n      backgroundColor: 'transparent',\n    },\n    parameters: this.mediaSFUParameters,\n  });\n\n  controlButtonsTouchBroadcastOverrideProps = () => ({\n    buttons: this.controlBroadcastButtons,\n    position: 'right',\n    location: 'bottom',\n    direction: 'vertical',\n    showAspect: this.eventType.value === 'broadcast',\n    variant: 'broadcastControls',\n    parameters: this.mediaSFUParameters,\n  });\n\n  controlButtonsTouchRecordOverrideProps = () => ({\n    buttons: this.recordButton,\n    direction: 'horizontal',\n    showAspect:\n      this.eventType.value === 'broadcast' &&\n      !this.showRecordButtons.value &&\n      this.islevel.value === '2',\n    location: 'bottom',\n    position: 'middle',\n    variant: 'recordSingle',\n    parameters: this.mediaSFUParameters,\n  });\n\n  controlButtonsTouchRecordAltOverrideProps = () => ({\n    buttons: this.recordButtons,\n    direction: 'horizontal',\n    showAspect:\n      this.eventType.value === 'broadcast' &&\n      this.showRecordButtons.value &&\n      this.islevel.value === '2',\n    location: 'bottom',\n    position: 'middle',\n    variant: 'recordActions',\n    parameters: this.mediaSFUParameters,\n  });\n\n  controlButtonsTouchChatOverrideProps = () => ({\n    buttons: this.controlChatButtons,\n    position: 'right',\n    location: 'bottom',\n    direction: 'vertical',\n    showAspect: this.eventType.value === 'chat',\n    variant: 'chatControls',\n    parameters: this.mediaSFUParameters,\n  });\n\n  menuModalOverrideProps = () => ({\n    backgroundColor: '',\n    isVisible: this.isMenuModalVisible.value,\n    isDarkMode: this.modernMenuDarkMode.value,\n    onToggleTheme: this.updateModernThemeDarkMode,\n    onClose: this.onCloseMenuModal,\n    customButtons: this.customMenuButtons,\n    roomName: this.roomName.value,\n    adminPasscode: this.adminPasscode.value,\n    islevel: this.islevel.value,\n    eventType: this.eventType.value,\n    localLink: this.localLink,\n    parameters: this.mediaSFUParameters,\n  });\n\n  sidebarMenuModalOverrideProps = () => ({\n    ...this.menuModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isVisible: true,\n    onClose: this.closeSidebar,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  eventSettingsModalOverrideProps = () => ({\n    isEventSettingsModalVisible: this.isSettingsModalVisible.value,\n    isDarkMode: this.modernMenuDarkMode.value,\n    onEventSettingsClose: this.onEventSettingsClose,\n    audioSetting: this.audioSetting.value,\n    videoSetting: this.videoSetting.value,\n    screenshareSetting: this.screenshareSetting.value,\n    chatSetting: this.chatSetting.value,\n    updateAudioSetting: this.updateAudioSetting,\n    updateVideoSetting: this.updateVideoSetting,\n    updateScreenshareSetting: this.updateScreenshareSetting,\n    updateChatSetting: this.updateChatSetting,\n    updateIsSettingsModalVisible: this.updateIsSettingsModalVisible,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    showAlert: this.showAlert,\n    parameters: this.mediaSFUParameters,\n  });\n\n  translationSettingsModalOverrideProps = () => ({\n    isVisible: this.isTranslationSettingsModalVisible.value,\n    onClose: this.onTranslationSettingsClose,\n    isDarkMode: this.modernMenuDarkMode.value,\n    translationSupported: this.translationSupported.value,\n    translationConfig: this.translationConfig.value,\n    member: this.member.value,\n    islevel: this.islevel.value,\n    audioProducerId: this.audioProducer.value?.id ?? null,\n    participants: this.participants.value,\n    mySpokenLanguage: this.mySpokenLanguage.value,\n    mySpokenLanguageEnabled: this.mySpokenLanguageEnabled.value,\n    myDefaultOutputLanguage: this.myDefaultOutputLanguage.value,\n    myDefaultListenLanguage: this.myDefaultListenLanguage.value,\n    listenPreferences: this.listenPreferences.value,\n    availableTranslationChannels: this.availableTranslationChannels.value,\n    updateMySpokenLanguage: this.updateMySpokenLanguage,\n    updateMySpokenLanguageEnabled: this.updateMySpokenLanguageEnabled,\n    updateMyDefaultOutputLanguage: this.updateMyDefaultOutputLanguage,\n    updateMyDefaultListenLanguage: this.updateMyDefaultListenLanguage,\n    updateListenPreferences: this.updateListenPreferences,\n    socket: this.socket.value,\n    roomName: this.roomName.value,\n    showAlert: this.showAlert,\n    showSubtitlesOnCards: this.getShowSubtitlesOnCardsState(),\n    updateShowSubtitlesOnCards: this.updateShowSubtitlesOnCards,\n    canUsePersonalTranslation: this.canUsePersonalTranslation,\n    personalTranslationUsername: this.personalTranslationUsername,\n    parameters: this.mediaSFUParameters,\n  });\n\n  requestsModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isRequestsModalVisible: this.isRequestsModalVisible.value,\n    onRequestClose: this.onRequestClose,\n    requestCounter: this.requestCounter.value,\n    onRequestFilterChange: this.onRequestFilterChange,\n    updateRequestList: this.updateRequestList,\n    requestList: this.filteredRequestList.value,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  waitingRoomModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isWaitingModalVisible: this.isWaitingModalVisible.value,\n    onWaitingRoomClose: this.onWaitingRoomClose,\n    waitingRoomCounter: this.waitingRoomCounter.value,\n    onWaitingRoomFilterChange: this.onWaitingRoomFilterChange,\n    waitingRoomList: this.filteredWaitingRoomList.value,\n    updateWaitingList: this.updateWaitingRoomList,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    parameters: {\n      filteredWaitingRoomList: this.waitingRoomList.value,\n      getUpdatedAllParams: this.getUpdatedAllParams,\n    },\n  });\n\n  coHostModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isCoHostModalVisible: this.isCoHostModalVisible.value,\n    onCoHostClose: this.onCoHostClose,\n    coHostResponsibility: this.coHostResponsibility.value,\n    participants: this.participants.value,\n    currentCohost: this.coHost.value,\n    roomName: this.roomName.value,\n    showAlert: this.showAlert,\n    updateCoHostResponsibility: this.updateCoHostResponsibility,\n    updateCoHost: this.updateCoHost,\n    updateIsCoHostModalVisible: this.updateIsCoHostModalVisible,\n    socket: this.socket.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  mediaSettingsModalOverrideProps = () => ({\n    backgroundColor: this.roomAccentSurfaceColor(),\n    isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\n    onMediaSettingsClose: this.onMediaSettingsClose,\n    onOpenBackgroundSidebar: this.openSidebarBackground,\n    parameters: this.mediaSFUParameters,\n  });\n\n  participantsModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isParticipantsModalVisible: this.isParticipantsModalVisible.value,\n    onParticipantsClose: this.onParticipantsClose,\n    participantsCounter: this.participantsCounter.value,\n    onParticipantsFilterChange: this.onParticipantsFilterChange,\n    parameters: {\n      updateParticipants: this.updateParticipants,\n      filteredParticipants: this.filteredParticipants.value,\n      updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible,\n      updateDirectMessageDetails: this.updateDirectMessageDetails,\n      updateStartDirectMessage: this.updateStartDirectMessage,\n      updateIsMessagesModalVisible: this.updateIsMessagesModalVisible,\n      showAlert: this.showAlert,\n      participants: this.filteredParticipants.value,\n      roomName: this.roomName.value,\n      islevel: this.islevel.value,\n      member: this.member.value,\n      coHostResponsibility: this.coHostResponsibility.value,\n      coHost: this.coHost.value,\n      eventType: this.eventType.value,\n      startDirectMessage: this.startDirectMessage.value,\n      directMessageDetails: this.directMessageDetails.value,\n      socket: this.socket.value,\n      getUpdatedAllParams: this.getUpdatedAllParams,\n    },\n  });\n\n  displaySettingsModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\n    onDisplaySettingsClose: this.onDisplaySettingsClose,\n    parameters: this.mediaSFUParameters,\n  });\n\n  recordingModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isRecordingModalVisible: this.isRecordingModalVisible.value,\n    onClose: this.onRecordingClose,\n    startRecording: this.startRecording.startRecording,\n    confirmRecording: this.confirmRecording.confirmRecording,\n    parameters: this.mediaSFUParameters,\n  });\n\n  messagesModalOverrideProps = () => ({\n    backgroundColor:\n      this.modernMenuDarkMode.value\n        ? 'rgba(15, 27, 49, 0.96)'\n        : this.eventType.value === 'webinar' || this.eventType.value === 'conference'\n          ? '#f5f5f5'\n          : 'rgba(255, 255, 255, 0.25)',\n    isMessagesModalVisible: this.isMessagesModalVisible.value,\n    onMessagesClose: this.onMessagesClose,\n    messages: this.messages.value,\n    eventType: this.eventType.value,\n    member: this.member.value,\n    islevel: this.islevel.value,\n    coHostResponsibility: this.coHostResponsibility.value,\n    coHost: this.coHost.value,\n    startDirectMessage: this.startDirectMessage.value,\n    directMessageDetails: this.directMessageDetails.value,\n    updateStartDirectMessage: this.updateStartDirectMessage,\n    updateDirectMessageDetails: this.updateDirectMessageDetails,\n    showAlert: this.showAlert,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    chatSetting: this.chatSetting.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  sidebarMessagesModalOverrideProps = () => ({\n    ...this.messagesModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isMessagesModalVisible: true,\n    onMessagesClose: this.closeSidebar,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  sidebarParticipantsModalOverrideProps = () => ({\n    ...this.participantsModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isParticipantsModalVisible: true,\n    onParticipantsClose: this.closeSidebar,\n    participantsCounter: this.filteredParticipants.value.length,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  sidebarRecordingModalOverrideProps = () => ({\n    ...this.recordingModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isRecordingModalVisible: true,\n    onClose: this.onRecordingClose,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  sidebarEventSettingsModalOverrideProps = () => ({\n    ...this.eventSettingsModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isEventSettingsModalVisible: true,\n    onEventSettingsClose: this.onEventSettingsClose,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  sidebarTranslationSettingsModalOverrideProps = () => ({\n    ...this.translationSettingsModalOverrideProps(),\n    isVisible: true,\n    onClose: this.onTranslationSettingsClose,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  sidebarRequestsModalOverrideProps = () => ({\n    ...this.requestsModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isRequestsModalVisible: true,\n    onRequestClose: this.onRequestClose,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  sidebarWaitingRoomModalOverrideProps = () => ({\n    ...this.waitingRoomModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isWaitingModalVisible: true,\n    onWaitingRoomClose: this.onWaitingRoomClose,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  sidebarCoHostModalOverrideProps = () => ({\n    ...this.coHostModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isCoHostModalVisible: true,\n    onCoHostClose: this.onCoHostClose,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  sidebarMediaSettingsModalOverrideProps = () => ({\n    ...this.mediaSettingsModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isMediaSettingsModalVisible: true,\n    onMediaSettingsClose: this.onMediaSettingsClose,\n    onOpenBackgroundSidebar: this.openSidebarBackground,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  sidebarBackgroundModalOverrideProps = () => ({\n    ...this.backgroundModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isVisible: true,\n    isDarkMode: this.modernMenuDarkMode.value,\n    onClose: this.onBackgroundClose,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  sidebarDisplaySettingsModalOverrideProps = () => ({\n    ...this.displaySettingsModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isDisplaySettingsModalVisible: true,\n    onDisplaySettingsClose: this.onDisplaySettingsClose,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  sidebarPollModalOverrideProps = () => ({\n    ...this.pollModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isPollModalVisible: true,\n    onClose: this.onPollClose,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  sidebarBreakoutRoomsModalOverrideProps = () => ({\n    ...this.breakoutRoomsModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isVisible: true,\n    isDarkMode: this.modernMenuDarkMode.value,\n    onBreakoutRoomsClose: this.onBreakoutRoomsClose,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  sidebarConfigureWhiteboardModalOverrideProps = () => ({\n    ...this.configureWhiteboardModalOverrideProps(),\n    backgroundColor: 'transparent',\n    isVisible: true,\n    isDarkMode: this.modernMenuDarkMode.value,\n    onConfigureWhiteboardClose: this.onConfigureWhiteboardClose,\n    renderMode: 'inline' as const,\n    showHeader: false,\n    contentStyle: this.sidebarEmbeddedModalContentStyle,\n  });\n\n  confirmExitModalOverrideProps = () => ({\n    backgroundColor: this.roomAccentSurfaceColor(),\n    isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n    onConfirmExitClose: this.onConfirmExitClose,\n    position: 'center',\n    member: this.member.value,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    islevel: this.islevel.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  confirmHereModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isDarkMode: this.modernMenuDarkMode.value,\n    isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\n    onConfirmHereClose: this.onConfirmHereClose,\n    onSuppressConfirmHere: this.onSuppressConfirmHere,\n    member: this.member.value,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  shareEventModalOverrideProps = () => ({\n    isShareEventModalVisible: this.isShareEventModalVisible.value,\n    isDarkMode: this.modernMenuDarkMode.value,\n    onShareEventClose: this.onShareEventClose,\n    roomName: this.roomName.value,\n    islevel: this.islevel.value,\n    adminPasscode: this.adminPasscode.value,\n    eventType: this.eventType.value,\n    localLink: this.localLink,\n    parameters: this.mediaSFUParameters,\n  });\n\n  pollModalOverrideProps = () => ({\n    isPollModalVisible: this.isPollModalVisible.value,\n    onClose: this.onPollClose,\n    member: this.member.value,\n    islevel: this.islevel.value,\n    polls: this.polls.value,\n    poll: this.poll.value,\n    socket: this.socket.value,\n    roomName: this.roomName.value,\n    showAlert: this.showAlert,\n    updateIsPollModalVisible: this.updateIsPollModalVisible,\n    handleCreatePoll: this.handleCreatePoll.handleCreatePoll,\n    handleEndPoll: this.handleEndPoll.handleEndPoll,\n    handleVotePoll: this.handleVotePoll.handleVotePoll,\n    parameters: this.mediaSFUParameters,\n  });\n\n  backgroundModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isVisible: this.isBackgroundModalVisible.value,\n    isDarkMode: this.modernMenuDarkMode.value,\n    onClose: this.onBackgroundClose,\n    parameters: this.mediaSFUParameters,\n  });\n\n  breakoutRoomsModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isVisible: this.isBreakoutRoomsModalVisible.value,\n    isDarkMode: this.modernMenuDarkMode.value,\n    onBreakoutRoomsClose: this.onBreakoutRoomsClose,\n    parameters: this.mediaSFUParameters,\n  });\n\n  configureWhiteboardModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isVisible: this.isConfigureWhiteboardModalVisible.value,\n    isDarkMode: this.modernMenuDarkMode.value,\n    onConfigureWhiteboardClose: this.onConfigureWhiteboardClose,\n    parameters: this.mediaSFUParameters,\n  });\n\n  screenboardModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isVisible: this.isScreenboardModalVisible.value,\n    onClose: this.onScreenboardClose,\n    parameters: this.mediaSFUParameters,\n  });\n\n  alertOverrideProps = () => ({\n    visible: this.alertVisible.value,\n    message: this.alertMessage.value,\n    type: this.alertType.value,\n    position: this.alertPosition.value,\n    duration: this.alertDuration.value,\n    onHide: this.onAlertHide,\n    isDarkMode: this.modernMenuDarkMode.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  loadingModalOverrideProps = () => ({\n    isVisible: this.isLoadingModalVisible.value,\n    isDarkMode: this.modernMenuDarkMode.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  private mainHeightWidthSubscription: Subscription | undefined;\n  private validatedSubscription: Subscription | undefined;\n  private islevelSubscription: Subscription | undefined;\n  private coHostSubscription: Subscription | undefined;\n  private buttonSubscriptions: Subscription[] = [];\n  private ScreenboardSubscription: Subscription | undefined;\n  private recordingSubscription: Subscription | undefined;\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    private injector: Injector,\n    public updateMiniCardsGrid: UpdateMiniCardsGrid,\n    public mixStreams: MixStreams,\n    public dispStreams: DispStreams,\n    public stopShareScreen: StopShareScreen,\n    public checkScreenShare: CheckScreenShare,\n    public startShareScreen: StartShareScreen,\n    public requestScreenShare: RequestScreenShare,\n    public reorderStreams: ReorderStreams,\n    public prepopulateUserMedia: PrepopulateUserMedia,\n    public getVideos: GetVideos,\n    public rePort: RePort,\n    public trigger: Trigger,\n    public consumerResume: ConsumerResume,\n    public connectSendTransport: ConnectSendTransport,\n    public connectSendTransportAudio: ConnectSendTransportAudio,\n    public connectSendTransportVideo: ConnectSendTransportVideo,\n    public connectSendTransportScreen: ConnectSendTransportScreen,\n    public processConsumerTransports: ProcessConsumerTransports,\n    public resumePauseStreams: ResumePauseStreams,\n    public readjust: Readjust,\n    public checkGrid: CheckGrid,\n    public getEstimate: GetEstimate,\n    public calculateRowsAndColumns: CalculateRowsAndColumns,\n    public addVideosGrid: AddVideosGrid,\n    public onScreenChanges: OnScreenChanges,\n    public changeVids: ChangeVids,\n    public compareActiveNames: CompareActiveNames,\n    public compareScreenStates: CompareScreenStates,\n    public createSendTransport: CreateSendTransport,\n    public resumeSendTransportAudio: ResumeSendTransportAudio,\n    public receiveAllPipedTransports: ReceiveAllPipedTransports,\n    public disconnectSendTransportVideo: DisconnectSendTransportVideo,\n    public disconnectSendTransportAudio: DisconnectSendTransportAudio,\n    public disconnectSendTransportScreen: DisconnectSendTransportScreen,\n    public getPipedProducersAlt: GetPipedProducersAlt,\n    public signalNewConsumerTransport: SignalNewConsumerTransport,\n    public connectRecvTransport: ConnectRecvTransport,\n    public reUpdateInter: ReUpdateInter,\n    public updateParticipantAudioDecibels: UpdateParticipantAudioDecibels,\n    public closeAndResize: CloseAndResize,\n    public autoAdjust: AutoAdjust,\n    public switchUserVideoAlt: SwitchUserVideoAlt,\n    public switchUserVideo: SwitchUserVideo,\n    public switchUserAudio: SwitchUserAudio,\n    public getDomains: GetDomains,\n    public formatNumber: FormatNumber,\n    public connectIps: ConnectIps,\n    public connectLocalIps: ConnectLocalIps,\n    public createDeviceClient: CreateDeviceClient,\n    public handleCreatePoll: HandleCreatePoll,\n    public handleEndPoll: HandleEndPoll,\n    public handleVotePoll: HandleVotePoll,\n    public captureCanvasStream: CaptureCanvasStream,\n    public resumePauseAudioStreams: ResumePauseAudioStreams,\n    public processConsumerTransportsAudio: ProcessConsumerTransportsAudio,\n\n    public launchMenuModal: LaunchMenuModal,\n    public launchRecording: LaunchRecording,\n    public startRecording: StartRecording,\n    public confirmRecording: ConfirmRecording,\n    public launchWaiting: LaunchWaiting,\n    public launchCoHost: launchCoHost,\n    public launchMediaSettings: LaunchMediaSettings,\n    public launchDisplaySettings: LaunchDisplaySettings,\n    public launchSettings: LaunchSettings,\n    public launchRequests: LaunchRequests,\n    public launchParticipants: LaunchParticipants,\n    public launchMessages: LaunchMessages,\n    public launchConfirmExit: LaunchConfirmExit,\n    public sendMessage: SendMessage,\n    public muteParticipants: MuteParticipants,\n    public messageParticipants: MessageParticipants,\n    public removeParticipants: RemoveParticipants,\n    public launchPoll: LaunchPoll,\n    public launchBreakoutRooms: LaunchBreakoutRooms,\n    public launchConfigureWhiteboard: LaunchConfigureWhiteboard,\n    public startMeetingProgressTimer: StartMeetingProgressTimer,\n    public updateRecording: UpdateRecording,\n    public stopRecording: StopRecording,\n    public userWaiting: UserWaiting,\n    public personJoined: PersonJoined,\n    public allWaitingRoomMembers: AllWaitingRoomMembers,\n    public roomRecordParams: RoomRecordParams,\n    public banParticipant: BanParticipant,\n    public updatedCoHost: UpdatedCoHost,\n    public participantRequested: ParticipantRequested,\n    public screenProducerId: ScreenProducerId,\n    public updateMediaSettings: UpdateMediaSettings,\n    public producerMediaPaused: ProducerMediaPaused,\n    public producerMediaResumed: ProducerMediaResumed,\n    public producerMediaClosed: ProducerMediaClosed,\n    public controlMediaHost: ControlMediaHost,\n    public meetingEnded: MeetingEnded,\n    public disconnectUserSelf: DisconnectUserSelf,\n    public receiveMessage: ReceiveMessage,\n    public meetingTimeRemaining: MeetingTimeRemaining,\n    public meetingStillThere: MeetingStillThere,\n    public startRecords: StartRecords,\n    public reInitiateRecording: ReInitiateRecording,\n    public recordingNotice: RecordingNotice,\n    public timeLeftRecording: TimeLeftRecording,\n    public stoppedRecording: StoppedRecording,\n    public hostRequestResponse: HostRequestResponse,\n    public allMembers: AllMembers,\n    public allMembersRest: AllMembersRest,\n    public disconnect: Disconnect,\n    public pollUpdated: PollUpdated,\n    public breakoutRoomUpdated: BreakoutRoomUpdated,\n    public socketManager: SocketManager,\n    public joinRoomClient: JoinRoomClient,\n    public joinLocalRoom: JoinLocalRoom,\n    public updateRoomParametersClient: UpdateRoomParametersClient,\n    public clickVideo: ClickVideo,\n    public clickAudio: ClickAudio,\n    public clickScreenShare: ClickScreenShare,\n    public switchVideoAlt: SwitchVideoAlt,\n    public streamSuccessVideo: StreamSuccessVideo,\n    public streamSuccessAudio: StreamSuccessAudio,\n    public streamSuccessScreen: StreamSuccessScreen,\n    public streamSuccessAudioSwitch: StreamSuccessAudioSwitch,\n    public checkPermission: CheckPermission,\n    public updateConsumingDomains: UpdateConsumingDomains,\n    public receiveRoomMessages: ReceiveRoomMessages,\n    private uiOverrideResolver: UIOverrideResolverService,\n    public liveSubtitleService: LiveSubtitleService,\n    public translationConsumerSwitch: TranslationConsumerSwitch,\n    public panelistsUpdated?: PanelistsUpdated,\n    public panelistFocusChanged?: PanelistFocusChanged,\n    public receiveControlMedia?: ReceiveControlMedia,\n    public addedAsPanelist?: AddedAsPanelist,\n    public removedFromPanelists?: RemovedFromPanelists,\n    public permissionUpdated?: PermissionUpdated,\n    public permissionConfigUpdated?: PermissionConfigUpdated,\n    public translationReceiveMethods?: TranslationReceiveMethods,\n  ) {\n    this.liveSubtitleService.setShowSubtitlesOnCards(true);\n  }\n\n  createInjector(inputs: any) {\n    if (!inputs || typeof inputs !== 'object') {\n      return this.injector;\n    }\n\n    const inj = Injector.create({\n      providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\n      parent: this.injector,\n    });\n\n    return inj;\n  }\n\n  /**\n   * Gets a list of media devices filtered by the specified kind.\n   * @param kind - The kind of media device to filter by ('videoinput' or 'audioinput')\n   * @returns A promise that resolves to an array of MediaDeviceInfo objects\n   */\n  getMediaDevicesList = async (kind: 'videoinput' | 'audioinput'): Promise<MediaDeviceInfo[]> => {\n    try {\n      const devices = await navigator.mediaDevices.enumerateDevices();\n      return devices.filter((device) => device.kind === kind);\n    } catch (error) {\n      console.error('Error enumerating devices:', error);\n      return [];\n    }\n  };\n\n  /**\n   * Gets the media stream for a participant by their ID or name.\n   * @param options - Object containing id, name, and kind parameters\n   * @returns A promise that resolves to the participant's MediaStream or null if not found\n   */\n  getParticipantMedia = async (options: {\n    id?: string;\n    name?: string;\n    kind: 'video' | 'audio';\n  }): Promise<MediaStream | null> => {\n    const { id, name, kind } = options;\n\n    try {\n      const streams =\n        kind === 'video' ? this.allVideoStreams.value : this.allAudioStreams.value;\n\n      // Search by producerId if provided\n      if (id) {\n        const streamObj = streams.find((obj: any) => obj.producerId === id);\n        if (streamObj && 'stream' in streamObj) {\n          return streamObj.stream || null;\n        }\n      }\n\n      // Search by name if provided\n      if (name) {\n        const streamObj = streams.find((obj: any) => obj.name === name);\n        if (streamObj && 'stream' in streamObj) {\n          return streamObj.stream || null;\n        }\n      }\n\n      return null;\n    } catch (error) {\n      console.error('Error getting participant media:', error);\n      return null;\n    }\n  };\n\n  // Initial values\n  mediaSFUFunctions = (): any => {\n    return {\n      updateMiniCardsGrid:\n        this.updateMiniCardsGrid?.updateMiniCardsGrid ||\n        (() => {\n          console.log('none');\n        }),\n      mixStreams:\n        this.mixStreams?.mixStreams ||\n        (() => {\n          console.log('none');\n        }),\n      dispStreams:\n        this.dispStreams?.dispStreams ||\n        (() => {\n          console.log('none');\n        }),\n      stopShareScreen:\n        this.stopShareScreen?.stopShareScreen ||\n        (() => {\n          console.log('none');\n        }),\n      checkScreenShare:\n        this.checkScreenShare?.checkScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      startShareScreen:\n        this.startShareScreen?.startShareScreen ||\n        (() => {\n          console.log('none');\n        }),\n      requestScreenShare:\n        this.requestScreenShare?.requestScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      reorderStreams:\n        this.reorderStreams?.reorderStreams ||\n        (() => {\n          console.log('none');\n        }),\n      prepopulateUserMedia:\n        this.prepopulateUserMedia?.prepopulateUserMedia ||\n        (() => {\n          console.log('none');\n        }),\n      getVideos:\n        this.getVideos?.getVideos ||\n        (() => {\n          console.log('none');\n        }),\n      rePort:\n        this.rePort?.rePort ||\n        (() => {\n          console.log('none');\n        }),\n      trigger:\n        this.trigger?.trigger ||\n        (() => {\n          console.log('none');\n        }),\n      consumerResume:\n        this.consumerResume?.consumerResume ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransport:\n        this.connectSendTransport?.connectSendTransport ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportAudio:\n        this.connectSendTransportAudio?.connectSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportVideo:\n        this.connectSendTransportVideo?.connectSendTransportVideo ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportScreen:\n        this.connectSendTransportScreen?.connectSendTransportScreen ||\n        (() => {\n          console.log('none');\n        }),\n      processConsumerTransports:\n        this.processConsumerTransports?.processConsumerTransports ||\n        (() => {\n          console.log('none');\n        }),\n      resumePauseStreams:\n        this.resumePauseStreams?.resumePauseStreams ||\n        (() => {\n          console.log('none');\n        }),\n      readjust:\n        this.readjust?.readjust ||\n        (() => {\n          console.log('none');\n        }),\n      checkGrid:\n        this.checkGrid?.checkGrid ||\n        (() => {\n          console.log('none');\n        }),\n      getEstimate:\n        this.getEstimate?.getEstimate ||\n        (() => {\n          console.log('none');\n        }),\n      calculateRowsAndColumns:\n        this.calculateRowsAndColumns?.calculateRowsAndColumns ||\n        (() => {\n          console.log('none');\n        }),\n      addVideosGrid:\n        this.addVideosGrid?.addVideosGrid ||\n        (() => {\n          console.log('none');\n        }),\n      onScreenChanges:\n        this.onScreenChanges?.onScreenChanges ||\n        (() => {\n          console.log('none');\n        }),\n      sleep:\n        sleep ||\n        (() => {\n          console.log('none');\n        }),\n      changeVids:\n        this.changeVids?.changeVids ||\n        (() => {\n          console.log('none');\n        }),\n      compareActiveNames:\n        this.compareActiveNames?.compareActiveNames ||\n        (() => {\n          console.log('none');\n        }),\n      compareScreenStates:\n        this.compareScreenStates?.compareScreenStates ||\n        (() => {\n          console.log('none');\n        }),\n      createSendTransport:\n        this.createSendTransport?.createSendTransport ||\n        (() => {\n          console.log('none');\n        }),\n      resumeSendTransportAudio:\n        this.resumeSendTransportAudio?.resumeSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      receiveAllPipedTransports:\n        this.receiveAllPipedTransports?.receiveAllPipedTransports ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportVideo:\n        this.disconnectSendTransportVideo?.disconnectSendTransportVideo ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportAudio:\n        this.disconnectSendTransportAudio?.disconnectSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportScreen:\n        this.disconnectSendTransportScreen?.disconnectSendTransportScreen ||\n        (() => {\n          console.log('none');\n        }),\n      getPipedProducersAlt:\n        this.getPipedProducersAlt?.getPipedProducersAlt ||\n        (() => {\n          console.log('none');\n        }),\n      startConsumingTranslation: this.startConsumingTranslation,\n      signalNewConsumerTransport:\n        this.signalNewConsumerTransport?.signalNewConsumerTransport ||\n        (() => {\n          console.log('none');\n        }),\n      connectRecvTransport:\n        this.connectRecvTransport?.connectRecvTransport ||\n        (() => {\n          console.log('none');\n        }),\n      reUpdateInter:\n        this.reUpdateInter?.reUpdateInter ||\n        (() => {\n          console.log('none');\n        }),\n      updateParticipantAudioDecibels:\n        this.updateParticipantAudioDecibels?.updateParticipantAudioDecibels ||\n        (() => {\n          console.log('none');\n        }),\n      closeAndResize:\n        this.closeAndResize?.closeAndResize ||\n        (() => {\n          console.log('none');\n        }),\n      autoAdjust:\n        this.autoAdjust?.autoAdjust ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserVideoAlt:\n        this.switchUserVideoAlt?.switchUserVideoAlt ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserVideo:\n        this.switchUserVideo?.switchUserVideo ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserAudio:\n        this.switchUserAudio?.switchUserAudio ||\n        (() => {\n          console.log('none');\n        }),\n      getDomains:\n        this.getDomains?.getDomains ||\n        (() => {\n          console.log('none');\n        }),\n      formatNumber:\n        this.formatNumber?.formatNumber ||\n        (() => {\n          console.log('none');\n        }),\n      connectIps:\n        this.connectIps?.connectIps ||\n        (() => {\n          console.log('none');\n        }),\n      connectLocalIps:\n        this.connectLocalIps?.connectLocalIps ||\n        (() => {\n          console.log('none');\n        }),\n      createDeviceClient:\n        this.createDeviceClient?.createDeviceClient ||\n        (() => {\n          console.log('none');\n        }),\n      handleCreatePoll:\n        this.handleCreatePoll?.handleCreatePoll ||\n        (() => {\n          console.log('none');\n        }),\n      handleEndPoll:\n        this.handleEndPoll?.handleEndPoll ||\n        (() => {\n          console.log('none');\n        }),\n      handleVotePoll:\n        this.handleVotePoll?.handleVotePoll ||\n        (() => {\n          console.log('none');\n        }),\n      captureCanvasStream:\n        this.captureCanvasStream?.captureCanvasStream ||\n        (() => {\n          console.log('none');\n        }),\n      resumePauseAudioStreams:\n        this.resumePauseAudioStreams?.resumePauseAudioStreams ||\n        (() => {\n          console.log('none');\n        }),\n      processConsumerTransportsAudio:\n        this.processConsumerTransportsAudio?.processConsumerTransportsAudio ||\n        (() => {\n          console.log('none');\n        }),\n      checkPermission:\n        this.checkPermission?.checkPermission ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessVideo:\n        this.streamSuccessVideo?.streamSuccessVideo ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessAudio:\n        this.streamSuccessAudio?.streamSuccessAudio ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessScreen:\n        this.streamSuccessScreen?.streamSuccessScreen ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessAudioSwitch:\n        this.streamSuccessAudioSwitch?.streamSuccessAudioSwitch ||\n        (() => {\n          console.log('none');\n        }),\n      clickVideo:\n        this.clickVideo?.clickVideo ||\n        (() => {\n          console.log('none');\n        }),\n      clickAudio:\n        this.clickAudio?.clickAudio ||\n        (() => {\n          console.log('none');\n        }),\n      clickScreenShare:\n        this.clickScreenShare?.clickScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      switchVideoAlt:\n        this.switchVideoAlt?.switchVideoAlt ||\n        (() => {\n          console.log('none');\n        }),\n      requestPermissionCamera:\n        this.requestPermissionCamera ||\n        (() => {\n          console.log('none');\n        }),\n      requestPermissionAudio:\n        this.requestPermissionAudio ||\n        (() => {\n          console.log('none');\n        }),\n      getMediaDevicesList: this.getMediaDevicesList,\n      getParticipantMedia: this.getParticipantMedia,\n    };\n  };\n\n  validated = new BehaviorSubject<boolean>(false);\n  localUIMode = new BehaviorSubject<boolean>(false);\n  socket = new BehaviorSubject<Socket>({} as Socket);\n  localSocket? = new BehaviorSubject<Socket | undefined>(undefined);\n  roomData = new BehaviorSubject<ResponseJoinRoom | null>(null);\n  device = new BehaviorSubject<Device | null>(null);\n  apiKey = new BehaviorSubject<string>('');\n  apiUserName = new BehaviorSubject<string>('');\n  apiToken = new BehaviorSubject<string>('');\n  link = new BehaviorSubject<string>('');\n\n  roomName = new BehaviorSubject<string>('');\n  member = new BehaviorSubject<string>('');\n  adminPasscode = new BehaviorSubject<string>('');\n  islevel = new BehaviorSubject<string>('1');\n  coHost = new BehaviorSubject<string>('No coHost');\n  coHostResponsibility = new BehaviorSubject<CoHostResponsibility[]>([\n    { name: 'participants', value: false, dedicated: false },\n    { name: 'media', value: false, dedicated: false },\n    { name: 'waiting', value: false, dedicated: false },\n    { name: 'chat', value: false, dedicated: false },\n  ]);\n  youAreCoHost = new BehaviorSubject<boolean>(false);\n  youAreHost = new BehaviorSubject<boolean>(false);\n  confirmedToRecord = new BehaviorSubject<boolean>(false);\n  meetingDisplayType = new BehaviorSubject<string>('media');\n  meetingVideoOptimized = new BehaviorSubject<boolean>(false);\n  eventType = new BehaviorSubject<EventType>('webinar');\n  participants = new BehaviorSubject<Participant[]>([]);\n  filteredParticipants = new BehaviorSubject<Participant[]>([]);\n  participantsCounter = new BehaviorSubject<number>(0);\n  participantsFilter = new BehaviorSubject<string>('');\n\n  consume_sockets = new BehaviorSubject<ConsumeSocket[]>([]);\n  rtpCapabilities = new BehaviorSubject<RtpCapabilities | null>(null);\n  roomRecvIPs = new BehaviorSubject<string[]>([]);\n  meetingRoomParams = new BehaviorSubject<MeetingRoomParams | null>(null);\n  itemPageLimit = new BehaviorSubject<number>(4);\n  audioOnlyRoom = new BehaviorSubject<boolean>(false);\n  addForBasic = new BehaviorSubject<boolean>(false);\n  screenPageLimit = new BehaviorSubject<number>(4);\n  shareScreenStarted = new BehaviorSubject<boolean>(false);\n  shared = new BehaviorSubject<boolean>(false);\n  targetOrientation = new BehaviorSubject<string>('landscape');\n  targetResolution = new BehaviorSubject<string>('sd');\n  targetResolutionHost = new BehaviorSubject<string>('sd');\n  vidCons = new BehaviorSubject<VidCons>({ width: 640, height: 360 });\n  frameRate = new BehaviorSubject<number>(10);\n  hParams = new BehaviorSubject<HParamsType>({} as HParamsType);\n  vParams = new BehaviorSubject<VParamsType>({} as VParamsType);\n  screenParams = new BehaviorSubject<ScreenParamsType>({} as ScreenParamsType);\n  aParams = new BehaviorSubject<AParamsType>({} as AParamsType);\n\n  recordingAudioPausesLimit = new BehaviorSubject<number>(0);\n  recordingAudioPausesCount = new BehaviorSubject<number>(0);\n  recordingAudioSupport = new BehaviorSubject<boolean>(false);\n  recordingAudioPeopleLimit = new BehaviorSubject<number>(0);\n  recordingAudioParticipantsTimeLimit = new BehaviorSubject<number>(0);\n  recordingVideoPausesCount = new BehaviorSubject<number>(0);\n  recordingVideoPausesLimit = new BehaviorSubject<number>(0);\n  recordingVideoSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoPeopleLimit = new BehaviorSubject<number>(0);\n  recordingVideoParticipantsTimeLimit = new BehaviorSubject<number>(0);\n  recordingAllParticipantsSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoParticipantsSupport = new BehaviorSubject<boolean>(false);\n  recordingAllParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\n  recordingPreferredOrientation = new BehaviorSubject<string>('landscape');\n  recordingSupportForOtherOrientation = new BehaviorSubject<boolean>(false);\n  recordingMultiFormatsSupport = new BehaviorSubject<boolean>(false);\n\n  userRecordingParams = new BehaviorSubject<UserRecordingParams>({\n    mainSpecs: {\n      mediaOptions: 'video', // 'audio', 'video'\n      audioOptions: 'all', // 'all', 'onScreen', 'host'\n      videoOptions: 'all', // 'all', 'mainScreen'\n      videoType: 'fullDisplay', // 'all', 'bestDisplay', 'fullDisplay'\n      videoOptimized: false, // true, false\n      recordingDisplayType: 'media', // 'media', 'video', 'all'\n      addHLS: false, // true, false\n    },\n    dispSpecs: {\n      nameTags: true, // true, false\n      backgroundColor: '#000000', // '#000000', '#ffffff'\n      nameTagsColor: '#ffffff', // '#000000', '#ffffff'\n      orientationVideo: 'portrait', // 'landscape', 'portrait', 'all'\n    },\n  });\n\n  canRecord = new BehaviorSubject<boolean>(false);\n  startReport = new BehaviorSubject<boolean>(false);\n  endReport = new BehaviorSubject<boolean>(false);\n  recordTimerInterval = new BehaviorSubject<number | null>(null);\n  recordStartTime = new BehaviorSubject<number>(0);\n  recordElapsedTime = new BehaviorSubject<number>(0);\n  isTimerRunning = new BehaviorSubject<boolean>(false);\n  canPauseResume = new BehaviorSubject<boolean>(false);\n  recordChangeSeconds = new BehaviorSubject<number>(15000);\n  pauseLimit = new BehaviorSubject<number>(0);\n  pauseRecordCount = new BehaviorSubject<number>(0);\n  canLaunchRecord = new BehaviorSubject<boolean>(true);\n  stopLaunchRecord = new BehaviorSubject<boolean>(false);\n\n  participantsAll = new BehaviorSubject<Participant[]>([]);\n\n  firstAll = new BehaviorSubject<boolean>(false);\n  updateMainWindow = new BehaviorSubject<boolean>(false);\n  first_round = new BehaviorSubject<boolean>(false);\n  landScaped = new BehaviorSubject<boolean>(false);\n  lock_screen = new BehaviorSubject<boolean>(false);\n  screenId = new BehaviorSubject<string>('');\n  allVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  newLimitedStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  newLimitedStreamsIDs = new BehaviorSubject<string[]>([]);\n  activeSounds = new BehaviorSubject<string[]>([]);\n  screenShareIDStream = new BehaviorSubject<string>('');\n  screenShareNameStream = new BehaviorSubject<string>('');\n  adminIDStream = new BehaviorSubject<string>('');\n  adminNameStream = new BehaviorSubject<string>('');\n  youYouStream = new BehaviorSubject<(Participant | Stream)[]>([]);\n  youYouStreamIDs = new BehaviorSubject<string[]>([]);\n  localStream = new BehaviorSubject<MediaStream | null>(null);\n  recordStarted = new BehaviorSubject<boolean>(false);\n  recordResumed = new BehaviorSubject<boolean>(false);\n  recordPaused = new BehaviorSubject<boolean>(false);\n  recordStopped = new BehaviorSubject<boolean>(false);\n  adminRestrictSetting = new BehaviorSubject<boolean>(false);\n  videoRequestState = new BehaviorSubject<string | null>(null);\n  videoRequestTime = new BehaviorSubject<number>(0);\n  videoAction = new BehaviorSubject<boolean>(false);\n  localStreamVideo = new BehaviorSubject<MediaStream | null>(null);\n  userDefaultVideoInputDevice = new BehaviorSubject<string>('');\n  currentFacingMode = new BehaviorSubject<string>('user');\n  prevFacingMode = new BehaviorSubject<string>('user');\n  defVideoID = new BehaviorSubject<string>('');\n  allowed = new BehaviorSubject<boolean>(false);\n  dispActiveNames = new BehaviorSubject<string[]>([]);\n  p_dispActiveNames = new BehaviorSubject<string[]>([]);\n  activeNames = new BehaviorSubject<string[]>([]);\n  prevActiveNames = new BehaviorSubject<string[]>([]);\n  p_activeNames = new BehaviorSubject<string[]>([]);\n  membersReceived = new BehaviorSubject<boolean>(false);\n  deferScreenReceived = new BehaviorSubject<boolean>(false);\n  hostFirstSwitch = new BehaviorSubject<boolean>(false);\n  micAction = new BehaviorSubject<boolean>(false);\n  screenAction = new BehaviorSubject<boolean>(false);\n  chatAction = new BehaviorSubject<boolean>(false);\n  audioRequestState = new BehaviorSubject<string | null>(null);\n  screenRequestState = new BehaviorSubject<string | null>(null);\n  chatRequestState = new BehaviorSubject<string | null>(null);\n  audioRequestTime = new BehaviorSubject<number>(0);\n  screenRequestTime = new BehaviorSubject<number>(0);\n  chatRequestTime = new BehaviorSubject<number>(0);\n  updateRequestIntervalSeconds = new BehaviorSubject<number>(240);\n  oldSoundIds = new BehaviorSubject<string[]>([]);\n  hostLabel = new BehaviorSubject<string>('Host');\n  mainScreenFilled = new BehaviorSubject<boolean>(false);\n  localStreamScreen = new BehaviorSubject<MediaStream | null>(null);\n  screenAlreadyOn = new BehaviorSubject<boolean>(false);\n  chatAlreadyOn = new BehaviorSubject<boolean>(false);\n  redirectURL = new BehaviorSubject<string>('');\n  oldAllStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  adminVidID = new BehaviorSubject<string>('');\n  streamNames = new BehaviorSubject<Stream[]>([]);\n  non_alVideoStreams = new BehaviorSubject<Participant[]>([]);\n  sortAudioLoudness = new BehaviorSubject<boolean>(false);\n  audioDecibels = new BehaviorSubject<AudioDecibels[]>([]);\n  mixed_alVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  non_alVideoStreams_muted = new BehaviorSubject<Participant[]>([]);\n  paginatedStreams = new BehaviorSubject<(Participant | Stream)[][]>([]);\n  localStreamAudio = new BehaviorSubject<MediaStream | null>(null);\n  defAudioID = new BehaviorSubject<string>('');\n  userDefaultAudioInputDevice = new BehaviorSubject<string>('');\n  userDefaultAudioOutputDevice = new BehaviorSubject<string>('');\n  prevAudioInputDevice = new BehaviorSubject<string>('');\n  prevVideoInputDevice = new BehaviorSubject<string>('');\n  audioPaused = new BehaviorSubject<boolean>(false);\n  mainScreenPerson = new BehaviorSubject<string>('');\n  adminOnMainScreen = new BehaviorSubject<boolean>(false);\n  screenStates = new BehaviorSubject<ScreenState[]>([\n    {\n      mainScreenPerson: '',\n      mainScreenProducerId: '',\n      mainScreenFilled: false,\n      adminOnMainScreen: false,\n    },\n  ]);\n  prevScreenStates = new BehaviorSubject<ScreenState[]>([\n    {\n      mainScreenPerson: '',\n      mainScreenProducerId: '',\n      mainScreenFilled: false,\n      adminOnMainScreen: false,\n    },\n  ]);\n  updateDateState = new BehaviorSubject<number | null>(null);\n  lastUpdate = new BehaviorSubject<number | null>(null);\n  nForReadjustRecord = new BehaviorSubject<number>(0);\n  fixedPageLimit = new BehaviorSubject<number>(4);\n  removeAltGrid = new BehaviorSubject<boolean>(false);\n  nForReadjust = new BehaviorSubject<number>(0);\n  reorderInterval = new BehaviorSubject<number>(30000);\n  fastReorderInterval = new BehaviorSubject<number>(10000);\n  lastReorderTime = new BehaviorSubject<number>(0);\n  audStreamNames = new BehaviorSubject<Stream[]>([]);\n  currentUserPage = new BehaviorSubject<number>(0);\n  mainHeightWidth = new BehaviorSubject<number>(\n    this.eventType.value == 'webinar' ? 67 : this.eventType.value == 'broadcast' ? 100 : 0,\n  );\n  prevMainHeightWidth = new BehaviorSubject<number>(this.mainHeightWidth.value);\n  prevDoPaginate = new BehaviorSubject<boolean>(false);\n  doPaginate = new BehaviorSubject<boolean>(false);\n  shareEnded = new BehaviorSubject<boolean>(false);\n  lStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  chatRefStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  controlHeight = new BehaviorSubject<number>(\n    this.eventType.value === 'webinar' || this.eventType.value === 'conference'\n      ? this.initialControlHeight()\n      : 0.06,\n  );\n  isWideScreen = new BehaviorSubject<boolean>(false);\n  isMediumScreen = new BehaviorSubject<boolean>(false);\n  isSmallScreen = new BehaviorSubject<boolean>(false);\n  addGrid = new BehaviorSubject<boolean>(false);\n  addAltGrid = new BehaviorSubject<boolean>(false);\n  gridRows = new BehaviorSubject<number>(0);\n  gridCols = new BehaviorSubject<number>(0);\n  altGridRows = new BehaviorSubject<number>(0);\n  altGridCols = new BehaviorSubject<number>(0);\n  numberPages = new BehaviorSubject<number>(0);\n  currentStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  showMiniView = new BehaviorSubject<boolean>(false);\n  nStream = new BehaviorSubject<MediaStream | null>(null);\n  defer_receive = new BehaviorSubject<boolean>(false);\n  allAudioStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  remoteScreenStream = new BehaviorSubject<Stream[]>([]);\n  screenProducer = new BehaviorSubject<Producer | null>(null);\n  localScreenProducer = new BehaviorSubject<Producer | null>(null);\n  gotAllVids = new BehaviorSubject<boolean>(false);\n  paginationHeightWidth = new BehaviorSubject<number>(40);\n  paginationDirection = new BehaviorSubject<'horizontal' | 'vertical'>('horizontal');\n  gridSizes = new BehaviorSubject<GridSizes>({\n    gridWidth: 0,\n    gridHeight: 0,\n    altGridWidth: 0,\n    altGridHeight: 0,\n  });\n  screenForceFullDisplay = new BehaviorSubject<boolean>(false);\n  mainGridStream = new BehaviorSubject<CustomMediaComponent[]>([]);\n  otherGridStreams = new BehaviorSubject<CustomMediaComponent[][]>([]);\n  audioOnlyStreams = new BehaviorSubject<CustomMediaComponent[]>([]);\n  videoInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\n  audioInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\n  meetingProgressTime = new BehaviorSubject<string>('00:00:00');\n  meetingElapsedTime = new BehaviorSubject<number>(0);\n  ref_participants = new BehaviorSubject<Participant[]>([]);\n\n  updateValidated = (value: boolean) => {\n    this.validated.next(value);\n  };\n\n  updateSocket = (value: Socket) => {\n    this.socket.next(value);\n  };\n\n  updateLocalSocket = (value: Socket | null) => {\n    this.localSocket!.next(value!);\n  };\n\n  updateDevice = (value: Device | null) => {\n    this.device.next(value);\n  };\n\n  updateRoomData = (value: ResponseJoinRoom | null) => {\n    this.roomData.next(value);\n  };\n\n  updateApiKey = (value: string) => {\n    this.apiKey.next(value);\n  };\n\n  updateApiUserName = (value: string) => {\n    this.apiUserName.next(value);\n  };\n\n  updateApiToken = (value: string) => {\n    this.apiToken.next(value);\n  };\n\n  updateLink = (value: string) => {\n    this.link.next(value);\n  };\n\n  updateRoomName = (value: string) => {\n    this.roomName.next(value);\n  };\n\n  updateMember = (value: string) => {\n    if (value.length > 0 && value.includes(\"_\")) {\n      this.updateIslevel(value.split(\"_\")[1]);\n      value = value.split(\"_\")[0];\n    }\n    this.member.next(value);\n  };\n\n  updateAdminPasscode = (value: string) => {\n    this.adminPasscode.next(value);\n  };\n\n  updateIslevel = (value: string) => {\n    this.islevel.next(value);\n  };\n\n  updateCoHost = (value: string) => {\n    this.coHost.next(value);\n  };\n\n  updateCoHostResponsibility = (value: CoHostResponsibility[]) => {\n    this.coHostResponsibility.next(value);\n  };\n\n  updateYouAreCoHost = (value: boolean) => {\n    this.youAreCoHost.next(value);\n  };\n\n  updateYouAreHost = (value: boolean) => {\n    this.youAreHost.next(value);\n  };\n\n  updateConfirmedToRecord = (value: boolean) => {\n    this.confirmedToRecord.next(value);\n  };\n\n  updateMeetingDisplayType = (value: string) => {\n    this.meetingDisplayType.next(value);\n  };\n\n  updateMeetingVideoOptimized = (value: boolean) => {\n    this.meetingVideoOptimized.next(value);\n  };\n\n  updateEventType = (value: EventType) => {\n    this.eventType.next(value);\n    if (value != 'none') {\n      try {\n        setTimeout(() => {\n          this.handleResize();\n        }, 2000);\n      } catch {\n        /* handle error */\n      }\n    }\n  };\n\n  updateParticipants = (value: Participant[]) => {\n    this.participants.next(value);\n    this.participantsCounter.next(value.length);\n    this.filteredParticipants.next(this.participants.value);\n  };\n\n  updateFilteredParticipants = (value: Participant[]) => {\n    this.filteredParticipants.next(value);\n  };\n\n  updateParticipantsCounter = (value: number) => {\n    this.participantsCounter.next(value);\n  };\n\n  updateParticipantsFilter = (value: string) => {\n    this.participantsFilter.next(value);\n  };\n\n  updateConsume_sockets = (value: ConsumeSocket[]) => {\n    this.consume_sockets.next(value);\n  };\n\n  updateRtpCapabilities = (value: RtpCapabilities | null) => {\n    this.rtpCapabilities.next(value);\n  };\n\n  updateRoomRecvIPs = (value: string[]) => {\n    this.roomRecvIPs.next(value);\n  };\n\n  updateMeetingRoomParams = (value: MeetingRoomParams | null) => {\n    this.meetingRoomParams.next(value);\n  };\n\n  updateItemPageLimit = (value: number) => {\n    this.itemPageLimit.next(value);\n  };\n\n  updateAudioOnlyRoom = (value: boolean) => {\n    this.audioOnlyRoom.next(value);\n  };\n\n  updateAddForBasic = (value: boolean) => {\n    this.addForBasic.next(value);\n  };\n\n  updateScreenPageLimit = (value: number) => {\n    this.screenPageLimit.next(value);\n  };\n\n  updateShareScreenStarted = (value: boolean) => {\n    this.shareScreenStarted.next(value);\n  };\n\n  updateShared = (value: boolean) => {\n    this.shared.next(value);\n    this.screenShareActive.next(value);\n    if (value) {\n      setTimeout(async () => {\n        window.dispatchEvent(new Event('resize'));\n      }, 2000);\n    }\n  };\n\n  updateTargetOrientation = (value: string) => {\n    this.targetOrientation.next(value);\n  };\n\n  updateTargetResolution = (value: string) => {\n    this.targetResolution.next(value);\n  };\n\n  updateTargetResolutionHost = (value: string) => {\n    this.targetResolutionHost.next(value);\n  };\n\n  updateVidCons = (value: VidCons) => {\n    this.vidCons.next(value);\n  };\n\n  updateFrameRate = (value: number) => {\n    this.frameRate.next(value);\n  };\n\n  updateHParams = (value: HParamsType) => {\n    this.hParams.next(value);\n  };\n\n  updateVParams = (value: VParamsType) => {\n    this.vParams.next(value);\n  };\n\n  updateScreenParams = (value: ScreenParamsType) => {\n    this.screenParams.next(value);\n  };\n\n  updateAParams = (value: AParamsType) => {\n    this.aParams.next(value);\n  };\n\n  updateRecordingAudioPausesLimit = (value: number) => {\n    this.recordingAudioPausesLimit.next(value);\n  };\n\n  updateRecordingAudioPausesCount = (value: number) => {\n    this.recordingAudioPausesCount.next(value);\n  };\n\n  updateRecordingAudioSupport = (value: boolean) => {\n    this.recordingAudioSupport.next(value);\n  };\n\n  updateRecordingAudioPeopleLimit = (value: number) => {\n    this.recordingAudioPeopleLimit.next(value);\n  };\n\n  updateRecordingAudioParticipantsTimeLimit = (value: number) => {\n    this.recordingAudioParticipantsTimeLimit.next(value);\n  };\n\n  updateRecordingVideoPausesCount = (value: number) => {\n    this.recordingVideoPausesCount.next(value);\n  };\n\n  updateRecordingVideoPausesLimit = (value: number) => {\n    this.recordingVideoPausesLimit.next(value);\n  };\n\n  updateRecordingVideoSupport = (value: boolean) => {\n    this.recordingVideoSupport.next(value);\n  };\n\n  updateRecordingVideoPeopleLimit = (value: number) => {\n    this.recordingVideoPeopleLimit.next(value);\n  };\n\n  updateRecordingVideoParticipantsTimeLimit = (value: number) => {\n    this.recordingVideoParticipantsTimeLimit.next(value);\n  };\n\n  updateRecordingAllParticipantsSupport = (value: boolean) => {\n    this.recordingAllParticipantsSupport.next(value);\n  };\n\n  updateRecordingVideoParticipantsSupport = (value: boolean) => {\n    this.recordingVideoParticipantsSupport.next(value);\n  };\n\n  updateRecordingAllParticipantsFullRoomSupport = (value: boolean) => {\n    this.recordingAllParticipantsFullRoomSupport.next(value);\n  };\n\n  updateRecordingVideoParticipantsFullRoomSupport = (value: boolean) => {\n    this.recordingVideoParticipantsFullRoomSupport.next(value);\n  };\n\n  updateRecordingPreferredOrientation = (value: string) => {\n    this.recordingPreferredOrientation.next(value);\n  };\n\n  updateRecordingSupportForOtherOrientation = (value: boolean) => {\n    this.recordingSupportForOtherOrientation.next(value);\n  };\n\n  updateRecordingMultiFormatsSupport = (value: boolean) => {\n    this.recordingMultiFormatsSupport.next(value);\n  };\n\n  updateUserRecordingParams = (value: UserRecordingParams) => {\n    this.userRecordingParams.next(value);\n  };\n\n  updateCanRecord = (value: boolean) => {\n    this.canRecord.next(value);\n  };\n\n  updateStartReport = (value: boolean) => {\n    this.startReport.next(value);\n  };\n\n  updateEndReport = (value: boolean) => {\n    this.endReport.next(value);\n  };\n\n  updateRecordTimerInterval = (value: number | null) => {\n    this.recordTimerInterval.next(value);\n  };\n\n  updateRecordStartTime = (value: number) => {\n    this.recordStartTime.next(value);\n  };\n\n  updateRecordElapsedTime = (value: number) => {\n    this.recordElapsedTime.next(value);\n  };\n\n  updateIsTimerRunning = (value: boolean) => {\n    this.isTimerRunning.next(value);\n  };\n\n  updateCanPauseResume = (value: boolean) => {\n    this.canPauseResume.next(value);\n  };\n\n  updateRecordChangeSeconds = (value: number) => {\n    this.recordChangeSeconds.next(value);\n  };\n\n  updatePauseLimit = (value: number) => {\n    this.pauseLimit.next(value);\n  };\n\n  updatePauseRecordCount = (value: number) => {\n    this.pauseRecordCount.next(value);\n  };\n\n  updateCanLaunchRecord = (value: boolean) => {\n    this.canLaunchRecord.next(value);\n  };\n\n  updateStopLaunchRecord = (value: boolean) => {\n    this.stopLaunchRecord.next(value);\n  };\n\n  updateParticipantsAll = (value: Participant[]) => {\n    this.participantsAll.next(value);\n  };\n\n  updateFirstAll = (value: boolean) => {\n    this.firstAll.next(value);\n  };\n\n  updateUpdateMainWindow = (value: boolean) => {\n    this.updateMainWindow.next(value);\n  };\n\n  updateFirst_round = (value: boolean) => {\n    this.first_round.next(value);\n  };\n\n  updateLandScaped = (value: boolean) => {\n    this.landScaped.next(value);\n  };\n\n  updateLock_screen = (value: boolean) => {\n    this.lock_screen.next(value);\n  };\n\n  updateScreenId = (value: string) => {\n    this.screenId.next(value);\n  };\n\n  updateAllVideoStreams = (value: (Participant | Stream)[]) => {\n    this.allVideoStreams.next(value);\n  };\n\n  updateNewLimitedStreams = (value: (Participant | Stream)[]) => {\n    this.newLimitedStreams.next(value);\n  };\n\n  updateNewLimitedStreamsIDs = (value: string[]) => {\n    this.newLimitedStreamsIDs.next(value);\n  };\n\n  updateActiveSounds = (value: string[]) => {\n    this.activeSounds.next(value);\n  };\n\n  updateScreenShareIDStream = (value: string) => {\n    this.screenShareIDStream.next(value);\n  };\n\n  updateScreenShareNameStream = (value: string) => {\n    this.screenShareNameStream.next(value);\n  };\n\n  updateAdminIDStream = (value: string) => {\n    this.adminIDStream.next(value);\n  };\n\n  updateAdminNameStream = (value: string) => {\n    this.adminNameStream.next(value);\n  };\n\n  updateYouYouStream = (value: (Participant | Stream)[]) => {\n    this.youYouStream.next(value);\n  };\n\n  updateYouYouStreamIDs = (value: string[]) => {\n    this.youYouStreamIDs.next(value);\n  };\n\n  updateLocalStream = (value: MediaStream | null) => {\n    this.localStream.next(value);\n  };\n\n  updateRecordStarted = (value: boolean) => {\n    this.recordStarted.next(value);\n  };\n\n  updateRecordResumed = (value: boolean) => {\n    this.recordResumed.next(value);\n  };\n\n  updateRecordPaused = (value: boolean) => {\n    this.recordPaused.next(value);\n  };\n\n  updateRecordStopped = (value: boolean) => {\n    this.recordStopped.next(value);\n  };\n\n  updateAdminRestrictSetting = (value: boolean) => {\n    this.adminRestrictSetting.next(value);\n  };\n\n  updateVideoRequestState = (value: string | null) => {\n    this.videoRequestState.next(value);\n  };\n\n  updateVideoRequestTime = (value: number) => {\n    this.videoRequestTime.next(value);\n  };\n\n  updateVideoAction = (value: boolean) => {\n    this.videoAction.next(value);\n  };\n\n  updateLocalStreamVideo = (value: MediaStream | null) => {\n    this.localStreamVideo.next(value);\n  };\n\n  updateUserDefaultVideoInputDevice = (value: string) => {\n    this.userDefaultVideoInputDevice.next(value);\n  };\n\n  updateCurrentFacingMode = (value: string) => {\n    this.currentFacingMode.next(value);\n  };\n\n  updatePrevFacingMode = (value: string) => {\n    this.prevFacingMode.next(value);\n  };\n\n  updateDefVideoID = (value: string) => {\n    this.defVideoID.next(value);\n  };\n\n  updateAllowed = (value: boolean) => {\n    this.allowed.next(value);\n  };\n\n  updateDispActiveNames = (value: string[]) => {\n    this.dispActiveNames.next(value);\n  };\n\n  updateP_dispActiveNames = (value: string[]) => {\n    this.p_dispActiveNames.next(value);\n  };\n\n  updateActiveNames = (value: string[]) => {\n    this.activeNames.next(value);\n  };\n\n  updatePrevActiveNames = (value: string[]) => {\n    this.prevActiveNames.next(value);\n  };\n\n  updateP_activeNames = (value: string[]) => {\n    this.p_activeNames.next(value);\n  };\n\n  updateMembersReceived = (value: boolean) => {\n    this.membersReceived.next(value);\n  };\n\n  updateDeferScreenReceived = (value: boolean) => {\n    this.deferScreenReceived.next(value);\n  };\n\n  updateHostFirstSwitch = (value: boolean) => {\n    this.hostFirstSwitch.next(value);\n  };\n\n  updateMicAction = (value: boolean) => {\n    this.micAction.next(value);\n  };\n\n  updateScreenAction = (value: boolean) => {\n    this.screenAction.next(value);\n  };\n\n  updateChatAction = (value: boolean) => {\n    this.chatAction.next(value);\n  };\n\n  updateAudioRequestState = (value: string | null) => {\n    this.audioRequestState.next(value);\n  };\n\n  updateScreenRequestState = (value: string | null) => {\n    this.screenRequestState.next(value);\n  };\n\n  updateChatRequestState = (value: string | null) => {\n    this.chatRequestState.next(value);\n  };\n\n  updateAudioRequestTime = (value: number) => {\n    this.audioRequestTime.next(value);\n  };\n\n  updateScreenRequestTime = (value: number) => {\n    this.screenRequestTime.next(value);\n  };\n\n  updateChatRequestTime = (value: number) => {\n    this.chatRequestTime.next(value);\n  };\n\n  updateOldSoundIds = (value: string[]) => {\n    this.oldSoundIds.next(value);\n  };\n\n  updateHostLabel = (value: string) => {\n    this.hostLabel.next(value);\n  };\n\n  updateMainScreenFilled = (value: boolean) => {\n    this.mainScreenFilled.next(value);\n  };\n\n  updateLocalStreamScreen = (value: MediaStream | null) => {\n    this.localStreamScreen.next(value);\n  };\n\n  updateScreenAlreadyOn = (value: boolean) => {\n    this.screenAlreadyOn.next(value);\n  };\n\n  updateChatAlreadyOn = (value: boolean) => {\n    this.chatAlreadyOn.next(value);\n  };\n\n  updateRedirectURL = (value: string) => {\n    this.redirectURL.next(value);\n  };\n\n  updateOldAllStreams = (value: (Participant | Stream)[]) => {\n    this.oldAllStreams.next(value);\n  };\n\n  updateAdminVidID = (value: string) => {\n    this.adminVidID.next(value);\n  };\n\n  updateStreamNames = (value: Stream[]) => {\n    this.streamNames.next(value);\n  };\n\n  updateNon_alVideoStreams = (value: Participant[]) => {\n    this.non_alVideoStreams.next(value);\n  };\n\n  updateSortAudioLoudness = (value: boolean) => {\n    this.sortAudioLoudness.next(value);\n  };\n\n  updateAudioDecibels = (value: AudioDecibels[]) => {\n    this.audioDecibels.next(value);\n  };\n\n  updateMixed_alVideoStreams = (value: (Participant | Stream)[]) => {\n    this.mixed_alVideoStreams.next(value);\n  };\n\n  updateNon_alVideoStreams_muted = (value: Participant[]) => {\n    this.non_alVideoStreams_muted.next(value);\n  };\n\n  updatePaginatedStreams = (value: (Participant | Stream)[][]) => {\n    this.paginatedStreams.next(value);\n  };\n\n  updateLocalStreamAudio = (value: MediaStream | null) => {\n    this.localStreamAudio.next(value);\n  };\n\n  updateDefAudioID = (value: string) => {\n    this.defAudioID.next(value);\n  };\n\n  updateUserDefaultAudioInputDevice = (value: string) => {\n    this.userDefaultAudioInputDevice.next(value);\n  };\n\n  updateUserDefaultAudioOutputDevice = (value: string) => {\n    this.userDefaultAudioOutputDevice.next(value);\n  };\n\n  updatePrevAudioInputDevice = (value: string) => {\n    this.prevAudioInputDevice.next(value);\n  };\n\n  updatePrevVideoInputDevice = (value: string) => {\n    this.prevVideoInputDevice.next(value);\n  };\n\n  updateAudioPaused = (value: boolean) => {\n    this.audioPaused.next(value);\n  };\n\n  updateMainScreenPerson = (value: string) => {\n    this.mainScreenPerson.next(value);\n  };\n\n  updateAdminOnMainScreen = (value: boolean) => {\n    this.adminOnMainScreen.next(value);\n  };\n\n  updateScreenStates = (value: ScreenState[]) => {\n    this.screenStates.next(value);\n  };\n\n  updatePrevScreenStates = (value: ScreenState[]) => {\n    this.prevScreenStates.next(value);\n  };\n\n  updateUpdateDateState = (value: number | null) => {\n    this.updateDateState.next(value);\n  };\n\n  updateLastUpdate = (value: number | null) => {\n    this.lastUpdate.next(value);\n  };\n\n  updateNForReadjustRecord = (value: number) => {\n    this.nForReadjustRecord.next(value);\n  };\n\n  updateFixedPageLimit = (value: number) => {\n    this.fixedPageLimit.next(value);\n  };\n\n  updateRemoveAltGrid = (value: boolean) => {\n    this.removeAltGrid.next(value);\n  };\n\n  updateNForReadjust = (value: number) => {\n    this.nForReadjust.next(value);\n  };\n\n  updateLastReorderTime = (value: number) => {\n    this.lastReorderTime.next(value);\n  };\n\n  updateAudStreamNames = (value: Stream[]) => {\n    this.audStreamNames.next(value);\n  };\n\n  updateCurrentUserPage = (value: number) => {\n    this.currentUserPage.next(value);\n  };\n\n  updateMainHeightWidth = (value: number) => {\n    this.mainHeightWidth.next(value);\n  };\n\n  updatePrevMainHeightWidth = (value: number) => {\n    this.prevMainHeightWidth.next(value);\n  };\n\n  updatePrevDoPaginate = (value: boolean) => {\n    this.prevDoPaginate.next(value);\n  };\n\n  updateDoPaginate = (value: boolean) => {\n    this.doPaginate.next(value);\n  };\n\n  updateShareEnded = (value: boolean) => {\n    this.shareEnded.next(value);\n  };\n\n  updateLStreams = (value: (Participant | Stream)[]) => {\n    this.lStreams.next(value);\n  };\n\n  updateChatRefStreams = (value: (Participant | Stream)[]) => {\n    this.chatRefStreams.next(value);\n  };\n\n  updateControlHeight = (value: number) => {\n    this.controlHeight.next(value);\n  };\n\n  updateIsWideScreen = (value: boolean) => {\n    this.isWideScreen.next(value);\n  };\n\n  updateIsMediumScreen = (value: boolean) => {\n    this.isMediumScreen.next(value);\n  };\n\n  updateIsSmallScreen = (value: boolean) => {\n    this.isSmallScreen.next(value);\n  };\n\n  updateAddGrid = (value: boolean) => {\n    this.addGrid.next(value);\n  };\n\n  updateAddAltGrid = (value: boolean) => {\n    this.addAltGrid.next(value);\n  };\n\n  updateGridRows = (value: number) => {\n    this.gridRows.next(value);\n  };\n\n  updateGridCols = (value: number) => {\n    this.gridCols.next(value);\n  };\n\n  updateAltGridRows = (value: number) => {\n    this.altGridRows.next(value);\n  };\n\n  updateAltGridCols = (value: number) => {\n    this.altGridCols.next(value);\n  };\n\n  updateNumberPages = (value: number) => {\n    this.numberPages.next(value);\n  };\n\n  updateCurrentStreams = (value: (Participant | Stream)[]) => {\n    this.currentStreams.next(value);\n  };\n\n  updateShowMiniView = (value: boolean) => {\n    this.showMiniView.next(value);\n  };\n\n  updateNStream = (value: MediaStream | null) => {\n    this.nStream.next(value);\n  };\n\n  updateDefer_receive = (value: boolean) => {\n    this.defer_receive.next(value);\n  };\n\n  updateAllAudioStreams = (value: (Participant | Stream)[]) => {\n    this.allAudioStreams.next(value);\n  };\n\n  updateRemoteScreenStream = (value: Stream[]) => {\n    this.remoteScreenStream.next(value);\n  };\n\n  updateScreenProducer = (value: Producer | null) => {\n    this.screenProducer.next(value);\n  };\n\n  updateLocalScreenProducer = (value: Producer | null) => {\n    this.localScreenProducer.next(value);\n  };\n\n  updateGotAllVids = (value: boolean) => {\n    this.gotAllVids.next(value);\n  };\n\n  updatePaginationHeightWidth = (value: number) => {\n    this.paginationHeightWidth.next(value);\n  };\n\n  updatePaginationDirection = (value: 'horizontal' | 'vertical') => {\n    this.paginationDirection.next(value);\n  };\n\n  updateGridSizes = (value: GridSizes) => {\n    this.gridSizes.next(value);\n  };\n\n  updateScreenForceFullDisplay = (value: boolean) => {\n    this.screenForceFullDisplay.next(value);\n  };\n\n  updateMainGridStream = (value: CustomMediaComponent[]) => {\n    this.mainGridStream.next(value);\n  };\n\n  updateOtherGridStreams = (value: CustomMediaComponent[][]) => {\n    this.otherGridStreams.next(value);\n  };\n\n  updateAudioOnlyStreams = (value: CustomMediaComponent[]) => {\n    this.audioOnlyStreams.next(value);\n  };\n\n  updateVideoInputs = (value: MediaDeviceInfo[]) => {\n    this.videoInputs.next(value);\n  };\n\n  updateAudioInputs = (value: MediaDeviceInfo[]) => {\n    this.audioInputs.next(value);\n  };\n\n  updateMeetingProgressTime = (value: string) => {\n    this.meetingProgressTime.next(value);\n  };\n\n  updateMeetingElapsedTime = (value: number) => {\n    this.meetingElapsedTime.next(value);\n  };\n\n  updateRef_participants = (value: Participant[]) => {\n    this.ref_participants.next(value);\n  };\n\n  // Messages\n  messages = new BehaviorSubject<Message[]>([]);\n  startDirectMessage = new BehaviorSubject<boolean>(false);\n  directMessageDetails = new BehaviorSubject<Participant | null>(null);\n  showMessagesBadge = new BehaviorSubject<boolean>(false);\n\n  // Event Settings\n  audioSetting = new BehaviorSubject<string>('allow');\n  videoSetting = new BehaviorSubject<string>('allow');\n  screenshareSetting = new BehaviorSubject<string>('allow');\n  chatSetting = new BehaviorSubject<string>('allow');\n\n  // Translation Settings\n  translationSupported = new BehaviorSubject<boolean>(false);\n  translationConfig = new BehaviorSubject<TranslationRoomConfig | null>(null);\n  mySpokenLanguage = new BehaviorSubject<string>('en');\n  mySpokenLanguageEnabled = new BehaviorSubject<boolean>(false);\n  myDefaultOutputLanguage = new BehaviorSubject<string | null>(null);\n  myDefaultListenLanguage = new BehaviorSubject<string | null>(null);\n  listenPreferences = new BehaviorSubject<Map<string, string>>(new Map());\n  translationProducerMap = new BehaviorSubject<TranslationProducerMap>({});\n  activeTranslationProducerIds = new Set<string>();\n  availableTranslationChannels = new BehaviorSubject<\n    Map<string, TranslationChannelAvailability>\n  >(new Map());\n  participantTranslationStates = new BehaviorSubject<Map<string, any>>(new Map());\n  speakerTranslationStates = new BehaviorSubject<\n    Map<string, SpeakerTranslationState>\n  >(new Map());\n\n  // Display Settings\n  displayOption = new BehaviorSubject<string>('media');\n  autoWave = new BehaviorSubject<boolean>(true);\n  forceFullDisplay = new BehaviorSubject<boolean>(true);\n  prevForceFullDisplay = new BehaviorSubject<boolean>(false);\n  prevMeetingDisplayType = new BehaviorSubject<string>('video');\n\n  // Waiting Room\n  waitingRoomFilter = new BehaviorSubject<string>('');\n  waitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>(\n    this.useSeed && this.seedData?.waitingList ? this.seedData.waitingList : [],\n  );\n  waitingRoomCounter = new BehaviorSubject<number>(0);\n  filteredWaitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>(\n    this.useSeed && this.seedData?.waitingList ? this.seedData.waitingList : [],\n  );\n\n  // Requests\n  requestFilter = new BehaviorSubject<string>('');\n  requestList = new BehaviorSubject<Request[]>(\n    this.useSeed && this.seedData?.requests ? this.seedData.requests : [],\n  );\n  requestCounter = new BehaviorSubject<number>(0);\n  filteredRequestList = new BehaviorSubject<Request[]>(\n    this.useSeed && this.seedData?.requests ? this.seedData.requests : [],\n  );\n\n  // Total Requests and Waiting Room\n  totalReqWait = new BehaviorSubject<number>(0);\n\n  // Alerts\n  alertVisible = new BehaviorSubject<boolean>(false);\n  alertMessage = new BehaviorSubject<string>('');\n  alertType = new BehaviorSubject<'success' | 'danger' | 'info' | 'warning'>('success');\n  alertPosition = new BehaviorSubject<\n    'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center'\n  >('top');\n  alertDuration = new BehaviorSubject<number>(3000);\n\n  // Progress Timer\n  progressTimerVisible = new BehaviorSubject<boolean>(true);\n  progressTimerValue = new BehaviorSubject<number>(0);\n\n  // Menu Modals\n  isMenuModalVisible = new BehaviorSubject<boolean>(false);\n  isRecordingModalVisible = new BehaviorSubject<boolean>(false);\n  isSettingsModalVisible = new BehaviorSubject<boolean>(false);\n  isTranslationSettingsModalVisible = new BehaviorSubject<boolean>(false);\n  isRequestsModalVisible = new BehaviorSubject<boolean>(false);\n  isWaitingModalVisible = new BehaviorSubject<boolean>(false);\n  sidebarMessagesTab = new BehaviorSubject<'group' | 'direct'>('group');\n  isCoHostModalVisible = new BehaviorSubject<boolean>(false);\n  isMediaSettingsModalVisible = new BehaviorSubject<boolean>(false);\n  isDisplaySettingsModalVisible = new BehaviorSubject<boolean>(false);\n  // Other Modals\n  isParticipantsModalVisible = new BehaviorSubject<boolean>(false);\n  isMessagesModalVisible = new BehaviorSubject<boolean>(false);\n  isConfirmExitModalVisible = new BehaviorSubject<boolean>(false);\n  isConfirmHereModalVisible = new BehaviorSubject<boolean>(false);\n  private suppressConfirmHereForSession = false;\n  isShareEventModalVisible = new BehaviorSubject<boolean>(false);\n  isLoadingModalVisible = new BehaviorSubject<boolean>(false);\n  activeSidebarContent = new BehaviorSubject<SidebarContent>('none');\n  sidebarNavigationStack = new BehaviorSubject<SidebarPanelContent[]>([]);\n  modernMenuDarkMode = new BehaviorSubject<boolean>(false);\n  private readonly themeStorageKey = 'mediasfu-angular-theme';\n  readonly sidebarEmbeddedModalContentStyle: Partial<CSSStyleDeclaration> = {\n    border: 'none',\n    boxShadow: 'none',\n    background: 'transparent',\n    borderRadius: '0',\n    backdropFilter: 'none',\n  };\n\n  resolvePreferredTheme = (): boolean => {\n    if (typeof window !== 'undefined') {\n      try {\n        const storedTheme = window.localStorage.getItem(this.themeStorageKey);\n        if (storedTheme === 'dark') {\n          return true;\n        }\n        if (storedTheme === 'light') {\n          return false;\n        }\n      } catch {\n        // Ignore storage access failures and fall back to the default room theme.\n      }\n    }\n\n    return true;\n  };\n\n  updateModernThemeDarkMode = (value: boolean) => {\n    this.modernMenuDarkMode.next(value);\n    if (typeof window !== 'undefined') {\n      try {\n        window.localStorage.setItem(this.themeStorageKey, value ? 'dark' : 'light');\n      } catch {\n        // Ignore storage access failures and keep the in-memory theme state.\n      }\n    }\n    this.messageWidget = this.buildMessageWidget();\n    this.updateButtonState('modernThemeDarkMode', value);\n    void this.updateRecordButtons();\n    this.updateControlBroadcastButtons();\n    this.updateControlChatButtons();\n    this.cdr.detectChanges();\n  };\n\n  // Recording Options\n  recordingMediaOptions = new BehaviorSubject<string>('video');\n  recordingAudioOptions = new BehaviorSubject<string>('all');\n  recordingVideoOptions = new BehaviorSubject<string>('all');\n  recordingVideoType = new BehaviorSubject<string>('fullDisplay');\n  recordingVideoOptimized = new BehaviorSubject<boolean>(false);\n  recordingDisplayType = new BehaviorSubject<'video' | 'media' | 'all'>('video');\n  recordingAddHLS = new BehaviorSubject<boolean>(true);\n  recordingNameTags = new BehaviorSubject<boolean>(true);\n  recordingBackgroundColor = new BehaviorSubject<string>('#83c0e9');\n  recordingNameTagsColor = new BehaviorSubject<string>('#ffffff');\n  recordingAddText = new BehaviorSubject<boolean>(false);\n  recordingCustomText = new BehaviorSubject<string>('Add Text');\n  recordingCustomTextPosition = new BehaviorSubject<string>('top');\n  recordingCustomTextColor = new BehaviorSubject<string>('#ffffff');\n  recordingOrientationVideo = new BehaviorSubject<string>('landscape');\n  clearedToResume = new BehaviorSubject<boolean>(true);\n  clearedToRecord = new BehaviorSubject<boolean>(true);\n  recordState = new BehaviorSubject<string>('green');\n  showRecordButtons = new BehaviorSubject<boolean>(false);\n  recordingProgressTime = new BehaviorSubject<string>('00:00:00');\n  audioSwitching = new BehaviorSubject<boolean>(false);\n  videoSwitching = new BehaviorSubject<boolean>(false);\n\n  // Media States\n  videoAlreadyOn = new BehaviorSubject<boolean>(false);\n  audioAlreadyOn = new BehaviorSubject<boolean>(false);\n\n  componentSizes = new BehaviorSubject<ComponentSizes>({\n    mainHeight: 0,\n    otherHeight: 0,\n    mainWidth: 0,\n    otherWidth: 0,\n  });\n\n  // Permissions\n  hasCameraPermission = new BehaviorSubject<boolean>(false);\n  hasAudioPermission = new BehaviorSubject<boolean>(false);\n  panelists = new BehaviorSubject<Participant[]>([]);\n  panelistsFocused = new BehaviorSubject<boolean>(false);\n  muteOthersMic = new BehaviorSubject<boolean>(false);\n  muteOthersCamera = new BehaviorSubject<boolean>(false);\n  permissionConfig = new BehaviorSubject<PermissionConfig | null>(null);\n\n  // Transports\n  transportCreated = new BehaviorSubject<boolean>(false);\n  localTransportCreated = new BehaviorSubject<boolean>(false);\n  transportCreatedVideo = new BehaviorSubject<boolean>(false);\n  transportCreatedAudio = new BehaviorSubject<boolean>(false);\n  transportCreatedScreen = new BehaviorSubject<boolean>(false);\n  producerTransport = new BehaviorSubject<Transport | null>(null);\n  localProducerTransport = new BehaviorSubject<Transport | null>(null);\n  videoProducer = new BehaviorSubject<Producer | null>(null);\n  localVideoProducer = new BehaviorSubject<Producer | null>(null);\n  params = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  videoParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  audioParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  audioProducer = new BehaviorSubject<Producer | null>(null);\n  audioLevel = new BehaviorSubject<number>(0);\n  localAudioProducer = new BehaviorSubject<Producer | null>(null);\n  consumerTransports = new BehaviorSubject<TransportType[]>([]);\n  consumingTransports = new BehaviorSubject<string[]>([]);\n\n  // Polls\n  polls = new BehaviorSubject<Poll[]>(\n    this.useSeed && this.seedData?.polls ? this.seedData.polls : [],\n  );\n  poll = new BehaviorSubject<Poll | null>(null);\n  isPollModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Background\n  customImage = new BehaviorSubject<string>('');\n  selectedImage = new BehaviorSubject<string>('');\n  segmentVideo = new BehaviorSubject<MediaStream | null>(null);\n  selfieSegmentation = new BehaviorSubject<SelfieSegmentation | null>(null);\n  pauseSegmentation = new BehaviorSubject<boolean>(false);\n  processedStream = new BehaviorSubject<MediaStream | null>(null);\n  keepBackground = new BehaviorSubject<boolean>(false);\n  backgroundHasChanged = new BehaviorSubject<boolean>(false);\n  virtualStream = new BehaviorSubject<MediaStream | null>(null);\n  mainCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  prevKeepBackground = new BehaviorSubject<boolean>(false);\n  appliedBackground = new BehaviorSubject<boolean>(false);\n  isBackgroundModalVisible = new BehaviorSubject<boolean>(false);\n  autoClickBackground = new BehaviorSubject<boolean>(false);\n\n  // Breakout Rooms\n  breakoutRooms = new BehaviorSubject<BreakoutParticipant[][]>(\n    this.useSeed && this.seedData?.breakoutRooms ? this.seedData.breakoutRooms : [],\n  );\n  currentRoomIndex = new BehaviorSubject<number>(0);\n  canStartBreakout = new BehaviorSubject<boolean>(false);\n  breakOutRoomStarted = new BehaviorSubject<boolean>(false);\n  breakOutRoomEnded = new BehaviorSubject<boolean>(false);\n  hostNewRoom = new BehaviorSubject<number>(-1);\n  limitedBreakRoom = new BehaviorSubject<BreakoutParticipant[]>([]);\n  mainRoomsLength = new BehaviorSubject<number>(0);\n  memberRoom = new BehaviorSubject<number>(-1);\n  isBreakoutRoomsModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Whiteboard\n  whiteboardUsers = new BehaviorSubject<WhiteboardUser[]>(\n    this.useSeed && this.seedData?.whiteboardUsers ? this.seedData.whiteboardUsers : [],\n  );\n  currentWhiteboardIndex = new BehaviorSubject<number>(0);\n  canStartWhiteboard = new BehaviorSubject<boolean>(false);\n  whiteboardStarted = new BehaviorSubject<boolean>(false);\n  whiteboardEnded = new BehaviorSubject<boolean>(false);\n  whiteboardLimit = new BehaviorSubject<number>(4);\n  isWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\n  isConfigureWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\n  shapes = new BehaviorSubject<Shape[]>([]);\n  useImageBackground = new BehaviorSubject<boolean>(true);\n  redoStack = new BehaviorSubject<Shape[]>([]);\n  undoStack = new BehaviorSubject<string[]>([]);\n  canvasStream = new BehaviorSubject<MediaStream | null>(null);\n  canvasWhiteboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\n\n  // Screenboard\n  canvasScreenboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  processedScreenStream = new BehaviorSubject<MediaStream | null>(null);\n  annotateScreenStream = new BehaviorSubject<boolean>(false);\n  mainScreenCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  isScreenboardModalVisible = new BehaviorSubject<boolean>(false);\n\n  //state variables for the control buttons\n  micActive = new BehaviorSubject<boolean>(\n    this.audioAlreadyOn.value ? this.audioAlreadyOn.value : false,\n  );\n  videoActive = new BehaviorSubject<boolean>(\n    this.videoAlreadyOn.value ? this.videoAlreadyOn.value : false,\n  );\n  screenShareActive = new BehaviorSubject<boolean>(false);\n  endCallActive = new BehaviorSubject<boolean>(false);\n  participantsActive = new BehaviorSubject<boolean>(false);\n  menuActive = new BehaviorSubject<boolean>(false);\n  commentsActive = new BehaviorSubject<boolean>(false);\n\n  // Update functions\n  updateMessages = (value: Message[]) => {\n    this.messages.next(value);\n  };\n\n  updateStartDirectMessage = (value: boolean) => {\n    this.startDirectMessage.next(value);\n  };\n\n  updateDirectMessageDetails = (value: Participant | null) => {\n    this.directMessageDetails.next(value);\n  };\n\n  updateShowMessagesBadge = (value: boolean) => {\n    this.showMessagesBadge.next(value);\n  };\n\n  updateAudioSetting = (value: string) => {\n    this.audioSetting.next(value);\n  };\n\n  updateVideoSetting = (value: string) => {\n    this.videoSetting.next(value);\n  };\n\n  updateScreenshareSetting = (value: string) => {\n    this.screenshareSetting.next(value);\n  };\n\n  updateChatSetting = (value: string) => {\n    this.chatSetting.next(value);\n  };\n\n  updateDisplayOption = (value: string) => {\n    this.displayOption.next(value);\n  };\n\n  updateAutoWave = (value: boolean) => {\n    this.autoWave.next(value);\n  };\n\n  updateForceFullDisplay = (value: boolean) => {\n    this.forceFullDisplay.next(value);\n  };\n\n  updateShowSubtitlesOnCards = (value: boolean) => {\n    this.liveSubtitleService.setShowSubtitlesOnCards(value);\n  };\n\n  private getShowSubtitlesOnCardsState(): boolean {\n    return this.liveSubtitleService?.getShowSubtitlesOnCards?.() ?? true;\n  }\n\n  updatePrevForceFullDisplay = (value: boolean) => {\n    this.prevForceFullDisplay.next(value);\n  };\n\n  updatePrevMeetingDisplayType = (value: string) => {\n    this.prevMeetingDisplayType.next(value);\n  };\n\n  updateWaitingRoomCounter = (value: number) => {\n    this.waitingRoomCounter.next(value);\n  };\n\n  updateWaitingRoomFilter = (value: string) => {\n    this.waitingRoomFilter.next(value);\n  };\n\n  updateWaitingRoomList = (value: WaitingRoomParticipant[]) => {\n    this.waitingRoomList.next(value);\n    this.filteredWaitingRoomList.next(value);\n    this.waitingRoomCounter.next(value.length);\n  };\n\n  onWaitingRoomFilterChange = (value: string) => {\n    if (value !== '' && value.length > 0) {\n      const filteredWaitingRoom = this.waitingRoomList\n        .getValue()\n        .filter((waitingRoom: WaitingRoomParticipant) => {\n          return waitingRoom.name.toLowerCase().includes(value.toLowerCase());\n        });\n      this.filteredWaitingRoomList.next(filteredWaitingRoom);\n      this.waitingRoomCounter.next(filteredWaitingRoom.length);\n    } else {\n      this.filteredWaitingRoomList.next(this.waitingRoomList.getValue());\n      this.waitingRoomCounter.next(this.waitingRoomList.getValue().length);\n    }\n  };\n\n  onWaitingRoomClose = () => {\n    this.updateIsWaitingModalVisible(false);\n  };\n\n  updateRequestCounter = (value: number) => {\n    this.requestCounter.next(value);\n  };\n\n  updateRequestFilter = (value: string) => {\n    this.requestFilter.next(value);\n  };\n\n  updateRequestList = (value: Request[]) => {\n    this.requestList.next(value);\n    this.filteredRequestList.next(value);\n    this.requestCounter.next(value.length);\n  };\n\n  onRequestFilterChange = (value: string) => {\n    if (value !== '' && value.length > 0) {\n      const filteredRequest = this.requestList.getValue().filter((request: Request) => {\n        return request?.name?.toLowerCase().includes(value.toLowerCase());\n      });\n      this.filteredRequestList.next(filteredRequest);\n      this.requestCounter.next(filteredRequest.length);\n    } else {\n      this.filteredRequestList.next(this.requestList.getValue());\n      this.requestCounter.next(this.requestList.getValue().length);\n    }\n  };\n\n  onRequestClose = () => {\n    this.updateIsRequestsModalVisible(false);\n  };\n\n  updateTotalReqWait = (value: number) => {\n    this.totalReqWait.next(value);\n  };\n\n  updateAlertVisible = (value: boolean) => {\n    this.alertVisible.next(value);\n  };\n\n  updateAlertMessage = (value: string) => {\n    this.alertMessage.next(value);\n  };\n\n  updateAlertType = (value: 'success' | 'danger' | 'info' | 'warning') => {\n    this.alertType.next(value);\n  };\n\n  updateAlertPosition = (\n    value: 'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center',\n  ) => {\n    this.alertPosition.next(value);\n  };\n\n  updateAlertDuration = (value: number) => {\n    this.alertDuration.next(value);\n  };\n\n  updateProgressTimerVisible = (value: boolean) => {\n    this.progressTimerVisible.next(value);\n  };\n\n  updateProgressTimerValue = (value: number) => {\n    this.progressTimerValue.next(value);\n  };\n\n  updateIsMenuModalVisible = (value: boolean) => {\n    if (this.shouldUseSidebar()) {\n      if (value) {\n        this.updateActiveSidebarContent(\n          'menu',\n          this.activeSidebarContent.value !== 'none' && this.activeSidebarContent.value !== 'menu',\n        );\n        return;\n      }\n\n      if (this.activeSidebarContent.value === 'menu') {\n        this.closeSidebar();\n        return;\n      }\n    }\n\n    if (value) {\n      this.resetSidebarManagedModals();\n      this.activeSidebarContent.next('menu');\n      this.sidebarNavigationStack.next([]);\n      this.isMenuModalVisible.next(true);\n      this.cdr.detectChanges();\n      return;\n    }\n\n    if (this.isMenuModalVisible.value) {\n      this.resetSidebarManagedModals();\n      this.activeSidebarContent.next('none');\n      this.sidebarNavigationStack.next([]);\n      this.cdr.detectChanges();\n      return;\n    }\n\n    this.isMenuModalVisible.next(false);\n  };\n\n  private initialControlHeight(): number {\n    const currentHeight = typeof window !== 'undefined' && window.innerHeight > 0\n      ? window.innerHeight\n      : 667;\n\n    return Number((40 / currentHeight).toFixed(3));\n  }\n\n  shouldUseSidebar = (): boolean => {\n    return (\n      window.innerWidth >= 1200 &&\n      this.checkOrientation() === 'landscape'\n    );\n  };\n\n  private isMobileMenuShellActive = (): boolean => {\n    return !this.shouldUseSidebar() && this.isMenuModalVisible.value;\n  };\n\n  private isMobileMenuPanelContent = (content: SidebarPanelContent): boolean => {\n    switch (content) {\n      case 'shareEvent':\n      case 'recording':\n      case 'eventSettings':\n      case 'translation':\n      case 'requests':\n      case 'waiting':\n      case 'coHost':\n      case 'mediaSettings':\n      case 'background':\n      case 'displaySettings':\n      case 'poll':\n      case 'breakoutRooms':\n      case 'configureWhiteboard':\n        return true;\n      default:\n        return false;\n    }\n  };\n\n  mobileMenuShellContent = (): SidebarContent => {\n    if (!this.isMobileMenuShellActive()) {\n      return 'none';\n    }\n\n    if (\n      this.activeSidebarContent.value === 'none' ||\n      this.activeSidebarContent.value === 'menu'\n    ) {\n      return 'menu';\n    }\n\n    return this.isMobileMenuPanelContent(this.activeSidebarContent.value)\n      ? this.activeSidebarContent.value\n      : 'menu';\n  };\n\n  private updateActiveMobileMenuContent = async (\n    content: SidebarPanelContent,\n    pushCurrent = false,\n  ) => {\n    if (!this.isMobileMenuShellActive() || !this.isMobileMenuPanelContent(content)) {\n      return;\n    }\n\n    const current = this.mobileMenuShellContent();\n    if (current === content) {\n      return;\n    }\n\n    if (!(await this.prepareSidebarContent(content))) {\n      return;\n    }\n\n    if (pushCurrent && current !== 'none') {\n      this.sidebarNavigationStack.next([...this.sidebarNavigationStack.value, current]);\n    } else if (!pushCurrent) {\n      this.sidebarNavigationStack.next([]);\n    }\n\n    this.activeSidebarContent.next(content);\n    this.resetSidebarManagedModals({ preserveMenuModal: true });\n    this.isMenuModalVisible.next(true);\n    this.cdr.detectChanges();\n  };\n\n  isSidebarVisible = (): boolean => {\n    return this.shouldUseSidebar() && this.activeSidebarContent.value !== 'none';\n  };\n\n  sidebarWidth = (): number => {\n    const preferredWidth = Math.round(window.innerWidth * 0.22);\n    return Math.max(304, Math.min(420, preferredWidth));\n  };\n\n  mainScreenWidthFraction = (): number => {\n    if (!this.isSidebarVisible()) {\n      return 1;\n    }\n\n    const availableWidth = window.innerWidth - this.sidebarWidth();\n    return Math.max(0, availableWidth / window.innerWidth);\n  };\n\n  subAspectWidthFraction = (): number => 1;\n\n  private sidebarTitleForContent = (content: SidebarContent): string => {\n    switch (content) {\n      case 'participants':\n        return 'Participants';\n      case 'messages':\n        return 'Messages';\n      case 'menu':\n        return 'Menu';\n      case 'shareEvent':\n        return 'Share Event';\n      case 'recording':\n        return 'Recording';\n      case 'eventSettings':\n        return 'Event Settings';\n      case 'translation':\n        return 'Translation';\n      case 'requests':\n        return 'Requests';\n      case 'waiting':\n        return 'Waiting Room';\n      case 'coHost':\n        return 'Co-host';\n      case 'mediaSettings':\n        return 'Media Settings';\n      case 'background':\n        return 'Virtual Background';\n      case 'displaySettings':\n        return 'Display Settings';\n      case 'poll':\n        return 'Polls';\n      case 'breakoutRooms':\n        return 'Breakout Rooms';\n      case 'configureWhiteboard':\n        return 'Whiteboard';\n      default:\n        return 'Panel';\n    }\n  };\n\n  sidebarTitle = (): string => this.sidebarTitleForContent(this.activeSidebarContent.value);\n\n  mobileMenuUsesSharedHeader = (): boolean => {\n    switch (this.mobileMenuShellContent()) {\n      case 'menu':\n      case 'shareEvent':\n      case 'recording':\n      case 'eventSettings':\n      case 'requests':\n      case 'waiting':\n      case 'coHost':\n      case 'mediaSettings':\n      case 'displaySettings':\n      case 'poll':\n        return true;\n      default:\n        return false;\n    }\n  };\n\n  mobileMenuShowsBackButton = (): boolean => {\n    return (\n      this.mobileMenuUsesSharedHeader() &&\n      this.mobileMenuShellContent() !== 'menu' &&\n      this.sidebarNavigationStack.value.length > 0\n    );\n  };\n\n  sidebarBackLabel = (): string => {\n    const previous = this.sidebarNavigationStack.value[this.sidebarNavigationStack.value.length - 1];\n    return previous ? `Back to ${this.sidebarTitleForContent(previous)}` : 'Back';\n  };\n\n  sidebarBadgeText = (): number | null => {\n    switch (this.activeSidebarContent.value) {\n      case 'participants':\n        return this.filteredParticipants.value.length;\n      case 'requests':\n        return this.requestCounter.value;\n      case 'waiting':\n        return this.waitingRoomCounter.value;\n      default:\n        return null;\n    }\n  };\n\n  sidebarPlaceholderCopy = (): string => {\n    switch (this.activeSidebarContent.value) {\n      case 'participants':\n        return 'Desktop sidebar plumbing is active. The modern participants panel will render here in the next slice while mobile keeps the classic modal path.';\n      case 'messages':\n        return 'Desktop sidebar plumbing is active. The modern messages panel will render here in the next slice while mobile keeps the classic modal path.';\n      case 'menu':\n        return 'Desktop sidebar plumbing is active. Menu-launched panels will route through this shell on wide landscape layouts while smaller screens continue using the classic modal flow.';\n      case 'translation':\n      case 'background':\n      case 'breakoutRooms':\n      case 'configureWhiteboard':\n        return 'Desktop sidebar plumbing is active. This panel now renders inside the shared sidebar shell on wide landscape layouts.';\n      default:\n        return 'Desktop sidebar plumbing is active.';\n    }\n  };\n\n  sidebarThemeVars = (): Record<string, string> => {\n    if (this.modernMenuDarkMode.value) {\n      return {\n        '--ms-modern-panel-surface-elevated': 'rgba(15, 27, 49, 0.9)',\n        '--ms-modern-panel-surface': 'rgba(10, 18, 33, 0.82)',\n        '--ms-modern-text-primary': '#f8fafc',\n        '--ms-modern-text-secondary': 'rgba(226, 232, 240, 0.78)',\n        '--ms-modern-text-muted': 'rgba(203, 213, 225, 0.7)',\n        '--ms-modern-border-subtle': 'rgba(148, 163, 184, 0.18)',\n        '--ms-modern-border-strong': 'rgba(96, 165, 250, 0.32)',\n        '--ms-modern-accent-strong': '#8bdbff',\n        '--ms-modern-shadow-panel': '0 24px 64px rgba(2, 8, 23, 0.3)',\n      };\n    }\n\n    return {\n      '--ms-modern-panel-surface-elevated': 'rgba(255, 255, 255, 0.94)',\n      '--ms-modern-panel-surface': 'rgba(255, 255, 255, 0.82)',\n      '--ms-modern-text-primary': '#10233f',\n      '--ms-modern-text-secondary': 'rgba(16, 35, 63, 0.78)',\n      '--ms-modern-text-muted': 'rgba(59, 78, 104, 0.72)',\n      '--ms-modern-border-subtle': 'rgba(120, 143, 173, 0.28)',\n      '--ms-modern-border-strong': 'rgba(46, 108, 188, 0.34)',\n      '--ms-modern-accent-strong': '#0d5ca8',\n      '--ms-modern-shadow-panel': '0 24px 64px rgba(14, 30, 53, 0.16)',\n    };\n  };\n\n  private resetSidebarManagedModals = (\n    options: { preserveMenuModal?: boolean } = {},\n  ) => {\n    if (!options.preserveMenuModal) {\n      this.isMenuModalVisible.next(false);\n    }\n    this.isMessagesModalVisible.next(false);\n    this.isParticipantsModalVisible.next(false);\n    this.isShareEventModalVisible.next(false);\n    this.isRecordingModalVisible.next(false);\n    this.isSettingsModalVisible.next(false);\n    this.isTranslationSettingsModalVisible.next(false);\n    this.isRequestsModalVisible.next(false);\n    this.isWaitingModalVisible.next(false);\n    this.isCoHostModalVisible.next(false);\n    this.isMediaSettingsModalVisible.next(false);\n    this.isBackgroundModalVisible.next(false);\n    this.isDisplaySettingsModalVisible.next(false);\n    this.isPollModalVisible.next(false);\n    this.isBreakoutRoomsModalVisible.next(false);\n    this.isConfigureWhiteboardModalVisible.next(false);\n  };\n\n  private prepareSidebarMediaSettings = async (): Promise<boolean> => {\n    const mediaDevicesApi = typeof navigator !== 'undefined' ? navigator.mediaDevices : undefined;\n\n    if (typeof mediaDevicesApi?.enumerateDevices !== 'function') {\n      return true;\n    }\n\n    void this.launchMediaSettings.launchMediaSettings({\n      updateIsMediaSettingsModalVisible: () => undefined,\n      isMediaSettingsModalVisible: false,\n      audioInputs: this.audioInputs.value,\n      videoInputs: this.videoInputs.value,\n      updateAudioInputs: this.updateAudioInputs.bind(this),\n      updateVideoInputs: this.updateVideoInputs.bind(this),\n    }).catch((error) => {\n      console.log('Error preparing media settings sidebar', error);\n    });\n\n    return true;\n  };\n\n  private prepareSidebarContent = async (content: SidebarPanelContent): Promise<boolean> => {\n    if (content === 'mediaSettings') {\n      return this.prepareSidebarMediaSettings();\n    }\n\n    if (content === 'recording') {\n      let shouldOpen = false;\n\n      this.launchRecording.launchRecording({\n        updateIsRecordingModalVisible: (visible: boolean) => {\n          shouldOpen = visible;\n        },\n        isRecordingModalVisible: false,\n        showAlert: this.showAlert.bind(this),\n        stopLaunchRecord: this.stopLaunchRecord.value,\n        canLaunchRecord: this.canLaunchRecord.value,\n        recordingAudioSupport: this.recordingAudioSupport.value,\n        recordingVideoSupport: this.recordingVideoSupport.value,\n        updateCanRecord: this.updateCanRecord.bind(this),\n        updateClearedToRecord: this.updateClearedToRecord.bind(this),\n        recordStarted: this.recordStarted.value,\n        recordPaused: this.recordPaused.value,\n        localUIMode: this.localUIMode.value,\n      });\n\n      return shouldOpen;\n    }\n\n    return true;\n  };\n\n  openSidebarBackground = () => {\n    if (this.isMobileMenuShellActive()) {\n      void this.updateActiveMobileMenuContent('background', true);\n      return;\n    }\n\n    void this.updateActiveSidebarContent('background', true);\n  };\n\n  private openMenuPanelContent = (content: SidebarPanelContent): boolean => {\n    if (this.shouldUseSidebar()) {\n      void this.updateActiveSidebarContent(\n        content,\n        this.activeSidebarContent.value !== 'none' && this.activeSidebarContent.value !== content,\n      );\n      return true;\n    }\n\n    if (this.isMobileMenuShellActive()) {\n      void this.updateActiveMobileMenuContent(\n        content,\n        this.mobileMenuShellContent() !== 'none' && this.mobileMenuShellContent() !== content,\n      );\n      return true;\n    }\n\n    return false;\n  };\n\n  private handleSidebarModalVisibility = (\n    content: SidebarPanelContent,\n    value: boolean,\n    options: {\n      onOpen?: () => void;\n      onClose?: () => void;\n    } = {},\n  ): boolean => {\n    const shouldUseSidebar = this.shouldUseSidebar();\n    const shouldUseMobileMenuShell =\n      !shouldUseSidebar && this.isMobileMenuShellActive() && this.isMobileMenuPanelContent(content);\n\n    if (!shouldUseSidebar && !shouldUseMobileMenuShell) {\n      return false;\n    }\n\n    if (value) {\n      options.onOpen?.();\n\n      if (shouldUseSidebar) {\n        void this.updateActiveSidebarContent(\n          content,\n          this.activeSidebarContent.value !== 'none' && this.activeSidebarContent.value !== content,\n        );\n      } else {\n        void this.updateActiveMobileMenuContent(\n          content,\n          this.mobileMenuShellContent() !== 'none' && this.mobileMenuShellContent() !== content,\n        );\n      }\n\n      return true;\n    }\n\n    if (this.activeSidebarContent.value === content) {\n      if (this.sidebarNavigationStack.value.length > 0) {\n        this.sidebarNavigateBack();\n      } else if (shouldUseSidebar) {\n        this.closeSidebar();\n      } else {\n        this.activeSidebarContent.next('menu');\n        this.cdr.detectChanges();\n      }\n      options.onClose?.();\n      return true;\n    }\n\n    return false;\n  };\n\n  closeSidebar = () => {\n    this.resetSidebarManagedModals();\n    this.activeSidebarContent.next('none');\n    this.sidebarNavigationStack.next([]);\n    this.cdr.detectChanges();\n  };\n\n  updateActiveSidebarContent = async (\n    content: SidebarPanelContent,\n    pushCurrent = false,\n  ) => {\n    if (!this.shouldUseSidebar()) {\n      return;\n    }\n\n    const current = this.activeSidebarContent.value;\n    if (current === content) {\n      this.closeSidebar();\n      return;\n    }\n\n    if (!(await this.prepareSidebarContent(content))) {\n      return;\n    }\n\n    if (pushCurrent && current !== 'none') {\n      this.sidebarNavigationStack.next([...this.sidebarNavigationStack.value, current]);\n    } else if (!pushCurrent) {\n      this.sidebarNavigationStack.next([]);\n    }\n\n    this.activeSidebarContent.next(content);\n    this.resetSidebarManagedModals();\n    this.cdr.detectChanges();\n  };\n\n  preferredSidebarMessagesTab = (): 'group' | 'direct' => {\n    if (this.startDirectMessage.value || this.directMessageDetails.value) {\n      return 'direct';\n    }\n\n    return this.eventType.value === 'webinar' || this.eventType.value === 'conference'\n      ? 'direct'\n      : 'group';\n  };\n\n  updateSidebarMessagesTab = (value: 'group' | 'direct') => {\n    this.sidebarMessagesTab.next(value);\n    if (value === 'group') {\n      this.updateStartDirectMessage(false);\n    }\n  };\n\n  sidebarDirectMessages = (): Message[] => {\n    let chatValue = false;\n    try {\n      chatValue =\n        this.coHostResponsibility.value.find((item: any) => item.name == 'chat')?.value || false;\n    } catch {\n      chatValue = false;\n    }\n\n    return this.messages.value.filter(\n      (message) =>\n        !message.group &&\n        (\n          message.sender == this.member.value ||\n          message.receivers.includes(this.member.value) ||\n          this.islevel.value == '2' ||\n          (this.coHost.value == this.member.value && chatValue == true)\n        ),\n    );\n  };\n\n  sidebarGroupMessages = (): Message[] => {\n    return this.messages.value.filter((message) => message.group);\n  };\n\n  canShowSidebarParticipantList = (): boolean => {\n    let participantsValue = false;\n    try {\n      participantsValue =\n        this.coHostResponsibility.value.find((item: any) => item.name === 'participants')?.value ||\n        false;\n    } catch {\n      participantsValue = false;\n    }\n\n    return (\n      this.islevel.value === '2' ||\n      (this.coHost.value === this.member.value && participantsValue === true)\n    );\n  };\n\n  handleSidebarParticipantFilter = (event: Event) => {\n    const value = (event.target as HTMLInputElement).value;\n    this.onParticipantsFilterChange(value);\n    this.cdr.detectChanges();\n  };\n\n  sidebarNavigateBack = () => {\n    const nextStack = [...this.sidebarNavigationStack.value];\n    const previous = nextStack.pop();\n\n    if (!previous) {\n      this.closeSidebar();\n      return;\n    }\n\n    this.sidebarNavigationStack.next(nextStack);\n    this.activeSidebarContent.next(previous);\n    this.cdr.detectChanges();\n  };\n\n  updateIsRecordingModalVisible = (value: boolean) => {\n    if (\n      this.handleSidebarModalVisibility('recording', value, {\n        onOpen: () => {\n          this.updateConfirmedToRecord(false);\n        },\n        onClose: () => {\n          if (\n            this.clearedToRecord.getValue() &&\n            this.clearedToResume.getValue() &&\n            this.recordStarted.getValue()\n          ) {\n            this.updateShowRecordButtons(true);\n          }\n        },\n      })\n    ) {\n      return;\n    }\n\n    this.isRecordingModalVisible.next(value);\n    if (value) {\n      this.updateConfirmedToRecord(false);\n    } else {\n      if (\n        this.clearedToRecord.getValue() &&\n        this.clearedToResume.getValue() &&\n        this.recordStarted.getValue()\n      ) {\n        this.updateShowRecordButtons(true);\n      }\n    }\n  };\n\n  updateIsSettingsModalVisible = (value: boolean) => {\n    if (this.handleSidebarModalVisibility('eventSettings', value)) {\n      return;\n    }\n\n    this.isSettingsModalVisible.next(value);\n  };\n\n  updateTranslationSupported = (value: boolean) => {\n    this.translationSupported.next(value);\n    if (!value) {\n      this.translationConfig.next(null);\n    }\n  };\n\n  updateTranslationConfig = (value: TranslationRoomConfig | null) => {\n    this.translationConfig.next(value);\n  };\n\n  updateMySpokenLanguage = (value: string) => {\n    this.mySpokenLanguage.next(value);\n  };\n\n  updateMySpokenLanguageEnabled = (value: boolean) => {\n    this.mySpokenLanguageEnabled.next(value);\n  };\n\n  updateMyDefaultOutputLanguage = (value: string | null) => {\n    this.myDefaultOutputLanguage.next(value);\n  };\n\n  updateMyDefaultListenLanguage = (value: string | null) => {\n    this.myDefaultListenLanguage.next(value);\n  };\n\n  updateListenPreferences = (\n    value: Map<string, string> | ((prev: Map<string, string>) => Map<string, string>)\n  ) => {\n    this.listenPreferences.next(\n      typeof value === 'function' ? value(this.listenPreferences.value) : value,\n    );\n  };\n\n  updateTranslationProducerMap = (\n    value:\n      | TranslationProducerMap\n      | ((prev: TranslationProducerMap) => TranslationProducerMap)\n  ) => {\n    this.translationProducerMap.next(\n      typeof value === 'function' ? value(this.translationProducerMap.value) : value,\n    );\n  };\n\n  updateAvailableTranslationChannels = (\n    speakerId: string,\n    languages: string[],\n    originalProducerId: string,\n  ) => {\n    const next = new Map(this.availableTranslationChannels.value);\n    next.set(speakerId, { languages, originalProducerId });\n    this.availableTranslationChannels.next(next);\n  };\n\n  updateParticipantTranslationState = (memberId: string, state: any) => {\n    const next = new Map(this.participantTranslationStates.value);\n    next.set(memberId, state);\n    this.participantTranslationStates.next(next);\n  };\n\n  updateSpeakerTranslationState = (\n    speakerId: string,\n    outputLanguage: string | null,\n    originalProducerId: string,\n    options: SpeakerTranslationStateUpdateOptions = {},\n  ) => {\n    const next = new Map(this.speakerTranslationStates.value);\n\n    if (outputLanguage) {\n      next.set(speakerId, {\n        speakerId,\n        speakerName: options.speakerName ?? speakerId,\n        inputLanguage: options.inputLanguage ?? 'en',\n        outputLanguage,\n        originalProducerId,\n        enabled: options.enabled ?? true,\n      });\n    } else {\n      next.delete(speakerId);\n    }\n\n    this.speakerTranslationStates.next(next);\n  };\n\n  private syncSpeakerTranslationStatesFromMembers = (members: Participant[]) => {\n    members.forEach((participant) => {\n      const translationParticipant = participant as TranslationAwareParticipant;\n      const speakerId = translationParticipant.name;\n\n      if (!speakerId || speakerId === this.member.value) {\n        return;\n      }\n\n      if (\n        translationParticipant.translationEnabled &&\n        translationParticipant.translationDefaultOutputLanguage &&\n        translationParticipant.translationOriginalProducerId\n      ) {\n        this.updateSpeakerTranslationState(\n          speakerId,\n          translationParticipant.translationDefaultOutputLanguage,\n          translationParticipant.translationOriginalProducerId,\n          {\n            speakerName: speakerId,\n            inputLanguage: translationParticipant.translationInputLanguage ?? 'en',\n            enabled: true,\n          },\n        );\n      }\n    });\n  };\n\n  private getTranslationConsumerSwitchParameters = () => ({\n    consumerTransports: this.consumerTransports.value,\n    roomName: this.roomName.value,\n    member: this.member.value,\n    updateConsumerTransports: this.updateConsumerTransports.bind(this),\n    breakOutRoomStarted: this.breakOutRoomStarted.value,\n    breakOutRoomEnded: this.breakOutRoomEnded.value,\n    breakoutRooms: this.breakoutRooms.value,\n    limitedBreakRoom: this.limitedBreakRoom.value,\n    participants: this.participants.value,\n    ref_participants: this.ref_participants.value,\n    islevel: this.islevel.value,\n    eventType: this.eventType.value,\n    hostNewRoom: this.hostNewRoom.value,\n    speakerTranslationStates: this.speakerTranslationStates.value,\n  });\n\n  private resolveOriginalProducerIdForSpeaker = (speakerId: string): string | null => {\n    const activeSpeakerState = this.speakerTranslationStates.value.get(speakerId);\n    if (activeSpeakerState?.originalProducerId) {\n      return activeSpeakerState.originalProducerId;\n    }\n\n    const availableChannel = this.availableTranslationChannels.value.get(speakerId);\n    if (availableChannel?.originalProducerId) {\n      return availableChannel.originalProducerId;\n    }\n\n    return this.translationConsumerSwitch.findOriginalProducerForSpeaker(\n      speakerId,\n      this.allAudioStreams.value as Array<{ producerId: string; name?: string }>,\n    );\n  };\n\n  private startConsumingTranslation = async (\n    producerId: string,\n    speakerId: string,\n    language: string,\n    originalProducerId?: string,\n    nsock?: Socket,\n  ) => {\n    const activeSocket = nsock ?? this.socket.value;\n    if (!activeSocket) {\n      return;\n    }\n\n    if (originalProducerId) {\n      const existingTranslations = this.translationProducerMap.value?.[originalProducerId];\n      if (existingTranslations) {\n        const languagesToClose: string[] = [];\n\n        for (const [existingLanguage, existingProducerId] of Object.entries(existingTranslations)) {\n          if (\n            existingProducerId === producerId ||\n            existingLanguage.toLowerCase() === language.toLowerCase()\n          ) {\n            continue;\n          }\n\n          await this.stopConsumingTranslationProducer(existingProducerId);\n          languagesToClose.push(existingLanguage);\n        }\n\n        if (languagesToClose.length > 0) {\n          this.updateTranslationProducerMap((prev) => {\n            const next = { ...prev };\n            const currentMap = { ...(next[originalProducerId] || {}) };\n\n            languagesToClose.forEach((existingLanguage) => {\n              delete currentMap[existingLanguage];\n            });\n\n            if (Object.keys(currentMap).length === 0) {\n              delete next[originalProducerId];\n            } else {\n              next[originalProducerId] = currentMap;\n            }\n\n            return next;\n          });\n        }\n      }\n    }\n\n    if (originalProducerId) {\n      await this.pauseOriginalTranslationProducer(originalProducerId, speakerId);\n    }\n\n    this.activeTranslationProducerIds.add(producerId);\n\n    const parameters = {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n      activeTranslationProducerIds: this.activeTranslationProducerIds,\n      speakerTranslationStates: this.speakerTranslationStates.value,\n    };\n\n    await this.signalNewConsumerTransport.signalNewConsumerTransport({\n      remoteProducerId: producerId,\n      islevel: this.islevel.value,\n      nsock: activeSocket,\n      parameters,\n    });\n\n    if (originalProducerId) {\n      this.updateTranslationProducerMap((prev) => ({\n        ...prev,\n        [originalProducerId]: {\n          ...(prev[originalProducerId] || {}),\n          [language]: producerId,\n        },\n      }));\n    }\n  };\n\n  private pauseTranslatedOriginalsForMembers = async (members: Participant[]) => {\n    for (const participant of members) {\n      const translationParticipant = participant as TranslationAwareParticipant;\n      const speakerId = translationParticipant.name;\n\n      if (\n        !speakerId ||\n        speakerId === this.member.value ||\n        !translationParticipant.translationEnabled ||\n        !translationParticipant.translationDefaultOutputLanguage ||\n        !translationParticipant.translationOriginalProducerId\n      ) {\n        continue;\n      }\n\n      await this.pauseOriginalTranslationProducer(\n        translationParticipant.translationOriginalProducerId,\n        speakerId,\n      );\n    }\n  };\n\n  private pauseOriginalTranslationProducer = async (\n    originalProducerId: string,\n    speakerId: string,\n  ) => {\n    await this.translationConsumerSwitch.pauseOriginalProducer({\n      originalProducerId,\n      speakerId,\n      parameters: this.getTranslationConsumerSwitchParameters(),\n    });\n  };\n\n  private resumeOriginalTranslationProducer = async (\n    originalProducerId: string,\n    speakerId: string,\n  ) => {\n    await this.translationConsumerSwitch.resumeOriginalProducer({\n      originalProducerId,\n      speakerId,\n      parameters: this.getTranslationConsumerSwitchParameters(),\n    });\n  };\n\n  private stopConsumingTranslationProducer = async (producerId: string) => {\n    const transportIndex = this.consumerTransports.value.findIndex(\n      (transport) => transport.producerId === producerId,\n    );\n\n    if (transportIndex === -1) {\n      return;\n    }\n\n    const transport = this.consumerTransports.value[transportIndex];\n\n    if (transport.socket_ && transport.serverConsumerTransportId) {\n      transport.socket_.emit(\n        'consumer-close',\n        { serverConsumerId: transport.serverConsumerTransportId },\n        () => {},\n      );\n    }\n\n    transport.consumer?.close();\n\n    const updatedConsumerTransports = this.consumerTransports.value.filter(\n      (_, index) => index !== transportIndex,\n    );\n    this.updateConsumerTransports(updatedConsumerTransports);\n    this.updateConsumingTransports(\n      this.consumingTransports.value.filter((activeProducerId) => activeProducerId !== producerId),\n    );\n    this.activeTranslationProducerIds.delete(producerId);\n  };\n\n  private stopConsumingTranslationSelection = async (\n    speakerId: string,\n    language: string,\n  ) => {\n    const originalProducerId = this.resolveOriginalProducerIdForSpeaker(speakerId);\n    if (!originalProducerId) {\n      return;\n    }\n\n    const producerId = this.translationProducerMap.value?.[originalProducerId]?.[language];\n    if (!producerId) {\n      return;\n    }\n\n    await this.stopConsumingTranslationProducer(producerId);\n  };\n\n  private stopConsumingTranslationForSpeaker = async (speakerId: string) => {\n    const originalProducerId = this.resolveOriginalProducerIdForSpeaker(speakerId);\n    if (!originalProducerId) {\n      return;\n    }\n\n    const languageMap = this.translationProducerMap.value?.[originalProducerId] || {};\n    for (const producerId of Object.values(languageMap)) {\n      await this.stopConsumingTranslationProducer(producerId);\n    }\n\n    this.updateTranslationProducerMap((prev) => {\n      const next = { ...prev };\n      delete next[originalProducerId];\n      return next;\n    });\n  };\n\n  updateIsTranslationSettingsModalVisible = (value: boolean) => {\n    if (this.handleSidebarModalVisibility('translation', value)) {\n      return;\n    }\n\n    this.isTranslationSettingsModalVisible.next(value);\n  };\n\n  updateIsRequestsModalVisible = (value: boolean) => {\n    if (this.handleSidebarModalVisibility('requests', value)) {\n      return;\n    }\n\n    this.isRequestsModalVisible.next(value);\n  };\n\n  updateIsWaitingModalVisible = (value: boolean) => {\n    if (this.handleSidebarModalVisibility('waiting', value)) {\n      return;\n    }\n\n    this.isWaitingModalVisible.next(value);\n  };\n\n  updateIsCoHostModalVisible = (value: boolean) => {\n    if (this.handleSidebarModalVisibility('coHost', value)) {\n      return;\n    }\n\n    this.isCoHostModalVisible.next(value);\n  };\n\n  updateIsMediaSettingsModalVisible = (value: boolean) => {\n    if (this.handleSidebarModalVisibility('mediaSettings', value)) {\n      return;\n    }\n\n    this.isMediaSettingsModalVisible.next(value);\n  };\n\n  updateIsDisplaySettingsModalVisible = (value: boolean) => {\n    if (this.handleSidebarModalVisibility('displaySettings', value)) {\n      return;\n    }\n\n    this.isDisplaySettingsModalVisible.next(value);\n  };\n\n  updateIsParticipantsModalVisible = (value: boolean) => {\n    if (this.handleSidebarModalVisibility('participants', value)) {\n      return;\n    }\n\n    this.isParticipantsModalVisible.next(value);\n  };\n\n  updateIsMessagesModalVisible = (value: boolean) => {\n    if (\n      this.handleSidebarModalVisibility('messages', value, {\n        onOpen: () => {\n          this.updateSidebarMessagesTab(this.preferredSidebarMessagesTab());\n        },\n        onClose: () => {\n          this.updateShowMessagesBadge(false);\n        },\n      })\n    ) {\n      return;\n    }\n\n    this.isMessagesModalVisible.next(value);\n    if (!value) {\n      this.updateShowMessagesBadge(false);\n    }\n  };\n\n  updateIsConfirmExitModalVisible = (value: boolean) => {\n    this.isConfirmExitModalVisible.next(value);\n  };\n\n  updateIsConfirmHereModalVisible = (value: boolean) => {\n    this.isConfirmHereModalVisible.next(value);\n  };\n\n  updateIsLoadingModalVisible = (value: boolean) => {\n    this.isLoadingModalVisible.next(value);\n  };\n\n  updateIsShareEventModalVisible = (value: boolean) => {\n    if (this.handleSidebarModalVisibility('shareEvent', value)) {\n      return;\n    }\n\n    this.isShareEventModalVisible.next(value);\n  };\n\n  updateRecordingMediaOptions = (value: string) => {\n    this.recordingMediaOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAudioOptions = (value: string) => {\n    this.recordingAudioOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoOptions = (value: string) => {\n    this.recordingVideoOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoType = (value: string) => {\n    this.recordingVideoType.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoOptimized = (value: boolean) => {\n    this.recordingVideoOptimized.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingDisplayType = (value: 'video' | 'media' | 'all') => {\n    this.recordingDisplayType.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAddHLS = (value: boolean) => {\n    this.recordingAddHLS.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAddText = (value: boolean) => {\n    this.recordingAddText.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomText = (value: string) => {\n    this.recordingCustomText.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomTextPosition = (value: string) => {\n    this.recordingCustomTextPosition.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomTextColor = (value: string) => {\n    this.recordingCustomTextColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingNameTags = (value: boolean) => {\n    this.recordingNameTags.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingBackgroundColor = (value: string) => {\n    this.recordingBackgroundColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingNameTagsColor = (value: string) => {\n    this.recordingNameTagsColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingOrientationVideo = (value: string) => {\n    this.recordingOrientationVideo.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateClearedToResume = (value: boolean) => {\n    this.clearedToResume.next(value);\n  };\n\n  updateClearedToRecord = (value: boolean) => {\n    this.clearedToRecord.next(value);\n  };\n\n  updateRecordState = (value: string) => {\n    if (this.recordStarted.value && !this.recordStopped.value) {\n      if (!this.recordPaused.value) {\n        this.recordState.next('red');\n      } else {\n        this.recordState.next('yellow');\n      }\n    } else {\n      this.recordState.next(value);\n    }\n    this.recordState.next(value);\n  };\n\n  updateShowRecordButtons = (value: boolean) => {\n    this.showRecordButtons.next(value);\n  };\n\n  updateRecordingProgressTime = (value: string) => {\n    this.recordingProgressTime.next(value);\n    this.updateRecordTimerWidget();\n  };\n\n  updateAudioSwitching = (value: boolean) => {\n    this.audioSwitching.next(value);\n  };\n\n  updateVideoSwitching = (value: boolean) => {\n    this.videoSwitching.next(value);\n  };\n\n  updateVideoAlreadyOn = (value: boolean) => {\n    this.videoAlreadyOn.next(value);\n    this.videoActive.next(value);\n  };\n\n  updateAudioAlreadyOn = (value: boolean) => {\n    this.audioAlreadyOn.next(value);\n    this.micActive.next(value);\n  };\n\n  updateComponentSizes = (sizes: ComponentSizes) => {\n    this.componentSizes.next(sizes);\n  };\n\n  updateHasCameraPermission = (value: boolean) => {\n    this.hasCameraPermission.next(value);\n  };\n\n  updateHasAudioPermission = (value: boolean) => {\n    this.hasAudioPermission.next(value);\n  };\n\n  updatePanelists = (value: Participant[]) => {\n    this.panelists.next(value);\n  };\n\n  updatePanelistsFocused = (value: boolean) => {\n    this.panelistsFocused.next(value);\n  };\n\n  updateMuteOthersMic = (value: boolean) => {\n    this.muteOthersMic.next(value);\n  };\n\n  updateMuteOthersCamera = (value: boolean) => {\n    this.muteOthersCamera.next(value);\n  };\n\n  updatePermissionConfig = (value: PermissionConfig) => {\n    this.permissionConfig.next(value);\n  };\n\n  requestPermissionCamera(): Promise<string> {\n    // Implement the request permission logic here\n    return Promise.resolve('granted');\n  }\n\n  requestPermissionAudio(): Promise<string> {\n    // Implement the request permission logic here\n    return Promise.resolve('granted');\n  }\n\n  updateTransportCreated = (value: boolean) => {\n    this.transportCreated.next(value);\n  };\n\n  updateLocalTransportCreated = (value: boolean) => {\n    this.localTransportCreated.next(value);\n  };\n\n  updateTransportCreatedVideo = (value: boolean) => {\n    this.transportCreatedVideo.next(value);\n  };\n\n  updateTransportCreatedAudio = (value: boolean) => {\n    this.transportCreatedAudio.next(value);\n  };\n\n  updateTransportCreatedScreen = (value: boolean) => {\n    this.transportCreatedScreen.next(value);\n  };\n\n  updateProducerTransport = (value: Transport | null) => {\n    this.producerTransport.next(value);\n  };\n\n  updateLocalProducerTransport = (value: Transport | null) => {\n    this.localProducerTransport.next(value);\n  };\n\n  updateVideoProducer = (value: Producer | null) => {\n    this.videoProducer.next(value);\n  };\n\n  updateLocalVideoProducer = (value: Producer | null) => {\n    this.localVideoProducer.next(value);\n  }\n\n  updateParams = (value: ProducerOptions) => {\n    this.params.next(value);\n  };\n\n  updateVideoParams = (value: ProducerOptions) => {\n    this.videoParams.next(value);\n  };\n\n  updateAudioParams = (value: ProducerOptions) => {\n    this.audioParams.next(value);\n  };\n\n  updateAudioProducer = (value: Producer | null) => {\n    this.audioProducer.next(value);\n  };\n\n  updateAudioLevel = (value: number) => {\n    this.audioLevel.next(value);\n  };\n\n  updateLocalAudioProducer = (value: Producer | null) => {\n    this.localAudioProducer.next(value);\n  };\n\n  updateConsumerTransports = (value: TransportType[]) => {\n    this.consumerTransports.next(value);\n  };\n\n  updateConsumingTransports = (value: string[]) => {\n    this.consumingTransports.next(value);\n  };\n\n  updatePolls = (value: Poll[]) => {\n    this.polls.next(value);\n  };\n\n  updatePoll = (value: Poll | null) => {\n    this.poll.next(value);\n  };\n\n  updateIsPollModalVisible = (value: boolean) => {\n    if (this.handleSidebarModalVisibility('poll', value)) {\n      return;\n    }\n\n    this.isPollModalVisible.next(value);\n  };\n\n  updateCustomImage = (value: string) => {\n    this.customImage.next(value);\n  };\n\n  updateSelectedImage = (value: string) => {\n    this.selectedImage.next(value);\n  };\n\n  updateSegmentVideo = (value: MediaStream | null) => {\n    this.segmentVideo.next(value);\n  };\n\n  updateSelfieSegmentation = (value: SelfieSegmentation | null) => {\n    this.selfieSegmentation.next(value);\n  };\n\n  updatePauseSegmentation = (value: boolean) => {\n    this.pauseSegmentation.next(value);\n  };\n\n  updateProcessedStream = (value: MediaStream | null) => {\n    this.processedStream.next(value);\n  };\n\n  updateKeepBackground = (value: boolean) => {\n    this.keepBackground.next(value);\n  };\n\n  updateBackgroundHasChanged = (value: boolean) => {\n    this.backgroundHasChanged.next(value);\n  };\n\n  updateVirtualStream = (value: MediaStream | null) => {\n    this.virtualStream.next(value);\n  };\n\n  updateMainCanvas = (value: HTMLCanvasElement | null) => {\n    this.mainCanvas.next(value);\n  };\n\n  updatePrevKeepBackground = (value: boolean) => {\n    this.prevKeepBackground.next(value);\n  };\n\n  updateAppliedBackground = (value: boolean) => {\n    this.appliedBackground.next(value);\n  };\n\n  updateIsBackgroundModalVisible = (value: boolean) => {\n    this.isBackgroundModalVisible.next(value);\n  };\n\n  updateAutoClickBackground = (value: boolean) => {\n    this.autoClickBackground.next(value);\n  };\n\n  updateBreakoutRooms = (value: BreakoutParticipant[][]) => {\n    this.breakoutRooms.next(value);\n  };\n\n  updateCurrentRoomIndex = (value: number) => {\n    this.currentRoomIndex.next(value);\n  };\n\n  updateCanStartBreakout = (value: boolean) => {\n    this.canStartBreakout.next(value);\n  };\n\n  updateBreakOutRoomStarted = (value: boolean) => {\n    this.breakOutRoomStarted.next(value);\n  };\n\n  updateBreakOutRoomEnded = (value: boolean) => {\n    this.breakOutRoomEnded.next(value);\n  };\n\n  updateHostNewRoom = (value: number) => {\n    this.hostNewRoom.next(value);\n  };\n\n  updateLimitedBreakRoom = (value: BreakoutParticipant[]) => {\n    this.limitedBreakRoom.next(value);\n  };\n\n  updateMainRoomsLength = (value: number) => {\n    this.mainRoomsLength.next(value);\n  };\n\n  updateMemberRoom = (value: number) => {\n    this.memberRoom.next(value);\n  };\n\n  updateIsBreakoutRoomsModalVisible = (value: boolean) => {\n    if (this.handleSidebarModalVisibility('breakoutRooms', value)) {\n      return;\n    }\n\n    this.isBreakoutRoomsModalVisible.next(value);\n  };\n\n  updateWhiteboardUsers = (value: WhiteboardUser[]) => {\n    this.whiteboardUsers.next(value);\n  };\n\n  updateCurrentWhiteboardIndex = (value: number) => {\n    this.currentWhiteboardIndex.next(value);\n  };\n\n  updateCanStartWhiteboard = (value: boolean) => {\n    this.canStartWhiteboard.next(value);\n  };\n\n  updateWhiteboardStarted = (value: boolean) => {\n    this.whiteboardStarted.next(value);\n  };\n\n  updateWhiteboardEnded = (value: boolean) => {\n    this.whiteboardEnded.next(value);\n  };\n\n  updateWhiteboardLimit = (value: number) => {\n    this.whiteboardLimit.next(value);\n  };\n\n  updateIsWhiteboardModalVisible = (value: boolean) => {\n    this.isWhiteboardModalVisible.next(value);\n  };\n\n  updateIsConfigureWhiteboardModalVisible = (value: boolean) => {\n    if (this.handleSidebarModalVisibility('configureWhiteboard', value)) {\n      return;\n    }\n\n    this.isConfigureWhiteboardModalVisible.next(value);\n  };\n\n  updateShapes = (value: Shape[]) => {\n    this.shapes.next(value);\n  };\n\n  updateUseImageBackground = (value: boolean) => {\n    this.useImageBackground.next(value);\n  };\n\n  updateRedoStack = (value: Shape[]) => {\n    this.redoStack.next(value);\n  };\n\n  updateUndoStack = (value: string[]) => {\n    this.undoStack.next(value);\n  };\n\n  updateCanvasStream = (value: MediaStream | null) => {\n    this.canvasStream.next(value);\n  };\n\n  updateCanvasWhiteboard = (value: HTMLCanvasElement | null) => {\n    this.canvasWhiteboard.next(value);\n  };\n\n  updateCanvasScreenboard = (value: HTMLCanvasElement | null) => {\n    this.canvasScreenboard.next(value);\n  };\n\n  updateProcessedScreenStream = (value: MediaStream | null) => {\n    this.processedScreenStream.next(value);\n  };\n\n  updateAnnotateScreenStream = (value: boolean) => {\n    this.annotateScreenStream.next(value);\n  };\n\n  updateMainScreenCanvas = (value: HTMLCanvasElement | null) => {\n    this.mainScreenCanvas.next(value);\n  };\n\n  updateIsScreenboardModalVisible = (value: boolean) => {\n    this.isScreenboardModalVisible.next(value);\n  };\n\n  checkOrientation = () => {\n    const isPortrait = window.matchMedia('(orientation: portrait)').matches;\n    return isPortrait ? 'portrait' : 'landscape';\n  };\n\n  showAlert = ({\n    message,\n    type,\n    duration = 3000,\n    position,\n  }: {\n    message: string;\n    type: 'success' | 'danger' | 'info' | 'warning';\n    duration?: number;\n    position?: 'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center';\n  }) => {\n    const effectivePosition = position ?? (type === 'danger' || type === 'warning' ? 'center' : 'top');\n\n    this.updateAlertMessage(message);\n    this.updateAlertType(type);\n    this.updateAlertPosition(effectivePosition);\n    this.updateAlertDuration(duration);\n    this.updateAlertVisible(true);\n  };\n\n  getAllParams() {\n    return {\n      localUIMode: this.localUIMode.value, // Local UI mode\n\n      // Room Details\n      roomName: this.roomName.value,\n      member: this.member.value,\n      adminPasscode: this.adminPasscode.value,\n      youAreCoHost: this.youAreCoHost.value,\n      youAreHost: this.youAreHost.value,\n      islevel: this.islevel.value,\n      confirmedToRecord: this.confirmedToRecord.value,\n      meetingDisplayType: this.meetingDisplayType.value,\n      meetingVideoOptimized: this.meetingVideoOptimized.value,\n      eventType: this.eventType.value,\n      participants: this.participants.value,\n      filteredParticipants: this.filteredParticipants.value,\n      participantsCounter: this.participantsCounter.value,\n      participantsFilter: this.participantsFilter.value,\n\n      // More room details - media\n      consume_sockets: this.consume_sockets.value,\n      rtpCapabilities: this.rtpCapabilities.value,\n      roomRecvIPs: this.roomRecvIPs.value,\n      meetingRoomParams: this.meetingRoomParams.value,\n      itemPageLimit: this.itemPageLimit.value,\n      audioOnlyRoom: this.audioOnlyRoom.value,\n      addForBasic: this.addForBasic.value,\n      screenPageLimit: this.screenPageLimit.value,\n      shareScreenStarted: this.shareScreenStarted.value,\n      shared: this.shared.value,\n      targetOrientation: this.targetOrientation.value,\n      targetResolution: this.targetResolution.value,\n      targetResolutionHost: this.targetResolutionHost.value,\n      vidCons: this.vidCons.value,\n      frameRate: this.frameRate.value,\n      hParams: this.hParams.value,\n      vParams: this.vParams.value,\n      screenParams: this.screenParams.value,\n      aParams: this.aParams.value,\n\n      // More room details - recording\n      recordingAudioPausesLimit: this.recordingAudioPausesLimit.value,\n      recordingAudioPausesCount: this.recordingAudioPausesCount.value,\n      recordingAudioSupport: this.recordingAudioSupport.value,\n      recordingAudioPeopleLimit: this.recordingAudioPeopleLimit.value,\n      recordingAudioParticipantsTimeLimit: this.recordingAudioParticipantsTimeLimit.value,\n      recordingVideoPausesCount: this.recordingVideoPausesCount.value,\n      recordingVideoPausesLimit: this.recordingVideoPausesLimit.value,\n      recordingVideoSupport: this.recordingVideoSupport.value,\n      recordingVideoPeopleLimit: this.recordingVideoPeopleLimit.value,\n      recordingVideoParticipantsTimeLimit: this.recordingVideoParticipantsTimeLimit.value,\n      recordingAllParticipantsSupport: this.recordingAllParticipantsSupport.value,\n      recordingVideoParticipantsSupport: this.recordingVideoParticipantsSupport.value,\n      recordingAllParticipantsFullRoomSupport: this.recordingAllParticipantsFullRoomSupport.value,\n      recordingVideoParticipantsFullRoomSupport:\n        this.recordingVideoParticipantsFullRoomSupport.value,\n      recordingPreferredOrientation: this.recordingPreferredOrientation.value,\n      recordingSupportForOtherOrientation: this.recordingSupportForOtherOrientation.value,\n      recordingMultiFormatsSupport: this.recordingMultiFormatsSupport.value,\n\n      userRecordingParams: this.userRecordingParams.value,\n      canRecord: this.canRecord.value,\n      startReport: this.startReport.value,\n      endReport: this.endReport.value,\n      recordStartTime: this.recordStartTime.value,\n      recordElapsedTime: this.recordElapsedTime.value,\n      isTimerRunning: this.isTimerRunning.value,\n      canPauseResume: this.canPauseResume.value,\n      recordChangeSeconds: this.recordChangeSeconds.value,\n      pauseLimit: this.pauseLimit.value,\n      pauseRecordCount: this.pauseRecordCount.value,\n      canLaunchRecord: this.canLaunchRecord.value,\n      stopLaunchRecord: this.stopLaunchRecord.value,\n\n      participantsAll: this.participantsAll.value,\n\n      firstAll: this.firstAll.value,\n      updateMainWindow: this.updateMainWindow.value,\n      first_round: this.first_round.value,\n      landScaped: this.landScaped.value,\n      lock_screen: this.lock_screen.value,\n      screenId: this.screenId.value,\n      allVideoStreams: this.allVideoStreams.value,\n      newLimitedStreams: this.newLimitedStreams.value,\n      newLimitedStreamsIDs: this.newLimitedStreamsIDs.value,\n      activeSounds: this.activeSounds.value,\n      screenShareIDStream: this.screenShareIDStream.value,\n      screenShareNameStream: this.screenShareNameStream.value,\n      adminIDStream: this.adminIDStream.value,\n      adminNameStream: this.adminNameStream.value,\n      youYouStream: this.youYouStream.value,\n      youYouStreamIDs: this.youYouStreamIDs.value,\n      localStream: this.localStream.value,\n      recordStarted: this.recordStarted.value,\n      recordResumed: this.recordResumed.value,\n      recordPaused: this.recordPaused.value,\n      recordStopped: this.recordStopped.value,\n      adminRestrictSetting: this.adminRestrictSetting.value,\n      videoRequestState: this.videoRequestState.value,\n      videoRequestTime: this.videoRequestTime.value,\n      videoAction: this.videoAction.value,\n      localStreamVideo: this.localStreamVideo.value,\n      userDefaultVideoInputDevice: this.userDefaultVideoInputDevice.value,\n      currentFacingMode: this.currentFacingMode.value,\n      prevFacingMode: this.prevFacingMode.value,\n      defVideoID: this.defVideoID.value,\n      allowed: this.allowed.value,\n      dispActiveNames: this.dispActiveNames.value,\n      p_dispActiveNames: this.p_dispActiveNames.value,\n      activeNames: this.activeNames.value,\n      prevActiveNames: this.prevActiveNames.value,\n      p_activeNames: this.p_activeNames.value,\n      membersReceived: this.membersReceived.value,\n      deferScreenReceived: this.deferScreenReceived.value,\n      hostFirstSwitch: this.hostFirstSwitch.value,\n      micAction: this.micAction.value,\n      screenAction: this.screenAction.value,\n      chatAction: this.chatAction.value,\n      audioRequestState: this.audioRequestState.value,\n      screenRequestState: this.screenRequestState.value,\n      chatRequestState: this.chatRequestState.value,\n      audioRequestTime: this.audioRequestTime.value,\n      screenRequestTime: this.screenRequestTime.value,\n      chatRequestTime: this.chatRequestTime.value,\n      updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\n      oldSoundIds: this.oldSoundIds.value,\n      hostLabel: this.hostLabel.value,\n      mainScreenFilled: this.mainScreenFilled.value,\n      localStreamScreen: this.localStreamScreen.value,\n      screenAlreadyOn: this.screenAlreadyOn.value,\n      chatAlreadyOn: this.chatAlreadyOn.value,\n      redirectURL: this.redirectURL.value,\n      oldAllStreams: this.oldAllStreams.value,\n      adminVidID: this.adminVidID.value,\n      streamNames: this.streamNames.value,\n      non_alVideoStreams: this.non_alVideoStreams.value,\n      sortAudioLoudness: this.sortAudioLoudness.value,\n      audioDecibels: this.audioDecibels.value,\n      mixed_alVideoStreams: this.mixed_alVideoStreams.value,\n      non_alVideoStreams_muted: this.non_alVideoStreams_muted.value,\n      paginatedStreams: this.paginatedStreams.value,\n      localStreamAudio: this.localStreamAudio.value,\n      defAudioID: this.defAudioID.value,\n      userDefaultAudioInputDevice: this.userDefaultAudioInputDevice.value,\n      userDefaultAudioOutputDevice: this.userDefaultAudioOutputDevice.value,\n      prevAudioInputDevice: this.prevAudioInputDevice.value,\n      prevVideoInputDevice: this.prevVideoInputDevice.value,\n      audioPaused: this.audioPaused.value,\n      mainScreenPerson: this.mainScreenPerson.value,\n      adminOnMainScreen: this.adminOnMainScreen.value,\n      screenStates: this.screenStates.value,\n      prevScreenStates: this.prevScreenStates.value,\n      updateDateState: this.updateDateState.value,\n      lastUpdate: this.lastUpdate.value,\n      nForReadjustRecord: this.nForReadjustRecord.value,\n      fixedPageLimit: this.fixedPageLimit.value,\n      removeAltGrid: this.removeAltGrid.value,\n      nForReadjust: this.nForReadjust.value,\n      lastReorderTime: this.lastReorderTime.value,\n      reorderInterval: this.reorderInterval.value,\n      fastReorderInterval: this.fastReorderInterval.value,\n      audStreamNames: this.audStreamNames.value,\n      currentUserPage: this.currentUserPage.value,\n      mainHeightWidth: this.mainHeightWidth.value,\n      prevMainHeightWidth: this.prevMainHeightWidth.value,\n      prevDoPaginate: this.prevDoPaginate.value,\n      doPaginate: this.doPaginate.value,\n      shareEnded: this.shareEnded.value,\n      lStreams: this.lStreams.value,\n      chatRefStreams: this.chatRefStreams.value,\n      controlHeight: this.controlHeight.value,\n      isWideScreen: this.isWideScreen.value,\n      isMediumScreen: this.isMediumScreen.value,\n      isSmallScreen: this.isSmallScreen.value,\n      addGrid: this.addGrid.value,\n      addAltGrid: this.addAltGrid.value,\n      gridRows: this.gridRows.value,\n      gridCols: this.gridCols.value,\n      altGridRows: this.altGridRows.value,\n      altGridCols: this.altGridCols.value,\n      numberPages: this.numberPages.value,\n      currentStreams: this.currentStreams.value,\n      showMiniView: this.showMiniView.value,\n      nStream: this.nStream.value,\n      defer_receive: this.defer_receive.value,\n      allAudioStreams: this.allAudioStreams.value,\n      screenProducer: this.screenProducer.value,\n      remoteScreenStream: this.remoteScreenStream.value,\n      gotAllVids: this.gotAllVids.value,\n      paginationHeightWidth: this.paginationHeightWidth.value,\n      paginationDirection: this.paginationDirection.value,\n      gridSizes: this.gridSizes.value,\n      screenForceFullDisplay: this.screenForceFullDisplay.value,\n      mainGridStream: this.mainGridStream.value,\n      otherGridStreams: this.otherGridStreams.value,\n      audioOnlyStreams: this.audioOnlyStreams.value,\n      videoInputs: this.videoInputs.value,\n      audioInputs: this.audioInputs.value,\n      meetingProgressTime: this.meetingProgressTime.value,\n      meetingElapsedTime: this.meetingElapsedTime.value,\n\n      ref_participants: this.ref_participants.value,\n\n      messages: this.messages.value,\n      startDirectMessage: this.startDirectMessage.value,\n      directMessageDetails: this.directMessageDetails.value,\n      coHost: this.coHost.value,\n      coHostResponsibility: this.coHostResponsibility.value,\n\n      // Event settings\n      audioSetting: this.audioSetting.value,\n      videoSetting: this.videoSetting.value,\n      screenshareSetting: this.screenshareSetting.value,\n      chatSetting: this.chatSetting.value,\n\n      // Translation settings\n      translationSupported: this.translationSupported.value,\n      translationConfig: this.translationConfig.value,\n      mySpokenLanguage: this.mySpokenLanguage.value,\n      mySpokenLanguageEnabled: this.mySpokenLanguageEnabled.value,\n      myDefaultOutputLanguage: this.myDefaultOutputLanguage.value,\n      myDefaultListenLanguage: this.myDefaultListenLanguage.value,\n      listenPreferences: this.listenPreferences.value,\n      translationSubscriptions: new Map(\n        Array.from(this.listenPreferences.value.entries())\n          .filter(([, language]) => typeof language === 'string' && language.length > 0)\n          .map(([speakerId, language]) => [\n            `${speakerId}_${language.toLowerCase()}`,\n            { speakerId, language: language.toLowerCase() },\n          ]),\n      ),\n      listenerTranslationPreferences: {\n        perSpeaker: new Map(\n          Array.from(this.listenPreferences.value.entries())\n            .filter(([, language]) => typeof language === 'string' && language.length > 0)\n            .map(([speakerId, language]) => [\n              speakerId,\n              { speakerId, language, wantOriginal: false },\n            ]),\n        ),\n        globalLanguage: this.myDefaultListenLanguage.value,\n      },\n      translationProducerMap: this.translationProducerMap.value,\n      activeTranslationProducerIds: this.activeTranslationProducerIds,\n      availableTranslationChannels: this.availableTranslationChannels.value,\n      speakerTranslationStates: this.speakerTranslationStates.value,\n      canUsePersonalTranslation: this.canUsePersonalTranslation,\n      personalTranslationUsername: this.personalTranslationUsername,\n\n      // Display settings\n      autoWave: this.autoWave.value,\n      forceFullDisplay: this.forceFullDisplay.value,\n      showSubtitlesOnCards: this.getShowSubtitlesOnCardsState(),\n      prevForceFullDisplay: this.prevForceFullDisplay.value,\n      prevMeetingDisplayType: this.prevMeetingDisplayType.value,\n\n      // Waiting room\n      waitingRoomFilter: this.waitingRoomFilter.value,\n      waitingRoomList: this.waitingRoomList.value,\n      waitingRoomCounter: this.waitingRoomCounter.value,\n      filteredWaitingRoomList: this.filteredWaitingRoomList.value,\n\n      // Requests\n      requestFilter: this.requestFilter.value,\n      requestList: this.requestList.value,\n      requestCounter: this.requestCounter.value,\n      filteredRequestList: this.filteredRequestList.value,\n\n      // Total requests and waiting room\n      totalReqWait: this.totalReqWait.value,\n\n      // Alerts\n      alertVisible: this.alertVisible.value,\n      alertMessage: this.alertMessage.value,\n      alertType: this.alertType.value,\n      alertPosition: this.alertPosition.value,\n      alertDuration: this.alertDuration.value,\n\n      // Progress Timer\n      progressTimerVisible: this.progressTimerVisible.value,\n      progressTimerValue: this.progressTimerValue.value,\n\n      // Menu modals\n      isMenuModalVisible: this.isMenuModalVisible.value,\n      isRecordingModalVisible: this.isRecordingModalVisible.value,\n      isSettingsModalVisible: this.isSettingsModalVisible.value,\n      isTranslationSettingsModalVisible: this.isTranslationSettingsModalVisible.value,\n      isRequestsModalVisible: this.isRequestsModalVisible.value,\n      isWaitingModalVisible: this.isWaitingModalVisible.value,\n      isCoHostModalVisible: this.isCoHostModalVisible.value,\n      isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\n      isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\n\n      // Other Modals\n      isParticipantsModalVisible: this.isParticipantsModalVisible.value,\n      isMessagesModalVisible: this.isMessagesModalVisible.value,\n      isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n      isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\n      isLoadingModalVisible: this.isLoadingModalVisible.value,\n\n      // Recording Options\n      recordingMediaOptions: this.recordingMediaOptions.value,\n      recordingAudioOptions: this.recordingAudioOptions.value,\n      recordingVideoOptions: this.recordingVideoOptions.value,\n      recordingVideoType: this.recordingVideoType.value,\n      recordingVideoOptimized: this.recordingVideoOptimized.value,\n      recordingDisplayType: this.recordingDisplayType.value,\n      recordingAddHLS: this.recordingAddHLS.value,\n      recordingAddText: this.recordingAddText.value,\n      recordingCustomText: this.recordingCustomText.value,\n      recordingCustomTextPosition: this.recordingCustomTextPosition.value,\n      recordingCustomTextColor: this.recordingCustomTextColor.value,\n      recordingNameTags: this.recordingNameTags.value,\n      recordingBackgroundColor: this.recordingBackgroundColor.value,\n      recordingNameTagsColor: this.recordingNameTagsColor.value,\n      recordingOrientationVideo: this.recordingOrientationVideo.value,\n      clearedToResume: this.clearedToResume.value,\n      clearedToRecord: this.clearedToRecord.value,\n      recordState: this.recordState.value,\n      showRecordButtons: this.showRecordButtons.value,\n      recordingProgressTime: this.recordingProgressTime.value,\n      audioSwitching: this.audioSwitching.value,\n      videoSwitching: this.videoSwitching.value,\n\n      // Media states\n      videoAlreadyOn: this.videoAlreadyOn.value,\n      audioAlreadyOn: this.audioAlreadyOn.value,\n      componentSizes: this.componentSizes.value,\n\n      // Permissions\n      hasCameraPermission: this.hasCameraPermission.value,\n      hasAudioPermission: this.hasAudioPermission.value,\n      panelists: this.panelists.value,\n      panelistsFocused: this.panelistsFocused.value,\n      muteOthersMic: this.muteOthersMic.value,\n      muteOthersCamera: this.muteOthersCamera.value,\n      permissionConfig: this.permissionConfig.value,\n\n      // Transports\n      transportCreated: this.transportCreated.value,\n      localTransportCreated: this.localTransportCreated.value,\n      transportCreatedVideo: this.transportCreatedVideo.value,\n      transportCreatedAudio: this.transportCreatedAudio.value,\n      transportCreatedScreen: this.transportCreatedScreen.value,\n      producerTransport: this.producerTransport.value,\n      localProducerTransport: this.localProducerTransport.value,\n      videoProducer: this.videoProducer.value,\n      localVideoProducer: this.localVideoProducer.value,\n      params: this.params.value,\n      videoParams: this.videoParams.value,\n      audioParams: this.audioParams.value,\n      audioProducer: this.audioProducer.value,\n      audioLevel: this.audioLevel.value,\n      localAudioProducer: this.localAudioProducer.value,\n      consumerTransports: this.consumerTransports.value,\n      consumingTransports: this.consumingTransports.value,\n\n      // Polls\n      polls: this.polls.value,\n      poll: this.poll.value,\n      isPollModalVisible: this.isPollModalVisible.value,\n\n      // Background\n      customImage: this.customImage.value,\n      selectedImage: this.selectedImage.value,\n      segmentVideo: this.segmentVideo.value,\n      selfieSegmentation: this.selfieSegmentation.value,\n      pauseSegmentation: this.pauseSegmentation.value,\n      processedStream: this.processedStream.value,\n      keepBackground: this.keepBackground.value,\n      backgroundHasChanged: this.backgroundHasChanged.value,\n      virtualStream: this.virtualStream.value,\n      mainCanvas: this.mainCanvas.value,\n      prevKeepBackground: this.prevKeepBackground.value,\n      appliedBackground: this.appliedBackground.value,\n      isBackgroundModalVisible: this.isBackgroundModalVisible.value,\n      autoClickBackground: this.autoClickBackground.value,\n\n      // Breakout rooms\n      breakoutRooms: this.breakoutRooms.value,\n      currentRoomIndex: this.currentRoomIndex.value,\n      canStartBreakout: this.canStartBreakout.value,\n      breakOutRoomStarted: this.breakOutRoomStarted.value,\n      breakOutRoomEnded: this.breakOutRoomEnded.value,\n      hostNewRoom: this.hostNewRoom.value,\n      limitedBreakRoom: this.limitedBreakRoom.value,\n      mainRoomsLength: this.mainRoomsLength.value,\n      memberRoom: this.memberRoom.value,\n      isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\n\n      // Whiteboard\n      whiteboardUsers: this.whiteboardUsers.value,\n      currentWhiteboardIndex: this.currentWhiteboardIndex.value,\n      canStartWhiteboard: this.canStartWhiteboard.value,\n      whiteboardStarted: this.whiteboardStarted.value,\n      whiteboardEnded: this.whiteboardEnded.value,\n      whiteboardLimit: this.whiteboardLimit.value,\n      isWhiteboardModalVisible: this.isWhiteboardModalVisible.value,\n      isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\n      shapes: this.shapes.value,\n      useImageBackground: this.useImageBackground.value,\n      redoStack: this.redoStack.value,\n      undoStack: this.undoStack.value,\n      canvasStream: this.canvasStream.value,\n      canvasWhiteboard: this.canvasWhiteboard.value,\n\n      // Screenboard\n      canvasScreenboard: this.canvasScreenboard.value,\n      processedScreenStream: this.processedScreenStream.value,\n      annotateScreenStream: this.annotateScreenStream.value,\n      mainScreenCanvas: this.mainScreenCanvas.value,\n      isScreenboardModalVisible: this.isScreenboardModalVisible.value,\n\n      validated: this.validated.value,\n      device: this.device.value,\n      socket: this.socket.value,\n      localSocket: this.localSocket!.value,\n      checkMediaPermission: false,\n      onWeb: true,\n\n      // Update functions\n      updateRoomName: this.updateRoomName.bind(this),\n      updateMember: this.updateMember.bind(this),\n      updateAdminPasscode: this.updateAdminPasscode.bind(this),\n      updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\n      updateYouAreHost: this.updateYouAreHost.bind(this),\n      updateIslevel: this.updateIslevel.bind(this),\n      updateCoHost: this.updateCoHost.bind(this),\n      updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\n      updateConfirmedToRecord: this.updateConfirmedToRecord.bind(this),\n      updateMeetingDisplayType: this.updateMeetingDisplayType.bind(this),\n      updateMeetingVideoOptimized: this.updateMeetingVideoOptimized.bind(this),\n      updateEventType: this.updateEventType.bind(this),\n      updateParticipants: this.updateParticipants.bind(this),\n      updateParticipantsCounter: this.updateParticipantsCounter.bind(this),\n      updateParticipantsFilter: this.updateParticipantsFilter.bind(this),\n\n      // More update functions for media details\n      updateConsume_sockets: this.updateConsume_sockets.bind(this),\n      updateRtpCapabilities: this.updateRtpCapabilities.bind(this),\n      updateRoomRecvIPs: this.updateRoomRecvIPs.bind(this),\n      updateMeetingRoomParams: this.updateMeetingRoomParams.bind(this),\n      updateItemPageLimit: this.updateItemPageLimit.bind(this),\n      updateAudioOnlyRoom: this.updateAudioOnlyRoom.bind(this),\n      updateAddForBasic: this.updateAddForBasic.bind(this),\n      updateScreenPageLimit: this.updateScreenPageLimit.bind(this),\n      updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\n      updateShared: this.updateShared.bind(this),\n      updateTargetOrientation: this.updateTargetOrientation.bind(this),\n      updateTargetResolution: this.updateTargetResolution.bind(this),\n      updateTargetResolutionHost: this.updateTargetResolutionHost.bind(this),\n      updateVidCons: this.updateVidCons.bind(this),\n      updateFrameRate: this.updateFrameRate.bind(this),\n      updateHParams: this.updateHParams.bind(this),\n      updateVParams: this.updateVParams.bind(this),\n      updateScreenParams: this.updateScreenParams.bind(this),\n      updateAParams: this.updateAParams.bind(this),\n\n      // More update functions for recording details\n      updateRecordingAudioPausesLimit: this.updateRecordingAudioPausesLimit.bind(this),\n      updateRecordingAudioPausesCount: this.updateRecordingAudioPausesCount.bind(this),\n      updateRecordingAudioSupport: this.updateRecordingAudioSupport.bind(this),\n      updateRecordingAudioPeopleLimit: this.updateRecordingAudioPeopleLimit.bind(this),\n      updateRecordingAudioParticipantsTimeLimit:\n        this.updateRecordingAudioParticipantsTimeLimit.bind(this),\n      updateRecordingVideoPausesCount: this.updateRecordingVideoPausesCount.bind(this),\n      updateRecordingVideoPausesLimit: this.updateRecordingVideoPausesLimit.bind(this),\n      updateRecordingVideoSupport: this.updateRecordingVideoSupport.bind(this),\n      updateRecordingVideoPeopleLimit: this.updateRecordingVideoPeopleLimit.bind(this),\n      updateRecordingVideoParticipantsTimeLimit:\n        this.updateRecordingVideoParticipantsTimeLimit.bind(this),\n      updateRecordingAllParticipantsSupport: this.updateRecordingAllParticipantsSupport.bind(this),\n      updateRecordingVideoParticipantsSupport:\n        this.updateRecordingVideoParticipantsSupport.bind(this),\n      updateRecordingAllParticipantsFullRoomSupport:\n        this.updateRecordingAllParticipantsFullRoomSupport.bind(this),\n      updateRecordingVideoParticipantsFullRoomSupport:\n        this.updateRecordingVideoParticipantsFullRoomSupport.bind(this),\n      updateRecordingPreferredOrientation: this.updateRecordingPreferredOrientation.bind(this),\n      updateRecordingSupportForOtherOrientation:\n        this.updateRecordingSupportForOtherOrientation.bind(this),\n      updateRecordingMultiFormatsSupport: this.updateRecordingMultiFormatsSupport.bind(this),\n\n      updateUserRecordingParams: this.updateUserRecordingParams.bind(this),\n      updateCanRecord: this.updateCanRecord.bind(this),\n      updateStartReport: this.updateStartReport.bind(this),\n      updateEndReport: this.updateEndReport.bind(this),\n      updateRecordTimerInterval: this.updateRecordTimerInterval.bind(this),\n      updateRecordStartTime: this.updateRecordStartTime.bind(this),\n      updateRecordElapsedTime: this.updateRecordElapsedTime.bind(this),\n      updateIsTimerRunning: this.updateIsTimerRunning.bind(this),\n      updateCanPauseResume: this.updateCanPauseResume.bind(this),\n      updateRecordChangeSeconds: this.updateRecordChangeSeconds.bind(this),\n      updatePauseLimit: this.updatePauseLimit.bind(this),\n      updatePauseRecordCount: this.updatePauseRecordCount.bind(this),\n      updateCanLaunchRecord: this.updateCanLaunchRecord.bind(this),\n      updateStopLaunchRecord: this.updateStopLaunchRecord.bind(this),\n\n      updateParticipantsAll: this.updateParticipantsAll.bind(this),\n\n      updateFirstAll: this.updateFirstAll.bind(this),\n      updateUpdateMainWindow: this.updateUpdateMainWindow.bind(this),\n      updateFirst_round: this.updateFirst_round.bind(this),\n      updateLandScaped: this.updateLandScaped.bind(this),\n      updateLock_screen: this.updateLock_screen.bind(this),\n      updateScreenId: this.updateScreenId.bind(this),\n      updateAllVideoStreams: this.updateAllVideoStreams.bind(this),\n      updateNewLimitedStreams: this.updateNewLimitedStreams.bind(this),\n      updateNewLimitedStreamsIDs: this.updateNewLimitedStreamsIDs.bind(this),\n      updateActiveSounds: this.updateActiveSounds.bind(this),\n      updateScreenShareIDStream: this.updateScreenShareIDStream.bind(this),\n      updateScreenShareNameStream: this.updateScreenShareNameStream.bind(this),\n      updateAdminIDStream: this.updateAdminIDStream.bind(this),\n      updateAdminNameStream: this.updateAdminNameStream.bind(this),\n      updateYouYouStream: this.updateYouYouStream.bind(this),\n      updateYouYouStreamIDs: this.updateYouYouStreamIDs.bind(this),\n      updateLocalStream: this.updateLocalStream.bind(this),\n      updateRecordStarted: this.updateRecordStarted.bind(this),\n      updateRecordResumed: this.updateRecordResumed.bind(this),\n      updateRecordPaused: this.updateRecordPaused.bind(this),\n      updateRecordStopped: this.updateRecordStopped.bind(this),\n      updateAdminRestrictSetting: this.updateAdminRestrictSetting.bind(this),\n      updateVideoRequestState: this.updateVideoRequestState.bind(this),\n      updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\n      updateVideoAction: this.updateVideoAction.bind(this),\n      updateLocalStreamVideo: this.updateLocalStreamVideo.bind(this),\n      updateUserDefaultVideoInputDevice: this.updateUserDefaultVideoInputDevice.bind(this),\n      updateCurrentFacingMode: this.updateCurrentFacingMode.bind(this),\n      updatePrevFacingMode: this.updatePrevFacingMode.bind(this),\n      updateDefVideoID: this.updateDefVideoID.bind(this),\n      updateAllowed: this.updateAllowed.bind(this),\n      updateDispActiveNames: this.updateDispActiveNames.bind(this),\n      updateP_dispActiveNames: this.updateP_dispActiveNames.bind(this),\n      updateActiveNames: this.updateActiveNames.bind(this),\n      updatePrevActiveNames: this.updatePrevActiveNames.bind(this),\n      updateP_activeNames: this.updateP_activeNames.bind(this),\n      updateMembersReceived: this.updateMembersReceived.bind(this),\n      updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\n      updateHostFirstSwitch: this.updateHostFirstSwitch.bind(this),\n      updateMicAction: this.updateMicAction.bind(this),\n      updateScreenAction: this.updateScreenAction.bind(this),\n      updateChatAction: this.updateChatAction.bind(this),\n      updateAudioRequestState: this.updateAudioRequestState.bind(this),\n      updateScreenRequestState: this.updateScreenRequestState.bind(this),\n      updateChatRequestState: this.updateChatRequestState.bind(this),\n      updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\n      updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\n      updateChatRequestTime: this.updateChatRequestTime.bind(this),\n      updateOldSoundIds: this.updateOldSoundIds.bind(this),\n      updateHostLabel: this.updateHostLabel.bind(this),\n      updateMainScreenFilled: this.updateMainScreenFilled.bind(this),\n      updateLocalStreamScreen: this.updateLocalStreamScreen.bind(this),\n      updateScreenAlreadyOn: this.updateScreenAlreadyOn.bind(this),\n      updateChatAlreadyOn: this.updateChatAlreadyOn.bind(this),\n      updateRedirectURL: this.updateRedirectURL.bind(this),\n      updateOldAllStreams: this.updateOldAllStreams.bind(this),\n      updateAdminVidID: this.updateAdminVidID.bind(this),\n      updateStreamNames: this.updateStreamNames.bind(this),\n      updateNon_alVideoStreams: this.updateNon_alVideoStreams.bind(this),\n      updateSortAudioLoudness: this.updateSortAudioLoudness.bind(this),\n      updateAudioDecibels: this.updateAudioDecibels.bind(this),\n      updateMixed_alVideoStreams: this.updateMixed_alVideoStreams.bind(this),\n      updateNon_alVideoStreams_muted: this.updateNon_alVideoStreams_muted.bind(this),\n      updatePaginatedStreams: this.updatePaginatedStreams.bind(this),\n      updateLocalStreamAudio: this.updateLocalStreamAudio.bind(this),\n      updateDefAudioID: this.updateDefAudioID.bind(this),\n      updateUserDefaultAudioInputDevice: this.updateUserDefaultAudioInputDevice.bind(this),\n      updateUserDefaultAudioOutputDevice: this.updateUserDefaultAudioOutputDevice.bind(this),\n      updatePrevAudioInputDevice: this.updatePrevAudioInputDevice.bind(this),\n      updatePrevVideoInputDevice: this.updatePrevVideoInputDevice.bind(this),\n      updateAudioPaused: this.updateAudioPaused.bind(this),\n      updateMainScreenPerson: this.updateMainScreenPerson.bind(this),\n      updateAdminOnMainScreen: this.updateAdminOnMainScreen.bind(this),\n      updateScreenStates: this.updateScreenStates.bind(this),\n      updatePrevScreenStates: this.updatePrevScreenStates.bind(this),\n      updateUpdateDateState: this.updateUpdateDateState.bind(this),\n      updateLastUpdate: this.updateLastUpdate.bind(this),\n      updateNForReadjustRecord: this.updateNForReadjustRecord.bind(this),\n      updateFixedPageLimit: this.updateFixedPageLimit.bind(this),\n      updateRemoveAltGrid: this.updateRemoveAltGrid.bind(this),\n      updateNForReadjust: this.updateNForReadjust.bind(this),\n      updateLastReorderTime: this.updateLastReorderTime.bind(this),\n      updateAudStreamNames: this.updateAudStreamNames.bind(this),\n      updateCurrentUserPage: this.updateCurrentUserPage.bind(this),\n      updateMainHeightWidth: this.updateMainHeightWidth.bind(this),\n      updatePrevMainHeightWidth: this.updatePrevMainHeightWidth.bind(this),\n      updatePrevDoPaginate: this.updatePrevDoPaginate.bind(this),\n      updateDoPaginate: this.updateDoPaginate.bind(this),\n      updateShareEnded: this.updateShareEnded.bind(this),\n      updateLStreams: this.updateLStreams.bind(this),\n      updateChatRefStreams: this.updateChatRefStreams.bind(this),\n      updateControlHeight: this.updateControlHeight.bind(this),\n      updateIsWideScreen: this.updateIsWideScreen.bind(this),\n      updateIsMediumScreen: this.updateIsMediumScreen.bind(this),\n      updateIsSmallScreen: this.updateIsSmallScreen.bind(this),\n      updateAddGrid: this.updateAddGrid.bind(this),\n      updateAddAltGrid: this.updateAddAltGrid.bind(this),\n      updateGridRows: this.updateGridRows.bind(this),\n      updateGridCols: this.updateGridCols.bind(this),\n      updateAltGridRows: this.updateAltGridRows.bind(this),\n      updateAltGridCols: this.updateAltGridCols.bind(this),\n      updateNumberPages: this.updateNumberPages.bind(this),\n      updateCurrentStreams: this.updateCurrentStreams.bind(this),\n      updateShowMiniView: this.updateShowMiniView.bind(this),\n      updateNStream: this.updateNStream.bind(this),\n      updateDefer_receive: this.updateDefer_receive.bind(this),\n      updateAllAudioStreams: this.updateAllAudioStreams.bind(this),\n      updateRemoteScreenStream: this.updateRemoteScreenStream.bind(this),\n      updateScreenProducer: this.updateScreenProducer.bind(this),\n      updateGotAllVids: this.updateGotAllVids.bind(this),\n      updatePaginationHeightWidth: this.updatePaginationHeightWidth.bind(this),\n      updatePaginationDirection: this.updatePaginationDirection.bind(this),\n      updateGridSizes: this.updateGridSizes.bind(this),\n      updateScreenForceFullDisplay: this.updateScreenForceFullDisplay.bind(this),\n      updateMainGridStream: this.updateMainGridStream.bind(this),\n      updateOtherGridStreams: this.updateOtherGridStreams.bind(this),\n      updateAudioOnlyStreams: this.updateAudioOnlyStreams.bind(this),\n      updateVideoInputs: this.updateVideoInputs.bind(this),\n      updateAudioInputs: this.updateAudioInputs.bind(this),\n      updateMeetingProgressTime: this.updateMeetingProgressTime.bind(this),\n      updateMeetingElapsedTime: this.updateMeetingElapsedTime.bind(this),\n      updateRef_participants: this.updateRef_participants.bind(this),\n\n      updateMessages: this.updateMessages.bind(this),\n      updateStartDirectMessage: this.updateStartDirectMessage.bind(this),\n      updateDirectMessageDetails: this.updateDirectMessageDetails.bind(this),\n      updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\n\n      // Event settings\n      updateAudioSetting: this.updateAudioSetting.bind(this),\n      updateVideoSetting: this.updateVideoSetting.bind(this),\n      updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\n      updateChatSetting: this.updateChatSetting.bind(this),\n\n      // Translation settings\n      updateTranslationSupported: this.updateTranslationSupported.bind(this),\n      updateTranslationConfig: this.updateTranslationConfig.bind(this),\n      updateMySpokenLanguage: this.updateMySpokenLanguage.bind(this),\n      updateMySpokenLanguageEnabled: this.updateMySpokenLanguageEnabled.bind(this),\n      updateMyDefaultOutputLanguage: this.updateMyDefaultOutputLanguage.bind(this),\n      updateMyDefaultListenLanguage: this.updateMyDefaultListenLanguage.bind(this),\n      updateListenPreferences: this.updateListenPreferences.bind(this),\n      updateTranslationProducerMap: this.updateTranslationProducerMap.bind(this),\n      updateAvailableTranslationChannels: this.updateAvailableTranslationChannels.bind(this),\n\n      // Display settings\n      updateAutoWave: this.updateAutoWave.bind(this),\n      updateForceFullDisplay: this.updateForceFullDisplay.bind(this),\n      updateShowSubtitlesOnCards: this.updateShowSubtitlesOnCards.bind(this),\n      updatePrevForceFullDisplay: this.updatePrevForceFullDisplay.bind(this),\n      updatePrevMeetingDisplayType: this.updatePrevMeetingDisplayType.bind(this),\n\n      // Waiting room\n      updateWaitingRoomFilter: this.updateWaitingRoomFilter.bind(this),\n      updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\n      updateWaitingRoomCounter: this.updateWaitingRoomCounter.bind(this),\n\n      // Requests\n      updateRequestFilter: this.updateRequestFilter.bind(this),\n      updateRequestList: this.updateRequestList.bind(this),\n      updateRequestCounter: this.updateRequestCounter.bind(this),\n\n      // Total requests and waiting room\n      updateTotalReqWait: this.updateTotalReqWait.bind(this),\n\n      // Menu modals\n      updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\n      updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n      updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\n      updateIsTranslationSettingsModalVisible:\n        this.updateIsTranslationSettingsModalVisible.bind(this),\n      updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\n      updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\n      updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\n      updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\n      updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\n\n      // Other modals\n      updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\n      updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\n      updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\n      updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\n      updateIsLoadingModalVisible: this.updateIsLoadingModalVisible.bind(this),\n\n      // Recording Options\n      updateRecordingMediaOptions: this.updateRecordingMediaOptions.bind(this),\n      updateRecordingAudioOptions: this.updateRecordingAudioOptions.bind(this),\n      updateRecordingVideoOptions: this.updateRecordingVideoOptions.bind(this),\n      updateRecordingVideoType: this.updateRecordingVideoType.bind(this),\n      updateRecordingVideoOptimized: this.updateRecordingVideoOptimized.bind(this),\n      updateRecordingDisplayType: this.updateRecordingDisplayType.bind(this),\n      updateRecordingAddHLS: this.updateRecordingAddHLS.bind(this),\n      updateRecordingAddText: this.updateRecordingAddText.bind(this),\n      updateRecordingCustomText: this.updateRecordingCustomText.bind(this),\n      updateRecordingCustomTextPosition: this.updateRecordingCustomTextPosition.bind(this),\n      updateRecordingCustomTextColor: this.updateRecordingCustomTextColor.bind(this),\n      updateRecordingNameTags: this.updateRecordingNameTags.bind(this),\n      updateRecordingBackgroundColor: this.updateRecordingBackgroundColor.bind(this),\n      updateRecordingNameTagsColor: this.updateRecordingNameTagsColor.bind(this),\n      updateRecordingOrientationVideo: this.updateRecordingOrientationVideo.bind(this),\n      updateClearedToResume: this.updateClearedToResume.bind(this),\n      updateClearedToRecord: this.updateClearedToRecord.bind(this),\n      updateRecordState: this.updateRecordState.bind(this),\n      updateShowRecordButtons: this.updateShowRecordButtons.bind(this),\n      updateRecordingProgressTime: this.updateRecordingProgressTime.bind(this),\n      updateAudioSwitching: this.updateAudioSwitching.bind(this),\n      updateVideoSwitching: this.updateVideoSwitching.bind(this),\n\n      // Media states\n      updateVideoAlreadyOn: this.updateVideoAlreadyOn.bind(this),\n      updateAudioAlreadyOn: this.updateAudioAlreadyOn.bind(this),\n      updateComponentSizes: this.updateComponentSizes.bind(this),\n\n      // Permissions\n      updateHasCameraPermission: this.updateHasCameraPermission.bind(this),\n      updateHasAudioPermission: this.updateHasAudioPermission.bind(this),\n      updatePanelists: this.updatePanelists.bind(this),\n      updatePanelistsFocused: this.updatePanelistsFocused.bind(this),\n      updateMuteOthersMic: this.updateMuteOthersMic.bind(this),\n      updateMuteOthersCamera: this.updateMuteOthersCamera.bind(this),\n      updatePermissionConfig: this.updatePermissionConfig.bind(this),\n\n      // Transports\n      updateTransportCreated: this.updateTransportCreated.bind(this),\n      updateLocalTransportCreated: this.updateLocalTransportCreated.bind(this),\n      updateTransportCreatedVideo: this.updateTransportCreatedVideo.bind(this),\n      updateTransportCreatedAudio: this.updateTransportCreatedAudio.bind(this),\n      updateTransportCreatedScreen: this.updateTransportCreatedScreen.bind(this),\n      updateProducerTransport: this.updateProducerTransport.bind(this),\n      updateLocalProducerTransport: this.updateLocalProducerTransport.bind(this),\n      updateVideoProducer: this.updateVideoProducer.bind(this),\n      updateLocalVideoProducer: this.updateLocalVideoProducer.bind(this),\n      updateParams: this.updateParams.bind(this),\n      updateVideoParams: this.updateVideoParams.bind(this),\n      updateAudioParams: this.updateAudioParams.bind(this),\n      updateAudioProducer: this.updateAudioProducer.bind(this),\n      updateAudioLevel: this.updateAudioLevel.bind(this),\n      updateLocalAudioProducer: this.updateLocalAudioProducer.bind(this),\n      updateConsumerTransports: this.updateConsumerTransports.bind(this),\n      updateConsumingTransports: this.updateConsumingTransports.bind(this),\n\n      // Polls\n      updatePolls: this.updatePolls.bind(this),\n      updatePoll: this.updatePoll.bind(this),\n      updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\n\n      // Background\n      updateCustomImage: this.updateCustomImage.bind(this),\n      updateSelectedImage: this.updateSelectedImage.bind(this),\n      updateSegmentVideo: this.updateSegmentVideo.bind(this),\n      updateSelfieSegmentation: this.updateSelfieSegmentation.bind(this),\n      updatePauseSegmentation: this.updatePauseSegmentation.bind(this),\n      updateProcessedStream: this.updateProcessedStream.bind(this),\n      updateKeepBackground: this.updateKeepBackground.bind(this),\n      updateBackgroundHasChanged: this.updateBackgroundHasChanged.bind(this),\n      updateVirtualStream: this.updateVirtualStream.bind(this),\n      updateMainCanvas: this.updateMainCanvas.bind(this),\n      updatePrevKeepBackground: this.updatePrevKeepBackground.bind(this),\n      updateAppliedBackground: this.updateAppliedBackground.bind(this),\n      updateIsBackgroundModalVisible: this.updateIsBackgroundModalVisible.bind(this),\n      updateAutoClickBackground: this.updateAutoClickBackground.bind(this),\n\n      // Breakout rooms\n      updateBreakoutRooms: this.updateBreakoutRooms.bind(this),\n      updateCurrentRoomIndex: this.updateCurrentRoomIndex.bind(this),\n      updateCanStartBreakout: this.updateCanStartBreakout.bind(this),\n      updateBreakOutRoomStarted: this.updateBreakOutRoomStarted.bind(this),\n      updateBreakOutRoomEnded: this.updateBreakOutRoomEnded.bind(this),\n      updateHostNewRoom: this.updateHostNewRoom.bind(this),\n      updateLimitedBreakRoom: this.updateLimitedBreakRoom.bind(this),\n      updateMainRoomsLength: this.updateMainRoomsLength.bind(this),\n      updateMemberRoom: this.updateMemberRoom.bind(this),\n      updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\n\n      // Whiteboard\n      updateWhiteboardUsers: this.updateWhiteboardUsers.bind(this),\n      updateCurrentWhiteboardIndex: this.updateCurrentWhiteboardIndex.bind(this),\n      updateCanStartWhiteboard: this.updateCanStartWhiteboard.bind(this),\n      updateWhiteboardStarted: this.updateWhiteboardStarted.bind(this),\n      updateWhiteboardEnded: this.updateWhiteboardEnded.bind(this),\n      updateWhiteboardLimit: this.updateWhiteboardLimit.bind(this),\n      updateIsWhiteboardModalVisible: this.updateIsWhiteboardModalVisible.bind(this),\n      updateIsConfigureWhiteboardModalVisible:\n        this.updateIsConfigureWhiteboardModalVisible.bind(this),\n      updateShapes: this.updateShapes.bind(this),\n      updateUseImageBackground: this.updateUseImageBackground.bind(this),\n      updateRedoStack: this.updateRedoStack.bind(this),\n      updateUndoStack: this.updateUndoStack.bind(this),\n      updateCanvasStream: this.updateCanvasStream.bind(this),\n      updateCanvasWhiteboard: this.updateCanvasWhiteboard.bind(this),\n\n      // Screenboard\n      updateCanvasScreenboard: this.updateCanvasScreenboard.bind(this),\n      updateProcessedScreenStream: this.updateProcessedScreenStream.bind(this),\n      updateAnnotateScreenStream: this.updateAnnotateScreenStream.bind(this),\n      updateMainScreenCanvas: this.updateMainScreenCanvas.bind(this),\n      updateIsScreenboardModalVisible: this.updateIsScreenboardModalVisible.bind(this),\n\n      // Other functions\n      checkOrientation: this.checkOrientation.bind(this),\n\n      updateDevice: this.updateDevice.bind(this),\n      updateSocket: this.updateSocket.bind(this),\n      updateLocalSocket: this.updateLocalSocket.bind(this),\n      updateValidated: this.updateValidated.bind(this),\n      isDarkModeValue: this.modernMenuDarkMode.value,\n      updateIsDarkMode: this.updateModernThemeDarkMode.bind(this),\n\n      // Custom components\n      customVideoCard: this.customVideoCard,\n      customAudioCard: this.customAudioCard,\n      customMiniCard: this.customMiniCard,\n\n      showAlert: this.showAlert.bind(this),\n      getUpdatedAllParams: () => {\n\n        try {\n          if (this.sourceParameters !== null) {\n            const nextSourceParameters = {\n              ...this.getAllParams(),\n              ...this.mediaSFUFunctions(),\n            };\n            this.sourceParameters = nextSourceParameters;\n            if (this.updateSourceParameters) {\n              this.updateSourceParameters(nextSourceParameters);\n            }\n          }\n        } catch {\n          console.log('error updateSourceParameters');\n        }\n\n        return {\n          ...this.getAllParams(),\n          ...this.mediaSFUFunctions(),\n        };\n      },\n    };\n  }\n\n  mediaSFUParameters: any = {\n    ...this.getAllParams(),\n    ...this.mediaSFUFunctions(),\n  };\n\n  getUpdatedAllParams = (): any => {\n    return {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n  };\n\n  updateButtonState(buttonType: string, value: boolean) {\n    this.controlButtons = this.controlButtons.map((button) => {\n      if (buttonType === 'micActive' && button.icon === this.faMicrophoneSlash) {\n        return { ...button, active: value };\n      }\n      if (buttonType === 'videoActive' && button.icon === this.faVideoSlash) {\n        return { ...button, active: value };\n      }\n      if (buttonType === 'screenShareActive' && button.icon === this.faDesktop) {\n        if (button.alternateIconComponent) {\n          const updatedInjector = this.createInjector({\n            disabled: !value,\n            iconColor: 'currentColor',\n          });\n          return {\n            ...button,\n            active: true,\n            alternateIconComponent: { ...this.screenShareWidget, injector: updatedInjector },\n          }; //always default to true for active\n        } else {\n          return { ...button, active: true }; //always default to true for active\n        }\n      }\n      if (buttonType === 'endCallActive' && button.icon === this.faPhone) {\n        return { ...button, active: value };\n      }\n      if (buttonType === 'participantsActive' && button.icon === this.faUsers) {\n        return { ...button, active: value };\n      }\n      if (buttonType === 'modernThemeDarkMode' && button.icon === faMoon) {\n        return { ...button, active: value };\n      }\n      if (\n        buttonType === 'showMessagesBadge' &&\n        button.customName &&\n        button.customName === 'Messages'\n      ) {\n        const updatedInjector = this.createInjector({\n          icon: this.faComments,\n          badgeValue: value ? '*' : '',\n          iconColor: 'currentColor',\n          showBadge: value,\n        });\n        return { ...button, customComponent: { ...this.messageWidget, injector: updatedInjector } };\n      }\n      if (buttonType === 'showMenuBadge' && button.customName && button.customName === 'Menu') {\n        const updatedInjector = this.createInjector({\n          icon: this.faBars,\n          badgeValue: this.totalReqWait.value,\n          iconColor: 'currentColor',\n          showBadge: true,\n        });\n        return { ...button, customComponent: { ...this.menuWidget, injector: updatedInjector } };\n      }\n\n      return button;\n    });\n\n    this.cdr.detectChanges();\n  }\n\n  PrejoinPageComponent: any = {\n    component: this.PrejoinPage,\n    injector: null,\n  };\n\n  updatePrejoinPageComponent = () => {\n    const PrejoinComp = {\n      component: this.PrejoinPage,\n      injector: this.createInjector({\n        parameters: {\n          showAlert:\n            this.showAlert ||\n            (() => {\n              console.log('showAlert not defined');\n            }),\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\n          connectSocket: this.socketManager.connectSocket,\n          connectLocalSocket: this.socketManager.connectLocalSocket,\n          updateSocket: this.updateSocket,\n          updateLocalSocket: this.updateLocalSocket,\n          updateValidated: this.updateValidated,\n          updateApiUserName: this.updateApiUserName,\n          updateApiToken: this.updateApiToken,\n          updateLink: this.updateLink,\n          updateRoomName: this.updateRoomName,\n          updateMember: this.updateMember,\n        },\n        credentials: this.credentials,\n        localLink: this.localLink,\n        connectMediaSFU: this.connectMediaSFU,\n        returnUI: this.returnUI,\n        noUIPreJoinOptions: this.noUIPreJoinOptions,\n        joinMediaSFURoom: this.joinMediaSFURoom,\n        createMediaSFURoom: this.createMediaSFURoom,\n      }),\n    };\n\n    this.PrejoinPageComponent = { ...PrejoinComp };\n\n    this.cdr.detectChanges();\n  };\n\n  /**\n   * Initializes function overrides by wrapping original implementations\n   * with custom logic if provided in uiOverrides\n   */\n  initializeFunctionOverrides(): void {\n    // Apply consumerResume override\n    if (this.uiOverrideResolver.hasOverride('consumerResume')) {\n      const originalConsumerResume = this.consumerResume.consumerResume.bind(\n        this.consumerResume,\n      );\n      this.consumerResume.consumerResume = this.uiOverrideResolver.applyFunctionOverride(\n        'consumerResume',\n        originalConsumerResume,\n      );\n    }\n\n    // Apply addVideosGrid override\n    if (this.uiOverrideResolver.hasOverride('addVideosGrid')) {\n      const originalAddVideosGrid = this.addVideosGrid.addVideosGrid.bind(\n        this.addVideosGrid,\n      );\n      this.addVideosGrid.addVideosGrid = this.uiOverrideResolver.applyFunctionOverride(\n        'addVideosGrid',\n        originalAddVideosGrid,\n      );\n    }\n\n    // Apply prepopulateUserMedia override\n    if (this.uiOverrideResolver.hasOverride('prepopulateUserMedia')) {\n      const originalPrepopulateUserMedia = this.prepopulateUserMedia.prepopulateUserMedia.bind(\n        this.prepopulateUserMedia,\n      );\n      this.prepopulateUserMedia.prepopulateUserMedia = this.uiOverrideResolver.applyFunctionOverride(\n        'prepopulateUserMedia',\n        originalPrepopulateUserMedia,\n      );\n    }\n  }\n\n  ngOnInit() {\n    this.updateModernThemeDarkMode(this.resolvePreferredTheme());\n\n    // Initialize UI overrides if provided\n    if (this.uiOverrides) {\n      this.uiOverrideResolver.setOverrides(this.uiOverrides);\n    }\n\n    // Apply function overrides\n    this.initializeFunctionOverrides();\n\n    if (this.PrejoinPage) {\n      this.updatePrejoinPageComponent();\n    }\n\n    this.setupResizeListener();\n    if (this.validated) {\n      this.connectAndAddSocketMethods();\n    }\n\n    this.mainHeightWidthSubscription = this.mainHeightWidth.subscribe(() => {\n      this.updateMainVideoSize();\n    });\n\n    this.recordingSubscription = combineLatest([\n      this.recordPaused,\n      this.recordStarted,\n      this.recordStopped,\n      this.recordResumed,\n      this.recordingProgressTime,\n      this.showRecordButtons,\n      this.islevel,\n    ]).subscribe(\n      ([\n        recordPaused,\n        recordStarted,\n        recordStopped,\n        recordResumed,\n        recordingProgressTime,\n        showRecordButtons,\n        islevel,\n      ]) => {\n        if (\n          recordPaused ||\n          recordStarted ||\n          recordStopped ||\n          recordResumed ||\n          recordingProgressTime ||\n          showRecordButtons ||\n          islevel\n        ) {\n          this.updateRecordButtons();\n        }\n      },\n    );\n\n    this.ScreenboardSubscription = combineLatest([\n      this.shared,\n      this.componentSizes,\n      this.annotateScreenStream,\n    ]).subscribe(([shared, componentSizes]) => {\n      this.ScreenboardWidget = {\n        component: Screenboard,\n        inputs: {\n          customWidth: componentSizes.mainWidth,\n          customHeight: componentSizes.mainHeight,\n          parameters: this.mediaSFUParameters,\n          showAspect: shared,\n        },\n      };\n    });\n    this.validatedSubscription = this.validated.subscribe((validated) => {\n      if (validated) {\n        this.handleValidated();\n      }\n    });\n    this.islevelSubscription = this.islevel.subscribe((islevel) => {\n      if (islevel) {\n        this.updateCustomMenuButtons();\n        this.updateControlBroadcastButtons();\n        this.updateControlChatButtons();\n      }\n    });\n    this.coHostSubscription = combineLatest([this.coHost, this.coHostResponsibility]).subscribe(\n      ([coHost, coHostResponsibility]) => {\n        if (coHost || coHostResponsibility) {\n          this.updateCustomMenuButtons();\n          this.updateControlBroadcastButtons();\n          this.updateControlChatButtons();\n        }\n      },\n    );\n\n    // Subscribe to changes in BehaviorSubject and update the buttons accordingly\n    this.buttonSubscriptions.push(\n      this.micActive.subscribe((value) => {\n        this.updateButtonState('micActive', value);\n        this.updateControlBroadcastButtons();\n        this.updateControlChatButtons();\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.videoActive.subscribe((value) => {\n        this.updateButtonState('videoActive', value);\n        this.updateControlBroadcastButtons();\n        this.updateControlChatButtons();\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.screenShareActive.subscribe((value) => {\n        this.updateButtonState('screenShareActive', value);\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.showMessagesBadge.subscribe((value) => {\n        this.updateButtonState('showMessagesBadge', value);\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.totalReqWait.subscribe(() => {\n        this.updateButtonState('showMenuBadge', true);\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.participantsCounter.subscribe((value) => {\n        this.updateMenuParticipantsWidget(value);\n      }),\n    );\n\n    this.mediaSFUParameters = {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n  }\n\n  ngOnDestroy() {\n    window.removeEventListener('resize', this.handleResize);\n    window.removeEventListener('orientationchange', this.handleResize);\n    if (this.mainHeightWidthSubscription) {\n      this.mainHeightWidthSubscription.unsubscribe();\n    }\n    if (this.validatedSubscription) {\n      this.validatedSubscription.unsubscribe();\n    }\n    if (this.islevelSubscription) {\n      this.islevelSubscription.unsubscribe();\n    }\n    if (this.coHostSubscription) {\n      this.coHostSubscription.unsubscribe();\n    }\n    if (this.ScreenboardSubscription) {\n      this.ScreenboardSubscription.unsubscribe();\n    }\n    if (this.recordingSubscription) {\n      this.recordingSubscription.unsubscribe();\n    }\n  }\n\n  updateMainVideoSize = async () => {\n    if (!this.lock_screen.value && !this.shared.value) {\n      this.prepopulateUserMedia.prepopulateUserMedia({\n        name: this.hostLabel.value,\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n      });\n    } else {\n      if (!this.first_round.value) {\n        this.prepopulateUserMedia.prepopulateUserMedia({\n          name: this.hostLabel.value,\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n        });\n      }\n    }\n  };\n\n  async connectAndAddSocketMethods() {\n    this.mediaSFUParameters = {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n    const socket_ = await this.connect_Socket(this.apiUserName.value, this.apiToken.value);\n    if (socket_) {\n      this.updateSocket(socket_);\n    }\n  }\n\n  async handleValidated() {\n    this.updateAllVideoStreams([\n      { producerId: 'youyou', stream: undefined, id: 'youyou', name: 'youyou' },\n    ]);\n\n    this.updateStreamNames([{ id: 'youyou', name: 'youyou', producerId: '' }]);\n\n    if (this.validated.value) {\n\n      try {\n        if (!this.localUIMode.value) {\n          this.updateIsLoadingModalVisible(true);\n          await this.connectAndAddSocketMethods();\n        } else {\n          this.updateIsLoadingModalVisible(false);\n        }\n      } catch (error) {\n        console.log('error connectAndaAddSocketMethods', error);\n      }\n\n      this.startMeetingProgressTimer.startMeetingProgressTimer({\n        startTime: Date.now() / 1000,\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n      });\n\n      try {\n        if (this.sourceParameters !== null) {\n          const nextSourceParameters = {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          };\n          this.sourceParameters = nextSourceParameters;\n          if (this.updateSourceParameters) {\n            this.updateSourceParameters(nextSourceParameters);\n          }\n        }\n      } catch {\n        console.log('error updateSourceParameters');\n      }\n\n    }\n  }\n\n  @HostListener('window:resize')\n  @HostListener('window:orientationchange')\n  async handleResize() {\n    let fraction = 0;\n\n    if (\n      window.innerHeight < window.innerWidth &&\n      (this.eventType.value == 'webinar' || this.eventType.value == 'conference')\n    ) {\n      const currentHeight = window.innerHeight;\n      fraction = Number((40 / currentHeight).toFixed(3));\n      if (fraction != this.controlHeight.value) {\n        this.updateControlHeight(Number(fraction));\n      }\n    } else {\n      // Set default control button height for portrait mode or other event types\n      const currentHeight = window.innerHeight;\n      fraction = Number((40 / currentHeight).toFixed(3));\n      fraction = Number(fraction);\n      if (fraction != this.controlHeight.value) {\n        this.updateControlHeight(Number(fraction));\n      }\n    }\n\n    const dimensions = this.computeDimensionsMethod({\n      containerWidthFraction: this.mainScreenWidthFraction(),\n      containerHeightFraction: 1,\n      mainSize: this.mainHeightWidth.value,\n      doStack: true,\n      defaultFraction:\n        this.eventType.value == 'webinar' || this.eventType.value == 'conference'\n          ? 1 - fraction\n          : 1,\n    });\n\n    this.updateComponentSizes(dimensions);\n\n    const orientation = this.checkOrientation();\n    if (!this.shouldUseSidebar() && this.activeSidebarContent.value !== 'none') {\n      this.closeSidebar();\n    }\n    if (orientation == 'portrait') {\n      if (!this.isWideScreen.value) {\n        if (this.shareScreenStarted.value || this.shared.value) {\n          this.updateScreenForceFullDisplay(true);\n        }\n      }\n    }\n\n    // Updates the main grid view\n    await this.prepopulateUserMedia.prepopulateUserMedia({\n      name: this.hostLabel.value,\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n    });\n    // Updates the mini grid view\n    await this.onScreenChanges.onScreenChanges({\n      changed: true,\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n    });\n  }\n\n  async disconnectAllSockets(consume_sockets: ConsumeSocket[]): Promise<void> {\n    for (const socket of consume_sockets) {\n      try {\n        const ip = Object.keys(socket)[0];\n        await socket[ip].disconnect();\n      } catch (error) {\n        console.log(`Error disconnecting socket with IP: ${Object.keys(socket)[0]}`, error);\n      }\n    }\n  }\n\n  async closeAndReset() {\n    //close and clean up all sockets, modals,... and reset all states to initial values\n\n    this.updateIsMessagesModalVisible(false);\n    this.updateIsParticipantsModalVisible(false);\n    this.updateIsWaitingModalVisible(false);\n    this.updateIsRequestsModalVisible(false);\n    this.updateIsCoHostModalVisible(false);\n    this.updateIsSettingsModalVisible(false);\n    this.updateIsDisplaySettingsModalVisible(false);\n    this.updateIsMediaSettingsModalVisible(false);\n    this.updateIsMenuModalVisible(false);\n    this.closeSidebar();\n    this.updateIsShareEventModalVisible(false);\n    this.updateIsConfirmExitModalVisible(false);\n    await this.disconnectAllSockets(this.consume_sockets.value);\n    await this.updateStatesToInitialValues();\n    this.updateMeetingProgressTime('00:00:00');\n    this.updateMeetingElapsedTime(0);\n    this.updateRecordingProgressTime('00:00:00');\n    this.updateRecordElapsedTime(0);\n    this.updateShowRecordButtons(false);\n\n    this.updateIsConfigureWhiteboardModalVisible(false);\n    this.updateIsWhiteboardModalVisible(false);\n    this.updateIsMenuModalVisible(false);\n    this.updateIsRecordingModalVisible(false);\n    this.updateIsPollModalVisible(false);\n    this.updateIsBreakoutRoomsModalVisible(false);\n    this.updateIsBackgroundModalVisible(false);\n    this.updateIsLoadingModalVisible(false);\n    this.updateIsConfirmHereModalVisible(false);\n    this.liveSubtitleService.setLiveSubtitles(new Map());\n    this.activeTranslationProducerIds.clear();\n    this.speakerTranslationStates.next(new Map());\n    this.translationProducerMap.next({});\n\n    await sleep({ ms: 500 });\n    this.updateValidated(false);\n    //if on web, reload the page\n    window.location.reload();\n  }\n\n  computeDimensionsMethod = ({\n    containerWidthFraction = 1,\n    containerHeightFraction = 1,\n    mainSize,\n    doStack = true,\n    defaultFraction,\n  }: {\n    containerWidthFraction?: number;\n    containerHeightFraction?: number;\n    mainSize: number;\n    doStack?: boolean;\n    defaultFraction: number;\n  }): ComponentSizes => {\n    const parentWidth = window.innerWidth * containerWidthFraction;\n    const parentHeight = window.innerHeight * containerHeightFraction * defaultFraction;\n    let isWideScreen = parentWidth >= 768;\n\n    if (!isWideScreen && parentWidth > 1.5 * parentHeight) {\n      isWideScreen = true;\n    }\n\n    this.updateIsWideScreen(isWideScreen);\n\n    const dimensions = this.calculateDimensions({\n      parentWidth,\n      parentHeight,\n      isWideScreen,\n      mainSize,\n      doStack,\n    });\n    return dimensions;\n  };\n\n  private cleanupExpiredLiveSubtitles = () => {\n    const now = Date.now();\n    const current = this.liveSubtitleService.getLiveSubtitles();\n    const next = new Map(current);\n\n    for (const [key, subtitle] of next.entries()) {\n      if (now >= subtitle.expiresAt || isSubtitleExpired(subtitle)) {\n        next.delete(key);\n      }\n    }\n\n    this.liveSubtitleService.setLiveSubtitles(next);\n  };\n\n  calculateDimensions({\n    parentWidth,\n    parentHeight,\n    isWideScreen,\n    mainSize,\n    doStack,\n  }: {\n    parentWidth: number;\n    parentHeight: number;\n    isWideScreen: boolean;\n    mainSize: number;\n    doStack: boolean;\n  }): ComponentSizes {\n    if (doStack) {\n      return isWideScreen\n        ? {\n          mainHeight: Math.floor(parentHeight),\n          otherHeight: Math.floor(parentHeight),\n          mainWidth: Math.floor((mainSize / 100) * parentWidth),\n          otherWidth: Math.floor(((100 - mainSize) / 100) * parentWidth),\n        }\n        : {\n          mainHeight: Math.floor((mainSize / 100) * parentHeight),\n          otherHeight: Math.floor(((100 - mainSize) / 100) * parentHeight),\n          mainWidth: Math.floor(parentWidth),\n          otherWidth: Math.floor(parentWidth),\n        };\n    } else {\n      return {\n        mainHeight: Math.floor(parentHeight),\n        otherHeight: Math.floor(parentHeight),\n        mainWidth: Math.floor(parentWidth),\n        otherWidth: Math.floor(parentWidth),\n      };\n    }\n  }\n\n  handleOrientationChange() {\n    window.addEventListener('resize', this.handleResize.bind(this));\n    window.addEventListener('orientationchange', this.handleResize.bind(this));\n  }\n\n  setupResizeListener() {\n    this.handleResize();\n  }\n\n  orientation = window.innerHeight > window.innerWidth ? 'portrait' : 'landscape';\n\n  async joinRoom(data: {\n    socket: Socket;\n    roomName: string;\n    islevel: string;\n    member: string;\n    sec: string;\n    apiUserName: string;\n  }): Promise<ResponseJoinRoom | null> {\n    const { socket, roomName, islevel, member, sec, apiUserName } = data;\n\n    try {\n      const response: ResponseJoinRoom | null = await this.joinRoomClient.joinRoomClient({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n      });\n\n      return response;\n    } catch (error) {\n      console.log('Error joining room:', error);\n      throw new Error('Failed to join the room. Please check your connection and try again.');\n    }\n  }\n\n  async join_Room({\n    socket,\n    roomName,\n    islevel,\n    member,\n    sec,\n    apiUserName,\n    isLocal = false,\n  }: {\n    socket: Socket;\n    roomName: string;\n    islevel: string;\n    member: string;\n    sec: string;\n    apiUserName: string;\n    isLocal?: boolean;\n  }): Promise<void> {\n    let data: ResponseJoinRoom | null;\n\n    if (!isLocal) {\n      data = await this.joinRoom({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n      });\n    } else {\n      const localData: ResponseJoinLocalRoom = await this.joinLocalRoom.joinLocalRoom({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n        parameters: {\n          showAlert:\n            this.showAlert ||\n            (() => {\n              console.log('showAlert not defined');\n            }),\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\n          connectSocket: this.socketManager.connectSocket,\n          connectLocalSocket: this.socketManager.connectLocalSocket,\n          updateSocket: this.updateSocket,\n          updateLocalSocket: this.updateLocalSocket,\n          updateValidated: this.updateValidated,\n          updateApiUserName: this.updateApiUserName,\n          updateApiToken: this.updateApiToken,\n          updateLink: this.updateLink,\n          updateRoomName: this.updateRoomName,\n          updateMember: this.updateMember,\n        },\n        checkConnect:\n          this.localLink.length > 0 &&\n          this.connectMediaSFU === true &&\n          !this.link.value.includes('mediasfu.com'),\n        localLink: this.localLink,\n        joinMediaSFURoom: this.joinMediaSFURoom,\n      });\n\n      data = await createResponseJoinRoom({ localRoom: localData });\n    }\n\n    const updateAndComplete = async (data: ResponseJoinRoom) => {\n      // Update room parameters\n      try {\n        // Check if roomRecvIPs is not empty\n        if (!data.roomRecvIPs || data.roomRecvIPs.length === 0) {\n          data.roomRecvIPs = ['none'];\n\n          if (\n            this.link.value !== \"\" &&\n            this.link.value.includes(\"mediasfu.com\") &&\n            !isLocal\n          ) {\n            // Community Edition Only\n            await this.receiveAllPipedTransports.receiveAllPipedTransports({\n              community: true,\n              nsock: this.getUpdatedAllParams().socket,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n        }\n\n\n        this.updateRoomParametersClient.updateRoomParametersClient({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n            data: data,\n          },\n        });\n\n        if (data.isHost) {\n          this.updateIslevel('2');\n        } else {\n          // Issue with isHost for local room\n          if (islevel !== '2') {\n            this.updateIslevel('1');\n          }\n        }\n\n        if (data.secureCode && data.secureCode !== '') {\n          this.updateAdminPasscode(data.secureCode);\n        }\n\n        if (data.rtpCapabilities) {\n          try {\n            const device_ = await this.createDeviceClient.createDeviceClient({\n              rtpCapabilities: data.rtpCapabilities,\n            });\n\n            if (device_) {\n              this.device.next(device_);\n            }\n          } catch (error) {\n            console.error('Error creating device:', error);\n          }\n        }\n      } catch (error) {\n        console.error('Error in updateAndComplete:', error);\n      }\n    };\n\n    if (data && data.success) {\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && isLocal) {\n        this.roomData.next(data);\n        return;\n      } else if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\n        // Update roomData\n        if (this.roomData.value) {\n          // Updating only the recording and meeting room parameters\n          this.roomData.value.recordingParams = data.recordingParams;\n          this.roomData.value.meetingRoomParams = data.meetingRoomParams;\n          this.roomData.next(this.roomData.value);\n        } else {\n          this.roomData.next(data);\n        }\n      } else {\n        // Update roomData\n        this.roomData.next(data);\n        if (!this.link.value.includes('mediasfu.com')) {\n          this.roomData.value!.meetingRoomParams = data.meetingRoomParams;\n        }\n      }\n\n      await updateAndComplete(data);\n    } else {\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\n        // Join local room only\n        if (this.roomData.value) {\n          await updateAndComplete(this.roomData.value);\n        }\n        return;\n      }\n\n      // Might be a wrong room name or room is full or other error; check reason in data object if available\n      try {\n        if (this.showAlert && data?.reason) {\n          this.showAlert({\n            message: data.reason,\n            type: 'danger',\n            duration: 3000,\n          });\n        }\n      } catch (error) {\n        /* handle error */\n      }\n    }\n  }\n\n\n  onParticipantsFilterChange = (value: string): void => {\n    if (value && value.length > 0) {\n      this.filteredParticipants.next(\n        this.participants.value.filter((participant) =>\n          participant.name.toLowerCase().includes(value.toLowerCase()),\n        ),\n      );\n      this.participantsCounter.next(this.filteredParticipants.value.length);\n    } else {\n      this.filteredParticipants.next(this.participants.value);\n      this.participantsCounter.next(this.participants.value.length);\n    }\n  };\n\n  updateStatesToInitialValues = async () => {\n    const initialValues = initialValuesState as { [key: string]: any };\n    const updateFunctions = this.getAllParams() as unknown as {\n      [key: string]: (value: any) => void;\n    };\n\n    for (const key in initialValues) {\n      if (Object.prototype.hasOwnProperty.call(initialValues, key)) {\n        const updateFunctionName = `update${key.charAt(0).toUpperCase() + key.slice(1)}`;\n        const updateFunction = updateFunctions[updateFunctionName];\n\n        if (typeof updateFunction === 'function') {\n          try {\n            updateFunction(initialValues[key]);\n          } catch {\n            /* handle error */\n          }\n        }\n      }\n    }\n  };\n\n  faRecordVinyl = faRecordVinyl;\n  faPlayCircle = faPlayCircle;\n  faPauseCircle = faPauseCircle;\n  faStopCircle = faStopCircle;\n  faDotCircle = faDotCircle;\n  faCog = faCog;\n  faUsers = faUsers;\n  faClock = faClock;\n  faUserPlus = faUserPlus;\n  faTools = faTools;\n  faDesktop = faDesktop;\n  faPoll = faPoll;\n  faUserFriends = faUserFriends;\n  faChalkboardTeacher = faChalkboardTeacher;\n  faMicrophone = faMicrophone;\n  faMicrophoneSlash = faMicrophoneSlash;\n  faVideo = faVideo;\n  faVideoSlash = faVideoSlash;\n  faSync = faSync;\n  faPhone = faPhone;\n  faShareAlt = faShareAlt;\n  faBars = faBars;\n  faComments = faComments;\n  faChartBar = faChartBar;\n\n  onCloseMenuModal = () => {\n    this.updateIsMenuModalVisible(false);\n    if (this.activeSidebarContent.value === 'menu') {\n      this.closeSidebar();\n    }\n  };\n\n  onEventSettingsClose = () => {\n    this.updateIsSettingsModalVisible(false);\n  };\n\n  onTranslationSettingsClose = () => {\n    this.updateIsTranslationSettingsModalVisible(false);\n  };\n\n  onCoHostClose = () => {\n    this.updateIsCoHostModalVisible(false);\n  };\n\n  onMediaSettingsClose = () => {\n    this.updateIsMediaSettingsModalVisible(false);\n  };\n\n  onDisplaySettingsClose = () => {\n    this.updateIsDisplaySettingsModalVisible(false);\n  };\n\n  onPollClose = () => {\n    this.updateIsPollModalVisible(false);\n  };\n\n  onBreakoutRoomsClose = () => {\n    this.updateIsBreakoutRoomsModalVisible(false);\n  };\n\n  onConfigureWhiteboardClose = () => {\n    this.updateIsConfigureWhiteboardModalVisible(false);\n  };\n\n  onMessagesClose = () => {\n    this.updateIsMessagesModalVisible(false);\n  };\n\n  onRecordingClose = () => {\n    this.updateIsRecordingModalVisible(false);\n  };\n\n  onParticipantsClose = () => {\n    this.updateIsParticipantsModalVisible(false);\n  };\n\n  onBackgroundClose = () => {\n    this.updateIsBackgroundModalVisible(false);\n  };\n\n  onConfirmExitClose = () => {\n    this.updateIsConfirmExitModalVisible(false);\n  };\n\n  onConfirmHereClose = () => {\n    this.updateIsConfirmHereModalVisible(false);\n  };\n\n  onSuppressConfirmHere = () => {\n    this.suppressConfirmHereForSession = true;\n  };\n\n  onScreenboardClose = () => {\n    this.updateIsScreenboardModalVisible(false);\n  };\n\n  onShareEventClose = () => {\n    this.updateIsShareEventModalVisible(false);\n  };\n\n  onAlertHide = () => {\n    this.updateAlertVisible(false);\n  };\n\n  ScreenboardWidget = {\n    component: Screenboard,\n    inputs: {\n      customWidth: this.componentSizes.value.mainWidth,\n      customHeight: this.componentSizes.value.mainHeight,\n      parameters: this.mediaSFUParameters,\n      showAspect: this.shared.value,\n    },\n  };\n\n  recordTimerWidget = {\n    component: RecordTimerWidget,\n    injector: this.createInjector({ recordingProgressTime: this.recordingProgressTime.value }),\n  };\n\n  updateRecordTimerWidget = (\n    recordingProgressTime: string = this.recordingProgressTime.value,\n  ): { component: any; injector: Injector } => {\n    const recordTimerWidget = {\n      component: RecordTimerWidget,\n      injector: this.createInjector({ recordingProgressTime: recordingProgressTime }),\n    };\n\n    this.recordTimerWidget = { ...recordTimerWidget };\n\n    this.cdr.markForCheck();\n\n    return recordTimerWidget;\n  };\n\n  recordButton = [\n    {\n      icon: this.faRecordVinyl,\n      text: 'Record',\n      onPress: () => {\n        this.launchRecording.launchRecording({\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\n          showAlert: this.showAlert.bind(this),\n          stopLaunchRecord: this.stopLaunchRecord.value,\n          canLaunchRecord: this.canLaunchRecord.value,\n          recordingAudioSupport: this.recordingAudioSupport.value,\n          recordingVideoSupport: this.recordingVideoSupport.value,\n          updateCanRecord: this.updateCanRecord.bind(this),\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\n          recordStarted: this.recordStarted.value,\n          recordPaused: this.recordPaused.value,\n          localUIMode: this.localUIMode.value,\n        });\n      },\n      activeColor: () => this.controlStripTextColor(),\n      inActiveColor: () => this.controlStripTextColor(),\n      show: true,\n    },\n  ];\n\n  recordButtons: MainButtonAlt[] = [];\n\n  recordButtonsArray: MainButtonAlt[] = [\n    {\n      icon: this.faPlayCircle,\n      active: () => !this.recordPaused.value,\n      onPress: () =>\n        this.updateRecording.updateRecording({\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n        }),\n      activeColor: () => this.controlStripTextColor(),\n      inActiveColor: () => this.controlStripTextColor(),\n      alternateIcon: this.faPauseCircle,\n      show: () => true,\n    },\n    {\n      icon: this.faStopCircle,\n      active: () => false,\n      onPress: () =>\n        this.stopRecording.stopRecording({\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n        }),\n      activeColor: 'green',\n      inActiveColor: () => this.controlStripTextColor(),\n      show: () => true,\n    },\n    {\n      customComponent: () => this.updateRecordTimerWidget(),\n      show: () => true,\n      active: () => false,\n    },\n    {\n      icon: this.faDotCircle,\n      active: () => false,\n      onPress: () => console.log('Status pressed'),\n      activeColor: () => this.controlStripTextColor(),\n      inActiveColor: () => (this.recordPaused.value ? 'yellow' : 'red'),\n      show: () => true,\n    },\n    {\n      icon: this.faCog,\n      active: () => false,\n      onPress: () =>\n        this.launchRecording.launchRecording({\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\n          showAlert: this.showAlert.bind(this),\n          stopLaunchRecord: this.stopLaunchRecord.value,\n          canLaunchRecord: this.canLaunchRecord.value,\n          recordingAudioSupport: this.recordingAudioSupport.value,\n          recordingVideoSupport: this.recordingVideoSupport.value,\n          updateCanRecord: this.updateCanRecord.bind(this),\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\n          recordStarted: this.recordStarted.value,\n          recordPaused: this.recordPaused.value,\n          localUIMode: this.localUIMode.value,\n        }),\n      activeColor: 'green',\n      inActiveColor: () => this.controlStripTextColor(),\n      show: () => true,\n    },\n  ];\n\n  async updateRecordButtons() {\n    const recordButtons = this.recordButtonsArray.map((button) => {\n      return {\n        ...button,\n        active: typeof button.active === 'function' ? button.active() : button.active,\n        show: typeof button.show === 'function' ? button.show() : button.show,\n        customComponent: button.customComponent\n          ? typeof button.customComponent === 'function'\n            ? button.customComponent()\n            : button.customComponent\n          : undefined,\n        activeColor:\n          typeof button.activeColor === 'function' ? button.activeColor() : button.activeColor,\n        inActiveColor:\n          typeof button.inActiveColor === 'function'\n            ? button.inActiveColor()\n            : button.inActiveColor,\n      };\n    });\n    this.recordButtons = [...recordButtons];\n    await this.updateMenuRecordWidget(recordButtons);\n    this.updateCustomMenuButtons();\n    this.updateControlBroadcastButtons();\n\n    this.cdr.markForCheck();\n  }\n\n  // Create instances of the custom widgets\n  menuWidget = {\n    component: MenuWidget,\n    injector: this.createInjector({\n      icon: this.faBars,\n      badgeValue: this.totalReqWait.value,\n      iconColor: 'currentColor',\n      showBadge: true,\n    }),\n  };\n\n  private buildMessageWidget() {\n    return {\n      component: MessageWidget,\n      injector: this.createInjector({\n        icon: this.faComments,\n        showBadge: this.showMessagesBadge.value,\n        badgeValue: '*',\n        iconColor: this.controlStripTextColor(),\n      }),\n    };\n  }\n\n  messageWidget = this.buildMessageWidget();\n\n  menuRecordWidget = {\n    component: MenuRecordWidget,\n    injector: this.createInjector({\n      buttons: this.recordButtons,\n      showAspect: true,\n      direction: 'horizontal',\n    }),\n  };\n\n  updateMenuRecordWidget = (recordButtons: MainButtonAlt[] = this.recordButtons): any => {\n    const menuRecordWidget = {\n      component: MenuRecordWidget,\n      injector: this.createInjector({\n        buttons: recordButtons,\n        showAspect: true,\n        direction: 'horizontal',\n      }),\n    };\n\n    this.menuRecordWidget = { ...menuRecordWidget };\n\n    this.cdr.markForCheck();\n\n    return menuRecordWidget;\n  };\n\n  menuParticipantsWidget = {\n    component: MenuParticipantsWidget,\n    injector: this.createInjector({\n      icon: this.faUsers,\n      participantsCounter: this.participantsCounter.value,\n      iconColor: 'currentColor',\n    }),\n  };\n\n  updateMenuParticipantsWidget = (count: number = this.participantsCounter.value): any => {\n    const menuParticipantsWidget = {\n      component: MenuParticipantsWidget,\n      injector: this.createInjector({\n        icon: this.faUsers,\n        participantsCounter: count,\n        iconColor: 'currentColor',\n      }),\n    };\n\n    this.menuParticipantsWidget = { ...menuParticipantsWidget };\n\n    this.cdr.markForCheck();\n\n    return menuParticipantsWidget;\n  };\n\n  customMenuButtonsArray: MainCustomButton[] = [\n    {\n      icon: this.faRecordVinyl,\n      text: 'Record',\n      action: () => {\n        if (this.openMenuPanelContent('recording')) {\n          return;\n        }\n\n        this.launchRecording.launchRecording({\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\n          showAlert: this.showAlert.bind(this),\n          stopLaunchRecord: this.stopLaunchRecord.value,\n          canLaunchRecord: this.canLaunchRecord.value,\n          recordingAudioSupport: this.recordingAudioSupport.value,\n          recordingVideoSupport: this.recordingVideoSupport.value,\n          updateCanRecord: this.updateCanRecord.bind(this),\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\n          recordStarted: this.recordStarted.value,\n          recordPaused: this.recordPaused.value,\n          localUIMode: this.localUIMode.value,\n        });\n      },\n      show: () => !this.showRecordButtons.value && this.islevel.value == '2',\n    },\n    {\n      customComponent: () => this.updateMenuRecordWidget(),\n      show: () => this.showRecordButtons.value && this.islevel.value == '2',\n      action: () => console.log('record buttons pressed'),\n    },\n    {\n      icon: this.faCog,\n      text: 'Event Settings',\n      action: () => {\n        if (this.openMenuPanelContent('eventSettings')) {\n          return;\n        }\n\n        this.launchSettings.launchSettings({\n          updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\n          isSettingsModalVisible: this.isSettingsModalVisible.value,\n        });\n      },\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: faLanguage,\n      text: 'Translation',\n      action: () => {\n        if (this.openMenuPanelContent('translation')) {\n          return;\n        }\n\n        this.updateIsTranslationSettingsModalVisible(true);\n      },\n      show: () => this.translationSupported.value || this.canUsePersonalTranslation,\n    },\n    {\n      icon: this.faUsers,\n      text: 'Requests',\n      action: () => {\n        if (this.openMenuPanelContent('requests')) {\n          return;\n        }\n\n        this.launchRequests.launchRequests({\n          updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\n          isRequestsModalVisible: this.isRequestsModalVisible.value,\n        });\n      },\n      show: () =>\n        this.islevel.value == '2' ||\n        ((this.coHostResponsibility.value &&\n          this.coHost.value &&\n          this.coHost.value === this.member.value &&\n          !!this.coHostResponsibility?.value?.find((item) => item.name === 'media')?.value) ??\n          false) ||\n        false,\n    },\n    {\n      icon: this.faClock,\n      text: 'Waiting',\n      action: () => {\n        if (this.openMenuPanelContent('waiting')) {\n          return;\n        }\n\n        this.launchWaiting.launchWaiting({\n          updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\n          isWaitingModalVisible: this.isWaitingModalVisible.value,\n        });\n      },\n      show: () =>\n        this.islevel.value == '2' ||\n        (this.coHostResponsibility.value &&\n          this.coHost.value &&\n          this.coHost.value === this.member.value &&\n          this.coHostResponsibility?.value?.find((item) => item.name === 'waiting')?.value ===\n          true) ||\n        false,\n    },\n    {\n      icon: this.faUserPlus,\n      text: 'Co-host',\n      action: () => {\n        if (this.openMenuPanelContent('coHost')) {\n          return;\n        }\n\n        this.launchCoHost.launchCoHost({\n          updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\n          isCoHostModalVisible: this.isCoHostModalVisible.value,\n        });\n      },\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faTools,\n      text: 'Set Media',\n      action: () => {\n        if (this.shouldUseSidebar()) {\n          void this.updateActiveSidebarContent(\n            'mediaSettings',\n            this.activeSidebarContent.value !== 'none' &&\n              this.activeSidebarContent.value !== 'mediaSettings',\n          );\n          return;\n        }\n\n        if (this.isMobileMenuShellActive()) {\n          void this.updateActiveMobileMenuContent(\n            'mediaSettings',\n            this.mobileMenuShellContent() !== 'none' &&\n              this.mobileMenuShellContent() !== 'mediaSettings',\n          );\n          return;\n        }\n\n        void this.launchMediaSettings.launchMediaSettings({\n          updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\n          isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\n          audioInputs: this.audioInputs.value,\n          videoInputs: this.videoInputs.value,\n          updateAudioInputs: this.updateAudioInputs.bind(this),\n          updateVideoInputs: this.updateVideoInputs.bind(this),\n        });\n      },\n      show: () => true,\n    },\n    {\n      icon: this.faDesktop,\n      text: 'Display',\n      action: () => {\n        if (this.openMenuPanelContent('displaySettings')) {\n          return;\n        }\n\n        this.launchDisplaySettings.launchDisplaySettings({\n          updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\n          isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\n        });\n      },\n      show: () => true,\n    },\n    {\n      icon: this.faPoll,\n      text: 'Poll',\n      action: () => {\n        if (this.openMenuPanelContent('poll')) {\n          return;\n        }\n\n        this.launchPoll.launchPoll({\n          updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\n          isPollModalVisible: this.isPollModalVisible.value,\n        });\n      },\n      show: () => true,\n    },\n    {\n      icon: this.faUserFriends,\n      text: 'Breakout Rooms',\n      action: () => {\n        if (this.openMenuPanelContent('breakoutRooms')) {\n          return;\n        }\n\n        this.launchBreakoutRooms.launchBreakoutRooms({\n          updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\n          isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\n        });\n      },\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faChalkboardTeacher,\n      text: 'Whiteboard',\n      action: () => {\n        if (this.openMenuPanelContent('configureWhiteboard')) {\n          return;\n        }\n\n        this.launchConfigureWhiteboard.launchConfigureWhiteboard({\n          updateIsConfigureWhiteboardModalVisible:\n            this.updateIsConfigureWhiteboardModalVisible.bind(this),\n          isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\n        });\n      },\n      show: () => this.islevel.value == '2',\n    },\n  ];\n\n  customMenuButtons: MainCustomButton[] = [];\n\n  updateCustomMenuButtons() {\n    this.customMenuButtons = this.customMenuButtonsArray.map((button) => {\n      return {\n        ...button,\n        show: typeof button.show === 'function' ? button.show() : button.show,\n        customComponent: button.customComponent\n          ? typeof button.customComponent === 'function'\n            ? button.customComponent()\n            : button.customComponent\n          : undefined,\n      };\n    });\n  }\n\n  controlBroadcastButtons: ButtonTouch[] = [];\n\n  updateControlBroadcastButtons() {\n    this.controlBroadcastButtons = this.controlBroadcastButtonsArray.map((button) => {\n      return {\n        ...button,\n        show: typeof button.show === 'function' ? button.show() : button.show,\n        active: typeof button.active === 'function' ? button.active() : button.active,\n        customComponent: button.customComponent\n          ? typeof button.customComponent === 'function'\n            ? button.customComponent()\n            : button.customComponent\n          : undefined,\n      };\n    });\n  }\n\n  controlBroadcastButtonsArray: ButtonTouch[] = [\n    {\n      icon: faMoon,\n      alternateIcon: faSun,\n      active: () => this.modernMenuDarkMode.value,\n      onPress: () => this.updateModernThemeDarkMode(!this.modernMenuDarkMode.value),\n      activeColor: 'rgba(255,255,255,0.9)',\n      inActiveColor: 'rgba(0,0,0,0.9)',\n      show: () => true,\n    },\n    {\n      icon: this.faUsers,\n      active: true,\n      alternateIcon: this.faUsers,\n      onPress: () =>\n        this.launchParticipants.launchParticipants({\n          updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\n          isParticipantsModalVisible: this.isParticipantsModalVisible.value,\n        }),\n      backgroundColor: { default: 'transparent' },\n      activeColor: () => this.controlStripTextColor(),\n      inActiveColor: () => this.controlStripTextColor(),\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faShareAlt,\n      active: true,\n      alternateIcon: this.faShareAlt,\n      onPress: () => this.updateIsShareEventModalVisible(!this.isShareEventModalVisible.value),\n      backgroundColor: { default: 'transparent' },\n      activeColor: () => this.controlStripTextColor(),\n      inActiveColor: () => this.controlStripTextColor(),\n      show: () => true,\n    },\n    {\n      customComponent: () => this.messageWidget,\n      onPress: () =>\n        this.launchMessages.launchMessages({\n          updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\n          isMessagesModalVisible: this.isMessagesModalVisible.value,\n        }),\n      show: () => true,\n    },\n    {\n      icon: this.faSync,\n      active: true,\n      alternateIcon: this.faSync,\n      onPress: () =>\n        this.switchVideoAlt.switchVideoAlt({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      backgroundColor: { default: 'transparent' },\n      activeColor: () => this.controlStripTextColor(),\n      inActiveColor: () => this.controlStripTextColor(),\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faVideoSlash,\n      alternateIcon: this.faVideo,\n      active: () => this.videoActive.value,\n      onPress: () =>\n        this.clickVideo.clickVideo({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      show: () => this.islevel.value == '2',\n      activeColor: 'green',\n      inActiveColor: 'red',\n    },\n    {\n      icon: this.faMicrophoneSlash,\n      alternateIcon: this.faMicrophone,\n      active: () => this.micActive.value,\n      onPress: () =>\n        this.clickAudio.clickAudio({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faPhone,\n      active: this.endCallActive.value,\n      onPress: () =>\n        this.launchConfirmExit.launchConfirmExit({\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      show: () => true,\n    },\n    {\n      icon: this.faPhone,\n      active: this.endCallActive.value,\n      onPress: () => console.log('End Call pressed'),\n      activeColor: 'transparent',\n      inActiveColor: 'transparent',\n      backgroundColor: { default: 'transparent' },\n      show: () => false,\n    },\n  ];\n\n  controlChatButtons: ButtonTouch[] = [];\n\n  controlChatButtonsArray: ButtonTouch[] = [\n    {\n      icon: faMoon,\n      alternateIcon: faSun,\n      active: () => this.modernMenuDarkMode.value,\n      onPress: () => this.updateModernThemeDarkMode(!this.modernMenuDarkMode.value),\n      activeColor: 'rgba(255,255,255,0.9)',\n      inActiveColor: 'rgba(0,0,0,0.9)',\n      show: true,\n    },\n    {\n      icon: this.faShareAlt,\n      active: true,\n      alternateIcon: this.faShareAlt,\n      onPress: () => this.updateIsShareEventModalVisible(!this.isShareEventModalVisible.value),\n      activeColor: 'black',\n      inActiveColor: 'black',\n      show: true,\n    },\n    {\n      customComponent: () => this.messageWidget,\n      onPress: () =>\n        this.launchMessages.launchMessages({\n          updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\n          isMessagesModalVisible: this.isMessagesModalVisible.value,\n        }),\n      show: true,\n    },\n    {\n      icon: this.faSync,\n      active: true,\n      alternateIcon: this.faSync,\n      onPress: () =>\n        this.switchVideoAlt.switchVideoAlt({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      activeColor: 'black',\n      inActiveColor: 'black',\n      show: true,\n    },\n    {\n      icon: this.faVideoSlash,\n      alternateIcon: this.faVideo,\n      active: () => this.videoActive.value,\n      onPress: () =>\n        this.clickVideo.clickVideo({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      show: true,\n    },\n    {\n      icon: this.faMicrophoneSlash,\n      alternateIcon: this.faMicrophone,\n      active: () => this.micActive.value,\n      onPress: () =>\n        this.clickAudio.clickAudio({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      show: true,\n    },\n    {\n      icon: this.faPhone,\n      active: this.endCallActive.value,\n      onPress: () =>\n        this.launchConfirmExit.launchConfirmExit({\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      show: true,\n    },\n  ];\n\n  updateControlChatButtons() {\n    this.controlChatButtons = this.controlChatButtonsArray.map((button) => {\n      return {\n        ...button,\n        show: typeof button.show === 'function' ? button.show() : button.show,\n        active: typeof button.active === 'function' ? button.active() : button.active,\n      };\n    });\n  }\n\n  screenShareWidget = {\n    component: ScreenShareWidget,\n    injector: this.createInjector({\n      disabled: !this.screenShareActive.value,\n      iconColor: 'currentColor',\n    }),\n  };\n\n  controlButtons: any[] = [\n    {\n      name: () => (this.micActive.value ? 'Mute' : 'Unmute'),\n      icon: this.faMicrophoneSlash,\n      alternateIcon: this.faMicrophone,\n      active: this.micActive.value,\n      onPress: () =>\n        this.clickAudio.clickAudio({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      disabled: this.audioSwitching.value,\n      show: true,\n    },\n    {\n      name: () => (this.videoActive.value ? 'Video Off' : 'Video On'),\n      icon: this.faVideoSlash,\n      alternateIcon: this.faVideo,\n      active: this.videoActive.value,\n      onPress: () =>\n        this.clickVideo.clickVideo({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n            MediaStream,\n            MediaStreamTrack,\n            mediaDevices: navigator.mediaDevices,\n            device: this.device.value,\n            socket: this.socket.value,\n            showAlert: this.showAlert.bind(this),\n            checkPermission: this.checkPermission.checkPermission,\n            streamSuccessVideo: this.streamSuccessVideo.streamSuccessVideo,\n            hasCameraPermission: this.hasCameraPermission.value,\n            requestPermissionCamera: this.requestPermissionCamera.bind(this),\n            checkMediaPermission: 'web' !== 'web',\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      disabled: this.videoSwitching.value,\n      show: true,\n    },\n    {\n      name: 'Share Screen',\n      //inverted active for inactive state\n      icon: faDesktop,\n      alternateIconComponent: this.screenShareWidget,\n      active: true,\n      onPress: () =>\n        this.clickScreenShare.clickScreenShare({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n            mediaDevices: navigator.mediaDevices,\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      disabled: false,\n      show: true,\n    },\n    {\n      name: 'End',\n      icon: this.faPhone,\n      active: this.endCallActive.value,\n      onPress: () =>\n        this.launchConfirmExit.launchConfirmExit({\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      disabled: false,\n      show: true,\n    },\n    {\n      name: 'People',\n      icon: this.faUsers,\n      active: this.participantsActive.value,\n      onPress: () =>\n        this.shouldUseSidebar()\n          ? this.updateActiveSidebarContent('participants')\n          : this.launchParticipants.launchParticipants({\n              updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\n              isParticipantsModalVisible: this.isParticipantsModalVisible.value,\n            }),\n      activeColor: () => this.controlStripTextColor(),\n      inActiveColor: () => this.controlStripTextColor(),\n      disabled: false,\n      show: true,\n    },\n    {\n      name: 'Menu',\n      customComponent: this.menuWidget,\n      customName: 'Menu',\n      onPress: () =>\n        this.shouldUseSidebar()\n          ? this.updateActiveSidebarContent('menu')\n          : this.launchMenuModal.launchMenuModal({\n              updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\n              isMenuModalVisible: this.isMenuModalVisible.value,\n            }),\n      show: true,\n    },\n    {\n      name: 'Chat',\n      customComponent: () => this.messageWidget,\n      customName: 'Messages',\n      onPress: () =>\n        this.shouldUseSidebar()\n          ? this.updateActiveSidebarContent('messages')\n          : this.launchMessages.launchMessages({\n              updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\n              isMessagesModalVisible: this.isMessagesModalVisible.value,\n            }),\n      show: true,\n    },\n    {\n      name: 'Record',\n      icon: this.faRecordVinyl,\n      onPress: () =>\n        this.launchRecording.launchRecording({\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\n          showAlert: this.showAlert.bind(this),\n          stopLaunchRecord: this.stopLaunchRecord.value,\n          canLaunchRecord: this.canLaunchRecord.value,\n          recordingAudioSupport: this.recordingAudioSupport.value,\n          recordingVideoSupport: this.recordingVideoSupport.value,\n          updateCanRecord: this.updateCanRecord.bind(this),\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\n          recordStarted: this.recordStarted.value,\n          recordPaused: this.recordPaused.value,\n          localUIMode: this.localUIMode.value,\n        }),\n      activeColor: () => this.controlStripTextColor(),\n      inActiveColor: () => this.controlStripTextColor(),\n      disabled: false,\n      show: () => this.shouldUseSidebar() && !this.showRecordButtons.value && this.islevel.value == '2',\n    },\n    {\n      name: 'Media',\n      icon: this.faTools,\n      onPress: () =>\n        this.launchMediaSettings.launchMediaSettings({\n          updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\n          isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\n          audioInputs: this.audioInputs.value,\n          videoInputs: this.videoInputs.value,\n          updateAudioInputs: this.updateAudioInputs.bind(this),\n          updateVideoInputs: this.updateVideoInputs.bind(this),\n        }),\n      activeColor: () => this.controlStripTextColor(),\n      inActiveColor: () => this.controlStripTextColor(),\n      disabled: false,\n      show: () => this.shouldUseSidebar(),\n    },\n    {\n      name: 'Display',\n      icon: this.faDesktop,\n      onPress: () =>\n        this.launchDisplaySettings.launchDisplaySettings({\n          updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\n          isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\n        }),\n      activeColor: () => this.controlStripTextColor(),\n      inActiveColor: () => this.controlStripTextColor(),\n      disabled: false,\n      show: () => this.shouldUseSidebar(),\n    },\n    {\n      name: 'Requests',\n      icon: this.faUserPlus,\n      onPress: () =>\n        this.launchRequests.launchRequests({\n          updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\n          isRequestsModalVisible: this.isRequestsModalVisible.value,\n        }),\n      activeColor: () => this.controlStripTextColor(),\n      inActiveColor: () => this.controlStripTextColor(),\n      disabled: false,\n      show: () =>\n        this.shouldUseSidebar() && (\n          this.islevel.value == '2' ||\n          ((this.coHostResponsibility.value &&\n          this.coHost.value &&\n          this.coHost.value === this.member.value &&\n          !!this.coHostResponsibility?.value?.find((item) => item.name === 'media')?.value) ??\n          false)\n        ),\n    },\n    {\n      name: 'Polls',\n      icon: this.faPoll,\n      onPress: () =>\n        this.launchPoll.launchPoll({\n          updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\n          isPollModalVisible: this.isPollModalVisible.value,\n        }),\n      activeColor: () => this.controlStripTextColor(),\n      inActiveColor: () => this.controlStripTextColor(),\n      disabled: false,\n      show: () => this.shouldUseSidebar() && (this.islevel.value == '2' || this.polls.value.length > 0),\n    },\n    {\n      name: 'Rooms',\n      icon: this.faUserFriends,\n      onPress: () =>\n        this.launchBreakoutRooms.launchBreakoutRooms({\n          updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\n          isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\n        }),\n      activeColor: () => this.controlStripTextColor(),\n      inActiveColor: () => this.controlStripTextColor(),\n      disabled: false,\n      show: () => this.shouldUseSidebar() && this.islevel.value == '2',\n    },\n  ];\n\n  async connect_Socket(\n    apiUserName: string,\n    token: string,\n    skipSockets: boolean = false\n  ): Promise<Socket | null> {\n\n    const socketDefault = this.socket.value;\n    const socketAlt =\n      this.connectMediaSFU && this.localSocket!.value && this.localSocket!.value.id\n        ? this.localSocket!.value\n        : socketDefault;\n\n    if (this.socket.value && this.socket.value.id) {\n      if (!skipSockets) {\n        // Event listeners on socketDefault\n        socketDefault.on('disconnect', async () => {\n          await this.disconnect.disconnect({\n            showAlert: this.showAlert.bind(this),\n            redirectURL: this.redirectURL.value,\n            onWeb: true,\n            updateValidated: this.updateValidated.bind(this),\n          });\n          if (this.videoAlreadyOn.value) {\n            await this.clickVideo.clickVideo({\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n          if (this.audioAlreadyOn.value) {\n            await this.clickAudio.clickAudio({\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n          await this.closeAndReset();\n        });\n\n        socketDefault.on('allMembers', async (membersData: AllMembersData) => {\n          if (membersData) {\n            this.syncSpeakerTranslationStatesFromMembers(membersData.members);\n\n            await this.allMembers.allMembers({\n              apiUserName: apiUserName,\n              apiKey: '', //not recommended - use apiToken instead. Use for testing/development only\n              apiToken: token,\n              members: membersData.members,\n              requestss: membersData.requests ? membersData.requests : this.requestList.value,\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\n              coHostRes: membersData.coHostResponsibilities\n                ? membersData.coHostResponsibilities\n                : this.coHostResponsibility.value,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              consume_sockets: this.consume_sockets.value,\n            });\n\n            setTimeout(() => {\n              void this.pauseTranslatedOriginalsForMembers(membersData.members);\n            }, 2000);\n          }\n        });\n\n        socketDefault.on('allMembersRest', async (membersData: AllMembersRestData) => {\n          if (membersData) {\n            this.syncSpeakerTranslationStatesFromMembers(membersData.members);\n\n            await this.allMembersRest.allMembersRest({\n              apiUserName: apiUserName,\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\n              members: membersData.members,\n              apiToken: token,\n              settings: membersData.settings,\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\n              coHostRes: membersData.coHostResponsibilities\n                ? membersData.coHostResponsibilities\n                : this.coHostResponsibility.value,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              consume_sockets: this.consume_sockets.value,\n            });\n\n            setTimeout(() => {\n              void this.pauseTranslatedOriginalsForMembers(membersData.members);\n            }, 2000);\n          }\n        });\n\n        socketDefault.on('userWaiting', async ({ name }: { name: string }) => {\n          await this.userWaiting.userWaiting({\n            name,\n            showAlert: this.showAlert.bind(this),\n            totalReqWait: this.totalReqWait.value,\n            updateTotalReqWait: this.updateTotalReqWait.bind(this),\n          });\n        });\n\n        socketDefault.on('personJoined', async ({ name }: { name: string }) => {\n          this.personJoined.personJoined({\n            name,\n            showAlert: this.showAlert.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'allWaitingRoomMembers',\n          async (waiting_data: AllWaitingRoomMembersData) => {\n            await this.allWaitingRoomMembers.allWaitingRoomMembers({\n              waitingParticipants: waiting_data.waitingParticipants\n                ? waiting_data.waitingParticipants\n                : waiting_data.waitingParticipantss\n                  ? waiting_data.waitingParticipantss\n                  : this.waitingRoomList.value,\n              updateTotalReqWait: this.updateTotalReqWait.bind(this),\n              updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\n            });\n          },\n        );\n\n        socketDefault.on('ban', async ({ name }: { name: string }) => {\n          await this.banParticipant.banParticipant({\n            name,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        });\n\n        socketDefault.on('updatedCoHost', async (cohost_data: UpdatedCoHostData) => {\n          await this.updatedCoHost.updatedCoHost({\n            coHost: cohost_data.coHost ? cohost_data.coHost : this.coHost.value,\n            coHostResponsibility: cohost_data.coHostResponsibilities\n              ? cohost_data.coHostResponsibilities\n              : this.coHostResponsibility.value,\n            youAreCoHost: this.youAreCoHost.value,\n            updateCoHost: this.updateCoHost.bind(this),\n            updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\n            updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\n            showAlert: this.showAlert.bind(this),\n            eventType: this.eventType.value,\n            islevel: this.islevel.value,\n            member: this.member.value,\n          });\n        });\n\n        socketDefault.on(\n          'participantRequested',\n          async ({ userRequest }: { userRequest: Request }) => {\n            await this.participantRequested.participantRequested({\n              userRequest,\n              requestList: this.requestList.value,\n              waitingRoomList: this.waitingRoomList.value,\n              updateTotalReqWait: this.updateTotalReqWait.bind(this),\n              updateRequestList: this.updateRequestList.bind(this),\n            });\n          },\n        );\n\n        socketDefault.on('screenProducerId', async ({ producerId }: { producerId: string }) => {\n          this.screenProducerId.screenProducerId({\n            producerId,\n            screenId: this.screenId.value,\n            membersReceived: this.membersReceived.value,\n            shareScreenStarted: this.shareScreenStarted.value,\n            deferScreenReceived: this.deferScreenReceived.value,\n            participants: this.participants.value,\n            updateScreenId: this.updateScreenId.bind(this),\n            updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\n            updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\n          });\n        });\n\n        socketDefault.on('updateMediaSettings', async ({ settings }: { settings: Settings }) => {\n          this.updateMediaSettings.updateMediaSettings({\n            settings,\n            updateAudioSetting: this.updateAudioSetting.bind(this),\n            updateVideoSetting: this.updateVideoSetting.bind(this),\n            updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\n            updateChatSetting: this.updateChatSetting.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'producer-media-paused',\n          async ({\n            producerId,\n            kind,\n            name,\n          }: {\n            producerId: string;\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\n            name: string;\n          }) => {\n            await this.producerMediaPaused.producerMediaPaused({\n              producerId,\n              kind,\n              name,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          },\n        );\n\n        socketDefault.on(\n          'producer-media-resumed',\n          async ({ kind, name }: { kind: 'audio'; name: string }) => {\n            await this.producerMediaResumed.producerMediaResumed({\n              kind,\n              name,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          },\n        );\n\n        socketDefault.on(\n          'producer-media-closed',\n          async ({\n            producerId,\n            kind,\n          }: {\n            producerId: string;\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\n          }) => {\n            if (producerId && kind) {\n              await this.producerMediaClosed.producerMediaClosed({\n                producerId,\n                kind,\n                parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              });\n            }\n          },\n        );\n\n        socketDefault.on(\n          'controlMediaHost',\n          async ({ type }: { type: 'video' | 'audio' | 'screenshare' | 'chat' | 'all' }) => {\n            await this.controlMediaHost.controlMediaHost({\n              type,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          },\n        );\n\n        socketDefault.on('meetingEnded', async () => {\n          await this.meetingEnded.meetingEnded({\n            showAlert: this.showAlert.bind(this),\n            redirectURL: this.redirectURL.value,\n            onWeb: true,\n            eventType: this.eventType.value,\n            updateValidated: this.updateValidated.bind(this),\n          });\n\n          if (this.videoAlreadyOn.value) {\n            await this.clickVideo.clickVideo({\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          }\n          if (this.audioAlreadyOn.value) {\n            await this.clickAudio.clickAudio({\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          }\n\n          await this.closeAndReset();\n        });\n\n        socketDefault.on('disconnectUserSelf', async () => {\n          await this.disconnectUserSelf.disconnectUserSelf({\n            socket: socketDefault,\n            member: this.member.value,\n            roomName: this.roomName.value,\n          });\n        });\n\n        socketDefault.on('receiveMessage', async ({ message }: { message: Message }) => {\n          await this.receiveMessage.receiveMessage({\n            message,\n            messages: this.messages.value,\n            participantsAll: this.participantsAll.value,\n            member: this.member.value,\n            eventType: this.eventType.value,\n            islevel: this.islevel.value,\n            coHost: this.coHost.value,\n            updateMessages: this.updateMessages.bind(this),\n            updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'meetingTimeRemaining',\n          async ({ timeRemaining }: { timeRemaining: number }) => {\n            await this.meetingTimeRemaining.meetingTimeRemaining({\n              timeRemaining,\n              showAlert: this.showAlert.bind(this),\n              eventType: this.eventType.value,\n            });\n          },\n        );\n\n        socketDefault.on('meetingStillThere', async () => {\n          if (this.suppressConfirmHereForSession) {\n            return;\n          }\n\n          this.meetingStillThere.meetingStillThere({\n            updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'updateConsumingDomains',\n          async ({ domains, alt_domains }: UpdateConsumingDomainsData) => {\n            await this.updateConsumingDomains.updateConsumingDomains({\n              domains,\n              alt_domains,\n              apiUserName,\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\n              apiToken: token,\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          },\n        );\n\n        socketDefault.on(\n          'hostRequestResponse',\n          ({ requestResponse }: HostRequestResponseData) => {\n            this.hostRequestResponse.hostRequestResponse({\n              requestResponse,\n              showAlert: this.showAlert.bind(this),\n              requestList: this.requestList.value,\n              updateRequestList: this.updateRequestList.bind(this),\n              updateMicAction: this.updateMicAction.bind(this),\n              updateVideoAction: this.updateVideoAction.bind(this),\n              updateScreenAction: this.updateScreenAction.bind(this),\n              updateChatAction: this.updateChatAction.bind(this),\n              updateAudioRequestState: this.updateAudioRequestState.bind(this),\n              updateVideoRequestState: this.updateVideoRequestState.bind(this),\n              updateScreenRequestState: this.updateScreenRequestState.bind(this),\n              updateChatRequestState: this.updateChatRequestState.bind(this),\n              updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\n              updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\n              updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\n              updateChatRequestTime: this.updateChatRequestTime.bind(this),\n              updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\n            });\n          },\n        );\n\n        socketDefault.on('pollUpdated', async (data: PollUpdatedData) => {\n          try {\n            await this.pollUpdated.pollUpdated({\n              data,\n              polls: this.polls.value,\n              poll: this.poll.value ? this.poll.value : ({} as Poll),\n              member: this.member.value,\n              islevel: this.islevel.value,\n              showAlert: this.showAlert.bind(this),\n              updatePolls: this.updatePolls.bind(this),\n              updatePoll: this.updatePoll.bind(this),\n              updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\n            });\n          } catch {\n            /* handle error */\n          }\n        });\n\n        socketDefault.on('breakoutRoomUpdated', async (data: BreakoutRoomUpdatedData) => {\n          try {\n            await this.breakoutRoomUpdated.breakoutRoomUpdated({\n              data,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          } catch {\n            /* handle error */\n          }\n        });\n\n        // ── Panelists events ──────────────────────────────────────────────────\n        socketDefault.on('panelistsUpdated', async (data: any) => {\n          try {\n            if (this.panelistsUpdated) {\n              await this.panelistsUpdated.panelistsUpdated({\n                data,\n                updatePanelists: this.updatePanelists.bind(this),\n              });\n            }\n          } catch { /* handle error */ }\n        });\n\n        socketDefault.on('panelistFocusChanged', async (data: any) => {\n          try {\n            if (this.panelistFocusChanged) {\n              await this.panelistFocusChanged.panelistFocusChanged({\n                data,\n                updatePanelistsFocused: this.updatePanelistsFocused.bind(this),\n                updateMuteOthersMic: this.updateMuteOthersMic.bind(this),\n                updateMuteOthersCamera: this.updateMuteOthersCamera.bind(this),\n                updatePanelists: this.updatePanelists.bind(this),\n                currentPanelistsFocused: this.panelistsFocused.value,\n                currentPanelists: this.panelists.value,\n                onScreenChanges: async () => {\n                  await this.onScreenChanges.onScreenChanges({\n                    changed: true,\n                    parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n                  });\n                },\n              });\n            }\n          } catch { /* handle error */ }\n        });\n\n        const handleControlMedia = async (data: any) => {\n          try {\n            if (this.receiveControlMedia) {\n              await this.receiveControlMedia.receiveControlMedia({\n                data,\n                showAlert: this.showAlert.bind(this),\n                clickAudio: () => {\n                  this.clickAudio.clickAudio({\n                    parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n                  });\n                },\n                clickVideo: () => {\n                  this.clickVideo.clickVideo({\n                    parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n                  });\n                },\n                audioAlreadyOn: this.audioAlreadyOn.value,\n                videoAlreadyOn: this.videoAlreadyOn.value,\n              });\n            }\n          } catch { /* handle error */ }\n        };\n\n        socketDefault.on('controlMedia', handleControlMedia);\n        socketDefault.on('receiveControlMedia', handleControlMedia);\n\n        socketDefault.on('addedAsPanelist', async (data: any) => {\n          try {\n            if (this.addedAsPanelist) {\n              await this.addedAsPanelist.addedAsPanelist({\n                data,\n                showAlert: this.showAlert.bind(this),\n              });\n            }\n          } catch { /* handle error */ }\n        });\n\n        socketDefault.on('removedFromPanelists', async (data: any) => {\n          try {\n            if (this.removedFromPanelists) {\n              await this.removedFromPanelists.removedFromPanelists({\n                data,\n                showAlert: this.showAlert.bind(this),\n              });\n            }\n          } catch { /* handle error */ }\n        });\n\n        // ── Permissions events ────────────────────────────────────────────────\n        socketDefault.on('permissionUpdated', async (data: any) => {\n          try {\n            if (this.permissionUpdated) {\n              await this.permissionUpdated.permissionUpdated({\n                data,\n                showAlert: this.showAlert.bind(this),\n                updateIslevel: this.updateIslevel.bind(this),\n              });\n            }\n          } catch { /* handle error */ }\n        });\n\n        socketDefault.on('permissionConfigUpdated', async (data: any) => {\n          try {\n            if (this.permissionConfigUpdated) {\n              await this.permissionConfigUpdated.permissionConfigUpdated({\n                data,\n                updatePermissionConfig: this.updatePermissionConfig.bind(this),\n              });\n            }\n          } catch { /* handle error */ }\n        });\n\n        // ── Translation events ────────────────────────────────────────────────\n        if (this.translationReceiveMethods) {\n          socketDefault.on('translation:roomConfig', async (data: any) => {\n            try {\n              await this.translationReceiveMethods!.translationRoomConfig({\n                data,\n                updateTranslationConfig: this.updateTranslationConfig.bind(this),\n                updateTranslationSupported: this.updateTranslationSupported.bind(this),\n              });\n            } catch { /* handle error */ }\n          });\n\n          socketDefault.on('translation:configUpdated', async (data: any) => {\n            try {\n              await this.translationReceiveMethods!.translationConfigUpdated({\n                data,\n                updateTranslationConfig: this.updateTranslationConfig.bind(this),\n                showAlert: this.showAlert.bind(this),\n              });\n            } catch { /* handle error */ }\n          });\n\n          socketDefault.on('translation:languageSet', async (data: any) => {\n            try {\n              await this.translationReceiveMethods!.translationLanguageSet({\n                data,\n                updateMySpokenLanguage: this.updateMySpokenLanguage.bind(this),\n                updateMySpokenLanguageEnabled: this.updateMySpokenLanguageEnabled.bind(this),\n                showAlert: this.showAlert.bind(this),\n              });\n            } catch { /* handle error */ }\n          });\n\n          socketDefault.on('translation:subscribed', async (data: any) => {\n            try {\n              const payload = data as {\n                speakerId: string;\n                language: string;\n                producerId?: string;\n                originalProducerId?: string;\n                channelCreated?: boolean;\n              };\n\n              await this.translationReceiveMethods!.translationSubscribed({\n                data: {\n                  ...payload,\n                  channelCreated: payload.channelCreated ?? false,\n                },\n                updateListenPreferences: this.updateListenPreferences.bind(this),\n                updateTranslationProducerMap: this.updateTranslationProducerMap.bind(this),\n                startConsumingTranslation: payload.producerId\n                  ? async (producerId: string, speakerId: string, language: string) => {\n                    await this.startConsumingTranslation(\n                      producerId,\n                      speakerId,\n                      language,\n                      payload.originalProducerId,\n                      socketDefault,\n                    );\n                  }\n                  : undefined,\n                showAlert: this.showAlert.bind(this),\n              });\n            } catch { /* handle error */ }\n          });\n\n          socketDefault.on('translation:unsubscribed', async (data: any) => {\n            try {\n              await this.translationReceiveMethods!.translationUnsubscribed({\n                data,\n                updateListenPreferences: this.updateListenPreferences.bind(this),\n                stopConsumingTranslation: this.stopConsumingTranslationSelection,\n              });\n            } catch { /* handle error */ }\n          });\n\n          socketDefault.on('translation:producerReady', async (data: any) => {\n            try {\n              await this.translationReceiveMethods!.translationProducerReady({\n                data,\n                updateTranslationProducerMap: this.updateTranslationProducerMap.bind(this),\n                startConsumingTranslation: this.startConsumingTranslation,\n                pauseOriginalProducer: async (originalProducerId: string) => {\n                  await this.pauseOriginalTranslationProducer(originalProducerId, data?.speakerId);\n                },\n              });\n            } catch { /* handle error */ }\n          });\n\n          socketDefault.on('translation:producerClosed', async (data: any) => {\n            try {\n              await this.translationReceiveMethods!.translationProducerClosed({\n                data,\n                updateTranslationProducerMap: this.updateTranslationProducerMap.bind(this),\n                stopConsumingTranslation: this.stopConsumingTranslationProducer,\n                resumeOriginalProducer: async (speakerId: string) => {\n                  const originalProducerId = this.resolveOriginalProducerIdForSpeaker(speakerId);\n                  if (!originalProducerId) {\n                    return;\n                  }\n\n                  await this.resumeOriginalTranslationProducer(originalProducerId, speakerId);\n                },\n                showAlert: this.showAlert.bind(this),\n              });\n            } catch { /* handle error */ }\n          });\n\n          socketDefault.on('translation:channelsAvailable', async (data: any) => {\n            try {\n              await this.translationReceiveMethods!.translationChannelsAvailable({\n                data,\n                updateAvailableTranslationChannels:\n                  this.updateAvailableTranslationChannels.bind(this),\n                myDefaultListenLanguage: this.myDefaultListenLanguage.value,\n                socket: socketDefault,\n                roomName: this.roomName.value,\n              });\n            } catch { /* handle error */ }\n          });\n\n          socketDefault.on('translation:memberState', async (data: any) => {\n            try {\n              await this.translationReceiveMethods!.translationMemberState({\n                data,\n                updateParticipantTranslationState:\n                  this.updateParticipantTranslationState.bind(this),\n              });\n            } catch { /* handle error */ }\n          });\n\n          socketDefault.on('translation:error', async (data: any) => {\n            try {\n              await this.translationReceiveMethods!.translationError({ data, showAlert: this.showAlert.bind(this) });\n            } catch { /* handle error */ }\n          });\n\n          socketDefault.on('translation:transcript', async (data: any) => {\n            try {\n              await this.translationReceiveMethods!.translationTranscript({\n                data,\n                onTranscriptReceived: (transcript: TranslationTranscriptData) => {\n                  const subtitle = createLiveSubtitle({\n                    text: transcript.translatedText || transcript.originalText || '',\n                    language: transcript.language,\n                    speakerId: transcript.speakerId,\n                    speakerName: transcript.speakerName,\n                  });\n\n                  const next = new Map(this.liveSubtitleService.getLiveSubtitles());\n                  if (transcript.speakerId) {\n                    next.set(transcript.speakerId, subtitle);\n                  }\n                  if (transcript.speakerName) {\n                    next.set(transcript.speakerName, subtitle);\n                  }\n                  this.liveSubtitleService.setLiveSubtitles(next);\n\n                  const delay = Math.max(100, subtitle.expiresAt - Date.now() + 100);\n                  setTimeout(() => {\n                    this.cleanupExpiredLiveSubtitles();\n                  }, delay);\n                },\n              });\n            } catch { /* handle error */ }\n          });\n\n          socketDefault.on('translation:speakerOutputChanged', async (data: any) => {\n            try {\n              await this.translationReceiveMethods!.translationSpeakerOutputChanged({\n                data,\n                pauseOriginalProducer: this.pauseOriginalTranslationProducer,\n                resumeOriginalProducer: this.resumeOriginalTranslationProducer,\n                stopConsumingTranslationForSpeaker:\n                  this.stopConsumingTranslationForSpeaker,\n                updateSpeakerTranslationState:\n                  this.updateSpeakerTranslationState.bind(this),\n                showAlert: this.showAlert.bind(this),\n              });\n            } catch { /* handle error */ }\n          });\n\n          socketDefault.on('translation:speakerDisabled', async (data: any) => {\n            try {\n              if (data?.speakerId && data?.originalProducerId) {\n                await this.translationReceiveMethods!.translationSpeakerOutputChanged({\n                  data: {\n                    speakerId: data.speakerId,\n                    speakerName: data?.speakerName || '',\n                    inputLanguage: data?.inputLanguage || '',\n                    outputLanguage: null,\n                    originalProducerId: data.originalProducerId,\n                    enabled: false,\n                  },\n                });\n              }\n            } catch { /* handle error */ }\n          });\n        }\n\n      }\n\n      if (skipSockets) {\n        // Remove specific event listeners from socketDefault and socketAlt\n        const events = [\n          'roomRecordParams',\n          'startRecords',\n          'reInitiateRecording',\n          'RecordingNotice',\n          'timeLeftRecording',\n          'stoppedRecording',\n        ];\n        events.forEach((event) => {\n          socketDefault.off(event);\n          socketAlt.off(event);\n        });\n      }\n\n      socketAlt.on(\n        'roomRecordParams',\n        async ({ recordParams }: { recordParams: RecordParams }) => {\n          this.roomRecordParams.roomRecordParams({\n            recordParams,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        },\n      );\n\n      socketAlt.on('startRecords', async () => {\n        await this.startRecords.startRecords({\n          roomName: this.roomName.value,\n          member: this.member.value,\n          socket: socketAlt,\n        });\n      });\n\n      socketAlt.on('reInitiateRecording', async () => {\n        await this.reInitiateRecording.reInitiateRecording({\n          roomName: this.roomName.value,\n          member: this.member.value,\n          socket: socketAlt,\n          adminRestrictSetting: this.adminRestrictSetting.value,\n        });\n      });\n\n      socketAlt.on(\n        'RecordingNotice',\n        async ({ state, userRecordingParam, pauseCount, timeDone }: RecordingNoticeData) => {\n          await this.recordingNotice.RecordingNotice({\n            state,\n            userRecordingParam,\n            pauseCount,\n            timeDone,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        },\n      );\n\n      socketAlt.on('timeLeftRecording', async ({ timeLeft }: { timeLeft: number }) => {\n        this.timeLeftRecording.timeLeftRecording({\n          timeLeft,\n          showAlert: this.showAlert.bind(this),\n        });\n      });\n\n      socketAlt.on(\n        'stoppedRecording',\n        async ({ state, reason }: { state: string; reason: string }) => {\n          await this.stoppedRecording.stoppedRecording({\n            state,\n            reason,\n            showAlert: this.showAlert.bind(this),\n          });\n        },\n      );\n\n      if (this.localLink !== \"\" && socketDefault && !skipSockets) {\n        await this.join_Room({\n          socket: socketDefault,\n          roomName: this.roomName.value,\n          islevel: this.islevel.value,\n          member: this.member.value,\n          sec: token,\n          apiUserName: apiUserName,\n          isLocal: true,\n        });\n      }\n\n      // Check if localSocket has changed\n      const localChanged =\n        this.localSocket!.value && this.localSocket!.value.id && this.localSocket!.value.id !== socketAlt.id;\n\n\n      if (!skipSockets && localChanged) {\n        // Re-call connect_Socket with skipSockets = true\n        await this.connect_Socket(apiUserName, token, true);\n        await sleep({ ms: 1000 })\n        this.updateIsLoadingModalVisible(false);\n        return socketDefault;\n      } else {\n        if (this.link.value !== '' && this.link.value.includes('mediasfu.com')) {\n          // Token might be different for local room\n          const token = this.apiToken.value;\n          await this.join_Room({\n            socket:\n              this.connectMediaSFU && socketAlt && socketAlt.id ? socketAlt : socketDefault,\n            roomName: this.roomName.value,\n            islevel: this.islevel.value,\n            member: this.member.value,\n            sec: token,\n            apiUserName: apiUserName,\n          });\n        }\n\n        await this.receiveRoomMessages.receiveRoomMessages({\n          socket: socketDefault,\n          roomName: this.roomName.value,\n          updateMessages: this.updateMessages.bind(this),\n        });\n\n        if (!skipSockets) {\n          await this.prepopulateUserMedia.prepopulateUserMedia({\n            name: this.hostLabel.value,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        }\n\n        return socketDefault;\n      }\n    } else {\n      return null;\n    }\n  }\n}\n","import {\n  Component,\n  HostListener,\n  Injector,\n  ChangeDetectorRef,\n  Input,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CookieService } from 'ngx-cookie-service';\nimport { MediasfuUICustomOverrides } from '../../@types/ui-overrides.types';\nimport { UIOverrideResolverService } from '../../services/ui-override-resolver.service';\nimport { WithOverrideDirective } from '../../directives/with-override.directive';\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\nimport { Socket } from 'socket.io-client';\nimport {\n  faMicrophoneSlash,\n  faVideoSlash,\n  faPhone,\n  faUsers,\n  faComments,\n  faShareAlt,\n  faSync,\n  faChartBar,\n  faRecordVinyl,\n  faCog,\n  faPlayCircle,\n  faPauseCircle,\n  faStopCircle,\n  faDotCircle,\n  faVideo,\n  faMicrophone,\n  faSun,\n  faMoon,\n} from '@fortawesome/free-solid-svg-icons';\n\nimport { initialValuesState } from '../../methods/utils/initial-values.util';\n\n// Components for display\nimport { MainAspectComponent } from '../display-components/main-aspect-component/main-aspect-component.component';\nimport { ControlButtonsComponentTouch } from '../display-components/control-buttons-component-touch/control-buttons-component-touch.component';\nimport { MainScreenComponent } from '../display-components/main-screen-component/main-screen-component.component';\nimport { MainGridComponent } from '../display-components/main-grid-component/main-grid-component.component';\nimport { MainContainerComponent } from '../display-components/main-container-component/main-container-component.component';\nimport { ModernAlertComponent } from '../../modern/display-components/modern-alert.component';\nimport { ModernLoadingModalComponent } from '../../modern/display-components/modern-loading-modal.component';\nimport { ModernConfirmExitModalComponent } from '../../modern/modal-components/modern-confirm-exit-modal.component';\nimport { ModernConfirmHereModalComponent } from '../../modern/modal-components/modern-confirm-here-modal.component';\nimport { ModernMessagesModalComponent } from '../../modern/modal-components/modern-messages-modal.component';\nimport { ModernParticipantsModalComponent } from '../../modern/modal-components/modern-participants-modal.component';\nimport { ModernRecordingModalComponent } from '../../modern/modal-components/modern-recording-modal.component';\nimport { ModernShareEventModalComponent } from '../../modern/modal-components/modern-share-event-modal.component';\nimport { ModernEventSettingsModalComponent } from '../../modern/modal-components/modern-event-settings-modal.component';\nimport {\n  WelcomePage,\n  WelcomePageOptions,\n} from '../misc-components/welcome-page/welcome-page.component';\n\n// Pagination and display of media\nimport { FlexibleVideo } from '../display-components/flexible-video/flexible-video.component';\nimport { AudioGrid } from '../display-components/audio-grid/audio-grid.component';\n\nimport { MessageWidget } from '../display-components/control-widgets/message-widget.component';\nimport { MenuRecordWidget } from '../display-components/control-widgets/menu-record-widget.component';\nimport { RecordTimerWidget } from '../display-components/control-widgets/record-timer-widget.component';\nimport { MenuParticipantsWidget } from '../display-components/control-widgets/menu-participants-widget.component';\n\nimport {\n  ButtonTouch,\n  ResponseJoinRoom,\n  ResponseJoinLocalRoom,\n  CoHostResponsibility,\n  EventType,\n  Participant,\n  ConsumeSocket,\n  MeetingRoomParams,\n  VidCons,\n  HParamsType,\n  VParamsType,\n  ScreenParamsType,\n  AParamsType,\n  UserRecordingParams,\n  Stream,\n  AudioDecibels,\n  ScreenState,\n  GridSizes,\n  CustomMediaComponent,\n  Message,\n  WaitingRoomParticipant,\n  ComponentSizes,\n  Transport as TransportType,\n  Shape,\n  Poll,\n  BreakoutParticipant,\n  WhiteboardUser,\n  Request,\n  AllMembersData,\n  AllMembersRestData,\n  MainButtonAlt,\n  RecordParams,\n  SeedData,\n  UpdateConsumingDomainsData,\n  RecordingNoticeData,\n  PreJoinPageOptions,\n  CreateMediaSFURoomOptions,\n  JoinMediaSFURoomOptions,\n  JoinRoomOnMediaSFUType,\n  CreateRoomOnMediaSFUType,\n} from '../../@types/types';\nimport { createResponseJoinRoom } from '../../methods/utils/create-response-join-room.util';\n\n// Import methods for control\nimport { LaunchRecording } from '../../methods/recording-methods/launch-recording.service';\nimport { StartRecording } from '../../methods/recording-methods/start-recording.service';\nimport { ConfirmRecording } from '../../methods/recording-methods/confirm-recording.service';\nimport { LaunchParticipants } from '../../methods/participants-methods/launch-participants.service';\nimport { LaunchMessages } from '../../methods/message-methods/launch-messages.service';\nimport { LaunchConfirmExit } from '../../methods/exit-methods/launch-confirm-exit.service';\n\n// Mediasfu functions -- examples\nimport { SocketManager } from '../../sockets/socket-manager.service';\nimport { JoinRoomClient } from '../../producer-client/producer-client-emits/join-room-client.service';\nimport { JoinLocalRoom } from '../../producers/producer-emits/join-local-room.service';\nimport { UpdateRoomParametersClient } from '../../producer-client/producer-client-emits/update-room-parameters-client.service';\nimport { CreateDeviceClient } from '../../producer-client/producer-client-emits/create-device-client.service';\n\nimport { SwitchVideoAlt } from '../../methods/stream-methods/switch-video-alt.service';\nimport { ClickVideo } from '../../methods/stream-methods/click-video.service';\nimport { ClickAudio } from '../../methods/stream-methods/click-audio.service';\nimport { ClickScreenShare } from '../../methods/stream-methods/click-screen-share.service';\nimport { StreamSuccessVideo } from '../../consumers/stream-success-video.service';\nimport { StreamSuccessAudio } from '../../consumers/stream-success-audio.service';\nimport { StreamSuccessScreen } from '../../consumers/stream-success-screen.service';\nimport { StreamSuccessAudioSwitch } from '../../consumers/stream-success-audio-switch.service';\nimport { CheckPermission } from '../../consumers/check-permission.service';\n\n// Mediasfu consumer functions\nimport { UpdateMiniCardsGrid } from '../../consumers/update-mini-cards-grid.service';\nimport { MixStreams } from '../../consumers/mix-streams.service';\nimport { DispStreams } from '../../consumers/disp-streams.service';\nimport { StopShareScreen } from '../../consumers/stop-share-screen.service';\nimport { CheckScreenShare } from '../../consumers/check-screen-share.service';\nimport { StartShareScreen } from '../../consumers/start-share-screen.service';\nimport { RequestScreenShare } from '../../consumers/request-screen-share.service';\nimport { ReorderStreams } from '../../consumers/reorder-streams.service';\nimport { PrepopulateUserMedia } from '../../consumers/prepopulate-user-media.service';\nimport { GetVideos } from '../../consumers/get-videos.service';\nimport { RePort } from '../../consumers/re-port.service';\nimport { Trigger } from '../../consumers/trigger.service';\nimport { ConsumerResume } from '../../consumers/consumer-resume.service';\nimport { ConnectSendTransportAudio } from '../../consumers/connect-send-transport-audio.service';\nimport { ConnectSendTransportVideo } from '../../consumers/connect-send-transport-video.service';\nimport { ConnectSendTransportScreen } from '../../consumers/connect-send-transport-screen.service';\nimport { ProcessConsumerTransports } from '../../consumers/process-consumer-transports.service';\nimport { ResumePauseStreams } from '../../consumers/resume-pause-streams.service';\nimport { Readjust } from '../../consumers/readjust.service';\nimport { CheckGrid } from '../../consumers/check-grid.service';\nimport { GetEstimate } from '../../consumers/get-estimate.service';\nimport { CalculateRowsAndColumns } from '../../consumers/calculate-rows-and-columns.service';\nimport { AddVideosGrid } from '../../consumers/add-videos-grid.service';\nimport { OnScreenChanges } from '../../consumers/on-screen-changes.service';\nimport { sleep } from '../../methods/utils/sleep.util';\nimport { ChangeVids } from '../../consumers/change-vids.service';\nimport { CompareActiveNames } from '../../consumers/compare-active-names.service';\nimport { CompareScreenStates } from '../../consumers/compare-screen-states.service';\nimport { CreateSendTransport } from '../../consumers/create-send-transport.service';\nimport { ResumeSendTransportAudio } from '../../consumers/resume-send-transport-audio.service';\nimport { ReceiveAllPipedTransports } from '../../consumers/receive-all-piped-transports.service';\nimport { DisconnectSendTransportVideo } from '../../consumers/disconnect-send-transport-video.service';\nimport { DisconnectSendTransportAudio } from '../../consumers/disconnect-send-transport-audio.service';\nimport { DisconnectSendTransportScreen } from '../../consumers/disconnect-send-transport-screen.service';\nimport { ConnectSendTransport } from '../../consumers/connect-send-transport.service';\nimport { GetPipedProducersAlt } from '../../consumers/get-piped-producers-alt.service';\nimport { SignalNewConsumerTransport } from '../../consumers/signal-new-consumer-transport.service';\nimport { ConnectRecvTransport } from '../../consumers/connect-recv-transport.service';\nimport { ReUpdateInter } from '../../consumers/re-update-inter.service';\nimport { UpdateParticipantAudioDecibels } from '../../consumers/update-participant-audio-decibels.service';\nimport { CloseAndResize } from '../../consumers/close-and-resize.service';\nimport { AutoAdjust } from '../../consumers/auto-adjust.service';\nimport { SwitchUserVideoAlt } from '../../consumers/switch-user-video-alt.service';\nimport { SwitchUserVideo } from '../../consumers/switch-user-video.service';\nimport { SwitchUserAudio } from '../../consumers/switch-user-audio.service';\nimport { ReceiveRoomMessages } from '../../consumers/receive-room-messages.service';\nimport { FormatNumber } from '../../methods/utils/format-number.service';\nimport { ConnectIps } from '../../consumers/connect-ips.service';\nimport { ConnectLocalIps } from '../../consumers/connect-local-ips.service';\n// Utility imports for meeting and recording functionality\nimport { StartMeetingProgressTimer } from '../../methods/utils/meeting-timer/start-meeting-progress-timer.service';\nimport { UpdateRecording } from '../../methods/recording-methods/update-recording.service';\nimport { StopRecording } from '../../methods/recording-methods/stop-recording.service';\n\n// Socket methods for participant and meeting management\nimport { PersonJoined } from '../../producers/socket-receive-methods/person-joined.service';\nimport { RoomRecordParams } from '../../producers/socket-receive-methods/room-record-params.service';\nimport { BanParticipant } from '../../producers/socket-receive-methods/ban-participant.service';\nimport { ProducerMediaPaused } from '../../producers/socket-receive-methods/producer-media-paused.service';\nimport { ProducerMediaResumed } from '../../producers/socket-receive-methods/producer-media-resumed.service';\nimport { ProducerMediaClosed } from '../../producers/socket-receive-methods/producer-media-closed.service';\nimport { MeetingEnded } from '../../producers/socket-receive-methods/meeting-ended.service';\nimport { DisconnectUserSelf } from '../../producers/socket-receive-methods/disconnect-user-self.service';\nimport { ReceiveMessage } from '../../producers/socket-receive-methods/receive-message.service';\nimport { MeetingTimeRemaining } from '../../producers/socket-receive-methods/meeting-time-remaining.service';\nimport { MeetingStillThere } from '../../producers/socket-receive-methods/meeting-still-there.service';\nimport { StartRecords } from '../../producers/socket-receive-methods/start-records.service';\nimport { ReInitiateRecording } from '../../producers/socket-receive-methods/re-initiate-recording.service';\nimport { GetDomains } from '../../producers/socket-receive-methods/get-domains.service';\nimport { UpdateConsumingDomains } from '../../producers/socket-receive-methods/update-consuming-domains.service';\nimport { RecordingNotice } from '../../producers/socket-receive-methods/recording-notice.service';\nimport { TimeLeftRecording } from '../../producers/socket-receive-methods/time-left-recording.service';\nimport { StoppedRecording } from '../../producers/socket-receive-methods/stopped-recording.service';\nimport { AllMembers } from '../../producers/socket-receive-methods/all-members.service';\nimport { AllMembersRest } from '../../producers/socket-receive-methods/all-members-rest.service';\nimport { Disconnect } from '../../producers/socket-receive-methods/disconnect.service';\n\nimport { CaptureCanvasStream } from '../../methods/whiteboard-methods/capture-canvas-stream.service';\nimport { ResumePauseAudioStreams } from '../../consumers/resume-pause-audio-streams.service';\nimport { ProcessConsumerTransportsAudio } from '../../consumers/process-consumer-transports-audio.service';\n\nimport { types } from 'mediasoup-client';\ntype Device = types.Device;\ntype Producer = types.Producer;\ntype ProducerOptions = types.ProducerOptions;\ntype RtpCapabilities = types.RtpCapabilities;\ntype Transport = types.Transport;;\nimport { SelfieSegmentation } from '@mediapipe/selfie_segmentation';\n\nexport type MediasfuBroadcastOptions = {\n  PrejoinPage?: (options: PreJoinPageOptions | WelcomePageOptions) => HTMLElement;\n  localLink?: string;\n  connectMediaSFU?: boolean;\n  credentials?: { apiUserName: string; apiKey: string };\n  useLocalUIMode?: boolean;\n  seedData?: SeedData;\n  useSeed?: boolean;\n  imgSrc?: string;\n  sourceParameters?: { [key: string]: any };\n  updateSourceParameters?: (data: { [key: string]: any }) => void;\n  returnUI?: boolean;\n  noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\n  joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n  createMediaSFURoom?: CreateRoomOnMediaSFUType;\n};\n\n/**\n * MediasfuBroadcast component provides a streaming broadcast interface with various UI components and settings.\n * It handles conditional rendering of a prejoin page or main broadcast content, along with integrated modals and controls.\n *\n * @component\n * @selector app-mediasfu-broadcast\n * @standalone true\n * @imports [RouterOutlet, CommonModule, AlertComponent, AudioGrid, ControlButtonsComponentTouch, FlexibleVideo, LoadingModal, ConfirmExitModal, MessagesModal, ConfirmHereModal, ShareEventModal, WelcomePage, ParticipantsModal, RecordingModal, MainAspectComponent, MainContainerComponent, MainGridComponent, MainScreenComponent, MessageWidget, MenuRecordWidget, RecordTimerWidget, MenuParticipantsWidget]\n *\n * @template\n * The component's template contains:\n * - Conditional rendering of the PrejoinPage component if the user is not validated.\n * - The main broadcast content, including video, controls, and optional modals.\n * - The `app-main-container-component` manages the main display.\n * - Controls for video and audio grid display and interactive modals (Participants, Messages, Recording, etc.)\n *\n * @input {any} PrejoinPage - Component for the prejoin page, defaults to `WelcomePage`.\n * @input {MediasfuBroadcastOptions} options - Configuration options for the component.\n * @input {boolean} connectMediaSFU - Flag to enable/disable connection to the MediaSFU server.\n * @input {string} localLink - Local link for the Community Edition server.\n * @input {{ apiUserName: string; apiKey: string }} credentials - API credentials for secure access.\n * @input {boolean} useLocalUIMode - Flag to toggle local UI settings.\n * @input {SeedData} seedData - Seed data for initializing the component with specific configurations.\n * @input {boolean} useSeed - Enable/disable use of seed data.\n * @input {string} imgSrc - URL for branding images or logos.\n * @input {object} sourceParameters - Additional parameters for the source.\n * @input {Function} updateSourceParameters - Function to update the source parameters.\n * @input {boolean} returnUI - Flag to return the UI elements.\n * @input {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} noUIPreJoinOptions - Options for the prejoin page without UI.\n * @input {JoinRoomOnMediaSFUType} joinMediaSFURoom - Function to join a room on MediaSFU.\n * @input {CreateRoomOnMediaSFUType} createMediaSFURoom - Function to create a room on MediaSFU.\n * @input {any} customVideoCard - Custom component to replace the default VideoCard component.\n * @input {any} customAudioCard - Custom component to replace the default AudioCard component.\n * @input {any} customMiniCard - Custom component to replace the default MiniCard component.\n * @input {any} customMainComponent - Custom component that provides complete control over the main UI, bypassing default MediaSFU styling.\n *\n * @property {string} title - The title of the component, defaults to \"MediaSFU-Broadcast\".\n *\n * @styles\n * Custom styles specific to MediaSFU layout and interactions.\n *\n * @constructor\n * @class MediasfuBroadcast\n * @implements OnInit, OnDestroy\n *\n * @method ngOnInit - Initializes the component, sets up necessary configurations, and event listeners.\n * @method ngOnDestroy - Cleanup on component destruction, including removal of event listeners and active intervals.\n *\n * @example\n * ```html\n * <app-mediasfu-broadcast\n *   [PrejoinPage]=\"CustomPrejoinComponent\"\n *   [localLink]=\"'https://localhost:3000'\"\n *   [connectMediaSFU]=\"true\"\n *   [credentials]=\"{ apiUserName: 'username', apiKey: 'apikey' }\"\n *   [useLocalUIMode]=\"true\"\n *   [seedData]=\"seedDataObject\"\n *   [useSeed]=\"true\"\n *   [imgSrc]=\"'https://example.com/logo.png'\"\n *   [sourceParameters]=\"{ source: 'camera', width: 640, height: 480 }\"\n *   [updateSourceParameters]=\"updateSourceParameters\"\n *   [returnUI]=\"true\"\n *   [noUIPreJoinOptions]=\"{ roomName: 'room1', userName: 'user1' }\"\n *   [joinMediaSFURoom]=\"joinMediaSFURoom\"\n *   [createMediaSFURoom]=\"createMediaSFURoom\"\n *   [customVideoCard]=\"CustomVideoCardComponent\"\n *   [customAudioCard]=\"CustomAudioCardComponent\"\n *   [customMiniCard]=\"CustomMiniCardComponent\"\n *   [customMainComponent]=\"CustomMainComponent\">\n * </app-mediasfu-broadcast>\n * ```\n */\n\n\n@Component({\n  selector: 'app-mediasfu-broadcast',\n  imports: [\n    CommonModule,\n    ModernAlertComponent,\n    AudioGrid,\n    ControlButtonsComponentTouch,\n    FlexibleVideo,\n    ModernLoadingModalComponent,\n    ModernConfirmExitModalComponent,\n    ModernMessagesModalComponent,\n    ModernConfirmHereModalComponent,\n    ModernShareEventModalComponent,\n    ModernEventSettingsModalComponent,\n    ModernParticipantsModalComponent,\n    ModernRecordingModalComponent,\n    MainAspectComponent,\n    MainContainerComponent,\n    MainGridComponent,\n    MainScreenComponent,\n    WithOverrideDirective,\n  ],\n  template: `\n    <!-- Custom Main Component (if provided) - full control over styling -->\n    <ng-container *ngIf=\"customMainComponent && validated.value\">\n      <ng-container\n        *ngComponentOutlet=\"\n          customMainComponent.component || customMainComponent;\n          injector: customMainComponent.injector\n        \"\n      >\n      </ng-container>\n    </ng-container>\n\n    <!-- Default MediaSFU wrapper with standard styling -->\n    <div\n      *ngIf=\"!customMainComponent\"\n      class=\"MediaSFU\"\n      [ngStyle]=\"containerStyle\"\n    >\n      <!-- Conditional Rendering: PrejoinPage or Main Content -->\n      <ng-container *ngIf=\"!validated.value; else mainContent\">\n        <ng-container\n          *ngComponentOutlet=\"\n            PrejoinPageComponent.component;\n            injector: PrejoinPageComponent.injector\n          \"\n        >\n        </ng-container>\n      </ng-container>\n\n      <ng-template #mainContent>\n        <!-- Default Main Component -->\n        <ng-container *ngIf=\"returnUI\">\n          <ng-container\n            *appWithOverride=\"\n              'mainContainer';\n              default: MainContainerComponentRef;\n              props: mainContainerOverrideProps\n            \"\n          >\n            <app-main-container-component>\n              <ng-container\n                *appWithOverride=\"\n                  'mainAspect';\n                  default: MainAspectComponentRef;\n                  props: mainAspectOverrideProps\n                \"\n              >\n                <app-main-aspect-component\n                  [backgroundColor]=\"roomSurfaceColor()\"\n                  [defaultFraction]=\"1 - controlHeight.value\"\n                  [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\n                  [updateIsWideScreen]=\"updateIsWideScreen\"\n                  [updateIsMediumScreen]=\"updateIsMediumScreen\"\n                  [updateIsSmallScreen]=\"updateIsSmallScreen\"\n                >\n                  <!-- Main Screen Component -->\n                  <ng-container\n                    *appWithOverride=\"\n                      'mainScreen';\n                      default: MainScreenComponentRef;\n                      props: mainScreenOverrideProps\n                    \"\n                  >\n                    <app-main-screen-component\n                      [doStack]=\"true\"\n                      [mainSize]=\"mainHeightWidth.value\"\n                      [defaultFraction]=\"1 - controlHeight.value\"\n                      [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\n                      [updateComponentSizes]=\"updateComponentSizes\"\n                    >\n                      <!-- Main Grid Component -->\n                      <ng-container\n                        *appWithOverride=\"\n                          'mainGrid';\n                          default: MainGridComponentRef;\n                          props: mainGridOverrideProps\n                        \"\n                      >\n                        <app-main-grid-component\n                          [height]=\"componentSizes.value.mainHeight\"\n                          [width]=\"componentSizes.value.mainWidth\"\n                          [backgroundColor]=\"roomSurfaceColor()\"\n                          [mainSize]=\"mainHeightWidth.value\"\n                          [showAspect]=\"mainHeightWidth.value > 0\"\n                          [timeBackgroundColor]=\"recordState.value\"\n                          [meetingProgressTime]=\"meetingProgressTime.value\"\n                        >\n                          <ng-container\n                            *appWithOverride=\"\n                              'flexibleVideo';\n                              default: FlexibleVideoComponentRef;\n                              props: flexibleVideoOverrideProps\n                            \"\n                          >\n                            <app-flexible-video\n                              [customWidth]=\"componentSizes.value.mainWidth\"\n                              [customHeight]=\"componentSizes.value.mainHeight\"\n                              [rows]=\"1\"\n                              [columns]=\"1\"\n                              [componentsToRender]=\"mainGridStream.value\"\n                              [showAspect]=\"\n                                mainGridStream.value.length > 0 &&\n                                !(whiteboardStarted.value && !whiteboardEnded.value)\n                              \"\n                            >\n                            </app-flexible-video>\n                          </ng-container>\n\n                          <!-- Control Buttons for Broadcast -->\n                          <ng-container\n                            *appWithOverride=\"\n                              'controlButtonsTouch';\n                              default: ControlButtonsTouchComponentRef;\n                              props: controlButtonsTouchBroadcastOverrideProps\n                            \"\n                          >\n                            <app-control-buttons-component-touch\n                              [buttons]=\"controlBroadcastButtons\"\n                              [position]=\"'right'\"\n                              [location]=\"'bottom'\"\n                              [direction]=\"'vertical'\"\n                              [showAspect]=\"eventType.value === 'broadcast'\"\n                            ></app-control-buttons-component-touch>\n                          </ng-container>\n\n                          <!-- Recording Buttons -->\n                          <ng-container\n                            *appWithOverride=\"\n                              'controlButtonsTouch';\n                              default: ControlButtonsTouchComponentRef;\n                              props: controlButtonsTouchRecordOverrideProps\n                            \"\n                          >\n                            <app-control-buttons-component-touch\n                              [buttons]=\"recordButton\"\n                              [direction]=\"'horizontal'\"\n                              [showAspect]=\"\n                                eventType.value === 'broadcast' &&\n                                !showRecordButtons.value &&\n                                islevel.value === '2'\n                              \"\n                              [location]=\"'bottom'\"\n                              [position]=\"'middle'\"\n                            ></app-control-buttons-component-touch>\n                          </ng-container>\n\n                          <ng-container\n                            *appWithOverride=\"\n                              'controlButtonsTouch';\n                              default: ControlButtonsTouchComponentRef;\n                              props: controlButtonsTouchRecordAltOverrideProps\n                            \"\n                          >\n                            <app-control-buttons-component-touch\n                              [buttons]=\"recordButtons\"\n                              [direction]=\"'horizontal'\"\n                              [showAspect]=\"\n                                eventType.value === 'broadcast' &&\n                                showRecordButtons.value &&\n                                islevel.value === '2'\n                              \"\n                              [location]=\"'bottom'\"\n                              [position]=\"'middle'\"\n                            ></app-control-buttons-component-touch>\n                          </ng-container>\n\n                          <!-- AudioGrid -->\n                          <ng-container\n                            *appWithOverride=\"\n                              'audioGrid';\n                              default: AudioGridComponentRef;\n                              props: audioGridOverrideProps\n                            \"\n                          >\n                            <app-audio-grid [componentsToRender]=\"audioOnlyStreams.value\"></app-audio-grid>\n                          </ng-container>\n                        </app-main-grid-component>\n                      </ng-container>\n\n                      <!-- Other Grid Component is not included in MediasfuBroadcast -->\n                    </app-main-screen-component>\n                  </ng-container>\n                </app-main-aspect-component>\n              </ng-container>\n            </app-main-container-component>\n          </ng-container>\n        </ng-container>\n      </ng-template>\n    </div>\n\n    <!-- Modals and alerts (only available when using default UI, not custom components) -->\n    <ng-container *ngIf=\"returnUI && !customMainComponent\">\n      <ng-container\n        *appWithOverride=\"'alert'; default: AlertComponentRef; props: alertOverrideProps\"\n      >\n        <app-modern-alert-component\n          [visible]=\"alertVisible.value\"\n          [message]=\"alertMessage.value\"\n          [type]=\"alertType.value\"\n          [position]=\"alertPosition.value\"\n          [duration]=\"alertDuration.value\"\n          [onHide]=\"onAlertHide\"\n          [isDarkMode]=\"modernThemeDarkMode.value\"\n        ></app-modern-alert-component>\n      </ng-container>\n\n      <ng-container\n        *appWithOverride=\"'loadingModal'; default: LoadingModalComponentRef; props: loadingModalOverrideProps\"\n      >\n        <app-modern-loading-modal\n          [isVisible]=\"isLoadingModalVisible.value\"\n          [isDarkMode]=\"modernThemeDarkMode.value\"\n        ></app-modern-loading-modal>\n      </ng-container>\n\n      <app-participants-modal\n        *appWithOverride=\"\n          'participantsModal';\n          default: ParticipantsModalComponentRef;\n          props: participantsModalOverrideProps\n        \"\n        [backgroundColor]=\"roomModalSurfaceColor()\"\n        [isParticipantsModalVisible]=\"isParticipantsModalVisible.value\"\n        [onParticipantsClose]=\"onParticipantsClose\"\n        [participantsCounter]=\"participantsCounter.value\"\n        [onParticipantsFilterChange]=\"onParticipantsFilterChange\"\n        [parameters]=\"getAllParams()\"\n      ></app-participants-modal>\n\n      <app-recording-modal\n        *appWithOverride=\"\n          'recordingModal';\n          default: RecordingModalComponentRef;\n          props: recordingModalOverrideProps\n        \"\n        [backgroundColor]=\"roomModalSurfaceColor()\"\n        [isRecordingModalVisible]=\"isRecordingModalVisible.value\"\n        [onClose]=\"onRecordingClose\"\n        [startRecording]=\"startRecording.startRecording\"\n        [confirmRecording]=\"confirmRecording.confirmRecording\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-recording-modal>\n\n      <app-confirm-exit-modal\n        *appWithOverride=\"\n          'confirmExitModal';\n          default: ConfirmExitModalComponentRef;\n          props: confirmExitModalOverrideProps\n        \"\n        [backgroundColor]=\"roomAccentSurfaceColor()\"\n        [isConfirmExitModalVisible]=\"isConfirmExitModalVisible.value\"\n        [onConfirmExitClose]=\"onConfirmExitClose\"\n        [position]=\"'topRight'\"\n        [member]=\"member.value\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [islevel]=\"islevel.value\"\n      ></app-confirm-exit-modal>\n\n      <app-confirm-here-modal\n        *appWithOverride=\"\n          'confirmHereModal';\n          default: ConfirmHereModalComponentRef;\n          props: confirmHereModalOverrideProps\n        \"\n        [backgroundColor]=\"roomModalSurfaceColor()\"\n        [isConfirmHereModalVisible]=\"isConfirmHereModalVisible.value\"\n        [onConfirmHereClose]=\"onConfirmHereClose\"\n        [onSuppressConfirmHere]=\"onSuppressConfirmHere\"\n        [member]=\"member.value\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n      ></app-confirm-here-modal>\n\n      <app-share-event-modal\n        *appWithOverride=\"\n          'shareEventModal';\n          default: ShareEventModalComponentRef;\n          props: shareEventModalOverrideProps\n        \"\n        [backgroundColor]=\"roomModalSurfaceColor()\"\n        [isShareEventModalVisible]=\"isShareEventModalVisible.value\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n        [onShareEventClose]=\"onShareEventClose\"\n        [roomName]=\"roomName.value\"\n        [islevel]=\"islevel.value\"\n        [adminPasscode]=\"adminPasscode.value\"\n        [eventType]=\"eventType.value\"\n        [localLink]=\"localLink\"\n      ></app-share-event-modal>\n\n      <app-event-settings-modal\n        *appWithOverride=\"\n          'eventSettingsModal';\n          default: EventSettingsModalComponentRef;\n          props: eventSettingsModalOverrideProps\n        \"\n        [isEventSettingsModalVisible]=\"isSettingsModalVisible.value\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n        [onEventSettingsClose]=\"onEventSettingsClose\"\n        [audioSetting]=\"audioSetting.value\"\n        [videoSetting]=\"videoSetting.value\"\n        [screenshareSetting]=\"screenshareSetting.value\"\n        [chatSetting]=\"chatSetting.value\"\n        [updateAudioSetting]=\"updateAudioSetting\"\n        [updateVideoSetting]=\"updateVideoSetting\"\n        [updateScreenshareSetting]=\"updateScreenshareSetting\"\n        [updateChatSetting]=\"updateChatSetting\"\n        [updateIsSettingsModalVisible]=\"updateIsSettingsModalVisible\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [showAlert]=\"showAlert\"\n      ></app-event-settings-modal>\n\n      <app-messages-modal\n        *appWithOverride=\"\n          'messagesModal';\n          default: MessagesModalComponentRef;\n          props: messagesModalOverrideProps\n        \"\n        [backgroundColor]=\"roomModalSurfaceColor()\"\n        [isMessagesModalVisible]=\"isMessagesModalVisible.value\"\n        [onMessagesClose]=\"onMessagesClose\"\n        [messages]=\"messages.value\"\n        [eventType]=\"eventType.value\"\n        [member]=\"member.value\"\n        [islevel]=\"islevel.value\"\n        [coHostResponsibility]=\"coHostResponsibility.value\"\n        [coHost]=\"coHost.value\"\n        [startDirectMessage]=\"startDirectMessage.value\"\n        [directMessageDetails]=\"directMessageDetails.value\"\n        [updateStartDirectMessage]=\"updateStartDirectMessage\"\n        [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\n        [showAlert]=\"showAlert\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [chatSetting]=\"chatSetting.value\"\n      ></app-messages-modal>\n    </ng-container>\n\n    <!-- Prejoin page for custom component (when not validated) -->\n    <ng-container *ngIf=\"customMainComponent && !validated.value\">\n      <ng-container\n        *ngComponentOutlet=\"\n          PrejoinPageComponent.component;\n          injector: PrejoinPageComponent.injector\n        \"\n      >\n      </ng-container>\n    </ng-container>\n  `,\n  styles: [\n    `\n      .MediaSFU {\n        height: 100vh;\n        width: 100vw;\n        max-width: 100vw;\n        max-height: 100vh;\n        overflow: hidden;\n      }\n    `,\n  ],\n  providers: [CookieService]\n})\nexport class MediasfuBroadcast implements OnInit, OnDestroy {\n  @Input()\n  PrejoinPage: any = WelcomePage;\n  @Input() localLink = '';\n  @Input() connectMediaSFU = true;\n  @Input() credentials: { apiUserName: string; apiKey: string } = { apiUserName: '', apiKey: '' };\n  @Input() useLocalUIMode = false;\n  @Input() seedData?: SeedData;\n  @Input() useSeed = false;\n  @Input() imgSrc = 'https://mediasfu.com/images/logo192.png';\n  @Input() sourceParameters: { [key: string]: any } = {};\n  @Input() updateSourceParameters? = (data: { [key: string]: any }) => { };\n  @Input() returnUI? = true;\n  @Input() noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\n  @Input() joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n  @Input() createMediaSFURoom?: CreateRoomOnMediaSFUType;\n\n  // Custom component inputs\n  @Input() customVideoCard: any;\n  @Input() customAudioCard: any;\n  @Input() customMiniCard: any;\n  @Input() customMainComponent: any;\n\n  // UI customization inputs\n  @Input() containerStyle?: Record<string, any>;\n  @Input() uiOverrides?: MediasfuUICustomOverrides;\n\n  title = 'MediaSFU-Broadcast';\n\n  protected readonly MainContainerComponentRef = MainContainerComponent;\n  protected readonly MainAspectComponentRef = MainAspectComponent;\n  protected readonly MainScreenComponentRef = MainScreenComponent;\n  protected readonly MainGridComponentRef = MainGridComponent;\n  protected readonly FlexibleVideoComponentRef = FlexibleVideo;\n  protected readonly AudioGridComponentRef = AudioGrid;\n  protected readonly ControlButtonsTouchComponentRef = ControlButtonsComponentTouch;\n  protected readonly AlertComponentRef = ModernAlertComponent;\n  protected readonly LoadingModalComponentRef = ModernLoadingModalComponent;\n  protected readonly ParticipantsModalComponentRef = ModernParticipantsModalComponent;\n  protected readonly RecordingModalComponentRef = ModernRecordingModalComponent;\n  protected readonly ConfirmExitModalComponentRef = ModernConfirmExitModalComponent;\n  protected readonly ConfirmHereModalComponentRef = ModernConfirmHereModalComponent;\n  protected readonly ShareEventModalComponentRef = ModernShareEventModalComponent;\n  protected readonly EventSettingsModalComponentRef = ModernEventSettingsModalComponent;\n  protected readonly MessagesModalComponentRef = ModernMessagesModalComponent;\n\n  mainContainerOverrideProps = () => ({\n    containerStyle: this.containerStyle,\n    parameters: this.mediaSFUParameters,\n  });\n\n  mainAspectOverrideProps = () => ({\n    backgroundColor: this.roomSurfaceColor(),\n    defaultFraction: 1 - this.controlHeight.value,\n    showControls: this.eventType.value === 'webinar' || this.eventType.value === 'conference',\n    updateIsWideScreen: this.updateIsWideScreen,\n    updateIsMediumScreen: this.updateIsMediumScreen,\n    updateIsSmallScreen: this.updateIsSmallScreen,\n    parameters: this.mediaSFUParameters,\n  });\n\n  mainScreenOverrideProps = () => ({\n    doStack: true,\n    mainSize: this.mainHeightWidth.value,\n    defaultFraction: 1 - this.controlHeight.value,\n    showControls: this.eventType.value === 'webinar' || this.eventType.value === 'conference',\n    updateComponentSizes: this.updateComponentSizes,\n    parameters: this.mediaSFUParameters,\n  });\n\n  mainGridOverrideProps = () => ({\n    height: this.componentSizes.value.mainHeight,\n    width: this.componentSizes.value.mainWidth,\n    backgroundColor: this.roomSurfaceColor(),\n    mainSize: this.mainHeightWidth.value,\n    showAspect: this.mainHeightWidth.value > 0,\n    timeBackgroundColor: this.recordState.value,\n    meetingProgressTime: this.meetingProgressTime.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  flexibleVideoOverrideProps = () => ({\n    customWidth: this.componentSizes.value.mainWidth,\n    customHeight: this.componentSizes.value.mainHeight,\n    rows: 1,\n    columns: 1,\n    componentsToRender: this.mainGridStream.value,\n    showAspect:\n      this.mainGridStream.value.length > 0 &&\n      !(this.whiteboardStarted.value && !this.whiteboardEnded.value),\n    parameters: this.mediaSFUParameters,\n    customVideoCard: this.customVideoCard,\n    customAudioCard: this.customAudioCard,\n    customMiniCard: this.customMiniCard,\n  });\n\n  controlButtonsTouchBroadcastOverrideProps = () => ({\n    buttons: this.controlBroadcastButtons,\n    position: 'right',\n    location: 'bottom',\n    direction: 'vertical',\n    showAspect: this.eventType.value === 'broadcast',\n    parameters: this.mediaSFUParameters,\n  });\n\n  controlButtonsTouchRecordOverrideProps = () => ({\n    buttons: this.recordButton,\n    direction: 'horizontal',\n    showAspect:\n      this.eventType.value === 'broadcast' &&\n      !this.showRecordButtons.value &&\n      this.islevel.value === '2',\n    location: 'bottom',\n    position: 'middle',\n    parameters: this.mediaSFUParameters,\n  });\n\n  controlButtonsTouchRecordAltOverrideProps = () => ({\n    buttons: this.recordButtons,\n    direction: 'horizontal',\n    showAspect:\n      this.eventType.value === 'broadcast' &&\n      this.showRecordButtons.value &&\n      this.islevel.value === '2',\n    location: 'bottom',\n    position: 'middle',\n    parameters: this.mediaSFUParameters,\n  });\n\n  audioGridOverrideProps = () => ({\n    componentsToRender: this.audioOnlyStreams.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  alertOverrideProps = () => ({\n    visible: this.alertVisible.value,\n    message: this.alertMessage.value,\n    type: this.alertType.value,\n    position: this.alertPosition.value,\n    duration: this.alertDuration.value,\n    onHide: this.onAlertHide,\n    isDarkMode: this.modernThemeDarkMode.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  loadingModalOverrideProps = () => ({\n    isVisible: this.isLoadingModalVisible.value,\n    isDarkMode: this.modernThemeDarkMode.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  participantsModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isParticipantsModalVisible: this.isParticipantsModalVisible.value,\n    onParticipantsClose: this.onParticipantsClose,\n    participantsCounter: this.participantsCounter.value,\n    onParticipantsFilterChange: this.onParticipantsFilterChange,\n    parameters: this.getAllParams(),\n  });\n\n  recordingModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isRecordingModalVisible: this.isRecordingModalVisible.value,\n    onClose: this.onRecordingClose,\n    startRecording: this.startRecording.startRecording,\n    confirmRecording: this.confirmRecording.confirmRecording,\n    parameters: this.getAllParams(),\n  });\n\n  confirmExitModalOverrideProps = () => ({\n    backgroundColor: this.roomAccentSurfaceColor(),\n    isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n    onConfirmExitClose: this.onConfirmExitClose,\n    position: 'topRight',\n    member: this.member.value,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    islevel: this.islevel.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  confirmHereModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\n    onConfirmHereClose: this.onConfirmHereClose,\n    onSuppressConfirmHere: this.onSuppressConfirmHere,\n    member: this.member.value,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  shareEventModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isShareEventModalVisible: this.isShareEventModalVisible.value,\n    isDarkMode: this.modernThemeDarkMode.value,\n    onShareEventClose: this.onShareEventClose,\n    roomName: this.roomName.value,\n    islevel: this.islevel.value,\n    adminPasscode: this.adminPasscode.value,\n    eventType: this.eventType.value,\n    localLink: this.localLink,\n    parameters: this.mediaSFUParameters,\n  });\n\n  eventSettingsModalOverrideProps = () => ({\n    isEventSettingsModalVisible: this.isSettingsModalVisible.value,\n    isDarkMode: this.modernThemeDarkMode.value,\n    onEventSettingsClose: this.onEventSettingsClose,\n    audioSetting: this.audioSetting.value,\n    videoSetting: this.videoSetting.value,\n    screenshareSetting: this.screenshareSetting.value,\n    chatSetting: this.chatSetting.value,\n    updateAudioSetting: this.updateAudioSetting,\n    updateVideoSetting: this.updateVideoSetting,\n    updateScreenshareSetting: this.updateScreenshareSetting,\n    updateChatSetting: this.updateChatSetting,\n    updateIsSettingsModalVisible: this.updateIsSettingsModalVisible,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    showAlert: this.showAlert,\n    parameters: this.mediaSFUParameters,\n  });\n\n  messagesModalOverrideProps = () => ({\n    backgroundColor: this.roomModalSurfaceColor(),\n    isMessagesModalVisible: this.isMessagesModalVisible.value,\n    onMessagesClose: this.onMessagesClose,\n    messages: this.messages.value,\n    eventType: this.eventType.value,\n    member: this.member.value,\n    islevel: this.islevel.value,\n    coHostResponsibility: this.coHostResponsibility.value,\n    coHost: this.coHost.value,\n    startDirectMessage: this.startDirectMessage.value,\n    directMessageDetails: this.directMessageDetails.value,\n    updateStartDirectMessage: this.updateStartDirectMessage,\n    updateDirectMessageDetails: this.updateDirectMessageDetails,\n    showAlert: this.showAlert,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    chatSetting: this.chatSetting.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  private mainHeightWidthSubscription: Subscription | undefined;\n  private validatedSubscription: Subscription | undefined;\n  private islevelSubscription: Subscription | undefined;\n  private coHostSubscription: Subscription | undefined;\n  private buttonSubscriptions: Subscription[] = [];\n  private ScreenboardSubscription: Subscription | undefined;\n  private recordingSubscription: Subscription | undefined;\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    private injector: Injector,\n    public updateMiniCardsGrid: UpdateMiniCardsGrid,\n    public mixStreams: MixStreams,\n    public dispStreams: DispStreams,\n    public stopShareScreen: StopShareScreen,\n    public checkScreenShare: CheckScreenShare,\n    public startShareScreen: StartShareScreen,\n    public requestScreenShare: RequestScreenShare,\n    public reorderStreams: ReorderStreams,\n    public prepopulateUserMedia: PrepopulateUserMedia,\n    public getVideos: GetVideos,\n    public rePort: RePort,\n    public trigger: Trigger,\n    public consumerResume: ConsumerResume,\n    public connectSendTransport: ConnectSendTransport,\n    public connectSendTransportAudio: ConnectSendTransportAudio,\n    public connectSendTransportVideo: ConnectSendTransportVideo,\n    public connectSendTransportScreen: ConnectSendTransportScreen,\n    public processConsumerTransports: ProcessConsumerTransports,\n    public resumePauseStreams: ResumePauseStreams,\n    public readjust: Readjust,\n    public checkGrid: CheckGrid,\n    public getEstimate: GetEstimate,\n    public calculateRowsAndColumns: CalculateRowsAndColumns,\n    public addVideosGrid: AddVideosGrid,\n    public onScreenChanges: OnScreenChanges,\n    public changeVids: ChangeVids,\n    public compareActiveNames: CompareActiveNames,\n    public compareScreenStates: CompareScreenStates,\n    public createSendTransport: CreateSendTransport,\n    public resumeSendTransportAudio: ResumeSendTransportAudio,\n    public receiveAllPipedTransports: ReceiveAllPipedTransports,\n    public disconnectSendTransportVideo: DisconnectSendTransportVideo,\n    public disconnectSendTransportAudio: DisconnectSendTransportAudio,\n    public disconnectSendTransportScreen: DisconnectSendTransportScreen,\n    public getPipedProducersAlt: GetPipedProducersAlt,\n    public signalNewConsumerTransport: SignalNewConsumerTransport,\n    public connectRecvTransport: ConnectRecvTransport,\n    public reUpdateInter: ReUpdateInter,\n    public updateParticipantAudioDecibels: UpdateParticipantAudioDecibels,\n    public closeAndResize: CloseAndResize,\n    public autoAdjust: AutoAdjust,\n    public switchUserVideoAlt: SwitchUserVideoAlt,\n    public switchUserVideo: SwitchUserVideo,\n    public switchUserAudio: SwitchUserAudio,\n    public getDomains: GetDomains,\n    public formatNumber: FormatNumber,\n    public connectIps: ConnectIps,\n    public connectLocalIps: ConnectLocalIps,\n    public createDeviceClient: CreateDeviceClient,\n    public captureCanvasStream: CaptureCanvasStream,\n    public resumePauseAudioStreams: ResumePauseAudioStreams,\n    public processConsumerTransportsAudio: ProcessConsumerTransportsAudio,\n\n    public launchRecording: LaunchRecording,\n    public startRecording: StartRecording,\n    public confirmRecording: ConfirmRecording,\n    public launchParticipants: LaunchParticipants,\n    public launchMessages: LaunchMessages,\n    public launchConfirmExit: LaunchConfirmExit,\n\n    public startMeetingProgressTimer: StartMeetingProgressTimer,\n    public updateRecording: UpdateRecording,\n    public stopRecording: StopRecording,\n\n    public personJoined: PersonJoined,\n\n    public roomRecordParams: RoomRecordParams,\n    public banParticipant: BanParticipant,\n\n    public producerMediaPaused: ProducerMediaPaused,\n    public producerMediaResumed: ProducerMediaResumed,\n    public producerMediaClosed: ProducerMediaClosed,\n\n    public meetingEnded: MeetingEnded,\n    public disconnectUserSelf: DisconnectUserSelf,\n    public receiveMessage: ReceiveMessage,\n    public meetingTimeRemaining: MeetingTimeRemaining,\n    public meetingStillThere: MeetingStillThere,\n    public startRecords: StartRecords,\n    public reInitiateRecording: ReInitiateRecording,\n    public recordingNotice: RecordingNotice,\n    public timeLeftRecording: TimeLeftRecording,\n    public stoppedRecording: StoppedRecording,\n\n    public allMembers: AllMembers,\n    public allMembersRest: AllMembersRest,\n    public disconnect: Disconnect,\n\n    public socketManager: SocketManager,\n    public joinRoomClient: JoinRoomClient,\n    public joinLocalRoom: JoinLocalRoom,\n    public updateRoomParametersClient: UpdateRoomParametersClient,\n    public clickVideo: ClickVideo,\n    public clickAudio: ClickAudio,\n    public clickScreenShare: ClickScreenShare,\n    public switchVideoAlt: SwitchVideoAlt,\n    public streamSuccessVideo: StreamSuccessVideo,\n    public streamSuccessAudio: StreamSuccessAudio,\n    public streamSuccessScreen: StreamSuccessScreen,\n    public streamSuccessAudioSwitch: StreamSuccessAudioSwitch,\n    public checkPermission: CheckPermission,\n\n    public updateConsumingDomains: UpdateConsumingDomains,\n    public receiveRoomMessages: ReceiveRoomMessages,\n    private uiOverrideResolver: UIOverrideResolverService,\n  ) { }\n\n  createInjector(inputs: any) {\n    if (!inputs || typeof inputs !== 'object') {\n      return this.injector;\n    }\n\n    const inj = Injector.create({\n      providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\n      parent: this.injector,\n    });\n\n    return inj;\n  }\n\n  /**\n   * Gets a list of media devices filtered by the specified kind.\n   * @param kind - The kind of media device to filter by ('videoinput' or 'audioinput')\n   * @returns A promise that resolves to an array of MediaDeviceInfo objects\n   */\n  getMediaDevicesList = async (kind: 'videoinput' | 'audioinput'): Promise<MediaDeviceInfo[]> => {\n    try {\n      const devices = await navigator.mediaDevices.enumerateDevices();\n      return devices.filter((device) => device.kind === kind);\n    } catch (error) {\n      console.error('Error enumerating devices:', error);\n      return [];\n    }\n  };\n\n  /**\n   * Gets the media stream for a participant by their ID or name.\n   * @param options - Object containing id, name, and kind parameters\n   * @returns A promise that resolves to the participant's MediaStream or null if not found\n   */\n  getParticipantMedia = async (options: {\n    id?: string;\n    name?: string;\n    kind: 'video' | 'audio';\n  }): Promise<MediaStream | null> => {\n    const { id, name, kind } = options;\n\n    try {\n      const streams =\n        kind === 'video' ? this.allVideoStreams.value : this.allAudioStreams.value;\n\n      // Search by producerId if provided\n      if (id) {\n        const streamObj = streams.find((obj: any) => obj.producerId === id);\n        if (streamObj && 'stream' in streamObj) {\n          return streamObj.stream || null;\n        }\n      }\n\n      // Search by name if provided\n      if (name) {\n        const streamObj = streams.find((obj: any) => obj.name === name);\n        if (streamObj && 'stream' in streamObj) {\n          return streamObj.stream || null;\n        }\n      }\n\n      return null;\n    } catch (error) {\n      console.error('Error getting participant media:', error);\n      return null;\n    }\n  };\n\n  // Initial values\n  mediaSFUFunctions = (): any => {\n    return {\n      updateMiniCardsGrid:\n        this.updateMiniCardsGrid?.updateMiniCardsGrid ||\n        (() => {\n          console.log('none');\n        }),\n      mixStreams:\n        this.mixStreams?.mixStreams ||\n        (() => {\n          console.log('none');\n        }),\n      dispStreams:\n        this.dispStreams?.dispStreams ||\n        (() => {\n          console.log('none');\n        }),\n      stopShareScreen:\n        this.stopShareScreen?.stopShareScreen ||\n        (() => {\n          console.log('none');\n        }),\n      checkScreenShare:\n        this.checkScreenShare?.checkScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      startShareScreen:\n        this.startShareScreen?.startShareScreen ||\n        (() => {\n          console.log('none');\n        }),\n      requestScreenShare:\n        this.requestScreenShare?.requestScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      reorderStreams:\n        this.reorderStreams?.reorderStreams ||\n        (() => {\n          console.log('none');\n        }),\n      prepopulateUserMedia:\n        this.prepopulateUserMedia?.prepopulateUserMedia ||\n        (() => {\n          console.log('none');\n        }),\n      getVideos:\n        this.getVideos?.getVideos ||\n        (() => {\n          console.log('none');\n        }),\n      rePort:\n        this.rePort?.rePort ||\n        (() => {\n          console.log('none');\n        }),\n      trigger:\n        this.trigger?.trigger ||\n        (() => {\n          console.log('none');\n        }),\n      consumerResume:\n        this.consumerResume?.consumerResume ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransport:\n        this.connectSendTransport?.connectSendTransport ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportAudio:\n        this.connectSendTransportAudio?.connectSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportVideo:\n        this.connectSendTransportVideo?.connectSendTransportVideo ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportScreen:\n        this.connectSendTransportScreen?.connectSendTransportScreen ||\n        (() => {\n          console.log('none');\n        }),\n      processConsumerTransports:\n        this.processConsumerTransports?.processConsumerTransports ||\n        (() => {\n          console.log('none');\n        }),\n      resumePauseStreams:\n        this.resumePauseStreams?.resumePauseStreams ||\n        (() => {\n          console.log('none');\n        }),\n      readjust:\n        this.readjust?.readjust ||\n        (() => {\n          console.log('none');\n        }),\n      checkGrid:\n        this.checkGrid?.checkGrid ||\n        (() => {\n          console.log('none');\n        }),\n      getEstimate:\n        this.getEstimate?.getEstimate ||\n        (() => {\n          console.log('none');\n        }),\n      calculateRowsAndColumns:\n        this.calculateRowsAndColumns?.calculateRowsAndColumns ||\n        (() => {\n          console.log('none');\n        }),\n      addVideosGrid:\n        this.addVideosGrid?.addVideosGrid ||\n        (() => {\n          console.log('none');\n        }),\n      onScreenChanges:\n        this.onScreenChanges?.onScreenChanges ||\n        (() => {\n          console.log('none');\n        }),\n      sleep:\n        sleep ||\n        (() => {\n          console.log('none');\n        }),\n      changeVids:\n        this.changeVids?.changeVids ||\n        (() => {\n          console.log('none');\n        }),\n      compareActiveNames:\n        this.compareActiveNames?.compareActiveNames ||\n        (() => {\n          console.log('none');\n        }),\n      compareScreenStates:\n        this.compareScreenStates?.compareScreenStates ||\n        (() => {\n          console.log('none');\n        }),\n      createSendTransport:\n        this.createSendTransport?.createSendTransport ||\n        (() => {\n          console.log('none');\n        }),\n      resumeSendTransportAudio:\n        this.resumeSendTransportAudio?.resumeSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      receiveAllPipedTransports:\n        this.receiveAllPipedTransports?.receiveAllPipedTransports ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportVideo:\n        this.disconnectSendTransportVideo?.disconnectSendTransportVideo ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportAudio:\n        this.disconnectSendTransportAudio?.disconnectSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportScreen:\n        this.disconnectSendTransportScreen?.disconnectSendTransportScreen ||\n        (() => {\n          console.log('none');\n        }),\n      getPipedProducersAlt:\n        this.getPipedProducersAlt?.getPipedProducersAlt ||\n        (() => {\n          console.log('none');\n        }),\n      signalNewConsumerTransport:\n        this.signalNewConsumerTransport?.signalNewConsumerTransport ||\n        (() => {\n          console.log('none');\n        }),\n      connectRecvTransport:\n        this.connectRecvTransport?.connectRecvTransport ||\n        (() => {\n          console.log('none');\n        }),\n      reUpdateInter:\n        this.reUpdateInter?.reUpdateInter ||\n        (() => {\n          console.log('none');\n        }),\n      updateParticipantAudioDecibels:\n        this.updateParticipantAudioDecibels?.updateParticipantAudioDecibels ||\n        (() => {\n          console.log('none');\n        }),\n      closeAndResize:\n        this.closeAndResize?.closeAndResize ||\n        (() => {\n          console.log('none');\n        }),\n      autoAdjust:\n        this.autoAdjust?.autoAdjust ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserVideoAlt:\n        this.switchUserVideoAlt?.switchUserVideoAlt ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserVideo:\n        this.switchUserVideo?.switchUserVideo ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserAudio:\n        this.switchUserAudio?.switchUserAudio ||\n        (() => {\n          console.log('none');\n        }),\n      getDomains:\n        this.getDomains?.getDomains ||\n        (() => {\n          console.log('none');\n        }),\n      formatNumber:\n        this.formatNumber?.formatNumber ||\n        (() => {\n          console.log('none');\n        }),\n      connectIps:\n        this.connectIps?.connectIps ||\n        (() => {\n          console.log('none');\n        }),\n      connectLocalIps:\n        this.connectLocalIps?.connectLocalIps ||\n        (() => {\n          console.log('none');\n        }),\n      createDeviceClient:\n        this.createDeviceClient?.createDeviceClient ||\n        (() => {\n          console.log('none');\n        }),\n      captureCanvasStream:\n        this.captureCanvasStream?.captureCanvasStream ||\n        (() => {\n          console.log('none');\n        }),\n      resumePauseAudioStreams:\n        this.resumePauseAudioStreams?.resumePauseAudioStreams ||\n        (() => {\n          console.log('none');\n        }),\n      processConsumerTransportsAudio:\n        this.processConsumerTransportsAudio?.processConsumerTransportsAudio ||\n        (() => {\n          console.log('none');\n        }),\n      checkPermission:\n        this.checkPermission?.checkPermission ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessVideo:\n        this.streamSuccessVideo?.streamSuccessVideo ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessAudio:\n        this.streamSuccessAudio?.streamSuccessAudio ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessScreen:\n        this.streamSuccessScreen?.streamSuccessScreen ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessAudioSwitch:\n        this.streamSuccessAudioSwitch?.streamSuccessAudioSwitch ||\n        (() => {\n          console.log('none');\n        }),\n      clickVideo:\n        this.clickVideo?.clickVideo ||\n        (() => {\n          console.log('none');\n        }),\n      clickAudio:\n        this.clickAudio?.clickAudio ||\n        (() => {\n          console.log('none');\n        }),\n      clickScreenShare:\n        this.clickScreenShare?.clickScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      switchVideoAlt:\n        this.switchVideoAlt?.switchVideoAlt ||\n        (() => {\n          console.log('none');\n        }),\n      requestPermissionCamera:\n        this.requestPermissionCamera ||\n        (() => {\n          console.log('none');\n        }),\n      requestPermissionAudio:\n        this.requestPermissionAudio ||\n        (() => {\n          console.log('none');\n        }),\n      getMediaDevicesList: this.getMediaDevicesList,\n      getParticipantMedia: this.getParticipantMedia,\n    };\n  };\n\n  validated = new BehaviorSubject<boolean>(false);\n  localUIMode = new BehaviorSubject<boolean>(false);\n  socket = new BehaviorSubject<Socket>({} as Socket);\n  localSocket? = new BehaviorSubject<Socket | undefined>(undefined);\n  roomData = new BehaviorSubject<ResponseJoinRoom | null>(null);\n  device = new BehaviorSubject<Device | null>(null);\n  apiKey = new BehaviorSubject<string>('');\n  apiUserName = new BehaviorSubject<string>('');\n  apiToken = new BehaviorSubject<string>('');\n  link = new BehaviorSubject<string>('');\n\n  roomName = new BehaviorSubject<string>('');\n  member = new BehaviorSubject<string>('');\n  adminPasscode = new BehaviorSubject<string>('');\n  islevel = new BehaviorSubject<string>('1');\n  coHost = new BehaviorSubject<string>('No coHost');\n  coHostResponsibility = new BehaviorSubject<CoHostResponsibility[]>([\n    { name: 'participants', value: false, dedicated: false },\n    { name: 'media', value: false, dedicated: false },\n    { name: 'waiting', value: false, dedicated: false },\n    { name: 'chat', value: false, dedicated: false },\n  ]);\n  youAreCoHost = new BehaviorSubject<boolean>(false);\n  youAreHost = new BehaviorSubject<boolean>(false);\n  confirmedToRecord = new BehaviorSubject<boolean>(false);\n  meetingDisplayType = new BehaviorSubject<string>('media');\n  meetingVideoOptimized = new BehaviorSubject<boolean>(false);\n  eventType = new BehaviorSubject<EventType>('broadcast');\n  participants = new BehaviorSubject<Participant[]>([]);\n  filteredParticipants = new BehaviorSubject<Participant[]>([]);\n  participantsCounter = new BehaviorSubject<number>(0);\n  participantsFilter = new BehaviorSubject<string>('');\n\n  consume_sockets = new BehaviorSubject<ConsumeSocket[]>([]);\n  rtpCapabilities = new BehaviorSubject<RtpCapabilities | null>(null);\n  roomRecvIPs = new BehaviorSubject<string[]>([]);\n  meetingRoomParams = new BehaviorSubject<MeetingRoomParams | null>(null);\n  itemPageLimit = new BehaviorSubject<number>(4);\n  audioOnlyRoom = new BehaviorSubject<boolean>(false);\n  addForBasic = new BehaviorSubject<boolean>(false);\n  screenPageLimit = new BehaviorSubject<number>(4);\n  shareScreenStarted = new BehaviorSubject<boolean>(false);\n  shared = new BehaviorSubject<boolean>(false);\n  targetOrientation = new BehaviorSubject<string>('landscape');\n  targetResolution = new BehaviorSubject<string>('sd');\n  targetResolutionHost = new BehaviorSubject<string>('sd');\n  vidCons = new BehaviorSubject<VidCons>({ width: 640, height: 360 });\n  frameRate = new BehaviorSubject<number>(10);\n  hParams = new BehaviorSubject<HParamsType>({} as HParamsType);\n  vParams = new BehaviorSubject<VParamsType>({} as VParamsType);\n  screenParams = new BehaviorSubject<ScreenParamsType>({} as ScreenParamsType);\n  aParams = new BehaviorSubject<AParamsType>({} as AParamsType);\n\n  recordingAudioPausesLimit = new BehaviorSubject<number>(0);\n  recordingAudioPausesCount = new BehaviorSubject<number>(0);\n  recordingAudioSupport = new BehaviorSubject<boolean>(false);\n  recordingAudioPeopleLimit = new BehaviorSubject<number>(0);\n  recordingAudioParticipantsTimeLimit = new BehaviorSubject<number>(0);\n  recordingVideoPausesCount = new BehaviorSubject<number>(0);\n  recordingVideoPausesLimit = new BehaviorSubject<number>(0);\n  recordingVideoSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoPeopleLimit = new BehaviorSubject<number>(0);\n  recordingVideoParticipantsTimeLimit = new BehaviorSubject<number>(0);\n  recordingAllParticipantsSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoParticipantsSupport = new BehaviorSubject<boolean>(false);\n  recordingAllParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\n  recordingPreferredOrientation = new BehaviorSubject<string>('landscape');\n  recordingSupportForOtherOrientation = new BehaviorSubject<boolean>(false);\n  recordingMultiFormatsSupport = new BehaviorSubject<boolean>(false);\n\n  userRecordingParams = new BehaviorSubject<UserRecordingParams>({\n    mainSpecs: {\n      mediaOptions: 'video', // 'audio', 'video'\n      audioOptions: 'all', // 'all', 'onScreen', 'host'\n      videoOptions: 'all', // 'all', 'mainScreen'\n      videoType: 'fullDisplay', // 'all', 'bestDisplay', 'fullDisplay'\n      videoOptimized: false, // true, false\n      recordingDisplayType: 'media', // 'media', 'video', 'all'\n      addHLS: false, // true, false\n    },\n    dispSpecs: {\n      nameTags: true, // true, false\n      backgroundColor: '#000000', // '#000000', '#ffffff'\n      nameTagsColor: '#ffffff', // '#000000', '#ffffff'\n      orientationVideo: 'portrait', // 'landscape', 'portrait', 'all'\n    },\n  });\n\n  canRecord = new BehaviorSubject<boolean>(false);\n  startReport = new BehaviorSubject<boolean>(false);\n  endReport = new BehaviorSubject<boolean>(false);\n  recordTimerInterval = new BehaviorSubject<number | null>(null);\n  recordStartTime = new BehaviorSubject<number>(0);\n  recordElapsedTime = new BehaviorSubject<number>(0);\n  isTimerRunning = new BehaviorSubject<boolean>(false);\n  canPauseResume = new BehaviorSubject<boolean>(false);\n  recordChangeSeconds = new BehaviorSubject<number>(15000);\n  pauseLimit = new BehaviorSubject<number>(0);\n  pauseRecordCount = new BehaviorSubject<number>(0);\n  canLaunchRecord = new BehaviorSubject<boolean>(true);\n  stopLaunchRecord = new BehaviorSubject<boolean>(false);\n\n  participantsAll = new BehaviorSubject<Participant[]>([]);\n\n  firstAll = new BehaviorSubject<boolean>(false);\n  updateMainWindow = new BehaviorSubject<boolean>(false);\n  first_round = new BehaviorSubject<boolean>(false);\n  landScaped = new BehaviorSubject<boolean>(false);\n  lock_screen = new BehaviorSubject<boolean>(false);\n  screenId = new BehaviorSubject<string>('');\n  allVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  newLimitedStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  newLimitedStreamsIDs = new BehaviorSubject<string[]>([]);\n  activeSounds = new BehaviorSubject<string[]>([]);\n  screenShareIDStream = new BehaviorSubject<string>('');\n  screenShareNameStream = new BehaviorSubject<string>('');\n  adminIDStream = new BehaviorSubject<string>('');\n  adminNameStream = new BehaviorSubject<string>('');\n  youYouStream = new BehaviorSubject<(Participant | Stream)[]>([]);\n  youYouStreamIDs = new BehaviorSubject<string[]>([]);\n  localStream = new BehaviorSubject<MediaStream | null>(null);\n  recordStarted = new BehaviorSubject<boolean>(false);\n  recordResumed = new BehaviorSubject<boolean>(false);\n  recordPaused = new BehaviorSubject<boolean>(false);\n  recordStopped = new BehaviorSubject<boolean>(false);\n  adminRestrictSetting = new BehaviorSubject<boolean>(false);\n  videoRequestState = new BehaviorSubject<string | null>(null);\n  videoRequestTime = new BehaviorSubject<number>(0);\n  videoAction = new BehaviorSubject<boolean>(false);\n  localStreamVideo = new BehaviorSubject<MediaStream | null>(null);\n  userDefaultVideoInputDevice = new BehaviorSubject<string>('');\n  currentFacingMode = new BehaviorSubject<string>('user');\n  prevFacingMode = new BehaviorSubject<string>('user');\n  defVideoID = new BehaviorSubject<string>('');\n  allowed = new BehaviorSubject<boolean>(false);\n  dispActiveNames = new BehaviorSubject<string[]>([]);\n  p_dispActiveNames = new BehaviorSubject<string[]>([]);\n  activeNames = new BehaviorSubject<string[]>([]);\n  prevActiveNames = new BehaviorSubject<string[]>([]);\n  p_activeNames = new BehaviorSubject<string[]>([]);\n  membersReceived = new BehaviorSubject<boolean>(false);\n  deferScreenReceived = new BehaviorSubject<boolean>(false);\n  hostFirstSwitch = new BehaviorSubject<boolean>(false);\n  micAction = new BehaviorSubject<boolean>(false);\n  screenAction = new BehaviorSubject<boolean>(false);\n  chatAction = new BehaviorSubject<boolean>(false);\n  audioRequestState = new BehaviorSubject<string | null>(null);\n  screenRequestState = new BehaviorSubject<string | null>(null);\n  chatRequestState = new BehaviorSubject<string | null>(null);\n  audioRequestTime = new BehaviorSubject<number>(0);\n  screenRequestTime = new BehaviorSubject<number>(0);\n  chatRequestTime = new BehaviorSubject<number>(0);\n  updateRequestIntervalSeconds = new BehaviorSubject<number>(240);\n  oldSoundIds = new BehaviorSubject<string[]>([]);\n  hostLabel = new BehaviorSubject<string>('Host');\n  mainScreenFilled = new BehaviorSubject<boolean>(false);\n  localStreamScreen = new BehaviorSubject<MediaStream | null>(null);\n  screenAlreadyOn = new BehaviorSubject<boolean>(false);\n  chatAlreadyOn = new BehaviorSubject<boolean>(false);\n  redirectURL = new BehaviorSubject<string>('');\n  oldAllStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  adminVidID = new BehaviorSubject<string>('');\n  streamNames = new BehaviorSubject<Stream[]>([]);\n  non_alVideoStreams = new BehaviorSubject<Participant[]>([]);\n  sortAudioLoudness = new BehaviorSubject<boolean>(false);\n  audioDecibels = new BehaviorSubject<AudioDecibels[]>([]);\n  mixed_alVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  non_alVideoStreams_muted = new BehaviorSubject<Participant[]>([]);\n  paginatedStreams = new BehaviorSubject<(Participant | Stream)[][]>([]);\n  localStreamAudio = new BehaviorSubject<MediaStream | null>(null);\n  defAudioID = new BehaviorSubject<string>('');\n  userDefaultAudioInputDevice = new BehaviorSubject<string>('');\n  userDefaultAudioOutputDevice = new BehaviorSubject<string>('');\n  prevAudioInputDevice = new BehaviorSubject<string>('');\n  prevVideoInputDevice = new BehaviorSubject<string>('');\n  audioPaused = new BehaviorSubject<boolean>(false);\n  mainScreenPerson = new BehaviorSubject<string>('');\n  adminOnMainScreen = new BehaviorSubject<boolean>(false);\n  screenStates = new BehaviorSubject<ScreenState[]>([\n    {\n      mainScreenPerson: '',\n      mainScreenProducerId: '',\n      mainScreenFilled: false,\n      adminOnMainScreen: false,\n    },\n  ]);\n  prevScreenStates = new BehaviorSubject<ScreenState[]>([\n    {\n      mainScreenPerson: '',\n      mainScreenProducerId: '',\n      mainScreenFilled: false,\n      adminOnMainScreen: false,\n    },\n  ]);\n  updateDateState = new BehaviorSubject<number | null>(null);\n  lastUpdate = new BehaviorSubject<number | null>(null);\n  nForReadjustRecord = new BehaviorSubject<number>(0);\n  fixedPageLimit = new BehaviorSubject<number>(4);\n  removeAltGrid = new BehaviorSubject<boolean>(false);\n  nForReadjust = new BehaviorSubject<number>(0);\n  reorderInterval = new BehaviorSubject<number>(30000);\n  fastReorderInterval = new BehaviorSubject<number>(10000);\n  lastReorderTime = new BehaviorSubject<number>(0);\n  audStreamNames = new BehaviorSubject<Stream[]>([]);\n  currentUserPage = new BehaviorSubject<number>(0);\n  mainHeightWidth = new BehaviorSubject<number>(100);\n  prevMainHeightWidth = new BehaviorSubject<number>(this.mainHeightWidth.value);\n  prevDoPaginate = new BehaviorSubject<boolean>(false);\n  doPaginate = new BehaviorSubject<boolean>(false);\n  shareEnded = new BehaviorSubject<boolean>(false);\n  lStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  chatRefStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  controlHeight = new BehaviorSubject<number>(\n    this.eventType.value === 'webinar' || this.eventType.value === 'conference' ? 0 : 0.06,\n  );\n  isWideScreen = new BehaviorSubject<boolean>(false);\n  isMediumScreen = new BehaviorSubject<boolean>(false);\n  isSmallScreen = new BehaviorSubject<boolean>(false);\n  addGrid = new BehaviorSubject<boolean>(false);\n  addAltGrid = new BehaviorSubject<boolean>(false);\n  gridRows = new BehaviorSubject<number>(0);\n  gridCols = new BehaviorSubject<number>(0);\n  altGridRows = new BehaviorSubject<number>(0);\n  altGridCols = new BehaviorSubject<number>(0);\n  numberPages = new BehaviorSubject<number>(0);\n  currentStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  showMiniView = new BehaviorSubject<boolean>(false);\n  nStream = new BehaviorSubject<MediaStream | null>(null);\n  defer_receive = new BehaviorSubject<boolean>(false);\n  allAudioStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  remoteScreenStream = new BehaviorSubject<Stream[]>([]);\n  screenProducer = new BehaviorSubject<Producer | null>(null);\n  localScreenProducer = new BehaviorSubject<Producer | null>(null);\n  gotAllVids = new BehaviorSubject<boolean>(false);\n  paginationHeightWidth = new BehaviorSubject<number>(40);\n  paginationDirection = new BehaviorSubject<'horizontal' | 'vertical'>('horizontal');\n  gridSizes = new BehaviorSubject<GridSizes>({\n    gridWidth: 0,\n    gridHeight: 0,\n    altGridWidth: 0,\n    altGridHeight: 0,\n  });\n  screenForceFullDisplay = new BehaviorSubject<boolean>(false);\n  mainGridStream = new BehaviorSubject<CustomMediaComponent[]>([]);\n  otherGridStreams = new BehaviorSubject<CustomMediaComponent[][]>([]);\n  audioOnlyStreams = new BehaviorSubject<CustomMediaComponent[]>([]);\n  videoInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\n  audioInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\n  meetingProgressTime = new BehaviorSubject<string>('00:00:00');\n  meetingElapsedTime = new BehaviorSubject<number>(0);\n  ref_participants = new BehaviorSubject<Participant[]>([]);\n\n  updateValidated = (value: boolean) => {\n    this.validated.next(value);\n  };\n\n  updateSocket = (value: Socket) => {\n    this.socket.next(value);\n  };\n\n  updateLocalSocket = (value: Socket | null) => {\n    this.localSocket!.next(value!);\n  };\n\n  updateDevice = (value: Device | null) => {\n    this.device.next(value);\n  };\n\n  updateRoomData = (value: ResponseJoinRoom | null) => {\n    this.roomData.next(value);\n  };\n\n  updateApiKey = (value: string) => {\n    this.apiKey.next(value);\n  };\n\n  updateApiUserName = (value: string) => {\n    this.apiUserName.next(value);\n  };\n\n  updateApiToken = (value: string) => {\n    this.apiToken.next(value);\n  };\n\n  updateLink = (value: string) => {\n    this.link.next(value);\n  };\n\n  updateRoomName = (value: string) => {\n    this.roomName.next(value);\n    if (value.length > 0 && value.includes(\"_\")) {\n      this.updateIslevel(value.split(\"_\")[1]);\n      value = value.split(\"_\")[0];\n    }\n  };\n\n  updateMember = (value: string) => {\n    this.member.next(value);\n  };\n\n  updateAdminPasscode = (value: string) => {\n    this.adminPasscode.next(value);\n  };\n\n  updateIslevel = (value: string) => {\n    this.islevel.next(value);\n  };\n\n  updateCoHost = (value: string) => {\n    this.coHost.next(value);\n  };\n\n  updateCoHostResponsibility = (value: CoHostResponsibility[]) => {\n    this.coHostResponsibility.next(value);\n  };\n\n  updateYouAreCoHost = (value: boolean) => {\n    this.youAreCoHost.next(value);\n  };\n\n  updateYouAreHost = (value: boolean) => {\n    this.youAreHost.next(value);\n  };\n\n  updateConfirmedToRecord = (value: boolean) => {\n    this.confirmedToRecord.next(value);\n  };\n\n  updateMeetingDisplayType = (value: string) => {\n    this.meetingDisplayType.next(value);\n  };\n\n  updateMeetingVideoOptimized = (value: boolean) => {\n    this.meetingVideoOptimized.next(value);\n  };\n\n  updateEventType = (value: EventType) => {\n    this.eventType.next(value);\n  };\n\n  updateParticipants = (value: Participant[]) => {\n    this.participants.next(value);\n    this.participantsCounter.next(value.length);\n    this.filteredParticipants.next(this.participants.value);\n  };\n\n  updateFilteredParticipants = (value: Participant[]) => {\n    this.filteredParticipants.next(value);\n  };\n\n  updateParticipantsCounter = (value: number) => {\n    this.participantsCounter.next(value);\n  };\n\n  updateParticipantsFilter = (value: string) => {\n    this.participantsFilter.next(value);\n  };\n\n  updateConsume_sockets = (value: ConsumeSocket[]) => {\n    this.consume_sockets.next(value);\n  };\n\n  updateRtpCapabilities = (value: RtpCapabilities | null) => {\n    this.rtpCapabilities.next(value);\n  };\n\n  updateRoomRecvIPs = (value: string[]) => {\n    this.roomRecvIPs.next(value);\n  };\n\n  updateMeetingRoomParams = (value: MeetingRoomParams | null) => {\n    this.meetingRoomParams.next(value);\n  };\n\n  updateItemPageLimit = (value: number) => {\n    this.itemPageLimit.next(value);\n  };\n\n  updateAudioOnlyRoom = (value: boolean) => {\n    this.audioOnlyRoom.next(value);\n  };\n\n  updateAddForBasic = (value: boolean) => {\n    this.addForBasic.next(value);\n  };\n\n  updateScreenPageLimit = (value: number) => {\n    this.screenPageLimit.next(value);\n  };\n\n  updateShareScreenStarted = (value: boolean) => {\n    this.shareScreenStarted.next(value);\n  };\n\n  updateShared = (value: boolean) => {\n    this.shared.next(value);\n    this.screenShareActive.next(value);\n    if (value) {\n      setTimeout(async () => {\n        window.dispatchEvent(new Event('resize'));\n      }, 2000);\n    }\n  };\n\n  updateTargetOrientation = (value: string) => {\n    this.targetOrientation.next(value);\n  };\n\n  updateTargetResolution = (value: string) => {\n    this.targetResolution.next(value);\n  };\n\n  updateTargetResolutionHost = (value: string) => {\n    this.targetResolutionHost.next(value);\n  };\n\n  updateVidCons = (value: VidCons) => {\n    this.vidCons.next(value);\n  };\n\n  updateFrameRate = (value: number) => {\n    this.frameRate.next(value);\n  };\n\n  updateHParams = (value: HParamsType) => {\n    this.hParams.next(value);\n  };\n\n  updateVParams = (value: VParamsType) => {\n    this.vParams.next(value);\n  };\n\n  updateScreenParams = (value: ScreenParamsType) => {\n    this.screenParams.next(value);\n  };\n\n  updateAParams = (value: AParamsType) => {\n    this.aParams.next(value);\n  };\n\n  updateRecordingAudioPausesLimit = (value: number) => {\n    this.recordingAudioPausesLimit.next(value);\n  };\n\n  updateRecordingAudioPausesCount = (value: number) => {\n    this.recordingAudioPausesCount.next(value);\n  };\n\n  updateRecordingAudioSupport = (value: boolean) => {\n    this.recordingAudioSupport.next(value);\n  };\n\n  updateRecordingAudioPeopleLimit = (value: number) => {\n    this.recordingAudioPeopleLimit.next(value);\n  };\n\n  updateRecordingAudioParticipantsTimeLimit = (value: number) => {\n    this.recordingAudioParticipantsTimeLimit.next(value);\n  };\n\n  updateRecordingVideoPausesCount = (value: number) => {\n    this.recordingVideoPausesCount.next(value);\n  };\n\n  updateRecordingVideoPausesLimit = (value: number) => {\n    this.recordingVideoPausesLimit.next(value);\n  };\n\n  updateRecordingVideoSupport = (value: boolean) => {\n    this.recordingVideoSupport.next(value);\n  };\n\n  updateRecordingVideoPeopleLimit = (value: number) => {\n    this.recordingVideoPeopleLimit.next(value);\n  };\n\n  updateRecordingVideoParticipantsTimeLimit = (value: number) => {\n    this.recordingVideoParticipantsTimeLimit.next(value);\n  };\n\n  updateRecordingAllParticipantsSupport = (value: boolean) => {\n    this.recordingAllParticipantsSupport.next(value);\n  };\n\n  updateRecordingVideoParticipantsSupport = (value: boolean) => {\n    this.recordingVideoParticipantsSupport.next(value);\n  };\n\n  updateRecordingAllParticipantsFullRoomSupport = (value: boolean) => {\n    this.recordingAllParticipantsFullRoomSupport.next(value);\n  };\n\n  updateRecordingVideoParticipantsFullRoomSupport = (value: boolean) => {\n    this.recordingVideoParticipantsFullRoomSupport.next(value);\n  };\n\n  updateRecordingPreferredOrientation = (value: string) => {\n    this.recordingPreferredOrientation.next(value);\n  };\n\n  updateRecordingSupportForOtherOrientation = (value: boolean) => {\n    this.recordingSupportForOtherOrientation.next(value);\n  };\n\n  updateRecordingMultiFormatsSupport = (value: boolean) => {\n    this.recordingMultiFormatsSupport.next(value);\n  };\n\n  updateUserRecordingParams = (value: UserRecordingParams) => {\n    this.userRecordingParams.next(value);\n  };\n\n  updateCanRecord = (value: boolean) => {\n    this.canRecord.next(value);\n  };\n\n  updateStartReport = (value: boolean) => {\n    this.startReport.next(value);\n  };\n\n  updateEndReport = (value: boolean) => {\n    this.endReport.next(value);\n  };\n\n  updateRecordTimerInterval = (value: number | null) => {\n    this.recordTimerInterval.next(value);\n  };\n\n  updateRecordStartTime = (value: number) => {\n    this.recordStartTime.next(value);\n  };\n\n  updateRecordElapsedTime = (value: number) => {\n    this.recordElapsedTime.next(value);\n  };\n\n  updateIsTimerRunning = (value: boolean) => {\n    this.isTimerRunning.next(value);\n  };\n\n  updateCanPauseResume = (value: boolean) => {\n    this.canPauseResume.next(value);\n  };\n\n  updateRecordChangeSeconds = (value: number) => {\n    this.recordChangeSeconds.next(value);\n  };\n\n  updatePauseLimit = (value: number) => {\n    this.pauseLimit.next(value);\n  };\n\n  updatePauseRecordCount = (value: number) => {\n    this.pauseRecordCount.next(value);\n  };\n\n  updateCanLaunchRecord = (value: boolean) => {\n    this.canLaunchRecord.next(value);\n  };\n\n  updateStopLaunchRecord = (value: boolean) => {\n    this.stopLaunchRecord.next(value);\n  };\n\n  updateParticipantsAll = (value: Participant[]) => {\n    this.participantsAll.next(value);\n  };\n\n  updateFirstAll = (value: boolean) => {\n    this.firstAll.next(value);\n  };\n\n  updateUpdateMainWindow = (value: boolean) => {\n    this.updateMainWindow.next(value);\n  };\n\n  updateFirst_round = (value: boolean) => {\n    this.first_round.next(value);\n  };\n\n  updateLandScaped = (value: boolean) => {\n    this.landScaped.next(value);\n  };\n\n  updateLock_screen = (value: boolean) => {\n    this.lock_screen.next(value);\n  };\n\n  updateScreenId = (value: string) => {\n    this.screenId.next(value);\n  };\n\n  updateAllVideoStreams = (value: (Participant | Stream)[]) => {\n    this.allVideoStreams.next(value);\n  };\n\n  updateNewLimitedStreams = (value: (Participant | Stream)[]) => {\n    this.newLimitedStreams.next(value);\n  };\n\n  updateNewLimitedStreamsIDs = (value: string[]) => {\n    this.newLimitedStreamsIDs.next(value);\n  };\n\n  updateActiveSounds = (value: string[]) => {\n    this.activeSounds.next(value);\n  };\n\n  updateScreenShareIDStream = (value: string) => {\n    this.screenShareIDStream.next(value);\n  };\n\n  updateScreenShareNameStream = (value: string) => {\n    this.screenShareNameStream.next(value);\n  };\n\n  updateAdminIDStream = (value: string) => {\n    this.adminIDStream.next(value);\n  };\n\n  updateAdminNameStream = (value: string) => {\n    this.adminNameStream.next(value);\n  };\n\n  updateYouYouStream = (value: (Participant | Stream)[]) => {\n    this.youYouStream.next(value);\n  };\n\n  updateYouYouStreamIDs = (value: string[]) => {\n    this.youYouStreamIDs.next(value);\n  };\n\n  updateLocalStream = (value: MediaStream | null) => {\n    this.localStream.next(value);\n  };\n\n  updateRecordStarted = (value: boolean) => {\n    this.recordStarted.next(value);\n  };\n\n  updateRecordResumed = (value: boolean) => {\n    this.recordResumed.next(value);\n  };\n\n  updateRecordPaused = (value: boolean) => {\n    this.recordPaused.next(value);\n  };\n\n  updateRecordStopped = (value: boolean) => {\n    this.recordStopped.next(value);\n  };\n\n  updateAdminRestrictSetting = (value: boolean) => {\n    this.adminRestrictSetting.next(value);\n  };\n\n  updateVideoRequestState = (value: string | null) => {\n    this.videoRequestState.next(value);\n  };\n\n  updateVideoRequestTime = (value: number) => {\n    this.videoRequestTime.next(value);\n  };\n\n  updateVideoAction = (value: boolean) => {\n    this.videoAction.next(value);\n  };\n\n  updateLocalStreamVideo = (value: MediaStream | null) => {\n    this.localStreamVideo.next(value);\n  };\n\n  updateUserDefaultVideoInputDevice = (value: string) => {\n    this.userDefaultVideoInputDevice.next(value);\n  };\n\n  updateCurrentFacingMode = (value: string) => {\n    this.currentFacingMode.next(value);\n  };\n\n  updatePrevFacingMode = (value: string) => {\n    this.prevFacingMode.next(value);\n  };\n\n  updateDefVideoID = (value: string) => {\n    this.defVideoID.next(value);\n  };\n\n  updateAllowed = (value: boolean) => {\n    this.allowed.next(value);\n  };\n\n  updateDispActiveNames = (value: string[]) => {\n    this.dispActiveNames.next(value);\n  };\n\n  updateP_dispActiveNames = (value: string[]) => {\n    this.p_dispActiveNames.next(value);\n  };\n\n  updateActiveNames = (value: string[]) => {\n    this.activeNames.next(value);\n  };\n\n  updatePrevActiveNames = (value: string[]) => {\n    this.prevActiveNames.next(value);\n  };\n\n  updateP_activeNames = (value: string[]) => {\n    this.p_activeNames.next(value);\n  };\n\n  updateMembersReceived = (value: boolean) => {\n    this.membersReceived.next(value);\n  };\n\n  updateDeferScreenReceived = (value: boolean) => {\n    this.deferScreenReceived.next(value);\n  };\n\n  updateHostFirstSwitch = (value: boolean) => {\n    this.hostFirstSwitch.next(value);\n  };\n\n  updateMicAction = (value: boolean) => {\n    this.micAction.next(value);\n  };\n\n  updateScreenAction = (value: boolean) => {\n    this.screenAction.next(value);\n  };\n\n  updateChatAction = (value: boolean) => {\n    this.chatAction.next(value);\n  };\n\n  updateAudioRequestState = (value: string | null) => {\n    this.audioRequestState.next(value);\n  };\n\n  updateScreenRequestState = (value: string | null) => {\n    this.screenRequestState.next(value);\n  };\n\n  updateChatRequestState = (value: string | null) => {\n    this.chatRequestState.next(value);\n  };\n\n  updateAudioRequestTime = (value: number) => {\n    this.audioRequestTime.next(value);\n  };\n\n  updateScreenRequestTime = (value: number) => {\n    this.screenRequestTime.next(value);\n  };\n\n  updateChatRequestTime = (value: number) => {\n    this.chatRequestTime.next(value);\n  };\n\n  updateOldSoundIds = (value: string[]) => {\n    this.oldSoundIds.next(value);\n  };\n\n  updateHostLabel = (value: string) => {\n    this.hostLabel.next(value);\n  };\n\n  updateMainScreenFilled = (value: boolean) => {\n    this.mainScreenFilled.next(value);\n  };\n\n  updateLocalStreamScreen = (value: MediaStream | null) => {\n    this.localStreamScreen.next(value);\n  };\n\n  updateScreenAlreadyOn = (value: boolean) => {\n    this.screenAlreadyOn.next(value);\n  };\n\n  updateChatAlreadyOn = (value: boolean) => {\n    this.chatAlreadyOn.next(value);\n  };\n\n  updateRedirectURL = (value: string) => {\n    this.redirectURL.next(value);\n  };\n\n  updateOldAllStreams = (value: (Participant | Stream)[]) => {\n    this.oldAllStreams.next(value);\n  };\n\n  updateAdminVidID = (value: string) => {\n    this.adminVidID.next(value);\n  };\n\n  updateStreamNames = (value: Stream[]) => {\n    this.streamNames.next(value);\n  };\n\n  updateNon_alVideoStreams = (value: Participant[]) => {\n    this.non_alVideoStreams.next(value);\n  };\n\n  updateSortAudioLoudness = (value: boolean) => {\n    this.sortAudioLoudness.next(value);\n  };\n\n  updateAudioDecibels = (value: AudioDecibels[]) => {\n    this.audioDecibels.next(value);\n  };\n\n  updateMixed_alVideoStreams = (value: (Participant | Stream)[]) => {\n    this.mixed_alVideoStreams.next(value);\n  };\n\n  updateNon_alVideoStreams_muted = (value: Participant[]) => {\n    this.non_alVideoStreams_muted.next(value);\n  };\n\n  updatePaginatedStreams = (value: (Participant | Stream)[][]) => {\n    this.paginatedStreams.next(value);\n  };\n\n  updateLocalStreamAudio = (value: MediaStream | null) => {\n    this.localStreamAudio.next(value);\n  };\n\n  updateDefAudioID = (value: string) => {\n    this.defAudioID.next(value);\n  };\n\n  updateUserDefaultAudioInputDevice = (value: string) => {\n    this.userDefaultAudioInputDevice.next(value);\n  };\n\n  updateUserDefaultAudioOutputDevice = (value: string) => {\n    this.userDefaultAudioOutputDevice.next(value);\n  };\n\n  updatePrevAudioInputDevice = (value: string) => {\n    this.prevAudioInputDevice.next(value);\n  };\n\n  updatePrevVideoInputDevice = (value: string) => {\n    this.prevVideoInputDevice.next(value);\n  };\n\n  updateAudioPaused = (value: boolean) => {\n    this.audioPaused.next(value);\n  };\n\n  updateMainScreenPerson = (value: string) => {\n    this.mainScreenPerson.next(value);\n  };\n\n  updateAdminOnMainScreen = (value: boolean) => {\n    this.adminOnMainScreen.next(value);\n  };\n\n  updateScreenStates = (value: ScreenState[]) => {\n    this.screenStates.next(value);\n  };\n\n  updatePrevScreenStates = (value: ScreenState[]) => {\n    this.prevScreenStates.next(value);\n  };\n\n  updateUpdateDateState = (value: number | null) => {\n    this.updateDateState.next(value);\n  };\n\n  updateLastUpdate = (value: number | null) => {\n    this.lastUpdate.next(value);\n  };\n\n  updateNForReadjustRecord = (value: number) => {\n    this.nForReadjustRecord.next(value);\n  };\n\n  updateFixedPageLimit = (value: number) => {\n    this.fixedPageLimit.next(value);\n  };\n\n  updateRemoveAltGrid = (value: boolean) => {\n    this.removeAltGrid.next(value);\n  };\n\n  updateNForReadjust = (value: number) => {\n    this.nForReadjust.next(value);\n  };\n\n  updateLastReorderTime = (value: number) => {\n    this.lastReorderTime.next(value);\n  };\n\n  updateAudStreamNames = (value: Stream[]) => {\n    this.audStreamNames.next(value);\n  };\n\n  updateCurrentUserPage = (value: number) => {\n    this.currentUserPage.next(value);\n  };\n\n  updateMainHeightWidth = (value: number) => {\n    this.mainHeightWidth.next(value);\n  };\n\n  updatePrevMainHeightWidth = (value: number) => {\n    this.prevMainHeightWidth.next(value);\n  };\n\n  updatePrevDoPaginate = (value: boolean) => {\n    this.prevDoPaginate.next(value);\n  };\n\n  updateDoPaginate = (value: boolean) => {\n    this.doPaginate.next(value);\n  };\n\n  updateShareEnded = (value: boolean) => {\n    this.shareEnded.next(value);\n  };\n\n  updateLStreams = (value: (Participant | Stream)[]) => {\n    this.lStreams.next(value);\n  };\n\n  updateChatRefStreams = (value: (Participant | Stream)[]) => {\n    this.chatRefStreams.next(value);\n  };\n\n  updateControlHeight = (value: number) => {\n    this.controlHeight.next(value);\n  };\n\n  updateIsWideScreen = (value: boolean) => {\n    this.isWideScreen.next(value);\n  };\n\n  updateIsMediumScreen = (value: boolean) => {\n    this.isMediumScreen.next(value);\n  };\n\n  updateIsSmallScreen = (value: boolean) => {\n    this.isSmallScreen.next(value);\n  };\n\n  updateAddGrid = (value: boolean) => {\n    this.addGrid.next(value);\n  };\n\n  updateAddAltGrid = (value: boolean) => {\n    this.addAltGrid.next(value);\n  };\n\n  updateGridRows = (value: number) => {\n    this.gridRows.next(value);\n  };\n\n  updateGridCols = (value: number) => {\n    this.gridCols.next(value);\n  };\n\n  updateAltGridRows = (value: number) => {\n    this.altGridRows.next(value);\n  };\n\n  updateAltGridCols = (value: number) => {\n    this.altGridCols.next(value);\n  };\n\n  updateNumberPages = (value: number) => {\n    this.numberPages.next(value);\n  };\n\n  updateCurrentStreams = (value: (Participant | Stream)[]) => {\n    this.currentStreams.next(value);\n  };\n\n  updateShowMiniView = (value: boolean) => {\n    this.showMiniView.next(value);\n  };\n\n  updateNStream = (value: MediaStream | null) => {\n    this.nStream.next(value);\n  };\n\n  updateDefer_receive = (value: boolean) => {\n    this.defer_receive.next(value);\n  };\n\n  updateAllAudioStreams = (value: (Participant | Stream)[]) => {\n    this.allAudioStreams.next(value);\n  };\n\n  updateRemoteScreenStream = (value: Stream[]) => {\n    this.remoteScreenStream.next(value);\n  };\n\n  updateScreenProducer = (value: Producer | null) => {\n    this.screenProducer.next(value);\n  };\n\n  updateLocalScreenProducer = (value: Producer | null) => {\n    this.localScreenProducer.next(value);\n  };\n\n  updateGotAllVids = (value: boolean) => {\n    this.gotAllVids.next(value);\n  };\n\n  updatePaginationHeightWidth = (value: number) => {\n    this.paginationHeightWidth.next(value);\n  };\n\n  updatePaginationDirection = (value: 'horizontal' | 'vertical') => {\n    this.paginationDirection.next(value);\n  };\n\n  updateGridSizes = (value: GridSizes) => {\n    this.gridSizes.next(value);\n  };\n\n  updateScreenForceFullDisplay = (value: boolean) => {\n    this.screenForceFullDisplay.next(value);\n  };\n\n  updateMainGridStream = (value: CustomMediaComponent[]) => {\n    this.mainGridStream.next(value);\n  };\n\n  updateOtherGridStreams = (value: CustomMediaComponent[][]) => {\n    this.otherGridStreams.next(value);\n  };\n\n  updateAudioOnlyStreams = (value: CustomMediaComponent[]) => {\n    this.audioOnlyStreams.next(value);\n  };\n\n  updateVideoInputs = (value: MediaDeviceInfo[]) => {\n    this.videoInputs.next(value);\n  };\n\n  updateAudioInputs = (value: MediaDeviceInfo[]) => {\n    this.audioInputs.next(value);\n  };\n\n  updateMeetingProgressTime = (value: string) => {\n    this.meetingProgressTime.next(value);\n  };\n\n  updateMeetingElapsedTime = (value: number) => {\n    this.meetingElapsedTime.next(value);\n  };\n\n  updateRef_participants = (value: Participant[]) => {\n    this.ref_participants.next(value);\n  };\n\n  // Messages\n  messages = new BehaviorSubject<Message[]>([]);\n  startDirectMessage = new BehaviorSubject<boolean>(false);\n  directMessageDetails = new BehaviorSubject<Participant | null>(null);\n  showMessagesBadge = new BehaviorSubject<boolean>(false);\n\n  // Event Settings\n  audioSetting = new BehaviorSubject<string>('allow');\n  videoSetting = new BehaviorSubject<string>('allow');\n  screenshareSetting = new BehaviorSubject<string>('allow');\n  chatSetting = new BehaviorSubject<string>('allow');\n\n  // Display Settings\n  displayOption = new BehaviorSubject<string>('media');\n  autoWave = new BehaviorSubject<boolean>(true);\n  forceFullDisplay = new BehaviorSubject<boolean>(true);\n  prevForceFullDisplay = new BehaviorSubject<boolean>(false);\n  prevMeetingDisplayType = new BehaviorSubject<string>('video');\n\n  // Waiting Room\n  waitingRoomFilter = new BehaviorSubject<string>('');\n  waitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>([]);\n  waitingRoomCounter = new BehaviorSubject<number>(0);\n  filteredWaitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>([]);\n\n  // Requests\n  requestFilter = new BehaviorSubject<string>('');\n  requestList = new BehaviorSubject<Request[]>([]);\n  requestCounter = new BehaviorSubject<number>(0);\n  filteredRequestList = new BehaviorSubject<Request[]>([]);\n\n  // Total Requests and Waiting Room\n  totalReqWait = new BehaviorSubject<number>(0);\n\n  // Alerts\n  alertVisible = new BehaviorSubject<boolean>(false);\n  alertMessage = new BehaviorSubject<string>('');\n  alertType = new BehaviorSubject<'success' | 'danger' | 'info' | 'warning'>('success');\n  alertPosition = new BehaviorSubject<\n    'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center'\n  >('top');\n  alertDuration = new BehaviorSubject<number>(3000);\n\n  // Progress Timer\n  progressTimerVisible = new BehaviorSubject<boolean>(true);\n  progressTimerValue = new BehaviorSubject<number>(0);\n\n  // Menu Modals\n  isMenuModalVisible = new BehaviorSubject<boolean>(false);\n  isRecordingModalVisible = new BehaviorSubject<boolean>(false);\n  isSettingsModalVisible = new BehaviorSubject<boolean>(false);\n  isRequestsModalVisible = new BehaviorSubject<boolean>(false);\n  isWaitingModalVisible = new BehaviorSubject<boolean>(false);\n  isCoHostModalVisible = new BehaviorSubject<boolean>(false);\n  isMediaSettingsModalVisible = new BehaviorSubject<boolean>(false);\n  isDisplaySettingsModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Other Modals\n  isParticipantsModalVisible = new BehaviorSubject<boolean>(false);\n  isMessagesModalVisible = new BehaviorSubject<boolean>(false);\n  isConfirmExitModalVisible = new BehaviorSubject<boolean>(false);\n  isConfirmHereModalVisible = new BehaviorSubject<boolean>(false);\n  private suppressConfirmHereForSession = false;\n  isShareEventModalVisible = new BehaviorSubject<boolean>(false);\n  isLoadingModalVisible = new BehaviorSubject<boolean>(false);\n  modernThemeDarkMode = new BehaviorSubject<boolean>(false);\n\n  resolvePreferredTheme = (): boolean => {\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\n      : false;\n  };\n\n  updateModernThemeDarkMode = (value: boolean) => {\n    this.modernThemeDarkMode.next(value);\n    this.messageWidget = this.buildMessageWidget();\n    this.updateMenuParticipantsWidget();\n    void this.updateRecordButtons();\n    this.updateControlBroadcastButtons();\n    this.cdr.detectChanges();\n  };\n\n  roomSurfaceColor = (): string =>\n    this.modernThemeDarkMode.value\n      ? 'rgba(9, 18, 32, 0.98)'\n      : 'rgba(217, 227, 234, 0.99)';\n\n  roomModalSurfaceColor = (): string =>\n    this.modernThemeDarkMode.value\n      ? 'rgba(15, 27, 49, 0.96)'\n      : 'rgba(217, 227, 234, 0.99)';\n\n  roomAccentSurfaceColor = (): string =>\n    this.modernThemeDarkMode.value\n      ? 'rgba(14, 33, 45, 0.96)'\n      : 'rgba(181, 233, 229, 0.97)';\n\n  touchControlNeutralColor = (): string =>\n    this.modernThemeDarkMode.value ? '#f8fafc' : '#10233f';\n\n  // Recording Options\n  recordingMediaOptions = new BehaviorSubject<string>('video');\n  recordingAudioOptions = new BehaviorSubject<string>('all');\n  recordingVideoOptions = new BehaviorSubject<string>('all');\n  recordingVideoType = new BehaviorSubject<string>('fullDisplay');\n  recordingVideoOptimized = new BehaviorSubject<boolean>(false);\n  recordingDisplayType = new BehaviorSubject<'video' | 'media' | 'all'>('video');\n  recordingAddHLS = new BehaviorSubject<boolean>(true);\n  recordingNameTags = new BehaviorSubject<boolean>(true);\n  recordingBackgroundColor = new BehaviorSubject<string>('#83c0e9');\n  recordingNameTagsColor = new BehaviorSubject<string>('#ffffff');\n  recordingAddText = new BehaviorSubject<boolean>(false);\n  recordingCustomText = new BehaviorSubject<string>('Add Text');\n  recordingCustomTextPosition = new BehaviorSubject<string>('top');\n  recordingCustomTextColor = new BehaviorSubject<string>('#ffffff');\n  recordingOrientationVideo = new BehaviorSubject<string>('landscape');\n  clearedToResume = new BehaviorSubject<boolean>(true);\n  clearedToRecord = new BehaviorSubject<boolean>(true);\n  recordState = new BehaviorSubject<string>('green');\n  showRecordButtons = new BehaviorSubject<boolean>(false);\n  recordingProgressTime = new BehaviorSubject<string>('00:00:00');\n  audioSwitching = new BehaviorSubject<boolean>(false);\n  videoSwitching = new BehaviorSubject<boolean>(false);\n\n  // Media States\n  videoAlreadyOn = new BehaviorSubject<boolean>(false);\n  audioAlreadyOn = new BehaviorSubject<boolean>(false);\n\n  componentSizes = new BehaviorSubject<ComponentSizes>({\n    mainHeight: 0,\n    otherHeight: 0,\n    mainWidth: 0,\n    otherWidth: 0,\n  });\n\n  // Permissions\n  hasCameraPermission = new BehaviorSubject<boolean>(false);\n  hasAudioPermission = new BehaviorSubject<boolean>(false);\n\n  // Transports\n  transportCreated = new BehaviorSubject<boolean>(false);\n  localTransportCreated = new BehaviorSubject<boolean>(false);\n  transportCreatedVideo = new BehaviorSubject<boolean>(false);\n  transportCreatedAudio = new BehaviorSubject<boolean>(false);\n  transportCreatedScreen = new BehaviorSubject<boolean>(false);\n  producerTransport = new BehaviorSubject<Transport | null>(null);\n  localProducerTransport = new BehaviorSubject<Transport | null>(null);\n  videoProducer = new BehaviorSubject<Producer | null>(null);\n  localVideoProducer = new BehaviorSubject<Producer | null>(null);\n  params = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  videoParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  audioParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  audioProducer = new BehaviorSubject<Producer | null>(null);\n  audioLevel = new BehaviorSubject<number>(0);\n  localAudioProducer = new BehaviorSubject<Producer | null>(null);\n  consumerTransports = new BehaviorSubject<TransportType[]>([]);\n  consumingTransports = new BehaviorSubject<string[]>([]);\n\n  // Polls\n  polls = new BehaviorSubject<Poll[]>([]);\n  poll = new BehaviorSubject<Poll | null>(null);\n  isPollModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Background\n  customImage = new BehaviorSubject<string>('');\n  selectedImage = new BehaviorSubject<string>('');\n  segmentVideo = new BehaviorSubject<MediaStream | null>(null);\n  selfieSegmentation = new BehaviorSubject<SelfieSegmentation | null>(null);\n  pauseSegmentation = new BehaviorSubject<boolean>(false);\n  processedStream = new BehaviorSubject<MediaStream | null>(null);\n  keepBackground = new BehaviorSubject<boolean>(false);\n  backgroundHasChanged = new BehaviorSubject<boolean>(false);\n  virtualStream = new BehaviorSubject<MediaStream | null>(null);\n  mainCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  prevKeepBackground = new BehaviorSubject<boolean>(false);\n  appliedBackground = new BehaviorSubject<boolean>(false);\n  isBackgroundModalVisible = new BehaviorSubject<boolean>(false);\n  autoClickBackground = new BehaviorSubject<boolean>(false);\n\n  // Breakout Rooms\n  breakoutRooms = new BehaviorSubject<BreakoutParticipant[][]>([]);\n  currentRoomIndex = new BehaviorSubject<number>(0);\n  canStartBreakout = new BehaviorSubject<boolean>(false);\n  breakOutRoomStarted = new BehaviorSubject<boolean>(false);\n  breakOutRoomEnded = new BehaviorSubject<boolean>(false);\n  hostNewRoom = new BehaviorSubject<number>(-1);\n  limitedBreakRoom = new BehaviorSubject<BreakoutParticipant[]>([]);\n  mainRoomsLength = new BehaviorSubject<number>(0);\n  memberRoom = new BehaviorSubject<number>(-1);\n  isBreakoutRoomsModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Whiteboard\n  whiteboardUsers = new BehaviorSubject<WhiteboardUser[]>([]);\n  currentWhiteboardIndex = new BehaviorSubject<number>(0);\n  canStartWhiteboard = new BehaviorSubject<boolean>(false);\n  whiteboardStarted = new BehaviorSubject<boolean>(false);\n  whiteboardEnded = new BehaviorSubject<boolean>(false);\n  whiteboardLimit = new BehaviorSubject<number>(4);\n  isWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\n  isConfigureWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\n  shapes = new BehaviorSubject<Shape[]>([]);\n  useImageBackground = new BehaviorSubject<boolean>(true);\n  redoStack = new BehaviorSubject<Shape[]>([]);\n  undoStack = new BehaviorSubject<string[]>([]);\n  canvasStream = new BehaviorSubject<MediaStream | null>(null);\n  canvasWhiteboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\n\n  // Screenboard\n  canvasScreenboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  processedScreenStream = new BehaviorSubject<MediaStream | null>(null);\n  annotateScreenStream = new BehaviorSubject<boolean>(false);\n  mainScreenCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  isScreenboardModalVisible = new BehaviorSubject<boolean>(false);\n\n  //state variables for the control buttons\n  micActive = new BehaviorSubject<boolean>(\n    this.audioAlreadyOn.value ? this.audioAlreadyOn.value : false,\n  );\n  videoActive = new BehaviorSubject<boolean>(\n    this.videoAlreadyOn.value ? this.videoAlreadyOn.value : false,\n  );\n  screenShareActive = new BehaviorSubject<boolean>(false);\n  endCallActive = new BehaviorSubject<boolean>(false);\n  participantsActive = new BehaviorSubject<boolean>(false);\n  menuActive = new BehaviorSubject<boolean>(false);\n  commentsActive = new BehaviorSubject<boolean>(false);\n\n  // Update functions\n  updateMessages = (value: Message[]) => {\n    this.messages.next(value);\n  };\n\n  updateStartDirectMessage = (value: boolean) => {\n    this.startDirectMessage.next(value);\n  };\n\n  updateDirectMessageDetails = (value: Participant | null) => {\n    this.directMessageDetails.next(value);\n  };\n\n  updateShowMessagesBadge = (value: boolean) => {\n    this.showMessagesBadge.next(value);\n  };\n\n  updateAudioSetting = (value: string) => {\n    this.audioSetting.next(value);\n  };\n\n  updateVideoSetting = (value: string) => {\n    this.videoSetting.next(value);\n  };\n\n  updateScreenshareSetting = (value: string) => {\n    this.screenshareSetting.next(value);\n  };\n\n  updateChatSetting = (value: string) => {\n    this.chatSetting.next(value);\n  };\n\n  updateDisplayOption = (value: string) => {\n    this.displayOption.next(value);\n  };\n\n  updateAutoWave = (value: boolean) => {\n    this.autoWave.next(value);\n  };\n\n  updateForceFullDisplay = (value: boolean) => {\n    this.forceFullDisplay.next(value);\n  };\n\n  updatePrevForceFullDisplay = (value: boolean) => {\n    this.prevForceFullDisplay.next(value);\n  };\n\n  updatePrevMeetingDisplayType = (value: string) => {\n    this.prevMeetingDisplayType.next(value);\n  };\n\n  updateWaitingRoomCounter = (value: number) => {\n    this.waitingRoomCounter.next(value);\n  };\n\n  updateWaitingRoomFilter = (value: string) => {\n    this.waitingRoomFilter.next(value);\n  };\n\n  updateWaitingRoomList = (value: WaitingRoomParticipant[]) => {\n    this.waitingRoomList.next(value);\n    this.filteredWaitingRoomList.next(value);\n    this.waitingRoomCounter.next(value.length);\n  };\n\n  onWaitingRoomClose = () => {\n    this.updateIsWaitingModalVisible(false);\n  };\n\n  updateRequestCounter = (value: number) => {\n    this.requestCounter.next(value);\n  };\n\n  updateRequestFilter = (value: string) => {\n    this.requestFilter.next(value);\n  };\n\n  updateRequestList = (value: Request[]) => {\n    this.requestList.next(value);\n    this.filteredRequestList.next(value);\n    this.requestCounter.next(value.length);\n  };\n\n  onRequestClose = () => {\n    this.updateIsRequestsModalVisible(false);\n  };\n\n  updateTotalReqWait = (value: number) => {\n    this.totalReqWait.next(value);\n  };\n\n  updateAlertVisible = (value: boolean) => {\n    this.alertVisible.next(value);\n  };\n\n  updateAlertMessage = (value: string) => {\n    this.alertMessage.next(value);\n  };\n\n  updateAlertType = (value: 'success' | 'danger' | 'info' | 'warning') => {\n    this.alertType.next(value);\n  };\n\n  updateAlertPosition = (\n    value: 'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center',\n  ) => {\n    this.alertPosition.next(value);\n  };\n\n  updateAlertDuration = (value: number) => {\n    this.alertDuration.next(value);\n  };\n\n  updateProgressTimerVisible = (value: boolean) => {\n    this.progressTimerVisible.next(value);\n  };\n\n  updateProgressTimerValue = (value: number) => {\n    this.progressTimerValue.next(value);\n  };\n\n  updateIsMenuModalVisible = (value: boolean) => {\n    this.isMenuModalVisible.next(value);\n  };\n\n  updateIsRecordingModalVisible = (value: boolean) => {\n    this.isRecordingModalVisible.next(value);\n    if (value) {\n      this.updateConfirmedToRecord(false);\n    } else {\n      if (\n        this.clearedToRecord.getValue() &&\n        this.clearedToResume.getValue() &&\n        this.recordStarted.getValue()\n      ) {\n        this.updateShowRecordButtons(true);\n      }\n    }\n  };\n\n  updateIsSettingsModalVisible = (value: boolean) => {\n    this.isSettingsModalVisible.next(value);\n  };\n\n  updateIsRequestsModalVisible = (value: boolean) => {\n    this.isRequestsModalVisible.next(value);\n  };\n\n  updateIsWaitingModalVisible = (value: boolean) => {\n    this.isWaitingModalVisible.next(value);\n  };\n\n  updateIsCoHostModalVisible = (value: boolean) => {\n    this.isCoHostModalVisible.next(value);\n  };\n\n  updateIsMediaSettingsModalVisible = (value: boolean) => {\n    this.isMediaSettingsModalVisible.next(value);\n  };\n\n  updateIsDisplaySettingsModalVisible = (value: boolean) => {\n    this.isDisplaySettingsModalVisible.next(value);\n  };\n\n  updateIsParticipantsModalVisible = (value: boolean) => {\n    this.isParticipantsModalVisible.next(value);\n  };\n\n  updateIsMessagesModalVisible = (value: boolean) => {\n    this.isMessagesModalVisible.next(value);\n    if (!value) {\n      this.updateShowMessagesBadge(false);\n    }\n  };\n\n  updateIsConfirmExitModalVisible = (value: boolean) => {\n    this.isConfirmExitModalVisible.next(value);\n  };\n\n  updateIsConfirmHereModalVisible = (value: boolean) => {\n    this.isConfirmHereModalVisible.next(value);\n  };\n\n  updateIsLoadingModalVisible = (value: boolean) => {\n    this.isLoadingModalVisible.next(value);\n  };\n\n  updateIsShareEventModalVisible = (value: boolean) => {\n    this.isShareEventModalVisible.next(value);\n  };\n\n  updateRecordingMediaOptions = (value: string) => {\n    this.recordingMediaOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAudioOptions = (value: string) => {\n    this.recordingAudioOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoOptions = (value: string) => {\n    this.recordingVideoOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoType = (value: string) => {\n    this.recordingVideoType.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoOptimized = (value: boolean) => {\n    this.recordingVideoOptimized.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingDisplayType = (value: 'video' | 'media' | 'all') => {\n    this.recordingDisplayType.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAddHLS = (value: boolean) => {\n    this.recordingAddHLS.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAddText = (value: boolean) => {\n    this.recordingAddText.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomText = (value: string) => {\n    this.recordingCustomText.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomTextPosition = (value: string) => {\n    this.recordingCustomTextPosition.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomTextColor = (value: string) => {\n    this.recordingCustomTextColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingNameTags = (value: boolean) => {\n    this.recordingNameTags.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingBackgroundColor = (value: string) => {\n    this.recordingBackgroundColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingNameTagsColor = (value: string) => {\n    this.recordingNameTagsColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingOrientationVideo = (value: string) => {\n    this.recordingOrientationVideo.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateClearedToResume = (value: boolean) => {\n    this.clearedToResume.next(value);\n  };\n\n  updateClearedToRecord = (value: boolean) => {\n    this.clearedToRecord.next(value);\n  };\n\n  updateRecordState = (value: string) => {\n    if (this.recordStarted.value && !this.recordStopped.value) {\n      if (!this.recordPaused.value) {\n        this.recordState.next('red');\n      } else {\n        this.recordState.next('yellow');\n      }\n    } else {\n      this.recordState.next(value);\n    }\n    this.recordState.next(value);\n  };\n\n  updateShowRecordButtons = (value: boolean) => {\n    this.showRecordButtons.next(value);\n  };\n\n  updateRecordingProgressTime = (value: string) => {\n    this.recordingProgressTime.next(value);\n    this.updateRecordTimerWidget();\n  };\n\n  updateAudioSwitching = (value: boolean) => {\n    this.audioSwitching.next(value);\n  };\n\n  updateVideoSwitching = (value: boolean) => {\n    this.videoSwitching.next(value);\n  };\n\n  updateVideoAlreadyOn = (value: boolean) => {\n    this.videoAlreadyOn.next(value);\n    this.videoActive.next(value);\n  };\n\n  updateAudioAlreadyOn = (value: boolean) => {\n    this.audioAlreadyOn.next(value);\n    this.micActive.next(value);\n  };\n\n  updateComponentSizes = (sizes: ComponentSizes) => {\n    this.componentSizes.next(sizes);\n  };\n\n  updateHasCameraPermission = (value: boolean) => {\n    this.hasCameraPermission.next(value);\n  };\n\n  updateHasAudioPermission = (value: boolean) => {\n    this.hasAudioPermission.next(value);\n  };\n\n  requestPermissionCamera(): Promise<string> {\n    // Implement the request permission logic here\n    return Promise.resolve('granted');\n  }\n\n  requestPermissionAudio(): Promise<string> {\n    // Implement the request permission logic here\n    return Promise.resolve('granted');\n  }\n\n  updateTransportCreated = (value: boolean) => {\n    this.transportCreated.next(value);\n  };\n\n  updateLocalTransportCreated = (value: boolean) => {\n    this.localTransportCreated.next(value);\n  };\n\n  updateTransportCreatedVideo = (value: boolean) => {\n    this.transportCreatedVideo.next(value);\n  };\n\n  updateTransportCreatedAudio = (value: boolean) => {\n    this.transportCreatedAudio.next(value);\n  };\n\n  updateTransportCreatedScreen = (value: boolean) => {\n    this.transportCreatedScreen.next(value);\n  };\n\n  updateProducerTransport = (value: Transport | null) => {\n    this.producerTransport.next(value);\n  };\n\n  updateLocalProducerTransport = (value: Transport | null) => {\n    this.localProducerTransport.next(value);\n  };\n\n  updateVideoProducer = (value: Producer | null) => {\n    this.videoProducer.next(value);\n  };\n\n  updateLocalVideoProducer = (value: Producer | null) => {\n    this.localVideoProducer.next(value);\n  }\n\n  updateParams = (value: ProducerOptions) => {\n    this.params.next(value);\n  };\n\n  updateVideoParams = (value: ProducerOptions) => {\n    this.videoParams.next(value);\n  };\n\n  updateAudioParams = (value: ProducerOptions) => {\n    this.audioParams.next(value);\n  };\n\n  updateAudioProducer = (value: Producer | null) => {\n    this.audioProducer.next(value);\n  };\n\n  updateAudioLevel = (value: number) => {\n    this.audioLevel.next(value);\n  };\n\n  updateLocalAudioProducer = (value: Producer | null) => {\n    this.localAudioProducer.next(value);\n  };\n\n  updateConsumerTransports = (value: TransportType[]) => {\n    this.consumerTransports.next(value);\n  };\n\n  updateConsumingTransports = (value: string[]) => {\n    this.consumingTransports.next(value);\n  };\n\n  updatePolls = (value: Poll[]) => {\n    this.polls.next(value);\n  };\n\n  updatePoll = (value: Poll | null) => {\n    this.poll.next(value);\n  };\n\n  updateIsPollModalVisible = (value: boolean) => {\n    this.isPollModalVisible.next(value);\n  };\n\n  updateCustomImage = (value: string) => {\n    this.customImage.next(value);\n  };\n\n  updateSelectedImage = (value: string) => {\n    this.selectedImage.next(value);\n  };\n\n  updateSegmentVideo = (value: MediaStream | null) => {\n    this.segmentVideo.next(value);\n  };\n\n  updateSelfieSegmentation = (value: SelfieSegmentation | null) => {\n    this.selfieSegmentation.next(value);\n  };\n\n  updatePauseSegmentation = (value: boolean) => {\n    this.pauseSegmentation.next(value);\n  };\n\n  updateProcessedStream = (value: MediaStream | null) => {\n    this.processedStream.next(value);\n  };\n\n  updateKeepBackground = (value: boolean) => {\n    this.keepBackground.next(value);\n  };\n\n  updateBackgroundHasChanged = (value: boolean) => {\n    this.backgroundHasChanged.next(value);\n  };\n\n  updateVirtualStream = (value: MediaStream | null) => {\n    this.virtualStream.next(value);\n  };\n\n  updateMainCanvas = (value: HTMLCanvasElement | null) => {\n    this.mainCanvas.next(value);\n  };\n\n  updatePrevKeepBackground = (value: boolean) => {\n    this.prevKeepBackground.next(value);\n  };\n\n  updateAppliedBackground = (value: boolean) => {\n    this.appliedBackground.next(value);\n  };\n\n  updateIsBackgroundModalVisible = (value: boolean) => {\n    this.isBackgroundModalVisible.next(value);\n  };\n\n  updateAutoClickBackground = (value: boolean) => {\n    this.autoClickBackground.next(value);\n  };\n\n  updateBreakoutRooms = (value: BreakoutParticipant[][]) => {\n    this.breakoutRooms.next(value);\n  };\n\n  updateCurrentRoomIndex = (value: number) => {\n    this.currentRoomIndex.next(value);\n  };\n\n  updateCanStartBreakout = (value: boolean) => {\n    this.canStartBreakout.next(value);\n  };\n\n  updateBreakOutRoomStarted = (value: boolean) => {\n    this.breakOutRoomStarted.next(value);\n  };\n\n  updateBreakOutRoomEnded = (value: boolean) => {\n    this.breakOutRoomEnded.next(value);\n  };\n\n  updateHostNewRoom = (value: number) => {\n    this.hostNewRoom.next(value);\n  };\n\n  updateLimitedBreakRoom = (value: BreakoutParticipant[]) => {\n    this.limitedBreakRoom.next(value);\n  };\n\n  updateMainRoomsLength = (value: number) => {\n    this.mainRoomsLength.next(value);\n  };\n\n  updateMemberRoom = (value: number) => {\n    this.memberRoom.next(value);\n  };\n\n  updateIsBreakoutRoomsModalVisible = (value: boolean) => {\n    this.isBreakoutRoomsModalVisible.next(value);\n  };\n\n  updateWhiteboardUsers = (value: WhiteboardUser[]) => {\n    this.whiteboardUsers.next(value);\n  };\n\n  updateCurrentWhiteboardIndex = (value: number) => {\n    this.currentWhiteboardIndex.next(value);\n  };\n\n  updateCanStartWhiteboard = (value: boolean) => {\n    this.canStartWhiteboard.next(value);\n  };\n\n  updateWhiteboardStarted = (value: boolean) => {\n    this.whiteboardStarted.next(value);\n  };\n\n  updateWhiteboardEnded = (value: boolean) => {\n    this.whiteboardEnded.next(value);\n  };\n\n  updateWhiteboardLimit = (value: number) => {\n    this.whiteboardLimit.next(value);\n  };\n\n  updateIsWhiteboardModalVisible = (value: boolean) => {\n    this.isWhiteboardModalVisible.next(value);\n  };\n\n  updateIsConfigureWhiteboardModalVisible = (value: boolean) => {\n    this.isConfigureWhiteboardModalVisible.next(value);\n  };\n\n  updateShapes = (value: Shape[]) => {\n    this.shapes.next(value);\n  };\n\n  updateUseImageBackground = (value: boolean) => {\n    this.useImageBackground.next(value);\n  };\n\n  updateRedoStack = (value: Shape[]) => {\n    this.redoStack.next(value);\n  };\n\n  updateUndoStack = (value: string[]) => {\n    this.undoStack.next(value);\n  };\n\n  updateCanvasStream = (value: MediaStream | null) => {\n    this.canvasStream.next(value);\n  };\n\n  updateCanvasWhiteboard = (value: HTMLCanvasElement | null) => {\n    this.canvasWhiteboard.next(value);\n  };\n\n  updateCanvasScreenboard = (value: HTMLCanvasElement | null) => {\n    this.canvasScreenboard.next(value);\n  };\n\n  updateProcessedScreenStream = (value: MediaStream | null) => {\n    this.processedScreenStream.next(value);\n  };\n\n  updateAnnotateScreenStream = (value: boolean) => {\n    this.annotateScreenStream.next(value);\n  };\n\n  updateMainScreenCanvas = (value: HTMLCanvasElement | null) => {\n    this.mainScreenCanvas.next(value);\n  };\n\n  updateIsScreenboardModalVisible = (value: boolean) => {\n    this.isScreenboardModalVisible.next(value);\n  };\n\n  checkOrientation = () => {\n    const isPortrait = window.matchMedia('(orientation: portrait)').matches;\n    return isPortrait ? 'portrait' : 'landscape';\n  };\n\n  showAlert = ({\n    message,\n    type,\n    duration = 3000,\n    position,\n  }: {\n    message: string;\n    type: 'success' | 'danger' | 'info' | 'warning';\n    duration?: number;\n    position?: 'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center';\n  }) => {\n    const effectivePosition = position ?? (type === 'danger' || type === 'warning' ? 'center' : 'top');\n\n    this.updateAlertMessage(message);\n    this.updateAlertType(type);\n    this.updateAlertPosition(effectivePosition);\n    this.updateAlertDuration(duration);\n    this.updateAlertVisible(true);\n  };\n\n  getAllParams() {\n    return {\n      localUIMode: this.localUIMode.value, // Local UI mode\n\n      // Room Details\n      roomName: this.roomName.value,\n      member: this.member.value,\n      adminPasscode: this.adminPasscode.value,\n      youAreCoHost: this.youAreCoHost.value,\n      youAreHost: this.youAreHost.value,\n      islevel: this.islevel.value,\n      confirmedToRecord: this.confirmedToRecord.value,\n      meetingDisplayType: this.meetingDisplayType.value,\n      meetingVideoOptimized: this.meetingVideoOptimized.value,\n      eventType: this.eventType.value,\n      participants: this.participants.value,\n      filteredParticipants: this.filteredParticipants.value,\n      participantsCounter: this.participantsCounter.value,\n      participantsFilter: this.participantsFilter.value,\n\n      // More room details - media\n      consume_sockets: this.consume_sockets.value,\n      rtpCapabilities: this.rtpCapabilities.value,\n      roomRecvIPs: this.roomRecvIPs.value,\n      meetingRoomParams: this.meetingRoomParams.value,\n      itemPageLimit: this.itemPageLimit.value,\n      audioOnlyRoom: this.audioOnlyRoom.value,\n      addForBasic: this.addForBasic.value,\n      screenPageLimit: this.screenPageLimit.value,\n      shareScreenStarted: this.shareScreenStarted.value,\n      shared: this.shared.value,\n      targetOrientation: this.targetOrientation.value,\n      targetResolution: this.targetResolution.value,\n      targetResolutionHost: this.targetResolutionHost.value,\n      vidCons: this.vidCons.value,\n      frameRate: this.frameRate.value,\n      hParams: this.hParams.value,\n      vParams: this.vParams.value,\n      screenParams: this.screenParams.value,\n      aParams: this.aParams.value,\n\n      // More room details - recording\n      recordingAudioPausesLimit: this.recordingAudioPausesLimit.value,\n      recordingAudioPausesCount: this.recordingAudioPausesCount.value,\n      recordingAudioSupport: this.recordingAudioSupport.value,\n      recordingAudioPeopleLimit: this.recordingAudioPeopleLimit.value,\n      recordingAudioParticipantsTimeLimit: this.recordingAudioParticipantsTimeLimit.value,\n      recordingVideoPausesCount: this.recordingVideoPausesCount.value,\n      recordingVideoPausesLimit: this.recordingVideoPausesLimit.value,\n      recordingVideoSupport: this.recordingVideoSupport.value,\n      recordingVideoPeopleLimit: this.recordingVideoPeopleLimit.value,\n      recordingVideoParticipantsTimeLimit: this.recordingVideoParticipantsTimeLimit.value,\n      recordingAllParticipantsSupport: this.recordingAllParticipantsSupport.value,\n      recordingVideoParticipantsSupport: this.recordingVideoParticipantsSupport.value,\n      recordingAllParticipantsFullRoomSupport: this.recordingAllParticipantsFullRoomSupport.value,\n      recordingVideoParticipantsFullRoomSupport:\n        this.recordingVideoParticipantsFullRoomSupport.value,\n      recordingPreferredOrientation: this.recordingPreferredOrientation.value,\n      recordingSupportForOtherOrientation: this.recordingSupportForOtherOrientation.value,\n      recordingMultiFormatsSupport: this.recordingMultiFormatsSupport.value,\n\n      userRecordingParams: this.userRecordingParams.value,\n      canRecord: this.canRecord.value,\n      startReport: this.startReport.value,\n      endReport: this.endReport.value,\n      recordStartTime: this.recordStartTime.value,\n      recordElapsedTime: this.recordElapsedTime.value,\n      isTimerRunning: this.isTimerRunning.value,\n      canPauseResume: this.canPauseResume.value,\n      recordChangeSeconds: this.recordChangeSeconds.value,\n      pauseLimit: this.pauseLimit.value,\n      pauseRecordCount: this.pauseRecordCount.value,\n      canLaunchRecord: this.canLaunchRecord.value,\n      stopLaunchRecord: this.stopLaunchRecord.value,\n\n      participantsAll: this.participantsAll.value,\n\n      firstAll: this.firstAll.value,\n      updateMainWindow: this.updateMainWindow.value,\n      first_round: this.first_round.value,\n      landScaped: this.landScaped.value,\n      lock_screen: this.lock_screen.value,\n      screenId: this.screenId.value,\n      allVideoStreams: this.allVideoStreams.value,\n      newLimitedStreams: this.newLimitedStreams.value,\n      newLimitedStreamsIDs: this.newLimitedStreamsIDs.value,\n      activeSounds: this.activeSounds.value,\n      screenShareIDStream: this.screenShareIDStream.value,\n      screenShareNameStream: this.screenShareNameStream.value,\n      adminIDStream: this.adminIDStream.value,\n      adminNameStream: this.adminNameStream.value,\n      youYouStream: this.youYouStream.value,\n      youYouStreamIDs: this.youYouStreamIDs.value,\n      localStream: this.localStream.value,\n      recordStarted: this.recordStarted.value,\n      recordResumed: this.recordResumed.value,\n      recordPaused: this.recordPaused.value,\n      recordStopped: this.recordStopped.value,\n      adminRestrictSetting: this.adminRestrictSetting.value,\n      videoRequestState: this.videoRequestState.value,\n      videoRequestTime: this.videoRequestTime.value,\n      videoAction: this.videoAction.value,\n      localStreamVideo: this.localStreamVideo.value,\n      userDefaultVideoInputDevice: this.userDefaultVideoInputDevice.value,\n      currentFacingMode: this.currentFacingMode.value,\n      prevFacingMode: this.prevFacingMode.value,\n      defVideoID: this.defVideoID.value,\n      allowed: this.allowed.value,\n      dispActiveNames: this.dispActiveNames.value,\n      p_dispActiveNames: this.p_dispActiveNames.value,\n      activeNames: this.activeNames.value,\n      prevActiveNames: this.prevActiveNames.value,\n      p_activeNames: this.p_activeNames.value,\n      membersReceived: this.membersReceived.value,\n      deferScreenReceived: this.deferScreenReceived.value,\n      hostFirstSwitch: this.hostFirstSwitch.value,\n      micAction: this.micAction.value,\n      screenAction: this.screenAction.value,\n      chatAction: this.chatAction.value,\n      audioRequestState: this.audioRequestState.value,\n      screenRequestState: this.screenRequestState.value,\n      chatRequestState: this.chatRequestState.value,\n      audioRequestTime: this.audioRequestTime.value,\n      screenRequestTime: this.screenRequestTime.value,\n      chatRequestTime: this.chatRequestTime.value,\n      updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\n      oldSoundIds: this.oldSoundIds.value,\n      hostLabel: this.hostLabel.value,\n      mainScreenFilled: this.mainScreenFilled.value,\n      localStreamScreen: this.localStreamScreen.value,\n      screenAlreadyOn: this.screenAlreadyOn.value,\n      chatAlreadyOn: this.chatAlreadyOn.value,\n      redirectURL: this.redirectURL.value,\n      oldAllStreams: this.oldAllStreams.value,\n      adminVidID: this.adminVidID.value,\n      streamNames: this.streamNames.value,\n      non_alVideoStreams: this.non_alVideoStreams.value,\n      sortAudioLoudness: this.sortAudioLoudness.value,\n      audioDecibels: this.audioDecibels.value,\n      mixed_alVideoStreams: this.mixed_alVideoStreams.value,\n      non_alVideoStreams_muted: this.non_alVideoStreams_muted.value,\n      paginatedStreams: this.paginatedStreams.value,\n      localStreamAudio: this.localStreamAudio.value,\n      defAudioID: this.defAudioID.value,\n      userDefaultAudioInputDevice: this.userDefaultAudioInputDevice.value,\n      userDefaultAudioOutputDevice: this.userDefaultAudioOutputDevice.value,\n      prevAudioInputDevice: this.prevAudioInputDevice.value,\n      prevVideoInputDevice: this.prevVideoInputDevice.value,\n      audioPaused: this.audioPaused.value,\n      mainScreenPerson: this.mainScreenPerson.value,\n      adminOnMainScreen: this.adminOnMainScreen.value,\n      screenStates: this.screenStates.value,\n      prevScreenStates: this.prevScreenStates.value,\n      updateDateState: this.updateDateState.value,\n      lastUpdate: this.lastUpdate.value,\n      nForReadjustRecord: this.nForReadjustRecord.value,\n      fixedPageLimit: this.fixedPageLimit.value,\n      removeAltGrid: this.removeAltGrid.value,\n      nForReadjust: this.nForReadjust.value,\n      lastReorderTime: this.lastReorderTime.value,\n      reorderInterval: this.reorderInterval.value,\n      fastReorderInterval: this.fastReorderInterval.value,\n      audStreamNames: this.audStreamNames.value,\n      currentUserPage: this.currentUserPage.value,\n      mainHeightWidth: this.mainHeightWidth.value,\n      prevMainHeightWidth: this.prevMainHeightWidth.value,\n      prevDoPaginate: this.prevDoPaginate.value,\n      doPaginate: this.doPaginate.value,\n      shareEnded: this.shareEnded.value,\n      lStreams: this.lStreams.value,\n      chatRefStreams: this.chatRefStreams.value,\n      controlHeight: this.controlHeight.value,\n      isWideScreen: this.isWideScreen.value,\n      isMediumScreen: this.isMediumScreen.value,\n      isSmallScreen: this.isSmallScreen.value,\n      addGrid: this.addGrid.value,\n      addAltGrid: this.addAltGrid.value,\n      gridRows: this.gridRows.value,\n      gridCols: this.gridCols.value,\n      altGridRows: this.altGridRows.value,\n      altGridCols: this.altGridCols.value,\n      numberPages: this.numberPages.value,\n      currentStreams: this.currentStreams.value,\n      showMiniView: this.showMiniView.value,\n      nStream: this.nStream.value,\n      defer_receive: this.defer_receive.value,\n      allAudioStreams: this.allAudioStreams.value,\n      screenProducer: this.screenProducer.value,\n      remoteScreenStream: this.remoteScreenStream.value,\n      gotAllVids: this.gotAllVids.value,\n      paginationHeightWidth: this.paginationHeightWidth.value,\n      paginationDirection: this.paginationDirection.value,\n      gridSizes: this.gridSizes.value,\n      screenForceFullDisplay: this.screenForceFullDisplay.value,\n      mainGridStream: this.mainGridStream.value,\n      otherGridStreams: this.otherGridStreams.value,\n      audioOnlyStreams: this.audioOnlyStreams.value,\n      videoInputs: this.videoInputs.value,\n      audioInputs: this.audioInputs.value,\n      meetingProgressTime: this.meetingProgressTime.value,\n      meetingElapsedTime: this.meetingElapsedTime.value,\n\n      ref_participants: this.ref_participants.value,\n\n      messages: this.messages.value,\n      startDirectMessage: this.startDirectMessage.value,\n      directMessageDetails: this.directMessageDetails.value,\n      coHost: this.coHost.value,\n      coHostResponsibility: this.coHostResponsibility.value,\n\n      // Event settings\n      audioSetting: this.audioSetting.value,\n      videoSetting: this.videoSetting.value,\n      screenshareSetting: this.screenshareSetting.value,\n      chatSetting: this.chatSetting.value,\n\n      // Display settings\n      autoWave: this.autoWave.value,\n      forceFullDisplay: this.forceFullDisplay.value,\n      prevForceFullDisplay: this.prevForceFullDisplay.value,\n      prevMeetingDisplayType: this.prevMeetingDisplayType.value,\n\n      // Waiting room\n      waitingRoomFilter: this.waitingRoomFilter.value,\n      waitingRoomList: this.waitingRoomList.value,\n      waitingRoomCounter: this.waitingRoomCounter.value,\n      filteredWaitingRoomList: this.filteredWaitingRoomList.value,\n\n      // Requests\n      requestFilter: this.requestFilter.value,\n      requestList: this.requestList.value,\n      requestCounter: this.requestCounter.value,\n      filteredRequestList: this.filteredRequestList.value,\n\n      // Total requests and waiting room\n      totalReqWait: this.totalReqWait.value,\n\n      // Alerts\n      alertVisible: this.alertVisible.value,\n      alertMessage: this.alertMessage.value,\n      alertType: this.alertType.value,\n      alertPosition: this.alertPosition.value,\n      alertDuration: this.alertDuration.value,\n\n      // Progress Timer\n      progressTimerVisible: this.progressTimerVisible.value,\n      progressTimerValue: this.progressTimerValue.value,\n\n      // Menu modals\n      isMenuModalVisible: this.isMenuModalVisible.value,\n      isRecordingModalVisible: this.isRecordingModalVisible.value,\n      isSettingsModalVisible: this.isSettingsModalVisible.value,\n      isRequestsModalVisible: this.isRequestsModalVisible.value,\n      isWaitingModalVisible: this.isWaitingModalVisible.value,\n      isCoHostModalVisible: this.isCoHostModalVisible.value,\n      isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\n      isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\n\n      // Other Modals\n      isParticipantsModalVisible: this.isParticipantsModalVisible.value,\n      isMessagesModalVisible: this.isMessagesModalVisible.value,\n      isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n      isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\n      isLoadingModalVisible: this.isLoadingModalVisible.value,\n\n      // Recording Options\n      recordingMediaOptions: this.recordingMediaOptions.value,\n      recordingAudioOptions: this.recordingAudioOptions.value,\n      recordingVideoOptions: this.recordingVideoOptions.value,\n      recordingVideoType: this.recordingVideoType.value,\n      recordingVideoOptimized: this.recordingVideoOptimized.value,\n      recordingDisplayType: this.recordingDisplayType.value,\n      recordingAddHLS: this.recordingAddHLS.value,\n      recordingAddText: this.recordingAddText.value,\n      recordingCustomText: this.recordingCustomText.value,\n      recordingCustomTextPosition: this.recordingCustomTextPosition.value,\n      recordingCustomTextColor: this.recordingCustomTextColor.value,\n      recordingNameTags: this.recordingNameTags.value,\n      recordingBackgroundColor: this.recordingBackgroundColor.value,\n      recordingNameTagsColor: this.recordingNameTagsColor.value,\n      recordingOrientationVideo: this.recordingOrientationVideo.value,\n      clearedToResume: this.clearedToResume.value,\n      clearedToRecord: this.clearedToRecord.value,\n      recordState: this.recordState.value,\n      showRecordButtons: this.showRecordButtons.value,\n      recordingProgressTime: this.recordingProgressTime.value,\n      audioSwitching: this.audioSwitching.value,\n      videoSwitching: this.videoSwitching.value,\n\n      // Media states\n      videoAlreadyOn: this.videoAlreadyOn.value,\n      audioAlreadyOn: this.audioAlreadyOn.value,\n      componentSizes: this.componentSizes.value,\n\n      // Permissions\n      hasCameraPermission: this.hasCameraPermission.value,\n      hasAudioPermission: this.hasAudioPermission.value,\n\n      // Transports\n      transportCreated: this.transportCreated.value,\n      localTransportCreated: this.localTransportCreated.value,\n      transportCreatedVideo: this.transportCreatedVideo.value,\n      transportCreatedAudio: this.transportCreatedAudio.value,\n      transportCreatedScreen: this.transportCreatedScreen.value,\n      producerTransport: this.producerTransport.value,\n      localProducerTransport: this.localProducerTransport.value,\n      videoProducer: this.videoProducer.value,\n      localVideoProducer: this.localVideoProducer.value,\n      params: this.params.value,\n      videoParams: this.videoParams.value,\n      audioParams: this.audioParams.value,\n      audioProducer: this.audioProducer.value,\n      audioLevel: this.audioLevel.value,\n      localAudioProducer: this.localAudioProducer.value,\n      consumerTransports: this.consumerTransports.value,\n      consumingTransports: this.consumingTransports.value,\n\n      // Polls\n      polls: this.polls.value,\n      poll: this.poll.value,\n      isPollModalVisible: this.isPollModalVisible.value,\n\n      // Background\n      customImage: this.customImage.value,\n      selectedImage: this.selectedImage.value,\n      segmentVideo: this.segmentVideo.value,\n      selfieSegmentation: this.selfieSegmentation.value,\n      pauseSegmentation: this.pauseSegmentation.value,\n      processedStream: this.processedStream.value,\n      keepBackground: this.keepBackground.value,\n      backgroundHasChanged: this.backgroundHasChanged.value,\n      virtualStream: this.virtualStream.value,\n      mainCanvas: this.mainCanvas.value,\n      prevKeepBackground: this.prevKeepBackground.value,\n      appliedBackground: this.appliedBackground.value,\n      isBackgroundModalVisible: this.isBackgroundModalVisible.value,\n      autoClickBackground: this.autoClickBackground.value,\n\n      // Breakout rooms\n      breakoutRooms: this.breakoutRooms.value,\n      currentRoomIndex: this.currentRoomIndex.value,\n      canStartBreakout: this.canStartBreakout.value,\n      breakOutRoomStarted: this.breakOutRoomStarted.value,\n      breakOutRoomEnded: this.breakOutRoomEnded.value,\n      hostNewRoom: this.hostNewRoom.value,\n      limitedBreakRoom: this.limitedBreakRoom.value,\n      mainRoomsLength: this.mainRoomsLength.value,\n      memberRoom: this.memberRoom.value,\n      isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\n\n      // Whiteboard\n      whiteboardUsers: this.whiteboardUsers.value,\n      currentWhiteboardIndex: this.currentWhiteboardIndex.value,\n      canStartWhiteboard: this.canStartWhiteboard.value,\n      whiteboardStarted: this.whiteboardStarted.value,\n      whiteboardEnded: this.whiteboardEnded.value,\n      whiteboardLimit: this.whiteboardLimit.value,\n      isWhiteboardModalVisible: this.isWhiteboardModalVisible.value,\n      isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\n      shapes: this.shapes.value,\n      useImageBackground: this.useImageBackground.value,\n      redoStack: this.redoStack.value,\n      undoStack: this.undoStack.value,\n      canvasStream: this.canvasStream.value,\n      canvasWhiteboard: this.canvasWhiteboard.value,\n\n      // Screenboard\n      canvasScreenboard: this.canvasScreenboard.value,\n      processedScreenStream: this.processedScreenStream.value,\n      annotateScreenStream: this.annotateScreenStream.value,\n      mainScreenCanvas: this.mainScreenCanvas.value,\n      isScreenboardModalVisible: this.isScreenboardModalVisible.value,\n\n      validated: this.validated.value,\n      device: this.device.value,\n      socket: this.socket.value,\n      localSocket: this.localSocket!.value,\n      checkMediaPermission: false,\n      onWeb: true,\n\n      // Update functions\n      updateRoomName: this.updateRoomName.bind(this),\n      updateMember: this.updateMember.bind(this),\n      updateAdminPasscode: this.updateAdminPasscode.bind(this),\n      updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\n      updateYouAreHost: this.updateYouAreHost.bind(this),\n      updateIslevel: this.updateIslevel.bind(this),\n      updateCoHost: this.updateCoHost.bind(this),\n      updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\n      updateConfirmedToRecord: this.updateConfirmedToRecord.bind(this),\n      updateMeetingDisplayType: this.updateMeetingDisplayType.bind(this),\n      updateMeetingVideoOptimized: this.updateMeetingVideoOptimized.bind(this),\n      updateEventType: this.updateEventType.bind(this),\n      updateParticipants: this.updateParticipants.bind(this),\n      updateParticipantsCounter: this.updateParticipantsCounter.bind(this),\n      updateParticipantsFilter: this.updateParticipantsFilter.bind(this),\n\n      // More update functions for media details\n      updateConsume_sockets: this.updateConsume_sockets.bind(this),\n      updateRtpCapabilities: this.updateRtpCapabilities.bind(this),\n      updateRoomRecvIPs: this.updateRoomRecvIPs.bind(this),\n      updateMeetingRoomParams: this.updateMeetingRoomParams.bind(this),\n      updateItemPageLimit: this.updateItemPageLimit.bind(this),\n      updateAudioOnlyRoom: this.updateAudioOnlyRoom.bind(this),\n      updateAddForBasic: this.updateAddForBasic.bind(this),\n      updateScreenPageLimit: this.updateScreenPageLimit.bind(this),\n      updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\n      updateShared: this.updateShared.bind(this),\n      updateTargetOrientation: this.updateTargetOrientation.bind(this),\n      updateTargetResolution: this.updateTargetResolution.bind(this),\n      updateTargetResolutionHost: this.updateTargetResolutionHost.bind(this),\n      updateVidCons: this.updateVidCons.bind(this),\n      updateFrameRate: this.updateFrameRate.bind(this),\n      updateHParams: this.updateHParams.bind(this),\n      updateVParams: this.updateVParams.bind(this),\n      updateScreenParams: this.updateScreenParams.bind(this),\n      updateAParams: this.updateAParams.bind(this),\n\n      // More update functions for recording details\n      updateRecordingAudioPausesLimit: this.updateRecordingAudioPausesLimit.bind(this),\n      updateRecordingAudioPausesCount: this.updateRecordingAudioPausesCount.bind(this),\n      updateRecordingAudioSupport: this.updateRecordingAudioSupport.bind(this),\n      updateRecordingAudioPeopleLimit: this.updateRecordingAudioPeopleLimit.bind(this),\n      updateRecordingAudioParticipantsTimeLimit:\n        this.updateRecordingAudioParticipantsTimeLimit.bind(this),\n      updateRecordingVideoPausesCount: this.updateRecordingVideoPausesCount.bind(this),\n      updateRecordingVideoPausesLimit: this.updateRecordingVideoPausesLimit.bind(this),\n      updateRecordingVideoSupport: this.updateRecordingVideoSupport.bind(this),\n      updateRecordingVideoPeopleLimit: this.updateRecordingVideoPeopleLimit.bind(this),\n      updateRecordingVideoParticipantsTimeLimit:\n        this.updateRecordingVideoParticipantsTimeLimit.bind(this),\n      updateRecordingAllParticipantsSupport: this.updateRecordingAllParticipantsSupport.bind(this),\n      updateRecordingVideoParticipantsSupport:\n        this.updateRecordingVideoParticipantsSupport.bind(this),\n      updateRecordingAllParticipantsFullRoomSupport:\n        this.updateRecordingAllParticipantsFullRoomSupport.bind(this),\n      updateRecordingVideoParticipantsFullRoomSupport:\n        this.updateRecordingVideoParticipantsFullRoomSupport.bind(this),\n      updateRecordingPreferredOrientation: this.updateRecordingPreferredOrientation.bind(this),\n      updateRecordingSupportForOtherOrientation:\n        this.updateRecordingSupportForOtherOrientation.bind(this),\n      updateRecordingMultiFormatsSupport: this.updateRecordingMultiFormatsSupport.bind(this),\n\n      updateUserRecordingParams: this.updateUserRecordingParams.bind(this),\n      updateCanRecord: this.updateCanRecord.bind(this),\n      updateStartReport: this.updateStartReport.bind(this),\n      updateEndReport: this.updateEndReport.bind(this),\n      updateRecordTimerInterval: this.updateRecordTimerInterval.bind(this),\n      updateRecordStartTime: this.updateRecordStartTime.bind(this),\n      updateRecordElapsedTime: this.updateRecordElapsedTime.bind(this),\n      updateIsTimerRunning: this.updateIsTimerRunning.bind(this),\n      updateCanPauseResume: this.updateCanPauseResume.bind(this),\n      updateRecordChangeSeconds: this.updateRecordChangeSeconds.bind(this),\n      updatePauseLimit: this.updatePauseLimit.bind(this),\n      updatePauseRecordCount: this.updatePauseRecordCount.bind(this),\n      updateCanLaunchRecord: this.updateCanLaunchRecord.bind(this),\n      updateStopLaunchRecord: this.updateStopLaunchRecord.bind(this),\n\n      updateParticipantsAll: this.updateParticipantsAll.bind(this),\n\n      updateFirstAll: this.updateFirstAll.bind(this),\n      updateUpdateMainWindow: this.updateUpdateMainWindow.bind(this),\n      updateFirst_round: this.updateFirst_round.bind(this),\n      updateLandScaped: this.updateLandScaped.bind(this),\n      updateLock_screen: this.updateLock_screen.bind(this),\n      updateScreenId: this.updateScreenId.bind(this),\n      updateAllVideoStreams: this.updateAllVideoStreams.bind(this),\n      updateNewLimitedStreams: this.updateNewLimitedStreams.bind(this),\n      updateNewLimitedStreamsIDs: this.updateNewLimitedStreamsIDs.bind(this),\n      updateActiveSounds: this.updateActiveSounds.bind(this),\n      updateScreenShareIDStream: this.updateScreenShareIDStream.bind(this),\n      updateScreenShareNameStream: this.updateScreenShareNameStream.bind(this),\n      updateAdminIDStream: this.updateAdminIDStream.bind(this),\n      updateAdminNameStream: this.updateAdminNameStream.bind(this),\n      updateYouYouStream: this.updateYouYouStream.bind(this),\n      updateYouYouStreamIDs: this.updateYouYouStreamIDs.bind(this),\n      updateLocalStream: this.updateLocalStream.bind(this),\n      updateRecordStarted: this.updateRecordStarted.bind(this),\n      updateRecordResumed: this.updateRecordResumed.bind(this),\n      updateRecordPaused: this.updateRecordPaused.bind(this),\n      updateRecordStopped: this.updateRecordStopped.bind(this),\n      updateAdminRestrictSetting: this.updateAdminRestrictSetting.bind(this),\n      updateVideoRequestState: this.updateVideoRequestState.bind(this),\n      updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\n      updateVideoAction: this.updateVideoAction.bind(this),\n      updateLocalStreamVideo: this.updateLocalStreamVideo.bind(this),\n      updateUserDefaultVideoInputDevice: this.updateUserDefaultVideoInputDevice.bind(this),\n      updateCurrentFacingMode: this.updateCurrentFacingMode.bind(this),\n      updatePrevFacingMode: this.updatePrevFacingMode.bind(this),\n      updateDefVideoID: this.updateDefVideoID.bind(this),\n      updateAllowed: this.updateAllowed.bind(this),\n      updateDispActiveNames: this.updateDispActiveNames.bind(this),\n      updateP_dispActiveNames: this.updateP_dispActiveNames.bind(this),\n      updateActiveNames: this.updateActiveNames.bind(this),\n      updatePrevActiveNames: this.updatePrevActiveNames.bind(this),\n      updateP_activeNames: this.updateP_activeNames.bind(this),\n      updateMembersReceived: this.updateMembersReceived.bind(this),\n      updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\n      updateHostFirstSwitch: this.updateHostFirstSwitch.bind(this),\n      updateMicAction: this.updateMicAction.bind(this),\n      updateScreenAction: this.updateScreenAction.bind(this),\n      updateChatAction: this.updateChatAction.bind(this),\n      updateAudioRequestState: this.updateAudioRequestState.bind(this),\n      updateScreenRequestState: this.updateScreenRequestState.bind(this),\n      updateChatRequestState: this.updateChatRequestState.bind(this),\n      updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\n      updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\n      updateChatRequestTime: this.updateChatRequestTime.bind(this),\n      updateOldSoundIds: this.updateOldSoundIds.bind(this),\n      updateHostLabel: this.updateHostLabel.bind(this),\n      updateMainScreenFilled: this.updateMainScreenFilled.bind(this),\n      updateLocalStreamScreen: this.updateLocalStreamScreen.bind(this),\n      updateScreenAlreadyOn: this.updateScreenAlreadyOn.bind(this),\n      updateChatAlreadyOn: this.updateChatAlreadyOn.bind(this),\n      updateRedirectURL: this.updateRedirectURL.bind(this),\n      updateOldAllStreams: this.updateOldAllStreams.bind(this),\n      updateAdminVidID: this.updateAdminVidID.bind(this),\n      updateStreamNames: this.updateStreamNames.bind(this),\n      updateNon_alVideoStreams: this.updateNon_alVideoStreams.bind(this),\n      updateSortAudioLoudness: this.updateSortAudioLoudness.bind(this),\n      updateAudioDecibels: this.updateAudioDecibels.bind(this),\n      updateMixed_alVideoStreams: this.updateMixed_alVideoStreams.bind(this),\n      updateNon_alVideoStreams_muted: this.updateNon_alVideoStreams_muted.bind(this),\n      updatePaginatedStreams: this.updatePaginatedStreams.bind(this),\n      updateLocalStreamAudio: this.updateLocalStreamAudio.bind(this),\n      updateDefAudioID: this.updateDefAudioID.bind(this),\n      updateUserDefaultAudioInputDevice: this.updateUserDefaultAudioInputDevice.bind(this),\n      updateUserDefaultAudioOutputDevice: this.updateUserDefaultAudioOutputDevice.bind(this),\n      updatePrevAudioInputDevice: this.updatePrevAudioInputDevice.bind(this),\n      updatePrevVideoInputDevice: this.updatePrevVideoInputDevice.bind(this),\n      updateAudioPaused: this.updateAudioPaused.bind(this),\n      updateMainScreenPerson: this.updateMainScreenPerson.bind(this),\n      updateAdminOnMainScreen: this.updateAdminOnMainScreen.bind(this),\n      updateScreenStates: this.updateScreenStates.bind(this),\n      updatePrevScreenStates: this.updatePrevScreenStates.bind(this),\n      updateUpdateDateState: this.updateUpdateDateState.bind(this),\n      updateLastUpdate: this.updateLastUpdate.bind(this),\n      updateNForReadjustRecord: this.updateNForReadjustRecord.bind(this),\n      updateFixedPageLimit: this.updateFixedPageLimit.bind(this),\n      updateRemoveAltGrid: this.updateRemoveAltGrid.bind(this),\n      updateNForReadjust: this.updateNForReadjust.bind(this),\n      updateLastReorderTime: this.updateLastReorderTime.bind(this),\n      updateAudStreamNames: this.updateAudStreamNames.bind(this),\n      updateCurrentUserPage: this.updateCurrentUserPage.bind(this),\n      updateMainHeightWidth: this.updateMainHeightWidth.bind(this),\n      updatePrevMainHeightWidth: this.updatePrevMainHeightWidth.bind(this),\n      updatePrevDoPaginate: this.updatePrevDoPaginate.bind(this),\n      updateDoPaginate: this.updateDoPaginate.bind(this),\n      updateShareEnded: this.updateShareEnded.bind(this),\n      updateLStreams: this.updateLStreams.bind(this),\n      updateChatRefStreams: this.updateChatRefStreams.bind(this),\n      updateControlHeight: this.updateControlHeight.bind(this),\n      updateIsWideScreen: this.updateIsWideScreen.bind(this),\n      updateIsMediumScreen: this.updateIsMediumScreen.bind(this),\n      updateIsSmallScreen: this.updateIsSmallScreen.bind(this),\n      updateAddGrid: this.updateAddGrid.bind(this),\n      updateAddAltGrid: this.updateAddAltGrid.bind(this),\n      updateGridRows: this.updateGridRows.bind(this),\n      updateGridCols: this.updateGridCols.bind(this),\n      updateAltGridRows: this.updateAltGridRows.bind(this),\n      updateAltGridCols: this.updateAltGridCols.bind(this),\n      updateNumberPages: this.updateNumberPages.bind(this),\n      updateCurrentStreams: this.updateCurrentStreams.bind(this),\n      updateShowMiniView: this.updateShowMiniView.bind(this),\n      updateNStream: this.updateNStream.bind(this),\n      updateDefer_receive: this.updateDefer_receive.bind(this),\n      updateAllAudioStreams: this.updateAllAudioStreams.bind(this),\n      updateRemoteScreenStream: this.updateRemoteScreenStream.bind(this),\n      updateScreenProducer: this.updateScreenProducer.bind(this),\n      updateGotAllVids: this.updateGotAllVids.bind(this),\n      updatePaginationHeightWidth: this.updatePaginationHeightWidth.bind(this),\n      updatePaginationDirection: this.updatePaginationDirection.bind(this),\n      updateGridSizes: this.updateGridSizes.bind(this),\n      updateScreenForceFullDisplay: this.updateScreenForceFullDisplay.bind(this),\n      updateMainGridStream: this.updateMainGridStream.bind(this),\n      updateOtherGridStreams: this.updateOtherGridStreams.bind(this),\n      updateAudioOnlyStreams: this.updateAudioOnlyStreams.bind(this),\n      updateVideoInputs: this.updateVideoInputs.bind(this),\n      updateAudioInputs: this.updateAudioInputs.bind(this),\n      updateMeetingProgressTime: this.updateMeetingProgressTime.bind(this),\n      updateMeetingElapsedTime: this.updateMeetingElapsedTime.bind(this),\n      updateRef_participants: this.updateRef_participants.bind(this),\n\n      updateMessages: this.updateMessages.bind(this),\n      updateStartDirectMessage: this.updateStartDirectMessage.bind(this),\n      updateDirectMessageDetails: this.updateDirectMessageDetails.bind(this),\n      updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\n\n      // Event settings\n      updateAudioSetting: this.updateAudioSetting.bind(this),\n      updateVideoSetting: this.updateVideoSetting.bind(this),\n      updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\n      updateChatSetting: this.updateChatSetting.bind(this),\n\n      // Display settings\n      updateAutoWave: this.updateAutoWave.bind(this),\n      updateForceFullDisplay: this.updateForceFullDisplay.bind(this),\n      updatePrevForceFullDisplay: this.updatePrevForceFullDisplay.bind(this),\n      updatePrevMeetingDisplayType: this.updatePrevMeetingDisplayType.bind(this),\n\n      // Waiting room\n      updateWaitingRoomFilter: this.updateWaitingRoomFilter.bind(this),\n      updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\n      updateWaitingRoomCounter: this.updateWaitingRoomCounter.bind(this),\n\n      // Requests\n      updateRequestFilter: this.updateRequestFilter.bind(this),\n      updateRequestList: this.updateRequestList.bind(this),\n      updateRequestCounter: this.updateRequestCounter.bind(this),\n\n      // Total requests and waiting room\n      updateTotalReqWait: this.updateTotalReqWait.bind(this),\n\n      // Menu modals\n      updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\n      updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n      updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\n      updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\n      updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\n      updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\n      updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\n      updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\n\n      // Other modals\n      updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\n      updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\n      updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\n      updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\n      updateIsLoadingModalVisible: this.updateIsLoadingModalVisible.bind(this),\n\n      // Recording Options\n      updateRecordingMediaOptions: this.updateRecordingMediaOptions.bind(this),\n      updateRecordingAudioOptions: this.updateRecordingAudioOptions.bind(this),\n      updateRecordingVideoOptions: this.updateRecordingVideoOptions.bind(this),\n      updateRecordingVideoType: this.updateRecordingVideoType.bind(this),\n      updateRecordingVideoOptimized: this.updateRecordingVideoOptimized.bind(this),\n      updateRecordingDisplayType: this.updateRecordingDisplayType.bind(this),\n      updateRecordingAddHLS: this.updateRecordingAddHLS.bind(this),\n      updateRecordingAddText: this.updateRecordingAddText.bind(this),\n      updateRecordingCustomText: this.updateRecordingCustomText.bind(this),\n      updateRecordingCustomTextPosition: this.updateRecordingCustomTextPosition.bind(this),\n      updateRecordingCustomTextColor: this.updateRecordingCustomTextColor.bind(this),\n      updateRecordingNameTags: this.updateRecordingNameTags.bind(this),\n      updateRecordingBackgroundColor: this.updateRecordingBackgroundColor.bind(this),\n      updateRecordingNameTagsColor: this.updateRecordingNameTagsColor.bind(this),\n      updateRecordingOrientationVideo: this.updateRecordingOrientationVideo.bind(this),\n      updateClearedToResume: this.updateClearedToResume.bind(this),\n      updateClearedToRecord: this.updateClearedToRecord.bind(this),\n      updateRecordState: this.updateRecordState.bind(this),\n      updateShowRecordButtons: this.updateShowRecordButtons.bind(this),\n      updateRecordingProgressTime: this.updateRecordingProgressTime.bind(this),\n      updateAudioSwitching: this.updateAudioSwitching.bind(this),\n      updateVideoSwitching: this.updateVideoSwitching.bind(this),\n\n      // Media states\n      updateVideoAlreadyOn: this.updateVideoAlreadyOn.bind(this),\n      updateAudioAlreadyOn: this.updateAudioAlreadyOn.bind(this),\n      updateComponentSizes: this.updateComponentSizes.bind(this),\n\n      // Permissions\n      updateHasCameraPermission: this.updateHasCameraPermission.bind(this),\n      updateHasAudioPermission: this.updateHasAudioPermission.bind(this),\n\n      // Transports\n      updateTransportCreated: this.updateTransportCreated.bind(this),\n      updateLocalTransportCreated: this.updateLocalTransportCreated.bind(this),\n      updateTransportCreatedVideo: this.updateTransportCreatedVideo.bind(this),\n      updateTransportCreatedAudio: this.updateTransportCreatedAudio.bind(this),\n      updateTransportCreatedScreen: this.updateTransportCreatedScreen.bind(this),\n      updateProducerTransport: this.updateProducerTransport.bind(this),\n      updateLocalProducerTransport: this.updateLocalProducerTransport.bind(this),\n      updateVideoProducer: this.updateVideoProducer.bind(this),\n      updateLocalVideoProducer: this.updateLocalVideoProducer.bind(this),\n      updateParams: this.updateParams.bind(this),\n      updateVideoParams: this.updateVideoParams.bind(this),\n      updateAudioParams: this.updateAudioParams.bind(this),\n      updateAudioProducer: this.updateAudioProducer.bind(this),\n      updateAudioLevel: this.updateAudioLevel.bind(this),\n      updateLocalAudioProducer: this.updateLocalAudioProducer.bind(this),\n      updateConsumerTransports: this.updateConsumerTransports.bind(this),\n      updateConsumingTransports: this.updateConsumingTransports.bind(this),\n\n      // Polls\n      updatePolls: this.updatePolls.bind(this),\n      updatePoll: this.updatePoll.bind(this),\n      updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\n\n      // Background\n      updateCustomImage: this.updateCustomImage.bind(this),\n      updateSelectedImage: this.updateSelectedImage.bind(this),\n      updateSegmentVideo: this.updateSegmentVideo.bind(this),\n      updateSelfieSegmentation: this.updateSelfieSegmentation.bind(this),\n      updatePauseSegmentation: this.updatePauseSegmentation.bind(this),\n      updateProcessedStream: this.updateProcessedStream.bind(this),\n      updateKeepBackground: this.updateKeepBackground.bind(this),\n      updateBackgroundHasChanged: this.updateBackgroundHasChanged.bind(this),\n      updateVirtualStream: this.updateVirtualStream.bind(this),\n      updateMainCanvas: this.updateMainCanvas.bind(this),\n      updatePrevKeepBackground: this.updatePrevKeepBackground.bind(this),\n      updateAppliedBackground: this.updateAppliedBackground.bind(this),\n      updateIsBackgroundModalVisible: this.updateIsBackgroundModalVisible.bind(this),\n      updateAutoClickBackground: this.updateAutoClickBackground.bind(this),\n\n      // Breakout rooms\n      updateBreakoutRooms: this.updateBreakoutRooms.bind(this),\n      updateCurrentRoomIndex: this.updateCurrentRoomIndex.bind(this),\n      updateCanStartBreakout: this.updateCanStartBreakout.bind(this),\n      updateBreakOutRoomStarted: this.updateBreakOutRoomStarted.bind(this),\n      updateBreakOutRoomEnded: this.updateBreakOutRoomEnded.bind(this),\n      updateHostNewRoom: this.updateHostNewRoom.bind(this),\n      updateLimitedBreakRoom: this.updateLimitedBreakRoom.bind(this),\n      updateMainRoomsLength: this.updateMainRoomsLength.bind(this),\n      updateMemberRoom: this.updateMemberRoom.bind(this),\n      updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\n\n      // Whiteboard\n      updateWhiteboardUsers: this.updateWhiteboardUsers.bind(this),\n      updateCurrentWhiteboardIndex: this.updateCurrentWhiteboardIndex.bind(this),\n      updateCanStartWhiteboard: this.updateCanStartWhiteboard.bind(this),\n      updateWhiteboardStarted: this.updateWhiteboardStarted.bind(this),\n      updateWhiteboardEnded: this.updateWhiteboardEnded.bind(this),\n      updateWhiteboardLimit: this.updateWhiteboardLimit.bind(this),\n      updateIsWhiteboardModalVisible: this.updateIsWhiteboardModalVisible.bind(this),\n      updateIsConfigureWhiteboardModalVisible:\n        this.updateIsConfigureWhiteboardModalVisible.bind(this),\n      updateShapes: this.updateShapes.bind(this),\n      updateUseImageBackground: this.updateUseImageBackground.bind(this),\n      updateRedoStack: this.updateRedoStack.bind(this),\n      updateUndoStack: this.updateUndoStack.bind(this),\n      updateCanvasStream: this.updateCanvasStream.bind(this),\n      updateCanvasWhiteboard: this.updateCanvasWhiteboard.bind(this),\n\n      // Screenboard\n      updateCanvasScreenboard: this.updateCanvasScreenboard.bind(this),\n      updateProcessedScreenStream: this.updateProcessedScreenStream.bind(this),\n      updateAnnotateScreenStream: this.updateAnnotateScreenStream.bind(this),\n      updateMainScreenCanvas: this.updateMainScreenCanvas.bind(this),\n      updateIsScreenboardModalVisible: this.updateIsScreenboardModalVisible.bind(this),\n\n      // Other functions\n      checkOrientation: this.checkOrientation.bind(this),\n\n      updateDevice: this.updateDevice.bind(this),\n      updateSocket: this.updateSocket.bind(this),\n      updateLocalSocket: this.updateLocalSocket.bind(this),\n      updateValidated: this.updateValidated.bind(this),\n      isDarkModeValue: this.modernThemeDarkMode.value,\n      updateIsDarkMode: this.updateModernThemeDarkMode.bind(this),\n\n      customVideoCard: this.customVideoCard,\n      customAudioCard: this.customAudioCard,\n      customMiniCard: this.customMiniCard,\n\n      showAlert: this.showAlert.bind(this),\n      getUpdatedAllParams: () => {\n\n        try {\n          if (this.sourceParameters !== null) {\n            const nextSourceParameters = {\n              ...this.getAllParams(),\n              ...this.mediaSFUFunctions(),\n            };\n            this.sourceParameters = nextSourceParameters;\n            if (this.updateSourceParameters) {\n              this.updateSourceParameters(nextSourceParameters);\n            }\n          }\n        } catch {\n          console.log('error updateSourceParameters');\n        }\n\n        return {\n          ...this.getAllParams(),\n          ...this.mediaSFUFunctions(),\n        };\n      },\n    };\n  }\n\n  mediaSFUParameters: any = {\n    ...this.getAllParams(),\n    ...this.mediaSFUFunctions(),\n  };\n\n  getUpdatedAllParams = (): any => {\n    return {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n  };\n\n  PrejoinPageComponent: any = {\n    component: this.PrejoinPage,\n    injector: null,\n  };\n\n  updatePrejoinPageComponent = () => {\n    const PrejoinComp = {\n      component: this.PrejoinPage,\n      injector: this.createInjector({\n        parameters: {\n          showAlert:\n            this.showAlert ||\n            (() => {\n              console.log('showAlert not defined');\n            }),\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\n          connectSocket: this.socketManager.connectSocket,\n          connectLocalSocket: this.socketManager.connectLocalSocket,\n          updateSocket: this.updateSocket,\n          updateLocalSocket: this.updateLocalSocket,\n          updateValidated: this.updateValidated,\n          updateApiUserName: this.updateApiUserName,\n          updateApiToken: this.updateApiToken,\n          updateLink: this.updateLink,\n          updateRoomName: this.updateRoomName,\n          updateMember: this.updateMember,\n        },\n        credentials: this.credentials,\n        localLink: this.localLink,\n        connectMediaSFU: this.connectMediaSFU,\n        returnUI: this.returnUI,\n        noUIPreJoinOptions: this.noUIPreJoinOptions,\n        joinMediaSFURoom: this.joinMediaSFURoom,\n        createMediaSFURoom: this.createMediaSFURoom,\n      }),\n    };\n\n    this.PrejoinPageComponent = { ...PrejoinComp };\n\n    this.cdr.detectChanges();\n  };\n\n  /**\n   * Initializes function overrides by wrapping original implementations\n   * with custom logic if provided in uiOverrides\n   */\n  initializeFunctionOverrides(): void {\n    // Apply consumerResume override\n    if (this.uiOverrideResolver.hasOverride('consumerResume')) {\n      const originalConsumerResume = this.consumerResume.consumerResume.bind(\n        this.consumerResume,\n      );\n      this.consumerResume.consumerResume = this.uiOverrideResolver.applyFunctionOverride(\n        'consumerResume',\n        originalConsumerResume,\n      );\n    }\n\n    // Apply addVideosGrid override\n    if (this.uiOverrideResolver.hasOverride('addVideosGrid')) {\n      const originalAddVideosGrid = this.addVideosGrid.addVideosGrid.bind(\n        this.addVideosGrid,\n      );\n      this.addVideosGrid.addVideosGrid = this.uiOverrideResolver.applyFunctionOverride(\n        'addVideosGrid',\n        originalAddVideosGrid,\n      );\n    }\n\n    // Apply prepopulateUserMedia override\n    if (this.uiOverrideResolver.hasOverride('prepopulateUserMedia')) {\n      const originalPrepopulateUserMedia = this.prepopulateUserMedia.prepopulateUserMedia.bind(\n        this.prepopulateUserMedia,\n      );\n      this.prepopulateUserMedia.prepopulateUserMedia = this.uiOverrideResolver.applyFunctionOverride(\n        'prepopulateUserMedia',\n        originalPrepopulateUserMedia,\n      );\n    }\n  }\n\n  ngOnInit() {\n    this.updateModernThemeDarkMode(this.resolvePreferredTheme());\n\n    // Initialize UI overrides if provided\n    if (this.uiOverrides) {\n      this.uiOverrideResolver.setOverrides(this.uiOverrides);\n    }\n\n    // Apply function overrides\n    this.initializeFunctionOverrides();\n\n    if (this.PrejoinPage) {\n      this.updatePrejoinPageComponent();\n    }\n\n    this.setupResizeListener();\n    if (this.validated) {\n      this.connectAndAddSocketMethods();\n    }\n\n    this.mainHeightWidthSubscription = this.mainHeightWidth.subscribe(() => {\n      this.updateMainVideoSize();\n    });\n\n    this.recordingSubscription = combineLatest([\n      this.recordPaused,\n      this.recordStarted,\n      this.recordStopped,\n      this.recordResumed,\n      this.recordingProgressTime,\n      this.showRecordButtons,\n      this.islevel,\n    ]).subscribe(\n      ([\n        recordPaused,\n        recordStarted,\n        recordStopped,\n        recordResumed,\n        recordingProgressTime,\n        showRecordButtons,\n        islevel,\n      ]) => {\n        if (\n          recordPaused ||\n          recordStarted ||\n          recordStopped ||\n          recordResumed ||\n          recordingProgressTime ||\n          showRecordButtons ||\n          islevel\n        ) {\n          this.updateRecordButtons();\n        }\n      },\n    );\n    this.validatedSubscription = this.validated.subscribe((validated) => {\n      if (validated) {\n        this.handleValidated();\n      }\n    });\n    this.islevelSubscription = this.islevel.subscribe((islevel) => {\n      if (islevel) {\n        this.updateControlBroadcastButtons();\n      }\n    });\n    this.coHostSubscription = combineLatest([this.coHost, this.coHostResponsibility]).subscribe(\n      ([coHost, coHostResponsibility]) => {\n        if (coHost || coHostResponsibility) {\n          this.updateControlBroadcastButtons();\n        }\n      },\n    );\n\n    // Subscribe to changes in BehaviorSubject and update the buttons accordingly\n    this.buttonSubscriptions.push(\n      this.micActive.subscribe(() => {\n        this.updateControlBroadcastButtons();\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.videoActive.subscribe(() => {\n        this.updateControlBroadcastButtons();\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.participantsCounter.subscribe((value) => {\n        this.updateMenuParticipantsWidget(value);\n      }),\n    );\n\n    this.mediaSFUParameters = {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n  }\n\n  ngOnDestroy() {\n    window.removeEventListener('resize', this.handleResize);\n    window.removeEventListener('orientationchange', this.handleResize);\n    if (this.mainHeightWidthSubscription) {\n      this.mainHeightWidthSubscription.unsubscribe();\n    }\n    if (this.validatedSubscription) {\n      this.validatedSubscription.unsubscribe();\n    }\n    if (this.islevelSubscription) {\n      this.islevelSubscription.unsubscribe();\n    }\n    if (this.coHostSubscription) {\n      this.coHostSubscription.unsubscribe();\n    }\n    if (this.ScreenboardSubscription) {\n      this.ScreenboardSubscription.unsubscribe();\n    }\n    if (this.recordingSubscription) {\n      this.recordingSubscription.unsubscribe();\n    }\n  }\n\n  updateMainVideoSize = async () => {\n    if (!this.lock_screen.value && !this.shared.value) {\n      this.prepopulateUserMedia.prepopulateUserMedia({\n        name: this.hostLabel.value,\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n      });\n    } else {\n      if (!this.first_round.value) {\n        this.prepopulateUserMedia.prepopulateUserMedia({\n          name: this.hostLabel.value,\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n        });\n      }\n    }\n  };\n\n  async connectAndAddSocketMethods() {\n    this.mediaSFUParameters = {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n    const socket_ = await this.connect_Socket(this.apiUserName.value, this.apiToken.value);\n    if (socket_) {\n      this.updateSocket(socket_);\n    }\n  }\n\n  async handleValidated() {\n    this.updateAllVideoStreams([\n      { producerId: 'youyou', stream: undefined, id: 'youyou', name: 'youyou' },\n    ]);\n\n    this.updateStreamNames([{ id: 'youyou', name: 'youyou', producerId: '' }]);\n\n    if (this.validated.value) {\n\n      try {\n        if (!this.localUIMode.value) {\n          this.updateIsLoadingModalVisible(true);\n          await this.connectAndAddSocketMethods();\n        } else {\n          this.updateIsLoadingModalVisible(false);\n        }\n      } catch (error) {\n        console.log('error connectAndaAddSocketMethods', error);\n      }\n\n      this.startMeetingProgressTimer.startMeetingProgressTimer({\n        startTime: Date.now() / 1000,\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n      });\n\n      try {\n        if (this.sourceParameters !== null) {\n          const nextSourceParameters = {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          };\n          this.sourceParameters = nextSourceParameters;\n          if (this.updateSourceParameters) {\n            this.updateSourceParameters(nextSourceParameters);\n          }\n        }\n      } catch {\n        console.log('error updateSourceParameters');\n      }\n\n    }\n  }\n\n  @HostListener('window:resize')\n  @HostListener('window:orientationchange')\n  async handleResize() {\n    let fraction = 0;\n\n    if (\n      window.innerHeight < window.innerWidth &&\n      (this.eventType.value == 'webinar' || this.eventType.value == 'conference')\n    ) {\n      const currentHeight = window.innerHeight;\n      fraction = Number((40 / currentHeight).toFixed(3));\n      if (fraction != this.controlHeight.value) {\n        this.updateControlHeight(Number(fraction));\n      }\n    } else {\n      // Set default control button height for portrait mode or other event types\n      const currentHeight = window.innerHeight;\n      fraction = Number((40 / currentHeight).toFixed(3));\n      fraction = Number(fraction);\n      if (fraction != this.controlHeight.value) {\n        this.updateControlHeight(Number(fraction));\n      }\n    }\n\n    const dimensions = this.computeDimensionsMethod({\n      containerWidthFraction: 1,\n      containerHeightFraction: 1,\n      mainSize: this.mainHeightWidth.value,\n      doStack: true,\n      defaultFraction:\n        this.eventType.value == 'webinar' || this.eventType.value == 'conference'\n          ? 1 - fraction\n          : 1,\n    });\n\n    this.updateComponentSizes(dimensions);\n\n    const orientation = this.checkOrientation();\n    if (orientation == 'portrait') {\n      if (!this.isWideScreen.value) {\n        if (this.shareScreenStarted.value || this.shared.value) {\n          this.updateScreenForceFullDisplay(true);\n        }\n      }\n    }\n\n    // Updates the main grid view\n    await this.prepopulateUserMedia.prepopulateUserMedia({\n      name: this.hostLabel.value,\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n    });\n    // Updates the mini grid view\n    await this.onScreenChanges.onScreenChanges({\n      changed: true,\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n    });\n  }\n\n  async disconnectAllSockets(consume_sockets: ConsumeSocket[]): Promise<void> {\n    for (const socket of consume_sockets) {\n      try {\n        const ip = Object.keys(socket)[0];\n        await socket[ip].disconnect();\n      } catch (error) {\n        console.log(`Error disconnecting socket with IP: ${Object.keys(socket)[0]}`, error);\n      }\n    }\n  }\n\n  async closeAndReset() {\n    //close and clean up all sockets, modals,... and reset all states to initial values\n\n    this.updateIsMessagesModalVisible(false);\n    this.updateIsParticipantsModalVisible(false);\n    this.updateIsWaitingModalVisible(false);\n    this.updateIsRequestsModalVisible(false);\n    this.updateIsCoHostModalVisible(false);\n    this.updateIsSettingsModalVisible(false);\n    this.updateIsDisplaySettingsModalVisible(false);\n    this.updateIsMediaSettingsModalVisible(false);\n    this.updateIsMenuModalVisible(false);\n    this.updateIsShareEventModalVisible(false);\n    this.updateIsConfirmExitModalVisible(false);\n    await this.disconnectAllSockets(this.consume_sockets.value);\n    await this.updateStatesToInitialValues();\n    this.updateMeetingProgressTime('00:00:00');\n    this.updateMeetingElapsedTime(0);\n    this.updateRecordingProgressTime('00:00:00');\n    this.updateRecordElapsedTime(0);\n    this.updateShowRecordButtons(false);\n\n    this.updateIsConfigureWhiteboardModalVisible(false);\n    this.updateIsWhiteboardModalVisible(false);\n    this.updateIsMenuModalVisible(false);\n    this.updateIsRecordingModalVisible(false);\n    this.updateIsPollModalVisible(false);\n    this.updateIsBreakoutRoomsModalVisible(false);\n    this.updateIsBackgroundModalVisible(false);\n    this.updateIsLoadingModalVisible(false);\n    this.updateIsConfirmHereModalVisible(false);\n\n    await sleep({ ms: 500 });\n    this.updateValidated(false);\n    //if on web, reload the page\n    window.location.reload();\n  }\n\n  computeDimensionsMethod = ({\n    containerWidthFraction = 1,\n    containerHeightFraction = 1,\n    mainSize,\n    doStack = true,\n    defaultFraction,\n  }: {\n    containerWidthFraction?: number;\n    containerHeightFraction?: number;\n    mainSize: number;\n    doStack?: boolean;\n    defaultFraction: number;\n  }): ComponentSizes => {\n    const parentWidth = window.innerWidth * containerWidthFraction;\n    const parentHeight = window.innerHeight * containerHeightFraction * defaultFraction;\n    let isWideScreen = parentWidth >= 768;\n\n    if (!isWideScreen && parentWidth > 1.5 * parentHeight) {\n      isWideScreen = true;\n    }\n\n    this.updateIsWideScreen(isWideScreen);\n\n    const dimensions = this.calculateDimensions({\n      parentWidth,\n      parentHeight,\n      isWideScreen,\n      mainSize,\n      doStack,\n    });\n    return dimensions;\n  };\n\n  calculateDimensions({\n    parentWidth,\n    parentHeight,\n    isWideScreen,\n    mainSize,\n    doStack,\n  }: {\n    parentWidth: number;\n    parentHeight: number;\n    isWideScreen: boolean;\n    mainSize: number;\n    doStack: boolean;\n  }): ComponentSizes {\n    if (doStack) {\n      return isWideScreen\n        ? {\n          mainHeight: Math.floor(parentHeight),\n          otherHeight: Math.floor(parentHeight),\n          mainWidth: Math.floor((mainSize / 100) * parentWidth),\n          otherWidth: Math.floor(((100 - mainSize) / 100) * parentWidth),\n        }\n        : {\n          mainHeight: Math.floor((mainSize / 100) * parentHeight),\n          otherHeight: Math.floor(((100 - mainSize) / 100) * parentHeight),\n          mainWidth: Math.floor(parentWidth),\n          otherWidth: Math.floor(parentWidth),\n        };\n    } else {\n      return {\n        mainHeight: Math.floor(parentHeight),\n        otherHeight: Math.floor(parentHeight),\n        mainWidth: Math.floor(parentWidth),\n        otherWidth: Math.floor(parentWidth),\n      };\n    }\n  }\n\n  handleOrientationChange() {\n    window.addEventListener('resize', this.handleResize.bind(this));\n    window.addEventListener('orientationchange', this.handleResize.bind(this));\n  }\n\n  setupResizeListener() {\n    this.handleResize();\n  }\n\n  orientation = window.innerHeight > window.innerWidth ? 'portrait' : 'landscape';\n\n  async joinRoom(data: {\n    socket: Socket;\n    roomName: string;\n    islevel: string;\n    member: string;\n    sec: string;\n    apiUserName: string;\n  }): Promise<ResponseJoinRoom | null> {\n    const { socket, roomName, islevel, member, sec, apiUserName } = data;\n\n    try {\n      const response: ResponseJoinRoom | null = await this.joinRoomClient.joinRoomClient({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n      });\n\n      return response;\n    } catch (error) {\n      console.log('Error joining room:', error);\n      throw new Error('Failed to join the room. Please check your connection and try again.');\n    }\n  }\n\n  async join_Room({\n    socket,\n    roomName,\n    islevel,\n    member,\n    sec,\n    apiUserName,\n    isLocal = false,\n  }: {\n    socket: Socket;\n    roomName: string;\n    islevel: string;\n    member: string;\n    sec: string;\n    apiUserName: string;\n    isLocal?: boolean;\n  }): Promise<void> {\n    let data: ResponseJoinRoom | null;\n\n    if (!isLocal) {\n      data = await this.joinRoom({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n      });\n    } else {\n      const localData: ResponseJoinLocalRoom = await this.joinLocalRoom.joinLocalRoom({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n        parameters: {\n          showAlert:\n            this.showAlert ||\n            (() => {\n              console.log('showAlert not defined');\n            }),\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\n          connectSocket: this.socketManager.connectSocket,\n          connectLocalSocket: this.socketManager.connectLocalSocket,\n          updateSocket: this.updateSocket,\n          updateLocalSocket: this.updateLocalSocket,\n          updateValidated: this.updateValidated,\n          updateApiUserName: this.updateApiUserName,\n          updateApiToken: this.updateApiToken,\n          updateLink: this.updateLink,\n          updateRoomName: this.updateRoomName,\n          updateMember: this.updateMember,\n        },\n        checkConnect:\n          this.localLink.length > 0 &&\n          this.connectMediaSFU === true &&\n          !this.link.value.includes('mediasfu.com'),\n        localLink: this.localLink,\n        joinMediaSFURoom: this.joinMediaSFURoom,\n      });\n\n      data = await createResponseJoinRoom({ localRoom: localData });\n    }\n\n    const updateAndComplete = async (data: ResponseJoinRoom) => {\n      // Update room parameters\n      try {\n        // Check if roomRecvIPs is not empty\n        if (!data.roomRecvIPs || data.roomRecvIPs.length === 0) {\n          data.roomRecvIPs = ['none'];\n\n          if (\n            this.link.value !== \"\" &&\n            this.link.value.includes(\"mediasfu.com\") &&\n            !isLocal\n          ) {\n            // Community Edition Only\n            await this.receiveAllPipedTransports.receiveAllPipedTransports({\n              community: true,\n              nsock: this.getUpdatedAllParams().socket,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n        }\n\n\n        this.updateRoomParametersClient.updateRoomParametersClient({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n            data: data,\n          },\n        });\n\n        if (data.isHost) {\n          this.updateIslevel('2');\n        } else {\n          // Issue with isHost for local room\n          if (islevel !== '2') {\n            this.updateIslevel('1');\n          }\n        }\n\n        if (data.secureCode && data.secureCode !== '') {\n          this.updateAdminPasscode(data.secureCode);\n        }\n\n        if (data.rtpCapabilities) {\n          try {\n            const device_ = await this.createDeviceClient.createDeviceClient({\n              rtpCapabilities: data.rtpCapabilities,\n            });\n\n            if (device_) {\n              this.device.next(device_);\n            }\n          } catch (error) {\n            console.error('Error creating device:', error);\n          }\n        }\n      } catch (error) {\n        console.error('Error in updateAndComplete:', error);\n      }\n    };\n\n    if (data && data.success) {\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && isLocal) {\n        this.roomData.next(data);\n        return;\n      } else if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\n        // Update roomData\n        if (this.roomData.value) {\n          // Updating only the recording and meeting room parameters\n          this.roomData.value.recordingParams = data.recordingParams;\n          this.roomData.value.meetingRoomParams = data.meetingRoomParams;\n          this.roomData.next(this.roomData.value);\n        } else {\n          this.roomData.next(data);\n        }\n      } else {\n        // Update roomData\n        this.roomData.next(data);\n        if (!this.link.value.includes('mediasfu.com')) {\n          this.roomData.value!.meetingRoomParams = data.meetingRoomParams;\n        }\n      }\n\n      await updateAndComplete(data);\n    } else {\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\n        // Join local room only\n        if (this.roomData.value) {\n          await updateAndComplete(this.roomData.value);\n        }\n        return;\n      }\n\n      // Might be a wrong room name or room is full or other error; check reason in data object if available\n      try {\n        if (this.showAlert && data?.reason) {\n          this.showAlert({\n            message: data.reason,\n            type: 'danger',\n            duration: 3000,\n          });\n        }\n      } catch (error) {\n        /* handle error */\n      }\n    }\n  }\n\n\n  onParticipantsFilterChange = (value: string): void => {\n    if (value && value.length > 0) {\n      this.filteredParticipants.next(\n        this.participants.value.filter((participant) =>\n          participant.name.toLowerCase().includes(value.toLowerCase()),\n        ),\n      );\n      this.participantsCounter.next(this.filteredParticipants.value.length);\n    } else {\n      this.filteredParticipants.next(this.participants.value);\n      this.participantsCounter.next(this.participants.value.length);\n    }\n  };\n\n  updateStatesToInitialValues = async () => {\n    const initialValues = initialValuesState as { [key: string]: any };\n    const updateFunctions = this.getAllParams() as unknown as {\n      [key: string]: (value: any) => void;\n    };\n\n    for (const key in initialValues) {\n      if (Object.prototype.hasOwnProperty.call(initialValues, key)) {\n        const updateFunctionName = `update${key.charAt(0).toUpperCase() + key.slice(1)}`;\n        const updateFunction = updateFunctions[updateFunctionName];\n\n        if (typeof updateFunction === 'function') {\n          try {\n            updateFunction(initialValues[key]);\n          } catch {\n            /* handle error */\n          }\n        }\n      }\n    }\n  };\n\n  faRecordVinyl = faRecordVinyl;\n  faPlayCircle = faPlayCircle;\n  faPauseCircle = faPauseCircle;\n  faStopCircle = faStopCircle;\n  faDotCircle = faDotCircle;\n  faCog = faCog;\n  faUsers = faUsers;\n  faMicrophone = faMicrophone;\n  faMicrophoneSlash = faMicrophoneSlash;\n  faVideo = faVideo;\n  faVideoSlash = faVideoSlash;\n  faSync = faSync;\n  faPhone = faPhone;\n  faShareAlt = faShareAlt;\n  faComments = faComments;\n  faChartBar = faChartBar;\n\n  onCloseMenuModal = () => {\n    this.updateIsMenuModalVisible(false);\n  };\n\n  onEventSettingsClose = () => {\n    this.updateIsSettingsModalVisible(false);\n  };\n\n  onCoHostClose = () => {\n    this.updateIsCoHostModalVisible(false);\n  };\n\n  onMediaSettingsClose = () => {\n    this.updateIsMediaSettingsModalVisible(false);\n  };\n\n  onDisplaySettingsClose = () => {\n    this.updateIsDisplaySettingsModalVisible(false);\n  };\n\n  onPollClose = () => {\n    this.updateIsPollModalVisible(false);\n  };\n\n  onBreakoutRoomsClose = () => {\n    this.updateIsBreakoutRoomsModalVisible(false);\n  };\n\n  onConfigureWhiteboardClose = () => {\n    this.updateIsConfigureWhiteboardModalVisible(false);\n  };\n\n  onMessagesClose = () => {\n    this.updateIsMessagesModalVisible(false);\n  };\n\n  onRecordingClose = () => {\n    this.updateIsRecordingModalVisible(false);\n  };\n\n  onParticipantsClose = () => {\n    this.updateIsParticipantsModalVisible(false);\n  };\n\n  onBackgroundClose = () => {\n    this.updateIsBackgroundModalVisible(false);\n  };\n\n  onConfirmExitClose = () => {\n    this.updateIsConfirmExitModalVisible(false);\n  };\n\n  onConfirmHereClose = () => {\n    this.updateIsConfirmHereModalVisible(false);\n  };\n\n  onSuppressConfirmHere = () => {\n    this.suppressConfirmHereForSession = true;\n  };\n\n  onScreenboardClose = () => {\n    this.updateIsScreenboardModalVisible(false);\n  };\n\n  onShareEventClose = () => {\n    this.updateIsShareEventModalVisible(false);\n  };\n\n  onAlertHide = () => {\n    this.updateAlertVisible(false);\n  };\n  recordTimerWidget = {\n    component: RecordTimerWidget,\n    injector: this.createInjector({ recordingProgressTime: this.recordingProgressTime.value }),\n  };\n\n  updateRecordTimerWidget = (\n    recordingProgressTime: string = this.recordingProgressTime.value,\n  ): { component: any; injector: Injector } => {\n    const recordTimerWidget = {\n      component: RecordTimerWidget,\n      injector: this.createInjector({ recordingProgressTime: recordingProgressTime }),\n    };\n\n    this.recordTimerWidget = { ...recordTimerWidget };\n\n    this.cdr.markForCheck();\n\n    return recordTimerWidget;\n  };\n\n  recordButton = [\n    {\n      icon: this.faRecordVinyl,\n      text: 'Record',\n      onPress: () => {\n        this.launchRecording.launchRecording({\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\n          showAlert: this.showAlert.bind(this),\n          stopLaunchRecord: this.stopLaunchRecord.value,\n          canLaunchRecord: this.canLaunchRecord.value,\n          recordingAudioSupport: this.recordingAudioSupport.value,\n          recordingVideoSupport: this.recordingVideoSupport.value,\n          updateCanRecord: this.updateCanRecord.bind(this),\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\n          recordStarted: this.recordStarted.value,\n          recordPaused: this.recordPaused.value,\n          localUIMode: this.localUIMode.value,\n        });\n      },\n      activeColor: () => this.touchControlNeutralColor(),\n      inActiveColor: () => this.touchControlNeutralColor(),\n      show: true,\n    },\n  ];\n\n  recordButtons: MainButtonAlt[] = [];\n\n  recordButtonsArray: MainButtonAlt[] = [\n    {\n      icon: this.faPlayCircle,\n      active: () => !this.recordPaused.value,\n      onPress: () =>\n        this.updateRecording.updateRecording({\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n        }),\n      activeColor: () => this.touchControlNeutralColor(),\n      inActiveColor: () => this.touchControlNeutralColor(),\n      alternateIcon: this.faPauseCircle,\n      show: () => true,\n    },\n    {\n      icon: this.faStopCircle,\n      active: () => false,\n      onPress: () =>\n        this.stopRecording.stopRecording({\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n        }),\n      activeColor: 'green',\n      inActiveColor: () => this.touchControlNeutralColor(),\n      show: () => true,\n    },\n    {\n      customComponent: () => this.updateRecordTimerWidget(),\n      show: () => true,\n      active: () => false,\n    },\n    {\n      icon: this.faDotCircle,\n      active: () => false,\n      onPress: () => console.log('Status pressed'),\n      activeColor: () => this.touchControlNeutralColor(),\n      inActiveColor: () => (this.recordPaused.value ? 'yellow' : 'red'),\n      show: () => true,\n    },\n    {\n      icon: this.faCog,\n      active: () => false,\n      onPress: () =>\n        this.launchRecording.launchRecording({\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\n          showAlert: this.showAlert.bind(this),\n          stopLaunchRecord: this.stopLaunchRecord.value,\n          canLaunchRecord: this.canLaunchRecord.value,\n          recordingAudioSupport: this.recordingAudioSupport.value,\n          recordingVideoSupport: this.recordingVideoSupport.value,\n          updateCanRecord: this.updateCanRecord.bind(this),\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\n          recordStarted: this.recordStarted.value,\n          recordPaused: this.recordPaused.value,\n          localUIMode: this.localUIMode.value,\n        }),\n      activeColor: 'green',\n      inActiveColor: () => this.touchControlNeutralColor(),\n      show: () => true,\n    },\n  ];\n\n  async updateRecordButtons() {\n    const recordButtons = this.recordButtonsArray.map((button) => {\n      return {\n        ...button,\n        active: typeof button.active === 'function' ? button.active() : button.active,\n        show: typeof button.show === 'function' ? button.show() : button.show,\n        customComponent: button.customComponent\n          ? typeof button.customComponent === 'function'\n            ? button.customComponent()\n            : button.customComponent\n          : undefined,\n        activeColor:\n          typeof button.activeColor === 'function' ? button.activeColor() : button.activeColor,\n        inActiveColor:\n          typeof button.inActiveColor === 'function'\n            ? button.inActiveColor()\n            : button.inActiveColor,\n      };\n    });\n    this.recordButtons = [...recordButtons];\n    await this.updateMenuRecordWidget(recordButtons);\n    this.updateControlBroadcastButtons();\n\n    this.cdr.markForCheck();\n  }\n\n  // Create instances of the custom widgets\n  private buildMessageWidget() {\n    return {\n      component: MessageWidget,\n      injector: this.createInjector({\n        icon: this.faComments,\n        showBadge: this.showMessagesBadge.value,\n        badgeValue: 1,\n        iconColor: this.touchControlNeutralColor(),\n      }),\n    };\n  }\n\n  messageWidget = this.buildMessageWidget();\n\n  menuRecordWidget = {\n    component: MenuRecordWidget,\n    injector: this.createInjector({\n      buttons: this.recordButtons,\n      showAspect: true,\n      direction: 'horizontal',\n    }),\n  };\n\n  updateMenuRecordWidget = (recordButtons: MainButtonAlt[] = this.recordButtons): any => {\n    const menuRecordWidget = {\n      component: MenuRecordWidget,\n      injector: this.createInjector({\n        buttons: recordButtons,\n        showAspect: true,\n        direction: 'horizontal',\n      }),\n    };\n\n    this.menuRecordWidget = { ...menuRecordWidget };\n\n    this.cdr.markForCheck();\n\n    return menuRecordWidget;\n  };\n\n  private buildMenuParticipantsWidget(count: number = this.participantsCounter.value) {\n    return {\n      component: MenuParticipantsWidget,\n      injector: this.createInjector({\n        icon: this.faUsers,\n        participantsCounter: count,\n        iconColor: this.touchControlNeutralColor(),\n      }),\n    };\n  }\n\n  menuParticipantsWidget = this.buildMenuParticipantsWidget();\n\n  updateMenuParticipantsWidget = (count: number = this.participantsCounter.value): any => {\n    const menuParticipantsWidget = this.buildMenuParticipantsWidget(count);\n\n    this.menuParticipantsWidget = { ...menuParticipantsWidget };\n\n    this.cdr.markForCheck();\n\n    return menuParticipantsWidget;\n  };\n\n  controlBroadcastButtons: ButtonTouch[] = [];\n\n  updateControlBroadcastButtons() {\n    this.controlBroadcastButtons = this.controlBroadcastButtonsArray.map((button) => {\n      return {\n        ...button,\n        show: typeof button.show === 'function' ? button.show() : button.show,\n        active: typeof button.active === 'function' ? button.active() : button.active,\n        customComponent: button.customComponent\n          ? typeof button.customComponent === 'function'\n            ? button.customComponent()\n            : button.customComponent\n          : undefined,\n      };\n    });\n  }\n\n  controlBroadcastButtonsArray: ButtonTouch[] = [\n    {\n      icon: faMoon,\n      alternateIcon: faSun,\n      active: () => this.modernThemeDarkMode.value,\n      onPress: () => this.updateModernThemeDarkMode(!this.modernThemeDarkMode.value),\n      activeColor: 'rgba(255,255,255,0.9)',\n      inActiveColor: 'rgba(0,0,0,0.9)',\n      show: () => true,\n    },\n    {\n      icon: this.faUsers,\n      active: true,\n      alternateIcon: this.faUsers,\n      onPress: () =>\n        this.launchParticipants.launchParticipants({\n          updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\n          isParticipantsModalVisible: this.isParticipantsModalVisible.value,\n        }),\n      backgroundColor: { default: 'transparent' },\n      activeColor: () => this.touchControlNeutralColor(),\n      inActiveColor: () => this.touchControlNeutralColor(),\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faShareAlt,\n      active: true,\n      alternateIcon: this.faShareAlt,\n      onPress: () => this.updateIsShareEventModalVisible(!this.isShareEventModalVisible.value),\n      backgroundColor: { default: 'transparent' },\n      activeColor: () => this.touchControlNeutralColor(),\n      inActiveColor: () => this.touchControlNeutralColor(),\n      show: () => true,\n    },\n    {\n      customComponent: () => this.messageWidget,\n      onPress: () =>\n        this.launchMessages.launchMessages({\n          updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\n          isMessagesModalVisible: this.isMessagesModalVisible.value,\n        }),\n      show: () => true,\n    },\n    {\n      icon: this.faSync,\n      active: true,\n      alternateIcon: this.faSync,\n      onPress: () =>\n        this.switchVideoAlt.switchVideoAlt({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      backgroundColor: { default: 'transparent' },\n      activeColor: () => this.touchControlNeutralColor(),\n      inActiveColor: () => this.touchControlNeutralColor(),\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faVideoSlash,\n      alternateIcon: this.faVideo,\n      active: () => this.videoActive.value,\n      onPress: () =>\n        this.clickVideo.clickVideo({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      show: () => this.islevel.value == '2',\n      activeColor: 'green',\n      inActiveColor: 'red',\n    },\n    {\n      icon: this.faMicrophoneSlash,\n      alternateIcon: this.faMicrophone,\n      active: () => this.micActive.value,\n      onPress: () =>\n        this.clickAudio.clickAudio({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faPhone,\n      active: this.endCallActive.value,\n      onPress: () =>\n        this.launchConfirmExit.launchConfirmExit({\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      show: () => true,\n    },\n    {\n      icon: this.faPhone,\n      active: this.endCallActive.value,\n      onPress: () => console.log('End Call pressed'),\n      activeColor: 'transparent',\n      inActiveColor: 'transparent',\n      backgroundColor: { default: 'transparent' },\n      show: () => false,\n    },\n  ];\n\n  async connect_Socket(\n    apiUserName: string,\n    token: string,\n    skipSockets: boolean = false\n  ): Promise<Socket | null> {\n\n    const socketDefault = this.socket.value;\n    const socketAlt =\n      this.connectMediaSFU && this.localSocket!.value && this.localSocket!.value.id\n        ? this.localSocket!.value\n        : socketDefault;\n\n    if (this.socket.value && this.socket.value.id) {\n      if (!skipSockets) {\n        // Event listeners on socketDefault\n        socketDefault.on('disconnect', async () => {\n          await this.disconnect.disconnect({\n            showAlert: this.showAlert.bind(this),\n            redirectURL: this.redirectURL.value,\n            onWeb: true,\n            updateValidated: this.updateValidated.bind(this),\n          });\n          if (this.videoAlreadyOn.value) {\n            await this.clickVideo.clickVideo({\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n          if (this.audioAlreadyOn.value) {\n            await this.clickAudio.clickAudio({\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n\n          await this.closeAndReset();\n        });\n\n        socketDefault.on('allMembers', async (membersData: AllMembersData) => {\n          if (membersData) {\n            await this.allMembers.allMembers({\n              apiUserName: apiUserName,\n              apiKey: '', //not recommended - use apiToken instead. Use for testing/development only\n              apiToken: token,\n              members: membersData.members,\n              requestss: membersData.requests ? membersData.requests : this.requestList.value,\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\n              coHostRes: membersData.coHostResponsibilities\n                ? membersData.coHostResponsibilities\n                : this.coHostResponsibility.value,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              consume_sockets: this.consume_sockets.value,\n            });\n          }\n        });\n\n        socketDefault.on('allMembersRest', async (membersData: AllMembersRestData) => {\n          if (membersData) {\n            await this.allMembersRest.allMembersRest({\n              apiUserName: apiUserName,\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\n              members: membersData.members,\n              apiToken: token,\n              settings: membersData.settings,\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\n              coHostRes: membersData.coHostResponsibilities\n                ? membersData.coHostResponsibilities\n                : this.coHostResponsibility.value,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              consume_sockets: this.consume_sockets.value,\n            });\n          }\n        });\n\n        socketDefault.on('personJoined', async ({ name }: { name: string }) => {\n          this.personJoined.personJoined({\n            name,\n            showAlert: this.showAlert.bind(this),\n          });\n        });\n\n\n        socketDefault.on('ban', async ({ name }: { name: string }) => {\n          await this.banParticipant.banParticipant({\n            name,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        });\n\n        socketDefault.on(\n          'producer-media-paused',\n          async ({\n            producerId,\n            kind,\n            name,\n          }: {\n            producerId: string;\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\n            name: string;\n          }) => {\n            await this.producerMediaPaused.producerMediaPaused({\n              producerId,\n              kind,\n              name,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          },\n        );\n\n        socketDefault.on(\n          'producer-media-resumed',\n          async ({ kind, name }: { kind: 'audio'; name: string }) => {\n            await this.producerMediaResumed.producerMediaResumed({\n              kind,\n              name,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          },\n        );\n\n        socketDefault.on(\n          'producer-media-closed',\n          async ({\n            producerId,\n            kind,\n          }: {\n            producerId: string;\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\n          }) => {\n            if (producerId && kind) {\n              await this.producerMediaClosed.producerMediaClosed({\n                producerId,\n                kind,\n                parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              });\n            }\n          },\n        );\n\n        socketDefault.on('meetingEnded', async () => {\n          await this.meetingEnded.meetingEnded({\n            showAlert: this.showAlert.bind(this),\n            redirectURL: this.redirectURL.value,\n            onWeb: true,\n            eventType: this.eventType.value,\n            updateValidated: this.updateValidated.bind(this),\n          });\n\n          if (this.videoAlreadyOn.value) {\n            await this.clickVideo.clickVideo({\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          }\n          if (this.audioAlreadyOn.value) {\n            await this.clickAudio.clickAudio({\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          }\n\n          await this.closeAndReset();\n        });\n\n        socketDefault.on('disconnectUserSelf', async () => {\n          await this.disconnectUserSelf.disconnectUserSelf({\n            socket: socketDefault,\n            member: this.member.value,\n            roomName: this.roomName.value,\n          });\n        });\n\n        socketDefault.on('receiveMessage', async ({ message }: { message: Message }) => {\n          await this.receiveMessage.receiveMessage({\n            message,\n            messages: this.messages.value,\n            participantsAll: this.participantsAll.value,\n            member: this.member.value,\n            eventType: this.eventType.value,\n            islevel: this.islevel.value,\n            coHost: this.coHost.value,\n            updateMessages: this.updateMessages.bind(this),\n            updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'meetingTimeRemaining',\n          async ({ timeRemaining }: { timeRemaining: number }) => {\n            await this.meetingTimeRemaining.meetingTimeRemaining({\n              timeRemaining,\n              showAlert: this.showAlert.bind(this),\n              eventType: this.eventType.value,\n            });\n          },\n        );\n\n        socketDefault.on('meetingStillThere', async () => {\n          if (this.suppressConfirmHereForSession) {\n            return;\n          }\n\n          this.meetingStillThere.meetingStillThere({\n            updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'updateConsumingDomains',\n          async ({ domains, alt_domains }: UpdateConsumingDomainsData) => {\n            await this.updateConsumingDomains.updateConsumingDomains({\n              domains,\n              alt_domains,\n              apiUserName,\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\n              apiToken: token,\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          },\n        );\n\n      }\n\n      if (skipSockets) {\n        // Remove specific event listeners from socketDefault and socketAlt\n        const events = [\n          'roomRecordParams',\n          'startRecords',\n          'reInitiateRecording',\n          'RecordingNotice',\n          'timeLeftRecording',\n          'stoppedRecording',\n        ];\n        events.forEach((event) => {\n          socketDefault.off(event);\n          socketAlt.off(event);\n        });\n      }\n\n      socketAlt.on(\n        'roomRecordParams',\n        async ({ recordParams }: { recordParams: RecordParams }) => {\n          this.roomRecordParams.roomRecordParams({\n            recordParams,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        },\n      );\n\n      socketAlt.on('startRecords', async () => {\n        await this.startRecords.startRecords({\n          roomName: this.roomName.value,\n          member: this.member.value,\n          socket: socketAlt,\n        });\n      });\n\n      socketAlt.on('reInitiateRecording', async () => {\n        await this.reInitiateRecording.reInitiateRecording({\n          roomName: this.roomName.value,\n          member: this.member.value,\n          socket: socketAlt,\n          adminRestrictSetting: this.adminRestrictSetting.value,\n        });\n      });\n\n      socketAlt.on(\n        'RecordingNotice',\n        async ({ state, userRecordingParam, pauseCount, timeDone }: RecordingNoticeData) => {\n          await this.recordingNotice.RecordingNotice({\n            state,\n            userRecordingParam,\n            pauseCount,\n            timeDone,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        },\n      );\n\n      socketAlt.on('timeLeftRecording', async ({ timeLeft }: { timeLeft: number }) => {\n        this.timeLeftRecording.timeLeftRecording({\n          timeLeft,\n          showAlert: this.showAlert.bind(this),\n        });\n      });\n\n      socketAlt.on(\n        'stoppedRecording',\n        async ({ state, reason }: { state: string; reason: string }) => {\n          await this.stoppedRecording.stoppedRecording({\n            state,\n            reason,\n            showAlert: this.showAlert.bind(this),\n          });\n        },\n      );\n\n      if (this.localLink !== \"\" && socketDefault && !skipSockets) {\n        await this.join_Room({\n          socket: socketDefault,\n          roomName: this.roomName.value,\n          islevel: this.islevel.value,\n          member: this.member.value,\n          sec: token,\n          apiUserName: apiUserName,\n          isLocal: true,\n        });\n      }\n\n      // Check if localSocket has changed\n      const localChanged =\n        this.localSocket!.value && this.localSocket!.value.id && this.localSocket!.value.id !== socketAlt.id;\n\n      if (!skipSockets && localChanged) {\n        // Re-call connect_Socket with skipSockets = true\n        await this.connect_Socket(apiUserName, token, true);\n        await sleep({ ms: 1000 })\n        this.updateIsLoadingModalVisible(false);\n        return socketDefault;\n      } else {\n        if (this.link.value !== '' && this.link.value.includes('mediasfu.com')) {\n          // Token might be different for local room\n          const token = this.apiToken.value;\n          await this.join_Room({\n            socket:\n              this.connectMediaSFU && socketAlt && socketAlt.id ? socketAlt : socketDefault,\n            roomName: this.roomName.value,\n            islevel: this.islevel.value,\n            member: this.member.value,\n            sec: token,\n            apiUserName: apiUserName,\n          });\n        }\n\n        await this.receiveRoomMessages.receiveRoomMessages({\n          socket: socketDefault,\n          roomName: this.roomName.value,\n          updateMessages: this.updateMessages.bind(this),\n        });\n\n        if (!skipSockets) {\n          await this.prepopulateUserMedia.prepopulateUserMedia({\n            name: this.hostLabel.value,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        }\n\n        return socketDefault;\n      }\n    } else {\n      return null;\n    }\n  }\n}\n","import {\n  Component,\n  HostListener,\n  Injector,\n  ChangeDetectorRef,\n  Input,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CookieService } from 'ngx-cookie-service';\nimport { MediasfuUICustomOverrides } from '../../@types/ui-overrides.types';\nimport { UIOverrideResolverService } from '../../services/ui-override-resolver.service';\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\nimport { Socket } from 'socket.io-client';\nimport {\n  faPlayCircle,\n  faPauseCircle,\n  faStopCircle,\n  faDotCircle,\n  faRecordVinyl,\n  faCog,\n  faUsers,\n  faClock,\n  faUserPlus,\n  faTools,\n  faDesktop,\n  faPoll,\n  faUserFriends,\n  faChalkboardTeacher,\n  faMicrophone,\n  faMicrophoneSlash,\n  faVideo,\n  faVideoSlash,\n  faPhone,\n  faBars,\n  faComments,\n  faChartBar,\n  faSun,\n  faMoon,\n} from '@fortawesome/free-solid-svg-icons';\n\nimport { initialValuesState } from '../../methods/utils/initial-values.util';\n\nimport { MainAspectComponent } from '../display-components/main-aspect-component/main-aspect-component.component';\nimport { ControlButtonsComponent } from '../display-components/control-buttons-component/control-buttons-component.component';\nimport { ControlButtonsAltComponent } from '../display-components/control-buttons-alt-component/control-buttons-alt-component.component';\nimport { OtherGridComponent } from '../display-components/other-grid-component/other-grid-component.component';\nimport { MainScreenComponent } from '../display-components/main-screen-component/main-screen-component.component';\nimport { MainGridComponent } from '../display-components/main-grid-component/main-grid-component.component';\nimport { SubAspectComponent } from '../display-components/sub-aspect-component/sub-aspect-component.component';\nimport { MainContainerComponent } from '../display-components/main-container-component/main-container-component.component';\nimport { ModernAlertComponent } from '../../modern/display-components/modern-alert.component';\nimport { ModernLoadingModalComponent } from '../../modern/display-components/modern-loading-modal.component';\nimport { ModernMenuModalComponent } from '../../modern/modal-components/modern-menu-modal.component';\nimport {\n  WelcomePage,\n  WelcomePageOptions,\n} from '../misc-components/welcome-page/welcome-page.component';\n\nimport { BackgroundModal } from '../background-components/background-modal/background-modal.component';\nimport { BreakoutRoomsModal } from '../breakout-components/breakout-rooms-modal.component';\nimport { ConfigureWhiteboardModal } from '../whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component';\nimport { ModernCoHostModalComponent } from '../../modern/modal-components/modern-co-host-modal.component';\nimport { ModernConfirmExitModalComponent } from '../../modern/modal-components/modern-confirm-exit-modal.component';\nimport { ModernConfirmHereModalComponent } from '../../modern/modal-components/modern-confirm-here-modal.component';\nimport { ModernDisplaySettingsModalComponent } from '../../modern/modal-components/modern-display-settings-modal.component';\nimport { ModernEventSettingsModalComponent } from '../../modern/modal-components/modern-event-settings-modal.component';\nimport { ModernMediaSettingsModalComponent } from '../../modern/modal-components/modern-media-settings-modal.component';\nimport { ModernMessagesModalComponent } from '../../modern/modal-components/modern-messages-modal.component';\nimport { ModernParticipantsModalComponent } from '../../modern/modal-components/modern-participants-modal.component';\nimport { ModernRecordingModalComponent } from '../../modern/modal-components/modern-recording-modal.component';\nimport { ModernRequestsModalComponent } from '../../modern/modal-components/modern-requests-modal.component';\nimport { ModernPollModalComponent } from '../../modern/modal-components/modern-poll-modal.component';\nimport { ModernShareEventModalComponent } from '../../modern/modal-components/modern-share-event-modal.component';\nimport { ModernWaitingRoomModalComponent } from '../../modern/modal-components/modern-waiting-room-modal.component';\nimport { Whiteboard } from '../whiteboard-components/whiteboard/whiteboard.component';\nimport { Screenboard } from '../screenboard-components/screenboard/screenboard.component';\nimport { ScreenboardModal } from '../screenboard-components/screenboard-modal/screenboard-modal.component';\nimport { WithOverrideDirective } from '../../directives/with-override.directive';\n// pagination and display of media (samples)\nimport { FlexibleGrid } from '../display-components/flexible-grid/flexible-grid.component';\nimport { FlexibleVideo } from '../display-components/flexible-video/flexible-video.component';\nimport { AudioGrid } from '../display-components/audio-grid/audio-grid.component';\nimport { ModernParticipantsCounterBadgeComponent } from '../../modern/display-components/modern-participants-counter-badge.component';\nimport { ModernPaginationComponent } from '../../modern/display-components/modern-pagination.component';\n\nimport { MenuWidget } from '../display-components/control-widgets/menu-widget.component';\nimport { MessageWidget } from '../display-components/control-widgets/message-widget.component';\nimport { MenuRecordWidget } from '../display-components/control-widgets/menu-record-widget.component';\nimport { RecordTimerWidget } from '../display-components/control-widgets/record-timer-widget.component';\nimport { MenuParticipantsWidget } from '../display-components/control-widgets/menu-participants-widget.component';\nimport { ScreenShareWidget } from '../display-components/control-widgets/screenshare-widget.component';\n\nimport {\n  ResponseJoinRoom,\n  ResponseJoinLocalRoom,\n  CoHostResponsibility,\n  EventType,\n  Participant,\n  ConsumeSocket,\n  MeetingRoomParams,\n  VidCons,\n  HParamsType,\n  VParamsType,\n  ScreenParamsType,\n  AParamsType,\n  UserRecordingParams,\n  Stream,\n  AudioDecibels,\n  ScreenState,\n  GridSizes,\n  CustomMediaComponent,\n  Message,\n  WaitingRoomParticipant,\n  ComponentSizes,\n  Transport as TransportType,\n  Shape,\n  Poll,\n  BreakoutParticipant,\n  WhiteboardUser,\n  Request,\n  AllMembersData,\n  AllMembersRestData,\n  BreakoutRoomUpdatedData,\n  AllWaitingRoomMembersData,\n  MainButtonAlt,\n  MainCustomButton,\n  RecordParams,\n  SeedData,\n  UpdatedCoHostData,\n  Settings,\n  UpdateConsumingDomainsData,\n  RecordingNoticeData,\n  HostRequestResponseData,\n  PollUpdatedData,\n  PreJoinPageOptions,\n  CreateMediaSFURoomOptions,\n  JoinMediaSFURoomOptions,\n  JoinRoomOnMediaSFUType,\n  CreateRoomOnMediaSFUType,\n} from '../../@types/types';\nimport { createResponseJoinRoom } from '../../methods/utils/create-response-join-room.util';\n\n//import methods for control (samples)\n// Import methods for control (samples)\nimport { LaunchMenuModal } from '../../methods/menu-methods/launch-menu-modal.service';\nimport { LaunchRecording } from '../../methods/recording-methods/launch-recording.service';\nimport { StartRecording } from '../../methods/recording-methods/start-recording.service';\nimport { ConfirmRecording } from '../../methods/recording-methods/confirm-recording.service';\nimport { LaunchWaiting } from '../../methods/waiting-methods/launch-waiting.service';\nimport { launchCoHost } from '../../methods/co-host-methods/launch-co-host.service';\nimport { LaunchMediaSettings } from '../../methods/media-settings-methods/launch-media-settings.service';\nimport { LaunchDisplaySettings } from '../../methods/display-settings-methods/launch-display-settings.service';\nimport { LaunchSettings } from '../../methods/settings-methods/launch-settings.service';\nimport { LaunchRequests } from '../../methods/requests-methods/launch-requests.service';\nimport { LaunchParticipants } from '../../methods/participants-methods/launch-participants.service';\nimport { LaunchMessages } from '../../methods/message-methods/launch-messages.service';\nimport { LaunchConfirmExit } from '../../methods/exit-methods/launch-confirm-exit.service';\n\nimport { LaunchPoll } from '../../methods/polls-methods/launch-poll.service';\nimport { LaunchBreakoutRooms } from '../../methods/breakout-room-methods/launch-breakout-rooms.service';\nimport { LaunchConfigureWhiteboard } from '../../methods/whiteboard-methods/launch-configure-whiteboard.service';\n\n// mediasfu functions -- examples\nimport { SocketManager } from '../../sockets/socket-manager.service';\nimport { JoinRoomClient } from '../../producer-client/producer-client-emits/join-room-client.service';\nimport { JoinLocalRoom } from '../../producers/producer-emits/join-local-room.service';\nimport { UpdateRoomParametersClient } from '../../producer-client/producer-client-emits/update-room-parameters-client.service';\nimport { CreateDeviceClient } from '../../producer-client/producer-client-emits/create-device-client.service';\n\nimport { ClickVideo } from '../../methods/stream-methods/click-video.service';\nimport { ClickAudio } from '../../methods/stream-methods/click-audio.service';\nimport { ClickScreenShare } from '../../methods/stream-methods/click-screen-share.service';\nimport { StreamSuccessVideo } from '../../consumers/stream-success-video.service';\nimport { StreamSuccessAudio } from '../../consumers/stream-success-audio.service';\nimport { StreamSuccessScreen } from '../../consumers/stream-success-screen.service';\nimport { StreamSuccessAudioSwitch } from '../../consumers/stream-success-audio-switch.service';\nimport { CheckPermission } from '../../consumers/check-permission.service';\n\n// mediasfu functions\nimport { UpdateMiniCardsGrid } from '../../consumers/update-mini-cards-grid.service';\nimport { MixStreams } from '../../consumers/mix-streams.service';\nimport { DispStreams } from '../../consumers/disp-streams.service';\nimport { StopShareScreen } from '../../consumers/stop-share-screen.service';\nimport { CheckScreenShare } from '../../consumers/check-screen-share.service';\nimport { StartShareScreen } from '../../consumers/start-share-screen.service';\nimport { RequestScreenShare } from '../../consumers/request-screen-share.service';\nimport { ReorderStreams } from '../../consumers/reorder-streams.service';\nimport { PrepopulateUserMedia } from '../../consumers/prepopulate-user-media.service';\nimport { GetVideos } from '../../consumers/get-videos.service';\nimport { RePort } from '../../consumers/re-port.service';\nimport { Trigger } from '../../consumers/trigger.service';\nimport { ConsumerResume } from '../../consumers/consumer-resume.service';\nimport { ConnectSendTransportAudio } from '../../consumers/connect-send-transport-audio.service';\nimport { ConnectSendTransportVideo } from '../../consumers/connect-send-transport-video.service';\nimport { ConnectSendTransportScreen } from '../../consumers/connect-send-transport-screen.service';\nimport { ProcessConsumerTransports } from '../../consumers/process-consumer-transports.service';\nimport { ResumePauseStreams } from '../../consumers/resume-pause-streams.service';\nimport { Readjust } from '../../consumers/readjust.service';\nimport { CheckGrid } from '../../consumers/check-grid.service';\nimport { GetEstimate } from '../../consumers/get-estimate.service';\nimport { CalculateRowsAndColumns } from '../../consumers/calculate-rows-and-columns.service';\nimport { AddVideosGrid } from '../../consumers/add-videos-grid.service';\nimport { OnScreenChanges } from '../../consumers/on-screen-changes.service';\nimport { sleep } from '../../methods/utils/sleep.util';\nimport { ChangeVids } from '../../consumers/change-vids.service';\nimport { CompareActiveNames } from '../../consumers/compare-active-names.service';\nimport { CompareScreenStates } from '../../consumers/compare-screen-states.service';\nimport { CreateSendTransport } from '../../consumers/create-send-transport.service';\nimport { ResumeSendTransportAudio } from '../../consumers/resume-send-transport-audio.service';\nimport { ReceiveAllPipedTransports } from '../../consumers/receive-all-piped-transports.service';\nimport { DisconnectSendTransportVideo } from '../../consumers/disconnect-send-transport-video.service';\nimport { DisconnectSendTransportAudio } from '../../consumers/disconnect-send-transport-audio.service';\nimport { DisconnectSendTransportScreen } from '../../consumers/disconnect-send-transport-screen.service';\nimport { ConnectSendTransport } from '../../consumers/connect-send-transport.service';\nimport { GetPipedProducersAlt } from '../../consumers/get-piped-producers-alt.service';\nimport { SignalNewConsumerTransport } from '../../consumers/signal-new-consumer-transport.service';\nimport { ConnectRecvTransport } from '../../consumers/connect-recv-transport.service';\nimport { ReUpdateInter } from '../../consumers/re-update-inter.service';\nimport { UpdateParticipantAudioDecibels } from '../../consumers/update-participant-audio-decibels.service';\nimport { CloseAndResize } from '../../consumers/close-and-resize.service';\nimport { AutoAdjust } from '../../consumers/auto-adjust.service';\nimport { SwitchUserVideoAlt } from '../../consumers/switch-user-video-alt.service';\nimport { SwitchUserVideo } from '../../consumers/switch-user-video.service';\nimport { SwitchUserAudio } from '../../consumers/switch-user-audio.service';\nimport { ReceiveRoomMessages } from '../../consumers/receive-room-messages.service';\nimport { FormatNumber } from '../../methods/utils/format-number.service';\nimport { ConnectIps } from '../../consumers/connect-ips.service';\nimport { ConnectLocalIps } from '../../consumers/connect-local-ips.service';\n\nimport { PollUpdated } from '../../methods/polls-methods/poll-updated.service';\nimport { HandleCreatePoll } from '../../methods/polls-methods/handle-create-poll.service';\nimport { HandleVotePoll } from '../../methods/polls-methods/handle-vote-poll.service';\nimport { HandleEndPoll } from '../../methods/polls-methods/handle-end-poll.service';\n\nimport { BreakoutRoomUpdated } from '../../methods/breakout-room-methods/breakout-room-updated.service';\n\nimport { StartMeetingProgressTimer } from '../../methods/utils/meeting-timer/start-meeting-progress-timer.service';\nimport { UpdateRecording } from '../../methods/recording-methods/update-recording.service';\nimport { StopRecording } from '../../methods/recording-methods/stop-recording.service';\n\nimport { UserWaiting } from '../../producers/socket-receive-methods/user-waiting.service';\nimport { PersonJoined } from '../../producers/socket-receive-methods/person-joined.service';\nimport { AllWaitingRoomMembers } from '../../producers/socket-receive-methods/all-waiting-room-members.service';\nimport { RoomRecordParams } from '../../producers/socket-receive-methods/room-record-params.service';\nimport { BanParticipant } from '../../producers/socket-receive-methods/ban-participant.service';\nimport { UpdatedCoHost } from '../../producers/socket-receive-methods/updated-co-host.service';\nimport { ParticipantRequested } from '../../producers/socket-receive-methods/participant-requested.service';\nimport { ScreenProducerId } from '../../producers/socket-receive-methods/screen-producer-id.service';\nimport { UpdateMediaSettings } from '../../producers/socket-receive-methods/update-media-settings.service';\nimport { ProducerMediaPaused } from '../../producers/socket-receive-methods/producer-media-paused.service';\nimport { ProducerMediaResumed } from '../../producers/socket-receive-methods/producer-media-resumed.service';\nimport { ProducerMediaClosed } from '../../producers/socket-receive-methods/producer-media-closed.service';\nimport { ControlMediaHost } from '../../producers/socket-receive-methods/control-media-host.service';\nimport { MeetingEnded } from '../../producers/socket-receive-methods/meeting-ended.service';\nimport { DisconnectUserSelf } from '../../producers/socket-receive-methods/disconnect-user-self.service';\nimport { ReceiveMessage } from '../../producers/socket-receive-methods/receive-message.service';\nimport { MeetingTimeRemaining } from '../../producers/socket-receive-methods/meeting-time-remaining.service';\nimport { MeetingStillThere } from '../../producers/socket-receive-methods/meeting-still-there.service';\nimport { StartRecords } from '../../producers/socket-receive-methods/start-records.service';\nimport { ReInitiateRecording } from '../../producers/socket-receive-methods/re-initiate-recording.service';\nimport { GetDomains } from '../../producers/socket-receive-methods/get-domains.service';\nimport { UpdateConsumingDomains } from '../../producers/socket-receive-methods/update-consuming-domains.service';\nimport { RecordingNotice } from '../../producers/socket-receive-methods/recording-notice.service';\nimport { TimeLeftRecording } from '../../producers/socket-receive-methods/time-left-recording.service';\nimport { StoppedRecording } from '../../producers/socket-receive-methods/stopped-recording.service';\nimport { HostRequestResponse } from '../../producers/socket-receive-methods/host-request-response.service';\nimport { AllMembers } from '../../producers/socket-receive-methods/all-members.service';\nimport { AllMembersRest } from '../../producers/socket-receive-methods/all-members-rest.service';\nimport { Disconnect } from '../../producers/socket-receive-methods/disconnect.service';\n\nimport { CaptureCanvasStream } from '../../methods/whiteboard-methods/capture-canvas-stream.service';\nimport { ResumePauseAudioStreams } from '../../consumers/resume-pause-audio-streams.service';\nimport { ProcessConsumerTransportsAudio } from '../../consumers/process-consumer-transports-audio.service';\n\nimport { types } from 'mediasoup-client';\ntype Device = types.Device;\ntype Producer = types.Producer;\ntype ProducerOptions = types.ProducerOptions;\ntype RtpCapabilities = types.RtpCapabilities;\ntype Transport = types.Transport;;\nimport { SelfieSegmentation } from '@mediapipe/selfie_segmentation';\n\nexport type MediasfuWebinarOptions = {\n  PrejoinPage?: (options: PreJoinPageOptions | WelcomePageOptions) => HTMLElement;\n  localLink?: string;\n  connectMediaSFU?: boolean;\n  credentials?: { apiUserName: string; apiKey: string };\n  useLocalUIMode?: boolean;\n  seedData?: SeedData;\n  useSeed?: boolean;\n  imgSrc?: string;\n  sourceParameters?: { [key: string]: any };\n  updateSourceParameters?: (data: { [key: string]: any }) => void;\n  returnUI?: boolean;\n  noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\n  joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n  createMediaSFURoom?: CreateRoomOnMediaSFUType;\n};\n\n/**\n * Component for managing webinars in the MediaSFU environment.\n *\n * @selector app-mediasfu-webinar\n * @standalone true\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]\n *\n * @template\n * This component's template includes:\n * - A conditional PrejoinPage displayed before main content for user preparation.\n * - The main screen layout with flexible configurations for video, control buttons, and layout grids.\n * - Modals for participant, settings, polling, and media interactions.\n *\n * @input {any} PrejoinPage - Component for the prejoin page, defaults to `WelcomePage`.\n * @input {MediasfuWebinarOptions} options - Configuration options for the component.\n * @input {boolean} connectMediaSFU - Flag to enable/disable connection to the MediaSFU server.\n * @input {string} localLink - Local link for the Community Edition server.\n * @input {{ apiUserName: string; apiKey: string }} credentials - API credentials for secure access.\n * @input {boolean} useLocalUIMode - Flag to toggle local UI settings.\n * @input {SeedData} seedData - Seed data for initializing the component with specific configurations.\n * @input {boolean} useSeed - Enable/disable use of seed data.\n * @input {string} imgSrc - URL for branding images or logos.\n * @input {object} sourceParameters - Additional parameters for the source.\n * @input {Function} updateSourceParameters - Function to update the source parameters.\n * @input {boolean} returnUI - Flag to return the UI elements.\n * @input {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} noUIPreJoinOptions - Options for the prejoin page without UI.\n * @input {JoinRoomOnMediaSFUType} joinMediaSFURoom - Function to join a room on MediaSFU.\n * @input {CreateRoomOnMediaSFUType} createMediaSFURoom - Function to create a room on MediaSFU.\n * @input {any} customVideoCard - Custom component to replace the default VideoCard component.\n * @input {any} customAudioCard - Custom component to replace the default AudioCard component.\n * @input {any} customMiniCard - Custom component to replace the default MiniCard component.\n * @input {any} customMainComponent - Custom component that provides complete control over the main UI, bypassing default MediaSFU styling.\n *\n * @property {string} title - The title of the component, defaults to \"MediaSFU-Webinar\".\n *\n * @styles\n * Component-specific styles with full-screen properties and customizable modal colors.\n *\n * @providers [CookieService] - Utilized for session or user state management within the component.\n *\n * @class MediasfuWebinar\n * @implements OnInit, OnDestroy\n *\n * @method ngOnInit - Initializes session settings, user interfaces, and modals as necessary.\n * @method ngOnDestroy - Cleans up event listeners and intervals to prevent memory leaks.\n *\n * @example\n * ```html\n * <app-mediasfu-webinar\n *   [PrejoinPage]=\"CustomPrejoinComponent\"\n *   [localLink]=\"'https://localhost:3000'\"\n *   [connectMediaSFU]=\"true\"\n *   [credentials]=\"{ apiUserName: 'username', apiKey: 'apikey' }\"\n *   [useLocalUIMode]=\"true\"\n *   [seedData]=\"seedDataObject\"\n *   [useSeed]=\"true\"\n *   [imgSrc]=\"'https://example.com/logo.png'\"\n *   [sourceParameters]=\"{ source: 'camera', width: 640, height: 480 }\"\n *   [updateSourceParameters]=\"updateSourceParameters\"\n *   [returnUI]=\"true\"\n *   [noUIPreJoinOptions]=\"{ roomName: 'room1', userName: 'user1' }\"\n *   [joinMediaSFURoom]=\"joinMediaSFURoom\"\n *   [createMediaSFURoom]=\"createMediaSFURoom\"\n *   [customVideoCard]=\"CustomVideoCardComponent\"\n *   [customAudioCard]=\"CustomAudioCardComponent\"\n *   [customMiniCard]=\"CustomMiniCardComponent\"\n *   [customMainComponent]=\"CustomMainComponent\">\n * </app-mediasfu-webinar>\n * ```\n */\n\n\n@Component({\n  selector: 'app-mediasfu-webinar',\n  imports: [\n    CommonModule,\n    BreakoutRoomsModal,\n    BackgroundModal,\n    ModernCoHostModalComponent,\n    ModernAlertComponent,\n    AudioGrid,\n    ControlButtonsComponent,\n    FlexibleGrid,\n    FlexibleVideo,\n    ModernLoadingModalComponent,\n    ModernPaginationComponent,\n    ModernParticipantsCounterBadgeComponent,\n    SubAspectComponent,\n    ModernDisplaySettingsModalComponent,\n    ModernEventSettingsModalComponent,\n    ModernConfirmExitModalComponent,\n    ModernMediaSettingsModalComponent,\n    ModernMenuModalComponent,\n    ModernMessagesModalComponent,\n    ModernConfirmHereModalComponent,\n    ModernShareEventModalComponent,\n    ModernParticipantsModalComponent,\n    ModernPollModalComponent,\n    ModernRecordingModalComponent,\n    ModernRequestsModalComponent,\n    MainAspectComponent,\n    MainContainerComponent,\n    MainGridComponent,\n    MainScreenComponent,\n    OtherGridComponent,\n    ScreenboardModal,\n    Whiteboard,\n    ConfigureWhiteboardModal,\n    ModernWaitingRoomModalComponent,\n    WithOverrideDirective,\n  ],\n  template: `\n    <!-- Custom Main Component (if provided) - full control over styling -->\n    <ng-container *ngIf=\"customMainComponent && validated.value\">\n      <ng-container\n        *ngComponentOutlet=\"\n          customMainComponent.component || customMainComponent;\n          injector: customMainComponent.injector\n        \"\n      >\n      </ng-container>\n    </ng-container>\n\n    <!-- Default MediaSFU wrapper with standard styling -->\n    <div\n      *ngIf=\"!customMainComponent\"\n      class=\"MediaSFU\"\n      [ngStyle]=\"containerStyle\"\n    >\n      <ng-container *ngIf=\"!validated.value; else mainContent\">\n        <ng-container\n          *ngComponentOutlet=\"\n            PrejoinPageComponent.component;\n            injector: PrejoinPageComponent.injector\n          \"\n        >\n        </ng-container>\n      </ng-container>\n\n      <ng-template #mainContent>\n        <ng-container *ngIf=\"returnUI\">\n          <ng-container\n            *appWithOverride=\"\n              'mainContainer';\n              default: MainContainerComponentRef;\n              props: mainContainerOverrideProps\n            \"\n          >\n            <app-main-container-component>\n              <ng-container\n                *appWithOverride=\"\n                  'mainAspect';\n                  default: MainAspectComponentRef;\n                  props: mainAspectOverrideProps\n                \"\n              >\n                <app-main-aspect-component\n                  [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n                  [defaultFraction]=\"1 - controlHeight.value\"\n                  [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\n                  [updateIsWideScreen]=\"updateIsWideScreen\"\n                  [updateIsMediumScreen]=\"updateIsMediumScreen\"\n                  [updateIsSmallScreen]=\"updateIsSmallScreen\"\n                >\n                  <ng-container\n                    *appWithOverride=\"\n                      'mainScreen';\n                      default: MainScreenComponentRef;\n                      props: mainScreenOverrideProps\n                    \"\n                  >\n                    <app-main-screen-component\n                      [doStack]=\"true\"\n                      [mainSize]=\"mainHeightWidth.value\"\n                      [defaultFraction]=\"1 - controlHeight.value\"\n                      [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\n                      [updateComponentSizes]=\"updateComponentSizes\"\n                    >\n                      <ng-container\n                        *appWithOverride=\"\n                          'mainGrid';\n                          default: MainGridComponentRef;\n                          props: mainGridOverrideProps\n                        \"\n                      >\n                        <app-main-grid-component\n                          [height]=\"componentSizes.value.mainHeight\"\n                          [width]=\"componentSizes.value.mainWidth\"\n                          [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n                          [mainSize]=\"mainHeightWidth.value\"\n                          [showAspect]=\"mainHeightWidth.value > 0\"\n                          [timeBackgroundColor]=\"recordState.value\"\n                          [meetingProgressTime]=\"meetingProgressTime.value\"\n                        >\n                          <ng-container\n                            *appWithOverride=\"\n                              'flexibleVideo';\n                              default: FlexibleVideoComponentRef;\n                              props: flexibleVideoOverrideProps\n                            \"\n                          >\n                            <app-flexible-video\n                              [customWidth]=\"componentSizes.value.mainWidth\"\n                              [customHeight]=\"componentSizes.value.mainHeight\"\n                              [rows]=\"1\"\n                              [columns]=\"1\"\n                              [componentsToRender]=\"mainGridStream.value\"\n                              [showAspect]=\"\n                                mainGridStream.value.length > 0 &&\n                                !(whiteboardStarted.value && !whiteboardEnded.value)\n                              \"\n                              [localStreamScreen]=\"localStreamScreen.value!\"\n                              [annotateScreenStream]=\"annotateScreenStream.value\"\n                              [Screenboard]=\"shared.value ? ScreenboardWidget : undefined\"\n                            >\n                            </app-flexible-video>\n                          </ng-container>\n                          <ng-container\n                            *appWithOverride=\"\n                              'whiteboard';\n                              default: WhiteboardComponentRef;\n                              props: whiteboardOverrideProps\n                            \"\n                          >\n                            <app-whiteboard\n                              [customWidth]=\"componentSizes.value.mainWidth\"\n                              [customHeight]=\"componentSizes.value.mainHeight\"\n                              [parameters]=\"mediaSFUParameters\"\n                              [showAspect]=\"whiteboardStarted.value && !whiteboardEnded.value\"\n                            ></app-whiteboard>\n                          </ng-container>\n                          <app-modern-participants-counter-badge\n                            [participantsCount]=\"participantsCounter.value\"\n                            [position]=\"'bottomLeft'\"\n                            [showBadge]=\"mainHeightWidth.value > 0\"\n                            [isDarkMode]=\"modernThemeDarkMode.value\"\n                          ></app-modern-participants-counter-badge>\n                        </app-main-grid-component>\n                      </ng-container>\n\n                      <ng-container\n                        *appWithOverride=\"\n                          'otherGrid';\n                          default: OtherGridComponentRef;\n                          props: otherGridOverrideProps\n                        \"\n                      >\n                        <app-other-grid-component\n                          [height]=\"componentSizes.value.otherHeight\"\n                          [width]=\"componentSizes.value.otherWidth\"\n                          [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n                          [showAspect]=\"mainHeightWidth.value !== 100\"\n                          [timeBackgroundColor]=\"recordState.value\"\n                          [showTimer]=\"mainHeightWidth.value === 0\"\n                          [meetingProgressTime]=\"meetingProgressTime.value\"\n                        >\n                          <div\n                            *ngIf=\"doPaginate.value\"\n                            [style.width]=\"paginationDirection.value == 'horizontal' ? componentSizes.value.otherWidth + 'px' : paginationHeightWidth.value + 'px'\"\n                            [style.height]=\"paginationDirection.value == 'horizontal' ? paginationHeightWidth.value + 'px' : componentSizes.value.otherHeight + 'px'\"\n                            [style.display]=\"doPaginate.value ? 'flex' : 'none'\"\n                            [style.flex-direction]=\"paginationDirection.value == 'horizontal' ? 'row' : 'column'\"\n                            [style.justify-content]=\"'center'\"\n                            [style.align-items]=\"'center'\"\n                            [style.padding]=\"'0'\"\n                            [style.margin]=\"'0'\"\n                          >\n                            <ng-container\n                              *appWithOverride=\"\n                                'pagination';\n                                default: PaginationComponentRef;\n                                props: paginationOverrideProps\n                              \"\n                            >\n                              <app-modern-pagination\n                                [totalPages]=\"numberPages.value\"\n                                [currentUserPage]=\"currentUserPage.value\"\n                                [showAspect]=\"doPaginate.value\"\n                                [paginationHeight]=\"paginationHeightWidth.value\"\n                                [direction]=\"paginationDirection.value\"\n                                [parameters]=\"mediaSFUParameters\"\n                              ></app-modern-pagination>\n                            </ng-container>\n                          </div>\n\n                          <ng-container\n                            *appWithOverride=\"\n                              'audioGrid';\n                              default: AudioGridComponentRef;\n                              props: audioGridOverrideProps\n                            \"\n                          >\n                            <app-audio-grid [componentsToRender]=\"audioOnlyStreams.value\"></app-audio-grid>\n                          </ng-container>\n\n                          <ng-container\n                            *appWithOverride=\"\n                              'flexibleGrid';\n                              default: FlexibleGridComponentRef;\n                              props: flexibleGridOverrideProps\n                            \"\n                          >\n                            <app-flexible-grid\n                              [customWidth]=\"gridSizes.value.gridWidth!\"\n                              [customHeight]=\"gridSizes.value.gridHeight!\"\n                              [rows]=\"gridRows.value\"\n                              [columns]=\"gridCols.value\"\n                              [componentsToRender]=\"otherGridStreams.value[0]\"\n                              [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n                            ></app-flexible-grid>\n                          </ng-container>\n                          <ng-container\n                            *appWithOverride=\"\n                              'flexibleGridAlt';\n                              default: FlexibleGridComponentRef;\n                              props: flexibleGridAltOverrideProps\n                            \"\n                          >\n                            <app-flexible-grid\n                              [customWidth]=\"gridSizes.value.altGridWidth!\"\n                              [customHeight]=\"gridSizes.value.altGridHeight!\"\n                              [rows]=\"altGridRows.value\"\n                              [columns]=\"altGridCols.value\"\n                              [componentsToRender]=\"otherGridStreams.value[1]\"\n                              [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n                            ></app-flexible-grid>\n                          </ng-container>\n                          <app-modern-participants-counter-badge\n                            [participantsCount]=\"participantsCounter.value\"\n                            [position]=\"'topRight'\"\n                            [showBadge]=\"mainHeightWidth.value === 0\"\n                            [isDarkMode]=\"modernThemeDarkMode.value\"\n                          ></app-modern-participants-counter-badge>\n                        </app-other-grid-component>\n                      </ng-container>\n                    </app-main-screen-component>\n                  </ng-container>\n                </app-main-aspect-component>\n              </ng-container>\n\n              <ng-container\n                *appWithOverride=\"\n                  'subAspect';\n                  default: SubAspectComponentRef;\n                  props: subAspectOverrideProps\n                \"\n              >\n                <app-sub-aspect-component\n                  [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n                  [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\n                  [defaultFractionSub]=\"controlHeight.value\"\n                >\n                  <ng-container\n                    *appWithOverride=\"\n                      'controlButtons';\n                      default: ControlButtonsComponentRef;\n                      props: controlButtonsOverrideProps\n                    \"\n                  >\n                    <app-control-buttons-component\n                      [buttons]=\"controlButtons\"\n                      [isDarkMode]=\"modernThemeDarkMode.value\"\n                      [buttonColor]=\"modernThemeDarkMode.value ? 'rgba(255, 255, 255, 0.92)' : 'rgba(15, 23, 42, 0.88)'\"\n                      [buttonBackgroundColor]=\"{\n                        default: 'transparent',\n                        pressed: 'transparent'\n                      }\"\n                      [alignment]=\"'space-between'\"\n                      [vertical]=\"false\"\n                      [buttonsContainerStyle]=\"{\n                        width: '100%',\n                        marginTop: '0',\n                        marginBottom: '0',\n                        backgroundColor: 'transparent'\n                      }\"\n                    ></app-control-buttons-component>\n                  </ng-container>\n                </app-sub-aspect-component>\n              </ng-container>\n            </app-main-container-component>\n          </ng-container>\n        </ng-container>\n      </ng-template>\n\n      <ng-container *ngIf=\"returnUI\">\n      <app-modern-menu-modal\n        *appWithOverride=\"\n          'menuModal';\n          default: MenuModalRef;\n          props: menuModalOverrideProps\n        \"\n        [backgroundColor]=\"''\"\n        [isVisible]=\"isMenuModalVisible.value\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n        [onToggleTheme]=\"updateModernThemeDarkMode\"\n        [onClose]=\"onCloseMenuModal\"\n        [customButtons]=\"customMenuButtons\"\n        [roomName]=\"roomName.value\"\n        [adminPasscode]=\"adminPasscode.value\"\n        [islevel]=\"islevel.value\"\n        [eventType]=\"eventType.value\"\n        [localLink]=\"localLink\"\n      ></app-modern-menu-modal>\n\n      <app-event-settings-modal\n        [isEventSettingsModalVisible]=\"isSettingsModalVisible.value\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n        [onEventSettingsClose]=\"onEventSettingsClose\"\n        [audioSetting]=\"audioSetting.value\"\n        [videoSetting]=\"videoSetting.value\"\n        [screenshareSetting]=\"screenshareSetting.value\"\n        [chatSetting]=\"chatSetting.value\"\n        [updateAudioSetting]=\"updateAudioSetting\"\n        [updateVideoSetting]=\"updateVideoSetting\"\n        [updateScreenshareSetting]=\"updateScreenshareSetting\"\n        [updateChatSetting]=\"updateChatSetting\"\n        [updateIsSettingsModalVisible]=\"updateIsSettingsModalVisible\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [showAlert]=\"showAlert\"\n      ></app-event-settings-modal>\n\n      <app-requests-modal\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isRequestsModalVisible]=\"isRequestsModalVisible.value\"\n        [onRequestClose]=\"onRequestClose\"\n        [requestCounter]=\"requestCounter.value\"\n        [onRequestFilterChange]=\"onRequestFilterChange\"\n        [updateRequestList]=\"updateRequestList\"\n        [requestList]=\"filteredRequestList.value\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-requests-modal>\n\n      <app-waiting-room-modal\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isWaitingModalVisible]=\"isWaitingModalVisible.value\"\n        [onWaitingRoomClose]=\"onWaitingRoomClose\"\n        [waitingRoomCounter]=\"waitingRoomCounter.value\"\n        [onWaitingRoomFilterChange]=\"onWaitingRoomFilterChange\"\n        [waitingRoomList]=\"filteredWaitingRoomList.value\"\n        [updateWaitingList]=\"updateWaitingRoomList\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [parameters]=\"{\n                      filteredWaitingRoomList: waitingRoomList.value,\n                      getUpdatedAllParams: getUpdatedAllParams,\n                    }\"\n      ></app-waiting-room-modal>\n\n      <app-co-host-modal\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isCoHostModalVisible]=\"isCoHostModalVisible.value\"\n        [onCoHostClose]=\"onCoHostClose\"\n        [coHostResponsibility]=\"coHostResponsibility.value\"\n        [participants]=\"participants.value\"\n        [currentCohost]=\"coHost.value\"\n        [roomName]=\"roomName.value\"\n        [showAlert]=\"showAlert\"\n        [updateCoHostResponsibility]=\"updateCoHostResponsibility\"\n        [updateCoHost]=\"updateCoHost\"\n        [updateIsCoHostModalVisible]=\"updateIsCoHostModalVisible\"\n        [socket]=\"socket.value\"\n      ></app-co-host-modal>\n\n      <app-media-settings-modal\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\n        [isMediaSettingsModalVisible]=\"isMediaSettingsModalVisible.value\"\n        [onMediaSettingsClose]=\"onMediaSettingsClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-media-settings-modal>\n\n      <app-participants-modal\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isParticipantsModalVisible]=\"isParticipantsModalVisible.value\"\n        [onParticipantsClose]=\"onParticipantsClose\"\n        [participantsCounter]=\"participantsCounter.value\"\n        [onParticipantsFilterChange]=\"onParticipantsFilterChange\"\n        [parameters]=\"{\n              updateParticipants: updateParticipants,\n              filteredParticipants: filteredParticipants.value,\n              updateIsParticipantsModalVisible: updateIsParticipantsModalVisible,\n              updateDirectMessageDetails: updateDirectMessageDetails,\n              updateStartDirectMessage: updateStartDirectMessage,\n              updateIsMessagesModalVisible: updateIsMessagesModalVisible,\n              showAlert: showAlert,\n              participants: filteredParticipants.value,\n              roomName: roomName.value,\n              islevel: islevel.value,\n              member: member.value,\n              coHostResponsibility: coHostResponsibility.value,\n              coHost: coHost.value,\n              eventType: eventType.value,\n              startDirectMessage: startDirectMessage.value,\n              directMessageDetails: directMessageDetails.value,\n              socket: socket.value,\n              getUpdatedAllParams: getUpdatedAllParams,\n            }\"\n      ></app-participants-modal>\n\n      <app-display-settings-modal\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isDisplaySettingsModalVisible]=\"isDisplaySettingsModalVisible.value\"\n        [onDisplaySettingsClose]=\"onDisplaySettingsClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-display-settings-modal>\n\n      <app-recording-modal\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isRecordingModalVisible]=\"isRecordingModalVisible.value\"\n        [onClose]=\"onRecordingClose\"\n        [startRecording]=\"startRecording.startRecording\"\n        [confirmRecording]=\"confirmRecording.confirmRecording\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-recording-modal>\n\n      <app-messages-modal\n        [backgroundColor]=\"\n          eventType.value === 'webinar' || eventType.value === 'conference'\n            ? '#f5f5f5'\n            : 'rgba(255, 255, 255, 0.25)'\n        \"\n        [isMessagesModalVisible]=\"isMessagesModalVisible.value\"\n        [onMessagesClose]=\"onMessagesClose\"\n        [messages]=\"messages.value\"\n        [eventType]=\"eventType.value\"\n        [member]=\"member.value\"\n        [islevel]=\"islevel.value\"\n        [coHostResponsibility]=\"coHostResponsibility.value\"\n        [coHost]=\"coHost.value\"\n        [startDirectMessage]=\"startDirectMessage.value\"\n        [directMessageDetails]=\"directMessageDetails.value\"\n        [updateStartDirectMessage]=\"updateStartDirectMessage\"\n        [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\n        [showAlert]=\"showAlert\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [chatSetting]=\"chatSetting.value\"\n      ></app-messages-modal>\n\n      <app-confirm-exit-modal\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\n        [isConfirmExitModalVisible]=\"isConfirmExitModalVisible.value\"\n        [onConfirmExitClose]=\"onConfirmExitClose\"\n        [position]=\"'topRight'\"\n        [member]=\"member.value\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [islevel]=\"islevel.value\"\n      ></app-confirm-exit-modal>\n\n      <app-confirm-here-modal\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\n        [isConfirmHereModalVisible]=\"isConfirmHereModalVisible.value\"\n        [onConfirmHereClose]=\"onConfirmHereClose\"\n        [onSuppressConfirmHere]=\"onSuppressConfirmHere\"\n        [member]=\"member.value\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n      ></app-confirm-here-modal>\n\n      <app-share-event-modal\n        [isShareEventModalVisible]=\"isShareEventModalVisible.value\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n        [onShareEventClose]=\"onShareEventClose\"\n        [roomName]=\"roomName.value\"\n        [islevel]=\"islevel.value\"\n        [adminPasscode]=\"adminPasscode.value\"\n        [eventType]=\"eventType.value\"\n        [localLink]=\"localLink\"\n      ></app-share-event-modal>\n\n      <app-poll-modal\n        [isPollModalVisible]=\"isPollModalVisible.value\"\n        [onClose]=\"onPollClose\"\n        [member]=\"member.value\"\n        [islevel]=\"islevel.value\"\n        [polls]=\"polls.value\"\n        [poll]=\"poll.value\"\n        [socket]=\"socket.value\"\n        [roomName]=\"roomName.value\"\n        [showAlert]=\"showAlert\"\n        [updateIsPollModalVisible]=\"updateIsPollModalVisible\"\n        [handleCreatePoll]=\"handleCreatePoll.handleCreatePoll\"\n        [handleEndPoll]=\"handleEndPoll.handleEndPoll\"\n        [handleVotePoll]=\"handleVotePoll.handleVotePoll\"\n      ></app-poll-modal>\n\n      <app-background-modal\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isVisible]=\"isBackgroundModalVisible.value\"\n        [onClose]=\"onBackgroundClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-background-modal>\n\n      <app-breakout-rooms-modal\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isVisible]=\"isBreakoutRoomsModalVisible.value\"\n        [onBreakoutRoomsClose]=\"onBreakoutRoomsClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-breakout-rooms-modal>\n\n      <app-configure-whiteboard-modal\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isVisible]=\"isConfigureWhiteboardModalVisible.value\"\n        [onConfigureWhiteboardClose]=\"onConfigureWhiteboardClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-configure-whiteboard-modal>\n\n      <app-screenboard-modal\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isVisible]=\"isScreenboardModalVisible.value\"\n        [onClose]=\"onScreenboardClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-screenboard-modal>\n\n      <app-modern-alert-component\n        [visible]=\"alertVisible.value\"\n        [message]=\"alertMessage.value\"\n        [type]=\"alertType.value\"\n        [position]=\"alertPosition.value\"\n        [duration]=\"alertDuration.value\"\n        [onHide]=\"onAlertHide\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n      ></app-modern-alert-component>\n\n      <app-modern-loading-modal\n        [isVisible]=\"isLoadingModalVisible.value\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n      ></app-modern-loading-modal>\n    </ng-container>\n    </div>\n\n    <!-- Modals and alerts (only available when using default UI, not custom components) -->\n    <ng-container *ngIf=\"returnUI && !customMainComponent\">\n      <!-- All the modals that were inside the div should be duplicated here -->\n    </ng-container>\n\n    <!-- Prejoin page for custom component (when not validated) -->\n    <ng-container *ngIf=\"customMainComponent && !validated.value\">\n      <ng-container\n        *ngComponentOutlet=\"\n          PrejoinPageComponent.component;\n          injector: PrejoinPageComponent.injector\n        \"\n      >\n      </ng-container>\n    </ng-container>\n  `,\n  styles: [\n    `\n      .MediaSFU {\n        height: 100vh;\n        width: 100vw;\n        max-width: 100vw;\n        max-height: 100vh;\n        overflow: hidden;\n      }\n    `,\n  ],\n  providers: [CookieService]\n})\nexport class MediasfuWebinar implements OnInit, OnDestroy {\n  @Input()\n  PrejoinPage: any = WelcomePage;\n  @Input() localLink = '';\n  @Input() connectMediaSFU = true;\n  @Input() credentials: { apiUserName: string; apiKey: string } = { apiUserName: '', apiKey: '' };\n  @Input() useLocalUIMode = false;\n  @Input() seedData?: SeedData;\n  @Input() useSeed = false;\n  @Input() imgSrc = 'https://mediasfu.com/images/logo192.png';\n  @Input() sourceParameters: { [key: string]: any } = {};\n  @Input() updateSourceParameters? = (data: { [key: string]: any }) => { };\n  @Input() returnUI? = true;\n  @Input() noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\n  @Input() joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n  @Input() createMediaSFURoom?: CreateRoomOnMediaSFUType;\n\n  // Custom component inputs\n  @Input() customVideoCard: any;\n  @Input() customAudioCard: any;\n  @Input() customMiniCard: any;\n  @Input() customMainComponent: any;\n\n  // UI customization inputs\n  @Input() containerStyle?: Record<string, any>;\n  @Input() uiOverrides?: MediasfuUICustomOverrides;\n\n  title = 'MediaSFU-Webinar';\n\n  protected readonly MainContainerComponentRef = MainContainerComponent;\n  protected readonly MainAspectComponentRef = MainAspectComponent;\n  protected readonly MainScreenComponentRef = MainScreenComponent;\n  protected readonly MainGridComponentRef = MainGridComponent;\n  protected readonly OtherGridComponentRef = OtherGridComponent;\n  protected readonly FlexibleVideoComponentRef = FlexibleVideo;\n  protected readonly WhiteboardComponentRef = Whiteboard;\n  protected readonly PaginationComponentRef = ModernPaginationComponent;\n  protected readonly AudioGridComponentRef = AudioGrid;\n  protected readonly FlexibleGridComponentRef = FlexibleGrid;\n  protected readonly SubAspectComponentRef = SubAspectComponent;\n  protected readonly ControlButtonsComponentRef = ControlButtonsComponent;\n  protected readonly MenuModalRef = ModernMenuModalComponent;\n\n  mainContainerOverrideProps = () => ({\n    containerStyle: this.containerStyle,\n    controlHeight: this.controlHeight.value,\n    eventType: this.eventType.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  mainAspectOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    defaultFraction: 1 - this.controlHeight.value,\n    showControls:\n      this.eventType.value === 'webinar' || this.eventType.value === 'conference',\n    updateIsWideScreen: this.updateIsWideScreen,\n    updateIsMediumScreen: this.updateIsMediumScreen,\n    updateIsSmallScreen: this.updateIsSmallScreen,\n    parameters: this.mediaSFUParameters,\n  });\n\n  mainScreenOverrideProps = () => ({\n    doStack: true,\n    mainSize: this.mainHeightWidth.value,\n    defaultFraction: 1 - this.controlHeight.value,\n    showControls:\n      this.eventType.value === 'webinar' || this.eventType.value === 'conference',\n    updateComponentSizes: this.updateComponentSizes,\n    parameters: this.mediaSFUParameters,\n  });\n\n  mainGridOverrideProps = () => ({\n    height: this.componentSizes.value.mainHeight,\n    width: this.componentSizes.value.mainWidth,\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    mainSize: this.mainHeightWidth.value,\n    showAspect: this.mainHeightWidth.value > 0,\n    timeBackgroundColor: this.recordState.value,\n    meetingProgressTime: this.meetingProgressTime.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  flexibleVideoOverrideProps = () => ({\n    customWidth: this.componentSizes.value.mainWidth,\n    customHeight: this.componentSizes.value.mainHeight,\n    rows: 1,\n    columns: 1,\n    componentsToRender: this.mainGridStream.value,\n    showAspect:\n      this.mainGridStream.value.length > 0 &&\n      !(this.whiteboardStarted.value && !this.whiteboardEnded.value),\n    localStreamScreen: this.localStreamScreen.value ?? undefined,\n    annotateScreenStream: this.annotateScreenStream.value,\n    Screenboard: this.shared.value ? this.ScreenboardWidget : undefined,\n    parameters: this.mediaSFUParameters,\n    customVideoCard: this.customVideoCard,\n    customAudioCard: this.customAudioCard,\n    customMiniCard: this.customMiniCard,\n  });\n\n  whiteboardOverrideProps = () => ({\n    customWidth: this.componentSizes.value.mainWidth,\n    customHeight: this.componentSizes.value.mainHeight,\n    parameters: this.mediaSFUParameters,\n    showAspect: this.whiteboardStarted.value && !this.whiteboardEnded.value,\n  });\n\n  otherGridOverrideProps = () => ({\n    height: this.componentSizes.value.otherHeight,\n    width: this.componentSizes.value.otherWidth,\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    showAspect: this.mainHeightWidth.value !== 100,\n    timeBackgroundColor: this.recordState.value,\n    showTimer: this.mainHeightWidth.value === 0,\n    meetingProgressTime: this.meetingProgressTime.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  paginationOverrideProps = () => ({\n    totalPages: this.numberPages.value,\n    currentUserPage: this.currentUserPage.value,\n    showAspect: this.doPaginate.value,\n    paginationHeight: this.paginationHeightWidth.value,\n    direction: this.paginationDirection.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  audioGridOverrideProps = () => ({\n    componentsToRender: this.audioOnlyStreams.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  flexibleGridOverrideProps = () => ({\n    customWidth: this.gridSizes.value.gridWidth ?? 0,\n    customHeight: this.gridSizes.value.gridHeight ?? 0,\n    componentsToRender: this.otherGridStreams.value[0] ?? [],\n    rows: this.gridRows.value,\n    columns: this.gridCols.value,\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    parameters: this.mediaSFUParameters,\n    customVideoCard: this.customVideoCard,\n    customAudioCard: this.customAudioCard,\n    customMiniCard: this.customMiniCard,\n  });\n\n  flexibleGridAltOverrideProps = () => ({\n    customWidth: this.gridSizes.value.altGridWidth ?? 0,\n    customHeight: this.gridSizes.value.altGridHeight ?? 0,\n    componentsToRender: this.otherGridStreams.value[1] ?? [],\n    rows: this.altGridRows.value,\n    columns: this.altGridCols.value,\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    parameters: this.mediaSFUParameters,\n    customVideoCard: this.customVideoCard,\n    customAudioCard: this.customAudioCard,\n    customMiniCard: this.customMiniCard,\n  });\n\n  subAspectOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    showControls: this.eventType.value === 'webinar' || this.eventType.value === 'conference',\n    defaultFractionSub: this.controlHeight.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  controlButtonsOverrideProps = () => ({\n    buttons: this.controlButtons,\n    isDarkMode: this.modernThemeDarkMode.value,\n    buttonColor: this.modernThemeDarkMode.value ? 'rgba(255, 255, 255, 0.92)' : 'rgba(15, 23, 42, 0.88)',\n    buttonBackgroundColor: {\n      default: 'transparent',\n      pressed: 'transparent',\n    },\n    alignment: 'space-between',\n    vertical: false,\n    buttonsContainerStyle: {\n      width: '100%',\n      marginTop: '0',\n      marginBottom: '0',\n      backgroundColor: 'transparent',\n    },\n    parameters: this.mediaSFUParameters,\n  });\n\n  menuModalOverrideProps = () => ({\n    backgroundColor: '',\n    isVisible: this.isMenuModalVisible.value,\n    isDarkMode: this.modernThemeDarkMode.value,\n    onToggleTheme: this.updateModernThemeDarkMode,\n    onClose: this.onCloseMenuModal,\n    customButtons: this.customMenuButtons,\n    roomName: this.roomName.value,\n    adminPasscode: this.adminPasscode.value,\n    islevel: this.islevel.value,\n    eventType: this.eventType.value,\n    localLink: this.localLink,\n    parameters: this.mediaSFUParameters,\n  });\n\n  private mainHeightWidthSubscription: Subscription | undefined;\n  private validatedSubscription: Subscription | undefined;\n  private islevelSubscription: Subscription | undefined;\n  private coHostSubscription: Subscription | undefined;\n  private buttonSubscriptions: Subscription[] = [];\n  private ScreenboardSubscription: Subscription | undefined;\n  private recordingSubscription: Subscription | undefined;\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    private injector: Injector,\n    public updateMiniCardsGrid: UpdateMiniCardsGrid,\n    public mixStreams: MixStreams,\n    public dispStreams: DispStreams,\n    public stopShareScreen: StopShareScreen,\n    public checkScreenShare: CheckScreenShare,\n    public startShareScreen: StartShareScreen,\n    public requestScreenShare: RequestScreenShare,\n    public reorderStreams: ReorderStreams,\n    public prepopulateUserMedia: PrepopulateUserMedia,\n    public getVideos: GetVideos,\n    public rePort: RePort,\n    public trigger: Trigger,\n    public consumerResume: ConsumerResume,\n    public connectSendTransport: ConnectSendTransport,\n    public connectSendTransportAudio: ConnectSendTransportAudio,\n    public connectSendTransportVideo: ConnectSendTransportVideo,\n    public connectSendTransportScreen: ConnectSendTransportScreen,\n    public processConsumerTransports: ProcessConsumerTransports,\n    public resumePauseStreams: ResumePauseStreams,\n    public readjust: Readjust,\n    public checkGrid: CheckGrid,\n    public getEstimate: GetEstimate,\n    public calculateRowsAndColumns: CalculateRowsAndColumns,\n    public addVideosGrid: AddVideosGrid,\n    public onScreenChanges: OnScreenChanges,\n    public changeVids: ChangeVids,\n    public compareActiveNames: CompareActiveNames,\n    public compareScreenStates: CompareScreenStates,\n    public createSendTransport: CreateSendTransport,\n    public resumeSendTransportAudio: ResumeSendTransportAudio,\n    public receiveAllPipedTransports: ReceiveAllPipedTransports,\n    public disconnectSendTransportVideo: DisconnectSendTransportVideo,\n    public disconnectSendTransportAudio: DisconnectSendTransportAudio,\n    public disconnectSendTransportScreen: DisconnectSendTransportScreen,\n    public getPipedProducersAlt: GetPipedProducersAlt,\n    public signalNewConsumerTransport: SignalNewConsumerTransport,\n    public connectRecvTransport: ConnectRecvTransport,\n    public reUpdateInter: ReUpdateInter,\n    public updateParticipantAudioDecibels: UpdateParticipantAudioDecibels,\n    public closeAndResize: CloseAndResize,\n    public autoAdjust: AutoAdjust,\n    public switchUserVideoAlt: SwitchUserVideoAlt,\n    public switchUserVideo: SwitchUserVideo,\n    public switchUserAudio: SwitchUserAudio,\n    public getDomains: GetDomains,\n    public formatNumber: FormatNumber,\n    public connectIps: ConnectIps,\n    public connectLocalIps: ConnectLocalIps,\n    public createDeviceClient: CreateDeviceClient,\n    public handleCreatePoll: HandleCreatePoll,\n    public handleEndPoll: HandleEndPoll,\n    public handleVotePoll: HandleVotePoll,\n    public captureCanvasStream: CaptureCanvasStream,\n    public resumePauseAudioStreams: ResumePauseAudioStreams,\n    public processConsumerTransportsAudio: ProcessConsumerTransportsAudio,\n\n    public launchMenuModal: LaunchMenuModal,\n    public launchRecording: LaunchRecording,\n    public startRecording: StartRecording,\n    public confirmRecording: ConfirmRecording,\n    public launchWaiting: LaunchWaiting,\n    public launchCoHost: launchCoHost,\n    public launchMediaSettings: LaunchMediaSettings,\n    public launchDisplaySettings: LaunchDisplaySettings,\n    public launchSettings: LaunchSettings,\n    public launchRequests: LaunchRequests,\n    public launchParticipants: LaunchParticipants,\n    public launchMessages: LaunchMessages,\n    public launchConfirmExit: LaunchConfirmExit,\n    public launchPoll: LaunchPoll,\n    public launchBreakoutRooms: LaunchBreakoutRooms,\n    public launchConfigureWhiteboard: LaunchConfigureWhiteboard,\n    public startMeetingProgressTimer: StartMeetingProgressTimer,\n    public updateRecording: UpdateRecording,\n    public stopRecording: StopRecording,\n    public userWaiting: UserWaiting,\n    public personJoined: PersonJoined,\n    public allWaitingRoomMembers: AllWaitingRoomMembers,\n    public roomRecordParams: RoomRecordParams,\n    public banParticipant: BanParticipant,\n    public updatedCoHost: UpdatedCoHost,\n    public participantRequested: ParticipantRequested,\n    public screenProducerId: ScreenProducerId,\n    public updateMediaSettings: UpdateMediaSettings,\n    public producerMediaPaused: ProducerMediaPaused,\n    public producerMediaResumed: ProducerMediaResumed,\n    public producerMediaClosed: ProducerMediaClosed,\n    public controlMediaHost: ControlMediaHost,\n    public meetingEnded: MeetingEnded,\n    public disconnectUserSelf: DisconnectUserSelf,\n    public receiveMessage: ReceiveMessage,\n    public meetingTimeRemaining: MeetingTimeRemaining,\n    public meetingStillThere: MeetingStillThere,\n    public startRecords: StartRecords,\n    public reInitiateRecording: ReInitiateRecording,\n    public recordingNotice: RecordingNotice,\n    public timeLeftRecording: TimeLeftRecording,\n    public stoppedRecording: StoppedRecording,\n    public hostRequestResponse: HostRequestResponse,\n    public allMembers: AllMembers,\n    public allMembersRest: AllMembersRest,\n    public disconnect: Disconnect,\n    public pollUpdated: PollUpdated,\n    public breakoutRoomUpdated: BreakoutRoomUpdated,\n    public socketManager: SocketManager,\n    public joinRoomClient: JoinRoomClient,\n    public joinLocalRoom: JoinLocalRoom,\n    public updateRoomParametersClient: UpdateRoomParametersClient,\n    public clickVideo: ClickVideo,\n    public clickAudio: ClickAudio,\n    public clickScreenShare: ClickScreenShare,\n    public streamSuccessVideo: StreamSuccessVideo,\n    public streamSuccessAudio: StreamSuccessAudio,\n    public streamSuccessScreen: StreamSuccessScreen,\n    public streamSuccessAudioSwitch: StreamSuccessAudioSwitch,\n    public checkPermission: CheckPermission,\n    public updateConsumingDomains: UpdateConsumingDomains,\n    public receiveRoomMessages: ReceiveRoomMessages,\n    private uiOverrideResolver: UIOverrideResolverService,\n  ) { }\n\n  createInjector(inputs: any) {\n    if (!inputs || typeof inputs !== 'object') {\n      return this.injector;\n    }\n\n    const inj = Injector.create({\n      providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\n      parent: this.injector,\n    });\n\n    return inj;\n  }\n\n  /**\n   * Gets a list of media devices filtered by the specified kind.\n   * @param kind - The kind of media device to filter by ('videoinput' or 'audioinput')\n   * @returns A promise that resolves to an array of MediaDeviceInfo objects\n   */\n  getMediaDevicesList = async (kind: 'videoinput' | 'audioinput'): Promise<MediaDeviceInfo[]> => {\n    try {\n      const devices = await navigator.mediaDevices.enumerateDevices();\n      return devices.filter((device) => device.kind === kind);\n    } catch (error) {\n      console.error('Error enumerating devices:', error);\n      return [];\n    }\n  };\n\n  /**\n   * Gets the media stream for a participant by their ID or name.\n   * @param options - Object containing id, name, and kind parameters\n   * @returns A promise that resolves to the participant's MediaStream or null if not found\n   */\n  getParticipantMedia = async (options: {\n    id?: string;\n    name?: string;\n    kind: 'video' | 'audio';\n  }): Promise<MediaStream | null> => {\n    const { id, name, kind } = options;\n\n    try {\n      const streams =\n        kind === 'video' ? this.allVideoStreams.value : this.allAudioStreams.value;\n\n      // Search by producerId if provided\n      if (id) {\n        const streamObj = streams.find((obj: any) => obj.producerId === id);\n        if (streamObj && 'stream' in streamObj) {\n          return streamObj.stream || null;\n        }\n      }\n\n      // Search by name if provided\n      if (name) {\n        const streamObj = streams.find((obj: any) => obj.name === name);\n        if (streamObj && 'stream' in streamObj) {\n          return streamObj.stream || null;\n        }\n      }\n\n      return null;\n    } catch (error) {\n      console.error('Error getting participant media:', error);\n      return null;\n    }\n  };\n\n  // Initial values\n  mediaSFUFunctions = (): any => {\n    return {\n      updateMiniCardsGrid:\n        this.updateMiniCardsGrid?.updateMiniCardsGrid ||\n        (() => {\n          console.log('none');\n        }),\n      mixStreams:\n        this.mixStreams?.mixStreams ||\n        (() => {\n          console.log('none');\n        }),\n      dispStreams:\n        this.dispStreams?.dispStreams ||\n        (() => {\n          console.log('none');\n        }),\n      stopShareScreen:\n        this.stopShareScreen?.stopShareScreen ||\n        (() => {\n          console.log('none');\n        }),\n      checkScreenShare:\n        this.checkScreenShare?.checkScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      startShareScreen:\n        this.startShareScreen?.startShareScreen ||\n        (() => {\n          console.log('none');\n        }),\n      requestScreenShare:\n        this.requestScreenShare?.requestScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      reorderStreams:\n        this.reorderStreams?.reorderStreams ||\n        (() => {\n          console.log('none');\n        }),\n      prepopulateUserMedia:\n        this.prepopulateUserMedia?.prepopulateUserMedia ||\n        (() => {\n          console.log('none');\n        }),\n      getVideos:\n        this.getVideos?.getVideos ||\n        (() => {\n          console.log('none');\n        }),\n      rePort:\n        this.rePort?.rePort ||\n        (() => {\n          console.log('none');\n        }),\n      trigger:\n        this.trigger?.trigger ||\n        (() => {\n          console.log('none');\n        }),\n      consumerResume:\n        this.consumerResume?.consumerResume ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransport:\n        this.connectSendTransport?.connectSendTransport ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportAudio:\n        this.connectSendTransportAudio?.connectSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportVideo:\n        this.connectSendTransportVideo?.connectSendTransportVideo ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportScreen:\n        this.connectSendTransportScreen?.connectSendTransportScreen ||\n        (() => {\n          console.log('none');\n        }),\n      processConsumerTransports:\n        this.processConsumerTransports?.processConsumerTransports ||\n        (() => {\n          console.log('none');\n        }),\n      resumePauseStreams:\n        this.resumePauseStreams?.resumePauseStreams ||\n        (() => {\n          console.log('none');\n        }),\n      readjust:\n        this.readjust?.readjust ||\n        (() => {\n          console.log('none');\n        }),\n      checkGrid:\n        this.checkGrid?.checkGrid ||\n        (() => {\n          console.log('none');\n        }),\n      getEstimate:\n        this.getEstimate?.getEstimate ||\n        (() => {\n          console.log('none');\n        }),\n      calculateRowsAndColumns:\n        this.calculateRowsAndColumns?.calculateRowsAndColumns ||\n        (() => {\n          console.log('none');\n        }),\n      addVideosGrid:\n        this.addVideosGrid?.addVideosGrid ||\n        (() => {\n          console.log('none');\n        }),\n      onScreenChanges:\n        this.onScreenChanges?.onScreenChanges ||\n        (() => {\n          console.log('none');\n        }),\n      sleep:\n        sleep ||\n        (() => {\n          console.log('none');\n        }),\n      changeVids:\n        this.changeVids?.changeVids ||\n        (() => {\n          console.log('none');\n        }),\n      compareActiveNames:\n        this.compareActiveNames?.compareActiveNames ||\n        (() => {\n          console.log('none');\n        }),\n      compareScreenStates:\n        this.compareScreenStates?.compareScreenStates ||\n        (() => {\n          console.log('none');\n        }),\n      createSendTransport:\n        this.createSendTransport?.createSendTransport ||\n        (() => {\n          console.log('none');\n        }),\n      resumeSendTransportAudio:\n        this.resumeSendTransportAudio?.resumeSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      receiveAllPipedTransports:\n        this.receiveAllPipedTransports?.receiveAllPipedTransports ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportVideo:\n        this.disconnectSendTransportVideo?.disconnectSendTransportVideo ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportAudio:\n        this.disconnectSendTransportAudio?.disconnectSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportScreen:\n        this.disconnectSendTransportScreen?.disconnectSendTransportScreen ||\n        (() => {\n          console.log('none');\n        }),\n      getPipedProducersAlt:\n        this.getPipedProducersAlt?.getPipedProducersAlt ||\n        (() => {\n          console.log('none');\n        }),\n      signalNewConsumerTransport:\n        this.signalNewConsumerTransport?.signalNewConsumerTransport ||\n        (() => {\n          console.log('none');\n        }),\n      connectRecvTransport:\n        this.connectRecvTransport?.connectRecvTransport ||\n        (() => {\n          console.log('none');\n        }),\n      reUpdateInter:\n        this.reUpdateInter?.reUpdateInter ||\n        (() => {\n          console.log('none');\n        }),\n      updateParticipantAudioDecibels:\n        this.updateParticipantAudioDecibels?.updateParticipantAudioDecibels ||\n        (() => {\n          console.log('none');\n        }),\n      closeAndResize:\n        this.closeAndResize?.closeAndResize ||\n        (() => {\n          console.log('none');\n        }),\n      autoAdjust:\n        this.autoAdjust?.autoAdjust ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserVideoAlt:\n        this.switchUserVideoAlt?.switchUserVideoAlt ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserVideo:\n        this.switchUserVideo?.switchUserVideo ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserAudio:\n        this.switchUserAudio?.switchUserAudio ||\n        (() => {\n          console.log('none');\n        }),\n      getDomains:\n        this.getDomains?.getDomains ||\n        (() => {\n          console.log('none');\n        }),\n      formatNumber:\n        this.formatNumber?.formatNumber ||\n        (() => {\n          console.log('none');\n        }),\n      connectIps:\n        this.connectIps?.connectIps ||\n        (() => {\n          console.log('none');\n        }),\n      connectLocalIps:\n        this.connectLocalIps?.connectLocalIps ||\n        (() => {\n          console.log('none');\n        }),\n      createDeviceClient:\n        this.createDeviceClient?.createDeviceClient ||\n        (() => {\n          console.log('none');\n        }),\n      handleCreatePoll:\n        this.handleCreatePoll?.handleCreatePoll ||\n        (() => {\n          console.log('none');\n        }),\n      handleEndPoll:\n        this.handleEndPoll?.handleEndPoll ||\n        (() => {\n          console.log('none');\n        }),\n      handleVotePoll:\n        this.handleVotePoll?.handleVotePoll ||\n        (() => {\n          console.log('none');\n        }),\n      captureCanvasStream:\n        this.captureCanvasStream?.captureCanvasStream ||\n        (() => {\n          console.log('none');\n        }),\n      resumePauseAudioStreams:\n        this.resumePauseAudioStreams?.resumePauseAudioStreams ||\n        (() => {\n          console.log('none');\n        }),\n      processConsumerTransportsAudio:\n        this.processConsumerTransportsAudio?.processConsumerTransportsAudio ||\n        (() => {\n          console.log('none');\n        }),\n      checkPermission:\n        this.checkPermission?.checkPermission ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessVideo:\n        this.streamSuccessVideo?.streamSuccessVideo ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessAudio:\n        this.streamSuccessAudio?.streamSuccessAudio ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessScreen:\n        this.streamSuccessScreen?.streamSuccessScreen ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessAudioSwitch:\n        this.streamSuccessAudioSwitch?.streamSuccessAudioSwitch ||\n        (() => {\n          console.log('none');\n        }),\n      clickVideo:\n        this.clickVideo?.clickVideo ||\n        (() => {\n          console.log('none');\n        }),\n      clickAudio:\n        this.clickAudio?.clickAudio ||\n        (() => {\n          console.log('none');\n        }),\n      clickScreenShare:\n        this.clickScreenShare?.clickScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      requestPermissionCamera:\n        this.requestPermissionCamera ||\n        (() => {\n          console.log('none');\n        }),\n      requestPermissionAudio:\n        this.requestPermissionAudio ||\n        (() => {\n          console.log('none');\n        }),\n      getMediaDevicesList: this.getMediaDevicesList,\n      getParticipantMedia: this.getParticipantMedia,\n    };\n  };\n\n  validated = new BehaviorSubject<boolean>(false);\n  localUIMode = new BehaviorSubject<boolean>(false);\n  socket = new BehaviorSubject<Socket>({} as Socket);\n  localSocket? = new BehaviorSubject<Socket | undefined>(undefined);\n  roomData = new BehaviorSubject<ResponseJoinRoom | null>(null);\n  device = new BehaviorSubject<Device | null>(null);\n  apiKey = new BehaviorSubject<string>('');\n  apiUserName = new BehaviorSubject<string>('');\n  apiToken = new BehaviorSubject<string>('');\n  link = new BehaviorSubject<string>('');\n\n  roomName = new BehaviorSubject<string>('');\n  member = new BehaviorSubject<string>('');\n  adminPasscode = new BehaviorSubject<string>('');\n  islevel = new BehaviorSubject<string>('1');\n  coHost = new BehaviorSubject<string>('No coHost');\n  coHostResponsibility = new BehaviorSubject<CoHostResponsibility[]>([\n    { name: 'participants', value: false, dedicated: false },\n    { name: 'media', value: false, dedicated: false },\n    { name: 'waiting', value: false, dedicated: false },\n    { name: 'chat', value: false, dedicated: false },\n  ]);\n  youAreCoHost = new BehaviorSubject<boolean>(false);\n  youAreHost = new BehaviorSubject<boolean>(false);\n  confirmedToRecord = new BehaviorSubject<boolean>(false);\n  meetingDisplayType = new BehaviorSubject<string>('media');\n  meetingVideoOptimized = new BehaviorSubject<boolean>(false);\n  eventType = new BehaviorSubject<EventType>('webinar');\n  participants = new BehaviorSubject<Participant[]>([]);\n  filteredParticipants = new BehaviorSubject<Participant[]>([]);\n  participantsCounter = new BehaviorSubject<number>(0);\n  participantsFilter = new BehaviorSubject<string>('');\n\n  consume_sockets = new BehaviorSubject<ConsumeSocket[]>([]);\n  rtpCapabilities = new BehaviorSubject<RtpCapabilities | null>(null);\n  roomRecvIPs = new BehaviorSubject<string[]>([]);\n  meetingRoomParams = new BehaviorSubject<MeetingRoomParams | null>(null);\n  itemPageLimit = new BehaviorSubject<number>(4);\n  audioOnlyRoom = new BehaviorSubject<boolean>(false);\n  addForBasic = new BehaviorSubject<boolean>(false);\n  screenPageLimit = new BehaviorSubject<number>(4);\n  shareScreenStarted = new BehaviorSubject<boolean>(false);\n  shared = new BehaviorSubject<boolean>(false);\n  targetOrientation = new BehaviorSubject<string>('landscape');\n  targetResolution = new BehaviorSubject<string>('sd');\n  targetResolutionHost = new BehaviorSubject<string>('sd');\n  vidCons = new BehaviorSubject<VidCons>({ width: 640, height: 360 });\n  frameRate = new BehaviorSubject<number>(10);\n  hParams = new BehaviorSubject<HParamsType>({} as HParamsType);\n  vParams = new BehaviorSubject<VParamsType>({} as VParamsType);\n  screenParams = new BehaviorSubject<ScreenParamsType>({} as ScreenParamsType);\n  aParams = new BehaviorSubject<AParamsType>({} as AParamsType);\n\n  recordingAudioPausesLimit = new BehaviorSubject<number>(0);\n  recordingAudioPausesCount = new BehaviorSubject<number>(0);\n  recordingAudioSupport = new BehaviorSubject<boolean>(false);\n  recordingAudioPeopleLimit = new BehaviorSubject<number>(0);\n  recordingAudioParticipantsTimeLimit = new BehaviorSubject<number>(0);\n  recordingVideoPausesCount = new BehaviorSubject<number>(0);\n  recordingVideoPausesLimit = new BehaviorSubject<number>(0);\n  recordingVideoSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoPeopleLimit = new BehaviorSubject<number>(0);\n  recordingVideoParticipantsTimeLimit = new BehaviorSubject<number>(0);\n  recordingAllParticipantsSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoParticipantsSupport = new BehaviorSubject<boolean>(false);\n  recordingAllParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\n  recordingPreferredOrientation = new BehaviorSubject<string>('landscape');\n  recordingSupportForOtherOrientation = new BehaviorSubject<boolean>(false);\n  recordingMultiFormatsSupport = new BehaviorSubject<boolean>(false);\n\n  userRecordingParams = new BehaviorSubject<UserRecordingParams>({\n    mainSpecs: {\n      mediaOptions: 'video', // 'audio', 'video'\n      audioOptions: 'all', // 'all', 'onScreen', 'host'\n      videoOptions: 'all', // 'all', 'mainScreen'\n      videoType: 'fullDisplay', // 'all', 'bestDisplay', 'fullDisplay'\n      videoOptimized: false, // true, false\n      recordingDisplayType: 'media', // 'media', 'video', 'all'\n      addHLS: false, // true, false\n    },\n    dispSpecs: {\n      nameTags: true, // true, false\n      backgroundColor: '#000000', // '#000000', '#ffffff'\n      nameTagsColor: '#ffffff', // '#000000', '#ffffff'\n      orientationVideo: 'portrait', // 'landscape', 'portrait', 'all'\n    },\n  });\n\n  canRecord = new BehaviorSubject<boolean>(false);\n  startReport = new BehaviorSubject<boolean>(false);\n  endReport = new BehaviorSubject<boolean>(false);\n  recordTimerInterval = new BehaviorSubject<number | null>(null);\n  recordStartTime = new BehaviorSubject<number>(0);\n  recordElapsedTime = new BehaviorSubject<number>(0);\n  isTimerRunning = new BehaviorSubject<boolean>(false);\n  canPauseResume = new BehaviorSubject<boolean>(false);\n  recordChangeSeconds = new BehaviorSubject<number>(15000);\n  pauseLimit = new BehaviorSubject<number>(0);\n  pauseRecordCount = new BehaviorSubject<number>(0);\n  canLaunchRecord = new BehaviorSubject<boolean>(true);\n  stopLaunchRecord = new BehaviorSubject<boolean>(false);\n\n  participantsAll = new BehaviorSubject<Participant[]>([]);\n\n  firstAll = new BehaviorSubject<boolean>(false);\n  updateMainWindow = new BehaviorSubject<boolean>(false);\n  first_round = new BehaviorSubject<boolean>(false);\n  landScaped = new BehaviorSubject<boolean>(false);\n  lock_screen = new BehaviorSubject<boolean>(false);\n  screenId = new BehaviorSubject<string>('');\n  allVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  newLimitedStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  newLimitedStreamsIDs = new BehaviorSubject<string[]>([]);\n  activeSounds = new BehaviorSubject<string[]>([]);\n  screenShareIDStream = new BehaviorSubject<string>('');\n  screenShareNameStream = new BehaviorSubject<string>('');\n  adminIDStream = new BehaviorSubject<string>('');\n  adminNameStream = new BehaviorSubject<string>('');\n  youYouStream = new BehaviorSubject<(Participant | Stream)[]>([]);\n  youYouStreamIDs = new BehaviorSubject<string[]>([]);\n  localStream = new BehaviorSubject<MediaStream | null>(null);\n  recordStarted = new BehaviorSubject<boolean>(false);\n  recordResumed = new BehaviorSubject<boolean>(false);\n  recordPaused = new BehaviorSubject<boolean>(false);\n  recordStopped = new BehaviorSubject<boolean>(false);\n  adminRestrictSetting = new BehaviorSubject<boolean>(false);\n  videoRequestState = new BehaviorSubject<string | null>(null);\n  videoRequestTime = new BehaviorSubject<number>(0);\n  videoAction = new BehaviorSubject<boolean>(false);\n  localStreamVideo = new BehaviorSubject<MediaStream | null>(null);\n  userDefaultVideoInputDevice = new BehaviorSubject<string>('');\n  currentFacingMode = new BehaviorSubject<string>('user');\n  prevFacingMode = new BehaviorSubject<string>('user');\n  defVideoID = new BehaviorSubject<string>('');\n  allowed = new BehaviorSubject<boolean>(false);\n  dispActiveNames = new BehaviorSubject<string[]>([]);\n  p_dispActiveNames = new BehaviorSubject<string[]>([]);\n  activeNames = new BehaviorSubject<string[]>([]);\n  prevActiveNames = new BehaviorSubject<string[]>([]);\n  p_activeNames = new BehaviorSubject<string[]>([]);\n  membersReceived = new BehaviorSubject<boolean>(false);\n  deferScreenReceived = new BehaviorSubject<boolean>(false);\n  hostFirstSwitch = new BehaviorSubject<boolean>(false);\n  micAction = new BehaviorSubject<boolean>(false);\n  screenAction = new BehaviorSubject<boolean>(false);\n  chatAction = new BehaviorSubject<boolean>(false);\n  audioRequestState = new BehaviorSubject<string | null>(null);\n  screenRequestState = new BehaviorSubject<string | null>(null);\n  chatRequestState = new BehaviorSubject<string | null>(null);\n  audioRequestTime = new BehaviorSubject<number>(0);\n  screenRequestTime = new BehaviorSubject<number>(0);\n  chatRequestTime = new BehaviorSubject<number>(0);\n  updateRequestIntervalSeconds = new BehaviorSubject<number>(240);\n  oldSoundIds = new BehaviorSubject<string[]>([]);\n  hostLabel = new BehaviorSubject<string>('Host');\n  mainScreenFilled = new BehaviorSubject<boolean>(false);\n  localStreamScreen = new BehaviorSubject<MediaStream | null>(null);\n  screenAlreadyOn = new BehaviorSubject<boolean>(false);\n  chatAlreadyOn = new BehaviorSubject<boolean>(false);\n  redirectURL = new BehaviorSubject<string>('');\n  oldAllStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  adminVidID = new BehaviorSubject<string>('');\n  streamNames = new BehaviorSubject<Stream[]>([]);\n  non_alVideoStreams = new BehaviorSubject<Participant[]>([]);\n  sortAudioLoudness = new BehaviorSubject<boolean>(false);\n  audioDecibels = new BehaviorSubject<AudioDecibels[]>([]);\n  mixed_alVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  non_alVideoStreams_muted = new BehaviorSubject<Participant[]>([]);\n  paginatedStreams = new BehaviorSubject<(Participant | Stream)[][]>([]);\n  localStreamAudio = new BehaviorSubject<MediaStream | null>(null);\n  defAudioID = new BehaviorSubject<string>('');\n  userDefaultAudioInputDevice = new BehaviorSubject<string>('');\n  userDefaultAudioOutputDevice = new BehaviorSubject<string>('');\n  prevAudioInputDevice = new BehaviorSubject<string>('');\n  prevVideoInputDevice = new BehaviorSubject<string>('');\n  audioPaused = new BehaviorSubject<boolean>(false);\n  mainScreenPerson = new BehaviorSubject<string>('');\n  adminOnMainScreen = new BehaviorSubject<boolean>(false);\n  screenStates = new BehaviorSubject<ScreenState[]>([\n    {\n      mainScreenPerson: '',\n      mainScreenProducerId: '',\n      mainScreenFilled: false,\n      adminOnMainScreen: false,\n    },\n  ]);\n  prevScreenStates = new BehaviorSubject<ScreenState[]>([\n    {\n      mainScreenPerson: '',\n      mainScreenProducerId: '',\n      mainScreenFilled: false,\n      adminOnMainScreen: false,\n    },\n  ]);\n  updateDateState = new BehaviorSubject<number | null>(null);\n  lastUpdate = new BehaviorSubject<number | null>(null);\n  nForReadjustRecord = new BehaviorSubject<number>(0);\n  fixedPageLimit = new BehaviorSubject<number>(4);\n  removeAltGrid = new BehaviorSubject<boolean>(false);\n  nForReadjust = new BehaviorSubject<number>(0);\n  reorderInterval = new BehaviorSubject<number>(30000);\n  fastReorderInterval = new BehaviorSubject<number>(10000);\n  lastReorderTime = new BehaviorSubject<number>(0);\n  audStreamNames = new BehaviorSubject<Stream[]>([]);\n  currentUserPage = new BehaviorSubject<number>(0);\n  mainHeightWidth = new BehaviorSubject<number>(\n    this.eventType.value == 'webinar' ? 67 : this.eventType.value == 'broadcast' ? 100 : 0,\n  );\n  prevMainHeightWidth = new BehaviorSubject<number>(this.mainHeightWidth.value);\n  prevDoPaginate = new BehaviorSubject<boolean>(false);\n  doPaginate = new BehaviorSubject<boolean>(false);\n  shareEnded = new BehaviorSubject<boolean>(false);\n  lStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  chatRefStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  controlHeight = new BehaviorSubject<number>(\n    this.eventType.value === 'webinar' || this.eventType.value === 'conference' ? 0 : 0.06,\n  );\n  isWideScreen = new BehaviorSubject<boolean>(false);\n  isMediumScreen = new BehaviorSubject<boolean>(false);\n  isSmallScreen = new BehaviorSubject<boolean>(false);\n  addGrid = new BehaviorSubject<boolean>(false);\n  addAltGrid = new BehaviorSubject<boolean>(false);\n  gridRows = new BehaviorSubject<number>(0);\n  gridCols = new BehaviorSubject<number>(0);\n  altGridRows = new BehaviorSubject<number>(0);\n  altGridCols = new BehaviorSubject<number>(0);\n  numberPages = new BehaviorSubject<number>(0);\n  currentStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  showMiniView = new BehaviorSubject<boolean>(false);\n  nStream = new BehaviorSubject<MediaStream | null>(null);\n  defer_receive = new BehaviorSubject<boolean>(false);\n  allAudioStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  remoteScreenStream = new BehaviorSubject<Stream[]>([]);\n  screenProducer = new BehaviorSubject<Producer | null>(null);\n  localScreenProducer = new BehaviorSubject<Producer | null>(null);\n  gotAllVids = new BehaviorSubject<boolean>(false);\n  paginationHeightWidth = new BehaviorSubject<number>(40);\n  paginationDirection = new BehaviorSubject<'horizontal' | 'vertical'>('horizontal');\n  gridSizes = new BehaviorSubject<GridSizes>({\n    gridWidth: 0,\n    gridHeight: 0,\n    altGridWidth: 0,\n    altGridHeight: 0,\n  });\n  screenForceFullDisplay = new BehaviorSubject<boolean>(false);\n  mainGridStream = new BehaviorSubject<CustomMediaComponent[]>([]);\n  otherGridStreams = new BehaviorSubject<CustomMediaComponent[][]>([]);\n  audioOnlyStreams = new BehaviorSubject<CustomMediaComponent[]>([]);\n  videoInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\n  audioInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\n  meetingProgressTime = new BehaviorSubject<string>('00:00:00');\n  meetingElapsedTime = new BehaviorSubject<number>(0);\n  ref_participants = new BehaviorSubject<Participant[]>([]);\n\n  updateValidated = (value: boolean) => {\n    this.validated.next(value);\n  };\n\n  updateSocket = (value: Socket) => {\n    this.socket.next(value);\n  };\n\n  updateLocalSocket = (value: Socket | null) => {\n    this.localSocket!.next(value!);\n  };\n\n  updateDevice = (value: Device | null) => {\n    this.device.next(value);\n  };\n\n  updateRoomData = (value: ResponseJoinRoom | null) => {\n    this.roomData.next(value);\n  };\n\n  updateApiKey = (value: string) => {\n    this.apiKey.next(value);\n  };\n\n  updateApiUserName = (value: string) => {\n    this.apiUserName.next(value);\n  };\n\n  updateApiToken = (value: string) => {\n    this.apiToken.next(value);\n  };\n\n  updateLink = (value: string) => {\n    this.link.next(value);\n  };\n\n  updateRoomName = (value: string) => {\n    this.roomName.next(value);\n  };\n\n  updateMember = (value: string) => {\n    if (value.length > 0 && value.includes(\"_\")) {\n      this.updateIslevel(value.split(\"_\")[1]);\n      value = value.split(\"_\")[0];\n    }\n    this.member.next(value);\n  };\n\n  updateAdminPasscode = (value: string) => {\n    this.adminPasscode.next(value);\n  };\n\n  updateIslevel = (value: string) => {\n    this.islevel.next(value);\n  };\n\n  updateCoHost = (value: string) => {\n    this.coHost.next(value);\n  };\n\n  updateCoHostResponsibility = (value: CoHostResponsibility[]) => {\n    this.coHostResponsibility.next(value);\n  };\n\n  updateYouAreCoHost = (value: boolean) => {\n    this.youAreCoHost.next(value);\n  };\n\n  updateYouAreHost = (value: boolean) => {\n    this.youAreHost.next(value);\n  };\n\n  updateConfirmedToRecord = (value: boolean) => {\n    this.confirmedToRecord.next(value);\n  };\n\n  updateMeetingDisplayType = (value: string) => {\n    this.meetingDisplayType.next(value);\n  };\n\n  updateMeetingVideoOptimized = (value: boolean) => {\n    this.meetingVideoOptimized.next(value);\n  };\n\n  updateEventType = (value: EventType) => {\n    this.eventType.next(value);\n    if (value != 'none') {\n      try {\n        setTimeout(() => {\n          this.handleResize();\n        }, 2000);\n      } catch {\n        /* handle error */\n      }\n    }\n  };\n\n  updateParticipants = (value: Participant[]) => {\n    this.participants.next(value);\n    this.participantsCounter.next(value.length);\n    this.filteredParticipants.next(this.participants.value);\n  };\n\n  updateFilteredParticipants = (value: Participant[]) => {\n    this.filteredParticipants.next(value);\n  };\n\n  updateParticipantsCounter = (value: number) => {\n    this.participantsCounter.next(value);\n  };\n\n  updateParticipantsFilter = (value: string) => {\n    this.participantsFilter.next(value);\n  };\n\n  updateConsume_sockets = (value: ConsumeSocket[]) => {\n    this.consume_sockets.next(value);\n  };\n\n  updateRtpCapabilities = (value: RtpCapabilities | null) => {\n    this.rtpCapabilities.next(value);\n  };\n\n  updateRoomRecvIPs = (value: string[]) => {\n    this.roomRecvIPs.next(value);\n  };\n\n  updateMeetingRoomParams = (value: MeetingRoomParams | null) => {\n    this.meetingRoomParams.next(value);\n  };\n\n  updateItemPageLimit = (value: number) => {\n    this.itemPageLimit.next(value);\n  };\n\n  updateAudioOnlyRoom = (value: boolean) => {\n    this.audioOnlyRoom.next(value);\n  };\n\n  updateAddForBasic = (value: boolean) => {\n    this.addForBasic.next(value);\n  };\n\n  updateScreenPageLimit = (value: number) => {\n    this.screenPageLimit.next(value);\n  };\n\n  updateShareScreenStarted = (value: boolean) => {\n    this.shareScreenStarted.next(value);\n  };\n\n  updateShared = (value: boolean) => {\n    this.shared.next(value);\n    this.screenShareActive.next(value);\n    if (value) {\n      setTimeout(async () => {\n        window.dispatchEvent(new Event('resize'));\n      }, 2000);\n    }\n  };\n\n  updateTargetOrientation = (value: string) => {\n    this.targetOrientation.next(value);\n  };\n\n  updateTargetResolution = (value: string) => {\n    this.targetResolution.next(value);\n  };\n\n  updateTargetResolutionHost = (value: string) => {\n    this.targetResolutionHost.next(value);\n  };\n\n  updateVidCons = (value: VidCons) => {\n    this.vidCons.next(value);\n  };\n\n  updateFrameRate = (value: number) => {\n    this.frameRate.next(value);\n  };\n\n  updateHParams = (value: HParamsType) => {\n    this.hParams.next(value);\n  };\n\n  updateVParams = (value: VParamsType) => {\n    this.vParams.next(value);\n  };\n\n  updateScreenParams = (value: ScreenParamsType) => {\n    this.screenParams.next(value);\n  };\n\n  updateAParams = (value: AParamsType) => {\n    this.aParams.next(value);\n  };\n\n  updateRecordingAudioPausesLimit = (value: number) => {\n    this.recordingAudioPausesLimit.next(value);\n  };\n\n  updateRecordingAudioPausesCount = (value: number) => {\n    this.recordingAudioPausesCount.next(value);\n  };\n\n  updateRecordingAudioSupport = (value: boolean) => {\n    this.recordingAudioSupport.next(value);\n  };\n\n  updateRecordingAudioPeopleLimit = (value: number) => {\n    this.recordingAudioPeopleLimit.next(value);\n  };\n\n  updateRecordingAudioParticipantsTimeLimit = (value: number) => {\n    this.recordingAudioParticipantsTimeLimit.next(value);\n  };\n\n  updateRecordingVideoPausesCount = (value: number) => {\n    this.recordingVideoPausesCount.next(value);\n  };\n\n  updateRecordingVideoPausesLimit = (value: number) => {\n    this.recordingVideoPausesLimit.next(value);\n  };\n\n  updateRecordingVideoSupport = (value: boolean) => {\n    this.recordingVideoSupport.next(value);\n  };\n\n  updateRecordingVideoPeopleLimit = (value: number) => {\n    this.recordingVideoPeopleLimit.next(value);\n  };\n\n  updateRecordingVideoParticipantsTimeLimit = (value: number) => {\n    this.recordingVideoParticipantsTimeLimit.next(value);\n  };\n\n  updateRecordingAllParticipantsSupport = (value: boolean) => {\n    this.recordingAllParticipantsSupport.next(value);\n  };\n\n  updateRecordingVideoParticipantsSupport = (value: boolean) => {\n    this.recordingVideoParticipantsSupport.next(value);\n  };\n\n  updateRecordingAllParticipantsFullRoomSupport = (value: boolean) => {\n    this.recordingAllParticipantsFullRoomSupport.next(value);\n  };\n\n  updateRecordingVideoParticipantsFullRoomSupport = (value: boolean) => {\n    this.recordingVideoParticipantsFullRoomSupport.next(value);\n  };\n\n  updateRecordingPreferredOrientation = (value: string) => {\n    this.recordingPreferredOrientation.next(value);\n  };\n\n  updateRecordingSupportForOtherOrientation = (value: boolean) => {\n    this.recordingSupportForOtherOrientation.next(value);\n  };\n\n  updateRecordingMultiFormatsSupport = (value: boolean) => {\n    this.recordingMultiFormatsSupport.next(value);\n  };\n\n  updateUserRecordingParams = (value: UserRecordingParams) => {\n    this.userRecordingParams.next(value);\n  };\n\n  updateCanRecord = (value: boolean) => {\n    this.canRecord.next(value);\n  };\n\n  updateStartReport = (value: boolean) => {\n    this.startReport.next(value);\n  };\n\n  updateEndReport = (value: boolean) => {\n    this.endReport.next(value);\n  };\n\n  updateRecordTimerInterval = (value: number | null) => {\n    this.recordTimerInterval.next(value);\n  };\n\n  updateRecordStartTime = (value: number) => {\n    this.recordStartTime.next(value);\n  };\n\n  updateRecordElapsedTime = (value: number) => {\n    this.recordElapsedTime.next(value);\n  };\n\n  updateIsTimerRunning = (value: boolean) => {\n    this.isTimerRunning.next(value);\n  };\n\n  updateCanPauseResume = (value: boolean) => {\n    this.canPauseResume.next(value);\n  };\n\n  updateRecordChangeSeconds = (value: number) => {\n    this.recordChangeSeconds.next(value);\n  };\n\n  updatePauseLimit = (value: number) => {\n    this.pauseLimit.next(value);\n  };\n\n  updatePauseRecordCount = (value: number) => {\n    this.pauseRecordCount.next(value);\n  };\n\n  updateCanLaunchRecord = (value: boolean) => {\n    this.canLaunchRecord.next(value);\n  };\n\n  updateStopLaunchRecord = (value: boolean) => {\n    this.stopLaunchRecord.next(value);\n  };\n\n  updateParticipantsAll = (value: Participant[]) => {\n    this.participantsAll.next(value);\n  };\n\n  updateFirstAll = (value: boolean) => {\n    this.firstAll.next(value);\n  };\n\n  updateUpdateMainWindow = (value: boolean) => {\n    this.updateMainWindow.next(value);\n  };\n\n  updateFirst_round = (value: boolean) => {\n    this.first_round.next(value);\n  };\n\n  updateLandScaped = (value: boolean) => {\n    this.landScaped.next(value);\n  };\n\n  updateLock_screen = (value: boolean) => {\n    this.lock_screen.next(value);\n  };\n\n  updateScreenId = (value: string) => {\n    this.screenId.next(value);\n  };\n\n  updateAllVideoStreams = (value: (Participant | Stream)[]) => {\n    this.allVideoStreams.next(value);\n  };\n\n  updateNewLimitedStreams = (value: (Participant | Stream)[]) => {\n    this.newLimitedStreams.next(value);\n  };\n\n  updateNewLimitedStreamsIDs = (value: string[]) => {\n    this.newLimitedStreamsIDs.next(value);\n  };\n\n  updateActiveSounds = (value: string[]) => {\n    this.activeSounds.next(value);\n  };\n\n  updateScreenShareIDStream = (value: string) => {\n    this.screenShareIDStream.next(value);\n  };\n\n  updateScreenShareNameStream = (value: string) => {\n    this.screenShareNameStream.next(value);\n  };\n\n  updateAdminIDStream = (value: string) => {\n    this.adminIDStream.next(value);\n  };\n\n  updateAdminNameStream = (value: string) => {\n    this.adminNameStream.next(value);\n  };\n\n  updateYouYouStream = (value: (Participant | Stream)[]) => {\n    this.youYouStream.next(value);\n  };\n\n  updateYouYouStreamIDs = (value: string[]) => {\n    this.youYouStreamIDs.next(value);\n  };\n\n  updateLocalStream = (value: MediaStream | null) => {\n    this.localStream.next(value);\n  };\n\n  updateRecordStarted = (value: boolean) => {\n    this.recordStarted.next(value);\n  };\n\n  updateRecordResumed = (value: boolean) => {\n    this.recordResumed.next(value);\n  };\n\n  updateRecordPaused = (value: boolean) => {\n    this.recordPaused.next(value);\n  };\n\n  updateRecordStopped = (value: boolean) => {\n    this.recordStopped.next(value);\n  };\n\n  updateAdminRestrictSetting = (value: boolean) => {\n    this.adminRestrictSetting.next(value);\n  };\n\n  updateVideoRequestState = (value: string | null) => {\n    this.videoRequestState.next(value);\n  };\n\n  updateVideoRequestTime = (value: number) => {\n    this.videoRequestTime.next(value);\n  };\n\n  updateVideoAction = (value: boolean) => {\n    this.videoAction.next(value);\n  };\n\n  updateLocalStreamVideo = (value: MediaStream | null) => {\n    this.localStreamVideo.next(value);\n  };\n\n  updateUserDefaultVideoInputDevice = (value: string) => {\n    this.userDefaultVideoInputDevice.next(value);\n  };\n\n  updateCurrentFacingMode = (value: string) => {\n    this.currentFacingMode.next(value);\n  };\n\n  updatePrevFacingMode = (value: string) => {\n    this.prevFacingMode.next(value);\n  };\n\n  updateDefVideoID = (value: string) => {\n    this.defVideoID.next(value);\n  };\n\n  updateAllowed = (value: boolean) => {\n    this.allowed.next(value);\n  };\n\n  updateDispActiveNames = (value: string[]) => {\n    this.dispActiveNames.next(value);\n  };\n\n  updateP_dispActiveNames = (value: string[]) => {\n    this.p_dispActiveNames.next(value);\n  };\n\n  updateActiveNames = (value: string[]) => {\n    this.activeNames.next(value);\n  };\n\n  updatePrevActiveNames = (value: string[]) => {\n    this.prevActiveNames.next(value);\n  };\n\n  updateP_activeNames = (value: string[]) => {\n    this.p_activeNames.next(value);\n  };\n\n  updateMembersReceived = (value: boolean) => {\n    this.membersReceived.next(value);\n  };\n\n  updateDeferScreenReceived = (value: boolean) => {\n    this.deferScreenReceived.next(value);\n  };\n\n  updateHostFirstSwitch = (value: boolean) => {\n    this.hostFirstSwitch.next(value);\n  };\n\n  updateMicAction = (value: boolean) => {\n    this.micAction.next(value);\n  };\n\n  updateScreenAction = (value: boolean) => {\n    this.screenAction.next(value);\n  };\n\n  updateChatAction = (value: boolean) => {\n    this.chatAction.next(value);\n  };\n\n  updateAudioRequestState = (value: string | null) => {\n    this.audioRequestState.next(value);\n  };\n\n  updateScreenRequestState = (value: string | null) => {\n    this.screenRequestState.next(value);\n  };\n\n  updateChatRequestState = (value: string | null) => {\n    this.chatRequestState.next(value);\n  };\n\n  updateAudioRequestTime = (value: number) => {\n    this.audioRequestTime.next(value);\n  };\n\n  updateScreenRequestTime = (value: number) => {\n    this.screenRequestTime.next(value);\n  };\n\n  updateChatRequestTime = (value: number) => {\n    this.chatRequestTime.next(value);\n  };\n\n  updateOldSoundIds = (value: string[]) => {\n    this.oldSoundIds.next(value);\n  };\n\n  updateHostLabel = (value: string) => {\n    this.hostLabel.next(value);\n  };\n\n  updateMainScreenFilled = (value: boolean) => {\n    this.mainScreenFilled.next(value);\n  };\n\n  updateLocalStreamScreen = (value: MediaStream | null) => {\n    this.localStreamScreen.next(value);\n  };\n\n  updateScreenAlreadyOn = (value: boolean) => {\n    this.screenAlreadyOn.next(value);\n  };\n\n  updateChatAlreadyOn = (value: boolean) => {\n    this.chatAlreadyOn.next(value);\n  };\n\n  updateRedirectURL = (value: string) => {\n    this.redirectURL.next(value);\n  };\n\n  updateOldAllStreams = (value: (Participant | Stream)[]) => {\n    this.oldAllStreams.next(value);\n  };\n\n  updateAdminVidID = (value: string) => {\n    this.adminVidID.next(value);\n  };\n\n  updateStreamNames = (value: Stream[]) => {\n    this.streamNames.next(value);\n  };\n\n  updateNon_alVideoStreams = (value: Participant[]) => {\n    this.non_alVideoStreams.next(value);\n  };\n\n  updateSortAudioLoudness = (value: boolean) => {\n    this.sortAudioLoudness.next(value);\n  };\n\n  updateAudioDecibels = (value: AudioDecibels[]) => {\n    this.audioDecibels.next(value);\n  };\n\n  updateMixed_alVideoStreams = (value: (Participant | Stream)[]) => {\n    this.mixed_alVideoStreams.next(value);\n  };\n\n  updateNon_alVideoStreams_muted = (value: Participant[]) => {\n    this.non_alVideoStreams_muted.next(value);\n  };\n\n  updatePaginatedStreams = (value: (Participant | Stream)[][]) => {\n    this.paginatedStreams.next(value);\n  };\n\n  updateLocalStreamAudio = (value: MediaStream | null) => {\n    this.localStreamAudio.next(value);\n  };\n\n  updateDefAudioID = (value: string) => {\n    this.defAudioID.next(value);\n  };\n\n  updateUserDefaultAudioInputDevice = (value: string) => {\n    this.userDefaultAudioInputDevice.next(value);\n  };\n\n  updateUserDefaultAudioOutputDevice = (value: string) => {\n    this.userDefaultAudioOutputDevice.next(value);\n  };\n\n  updatePrevAudioInputDevice = (value: string) => {\n    this.prevAudioInputDevice.next(value);\n  };\n\n  updatePrevVideoInputDevice = (value: string) => {\n    this.prevVideoInputDevice.next(value);\n  };\n\n  updateAudioPaused = (value: boolean) => {\n    this.audioPaused.next(value);\n  };\n\n  updateMainScreenPerson = (value: string) => {\n    this.mainScreenPerson.next(value);\n  };\n\n  updateAdminOnMainScreen = (value: boolean) => {\n    this.adminOnMainScreen.next(value);\n  };\n\n  updateScreenStates = (value: ScreenState[]) => {\n    this.screenStates.next(value);\n  };\n\n  updatePrevScreenStates = (value: ScreenState[]) => {\n    this.prevScreenStates.next(value);\n  };\n\n  updateUpdateDateState = (value: number | null) => {\n    this.updateDateState.next(value);\n  };\n\n  updateLastUpdate = (value: number | null) => {\n    this.lastUpdate.next(value);\n  };\n\n  updateNForReadjustRecord = (value: number) => {\n    this.nForReadjustRecord.next(value);\n  };\n\n  updateFixedPageLimit = (value: number) => {\n    this.fixedPageLimit.next(value);\n  };\n\n  updateRemoveAltGrid = (value: boolean) => {\n    this.removeAltGrid.next(value);\n  };\n\n  updateNForReadjust = (value: number) => {\n    this.nForReadjust.next(value);\n  };\n\n  updateLastReorderTime = (value: number) => {\n    this.lastReorderTime.next(value);\n  };\n\n  updateAudStreamNames = (value: Stream[]) => {\n    this.audStreamNames.next(value);\n  };\n\n  updateCurrentUserPage = (value: number) => {\n    this.currentUserPage.next(value);\n  };\n\n  updateMainHeightWidth = (value: number) => {\n    this.mainHeightWidth.next(value);\n  };\n\n  updatePrevMainHeightWidth = (value: number) => {\n    this.prevMainHeightWidth.next(value);\n  };\n\n  updatePrevDoPaginate = (value: boolean) => {\n    this.prevDoPaginate.next(value);\n  };\n\n  updateDoPaginate = (value: boolean) => {\n    this.doPaginate.next(value);\n  };\n\n  updateShareEnded = (value: boolean) => {\n    this.shareEnded.next(value);\n  };\n\n  updateLStreams = (value: (Participant | Stream)[]) => {\n    this.lStreams.next(value);\n  };\n\n  updateChatRefStreams = (value: (Participant | Stream)[]) => {\n    this.chatRefStreams.next(value);\n  };\n\n  updateControlHeight = (value: number) => {\n    this.controlHeight.next(value);\n  };\n\n  updateIsWideScreen = (value: boolean) => {\n    this.isWideScreen.next(value);\n  };\n\n  updateIsMediumScreen = (value: boolean) => {\n    this.isMediumScreen.next(value);\n  };\n\n  updateIsSmallScreen = (value: boolean) => {\n    this.isSmallScreen.next(value);\n  };\n\n  updateAddGrid = (value: boolean) => {\n    this.addGrid.next(value);\n  };\n\n  updateAddAltGrid = (value: boolean) => {\n    this.addAltGrid.next(value);\n  };\n\n  updateGridRows = (value: number) => {\n    this.gridRows.next(value);\n  };\n\n  updateGridCols = (value: number) => {\n    this.gridCols.next(value);\n  };\n\n  updateAltGridRows = (value: number) => {\n    this.altGridRows.next(value);\n  };\n\n  updateAltGridCols = (value: number) => {\n    this.altGridCols.next(value);\n  };\n\n  updateNumberPages = (value: number) => {\n    this.numberPages.next(value);\n  };\n\n  updateCurrentStreams = (value: (Participant | Stream)[]) => {\n    this.currentStreams.next(value);\n  };\n\n  updateShowMiniView = (value: boolean) => {\n    this.showMiniView.next(value);\n  };\n\n  updateNStream = (value: MediaStream | null) => {\n    this.nStream.next(value);\n  };\n\n  updateDefer_receive = (value: boolean) => {\n    this.defer_receive.next(value);\n  };\n\n  updateAllAudioStreams = (value: (Participant | Stream)[]) => {\n    this.allAudioStreams.next(value);\n  };\n\n  updateRemoteScreenStream = (value: Stream[]) => {\n    this.remoteScreenStream.next(value);\n  };\n\n  updateScreenProducer = (value: Producer | null) => {\n    this.screenProducer.next(value);\n  };\n\n  updateLocalScreenProducer = (value: Producer | null) => {\n    this.localScreenProducer.next(value);\n  };\n\n  updateGotAllVids = (value: boolean) => {\n    this.gotAllVids.next(value);\n  };\n\n  updatePaginationHeightWidth = (value: number) => {\n    this.paginationHeightWidth.next(value);\n  };\n\n  updatePaginationDirection = (value: 'horizontal' | 'vertical') => {\n    this.paginationDirection.next(value);\n  };\n\n  updateGridSizes = (value: GridSizes) => {\n    this.gridSizes.next(value);\n  };\n\n  updateScreenForceFullDisplay = (value: boolean) => {\n    this.screenForceFullDisplay.next(value);\n  };\n\n  updateMainGridStream = (value: CustomMediaComponent[]) => {\n    this.mainGridStream.next(value);\n  };\n\n  updateOtherGridStreams = (value: CustomMediaComponent[][]) => {\n    this.otherGridStreams.next(value);\n  };\n\n  updateAudioOnlyStreams = (value: CustomMediaComponent[]) => {\n    this.audioOnlyStreams.next(value);\n  };\n\n  updateVideoInputs = (value: MediaDeviceInfo[]) => {\n    this.videoInputs.next(value);\n  };\n\n  updateAudioInputs = (value: MediaDeviceInfo[]) => {\n    this.audioInputs.next(value);\n  };\n\n  updateMeetingProgressTime = (value: string) => {\n    this.meetingProgressTime.next(value);\n  };\n\n  updateMeetingElapsedTime = (value: number) => {\n    this.meetingElapsedTime.next(value);\n  };\n\n  updateRef_participants = (value: Participant[]) => {\n    this.ref_participants.next(value);\n  };\n\n  // Messages\n  messages = new BehaviorSubject<Message[]>([]);\n  startDirectMessage = new BehaviorSubject<boolean>(false);\n  directMessageDetails = new BehaviorSubject<Participant | null>(null);\n  showMessagesBadge = new BehaviorSubject<boolean>(false);\n\n  // Event Settings\n  audioSetting = new BehaviorSubject<string>('allow');\n  videoSetting = new BehaviorSubject<string>('allow');\n  screenshareSetting = new BehaviorSubject<string>('allow');\n  chatSetting = new BehaviorSubject<string>('allow');\n\n  // Display Settings\n  displayOption = new BehaviorSubject<string>('media');\n  autoWave = new BehaviorSubject<boolean>(true);\n  forceFullDisplay = new BehaviorSubject<boolean>(true);\n  prevForceFullDisplay = new BehaviorSubject<boolean>(false);\n  prevMeetingDisplayType = new BehaviorSubject<string>('video');\n\n  // Waiting Room\n  waitingRoomFilter = new BehaviorSubject<string>('');\n  waitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>(\n    this.useSeed && this.seedData?.waitingList ? this.seedData.waitingList : [],\n  );\n  waitingRoomCounter = new BehaviorSubject<number>(0);\n  filteredWaitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>(\n    this.useSeed && this.seedData?.waitingList ? this.seedData.waitingList : [],\n  );\n\n  // Requests\n  requestFilter = new BehaviorSubject<string>('');\n  requestList = new BehaviorSubject<Request[]>(\n    this.useSeed && this.seedData?.requests ? this.seedData.requests : [],\n  );\n  requestCounter = new BehaviorSubject<number>(0);\n  filteredRequestList = new BehaviorSubject<Request[]>(\n    this.useSeed && this.seedData?.requests ? this.seedData.requests : [],\n  );\n\n  // Total Requests and Waiting Room\n  totalReqWait = new BehaviorSubject<number>(0);\n\n  // Alerts\n  alertVisible = new BehaviorSubject<boolean>(false);\n  alertMessage = new BehaviorSubject<string>('');\n  alertType = new BehaviorSubject<'success' | 'danger' | 'info' | 'warning'>('success');\n  alertPosition = new BehaviorSubject<\n    'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center'\n  >('top');\n  alertDuration = new BehaviorSubject<number>(3000);\n\n  // Progress Timer\n  progressTimerVisible = new BehaviorSubject<boolean>(true);\n  progressTimerValue = new BehaviorSubject<number>(0);\n\n  // Menu Modals\n  isMenuModalVisible = new BehaviorSubject<boolean>(false);\n  isRecordingModalVisible = new BehaviorSubject<boolean>(false);\n  isSettingsModalVisible = new BehaviorSubject<boolean>(false);\n  isRequestsModalVisible = new BehaviorSubject<boolean>(false);\n  isWaitingModalVisible = new BehaviorSubject<boolean>(false);\n  isCoHostModalVisible = new BehaviorSubject<boolean>(false);\n  isMediaSettingsModalVisible = new BehaviorSubject<boolean>(false);\n  isDisplaySettingsModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Other Modals\n  isParticipantsModalVisible = new BehaviorSubject<boolean>(false);\n  isMessagesModalVisible = new BehaviorSubject<boolean>(false);\n  isConfirmExitModalVisible = new BehaviorSubject<boolean>(false);\n  isConfirmHereModalVisible = new BehaviorSubject<boolean>(false);\n  private suppressConfirmHereForSession = false;\n  isShareEventModalVisible = new BehaviorSubject<boolean>(false);\n  isLoadingModalVisible = new BehaviorSubject<boolean>(false);\n  modernThemeDarkMode = new BehaviorSubject<boolean>(false);\n\n  resolvePreferredTheme = (): boolean => {\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\n      : false;\n  };\n\n  updateModernThemeDarkMode = (value: boolean) => {\n    this.modernThemeDarkMode.next(value);\n    this.updateButtonState('modernThemeDarkMode', value);\n    this.cdr.detectChanges();\n  };\n\n  // Recording Options\n  recordingMediaOptions = new BehaviorSubject<string>('video');\n  recordingAudioOptions = new BehaviorSubject<string>('all');\n  recordingVideoOptions = new BehaviorSubject<string>('all');\n  recordingVideoType = new BehaviorSubject<string>('fullDisplay');\n  recordingVideoOptimized = new BehaviorSubject<boolean>(false);\n  recordingDisplayType = new BehaviorSubject<'video' | 'media' | 'all'>('video');\n  recordingAddHLS = new BehaviorSubject<boolean>(true);\n  recordingNameTags = new BehaviorSubject<boolean>(true);\n  recordingBackgroundColor = new BehaviorSubject<string>('#83c0e9');\n  recordingNameTagsColor = new BehaviorSubject<string>('#ffffff');\n  recordingAddText = new BehaviorSubject<boolean>(false);\n  recordingCustomText = new BehaviorSubject<string>('Add Text');\n  recordingCustomTextPosition = new BehaviorSubject<string>('top');\n  recordingCustomTextColor = new BehaviorSubject<string>('#ffffff');\n  recordingOrientationVideo = new BehaviorSubject<string>('landscape');\n  clearedToResume = new BehaviorSubject<boolean>(true);\n  clearedToRecord = new BehaviorSubject<boolean>(true);\n  recordState = new BehaviorSubject<string>('green');\n  showRecordButtons = new BehaviorSubject<boolean>(false);\n  recordingProgressTime = new BehaviorSubject<string>('00:00:00');\n  audioSwitching = new BehaviorSubject<boolean>(false);\n  videoSwitching = new BehaviorSubject<boolean>(false);\n\n  // Media States\n  videoAlreadyOn = new BehaviorSubject<boolean>(false);\n  audioAlreadyOn = new BehaviorSubject<boolean>(false);\n\n  componentSizes = new BehaviorSubject<ComponentSizes>({\n    mainHeight: 0,\n    otherHeight: 0,\n    mainWidth: 0,\n    otherWidth: 0,\n  });\n\n  // Permissions\n  hasCameraPermission = new BehaviorSubject<boolean>(false);\n  hasAudioPermission = new BehaviorSubject<boolean>(false);\n\n  // Transports\n  transportCreated = new BehaviorSubject<boolean>(false);\n  localTransportCreated = new BehaviorSubject<boolean>(false);\n  transportCreatedVideo = new BehaviorSubject<boolean>(false);\n  transportCreatedAudio = new BehaviorSubject<boolean>(false);\n  transportCreatedScreen = new BehaviorSubject<boolean>(false);\n  producerTransport = new BehaviorSubject<Transport | null>(null);\n  localProducerTransport = new BehaviorSubject<Transport | null>(null);\n  videoProducer = new BehaviorSubject<Producer | null>(null);\n  localVideoProducer = new BehaviorSubject<Producer | null>(null);\n  params = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  videoParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  audioParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  audioProducer = new BehaviorSubject<Producer | null>(null);\n  audioLevel = new BehaviorSubject<number>(0);\n  localAudioProducer = new BehaviorSubject<Producer | null>(null);\n  consumerTransports = new BehaviorSubject<TransportType[]>([]);\n  consumingTransports = new BehaviorSubject<string[]>([]);\n\n  // Polls\n  polls = new BehaviorSubject<Poll[]>(\n    this.useSeed && this.seedData?.polls ? this.seedData.polls : [],\n  );\n  poll = new BehaviorSubject<Poll | null>(null);\n  isPollModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Background\n  customImage = new BehaviorSubject<string>('');\n  selectedImage = new BehaviorSubject<string>('');\n  segmentVideo = new BehaviorSubject<MediaStream | null>(null);\n  selfieSegmentation = new BehaviorSubject<SelfieSegmentation | null>(null);\n  pauseSegmentation = new BehaviorSubject<boolean>(false);\n  processedStream = new BehaviorSubject<MediaStream | null>(null);\n  keepBackground = new BehaviorSubject<boolean>(false);\n  backgroundHasChanged = new BehaviorSubject<boolean>(false);\n  virtualStream = new BehaviorSubject<MediaStream | null>(null);\n  mainCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  prevKeepBackground = new BehaviorSubject<boolean>(false);\n  appliedBackground = new BehaviorSubject<boolean>(false);\n  isBackgroundModalVisible = new BehaviorSubject<boolean>(false);\n  autoClickBackground = new BehaviorSubject<boolean>(false);\n\n  // Breakout Rooms\n  breakoutRooms = new BehaviorSubject<BreakoutParticipant[][]>(\n    this.useSeed && this.seedData?.breakoutRooms ? this.seedData.breakoutRooms : [],\n  );\n  currentRoomIndex = new BehaviorSubject<number>(0);\n  canStartBreakout = new BehaviorSubject<boolean>(false);\n  breakOutRoomStarted = new BehaviorSubject<boolean>(false);\n  breakOutRoomEnded = new BehaviorSubject<boolean>(false);\n  hostNewRoom = new BehaviorSubject<number>(-1);\n  limitedBreakRoom = new BehaviorSubject<BreakoutParticipant[]>([]);\n  mainRoomsLength = new BehaviorSubject<number>(0);\n  memberRoom = new BehaviorSubject<number>(-1);\n  isBreakoutRoomsModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Whiteboard\n  whiteboardUsers = new BehaviorSubject<WhiteboardUser[]>(\n    this.useSeed && this.seedData?.whiteboardUsers ? this.seedData.whiteboardUsers : [],\n  );\n  currentWhiteboardIndex = new BehaviorSubject<number>(0);\n  canStartWhiteboard = new BehaviorSubject<boolean>(false);\n  whiteboardStarted = new BehaviorSubject<boolean>(false);\n  whiteboardEnded = new BehaviorSubject<boolean>(false);\n  whiteboardLimit = new BehaviorSubject<number>(4);\n  isWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\n  isConfigureWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\n  shapes = new BehaviorSubject<Shape[]>([]);\n  useImageBackground = new BehaviorSubject<boolean>(true);\n  redoStack = new BehaviorSubject<Shape[]>([]);\n  undoStack = new BehaviorSubject<string[]>([]);\n  canvasStream = new BehaviorSubject<MediaStream | null>(null);\n  canvasWhiteboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\n\n  // Screenboard\n  canvasScreenboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  processedScreenStream = new BehaviorSubject<MediaStream | null>(null);\n  annotateScreenStream = new BehaviorSubject<boolean>(false);\n  mainScreenCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  isScreenboardModalVisible = new BehaviorSubject<boolean>(false);\n\n  //state variables for the control buttons\n  micActive = new BehaviorSubject<boolean>(\n    this.audioAlreadyOn.value ? this.audioAlreadyOn.value : false,\n  );\n  videoActive = new BehaviorSubject<boolean>(\n    this.videoAlreadyOn.value ? this.videoAlreadyOn.value : false,\n  );\n  screenShareActive = new BehaviorSubject<boolean>(false);\n  endCallActive = new BehaviorSubject<boolean>(false);\n  participantsActive = new BehaviorSubject<boolean>(false);\n  menuActive = new BehaviorSubject<boolean>(false);\n  commentsActive = new BehaviorSubject<boolean>(false);\n\n  // Update functions\n  updateMessages = (value: Message[]) => {\n    this.messages.next(value);\n  };\n\n  updateStartDirectMessage = (value: boolean) => {\n    this.startDirectMessage.next(value);\n  };\n\n  updateDirectMessageDetails = (value: Participant | null) => {\n    this.directMessageDetails.next(value);\n  };\n\n  updateShowMessagesBadge = (value: boolean) => {\n    this.showMessagesBadge.next(value);\n  };\n\n  updateAudioSetting = (value: string) => {\n    this.audioSetting.next(value);\n  };\n\n  updateVideoSetting = (value: string) => {\n    this.videoSetting.next(value);\n  };\n\n  updateScreenshareSetting = (value: string) => {\n    this.screenshareSetting.next(value);\n  };\n\n  updateChatSetting = (value: string) => {\n    this.chatSetting.next(value);\n  };\n\n  updateDisplayOption = (value: string) => {\n    this.displayOption.next(value);\n  };\n\n  updateAutoWave = (value: boolean) => {\n    this.autoWave.next(value);\n  };\n\n  updateForceFullDisplay = (value: boolean) => {\n    this.forceFullDisplay.next(value);\n  };\n\n  updatePrevForceFullDisplay = (value: boolean) => {\n    this.prevForceFullDisplay.next(value);\n  };\n\n  updatePrevMeetingDisplayType = (value: string) => {\n    this.prevMeetingDisplayType.next(value);\n  };\n\n  updateWaitingRoomCounter = (value: number) => {\n    this.waitingRoomCounter.next(value);\n  };\n\n  updateWaitingRoomFilter = (value: string) => {\n    this.waitingRoomFilter.next(value);\n  };\n\n  updateWaitingRoomList = (value: WaitingRoomParticipant[]) => {\n    this.waitingRoomList.next(value);\n    this.filteredWaitingRoomList.next(value);\n    this.waitingRoomCounter.next(value.length);\n  };\n\n  onWaitingRoomFilterChange = (value: string) => {\n    if (value !== '' && value.length > 0) {\n      const filteredWaitingRoom = this.waitingRoomList\n        .getValue()\n        .filter((waitingRoom: WaitingRoomParticipant) => {\n          return waitingRoom.name.toLowerCase().includes(value.toLowerCase());\n        });\n      this.filteredWaitingRoomList.next(filteredWaitingRoom);\n      this.waitingRoomCounter.next(filteredWaitingRoom.length);\n    } else {\n      this.filteredWaitingRoomList.next(this.waitingRoomList.getValue());\n      this.waitingRoomCounter.next(this.waitingRoomList.getValue().length);\n    }\n  };\n\n  onWaitingRoomClose = () => {\n    this.updateIsWaitingModalVisible(false);\n  };\n\n  updateRequestCounter = (value: number) => {\n    this.requestCounter.next(value);\n  };\n\n  updateRequestFilter = (value: string) => {\n    this.requestFilter.next(value);\n  };\n\n  updateRequestList = (value: Request[]) => {\n    this.requestList.next(value);\n    this.filteredRequestList.next(value);\n    this.requestCounter.next(value.length);\n  };\n\n  onRequestFilterChange = (value: string) => {\n    if (value !== '' && value.length > 0) {\n      const filteredRequest = this.requestList.getValue().filter((request: Request) => {\n        return request?.name?.toLowerCase().includes(value.toLowerCase()) ?? false;\n      });\n      this.filteredRequestList.next(filteredRequest);\n      this.requestCounter.next(filteredRequest.length);\n    } else {\n      this.filteredRequestList.next(this.requestList.getValue());\n      this.requestCounter.next(this.requestList.getValue().length);\n    }\n  };\n\n  onRequestClose = () => {\n    this.updateIsRequestsModalVisible(false);\n  };\n\n  updateTotalReqWait = (value: number) => {\n    this.totalReqWait.next(value);\n  };\n\n  updateAlertVisible = (value: boolean) => {\n    this.alertVisible.next(value);\n  };\n\n  updateAlertMessage = (value: string) => {\n    this.alertMessage.next(value);\n  };\n\n  updateAlertType = (value: 'success' | 'danger' | 'info' | 'warning') => {\n    this.alertType.next(value);\n  };\n\n  updateAlertPosition = (\n    value: 'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center',\n  ) => {\n    this.alertPosition.next(value);\n  };\n\n  updateAlertDuration = (value: number) => {\n    this.alertDuration.next(value);\n  };\n\n  updateProgressTimerVisible = (value: boolean) => {\n    this.progressTimerVisible.next(value);\n  };\n\n  updateProgressTimerValue = (value: number) => {\n    this.progressTimerValue.next(value);\n  };\n\n  updateIsMenuModalVisible = (value: boolean) => {\n    this.isMenuModalVisible.next(value);\n  };\n\n  updateIsRecordingModalVisible = (value: boolean) => {\n    this.isRecordingModalVisible.next(value);\n    if (value) {\n      this.updateConfirmedToRecord(false);\n    } else {\n      if (\n        this.clearedToRecord.getValue() &&\n        this.clearedToResume.getValue() &&\n        this.recordStarted.getValue()\n      ) {\n        this.updateShowRecordButtons(true);\n      }\n    }\n  };\n\n  updateIsSettingsModalVisible = (value: boolean) => {\n    this.isSettingsModalVisible.next(value);\n  };\n\n  updateIsRequestsModalVisible = (value: boolean) => {\n    this.isRequestsModalVisible.next(value);\n  };\n\n  updateIsWaitingModalVisible = (value: boolean) => {\n    this.isWaitingModalVisible.next(value);\n  };\n\n  updateIsCoHostModalVisible = (value: boolean) => {\n    this.isCoHostModalVisible.next(value);\n  };\n\n  updateIsMediaSettingsModalVisible = (value: boolean) => {\n    this.isMediaSettingsModalVisible.next(value);\n  };\n\n  updateIsDisplaySettingsModalVisible = (value: boolean) => {\n    this.isDisplaySettingsModalVisible.next(value);\n  };\n\n  updateIsParticipantsModalVisible = (value: boolean) => {\n    this.isParticipantsModalVisible.next(value);\n  };\n\n  updateIsMessagesModalVisible = (value: boolean) => {\n    this.isMessagesModalVisible.next(value);\n    if (!value) {\n      this.updateShowMessagesBadge(false);\n    }\n  };\n\n  updateIsConfirmExitModalVisible = (value: boolean) => {\n    this.isConfirmExitModalVisible.next(value);\n  };\n\n  updateIsConfirmHereModalVisible = (value: boolean) => {\n    this.isConfirmHereModalVisible.next(value);\n  };\n\n  updateIsLoadingModalVisible = (value: boolean) => {\n    this.isLoadingModalVisible.next(value);\n  };\n\n  updateIsShareEventModalVisible = (value: boolean) => {\n    this.isShareEventModalVisible.next(value);\n  };\n\n  updateRecordingMediaOptions = (value: string) => {\n    this.recordingMediaOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAudioOptions = (value: string) => {\n    this.recordingAudioOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoOptions = (value: string) => {\n    this.recordingVideoOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoType = (value: string) => {\n    this.recordingVideoType.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoOptimized = (value: boolean) => {\n    this.recordingVideoOptimized.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingDisplayType = (value: 'video' | 'media' | 'all') => {\n    this.recordingDisplayType.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAddHLS = (value: boolean) => {\n    this.recordingAddHLS.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAddText = (value: boolean) => {\n    this.recordingAddText.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomText = (value: string) => {\n    this.recordingCustomText.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomTextPosition = (value: string) => {\n    this.recordingCustomTextPosition.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomTextColor = (value: string) => {\n    this.recordingCustomTextColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingNameTags = (value: boolean) => {\n    this.recordingNameTags.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingBackgroundColor = (value: string) => {\n    this.recordingBackgroundColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingNameTagsColor = (value: string) => {\n    this.recordingNameTagsColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingOrientationVideo = (value: string) => {\n    this.recordingOrientationVideo.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateClearedToResume = (value: boolean) => {\n    this.clearedToResume.next(value);\n  };\n\n  updateClearedToRecord = (value: boolean) => {\n    this.clearedToRecord.next(value);\n  };\n\n  updateRecordState = (value: string) => {\n    if (this.recordStarted.value && !this.recordStopped.value) {\n      if (!this.recordPaused.value) {\n        this.recordState.next('red');\n      } else {\n        this.recordState.next('yellow');\n      }\n    } else {\n      this.recordState.next(value);\n    }\n    this.recordState.next(value);\n  };\n\n  updateShowRecordButtons = (value: boolean) => {\n    this.showRecordButtons.next(value);\n  };\n\n  updateRecordingProgressTime = (value: string) => {\n    this.recordingProgressTime.next(value);\n    this.updateRecordTimerWidget();\n  };\n\n  updateAudioSwitching = (value: boolean) => {\n    this.audioSwitching.next(value);\n  };\n\n  updateVideoSwitching = (value: boolean) => {\n    this.videoSwitching.next(value);\n  };\n\n  updateVideoAlreadyOn = (value: boolean) => {\n    this.videoAlreadyOn.next(value);\n    this.videoActive.next(value);\n  };\n\n  updateAudioAlreadyOn = (value: boolean) => {\n    this.audioAlreadyOn.next(value);\n    this.micActive.next(value);\n  };\n\n  updateComponentSizes = (sizes: ComponentSizes) => {\n    this.componentSizes.next(sizes);\n  };\n\n  updateHasCameraPermission = (value: boolean) => {\n    this.hasCameraPermission.next(value);\n  };\n\n  updateHasAudioPermission = (value: boolean) => {\n    this.hasAudioPermission.next(value);\n  };\n\n  requestPermissionCamera(): Promise<string> {\n    // Implement the request permission logic here\n    return Promise.resolve('granted');\n  }\n\n  requestPermissionAudio(): Promise<string> {\n    // Implement the request permission logic here\n    return Promise.resolve('granted');\n  }\n\n  updateTransportCreated = (value: boolean) => {\n    this.transportCreated.next(value);\n  };\n\n  updateLocalTransportCreated = (value: boolean) => {\n    this.localTransportCreated.next(value);\n  };\n\n  updateTransportCreatedVideo = (value: boolean) => {\n    this.transportCreatedVideo.next(value);\n  };\n\n  updateTransportCreatedAudio = (value: boolean) => {\n    this.transportCreatedAudio.next(value);\n  };\n\n  updateTransportCreatedScreen = (value: boolean) => {\n    this.transportCreatedScreen.next(value);\n  };\n\n  updateProducerTransport = (value: Transport | null) => {\n    this.producerTransport.next(value);\n  };\n\n  updateLocalProducerTransport = (value: Transport | null) => {\n    this.localProducerTransport.next(value);\n  };\n\n  updateVideoProducer = (value: Producer | null) => {\n    this.videoProducer.next(value);\n  };\n\n  updateLocalVideoProducer = (value: Producer | null) => {\n    this.localVideoProducer.next(value);\n  }\n\n  updateParams = (value: ProducerOptions) => {\n    this.params.next(value);\n  };\n\n  updateVideoParams = (value: ProducerOptions) => {\n    this.videoParams.next(value);\n  };\n\n  updateAudioParams = (value: ProducerOptions) => {\n    this.audioParams.next(value);\n  };\n\n  updateAudioProducer = (value: Producer | null) => {\n    this.audioProducer.next(value);\n  };\n\n  updateAudioLevel = (value: number) => {\n    this.audioLevel.next(value);\n  };\n\n  updateLocalAudioProducer = (value: Producer | null) => {\n    this.localAudioProducer.next(value);\n  };\n\n  updateConsumerTransports = (value: TransportType[]) => {\n    this.consumerTransports.next(value);\n  };\n\n  updateConsumingTransports = (value: string[]) => {\n    this.consumingTransports.next(value);\n  };\n\n  updatePolls = (value: Poll[]) => {\n    this.polls.next(value);\n  };\n\n  updatePoll = (value: Poll | null) => {\n    this.poll.next(value);\n  };\n\n  updateIsPollModalVisible = (value: boolean) => {\n    this.isPollModalVisible.next(value);\n  };\n\n  updateCustomImage = (value: string) => {\n    this.customImage.next(value);\n  };\n\n  updateSelectedImage = (value: string) => {\n    this.selectedImage.next(value);\n  };\n\n  updateSegmentVideo = (value: MediaStream | null) => {\n    this.segmentVideo.next(value);\n  };\n\n  updateSelfieSegmentation = (value: SelfieSegmentation | null) => {\n    this.selfieSegmentation.next(value);\n  };\n\n  updatePauseSegmentation = (value: boolean) => {\n    this.pauseSegmentation.next(value);\n  };\n\n  updateProcessedStream = (value: MediaStream | null) => {\n    this.processedStream.next(value);\n  };\n\n  updateKeepBackground = (value: boolean) => {\n    this.keepBackground.next(value);\n  };\n\n  updateBackgroundHasChanged = (value: boolean) => {\n    this.backgroundHasChanged.next(value);\n  };\n\n  updateVirtualStream = (value: MediaStream | null) => {\n    this.virtualStream.next(value);\n  };\n\n  updateMainCanvas = (value: HTMLCanvasElement | null) => {\n    this.mainCanvas.next(value);\n  };\n\n  updatePrevKeepBackground = (value: boolean) => {\n    this.prevKeepBackground.next(value);\n  };\n\n  updateAppliedBackground = (value: boolean) => {\n    this.appliedBackground.next(value);\n  };\n\n  updateIsBackgroundModalVisible = (value: boolean) => {\n    this.isBackgroundModalVisible.next(value);\n  };\n\n  updateAutoClickBackground = (value: boolean) => {\n    this.autoClickBackground.next(value);\n  };\n\n  updateBreakoutRooms = (value: BreakoutParticipant[][]) => {\n    this.breakoutRooms.next(value);\n  };\n\n  updateCurrentRoomIndex = (value: number) => {\n    this.currentRoomIndex.next(value);\n  };\n\n  updateCanStartBreakout = (value: boolean) => {\n    this.canStartBreakout.next(value);\n  };\n\n  updateBreakOutRoomStarted = (value: boolean) => {\n    this.breakOutRoomStarted.next(value);\n  };\n\n  updateBreakOutRoomEnded = (value: boolean) => {\n    this.breakOutRoomEnded.next(value);\n  };\n\n  updateHostNewRoom = (value: number) => {\n    this.hostNewRoom.next(value);\n  };\n\n  updateLimitedBreakRoom = (value: BreakoutParticipant[]) => {\n    this.limitedBreakRoom.next(value);\n  };\n\n  updateMainRoomsLength = (value: number) => {\n    this.mainRoomsLength.next(value);\n  };\n\n  updateMemberRoom = (value: number) => {\n    this.memberRoom.next(value);\n  };\n\n  updateIsBreakoutRoomsModalVisible = (value: boolean) => {\n    this.isBreakoutRoomsModalVisible.next(value);\n  };\n\n  updateWhiteboardUsers = (value: WhiteboardUser[]) => {\n    this.whiteboardUsers.next(value);\n  };\n\n  updateCurrentWhiteboardIndex = (value: number) => {\n    this.currentWhiteboardIndex.next(value);\n  };\n\n  updateCanStartWhiteboard = (value: boolean) => {\n    this.canStartWhiteboard.next(value);\n  };\n\n  updateWhiteboardStarted = (value: boolean) => {\n    this.whiteboardStarted.next(value);\n  };\n\n  updateWhiteboardEnded = (value: boolean) => {\n    this.whiteboardEnded.next(value);\n  };\n\n  updateWhiteboardLimit = (value: number) => {\n    this.whiteboardLimit.next(value);\n  };\n\n  updateIsWhiteboardModalVisible = (value: boolean) => {\n    this.isWhiteboardModalVisible.next(value);\n  };\n\n  updateIsConfigureWhiteboardModalVisible = (value: boolean) => {\n    this.isConfigureWhiteboardModalVisible.next(value);\n  };\n\n  updateShapes = (value: Shape[]) => {\n    this.shapes.next(value);\n  };\n\n  updateUseImageBackground = (value: boolean) => {\n    this.useImageBackground.next(value);\n  };\n\n  updateRedoStack = (value: Shape[]) => {\n    this.redoStack.next(value);\n  };\n\n  updateUndoStack = (value: string[]) => {\n    this.undoStack.next(value);\n  };\n\n  updateCanvasStream = (value: MediaStream | null) => {\n    this.canvasStream.next(value);\n  };\n\n  updateCanvasWhiteboard = (value: HTMLCanvasElement | null) => {\n    this.canvasWhiteboard.next(value);\n  };\n\n  updateCanvasScreenboard = (value: HTMLCanvasElement | null) => {\n    this.canvasScreenboard.next(value);\n  };\n\n  updateProcessedScreenStream = (value: MediaStream | null) => {\n    this.processedScreenStream.next(value);\n  };\n\n  updateAnnotateScreenStream = (value: boolean) => {\n    this.annotateScreenStream.next(value);\n  };\n\n  updateMainScreenCanvas = (value: HTMLCanvasElement | null) => {\n    this.mainScreenCanvas.next(value);\n  };\n\n  updateIsScreenboardModalVisible = (value: boolean) => {\n    this.isScreenboardModalVisible.next(value);\n  };\n\n  checkOrientation = () => {\n    const isPortrait = window.matchMedia('(orientation: portrait)').matches;\n    return isPortrait ? 'portrait' : 'landscape';\n  };\n\n  showAlert = ({\n    message,\n    type,\n    duration = 3000,\n    position,\n  }: {\n    message: string;\n    type: 'success' | 'danger' | 'info' | 'warning';\n    duration?: number;\n    position?: 'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center';\n  }) => {\n    const effectivePosition = position ?? (type === 'danger' || type === 'warning' ? 'center' : 'top');\n\n    this.updateAlertMessage(message);\n    this.updateAlertType(type);\n    this.updateAlertPosition(effectivePosition);\n    this.updateAlertDuration(duration);\n    this.updateAlertVisible(true);\n  };\n\n  getAllParams() {\n    return {\n      localUIMode: this.localUIMode.value, // Local UI mode\n\n      // Room Details\n      roomName: this.roomName.value,\n      member: this.member.value,\n      adminPasscode: this.adminPasscode.value,\n      youAreCoHost: this.youAreCoHost.value,\n      youAreHost: this.youAreHost.value,\n      islevel: this.islevel.value,\n      confirmedToRecord: this.confirmedToRecord.value,\n      meetingDisplayType: this.meetingDisplayType.value,\n      meetingVideoOptimized: this.meetingVideoOptimized.value,\n      eventType: this.eventType.value,\n      participants: this.participants.value,\n      filteredParticipants: this.filteredParticipants.value,\n      participantsCounter: this.participantsCounter.value,\n      participantsFilter: this.participantsFilter.value,\n\n      // More room details - media\n      consume_sockets: this.consume_sockets.value,\n      rtpCapabilities: this.rtpCapabilities.value,\n      roomRecvIPs: this.roomRecvIPs.value,\n      meetingRoomParams: this.meetingRoomParams.value,\n      itemPageLimit: this.itemPageLimit.value,\n      audioOnlyRoom: this.audioOnlyRoom.value,\n      addForBasic: this.addForBasic.value,\n      screenPageLimit: this.screenPageLimit.value,\n      shareScreenStarted: this.shareScreenStarted.value,\n      shared: this.shared.value,\n      targetOrientation: this.targetOrientation.value,\n      targetResolution: this.targetResolution.value,\n      targetResolutionHost: this.targetResolutionHost.value,\n      vidCons: this.vidCons.value,\n      frameRate: this.frameRate.value,\n      hParams: this.hParams.value,\n      vParams: this.vParams.value,\n      screenParams: this.screenParams.value,\n      aParams: this.aParams.value,\n\n      // More room details - recording\n      recordingAudioPausesLimit: this.recordingAudioPausesLimit.value,\n      recordingAudioPausesCount: this.recordingAudioPausesCount.value,\n      recordingAudioSupport: this.recordingAudioSupport.value,\n      recordingAudioPeopleLimit: this.recordingAudioPeopleLimit.value,\n      recordingAudioParticipantsTimeLimit: this.recordingAudioParticipantsTimeLimit.value,\n      recordingVideoPausesCount: this.recordingVideoPausesCount.value,\n      recordingVideoPausesLimit: this.recordingVideoPausesLimit.value,\n      recordingVideoSupport: this.recordingVideoSupport.value,\n      recordingVideoPeopleLimit: this.recordingVideoPeopleLimit.value,\n      recordingVideoParticipantsTimeLimit: this.recordingVideoParticipantsTimeLimit.value,\n      recordingAllParticipantsSupport: this.recordingAllParticipantsSupport.value,\n      recordingVideoParticipantsSupport: this.recordingVideoParticipantsSupport.value,\n      recordingAllParticipantsFullRoomSupport: this.recordingAllParticipantsFullRoomSupport.value,\n      recordingVideoParticipantsFullRoomSupport:\n        this.recordingVideoParticipantsFullRoomSupport.value,\n      recordingPreferredOrientation: this.recordingPreferredOrientation.value,\n      recordingSupportForOtherOrientation: this.recordingSupportForOtherOrientation.value,\n      recordingMultiFormatsSupport: this.recordingMultiFormatsSupport.value,\n\n      userRecordingParams: this.userRecordingParams.value,\n      canRecord: this.canRecord.value,\n      startReport: this.startReport.value,\n      endReport: this.endReport.value,\n      recordStartTime: this.recordStartTime.value,\n      recordElapsedTime: this.recordElapsedTime.value,\n      isTimerRunning: this.isTimerRunning.value,\n      canPauseResume: this.canPauseResume.value,\n      recordChangeSeconds: this.recordChangeSeconds.value,\n      pauseLimit: this.pauseLimit.value,\n      pauseRecordCount: this.pauseRecordCount.value,\n      canLaunchRecord: this.canLaunchRecord.value,\n      stopLaunchRecord: this.stopLaunchRecord.value,\n\n      participantsAll: this.participantsAll.value,\n\n      firstAll: this.firstAll.value,\n      updateMainWindow: this.updateMainWindow.value,\n      first_round: this.first_round.value,\n      landScaped: this.landScaped.value,\n      lock_screen: this.lock_screen.value,\n      screenId: this.screenId.value,\n      allVideoStreams: this.allVideoStreams.value,\n      newLimitedStreams: this.newLimitedStreams.value,\n      newLimitedStreamsIDs: this.newLimitedStreamsIDs.value,\n      activeSounds: this.activeSounds.value,\n      screenShareIDStream: this.screenShareIDStream.value,\n      screenShareNameStream: this.screenShareNameStream.value,\n      adminIDStream: this.adminIDStream.value,\n      adminNameStream: this.adminNameStream.value,\n      youYouStream: this.youYouStream.value,\n      youYouStreamIDs: this.youYouStreamIDs.value,\n      localStream: this.localStream.value,\n      recordStarted: this.recordStarted.value,\n      recordResumed: this.recordResumed.value,\n      recordPaused: this.recordPaused.value,\n      recordStopped: this.recordStopped.value,\n      adminRestrictSetting: this.adminRestrictSetting.value,\n      videoRequestState: this.videoRequestState.value,\n      videoRequestTime: this.videoRequestTime.value,\n      videoAction: this.videoAction.value,\n      localStreamVideo: this.localStreamVideo.value,\n      userDefaultVideoInputDevice: this.userDefaultVideoInputDevice.value,\n      currentFacingMode: this.currentFacingMode.value,\n      prevFacingMode: this.prevFacingMode.value,\n      defVideoID: this.defVideoID.value,\n      allowed: this.allowed.value,\n      dispActiveNames: this.dispActiveNames.value,\n      p_dispActiveNames: this.p_dispActiveNames.value,\n      activeNames: this.activeNames.value,\n      prevActiveNames: this.prevActiveNames.value,\n      p_activeNames: this.p_activeNames.value,\n      membersReceived: this.membersReceived.value,\n      deferScreenReceived: this.deferScreenReceived.value,\n      hostFirstSwitch: this.hostFirstSwitch.value,\n      micAction: this.micAction.value,\n      screenAction: this.screenAction.value,\n      chatAction: this.chatAction.value,\n      audioRequestState: this.audioRequestState.value,\n      screenRequestState: this.screenRequestState.value,\n      chatRequestState: this.chatRequestState.value,\n      audioRequestTime: this.audioRequestTime.value,\n      screenRequestTime: this.screenRequestTime.value,\n      chatRequestTime: this.chatRequestTime.value,\n      updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\n      oldSoundIds: this.oldSoundIds.value,\n      hostLabel: this.hostLabel.value,\n      mainScreenFilled: this.mainScreenFilled.value,\n      localStreamScreen: this.localStreamScreen.value,\n      screenAlreadyOn: this.screenAlreadyOn.value,\n      chatAlreadyOn: this.chatAlreadyOn.value,\n      redirectURL: this.redirectURL.value,\n      oldAllStreams: this.oldAllStreams.value,\n      adminVidID: this.adminVidID.value,\n      streamNames: this.streamNames.value,\n      non_alVideoStreams: this.non_alVideoStreams.value,\n      sortAudioLoudness: this.sortAudioLoudness.value,\n      audioDecibels: this.audioDecibels.value,\n      mixed_alVideoStreams: this.mixed_alVideoStreams.value,\n      non_alVideoStreams_muted: this.non_alVideoStreams_muted.value,\n      paginatedStreams: this.paginatedStreams.value,\n      localStreamAudio: this.localStreamAudio.value,\n      defAudioID: this.defAudioID.value,\n      userDefaultAudioInputDevice: this.userDefaultAudioInputDevice.value,\n      userDefaultAudioOutputDevice: this.userDefaultAudioOutputDevice.value,\n      prevAudioInputDevice: this.prevAudioInputDevice.value,\n      prevVideoInputDevice: this.prevVideoInputDevice.value,\n      audioPaused: this.audioPaused.value,\n      mainScreenPerson: this.mainScreenPerson.value,\n      adminOnMainScreen: this.adminOnMainScreen.value,\n      screenStates: this.screenStates.value,\n      prevScreenStates: this.prevScreenStates.value,\n      updateDateState: this.updateDateState.value,\n      lastUpdate: this.lastUpdate.value,\n      nForReadjustRecord: this.nForReadjustRecord.value,\n      fixedPageLimit: this.fixedPageLimit.value,\n      removeAltGrid: this.removeAltGrid.value,\n      nForReadjust: this.nForReadjust.value,\n      lastReorderTime: this.lastReorderTime.value,\n      reorderInterval: this.reorderInterval.value,\n      fastReorderInterval: this.fastReorderInterval.value,\n      audStreamNames: this.audStreamNames.value,\n      currentUserPage: this.currentUserPage.value,\n      mainHeightWidth: this.mainHeightWidth.value,\n      prevMainHeightWidth: this.prevMainHeightWidth.value,\n      prevDoPaginate: this.prevDoPaginate.value,\n      doPaginate: this.doPaginate.value,\n      shareEnded: this.shareEnded.value,\n      lStreams: this.lStreams.value,\n      chatRefStreams: this.chatRefStreams.value,\n      controlHeight: this.controlHeight.value,\n      isWideScreen: this.isWideScreen.value,\n      isMediumScreen: this.isMediumScreen.value,\n      isSmallScreen: this.isSmallScreen.value,\n      addGrid: this.addGrid.value,\n      addAltGrid: this.addAltGrid.value,\n      gridRows: this.gridRows.value,\n      gridCols: this.gridCols.value,\n      altGridRows: this.altGridRows.value,\n      altGridCols: this.altGridCols.value,\n      numberPages: this.numberPages.value,\n      currentStreams: this.currentStreams.value,\n      showMiniView: this.showMiniView.value,\n      nStream: this.nStream.value,\n      defer_receive: this.defer_receive.value,\n      allAudioStreams: this.allAudioStreams.value,\n      screenProducer: this.screenProducer.value,\n      remoteScreenStream: this.remoteScreenStream.value,\n      gotAllVids: this.gotAllVids.value,\n      paginationHeightWidth: this.paginationHeightWidth.value,\n      paginationDirection: this.paginationDirection.value,\n      gridSizes: this.gridSizes.value,\n      screenForceFullDisplay: this.screenForceFullDisplay.value,\n      mainGridStream: this.mainGridStream.value,\n      otherGridStreams: this.otherGridStreams.value,\n      audioOnlyStreams: this.audioOnlyStreams.value,\n      videoInputs: this.videoInputs.value,\n      audioInputs: this.audioInputs.value,\n      meetingProgressTime: this.meetingProgressTime.value,\n      meetingElapsedTime: this.meetingElapsedTime.value,\n\n      ref_participants: this.ref_participants.value,\n\n      messages: this.messages.value,\n      startDirectMessage: this.startDirectMessage.value,\n      directMessageDetails: this.directMessageDetails.value,\n      coHost: this.coHost.value,\n      coHostResponsibility: this.coHostResponsibility.value,\n\n      // Event settings\n      audioSetting: this.audioSetting.value,\n      videoSetting: this.videoSetting.value,\n      screenshareSetting: this.screenshareSetting.value,\n      chatSetting: this.chatSetting.value,\n\n      // Display settings\n      autoWave: this.autoWave.value,\n      forceFullDisplay: this.forceFullDisplay.value,\n      prevForceFullDisplay: this.prevForceFullDisplay.value,\n      prevMeetingDisplayType: this.prevMeetingDisplayType.value,\n\n      // Waiting room\n      waitingRoomFilter: this.waitingRoomFilter.value,\n      waitingRoomList: this.waitingRoomList.value,\n      waitingRoomCounter: this.waitingRoomCounter.value,\n      filteredWaitingRoomList: this.filteredWaitingRoomList.value,\n\n      // Requests\n      requestFilter: this.requestFilter.value,\n      requestList: this.requestList.value,\n      requestCounter: this.requestCounter.value,\n      filteredRequestList: this.filteredRequestList.value,\n\n      // Total requests and waiting room\n      totalReqWait: this.totalReqWait.value,\n\n      // Alerts\n      alertVisible: this.alertVisible.value,\n      alertMessage: this.alertMessage.value,\n      alertType: this.alertType.value,\n      alertPosition: this.alertPosition.value,\n      alertDuration: this.alertDuration.value,\n\n      // Progress Timer\n      progressTimerVisible: this.progressTimerVisible.value,\n      progressTimerValue: this.progressTimerValue.value,\n\n      // Menu modals\n      isMenuModalVisible: this.isMenuModalVisible.value,\n      isRecordingModalVisible: this.isRecordingModalVisible.value,\n      isSettingsModalVisible: this.isSettingsModalVisible.value,\n      isRequestsModalVisible: this.isRequestsModalVisible.value,\n      isWaitingModalVisible: this.isWaitingModalVisible.value,\n      isCoHostModalVisible: this.isCoHostModalVisible.value,\n      isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\n      isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\n\n      // Other Modals\n      isParticipantsModalVisible: this.isParticipantsModalVisible.value,\n      isMessagesModalVisible: this.isMessagesModalVisible.value,\n      isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n      isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\n      isLoadingModalVisible: this.isLoadingModalVisible.value,\n\n      // Recording Options\n      recordingMediaOptions: this.recordingMediaOptions.value,\n      recordingAudioOptions: this.recordingAudioOptions.value,\n      recordingVideoOptions: this.recordingVideoOptions.value,\n      recordingVideoType: this.recordingVideoType.value,\n      recordingVideoOptimized: this.recordingVideoOptimized.value,\n      recordingDisplayType: this.recordingDisplayType.value,\n      recordingAddHLS: this.recordingAddHLS.value,\n      recordingAddText: this.recordingAddText.value,\n      recordingCustomText: this.recordingCustomText.value,\n      recordingCustomTextPosition: this.recordingCustomTextPosition.value,\n      recordingCustomTextColor: this.recordingCustomTextColor.value,\n      recordingNameTags: this.recordingNameTags.value,\n      recordingBackgroundColor: this.recordingBackgroundColor.value,\n      recordingNameTagsColor: this.recordingNameTagsColor.value,\n      recordingOrientationVideo: this.recordingOrientationVideo.value,\n      clearedToResume: this.clearedToResume.value,\n      clearedToRecord: this.clearedToRecord.value,\n      recordState: this.recordState.value,\n      showRecordButtons: this.showRecordButtons.value,\n      recordingProgressTime: this.recordingProgressTime.value,\n      audioSwitching: this.audioSwitching.value,\n      videoSwitching: this.videoSwitching.value,\n\n      // Media states\n      videoAlreadyOn: this.videoAlreadyOn.value,\n      audioAlreadyOn: this.audioAlreadyOn.value,\n      componentSizes: this.componentSizes.value,\n\n      // Permissions\n      hasCameraPermission: this.hasCameraPermission.value,\n      hasAudioPermission: this.hasAudioPermission.value,\n\n      // Transports\n      transportCreated: this.transportCreated.value,\n      localTransportCreated: this.localTransportCreated.value,\n      transportCreatedVideo: this.transportCreatedVideo.value,\n      transportCreatedAudio: this.transportCreatedAudio.value,\n      transportCreatedScreen: this.transportCreatedScreen.value,\n      producerTransport: this.producerTransport.value,\n      localProducerTransport: this.localProducerTransport.value,\n      videoProducer: this.videoProducer.value,\n      localVideoProducer: this.localVideoProducer.value,\n      params: this.params.value,\n      videoParams: this.videoParams.value,\n      audioParams: this.audioParams.value,\n      audioProducer: this.audioProducer.value,\n      audioLevel: this.audioLevel.value,\n      localAudioProducer: this.localAudioProducer.value,\n      consumerTransports: this.consumerTransports.value,\n      consumingTransports: this.consumingTransports.value,\n\n      // Polls\n      polls: this.polls.value,\n      poll: this.poll.value,\n      isPollModalVisible: this.isPollModalVisible.value,\n\n      // Background\n      customImage: this.customImage.value,\n      selectedImage: this.selectedImage.value,\n      segmentVideo: this.segmentVideo.value,\n      selfieSegmentation: this.selfieSegmentation.value,\n      pauseSegmentation: this.pauseSegmentation.value,\n      processedStream: this.processedStream.value,\n      keepBackground: this.keepBackground.value,\n      backgroundHasChanged: this.backgroundHasChanged.value,\n      virtualStream: this.virtualStream.value,\n      mainCanvas: this.mainCanvas.value,\n      prevKeepBackground: this.prevKeepBackground.value,\n      appliedBackground: this.appliedBackground.value,\n      isBackgroundModalVisible: this.isBackgroundModalVisible.value,\n      autoClickBackground: this.autoClickBackground.value,\n\n      // Breakout rooms\n      breakoutRooms: this.breakoutRooms.value,\n      currentRoomIndex: this.currentRoomIndex.value,\n      canStartBreakout: this.canStartBreakout.value,\n      breakOutRoomStarted: this.breakOutRoomStarted.value,\n      breakOutRoomEnded: this.breakOutRoomEnded.value,\n      hostNewRoom: this.hostNewRoom.value,\n      limitedBreakRoom: this.limitedBreakRoom.value,\n      mainRoomsLength: this.mainRoomsLength.value,\n      memberRoom: this.memberRoom.value,\n      isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\n\n      // Whiteboard\n      whiteboardUsers: this.whiteboardUsers.value,\n      currentWhiteboardIndex: this.currentWhiteboardIndex.value,\n      canStartWhiteboard: this.canStartWhiteboard.value,\n      whiteboardStarted: this.whiteboardStarted.value,\n      whiteboardEnded: this.whiteboardEnded.value,\n      whiteboardLimit: this.whiteboardLimit.value,\n      isWhiteboardModalVisible: this.isWhiteboardModalVisible.value,\n      isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\n      shapes: this.shapes.value,\n      useImageBackground: this.useImageBackground.value,\n      redoStack: this.redoStack.value,\n      undoStack: this.undoStack.value,\n      canvasStream: this.canvasStream.value,\n      canvasWhiteboard: this.canvasWhiteboard.value,\n\n      // Screenboard\n      canvasScreenboard: this.canvasScreenboard.value,\n      processedScreenStream: this.processedScreenStream.value,\n      annotateScreenStream: this.annotateScreenStream.value,\n      mainScreenCanvas: this.mainScreenCanvas.value,\n      isScreenboardModalVisible: this.isScreenboardModalVisible.value,\n\n      validated: this.validated.value,\n      device: this.device.value,\n      socket: this.socket.value,\n      localSocket: this.localSocket!.value,\n      checkMediaPermission: false,\n      onWeb: true,\n\n      // Update functions\n      updateRoomName: this.updateRoomName.bind(this),\n      updateMember: this.updateMember.bind(this),\n      updateAdminPasscode: this.updateAdminPasscode.bind(this),\n      updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\n      updateYouAreHost: this.updateYouAreHost.bind(this),\n      updateIslevel: this.updateIslevel.bind(this),\n      updateCoHost: this.updateCoHost.bind(this),\n      updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\n      updateConfirmedToRecord: this.updateConfirmedToRecord.bind(this),\n      updateMeetingDisplayType: this.updateMeetingDisplayType.bind(this),\n      updateMeetingVideoOptimized: this.updateMeetingVideoOptimized.bind(this),\n      updateEventType: this.updateEventType.bind(this),\n      updateParticipants: this.updateParticipants.bind(this),\n      updateParticipantsCounter: this.updateParticipantsCounter.bind(this),\n      updateParticipantsFilter: this.updateParticipantsFilter.bind(this),\n\n      // More update functions for media details\n      updateConsume_sockets: this.updateConsume_sockets.bind(this),\n      updateRtpCapabilities: this.updateRtpCapabilities.bind(this),\n      updateRoomRecvIPs: this.updateRoomRecvIPs.bind(this),\n      updateMeetingRoomParams: this.updateMeetingRoomParams.bind(this),\n      updateItemPageLimit: this.updateItemPageLimit.bind(this),\n      updateAudioOnlyRoom: this.updateAudioOnlyRoom.bind(this),\n      updateAddForBasic: this.updateAddForBasic.bind(this),\n      updateScreenPageLimit: this.updateScreenPageLimit.bind(this),\n      updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\n      updateShared: this.updateShared.bind(this),\n      updateTargetOrientation: this.updateTargetOrientation.bind(this),\n      updateTargetResolution: this.updateTargetResolution.bind(this),\n      updateTargetResolutionHost: this.updateTargetResolutionHost.bind(this),\n      updateVidCons: this.updateVidCons.bind(this),\n      updateFrameRate: this.updateFrameRate.bind(this),\n      updateHParams: this.updateHParams.bind(this),\n      updateVParams: this.updateVParams.bind(this),\n      updateScreenParams: this.updateScreenParams.bind(this),\n      updateAParams: this.updateAParams.bind(this),\n\n      // More update functions for recording details\n      updateRecordingAudioPausesLimit: this.updateRecordingAudioPausesLimit.bind(this),\n      updateRecordingAudioPausesCount: this.updateRecordingAudioPausesCount.bind(this),\n      updateRecordingAudioSupport: this.updateRecordingAudioSupport.bind(this),\n      updateRecordingAudioPeopleLimit: this.updateRecordingAudioPeopleLimit.bind(this),\n      updateRecordingAudioParticipantsTimeLimit:\n        this.updateRecordingAudioParticipantsTimeLimit.bind(this),\n      updateRecordingVideoPausesCount: this.updateRecordingVideoPausesCount.bind(this),\n      updateRecordingVideoPausesLimit: this.updateRecordingVideoPausesLimit.bind(this),\n      updateRecordingVideoSupport: this.updateRecordingVideoSupport.bind(this),\n      updateRecordingVideoPeopleLimit: this.updateRecordingVideoPeopleLimit.bind(this),\n      updateRecordingVideoParticipantsTimeLimit:\n        this.updateRecordingVideoParticipantsTimeLimit.bind(this),\n      updateRecordingAllParticipantsSupport: this.updateRecordingAllParticipantsSupport.bind(this),\n      updateRecordingVideoParticipantsSupport:\n        this.updateRecordingVideoParticipantsSupport.bind(this),\n      updateRecordingAllParticipantsFullRoomSupport:\n        this.updateRecordingAllParticipantsFullRoomSupport.bind(this),\n      updateRecordingVideoParticipantsFullRoomSupport:\n        this.updateRecordingVideoParticipantsFullRoomSupport.bind(this),\n      updateRecordingPreferredOrientation: this.updateRecordingPreferredOrientation.bind(this),\n      updateRecordingSupportForOtherOrientation:\n        this.updateRecordingSupportForOtherOrientation.bind(this),\n      updateRecordingMultiFormatsSupport: this.updateRecordingMultiFormatsSupport.bind(this),\n\n      updateUserRecordingParams: this.updateUserRecordingParams.bind(this),\n      updateCanRecord: this.updateCanRecord.bind(this),\n      updateStartReport: this.updateStartReport.bind(this),\n      updateEndReport: this.updateEndReport.bind(this),\n      updateRecordTimerInterval: this.updateRecordTimerInterval.bind(this),\n      updateRecordStartTime: this.updateRecordStartTime.bind(this),\n      updateRecordElapsedTime: this.updateRecordElapsedTime.bind(this),\n      updateIsTimerRunning: this.updateIsTimerRunning.bind(this),\n      updateCanPauseResume: this.updateCanPauseResume.bind(this),\n      updateRecordChangeSeconds: this.updateRecordChangeSeconds.bind(this),\n      updatePauseLimit: this.updatePauseLimit.bind(this),\n      updatePauseRecordCount: this.updatePauseRecordCount.bind(this),\n      updateCanLaunchRecord: this.updateCanLaunchRecord.bind(this),\n      updateStopLaunchRecord: this.updateStopLaunchRecord.bind(this),\n\n      updateParticipantsAll: this.updateParticipantsAll.bind(this),\n\n      updateFirstAll: this.updateFirstAll.bind(this),\n      updateUpdateMainWindow: this.updateUpdateMainWindow.bind(this),\n      updateFirst_round: this.updateFirst_round.bind(this),\n      updateLandScaped: this.updateLandScaped.bind(this),\n      updateLock_screen: this.updateLock_screen.bind(this),\n      updateScreenId: this.updateScreenId.bind(this),\n      updateAllVideoStreams: this.updateAllVideoStreams.bind(this),\n      updateNewLimitedStreams: this.updateNewLimitedStreams.bind(this),\n      updateNewLimitedStreamsIDs: this.updateNewLimitedStreamsIDs.bind(this),\n      updateActiveSounds: this.updateActiveSounds.bind(this),\n      updateScreenShareIDStream: this.updateScreenShareIDStream.bind(this),\n      updateScreenShareNameStream: this.updateScreenShareNameStream.bind(this),\n      updateAdminIDStream: this.updateAdminIDStream.bind(this),\n      updateAdminNameStream: this.updateAdminNameStream.bind(this),\n      updateYouYouStream: this.updateYouYouStream.bind(this),\n      updateYouYouStreamIDs: this.updateYouYouStreamIDs.bind(this),\n      updateLocalStream: this.updateLocalStream.bind(this),\n      updateRecordStarted: this.updateRecordStarted.bind(this),\n      updateRecordResumed: this.updateRecordResumed.bind(this),\n      updateRecordPaused: this.updateRecordPaused.bind(this),\n      updateRecordStopped: this.updateRecordStopped.bind(this),\n      updateAdminRestrictSetting: this.updateAdminRestrictSetting.bind(this),\n      updateVideoRequestState: this.updateVideoRequestState.bind(this),\n      updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\n      updateVideoAction: this.updateVideoAction.bind(this),\n      updateLocalStreamVideo: this.updateLocalStreamVideo.bind(this),\n      updateUserDefaultVideoInputDevice: this.updateUserDefaultVideoInputDevice.bind(this),\n      updateCurrentFacingMode: this.updateCurrentFacingMode.bind(this),\n      updatePrevFacingMode: this.updatePrevFacingMode.bind(this),\n      updateDefVideoID: this.updateDefVideoID.bind(this),\n      updateAllowed: this.updateAllowed.bind(this),\n      updateDispActiveNames: this.updateDispActiveNames.bind(this),\n      updateP_dispActiveNames: this.updateP_dispActiveNames.bind(this),\n      updateActiveNames: this.updateActiveNames.bind(this),\n      updatePrevActiveNames: this.updatePrevActiveNames.bind(this),\n      updateP_activeNames: this.updateP_activeNames.bind(this),\n      updateMembersReceived: this.updateMembersReceived.bind(this),\n      updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\n      updateHostFirstSwitch: this.updateHostFirstSwitch.bind(this),\n      updateMicAction: this.updateMicAction.bind(this),\n      updateScreenAction: this.updateScreenAction.bind(this),\n      updateChatAction: this.updateChatAction.bind(this),\n      updateAudioRequestState: this.updateAudioRequestState.bind(this),\n      updateScreenRequestState: this.updateScreenRequestState.bind(this),\n      updateChatRequestState: this.updateChatRequestState.bind(this),\n      updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\n      updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\n      updateChatRequestTime: this.updateChatRequestTime.bind(this),\n      updateOldSoundIds: this.updateOldSoundIds.bind(this),\n      updateHostLabel: this.updateHostLabel.bind(this),\n      updateMainScreenFilled: this.updateMainScreenFilled.bind(this),\n      updateLocalStreamScreen: this.updateLocalStreamScreen.bind(this),\n      updateScreenAlreadyOn: this.updateScreenAlreadyOn.bind(this),\n      updateChatAlreadyOn: this.updateChatAlreadyOn.bind(this),\n      updateRedirectURL: this.updateRedirectURL.bind(this),\n      updateOldAllStreams: this.updateOldAllStreams.bind(this),\n      updateAdminVidID: this.updateAdminVidID.bind(this),\n      updateStreamNames: this.updateStreamNames.bind(this),\n      updateNon_alVideoStreams: this.updateNon_alVideoStreams.bind(this),\n      updateSortAudioLoudness: this.updateSortAudioLoudness.bind(this),\n      updateAudioDecibels: this.updateAudioDecibels.bind(this),\n      updateMixed_alVideoStreams: this.updateMixed_alVideoStreams.bind(this),\n      updateNon_alVideoStreams_muted: this.updateNon_alVideoStreams_muted.bind(this),\n      updatePaginatedStreams: this.updatePaginatedStreams.bind(this),\n      updateLocalStreamAudio: this.updateLocalStreamAudio.bind(this),\n      updateDefAudioID: this.updateDefAudioID.bind(this),\n      updateUserDefaultAudioInputDevice: this.updateUserDefaultAudioInputDevice.bind(this),\n      updateUserDefaultAudioOutputDevice: this.updateUserDefaultAudioOutputDevice.bind(this),\n      updatePrevAudioInputDevice: this.updatePrevAudioInputDevice.bind(this),\n      updatePrevVideoInputDevice: this.updatePrevVideoInputDevice.bind(this),\n      updateAudioPaused: this.updateAudioPaused.bind(this),\n      updateMainScreenPerson: this.updateMainScreenPerson.bind(this),\n      updateAdminOnMainScreen: this.updateAdminOnMainScreen.bind(this),\n      updateScreenStates: this.updateScreenStates.bind(this),\n      updatePrevScreenStates: this.updatePrevScreenStates.bind(this),\n      updateUpdateDateState: this.updateUpdateDateState.bind(this),\n      updateLastUpdate: this.updateLastUpdate.bind(this),\n      updateNForReadjustRecord: this.updateNForReadjustRecord.bind(this),\n      updateFixedPageLimit: this.updateFixedPageLimit.bind(this),\n      updateRemoveAltGrid: this.updateRemoveAltGrid.bind(this),\n      updateNForReadjust: this.updateNForReadjust.bind(this),\n      updateLastReorderTime: this.updateLastReorderTime.bind(this),\n      updateAudStreamNames: this.updateAudStreamNames.bind(this),\n      updateCurrentUserPage: this.updateCurrentUserPage.bind(this),\n      updateMainHeightWidth: this.updateMainHeightWidth.bind(this),\n      updatePrevMainHeightWidth: this.updatePrevMainHeightWidth.bind(this),\n      updatePrevDoPaginate: this.updatePrevDoPaginate.bind(this),\n      updateDoPaginate: this.updateDoPaginate.bind(this),\n      updateShareEnded: this.updateShareEnded.bind(this),\n      updateLStreams: this.updateLStreams.bind(this),\n      updateChatRefStreams: this.updateChatRefStreams.bind(this),\n      updateControlHeight: this.updateControlHeight.bind(this),\n      updateIsWideScreen: this.updateIsWideScreen.bind(this),\n      updateIsMediumScreen: this.updateIsMediumScreen.bind(this),\n      updateIsSmallScreen: this.updateIsSmallScreen.bind(this),\n      updateAddGrid: this.updateAddGrid.bind(this),\n      updateAddAltGrid: this.updateAddAltGrid.bind(this),\n      updateGridRows: this.updateGridRows.bind(this),\n      updateGridCols: this.updateGridCols.bind(this),\n      updateAltGridRows: this.updateAltGridRows.bind(this),\n      updateAltGridCols: this.updateAltGridCols.bind(this),\n      updateNumberPages: this.updateNumberPages.bind(this),\n      updateCurrentStreams: this.updateCurrentStreams.bind(this),\n      updateShowMiniView: this.updateShowMiniView.bind(this),\n      updateNStream: this.updateNStream.bind(this),\n      updateDefer_receive: this.updateDefer_receive.bind(this),\n      updateAllAudioStreams: this.updateAllAudioStreams.bind(this),\n      updateRemoteScreenStream: this.updateRemoteScreenStream.bind(this),\n      updateScreenProducer: this.updateScreenProducer.bind(this),\n      updateGotAllVids: this.updateGotAllVids.bind(this),\n      updatePaginationHeightWidth: this.updatePaginationHeightWidth.bind(this),\n      updatePaginationDirection: this.updatePaginationDirection.bind(this),\n      updateGridSizes: this.updateGridSizes.bind(this),\n      updateScreenForceFullDisplay: this.updateScreenForceFullDisplay.bind(this),\n      updateMainGridStream: this.updateMainGridStream.bind(this),\n      updateOtherGridStreams: this.updateOtherGridStreams.bind(this),\n      updateAudioOnlyStreams: this.updateAudioOnlyStreams.bind(this),\n      updateVideoInputs: this.updateVideoInputs.bind(this),\n      updateAudioInputs: this.updateAudioInputs.bind(this),\n      updateMeetingProgressTime: this.updateMeetingProgressTime.bind(this),\n      updateMeetingElapsedTime: this.updateMeetingElapsedTime.bind(this),\n      updateRef_participants: this.updateRef_participants.bind(this),\n\n      updateMessages: this.updateMessages.bind(this),\n      updateStartDirectMessage: this.updateStartDirectMessage.bind(this),\n      updateDirectMessageDetails: this.updateDirectMessageDetails.bind(this),\n      updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\n\n      // Event settings\n      updateAudioSetting: this.updateAudioSetting.bind(this),\n      updateVideoSetting: this.updateVideoSetting.bind(this),\n      updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\n      updateChatSetting: this.updateChatSetting.bind(this),\n\n      // Display settings\n      updateAutoWave: this.updateAutoWave.bind(this),\n      updateForceFullDisplay: this.updateForceFullDisplay.bind(this),\n      updatePrevForceFullDisplay: this.updatePrevForceFullDisplay.bind(this),\n      updatePrevMeetingDisplayType: this.updatePrevMeetingDisplayType.bind(this),\n\n      // Waiting room\n      updateWaitingRoomFilter: this.updateWaitingRoomFilter.bind(this),\n      updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\n      updateWaitingRoomCounter: this.updateWaitingRoomCounter.bind(this),\n\n      // Requests\n      updateRequestFilter: this.updateRequestFilter.bind(this),\n      updateRequestList: this.updateRequestList.bind(this),\n      updateRequestCounter: this.updateRequestCounter.bind(this),\n\n      // Total requests and waiting room\n      updateTotalReqWait: this.updateTotalReqWait.bind(this),\n\n      // Menu modals\n      updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\n      updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n      updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\n      updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\n      updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\n      updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\n      updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\n      updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\n\n      // Other modals\n      updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\n      updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\n      updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\n      updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\n      updateIsLoadingModalVisible: this.updateIsLoadingModalVisible.bind(this),\n\n      // Recording Options\n      updateRecordingMediaOptions: this.updateRecordingMediaOptions.bind(this),\n      updateRecordingAudioOptions: this.updateRecordingAudioOptions.bind(this),\n      updateRecordingVideoOptions: this.updateRecordingVideoOptions.bind(this),\n      updateRecordingVideoType: this.updateRecordingVideoType.bind(this),\n      updateRecordingVideoOptimized: this.updateRecordingVideoOptimized.bind(this),\n      updateRecordingDisplayType: this.updateRecordingDisplayType.bind(this),\n      updateRecordingAddHLS: this.updateRecordingAddHLS.bind(this),\n      updateRecordingAddText: this.updateRecordingAddText.bind(this),\n      updateRecordingCustomText: this.updateRecordingCustomText.bind(this),\n      updateRecordingCustomTextPosition: this.updateRecordingCustomTextPosition.bind(this),\n      updateRecordingCustomTextColor: this.updateRecordingCustomTextColor.bind(this),\n      updateRecordingNameTags: this.updateRecordingNameTags.bind(this),\n      updateRecordingBackgroundColor: this.updateRecordingBackgroundColor.bind(this),\n      updateRecordingNameTagsColor: this.updateRecordingNameTagsColor.bind(this),\n      updateRecordingOrientationVideo: this.updateRecordingOrientationVideo.bind(this),\n      updateClearedToResume: this.updateClearedToResume.bind(this),\n      updateClearedToRecord: this.updateClearedToRecord.bind(this),\n      updateRecordState: this.updateRecordState.bind(this),\n      updateShowRecordButtons: this.updateShowRecordButtons.bind(this),\n      updateRecordingProgressTime: this.updateRecordingProgressTime.bind(this),\n      updateAudioSwitching: this.updateAudioSwitching.bind(this),\n      updateVideoSwitching: this.updateVideoSwitching.bind(this),\n\n      // Media states\n      updateVideoAlreadyOn: this.updateVideoAlreadyOn.bind(this),\n      updateAudioAlreadyOn: this.updateAudioAlreadyOn.bind(this),\n      updateComponentSizes: this.updateComponentSizes.bind(this),\n\n      // Permissions\n      updateHasCameraPermission: this.updateHasCameraPermission.bind(this),\n      updateHasAudioPermission: this.updateHasAudioPermission.bind(this),\n\n      // Transports\n      updateTransportCreated: this.updateTransportCreated.bind(this),\n      updateLocalTransportCreated: this.updateLocalTransportCreated.bind(this),\n      updateTransportCreatedVideo: this.updateTransportCreatedVideo.bind(this),\n      updateTransportCreatedAudio: this.updateTransportCreatedAudio.bind(this),\n      updateTransportCreatedScreen: this.updateTransportCreatedScreen.bind(this),\n      updateProducerTransport: this.updateProducerTransport.bind(this),\n      updateLocalProducerTransport: this.updateLocalProducerTransport.bind(this),\n      updateVideoProducer: this.updateVideoProducer.bind(this),\n      updateLocalVideoProducer: this.updateLocalVideoProducer.bind(this),\n      updateParams: this.updateParams.bind(this),\n      updateVideoParams: this.updateVideoParams.bind(this),\n      updateAudioParams: this.updateAudioParams.bind(this),\n      updateAudioProducer: this.updateAudioProducer.bind(this),\n      updateAudioLevel: this.updateAudioLevel.bind(this),\n      updateLocalAudioProducer: this.updateLocalAudioProducer.bind(this),\n      updateConsumerTransports: this.updateConsumerTransports.bind(this),\n      updateConsumingTransports: this.updateConsumingTransports.bind(this),\n\n      // Polls\n      updatePolls: this.updatePolls.bind(this),\n      updatePoll: this.updatePoll.bind(this),\n      updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\n\n      // Background\n      updateCustomImage: this.updateCustomImage.bind(this),\n      updateSelectedImage: this.updateSelectedImage.bind(this),\n      updateSegmentVideo: this.updateSegmentVideo.bind(this),\n      updateSelfieSegmentation: this.updateSelfieSegmentation.bind(this),\n      updatePauseSegmentation: this.updatePauseSegmentation.bind(this),\n      updateProcessedStream: this.updateProcessedStream.bind(this),\n      updateKeepBackground: this.updateKeepBackground.bind(this),\n      updateBackgroundHasChanged: this.updateBackgroundHasChanged.bind(this),\n      updateVirtualStream: this.updateVirtualStream.bind(this),\n      updateMainCanvas: this.updateMainCanvas.bind(this),\n      updatePrevKeepBackground: this.updatePrevKeepBackground.bind(this),\n      updateAppliedBackground: this.updateAppliedBackground.bind(this),\n      updateIsBackgroundModalVisible: this.updateIsBackgroundModalVisible.bind(this),\n      updateAutoClickBackground: this.updateAutoClickBackground.bind(this),\n\n      // Breakout rooms\n      updateBreakoutRooms: this.updateBreakoutRooms.bind(this),\n      updateCurrentRoomIndex: this.updateCurrentRoomIndex.bind(this),\n      updateCanStartBreakout: this.updateCanStartBreakout.bind(this),\n      updateBreakOutRoomStarted: this.updateBreakOutRoomStarted.bind(this),\n      updateBreakOutRoomEnded: this.updateBreakOutRoomEnded.bind(this),\n      updateHostNewRoom: this.updateHostNewRoom.bind(this),\n      updateLimitedBreakRoom: this.updateLimitedBreakRoom.bind(this),\n      updateMainRoomsLength: this.updateMainRoomsLength.bind(this),\n      updateMemberRoom: this.updateMemberRoom.bind(this),\n      updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\n\n      // Whiteboard\n      updateWhiteboardUsers: this.updateWhiteboardUsers.bind(this),\n      updateCurrentWhiteboardIndex: this.updateCurrentWhiteboardIndex.bind(this),\n      updateCanStartWhiteboard: this.updateCanStartWhiteboard.bind(this),\n      updateWhiteboardStarted: this.updateWhiteboardStarted.bind(this),\n      updateWhiteboardEnded: this.updateWhiteboardEnded.bind(this),\n      updateWhiteboardLimit: this.updateWhiteboardLimit.bind(this),\n      updateIsWhiteboardModalVisible: this.updateIsWhiteboardModalVisible.bind(this),\n      updateIsConfigureWhiteboardModalVisible:\n        this.updateIsConfigureWhiteboardModalVisible.bind(this),\n      updateShapes: this.updateShapes.bind(this),\n      updateUseImageBackground: this.updateUseImageBackground.bind(this),\n      updateRedoStack: this.updateRedoStack.bind(this),\n      updateUndoStack: this.updateUndoStack.bind(this),\n      updateCanvasStream: this.updateCanvasStream.bind(this),\n      updateCanvasWhiteboard: this.updateCanvasWhiteboard.bind(this),\n\n      // Screenboard\n      updateCanvasScreenboard: this.updateCanvasScreenboard.bind(this),\n      updateProcessedScreenStream: this.updateProcessedScreenStream.bind(this),\n      updateAnnotateScreenStream: this.updateAnnotateScreenStream.bind(this),\n      updateMainScreenCanvas: this.updateMainScreenCanvas.bind(this),\n      updateIsScreenboardModalVisible: this.updateIsScreenboardModalVisible.bind(this),\n\n      // Other functions\n      checkOrientation: this.checkOrientation.bind(this),\n\n      updateDevice: this.updateDevice.bind(this),\n      updateSocket: this.updateSocket.bind(this),\n      updateLocalSocket: this.updateLocalSocket.bind(this),\n      updateValidated: this.updateValidated.bind(this),\n      isDarkModeValue: this.modernThemeDarkMode.value,\n      updateIsDarkMode: this.updateModernThemeDarkMode.bind(this),\n\n      customVideoCard: this.customVideoCard,\n      customAudioCard: this.customAudioCard,\n      customMiniCard: this.customMiniCard,\n\n      showAlert: this.showAlert.bind(this),\n      getUpdatedAllParams: () => {\n\n        try {\n          if (this.sourceParameters !== null) {\n            const nextSourceParameters = {\n              ...this.getAllParams(),\n              ...this.mediaSFUFunctions(),\n            };\n            this.sourceParameters = nextSourceParameters;\n            if (this.updateSourceParameters) {\n              this.updateSourceParameters(nextSourceParameters);\n            }\n          }\n        } catch {\n          console.log('error updateSourceParameters');\n        }\n\n        return {\n          ...this.getAllParams(),\n          ...this.mediaSFUFunctions(),\n        };\n      },\n    };\n  }\n\n  mediaSFUParameters: any = {\n    ...this.getAllParams(),\n    ...this.mediaSFUFunctions(),\n  };\n\n  getUpdatedAllParams = (): any => {\n    return {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n  };\n\n  updateButtonState(buttonType: string, value: boolean) {\n    this.controlButtons = this.controlButtons.map((button) => {\n      if (buttonType === 'micActive' && button.icon === this.faMicrophoneSlash) {\n        return { ...button, active: value };\n      }\n      if (buttonType === 'videoActive' && button.icon === this.faVideoSlash) {\n        return { ...button, active: value };\n      }\n      if (buttonType === 'screenShareActive' && button.icon === this.faDesktop) {\n        if (button.alternateIconComponent) {\n          const updatedInjector = this.createInjector({\n            disabled: !value,\n          });\n          return {\n            ...button,\n            active: true,\n            alternateIconComponent: { ...this.screenShareWidget, injector: updatedInjector },\n          }; //always default to true for active\n        } else {\n          return { ...button, active: true }; //always default to true for active\n        }\n      }\n      if (buttonType === 'endCallActive' && button.icon === this.faPhone) {\n        return { ...button, active: value };\n      }\n      if (buttonType === 'participantsActive' && button.icon === this.faUsers) {\n        return { ...button, active: value };\n      }\n      if (buttonType === 'modernThemeDarkMode' && button.icon === faMoon) {\n        return { ...button, active: value };\n      }\n      if (\n        buttonType === 'showMessagesBadge' &&\n        button.customName &&\n        button.customName === 'Messages'\n      ) {\n        const updatedInjector = this.createInjector({\n          icon: this.faComments,\n          badgeValue: value ? '*' : '',\n          iconColor: 'black',\n          showBadge: value,\n        });\n        return { ...button, customComponent: { ...this.messageWidget, injector: updatedInjector } };\n      }\n      if (buttonType === 'showMenuBadge' && button.customName && button.customName === 'Menu') {\n        const updatedInjector = this.createInjector({\n          icon: this.faBars,\n          badgeValue: this.totalReqWait.value,\n          iconColor: 'black',\n          showBadge: true,\n        });\n        return { ...button, customComponent: { ...this.menuWidget, injector: updatedInjector } };\n      }\n\n      return button;\n    });\n\n    this.cdr.detectChanges();\n  }\n\n  PrejoinPageComponent: any = {\n    component: this.PrejoinPage,\n    injector: null,\n  };\n\n  updatePrejoinPageComponent = () => {\n    const PrejoinComp = {\n      component: this.PrejoinPage,\n      injector: this.createInjector({\n        parameters: {\n          showAlert:\n            this.showAlert ||\n            (() => {\n              console.log('showAlert not defined');\n            }),\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\n          connectSocket: this.socketManager.connectSocket,\n          connectLocalSocket: this.socketManager.connectLocalSocket,\n          updateSocket: this.updateSocket,\n          updateLocalSocket: this.updateLocalSocket,\n          updateValidated: this.updateValidated,\n          updateApiUserName: this.updateApiUserName,\n          updateApiToken: this.updateApiToken,\n          updateLink: this.updateLink,\n          updateRoomName: this.updateRoomName,\n          updateMember: this.updateMember,\n        },\n        credentials: this.credentials,\n        localLink: this.localLink,\n        connectMediaSFU: this.connectMediaSFU,\n        returnUI: this.returnUI,\n        noUIPreJoinOptions: this.noUIPreJoinOptions,\n        joinMediaSFURoom: this.joinMediaSFURoom,\n        createMediaSFURoom: this.createMediaSFURoom,\n      }),\n    };\n\n    this.PrejoinPageComponent = { ...PrejoinComp };\n\n    this.cdr.detectChanges();\n  };\n\n  /**\n   * Initializes function overrides by wrapping original implementations\n   * with custom logic if provided in uiOverrides\n   */\n  initializeFunctionOverrides(): void {\n    // Apply consumerResume override\n    if (this.uiOverrideResolver.hasOverride('consumerResume')) {\n      const originalConsumerResume = this.consumerResume.consumerResume.bind(\n        this.consumerResume,\n      );\n      this.consumerResume.consumerResume = this.uiOverrideResolver.applyFunctionOverride(\n        'consumerResume',\n        originalConsumerResume,\n      );\n    }\n\n    // Apply addVideosGrid override\n    if (this.uiOverrideResolver.hasOverride('addVideosGrid')) {\n      const originalAddVideosGrid = this.addVideosGrid.addVideosGrid.bind(\n        this.addVideosGrid,\n      );\n      this.addVideosGrid.addVideosGrid = this.uiOverrideResolver.applyFunctionOverride(\n        'addVideosGrid',\n        originalAddVideosGrid,\n      );\n    }\n\n    // Apply prepopulateUserMedia override\n    if (this.uiOverrideResolver.hasOverride('prepopulateUserMedia')) {\n      const originalPrepopulateUserMedia = this.prepopulateUserMedia.prepopulateUserMedia.bind(\n        this.prepopulateUserMedia,\n      );\n      this.prepopulateUserMedia.prepopulateUserMedia = this.uiOverrideResolver.applyFunctionOverride(\n        'prepopulateUserMedia',\n        originalPrepopulateUserMedia,\n      );\n    }\n  }\n\n  ngOnInit() {\n    this.updateModernThemeDarkMode(this.resolvePreferredTheme());\n\n    // Initialize UI overrides if provided\n    if (this.uiOverrides) {\n      this.uiOverrideResolver.setOverrides(this.uiOverrides);\n    }\n\n    // Apply function overrides\n    this.initializeFunctionOverrides();\n\n    if (this.PrejoinPage) {\n      this.updatePrejoinPageComponent();\n    }\n\n    this.setupResizeListener();\n    if (this.validated) {\n      this.connectAndAddSocketMethods();\n    }\n\n    this.mainHeightWidthSubscription = this.mainHeightWidth.subscribe(() => {\n      this.updateMainVideoSize();\n    });\n\n    this.recordingSubscription = combineLatest([\n      this.recordPaused,\n      this.recordStarted,\n      this.recordStopped,\n      this.recordResumed,\n      this.recordingProgressTime,\n      this.showRecordButtons,\n      this.islevel,\n    ]).subscribe(\n      ([\n        recordPaused,\n        recordStarted,\n        recordStopped,\n        recordResumed,\n        recordingProgressTime,\n        showRecordButtons,\n        islevel,\n      ]) => {\n        if (\n          recordPaused ||\n          recordStarted ||\n          recordStopped ||\n          recordResumed ||\n          recordingProgressTime ||\n          showRecordButtons ||\n          islevel\n        ) {\n          this.updateRecordButtons();\n        }\n      },\n    );\n\n    this.ScreenboardSubscription = combineLatest([\n      this.shared,\n      this.componentSizes,\n      this.annotateScreenStream,\n    ]).subscribe(([shared, componentSizes]) => {\n      this.ScreenboardWidget = {\n        component: Screenboard,\n        inputs: {\n          customWidth: componentSizes.mainWidth,\n          customHeight: componentSizes.mainHeight,\n          parameters: this.mediaSFUParameters,\n          showAspect: shared,\n        },\n      };\n    });\n    this.validatedSubscription = this.validated.subscribe((validated) => {\n      if (validated) {\n        this.handleValidated();\n      }\n    });\n    this.islevelSubscription = this.islevel.subscribe((islevel) => {\n      if (islevel) {\n        this.updateCustomMenuButtons();\n      }\n    });\n    this.coHostSubscription = combineLatest([this.coHost, this.coHostResponsibility]).subscribe(\n      ([coHost, coHostResponsibility]) => {\n        if (coHost || coHostResponsibility) {\n          this.updateCustomMenuButtons();\n        }\n      },\n    );\n\n    // Subscribe to changes in BehaviorSubject and update the buttons accordingly\n    this.buttonSubscriptions.push(\n      this.micActive.subscribe((value) => {\n        this.updateButtonState('micActive', value);\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.videoActive.subscribe((value) => {\n        this.updateButtonState('videoActive', value);\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.screenShareActive.subscribe((value) => {\n        this.updateButtonState('screenShareActive', value);\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.showMessagesBadge.subscribe((value) => {\n        this.updateButtonState('showMessagesBadge', value);\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.totalReqWait.subscribe(() => {\n        this.updateButtonState('showMenuBadge', true);\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.participantsCounter.subscribe((value) => {\n        this.updateMenuParticipantsWidget(value);\n      }),\n    );\n\n    this.mediaSFUParameters = {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n  }\n\n  ngOnDestroy() {\n    window.removeEventListener('resize', this.handleResize);\n    window.removeEventListener('orientationchange', this.handleResize);\n    if (this.mainHeightWidthSubscription) {\n      this.mainHeightWidthSubscription.unsubscribe();\n    }\n    if (this.validatedSubscription) {\n      this.validatedSubscription.unsubscribe();\n    }\n    if (this.islevelSubscription) {\n      this.islevelSubscription.unsubscribe();\n    }\n    if (this.coHostSubscription) {\n      this.coHostSubscription.unsubscribe();\n    }\n    if (this.ScreenboardSubscription) {\n      this.ScreenboardSubscription.unsubscribe();\n    }\n    if (this.recordingSubscription) {\n      this.recordingSubscription.unsubscribe();\n    }\n  }\n\n  updateMainVideoSize = async () => {\n    if (!this.lock_screen.value && !this.shared.value) {\n      this.prepopulateUserMedia.prepopulateUserMedia({\n        name: this.hostLabel.value,\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n      });\n    } else {\n      if (!this.first_round.value) {\n        this.prepopulateUserMedia.prepopulateUserMedia({\n          name: this.hostLabel.value,\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n        });\n      }\n    }\n  };\n\n  async connectAndAddSocketMethods() {\n    this.mediaSFUParameters = {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n    const socket_ = await this.connect_Socket(this.apiUserName.value, this.apiToken.value);\n    if (socket_) {\n      this.updateSocket(socket_);\n    }\n  }\n\n  async handleValidated() {\n    this.updateAllVideoStreams([\n      { producerId: 'youyou', stream: undefined, id: 'youyou', name: 'youyou' },\n    ]);\n\n    this.updateStreamNames([{ id: 'youyou', name: 'youyou', producerId: '' }]);\n\n    if (this.validated.value) {\n\n      try {\n        if (!this.localUIMode.value) {\n          this.updateIsLoadingModalVisible(true);\n          await this.connectAndAddSocketMethods();\n        } else {\n          this.updateIsLoadingModalVisible(false);\n        }\n      } catch (error) {\n        console.log('error connectAndaAddSocketMethods', error);\n      }\n\n      this.startMeetingProgressTimer.startMeetingProgressTimer({\n        startTime: Date.now() / 1000,\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n      });\n\n      try {\n        if (this.sourceParameters !== null) {\n          const nextSourceParameters = {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          };\n          this.sourceParameters = nextSourceParameters;\n          if (this.updateSourceParameters) {\n            this.updateSourceParameters(nextSourceParameters);\n          }\n        }\n      } catch {\n        console.log('error updateSourceParameters');\n      }\n\n    }\n  }\n\n  @HostListener('window:resize')\n  @HostListener('window:orientationchange')\n  async handleResize() {\n    let fraction = 0;\n\n    if (\n      window.innerHeight < window.innerWidth &&\n      (this.eventType.value == 'webinar' || this.eventType.value == 'conference')\n    ) {\n      const currentHeight = window.innerHeight;\n      fraction = Number((40 / currentHeight).toFixed(3));\n      if (fraction != this.controlHeight.value) {\n        this.updateControlHeight(Number(fraction));\n      }\n    } else {\n      // Set default control button height for portrait mode or other event types\n      const currentHeight = window.innerHeight;\n      fraction = Number((40 / currentHeight).toFixed(3));\n      fraction = Number(fraction);\n      if (fraction != this.controlHeight.value) {\n        this.updateControlHeight(Number(fraction));\n      }\n    }\n\n    const dimensions = this.computeDimensionsMethod({\n      containerWidthFraction: 1,\n      containerHeightFraction: 1,\n      mainSize: this.mainHeightWidth.value,\n      doStack: true,\n      defaultFraction:\n        this.eventType.value == 'webinar' || this.eventType.value == 'conference'\n          ? 1 - fraction\n          : 1,\n    });\n\n    this.updateComponentSizes(dimensions);\n\n    const orientation = this.checkOrientation();\n    if (orientation == 'portrait') {\n      if (!this.isWideScreen.value) {\n        if (this.shareScreenStarted.value || this.shared.value) {\n          this.updateScreenForceFullDisplay(true);\n        }\n      }\n    }\n\n    // Updates the main grid view\n    await this.prepopulateUserMedia.prepopulateUserMedia({\n      name: this.hostLabel.value,\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n    });\n    // Updates the mini grid view\n    await this.onScreenChanges.onScreenChanges({\n      changed: true,\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n    });\n  }\n\n  async disconnectAllSockets(consume_sockets: ConsumeSocket[]): Promise<void> {\n    for (const socket of consume_sockets) {\n      try {\n        const ip = Object.keys(socket)[0];\n        await socket[ip].disconnect();\n      } catch (error) {\n        console.log(`Error disconnecting socket with IP: ${Object.keys(socket)[0]}`, error);\n      }\n    }\n  }\n\n  async closeAndReset() {\n    //close and clean up all sockets, modals,... and reset all states to initial values\n\n    this.updateIsMessagesModalVisible(false);\n    this.updateIsParticipantsModalVisible(false);\n    this.updateIsWaitingModalVisible(false);\n    this.updateIsRequestsModalVisible(false);\n    this.updateIsCoHostModalVisible(false);\n    this.updateIsSettingsModalVisible(false);\n    this.updateIsDisplaySettingsModalVisible(false);\n    this.updateIsMediaSettingsModalVisible(false);\n    this.updateIsMenuModalVisible(false);\n    this.updateIsShareEventModalVisible(false);\n    this.updateIsConfirmExitModalVisible(false);\n    await this.disconnectAllSockets(this.consume_sockets.value);\n    await this.updateStatesToInitialValues();\n    this.updateMeetingProgressTime('00:00:00');\n    this.updateMeetingElapsedTime(0);\n    this.updateRecordingProgressTime('00:00:00');\n    this.updateRecordElapsedTime(0);\n    this.updateShowRecordButtons(false);\n\n    this.updateIsConfigureWhiteboardModalVisible(false);\n    this.updateIsWhiteboardModalVisible(false);\n    this.updateIsMenuModalVisible(false);\n    this.updateIsRecordingModalVisible(false);\n    this.updateIsPollModalVisible(false);\n    this.updateIsBreakoutRoomsModalVisible(false);\n    this.updateIsBackgroundModalVisible(false);\n    this.updateIsLoadingModalVisible(false);\n    this.updateIsConfirmHereModalVisible(false);\n\n    await sleep({ ms: 500 });\n    this.updateValidated(false);\n    //if on web, reload the page\n    window.location.reload();\n  }\n\n  computeDimensionsMethod = ({\n    containerWidthFraction = 1,\n    containerHeightFraction = 1,\n    mainSize,\n    doStack = true,\n    defaultFraction,\n  }: {\n    containerWidthFraction?: number;\n    containerHeightFraction?: number;\n    mainSize: number;\n    doStack?: boolean;\n    defaultFraction: number;\n  }): ComponentSizes => {\n    const parentWidth = window.innerWidth * containerWidthFraction;\n    const parentHeight = window.innerHeight * containerHeightFraction * defaultFraction;\n    let isWideScreen = parentWidth >= 768;\n\n    if (!isWideScreen && parentWidth > 1.5 * parentHeight) {\n      isWideScreen = true;\n    }\n\n    this.updateIsWideScreen(isWideScreen);\n\n    const dimensions = this.calculateDimensions({\n      parentWidth,\n      parentHeight,\n      isWideScreen,\n      mainSize,\n      doStack,\n    });\n    return dimensions;\n  };\n\n  calculateDimensions({\n    parentWidth,\n    parentHeight,\n    isWideScreen,\n    mainSize,\n    doStack,\n  }: {\n    parentWidth: number;\n    parentHeight: number;\n    isWideScreen: boolean;\n    mainSize: number;\n    doStack: boolean;\n  }): ComponentSizes {\n    if (doStack) {\n      return isWideScreen\n        ? {\n          mainHeight: Math.floor(parentHeight),\n          otherHeight: Math.floor(parentHeight),\n          mainWidth: Math.floor((mainSize / 100) * parentWidth),\n          otherWidth: Math.floor(((100 - mainSize) / 100) * parentWidth),\n        }\n        : {\n          mainHeight: Math.floor((mainSize / 100) * parentHeight),\n          otherHeight: Math.floor(((100 - mainSize) / 100) * parentHeight),\n          mainWidth: Math.floor(parentWidth),\n          otherWidth: Math.floor(parentWidth),\n        };\n    } else {\n      return {\n        mainHeight: Math.floor(parentHeight),\n        otherHeight: Math.floor(parentHeight),\n        mainWidth: Math.floor(parentWidth),\n        otherWidth: Math.floor(parentWidth),\n      };\n    }\n  }\n\n  handleOrientationChange() {\n    window.addEventListener('resize', this.handleResize.bind(this));\n    window.addEventListener('orientationchange', this.handleResize.bind(this));\n  }\n\n  setupResizeListener() {\n    this.handleResize();\n  }\n\n  orientation = window.innerHeight > window.innerWidth ? 'portrait' : 'landscape';\n\n  async joinRoom(data: {\n    socket: Socket;\n    roomName: string;\n    islevel: string;\n    member: string;\n    sec: string;\n    apiUserName: string;\n  }): Promise<ResponseJoinRoom | null> {\n    const { socket, roomName, islevel, member, sec, apiUserName } = data;\n\n    try {\n      const response: ResponseJoinRoom | null = await this.joinRoomClient.joinRoomClient({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n      });\n\n      return response;\n    } catch (error) {\n      console.log('Error joining room:', error);\n      throw new Error('Failed to join the room. Please check your connection and try again.');\n    }\n  }\n\n  async join_Room({\n    socket,\n    roomName,\n    islevel,\n    member,\n    sec,\n    apiUserName,\n    isLocal = false,\n  }: {\n    socket: Socket;\n    roomName: string;\n    islevel: string;\n    member: string;\n    sec: string;\n    apiUserName: string;\n    isLocal?: boolean;\n  }): Promise<void> {\n    let data: ResponseJoinRoom | null;\n\n    if (!isLocal) {\n      data = await this.joinRoom({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n      });\n    } else {\n      const localData: ResponseJoinLocalRoom = await this.joinLocalRoom.joinLocalRoom({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n        parameters: {\n          showAlert:\n            this.showAlert ||\n            (() => {\n              console.log('showAlert not defined');\n            }),\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\n          connectSocket: this.socketManager.connectSocket,\n          connectLocalSocket: this.socketManager.connectLocalSocket,\n          updateSocket: this.updateSocket,\n          updateLocalSocket: this.updateLocalSocket,\n          updateValidated: this.updateValidated,\n          updateApiUserName: this.updateApiUserName,\n          updateApiToken: this.updateApiToken,\n          updateLink: this.updateLink,\n          updateRoomName: this.updateRoomName,\n          updateMember: this.updateMember,\n        },\n        checkConnect:\n          this.localLink.length > 0 &&\n          this.connectMediaSFU === true &&\n          !this.link.value.includes('mediasfu.com'),\n        localLink: this.localLink,\n        joinMediaSFURoom: this.joinMediaSFURoom,\n      });\n\n      data = await createResponseJoinRoom({ localRoom: localData });\n    }\n\n    const updateAndComplete = async (data: ResponseJoinRoom) => {\n      // Update room parameters\n      try {\n        // Check if roomRecvIPs is not empty\n        if (!data.roomRecvIPs || data.roomRecvIPs.length === 0) {\n          data.roomRecvIPs = ['none'];\n\n          if (\n            this.link.value !== \"\" &&\n            this.link.value.includes(\"mediasfu.com\") &&\n            !isLocal\n          ) {\n            // Community Edition Only\n            await this.receiveAllPipedTransports.receiveAllPipedTransports({\n              community: true,\n              nsock: this.getUpdatedAllParams().socket,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n        }\n\n\n        this.updateRoomParametersClient.updateRoomParametersClient({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n            data: data,\n          },\n        });\n\n        if (data.isHost) {\n          this.updateIslevel('2');\n        } else {\n          // Issue with isHost for local room\n          if (islevel !== '2') {\n            this.updateIslevel('1');\n          }\n        }\n\n        if (data.secureCode && data.secureCode !== '') {\n          this.updateAdminPasscode(data.secureCode);\n        }\n\n        if (data.rtpCapabilities) {\n          try {\n            const device_ = await this.createDeviceClient.createDeviceClient({\n              rtpCapabilities: data.rtpCapabilities,\n            });\n\n            if (device_) {\n              this.device.next(device_);\n            }\n          } catch (error) {\n            console.error('Error creating device:', error);\n          }\n        }\n      } catch (error) {\n        console.error('Error in updateAndComplete:', error);\n      }\n    };\n\n    if (data && data.success) {\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && isLocal) {\n        this.roomData.next(data);\n        return;\n      } else if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\n        // Update roomData\n        if (this.roomData.value) {\n          // Updating only the recording and meeting room parameters\n          this.roomData.value.recordingParams = data.recordingParams;\n          this.roomData.value.meetingRoomParams = data.meetingRoomParams;\n          this.roomData.next(this.roomData.value);\n        } else {\n          this.roomData.next(data);\n        }\n      } else {\n        // Update roomData\n        this.roomData.next(data);\n        if (!this.link.value.includes('mediasfu.com')) {\n          this.roomData.value!.meetingRoomParams = data.meetingRoomParams;\n        }\n      }\n\n      await updateAndComplete(data);\n    } else {\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\n        // Join local room only\n        if (this.roomData.value) {\n          await updateAndComplete(this.roomData.value);\n        }\n        return;\n      }\n\n      // Might be a wrong room name or room is full or other error; check reason in data object if available\n      try {\n        if (this.showAlert && data?.reason) {\n          this.showAlert({\n            message: data.reason,\n            type: 'danger',\n            duration: 3000,\n          });\n        }\n      } catch (error) {\n        /* handle error */\n      }\n    }\n  }\n\n\n  onParticipantsFilterChange = (value: string): void => {\n    if (value && value.length > 0) {\n      this.filteredParticipants.next(\n        this.participants.value.filter((participant) =>\n          participant.name.toLowerCase().includes(value.toLowerCase()),\n        ),\n      );\n      this.participantsCounter.next(this.filteredParticipants.value.length);\n    } else {\n      this.filteredParticipants.next(this.participants.value);\n      this.participantsCounter.next(this.participants.value.length);\n    }\n  };\n\n  updateStatesToInitialValues = async () => {\n    const initialValues = initialValuesState as { [key: string]: any };\n    const updateFunctions = this.getAllParams() as unknown as {\n      [key: string]: (value: any) => void;\n    };\n\n    for (const key in initialValues) {\n      if (Object.prototype.hasOwnProperty.call(initialValues, key)) {\n        const updateFunctionName = `update${key.charAt(0).toUpperCase() + key.slice(1)}`;\n        const updateFunction = updateFunctions[updateFunctionName];\n\n        if (typeof updateFunction === 'function') {\n          try {\n            updateFunction(initialValues[key]);\n          } catch {\n            /* handle error */\n          }\n        }\n      }\n    }\n  };\n\n  faRecordVinyl = faRecordVinyl;\n  faPlayCircle = faPlayCircle;\n  faPauseCircle = faPauseCircle;\n  faStopCircle = faStopCircle;\n  faDotCircle = faDotCircle;\n  faCog = faCog;\n  faUsers = faUsers;\n  faClock = faClock;\n  faUserPlus = faUserPlus;\n  faTools = faTools;\n  faDesktop = faDesktop;\n  faPoll = faPoll;\n  faUserFriends = faUserFriends;\n  faChalkboardTeacher = faChalkboardTeacher;\n  faMicrophone = faMicrophone;\n  faMicrophoneSlash = faMicrophoneSlash;\n  faVideo = faVideo;\n  faVideoSlash = faVideoSlash;\n  faPhone = faPhone;\n  faBars = faBars;\n  faComments = faComments;\n  faChartBar = faChartBar;\n\n  onCloseMenuModal = () => {\n    this.updateIsMenuModalVisible(false);\n  };\n\n  onEventSettingsClose = () => {\n    this.updateIsSettingsModalVisible(false);\n  };\n\n  onCoHostClose = () => {\n    this.updateIsCoHostModalVisible(false);\n  };\n\n  onMediaSettingsClose = () => {\n    this.updateIsMediaSettingsModalVisible(false);\n  };\n\n  onDisplaySettingsClose = () => {\n    this.updateIsDisplaySettingsModalVisible(false);\n  };\n\n  onPollClose = () => {\n    this.updateIsPollModalVisible(false);\n  };\n\n  onBreakoutRoomsClose = () => {\n    this.updateIsBreakoutRoomsModalVisible(false);\n  };\n\n  onConfigureWhiteboardClose = () => {\n    this.updateIsConfigureWhiteboardModalVisible(false);\n  };\n\n  onMessagesClose = () => {\n    this.updateIsMessagesModalVisible(false);\n  };\n\n  onRecordingClose = () => {\n    this.updateIsRecordingModalVisible(false);\n  };\n\n  onParticipantsClose = () => {\n    this.updateIsParticipantsModalVisible(false);\n  };\n\n  onBackgroundClose = () => {\n    this.updateIsBackgroundModalVisible(false);\n  };\n\n  onConfirmExitClose = () => {\n    this.updateIsConfirmExitModalVisible(false);\n  };\n\n  onConfirmHereClose = () => {\n    this.updateIsConfirmHereModalVisible(false);\n  };\n\n  onSuppressConfirmHere = () => {\n    this.suppressConfirmHereForSession = true;\n  };\n\n  onScreenboardClose = () => {\n    this.updateIsScreenboardModalVisible(false);\n  };\n\n  onShareEventClose = () => {\n    this.updateIsShareEventModalVisible(false);\n  };\n\n  onAlertHide = () => {\n    this.updateAlertVisible(false);\n  };\n\n  ScreenboardWidget = {\n    component: Screenboard,\n    inputs: {\n      customWidth: this.componentSizes.value.mainWidth,\n      customHeight: this.componentSizes.value.mainHeight,\n      parameters: this.mediaSFUParameters,\n      showAspect: this.shared.value,\n    },\n  };\n\n  recordTimerWidget = {\n    component: RecordTimerWidget,\n    injector: this.createInjector({ recordingProgressTime: this.recordingProgressTime.value }),\n  };\n\n  updateRecordTimerWidget = (\n    recordingProgressTime: string = this.recordingProgressTime.value,\n  ): { component: any; injector: Injector } => {\n    const recordTimerWidget = {\n      component: RecordTimerWidget,\n      injector: this.createInjector({ recordingProgressTime: recordingProgressTime }),\n    };\n\n    this.recordTimerWidget = { ...recordTimerWidget };\n\n    this.cdr.markForCheck();\n\n    return recordTimerWidget;\n  };\n\n  recordButtons: MainButtonAlt[] = [];\n\n  recordButtonsArray: MainButtonAlt[] = [\n    {\n      icon: this.faPlayCircle,\n      active: () => !this.recordPaused.value,\n      onPress: () =>\n        this.updateRecording.updateRecording({\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n        }),\n      activeColor: 'black',\n      inActiveColor: 'black',\n      alternateIcon: this.faPauseCircle,\n      show: () => true,\n    },\n    {\n      icon: this.faStopCircle,\n      active: () => false,\n      onPress: () =>\n        this.stopRecording.stopRecording({\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'black',\n      show: () => true,\n    },\n    {\n      customComponent: () => this.updateRecordTimerWidget(),\n      show: () => true,\n      active: () => false,\n    },\n    {\n      icon: this.faDotCircle,\n      active: () => false,\n      onPress: () => console.log('Status pressed'),\n      activeColor: 'black',\n      inActiveColor: () => (this.recordPaused.value ? 'yellow' : 'red'),\n      show: () => true,\n    },\n    {\n      icon: this.faCog,\n      active: () => false,\n      onPress: () =>\n        this.launchRecording.launchRecording({\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\n          showAlert: this.showAlert.bind(this),\n          stopLaunchRecord: this.stopLaunchRecord.value,\n          canLaunchRecord: this.canLaunchRecord.value,\n          recordingAudioSupport: this.recordingAudioSupport.value,\n          recordingVideoSupport: this.recordingVideoSupport.value,\n          updateCanRecord: this.updateCanRecord.bind(this),\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\n          recordStarted: this.recordStarted.value,\n          recordPaused: this.recordPaused.value,\n          localUIMode: this.localUIMode.value,\n        }),\n      activeColor: 'green',\n      inActiveColor: 'black',\n      show: () => true,\n    },\n  ];\n\n  async updateRecordButtons() {\n    const recordButtons = this.recordButtonsArray.map((button) => {\n      return {\n        ...button,\n        active: typeof button.active === 'function' ? button.active() : button.active,\n        show: typeof button.show === 'function' ? button.show() : button.show,\n        customComponent: button.customComponent\n          ? typeof button.customComponent === 'function'\n            ? button.customComponent()\n            : button.customComponent\n          : undefined,\n        activeColor:\n          typeof button.inActiveColor === 'function'\n            ? button.inActiveColor()\n            : button.inActiveColor,\n        inActiveColor:\n          typeof button.inActiveColor === 'function'\n            ? button.inActiveColor()\n            : button.inActiveColor,\n      };\n    });\n    this.recordButtons = [...recordButtons];\n    await this.updateMenuRecordWidget(recordButtons);\n    this.updateCustomMenuButtons();\n\n    this.cdr.markForCheck();\n  }\n\n  // Create instances of the custom widgets\n  menuWidget = {\n    component: MenuWidget,\n    injector: this.createInjector({\n      icon: this.faBars,\n      badgeValue: this.totalReqWait.value,\n      iconColor: 'black',\n      showBadge: true,\n    }),\n  };\n\n  messageWidget = {\n    component: MessageWidget,\n    injector: this.createInjector({\n      icon: this.faComments,\n      showBadge: this.showMessagesBadge.value,\n      badgeValue: 1,\n      iconColor: 'black',\n    }),\n  };\n\n  menuRecordWidget = {\n    component: MenuRecordWidget,\n    injector: this.createInjector({\n      buttons: this.recordButtons,\n      showAspect: true,\n      direction: 'horizontal',\n    }),\n  };\n\n  updateMenuRecordWidget = (recordButtons: MainButtonAlt[] = this.recordButtons): any => {\n    const menuRecordWidget = {\n      component: MenuRecordWidget,\n      injector: this.createInjector({\n        buttons: recordButtons,\n        showAspect: true,\n        direction: 'horizontal',\n      }),\n    };\n\n    this.menuRecordWidget = { ...menuRecordWidget };\n\n    this.cdr.markForCheck();\n\n    return menuRecordWidget;\n  };\n\n  menuParticipantsWidget = {\n    component: MenuParticipantsWidget,\n    injector: this.createInjector({\n      icon: this.faUsers,\n      participantsCounter: this.participantsCounter.value,\n      iconColor: 'black',\n    }),\n  };\n\n  updateMenuParticipantsWidget = (count: number = this.participantsCounter.value): any => {\n    const menuParticipantsWidget = {\n      component: MenuParticipantsWidget,\n      injector: this.createInjector({\n        icon: this.faUsers,\n        participantsCounter: count,\n        iconColor: 'black',\n      }),\n    };\n\n    this.menuParticipantsWidget = { ...menuParticipantsWidget };\n\n    this.cdr.markForCheck();\n\n    return menuParticipantsWidget;\n  };\n\n  customMenuButtonsArray: MainCustomButton[] = [\n    {\n      icon: this.faRecordVinyl,\n      text: 'Record',\n      action: () =>\n        this.launchRecording.launchRecording({\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\n          showAlert: this.showAlert.bind(this),\n          stopLaunchRecord: this.stopLaunchRecord.value,\n          canLaunchRecord: this.canLaunchRecord.value,\n          recordingAudioSupport: this.recordingAudioSupport.value,\n          recordingVideoSupport: this.recordingVideoSupport.value,\n          updateCanRecord: this.updateCanRecord.bind(this),\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\n          recordStarted: this.recordStarted.value,\n          recordPaused: this.recordPaused.value,\n          localUIMode: this.localUIMode.value,\n        }),\n      show: () => !this.showRecordButtons.value && this.islevel.value == '2',\n    },\n    {\n      customComponent: () => this.updateMenuRecordWidget(),\n      show: () => this.showRecordButtons.value && this.islevel.value == '2',\n      action: () => console.log('record buttons pressed'),\n    },\n    {\n      icon: this.faCog,\n      text: 'Event Settings',\n      action: () =>\n        this.launchSettings.launchSettings({\n          updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\n          isSettingsModalVisible: this.isSettingsModalVisible.value,\n        }),\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faUsers,\n      text: 'Requests',\n      action: () =>\n        this.launchRequests.launchRequests({\n          updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\n          isRequestsModalVisible: this.isRequestsModalVisible.value,\n        }),\n      show: () =>\n        this.islevel.value == '2' ||\n        (this.coHostResponsibility.value &&\n          this.coHost.value &&\n          this.coHost.value === this.member.value &&\n          !!this.coHostResponsibility?.value?.find((item) => item.name === 'media')?.value) ||\n        false,\n    },\n    {\n      icon: this.faClock,\n      text: 'Waiting',\n      action: () =>\n        this.launchWaiting.launchWaiting({\n          updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\n          isWaitingModalVisible: this.isWaitingModalVisible.value,\n        }),\n      show: () =>\n        this.islevel.value == '2' ||\n        (this.coHostResponsibility.value &&\n          this.coHost.value &&\n          this.coHost.value === this.member.value &&\n          this.coHostResponsibility?.value?.find((item) => item.name === 'waiting')?.value ===\n          true) ||\n        false,\n    },\n    {\n      icon: this.faUserPlus,\n      text: 'Co-host',\n      action: () =>\n        this.launchCoHost.launchCoHost({\n          updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\n          isCoHostModalVisible: this.isCoHostModalVisible.value,\n        }),\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faTools,\n      text: 'Set Media',\n      action: () =>\n        this.launchMediaSettings.launchMediaSettings({\n          updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\n          isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\n          audioInputs: this.audioInputs.value,\n          videoInputs: this.videoInputs.value,\n          updateAudioInputs: this.updateAudioInputs.bind(this),\n          updateVideoInputs: this.updateVideoInputs.bind(this),\n        }),\n      show: () => true,\n    },\n    {\n      icon: this.faDesktop,\n      text: 'Display',\n      action: () =>\n        this.launchDisplaySettings.launchDisplaySettings({\n          updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\n          isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\n        }),\n      show: () => true,\n    },\n    {\n      icon: this.faPoll,\n      text: 'Poll',\n      action: () =>\n        this.launchPoll.launchPoll({\n          updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\n          isPollModalVisible: this.isPollModalVisible.value,\n        }),\n      show: () => true,\n    },\n    {\n      icon: this.faUserFriends,\n      text: 'Breakout Rooms',\n      action: () =>\n        this.launchBreakoutRooms.launchBreakoutRooms({\n          updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\n          isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\n        }),\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faChalkboardTeacher,\n      text: 'Whiteboard',\n      action: () =>\n        this.launchConfigureWhiteboard.launchConfigureWhiteboard({\n          updateIsConfigureWhiteboardModalVisible:\n            this.updateIsConfigureWhiteboardModalVisible.bind(this),\n          isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\n        }),\n      show: () => this.islevel.value == '2',\n    },\n  ];\n\n  customMenuButtons: MainCustomButton[] = [];\n\n  updateCustomMenuButtons() {\n    this.customMenuButtons = this.customMenuButtonsArray.map((button) => {\n      return {\n        ...button,\n        show: typeof button.show === 'function' ? button.show() : button.show,\n        customComponent: button.customComponent\n          ? typeof button.customComponent === 'function'\n            ? button.customComponent()\n            : button.customComponent\n          : undefined,\n      };\n    });\n  }\n\n  screenShareWidget = {\n    component: ScreenShareWidget,\n    injector: this.createInjector({ disabled: !this.screenShareActive.value }),\n  };\n\n  controlButtons: any[] = [\n    {\n      icon: this.faMicrophoneSlash,\n      alternateIcon: this.faMicrophone,\n      active: this.micActive.value,\n      onPress: () =>\n        this.clickAudio.clickAudio({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      disabled: this.audioSwitching.value,\n      show: true,\n    },\n    {\n      icon: this.faVideoSlash,\n      alternateIcon: this.faVideo,\n      active: this.videoActive.value,\n      onPress: () =>\n        this.clickVideo.clickVideo({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n            MediaStream,\n            MediaStreamTrack,\n            mediaDevices: navigator.mediaDevices,\n            device: this.device.value,\n            socket: this.socket.value,\n            showAlert: this.showAlert.bind(this),\n            checkPermission: this.checkPermission.checkPermission,\n            streamSuccessVideo: this.streamSuccessVideo.streamSuccessVideo,\n            hasCameraPermission: this.hasCameraPermission.value,\n            requestPermissionCamera: this.requestPermissionCamera.bind(this),\n            checkMediaPermission: 'web' !== 'web',\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      disabled: this.videoSwitching.value,\n      show: true,\n    },\n    {\n      //inverted active for inactive state\n      icon: faDesktop,\n      alternateIconComponent: this.screenShareWidget,\n      active: true,\n      onPress: () =>\n        this.clickScreenShare.clickScreenShare({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n            mediaDevices: navigator.mediaDevices,\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      disabled: false,\n      show: true,\n    },\n    {\n      icon: this.faPhone,\n      active: this.endCallActive.value,\n      onPress: () =>\n        this.launchConfirmExit.launchConfirmExit({\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      disabled: false,\n      show: true,\n    },\n    {\n      icon: this.faUsers,\n      active: this.participantsActive.value,\n      onPress: () =>\n        this.launchParticipants.launchParticipants({\n          updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\n          isParticipantsModalVisible: this.isParticipantsModalVisible.value,\n        }),\n      activeColor: 'black',\n      inActiveColor: 'black',\n      disabled: false,\n      show: true,\n    },\n    {\n      customComponent: this.menuWidget,\n      customName: 'Menu',\n      onPress: () =>\n        this.launchMenuModal.launchMenuModal({\n          updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\n          isMenuModalVisible: this.isMenuModalVisible.value,\n        }),\n      show: true,\n    },\n    {\n      customComponent: this.messageWidget,\n      customName: 'Messages',\n      onPress: () =>\n        this.launchMessages.launchMessages({\n          updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\n          isMessagesModalVisible: this.isMessagesModalVisible.value,\n        }),\n      show: true,\n    },\n  ];\n\n  async connect_Socket(\n    apiUserName: string,\n    token: string,\n    skipSockets: boolean = false\n  ): Promise<Socket | null> {\n\n    const socketDefault = this.socket.value;\n    const socketAlt =\n      this.connectMediaSFU && this.localSocket!.value && this.localSocket!.value.id\n        ? this.localSocket!.value\n        : socketDefault;\n\n    if (this.socket.value && this.socket.value.id) {\n      if (!skipSockets) {\n        // Event listeners on socketDefault\n        socketDefault.on('disconnect', async () => {\n          await this.disconnect.disconnect({\n            showAlert: this.showAlert.bind(this),\n            redirectURL: this.redirectURL.value,\n            onWeb: true,\n            updateValidated: this.updateValidated.bind(this),\n          });\n          if (this.videoAlreadyOn.value) {\n            await this.clickVideo.clickVideo({\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n          if (this.audioAlreadyOn.value) {\n            await this.clickAudio.clickAudio({\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n          await this.closeAndReset();\n        });\n\n        socketDefault.on('allMembers', async (membersData: AllMembersData) => {\n          if (membersData) {\n            await this.allMembers.allMembers({\n              apiUserName: apiUserName,\n              apiKey: '', //not recommended - use apiToken instead. Use for testing/development only\n              apiToken: token,\n              members: membersData.members,\n              requestss: membersData.requests ? membersData.requests : this.requestList.value,\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\n              coHostRes: membersData.coHostResponsibilities\n                ? membersData.coHostResponsibilities\n                : this.coHostResponsibility.value,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              consume_sockets: this.consume_sockets.value,\n            });\n          }\n        });\n\n        socketDefault.on('allMembersRest', async (membersData: AllMembersRestData) => {\n          if (membersData) {\n            await this.allMembersRest.allMembersRest({\n              apiUserName: apiUserName,\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\n              members: membersData.members,\n              apiToken: token,\n              settings: membersData.settings,\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\n              coHostRes: membersData.coHostResponsibilities\n                ? membersData.coHostResponsibilities\n                : this.coHostResponsibility.value,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              consume_sockets: this.consume_sockets.value,\n            });\n          }\n        });\n\n        socketDefault.on('userWaiting', async ({ name }: { name: string }) => {\n          await this.userWaiting.userWaiting({\n            name,\n            showAlert: this.showAlert.bind(this),\n            totalReqWait: this.totalReqWait.value,\n            updateTotalReqWait: this.updateTotalReqWait.bind(this),\n          });\n        });\n\n        socketDefault.on('personJoined', async ({ name }: { name: string }) => {\n          this.personJoined.personJoined({\n            name,\n            showAlert: this.showAlert.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'allWaitingRoomMembers',\n          async (waiting_data: AllWaitingRoomMembersData) => {\n            await this.allWaitingRoomMembers.allWaitingRoomMembers({\n              waitingParticipants: waiting_data.waitingParticipants\n                ? waiting_data.waitingParticipants\n                : waiting_data.waitingParticipantss\n                  ? waiting_data.waitingParticipantss\n                  : this.waitingRoomList.value,\n              updateTotalReqWait: this.updateTotalReqWait.bind(this),\n              updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\n            });\n          },\n        );\n\n        socketDefault.on('ban', async ({ name }: { name: string }) => {\n          await this.banParticipant.banParticipant({\n            name,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        });\n\n        socketDefault.on('updatedCoHost', async (cohost_data: UpdatedCoHostData) => {\n          await this.updatedCoHost.updatedCoHost({\n            coHost: cohost_data.coHost ? cohost_data.coHost : this.coHost.value,\n            coHostResponsibility: cohost_data.coHostResponsibilities\n              ? cohost_data.coHostResponsibilities\n              : this.coHostResponsibility.value,\n            youAreCoHost: this.youAreCoHost.value,\n            updateCoHost: this.updateCoHost.bind(this),\n            updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\n            updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\n            showAlert: this.showAlert.bind(this),\n            eventType: this.eventType.value,\n            islevel: this.islevel.value,\n            member: this.member.value,\n          });\n        });\n\n        socketDefault.on(\n          'participantRequested',\n          async ({ userRequest }: { userRequest: Request }) => {\n            await this.participantRequested.participantRequested({\n              userRequest,\n              requestList: this.requestList.value,\n              waitingRoomList: this.waitingRoomList.value,\n              updateTotalReqWait: this.updateTotalReqWait.bind(this),\n              updateRequestList: this.updateRequestList.bind(this),\n            });\n          },\n        );\n\n        socketDefault.on('screenProducerId', async ({ producerId }: { producerId: string }) => {\n          this.screenProducerId.screenProducerId({\n            producerId,\n            screenId: this.screenId.value,\n            membersReceived: this.membersReceived.value,\n            shareScreenStarted: this.shareScreenStarted.value,\n            deferScreenReceived: this.deferScreenReceived.value,\n            participants: this.participants.value,\n            updateScreenId: this.updateScreenId.bind(this),\n            updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\n            updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\n          });\n        });\n\n        socketDefault.on('updateMediaSettings', async ({ settings }: { settings: Settings }) => {\n          this.updateMediaSettings.updateMediaSettings({\n            settings,\n            updateAudioSetting: this.updateAudioSetting.bind(this),\n            updateVideoSetting: this.updateVideoSetting.bind(this),\n            updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\n            updateChatSetting: this.updateChatSetting.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'producer-media-paused',\n          async ({\n            producerId,\n            kind,\n            name,\n          }: {\n            producerId: string;\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\n            name: string;\n          }) => {\n            await this.producerMediaPaused.producerMediaPaused({\n              producerId,\n              kind,\n              name,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          },\n        );\n\n        socketDefault.on(\n          'producer-media-resumed',\n          async ({ kind, name }: { kind: 'audio'; name: string }) => {\n            await this.producerMediaResumed.producerMediaResumed({\n              kind,\n              name,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          },\n        );\n\n        socketDefault.on(\n          'producer-media-closed',\n          async ({\n            producerId,\n            kind,\n          }: {\n            producerId: string;\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\n          }) => {\n            if (producerId && kind) {\n              await this.producerMediaClosed.producerMediaClosed({\n                producerId,\n                kind,\n                parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              });\n            }\n          },\n        );\n\n        socketDefault.on(\n          'controlMediaHost',\n          async ({ type }: { type: 'video' | 'audio' | 'screenshare' | 'chat' | 'all' }) => {\n            await this.controlMediaHost.controlMediaHost({\n              type,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          },\n        );\n\n        socketDefault.on('meetingEnded', async () => {\n          await this.meetingEnded.meetingEnded({\n            showAlert: this.showAlert.bind(this),\n            redirectURL: this.redirectURL.value,\n            onWeb: true,\n            eventType: this.eventType.value,\n            updateValidated: this.updateValidated.bind(this),\n          });\n\n          if (this.videoAlreadyOn.value) {\n            await this.clickVideo.clickVideo({\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          }\n          if (this.audioAlreadyOn.value) {\n            await this.clickAudio.clickAudio({\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          }\n\n          await this.closeAndReset();\n        });\n\n        socketDefault.on('disconnectUserSelf', async () => {\n          await this.disconnectUserSelf.disconnectUserSelf({\n            socket: socketDefault,\n            member: this.member.value,\n            roomName: this.roomName.value,\n          });\n        });\n\n        socketDefault.on('receiveMessage', async ({ message }: { message: Message }) => {\n          await this.receiveMessage.receiveMessage({\n            message,\n            messages: this.messages.value,\n            participantsAll: this.participantsAll.value,\n            member: this.member.value,\n            eventType: this.eventType.value,\n            islevel: this.islevel.value,\n            coHost: this.coHost.value,\n            updateMessages: this.updateMessages.bind(this),\n            updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'meetingTimeRemaining',\n          async ({ timeRemaining }: { timeRemaining: number }) => {\n            await this.meetingTimeRemaining.meetingTimeRemaining({\n              timeRemaining,\n              showAlert: this.showAlert.bind(this),\n              eventType: this.eventType.value,\n            });\n          },\n        );\n\n        socketDefault.on('meetingStillThere', async () => {\n          if (this.suppressConfirmHereForSession) {\n            return;\n          }\n\n          this.meetingStillThere.meetingStillThere({\n            updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'updateConsumingDomains',\n          async ({ domains, alt_domains }: UpdateConsumingDomainsData) => {\n            await this.updateConsumingDomains.updateConsumingDomains({\n              domains,\n              alt_domains,\n              apiUserName,\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\n              apiToken: token,\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          },\n        );\n\n        socketDefault.on(\n          'hostRequestResponse',\n          ({ requestResponse }: HostRequestResponseData) => {\n            this.hostRequestResponse.hostRequestResponse({\n              requestResponse,\n              showAlert: this.showAlert.bind(this),\n              requestList: this.requestList.value,\n              updateRequestList: this.updateRequestList.bind(this),\n              updateMicAction: this.updateMicAction.bind(this),\n              updateVideoAction: this.updateVideoAction.bind(this),\n              updateScreenAction: this.updateScreenAction.bind(this),\n              updateChatAction: this.updateChatAction.bind(this),\n              updateAudioRequestState: this.updateAudioRequestState.bind(this),\n              updateVideoRequestState: this.updateVideoRequestState.bind(this),\n              updateScreenRequestState: this.updateScreenRequestState.bind(this),\n              updateChatRequestState: this.updateChatRequestState.bind(this),\n              updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\n              updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\n              updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\n              updateChatRequestTime: this.updateChatRequestTime.bind(this),\n              updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\n            });\n          },\n        );\n\n        socketDefault.on('pollUpdated', async (data: PollUpdatedData) => {\n          try {\n            await this.pollUpdated.pollUpdated({\n              data,\n              polls: this.polls.value,\n              poll: this.poll.value ? this.poll.value : ({} as Poll),\n              member: this.member.value,\n              islevel: this.islevel.value,\n              showAlert: this.showAlert.bind(this),\n              updatePolls: this.updatePolls.bind(this),\n              updatePoll: this.updatePoll.bind(this),\n              updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\n            });\n          } catch {\n            /* handle error */\n          }\n        });\n\n        socketDefault.on('breakoutRoomUpdated', async (data: BreakoutRoomUpdatedData) => {\n          try {\n            await this.breakoutRoomUpdated.breakoutRoomUpdated({\n              data,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          } catch {\n            /* handle error */\n          }\n        });\n\n      }\n\n      if (skipSockets) {\n        // Remove specific event listeners from socketDefault and socketAlt\n        const events = [\n          'roomRecordParams',\n          'startRecords',\n          'reInitiateRecording',\n          'RecordingNotice',\n          'timeLeftRecording',\n          'stoppedRecording',\n        ];\n        events.forEach((event) => {\n          socketDefault.off(event);\n          socketAlt.off(event);\n        });\n      }\n\n      socketAlt.on(\n        'roomRecordParams',\n        async ({ recordParams }: { recordParams: RecordParams }) => {\n          this.roomRecordParams.roomRecordParams({\n            recordParams,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        },\n      );\n\n      socketAlt.on('startRecords', async () => {\n        await this.startRecords.startRecords({\n          roomName: this.roomName.value,\n          member: this.member.value,\n          socket: socketAlt,\n        });\n      });\n\n      socketAlt.on('reInitiateRecording', async () => {\n        await this.reInitiateRecording.reInitiateRecording({\n          roomName: this.roomName.value,\n          member: this.member.value,\n          socket: socketAlt,\n          adminRestrictSetting: this.adminRestrictSetting.value,\n        });\n      });\n\n      socketAlt.on(\n        'RecordingNotice',\n        async ({ state, userRecordingParam, pauseCount, timeDone }: RecordingNoticeData) => {\n          await this.recordingNotice.RecordingNotice({\n            state,\n            userRecordingParam,\n            pauseCount,\n            timeDone,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        },\n      );\n\n      socketAlt.on('timeLeftRecording', async ({ timeLeft }: { timeLeft: number }) => {\n        this.timeLeftRecording.timeLeftRecording({\n          timeLeft,\n          showAlert: this.showAlert.bind(this),\n        });\n      });\n\n      socketAlt.on(\n        'stoppedRecording',\n        async ({ state, reason }: { state: string; reason: string }) => {\n          await this.stoppedRecording.stoppedRecording({\n            state,\n            reason,\n            showAlert: this.showAlert.bind(this),\n          });\n        },\n      );\n\n      if (this.localLink !== \"\" && socketDefault && !skipSockets) {\n        await this.join_Room({\n          socket: socketDefault,\n          roomName: this.roomName.value,\n          islevel: this.islevel.value,\n          member: this.member.value,\n          sec: token,\n          apiUserName: apiUserName,\n          isLocal: true,\n        });\n      }\n\n      // Check if localSocket has changed\n      const localChanged =\n        this.localSocket!.value && this.localSocket!.value.id && this.localSocket!.value.id !== socketAlt.id;\n\n\n      if (!skipSockets && localChanged) {\n        // Re-call connect_Socket with skipSockets = true\n        await this.connect_Socket(apiUserName, token, true);\n        await sleep({ ms: 1000 })\n        this.updateIsLoadingModalVisible(false);\n        return socketDefault;\n      } else {\n        if (this.link.value !== '' && this.link.value.includes('mediasfu.com')) {\n          // Token might be different for local room\n          const token = this.apiToken.value;\n          await this.join_Room({\n            socket:\n              this.connectMediaSFU && socketAlt && socketAlt.id ? socketAlt : socketDefault,\n            roomName: this.roomName.value,\n            islevel: this.islevel.value,\n            member: this.member.value,\n            sec: token,\n            apiUserName: apiUserName,\n          });\n        }\n\n        await this.receiveRoomMessages.receiveRoomMessages({\n          socket: socketDefault,\n          roomName: this.roomName.value,\n          updateMessages: this.updateMessages.bind(this),\n        });\n\n        if (!skipSockets) {\n          await this.prepopulateUserMedia.prepopulateUserMedia({\n            name: this.hostLabel.value,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        }\n\n        return socketDefault;\n      }\n    } else {\n      return null;\n    }\n  }\n}\n","import {\n  Component,\n  HostListener,\n  Injector,\n  ChangeDetectorRef,\n  Input,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CookieService } from 'ngx-cookie-service';\nimport { MediasfuUICustomOverrides } from '../../@types/ui-overrides.types';\nimport { UIOverrideResolverService } from '../../services/ui-override-resolver.service';\nimport { WithOverrideDirective } from '../../directives/with-override.directive';\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\nimport { Socket } from 'socket.io-client';\nimport {\n  faPlayCircle,\n  faPauseCircle,\n  faStopCircle,\n  faDotCircle,\n  faRecordVinyl,\n  faCog,\n  faUsers,\n  faClock,\n  faUserPlus,\n  faTools,\n  faDesktop,\n  faPoll,\n  faUserFriends,\n  faChalkboardTeacher,\n  faMicrophone,\n  faMicrophoneSlash,\n  faVideo,\n  faVideoSlash,\n  faPhone,\n  faBars,\n  faComments,\n  faChartBar,\n  faSun,\n  faMoon,\n} from '@fortawesome/free-solid-svg-icons';\n\nimport { initialValuesState } from '../../methods/utils/initial-values.util';\n\nimport { MainAspectComponent } from '../display-components/main-aspect-component/main-aspect-component.component';\nimport { ControlButtonsComponent } from '../display-components/control-buttons-component/control-buttons-component.component';\nimport { ControlButtonsAltComponent } from '../display-components/control-buttons-alt-component/control-buttons-alt-component.component';\nimport { OtherGridComponent } from '../display-components/other-grid-component/other-grid-component.component';\nimport { MainScreenComponent } from '../display-components/main-screen-component/main-screen-component.component';\nimport { MainGridComponent } from '../display-components/main-grid-component/main-grid-component.component';\nimport { SubAspectComponent } from '../display-components/sub-aspect-component/sub-aspect-component.component';\nimport { MainContainerComponent } from '../display-components/main-container-component/main-container-component.component';\nimport { ModernAlertComponent } from '../../modern/display-components/modern-alert.component';\nimport { ModernLoadingModalComponent } from '../../modern/display-components/modern-loading-modal.component';\nimport { ModernCoHostModalComponent } from '../../modern/modal-components/modern-co-host-modal.component';\nimport { ModernConfirmExitModalComponent } from '../../modern/modal-components/modern-confirm-exit-modal.component';\nimport { ModernConfirmHereModalComponent } from '../../modern/modal-components/modern-confirm-here-modal.component';\nimport { ModernEventSettingsModalComponent } from '../../modern/modal-components/modern-event-settings-modal.component';\nimport { ModernMediaSettingsModalComponent } from '../../modern/modal-components/modern-media-settings-modal.component';\nimport { ModernMenuModalComponent } from '../../modern/modal-components/modern-menu-modal.component';\nimport { ModernMessagesModalComponent } from '../../modern/modal-components/modern-messages-modal.component';\nimport { ModernPollModalComponent } from '../../modern/modal-components/modern-poll-modal.component';\nimport { ModernParticipantsModalComponent } from '../../modern/modal-components/modern-participants-modal.component';\nimport { ModernRecordingModalComponent } from '../../modern/modal-components/modern-recording-modal.component';\nimport { ModernRequestsModalComponent } from '../../modern/modal-components/modern-requests-modal.component';\nimport { ModernShareEventModalComponent } from '../../modern/modal-components/modern-share-event-modal.component';\nimport { ModernWaitingRoomModalComponent } from '../../modern/modal-components/modern-waiting-room-modal.component';\nimport {\n  WelcomePage,\n  WelcomePageOptions,\n} from '../misc-components/welcome-page/welcome-page.component';\n\nimport { BackgroundModal } from '../background-components/background-modal/background-modal.component';\nimport { BreakoutRoomsModal } from '../breakout-components/breakout-rooms-modal.component';\nimport { ConfigureWhiteboardModal } from '../whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component';\nimport { Whiteboard } from '../whiteboard-components/whiteboard/whiteboard.component';\nimport { ModernDisplaySettingsModalComponent } from '../../modern/modal-components/modern-display-settings-modal.component';\nimport { Screenboard } from '../screenboard-components/screenboard/screenboard.component';\nimport { ScreenboardModal } from '../screenboard-components/screenboard-modal/screenboard-modal.component';\n// pagination and display of media (samples)\nimport { FlexibleGrid } from '../display-components/flexible-grid/flexible-grid.component';\nimport { FlexibleVideo } from '../display-components/flexible-video/flexible-video.component';\nimport { AudioGrid } from '../display-components/audio-grid/audio-grid.component';\nimport { ModernParticipantsCounterBadgeComponent } from '../../modern/display-components/modern-participants-counter-badge.component';\nimport { ModernPaginationComponent } from '../../modern/display-components/modern-pagination.component';\n\nimport { MenuWidget } from '../display-components/control-widgets/menu-widget.component';\nimport { MessageWidget } from '../display-components/control-widgets/message-widget.component';\nimport { MenuRecordWidget } from '../display-components/control-widgets/menu-record-widget.component';\nimport { RecordTimerWidget } from '../display-components/control-widgets/record-timer-widget.component';\nimport { MenuParticipantsWidget } from '../display-components/control-widgets/menu-participants-widget.component';\nimport { ScreenShareWidget } from '../display-components/control-widgets/screenshare-widget.component';\n\nimport {\n  ResponseJoinRoom,\n  ResponseJoinLocalRoom,\n  CoHostResponsibility,\n  EventType,\n  Participant,\n  ConsumeSocket,\n  MeetingRoomParams,\n  VidCons,\n  HParamsType,\n  VParamsType,\n  ScreenParamsType,\n  AParamsType,\n  UserRecordingParams,\n  Stream,\n  AudioDecibels,\n  ScreenState,\n  GridSizes,\n  CustomMediaComponent,\n  Message,\n  WaitingRoomParticipant,\n  ComponentSizes,\n  Transport as TransportType,\n  Shape,\n  Poll,\n  BreakoutParticipant,\n  WhiteboardUser,\n  Request,\n  AllMembersData,\n  AllMembersRestData,\n  BreakoutRoomUpdatedData,\n  AllWaitingRoomMembersData,\n  MainButtonAlt,\n  MainCustomButton,\n  RecordParams,\n  SeedData,\n  UpdatedCoHostData,\n  Settings,\n  UpdateConsumingDomainsData,\n  RecordingNoticeData,\n  HostRequestResponseData,\n  PollUpdatedData,\n  PreJoinPageOptions,\n  CreateMediaSFURoomOptions,\n  JoinMediaSFURoomOptions,\n  JoinRoomOnMediaSFUType,\n  CreateRoomOnMediaSFUType,\n} from '../../@types/types';\nimport { createResponseJoinRoom } from '../../methods/utils/create-response-join-room.util';\n\n//import methods for control (samples)\n// Import methods for control (samples)\nimport { LaunchMenuModal } from '../../methods/menu-methods/launch-menu-modal.service';\nimport { LaunchRecording } from '../../methods/recording-methods/launch-recording.service';\nimport { StartRecording } from '../../methods/recording-methods/start-recording.service';\nimport { ConfirmRecording } from '../../methods/recording-methods/confirm-recording.service';\nimport { LaunchWaiting } from '../../methods/waiting-methods/launch-waiting.service';\nimport { launchCoHost } from '../../methods/co-host-methods/launch-co-host.service';\nimport { LaunchMediaSettings } from '../../methods/media-settings-methods/launch-media-settings.service';\nimport { LaunchDisplaySettings } from '../../methods/display-settings-methods/launch-display-settings.service';\nimport { LaunchSettings } from '../../methods/settings-methods/launch-settings.service';\nimport { LaunchRequests } from '../../methods/requests-methods/launch-requests.service';\nimport { LaunchParticipants } from '../../methods/participants-methods/launch-participants.service';\nimport { LaunchMessages } from '../../methods/message-methods/launch-messages.service';\nimport { LaunchConfirmExit } from '../../methods/exit-methods/launch-confirm-exit.service';\n\nimport { LaunchPoll } from '../../methods/polls-methods/launch-poll.service';\nimport { LaunchBreakoutRooms } from '../../methods/breakout-room-methods/launch-breakout-rooms.service';\nimport { LaunchConfigureWhiteboard } from '../../methods/whiteboard-methods/launch-configure-whiteboard.service';\n\n// mediasfu functions -- examples\nimport { SocketManager } from '../../sockets/socket-manager.service';\nimport { JoinRoomClient } from '../../producer-client/producer-client-emits/join-room-client.service';\nimport { JoinLocalRoom } from '../../producers/producer-emits/join-local-room.service';\nimport { UpdateRoomParametersClient } from '../../producer-client/producer-client-emits/update-room-parameters-client.service';\nimport { CreateDeviceClient } from '../../producer-client/producer-client-emits/create-device-client.service';\n\nimport { ClickVideo } from '../../methods/stream-methods/click-video.service';\nimport { ClickAudio } from '../../methods/stream-methods/click-audio.service';\nimport { ClickScreenShare } from '../../methods/stream-methods/click-screen-share.service';\nimport { StreamSuccessVideo } from '../../consumers/stream-success-video.service';\nimport { StreamSuccessAudio } from '../../consumers/stream-success-audio.service';\nimport { StreamSuccessScreen } from '../../consumers/stream-success-screen.service';\nimport { StreamSuccessAudioSwitch } from '../../consumers/stream-success-audio-switch.service';\nimport { CheckPermission } from '../../consumers/check-permission.service';\n\n// mediasfu functions\nimport { UpdateMiniCardsGrid } from '../../consumers/update-mini-cards-grid.service';\nimport { MixStreams } from '../../consumers/mix-streams.service';\nimport { DispStreams } from '../../consumers/disp-streams.service';\nimport { StopShareScreen } from '../../consumers/stop-share-screen.service';\nimport { CheckScreenShare } from '../../consumers/check-screen-share.service';\nimport { StartShareScreen } from '../../consumers/start-share-screen.service';\nimport { RequestScreenShare } from '../../consumers/request-screen-share.service';\nimport { ReorderStreams } from '../../consumers/reorder-streams.service';\nimport { PrepopulateUserMedia } from '../../consumers/prepopulate-user-media.service';\nimport { GetVideos } from '../../consumers/get-videos.service';\nimport { RePort } from '../../consumers/re-port.service';\nimport { Trigger } from '../../consumers/trigger.service';\nimport { ConsumerResume } from '../../consumers/consumer-resume.service';\nimport { ConnectSendTransportAudio } from '../../consumers/connect-send-transport-audio.service';\nimport { ConnectSendTransportVideo } from '../../consumers/connect-send-transport-video.service';\nimport { ConnectSendTransportScreen } from '../../consumers/connect-send-transport-screen.service';\nimport { ProcessConsumerTransports } from '../../consumers/process-consumer-transports.service';\nimport { ResumePauseStreams } from '../../consumers/resume-pause-streams.service';\nimport { Readjust } from '../../consumers/readjust.service';\nimport { CheckGrid } from '../../consumers/check-grid.service';\nimport { GetEstimate } from '../../consumers/get-estimate.service';\nimport { CalculateRowsAndColumns } from '../../consumers/calculate-rows-and-columns.service';\nimport { AddVideosGrid } from '../../consumers/add-videos-grid.service';\nimport { OnScreenChanges } from '../../consumers/on-screen-changes.service';\nimport { sleep } from '../../methods/utils/sleep.util';\nimport { ChangeVids } from '../../consumers/change-vids.service';\nimport { CompareActiveNames } from '../../consumers/compare-active-names.service';\nimport { CompareScreenStates } from '../../consumers/compare-screen-states.service';\nimport { CreateSendTransport } from '../../consumers/create-send-transport.service';\nimport { ResumeSendTransportAudio } from '../../consumers/resume-send-transport-audio.service';\nimport { ReceiveAllPipedTransports } from '../../consumers/receive-all-piped-transports.service';\nimport { DisconnectSendTransportVideo } from '../../consumers/disconnect-send-transport-video.service';\nimport { DisconnectSendTransportAudio } from '../../consumers/disconnect-send-transport-audio.service';\nimport { DisconnectSendTransportScreen } from '../../consumers/disconnect-send-transport-screen.service';\nimport { ConnectSendTransport } from '../../consumers/connect-send-transport.service';\nimport { GetPipedProducersAlt } from '../../consumers/get-piped-producers-alt.service';\nimport { SignalNewConsumerTransport } from '../../consumers/signal-new-consumer-transport.service';\nimport { ConnectRecvTransport } from '../../consumers/connect-recv-transport.service';\nimport { ReUpdateInter } from '../../consumers/re-update-inter.service';\nimport { UpdateParticipantAudioDecibels } from '../../consumers/update-participant-audio-decibels.service';\nimport { CloseAndResize } from '../../consumers/close-and-resize.service';\nimport { AutoAdjust } from '../../consumers/auto-adjust.service';\nimport { SwitchUserVideoAlt } from '../../consumers/switch-user-video-alt.service';\nimport { SwitchUserVideo } from '../../consumers/switch-user-video.service';\nimport { SwitchUserAudio } from '../../consumers/switch-user-audio.service';\nimport { ReceiveRoomMessages } from '../../consumers/receive-room-messages.service';\nimport { FormatNumber } from '../../methods/utils/format-number.service';\nimport { ConnectIps } from '../../consumers/connect-ips.service';\nimport { ConnectLocalIps } from '../../consumers/connect-local-ips.service';\n\nimport { PollUpdated } from '../../methods/polls-methods/poll-updated.service';\nimport { HandleCreatePoll } from '../../methods/polls-methods/handle-create-poll.service';\nimport { HandleVotePoll } from '../../methods/polls-methods/handle-vote-poll.service';\nimport { HandleEndPoll } from '../../methods/polls-methods/handle-end-poll.service';\n\nimport { BreakoutRoomUpdated } from '../../methods/breakout-room-methods/breakout-room-updated.service';\n\nimport { StartMeetingProgressTimer } from '../../methods/utils/meeting-timer/start-meeting-progress-timer.service';\nimport { UpdateRecording } from '../../methods/recording-methods/update-recording.service';\nimport { StopRecording } from '../../methods/recording-methods/stop-recording.service';\n\nimport { UserWaiting } from '../../producers/socket-receive-methods/user-waiting.service';\nimport { PersonJoined } from '../../producers/socket-receive-methods/person-joined.service';\nimport { AllWaitingRoomMembers } from '../../producers/socket-receive-methods/all-waiting-room-members.service';\nimport { RoomRecordParams } from '../../producers/socket-receive-methods/room-record-params.service';\nimport { BanParticipant } from '../../producers/socket-receive-methods/ban-participant.service';\nimport { UpdatedCoHost } from '../../producers/socket-receive-methods/updated-co-host.service';\nimport { ParticipantRequested } from '../../producers/socket-receive-methods/participant-requested.service';\nimport { ScreenProducerId } from '../../producers/socket-receive-methods/screen-producer-id.service';\nimport { UpdateMediaSettings } from '../../producers/socket-receive-methods/update-media-settings.service';\nimport { ProducerMediaPaused } from '../../producers/socket-receive-methods/producer-media-paused.service';\nimport { ProducerMediaResumed } from '../../producers/socket-receive-methods/producer-media-resumed.service';\nimport { ProducerMediaClosed } from '../../producers/socket-receive-methods/producer-media-closed.service';\nimport { ControlMediaHost } from '../../producers/socket-receive-methods/control-media-host.service';\nimport { MeetingEnded } from '../../producers/socket-receive-methods/meeting-ended.service';\nimport { DisconnectUserSelf } from '../../producers/socket-receive-methods/disconnect-user-self.service';\nimport { ReceiveMessage } from '../../producers/socket-receive-methods/receive-message.service';\nimport { MeetingTimeRemaining } from '../../producers/socket-receive-methods/meeting-time-remaining.service';\nimport { MeetingStillThere } from '../../producers/socket-receive-methods/meeting-still-there.service';\nimport { StartRecords } from '../../producers/socket-receive-methods/start-records.service';\nimport { ReInitiateRecording } from '../../producers/socket-receive-methods/re-initiate-recording.service';\nimport { GetDomains } from '../../producers/socket-receive-methods/get-domains.service';\nimport { UpdateConsumingDomains } from '../../producers/socket-receive-methods/update-consuming-domains.service';\nimport { RecordingNotice } from '../../producers/socket-receive-methods/recording-notice.service';\nimport { TimeLeftRecording } from '../../producers/socket-receive-methods/time-left-recording.service';\nimport { StoppedRecording } from '../../producers/socket-receive-methods/stopped-recording.service';\nimport { HostRequestResponse } from '../../producers/socket-receive-methods/host-request-response.service';\nimport { AllMembers } from '../../producers/socket-receive-methods/all-members.service';\nimport { AllMembersRest } from '../../producers/socket-receive-methods/all-members-rest.service';\nimport { Disconnect } from '../../producers/socket-receive-methods/disconnect.service';\n\nimport { CaptureCanvasStream } from '../../methods/whiteboard-methods/capture-canvas-stream.service';\nimport { ResumePauseAudioStreams } from '../../consumers/resume-pause-audio-streams.service';\nimport { ProcessConsumerTransportsAudio } from '../../consumers/process-consumer-transports-audio.service';\n\nimport { types } from 'mediasoup-client';\ntype Device = types.Device;\ntype Producer = types.Producer;\ntype ProducerOptions = types.ProducerOptions;\ntype RtpCapabilities = types.RtpCapabilities;\ntype Transport = types.Transport;;\nimport { SelfieSegmentation } from '@mediapipe/selfie_segmentation';\n\nexport type MediasfuConferenceOptions = {\n  PrejoinPage?: (options: PreJoinPageOptions | WelcomePageOptions) => HTMLElement;\n  localLink?: string;\n  connectMediaSFU?: boolean;\n  credentials?: { apiUserName: string; apiKey: string };\n  useLocalUIMode?: boolean;\n  seedData?: SeedData;\n  useSeed?: boolean;\n  imgSrc?: string;\n  sourceParameters?: { [key: string]: any };\n  updateSourceParameters?: (data: { [key: string]: any }) => void;\n  returnUI?: boolean;\n  noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\n  joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n  createMediaSFURoom?: CreateRoomOnMediaSFUType;\n};\n\n/**\n * MediasfuConference component creates an interactive conference interface, supporting breakout rooms, chat, video and audio management, and custom controls.\n *\n * @component\n * @selector app-mediasfu-conference\n * @standalone true\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]\n *\n * @template\n * The template includes:\n * - Conditional rendering for PrejoinPage or WelcomePage component.\n * - A main content area with modular components for grid layouts, video streaming, and sub-aspect controls.\n * - Modals for participants, settings, recording, breakout rooms, and more, to enhance interactivity and customization in conference settings.\n *\n * @input {any} PrejoinPage - Component for the prejoin page, defaults to `WelcomePage`.\n * @input {MediasfuConferenceOptions} options - Configuration options for the component.\n * @input {boolean} connectMediaSFU - Flag to enable/disable connection to the MediaSFU server.\n * @input {string} localLink - Local link for the Community Edition server.\n * @input {{ apiUserName: string; apiKey: string }} credentials - API credentials for secure access.\n * @input {boolean} useLocalUIMode - Flag to toggle local UI settings.\n * @input {SeedData} seedData - Seed data for initializing the component with specific configurations.\n * @input {boolean} useSeed - Enable/disable use of seed data.\n * @input {string} imgSrc - URL for branding images or logos.\n * @input {object} sourceParameters - Additional parameters for the source.\n * @input {Function} updateSourceParameters - Function to update the source parameters.\n * @input {boolean} returnUI - Flag to return the UI elements.\n * @input {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} noUIPreJoinOptions - Options for the prejoin page without UI.\n * @input {JoinRoomOnMediaSFUType} joinMediaSFURoom - Function to join a room on MediaSFU.\n * @input {CreateRoomOnMediaSFUType} createMediaSFURoom - Function to create a room on MediaSFU.\n * @input {any} customVideoCard - Custom component to replace the default VideoCard component.\n * @input {any} customAudioCard - Custom component to replace the default AudioCard component.\n * @input {any} customMiniCard - Custom component to replace the default MiniCard component.\n * @input {any} customMainComponent - Custom component that provides complete control over the main UI, bypassing default MediaSFU styling.\n *\n * @property {string} title - The title of the component, defaults to \"MediaSFU-Conference\".\n *\n * @styles\n * Customizable styles for component layout, overflow, and specific modal appearances.\n *\n * @providers [CookieService] - Service for managing cookies within the component.\n *\n * @constructor\n * @class MediasfuConference\n * @implements OnInit, OnDestroy\n *\n * @method ngOnInit - Initializes configurations and input parameters.\n * @method ngOnDestroy - Handles cleanup of event listeners or intervals.\n *\n * @example\n * ```html\n * <app-mediasfu-conference\n *   [PrejoinPage]=\"CustomPrejoinComponent\"\n *   [localLink]=\"'https://localhost:3000'\"\n *   [connectMediaSFU]=\"true\"\n *   [credentials]=\"{ apiUserName: 'username', apiKey: 'apikey' }\"\n *   [useLocalUIMode]=\"true\"\n *   [seedData]=\"seedDataObject\"\n *   [useSeed]=\"true\"\n *   [imgSrc]=\"'https://example.com/logo.png'\"\n *   [sourceParameters]=\"{ source: 'camera', width: 640, height: 480 }\"\n *   [updateSourceParameters]=\"updateSourceParameters\"\n *   [returnUI]=\"true\"\n *   [noUIPreJoinOptions]=\"{ roomName: 'room1', userName: 'user1' }\"\n *   [joinMediaSFURoom]=\"joinMediaSFURoom\"\n *   [createMediaSFURoom]=\"createMediaSFURoom\"\n *   [customVideoCard]=\"CustomVideoCardComponent\"\n *   [customAudioCard]=\"CustomAudioCardComponent\"\n *   [customMiniCard]=\"CustomMiniCardComponent\"\n *   [customMainComponent]=\"CustomMainComponent\">\n * </app-mediasfu-conference>\n * ```\n */\n\n\n@Component({\n  selector: 'app-mediasfu-conference',\n  imports: [\n    CommonModule,\n    WithOverrideDirective,\n    BreakoutRoomsModal,\n    BackgroundModal,\n    ModernCoHostModalComponent,\n    ModernAlertComponent,\n    AudioGrid,\n    ControlButtonsComponent,\n    FlexibleGrid,\n    FlexibleVideo,\n    ModernLoadingModalComponent,\n    ModernPaginationComponent,\n    ModernParticipantsCounterBadgeComponent,\n    SubAspectComponent,\n    ModernDisplaySettingsModalComponent,\n    ModernEventSettingsModalComponent,\n    ModernConfirmExitModalComponent,\n    ModernMediaSettingsModalComponent,\n    ModernMenuModalComponent,\n    ModernMessagesModalComponent,\n    ModernConfirmHereModalComponent,\n    ModernShareEventModalComponent,\n    ModernParticipantsModalComponent,\n    ModernPollModalComponent,\n    ModernRecordingModalComponent,\n    ModernRequestsModalComponent,\n    MainAspectComponent,\n    MainContainerComponent,\n    MainGridComponent,\n    MainScreenComponent,\n    OtherGridComponent,\n    ScreenboardModal,\n    Whiteboard,\n    ConfigureWhiteboardModal,\n    ModernWaitingRoomModalComponent,\n  ],\n  template: `\n    <!-- Custom Main Component (if provided) - full control over styling -->\n    <ng-container *ngIf=\"customMainComponent && validated.value\">\n      <ng-container\n        *ngComponentOutlet=\"\n          customMainComponent.component || customMainComponent;\n          injector: customMainComponent.injector\n        \"\n      >\n      </ng-container>\n    </ng-container>\n\n    <!-- Default MediaSFU wrapper with standard styling -->\n    <div\n      *ngIf=\"!customMainComponent\"\n      class=\"MediaSFU\"\n      [ngStyle]=\"containerStyle\"\n    >\n      <ng-container *ngIf=\"!validated.value; else mainContent\">\n        <ng-container\n          *ngComponentOutlet=\"\n            PrejoinPageComponent.component;\n            injector: PrejoinPageComponent.injector\n          \"\n        >\n        </ng-container>\n      </ng-container>\n\n      <ng-template #mainContent>\n        <!-- Default Main Component -->\n        <ng-container *ngIf=\"returnUI\">\n        <app-main-container-component\n          *appWithOverride=\"\n            'mainContainer';\n            default: MainContainerComponentRef;\n            props: mainContainerOverrideProps\n          \"\n        >\n          <app-main-aspect-component\n            *appWithOverride=\"\n              'mainAspect';\n              default: MainAspectComponentRef;\n              props: mainAspectOverrideProps\n            \"\n            [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n            [defaultFraction]=\"1 - controlHeight.value\"\n            [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\n            [updateIsWideScreen]=\"updateIsWideScreen\"\n            [updateIsMediumScreen]=\"updateIsMediumScreen\"\n            [updateIsSmallScreen]=\"updateIsSmallScreen\"\n          >\n            <app-main-screen-component\n              *appWithOverride=\"\n                'mainScreen';\n                default: MainScreenComponentRef;\n                props: mainScreenOverrideProps\n              \"\n              [doStack]=\"true\"\n              [mainSize]=\"mainHeightWidth.value\"\n              [defaultFraction]=\"1 - controlHeight.value\"\n              [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\n              [updateComponentSizes]=\"updateComponentSizes\"\n            >\n              <app-main-grid-component\n                *appWithOverride=\"\n                  'mainGrid';\n                  default: MainGridComponentRef;\n                  props: mainGridOverrideProps\n                \"\n                [height]=\"componentSizes.value.mainHeight\"\n                [width]=\"componentSizes.value.mainWidth\"\n                [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n                [mainSize]=\"mainHeightWidth.value\"\n                [showAspect]=\"mainHeightWidth.value > 0\"\n                [timeBackgroundColor]=\"recordState.value\"\n                [meetingProgressTime]=\"meetingProgressTime.value\"\n              >\n                <app-flexible-video\n                  *appWithOverride=\"\n                    'flexibleVideo';\n                    default: FlexibleVideoRef;\n                    props: flexibleVideoOverrideProps\n                  \"\n                  [customWidth]=\"componentSizes.value.mainWidth\"\n                  [customHeight]=\"componentSizes.value.mainHeight\"\n                  [rows]=\"1\"\n                  [columns]=\"1\"\n                  [componentsToRender]=\"mainGridStream.value\"\n                  [showAspect]=\"\n                    mainGridStream.value.length > 0 &&\n                    !(whiteboardStarted.value && !whiteboardEnded.value)\n                  \"\n                  [localStreamScreen]=\"localStreamScreen.value!\"\n                  [annotateScreenStream]=\"annotateScreenStream.value\"\n                  [Screenboard]=\"shared.value ? ScreenboardWidget : undefined\"\n                >\n                </app-flexible-video>\n                <app-whiteboard\n                  *appWithOverride=\"\n                    'whiteboard';\n                    default: WhiteboardRef;\n                    props: whiteboardOverrideProps\n                  \"\n                  [customWidth]=\"componentSizes.value.mainWidth\"\n                  [customHeight]=\"componentSizes.value.mainHeight\"\n                  [parameters]=\"mediaSFUParameters\"\n                  [showAspect]=\"whiteboardStarted.value && !whiteboardEnded.value\"\n                ></app-whiteboard>\n                <app-modern-participants-counter-badge\n                  [participantsCount]=\"participantsCounter.value\"\n                  [position]=\"'bottomLeft'\"\n                  [showBadge]=\"mainHeightWidth.value > 0\"\n                  [isDarkMode]=\"modernThemeDarkMode.value\"\n                ></app-modern-participants-counter-badge>\n              </app-main-grid-component>\n\n              <app-other-grid-component\n                *appWithOverride=\"\n                  'otherGrid';\n                  default: OtherGridComponentRef;\n                  props: otherGridOverrideProps\n                \"\n                [height]=\"componentSizes.value.otherHeight\"\n                [width]=\"componentSizes.value.otherWidth\"\n                [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n                [showAspect]=\"mainHeightWidth.value !== 100\"\n                [timeBackgroundColor]=\"recordState.value\"\n                [showTimer]=\"mainHeightWidth.value === 0\"\n                [meetingProgressTime]=\"meetingProgressTime.value\"\n              >\n                <div\n                  *ngIf=\"doPaginate.value\"\n                  [style.width]=\"paginationDirection.value == 'horizontal' ? componentSizes.value.otherWidth + 'px' : paginationHeightWidth.value + 'px'\"\n                  [style.height]=\"paginationDirection.value == 'horizontal' ? paginationHeightWidth.value + 'px' : componentSizes.value.otherHeight + 'px'\"\n                  [style.display]=\"doPaginate.value ? 'flex' : 'none'\"\n                  [style.flex-direction]=\"paginationDirection.value == 'horizontal' ? 'row' : 'column'\"\n                  [style.justify-content]=\"'center'\"\n                  [style.align-items]=\"'center'\"\n                  [style.padding]=\"'0'\"\n                  [style.margin]=\"'0'\"\n                >\n                  <app-modern-pagination\n                    [totalPages]=\"numberPages.value\"\n                    [currentUserPage]=\"currentUserPage.value\"\n                    [showAspect]=\"doPaginate.value\"\n                    [paginationHeight]=\"paginationHeightWidth.value\"\n                    [direction]=\"paginationDirection.value\"\n                    [parameters]=\"mediaSFUParameters\"\n                  ></app-modern-pagination>\n                </div>\n\n                <ng-container\n                  *appWithOverride=\"\n                    'audioGrid';\n                    default: AudioGridRef;\n                    props: audioGridOverrideProps\n                  \"\n                >\n                  <app-audio-grid [componentsToRender]=\"audioOnlyStreams.value\"></app-audio-grid>\n                </ng-container>\n\n                <app-flexible-grid\n                  *appWithOverride=\"\n                    'flexibleGrid';\n                    default: FlexibleGridRef;\n                    props: flexibleGridOverrideProps\n                  \"\n                  [customWidth]=\"gridSizes.value.gridWidth!\"\n                  [customHeight]=\"gridSizes.value.gridHeight!\"\n                  [rows]=\"gridRows.value\"\n                  [columns]=\"gridCols.value\"\n                  [componentsToRender]=\"otherGridStreams.value[0]\"\n                  [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n                ></app-flexible-grid>\n                <app-flexible-grid\n                  [customWidth]=\"gridSizes.value.altGridWidth!\"\n                  [customHeight]=\"gridSizes.value.altGridHeight!\"\n                  [rows]=\"altGridRows.value\"\n                  [columns]=\"altGridCols.value\"\n                  [componentsToRender]=\"otherGridStreams.value[1]\"\n                  [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n                ></app-flexible-grid>\n                <app-modern-participants-counter-badge\n                  [participantsCount]=\"participantsCounter.value\"\n                  [position]=\"'topRight'\"\n                  [showBadge]=\"mainHeightWidth.value === 0\"\n                  [isDarkMode]=\"modernThemeDarkMode.value\"\n                ></app-modern-participants-counter-badge>\n              </app-other-grid-component>\n            </app-main-screen-component>\n          </app-main-aspect-component>\n\n          <app-sub-aspect-component\n            *appWithOverride=\"\n              'subAspect';\n              default: SubAspectComponentRef;\n              props: subAspectOverrideProps\n            \"\n            [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n            [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\n            [defaultFractionSub]=\"controlHeight.value\"\n          >\n            <ng-container\n              *appWithOverride=\"\n                'controlButtons';\n                default: ControlButtonsComponentRef;\n                props: controlButtonsOverrideProps\n              \"\n            >\n              <app-control-buttons-component\n                [buttons]=\"controlButtons\"\n                [isDarkMode]=\"modernThemeDarkMode.value\"\n                [buttonColor]=\"modernThemeDarkMode.value ? 'rgba(255, 255, 255, 0.92)' : 'rgba(15, 23, 42, 0.88)'\"\n                [buttonBackgroundColor]=\"{\n                  default: 'transparent',\n                  pressed: 'transparent'\n                }\"\n                [alignment]=\"'space-between'\"\n                [vertical]=\"false\"\n                [buttonsContainerStyle]=\"{\n                  width: '100%',\n                  marginTop: '0',\n                  marginBottom: '0',\n                  backgroundColor: 'transparent'\n                }\"\n              ></app-control-buttons-component>\n            </ng-container>\n          </app-sub-aspect-component>\n        </app-main-container-component>\n        </ng-container>\n      </ng-template>\n\n      <ng-container *ngIf=\"returnUI\">\n      <app-modern-menu-modal\n        *appWithOverride=\"\n          'menuModal';\n          default: MenuModalRef;\n          props: menuModalOverrideProps\n        \"\n        [backgroundColor]=\"''\"\n        [isVisible]=\"isMenuModalVisible.value\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n        [onToggleTheme]=\"updateModernThemeDarkMode\"\n        [onClose]=\"onCloseMenuModal\"\n        [customButtons]=\"customMenuButtons\"\n        [roomName]=\"roomName.value\"\n        [adminPasscode]=\"adminPasscode.value\"\n        [islevel]=\"islevel.value\"\n        [eventType]=\"eventType.value\"\n        [localLink]=\"localLink\"\n      ></app-modern-menu-modal>\n\n      <app-event-settings-modal\n        *appWithOverride=\"\n          'eventSettingsModal';\n          default: EventSettingsModalRef;\n          props: eventSettingsModalOverrideProps\n        \"\n        [isEventSettingsModalVisible]=\"isSettingsModalVisible.value\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n        [onEventSettingsClose]=\"onEventSettingsClose\"\n        [audioSetting]=\"audioSetting.value\"\n        [videoSetting]=\"videoSetting.value\"\n        [screenshareSetting]=\"screenshareSetting.value\"\n        [chatSetting]=\"chatSetting.value\"\n        [updateAudioSetting]=\"updateAudioSetting\"\n        [updateVideoSetting]=\"updateVideoSetting\"\n        [updateScreenshareSetting]=\"updateScreenshareSetting\"\n        [updateChatSetting]=\"updateChatSetting\"\n        [updateIsSettingsModalVisible]=\"updateIsSettingsModalVisible\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [showAlert]=\"showAlert\"\n      ></app-event-settings-modal>\n\n      <app-requests-modal\n        *appWithOverride=\"\n          'requestsModal';\n          default: RequestsModalRef;\n          props: requestsModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isRequestsModalVisible]=\"isRequestsModalVisible.value\"\n        [onRequestClose]=\"onRequestClose\"\n        [requestCounter]=\"requestCounter.value\"\n        [onRequestFilterChange]=\"onRequestFilterChange\"\n        [updateRequestList]=\"updateRequestList\"\n        [requestList]=\"filteredRequestList.value\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-requests-modal>\n\n      <app-waiting-room-modal\n        *appWithOverride=\"\n          'waitingRoomModal';\n          default: WaitingRoomModalRef;\n          props: waitingRoomModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isWaitingModalVisible]=\"isWaitingModalVisible.value\"\n        [onWaitingRoomClose]=\"onWaitingRoomClose\"\n        [waitingRoomCounter]=\"waitingRoomCounter.value\"\n        [onWaitingRoomFilterChange]=\"onWaitingRoomFilterChange\"\n        [waitingRoomList]=\"filteredWaitingRoomList.value\"\n        [updateWaitingList]=\"updateWaitingRoomList\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [parameters]=\"{\n                      filteredWaitingRoomList: waitingRoomList.value,\n                      getUpdatedAllParams: getUpdatedAllParams,\n                    }\"\n      ></app-waiting-room-modal>\n\n      <app-co-host-modal\n        *appWithOverride=\"\n          'coHostModal';\n          default: CoHostModalRef;\n          props: coHostModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isCoHostModalVisible]=\"isCoHostModalVisible.value\"\n        [onCoHostClose]=\"onCoHostClose\"\n        [coHostResponsibility]=\"coHostResponsibility.value\"\n        [participants]=\"participants.value\"\n        [currentCohost]=\"coHost.value\"\n        [roomName]=\"roomName.value\"\n        [showAlert]=\"showAlert\"\n        [updateCoHostResponsibility]=\"updateCoHostResponsibility\"\n        [updateCoHost]=\"updateCoHost\"\n        [updateIsCoHostModalVisible]=\"updateIsCoHostModalVisible\"\n        [socket]=\"socket.value\"\n      ></app-co-host-modal>\n\n      <app-media-settings-modal\n        *appWithOverride=\"\n          'mediaSettingsModal';\n          default: MediaSettingsModalRef;\n          props: mediaSettingsModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\n        [isMediaSettingsModalVisible]=\"isMediaSettingsModalVisible.value\"\n        [onMediaSettingsClose]=\"onMediaSettingsClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-media-settings-modal>\n\n      <app-participants-modal\n        *appWithOverride=\"\n          'participantsModal';\n          default: ParticipantsModalRef;\n          props: participantsModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isParticipantsModalVisible]=\"isParticipantsModalVisible.value\"\n        [onParticipantsClose]=\"onParticipantsClose\"\n        [participantsCounter]=\"participantsCounter.value\"\n        [onParticipantsFilterChange]=\"onParticipantsFilterChange\"\n        [parameters]=\"{\n              updateParticipants: updateParticipants,\n              filteredParticipants: filteredParticipants.value,\n              updateIsParticipantsModalVisible: updateIsParticipantsModalVisible,\n              updateDirectMessageDetails: updateDirectMessageDetails,\n              updateStartDirectMessage: updateStartDirectMessage,\n              updateIsMessagesModalVisible: updateIsMessagesModalVisible,\n              showAlert: showAlert,\n              participants: filteredParticipants.value,\n              roomName: roomName.value,\n              islevel: islevel.value,\n              member: member.value,\n              coHostResponsibility: coHostResponsibility.value,\n              coHost: coHost.value,\n              eventType: eventType.value,\n              startDirectMessage: startDirectMessage.value,\n              directMessageDetails: directMessageDetails.value,\n              socket: socket.value,\n              getUpdatedAllParams: getUpdatedAllParams,\n            }\"\n      ></app-participants-modal>\n\n      <app-display-settings-modal\n        *appWithOverride=\"\n          'displaySettingsModal';\n          default: DisplaySettingsModalRef;\n          props: displaySettingsModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isDisplaySettingsModalVisible]=\"isDisplaySettingsModalVisible.value\"\n        [onDisplaySettingsClose]=\"onDisplaySettingsClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-display-settings-modal>\n\n      <app-recording-modal\n        *appWithOverride=\"\n          'recordingModal';\n          default: RecordingModalRef;\n          props: recordingModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isRecordingModalVisible]=\"isRecordingModalVisible.value\"\n        [onClose]=\"onRecordingClose\"\n        [startRecording]=\"startRecording.startRecording\"\n        [confirmRecording]=\"confirmRecording.confirmRecording\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-recording-modal>\n\n      <app-messages-modal\n        *appWithOverride=\"\n          'messagesModal';\n          default: MessagesModalRef;\n          props: messagesModalOverrideProps\n        \"\n        [backgroundColor]=\"\n          eventType.value === 'webinar' || eventType.value === 'conference'\n            ? '#f5f5f5'\n            : 'rgba(255, 255, 255, 0.25)'\n        \"\n        [isMessagesModalVisible]=\"isMessagesModalVisible.value\"\n        [onMessagesClose]=\"onMessagesClose\"\n        [messages]=\"messages.value\"\n        [eventType]=\"eventType.value\"\n        [member]=\"member.value\"\n        [islevel]=\"islevel.value\"\n        [coHostResponsibility]=\"coHostResponsibility.value\"\n        [coHost]=\"coHost.value\"\n        [startDirectMessage]=\"startDirectMessage.value\"\n        [directMessageDetails]=\"directMessageDetails.value\"\n        [updateStartDirectMessage]=\"updateStartDirectMessage\"\n        [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\n        [showAlert]=\"showAlert\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [chatSetting]=\"chatSetting.value\"\n      ></app-messages-modal>\n\n      <app-confirm-exit-modal\n        *appWithOverride=\"\n          'confirmExitModal';\n          default: ConfirmExitModalRef;\n          props: confirmExitModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\n        [isConfirmExitModalVisible]=\"isConfirmExitModalVisible.value\"\n        [onConfirmExitClose]=\"onConfirmExitClose\"\n        [position]=\"'topRight'\"\n        [member]=\"member.value\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [islevel]=\"islevel.value\"\n      ></app-confirm-exit-modal>\n\n      <app-confirm-here-modal\n        *appWithOverride=\"\n          'confirmHereModal';\n          default: ConfirmHereModalRef;\n          props: confirmHereModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\n        [isConfirmHereModalVisible]=\"isConfirmHereModalVisible.value\"\n        [onConfirmHereClose]=\"onConfirmHereClose\"\n        [onSuppressConfirmHere]=\"onSuppressConfirmHere\"\n        [member]=\"member.value\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n      ></app-confirm-here-modal>\n\n      <app-share-event-modal\n        *appWithOverride=\"\n          'shareEventModal';\n          default: ShareEventModalRef;\n          props: shareEventModalOverrideProps\n        \"\n        [isShareEventModalVisible]=\"isShareEventModalVisible.value\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n        [onShareEventClose]=\"onShareEventClose\"\n        [roomName]=\"roomName.value\"\n        [islevel]=\"islevel.value\"\n        [adminPasscode]=\"adminPasscode.value\"\n        [eventType]=\"eventType.value\"\n        [localLink]=\"localLink\"\n      ></app-share-event-modal>\n\n      <app-poll-modal\n        *appWithOverride=\"\n          'pollModal';\n          default: PollModalRef;\n          props: pollModalOverrideProps\n        \"\n        [isPollModalVisible]=\"isPollModalVisible.value\"\n        [onClose]=\"onPollClose\"\n        [member]=\"member.value\"\n        [islevel]=\"islevel.value\"\n        [polls]=\"polls.value\"\n        [poll]=\"poll.value\"\n        [socket]=\"socket.value\"\n        [roomName]=\"roomName.value\"\n        [showAlert]=\"showAlert\"\n        [updateIsPollModalVisible]=\"updateIsPollModalVisible\"\n        [handleCreatePoll]=\"handleCreatePoll.handleCreatePoll\"\n        [handleEndPoll]=\"handleEndPoll.handleEndPoll\"\n        [handleVotePoll]=\"handleVotePoll.handleVotePoll\"\n      ></app-poll-modal>\n\n      <app-background-modal\n        *appWithOverride=\"\n          'backgroundModal';\n          default: BackgroundModalRef;\n          props: backgroundModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isVisible]=\"isBackgroundModalVisible.value\"\n        [onClose]=\"onBackgroundClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-background-modal>\n\n      <app-breakout-rooms-modal\n        *appWithOverride=\"\n          'breakoutRoomsModal';\n          default: BreakoutRoomsModalRef;\n          props: breakoutRoomsModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isVisible]=\"isBreakoutRoomsModalVisible.value\"\n        [onBreakoutRoomsClose]=\"onBreakoutRoomsClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-breakout-rooms-modal>\n\n      <app-configure-whiteboard-modal\n        *appWithOverride=\"\n          'configureWhiteboardModal';\n          default: ConfigureWhiteboardModalRef;\n          props: configureWhiteboardModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isVisible]=\"isConfigureWhiteboardModalVisible.value\"\n        [onConfigureWhiteboardClose]=\"onConfigureWhiteboardClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-configure-whiteboard-modal>\n\n      <app-screenboard-modal\n        *appWithOverride=\"\n          'screenboardModal';\n          default: ScreenboardModalRef;\n          props: screenboardModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n        [isVisible]=\"isScreenboardModalVisible.value\"\n        [onClose]=\"onScreenboardClose\"\n        [parameters]=\"mediaSFUParameters\"\n      ></app-screenboard-modal>\n\n      <ng-container\n        *appWithOverride=\"'alert'; default: AlertComponentRef; props: alertOverrideProps\"\n      >\n        <app-modern-alert-component\n          [visible]=\"alertVisible.value\"\n          [message]=\"alertMessage.value\"\n          [type]=\"alertType.value\"\n          [position]=\"alertPosition.value\"\n          [duration]=\"alertDuration.value\"\n          [onHide]=\"onAlertHide\"\n          [isDarkMode]=\"modernThemeDarkMode.value\"\n        ></app-modern-alert-component>\n      </ng-container>\n\n      <ng-container\n        *appWithOverride=\"'loadingModal'; default: LoadingModalRef; props: loadingModalOverrideProps\"\n      >\n        <app-modern-loading-modal\n          [isVisible]=\"isLoadingModalVisible.value\"\n          [isDarkMode]=\"modernThemeDarkMode.value\"\n        ></app-modern-loading-modal>\n      </ng-container>\n    </ng-container>\n    </div>\n\n    <!-- Modals and alerts (only available when using default UI, not custom components) -->\n    <ng-container *ngIf=\"returnUI && !customMainComponent\">\n      <!-- All the modals that were inside the div should be duplicated here -->\n    </ng-container>\n\n    <!-- Prejoin page for custom component (when not validated) -->\n    <ng-container *ngIf=\"customMainComponent && !validated.value\">\n      <ng-container\n        *ngComponentOutlet=\"\n          PrejoinPageComponent.component;\n          injector: PrejoinPageComponent.injector\n        \"\n      >\n      </ng-container>\n    </ng-container>\n  `,\n  styles: [\n    `\n      .MediaSFU {\n        height: 100vh;\n        width: 100vw;\n        max-width: 100vw;\n        max-height: 100vh;\n        overflow: hidden;\n      }\n    `,\n  ],\n  providers: [CookieService]\n})\nexport class MediasfuConference implements OnInit, OnDestroy {\n  @Input()\n  PrejoinPage: any = WelcomePage;\n  @Input() localLink = '';\n  @Input() connectMediaSFU = true;\n  @Input() credentials: { apiUserName: string; apiKey: string } = { apiUserName: '', apiKey: '' };\n  @Input() useLocalUIMode = false;\n  @Input() seedData?: SeedData;\n  @Input() useSeed = false;\n  @Input() imgSrc = 'https://mediasfu.com/images/logo192.png';\n  @Input() sourceParameters: { [key: string]: any } = {};\n  @Input() updateSourceParameters? = (data: { [key: string]: any }) => { };\n  @Input() returnUI? = true;\n  @Input() noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\n  @Input() joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n  @Input() createMediaSFURoom?: CreateRoomOnMediaSFUType;\n\n  // Custom component inputs\n  @Input() customVideoCard: any;\n  @Input() customAudioCard: any;\n  @Input() customMiniCard: any;\n  @Input() customMainComponent: any;\n\n  // UI customization inputs\n  @Input() containerStyle?: Record<string, any>;\n  @Input() uiOverrides?: MediasfuUICustomOverrides;\n\n  title = 'MediaSFU-Conference';\n\n  // Component references for override directive\n  protected readonly MainContainerComponentRef = MainContainerComponent;\n  protected readonly MainAspectComponentRef = MainAspectComponent;\n  protected readonly MainScreenComponentRef = MainScreenComponent;\n  protected readonly MainGridComponentRef = MainGridComponent;\n  protected readonly FlexibleVideoRef = FlexibleVideo;\n  protected readonly WhiteboardRef = Whiteboard;\n  protected readonly OtherGridComponentRef = OtherGridComponent;\n  protected readonly SubAspectComponentRef = SubAspectComponent;\n  protected readonly FlexibleGridRef = FlexibleGrid;\n  protected readonly ControlButtonsComponentRef = ControlButtonsComponent;\n  protected readonly AudioGridRef = AudioGrid;\n  protected readonly AlertComponentRef = ModernAlertComponent;\n  protected readonly LoadingModalRef = ModernLoadingModalComponent;\n  protected readonly MenuModalRef = ModernMenuModalComponent;\n  protected readonly RecordingModalRef = ModernRecordingModalComponent;\n  protected readonly RequestsModalRef = ModernRequestsModalComponent;\n  protected readonly WaitingRoomModalRef = ModernWaitingRoomModalComponent;\n  protected readonly CoHostModalRef = ModernCoHostModalComponent;\n  protected readonly ParticipantsModalRef = ModernParticipantsModalComponent;\n  protected readonly DisplaySettingsModalRef = ModernDisplaySettingsModalComponent;\n  protected readonly EventSettingsModalRef = ModernEventSettingsModalComponent;\n  protected readonly MediaSettingsModalRef = ModernMediaSettingsModalComponent;\n  protected readonly MessagesModalRef = ModernMessagesModalComponent;\n  protected readonly ConfirmExitModalRef = ModernConfirmExitModalComponent;\n  protected readonly ConfirmHereModalRef = ModernConfirmHereModalComponent;\n  protected readonly ShareEventModalRef = ModernShareEventModalComponent;\n  protected readonly PollModalRef = ModernPollModalComponent;\n  protected readonly BreakoutRoomsModalRef = BreakoutRoomsModal;\n  protected readonly BackgroundModalRef = BackgroundModal;\n  protected readonly ConfigureWhiteboardModalRef = ConfigureWhiteboardModal;\n  protected readonly ScreenboardModalRef = ScreenboardModal;\n\n  // Override prop factory methods\n  protected mainContainerOverrideProps = () => ({\n    backgroundColor: this.validated.value ? 'rgba(217, 227, 234, 0.99)' : 'transparent',\n    children: [],\n  });\n\n  protected mainAspectOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    defaultFraction: 1 - this.controlHeight.value,\n    showControls: this.eventType.value === 'webinar' || this.eventType.value === 'conference',\n    updateIsWideScreen: this.updateIsWideScreen,\n    updateIsMediumScreen: this.updateIsMediumScreen,\n    updateIsSmallScreen: this.updateIsSmallScreen,\n  });\n\n  protected mainScreenOverrideProps = () => ({\n    doStack: true,\n    mainSize: this.mainHeightWidth.value,\n    defaultFraction: 1 - this.controlHeight.value,\n    showControls: this.eventType.value === 'webinar' || this.eventType.value === 'conference',\n    updateComponentSizes: this.updateComponentSizes,\n  });\n\n  protected mainGridOverrideProps = () => ({\n    height: this.componentSizes.value.mainHeight,\n    width: this.componentSizes.value.mainWidth,\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    mainSize: this.mainHeightWidth.value,\n    showAspect: this.mainHeightWidth.value > 0,\n    timeBackgroundColor: this.recordState.value,\n    meetingProgressTime: this.meetingProgressTime.value,\n  });\n\n  protected flexibleVideoOverrideProps = () => ({\n    customWidth: this.componentSizes.value.mainWidth,\n    customHeight: this.componentSizes.value.mainHeight,\n    rows: 1,\n    columns: 1,\n    componentsToRender: this.mainGridStream.value,\n    showAspect: this.mainGridStream.value.length > 0 && !(this.whiteboardStarted.value && !this.whiteboardEnded.value),\n    localStreamScreen: this.localStreamScreen.value!,\n    annotateScreenStream: this.annotateScreenStream.value,\n    Screenboard: this.shared.value ? this.ScreenboardWidget : undefined,\n  });\n\n  protected whiteboardOverrideProps = () => ({\n    customWidth: this.componentSizes.value.mainWidth,\n    customHeight: this.componentSizes.value.mainHeight,\n    parameters: this.mediaSFUParameters,\n    showAspect: this.whiteboardStarted.value && !this.whiteboardEnded.value,\n  });\n\n  protected otherGridOverrideProps = () => ({\n    height: this.componentSizes.value.otherHeight,\n    width: this.componentSizes.value.otherWidth,\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    showAspect: this.mainHeightWidth.value !== 100,\n    timeBackgroundColor: this.recordState.value,\n    showTimer: this.mainHeightWidth.value === 0,\n    meetingProgressTime: this.meetingProgressTime.value,\n  });\n\n  protected subAspectOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    showControls: this.eventType.value === 'webinar' || this.eventType.value === 'conference',\n    defaultFractionSub: this.mainHeightWidth.value > 0 ? 0 : 1 - this.controlHeight.value,\n  });\n\n  protected flexibleGridOverrideProps = () => ({\n    customWidth: this.componentSizes.value.otherWidth,\n    customHeight: this.componentSizes.value.otherHeight,\n    rows: this.gridRows.value,\n    columns: this.gridCols.value,\n    componentsToRender: this.otherGridStreams.value[0] || [],\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n  });\n\n  protected controlButtonsOverrideProps = () => ({\n    buttons: this.controlButtons,\n    position: 'right',\n    location: 'bottom',\n    direction: 'horizontal',\n    showAspect: this.eventType.value !== 'broadcast',\n    isDarkMode: this.modernThemeDarkMode.value,\n    buttonColor: this.modernThemeDarkMode.value ? 'rgba(255, 255, 255, 0.92)' : 'rgba(15, 23, 42, 0.88)',\n    buttonBackgroundColor: {\n      default: 'transparent',\n      pressed: 'transparent',\n    },\n    alignment: 'space-between',\n    vertical: false,\n    buttonsContainerStyle: {\n      width: '100%',\n      marginTop: '0',\n      marginBottom: '0',\n      backgroundColor: 'transparent',\n    },\n    parameters: this.mediaSFUParameters,\n  });\n\n  protected audioGridOverrideProps = () => ({\n    componentsToRender: this.audioOnlyStreams.value,\n  });\n\n  protected alertOverrideProps = () => ({\n    visible: this.alertVisible.value,\n    message: this.alertMessage.value,\n    type: this.alertType.value,\n    position: this.alertPosition.value,\n    duration: this.alertDuration.value,\n    onHide: this.onAlertHide,\n    isDarkMode: this.modernThemeDarkMode.value,\n  });\n\n  protected loadingModalOverrideProps = () => ({\n    isVisible: this.isLoadingModalVisible.value,\n    isDarkMode: this.modernThemeDarkMode.value,\n  });\n\n  protected menuModalOverrideProps = () => ({\n    backgroundColor: '',\n    isVisible: this.isMenuModalVisible.value,\n    isDarkMode: this.modernThemeDarkMode.value,\n    onToggleTheme: this.updateModernThemeDarkMode,\n    onClose: this.onCloseMenuModal,\n    customButtons: this.customMenuButtons,\n    roomName: this.roomName.value,\n    adminPasscode: this.adminPasscode.value,\n    islevel: this.islevel.value,\n    eventType: this.eventType.value,\n    localLink: this.localLink,\n    parameters: this.mediaSFUParameters,\n  });\n\n  protected recordingModalOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    isRecordingModalVisible: this.isRecordingModalVisible.value,\n    onClose: this.onRecordingClose,\n    startRecording: this.startRecording.startRecording,\n    confirmRecording: this.confirmRecording.confirmRecording,\n    parameters: this.mediaSFUParameters,\n  });\n\n  protected requestsModalOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    isRequestsModalVisible: this.isRequestsModalVisible.value,\n    onRequestClose: this.onRequestClose,\n    requestCounter: this.requestCounter.value,\n    onRequestFilterChange: this.onRequestFilterChange,\n    updateRequestList: this.updateRequestList,\n    requestList: this.filteredRequestList.value,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    parameters: this.mediaSFUParameters,\n  });\n\n  protected waitingRoomModalOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    isWaitingModalVisible: this.isWaitingModalVisible.value,\n    onWaitingRoomClose: this.onWaitingRoomClose,\n    waitingRoomCounter: this.waitingRoomCounter.value,\n    onWaitingRoomFilterChange: this.onWaitingRoomFilterChange,\n    waitingRoomList: this.filteredWaitingRoomList.value,\n    updateWaitingList: this.updateWaitingRoomList,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    parameters: {\n      filteredWaitingRoomList: this.waitingRoomList.value,\n      getUpdatedAllParams: this.getUpdatedAllParams.bind(this),\n    },\n  });\n\n  protected coHostModalOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    isCoHostModalVisible: this.isCoHostModalVisible.value,\n    onCoHostClose: this.onCoHostClose,\n    coHostResponsibility: this.coHostResponsibility.value,\n    participants: this.participants.value,\n    currentCohost: this.coHost.value,\n    roomName: this.roomName.value,\n    showAlert: this.showAlert,\n    updateCoHostResponsibility: this.updateCoHostResponsibility,\n    updateCoHost: this.updateCoHost,\n    socket: this.socket.value,\n  });\n\n  protected participantsModalOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    isParticipantsModalVisible: this.isParticipantsModalVisible.value,\n    onParticipantsClose: this.onParticipantsClose,\n    participantsCounter: this.participantsCounter.value,\n    onParticipantsFilterChange: this.onParticipantsFilterChange,\n    parameters: {\n      updateParticipants: this.updateParticipants,\n      updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible,\n      getUpdatedAllParams: this.getUpdatedAllParams.bind(this),\n    },\n  });\n\n  protected displaySettingsModalOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\n    onDisplaySettingsClose: this.onDisplaySettingsClose,\n    parameters: this.mediaSFUParameters,\n  });\n\n  protected eventSettingsModalOverrideProps = () => ({\n    isEventSettingsModalVisible: this.isSettingsModalVisible.value,\n    isDarkMode: this.modernThemeDarkMode.value,\n    onEventSettingsClose: this.onEventSettingsClose,\n    audioSetting: this.audioSetting.value,\n    videoSetting: this.videoSetting.value,\n    screenshareSetting: this.screenshareSetting.value,\n    chatSetting: this.chatSetting.value,\n    updateAudioSetting: this.updateAudioSetting,\n    updateVideoSetting: this.updateVideoSetting,\n    updateScreenshareSetting: this.updateScreenshareSetting,\n    updateChatSetting: this.updateChatSetting,\n    updateIsSettingsModalVisible: this.updateIsSettingsModalVisible,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    showAlert: this.showAlert,\n  });\n\n  protected mediaSettingsModalOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\n    onMediaSettingsClose: this.onMediaSettingsClose,\n    parameters: this.mediaSFUParameters,\n  });\n\n  protected messagesModalOverrideProps = () => ({\n    backgroundColor: this.eventType.value === 'webinar' || this.eventType.value === 'conference' ? '#f5f5f5' : 'rgba(255, 255, 255, 0.25)',\n    isMessagesModalVisible: this.isMessagesModalVisible.value,\n    onMessagesClose: this.onMessagesClose,\n    messages: this.messages.value,\n    eventType: this.eventType.value,\n    member: this.member.value,\n    islevel: this.islevel.value,\n    coHostResponsibility: this.coHostResponsibility.value,\n    coHost: this.coHost.value,\n    startDirectMessage: this.startDirectMessage.value,\n    directMessageDetails: this.directMessageDetails.value,\n    updateStartDirectMessage: this.updateStartDirectMessage,\n    updateDirectMessageDetails: this.updateDirectMessageDetails,\n    showAlert: this.showAlert,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    chatSetting: this.chatSetting.value,\n  });\n\n  protected confirmExitModalOverrideProps = () => ({\n    backgroundColor: 'rgba(181, 233, 229, 0.97)',\n    isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n    onConfirmExitClose: this.onConfirmExitClose,\n    position: 'topRight',\n    member: this.member.value,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    islevel: this.islevel.value,\n  });\n\n  protected confirmHereModalOverrideProps = () => ({\n    backgroundColor: 'rgba(181, 233, 229, 0.97)',\n    isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\n    onConfirmHereClose: this.onConfirmHereClose,\n    onSuppressConfirmHere: this.onSuppressConfirmHere,\n    member: this.member.value,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n  });\n\n  protected shareEventModalOverrideProps = () => ({\n    isShareEventModalVisible: this.isShareEventModalVisible.value,\n    isDarkMode: this.modernThemeDarkMode.value,\n    onShareEventClose: this.onShareEventClose,\n    roomName: this.roomName.value,\n    islevel: this.islevel.value,\n    adminPasscode: this.adminPasscode.value,\n    eventType: this.eventType.value,\n    localLink: this.localLink,\n  });\n\n  protected pollModalOverrideProps = () => ({\n    backgroundColor: 'rgba(255, 255, 255, 0.25)',\n    isPollModalVisible: this.isPollModalVisible.value,\n    onClose: this.onPollClose,\n    member: this.member.value,\n    islevel: this.islevel.value,\n    polls: this.polls.value,\n    poll: this.poll.value,\n    socket: this.socket.value,\n    roomName: this.roomName.value,\n    showAlert: this.showAlert,\n    updateIsPollModalVisible: this.updateIsPollModalVisible,\n    handleCreatePoll: this.handleCreatePoll.handleCreatePoll,\n    handleEndPoll: this.handleEndPoll.handleEndPoll,\n    handleVotePoll: this.handleVotePoll.handleVotePoll,\n  });\n\n  protected breakoutRoomsModalOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    isVisible: this.isBreakoutRoomsModalVisible.value,\n    onBreakoutRoomsClose: this.onBreakoutRoomsClose,\n    parameters: this.mediaSFUParameters,\n  });\n\n  protected backgroundModalOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    isVisible: this.isBackgroundModalVisible.value,\n    onClose: this.onBackgroundClose,\n    parameters: this.mediaSFUParameters,\n  });\n\n  protected configureWhiteboardModalOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    isVisible: this.isConfigureWhiteboardModalVisible.value,\n    onConfigureWhiteboardClose: this.onConfigureWhiteboardClose,\n    parameters: this.mediaSFUParameters,\n  });\n\n  protected screenboardModalOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    isVisible: this.isScreenboardModalVisible.value,\n    onClose: this.onScreenboardClose,\n    parameters: this.mediaSFUParameters,\n  });\n\n  private mainHeightWidthSubscription: Subscription | undefined;\n  private validatedSubscription: Subscription | undefined;\n  private islevelSubscription: Subscription | undefined;\n  private coHostSubscription: Subscription | undefined;\n  private buttonSubscriptions: Subscription[] = [];\n  private ScreenboardSubscription: Subscription | undefined;\n  private recordingSubscription: Subscription | undefined;\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    private injector: Injector,\n    public updateMiniCardsGrid: UpdateMiniCardsGrid,\n    public mixStreams: MixStreams,\n    public dispStreams: DispStreams,\n    public stopShareScreen: StopShareScreen,\n    public checkScreenShare: CheckScreenShare,\n    public startShareScreen: StartShareScreen,\n    public requestScreenShare: RequestScreenShare,\n    public reorderStreams: ReorderStreams,\n    public prepopulateUserMedia: PrepopulateUserMedia,\n    public getVideos: GetVideos,\n    public rePort: RePort,\n    public trigger: Trigger,\n    public consumerResume: ConsumerResume,\n    public connectSendTransport: ConnectSendTransport,\n    public connectSendTransportAudio: ConnectSendTransportAudio,\n    public connectSendTransportVideo: ConnectSendTransportVideo,\n    public connectSendTransportScreen: ConnectSendTransportScreen,\n    public processConsumerTransports: ProcessConsumerTransports,\n    public resumePauseStreams: ResumePauseStreams,\n    public readjust: Readjust,\n    public checkGrid: CheckGrid,\n    public getEstimate: GetEstimate,\n    public calculateRowsAndColumns: CalculateRowsAndColumns,\n    public addVideosGrid: AddVideosGrid,\n    public onScreenChanges: OnScreenChanges,\n    public changeVids: ChangeVids,\n    public compareActiveNames: CompareActiveNames,\n    public compareScreenStates: CompareScreenStates,\n    public createSendTransport: CreateSendTransport,\n    public resumeSendTransportAudio: ResumeSendTransportAudio,\n    public receiveAllPipedTransports: ReceiveAllPipedTransports,\n    public disconnectSendTransportVideo: DisconnectSendTransportVideo,\n    public disconnectSendTransportAudio: DisconnectSendTransportAudio,\n    public disconnectSendTransportScreen: DisconnectSendTransportScreen,\n    public getPipedProducersAlt: GetPipedProducersAlt,\n    public signalNewConsumerTransport: SignalNewConsumerTransport,\n    public connectRecvTransport: ConnectRecvTransport,\n    public reUpdateInter: ReUpdateInter,\n    public updateParticipantAudioDecibels: UpdateParticipantAudioDecibels,\n    public closeAndResize: CloseAndResize,\n    public autoAdjust: AutoAdjust,\n    public switchUserVideoAlt: SwitchUserVideoAlt,\n    public switchUserVideo: SwitchUserVideo,\n    public switchUserAudio: SwitchUserAudio,\n    public getDomains: GetDomains,\n    public formatNumber: FormatNumber,\n    public connectIps: ConnectIps,\n    public connectLocalIps: ConnectLocalIps,\n    public createDeviceClient: CreateDeviceClient,\n    public handleCreatePoll: HandleCreatePoll,\n    public handleEndPoll: HandleEndPoll,\n    public handleVotePoll: HandleVotePoll,\n    public captureCanvasStream: CaptureCanvasStream,\n    public resumePauseAudioStreams: ResumePauseAudioStreams,\n    public processConsumerTransportsAudio: ProcessConsumerTransportsAudio,\n\n    public launchMenuModal: LaunchMenuModal,\n    public launchRecording: LaunchRecording,\n    public startRecording: StartRecording,\n    public confirmRecording: ConfirmRecording,\n    public launchWaiting: LaunchWaiting,\n    public launchCoHost: launchCoHost,\n    public launchMediaSettings: LaunchMediaSettings,\n    public launchDisplaySettings: LaunchDisplaySettings,\n    public launchSettings: LaunchSettings,\n    public launchRequests: LaunchRequests,\n    public launchParticipants: LaunchParticipants,\n    public launchMessages: LaunchMessages,\n    public launchConfirmExit: LaunchConfirmExit,\n    public launchPoll: LaunchPoll,\n    public launchBreakoutRooms: LaunchBreakoutRooms,\n    public launchConfigureWhiteboard: LaunchConfigureWhiteboard,\n    public startMeetingProgressTimer: StartMeetingProgressTimer,\n    public updateRecording: UpdateRecording,\n    public stopRecording: StopRecording,\n    public userWaiting: UserWaiting,\n    public personJoined: PersonJoined,\n    public allWaitingRoomMembers: AllWaitingRoomMembers,\n    public roomRecordParams: RoomRecordParams,\n    public banParticipant: BanParticipant,\n    public updatedCoHost: UpdatedCoHost,\n    public participantRequested: ParticipantRequested,\n    public screenProducerId: ScreenProducerId,\n    public updateMediaSettings: UpdateMediaSettings,\n    public producerMediaPaused: ProducerMediaPaused,\n    public producerMediaResumed: ProducerMediaResumed,\n    public producerMediaClosed: ProducerMediaClosed,\n    public controlMediaHost: ControlMediaHost,\n    public meetingEnded: MeetingEnded,\n    public disconnectUserSelf: DisconnectUserSelf,\n    public receiveMessage: ReceiveMessage,\n    public meetingTimeRemaining: MeetingTimeRemaining,\n    public meetingStillThere: MeetingStillThere,\n    public startRecords: StartRecords,\n    public reInitiateRecording: ReInitiateRecording,\n    public recordingNotice: RecordingNotice,\n    public timeLeftRecording: TimeLeftRecording,\n    public stoppedRecording: StoppedRecording,\n    public hostRequestResponse: HostRequestResponse,\n    public allMembers: AllMembers,\n    public allMembersRest: AllMembersRest,\n    public disconnect: Disconnect,\n    public pollUpdated: PollUpdated,\n    public breakoutRoomUpdated: BreakoutRoomUpdated,\n    public socketManager: SocketManager,\n    public joinRoomClient: JoinRoomClient,\n    public joinLocalRoom: JoinLocalRoom,\n    public updateRoomParametersClient: UpdateRoomParametersClient,\n    public clickVideo: ClickVideo,\n    public clickAudio: ClickAudio,\n    public clickScreenShare: ClickScreenShare,\n    public streamSuccessVideo: StreamSuccessVideo,\n    public streamSuccessAudio: StreamSuccessAudio,\n    public streamSuccessScreen: StreamSuccessScreen,\n    public streamSuccessAudioSwitch: StreamSuccessAudioSwitch,\n    public checkPermission: CheckPermission,\n    public updateConsumingDomains: UpdateConsumingDomains,\n    public receiveRoomMessages: ReceiveRoomMessages,\n    private uiOverrideResolver: UIOverrideResolverService,\n  ) { }\n\n  createInjector(inputs: any) {\n    if (!inputs || typeof inputs !== 'object') {\n      return this.injector;\n    }\n\n    const inj = Injector.create({\n      providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\n      parent: this.injector,\n    });\n\n    return inj;\n  }\n\n  /**\n   * Gets a list of media devices filtered by the specified kind.\n   * @param kind - The kind of media device to filter by ('videoinput' or 'audioinput')\n   * @returns A promise that resolves to an array of MediaDeviceInfo objects\n   */\n  getMediaDevicesList = async (kind: 'videoinput' | 'audioinput'): Promise<MediaDeviceInfo[]> => {\n    try {\n      const devices = await navigator.mediaDevices.enumerateDevices();\n      return devices.filter((device) => device.kind === kind);\n    } catch (error) {\n      console.error('Error enumerating devices:', error);\n      return [];\n    }\n  };\n\n  /**\n   * Gets the media stream for a participant by their ID or name.\n   * @param options - Object containing id, name, and kind parameters\n   * @returns A promise that resolves to the participant's MediaStream or null if not found\n   */\n  getParticipantMedia = async (options: {\n    id?: string;\n    name?: string;\n    kind: 'video' | 'audio';\n  }): Promise<MediaStream | null> => {\n    const { id, name, kind } = options;\n\n    try {\n      const streams =\n        kind === 'video' ? this.allVideoStreams.value : this.allAudioStreams.value;\n\n      // Search by producerId if provided\n      if (id) {\n        const streamObj = streams.find((obj: any) => obj.producerId === id);\n        if (streamObj && 'stream' in streamObj) {\n          return streamObj.stream || null;\n        }\n      }\n\n      // Search by name if provided\n      if (name) {\n        const streamObj = streams.find((obj: any) => obj.name === name);\n        if (streamObj && 'stream' in streamObj) {\n          return streamObj.stream || null;\n        }\n      }\n\n      return null;\n    } catch (error) {\n      console.error('Error getting participant media:', error);\n      return null;\n    }\n  };\n\n  // Initial values\n  mediaSFUFunctions = (): any => {\n    return {\n      updateMiniCardsGrid:\n        this.updateMiniCardsGrid?.updateMiniCardsGrid ||\n        (() => {\n          console.log('none');\n        }),\n      mixStreams:\n        this.mixStreams?.mixStreams ||\n        (() => {\n          console.log('none');\n        }),\n      dispStreams:\n        this.dispStreams?.dispStreams ||\n        (() => {\n          console.log('none');\n        }),\n      stopShareScreen:\n        this.stopShareScreen?.stopShareScreen ||\n        (() => {\n          console.log('none');\n        }),\n      checkScreenShare:\n        this.checkScreenShare?.checkScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      startShareScreen:\n        this.startShareScreen?.startShareScreen ||\n        (() => {\n          console.log('none');\n        }),\n      requestScreenShare:\n        this.requestScreenShare?.requestScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      reorderStreams:\n        this.reorderStreams?.reorderStreams ||\n        (() => {\n          console.log('none');\n        }),\n      prepopulateUserMedia:\n        this.prepopulateUserMedia?.prepopulateUserMedia ||\n        (() => {\n          console.log('none');\n        }),\n      getVideos:\n        this.getVideos?.getVideos ||\n        (() => {\n          console.log('none');\n        }),\n      rePort:\n        this.rePort?.rePort ||\n        (() => {\n          console.log('none');\n        }),\n      trigger:\n        this.trigger?.trigger ||\n        (() => {\n          console.log('none');\n        }),\n      consumerResume:\n        this.consumerResume?.consumerResume ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransport:\n        this.connectSendTransport?.connectSendTransport ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportAudio:\n        this.connectSendTransportAudio?.connectSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportVideo:\n        this.connectSendTransportVideo?.connectSendTransportVideo ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportScreen:\n        this.connectSendTransportScreen?.connectSendTransportScreen ||\n        (() => {\n          console.log('none');\n        }),\n      processConsumerTransports:\n        this.processConsumerTransports?.processConsumerTransports ||\n        (() => {\n          console.log('none');\n        }),\n      resumePauseStreams:\n        this.resumePauseStreams?.resumePauseStreams ||\n        (() => {\n          console.log('none');\n        }),\n      readjust:\n        this.readjust?.readjust ||\n        (() => {\n          console.log('none');\n        }),\n      checkGrid:\n        this.checkGrid?.checkGrid ||\n        (() => {\n          console.log('none');\n        }),\n      getEstimate:\n        this.getEstimate?.getEstimate ||\n        (() => {\n          console.log('none');\n        }),\n      calculateRowsAndColumns:\n        this.calculateRowsAndColumns?.calculateRowsAndColumns ||\n        (() => {\n          console.log('none');\n        }),\n      addVideosGrid:\n        this.addVideosGrid?.addVideosGrid ||\n        (() => {\n          console.log('none');\n        }),\n      onScreenChanges:\n        this.onScreenChanges?.onScreenChanges ||\n        (() => {\n          console.log('none');\n        }),\n      sleep:\n        sleep ||\n        (() => {\n          console.log('none');\n        }),\n      changeVids:\n        this.changeVids?.changeVids ||\n        (() => {\n          console.log('none');\n        }),\n      compareActiveNames:\n        this.compareActiveNames?.compareActiveNames ||\n        (() => {\n          console.log('none');\n        }),\n      compareScreenStates:\n        this.compareScreenStates?.compareScreenStates ||\n        (() => {\n          console.log('none');\n        }),\n      createSendTransport:\n        this.createSendTransport?.createSendTransport ||\n        (() => {\n          console.log('none');\n        }),\n      resumeSendTransportAudio:\n        this.resumeSendTransportAudio?.resumeSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      receiveAllPipedTransports:\n        this.receiveAllPipedTransports?.receiveAllPipedTransports ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportVideo:\n        this.disconnectSendTransportVideo?.disconnectSendTransportVideo ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportAudio:\n        this.disconnectSendTransportAudio?.disconnectSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportScreen:\n        this.disconnectSendTransportScreen?.disconnectSendTransportScreen ||\n        (() => {\n          console.log('none');\n        }),\n      getPipedProducersAlt:\n        this.getPipedProducersAlt?.getPipedProducersAlt ||\n        (() => {\n          console.log('none');\n        }),\n      signalNewConsumerTransport:\n        this.signalNewConsumerTransport?.signalNewConsumerTransport ||\n        (() => {\n          console.log('none');\n        }),\n      connectRecvTransport:\n        this.connectRecvTransport?.connectRecvTransport ||\n        (() => {\n          console.log('none');\n        }),\n      reUpdateInter:\n        this.reUpdateInter?.reUpdateInter ||\n        (() => {\n          console.log('none');\n        }),\n      updateParticipantAudioDecibels:\n        this.updateParticipantAudioDecibels?.updateParticipantAudioDecibels ||\n        (() => {\n          console.log('none');\n        }),\n      closeAndResize:\n        this.closeAndResize?.closeAndResize ||\n        (() => {\n          console.log('none');\n        }),\n      autoAdjust:\n        this.autoAdjust?.autoAdjust ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserVideoAlt:\n        this.switchUserVideoAlt?.switchUserVideoAlt ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserVideo:\n        this.switchUserVideo?.switchUserVideo ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserAudio:\n        this.switchUserAudio?.switchUserAudio ||\n        (() => {\n          console.log('none');\n        }),\n      getDomains:\n        this.getDomains?.getDomains ||\n        (() => {\n          console.log('none');\n        }),\n      formatNumber:\n        this.formatNumber?.formatNumber ||\n        (() => {\n          console.log('none');\n        }),\n      connectIps:\n        this.connectIps?.connectIps ||\n        (() => {\n          console.log('none');\n        }),\n      connectLocalIps:\n        this.connectLocalIps?.connectLocalIps ||\n        (() => {\n          console.log('none');\n        }),\n      createDeviceClient:\n        this.createDeviceClient?.createDeviceClient ||\n        (() => {\n          console.log('none');\n        }),\n      handleCreatePoll:\n        this.handleCreatePoll?.handleCreatePoll ||\n        (() => {\n          console.log('none');\n        }),\n      handleEndPoll:\n        this.handleEndPoll?.handleEndPoll ||\n        (() => {\n          console.log('none');\n        }),\n      handleVotePoll:\n        this.handleVotePoll?.handleVotePoll ||\n        (() => {\n          console.log('none');\n        }),\n      captureCanvasStream:\n        this.captureCanvasStream?.captureCanvasStream ||\n        (() => {\n          console.log('none');\n        }),\n      resumePauseAudioStreams:\n        this.resumePauseAudioStreams?.resumePauseAudioStreams ||\n        (() => {\n          console.log('none');\n        }),\n      processConsumerTransportsAudio:\n        this.processConsumerTransportsAudio?.processConsumerTransportsAudio ||\n        (() => {\n          console.log('none');\n        }),\n      checkPermission:\n        this.checkPermission?.checkPermission ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessVideo:\n        this.streamSuccessVideo?.streamSuccessVideo ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessAudio:\n        this.streamSuccessAudio?.streamSuccessAudio ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessScreen:\n        this.streamSuccessScreen?.streamSuccessScreen ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessAudioSwitch:\n        this.streamSuccessAudioSwitch?.streamSuccessAudioSwitch ||\n        (() => {\n          console.log('none');\n        }),\n      clickVideo:\n        this.clickVideo?.clickVideo ||\n        (() => {\n          console.log('none');\n        }),\n      clickAudio:\n        this.clickAudio?.clickAudio ||\n        (() => {\n          console.log('none');\n        }),\n      clickScreenShare:\n        this.clickScreenShare?.clickScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      requestPermissionCamera:\n        this.requestPermissionCamera ||\n        (() => {\n          console.log('none');\n        }),\n      requestPermissionAudio:\n        this.requestPermissionAudio ||\n        (() => {\n          console.log('none');\n        }),\n      getMediaDevicesList: this.getMediaDevicesList,\n      getParticipantMedia: this.getParticipantMedia,\n    };\n  };\n\n  validated = new BehaviorSubject<boolean>(false);\n  localUIMode = new BehaviorSubject<boolean>(false);\n  socket = new BehaviorSubject<Socket>({} as Socket);\n  localSocket? = new BehaviorSubject<Socket | undefined>(undefined);\n  roomData = new BehaviorSubject<ResponseJoinRoom | null>(null);\n  device = new BehaviorSubject<Device | null>(null);\n  apiKey = new BehaviorSubject<string>('');\n  apiUserName = new BehaviorSubject<string>('');\n  apiToken = new BehaviorSubject<string>('');\n  link = new BehaviorSubject<string>('');\n\n  roomName = new BehaviorSubject<string>('');\n  member = new BehaviorSubject<string>('');\n  adminPasscode = new BehaviorSubject<string>('');\n  islevel = new BehaviorSubject<string>('1');\n  coHost = new BehaviorSubject<string>('No coHost');\n  coHostResponsibility = new BehaviorSubject<CoHostResponsibility[]>([\n    { name: 'participants', value: false, dedicated: false },\n    { name: 'media', value: false, dedicated: false },\n    { name: 'waiting', value: false, dedicated: false },\n    { name: 'chat', value: false, dedicated: false },\n  ]);\n  youAreCoHost = new BehaviorSubject<boolean>(false);\n  youAreHost = new BehaviorSubject<boolean>(false);\n  confirmedToRecord = new BehaviorSubject<boolean>(false);\n  meetingDisplayType = new BehaviorSubject<string>('media');\n  meetingVideoOptimized = new BehaviorSubject<boolean>(false);\n  eventType = new BehaviorSubject<EventType>('conference');\n  participants = new BehaviorSubject<Participant[]>([]);\n  filteredParticipants = new BehaviorSubject<Participant[]>([]);\n  participantsCounter = new BehaviorSubject<number>(0);\n  participantsFilter = new BehaviorSubject<string>('');\n\n  consume_sockets = new BehaviorSubject<ConsumeSocket[]>([]);\n  rtpCapabilities = new BehaviorSubject<RtpCapabilities | null>(null);\n  roomRecvIPs = new BehaviorSubject<string[]>([]);\n  meetingRoomParams = new BehaviorSubject<MeetingRoomParams | null>(null);\n  itemPageLimit = new BehaviorSubject<number>(4);\n  audioOnlyRoom = new BehaviorSubject<boolean>(false);\n  addForBasic = new BehaviorSubject<boolean>(false);\n  screenPageLimit = new BehaviorSubject<number>(4);\n  shareScreenStarted = new BehaviorSubject<boolean>(false);\n  shared = new BehaviorSubject<boolean>(false);\n  targetOrientation = new BehaviorSubject<string>('landscape');\n  targetResolution = new BehaviorSubject<string>('sd');\n  targetResolutionHost = new BehaviorSubject<string>('sd');\n  vidCons = new BehaviorSubject<VidCons>({ width: 640, height: 360 });\n  frameRate = new BehaviorSubject<number>(10);\n  hParams = new BehaviorSubject<HParamsType>({} as HParamsType);\n  vParams = new BehaviorSubject<VParamsType>({} as VParamsType);\n  screenParams = new BehaviorSubject<ScreenParamsType>({} as ScreenParamsType);\n  aParams = new BehaviorSubject<AParamsType>({} as AParamsType);\n\n  recordingAudioPausesLimit = new BehaviorSubject<number>(0);\n  recordingAudioPausesCount = new BehaviorSubject<number>(0);\n  recordingAudioSupport = new BehaviorSubject<boolean>(false);\n  recordingAudioPeopleLimit = new BehaviorSubject<number>(0);\n  recordingAudioParticipantsTimeLimit = new BehaviorSubject<number>(0);\n  recordingVideoPausesCount = new BehaviorSubject<number>(0);\n  recordingVideoPausesLimit = new BehaviorSubject<number>(0);\n  recordingVideoSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoPeopleLimit = new BehaviorSubject<number>(0);\n  recordingVideoParticipantsTimeLimit = new BehaviorSubject<number>(0);\n  recordingAllParticipantsSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoParticipantsSupport = new BehaviorSubject<boolean>(false);\n  recordingAllParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\n  recordingPreferredOrientation = new BehaviorSubject<string>('landscape');\n  recordingSupportForOtherOrientation = new BehaviorSubject<boolean>(false);\n  recordingMultiFormatsSupport = new BehaviorSubject<boolean>(false);\n\n  userRecordingParams = new BehaviorSubject<UserRecordingParams>({\n    mainSpecs: {\n      mediaOptions: 'video', // 'audio', 'video'\n      audioOptions: 'all', // 'all', 'onScreen', 'host'\n      videoOptions: 'all', // 'all', 'mainScreen'\n      videoType: 'fullDisplay', // 'all', 'bestDisplay', 'fullDisplay'\n      videoOptimized: false, // true, false\n      recordingDisplayType: 'media', // 'media', 'video', 'all'\n      addHLS: false, // true, false\n    },\n    dispSpecs: {\n      nameTags: true, // true, false\n      backgroundColor: '#000000', // '#000000', '#ffffff'\n      nameTagsColor: '#ffffff', // '#000000', '#ffffff'\n      orientationVideo: 'portrait', // 'landscape', 'portrait', 'all'\n    },\n  });\n\n  canRecord = new BehaviorSubject<boolean>(false);\n  startReport = new BehaviorSubject<boolean>(false);\n  endReport = new BehaviorSubject<boolean>(false);\n  recordTimerInterval = new BehaviorSubject<number | null>(null);\n  recordStartTime = new BehaviorSubject<number>(0);\n  recordElapsedTime = new BehaviorSubject<number>(0);\n  isTimerRunning = new BehaviorSubject<boolean>(false);\n  canPauseResume = new BehaviorSubject<boolean>(false);\n  recordChangeSeconds = new BehaviorSubject<number>(15000);\n  pauseLimit = new BehaviorSubject<number>(0);\n  pauseRecordCount = new BehaviorSubject<number>(0);\n  canLaunchRecord = new BehaviorSubject<boolean>(true);\n  stopLaunchRecord = new BehaviorSubject<boolean>(false);\n\n  participantsAll = new BehaviorSubject<Participant[]>([]);\n\n  firstAll = new BehaviorSubject<boolean>(false);\n  updateMainWindow = new BehaviorSubject<boolean>(false);\n  first_round = new BehaviorSubject<boolean>(false);\n  landScaped = new BehaviorSubject<boolean>(false);\n  lock_screen = new BehaviorSubject<boolean>(false);\n  screenId = new BehaviorSubject<string>('');\n  allVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  newLimitedStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  newLimitedStreamsIDs = new BehaviorSubject<string[]>([]);\n  activeSounds = new BehaviorSubject<string[]>([]);\n  screenShareIDStream = new BehaviorSubject<string>('');\n  screenShareNameStream = new BehaviorSubject<string>('');\n  adminIDStream = new BehaviorSubject<string>('');\n  adminNameStream = new BehaviorSubject<string>('');\n  youYouStream = new BehaviorSubject<(Participant | Stream)[]>([]);\n  youYouStreamIDs = new BehaviorSubject<string[]>([]);\n  localStream = new BehaviorSubject<MediaStream | null>(null);\n  recordStarted = new BehaviorSubject<boolean>(false);\n  recordResumed = new BehaviorSubject<boolean>(false);\n  recordPaused = new BehaviorSubject<boolean>(false);\n  recordStopped = new BehaviorSubject<boolean>(false);\n  adminRestrictSetting = new BehaviorSubject<boolean>(false);\n  videoRequestState = new BehaviorSubject<string | null>(null);\n  videoRequestTime = new BehaviorSubject<number>(0);\n  videoAction = new BehaviorSubject<boolean>(false);\n  localStreamVideo = new BehaviorSubject<MediaStream | null>(null);\n  userDefaultVideoInputDevice = new BehaviorSubject<string>('');\n  currentFacingMode = new BehaviorSubject<string>('user');\n  prevFacingMode = new BehaviorSubject<string>('user');\n  defVideoID = new BehaviorSubject<string>('');\n  allowed = new BehaviorSubject<boolean>(false);\n  dispActiveNames = new BehaviorSubject<string[]>([]);\n  p_dispActiveNames = new BehaviorSubject<string[]>([]);\n  activeNames = new BehaviorSubject<string[]>([]);\n  prevActiveNames = new BehaviorSubject<string[]>([]);\n  p_activeNames = new BehaviorSubject<string[]>([]);\n  membersReceived = new BehaviorSubject<boolean>(false);\n  deferScreenReceived = new BehaviorSubject<boolean>(false);\n  hostFirstSwitch = new BehaviorSubject<boolean>(false);\n  micAction = new BehaviorSubject<boolean>(false);\n  screenAction = new BehaviorSubject<boolean>(false);\n  chatAction = new BehaviorSubject<boolean>(false);\n  audioRequestState = new BehaviorSubject<string | null>(null);\n  screenRequestState = new BehaviorSubject<string | null>(null);\n  chatRequestState = new BehaviorSubject<string | null>(null);\n  audioRequestTime = new BehaviorSubject<number>(0);\n  screenRequestTime = new BehaviorSubject<number>(0);\n  chatRequestTime = new BehaviorSubject<number>(0);\n  updateRequestIntervalSeconds = new BehaviorSubject<number>(240);\n  oldSoundIds = new BehaviorSubject<string[]>([]);\n  hostLabel = new BehaviorSubject<string>('Host');\n  mainScreenFilled = new BehaviorSubject<boolean>(false);\n  localStreamScreen = new BehaviorSubject<MediaStream | null>(null);\n  screenAlreadyOn = new BehaviorSubject<boolean>(false);\n  chatAlreadyOn = new BehaviorSubject<boolean>(false);\n  redirectURL = new BehaviorSubject<string>('');\n  oldAllStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  adminVidID = new BehaviorSubject<string>('');\n  streamNames = new BehaviorSubject<Stream[]>([]);\n  non_alVideoStreams = new BehaviorSubject<Participant[]>([]);\n  sortAudioLoudness = new BehaviorSubject<boolean>(false);\n  audioDecibels = new BehaviorSubject<AudioDecibels[]>([]);\n  mixed_alVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  non_alVideoStreams_muted = new BehaviorSubject<Participant[]>([]);\n  paginatedStreams = new BehaviorSubject<(Participant | Stream)[][]>([]);\n  localStreamAudio = new BehaviorSubject<MediaStream | null>(null);\n  defAudioID = new BehaviorSubject<string>('');\n  userDefaultAudioInputDevice = new BehaviorSubject<string>('');\n  userDefaultAudioOutputDevice = new BehaviorSubject<string>('');\n  prevAudioInputDevice = new BehaviorSubject<string>('');\n  prevVideoInputDevice = new BehaviorSubject<string>('');\n  audioPaused = new BehaviorSubject<boolean>(false);\n  mainScreenPerson = new BehaviorSubject<string>('');\n  adminOnMainScreen = new BehaviorSubject<boolean>(false);\n  screenStates = new BehaviorSubject<ScreenState[]>([\n    {\n      mainScreenPerson: '',\n      mainScreenProducerId: '',\n      mainScreenFilled: false,\n      adminOnMainScreen: false,\n    },\n  ]);\n  prevScreenStates = new BehaviorSubject<ScreenState[]>([\n    {\n      mainScreenPerson: '',\n      mainScreenProducerId: '',\n      mainScreenFilled: false,\n      adminOnMainScreen: false,\n    },\n  ]);\n  updateDateState = new BehaviorSubject<number | null>(null);\n  lastUpdate = new BehaviorSubject<number | null>(null);\n  nForReadjustRecord = new BehaviorSubject<number>(0);\n  fixedPageLimit = new BehaviorSubject<number>(4);\n  removeAltGrid = new BehaviorSubject<boolean>(false);\n  nForReadjust = new BehaviorSubject<number>(0);\n  reorderInterval = new BehaviorSubject<number>(30000);\n  fastReorderInterval = new BehaviorSubject<number>(10000);\n  lastReorderTime = new BehaviorSubject<number>(0);\n  audStreamNames = new BehaviorSubject<Stream[]>([]);\n  currentUserPage = new BehaviorSubject<number>(0);\n  mainHeightWidth = new BehaviorSubject<number>(\n    this.eventType.value == 'webinar' ? 67 : this.eventType.value == 'broadcast' ? 100 : 0,\n  );\n  prevMainHeightWidth = new BehaviorSubject<number>(this.mainHeightWidth.value);\n  prevDoPaginate = new BehaviorSubject<boolean>(false);\n  doPaginate = new BehaviorSubject<boolean>(false);\n  shareEnded = new BehaviorSubject<boolean>(false);\n  lStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  chatRefStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  controlHeight = new BehaviorSubject<number>(\n    this.eventType.value === 'webinar' || this.eventType.value === 'conference' ? 0 : 0.06,\n  );\n  isWideScreen = new BehaviorSubject<boolean>(false);\n  isMediumScreen = new BehaviorSubject<boolean>(false);\n  isSmallScreen = new BehaviorSubject<boolean>(false);\n  addGrid = new BehaviorSubject<boolean>(false);\n  addAltGrid = new BehaviorSubject<boolean>(false);\n  gridRows = new BehaviorSubject<number>(0);\n  gridCols = new BehaviorSubject<number>(0);\n  altGridRows = new BehaviorSubject<number>(0);\n  altGridCols = new BehaviorSubject<number>(0);\n  numberPages = new BehaviorSubject<number>(0);\n  currentStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  showMiniView = new BehaviorSubject<boolean>(false);\n  nStream = new BehaviorSubject<MediaStream | null>(null);\n  defer_receive = new BehaviorSubject<boolean>(false);\n  allAudioStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  remoteScreenStream = new BehaviorSubject<Stream[]>([]);\n  screenProducer = new BehaviorSubject<Producer | null>(null);\n  localScreenProducer = new BehaviorSubject<Producer | null>(null);\n  gotAllVids = new BehaviorSubject<boolean>(false);\n  paginationHeightWidth = new BehaviorSubject<number>(40);\n  paginationDirection = new BehaviorSubject<'horizontal' | 'vertical'>('horizontal');\n  gridSizes = new BehaviorSubject<GridSizes>({\n    gridWidth: 0,\n    gridHeight: 0,\n    altGridWidth: 0,\n    altGridHeight: 0,\n  });\n  screenForceFullDisplay = new BehaviorSubject<boolean>(false);\n  mainGridStream = new BehaviorSubject<CustomMediaComponent[]>([]);\n  otherGridStreams = new BehaviorSubject<CustomMediaComponent[][]>([]);\n  audioOnlyStreams = new BehaviorSubject<CustomMediaComponent[]>([]);\n  videoInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\n  audioInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\n  meetingProgressTime = new BehaviorSubject<string>('00:00:00');\n  meetingElapsedTime = new BehaviorSubject<number>(0);\n  ref_participants = new BehaviorSubject<Participant[]>([]);\n\n  updateValidated = (value: boolean) => {\n    this.validated.next(value);\n  };\n\n  updateSocket = (value: Socket) => {\n    this.socket.next(value);\n  };\n\n  updateLocalSocket = (value: Socket | null) => {\n    this.localSocket!.next(value!);\n  };\n\n  updateDevice = (value: Device | null) => {\n    this.device.next(value);\n  };\n\n  updateRoomData = (value: ResponseJoinRoom | null) => {\n    this.roomData.next(value);\n  };\n\n  updateApiKey = (value: string) => {\n    this.apiKey.next(value);\n  };\n\n  updateApiUserName = (value: string) => {\n    this.apiUserName.next(value);\n  };\n\n  updateApiToken = (value: string) => {\n    this.apiToken.next(value);\n  };\n\n  updateLink = (value: string) => {\n    this.link.next(value);\n  };\n\n  updateRoomName = (value: string) => {\n    this.roomName.next(value);\n  };\n\n  updateMember = (value: string) => {\n    if (value.length > 0 && value.includes(\"_\")) {\n      this.updateIslevel(value.split(\"_\")[1]);\n      value = value.split(\"_\")[0];\n    }\n    this.member.next(value);\n  };\n\n  updateAdminPasscode = (value: string) => {\n    this.adminPasscode.next(value);\n  };\n\n  updateIslevel = (value: string) => {\n    this.islevel.next(value);\n  };\n\n  updateCoHost = (value: string) => {\n    this.coHost.next(value);\n  };\n\n  updateCoHostResponsibility = (value: CoHostResponsibility[]) => {\n    this.coHostResponsibility.next(value);\n  };\n\n  updateYouAreCoHost = (value: boolean) => {\n    this.youAreCoHost.next(value);\n  };\n\n  updateYouAreHost = (value: boolean) => {\n    this.youAreHost.next(value);\n  };\n\n  updateConfirmedToRecord = (value: boolean) => {\n    this.confirmedToRecord.next(value);\n  };\n\n  updateMeetingDisplayType = (value: string) => {\n    this.meetingDisplayType.next(value);\n  };\n\n  updateMeetingVideoOptimized = (value: boolean) => {\n    this.meetingVideoOptimized.next(value);\n  };\n\n  updateEventType = (value: EventType) => {\n    this.eventType.next(value);\n    if (value != 'none') {\n      try {\n        setTimeout(() => {\n          this.handleResize();\n        }, 2000);\n      } catch {\n        /* handle error */\n      }\n    }\n  };\n\n  updateParticipants = (value: Participant[]) => {\n    this.participants.next(value);\n    this.participantsCounter.next(value.length);\n    this.filteredParticipants.next(this.participants.value);\n  };\n\n  updateFilteredParticipants = (value: Participant[]) => {\n    this.filteredParticipants.next(value);\n  };\n\n  updateParticipantsCounter = (value: number) => {\n    this.participantsCounter.next(value);\n  };\n\n  updateParticipantsFilter = (value: string) => {\n    this.participantsFilter.next(value);\n  };\n\n  updateConsume_sockets = (value: ConsumeSocket[]) => {\n    this.consume_sockets.next(value);\n  };\n\n  updateRtpCapabilities = (value: RtpCapabilities | null) => {\n    this.rtpCapabilities.next(value);\n  };\n\n  updateRoomRecvIPs = (value: string[]) => {\n    this.roomRecvIPs.next(value);\n  };\n\n  updateMeetingRoomParams = (value: MeetingRoomParams | null) => {\n    this.meetingRoomParams.next(value);\n  };\n\n  updateItemPageLimit = (value: number) => {\n    this.itemPageLimit.next(value);\n  };\n\n  updateAudioOnlyRoom = (value: boolean) => {\n    this.audioOnlyRoom.next(value);\n  };\n\n  updateAddForBasic = (value: boolean) => {\n    this.addForBasic.next(value);\n  };\n\n  updateScreenPageLimit = (value: number) => {\n    this.screenPageLimit.next(value);\n  };\n\n  updateShareScreenStarted = (value: boolean) => {\n    this.shareScreenStarted.next(value);\n  };\n\n  updateShared = (value: boolean) => {\n    this.shared.next(value);\n    this.screenShareActive.next(value);\n    if (value) {\n      setTimeout(async () => {\n        window.dispatchEvent(new Event('resize'));\n      }, 2000);\n    }\n  };\n\n  updateTargetOrientation = (value: string) => {\n    this.targetOrientation.next(value);\n  };\n\n  updateTargetResolution = (value: string) => {\n    this.targetResolution.next(value);\n  };\n\n  updateTargetResolutionHost = (value: string) => {\n    this.targetResolutionHost.next(value);\n  };\n\n  updateVidCons = (value: VidCons) => {\n    this.vidCons.next(value);\n  };\n\n  updateFrameRate = (value: number) => {\n    this.frameRate.next(value);\n  };\n\n  updateHParams = (value: HParamsType) => {\n    this.hParams.next(value);\n  };\n\n  updateVParams = (value: VParamsType) => {\n    this.vParams.next(value);\n  };\n\n  updateScreenParams = (value: ScreenParamsType) => {\n    this.screenParams.next(value);\n  };\n\n  updateAParams = (value: AParamsType) => {\n    this.aParams.next(value);\n  };\n\n  updateRecordingAudioPausesLimit = (value: number) => {\n    this.recordingAudioPausesLimit.next(value);\n  };\n\n  updateRecordingAudioPausesCount = (value: number) => {\n    this.recordingAudioPausesCount.next(value);\n  };\n\n  updateRecordingAudioSupport = (value: boolean) => {\n    this.recordingAudioSupport.next(value);\n  };\n\n  updateRecordingAudioPeopleLimit = (value: number) => {\n    this.recordingAudioPeopleLimit.next(value);\n  };\n\n  updateRecordingAudioParticipantsTimeLimit = (value: number) => {\n    this.recordingAudioParticipantsTimeLimit.next(value);\n  };\n\n  updateRecordingVideoPausesCount = (value: number) => {\n    this.recordingVideoPausesCount.next(value);\n  };\n\n  updateRecordingVideoPausesLimit = (value: number) => {\n    this.recordingVideoPausesLimit.next(value);\n  };\n\n  updateRecordingVideoSupport = (value: boolean) => {\n    this.recordingVideoSupport.next(value);\n  };\n\n  updateRecordingVideoPeopleLimit = (value: number) => {\n    this.recordingVideoPeopleLimit.next(value);\n  };\n\n  updateRecordingVideoParticipantsTimeLimit = (value: number) => {\n    this.recordingVideoParticipantsTimeLimit.next(value);\n  };\n\n  updateRecordingAllParticipantsSupport = (value: boolean) => {\n    this.recordingAllParticipantsSupport.next(value);\n  };\n\n  updateRecordingVideoParticipantsSupport = (value: boolean) => {\n    this.recordingVideoParticipantsSupport.next(value);\n  };\n\n  updateRecordingAllParticipantsFullRoomSupport = (value: boolean) => {\n    this.recordingAllParticipantsFullRoomSupport.next(value);\n  };\n\n  updateRecordingVideoParticipantsFullRoomSupport = (value: boolean) => {\n    this.recordingVideoParticipantsFullRoomSupport.next(value);\n  };\n\n  updateRecordingPreferredOrientation = (value: string) => {\n    this.recordingPreferredOrientation.next(value);\n  };\n\n  updateRecordingSupportForOtherOrientation = (value: boolean) => {\n    this.recordingSupportForOtherOrientation.next(value);\n  };\n\n  updateRecordingMultiFormatsSupport = (value: boolean) => {\n    this.recordingMultiFormatsSupport.next(value);\n  };\n\n  updateUserRecordingParams = (value: UserRecordingParams) => {\n    this.userRecordingParams.next(value);\n  };\n\n  updateCanRecord = (value: boolean) => {\n    this.canRecord.next(value);\n  };\n\n  updateStartReport = (value: boolean) => {\n    this.startReport.next(value);\n  };\n\n  updateEndReport = (value: boolean) => {\n    this.endReport.next(value);\n  };\n\n  updateRecordTimerInterval = (value: number | null) => {\n    this.recordTimerInterval.next(value);\n  };\n\n  updateRecordStartTime = (value: number) => {\n    this.recordStartTime.next(value);\n  };\n\n  updateRecordElapsedTime = (value: number) => {\n    this.recordElapsedTime.next(value);\n  };\n\n  updateIsTimerRunning = (value: boolean) => {\n    this.isTimerRunning.next(value);\n  };\n\n  updateCanPauseResume = (value: boolean) => {\n    this.canPauseResume.next(value);\n  };\n\n  updateRecordChangeSeconds = (value: number) => {\n    this.recordChangeSeconds.next(value);\n  };\n\n  updatePauseLimit = (value: number) => {\n    this.pauseLimit.next(value);\n  };\n\n  updatePauseRecordCount = (value: number) => {\n    this.pauseRecordCount.next(value);\n  };\n\n  updateCanLaunchRecord = (value: boolean) => {\n    this.canLaunchRecord.next(value);\n  };\n\n  updateStopLaunchRecord = (value: boolean) => {\n    this.stopLaunchRecord.next(value);\n  };\n\n  updateParticipantsAll = (value: Participant[]) => {\n    this.participantsAll.next(value);\n  };\n\n  updateFirstAll = (value: boolean) => {\n    this.firstAll.next(value);\n  };\n\n  updateUpdateMainWindow = (value: boolean) => {\n    this.updateMainWindow.next(value);\n  };\n\n  updateFirst_round = (value: boolean) => {\n    this.first_round.next(value);\n  };\n\n  updateLandScaped = (value: boolean) => {\n    this.landScaped.next(value);\n  };\n\n  updateLock_screen = (value: boolean) => {\n    this.lock_screen.next(value);\n  };\n\n  updateScreenId = (value: string) => {\n    this.screenId.next(value);\n  };\n\n  updateAllVideoStreams = (value: (Participant | Stream)[]) => {\n    this.allVideoStreams.next(value);\n  };\n\n  updateNewLimitedStreams = (value: (Participant | Stream)[]) => {\n    this.newLimitedStreams.next(value);\n  };\n\n  updateNewLimitedStreamsIDs = (value: string[]) => {\n    this.newLimitedStreamsIDs.next(value);\n  };\n\n  updateActiveSounds = (value: string[]) => {\n    this.activeSounds.next(value);\n  };\n\n  updateScreenShareIDStream = (value: string) => {\n    this.screenShareIDStream.next(value);\n  };\n\n  updateScreenShareNameStream = (value: string) => {\n    this.screenShareNameStream.next(value);\n  };\n\n  updateAdminIDStream = (value: string) => {\n    this.adminIDStream.next(value);\n  };\n\n  updateAdminNameStream = (value: string) => {\n    this.adminNameStream.next(value);\n  };\n\n  updateYouYouStream = (value: (Participant | Stream)[]) => {\n    this.youYouStream.next(value);\n  };\n\n  updateYouYouStreamIDs = (value: string[]) => {\n    this.youYouStreamIDs.next(value);\n  };\n\n  updateLocalStream = (value: MediaStream | null) => {\n    this.localStream.next(value);\n  };\n\n  updateRecordStarted = (value: boolean) => {\n    this.recordStarted.next(value);\n  };\n\n  updateRecordResumed = (value: boolean) => {\n    this.recordResumed.next(value);\n  };\n\n  updateRecordPaused = (value: boolean) => {\n    this.recordPaused.next(value);\n  };\n\n  updateRecordStopped = (value: boolean) => {\n    this.recordStopped.next(value);\n  };\n\n  updateAdminRestrictSetting = (value: boolean) => {\n    this.adminRestrictSetting.next(value);\n  };\n\n  updateVideoRequestState = (value: string | null) => {\n    this.videoRequestState.next(value);\n  };\n\n  updateVideoRequestTime = (value: number) => {\n    this.videoRequestTime.next(value);\n  };\n\n  updateVideoAction = (value: boolean) => {\n    this.videoAction.next(value);\n  };\n\n  updateLocalStreamVideo = (value: MediaStream | null) => {\n    this.localStreamVideo.next(value);\n  };\n\n  updateUserDefaultVideoInputDevice = (value: string) => {\n    this.userDefaultVideoInputDevice.next(value);\n  };\n\n  updateCurrentFacingMode = (value: string) => {\n    this.currentFacingMode.next(value);\n  };\n\n  updatePrevFacingMode = (value: string) => {\n    this.prevFacingMode.next(value);\n  };\n\n  updateDefVideoID = (value: string) => {\n    this.defVideoID.next(value);\n  };\n\n  updateAllowed = (value: boolean) => {\n    this.allowed.next(value);\n  };\n\n  updateDispActiveNames = (value: string[]) => {\n    this.dispActiveNames.next(value);\n  };\n\n  updateP_dispActiveNames = (value: string[]) => {\n    this.p_dispActiveNames.next(value);\n  };\n\n  updateActiveNames = (value: string[]) => {\n    this.activeNames.next(value);\n  };\n\n  updatePrevActiveNames = (value: string[]) => {\n    this.prevActiveNames.next(value);\n  };\n\n  updateP_activeNames = (value: string[]) => {\n    this.p_activeNames.next(value);\n  };\n\n  updateMembersReceived = (value: boolean) => {\n    this.membersReceived.next(value);\n  };\n\n  updateDeferScreenReceived = (value: boolean) => {\n    this.deferScreenReceived.next(value);\n  };\n\n  updateHostFirstSwitch = (value: boolean) => {\n    this.hostFirstSwitch.next(value);\n  };\n\n  updateMicAction = (value: boolean) => {\n    this.micAction.next(value);\n  };\n\n  updateScreenAction = (value: boolean) => {\n    this.screenAction.next(value);\n  };\n\n  updateChatAction = (value: boolean) => {\n    this.chatAction.next(value);\n  };\n\n  updateAudioRequestState = (value: string | null) => {\n    this.audioRequestState.next(value);\n  };\n\n  updateScreenRequestState = (value: string | null) => {\n    this.screenRequestState.next(value);\n  };\n\n  updateChatRequestState = (value: string | null) => {\n    this.chatRequestState.next(value);\n  };\n\n  updateAudioRequestTime = (value: number) => {\n    this.audioRequestTime.next(value);\n  };\n\n  updateScreenRequestTime = (value: number) => {\n    this.screenRequestTime.next(value);\n  };\n\n  updateChatRequestTime = (value: number) => {\n    this.chatRequestTime.next(value);\n  };\n\n  updateOldSoundIds = (value: string[]) => {\n    this.oldSoundIds.next(value);\n  };\n\n  updateHostLabel = (value: string) => {\n    this.hostLabel.next(value);\n  };\n\n  updateMainScreenFilled = (value: boolean) => {\n    this.mainScreenFilled.next(value);\n  };\n\n  updateLocalStreamScreen = (value: MediaStream | null) => {\n    this.localStreamScreen.next(value);\n  };\n\n  updateScreenAlreadyOn = (value: boolean) => {\n    this.screenAlreadyOn.next(value);\n  };\n\n  updateChatAlreadyOn = (value: boolean) => {\n    this.chatAlreadyOn.next(value);\n  };\n\n  updateRedirectURL = (value: string) => {\n    this.redirectURL.next(value);\n  };\n\n  updateOldAllStreams = (value: (Participant | Stream)[]) => {\n    this.oldAllStreams.next(value);\n  };\n\n  updateAdminVidID = (value: string) => {\n    this.adminVidID.next(value);\n  };\n\n  updateStreamNames = (value: Stream[]) => {\n    this.streamNames.next(value);\n  };\n\n  updateNon_alVideoStreams = (value: Participant[]) => {\n    this.non_alVideoStreams.next(value);\n  };\n\n  updateSortAudioLoudness = (value: boolean) => {\n    this.sortAudioLoudness.next(value);\n  };\n\n  updateAudioDecibels = (value: AudioDecibels[]) => {\n    this.audioDecibels.next(value);\n  };\n\n  updateMixed_alVideoStreams = (value: (Participant | Stream)[]) => {\n    this.mixed_alVideoStreams.next(value);\n  };\n\n  updateNon_alVideoStreams_muted = (value: Participant[]) => {\n    this.non_alVideoStreams_muted.next(value);\n  };\n\n  updatePaginatedStreams = (value: (Participant | Stream)[][]) => {\n    this.paginatedStreams.next(value);\n  };\n\n  updateLocalStreamAudio = (value: MediaStream | null) => {\n    this.localStreamAudio.next(value);\n  };\n\n  updateDefAudioID = (value: string) => {\n    this.defAudioID.next(value);\n  };\n\n  updateUserDefaultAudioInputDevice = (value: string) => {\n    this.userDefaultAudioInputDevice.next(value);\n  };\n\n  updateUserDefaultAudioOutputDevice = (value: string) => {\n    this.userDefaultAudioOutputDevice.next(value);\n  };\n\n  updatePrevAudioInputDevice = (value: string) => {\n    this.prevAudioInputDevice.next(value);\n  };\n\n  updatePrevVideoInputDevice = (value: string) => {\n    this.prevVideoInputDevice.next(value);\n  };\n\n  updateAudioPaused = (value: boolean) => {\n    this.audioPaused.next(value);\n  };\n\n  updateMainScreenPerson = (value: string) => {\n    this.mainScreenPerson.next(value);\n  };\n\n  updateAdminOnMainScreen = (value: boolean) => {\n    this.adminOnMainScreen.next(value);\n  };\n\n  updateScreenStates = (value: ScreenState[]) => {\n    this.screenStates.next(value);\n  };\n\n  updatePrevScreenStates = (value: ScreenState[]) => {\n    this.prevScreenStates.next(value);\n  };\n\n  updateUpdateDateState = (value: number | null) => {\n    this.updateDateState.next(value);\n  };\n\n  updateLastUpdate = (value: number | null) => {\n    this.lastUpdate.next(value);\n  };\n\n  updateNForReadjustRecord = (value: number) => {\n    this.nForReadjustRecord.next(value);\n  };\n\n  updateFixedPageLimit = (value: number) => {\n    this.fixedPageLimit.next(value);\n  };\n\n  updateRemoveAltGrid = (value: boolean) => {\n    this.removeAltGrid.next(value);\n  };\n\n  updateNForReadjust = (value: number) => {\n    this.nForReadjust.next(value);\n  };\n\n  updateLastReorderTime = (value: number) => {\n    this.lastReorderTime.next(value);\n  };\n\n  updateAudStreamNames = (value: Stream[]) => {\n    this.audStreamNames.next(value);\n  };\n\n  updateCurrentUserPage = (value: number) => {\n    this.currentUserPage.next(value);\n  };\n\n  updateMainHeightWidth = (value: number) => {\n    this.mainHeightWidth.next(value);\n  };\n\n  updatePrevMainHeightWidth = (value: number) => {\n    this.prevMainHeightWidth.next(value);\n  };\n\n  updatePrevDoPaginate = (value: boolean) => {\n    this.prevDoPaginate.next(value);\n  };\n\n  updateDoPaginate = (value: boolean) => {\n    this.doPaginate.next(value);\n  };\n\n  updateShareEnded = (value: boolean) => {\n    this.shareEnded.next(value);\n  };\n\n  updateLStreams = (value: (Participant | Stream)[]) => {\n    this.lStreams.next(value);\n  };\n\n  updateChatRefStreams = (value: (Participant | Stream)[]) => {\n    this.chatRefStreams.next(value);\n  };\n\n  updateControlHeight = (value: number) => {\n    this.controlHeight.next(value);\n  };\n\n  updateIsWideScreen = (value: boolean) => {\n    this.isWideScreen.next(value);\n  };\n\n  updateIsMediumScreen = (value: boolean) => {\n    this.isMediumScreen.next(value);\n  };\n\n  updateIsSmallScreen = (value: boolean) => {\n    this.isSmallScreen.next(value);\n  };\n\n  updateAddGrid = (value: boolean) => {\n    this.addGrid.next(value);\n  };\n\n  updateAddAltGrid = (value: boolean) => {\n    this.addAltGrid.next(value);\n  };\n\n  updateGridRows = (value: number) => {\n    this.gridRows.next(value);\n  };\n\n  updateGridCols = (value: number) => {\n    this.gridCols.next(value);\n  };\n\n  updateAltGridRows = (value: number) => {\n    this.altGridRows.next(value);\n  };\n\n  updateAltGridCols = (value: number) => {\n    this.altGridCols.next(value);\n  };\n\n  updateNumberPages = (value: number) => {\n    this.numberPages.next(value);\n  };\n\n  updateCurrentStreams = (value: (Participant | Stream)[]) => {\n    this.currentStreams.next(value);\n  };\n\n  updateShowMiniView = (value: boolean) => {\n    this.showMiniView.next(value);\n  };\n\n  updateNStream = (value: MediaStream | null) => {\n    this.nStream.next(value);\n  };\n\n  updateDefer_receive = (value: boolean) => {\n    this.defer_receive.next(value);\n  };\n\n  updateAllAudioStreams = (value: (Participant | Stream)[]) => {\n    this.allAudioStreams.next(value);\n  };\n\n  updateRemoteScreenStream = (value: Stream[]) => {\n    this.remoteScreenStream.next(value);\n  };\n\n  updateScreenProducer = (value: Producer | null) => {\n    this.screenProducer.next(value);\n  };\n\n  updateLocalScreenProducer = (value: Producer | null) => {\n    this.localScreenProducer.next(value);\n  };\n\n  updateGotAllVids = (value: boolean) => {\n    this.gotAllVids.next(value);\n  };\n\n  updatePaginationHeightWidth = (value: number) => {\n    this.paginationHeightWidth.next(value);\n  };\n\n  updatePaginationDirection = (value: 'horizontal' | 'vertical') => {\n    this.paginationDirection.next(value);\n  };\n\n  updateGridSizes = (value: GridSizes) => {\n    this.gridSizes.next(value);\n  };\n\n  updateScreenForceFullDisplay = (value: boolean) => {\n    this.screenForceFullDisplay.next(value);\n  };\n\n  updateMainGridStream = (value: CustomMediaComponent[]) => {\n    this.mainGridStream.next(value);\n  };\n\n  updateOtherGridStreams = (value: CustomMediaComponent[][]) => {\n    this.otherGridStreams.next(value);\n  };\n\n  updateAudioOnlyStreams = (value: CustomMediaComponent[]) => {\n    this.audioOnlyStreams.next(value);\n  };\n\n  updateVideoInputs = (value: MediaDeviceInfo[]) => {\n    this.videoInputs.next(value);\n  };\n\n  updateAudioInputs = (value: MediaDeviceInfo[]) => {\n    this.audioInputs.next(value);\n  };\n\n  updateMeetingProgressTime = (value: string) => {\n    this.meetingProgressTime.next(value);\n  };\n\n  updateMeetingElapsedTime = (value: number) => {\n    this.meetingElapsedTime.next(value);\n  };\n\n  updateRef_participants = (value: Participant[]) => {\n    this.ref_participants.next(value);\n  };\n\n  // Messages\n  messages = new BehaviorSubject<Message[]>([]);\n  startDirectMessage = new BehaviorSubject<boolean>(false);\n  directMessageDetails = new BehaviorSubject<Participant | null>(null);\n  showMessagesBadge = new BehaviorSubject<boolean>(false);\n\n  // Event Settings\n  audioSetting = new BehaviorSubject<string>('allow');\n  videoSetting = new BehaviorSubject<string>('allow');\n  screenshareSetting = new BehaviorSubject<string>('allow');\n  chatSetting = new BehaviorSubject<string>('allow');\n\n  // Display Settings\n  displayOption = new BehaviorSubject<string>('media');\n  autoWave = new BehaviorSubject<boolean>(true);\n  forceFullDisplay = new BehaviorSubject<boolean>(true);\n  prevForceFullDisplay = new BehaviorSubject<boolean>(false);\n  prevMeetingDisplayType = new BehaviorSubject<string>('video');\n\n  // Waiting Room\n  waitingRoomFilter = new BehaviorSubject<string>('');\n  waitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>(\n    this.useSeed && this.seedData?.waitingList ? this.seedData.waitingList : [],\n  );\n  waitingRoomCounter = new BehaviorSubject<number>(0);\n  filteredWaitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>(\n    this.useSeed && this.seedData?.waitingList ? this.seedData.waitingList : [],\n  );\n\n  // Requests\n  requestFilter = new BehaviorSubject<string>('');\n  requestList = new BehaviorSubject<Request[]>(\n    this.useSeed && this.seedData?.requests ? this.seedData.requests : [],\n  );\n  requestCounter = new BehaviorSubject<number>(0);\n  filteredRequestList = new BehaviorSubject<Request[]>(\n    this.useSeed && this.seedData?.requests ? this.seedData.requests : [],\n  );\n\n  // Total Requests and Waiting Room\n  totalReqWait = new BehaviorSubject<number>(0);\n\n  // Alerts\n  alertVisible = new BehaviorSubject<boolean>(false);\n  alertMessage = new BehaviorSubject<string>('');\n  alertType = new BehaviorSubject<'success' | 'danger' | 'info' | 'warning'>('success');\n  alertPosition = new BehaviorSubject<\n    'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center'\n  >('top');\n  alertDuration = new BehaviorSubject<number>(3000);\n\n  // Progress Timer\n  progressTimerVisible = new BehaviorSubject<boolean>(true);\n  progressTimerValue = new BehaviorSubject<number>(0);\n\n  // Menu Modals\n  isMenuModalVisible = new BehaviorSubject<boolean>(false);\n  isRecordingModalVisible = new BehaviorSubject<boolean>(false);\n  isSettingsModalVisible = new BehaviorSubject<boolean>(false);\n  isRequestsModalVisible = new BehaviorSubject<boolean>(false);\n  isWaitingModalVisible = new BehaviorSubject<boolean>(false);\n  isCoHostModalVisible = new BehaviorSubject<boolean>(false);\n  isMediaSettingsModalVisible = new BehaviorSubject<boolean>(false);\n  isDisplaySettingsModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Other Modals\n  isParticipantsModalVisible = new BehaviorSubject<boolean>(false);\n  isMessagesModalVisible = new BehaviorSubject<boolean>(false);\n  isConfirmExitModalVisible = new BehaviorSubject<boolean>(false);\n  isConfirmHereModalVisible = new BehaviorSubject<boolean>(false);\n  private suppressConfirmHereForSession = false;\n  isShareEventModalVisible = new BehaviorSubject<boolean>(false);\n  isLoadingModalVisible = new BehaviorSubject<boolean>(false);\n  modernThemeDarkMode = new BehaviorSubject<boolean>(false);\n\n  resolvePreferredTheme = (): boolean => {\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\n      : false;\n  };\n\n  updateModernThemeDarkMode = (value: boolean) => {\n    this.modernThemeDarkMode.next(value);\n    this.updateButtonState('modernThemeDarkMode', value);\n    this.cdr.detectChanges();\n  };\n\n  // Recording Options\n  recordingMediaOptions = new BehaviorSubject<string>('video');\n  recordingAudioOptions = new BehaviorSubject<string>('all');\n  recordingVideoOptions = new BehaviorSubject<string>('all');\n  recordingVideoType = new BehaviorSubject<string>('fullDisplay');\n  recordingVideoOptimized = new BehaviorSubject<boolean>(false);\n  recordingDisplayType = new BehaviorSubject<'video' | 'media' | 'all'>('video');\n  recordingAddHLS = new BehaviorSubject<boolean>(true);\n  recordingNameTags = new BehaviorSubject<boolean>(true);\n  recordingBackgroundColor = new BehaviorSubject<string>('#83c0e9');\n  recordingNameTagsColor = new BehaviorSubject<string>('#ffffff');\n  recordingAddText = new BehaviorSubject<boolean>(false);\n  recordingCustomText = new BehaviorSubject<string>('Add Text');\n  recordingCustomTextPosition = new BehaviorSubject<string>('top');\n  recordingCustomTextColor = new BehaviorSubject<string>('#ffffff');\n  recordingOrientationVideo = new BehaviorSubject<string>('landscape');\n  clearedToResume = new BehaviorSubject<boolean>(true);\n  clearedToRecord = new BehaviorSubject<boolean>(true);\n  recordState = new BehaviorSubject<string>('green');\n  showRecordButtons = new BehaviorSubject<boolean>(false);\n  recordingProgressTime = new BehaviorSubject<string>('00:00:00');\n  audioSwitching = new BehaviorSubject<boolean>(false);\n  videoSwitching = new BehaviorSubject<boolean>(false);\n\n  // Media States\n  videoAlreadyOn = new BehaviorSubject<boolean>(false);\n  audioAlreadyOn = new BehaviorSubject<boolean>(false);\n\n  componentSizes = new BehaviorSubject<ComponentSizes>({\n    mainHeight: 0,\n    otherHeight: 0,\n    mainWidth: 0,\n    otherWidth: 0,\n  });\n\n  // Permissions\n  hasCameraPermission = new BehaviorSubject<boolean>(false);\n  hasAudioPermission = new BehaviorSubject<boolean>(false);\n\n  // Transports\n  transportCreated = new BehaviorSubject<boolean>(false);\n  localTransportCreated = new BehaviorSubject<boolean>(false);\n  transportCreatedVideo = new BehaviorSubject<boolean>(false);\n  transportCreatedAudio = new BehaviorSubject<boolean>(false);\n  transportCreatedScreen = new BehaviorSubject<boolean>(false);\n  producerTransport = new BehaviorSubject<Transport | null>(null);\n  localProducerTransport = new BehaviorSubject<Transport | null>(null);\n  videoProducer = new BehaviorSubject<Producer | null>(null);\n  localVideoProducer = new BehaviorSubject<Producer | null>(null);\n  params = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  videoParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  audioParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  audioProducer = new BehaviorSubject<Producer | null>(null);\n  audioLevel = new BehaviorSubject<number>(0);\n  localAudioProducer = new BehaviorSubject<Producer | null>(null);\n  consumerTransports = new BehaviorSubject<TransportType[]>([]);\n  consumingTransports = new BehaviorSubject<string[]>([]);\n\n  // Polls\n  polls = new BehaviorSubject<Poll[]>(\n    this.useSeed && this.seedData?.polls ? this.seedData.polls : [],\n  );\n  poll = new BehaviorSubject<Poll | null>(null);\n  isPollModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Background\n  customImage = new BehaviorSubject<string>('');\n  selectedImage = new BehaviorSubject<string>('');\n  segmentVideo = new BehaviorSubject<MediaStream | null>(null);\n  selfieSegmentation = new BehaviorSubject<SelfieSegmentation | null>(null);\n  pauseSegmentation = new BehaviorSubject<boolean>(false);\n  processedStream = new BehaviorSubject<MediaStream | null>(null);\n  keepBackground = new BehaviorSubject<boolean>(false);\n  backgroundHasChanged = new BehaviorSubject<boolean>(false);\n  virtualStream = new BehaviorSubject<MediaStream | null>(null);\n  mainCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  prevKeepBackground = new BehaviorSubject<boolean>(false);\n  appliedBackground = new BehaviorSubject<boolean>(false);\n  isBackgroundModalVisible = new BehaviorSubject<boolean>(false);\n  autoClickBackground = new BehaviorSubject<boolean>(false);\n\n  // Breakout Rooms\n  breakoutRooms = new BehaviorSubject<BreakoutParticipant[][]>(\n    this.useSeed && this.seedData?.breakoutRooms ? this.seedData.breakoutRooms : [],\n  );\n  currentRoomIndex = new BehaviorSubject<number>(0);\n  canStartBreakout = new BehaviorSubject<boolean>(false);\n  breakOutRoomStarted = new BehaviorSubject<boolean>(false);\n  breakOutRoomEnded = new BehaviorSubject<boolean>(false);\n  hostNewRoom = new BehaviorSubject<number>(-1);\n  limitedBreakRoom = new BehaviorSubject<BreakoutParticipant[]>([]);\n  mainRoomsLength = new BehaviorSubject<number>(0);\n  memberRoom = new BehaviorSubject<number>(-1);\n  isBreakoutRoomsModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Whiteboard\n  whiteboardUsers = new BehaviorSubject<WhiteboardUser[]>(\n    this.useSeed && this.seedData?.whiteboardUsers ? this.seedData.whiteboardUsers : [],\n  );\n  currentWhiteboardIndex = new BehaviorSubject<number>(0);\n  canStartWhiteboard = new BehaviorSubject<boolean>(false);\n  whiteboardStarted = new BehaviorSubject<boolean>(false);\n  whiteboardEnded = new BehaviorSubject<boolean>(false);\n  whiteboardLimit = new BehaviorSubject<number>(4);\n  isWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\n  isConfigureWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\n  shapes = new BehaviorSubject<Shape[]>([]);\n  useImageBackground = new BehaviorSubject<boolean>(true);\n  redoStack = new BehaviorSubject<Shape[]>([]);\n  undoStack = new BehaviorSubject<string[]>([]);\n  canvasStream = new BehaviorSubject<MediaStream | null>(null);\n  canvasWhiteboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\n\n  // Screenboard\n  canvasScreenboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  processedScreenStream = new BehaviorSubject<MediaStream | null>(null);\n  annotateScreenStream = new BehaviorSubject<boolean>(false);\n  mainScreenCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  isScreenboardModalVisible = new BehaviorSubject<boolean>(false);\n\n  //state variables for the control buttons\n  micActive = new BehaviorSubject<boolean>(\n    this.audioAlreadyOn.value ? this.audioAlreadyOn.value : false,\n  );\n  videoActive = new BehaviorSubject<boolean>(\n    this.videoAlreadyOn.value ? this.videoAlreadyOn.value : false,\n  );\n  screenShareActive = new BehaviorSubject<boolean>(false);\n  endCallActive = new BehaviorSubject<boolean>(false);\n  participantsActive = new BehaviorSubject<boolean>(false);\n  menuActive = new BehaviorSubject<boolean>(false);\n  commentsActive = new BehaviorSubject<boolean>(false);\n\n  // Update functions\n  updateMessages = (value: Message[]) => {\n    this.messages.next(value);\n  };\n\n  updateStartDirectMessage = (value: boolean) => {\n    this.startDirectMessage.next(value);\n  };\n\n  updateDirectMessageDetails = (value: Participant | null) => {\n    this.directMessageDetails.next(value);\n  };\n\n  updateShowMessagesBadge = (value: boolean) => {\n    this.showMessagesBadge.next(value);\n  };\n\n  updateAudioSetting = (value: string) => {\n    this.audioSetting.next(value);\n  };\n\n  updateVideoSetting = (value: string) => {\n    this.videoSetting.next(value);\n  };\n\n  updateScreenshareSetting = (value: string) => {\n    this.screenshareSetting.next(value);\n  };\n\n  updateChatSetting = (value: string) => {\n    this.chatSetting.next(value);\n  };\n\n  updateDisplayOption = (value: string) => {\n    this.displayOption.next(value);\n  };\n\n  updateAutoWave = (value: boolean) => {\n    this.autoWave.next(value);\n  };\n\n  updateForceFullDisplay = (value: boolean) => {\n    this.forceFullDisplay.next(value);\n  };\n\n  updatePrevForceFullDisplay = (value: boolean) => {\n    this.prevForceFullDisplay.next(value);\n  };\n\n  updatePrevMeetingDisplayType = (value: string) => {\n    this.prevMeetingDisplayType.next(value);\n  };\n\n  updateWaitingRoomCounter = (value: number) => {\n    this.waitingRoomCounter.next(value);\n  };\n\n  updateWaitingRoomFilter = (value: string) => {\n    this.waitingRoomFilter.next(value);\n  };\n\n  updateWaitingRoomList = (value: WaitingRoomParticipant[]) => {\n    this.waitingRoomList.next(value);\n    this.filteredWaitingRoomList.next(value);\n    this.waitingRoomCounter.next(value.length);\n  };\n\n  onWaitingRoomFilterChange = (value: string) => {\n    if (value !== '' && value.length > 0) {\n      const filteredWaitingRoom = this.waitingRoomList\n        .getValue()\n        .filter((waitingRoom: WaitingRoomParticipant) => {\n          return waitingRoom.name.toLowerCase().includes(value.toLowerCase());\n        });\n      this.filteredWaitingRoomList.next(filteredWaitingRoom);\n      this.waitingRoomCounter.next(filteredWaitingRoom.length);\n    } else {\n      this.filteredWaitingRoomList.next(this.waitingRoomList.getValue());\n      this.waitingRoomCounter.next(this.waitingRoomList.getValue().length);\n    }\n  };\n\n  onWaitingRoomClose = () => {\n    this.updateIsWaitingModalVisible(false);\n  };\n\n  updateRequestCounter = (value: number) => {\n    this.requestCounter.next(value);\n  };\n\n  updateRequestFilter = (value: string) => {\n    this.requestFilter.next(value);\n  };\n\n  updateRequestList = (value: Request[]) => {\n    this.requestList.next(value);\n    this.filteredRequestList.next(value);\n    this.requestCounter.next(value.length);\n  };\n\n  onRequestFilterChange = (value: string) => {\n    if (value !== '' && value.length > 0) {\n      const filteredRequest = this.requestList.getValue().filter((request: Request) => {\n        return request?.name?.toLowerCase().includes(value.toLowerCase());\n      });\n      this.filteredRequestList.next(filteredRequest);\n      this.requestCounter.next(filteredRequest.length);\n    } else {\n      this.filteredRequestList.next(this.requestList.getValue());\n      this.requestCounter.next(this.requestList.getValue().length);\n    }\n  };\n\n  onRequestClose = () => {\n    this.updateIsRequestsModalVisible(false);\n  };\n\n  updateTotalReqWait = (value: number) => {\n    this.totalReqWait.next(value);\n  };\n\n  updateAlertVisible = (value: boolean) => {\n    this.alertVisible.next(value);\n  };\n\n  updateAlertMessage = (value: string) => {\n    this.alertMessage.next(value);\n  };\n\n  updateAlertType = (value: 'success' | 'danger' | 'info' | 'warning') => {\n    this.alertType.next(value);\n  };\n\n  updateAlertPosition = (\n    value: 'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center',\n  ) => {\n    this.alertPosition.next(value);\n  };\n\n  updateAlertDuration = (value: number) => {\n    this.alertDuration.next(value);\n  };\n\n  updateProgressTimerVisible = (value: boolean) => {\n    this.progressTimerVisible.next(value);\n  };\n\n  updateProgressTimerValue = (value: number) => {\n    this.progressTimerValue.next(value);\n  };\n\n  updateIsMenuModalVisible = (value: boolean) => {\n    this.isMenuModalVisible.next(value);\n  };\n\n  updateIsRecordingModalVisible = (value: boolean) => {\n    this.isRecordingModalVisible.next(value);\n    if (value) {\n      this.updateConfirmedToRecord(false);\n    } else {\n      if (\n        this.clearedToRecord.getValue() &&\n        this.clearedToResume.getValue() &&\n        this.recordStarted.getValue()\n      ) {\n        this.updateShowRecordButtons(true);\n      }\n    }\n  };\n\n  updateIsSettingsModalVisible = (value: boolean) => {\n    this.isSettingsModalVisible.next(value);\n  };\n\n  updateIsRequestsModalVisible = (value: boolean) => {\n    this.isRequestsModalVisible.next(value);\n  };\n\n  updateIsWaitingModalVisible = (value: boolean) => {\n    this.isWaitingModalVisible.next(value);\n  };\n\n  updateIsCoHostModalVisible = (value: boolean) => {\n    this.isCoHostModalVisible.next(value);\n  };\n\n  updateIsMediaSettingsModalVisible = (value: boolean) => {\n    this.isMediaSettingsModalVisible.next(value);\n  };\n\n  updateIsDisplaySettingsModalVisible = (value: boolean) => {\n    this.isDisplaySettingsModalVisible.next(value);\n  };\n\n  updateIsParticipantsModalVisible = (value: boolean) => {\n    this.isParticipantsModalVisible.next(value);\n  };\n\n  updateIsMessagesModalVisible = (value: boolean) => {\n    this.isMessagesModalVisible.next(value);\n    if (!value) {\n      this.updateShowMessagesBadge(false);\n    }\n  };\n\n  updateIsConfirmExitModalVisible = (value: boolean) => {\n    this.isConfirmExitModalVisible.next(value);\n  };\n\n  updateIsConfirmHereModalVisible = (value: boolean) => {\n    this.isConfirmHereModalVisible.next(value);\n  };\n\n  updateIsLoadingModalVisible = (value: boolean) => {\n    this.isLoadingModalVisible.next(value);\n  };\n\n  updateIsShareEventModalVisible = (value: boolean) => {\n    this.isShareEventModalVisible.next(value);\n  };\n\n  updateRecordingMediaOptions = (value: string) => {\n    this.recordingMediaOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAudioOptions = (value: string) => {\n    this.recordingAudioOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoOptions = (value: string) => {\n    this.recordingVideoOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoType = (value: string) => {\n    this.recordingVideoType.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoOptimized = (value: boolean) => {\n    this.recordingVideoOptimized.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingDisplayType = (value: 'video' | 'media' | 'all') => {\n    this.recordingDisplayType.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAddHLS = (value: boolean) => {\n    this.recordingAddHLS.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAddText = (value: boolean) => {\n    this.recordingAddText.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomText = (value: string) => {\n    this.recordingCustomText.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomTextPosition = (value: string) => {\n    this.recordingCustomTextPosition.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomTextColor = (value: string) => {\n    this.recordingCustomTextColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingNameTags = (value: boolean) => {\n    this.recordingNameTags.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingBackgroundColor = (value: string) => {\n    this.recordingBackgroundColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingNameTagsColor = (value: string) => {\n    this.recordingNameTagsColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingOrientationVideo = (value: string) => {\n    this.recordingOrientationVideo.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateClearedToResume = (value: boolean) => {\n    this.clearedToResume.next(value);\n  };\n\n  updateClearedToRecord = (value: boolean) => {\n    this.clearedToRecord.next(value);\n  };\n\n  updateRecordState = (value: string) => {\n    if (this.recordStarted.value && !this.recordStopped.value) {\n      if (!this.recordPaused.value) {\n        this.recordState.next('red');\n      } else {\n        this.recordState.next('yellow');\n      }\n    } else {\n      this.recordState.next(value);\n    }\n    this.recordState.next(value);\n  };\n\n  updateShowRecordButtons = (value: boolean) => {\n    this.showRecordButtons.next(value);\n  };\n\n  updateRecordingProgressTime = (value: string) => {\n    this.recordingProgressTime.next(value);\n    this.updateRecordTimerWidget();\n  };\n\n  updateAudioSwitching = (value: boolean) => {\n    this.audioSwitching.next(value);\n  };\n\n  updateVideoSwitching = (value: boolean) => {\n    this.videoSwitching.next(value);\n  };\n\n  updateVideoAlreadyOn = (value: boolean) => {\n    this.videoAlreadyOn.next(value);\n    this.videoActive.next(value);\n  };\n\n  updateAudioAlreadyOn = (value: boolean) => {\n    this.audioAlreadyOn.next(value);\n    this.micActive.next(value);\n  };\n\n  updateComponentSizes = (sizes: ComponentSizes) => {\n    this.componentSizes.next(sizes);\n  };\n\n  updateHasCameraPermission = (value: boolean) => {\n    this.hasCameraPermission.next(value);\n  };\n\n  updateHasAudioPermission = (value: boolean) => {\n    this.hasAudioPermission.next(value);\n  };\n\n  requestPermissionCamera(): Promise<string> {\n    // Implement the request permission logic here\n    return Promise.resolve('granted');\n  }\n\n  requestPermissionAudio(): Promise<string> {\n    // Implement the request permission logic here\n    return Promise.resolve('granted');\n  }\n\n  updateTransportCreated = (value: boolean) => {\n    this.transportCreated.next(value);\n  };\n\n  updateLocalTransportCreated = (value: boolean) => {\n    this.localTransportCreated.next(value);\n  };\n\n  updateTransportCreatedVideo = (value: boolean) => {\n    this.transportCreatedVideo.next(value);\n  };\n\n  updateTransportCreatedAudio = (value: boolean) => {\n    this.transportCreatedAudio.next(value);\n  };\n\n  updateTransportCreatedScreen = (value: boolean) => {\n    this.transportCreatedScreen.next(value);\n  };\n\n  updateProducerTransport = (value: Transport | null) => {\n    this.producerTransport.next(value);\n  };\n\n  updateLocalProducerTransport = (value: Transport | null) => {\n    this.localProducerTransport.next(value);\n  };\n\n  updateVideoProducer = (value: Producer | null) => {\n    this.videoProducer.next(value);\n  };\n\n  updateLocalVideoProducer = (value: Producer | null) => {\n    this.localVideoProducer.next(value);\n  }\n\n  updateParams = (value: ProducerOptions) => {\n    this.params.next(value);\n  };\n\n  updateVideoParams = (value: ProducerOptions) => {\n    this.videoParams.next(value);\n  };\n\n  updateAudioParams = (value: ProducerOptions) => {\n    this.audioParams.next(value);\n  };\n\n  updateAudioProducer = (value: Producer | null) => {\n    this.audioProducer.next(value);\n  };\n\n  updateAudioLevel = (value: number) => {\n    this.audioLevel.next(value);\n  };\n\n  updateLocalAudioProducer = (value: Producer | null) => {\n    this.localAudioProducer.next(value);\n  };\n\n  updateConsumerTransports = (value: TransportType[]) => {\n    this.consumerTransports.next(value);\n  };\n\n  updateConsumingTransports = (value: string[]) => {\n    this.consumingTransports.next(value);\n  };\n\n  updatePolls = (value: Poll[]) => {\n    this.polls.next(value);\n  };\n\n  updatePoll = (value: Poll | null) => {\n    this.poll.next(value);\n  };\n\n  updateIsPollModalVisible = (value: boolean) => {\n    this.isPollModalVisible.next(value);\n  };\n\n  updateCustomImage = (value: string) => {\n    this.customImage.next(value);\n  };\n\n  updateSelectedImage = (value: string) => {\n    this.selectedImage.next(value);\n  };\n\n  updateSegmentVideo = (value: MediaStream | null) => {\n    this.segmentVideo.next(value);\n  };\n\n  updateSelfieSegmentation = (value: SelfieSegmentation | null) => {\n    this.selfieSegmentation.next(value);\n  };\n\n  updatePauseSegmentation = (value: boolean) => {\n    this.pauseSegmentation.next(value);\n  };\n\n  updateProcessedStream = (value: MediaStream | null) => {\n    this.processedStream.next(value);\n  };\n\n  updateKeepBackground = (value: boolean) => {\n    this.keepBackground.next(value);\n  };\n\n  updateBackgroundHasChanged = (value: boolean) => {\n    this.backgroundHasChanged.next(value);\n  };\n\n  updateVirtualStream = (value: MediaStream | null) => {\n    this.virtualStream.next(value);\n  };\n\n  updateMainCanvas = (value: HTMLCanvasElement | null) => {\n    this.mainCanvas.next(value);\n  };\n\n  updatePrevKeepBackground = (value: boolean) => {\n    this.prevKeepBackground.next(value);\n  };\n\n  updateAppliedBackground = (value: boolean) => {\n    this.appliedBackground.next(value);\n  };\n\n  updateIsBackgroundModalVisible = (value: boolean) => {\n    this.isBackgroundModalVisible.next(value);\n  };\n\n  updateAutoClickBackground = (value: boolean) => {\n    this.autoClickBackground.next(value);\n  };\n\n  updateBreakoutRooms = (value: BreakoutParticipant[][]) => {\n    this.breakoutRooms.next(value);\n  };\n\n  updateCurrentRoomIndex = (value: number) => {\n    this.currentRoomIndex.next(value);\n  };\n\n  updateCanStartBreakout = (value: boolean) => {\n    this.canStartBreakout.next(value);\n  };\n\n  updateBreakOutRoomStarted = (value: boolean) => {\n    this.breakOutRoomStarted.next(value);\n  };\n\n  updateBreakOutRoomEnded = (value: boolean) => {\n    this.breakOutRoomEnded.next(value);\n  };\n\n  updateHostNewRoom = (value: number) => {\n    this.hostNewRoom.next(value);\n  };\n\n  updateLimitedBreakRoom = (value: BreakoutParticipant[]) => {\n    this.limitedBreakRoom.next(value);\n  };\n\n  updateMainRoomsLength = (value: number) => {\n    this.mainRoomsLength.next(value);\n  };\n\n  updateMemberRoom = (value: number) => {\n    this.memberRoom.next(value);\n  };\n\n  updateIsBreakoutRoomsModalVisible = (value: boolean) => {\n    this.isBreakoutRoomsModalVisible.next(value);\n  };\n\n  updateWhiteboardUsers = (value: WhiteboardUser[]) => {\n    this.whiteboardUsers.next(value);\n  };\n\n  updateCurrentWhiteboardIndex = (value: number) => {\n    this.currentWhiteboardIndex.next(value);\n  };\n\n  updateCanStartWhiteboard = (value: boolean) => {\n    this.canStartWhiteboard.next(value);\n  };\n\n  updateWhiteboardStarted = (value: boolean) => {\n    this.whiteboardStarted.next(value);\n  };\n\n  updateWhiteboardEnded = (value: boolean) => {\n    this.whiteboardEnded.next(value);\n  };\n\n  updateWhiteboardLimit = (value: number) => {\n    this.whiteboardLimit.next(value);\n  };\n\n  updateIsWhiteboardModalVisible = (value: boolean) => {\n    this.isWhiteboardModalVisible.next(value);\n  };\n\n  updateIsConfigureWhiteboardModalVisible = (value: boolean) => {\n    this.isConfigureWhiteboardModalVisible.next(value);\n  };\n\n  updateShapes = (value: Shape[]) => {\n    this.shapes.next(value);\n  };\n\n  updateUseImageBackground = (value: boolean) => {\n    this.useImageBackground.next(value);\n  };\n\n  updateRedoStack = (value: Shape[]) => {\n    this.redoStack.next(value);\n  };\n\n  updateUndoStack = (value: string[]) => {\n    this.undoStack.next(value);\n  };\n\n  updateCanvasStream = (value: MediaStream | null) => {\n    this.canvasStream.next(value);\n  };\n\n  updateCanvasWhiteboard = (value: HTMLCanvasElement | null) => {\n    this.canvasWhiteboard.next(value);\n  };\n\n  updateCanvasScreenboard = (value: HTMLCanvasElement | null) => {\n    this.canvasScreenboard.next(value);\n  };\n\n  updateProcessedScreenStream = (value: MediaStream | null) => {\n    this.processedScreenStream.next(value);\n  };\n\n  updateAnnotateScreenStream = (value: boolean) => {\n    this.annotateScreenStream.next(value);\n  };\n\n  updateMainScreenCanvas = (value: HTMLCanvasElement | null) => {\n    this.mainScreenCanvas.next(value);\n  };\n\n  updateIsScreenboardModalVisible = (value: boolean) => {\n    this.isScreenboardModalVisible.next(value);\n  };\n\n  checkOrientation = () => {\n    const isPortrait = window.matchMedia('(orientation: portrait)').matches;\n    return isPortrait ? 'portrait' : 'landscape';\n  };\n\n  showAlert = ({\n    message,\n    type,\n    duration = 3000,\n    position,\n  }: {\n    message: string;\n    type: 'success' | 'danger' | 'info' | 'warning';\n    duration?: number;\n    position?: 'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center';\n  }) => {\n    const effectivePosition = position ?? (type === 'danger' || type === 'warning' ? 'center' : 'top');\n\n    this.updateAlertMessage(message);\n    this.updateAlertType(type);\n    this.updateAlertPosition(effectivePosition);\n    this.updateAlertDuration(duration);\n    this.updateAlertVisible(true);\n  };\n\n  getAllParams() {\n    return {\n      localUIMode: this.localUIMode.value, // Local UI mode\n\n      // Room Details\n      roomName: this.roomName.value,\n      member: this.member.value,\n      adminPasscode: this.adminPasscode.value,\n      youAreCoHost: this.youAreCoHost.value,\n      youAreHost: this.youAreHost.value,\n      islevel: this.islevel.value,\n      confirmedToRecord: this.confirmedToRecord.value,\n      meetingDisplayType: this.meetingDisplayType.value,\n      meetingVideoOptimized: this.meetingVideoOptimized.value,\n      eventType: this.eventType.value,\n      participants: this.participants.value,\n      filteredParticipants: this.filteredParticipants.value,\n      participantsCounter: this.participantsCounter.value,\n      participantsFilter: this.participantsFilter.value,\n\n      // More room details - media\n      consume_sockets: this.consume_sockets.value,\n      rtpCapabilities: this.rtpCapabilities.value,\n      roomRecvIPs: this.roomRecvIPs.value,\n      meetingRoomParams: this.meetingRoomParams.value,\n      itemPageLimit: this.itemPageLimit.value,\n      audioOnlyRoom: this.audioOnlyRoom.value,\n      addForBasic: this.addForBasic.value,\n      screenPageLimit: this.screenPageLimit.value,\n      shareScreenStarted: this.shareScreenStarted.value,\n      shared: this.shared.value,\n      targetOrientation: this.targetOrientation.value,\n      targetResolution: this.targetResolution.value,\n      targetResolutionHost: this.targetResolutionHost.value,\n      vidCons: this.vidCons.value,\n      frameRate: this.frameRate.value,\n      hParams: this.hParams.value,\n      vParams: this.vParams.value,\n      screenParams: this.screenParams.value,\n      aParams: this.aParams.value,\n\n      // More room details - recording\n      recordingAudioPausesLimit: this.recordingAudioPausesLimit.value,\n      recordingAudioPausesCount: this.recordingAudioPausesCount.value,\n      recordingAudioSupport: this.recordingAudioSupport.value,\n      recordingAudioPeopleLimit: this.recordingAudioPeopleLimit.value,\n      recordingAudioParticipantsTimeLimit: this.recordingAudioParticipantsTimeLimit.value,\n      recordingVideoPausesCount: this.recordingVideoPausesCount.value,\n      recordingVideoPausesLimit: this.recordingVideoPausesLimit.value,\n      recordingVideoSupport: this.recordingVideoSupport.value,\n      recordingVideoPeopleLimit: this.recordingVideoPeopleLimit.value,\n      recordingVideoParticipantsTimeLimit: this.recordingVideoParticipantsTimeLimit.value,\n      recordingAllParticipantsSupport: this.recordingAllParticipantsSupport.value,\n      recordingVideoParticipantsSupport: this.recordingVideoParticipantsSupport.value,\n      recordingAllParticipantsFullRoomSupport: this.recordingAllParticipantsFullRoomSupport.value,\n      recordingVideoParticipantsFullRoomSupport:\n        this.recordingVideoParticipantsFullRoomSupport.value,\n      recordingPreferredOrientation: this.recordingPreferredOrientation.value,\n      recordingSupportForOtherOrientation: this.recordingSupportForOtherOrientation.value,\n      recordingMultiFormatsSupport: this.recordingMultiFormatsSupport.value,\n\n      userRecordingParams: this.userRecordingParams.value,\n      canRecord: this.canRecord.value,\n      startReport: this.startReport.value,\n      endReport: this.endReport.value,\n      recordStartTime: this.recordStartTime.value,\n      recordElapsedTime: this.recordElapsedTime.value,\n      isTimerRunning: this.isTimerRunning.value,\n      canPauseResume: this.canPauseResume.value,\n      recordChangeSeconds: this.recordChangeSeconds.value,\n      pauseLimit: this.pauseLimit.value,\n      pauseRecordCount: this.pauseRecordCount.value,\n      canLaunchRecord: this.canLaunchRecord.value,\n      stopLaunchRecord: this.stopLaunchRecord.value,\n\n      participantsAll: this.participantsAll.value,\n\n      firstAll: this.firstAll.value,\n      updateMainWindow: this.updateMainWindow.value,\n      first_round: this.first_round.value,\n      landScaped: this.landScaped.value,\n      lock_screen: this.lock_screen.value,\n      screenId: this.screenId.value,\n      allVideoStreams: this.allVideoStreams.value,\n      newLimitedStreams: this.newLimitedStreams.value,\n      newLimitedStreamsIDs: this.newLimitedStreamsIDs.value,\n      activeSounds: this.activeSounds.value,\n      screenShareIDStream: this.screenShareIDStream.value,\n      screenShareNameStream: this.screenShareNameStream.value,\n      adminIDStream: this.adminIDStream.value,\n      adminNameStream: this.adminNameStream.value,\n      youYouStream: this.youYouStream.value,\n      youYouStreamIDs: this.youYouStreamIDs.value,\n      localStream: this.localStream.value,\n      recordStarted: this.recordStarted.value,\n      recordResumed: this.recordResumed.value,\n      recordPaused: this.recordPaused.value,\n      recordStopped: this.recordStopped.value,\n      adminRestrictSetting: this.adminRestrictSetting.value,\n      videoRequestState: this.videoRequestState.value,\n      videoRequestTime: this.videoRequestTime.value,\n      videoAction: this.videoAction.value,\n      localStreamVideo: this.localStreamVideo.value,\n      userDefaultVideoInputDevice: this.userDefaultVideoInputDevice.value,\n      currentFacingMode: this.currentFacingMode.value,\n      prevFacingMode: this.prevFacingMode.value,\n      defVideoID: this.defVideoID.value,\n      allowed: this.allowed.value,\n      dispActiveNames: this.dispActiveNames.value,\n      p_dispActiveNames: this.p_dispActiveNames.value,\n      activeNames: this.activeNames.value,\n      prevActiveNames: this.prevActiveNames.value,\n      p_activeNames: this.p_activeNames.value,\n      membersReceived: this.membersReceived.value,\n      deferScreenReceived: this.deferScreenReceived.value,\n      hostFirstSwitch: this.hostFirstSwitch.value,\n      micAction: this.micAction.value,\n      screenAction: this.screenAction.value,\n      chatAction: this.chatAction.value,\n      audioRequestState: this.audioRequestState.value,\n      screenRequestState: this.screenRequestState.value,\n      chatRequestState: this.chatRequestState.value,\n      audioRequestTime: this.audioRequestTime.value,\n      screenRequestTime: this.screenRequestTime.value,\n      chatRequestTime: this.chatRequestTime.value,\n      updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\n      oldSoundIds: this.oldSoundIds.value,\n      hostLabel: this.hostLabel.value,\n      mainScreenFilled: this.mainScreenFilled.value,\n      localStreamScreen: this.localStreamScreen.value,\n      screenAlreadyOn: this.screenAlreadyOn.value,\n      chatAlreadyOn: this.chatAlreadyOn.value,\n      redirectURL: this.redirectURL.value,\n      oldAllStreams: this.oldAllStreams.value,\n      adminVidID: this.adminVidID.value,\n      streamNames: this.streamNames.value,\n      non_alVideoStreams: this.non_alVideoStreams.value,\n      sortAudioLoudness: this.sortAudioLoudness.value,\n      audioDecibels: this.audioDecibels.value,\n      mixed_alVideoStreams: this.mixed_alVideoStreams.value,\n      non_alVideoStreams_muted: this.non_alVideoStreams_muted.value,\n      paginatedStreams: this.paginatedStreams.value,\n      localStreamAudio: this.localStreamAudio.value,\n      defAudioID: this.defAudioID.value,\n      userDefaultAudioInputDevice: this.userDefaultAudioInputDevice.value,\n      userDefaultAudioOutputDevice: this.userDefaultAudioOutputDevice.value,\n      prevAudioInputDevice: this.prevAudioInputDevice.value,\n      prevVideoInputDevice: this.prevVideoInputDevice.value,\n      audioPaused: this.audioPaused.value,\n      mainScreenPerson: this.mainScreenPerson.value,\n      adminOnMainScreen: this.adminOnMainScreen.value,\n      screenStates: this.screenStates.value,\n      prevScreenStates: this.prevScreenStates.value,\n      updateDateState: this.updateDateState.value,\n      lastUpdate: this.lastUpdate.value,\n      nForReadjustRecord: this.nForReadjustRecord.value,\n      fixedPageLimit: this.fixedPageLimit.value,\n      removeAltGrid: this.removeAltGrid.value,\n      nForReadjust: this.nForReadjust.value,\n      lastReorderTime: this.lastReorderTime.value,\n      reorderInterval: this.reorderInterval.value,\n      fastReorderInterval: this.fastReorderInterval.value,\n      audStreamNames: this.audStreamNames.value,\n      currentUserPage: this.currentUserPage.value,\n      mainHeightWidth: this.mainHeightWidth.value,\n      prevMainHeightWidth: this.prevMainHeightWidth.value,\n      prevDoPaginate: this.prevDoPaginate.value,\n      doPaginate: this.doPaginate.value,\n      shareEnded: this.shareEnded.value,\n      lStreams: this.lStreams.value,\n      chatRefStreams: this.chatRefStreams.value,\n      controlHeight: this.controlHeight.value,\n      isWideScreen: this.isWideScreen.value,\n      isMediumScreen: this.isMediumScreen.value,\n      isSmallScreen: this.isSmallScreen.value,\n      addGrid: this.addGrid.value,\n      addAltGrid: this.addAltGrid.value,\n      gridRows: this.gridRows.value,\n      gridCols: this.gridCols.value,\n      altGridRows: this.altGridRows.value,\n      altGridCols: this.altGridCols.value,\n      numberPages: this.numberPages.value,\n      currentStreams: this.currentStreams.value,\n      showMiniView: this.showMiniView.value,\n      nStream: this.nStream.value,\n      defer_receive: this.defer_receive.value,\n      allAudioStreams: this.allAudioStreams.value,\n      screenProducer: this.screenProducer.value,\n      remoteScreenStream: this.remoteScreenStream.value,\n      gotAllVids: this.gotAllVids.value,\n      paginationHeightWidth: this.paginationHeightWidth.value,\n      paginationDirection: this.paginationDirection.value,\n      gridSizes: this.gridSizes.value,\n      screenForceFullDisplay: this.screenForceFullDisplay.value,\n      mainGridStream: this.mainGridStream.value,\n      otherGridStreams: this.otherGridStreams.value,\n      audioOnlyStreams: this.audioOnlyStreams.value,\n      videoInputs: this.videoInputs.value,\n      audioInputs: this.audioInputs.value,\n      meetingProgressTime: this.meetingProgressTime.value,\n      meetingElapsedTime: this.meetingElapsedTime.value,\n\n      ref_participants: this.ref_participants.value,\n\n      messages: this.messages.value,\n      startDirectMessage: this.startDirectMessage.value,\n      directMessageDetails: this.directMessageDetails.value,\n      coHost: this.coHost.value,\n      coHostResponsibility: this.coHostResponsibility.value,\n\n      // Event settings\n      audioSetting: this.audioSetting.value,\n      videoSetting: this.videoSetting.value,\n      screenshareSetting: this.screenshareSetting.value,\n      chatSetting: this.chatSetting.value,\n\n      // Display settings\n      autoWave: this.autoWave.value,\n      forceFullDisplay: this.forceFullDisplay.value,\n      prevForceFullDisplay: this.prevForceFullDisplay.value,\n      prevMeetingDisplayType: this.prevMeetingDisplayType.value,\n\n      // Waiting room\n      waitingRoomFilter: this.waitingRoomFilter.value,\n      waitingRoomList: this.waitingRoomList.value,\n      waitingRoomCounter: this.waitingRoomCounter.value,\n      filteredWaitingRoomList: this.filteredWaitingRoomList.value,\n\n      // Requests\n      requestFilter: this.requestFilter.value,\n      requestList: this.requestList.value,\n      requestCounter: this.requestCounter.value,\n      filteredRequestList: this.filteredRequestList.value,\n\n      // Total requests and waiting room\n      totalReqWait: this.totalReqWait.value,\n\n      // Alerts\n      alertVisible: this.alertVisible.value,\n      alertMessage: this.alertMessage.value,\n      alertType: this.alertType.value,\n      alertPosition: this.alertPosition.value,\n      alertDuration: this.alertDuration.value,\n\n      // Progress Timer\n      progressTimerVisible: this.progressTimerVisible.value,\n      progressTimerValue: this.progressTimerValue.value,\n\n      // Menu modals\n      isMenuModalVisible: this.isMenuModalVisible.value,\n      isRecordingModalVisible: this.isRecordingModalVisible.value,\n      isSettingsModalVisible: this.isSettingsModalVisible.value,\n      isRequestsModalVisible: this.isRequestsModalVisible.value,\n      isWaitingModalVisible: this.isWaitingModalVisible.value,\n      isCoHostModalVisible: this.isCoHostModalVisible.value,\n      isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\n      isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\n\n      // Other Modals\n      isParticipantsModalVisible: this.isParticipantsModalVisible.value,\n      isMessagesModalVisible: this.isMessagesModalVisible.value,\n      isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n      isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\n      isLoadingModalVisible: this.isLoadingModalVisible.value,\n\n      // Recording Options\n      recordingMediaOptions: this.recordingMediaOptions.value,\n      recordingAudioOptions: this.recordingAudioOptions.value,\n      recordingVideoOptions: this.recordingVideoOptions.value,\n      recordingVideoType: this.recordingVideoType.value,\n      recordingVideoOptimized: this.recordingVideoOptimized.value,\n      recordingDisplayType: this.recordingDisplayType.value,\n      recordingAddHLS: this.recordingAddHLS.value,\n      recordingAddText: this.recordingAddText.value,\n      recordingCustomText: this.recordingCustomText.value,\n      recordingCustomTextPosition: this.recordingCustomTextPosition.value,\n      recordingCustomTextColor: this.recordingCustomTextColor.value,\n      recordingNameTags: this.recordingNameTags.value,\n      recordingBackgroundColor: this.recordingBackgroundColor.value,\n      recordingNameTagsColor: this.recordingNameTagsColor.value,\n      recordingOrientationVideo: this.recordingOrientationVideo.value,\n      clearedToResume: this.clearedToResume.value,\n      clearedToRecord: this.clearedToRecord.value,\n      recordState: this.recordState.value,\n      showRecordButtons: this.showRecordButtons.value,\n      recordingProgressTime: this.recordingProgressTime.value,\n      audioSwitching: this.audioSwitching.value,\n      videoSwitching: this.videoSwitching.value,\n\n      // Media states\n      videoAlreadyOn: this.videoAlreadyOn.value,\n      audioAlreadyOn: this.audioAlreadyOn.value,\n      componentSizes: this.componentSizes.value,\n\n      // Permissions\n      hasCameraPermission: this.hasCameraPermission.value,\n      hasAudioPermission: this.hasAudioPermission.value,\n\n      // Transports\n      transportCreated: this.transportCreated.value,\n      localTransportCreated: this.localTransportCreated.value,\n      transportCreatedVideo: this.transportCreatedVideo.value,\n      transportCreatedAudio: this.transportCreatedAudio.value,\n      transportCreatedScreen: this.transportCreatedScreen.value,\n      producerTransport: this.producerTransport.value,\n      localProducerTransport: this.localProducerTransport.value,\n      videoProducer: this.videoProducer.value,\n      localVideoProducer: this.localVideoProducer.value,\n      params: this.params.value,\n      videoParams: this.videoParams.value,\n      audioParams: this.audioParams.value,\n      audioProducer: this.audioProducer.value,\n      audioLevel: this.audioLevel.value,\n      localAudioProducer: this.localAudioProducer.value,\n      consumerTransports: this.consumerTransports.value,\n      consumingTransports: this.consumingTransports.value,\n\n      // Polls\n      polls: this.polls.value,\n      poll: this.poll.value,\n      isPollModalVisible: this.isPollModalVisible.value,\n\n      // Background\n      customImage: this.customImage.value,\n      selectedImage: this.selectedImage.value,\n      segmentVideo: this.segmentVideo.value,\n      selfieSegmentation: this.selfieSegmentation.value,\n      pauseSegmentation: this.pauseSegmentation.value,\n      processedStream: this.processedStream.value,\n      keepBackground: this.keepBackground.value,\n      backgroundHasChanged: this.backgroundHasChanged.value,\n      virtualStream: this.virtualStream.value,\n      mainCanvas: this.mainCanvas.value,\n      prevKeepBackground: this.prevKeepBackground.value,\n      appliedBackground: this.appliedBackground.value,\n      isBackgroundModalVisible: this.isBackgroundModalVisible.value,\n      autoClickBackground: this.autoClickBackground.value,\n\n      // Breakout rooms\n      breakoutRooms: this.breakoutRooms.value,\n      currentRoomIndex: this.currentRoomIndex.value,\n      canStartBreakout: this.canStartBreakout.value,\n      breakOutRoomStarted: this.breakOutRoomStarted.value,\n      breakOutRoomEnded: this.breakOutRoomEnded.value,\n      hostNewRoom: this.hostNewRoom.value,\n      limitedBreakRoom: this.limitedBreakRoom.value,\n      mainRoomsLength: this.mainRoomsLength.value,\n      memberRoom: this.memberRoom.value,\n      isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\n\n      // Whiteboard\n      whiteboardUsers: this.whiteboardUsers.value,\n      currentWhiteboardIndex: this.currentWhiteboardIndex.value,\n      canStartWhiteboard: this.canStartWhiteboard.value,\n      whiteboardStarted: this.whiteboardStarted.value,\n      whiteboardEnded: this.whiteboardEnded.value,\n      whiteboardLimit: this.whiteboardLimit.value,\n      isWhiteboardModalVisible: this.isWhiteboardModalVisible.value,\n      isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\n      shapes: this.shapes.value,\n      useImageBackground: this.useImageBackground.value,\n      redoStack: this.redoStack.value,\n      undoStack: this.undoStack.value,\n      canvasStream: this.canvasStream.value,\n      canvasWhiteboard: this.canvasWhiteboard.value,\n\n      // Screenboard\n      canvasScreenboard: this.canvasScreenboard.value,\n      processedScreenStream: this.processedScreenStream.value,\n      annotateScreenStream: this.annotateScreenStream.value,\n      mainScreenCanvas: this.mainScreenCanvas.value,\n      isScreenboardModalVisible: this.isScreenboardModalVisible.value,\n\n      validated: this.validated.value,\n      device: this.device.value,\n      socket: this.socket.value,\n      localSocket: this.localSocket!.value,\n      checkMediaPermission: false,\n      onWeb: true,\n\n      // Update functions\n      updateRoomName: this.updateRoomName.bind(this),\n      updateMember: this.updateMember.bind(this),\n      updateAdminPasscode: this.updateAdminPasscode.bind(this),\n      updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\n      updateYouAreHost: this.updateYouAreHost.bind(this),\n      updateIslevel: this.updateIslevel.bind(this),\n      updateCoHost: this.updateCoHost.bind(this),\n      updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\n      updateConfirmedToRecord: this.updateConfirmedToRecord.bind(this),\n      updateMeetingDisplayType: this.updateMeetingDisplayType.bind(this),\n      updateMeetingVideoOptimized: this.updateMeetingVideoOptimized.bind(this),\n      updateEventType: this.updateEventType.bind(this),\n      updateParticipants: this.updateParticipants.bind(this),\n      updateParticipantsCounter: this.updateParticipantsCounter.bind(this),\n      updateParticipantsFilter: this.updateParticipantsFilter.bind(this),\n\n      // More update functions for media details\n      updateConsume_sockets: this.updateConsume_sockets.bind(this),\n      updateRtpCapabilities: this.updateRtpCapabilities.bind(this),\n      updateRoomRecvIPs: this.updateRoomRecvIPs.bind(this),\n      updateMeetingRoomParams: this.updateMeetingRoomParams.bind(this),\n      updateItemPageLimit: this.updateItemPageLimit.bind(this),\n      updateAudioOnlyRoom: this.updateAudioOnlyRoom.bind(this),\n      updateAddForBasic: this.updateAddForBasic.bind(this),\n      updateScreenPageLimit: this.updateScreenPageLimit.bind(this),\n      updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\n      updateShared: this.updateShared.bind(this),\n      updateTargetOrientation: this.updateTargetOrientation.bind(this),\n      updateTargetResolution: this.updateTargetResolution.bind(this),\n      updateTargetResolutionHost: this.updateTargetResolutionHost.bind(this),\n      updateVidCons: this.updateVidCons.bind(this),\n      updateFrameRate: this.updateFrameRate.bind(this),\n      updateHParams: this.updateHParams.bind(this),\n      updateVParams: this.updateVParams.bind(this),\n      updateScreenParams: this.updateScreenParams.bind(this),\n      updateAParams: this.updateAParams.bind(this),\n\n      // More update functions for recording details\n      updateRecordingAudioPausesLimit: this.updateRecordingAudioPausesLimit.bind(this),\n      updateRecordingAudioPausesCount: this.updateRecordingAudioPausesCount.bind(this),\n      updateRecordingAudioSupport: this.updateRecordingAudioSupport.bind(this),\n      updateRecordingAudioPeopleLimit: this.updateRecordingAudioPeopleLimit.bind(this),\n      updateRecordingAudioParticipantsTimeLimit:\n        this.updateRecordingAudioParticipantsTimeLimit.bind(this),\n      updateRecordingVideoPausesCount: this.updateRecordingVideoPausesCount.bind(this),\n      updateRecordingVideoPausesLimit: this.updateRecordingVideoPausesLimit.bind(this),\n      updateRecordingVideoSupport: this.updateRecordingVideoSupport.bind(this),\n      updateRecordingVideoPeopleLimit: this.updateRecordingVideoPeopleLimit.bind(this),\n      updateRecordingVideoParticipantsTimeLimit:\n        this.updateRecordingVideoParticipantsTimeLimit.bind(this),\n      updateRecordingAllParticipantsSupport: this.updateRecordingAllParticipantsSupport.bind(this),\n      updateRecordingVideoParticipantsSupport:\n        this.updateRecordingVideoParticipantsSupport.bind(this),\n      updateRecordingAllParticipantsFullRoomSupport:\n        this.updateRecordingAllParticipantsFullRoomSupport.bind(this),\n      updateRecordingVideoParticipantsFullRoomSupport:\n        this.updateRecordingVideoParticipantsFullRoomSupport.bind(this),\n      updateRecordingPreferredOrientation: this.updateRecordingPreferredOrientation.bind(this),\n      updateRecordingSupportForOtherOrientation:\n        this.updateRecordingSupportForOtherOrientation.bind(this),\n      updateRecordingMultiFormatsSupport: this.updateRecordingMultiFormatsSupport.bind(this),\n\n      updateUserRecordingParams: this.updateUserRecordingParams.bind(this),\n      updateCanRecord: this.updateCanRecord.bind(this),\n      updateStartReport: this.updateStartReport.bind(this),\n      updateEndReport: this.updateEndReport.bind(this),\n      updateRecordTimerInterval: this.updateRecordTimerInterval.bind(this),\n      updateRecordStartTime: this.updateRecordStartTime.bind(this),\n      updateRecordElapsedTime: this.updateRecordElapsedTime.bind(this),\n      updateIsTimerRunning: this.updateIsTimerRunning.bind(this),\n      updateCanPauseResume: this.updateCanPauseResume.bind(this),\n      updateRecordChangeSeconds: this.updateRecordChangeSeconds.bind(this),\n      updatePauseLimit: this.updatePauseLimit.bind(this),\n      updatePauseRecordCount: this.updatePauseRecordCount.bind(this),\n      updateCanLaunchRecord: this.updateCanLaunchRecord.bind(this),\n      updateStopLaunchRecord: this.updateStopLaunchRecord.bind(this),\n\n      updateParticipantsAll: this.updateParticipantsAll.bind(this),\n\n      updateFirstAll: this.updateFirstAll.bind(this),\n      updateUpdateMainWindow: this.updateUpdateMainWindow.bind(this),\n      updateFirst_round: this.updateFirst_round.bind(this),\n      updateLandScaped: this.updateLandScaped.bind(this),\n      updateLock_screen: this.updateLock_screen.bind(this),\n      updateScreenId: this.updateScreenId.bind(this),\n      updateAllVideoStreams: this.updateAllVideoStreams.bind(this),\n      updateNewLimitedStreams: this.updateNewLimitedStreams.bind(this),\n      updateNewLimitedStreamsIDs: this.updateNewLimitedStreamsIDs.bind(this),\n      updateActiveSounds: this.updateActiveSounds.bind(this),\n      updateScreenShareIDStream: this.updateScreenShareIDStream.bind(this),\n      updateScreenShareNameStream: this.updateScreenShareNameStream.bind(this),\n      updateAdminIDStream: this.updateAdminIDStream.bind(this),\n      updateAdminNameStream: this.updateAdminNameStream.bind(this),\n      updateYouYouStream: this.updateYouYouStream.bind(this),\n      updateYouYouStreamIDs: this.updateYouYouStreamIDs.bind(this),\n      updateLocalStream: this.updateLocalStream.bind(this),\n      updateRecordStarted: this.updateRecordStarted.bind(this),\n      updateRecordResumed: this.updateRecordResumed.bind(this),\n      updateRecordPaused: this.updateRecordPaused.bind(this),\n      updateRecordStopped: this.updateRecordStopped.bind(this),\n      updateAdminRestrictSetting: this.updateAdminRestrictSetting.bind(this),\n      updateVideoRequestState: this.updateVideoRequestState.bind(this),\n      updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\n      updateVideoAction: this.updateVideoAction.bind(this),\n      updateLocalStreamVideo: this.updateLocalStreamVideo.bind(this),\n      updateUserDefaultVideoInputDevice: this.updateUserDefaultVideoInputDevice.bind(this),\n      updateCurrentFacingMode: this.updateCurrentFacingMode.bind(this),\n      updatePrevFacingMode: this.updatePrevFacingMode.bind(this),\n      updateDefVideoID: this.updateDefVideoID.bind(this),\n      updateAllowed: this.updateAllowed.bind(this),\n      updateDispActiveNames: this.updateDispActiveNames.bind(this),\n      updateP_dispActiveNames: this.updateP_dispActiveNames.bind(this),\n      updateActiveNames: this.updateActiveNames.bind(this),\n      updatePrevActiveNames: this.updatePrevActiveNames.bind(this),\n      updateP_activeNames: this.updateP_activeNames.bind(this),\n      updateMembersReceived: this.updateMembersReceived.bind(this),\n      updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\n      updateHostFirstSwitch: this.updateHostFirstSwitch.bind(this),\n      updateMicAction: this.updateMicAction.bind(this),\n      updateScreenAction: this.updateScreenAction.bind(this),\n      updateChatAction: this.updateChatAction.bind(this),\n      updateAudioRequestState: this.updateAudioRequestState.bind(this),\n      updateScreenRequestState: this.updateScreenRequestState.bind(this),\n      updateChatRequestState: this.updateChatRequestState.bind(this),\n      updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\n      updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\n      updateChatRequestTime: this.updateChatRequestTime.bind(this),\n      updateOldSoundIds: this.updateOldSoundIds.bind(this),\n      updateHostLabel: this.updateHostLabel.bind(this),\n      updateMainScreenFilled: this.updateMainScreenFilled.bind(this),\n      updateLocalStreamScreen: this.updateLocalStreamScreen.bind(this),\n      updateScreenAlreadyOn: this.updateScreenAlreadyOn.bind(this),\n      updateChatAlreadyOn: this.updateChatAlreadyOn.bind(this),\n      updateRedirectURL: this.updateRedirectURL.bind(this),\n      updateOldAllStreams: this.updateOldAllStreams.bind(this),\n      updateAdminVidID: this.updateAdminVidID.bind(this),\n      updateStreamNames: this.updateStreamNames.bind(this),\n      updateNon_alVideoStreams: this.updateNon_alVideoStreams.bind(this),\n      updateSortAudioLoudness: this.updateSortAudioLoudness.bind(this),\n      updateAudioDecibels: this.updateAudioDecibels.bind(this),\n      updateMixed_alVideoStreams: this.updateMixed_alVideoStreams.bind(this),\n      updateNon_alVideoStreams_muted: this.updateNon_alVideoStreams_muted.bind(this),\n      updatePaginatedStreams: this.updatePaginatedStreams.bind(this),\n      updateLocalStreamAudio: this.updateLocalStreamAudio.bind(this),\n      updateDefAudioID: this.updateDefAudioID.bind(this),\n      updateUserDefaultAudioInputDevice: this.updateUserDefaultAudioInputDevice.bind(this),\n      updateUserDefaultAudioOutputDevice: this.updateUserDefaultAudioOutputDevice.bind(this),\n      updatePrevAudioInputDevice: this.updatePrevAudioInputDevice.bind(this),\n      updatePrevVideoInputDevice: this.updatePrevVideoInputDevice.bind(this),\n      updateAudioPaused: this.updateAudioPaused.bind(this),\n      updateMainScreenPerson: this.updateMainScreenPerson.bind(this),\n      updateAdminOnMainScreen: this.updateAdminOnMainScreen.bind(this),\n      updateScreenStates: this.updateScreenStates.bind(this),\n      updatePrevScreenStates: this.updatePrevScreenStates.bind(this),\n      updateUpdateDateState: this.updateUpdateDateState.bind(this),\n      updateLastUpdate: this.updateLastUpdate.bind(this),\n      updateNForReadjustRecord: this.updateNForReadjustRecord.bind(this),\n      updateFixedPageLimit: this.updateFixedPageLimit.bind(this),\n      updateRemoveAltGrid: this.updateRemoveAltGrid.bind(this),\n      updateNForReadjust: this.updateNForReadjust.bind(this),\n      updateLastReorderTime: this.updateLastReorderTime.bind(this),\n      updateAudStreamNames: this.updateAudStreamNames.bind(this),\n      updateCurrentUserPage: this.updateCurrentUserPage.bind(this),\n      updateMainHeightWidth: this.updateMainHeightWidth.bind(this),\n      updatePrevMainHeightWidth: this.updatePrevMainHeightWidth.bind(this),\n      updatePrevDoPaginate: this.updatePrevDoPaginate.bind(this),\n      updateDoPaginate: this.updateDoPaginate.bind(this),\n      updateShareEnded: this.updateShareEnded.bind(this),\n      updateLStreams: this.updateLStreams.bind(this),\n      updateChatRefStreams: this.updateChatRefStreams.bind(this),\n      updateControlHeight: this.updateControlHeight.bind(this),\n      updateIsWideScreen: this.updateIsWideScreen.bind(this),\n      updateIsMediumScreen: this.updateIsMediumScreen.bind(this),\n      updateIsSmallScreen: this.updateIsSmallScreen.bind(this),\n      updateAddGrid: this.updateAddGrid.bind(this),\n      updateAddAltGrid: this.updateAddAltGrid.bind(this),\n      updateGridRows: this.updateGridRows.bind(this),\n      updateGridCols: this.updateGridCols.bind(this),\n      updateAltGridRows: this.updateAltGridRows.bind(this),\n      updateAltGridCols: this.updateAltGridCols.bind(this),\n      updateNumberPages: this.updateNumberPages.bind(this),\n      updateCurrentStreams: this.updateCurrentStreams.bind(this),\n      updateShowMiniView: this.updateShowMiniView.bind(this),\n      updateNStream: this.updateNStream.bind(this),\n      updateDefer_receive: this.updateDefer_receive.bind(this),\n      updateAllAudioStreams: this.updateAllAudioStreams.bind(this),\n      updateRemoteScreenStream: this.updateRemoteScreenStream.bind(this),\n      updateScreenProducer: this.updateScreenProducer.bind(this),\n      updateGotAllVids: this.updateGotAllVids.bind(this),\n      updatePaginationHeightWidth: this.updatePaginationHeightWidth.bind(this),\n      updatePaginationDirection: this.updatePaginationDirection.bind(this),\n      updateGridSizes: this.updateGridSizes.bind(this),\n      updateScreenForceFullDisplay: this.updateScreenForceFullDisplay.bind(this),\n      updateMainGridStream: this.updateMainGridStream.bind(this),\n      updateOtherGridStreams: this.updateOtherGridStreams.bind(this),\n      updateAudioOnlyStreams: this.updateAudioOnlyStreams.bind(this),\n      updateVideoInputs: this.updateVideoInputs.bind(this),\n      updateAudioInputs: this.updateAudioInputs.bind(this),\n      updateMeetingProgressTime: this.updateMeetingProgressTime.bind(this),\n      updateMeetingElapsedTime: this.updateMeetingElapsedTime.bind(this),\n      updateRef_participants: this.updateRef_participants.bind(this),\n\n      updateMessages: this.updateMessages.bind(this),\n      updateStartDirectMessage: this.updateStartDirectMessage.bind(this),\n      updateDirectMessageDetails: this.updateDirectMessageDetails.bind(this),\n      updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\n\n      // Event settings\n      updateAudioSetting: this.updateAudioSetting.bind(this),\n      updateVideoSetting: this.updateVideoSetting.bind(this),\n      updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\n      updateChatSetting: this.updateChatSetting.bind(this),\n\n      // Display settings\n      updateAutoWave: this.updateAutoWave.bind(this),\n      updateForceFullDisplay: this.updateForceFullDisplay.bind(this),\n      updatePrevForceFullDisplay: this.updatePrevForceFullDisplay.bind(this),\n      updatePrevMeetingDisplayType: this.updatePrevMeetingDisplayType.bind(this),\n\n      // Waiting room\n      updateWaitingRoomFilter: this.updateWaitingRoomFilter.bind(this),\n      updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\n      updateWaitingRoomCounter: this.updateWaitingRoomCounter.bind(this),\n\n      // Requests\n      updateRequestFilter: this.updateRequestFilter.bind(this),\n      updateRequestList: this.updateRequestList.bind(this),\n      updateRequestCounter: this.updateRequestCounter.bind(this),\n\n      // Total requests and waiting room\n      updateTotalReqWait: this.updateTotalReqWait.bind(this),\n\n      // Menu modals\n      updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\n      updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n      updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\n      updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\n      updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\n      updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\n      updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\n      updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\n\n      // Other modals\n      updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\n      updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\n      updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\n      updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\n      updateIsLoadingModalVisible: this.updateIsLoadingModalVisible.bind(this),\n\n      // Recording Options\n      updateRecordingMediaOptions: this.updateRecordingMediaOptions.bind(this),\n      updateRecordingAudioOptions: this.updateRecordingAudioOptions.bind(this),\n      updateRecordingVideoOptions: this.updateRecordingVideoOptions.bind(this),\n      updateRecordingVideoType: this.updateRecordingVideoType.bind(this),\n      updateRecordingVideoOptimized: this.updateRecordingVideoOptimized.bind(this),\n      updateRecordingDisplayType: this.updateRecordingDisplayType.bind(this),\n      updateRecordingAddHLS: this.updateRecordingAddHLS.bind(this),\n      updateRecordingAddText: this.updateRecordingAddText.bind(this),\n      updateRecordingCustomText: this.updateRecordingCustomText.bind(this),\n      updateRecordingCustomTextPosition: this.updateRecordingCustomTextPosition.bind(this),\n      updateRecordingCustomTextColor: this.updateRecordingCustomTextColor.bind(this),\n      updateRecordingNameTags: this.updateRecordingNameTags.bind(this),\n      updateRecordingBackgroundColor: this.updateRecordingBackgroundColor.bind(this),\n      updateRecordingNameTagsColor: this.updateRecordingNameTagsColor.bind(this),\n      updateRecordingOrientationVideo: this.updateRecordingOrientationVideo.bind(this),\n      updateClearedToResume: this.updateClearedToResume.bind(this),\n      updateClearedToRecord: this.updateClearedToRecord.bind(this),\n      updateRecordState: this.updateRecordState.bind(this),\n      updateShowRecordButtons: this.updateShowRecordButtons.bind(this),\n      updateRecordingProgressTime: this.updateRecordingProgressTime.bind(this),\n      updateAudioSwitching: this.updateAudioSwitching.bind(this),\n      updateVideoSwitching: this.updateVideoSwitching.bind(this),\n\n      // Media states\n      updateVideoAlreadyOn: this.updateVideoAlreadyOn.bind(this),\n      updateAudioAlreadyOn: this.updateAudioAlreadyOn.bind(this),\n      updateComponentSizes: this.updateComponentSizes.bind(this),\n\n      // Permissions\n      updateHasCameraPermission: this.updateHasCameraPermission.bind(this),\n      updateHasAudioPermission: this.updateHasAudioPermission.bind(this),\n\n      // Transports\n      updateTransportCreated: this.updateTransportCreated.bind(this),\n      updateLocalTransportCreated: this.updateLocalTransportCreated.bind(this),\n      updateTransportCreatedVideo: this.updateTransportCreatedVideo.bind(this),\n      updateTransportCreatedAudio: this.updateTransportCreatedAudio.bind(this),\n      updateTransportCreatedScreen: this.updateTransportCreatedScreen.bind(this),\n      updateProducerTransport: this.updateProducerTransport.bind(this),\n      updateLocalProducerTransport: this.updateLocalProducerTransport.bind(this),\n      updateVideoProducer: this.updateVideoProducer.bind(this),\n      updateLocalVideoProducer: this.updateLocalVideoProducer.bind(this),\n      updateParams: this.updateParams.bind(this),\n      updateVideoParams: this.updateVideoParams.bind(this),\n      updateAudioParams: this.updateAudioParams.bind(this),\n      updateAudioProducer: this.updateAudioProducer.bind(this),\n      updateAudioLevel: this.updateAudioLevel.bind(this),\n      updateLocalAudioProducer: this.updateLocalAudioProducer.bind(this),\n      updateConsumerTransports: this.updateConsumerTransports.bind(this),\n      updateConsumingTransports: this.updateConsumingTransports.bind(this),\n\n      // Polls\n      updatePolls: this.updatePolls.bind(this),\n      updatePoll: this.updatePoll.bind(this),\n      updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\n\n      // Background\n      updateCustomImage: this.updateCustomImage.bind(this),\n      updateSelectedImage: this.updateSelectedImage.bind(this),\n      updateSegmentVideo: this.updateSegmentVideo.bind(this),\n      updateSelfieSegmentation: this.updateSelfieSegmentation.bind(this),\n      updatePauseSegmentation: this.updatePauseSegmentation.bind(this),\n      updateProcessedStream: this.updateProcessedStream.bind(this),\n      updateKeepBackground: this.updateKeepBackground.bind(this),\n      updateBackgroundHasChanged: this.updateBackgroundHasChanged.bind(this),\n      updateVirtualStream: this.updateVirtualStream.bind(this),\n      updateMainCanvas: this.updateMainCanvas.bind(this),\n      updatePrevKeepBackground: this.updatePrevKeepBackground.bind(this),\n      updateAppliedBackground: this.updateAppliedBackground.bind(this),\n      updateIsBackgroundModalVisible: this.updateIsBackgroundModalVisible.bind(this),\n      updateAutoClickBackground: this.updateAutoClickBackground.bind(this),\n\n      // Breakout rooms\n      updateBreakoutRooms: this.updateBreakoutRooms.bind(this),\n      updateCurrentRoomIndex: this.updateCurrentRoomIndex.bind(this),\n      updateCanStartBreakout: this.updateCanStartBreakout.bind(this),\n      updateBreakOutRoomStarted: this.updateBreakOutRoomStarted.bind(this),\n      updateBreakOutRoomEnded: this.updateBreakOutRoomEnded.bind(this),\n      updateHostNewRoom: this.updateHostNewRoom.bind(this),\n      updateLimitedBreakRoom: this.updateLimitedBreakRoom.bind(this),\n      updateMainRoomsLength: this.updateMainRoomsLength.bind(this),\n      updateMemberRoom: this.updateMemberRoom.bind(this),\n      updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\n\n      // Whiteboard\n      updateWhiteboardUsers: this.updateWhiteboardUsers.bind(this),\n      updateCurrentWhiteboardIndex: this.updateCurrentWhiteboardIndex.bind(this),\n      updateCanStartWhiteboard: this.updateCanStartWhiteboard.bind(this),\n      updateWhiteboardStarted: this.updateWhiteboardStarted.bind(this),\n      updateWhiteboardEnded: this.updateWhiteboardEnded.bind(this),\n      updateWhiteboardLimit: this.updateWhiteboardLimit.bind(this),\n      updateIsWhiteboardModalVisible: this.updateIsWhiteboardModalVisible.bind(this),\n      updateIsConfigureWhiteboardModalVisible:\n        this.updateIsConfigureWhiteboardModalVisible.bind(this),\n      updateShapes: this.updateShapes.bind(this),\n      updateUseImageBackground: this.updateUseImageBackground.bind(this),\n      updateRedoStack: this.updateRedoStack.bind(this),\n      updateUndoStack: this.updateUndoStack.bind(this),\n      updateCanvasStream: this.updateCanvasStream.bind(this),\n      updateCanvasWhiteboard: this.updateCanvasWhiteboard.bind(this),\n\n      // Screenboard\n      updateCanvasScreenboard: this.updateCanvasScreenboard.bind(this),\n      updateProcessedScreenStream: this.updateProcessedScreenStream.bind(this),\n      updateAnnotateScreenStream: this.updateAnnotateScreenStream.bind(this),\n      updateMainScreenCanvas: this.updateMainScreenCanvas.bind(this),\n      updateIsScreenboardModalVisible: this.updateIsScreenboardModalVisible.bind(this),\n\n      // Other functions\n      checkOrientation: this.checkOrientation.bind(this),\n\n      updateDevice: this.updateDevice.bind(this),\n      updateSocket: this.updateSocket.bind(this),\n      updateLocalSocket: this.updateLocalSocket.bind(this),\n      updateValidated: this.updateValidated.bind(this),\n      isDarkModeValue: this.modernThemeDarkMode.value,\n      updateIsDarkMode: this.updateModernThemeDarkMode.bind(this),\n\n      customVideoCard: this.customVideoCard,\n      customAudioCard: this.customAudioCard,\n      customMiniCard: this.customMiniCard,\n\n      showAlert: this.showAlert.bind(this),\n      getUpdatedAllParams: () => {\n\n        try {\n          if (this.sourceParameters !== null) {\n            const nextSourceParameters = {\n              ...this.getAllParams(),\n              ...this.mediaSFUFunctions(),\n            };\n            this.sourceParameters = nextSourceParameters;\n            if (this.updateSourceParameters) {\n              this.updateSourceParameters(nextSourceParameters);\n            }\n          }\n        } catch {\n          console.log('error updateSourceParameters');\n        }\n\n        return {\n          ...this.getAllParams(),\n          ...this.mediaSFUFunctions(),\n        };\n      },\n    };\n  }\n\n  mediaSFUParameters: any = {\n    ...this.getAllParams(),\n    ...this.mediaSFUFunctions(),\n  };\n\n  getUpdatedAllParams = (): any => {\n    return {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n  };\n\n  updateButtonState(buttonType: string, value: boolean) {\n    this.controlButtons = this.controlButtons.map((button) => {\n      if (buttonType === 'micActive' && button.icon === this.faMicrophoneSlash) {\n        return { ...button, active: value };\n      }\n      if (buttonType === 'videoActive' && button.icon === this.faVideoSlash) {\n        return { ...button, active: value };\n      }\n      if (buttonType === 'screenShareActive' && button.icon === this.faDesktop) {\n        if (button.alternateIconComponent) {\n          const updatedInjector = this.createInjector({\n            disabled: !value,\n          });\n          return {\n            ...button,\n            active: true,\n            alternateIconComponent: { ...this.screenShareWidget, injector: updatedInjector },\n          }; //always default to true for active\n        } else {\n          return { ...button, active: true }; //always default to true for active\n        }\n      }\n      if (buttonType === 'endCallActive' && button.icon === this.faPhone) {\n        return { ...button, active: value };\n      }\n      if (buttonType === 'participantsActive' && button.icon === this.faUsers) {\n        return { ...button, active: value };\n      }\n      if (buttonType === 'modernThemeDarkMode' && button.icon === faMoon) {\n        return { ...button, active: value };\n      }\n      if (\n        buttonType === 'showMessagesBadge' &&\n        button.customName &&\n        button.customName === 'Messages'\n      ) {\n        const updatedInjector = this.createInjector({\n          icon: this.faComments,\n          badgeValue: value ? '*' : '',\n          iconColor: 'black',\n          showBadge: value,\n        });\n        return { ...button, customComponent: { ...this.messageWidget, injector: updatedInjector } };\n      }\n      if (buttonType === 'showMenuBadge' && button.customName && button.customName === 'Menu') {\n        const updatedInjector = this.createInjector({\n          icon: this.faBars,\n          badgeValue: this.totalReqWait.value,\n          iconColor: 'black',\n          showBadge: true,\n        });\n        return { ...button, customComponent: { ...this.menuWidget, injector: updatedInjector } };\n      }\n\n      return button;\n    });\n\n    this.cdr.detectChanges();\n  }\n\n  PrejoinPageComponent: any = {\n    component: this.PrejoinPage,\n    injector: null,\n  };\n\n  updatePrejoinPageComponent = () => {\n    const PrejoinComp = {\n      component: this.PrejoinPage,\n      injector: this.createInjector({\n        parameters: {\n          showAlert:\n            this.showAlert ||\n            (() => {\n              console.log('showAlert not defined');\n            }),\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\n          connectSocket: this.socketManager.connectSocket,\n          connectLocalSocket: this.socketManager.connectLocalSocket,\n          updateSocket: this.updateSocket,\n          updateLocalSocket: this.updateLocalSocket,\n          updateValidated: this.updateValidated,\n          updateApiUserName: this.updateApiUserName,\n          updateApiToken: this.updateApiToken,\n          updateLink: this.updateLink,\n          updateRoomName: this.updateRoomName,\n          updateMember: this.updateMember,\n        },\n        credentials: this.credentials,\n        localLink: this.localLink,\n        connectMediaSFU: this.connectMediaSFU,\n        returnUI: this.returnUI,\n        noUIPreJoinOptions: this.noUIPreJoinOptions,\n        joinMediaSFURoom: this.joinMediaSFURoom,\n        createMediaSFURoom: this.createMediaSFURoom,\n      }),\n    };\n\n    this.PrejoinPageComponent = { ...PrejoinComp };\n\n    this.cdr.detectChanges();\n  };\n\n  /**\n   * Initializes function overrides by wrapping original implementations\n   * with custom logic if provided in uiOverrides\n   */\n  initializeFunctionOverrides(): void {\n    // Apply consumerResume override\n    if (this.uiOverrideResolver.hasOverride('consumerResume')) {\n      const originalConsumerResume = this.consumerResume.consumerResume.bind(\n        this.consumerResume,\n      );\n      this.consumerResume.consumerResume = this.uiOverrideResolver.applyFunctionOverride(\n        'consumerResume',\n        originalConsumerResume,\n      );\n    }\n\n    // Apply addVideosGrid override\n    if (this.uiOverrideResolver.hasOverride('addVideosGrid')) {\n      const originalAddVideosGrid = this.addVideosGrid.addVideosGrid.bind(\n        this.addVideosGrid,\n      );\n      this.addVideosGrid.addVideosGrid = this.uiOverrideResolver.applyFunctionOverride(\n        'addVideosGrid',\n        originalAddVideosGrid,\n      );\n    }\n\n    // Apply prepopulateUserMedia override\n    if (this.uiOverrideResolver.hasOverride('prepopulateUserMedia')) {\n      const originalPrepopulateUserMedia = this.prepopulateUserMedia.prepopulateUserMedia.bind(\n        this.prepopulateUserMedia,\n      );\n      this.prepopulateUserMedia.prepopulateUserMedia = this.uiOverrideResolver.applyFunctionOverride(\n        'prepopulateUserMedia',\n        originalPrepopulateUserMedia,\n      );\n    }\n  }\n\n  ngOnInit() {\n    this.updateModernThemeDarkMode(this.resolvePreferredTheme());\n\n    // Initialize UI overrides if provided\n    if (this.uiOverrides) {\n      this.uiOverrideResolver.setOverrides(this.uiOverrides);\n    }\n\n    // Apply function overrides\n    this.initializeFunctionOverrides();\n\n    if (this.PrejoinPage) {\n      this.updatePrejoinPageComponent();\n    }\n\n    this.setupResizeListener();\n    if (this.validated) {\n      this.connectAndAddSocketMethods();\n    }\n\n    this.mainHeightWidthSubscription = this.mainHeightWidth.subscribe(() => {\n      this.updateMainVideoSize();\n    });\n\n    this.recordingSubscription = combineLatest([\n      this.recordPaused,\n      this.recordStarted,\n      this.recordStopped,\n      this.recordResumed,\n      this.recordingProgressTime,\n      this.showRecordButtons,\n      this.islevel,\n    ]).subscribe(\n      ([\n        recordPaused,\n        recordStarted,\n        recordStopped,\n        recordResumed,\n        recordingProgressTime,\n        showRecordButtons,\n        islevel,\n      ]) => {\n        if (\n          recordPaused ||\n          recordStarted ||\n          recordStopped ||\n          recordResumed ||\n          recordingProgressTime ||\n          showRecordButtons ||\n          islevel\n        ) {\n          this.updateRecordButtons();\n        }\n      },\n    );\n\n    this.ScreenboardSubscription = combineLatest([\n      this.shared,\n      this.componentSizes,\n      this.annotateScreenStream,\n    ]).subscribe(([shared, componentSizes]) => {\n      this.ScreenboardWidget = {\n        component: Screenboard,\n        inputs: {\n          customWidth: componentSizes.mainWidth,\n          customHeight: componentSizes.mainHeight,\n          parameters: this.mediaSFUParameters,\n          showAspect: shared,\n        },\n      };\n    });\n    this.validatedSubscription = this.validated.subscribe((validated) => {\n      if (validated) {\n        this.handleValidated();\n      }\n    });\n    this.islevelSubscription = this.islevel.subscribe((islevel) => {\n      if (islevel) {\n        this.updateCustomMenuButtons();\n      }\n    });\n    this.coHostSubscription = combineLatest([this.coHost, this.coHostResponsibility]).subscribe(\n      ([coHost, coHostResponsibility]) => {\n        if (coHost || coHostResponsibility) {\n          this.updateCustomMenuButtons();\n        }\n      },\n    );\n\n    // Subscribe to changes in BehaviorSubject and update the buttons accordingly\n    this.buttonSubscriptions.push(\n      this.micActive.subscribe((value) => {\n        this.updateButtonState('micActive', value);\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.videoActive.subscribe((value) => {\n        this.updateButtonState('videoActive', value);\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.screenShareActive.subscribe((value) => {\n        this.updateButtonState('screenShareActive', value);\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.showMessagesBadge.subscribe((value) => {\n        this.updateButtonState('showMessagesBadge', value);\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.totalReqWait.subscribe(() => {\n        this.updateButtonState('showMenuBadge', true);\n      }),\n    );\n\n    this.buttonSubscriptions.push(\n      this.participantsCounter.subscribe((value) => {\n        this.updateMenuParticipantsWidget(value);\n      }),\n    );\n\n    this.mediaSFUParameters = {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n  }\n\n  ngOnDestroy() {\n    window.removeEventListener('resize', this.handleResize);\n    window.removeEventListener('orientationchange', this.handleResize);\n    if (this.mainHeightWidthSubscription) {\n      this.mainHeightWidthSubscription.unsubscribe();\n    }\n    if (this.validatedSubscription) {\n      this.validatedSubscription.unsubscribe();\n    }\n    if (this.islevelSubscription) {\n      this.islevelSubscription.unsubscribe();\n    }\n    if (this.coHostSubscription) {\n      this.coHostSubscription.unsubscribe();\n    }\n    if (this.ScreenboardSubscription) {\n      this.ScreenboardSubscription.unsubscribe();\n    }\n    if (this.recordingSubscription) {\n      this.recordingSubscription.unsubscribe();\n    }\n  }\n\n  updateMainVideoSize = async () => {\n    if (!this.lock_screen.value && !this.shared.value) {\n      this.prepopulateUserMedia.prepopulateUserMedia({\n        name: this.hostLabel.value,\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n      });\n    } else {\n      if (!this.first_round.value) {\n        this.prepopulateUserMedia.prepopulateUserMedia({\n          name: this.hostLabel.value,\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n        });\n      }\n    }\n  };\n\n  async connectAndAddSocketMethods() {\n    this.mediaSFUParameters = {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n    const socket_ = await this.connect_Socket(this.apiUserName.value, this.apiToken.value);\n    if (socket_) {\n      this.updateSocket(socket_);\n    }\n  }\n\n  async handleValidated() {\n    this.updateAllVideoStreams([\n      { producerId: 'youyou', stream: undefined, id: 'youyou', name: 'youyou' },\n    ]);\n\n    this.updateStreamNames([{ id: 'youyou', name: 'youyou', producerId: '' }]);\n\n    if (this.validated.value) {\n\n      try {\n        if (!this.localUIMode.value) {\n          this.updateIsLoadingModalVisible(true);\n          await this.connectAndAddSocketMethods();\n        } else {\n          this.updateIsLoadingModalVisible(false);\n        }\n      } catch (error) {\n        console.log('error connectAndaAddSocketMethods', error);\n      }\n\n      this.startMeetingProgressTimer.startMeetingProgressTimer({\n        startTime: Date.now() / 1000,\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n      });\n\n      try {\n        if (this.sourceParameters !== null) {\n          const nextSourceParameters = {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          };\n          this.sourceParameters = nextSourceParameters;\n          if (this.updateSourceParameters) {\n            this.updateSourceParameters(nextSourceParameters);\n          }\n        }\n      } catch {\n        console.log('error updateSourceParameters');\n      }\n\n    }\n  }\n\n  @HostListener('window:resize')\n  @HostListener('window:orientationchange')\n  async handleResize() {\n    let fraction = 0;\n\n    if (\n      window.innerHeight < window.innerWidth &&\n      (this.eventType.value == 'webinar' || this.eventType.value == 'conference')\n    ) {\n      const currentHeight = window.innerHeight;\n      fraction = Number((40 / currentHeight).toFixed(3));\n      if (fraction != this.controlHeight.value) {\n        this.updateControlHeight(Number(fraction));\n      }\n    } else {\n      // Set default control button height for portrait mode or other event types\n      const currentHeight = window.innerHeight;\n      fraction = Number((40 / currentHeight).toFixed(3));\n      fraction = Number(fraction);\n      if (fraction != this.controlHeight.value) {\n        this.updateControlHeight(Number(fraction));\n      }\n    }\n\n    const dimensions = this.computeDimensionsMethod({\n      containerWidthFraction: 1,\n      containerHeightFraction: 1,\n      mainSize: this.mainHeightWidth.value,\n      doStack: true,\n      defaultFraction:\n        this.eventType.value == 'webinar' || this.eventType.value == 'conference'\n          ? 1 - fraction\n          : 1,\n    });\n\n    this.updateComponentSizes(dimensions);\n\n    const orientation = this.checkOrientation();\n    if (orientation == 'portrait') {\n      if (!this.isWideScreen.value) {\n        if (this.shareScreenStarted.value || this.shared.value) {\n          this.updateScreenForceFullDisplay(true);\n        }\n      }\n    }\n\n    // Updates the main grid view\n    await this.prepopulateUserMedia.prepopulateUserMedia({\n      name: this.hostLabel.value,\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n    });\n    // Updates the mini grid view\n    await this.onScreenChanges.onScreenChanges({\n      changed: true,\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n    });\n  }\n\n  async disconnectAllSockets(consume_sockets: ConsumeSocket[]): Promise<void> {\n    for (const socket of consume_sockets) {\n      try {\n        const ip = Object.keys(socket)[0];\n        await socket[ip].disconnect();\n      } catch (error) {\n        console.log(`Error disconnecting socket with IP: ${Object.keys(socket)[0]}`, error);\n      }\n    }\n  }\n\n  async closeAndReset() {\n    //close and clean up all sockets, modals,... and reset all states to initial values\n\n    this.updateIsMessagesModalVisible(false);\n    this.updateIsParticipantsModalVisible(false);\n    this.updateIsWaitingModalVisible(false);\n    this.updateIsRequestsModalVisible(false);\n    this.updateIsCoHostModalVisible(false);\n    this.updateIsSettingsModalVisible(false);\n    this.updateIsDisplaySettingsModalVisible(false);\n    this.updateIsMediaSettingsModalVisible(false);\n    this.updateIsMenuModalVisible(false);\n    this.updateIsShareEventModalVisible(false);\n    this.updateIsConfirmExitModalVisible(false);\n    await this.disconnectAllSockets(this.consume_sockets.value);\n    await this.updateStatesToInitialValues();\n    this.updateMeetingProgressTime('00:00:00');\n    this.updateMeetingElapsedTime(0);\n    this.updateRecordingProgressTime('00:00:00');\n    this.updateRecordElapsedTime(0);\n    this.updateShowRecordButtons(false);\n\n    this.updateIsConfigureWhiteboardModalVisible(false);\n    this.updateIsWhiteboardModalVisible(false);\n    this.updateIsMenuModalVisible(false);\n    this.updateIsRecordingModalVisible(false);\n    this.updateIsPollModalVisible(false);\n    this.updateIsBreakoutRoomsModalVisible(false);\n    this.updateIsBackgroundModalVisible(false);\n    this.updateIsLoadingModalVisible(false);\n    this.updateIsConfirmHereModalVisible(false);\n\n    await sleep({ ms: 500 });\n    this.updateValidated(false);\n    //if on web, reload the page\n    window.location.reload();\n  }\n\n  computeDimensionsMethod = ({\n    containerWidthFraction = 1,\n    containerHeightFraction = 1,\n    mainSize,\n    doStack = true,\n    defaultFraction,\n  }: {\n    containerWidthFraction?: number;\n    containerHeightFraction?: number;\n    mainSize: number;\n    doStack?: boolean;\n    defaultFraction: number;\n  }): ComponentSizes => {\n    const parentWidth = window.innerWidth * containerWidthFraction;\n    const parentHeight = window.innerHeight * containerHeightFraction * defaultFraction;\n    let isWideScreen = parentWidth >= 768;\n\n    if (!isWideScreen && parentWidth > 1.5 * parentHeight) {\n      isWideScreen = true;\n    }\n\n    this.updateIsWideScreen(isWideScreen);\n\n    const dimensions = this.calculateDimensions({\n      parentWidth,\n      parentHeight,\n      isWideScreen,\n      mainSize,\n      doStack,\n    });\n    return dimensions;\n  };\n\n  calculateDimensions({\n    parentWidth,\n    parentHeight,\n    isWideScreen,\n    mainSize,\n    doStack,\n  }: {\n    parentWidth: number;\n    parentHeight: number;\n    isWideScreen: boolean;\n    mainSize: number;\n    doStack: boolean;\n  }): ComponentSizes {\n    if (doStack) {\n      return isWideScreen\n        ? {\n          mainHeight: Math.floor(parentHeight),\n          otherHeight: Math.floor(parentHeight),\n          mainWidth: Math.floor((mainSize / 100) * parentWidth),\n          otherWidth: Math.floor(((100 - mainSize) / 100) * parentWidth),\n        }\n        : {\n          mainHeight: Math.floor((mainSize / 100) * parentHeight),\n          otherHeight: Math.floor(((100 - mainSize) / 100) * parentHeight),\n          mainWidth: Math.floor(parentWidth),\n          otherWidth: Math.floor(parentWidth),\n        };\n    } else {\n      return {\n        mainHeight: Math.floor(parentHeight),\n        otherHeight: Math.floor(parentHeight),\n        mainWidth: Math.floor(parentWidth),\n        otherWidth: Math.floor(parentWidth),\n      };\n    }\n  }\n\n  handleOrientationChange() {\n    window.addEventListener('resize', this.handleResize.bind(this));\n    window.addEventListener('orientationchange', this.handleResize.bind(this));\n  }\n\n  setupResizeListener() {\n    this.handleResize();\n  }\n\n  orientation = window.innerHeight > window.innerWidth ? 'portrait' : 'landscape';\n\n  async joinRoom(data: {\n    socket: Socket;\n    roomName: string;\n    islevel: string;\n    member: string;\n    sec: string;\n    apiUserName: string;\n  }): Promise<ResponseJoinRoom | null> {\n    const { socket, roomName, islevel, member, sec, apiUserName } = data;\n\n    try {\n      const response: ResponseJoinRoom | null = await this.joinRoomClient.joinRoomClient({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n      });\n\n      return response;\n    } catch (error) {\n      console.log('Error joining room:', error);\n      throw new Error('Failed to join the room. Please check your connection and try again.');\n    }\n  }\n\n  async join_Room({\n    socket,\n    roomName,\n    islevel,\n    member,\n    sec,\n    apiUserName,\n    isLocal = false,\n  }: {\n    socket: Socket;\n    roomName: string;\n    islevel: string;\n    member: string;\n    sec: string;\n    apiUserName: string;\n    isLocal?: boolean;\n  }): Promise<void> {\n    let data: ResponseJoinRoom | null;\n\n    if (!isLocal) {\n      data = await this.joinRoom({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n      });\n    } else {\n      const localData: ResponseJoinLocalRoom = await this.joinLocalRoom.joinLocalRoom({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n        parameters: {\n          showAlert:\n            this.showAlert ||\n            (() => {\n              console.log('showAlert not defined');\n            }),\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\n          connectSocket: this.socketManager.connectSocket,\n          connectLocalSocket: this.socketManager.connectLocalSocket,\n          updateSocket: this.updateSocket,\n          updateLocalSocket: this.updateLocalSocket,\n          updateValidated: this.updateValidated,\n          updateApiUserName: this.updateApiUserName,\n          updateApiToken: this.updateApiToken,\n          updateLink: this.updateLink,\n          updateRoomName: this.updateRoomName,\n          updateMember: this.updateMember,\n        },\n        checkConnect:\n          this.localLink.length > 0 &&\n          this.connectMediaSFU === true &&\n          !this.link.value.includes('mediasfu.com'),\n        localLink: this.localLink,\n        joinMediaSFURoom: this.joinMediaSFURoom,\n      });\n\n      data = await createResponseJoinRoom({ localRoom: localData });\n    }\n\n    const updateAndComplete = async (data: ResponseJoinRoom) => {\n      // Update room parameters\n      try {\n        // Check if roomRecvIPs is not empty\n        if (!data.roomRecvIPs || data.roomRecvIPs.length === 0) {\n          data.roomRecvIPs = ['none'];\n\n          if (\n            this.link.value !== \"\" &&\n            this.link.value.includes(\"mediasfu.com\") &&\n            !isLocal\n          ) {\n            // Community Edition Only\n            await this.receiveAllPipedTransports.receiveAllPipedTransports({\n              community: true,\n              nsock: this.getUpdatedAllParams().socket,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n        }\n\n\n        this.updateRoomParametersClient.updateRoomParametersClient({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n            data: data,\n          },\n        });\n\n        if (data.isHost) {\n          this.updateIslevel('2');\n        } else {\n          // Issue with isHost for local room\n          if (islevel !== '2') {\n            this.updateIslevel('1');\n          }\n        }\n\n        if (data.secureCode && data.secureCode !== '') {\n          this.updateAdminPasscode(data.secureCode);\n        }\n\n        if (data.rtpCapabilities) {\n          try {\n            const device_ = await this.createDeviceClient.createDeviceClient({\n              rtpCapabilities: data.rtpCapabilities,\n            });\n\n            if (device_) {\n              this.device.next(device_);\n            }\n          } catch (error) {\n            console.error('Error creating device:', error);\n          }\n        }\n      } catch (error) {\n        console.error('Error in updateAndComplete:', error);\n      }\n    };\n\n    if (data && data.success) {\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && isLocal) {\n        this.roomData.next(data);\n        return;\n      } else if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\n        // Update roomData\n        if (this.roomData.value) {\n          // Updating only the recording and meeting room parameters\n          this.roomData.value.recordingParams = data.recordingParams;\n          this.roomData.value.meetingRoomParams = data.meetingRoomParams;\n          this.roomData.next(this.roomData.value);\n        } else {\n          this.roomData.next(data);\n        }\n      } else {\n        // Update roomData\n        this.roomData.next(data);\n        if (!this.link.value.includes('mediasfu.com')) {\n          this.roomData.value!.meetingRoomParams = data.meetingRoomParams;\n        }\n      }\n\n      await updateAndComplete(data);\n    } else {\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\n        // Join local room only\n        if (this.roomData.value) {\n          await updateAndComplete(this.roomData.value);\n        }\n        return;\n      }\n\n      // Might be a wrong room name or room is full or other error; check reason in data object if available\n      try {\n        if (this.showAlert && data?.reason) {\n          this.showAlert({\n            message: data.reason,\n            type: 'danger',\n            duration: 3000,\n          });\n        }\n      } catch (error) {\n        /* handle error */\n      }\n    }\n  }\n\n\n  onParticipantsFilterChange = (value: string): void => {\n    if (value && value.length > 0) {\n      this.filteredParticipants.next(\n        this.participants.value.filter((participant) =>\n          participant.name.toLowerCase().includes(value.toLowerCase()),\n        ),\n      );\n      this.participantsCounter.next(this.filteredParticipants.value.length);\n    } else {\n      this.filteredParticipants.next(this.participants.value);\n      this.participantsCounter.next(this.participants.value.length);\n    }\n  };\n\n  updateStatesToInitialValues = async () => {\n    const initialValues = initialValuesState as { [key: string]: any };\n    const updateFunctions = this.getAllParams() as unknown as {\n      [key: string]: (value: any) => void;\n    };\n\n    for (const key in initialValues) {\n      if (Object.prototype.hasOwnProperty.call(initialValues, key)) {\n        const updateFunctionName = `update${key.charAt(0).toUpperCase() + key.slice(1)}`;\n        const updateFunction = updateFunctions[updateFunctionName];\n\n        if (typeof updateFunction === 'function') {\n          try {\n            updateFunction(initialValues[key]);\n          } catch {\n            /* handle error */\n          }\n        }\n      }\n    }\n  };\n\n  faRecordVinyl = faRecordVinyl;\n  faPlayCircle = faPlayCircle;\n  faPauseCircle = faPauseCircle;\n  faStopCircle = faStopCircle;\n  faDotCircle = faDotCircle;\n  faCog = faCog;\n  faUsers = faUsers;\n  faClock = faClock;\n  faUserPlus = faUserPlus;\n  faTools = faTools;\n  faDesktop = faDesktop;\n  faPoll = faPoll;\n  faUserFriends = faUserFriends;\n  faChalkboardTeacher = faChalkboardTeacher;\n  faMicrophone = faMicrophone;\n  faMicrophoneSlash = faMicrophoneSlash;\n  faVideo = faVideo;\n  faVideoSlash = faVideoSlash;\n  faPhone = faPhone;\n  faBars = faBars;\n  faComments = faComments;\n  faChartBar = faChartBar;\n\n  onCloseMenuModal = () => {\n    this.updateIsMenuModalVisible(false);\n  };\n\n  onEventSettingsClose = () => {\n    this.updateIsSettingsModalVisible(false);\n  };\n\n  onCoHostClose = () => {\n    this.updateIsCoHostModalVisible(false);\n  };\n\n  onMediaSettingsClose = () => {\n    this.updateIsMediaSettingsModalVisible(false);\n  };\n\n  onDisplaySettingsClose = () => {\n    this.updateIsDisplaySettingsModalVisible(false);\n  };\n\n  onPollClose = () => {\n    this.updateIsPollModalVisible(false);\n  };\n\n  onBreakoutRoomsClose = () => {\n    this.updateIsBreakoutRoomsModalVisible(false);\n  };\n\n  onConfigureWhiteboardClose = () => {\n    this.updateIsConfigureWhiteboardModalVisible(false);\n  };\n\n  onMessagesClose = () => {\n    this.updateIsMessagesModalVisible(false);\n  };\n\n  onRecordingClose = () => {\n    this.updateIsRecordingModalVisible(false);\n  };\n\n  onParticipantsClose = () => {\n    this.updateIsParticipantsModalVisible(false);\n  };\n\n  onBackgroundClose = () => {\n    this.updateIsBackgroundModalVisible(false);\n  };\n\n  onConfirmExitClose = () => {\n    this.updateIsConfirmExitModalVisible(false);\n  };\n\n  onConfirmHereClose = () => {\n    this.updateIsConfirmHereModalVisible(false);\n  };\n\n  onSuppressConfirmHere = () => {\n    this.suppressConfirmHereForSession = true;\n  };\n\n  onScreenboardClose = () => {\n    this.updateIsScreenboardModalVisible(false);\n  };\n\n  onShareEventClose = () => {\n    this.updateIsShareEventModalVisible(false);\n  };\n\n  onAlertHide = () => {\n    this.updateAlertVisible(false);\n  };\n\n  ScreenboardWidget = {\n    component: Screenboard,\n    inputs: {\n      customWidth: this.componentSizes.value.mainWidth,\n      customHeight: this.componentSizes.value.mainHeight,\n      parameters: this.mediaSFUParameters,\n      showAspect: this.shared.value,\n    },\n  };\n\n  recordTimerWidget = {\n    component: RecordTimerWidget,\n    injector: this.createInjector({ recordingProgressTime: this.recordingProgressTime.value }),\n  };\n\n  updateRecordTimerWidget = (\n    recordingProgressTime: string = this.recordingProgressTime.value,\n  ): { component: any; injector: Injector } => {\n    const recordTimerWidget = {\n      component: RecordTimerWidget,\n      injector: this.createInjector({ recordingProgressTime: recordingProgressTime }),\n    };\n\n    this.recordTimerWidget = { ...recordTimerWidget };\n\n    this.cdr.markForCheck();\n\n    return recordTimerWidget;\n  };\n\n  recordButtons: MainButtonAlt[] = [];\n\n  recordButtonsArray: MainButtonAlt[] = [\n    {\n      icon: this.faPlayCircle,\n      active: () => !this.recordPaused.value,\n      onPress: () =>\n        this.updateRecording.updateRecording({\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n        }),\n      activeColor: 'black',\n      inActiveColor: 'black',\n      alternateIcon: this.faPauseCircle,\n      show: () => true,\n    },\n    {\n      icon: this.faStopCircle,\n      active: () => false,\n      onPress: () =>\n        this.stopRecording.stopRecording({\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'black',\n      show: () => true,\n    },\n    {\n      customComponent: () => this.updateRecordTimerWidget(),\n      show: () => true,\n      active: () => false,\n    },\n    {\n      icon: this.faDotCircle,\n      active: () => false,\n      onPress: () => console.log('Status pressed'),\n      activeColor: 'black',\n      inActiveColor: () => (this.recordPaused.value ? 'yellow' : 'red'),\n      show: () => true,\n    },\n    {\n      icon: this.faCog,\n      active: () => false,\n      onPress: () =>\n        this.launchRecording.launchRecording({\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\n          showAlert: this.showAlert.bind(this),\n          stopLaunchRecord: this.stopLaunchRecord.value,\n          canLaunchRecord: this.canLaunchRecord.value,\n          recordingAudioSupport: this.recordingAudioSupport.value,\n          recordingVideoSupport: this.recordingVideoSupport.value,\n          updateCanRecord: this.updateCanRecord.bind(this),\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\n          recordStarted: this.recordStarted.value,\n          recordPaused: this.recordPaused.value,\n          localUIMode: this.localUIMode.value,\n        }),\n      activeColor: 'green',\n      inActiveColor: 'black',\n      show: () => true,\n    },\n  ];\n\n  async updateRecordButtons() {\n    const recordButtons = this.recordButtonsArray.map((button) => {\n      return {\n        ...button,\n        active: typeof button.active === 'function' ? button.active() : button.active,\n        show: typeof button.show === 'function' ? button.show() : button.show,\n        customComponent: button.customComponent\n          ? typeof button.customComponent === 'function'\n            ? button.customComponent()\n            : button.customComponent\n          : undefined,\n        activeColor:\n          typeof button.inActiveColor === 'function'\n            ? button.inActiveColor()\n            : button.inActiveColor,\n        inActiveColor:\n          typeof button.inActiveColor === 'function'\n            ? button.inActiveColor()\n            : button.inActiveColor,\n      };\n    });\n    this.recordButtons = [...recordButtons];\n    await this.updateMenuRecordWidget(recordButtons);\n    this.updateCustomMenuButtons();\n\n    this.cdr.markForCheck();\n  }\n\n  // Create instances of the custom widgets\n  menuWidget = {\n    component: MenuWidget,\n    injector: this.createInjector({\n      icon: this.faBars,\n      badgeValue: this.totalReqWait.value,\n      iconColor: 'black',\n      showBadge: true,\n    }),\n  };\n\n  messageWidget = {\n    component: MessageWidget,\n    injector: this.createInjector({\n      icon: this.faComments,\n      showBadge: this.showMessagesBadge.value,\n      badgeValue: 1,\n      iconColor: 'black',\n    }),\n  };\n\n  menuRecordWidget = {\n    component: MenuRecordWidget,\n    injector: this.createInjector({\n      buttons: this.recordButtons,\n      showAspect: true,\n      direction: 'horizontal',\n    }),\n  };\n\n  updateMenuRecordWidget = (recordButtons: MainButtonAlt[] = this.recordButtons): any => {\n    const menuRecordWidget = {\n      component: MenuRecordWidget,\n      injector: this.createInjector({\n        buttons: recordButtons,\n        showAspect: true,\n        direction: 'horizontal',\n      }),\n    };\n\n    this.menuRecordWidget = { ...menuRecordWidget };\n\n    this.cdr.markForCheck();\n\n    return menuRecordWidget;\n  };\n\n  menuParticipantsWidget = {\n    component: MenuParticipantsWidget,\n    injector: this.createInjector({\n      icon: this.faUsers,\n      participantsCounter: this.participantsCounter.value,\n      iconColor: 'black',\n    }),\n  };\n\n  updateMenuParticipantsWidget = (count: number = this.participantsCounter.value): any => {\n    const menuParticipantsWidget = {\n      component: MenuParticipantsWidget,\n      injector: this.createInjector({\n        icon: this.faUsers,\n        participantsCounter: count,\n        iconColor: 'black',\n      }),\n    };\n\n    this.menuParticipantsWidget = { ...menuParticipantsWidget };\n\n    this.cdr.markForCheck();\n\n    return menuParticipantsWidget;\n  };\n\n  customMenuButtonsArray: MainCustomButton[] = [\n    {\n      icon: this.faRecordVinyl,\n      text: 'Record',\n      action: () =>\n        this.launchRecording.launchRecording({\n          updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n          isRecordingModalVisible: this.isRecordingModalVisible.value,\n          showAlert: this.showAlert.bind(this),\n          stopLaunchRecord: this.stopLaunchRecord.value,\n          canLaunchRecord: this.canLaunchRecord.value,\n          recordingAudioSupport: this.recordingAudioSupport.value,\n          recordingVideoSupport: this.recordingVideoSupport.value,\n          updateCanRecord: this.updateCanRecord.bind(this),\n          updateClearedToRecord: this.updateClearedToRecord.bind(this),\n          recordStarted: this.recordStarted.value,\n          recordPaused: this.recordPaused.value,\n          localUIMode: this.localUIMode.value,\n        }),\n      show: () => !this.showRecordButtons.value && this.islevel.value == '2',\n    },\n    {\n      customComponent: () => this.updateMenuRecordWidget(),\n      show: () => this.showRecordButtons.value && this.islevel.value == '2',\n      action: () => console.log('record buttons pressed'),\n    },\n    {\n      icon: this.faCog,\n      text: 'Event Settings',\n      action: () =>\n        this.launchSettings.launchSettings({\n          updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\n          isSettingsModalVisible: this.isSettingsModalVisible.value,\n        }),\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faUsers,\n      text: 'Requests',\n      action: () =>\n        this.launchRequests.launchRequests({\n          updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\n          isRequestsModalVisible: this.isRequestsModalVisible.value,\n        }),\n      show: () =>\n        this.islevel.value == '2' ||\n        ((this.coHostResponsibility.value &&\n          this.coHost.value &&\n          this.coHost.value === this.member.value &&\n          !!this.coHostResponsibility?.value?.find((item) => item.name === 'media')?.value) ??\n          false) ||\n        false,\n    },\n    {\n      icon: this.faClock,\n      text: 'Waiting',\n      action: () =>\n        this.launchWaiting.launchWaiting({\n          updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\n          isWaitingModalVisible: this.isWaitingModalVisible.value,\n        }),\n      show: () =>\n        this.islevel.value == '2' ||\n        (this.coHostResponsibility.value &&\n          this.coHost.value &&\n          this.coHost.value === this.member.value &&\n          this.coHostResponsibility?.value?.find((item) => item.name === 'waiting')?.value ===\n          true) ||\n        false,\n    },\n    {\n      icon: this.faUserPlus,\n      text: 'Co-host',\n      action: () =>\n        this.launchCoHost.launchCoHost({\n          updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\n          isCoHostModalVisible: this.isCoHostModalVisible.value,\n        }),\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faTools,\n      text: 'Set Media',\n      action: () =>\n        this.launchMediaSettings.launchMediaSettings({\n          updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\n          isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\n          audioInputs: this.audioInputs.value,\n          videoInputs: this.videoInputs.value,\n          updateAudioInputs: this.updateAudioInputs.bind(this),\n          updateVideoInputs: this.updateVideoInputs.bind(this),\n        }),\n      show: () => true,\n    },\n    {\n      icon: this.faDesktop,\n      text: 'Display',\n      action: () =>\n        this.launchDisplaySettings.launchDisplaySettings({\n          updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\n          isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\n        }),\n      show: () => true,\n    },\n    {\n      icon: this.faPoll,\n      text: 'Poll',\n      action: () =>\n        this.launchPoll.launchPoll({\n          updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\n          isPollModalVisible: this.isPollModalVisible.value,\n        }),\n      show: () => true,\n    },\n    {\n      icon: this.faUserFriends,\n      text: 'Breakout Rooms',\n      action: () =>\n        this.launchBreakoutRooms.launchBreakoutRooms({\n          updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\n          isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\n        }),\n      show: () => this.islevel.value == '2',\n    },\n    {\n      icon: this.faChalkboardTeacher,\n      text: 'Whiteboard',\n      action: () =>\n        this.launchConfigureWhiteboard.launchConfigureWhiteboard({\n          updateIsConfigureWhiteboardModalVisible:\n            this.updateIsConfigureWhiteboardModalVisible.bind(this),\n          isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\n        }),\n      show: () => this.islevel.value == '2',\n    },\n  ];\n\n  customMenuButtons: MainCustomButton[] = [];\n\n  updateCustomMenuButtons() {\n    this.customMenuButtons = this.customMenuButtonsArray.map((button) => {\n      return {\n        ...button,\n        show: typeof button.show === 'function' ? button.show() : button.show,\n        customComponent: button.customComponent\n          ? typeof button.customComponent === 'function'\n            ? button.customComponent()\n            : button.customComponent\n          : undefined,\n      };\n    });\n  }\n\n  screenShareWidget = {\n    component: ScreenShareWidget,\n    injector: this.createInjector({ disabled: !this.screenShareActive.value }),\n  };\n\n  controlButtons: any[] = [\n    {\n      icon: this.faMicrophoneSlash,\n      alternateIcon: this.faMicrophone,\n      active: this.micActive.value,\n      onPress: () =>\n        this.clickAudio.clickAudio({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      disabled: this.audioSwitching.value,\n      show: true,\n    },\n    {\n      icon: this.faVideoSlash,\n      alternateIcon: this.faVideo,\n      active: this.videoActive.value,\n      onPress: () =>\n        this.clickVideo.clickVideo({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n            MediaStream,\n            MediaStreamTrack,\n            mediaDevices: navigator.mediaDevices,\n            device: this.device.value,\n            socket: this.socket.value,\n            showAlert: this.showAlert.bind(this),\n            checkPermission: this.checkPermission.checkPermission,\n            streamSuccessVideo: this.streamSuccessVideo.streamSuccessVideo,\n            hasCameraPermission: this.hasCameraPermission.value,\n            requestPermissionCamera: this.requestPermissionCamera.bind(this),\n            checkMediaPermission: 'web' !== 'web',\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      disabled: this.videoSwitching.value,\n      show: true,\n    },\n    {\n      //inverted active for inactive state\n      icon: faDesktop,\n      alternateIconComponent: this.screenShareWidget,\n      active: true,\n      onPress: () =>\n        this.clickScreenShare.clickScreenShare({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n            mediaDevices: navigator.mediaDevices,\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      disabled: false,\n      show: true,\n    },\n    {\n      icon: this.faPhone,\n      active: this.endCallActive.value,\n      onPress: () =>\n        this.launchConfirmExit.launchConfirmExit({\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      disabled: false,\n      show: true,\n    },\n    {\n      icon: this.faUsers,\n      active: this.participantsActive.value,\n      onPress: () =>\n        this.launchParticipants.launchParticipants({\n          updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\n          isParticipantsModalVisible: this.isParticipantsModalVisible.value,\n        }),\n      activeColor: 'black',\n      inActiveColor: 'black',\n      disabled: false,\n      show: true,\n    },\n    {\n      customComponent: this.menuWidget,\n      customName: 'Menu',\n      onPress: () =>\n        this.launchMenuModal.launchMenuModal({\n          updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\n          isMenuModalVisible: this.isMenuModalVisible.value,\n        }),\n      show: true,\n    },\n    {\n      customComponent: this.messageWidget,\n      customName: 'Messages',\n      onPress: () =>\n        this.launchMessages.launchMessages({\n          updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\n          isMessagesModalVisible: this.isMessagesModalVisible.value,\n        }),\n      show: true,\n    },\n  ];\n\n  async connect_Socket(\n    apiUserName: string,\n    token: string,\n    skipSockets: boolean = false\n  ): Promise<Socket | null> {\n\n    const socketDefault = this.socket.value;\n    const socketAlt =\n      this.connectMediaSFU && this.localSocket!.value && this.localSocket!.value.id\n        ? this.localSocket!.value\n        : socketDefault;\n\n    if (this.socket.value && this.socket.value.id) {\n      if (!skipSockets) {\n        // Event listeners on socketDefault\n        socketDefault.on('disconnect', async () => {\n          await this.disconnect.disconnect({\n            showAlert: this.showAlert.bind(this),\n            redirectURL: this.redirectURL.value,\n            onWeb: true,\n            updateValidated: this.updateValidated.bind(this),\n          });\n          if (this.videoAlreadyOn.value) {\n            await this.clickVideo.clickVideo({\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n          if (this.audioAlreadyOn.value) {\n            await this.clickAudio.clickAudio({\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n          await this.closeAndReset();\n        });\n\n        socketDefault.on('allMembers', async (membersData: AllMembersData) => {\n          if (membersData) {\n            await this.allMembers.allMembers({\n              apiUserName: apiUserName,\n              apiKey: '', //not recommended - use apiToken instead. Use for testing/development only\n              apiToken: token,\n              members: membersData.members,\n              requestss: membersData.requests ? membersData.requests : this.requestList.value,\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\n              coHostRes: membersData.coHostResponsibilities\n                ? membersData.coHostResponsibilities\n                : this.coHostResponsibility.value,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              consume_sockets: this.consume_sockets.value,\n            });\n          }\n        });\n\n        socketDefault.on('allMembersRest', async (membersData: AllMembersRestData) => {\n          if (membersData) {\n            await this.allMembersRest.allMembersRest({\n              apiUserName: apiUserName,\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\n              members: membersData.members,\n              apiToken: token,\n              settings: membersData.settings,\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\n              coHostRes: membersData.coHostResponsibilities\n                ? membersData.coHostResponsibilities\n                : this.coHostResponsibility.value,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              consume_sockets: this.consume_sockets.value,\n            });\n          }\n        });\n\n        socketDefault.on('userWaiting', async ({ name }: { name: string }) => {\n          await this.userWaiting.userWaiting({\n            name,\n            showAlert: this.showAlert.bind(this),\n            totalReqWait: this.totalReqWait.value,\n            updateTotalReqWait: this.updateTotalReqWait.bind(this),\n          });\n        });\n\n        socketDefault.on('personJoined', async ({ name }: { name: string }) => {\n          this.personJoined.personJoined({\n            name,\n            showAlert: this.showAlert.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'allWaitingRoomMembers',\n          async (waiting_data: AllWaitingRoomMembersData) => {\n            await this.allWaitingRoomMembers.allWaitingRoomMembers({\n              waitingParticipants: waiting_data.waitingParticipants\n                ? waiting_data.waitingParticipants\n                : waiting_data.waitingParticipantss\n                  ? waiting_data.waitingParticipantss\n                  : this.waitingRoomList.value,\n              updateTotalReqWait: this.updateTotalReqWait.bind(this),\n              updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\n            });\n          },\n        );\n\n        socketDefault.on('ban', async ({ name }: { name: string }) => {\n          await this.banParticipant.banParticipant({\n            name,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        });\n\n        socketDefault.on('updatedCoHost', async (cohost_data: UpdatedCoHostData) => {\n          await this.updatedCoHost.updatedCoHost({\n            coHost: cohost_data.coHost ? cohost_data.coHost : this.coHost.value,\n            coHostResponsibility: cohost_data.coHostResponsibilities\n              ? cohost_data.coHostResponsibilities\n              : this.coHostResponsibility.value,\n            youAreCoHost: this.youAreCoHost.value,\n            updateCoHost: this.updateCoHost.bind(this),\n            updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\n            updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\n            showAlert: this.showAlert.bind(this),\n            eventType: this.eventType.value,\n            islevel: this.islevel.value,\n            member: this.member.value,\n          });\n        });\n\n        socketDefault.on(\n          'participantRequested',\n          async ({ userRequest }: { userRequest: Request }) => {\n            await this.participantRequested.participantRequested({\n              userRequest,\n              requestList: this.requestList.value,\n              waitingRoomList: this.waitingRoomList.value,\n              updateTotalReqWait: this.updateTotalReqWait.bind(this),\n              updateRequestList: this.updateRequestList.bind(this),\n            });\n          },\n        );\n\n        socketDefault.on('screenProducerId', async ({ producerId }: { producerId: string }) => {\n          this.screenProducerId.screenProducerId({\n            producerId,\n            screenId: this.screenId.value,\n            membersReceived: this.membersReceived.value,\n            shareScreenStarted: this.shareScreenStarted.value,\n            deferScreenReceived: this.deferScreenReceived.value,\n            participants: this.participants.value,\n            updateScreenId: this.updateScreenId.bind(this),\n            updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\n            updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\n          });\n        });\n\n        socketDefault.on('updateMediaSettings', async ({ settings }: { settings: Settings }) => {\n          this.updateMediaSettings.updateMediaSettings({\n            settings,\n            updateAudioSetting: this.updateAudioSetting.bind(this),\n            updateVideoSetting: this.updateVideoSetting.bind(this),\n            updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\n            updateChatSetting: this.updateChatSetting.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'producer-media-paused',\n          async ({\n            producerId,\n            kind,\n            name,\n          }: {\n            producerId: string;\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\n            name: string;\n          }) => {\n            await this.producerMediaPaused.producerMediaPaused({\n              producerId,\n              kind,\n              name,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          },\n        );\n\n        socketDefault.on(\n          'producer-media-resumed',\n          async ({ kind, name }: { kind: 'audio'; name: string }) => {\n            await this.producerMediaResumed.producerMediaResumed({\n              kind,\n              name,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          },\n        );\n\n        socketDefault.on(\n          'producer-media-closed',\n          async ({\n            producerId,\n            kind,\n          }: {\n            producerId: string;\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\n          }) => {\n            if (producerId && kind) {\n              await this.producerMediaClosed.producerMediaClosed({\n                producerId,\n                kind,\n                parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              });\n            }\n          },\n        );\n\n        socketDefault.on(\n          'controlMediaHost',\n          async ({ type }: { type: 'video' | 'audio' | 'screenshare' | 'chat' | 'all' }) => {\n            await this.controlMediaHost.controlMediaHost({\n              type,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          },\n        );\n\n        socketDefault.on('meetingEnded', async () => {\n          await this.meetingEnded.meetingEnded({\n            showAlert: this.showAlert.bind(this),\n            redirectURL: this.redirectURL.value,\n            onWeb: true,\n            eventType: this.eventType.value,\n            updateValidated: this.updateValidated.bind(this),\n          });\n\n          if (this.videoAlreadyOn.value) {\n            await this.clickVideo.clickVideo({\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          }\n          if (this.audioAlreadyOn.value) {\n            await this.clickAudio.clickAudio({\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          }\n\n          await this.closeAndReset();\n        });\n\n        socketDefault.on('disconnectUserSelf', async () => {\n          await this.disconnectUserSelf.disconnectUserSelf({\n            socket: socketDefault,\n            member: this.member.value,\n            roomName: this.roomName.value,\n          });\n        });\n\n        socketDefault.on('receiveMessage', async ({ message }: { message: Message }) => {\n          await this.receiveMessage.receiveMessage({\n            message,\n            messages: this.messages.value,\n            participantsAll: this.participantsAll.value,\n            member: this.member.value,\n            eventType: this.eventType.value,\n            islevel: this.islevel.value,\n            coHost: this.coHost.value,\n            updateMessages: this.updateMessages.bind(this),\n            updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'meetingTimeRemaining',\n          async ({ timeRemaining }: { timeRemaining: number }) => {\n            await this.meetingTimeRemaining.meetingTimeRemaining({\n              timeRemaining,\n              showAlert: this.showAlert.bind(this),\n              eventType: this.eventType.value,\n            });\n          },\n        );\n\n        socketDefault.on('meetingStillThere', async () => {\n          if (this.suppressConfirmHereForSession) {\n            return;\n          }\n\n          this.meetingStillThere.meetingStillThere({\n            updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'updateConsumingDomains',\n          async ({ domains, alt_domains }: UpdateConsumingDomainsData) => {\n            await this.updateConsumingDomains.updateConsumingDomains({\n              domains,\n              alt_domains,\n              apiUserName,\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\n              apiToken: token,\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          },\n        );\n\n        socketDefault.on(\n          'hostRequestResponse',\n          ({ requestResponse }: HostRequestResponseData) => {\n            this.hostRequestResponse.hostRequestResponse({\n              requestResponse,\n              showAlert: this.showAlert.bind(this),\n              requestList: this.requestList.value,\n              updateRequestList: this.updateRequestList.bind(this),\n              updateMicAction: this.updateMicAction.bind(this),\n              updateVideoAction: this.updateVideoAction.bind(this),\n              updateScreenAction: this.updateScreenAction.bind(this),\n              updateChatAction: this.updateChatAction.bind(this),\n              updateAudioRequestState: this.updateAudioRequestState.bind(this),\n              updateVideoRequestState: this.updateVideoRequestState.bind(this),\n              updateScreenRequestState: this.updateScreenRequestState.bind(this),\n              updateChatRequestState: this.updateChatRequestState.bind(this),\n              updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\n              updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\n              updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\n              updateChatRequestTime: this.updateChatRequestTime.bind(this),\n              updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\n            });\n          },\n        );\n\n        socketDefault.on('pollUpdated', async (data: PollUpdatedData) => {\n          try {\n            await this.pollUpdated.pollUpdated({\n              data,\n              polls: this.polls.value,\n              poll: this.poll.value ? this.poll.value : ({} as Poll),\n              member: this.member.value,\n              islevel: this.islevel.value,\n              showAlert: this.showAlert.bind(this),\n              updatePolls: this.updatePolls.bind(this),\n              updatePoll: this.updatePoll.bind(this),\n              updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\n            });\n          } catch {\n            /* handle error */\n          }\n        });\n\n        socketDefault.on('breakoutRoomUpdated', async (data: BreakoutRoomUpdatedData) => {\n          try {\n            await this.breakoutRoomUpdated.breakoutRoomUpdated({\n              data,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          } catch {\n            /* handle error */\n          }\n        });\n\n      }\n\n      if (skipSockets) {\n        // Remove specific event listeners from socketDefault and socketAlt\n        const events = [\n          'roomRecordParams',\n          'startRecords',\n          'reInitiateRecording',\n          'RecordingNotice',\n          'timeLeftRecording',\n          'stoppedRecording',\n        ];\n        events.forEach((event) => {\n          socketDefault.off(event);\n          socketAlt.off(event);\n        });\n      }\n\n      socketAlt.on(\n        'roomRecordParams',\n        async ({ recordParams }: { recordParams: RecordParams }) => {\n          this.roomRecordParams.roomRecordParams({\n            recordParams,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        },\n      );\n\n      socketAlt.on('startRecords', async () => {\n        await this.startRecords.startRecords({\n          roomName: this.roomName.value,\n          member: this.member.value,\n          socket: socketAlt,\n        });\n      });\n\n      socketAlt.on('reInitiateRecording', async () => {\n        await this.reInitiateRecording.reInitiateRecording({\n          roomName: this.roomName.value,\n          member: this.member.value,\n          socket: socketAlt,\n          adminRestrictSetting: this.adminRestrictSetting.value,\n        });\n      });\n\n      socketAlt.on(\n        'RecordingNotice',\n        async ({ state, userRecordingParam, pauseCount, timeDone }: RecordingNoticeData) => {\n          await this.recordingNotice.RecordingNotice({\n            state,\n            userRecordingParam,\n            pauseCount,\n            timeDone,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        },\n      );\n\n      socketAlt.on('timeLeftRecording', async ({ timeLeft }: { timeLeft: number }) => {\n        this.timeLeftRecording.timeLeftRecording({\n          timeLeft,\n          showAlert: this.showAlert.bind(this),\n        });\n      });\n\n      socketAlt.on(\n        'stoppedRecording',\n        async ({ state, reason }: { state: string; reason: string }) => {\n          await this.stoppedRecording.stoppedRecording({\n            state,\n            reason,\n            showAlert: this.showAlert.bind(this),\n          });\n        },\n      );\n\n      if (this.localLink !== \"\" && socketDefault && !skipSockets) {\n        await this.join_Room({\n          socket: socketDefault,\n          roomName: this.roomName.value,\n          islevel: this.islevel.value,\n          member: this.member.value,\n          sec: token,\n          apiUserName: apiUserName,\n          isLocal: true,\n        });\n      }\n\n      // Check if localSocket has changed\n      const localChanged =\n        this.localSocket!.value && this.localSocket!.value.id && this.localSocket!.value.id !== socketAlt.id;\n\n\n      if (!skipSockets && localChanged) {\n        // Re-call connect_Socket with skipSockets = true\n        await this.connect_Socket(apiUserName, token, true);\n        await sleep({ ms: 1000 })\n        this.updateIsLoadingModalVisible(false);\n        return socketDefault;\n      } else {\n        if (this.link.value !== '' && this.link.value.includes('mediasfu.com')) {\n          // Token might be different for local room\n          const token = this.apiToken.value;\n          await this.join_Room({\n            socket:\n              this.connectMediaSFU && socketAlt && socketAlt.id ? socketAlt : socketDefault,\n            roomName: this.roomName.value,\n            islevel: this.islevel.value,\n            member: this.member.value,\n            sec: token,\n            apiUserName: apiUserName,\n          });\n        }\n\n        await this.receiveRoomMessages.receiveRoomMessages({\n          socket: socketDefault,\n          roomName: this.roomName.value,\n          updateMessages: this.updateMessages.bind(this),\n        });\n\n        if (!skipSockets) {\n          await this.prepopulateUserMedia.prepopulateUserMedia({\n            name: this.hostLabel.value,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        }\n\n        return socketDefault;\n      }\n    } else {\n      return null;\n    }\n  }\n}\n","import {\n  Component,\n  HostListener,\n  Injector,\n  ChangeDetectorRef,\n  Input,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CookieService } from 'ngx-cookie-service';\nimport { MediasfuUICustomOverrides } from '../../@types/ui-overrides.types';\nimport { UIOverrideResolverService } from '../../services/ui-override-resolver.service';\nimport { WithOverrideDirective } from '../../directives/with-override.directive';\nimport { BehaviorSubject, Subscription, combineLatest } from 'rxjs';\nimport { Socket } from 'socket.io-client';\nimport {\n  faMicrophoneSlash,\n  faVideoSlash,\n  faPhone,\n  faComments,\n  faShareAlt,\n  faSync,\n  faVideo,\n  faMicrophone,\n  faSun,\n  faMoon,\n} from '@fortawesome/free-solid-svg-icons';\n\nimport { initialValuesState } from '../../methods/utils/initial-values.util';\n\n// Components for display\nimport { MainAspectComponent } from '../display-components/main-aspect-component/main-aspect-component.component';\nimport { ControlButtonsComponentTouch } from '../display-components/control-buttons-component-touch/control-buttons-component-touch.component';\nimport { OtherGridComponent } from '../display-components/other-grid-component/other-grid-component.component';\nimport { MainScreenComponent } from '../display-components/main-screen-component/main-screen-component.component';\nimport { MainContainerComponent } from '../display-components/main-container-component/main-container-component.component';\nimport { ModernAlertComponent } from '../../modern/display-components/modern-alert.component';\nimport { ModernLoadingModalComponent } from '../../modern/display-components/modern-loading-modal.component';\nimport { ModernConfirmExitModalComponent } from '../../modern/modal-components/modern-confirm-exit-modal.component';\nimport { ModernConfirmHereModalComponent } from '../../modern/modal-components/modern-confirm-here-modal.component';\nimport { ModernMessagesModalComponent } from '../../modern/modal-components/modern-messages-modal.component';\nimport { ModernShareEventModalComponent } from '../../modern/modal-components/modern-share-event-modal.component';\nimport { ModernEventSettingsModalComponent } from '../../modern/modal-components/modern-event-settings-modal.component';\nimport {\n  WelcomePage,\n  WelcomePageOptions,\n} from '../misc-components/welcome-page/welcome-page.component';\n\n// Pagination and display of media\nimport { FlexibleGrid } from '../display-components/flexible-grid/flexible-grid.component';\nimport { AudioGrid } from '../display-components/audio-grid/audio-grid.component';\n\nimport { MessageWidget } from '../display-components/control-widgets/message-widget.component';\n\nimport {\n  ButtonTouch,\n  ResponseJoinRoom,\n  ResponseJoinLocalRoom,\n  CoHostResponsibility,\n  EventType,\n  Participant,\n  ConsumeSocket,\n  MeetingRoomParams,\n  VidCons,\n  HParamsType,\n  VParamsType,\n  ScreenParamsType,\n  AParamsType,\n  UserRecordingParams,\n  Stream,\n  AudioDecibels,\n  ScreenState,\n  GridSizes,\n  CustomMediaComponent,\n  Message,\n  WaitingRoomParticipant,\n  ComponentSizes,\n  Transport as TransportType,\n  Shape,\n  Poll,\n  BreakoutParticipant,\n  WhiteboardUser,\n  Request,\n  AllMembersData,\n  AllMembersRestData,\n  SeedData,\n  UpdateConsumingDomainsData,\n  PreJoinPageOptions,\n  CreateMediaSFURoomOptions,\n  JoinMediaSFURoomOptions,\n  JoinRoomOnMediaSFUType,\n  CreateRoomOnMediaSFUType,\n} from '../../@types/types';\nimport { createResponseJoinRoom } from '../../methods/utils/create-response-join-room.util';\n\n// Import methods for control\nimport { LaunchMessages } from '../../methods/message-methods/launch-messages.service';\nimport { LaunchConfirmExit } from '../../methods/exit-methods/launch-confirm-exit.service';\n\n// Mediasfu functions -- examples\nimport { SocketManager } from '../../sockets/socket-manager.service';\nimport { JoinRoomClient } from '../../producer-client/producer-client-emits/join-room-client.service';\nimport { JoinLocalRoom } from '../../producers/producer-emits/join-local-room.service';\nimport { UpdateRoomParametersClient } from '../../producer-client/producer-client-emits/update-room-parameters-client.service';\nimport { CreateDeviceClient } from '../../producer-client/producer-client-emits/create-device-client.service';\n\nimport { SwitchVideoAlt } from '../../methods/stream-methods/switch-video-alt.service';\nimport { ClickVideo } from '../../methods/stream-methods/click-video.service';\nimport { ClickAudio } from '../../methods/stream-methods/click-audio.service';\nimport { ClickScreenShare } from '../../methods/stream-methods/click-screen-share.service';\nimport { StreamSuccessVideo } from '../../consumers/stream-success-video.service';\nimport { StreamSuccessAudio } from '../../consumers/stream-success-audio.service';\nimport { StreamSuccessScreen } from '../../consumers/stream-success-screen.service';\nimport { StreamSuccessAudioSwitch } from '../../consumers/stream-success-audio-switch.service';\nimport { CheckPermission } from '../../consumers/check-permission.service';\n\n// Mediasfu consumer functions\nimport { UpdateMiniCardsGrid } from '../../consumers/update-mini-cards-grid.service';\nimport { MixStreams } from '../../consumers/mix-streams.service';\nimport { DispStreams } from '../../consumers/disp-streams.service';\nimport { StopShareScreen } from '../../consumers/stop-share-screen.service';\nimport { CheckScreenShare } from '../../consumers/check-screen-share.service';\nimport { StartShareScreen } from '../../consumers/start-share-screen.service';\nimport { RequestScreenShare } from '../../consumers/request-screen-share.service';\nimport { ReorderStreams } from '../../consumers/reorder-streams.service';\nimport { PrepopulateUserMedia } from '../../consumers/prepopulate-user-media.service';\nimport { GetVideos } from '../../consumers/get-videos.service';\nimport { RePort } from '../../consumers/re-port.service';\nimport { Trigger } from '../../consumers/trigger.service';\nimport { ConsumerResume } from '../../consumers/consumer-resume.service';\nimport { ConnectSendTransportAudio } from '../../consumers/connect-send-transport-audio.service';\nimport { ConnectSendTransportVideo } from '../../consumers/connect-send-transport-video.service';\nimport { ConnectSendTransportScreen } from '../../consumers/connect-send-transport-screen.service';\nimport { ProcessConsumerTransports } from '../../consumers/process-consumer-transports.service';\nimport { ResumePauseStreams } from '../../consumers/resume-pause-streams.service';\nimport { Readjust } from '../../consumers/readjust.service';\nimport { CheckGrid } from '../../consumers/check-grid.service';\nimport { GetEstimate } from '../../consumers/get-estimate.service';\nimport { CalculateRowsAndColumns } from '../../consumers/calculate-rows-and-columns.service';\nimport { AddVideosGrid } from '../../consumers/add-videos-grid.service';\nimport { OnScreenChanges } from '../../consumers/on-screen-changes.service';\nimport { sleep } from '../../methods/utils/sleep.util';\nimport { ChangeVids } from '../../consumers/change-vids.service';\nimport { CompareActiveNames } from '../../consumers/compare-active-names.service';\nimport { CompareScreenStates } from '../../consumers/compare-screen-states.service';\nimport { CreateSendTransport } from '../../consumers/create-send-transport.service';\nimport { ResumeSendTransportAudio } from '../../consumers/resume-send-transport-audio.service';\nimport { ReceiveAllPipedTransports } from '../../consumers/receive-all-piped-transports.service';\nimport { DisconnectSendTransportVideo } from '../../consumers/disconnect-send-transport-video.service';\nimport { DisconnectSendTransportAudio } from '../../consumers/disconnect-send-transport-audio.service';\nimport { DisconnectSendTransportScreen } from '../../consumers/disconnect-send-transport-screen.service';\nimport { ConnectSendTransport } from '../../consumers/connect-send-transport.service';\nimport { GetPipedProducersAlt } from '../../consumers/get-piped-producers-alt.service';\nimport { SignalNewConsumerTransport } from '../../consumers/signal-new-consumer-transport.service';\nimport { ConnectRecvTransport } from '../../consumers/connect-recv-transport.service';\nimport { ReUpdateInter } from '../../consumers/re-update-inter.service';\nimport { UpdateParticipantAudioDecibels } from '../../consumers/update-participant-audio-decibels.service';\nimport { CloseAndResize } from '../../consumers/close-and-resize.service';\nimport { AutoAdjust } from '../../consumers/auto-adjust.service';\nimport { SwitchUserVideoAlt } from '../../consumers/switch-user-video-alt.service';\nimport { SwitchUserVideo } from '../../consumers/switch-user-video.service';\nimport { SwitchUserAudio } from '../../consumers/switch-user-audio.service';\nimport { ReceiveRoomMessages } from '../../consumers/receive-room-messages.service';\nimport { FormatNumber } from '../../methods/utils/format-number.service';\nimport { ConnectIps } from '../../consumers/connect-ips.service';\nimport { ConnectLocalIps } from '../../consumers/connect-local-ips.service';\n\n\n// Utility imports for meeting and recording functionality\nimport { StartMeetingProgressTimer } from '../../methods/utils/meeting-timer/start-meeting-progress-timer.service';\n\n// Socket methods for participant and meeting management\nimport { ProducerMediaPaused } from '../../producers/socket-receive-methods/producer-media-paused.service';\nimport { ProducerMediaResumed } from '../../producers/socket-receive-methods/producer-media-resumed.service';\nimport { ProducerMediaClosed } from '../../producers/socket-receive-methods/producer-media-closed.service';\nimport { MeetingEnded } from '../../producers/socket-receive-methods/meeting-ended.service';\nimport { DisconnectUserSelf } from '../../producers/socket-receive-methods/disconnect-user-self.service';\nimport { ReceiveMessage } from '../../producers/socket-receive-methods/receive-message.service';\nimport { MeetingTimeRemaining } from '../../producers/socket-receive-methods/meeting-time-remaining.service';\nimport { MeetingStillThere } from '../../producers/socket-receive-methods/meeting-still-there.service';\n\nimport { GetDomains } from '../../producers/socket-receive-methods/get-domains.service';\nimport { UpdateConsumingDomains } from '../../producers/socket-receive-methods/update-consuming-domains.service';\nimport { AllMembers } from '../../producers/socket-receive-methods/all-members.service';\nimport { AllMembersRest } from '../../producers/socket-receive-methods/all-members-rest.service';\nimport { Disconnect } from '../../producers/socket-receive-methods/disconnect.service';\n\nimport { CaptureCanvasStream } from '../../methods/whiteboard-methods/capture-canvas-stream.service';\nimport { ResumePauseAudioStreams } from '../../consumers/resume-pause-audio-streams.service';\nimport { ProcessConsumerTransportsAudio } from '../../consumers/process-consumer-transports-audio.service';\n\nimport { types } from 'mediasoup-client';\ntype Device = types.Device;\ntype Producer = types.Producer;\ntype ProducerOptions = types.ProducerOptions;\ntype RtpCapabilities = types.RtpCapabilities;\ntype Transport = types.Transport;;\nimport { SelfieSegmentation } from '@mediapipe/selfie_segmentation';\n\nexport type MediasfuChatOptions = {\n  PrejoinPage?: (options: PreJoinPageOptions | WelcomePageOptions) => HTMLElement;\n  localLink?: string;\n  connectMediaSFU?: boolean;\n  credentials?: { apiUserName: string; apiKey: string };\n  useLocalUIMode?: boolean;\n  seedData?: SeedData;\n  useSeed?: boolean;\n  imgSrc?: string;\n  sourceParameters?: { [key: string]: any };\n  updateSourceParameters?: (data: { [key: string]: any }) => void;\n  returnUI?: boolean;\n  noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\n  joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n  createMediaSFURoom?: CreateRoomOnMediaSFUType;\n};\n\n/**\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.\n *\n * @component\n * @selector app-mediasfu-chat\n * @standalone true\n * @imports [RouterOutlet, CommonModule, AlertComponent, AudioGrid, ControlButtonsComponentTouch, FlexibleGrid, LoadingModal, ConfirmExitModal, MessagesModal, ConfirmHereModal, ShareEventModal, WelcomePage, MainAspectComponent, MainContainerComponent, MainScreenComponent, OtherGridComponent, MessageWidget]\n *\n * @template\n * The template structure:\n * - Conditional rendering of a PrejoinPage or WelcomePage for introductory or pre-session screens.\n * - Main content area with nested components for grid layouts, flexible video, and audio grids.\n * - Modals for user interactions, including participant management, event settings, breakout rooms, whiteboarding, and media settings.\n *\n * @input {any} PrejoinPage - Component for the prejoin page, defaults to `WelcomePage`.\n * @input {MediasfuChatOptions} options - Configuration options for the component.\n * @input {boolean} connectMediaSFU - Flag to enable/disable connection to the MediaSFU server.\n * @input {string} localLink - Local link for the Community Edition server.\n * @input {{ apiUserName: string; apiKey: string }} credentials - API credentials for secure access.\n * @input {boolean} useLocalUIMode - Flag to toggle local UI settings.\n * @input {SeedData} seedData - Seed data for initializing the component with specific configurations.\n * @input {boolean} useSeed - Enable/disable use of seed data.\n * @input {string} imgSrc - URL for branding images or logos.\n * @input {object} sourceParameters - Additional parameters for the source.\n * @input {Function} updateSourceParameters - Function to update the source parameters.\n * @input {boolean} returnUI - Flag to return the UI elements.\n * @input {CreateMediaSFURoomOptions | JoinMediaSFURoomOptions} noUIPreJoinOptions - Options for the prejoin page without UI.\n * @input {JoinRoomOnMediaSFUType} joinMediaSFURoom - Function to join a room on MediaSFU.\n * @input {CreateRoomOnMediaSFUType} createMediaSFURoom - Function to create a room on MediaSFU.\n * @input {any} customVideoCard - Custom component to replace the default VideoCard component.\n * @input {any} customAudioCard - Custom component to replace the default AudioCard component.\n * @input {any} customMiniCard - Custom component to replace the default MiniCard component.\n * @input {any} customMainComponent - Custom component that provides complete control over the main UI, bypassing default MediaSFU styling.\n *\n * @property {string} title - The title of the component, defaults to \"MediaSFU-Chat\".\n *\n * @styles\n * Customizable styles for layout and overflow.\n *\n * @providers [CookieService] - Service for managing cookies within the component.\n *\n * @constructor\n * @class MediasfuChat\n * @implements OnInit, OnDestroy\n *\n * @method ngOnInit - Initializes configurations and parameters.\n * @method ngOnDestroy - Handles cleanup and removal of event listeners or intervals.\n *\n * @example\n * ```html\n * <app-mediasfu-chat\n *   [PrejoinPage]=\"CustomPrejoinComponent\"\n *   [localLink]=\"'https://localhost:3000'\"\n *   [connectMediaSFU]=\"true\"\n *   [credentials]=\"{ apiUserName: 'username', apiKey: 'apikey' }\"\n *   [useLocalUIMode]=\"true\"\n *   [seedData]=\"seedDataObject\"\n *   [useSeed]=\"true\"\n *   [imgSrc]=\"'https://example.com/logo.png'\"\n *   [sourceParameters]=\"{ source: 'camera', width: 640, height: 480 }\"\n *   [updateSourceParameters]=\"updateSourceParameters\"\n *   [returnUI]=\"true\"\n *   [noUIPreJoinOptions]=\"{ roomName: 'room1', userName: 'user1' }\"\n *   [joinMediaSFURoom]=\"joinMediaSFURoom\"\n *   [createMediaSFURoom]=\"createMediaSFURoom\"\n *   [customVideoCard]=\"CustomVideoCardComponent\"\n *   [customAudioCard]=\"CustomAudioCardComponent\"\n *   [customMiniCard]=\"CustomMiniCardComponent\"\n *   [customMainComponent]=\"CustomMainComponent\">\n * </app-mediasfu-chat>\n * ```\n */\n\n\n@Component({\n  selector: 'app-mediasfu-chat',\n  imports: [\n    CommonModule,\n    WithOverrideDirective,\n    ModernAlertComponent,\n    AudioGrid,\n    ControlButtonsComponentTouch,\n    FlexibleGrid,\n    ModernLoadingModalComponent,\n    ModernConfirmExitModalComponent,\n    ModernMessagesModalComponent,\n    ModernConfirmHereModalComponent,\n    ModernShareEventModalComponent,\n    ModernEventSettingsModalComponent,\n\n    MainAspectComponent,\n    MainContainerComponent,\n    MainScreenComponent,\n    OtherGridComponent,\n\n  ],\n  template: `\n    <!-- Custom Main Component (if provided) - full control over styling -->\n    <ng-container *ngIf=\"customMainComponent && validated.value\">\n      <ng-container\n        *ngComponentOutlet=\"\n          customMainComponent.component || customMainComponent;\n          injector: customMainComponent.injector\n        \"\n      >\n      </ng-container>\n    </ng-container>\n\n    <!-- Default MediaSFU wrapper with standard styling -->\n    <div\n      *ngIf=\"!customMainComponent\"\n      class=\"MediaSFU\"\n      [ngStyle]=\"containerStyle\"\n    >\n      <ng-container *ngIf=\"!validated.value; else mainContent\">\n        <ng-container\n          *ngComponentOutlet=\"\n            PrejoinPageComponent.component;\n            injector: PrejoinPageComponent.injector\n          \"\n        >\n        </ng-container>\n      </ng-container>\n\n      <ng-template #mainContent>\n        <!-- Default Main Component -->\n        <ng-container *ngIf=\"returnUI\">\n        <app-main-container-component\n          *appWithOverride=\"\n            'mainContainer';\n            default: MainContainerComponentRef;\n            props: mainContainerOverrideProps\n          \"\n        >\n          <app-main-aspect-component\n            *appWithOverride=\"\n              'mainAspect';\n              default: MainAspectComponentRef;\n              props: mainAspectOverrideProps\n            \"\n            [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n            [defaultFraction]=\"1 - controlHeight.value\"\n            [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\n            [updateIsWideScreen]=\"updateIsWideScreen\"\n            [updateIsMediumScreen]=\"updateIsMediumScreen\"\n            [updateIsSmallScreen]=\"updateIsSmallScreen\"\n          >\n            <app-main-screen-component\n              *appWithOverride=\"\n                'mainScreen';\n                default: MainScreenComponentRef;\n                props: mainScreenOverrideProps\n              \"\n              [doStack]=\"true\"\n              [mainSize]=\"mainHeightWidth.value\"\n              [defaultFraction]=\"1 - controlHeight.value\"\n              [showControls]=\"eventType.value === 'webinar' || eventType.value === 'conference'\"\n              [updateComponentSizes]=\"updateComponentSizes\"\n            >\n              <!-- MainGridComponent removed -->\n\n              <!-- OtherGridComponent -->\n              <app-other-grid-component\n                *appWithOverride=\"\n                  'otherGrid';\n                  default: OtherGridComponentRef;\n                  props: otherGridOverrideProps\n                \"\n                [height]=\"componentSizes.value.otherHeight\"\n                [width]=\"componentSizes.value.otherWidth\"\n                [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n                [showAspect]=\"mainHeightWidth.value !== 100\"\n                [timeBackgroundColor]=\"recordState.value\"\n                [showTimer]=\"mainHeightWidth.value === 0\"\n                [meetingProgressTime]=\"meetingProgressTime.value\"\n              >\n                <!-- AudioGrid -->\n                <ng-container\n                  *appWithOverride=\"\n                    'audioGrid';\n                    default: AudioGridRef;\n                    props: audioGridOverrideProps\n                  \"\n                >\n                  <app-audio-grid [componentsToRender]=\"audioOnlyStreams.value\"></app-audio-grid>\n                </ng-container>\n\n                <!-- Control Buttons for Chat -->\n                <ng-container\n                  *appWithOverride=\"\n                    'controlButtonsTouch';\n                    default: ControlButtonsComponentTouchRef;\n                    props: controlButtonsTouchOverrideProps\n                  \"\n                >\n                  <app-control-buttons-component-touch\n                    [buttons]=\"controlChatButtons\"\n                    [position]=\"'right'\"\n                    [location]=\"'bottom'\"\n                    [direction]=\"'vertical'\"\n                    [showAspect]=\"eventType.value === 'chat'\"\n                  ></app-control-buttons-component-touch>\n                </ng-container>\n\n                <!-- Flexible Grid -->\n                <app-flexible-grid\n                  *appWithOverride=\"\n                    'flexibleGrid';\n                    default: FlexibleGridRef;\n                    props: flexibleGridOverrideProps\n                  \"\n                  [customWidth]=\"gridSizes.value.gridWidth!\"\n                  [customHeight]=\"gridSizes.value.gridHeight!\"\n                  [rows]=\"gridRows.value\"\n                  [columns]=\"gridCols.value\"\n                  [componentsToRender]=\"otherGridStreams.value[0]\"\n                  [backgroundColor]=\"'rgba(217, 227, 234, 0.99)'\"\n                ></app-flexible-grid>\n              </app-other-grid-component>\n            </app-main-screen-component>\n          </app-main-aspect-component>\n\n          <!-- SubAspectComponent removed -->\n          </app-main-container-component>\n        </ng-container>\n      </ng-template>\n    </div>\n\n    <!-- Modals and alerts (only available when using default UI, not custom components) -->\n    <ng-container *ngIf=\"returnUI && !customMainComponent\">\n      <app-messages-modal\n        *appWithOverride=\"\n          'messagesModal';\n          default: MessagesModalRef;\n          props: messagesModalOverrideProps\n        \"\n        [backgroundColor]=\"\n          eventType.value === 'webinar' || eventType.value === 'conference'\n            ? '#f5f5f5'\n            : 'rgba(255, 255, 255, 0.25)'\n        \"\n        [isMessagesModalVisible]=\"isMessagesModalVisible.value\"\n        [onMessagesClose]=\"onMessagesClose\"\n        [messages]=\"messages.value\"\n        [eventType]=\"eventType.value\"\n        [member]=\"member.value\"\n        [islevel]=\"islevel.value\"\n        [coHostResponsibility]=\"coHostResponsibility.value\"\n        [coHost]=\"coHost.value\"\n        [startDirectMessage]=\"startDirectMessage.value\"\n        [directMessageDetails]=\"directMessageDetails.value\"\n        [updateStartDirectMessage]=\"updateStartDirectMessage\"\n        [updateDirectMessageDetails]=\"updateDirectMessageDetails\"\n        [showAlert]=\"showAlert\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [chatSetting]=\"chatSetting.value\"\n      ></app-messages-modal>\n\n      <app-confirm-exit-modal\n        *appWithOverride=\"\n          'confirmExitModal';\n          default: ConfirmExitModalRef;\n          props: confirmExitModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\n        [isConfirmExitModalVisible]=\"isConfirmExitModalVisible.value\"\n        [onConfirmExitClose]=\"onConfirmExitClose\"\n        [position]=\"'center'\"\n        [member]=\"member.value\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [islevel]=\"islevel.value\"\n      ></app-confirm-exit-modal>\n\n      <app-confirm-here-modal\n        *appWithOverride=\"\n          'confirmHereModal';\n          default: ConfirmHereModalRef;\n          props: confirmHereModalOverrideProps\n        \"\n        [backgroundColor]=\"'rgba(181, 233, 229, 0.97)'\"\n        [isConfirmHereModalVisible]=\"isConfirmHereModalVisible.value\"\n        [onConfirmHereClose]=\"onConfirmHereClose\"\n        [onSuppressConfirmHere]=\"onSuppressConfirmHere\"\n        [member]=\"member.value\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n      ></app-confirm-here-modal>\n\n      <app-share-event-modal\n        *appWithOverride=\"\n          'shareEventModal';\n          default: ShareEventModalRef;\n          props: shareEventModalOverrideProps\n        \"\n        [isShareEventModalVisible]=\"isShareEventModalVisible.value\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n        [onShareEventClose]=\"onShareEventClose\"\n        [roomName]=\"roomName.value\"\n        [islevel]=\"islevel.value\"\n        [adminPasscode]=\"adminPasscode.value\"\n        [eventType]=\"eventType.value\"\n        [localLink]=\"localLink\"\n      ></app-share-event-modal>\n\n      <app-event-settings-modal\n        *appWithOverride=\"\n          'eventSettingsModal';\n          default: EventSettingsModalRef;\n          props: eventSettingsModalOverrideProps\n        \"\n        [isEventSettingsModalVisible]=\"isSettingsModalVisible.value\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n        [onEventSettingsClose]=\"onEventSettingsClose\"\n        [audioSetting]=\"audioSetting.value\"\n        [videoSetting]=\"videoSetting.value\"\n        [screenshareSetting]=\"screenshareSetting.value\"\n        [chatSetting]=\"chatSetting.value\"\n        [updateAudioSetting]=\"updateAudioSetting\"\n        [updateVideoSetting]=\"updateVideoSetting\"\n        [updateScreenshareSetting]=\"updateScreenshareSetting\"\n        [updateChatSetting]=\"updateChatSetting\"\n        [updateIsSettingsModalVisible]=\"updateIsSettingsModalVisible\"\n        [roomName]=\"roomName.value\"\n        [socket]=\"socket.value\"\n        [showAlert]=\"showAlert\"\n      ></app-event-settings-modal>\n\n      <app-modern-alert-component\n        *appWithOverride=\"\n          'alert';\n          default: AlertComponentRef;\n          props: alertOverrideProps\n        \"\n        [visible]=\"alertVisible.value\"\n        [message]=\"alertMessage.value\"\n        [type]=\"alertType.value\"\n        [position]=\"alertPosition.value\"\n        [duration]=\"alertDuration.value\"\n        [onHide]=\"onAlertHide\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n      ></app-modern-alert-component>\n\n      <app-modern-loading-modal\n        *appWithOverride=\"\n          'loadingModal';\n          default: LoadingModalRef;\n          props: loadingModalOverrideProps\n        \"\n        [isVisible]=\"isLoadingModalVisible.value\"\n        [isDarkMode]=\"modernThemeDarkMode.value\"\n      ></app-modern-loading-modal>\n    </ng-container>\n\n    <!-- Prejoin page for custom component (when not validated) -->\n    <ng-container *ngIf=\"customMainComponent && !validated.value\">\n      <ng-container\n        *ngComponentOutlet=\"\n          PrejoinPageComponent.component;\n          injector: PrejoinPageComponent.injector\n        \"\n      >\n      </ng-container>\n    </ng-container>\n  `,\n  styles: [\n    `\n      .MediaSFU {\n        height: 100vh;\n        width: 100vw;\n        max-width: 100vw;\n        max-height: 100vh;\n        overflow: hidden;\n      }\n    `,\n  ],\n  providers: [CookieService]\n})\nexport class MediasfuChat implements OnInit, OnDestroy {\n  @Input()\n  PrejoinPage: any = WelcomePage;\n  @Input() localLink = '';\n  @Input() connectMediaSFU = true;\n  @Input() credentials: { apiUserName: string; apiKey: string } = { apiUserName: '', apiKey: '' };\n  @Input() useLocalUIMode = false;\n  @Input() seedData?: SeedData;\n  @Input() useSeed = false;\n  @Input() imgSrc = 'https://mediasfu.com/images/logo192.png';\n  @Input() sourceParameters: { [key: string]: any } = {};\n  @Input() updateSourceParameters? = (data: { [key: string]: any }) => { };\n  @Input() returnUI? = true;\n  @Input() noUIPreJoinOptions?: CreateMediaSFURoomOptions | JoinMediaSFURoomOptions;\n  @Input() joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n  @Input() createMediaSFURoom?: CreateRoomOnMediaSFUType;\n\n  // Custom component inputs\n  @Input() customVideoCard?: any;\n  @Input() customAudioCard?: any;\n  @Input() customMiniCard?: any;\n  @Input() customMainComponent?: any;\n\n  // UI customization inputs\n  @Input() containerStyle?: Record<string, any>;\n  @Input() uiOverrides?: MediasfuUICustomOverrides;\n\n  title = 'MediaSFU-Chat';\n\n  // Component references for override directive\n  protected readonly MainContainerComponentRef = MainContainerComponent;\n  protected readonly MainAspectComponentRef = MainAspectComponent;\n  protected readonly MainScreenComponentRef = MainScreenComponent;\n  protected readonly OtherGridComponentRef = OtherGridComponent;\n  protected readonly FlexibleGridRef = FlexibleGrid;\n  protected readonly ControlButtonsComponentTouchRef = ControlButtonsComponentTouch;\n  protected readonly AudioGridRef = AudioGrid;\n  protected readonly AlertComponentRef = ModernAlertComponent;\n  protected readonly LoadingModalRef = ModernLoadingModalComponent;\n  protected readonly MessagesModalRef = ModernMessagesModalComponent;\n  protected readonly ConfirmExitModalRef = ModernConfirmExitModalComponent;\n  protected readonly ConfirmHereModalRef = ModernConfirmHereModalComponent;\n  protected readonly ShareEventModalRef = ModernShareEventModalComponent;\n  protected readonly EventSettingsModalRef = ModernEventSettingsModalComponent;\n\n  // Override prop factory methods\n  protected mainContainerOverrideProps = () => ({\n    backgroundColor: this.validated.value ? 'rgba(217, 227, 234, 0.99)' : 'transparent',\n    children: [],\n  });\n\n  protected mainAspectOverrideProps = () => ({\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    defaultFraction: 1 - this.controlHeight.value,\n    showControls: false,\n    updateIsWideScreen: this.updateIsWideScreen,\n    updateIsMediumScreen: this.updateIsMediumScreen,\n    updateIsSmallScreen: this.updateIsSmallScreen,\n  });\n\n  protected mainScreenOverrideProps = () => ({\n    doStack: true,\n    mainSize: this.mainHeightWidth.value,\n    defaultFraction: 1 - this.controlHeight.value,\n    showControls: false,\n    updateComponentSizes: this.updateComponentSizes,\n  });\n\n  protected otherGridOverrideProps = () => ({\n    height: this.componentSizes.value.otherHeight,\n    width: this.componentSizes.value.otherWidth,\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n    showAspect: this.mainHeightWidth.value !== 100,\n    timeBackgroundColor: this.recordState.value,\n    showTimer: this.mainHeightWidth.value === 0,\n    meetingProgressTime: this.meetingProgressTime.value,\n  });\n\n  protected flexibleGridOverrideProps = () => ({\n    customWidth: this.componentSizes.value.otherWidth,\n    customHeight: this.componentSizes.value.otherHeight,\n    rows: this.gridRows.value,\n    columns: this.gridCols.value,\n    componentsToRender: this.otherGridStreams.value[0] || [],\n    backgroundColor: 'rgba(217, 227, 234, 0.99)',\n  });\n\n  protected controlButtonsTouchOverrideProps = () => ({\n    buttons: this.controlChatButtons,\n    position: 'right',\n    location: 'bottom',\n    direction: 'horizontal',\n    showAspect: true,\n  });\n\n  protected audioGridOverrideProps = () => ({\n    componentsToRender: this.audioOnlyStreams.value,\n  });\n\n  protected alertOverrideProps = () => ({\n    visible: this.alertVisible.value,\n    message: this.alertMessage.value,\n    type: this.alertType.value,\n    position: this.alertPosition.value,\n    duration: this.alertDuration.value,\n    onHide: this.onAlertHide,\n    isDarkMode: this.modernThemeDarkMode.value,\n  });\n\n  protected loadingModalOverrideProps = () => ({\n    isVisible: this.isLoadingModalVisible.value,\n    isDarkMode: this.modernThemeDarkMode.value,\n  });\n\n  protected messagesModalOverrideProps = () => ({\n    backgroundColor: this.eventType.value === 'webinar' || this.eventType.value === 'conference' ? '#f5f5f5' : 'rgba(255, 255, 255, 0.25)',\n    isMessagesModalVisible: this.isMessagesModalVisible.value,\n    onMessagesClose: this.onMessagesClose,\n    messages: this.messages.value,\n    eventType: this.eventType.value,\n    member: this.member.value,\n    islevel: this.islevel.value,\n    coHostResponsibility: this.coHostResponsibility.value,\n    coHost: this.coHost.value,\n    startDirectMessage: this.startDirectMessage.value,\n    directMessageDetails: this.directMessageDetails.value,\n    updateStartDirectMessage: this.updateStartDirectMessage,\n    updateDirectMessageDetails: this.updateDirectMessageDetails,\n    showAlert: this.showAlert,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    chatSetting: this.chatSetting.value,\n  });\n\n  protected confirmExitModalOverrideProps = () => ({\n    backgroundColor: 'rgba(181, 233, 229, 0.97)',\n    isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n    onConfirmExitClose: this.onConfirmExitClose,\n    position: 'center',\n    member: this.member.value,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    islevel: this.islevel.value,\n  });\n\n  protected confirmHereModalOverrideProps = () => ({\n    backgroundColor: 'rgba(181, 233, 229, 0.97)',\n    isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\n    onConfirmHereClose: this.onConfirmHereClose,\n    onSuppressConfirmHere: this.onSuppressConfirmHere,\n    member: this.member.value,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n  });\n\n  protected shareEventModalOverrideProps = () => ({\n    isShareEventModalVisible: this.isShareEventModalVisible.value,\n    isDarkMode: this.modernThemeDarkMode.value,\n    onShareEventClose: this.onShareEventClose,\n    roomName: this.roomName.value,\n    islevel: this.islevel.value,\n    adminPasscode: this.adminPasscode.value,\n    eventType: this.eventType.value,\n    localLink: this.localLink,\n  });\n\n  protected eventSettingsModalOverrideProps = () => ({\n    isEventSettingsModalVisible: this.isSettingsModalVisible.value,\n    isDarkMode: this.modernThemeDarkMode.value,\n    onEventSettingsClose: this.onEventSettingsClose,\n    audioSetting: this.audioSetting.value,\n    videoSetting: this.videoSetting.value,\n    screenshareSetting: this.screenshareSetting.value,\n    chatSetting: this.chatSetting.value,\n    updateAudioSetting: this.updateAudioSetting,\n    updateVideoSetting: this.updateVideoSetting,\n    updateScreenshareSetting: this.updateScreenshareSetting,\n    updateChatSetting: this.updateChatSetting,\n    updateIsSettingsModalVisible: this.updateIsSettingsModalVisible,\n    roomName: this.roomName.value,\n    socket: this.socket.value,\n    showAlert: this.showAlert,\n    parameters: this.mediaSFUParameters,\n  });\n\n  private mainHeightWidthSubscription: Subscription | undefined;\n  private validatedSubscription: Subscription | undefined;\n  private islevelSubscription: Subscription | undefined;\n  private coHostSubscription: Subscription | undefined;\n  private ScreenboardSubscription: Subscription | undefined;\n  private recordingSubscription: Subscription | undefined;\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    private injector: Injector,\n    public updateMiniCardsGrid: UpdateMiniCardsGrid,\n    public mixStreams: MixStreams,\n    public dispStreams: DispStreams,\n    public stopShareScreen: StopShareScreen,\n    public checkScreenShare: CheckScreenShare,\n    public startShareScreen: StartShareScreen,\n    public requestScreenShare: RequestScreenShare,\n    public reorderStreams: ReorderStreams,\n    public prepopulateUserMedia: PrepopulateUserMedia,\n    public getVideos: GetVideos,\n    public rePort: RePort,\n    public trigger: Trigger,\n    public consumerResume: ConsumerResume,\n    public connectSendTransport: ConnectSendTransport,\n    public connectSendTransportAudio: ConnectSendTransportAudio,\n    public connectSendTransportVideo: ConnectSendTransportVideo,\n    public connectSendTransportScreen: ConnectSendTransportScreen,\n    public processConsumerTransports: ProcessConsumerTransports,\n    public resumePauseStreams: ResumePauseStreams,\n    public readjust: Readjust,\n    public checkGrid: CheckGrid,\n    public getEstimate: GetEstimate,\n    public calculateRowsAndColumns: CalculateRowsAndColumns,\n    public addVideosGrid: AddVideosGrid,\n    public onScreenChanges: OnScreenChanges,\n    public changeVids: ChangeVids,\n    public compareActiveNames: CompareActiveNames,\n    public compareScreenStates: CompareScreenStates,\n    public createSendTransport: CreateSendTransport,\n    public resumeSendTransportAudio: ResumeSendTransportAudio,\n    public receiveAllPipedTransports: ReceiveAllPipedTransports,\n    public disconnectSendTransportVideo: DisconnectSendTransportVideo,\n    public disconnectSendTransportAudio: DisconnectSendTransportAudio,\n    public disconnectSendTransportScreen: DisconnectSendTransportScreen,\n    public getPipedProducersAlt: GetPipedProducersAlt,\n    public signalNewConsumerTransport: SignalNewConsumerTransport,\n    public connectRecvTransport: ConnectRecvTransport,\n    public reUpdateInter: ReUpdateInter,\n    public updateParticipantAudioDecibels: UpdateParticipantAudioDecibels,\n    public closeAndResize: CloseAndResize,\n    public autoAdjust: AutoAdjust,\n    public switchUserVideoAlt: SwitchUserVideoAlt,\n    public switchUserVideo: SwitchUserVideo,\n    public switchUserAudio: SwitchUserAudio,\n    public getDomains: GetDomains,\n    public formatNumber: FormatNumber,\n    public connectIps: ConnectIps,\n    public connectLocalIps: ConnectLocalIps,\n    public createDeviceClient: CreateDeviceClient,\n\n    public captureCanvasStream: CaptureCanvasStream,\n    public resumePauseAudioStreams: ResumePauseAudioStreams,\n    public processConsumerTransportsAudio: ProcessConsumerTransportsAudio,\n\n    public launchMessages: LaunchMessages,\n    public launchConfirmExit: LaunchConfirmExit,\n\n    public startMeetingProgressTimer: StartMeetingProgressTimer,\n\n    public producerMediaPaused: ProducerMediaPaused,\n    public producerMediaResumed: ProducerMediaResumed,\n    public producerMediaClosed: ProducerMediaClosed,\n    public meetingEnded: MeetingEnded,\n    public disconnectUserSelf: DisconnectUserSelf,\n    public receiveMessage: ReceiveMessage,\n    public meetingTimeRemaining: MeetingTimeRemaining,\n    public meetingStillThere: MeetingStillThere,\n\n    public allMembers: AllMembers,\n    public allMembersRest: AllMembersRest,\n    public disconnect: Disconnect,\n\n    public socketManager: SocketManager,\n    public joinRoomClient: JoinRoomClient,\n    public joinLocalRoom: JoinLocalRoom,\n    public updateRoomParametersClient: UpdateRoomParametersClient,\n    public clickVideo: ClickVideo,\n    public clickAudio: ClickAudio,\n    public clickScreenShare: ClickScreenShare,\n    public switchVideoAlt: SwitchVideoAlt,\n    public streamSuccessVideo: StreamSuccessVideo,\n    public streamSuccessAudio: StreamSuccessAudio,\n    public streamSuccessScreen: StreamSuccessScreen,\n    public streamSuccessAudioSwitch: StreamSuccessAudioSwitch,\n    public checkPermission: CheckPermission,\n\n    public updateConsumingDomains: UpdateConsumingDomains,\n    public receiveRoomMessages: ReceiveRoomMessages,\n    private uiOverrideResolver: UIOverrideResolverService,\n  ) { }\n\n  createInjector(inputs: any) {\n    if (!inputs || typeof inputs !== 'object') {\n      return this.injector;\n    }\n\n    const inj = Injector.create({\n      providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),\n      parent: this.injector,\n    });\n\n    return inj;\n  }\n\n  /**\n   * Gets a list of media devices filtered by the specified kind.\n   * @param kind - The kind of media device to filter by ('videoinput' or 'audioinput')\n   * @returns A promise that resolves to an array of MediaDeviceInfo objects\n   */\n  getMediaDevicesList = async (kind: 'videoinput' | 'audioinput'): Promise<MediaDeviceInfo[]> => {\n    try {\n      const devices = await navigator.mediaDevices.enumerateDevices();\n      return devices.filter((device) => device.kind === kind);\n    } catch (error) {\n      console.error('Error enumerating devices:', error);\n      return [];\n    }\n  };\n\n  /**\n   * Gets the media stream for a participant by their ID or name.\n   * @param options - Object containing id, name, and kind parameters\n   * @returns A promise that resolves to the participant's MediaStream or null if not found\n   */\n  getParticipantMedia = async (options: {\n    id?: string;\n    name?: string;\n    kind: 'video' | 'audio';\n  }): Promise<MediaStream | null> => {\n    const { id, name, kind } = options;\n\n    try {\n      const streams =\n        kind === 'video' ? this.allVideoStreams.value : this.allAudioStreams.value;\n\n      // Search by producerId if provided\n      if (id) {\n        const streamObj = streams.find((obj: any) => obj.producerId === id);\n        if (streamObj && 'stream' in streamObj) {\n          return streamObj.stream || null;\n        }\n      }\n\n      // Search by name if provided\n      if (name) {\n        const streamObj = streams.find((obj: any) => obj.name === name);\n        if (streamObj && 'stream' in streamObj) {\n          return streamObj.stream || null;\n        }\n      }\n\n      return null;\n    } catch (error) {\n      console.error('Error getting participant media:', error);\n      return null;\n    }\n  };\n\n  // Initial values\n  mediaSFUFunctions = (): any => {\n    return {\n      updateMiniCardsGrid:\n        this.updateMiniCardsGrid?.updateMiniCardsGrid ||\n        (() => {\n          console.log('none');\n        }),\n      mixStreams:\n        this.mixStreams?.mixStreams ||\n        (() => {\n          console.log('none');\n        }),\n      dispStreams:\n        this.dispStreams?.dispStreams ||\n        (() => {\n          console.log('none');\n        }),\n      stopShareScreen:\n        this.stopShareScreen?.stopShareScreen ||\n        (() => {\n          console.log('none');\n        }),\n      checkScreenShare:\n        this.checkScreenShare?.checkScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      startShareScreen:\n        this.startShareScreen?.startShareScreen ||\n        (() => {\n          console.log('none');\n        }),\n      requestScreenShare:\n        this.requestScreenShare?.requestScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      reorderStreams:\n        this.reorderStreams?.reorderStreams ||\n        (() => {\n          console.log('none');\n        }),\n      prepopulateUserMedia:\n        this.prepopulateUserMedia?.prepopulateUserMedia ||\n        (() => {\n          console.log('none');\n        }),\n      getVideos:\n        this.getVideos?.getVideos ||\n        (() => {\n          console.log('none');\n        }),\n      rePort:\n        this.rePort?.rePort ||\n        (() => {\n          console.log('none');\n        }),\n      trigger:\n        this.trigger?.trigger ||\n        (() => {\n          console.log('none');\n        }),\n      consumerResume:\n        this.consumerResume?.consumerResume ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransport:\n        this.connectSendTransport?.connectSendTransport ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportAudio:\n        this.connectSendTransportAudio?.connectSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportVideo:\n        this.connectSendTransportVideo?.connectSendTransportVideo ||\n        (() => {\n          console.log('none');\n        }),\n      connectSendTransportScreen:\n        this.connectSendTransportScreen?.connectSendTransportScreen ||\n        (() => {\n          console.log('none');\n        }),\n      processConsumerTransports:\n        this.processConsumerTransports?.processConsumerTransports ||\n        (() => {\n          console.log('none');\n        }),\n      resumePauseStreams:\n        this.resumePauseStreams?.resumePauseStreams ||\n        (() => {\n          console.log('none');\n        }),\n      readjust:\n        this.readjust?.readjust ||\n        (() => {\n          console.log('none');\n        }),\n      checkGrid:\n        this.checkGrid?.checkGrid ||\n        (() => {\n          console.log('none');\n        }),\n      getEstimate:\n        this.getEstimate?.getEstimate ||\n        (() => {\n          console.log('none');\n        }),\n      calculateRowsAndColumns:\n        this.calculateRowsAndColumns?.calculateRowsAndColumns ||\n        (() => {\n          console.log('none');\n        }),\n      addVideosGrid:\n        this.addVideosGrid?.addVideosGrid ||\n        (() => {\n          console.log('none');\n        }),\n      onScreenChanges:\n        this.onScreenChanges?.onScreenChanges ||\n        (() => {\n          console.log('none');\n        }),\n      sleep:\n        sleep ||\n        (() => {\n          console.log('none');\n        }),\n      changeVids:\n        this.changeVids?.changeVids ||\n        (() => {\n          console.log('none');\n        }),\n      compareActiveNames:\n        this.compareActiveNames?.compareActiveNames ||\n        (() => {\n          console.log('none');\n        }),\n      compareScreenStates:\n        this.compareScreenStates?.compareScreenStates ||\n        (() => {\n          console.log('none');\n        }),\n      createSendTransport:\n        this.createSendTransport?.createSendTransport ||\n        (() => {\n          console.log('none');\n        }),\n      resumeSendTransportAudio:\n        this.resumeSendTransportAudio?.resumeSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      receiveAllPipedTransports:\n        this.receiveAllPipedTransports?.receiveAllPipedTransports ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportVideo:\n        this.disconnectSendTransportVideo?.disconnectSendTransportVideo ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportAudio:\n        this.disconnectSendTransportAudio?.disconnectSendTransportAudio ||\n        (() => {\n          console.log('none');\n        }),\n      disconnectSendTransportScreen:\n        this.disconnectSendTransportScreen?.disconnectSendTransportScreen ||\n        (() => {\n          console.log('none');\n        }),\n      getPipedProducersAlt:\n        this.getPipedProducersAlt?.getPipedProducersAlt ||\n        (() => {\n          console.log('none');\n        }),\n      signalNewConsumerTransport:\n        this.signalNewConsumerTransport?.signalNewConsumerTransport ||\n        (() => {\n          console.log('none');\n        }),\n      connectRecvTransport:\n        this.connectRecvTransport?.connectRecvTransport ||\n        (() => {\n          console.log('none');\n        }),\n      reUpdateInter:\n        this.reUpdateInter?.reUpdateInter ||\n        (() => {\n          console.log('none');\n        }),\n      updateParticipantAudioDecibels:\n        this.updateParticipantAudioDecibels?.updateParticipantAudioDecibels ||\n        (() => {\n          console.log('none');\n        }),\n      closeAndResize:\n        this.closeAndResize?.closeAndResize ||\n        (() => {\n          console.log('none');\n        }),\n      autoAdjust:\n        this.autoAdjust?.autoAdjust ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserVideoAlt:\n        this.switchUserVideoAlt?.switchUserVideoAlt ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserVideo:\n        this.switchUserVideo?.switchUserVideo ||\n        (() => {\n          console.log('none');\n        }),\n      switchUserAudio:\n        this.switchUserAudio?.switchUserAudio ||\n        (() => {\n          console.log('none');\n        }),\n      getDomains:\n        this.getDomains?.getDomains ||\n        (() => {\n          console.log('none');\n        }),\n      formatNumber:\n        this.formatNumber?.formatNumber ||\n        (() => {\n          console.log('none');\n        }),\n      connectIps:\n        this.connectIps?.connectIps ||\n        (() => {\n          console.log('none');\n        }),\n      connectLocalIps:\n        this.connectLocalIps?.connectLocalIps ||\n        (() => {\n          console.log('none');\n        }),\n      createDeviceClient:\n        this.createDeviceClient?.createDeviceClient ||\n        (() => {\n          console.log('none');\n        }),\n      captureCanvasStream:\n        this.captureCanvasStream?.captureCanvasStream ||\n        (() => {\n          console.log('none');\n        }),\n      resumePauseAudioStreams:\n        this.resumePauseAudioStreams?.resumePauseAudioStreams ||\n        (() => {\n          console.log('none');\n        }),\n      processConsumerTransportsAudio:\n        this.processConsumerTransportsAudio?.processConsumerTransportsAudio ||\n        (() => {\n          console.log('none');\n        }),\n      checkPermission:\n        this.checkPermission?.checkPermission ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessVideo:\n        this.streamSuccessVideo?.streamSuccessVideo ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessAudio:\n        this.streamSuccessAudio?.streamSuccessAudio ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessScreen:\n        this.streamSuccessScreen?.streamSuccessScreen ||\n        (() => {\n          console.log('none');\n        }),\n      streamSuccessAudioSwitch:\n        this.streamSuccessAudioSwitch?.streamSuccessAudioSwitch ||\n        (() => {\n          console.log('none');\n        }),\n      clickVideo:\n        this.clickVideo?.clickVideo ||\n        (() => {\n          console.log('none');\n        }),\n      clickAudio:\n        this.clickAudio?.clickAudio ||\n        (() => {\n          console.log('none');\n        }),\n      clickScreenShare:\n        this.clickScreenShare?.clickScreenShare ||\n        (() => {\n          console.log('none');\n        }),\n      switchVideoAlt:\n        this.switchVideoAlt?.switchVideoAlt ||\n        (() => {\n          console.log('none');\n        }),\n      requestPermissionCamera:\n        this.requestPermissionCamera ||\n        (() => {\n          console.log('none');\n        }),\n      requestPermissionAudio:\n        this.requestPermissionAudio ||\n        (() => {\n          console.log('none');\n        }),\n      getMediaDevicesList: this.getMediaDevicesList,\n      getParticipantMedia: this.getParticipantMedia,\n    };\n  };\n\n  validated = new BehaviorSubject<boolean>(false);\n  localUIMode = new BehaviorSubject<boolean>(false);\n  socket = new BehaviorSubject<Socket>({} as Socket);\n  localSocket? = new BehaviorSubject<Socket | undefined>(undefined);\n  roomData = new BehaviorSubject<ResponseJoinRoom | null>(null);\n  device = new BehaviorSubject<Device | null>(null);\n  apiKey = new BehaviorSubject<string>('');\n  apiUserName = new BehaviorSubject<string>('');\n  apiToken = new BehaviorSubject<string>('');\n  link = new BehaviorSubject<string>('');\n\n  roomName = new BehaviorSubject<string>('');\n  member = new BehaviorSubject<string>('');\n  adminPasscode = new BehaviorSubject<string>('');\n  islevel = new BehaviorSubject<string>('1');\n  coHost = new BehaviorSubject<string>('No coHost');\n  coHostResponsibility = new BehaviorSubject<CoHostResponsibility[]>([\n    { name: 'participants', value: false, dedicated: false },\n    { name: 'media', value: false, dedicated: false },\n    { name: 'waiting', value: false, dedicated: false },\n    { name: 'chat', value: false, dedicated: false },\n  ]);\n  youAreCoHost = new BehaviorSubject<boolean>(false);\n  youAreHost = new BehaviorSubject<boolean>(false);\n  confirmedToRecord = new BehaviorSubject<boolean>(false);\n  meetingDisplayType = new BehaviorSubject<string>('media');\n  meetingVideoOptimized = new BehaviorSubject<boolean>(false);\n  eventType = new BehaviorSubject<EventType>('chat');\n  participants = new BehaviorSubject<Participant[]>([]);\n  filteredParticipants = new BehaviorSubject<Participant[]>([]);\n  participantsCounter = new BehaviorSubject<number>(0);\n  participantsFilter = new BehaviorSubject<string>('');\n\n  consume_sockets = new BehaviorSubject<ConsumeSocket[]>([]);\n  rtpCapabilities = new BehaviorSubject<RtpCapabilities | null>(null);\n  roomRecvIPs = new BehaviorSubject<string[]>([]);\n  meetingRoomParams = new BehaviorSubject<MeetingRoomParams | null>(null);\n  itemPageLimit = new BehaviorSubject<number>(4);\n  audioOnlyRoom = new BehaviorSubject<boolean>(false);\n  addForBasic = new BehaviorSubject<boolean>(false);\n  screenPageLimit = new BehaviorSubject<number>(4);\n  shareScreenStarted = new BehaviorSubject<boolean>(false);\n  shared = new BehaviorSubject<boolean>(false);\n  targetOrientation = new BehaviorSubject<string>('landscape');\n  targetResolution = new BehaviorSubject<string>('sd');\n  targetResolutionHost = new BehaviorSubject<string>('sd');\n  vidCons = new BehaviorSubject<VidCons>({ width: 640, height: 360 });\n  frameRate = new BehaviorSubject<number>(10);\n  hParams = new BehaviorSubject<HParamsType>({} as HParamsType);\n  vParams = new BehaviorSubject<VParamsType>({} as VParamsType);\n  screenParams = new BehaviorSubject<ScreenParamsType>({} as ScreenParamsType);\n  aParams = new BehaviorSubject<AParamsType>({} as AParamsType);\n\n  recordingAudioPausesLimit = new BehaviorSubject<number>(0);\n  recordingAudioPausesCount = new BehaviorSubject<number>(0);\n  recordingAudioSupport = new BehaviorSubject<boolean>(false);\n  recordingAudioPeopleLimit = new BehaviorSubject<number>(0);\n  recordingAudioParticipantsTimeLimit = new BehaviorSubject<number>(0);\n  recordingVideoPausesCount = new BehaviorSubject<number>(0);\n  recordingVideoPausesLimit = new BehaviorSubject<number>(0);\n  recordingVideoSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoPeopleLimit = new BehaviorSubject<number>(0);\n  recordingVideoParticipantsTimeLimit = new BehaviorSubject<number>(0);\n  recordingAllParticipantsSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoParticipantsSupport = new BehaviorSubject<boolean>(false);\n  recordingAllParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\n  recordingVideoParticipantsFullRoomSupport = new BehaviorSubject<boolean>(false);\n  recordingPreferredOrientation = new BehaviorSubject<string>('landscape');\n  recordingSupportForOtherOrientation = new BehaviorSubject<boolean>(false);\n  recordingMultiFormatsSupport = new BehaviorSubject<boolean>(false);\n\n  userRecordingParams = new BehaviorSubject<UserRecordingParams>({\n    mainSpecs: {\n      mediaOptions: 'video', // 'audio', 'video'\n      audioOptions: 'all', // 'all', 'onScreen', 'host'\n      videoOptions: 'all', // 'all', 'mainScreen'\n      videoType: 'fullDisplay', // 'all', 'bestDisplay', 'fullDisplay'\n      videoOptimized: false, // true, false\n      recordingDisplayType: 'media', // 'media', 'video', 'all'\n      addHLS: false, // true, false\n    },\n    dispSpecs: {\n      nameTags: true, // true, false\n      backgroundColor: '#000000', // '#000000', '#ffffff'\n      nameTagsColor: '#ffffff', // '#000000', '#ffffff'\n      orientationVideo: 'portrait', // 'landscape', 'portrait', 'all'\n    },\n  });\n\n  canRecord = new BehaviorSubject<boolean>(false);\n  startReport = new BehaviorSubject<boolean>(false);\n  endReport = new BehaviorSubject<boolean>(false);\n  recordTimerInterval = new BehaviorSubject<number | null>(null);\n  recordStartTime = new BehaviorSubject<number>(0);\n  recordElapsedTime = new BehaviorSubject<number>(0);\n  isTimerRunning = new BehaviorSubject<boolean>(false);\n  canPauseResume = new BehaviorSubject<boolean>(false);\n  recordChangeSeconds = new BehaviorSubject<number>(15000);\n  pauseLimit = new BehaviorSubject<number>(0);\n  pauseRecordCount = new BehaviorSubject<number>(0);\n  canLaunchRecord = new BehaviorSubject<boolean>(true);\n  stopLaunchRecord = new BehaviorSubject<boolean>(false);\n\n  participantsAll = new BehaviorSubject<Participant[]>([]);\n\n  firstAll = new BehaviorSubject<boolean>(false);\n  updateMainWindow = new BehaviorSubject<boolean>(false);\n  first_round = new BehaviorSubject<boolean>(false);\n  landScaped = new BehaviorSubject<boolean>(false);\n  lock_screen = new BehaviorSubject<boolean>(false);\n  screenId = new BehaviorSubject<string>('');\n  allVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  newLimitedStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  newLimitedStreamsIDs = new BehaviorSubject<string[]>([]);\n  activeSounds = new BehaviorSubject<string[]>([]);\n  screenShareIDStream = new BehaviorSubject<string>('');\n  screenShareNameStream = new BehaviorSubject<string>('');\n  adminIDStream = new BehaviorSubject<string>('');\n  adminNameStream = new BehaviorSubject<string>('');\n  youYouStream = new BehaviorSubject<(Participant | Stream)[]>([]);\n  youYouStreamIDs = new BehaviorSubject<string[]>([]);\n  localStream = new BehaviorSubject<MediaStream | null>(null);\n  recordStarted = new BehaviorSubject<boolean>(false);\n  recordResumed = new BehaviorSubject<boolean>(false);\n  recordPaused = new BehaviorSubject<boolean>(false);\n  recordStopped = new BehaviorSubject<boolean>(false);\n  adminRestrictSetting = new BehaviorSubject<boolean>(false);\n  videoRequestState = new BehaviorSubject<string | null>(null);\n  videoRequestTime = new BehaviorSubject<number>(0);\n  videoAction = new BehaviorSubject<boolean>(false);\n  localStreamVideo = new BehaviorSubject<MediaStream | null>(null);\n  userDefaultVideoInputDevice = new BehaviorSubject<string>('');\n  currentFacingMode = new BehaviorSubject<string>('user');\n  prevFacingMode = new BehaviorSubject<string>('user');\n  defVideoID = new BehaviorSubject<string>('');\n  allowed = new BehaviorSubject<boolean>(false);\n  dispActiveNames = new BehaviorSubject<string[]>([]);\n  p_dispActiveNames = new BehaviorSubject<string[]>([]);\n  activeNames = new BehaviorSubject<string[]>([]);\n  prevActiveNames = new BehaviorSubject<string[]>([]);\n  p_activeNames = new BehaviorSubject<string[]>([]);\n  membersReceived = new BehaviorSubject<boolean>(false);\n  deferScreenReceived = new BehaviorSubject<boolean>(false);\n  hostFirstSwitch = new BehaviorSubject<boolean>(false);\n  micAction = new BehaviorSubject<boolean>(false);\n  screenAction = new BehaviorSubject<boolean>(false);\n  chatAction = new BehaviorSubject<boolean>(false);\n  audioRequestState = new BehaviorSubject<string | null>(null);\n  screenRequestState = new BehaviorSubject<string | null>(null);\n  chatRequestState = new BehaviorSubject<string | null>(null);\n  audioRequestTime = new BehaviorSubject<number>(0);\n  screenRequestTime = new BehaviorSubject<number>(0);\n  chatRequestTime = new BehaviorSubject<number>(0);\n  updateRequestIntervalSeconds = new BehaviorSubject<number>(240);\n  oldSoundIds = new BehaviorSubject<string[]>([]);\n  hostLabel = new BehaviorSubject<string>('Host');\n  mainScreenFilled = new BehaviorSubject<boolean>(false);\n  localStreamScreen = new BehaviorSubject<MediaStream | null>(null);\n  screenAlreadyOn = new BehaviorSubject<boolean>(false);\n  chatAlreadyOn = new BehaviorSubject<boolean>(false);\n  redirectURL = new BehaviorSubject<string>('');\n  oldAllStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  adminVidID = new BehaviorSubject<string>('');\n  streamNames = new BehaviorSubject<Stream[]>([]);\n  non_alVideoStreams = new BehaviorSubject<Participant[]>([]);\n  sortAudioLoudness = new BehaviorSubject<boolean>(false);\n  audioDecibels = new BehaviorSubject<AudioDecibels[]>([]);\n  mixed_alVideoStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  non_alVideoStreams_muted = new BehaviorSubject<Participant[]>([]);\n  paginatedStreams = new BehaviorSubject<(Participant | Stream)[][]>([]);\n  localStreamAudio = new BehaviorSubject<MediaStream | null>(null);\n  defAudioID = new BehaviorSubject<string>('');\n  userDefaultAudioInputDevice = new BehaviorSubject<string>('');\n  userDefaultAudioOutputDevice = new BehaviorSubject<string>('');\n  prevAudioInputDevice = new BehaviorSubject<string>('');\n  prevVideoInputDevice = new BehaviorSubject<string>('');\n  audioPaused = new BehaviorSubject<boolean>(false);\n  mainScreenPerson = new BehaviorSubject<string>('');\n  adminOnMainScreen = new BehaviorSubject<boolean>(false);\n  screenStates = new BehaviorSubject<ScreenState[]>([\n    {\n      mainScreenPerson: '',\n      mainScreenProducerId: '',\n      mainScreenFilled: false,\n      adminOnMainScreen: false,\n    },\n  ]);\n  prevScreenStates = new BehaviorSubject<ScreenState[]>([\n    {\n      mainScreenPerson: '',\n      mainScreenProducerId: '',\n      mainScreenFilled: false,\n      adminOnMainScreen: false,\n    },\n  ]);\n  updateDateState = new BehaviorSubject<number | null>(null);\n  lastUpdate = new BehaviorSubject<number | null>(null);\n  nForReadjustRecord = new BehaviorSubject<number>(0);\n  fixedPageLimit = new BehaviorSubject<number>(4);\n  removeAltGrid = new BehaviorSubject<boolean>(false);\n  nForReadjust = new BehaviorSubject<number>(0);\n  reorderInterval = new BehaviorSubject<number>(30000);\n  fastReorderInterval = new BehaviorSubject<number>(10000);\n  lastReorderTime = new BehaviorSubject<number>(0);\n  audStreamNames = new BehaviorSubject<Stream[]>([]);\n  currentUserPage = new BehaviorSubject<number>(0);\n  mainHeightWidth = new BehaviorSubject<number>(0);\n  prevMainHeightWidth = new BehaviorSubject<number>(this.mainHeightWidth.value);\n  prevDoPaginate = new BehaviorSubject<boolean>(false);\n  doPaginate = new BehaviorSubject<boolean>(false);\n  shareEnded = new BehaviorSubject<boolean>(false);\n  lStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  chatRefStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  controlHeight = new BehaviorSubject<number>(\n    this.eventType.value === 'webinar' || this.eventType.value === 'conference' ? 0 : 0.06,\n  );\n  isWideScreen = new BehaviorSubject<boolean>(false);\n  isMediumScreen = new BehaviorSubject<boolean>(false);\n  isSmallScreen = new BehaviorSubject<boolean>(false);\n  addGrid = new BehaviorSubject<boolean>(false);\n  addAltGrid = new BehaviorSubject<boolean>(false);\n  gridRows = new BehaviorSubject<number>(0);\n  gridCols = new BehaviorSubject<number>(0);\n  altGridRows = new BehaviorSubject<number>(0);\n  altGridCols = new BehaviorSubject<number>(0);\n  numberPages = new BehaviorSubject<number>(0);\n  currentStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  showMiniView = new BehaviorSubject<boolean>(false);\n  nStream = new BehaviorSubject<MediaStream | null>(null);\n  defer_receive = new BehaviorSubject<boolean>(false);\n  allAudioStreams = new BehaviorSubject<(Participant | Stream)[]>([]);\n  remoteScreenStream = new BehaviorSubject<Stream[]>([]);\n  screenProducer = new BehaviorSubject<Producer | null>(null);\n  localScreenProducer = new BehaviorSubject<Producer | null>(null);\n  gotAllVids = new BehaviorSubject<boolean>(false);\n  paginationHeightWidth = new BehaviorSubject<number>(40);\n  paginationDirection = new BehaviorSubject<'horizontal' | 'vertical'>('horizontal');\n  gridSizes = new BehaviorSubject<GridSizes>({\n    gridWidth: 0,\n    gridHeight: 0,\n    altGridWidth: 0,\n    altGridHeight: 0,\n  });\n  screenForceFullDisplay = new BehaviorSubject<boolean>(false);\n  mainGridStream = new BehaviorSubject<CustomMediaComponent[]>([]);\n  otherGridStreams = new BehaviorSubject<CustomMediaComponent[][]>([]);\n  audioOnlyStreams = new BehaviorSubject<CustomMediaComponent[]>([]);\n  videoInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\n  audioInputs = new BehaviorSubject<MediaDeviceInfo[]>([]);\n  meetingProgressTime = new BehaviorSubject<string>('00:00:00');\n  meetingElapsedTime = new BehaviorSubject<number>(0);\n  ref_participants = new BehaviorSubject<Participant[]>([]);\n\n  updateValidated = (value: boolean) => {\n    this.validated.next(value);\n  };\n\n  updateSocket = (value: Socket) => {\n    this.socket.next(value);\n  };\n\n  updateLocalSocket = (value: Socket | null) => {\n    this.localSocket!.next(value!);\n  };\n\n  updateDevice = (value: Device | null) => {\n    this.device.next(value);\n  };\n\n  updateRoomData = (value: ResponseJoinRoom | null) => {\n    this.roomData.next(value);\n  };\n\n  updateApiKey = (value: string) => {\n    this.apiKey.next(value);\n  };\n\n  updateApiUserName = (value: string) => {\n    this.apiUserName.next(value);\n  };\n\n  updateApiToken = (value: string) => {\n    this.apiToken.next(value);\n  };\n\n  updateLink = (value: string) => {\n    this.link.next(value);\n  };\n\n  updateRoomName = (value: string) => {\n    this.roomName.next(value);\n  };\n\n  updateMember = (value: string) => {\n    if (value.length > 0 && value.includes(\"_\")) {\n      this.updateIslevel(value.split(\"_\")[1]);\n      value = value.split(\"_\")[0];\n    }\n    this.member.next(value);\n  };\n\n  updateAdminPasscode = (value: string) => {\n    this.adminPasscode.next(value);\n  };\n\n  updateIslevel = (value: string) => {\n    this.islevel.next(value);\n  };\n\n  updateCoHost = (value: string) => {\n    this.coHost.next(value);\n  };\n\n  updateCoHostResponsibility = (value: CoHostResponsibility[]) => {\n    this.coHostResponsibility.next(value);\n  };\n\n  updateYouAreCoHost = (value: boolean) => {\n    this.youAreCoHost.next(value);\n  };\n\n  updateYouAreHost = (value: boolean) => {\n    this.youAreHost.next(value);\n  };\n\n  updateConfirmedToRecord = (value: boolean) => {\n    this.confirmedToRecord.next(value);\n  };\n\n  updateMeetingDisplayType = (value: string) => {\n    this.meetingDisplayType.next(value);\n  };\n\n  updateMeetingVideoOptimized = (value: boolean) => {\n    this.meetingVideoOptimized.next(value);\n  };\n\n  updateEventType = (value: EventType) => {\n    this.eventType.next(value);\n  };\n\n  updateParticipants = (value: Participant[]) => {\n    this.participants.next(value);\n    this.participantsCounter.next(value.length);\n    this.filteredParticipants.next(this.participants.value);\n  };\n\n  updateFilteredParticipants = (value: Participant[]) => {\n    this.filteredParticipants.next(value);\n  };\n\n  updateParticipantsCounter = (value: number) => {\n    this.participantsCounter.next(value);\n  };\n\n  updateParticipantsFilter = (value: string) => {\n    this.participantsFilter.next(value);\n  };\n\n  updateConsume_sockets = (value: ConsumeSocket[]) => {\n    this.consume_sockets.next(value);\n  };\n\n  updateRtpCapabilities = (value: RtpCapabilities | null) => {\n    this.rtpCapabilities.next(value);\n  };\n\n  updateRoomRecvIPs = (value: string[]) => {\n    this.roomRecvIPs.next(value);\n  };\n\n  updateMeetingRoomParams = (value: MeetingRoomParams | null) => {\n    this.meetingRoomParams.next(value);\n  };\n\n  updateItemPageLimit = (value: number) => {\n    this.itemPageLimit.next(value);\n  };\n\n  updateAudioOnlyRoom = (value: boolean) => {\n    this.audioOnlyRoom.next(value);\n  };\n\n  updateAddForBasic = (value: boolean) => {\n    this.addForBasic.next(value);\n  };\n\n  updateScreenPageLimit = (value: number) => {\n    this.screenPageLimit.next(value);\n  };\n\n  updateShareScreenStarted = (value: boolean) => {\n    this.shareScreenStarted.next(value);\n  };\n\n  updateShared = (value: boolean) => {\n    this.shared.next(value);\n  };\n\n  updateTargetOrientation = (value: string) => {\n    this.targetOrientation.next(value);\n  };\n\n  updateTargetResolution = (value: string) => {\n    this.targetResolution.next(value);\n  };\n\n  updateTargetResolutionHost = (value: string) => {\n    this.targetResolutionHost.next(value);\n  };\n\n  updateVidCons = (value: VidCons) => {\n    this.vidCons.next(value);\n  };\n\n  updateFrameRate = (value: number) => {\n    this.frameRate.next(value);\n  };\n\n  updateHParams = (value: HParamsType) => {\n    this.hParams.next(value);\n  };\n\n  updateVParams = (value: VParamsType) => {\n    this.vParams.next(value);\n  };\n\n  updateScreenParams = (value: ScreenParamsType) => {\n    this.screenParams.next(value);\n  };\n\n  updateAParams = (value: AParamsType) => {\n    this.aParams.next(value);\n  };\n\n  updateRecordingAudioPausesLimit = (value: number) => {\n    this.recordingAudioPausesLimit.next(value);\n  };\n\n  updateRecordingAudioPausesCount = (value: number) => {\n    this.recordingAudioPausesCount.next(value);\n  };\n\n  updateRecordingAudioSupport = (value: boolean) => {\n    this.recordingAudioSupport.next(value);\n  };\n\n  updateRecordingAudioPeopleLimit = (value: number) => {\n    this.recordingAudioPeopleLimit.next(value);\n  };\n\n  updateRecordingAudioParticipantsTimeLimit = (value: number) => {\n    this.recordingAudioParticipantsTimeLimit.next(value);\n  };\n\n  updateRecordingVideoPausesCount = (value: number) => {\n    this.recordingVideoPausesCount.next(value);\n  };\n\n  updateRecordingVideoPausesLimit = (value: number) => {\n    this.recordingVideoPausesLimit.next(value);\n  };\n\n  updateRecordingVideoSupport = (value: boolean) => {\n    this.recordingVideoSupport.next(value);\n  };\n\n  updateRecordingVideoPeopleLimit = (value: number) => {\n    this.recordingVideoPeopleLimit.next(value);\n  };\n\n  updateRecordingVideoParticipantsTimeLimit = (value: number) => {\n    this.recordingVideoParticipantsTimeLimit.next(value);\n  };\n\n  updateRecordingAllParticipantsSupport = (value: boolean) => {\n    this.recordingAllParticipantsSupport.next(value);\n  };\n\n  updateRecordingVideoParticipantsSupport = (value: boolean) => {\n    this.recordingVideoParticipantsSupport.next(value);\n  };\n\n  updateRecordingAllParticipantsFullRoomSupport = (value: boolean) => {\n    this.recordingAllParticipantsFullRoomSupport.next(value);\n  };\n\n  updateRecordingVideoParticipantsFullRoomSupport = (value: boolean) => {\n    this.recordingVideoParticipantsFullRoomSupport.next(value);\n  };\n\n  updateRecordingPreferredOrientation = (value: string) => {\n    this.recordingPreferredOrientation.next(value);\n  };\n\n  updateRecordingSupportForOtherOrientation = (value: boolean) => {\n    this.recordingSupportForOtherOrientation.next(value);\n  };\n\n  updateRecordingMultiFormatsSupport = (value: boolean) => {\n    this.recordingMultiFormatsSupport.next(value);\n  };\n\n  updateUserRecordingParams = (value: UserRecordingParams) => {\n    this.userRecordingParams.next(value);\n  };\n\n  updateCanRecord = (value: boolean) => {\n    this.canRecord.next(value);\n  };\n\n  updateStartReport = (value: boolean) => {\n    this.startReport.next(value);\n  };\n\n  updateEndReport = (value: boolean) => {\n    this.endReport.next(value);\n  };\n\n  updateRecordTimerInterval = (value: number | null) => {\n    this.recordTimerInterval.next(value);\n  };\n\n  updateRecordStartTime = (value: number) => {\n    this.recordStartTime.next(value);\n  };\n\n  updateRecordElapsedTime = (value: number) => {\n    this.recordElapsedTime.next(value);\n  };\n\n  updateIsTimerRunning = (value: boolean) => {\n    this.isTimerRunning.next(value);\n  };\n\n  updateCanPauseResume = (value: boolean) => {\n    this.canPauseResume.next(value);\n  };\n\n  updateRecordChangeSeconds = (value: number) => {\n    this.recordChangeSeconds.next(value);\n  };\n\n  updatePauseLimit = (value: number) => {\n    this.pauseLimit.next(value);\n  };\n\n  updatePauseRecordCount = (value: number) => {\n    this.pauseRecordCount.next(value);\n  };\n\n  updateCanLaunchRecord = (value: boolean) => {\n    this.canLaunchRecord.next(value);\n  };\n\n  updateStopLaunchRecord = (value: boolean) => {\n    this.stopLaunchRecord.next(value);\n  };\n\n  updateParticipantsAll = (value: Participant[]) => {\n    this.participantsAll.next(value);\n  };\n\n  updateFirstAll = (value: boolean) => {\n    this.firstAll.next(value);\n  };\n\n  updateUpdateMainWindow = (value: boolean) => {\n    this.updateMainWindow.next(value);\n  };\n\n  updateFirst_round = (value: boolean) => {\n    this.first_round.next(value);\n  };\n\n  updateLandScaped = (value: boolean) => {\n    this.landScaped.next(value);\n  };\n\n  updateLock_screen = (value: boolean) => {\n    this.lock_screen.next(value);\n  };\n\n  updateScreenId = (value: string) => {\n    this.screenId.next(value);\n  };\n\n  updateAllVideoStreams = (value: (Participant | Stream)[]) => {\n    this.allVideoStreams.next(value);\n  };\n\n  updateNewLimitedStreams = (value: (Participant | Stream)[]) => {\n    this.newLimitedStreams.next(value);\n  };\n\n  updateNewLimitedStreamsIDs = (value: string[]) => {\n    this.newLimitedStreamsIDs.next(value);\n  };\n\n  updateActiveSounds = (value: string[]) => {\n    this.activeSounds.next(value);\n  };\n\n  updateScreenShareIDStream = (value: string) => {\n    this.screenShareIDStream.next(value);\n  };\n\n  updateScreenShareNameStream = (value: string) => {\n    this.screenShareNameStream.next(value);\n  };\n\n  updateAdminIDStream = (value: string) => {\n    this.adminIDStream.next(value);\n  };\n\n  updateAdminNameStream = (value: string) => {\n    this.adminNameStream.next(value);\n  };\n\n  updateYouYouStream = (value: (Participant | Stream)[]) => {\n    this.youYouStream.next(value);\n  };\n\n  updateYouYouStreamIDs = (value: string[]) => {\n    this.youYouStreamIDs.next(value);\n  };\n\n  updateLocalStream = (value: MediaStream | null) => {\n    this.localStream.next(value);\n  };\n\n  updateRecordStarted = (value: boolean) => {\n    this.recordStarted.next(value);\n  };\n\n  updateRecordResumed = (value: boolean) => {\n    this.recordResumed.next(value);\n  };\n\n  updateRecordPaused = (value: boolean) => {\n    this.recordPaused.next(value);\n  };\n\n  updateRecordStopped = (value: boolean) => {\n    this.recordStopped.next(value);\n  };\n\n  updateAdminRestrictSetting = (value: boolean) => {\n    this.adminRestrictSetting.next(value);\n  };\n\n  updateVideoRequestState = (value: string | null) => {\n    this.videoRequestState.next(value);\n  };\n\n  updateVideoRequestTime = (value: number) => {\n    this.videoRequestTime.next(value);\n  };\n\n  updateVideoAction = (value: boolean) => {\n    this.videoAction.next(value);\n  };\n\n  updateLocalStreamVideo = (value: MediaStream | null) => {\n    this.localStreamVideo.next(value);\n  };\n\n  updateUserDefaultVideoInputDevice = (value: string) => {\n    this.userDefaultVideoInputDevice.next(value);\n  };\n\n  updateCurrentFacingMode = (value: string) => {\n    this.currentFacingMode.next(value);\n  };\n\n  updatePrevFacingMode = (value: string) => {\n    this.prevFacingMode.next(value);\n  };\n\n  updateDefVideoID = (value: string) => {\n    this.defVideoID.next(value);\n  };\n\n  updateAllowed = (value: boolean) => {\n    this.allowed.next(value);\n  };\n\n  updateDispActiveNames = (value: string[]) => {\n    this.dispActiveNames.next(value);\n  };\n\n  updateP_dispActiveNames = (value: string[]) => {\n    this.p_dispActiveNames.next(value);\n  };\n\n  updateActiveNames = (value: string[]) => {\n    this.activeNames.next(value);\n  };\n\n  updatePrevActiveNames = (value: string[]) => {\n    this.prevActiveNames.next(value);\n  };\n\n  updateP_activeNames = (value: string[]) => {\n    this.p_activeNames.next(value);\n  };\n\n  updateMembersReceived = (value: boolean) => {\n    this.membersReceived.next(value);\n  };\n\n  updateDeferScreenReceived = (value: boolean) => {\n    this.deferScreenReceived.next(value);\n  };\n\n  updateHostFirstSwitch = (value: boolean) => {\n    this.hostFirstSwitch.next(value);\n  };\n\n  updateMicAction = (value: boolean) => {\n    this.micAction.next(value);\n  };\n\n  updateScreenAction = (value: boolean) => {\n    this.screenAction.next(value);\n  };\n\n  updateChatAction = (value: boolean) => {\n    this.chatAction.next(value);\n  };\n\n  updateAudioRequestState = (value: string | null) => {\n    this.audioRequestState.next(value);\n  };\n\n  updateScreenRequestState = (value: string | null) => {\n    this.screenRequestState.next(value);\n  };\n\n  updateChatRequestState = (value: string | null) => {\n    this.chatRequestState.next(value);\n  };\n\n  updateAudioRequestTime = (value: number) => {\n    this.audioRequestTime.next(value);\n  };\n\n  updateScreenRequestTime = (value: number) => {\n    this.screenRequestTime.next(value);\n  };\n\n  updateChatRequestTime = (value: number) => {\n    this.chatRequestTime.next(value);\n  };\n\n  updateOldSoundIds = (value: string[]) => {\n    this.oldSoundIds.next(value);\n  };\n\n  updateHostLabel = (value: string) => {\n    this.hostLabel.next(value);\n  };\n\n  updateMainScreenFilled = (value: boolean) => {\n    this.mainScreenFilled.next(value);\n  };\n\n  updateLocalStreamScreen = (value: MediaStream | null) => {\n    this.localStreamScreen.next(value);\n  };\n\n  updateScreenAlreadyOn = (value: boolean) => {\n    this.screenAlreadyOn.next(value);\n  };\n\n  updateChatAlreadyOn = (value: boolean) => {\n    this.chatAlreadyOn.next(value);\n  };\n\n  updateRedirectURL = (value: string) => {\n    this.redirectURL.next(value);\n  };\n\n  updateOldAllStreams = (value: (Participant | Stream)[]) => {\n    this.oldAllStreams.next(value);\n  };\n\n  updateAdminVidID = (value: string) => {\n    this.adminVidID.next(value);\n  };\n\n  updateStreamNames = (value: Stream[]) => {\n    this.streamNames.next(value);\n  };\n\n  updateNon_alVideoStreams = (value: Participant[]) => {\n    this.non_alVideoStreams.next(value);\n  };\n\n  updateSortAudioLoudness = (value: boolean) => {\n    this.sortAudioLoudness.next(value);\n  };\n\n  updateAudioDecibels = (value: AudioDecibels[]) => {\n    this.audioDecibels.next(value);\n  };\n\n  updateMixed_alVideoStreams = (value: (Participant | Stream)[]) => {\n    this.mixed_alVideoStreams.next(value);\n  };\n\n  updateNon_alVideoStreams_muted = (value: Participant[]) => {\n    this.non_alVideoStreams_muted.next(value);\n  };\n\n  updatePaginatedStreams = (value: (Participant | Stream)[][]) => {\n    this.paginatedStreams.next(value);\n  };\n\n  updateLocalStreamAudio = (value: MediaStream | null) => {\n    this.localStreamAudio.next(value);\n  };\n\n  updateDefAudioID = (value: string) => {\n    this.defAudioID.next(value);\n  };\n\n  updateUserDefaultAudioInputDevice = (value: string) => {\n    this.userDefaultAudioInputDevice.next(value);\n  };\n\n  updateUserDefaultAudioOutputDevice = (value: string) => {\n    this.userDefaultAudioOutputDevice.next(value);\n  };\n\n  updatePrevAudioInputDevice = (value: string) => {\n    this.prevAudioInputDevice.next(value);\n  };\n\n  updatePrevVideoInputDevice = (value: string) => {\n    this.prevVideoInputDevice.next(value);\n  };\n\n  updateAudioPaused = (value: boolean) => {\n    this.audioPaused.next(value);\n  };\n\n  updateMainScreenPerson = (value: string) => {\n    this.mainScreenPerson.next(value);\n  };\n\n  updateAdminOnMainScreen = (value: boolean) => {\n    this.adminOnMainScreen.next(value);\n  };\n\n  updateScreenStates = (value: ScreenState[]) => {\n    this.screenStates.next(value);\n  };\n\n  updatePrevScreenStates = (value: ScreenState[]) => {\n    this.prevScreenStates.next(value);\n  };\n\n  updateUpdateDateState = (value: number | null) => {\n    this.updateDateState.next(value);\n  };\n\n  updateLastUpdate = (value: number | null) => {\n    this.lastUpdate.next(value);\n  };\n\n  updateNForReadjustRecord = (value: number) => {\n    this.nForReadjustRecord.next(value);\n  };\n\n  updateFixedPageLimit = (value: number) => {\n    this.fixedPageLimit.next(value);\n  };\n\n  updateRemoveAltGrid = (value: boolean) => {\n    this.removeAltGrid.next(value);\n  };\n\n  updateNForReadjust = (value: number) => {\n    this.nForReadjust.next(value);\n  };\n\n  updateLastReorderTime = (value: number) => {\n    this.lastReorderTime.next(value);\n  };\n\n  updateAudStreamNames = (value: Stream[]) => {\n    this.audStreamNames.next(value);\n  };\n\n  updateCurrentUserPage = (value: number) => {\n    this.currentUserPage.next(value);\n  };\n\n  updateMainHeightWidth = (value: number) => {\n    this.mainHeightWidth.next(value);\n  };\n\n  updatePrevMainHeightWidth = (value: number) => {\n    this.prevMainHeightWidth.next(value);\n  };\n\n  updatePrevDoPaginate = (value: boolean) => {\n    this.prevDoPaginate.next(value);\n  };\n\n  updateDoPaginate = (value: boolean) => {\n    this.doPaginate.next(value);\n  };\n\n  updateShareEnded = (value: boolean) => {\n    this.shareEnded.next(value);\n  };\n\n  updateLStreams = (value: (Participant | Stream)[]) => {\n    this.lStreams.next(value);\n  };\n\n  updateChatRefStreams = (value: (Participant | Stream)[]) => {\n    this.chatRefStreams.next(value);\n  };\n\n  updateControlHeight = (value: number) => {\n    this.controlHeight.next(value);\n  };\n\n  updateIsWideScreen = (value: boolean) => {\n    this.isWideScreen.next(value);\n  };\n\n  updateIsMediumScreen = (value: boolean) => {\n    this.isMediumScreen.next(value);\n  };\n\n  updateIsSmallScreen = (value: boolean) => {\n    this.isSmallScreen.next(value);\n  };\n\n  updateAddGrid = (value: boolean) => {\n    this.addGrid.next(value);\n  };\n\n  updateAddAltGrid = (value: boolean) => {\n    this.addAltGrid.next(value);\n  };\n\n  updateGridRows = (value: number) => {\n    this.gridRows.next(value);\n  };\n\n  updateGridCols = (value: number) => {\n    this.gridCols.next(value);\n  };\n\n  updateAltGridRows = (value: number) => {\n    this.altGridRows.next(value);\n  };\n\n  updateAltGridCols = (value: number) => {\n    this.altGridCols.next(value);\n  };\n\n  updateNumberPages = (value: number) => {\n    this.numberPages.next(value);\n  };\n\n  updateCurrentStreams = (value: (Participant | Stream)[]) => {\n    this.currentStreams.next(value);\n  };\n\n  updateShowMiniView = (value: boolean) => {\n    this.showMiniView.next(value);\n  };\n\n  updateNStream = (value: MediaStream | null) => {\n    this.nStream.next(value);\n  };\n\n  updateDefer_receive = (value: boolean) => {\n    this.defer_receive.next(value);\n  };\n\n  updateAllAudioStreams = (value: (Participant | Stream)[]) => {\n    this.allAudioStreams.next(value);\n  };\n\n  updateRemoteScreenStream = (value: Stream[]) => {\n    this.remoteScreenStream.next(value);\n  };\n\n  updateScreenProducer = (value: Producer | null) => {\n    this.screenProducer.next(value);\n  };\n\n  updateLocalScreenProducer = (value: Producer | null) => {\n    this.localScreenProducer.next(value);\n  };\n\n  updateGotAllVids = (value: boolean) => {\n    this.gotAllVids.next(value);\n  };\n\n  updatePaginationHeightWidth = (value: number) => {\n    this.paginationHeightWidth.next(value);\n  };\n\n  updatePaginationDirection = (value: 'horizontal' | 'vertical') => {\n    this.paginationDirection.next(value);\n  };\n\n  updateGridSizes = (value: GridSizes) => {\n    this.gridSizes.next(value);\n  };\n\n  updateScreenForceFullDisplay = (value: boolean) => {\n    this.screenForceFullDisplay.next(value);\n  };\n\n  updateMainGridStream = (value: CustomMediaComponent[]) => {\n    this.mainGridStream.next(value);\n  };\n\n  updateOtherGridStreams = (value: CustomMediaComponent[][]) => {\n    this.otherGridStreams.next(value);\n  };\n\n  updateAudioOnlyStreams = (value: CustomMediaComponent[]) => {\n    this.audioOnlyStreams.next(value);\n  };\n\n  updateVideoInputs = (value: MediaDeviceInfo[]) => {\n    this.videoInputs.next(value);\n  };\n\n  updateAudioInputs = (value: MediaDeviceInfo[]) => {\n    this.audioInputs.next(value);\n  };\n\n  updateMeetingProgressTime = (value: string) => {\n    this.meetingProgressTime.next(value);\n  };\n\n  updateMeetingElapsedTime = (value: number) => {\n    this.meetingElapsedTime.next(value);\n  };\n\n  updateRef_participants = (value: Participant[]) => {\n    this.ref_participants.next(value);\n  };\n\n  // Messages\n  messages = new BehaviorSubject<Message[]>([]);\n  startDirectMessage = new BehaviorSubject<boolean>(false);\n  directMessageDetails = new BehaviorSubject<Participant | null>(null);\n  showMessagesBadge = new BehaviorSubject<boolean>(false);\n\n  // Event Settings\n  audioSetting = new BehaviorSubject<string>('allow');\n  videoSetting = new BehaviorSubject<string>('allow');\n  screenshareSetting = new BehaviorSubject<string>('allow');\n  chatSetting = new BehaviorSubject<string>('allow');\n\n  // Display Settings\n  displayOption = new BehaviorSubject<string>('media');\n  autoWave = new BehaviorSubject<boolean>(true);\n  forceFullDisplay = new BehaviorSubject<boolean>(true);\n  prevForceFullDisplay = new BehaviorSubject<boolean>(false);\n  prevMeetingDisplayType = new BehaviorSubject<string>('video');\n\n  // Waiting Room\n  waitingRoomFilter = new BehaviorSubject<string>('');\n  waitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>([]);\n  waitingRoomCounter = new BehaviorSubject<number>(0);\n  filteredWaitingRoomList = new BehaviorSubject<WaitingRoomParticipant[]>([]);\n\n  // Requests\n  requestFilter = new BehaviorSubject<string>('');\n  requestList = new BehaviorSubject<Request[]>([]);\n  requestCounter = new BehaviorSubject<number>(0);\n  filteredRequestList = new BehaviorSubject<Request[]>([]);\n\n  // Total Requests and Waiting Room\n  totalReqWait = new BehaviorSubject<number>(0);\n\n  // Alerts\n  alertVisible = new BehaviorSubject<boolean>(false);\n  alertMessage = new BehaviorSubject<string>('');\n  alertType = new BehaviorSubject<'success' | 'danger' | 'info' | 'warning'>('success');\n  alertPosition = new BehaviorSubject<\n    'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center'\n  >('top');\n  alertDuration = new BehaviorSubject<number>(3000);\n\n  // Progress Timer\n  progressTimerVisible = new BehaviorSubject<boolean>(true);\n  progressTimerValue = new BehaviorSubject<number>(0);\n\n  // Menu Modals\n  isMenuModalVisible = new BehaviorSubject<boolean>(false);\n  isRecordingModalVisible = new BehaviorSubject<boolean>(false);\n  isSettingsModalVisible = new BehaviorSubject<boolean>(false);\n  isRequestsModalVisible = new BehaviorSubject<boolean>(false);\n  isWaitingModalVisible = new BehaviorSubject<boolean>(false);\n  isCoHostModalVisible = new BehaviorSubject<boolean>(false);\n  isMediaSettingsModalVisible = new BehaviorSubject<boolean>(false);\n  isDisplaySettingsModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Other Modals\n  isParticipantsModalVisible = new BehaviorSubject<boolean>(false);\n  isMessagesModalVisible = new BehaviorSubject<boolean>(false);\n  isConfirmExitModalVisible = new BehaviorSubject<boolean>(false);\n  isConfirmHereModalVisible = new BehaviorSubject<boolean>(false);\n  private suppressConfirmHereForSession = false;\n  isShareEventModalVisible = new BehaviorSubject<boolean>(false);\n  isLoadingModalVisible = new BehaviorSubject<boolean>(false);\n  modernThemeDarkMode = new BehaviorSubject<boolean>(false);\n\n  resolvePreferredTheme = (): boolean => {\n    return typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n      ? window.matchMedia('(prefers-color-scheme: dark)').matches\n      : false;\n  };\n\n  updateModernThemeDarkMode = (value: boolean) => {\n    this.modernThemeDarkMode.next(value);\n    this.updateControlChatButtons();\n    this.cdr.detectChanges();\n  };\n\n  // Recording Options\n  recordingMediaOptions = new BehaviorSubject<string>('video');\n  recordingAudioOptions = new BehaviorSubject<string>('all');\n  recordingVideoOptions = new BehaviorSubject<string>('all');\n  recordingVideoType = new BehaviorSubject<string>('fullDisplay');\n  recordingVideoOptimized = new BehaviorSubject<boolean>(false);\n  recordingDisplayType = new BehaviorSubject<'video' | 'media' | 'all'>('video');\n  recordingAddHLS = new BehaviorSubject<boolean>(true);\n  recordingNameTags = new BehaviorSubject<boolean>(true);\n  recordingBackgroundColor = new BehaviorSubject<string>('#83c0e9');\n  recordingNameTagsColor = new BehaviorSubject<string>('#ffffff');\n  recordingAddText = new BehaviorSubject<boolean>(false);\n  recordingCustomText = new BehaviorSubject<string>('Add Text');\n  recordingCustomTextPosition = new BehaviorSubject<string>('top');\n  recordingCustomTextColor = new BehaviorSubject<string>('#ffffff');\n  recordingOrientationVideo = new BehaviorSubject<string>('landscape');\n  clearedToResume = new BehaviorSubject<boolean>(true);\n  clearedToRecord = new BehaviorSubject<boolean>(true);\n  recordState = new BehaviorSubject<string>('green');\n  showRecordButtons = new BehaviorSubject<boolean>(false);\n  recordingProgressTime = new BehaviorSubject<string>('00:00:00');\n  audioSwitching = new BehaviorSubject<boolean>(false);\n  videoSwitching = new BehaviorSubject<boolean>(false);\n\n  // Media States\n  videoAlreadyOn = new BehaviorSubject<boolean>(false);\n  audioAlreadyOn = new BehaviorSubject<boolean>(false);\n\n  componentSizes = new BehaviorSubject<ComponentSizes>({\n    mainHeight: 0,\n    otherHeight: 0,\n    mainWidth: 0,\n    otherWidth: 0,\n  });\n\n  // Permissions\n  hasCameraPermission = new BehaviorSubject<boolean>(false);\n  hasAudioPermission = new BehaviorSubject<boolean>(false);\n\n  // Transports\n  transportCreated = new BehaviorSubject<boolean>(false);\n  localTransportCreated = new BehaviorSubject<boolean>(false);\n  transportCreatedVideo = new BehaviorSubject<boolean>(false);\n  transportCreatedAudio = new BehaviorSubject<boolean>(false);\n  transportCreatedScreen = new BehaviorSubject<boolean>(false);\n  producerTransport = new BehaviorSubject<Transport | null>(null);\n  localProducerTransport = new BehaviorSubject<Transport | null>(null);\n  videoProducer = new BehaviorSubject<Producer | null>(null);\n  localVideoProducer = new BehaviorSubject<Producer | null>(null);\n  params = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  videoParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  audioParams = new BehaviorSubject<ProducerOptions>({} as ProducerOptions);\n  audioProducer = new BehaviorSubject<Producer | null>(null);\n  audioLevel = new BehaviorSubject<number>(0);\n  localAudioProducer = new BehaviorSubject<Producer | null>(null);\n  consumerTransports = new BehaviorSubject<TransportType[]>([]);\n  consumingTransports = new BehaviorSubject<string[]>([]);\n\n  // Polls\n  polls = new BehaviorSubject<Poll[]>([]);\n  poll = new BehaviorSubject<Poll | null>(null);\n  isPollModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Background\n  customImage = new BehaviorSubject<string>('');\n  selectedImage = new BehaviorSubject<string>('');\n  segmentVideo = new BehaviorSubject<MediaStream | null>(null);\n  selfieSegmentation = new BehaviorSubject<SelfieSegmentation | null>(null);\n  pauseSegmentation = new BehaviorSubject<boolean>(false);\n  processedStream = new BehaviorSubject<MediaStream | null>(null);\n  keepBackground = new BehaviorSubject<boolean>(false);\n  backgroundHasChanged = new BehaviorSubject<boolean>(false);\n  virtualStream = new BehaviorSubject<MediaStream | null>(null);\n  mainCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  prevKeepBackground = new BehaviorSubject<boolean>(false);\n  appliedBackground = new BehaviorSubject<boolean>(false);\n  isBackgroundModalVisible = new BehaviorSubject<boolean>(false);\n  autoClickBackground = new BehaviorSubject<boolean>(false);\n\n  // Breakout Rooms\n  breakoutRooms = new BehaviorSubject<BreakoutParticipant[][]>([]);\n  currentRoomIndex = new BehaviorSubject<number>(0);\n  canStartBreakout = new BehaviorSubject<boolean>(false);\n  breakOutRoomStarted = new BehaviorSubject<boolean>(false);\n  breakOutRoomEnded = new BehaviorSubject<boolean>(false);\n  hostNewRoom = new BehaviorSubject<number>(-1);\n  limitedBreakRoom = new BehaviorSubject<BreakoutParticipant[]>([]);\n  mainRoomsLength = new BehaviorSubject<number>(0);\n  memberRoom = new BehaviorSubject<number>(-1);\n  isBreakoutRoomsModalVisible = new BehaviorSubject<boolean>(false);\n\n  // Whiteboard\n  whiteboardUsers = new BehaviorSubject<WhiteboardUser[]>([]);\n  currentWhiteboardIndex = new BehaviorSubject<number>(0);\n  canStartWhiteboard = new BehaviorSubject<boolean>(false);\n  whiteboardStarted = new BehaviorSubject<boolean>(false);\n  whiteboardEnded = new BehaviorSubject<boolean>(false);\n  whiteboardLimit = new BehaviorSubject<number>(4);\n  isWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\n  isConfigureWhiteboardModalVisible = new BehaviorSubject<boolean>(false);\n  shapes = new BehaviorSubject<Shape[]>([]);\n  useImageBackground = new BehaviorSubject<boolean>(true);\n  redoStack = new BehaviorSubject<Shape[]>([]);\n  undoStack = new BehaviorSubject<string[]>([]);\n  canvasStream = new BehaviorSubject<MediaStream | null>(null);\n  canvasWhiteboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\n\n  // Screenboard\n  canvasScreenboard = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  processedScreenStream = new BehaviorSubject<MediaStream | null>(null);\n  annotateScreenStream = new BehaviorSubject<boolean>(false);\n  mainScreenCanvas = new BehaviorSubject<HTMLCanvasElement | null>(null);\n  isScreenboardModalVisible = new BehaviorSubject<boolean>(false);\n\n  //state variables for the control buttons\n  micActive = new BehaviorSubject<boolean>(\n    this.audioAlreadyOn.value ? this.audioAlreadyOn.value : false,\n  );\n  videoActive = new BehaviorSubject<boolean>(\n    this.videoAlreadyOn.value ? this.videoAlreadyOn.value : false,\n  );\n  screenShareActive = new BehaviorSubject<boolean>(false);\n  endCallActive = new BehaviorSubject<boolean>(false);\n  participantsActive = new BehaviorSubject<boolean>(false);\n  menuActive = new BehaviorSubject<boolean>(false);\n  commentsActive = new BehaviorSubject<boolean>(false);\n\n  // Update functions\n  updateMessages = (value: Message[]) => {\n    this.messages.next(value);\n  };\n\n  updateStartDirectMessage = (value: boolean) => {\n    this.startDirectMessage.next(value);\n  };\n\n  updateDirectMessageDetails = (value: Participant | null) => {\n    this.directMessageDetails.next(value);\n  };\n\n  updateShowMessagesBadge = (value: boolean) => {\n    this.showMessagesBadge.next(value);\n  };\n\n  updateAudioSetting = (value: string) => {\n    this.audioSetting.next(value);\n  };\n\n  updateVideoSetting = (value: string) => {\n    this.videoSetting.next(value);\n  };\n\n  updateScreenshareSetting = (value: string) => {\n    this.screenshareSetting.next(value);\n  };\n\n  updateChatSetting = (value: string) => {\n    this.chatSetting.next(value);\n  };\n\n  updateDisplayOption = (value: string) => {\n    this.displayOption.next(value);\n  };\n\n  updateAutoWave = (value: boolean) => {\n    this.autoWave.next(value);\n  };\n\n  updateForceFullDisplay = (value: boolean) => {\n    this.forceFullDisplay.next(value);\n  };\n\n  updatePrevForceFullDisplay = (value: boolean) => {\n    this.prevForceFullDisplay.next(value);\n  };\n\n  updatePrevMeetingDisplayType = (value: string) => {\n    this.prevMeetingDisplayType.next(value);\n  };\n\n  updateWaitingRoomCounter = (value: number) => {\n    this.waitingRoomCounter.next(value);\n  };\n\n  updateWaitingRoomFilter = (value: string) => {\n    this.waitingRoomFilter.next(value);\n  };\n\n  updateWaitingRoomList = (value: WaitingRoomParticipant[]) => {\n    this.waitingRoomList.next(value);\n    this.filteredWaitingRoomList.next(value);\n    this.waitingRoomCounter.next(value.length);\n  };\n\n  onWaitingRoomClose = () => {\n    this.updateIsWaitingModalVisible(false);\n  };\n\n  updateRequestCounter = (value: number) => {\n    this.requestCounter.next(value);\n  };\n\n  updateRequestFilter = (value: string) => {\n    this.requestFilter.next(value);\n  };\n\n  updateRequestList = (value: Request[]) => {\n    this.requestList.next(value);\n    this.filteredRequestList.next(value);\n    this.requestCounter.next(value.length);\n  };\n\n  onRequestClose = () => {\n    this.updateIsRequestsModalVisible(false);\n  };\n\n  updateTotalReqWait = (value: number) => {\n    this.totalReqWait.next(value);\n  };\n\n  updateAlertVisible = (value: boolean) => {\n    this.alertVisible.next(value);\n  };\n\n  updateAlertMessage = (value: string) => {\n    this.alertMessage.next(value);\n  };\n\n  updateAlertType = (value: 'success' | 'danger' | 'info' | 'warning') => {\n    this.alertType.next(value);\n  };\n\n  updateAlertPosition = (\n    value: 'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center',\n  ) => {\n    this.alertPosition.next(value);\n  };\n\n  updateAlertDuration = (value: number) => {\n    this.alertDuration.next(value);\n  };\n\n  updateProgressTimerVisible = (value: boolean) => {\n    this.progressTimerVisible.next(value);\n  };\n\n  updateProgressTimerValue = (value: number) => {\n    this.progressTimerValue.next(value);\n  };\n\n  updateIsMenuModalVisible = (value: boolean) => {\n    this.isMenuModalVisible.next(value);\n  };\n\n  updateIsRecordingModalVisible = (value: boolean) => {\n    this.isRecordingModalVisible.next(value);\n    if (value) {\n      this.updateConfirmedToRecord(false);\n    } else {\n      if (\n        this.clearedToRecord.getValue() &&\n        this.clearedToResume.getValue() &&\n        this.recordStarted.getValue()\n      ) {\n        this.updateShowRecordButtons(true);\n      }\n    }\n  };\n\n  updateIsSettingsModalVisible = (value: boolean) => {\n    this.isSettingsModalVisible.next(value);\n  };\n\n  updateIsRequestsModalVisible = (value: boolean) => {\n    this.isRequestsModalVisible.next(value);\n  };\n\n  updateIsWaitingModalVisible = (value: boolean) => {\n    this.isWaitingModalVisible.next(value);\n  };\n\n  updateIsCoHostModalVisible = (value: boolean) => {\n    this.isCoHostModalVisible.next(value);\n  };\n\n  updateIsMediaSettingsModalVisible = (value: boolean) => {\n    this.isMediaSettingsModalVisible.next(value);\n  };\n\n  updateIsDisplaySettingsModalVisible = (value: boolean) => {\n    this.isDisplaySettingsModalVisible.next(value);\n  };\n\n  updateIsParticipantsModalVisible = (value: boolean) => {\n    this.isParticipantsModalVisible.next(value);\n  };\n\n  updateIsMessagesModalVisible = (value: boolean) => {\n    this.isMessagesModalVisible.next(value);\n    if (!value) {\n      this.updateShowMessagesBadge(false);\n    }\n  };\n\n  updateIsConfirmExitModalVisible = (value: boolean) => {\n    this.isConfirmExitModalVisible.next(value);\n  };\n\n  updateIsConfirmHereModalVisible = (value: boolean) => {\n    this.isConfirmHereModalVisible.next(value);\n  };\n\n  updateIsLoadingModalVisible = (value: boolean) => {\n    this.isLoadingModalVisible.next(value);\n  };\n\n  updateIsShareEventModalVisible = (value: boolean) => {\n    this.isShareEventModalVisible.next(value);\n  };\n\n  updateRecordingMediaOptions = (value: string) => {\n    this.recordingMediaOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAudioOptions = (value: string) => {\n    this.recordingAudioOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoOptions = (value: string) => {\n    this.recordingVideoOptions.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoType = (value: string) => {\n    this.recordingVideoType.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingVideoOptimized = (value: boolean) => {\n    this.recordingVideoOptimized.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingDisplayType = (value: 'video' | 'media' | 'all') => {\n    this.recordingDisplayType.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAddHLS = (value: boolean) => {\n    this.recordingAddHLS.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingAddText = (value: boolean) => {\n    this.recordingAddText.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomText = (value: string) => {\n    this.recordingCustomText.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomTextPosition = (value: string) => {\n    this.recordingCustomTextPosition.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingCustomTextColor = (value: string) => {\n    this.recordingCustomTextColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingNameTags = (value: boolean) => {\n    this.recordingNameTags.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingBackgroundColor = (value: string) => {\n    this.recordingBackgroundColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingNameTagsColor = (value: string) => {\n    this.recordingNameTagsColor.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateRecordingOrientationVideo = (value: string) => {\n    this.recordingOrientationVideo.next(value);\n    this.clearedToRecord.next(false);\n  };\n\n  updateClearedToResume = (value: boolean) => {\n    this.clearedToResume.next(value);\n  };\n\n  updateClearedToRecord = (value: boolean) => {\n    this.clearedToRecord.next(value);\n  };\n\n  updateRecordState = (value: string) => {\n    if (this.recordStarted.value && !this.recordStopped.value) {\n      if (!this.recordPaused.value) {\n        this.recordState.next('red');\n      } else {\n        this.recordState.next('yellow');\n      }\n    } else {\n      this.recordState.next(value);\n    }\n    this.recordState.next(value);\n  };\n\n  updateShowRecordButtons = (value: boolean) => {\n    this.showRecordButtons.next(value);\n  };\n\n  updateRecordingProgressTime = (value: string) => {\n    this.recordingProgressTime.next(value);\n  };\n\n  updateAudioSwitching = (value: boolean) => {\n    this.audioSwitching.next(value);\n  };\n\n  updateVideoSwitching = (value: boolean) => {\n    this.videoSwitching.next(value);\n  };\n\n  updateVideoAlreadyOn = (value: boolean) => {\n    this.videoAlreadyOn.next(value);\n    this.videoActive.next(value);\n  };\n\n  updateAudioAlreadyOn = (value: boolean) => {\n    this.audioAlreadyOn.next(value);\n    this.micActive.next(value);\n  };\n\n  updateComponentSizes = (sizes: ComponentSizes) => {\n    this.componentSizes.next(sizes);\n  };\n\n  updateHasCameraPermission = (value: boolean) => {\n    this.hasCameraPermission.next(value);\n  };\n\n  updateHasAudioPermission = (value: boolean) => {\n    this.hasAudioPermission.next(value);\n  };\n\n  requestPermissionCamera(): Promise<string> {\n    // Implement the request permission logic here\n    return Promise.resolve('granted');\n  }\n\n  requestPermissionAudio(): Promise<string> {\n    // Implement the request permission logic here\n    return Promise.resolve('granted');\n  }\n\n  updateTransportCreated = (value: boolean) => {\n    this.transportCreated.next(value);\n  };\n\n  updateLocalTransportCreated = (value: boolean) => {\n    this.localTransportCreated.next(value);\n  };\n\n  updateTransportCreatedVideo = (value: boolean) => {\n    this.transportCreatedVideo.next(value);\n  };\n\n  updateTransportCreatedAudio = (value: boolean) => {\n    this.transportCreatedAudio.next(value);\n  };\n\n  updateTransportCreatedScreen = (value: boolean) => {\n    this.transportCreatedScreen.next(value);\n  };\n\n  updateProducerTransport = (value: Transport | null) => {\n    this.producerTransport.next(value);\n  };\n\n  updateLocalProducerTransport = (value: Transport | null) => {\n    this.localProducerTransport.next(value);\n  };\n\n  updateVideoProducer = (value: Producer | null) => {\n    this.videoProducer.next(value);\n  };\n\n  updateLocalVideoProducer = (value: Producer | null) => {\n    this.localVideoProducer.next(value);\n  }\n\n  updateParams = (value: ProducerOptions) => {\n    this.params.next(value);\n  };\n\n  updateVideoParams = (value: ProducerOptions) => {\n    this.videoParams.next(value);\n  };\n\n  updateAudioParams = (value: ProducerOptions) => {\n    this.audioParams.next(value);\n  };\n\n  updateAudioProducer = (value: Producer | null) => {\n    this.audioProducer.next(value);\n  };\n\n  updateAudioLevel = (value: number) => {\n    this.audioLevel.next(value);\n  };\n\n  updateLocalAudioProducer = (value: Producer | null) => {\n    this.localAudioProducer.next(value);\n  };\n\n  updateConsumerTransports = (value: TransportType[]) => {\n    this.consumerTransports.next(value);\n  };\n\n  updateConsumingTransports = (value: string[]) => {\n    this.consumingTransports.next(value);\n  };\n\n  updatePolls = (value: Poll[]) => {\n    this.polls.next(value);\n  };\n\n  updatePoll = (value: Poll | null) => {\n    this.poll.next(value);\n  };\n\n  updateIsPollModalVisible = (value: boolean) => {\n    this.isPollModalVisible.next(value);\n  };\n\n  updateCustomImage = (value: string) => {\n    this.customImage.next(value);\n  };\n\n  updateSelectedImage = (value: string) => {\n    this.selectedImage.next(value);\n  };\n\n  updateSegmentVideo = (value: MediaStream | null) => {\n    this.segmentVideo.next(value);\n  };\n\n  updateSelfieSegmentation = (value: SelfieSegmentation | null) => {\n    this.selfieSegmentation.next(value);\n  };\n\n  updatePauseSegmentation = (value: boolean) => {\n    this.pauseSegmentation.next(value);\n  };\n\n  updateProcessedStream = (value: MediaStream | null) => {\n    this.processedStream.next(value);\n  };\n\n  updateKeepBackground = (value: boolean) => {\n    this.keepBackground.next(value);\n  };\n\n  updateBackgroundHasChanged = (value: boolean) => {\n    this.backgroundHasChanged.next(value);\n  };\n\n  updateVirtualStream = (value: MediaStream | null) => {\n    this.virtualStream.next(value);\n  };\n\n  updateMainCanvas = (value: HTMLCanvasElement | null) => {\n    this.mainCanvas.next(value);\n  };\n\n  updatePrevKeepBackground = (value: boolean) => {\n    this.prevKeepBackground.next(value);\n  };\n\n  updateAppliedBackground = (value: boolean) => {\n    this.appliedBackground.next(value);\n  };\n\n  updateIsBackgroundModalVisible = (value: boolean) => {\n    this.isBackgroundModalVisible.next(value);\n  };\n\n  updateAutoClickBackground = (value: boolean) => {\n    this.autoClickBackground.next(value);\n  };\n\n  updateBreakoutRooms = (value: BreakoutParticipant[][]) => {\n    this.breakoutRooms.next(value);\n  };\n\n  updateCurrentRoomIndex = (value: number) => {\n    this.currentRoomIndex.next(value);\n  };\n\n  updateCanStartBreakout = (value: boolean) => {\n    this.canStartBreakout.next(value);\n  };\n\n  updateBreakOutRoomStarted = (value: boolean) => {\n    this.breakOutRoomStarted.next(value);\n  };\n\n  updateBreakOutRoomEnded = (value: boolean) => {\n    this.breakOutRoomEnded.next(value);\n  };\n\n  updateHostNewRoom = (value: number) => {\n    this.hostNewRoom.next(value);\n  };\n\n  updateLimitedBreakRoom = (value: BreakoutParticipant[]) => {\n    this.limitedBreakRoom.next(value);\n  };\n\n  updateMainRoomsLength = (value: number) => {\n    this.mainRoomsLength.next(value);\n  };\n\n  updateMemberRoom = (value: number) => {\n    this.memberRoom.next(value);\n  };\n\n  updateIsBreakoutRoomsModalVisible = (value: boolean) => {\n    this.isBreakoutRoomsModalVisible.next(value);\n  };\n\n  updateWhiteboardUsers = (value: WhiteboardUser[]) => {\n    this.whiteboardUsers.next(value);\n  };\n\n  updateCurrentWhiteboardIndex = (value: number) => {\n    this.currentWhiteboardIndex.next(value);\n  };\n\n  updateCanStartWhiteboard = (value: boolean) => {\n    this.canStartWhiteboard.next(value);\n  };\n\n  updateWhiteboardStarted = (value: boolean) => {\n    this.whiteboardStarted.next(value);\n  };\n\n  updateWhiteboardEnded = (value: boolean) => {\n    this.whiteboardEnded.next(value);\n  };\n\n  updateWhiteboardLimit = (value: number) => {\n    this.whiteboardLimit.next(value);\n  };\n\n  updateIsWhiteboardModalVisible = (value: boolean) => {\n    this.isWhiteboardModalVisible.next(value);\n  };\n\n  updateIsConfigureWhiteboardModalVisible = (value: boolean) => {\n    this.isConfigureWhiteboardModalVisible.next(value);\n  };\n\n  updateShapes = (value: Shape[]) => {\n    this.shapes.next(value);\n  };\n\n  updateUseImageBackground = (value: boolean) => {\n    this.useImageBackground.next(value);\n  };\n\n  updateRedoStack = (value: Shape[]) => {\n    this.redoStack.next(value);\n  };\n\n  updateUndoStack = (value: string[]) => {\n    this.undoStack.next(value);\n  };\n\n  updateCanvasStream = (value: MediaStream | null) => {\n    this.canvasStream.next(value);\n  };\n\n  updateCanvasWhiteboard = (value: HTMLCanvasElement | null) => {\n    this.canvasWhiteboard.next(value);\n  };\n\n  updateCanvasScreenboard = (value: HTMLCanvasElement | null) => {\n    this.canvasScreenboard.next(value);\n  };\n\n  updateProcessedScreenStream = (value: MediaStream | null) => {\n    this.processedScreenStream.next(value);\n  };\n\n  updateAnnotateScreenStream = (value: boolean) => {\n    this.annotateScreenStream.next(value);\n  };\n\n  updateMainScreenCanvas = (value: HTMLCanvasElement | null) => {\n    this.mainScreenCanvas.next(value);\n  };\n\n  updateIsScreenboardModalVisible = (value: boolean) => {\n    this.isScreenboardModalVisible.next(value);\n  };\n\n  checkOrientation = () => {\n    const isPortrait = window.matchMedia('(orientation: portrait)').matches;\n    return isPortrait ? 'portrait' : 'landscape';\n  };\n\n  showAlert = ({\n    message,\n    type,\n    duration = 3000,\n    position,\n  }: {\n    message: string;\n    type: 'success' | 'danger' | 'info' | 'warning';\n    duration?: number;\n    position?: 'top' | 'bottom' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center';\n  }) => {\n    const effectivePosition = position ?? (type === 'danger' || type === 'warning' ? 'center' : 'top');\n\n    this.updateAlertMessage(message);\n    this.updateAlertType(type);\n    this.updateAlertPosition(effectivePosition);\n    this.updateAlertDuration(duration);\n    this.updateAlertVisible(true);\n  };\n\n  getAllParams() {\n    return {\n      localUIMode: this.localUIMode.value, // Local UI mode\n\n      // Room Details\n      roomName: this.roomName.value,\n      member: this.member.value,\n      adminPasscode: this.adminPasscode.value,\n      youAreCoHost: this.youAreCoHost.value,\n      youAreHost: this.youAreHost.value,\n      islevel: this.islevel.value,\n      confirmedToRecord: this.confirmedToRecord.value,\n      meetingDisplayType: this.meetingDisplayType.value,\n      meetingVideoOptimized: this.meetingVideoOptimized.value,\n      eventType: this.eventType.value,\n      participants: this.participants.value,\n      filteredParticipants: this.filteredParticipants.value,\n      participantsCounter: this.participantsCounter.value,\n      participantsFilter: this.participantsFilter.value,\n\n      // More room details - media\n      consume_sockets: this.consume_sockets.value,\n      rtpCapabilities: this.rtpCapabilities.value,\n      roomRecvIPs: this.roomRecvIPs.value,\n      meetingRoomParams: this.meetingRoomParams.value,\n      itemPageLimit: this.itemPageLimit.value,\n      audioOnlyRoom: this.audioOnlyRoom.value,\n      addForBasic: this.addForBasic.value,\n      screenPageLimit: this.screenPageLimit.value,\n      shareScreenStarted: this.shareScreenStarted.value,\n      shared: this.shared.value,\n      targetOrientation: this.targetOrientation.value,\n      targetResolution: this.targetResolution.value,\n      targetResolutionHost: this.targetResolutionHost.value,\n      vidCons: this.vidCons.value,\n      frameRate: this.frameRate.value,\n      hParams: this.hParams.value,\n      vParams: this.vParams.value,\n      screenParams: this.screenParams.value,\n      aParams: this.aParams.value,\n\n      // More room details - recording\n      recordingAudioPausesLimit: this.recordingAudioPausesLimit.value,\n      recordingAudioPausesCount: this.recordingAudioPausesCount.value,\n      recordingAudioSupport: this.recordingAudioSupport.value,\n      recordingAudioPeopleLimit: this.recordingAudioPeopleLimit.value,\n      recordingAudioParticipantsTimeLimit: this.recordingAudioParticipantsTimeLimit.value,\n      recordingVideoPausesCount: this.recordingVideoPausesCount.value,\n      recordingVideoPausesLimit: this.recordingVideoPausesLimit.value,\n      recordingVideoSupport: this.recordingVideoSupport.value,\n      recordingVideoPeopleLimit: this.recordingVideoPeopleLimit.value,\n      recordingVideoParticipantsTimeLimit: this.recordingVideoParticipantsTimeLimit.value,\n      recordingAllParticipantsSupport: this.recordingAllParticipantsSupport.value,\n      recordingVideoParticipantsSupport: this.recordingVideoParticipantsSupport.value,\n      recordingAllParticipantsFullRoomSupport: this.recordingAllParticipantsFullRoomSupport.value,\n      recordingVideoParticipantsFullRoomSupport:\n        this.recordingVideoParticipantsFullRoomSupport.value,\n      recordingPreferredOrientation: this.recordingPreferredOrientation.value,\n      recordingSupportForOtherOrientation: this.recordingSupportForOtherOrientation.value,\n      recordingMultiFormatsSupport: this.recordingMultiFormatsSupport.value,\n\n      userRecordingParams: this.userRecordingParams.value,\n      canRecord: this.canRecord.value,\n      startReport: this.startReport.value,\n      endReport: this.endReport.value,\n      recordStartTime: this.recordStartTime.value,\n      recordElapsedTime: this.recordElapsedTime.value,\n      isTimerRunning: this.isTimerRunning.value,\n      canPauseResume: this.canPauseResume.value,\n      recordChangeSeconds: this.recordChangeSeconds.value,\n      pauseLimit: this.pauseLimit.value,\n      pauseRecordCount: this.pauseRecordCount.value,\n      canLaunchRecord: this.canLaunchRecord.value,\n      stopLaunchRecord: this.stopLaunchRecord.value,\n\n      participantsAll: this.participantsAll.value,\n\n      firstAll: this.firstAll.value,\n      updateMainWindow: this.updateMainWindow.value,\n      first_round: this.first_round.value,\n      landScaped: this.landScaped.value,\n      lock_screen: this.lock_screen.value,\n      screenId: this.screenId.value,\n      allVideoStreams: this.allVideoStreams.value,\n      newLimitedStreams: this.newLimitedStreams.value,\n      newLimitedStreamsIDs: this.newLimitedStreamsIDs.value,\n      activeSounds: this.activeSounds.value,\n      screenShareIDStream: this.screenShareIDStream.value,\n      screenShareNameStream: this.screenShareNameStream.value,\n      adminIDStream: this.adminIDStream.value,\n      adminNameStream: this.adminNameStream.value,\n      youYouStream: this.youYouStream.value,\n      youYouStreamIDs: this.youYouStreamIDs.value,\n      localStream: this.localStream.value,\n      recordStarted: this.recordStarted.value,\n      recordResumed: this.recordResumed.value,\n      recordPaused: this.recordPaused.value,\n      recordStopped: this.recordStopped.value,\n      adminRestrictSetting: this.adminRestrictSetting.value,\n      videoRequestState: this.videoRequestState.value,\n      videoRequestTime: this.videoRequestTime.value,\n      videoAction: this.videoAction.value,\n      localStreamVideo: this.localStreamVideo.value,\n      userDefaultVideoInputDevice: this.userDefaultVideoInputDevice.value,\n      currentFacingMode: this.currentFacingMode.value,\n      prevFacingMode: this.prevFacingMode.value,\n      defVideoID: this.defVideoID.value,\n      allowed: this.allowed.value,\n      dispActiveNames: this.dispActiveNames.value,\n      p_dispActiveNames: this.p_dispActiveNames.value,\n      activeNames: this.activeNames.value,\n      prevActiveNames: this.prevActiveNames.value,\n      p_activeNames: this.p_activeNames.value,\n      membersReceived: this.membersReceived.value,\n      deferScreenReceived: this.deferScreenReceived.value,\n      hostFirstSwitch: this.hostFirstSwitch.value,\n      micAction: this.micAction.value,\n      screenAction: this.screenAction.value,\n      chatAction: this.chatAction.value,\n      audioRequestState: this.audioRequestState.value,\n      screenRequestState: this.screenRequestState.value,\n      chatRequestState: this.chatRequestState.value,\n      audioRequestTime: this.audioRequestTime.value,\n      screenRequestTime: this.screenRequestTime.value,\n      chatRequestTime: this.chatRequestTime.value,\n      updateRequestIntervalSeconds: this.updateRequestIntervalSeconds.value,\n      oldSoundIds: this.oldSoundIds.value,\n      hostLabel: this.hostLabel.value,\n      mainScreenFilled: this.mainScreenFilled.value,\n      localStreamScreen: this.localStreamScreen.value,\n      screenAlreadyOn: this.screenAlreadyOn.value,\n      chatAlreadyOn: this.chatAlreadyOn.value,\n      redirectURL: this.redirectURL.value,\n      oldAllStreams: this.oldAllStreams.value,\n      adminVidID: this.adminVidID.value,\n      streamNames: this.streamNames.value,\n      non_alVideoStreams: this.non_alVideoStreams.value,\n      sortAudioLoudness: this.sortAudioLoudness.value,\n      audioDecibels: this.audioDecibels.value,\n      mixed_alVideoStreams: this.mixed_alVideoStreams.value,\n      non_alVideoStreams_muted: this.non_alVideoStreams_muted.value,\n      paginatedStreams: this.paginatedStreams.value,\n      localStreamAudio: this.localStreamAudio.value,\n      defAudioID: this.defAudioID.value,\n      userDefaultAudioInputDevice: this.userDefaultAudioInputDevice.value,\n      userDefaultAudioOutputDevice: this.userDefaultAudioOutputDevice.value,\n      prevAudioInputDevice: this.prevAudioInputDevice.value,\n      prevVideoInputDevice: this.prevVideoInputDevice.value,\n      audioPaused: this.audioPaused.value,\n      mainScreenPerson: this.mainScreenPerson.value,\n      adminOnMainScreen: this.adminOnMainScreen.value,\n      screenStates: this.screenStates.value,\n      prevScreenStates: this.prevScreenStates.value,\n      updateDateState: this.updateDateState.value,\n      lastUpdate: this.lastUpdate.value,\n      nForReadjustRecord: this.nForReadjustRecord.value,\n      fixedPageLimit: this.fixedPageLimit.value,\n      removeAltGrid: this.removeAltGrid.value,\n      nForReadjust: this.nForReadjust.value,\n      lastReorderTime: this.lastReorderTime.value,\n      reorderInterval: this.reorderInterval.value,\n      fastReorderInterval: this.fastReorderInterval.value,\n      audStreamNames: this.audStreamNames.value,\n      currentUserPage: this.currentUserPage.value,\n      mainHeightWidth: this.mainHeightWidth.value,\n      prevMainHeightWidth: this.prevMainHeightWidth.value,\n      prevDoPaginate: this.prevDoPaginate.value,\n      doPaginate: this.doPaginate.value,\n      shareEnded: this.shareEnded.value,\n      lStreams: this.lStreams.value,\n      chatRefStreams: this.chatRefStreams.value,\n      controlHeight: this.controlHeight.value,\n      isWideScreen: this.isWideScreen.value,\n      isMediumScreen: this.isMediumScreen.value,\n      isSmallScreen: this.isSmallScreen.value,\n      addGrid: this.addGrid.value,\n      addAltGrid: this.addAltGrid.value,\n      gridRows: this.gridRows.value,\n      gridCols: this.gridCols.value,\n      altGridRows: this.altGridRows.value,\n      altGridCols: this.altGridCols.value,\n      numberPages: this.numberPages.value,\n      currentStreams: this.currentStreams.value,\n      showMiniView: this.showMiniView.value,\n      nStream: this.nStream.value,\n      defer_receive: this.defer_receive.value,\n      allAudioStreams: this.allAudioStreams.value,\n      screenProducer: this.screenProducer.value,\n      remoteScreenStream: this.remoteScreenStream.value,\n      gotAllVids: this.gotAllVids.value,\n      paginationHeightWidth: this.paginationHeightWidth.value,\n      paginationDirection: this.paginationDirection.value,\n      gridSizes: this.gridSizes.value,\n      screenForceFullDisplay: this.screenForceFullDisplay.value,\n      mainGridStream: this.mainGridStream.value,\n      otherGridStreams: this.otherGridStreams.value,\n      audioOnlyStreams: this.audioOnlyStreams.value,\n      videoInputs: this.videoInputs.value,\n      audioInputs: this.audioInputs.value,\n      meetingProgressTime: this.meetingProgressTime.value,\n      meetingElapsedTime: this.meetingElapsedTime.value,\n\n      ref_participants: this.ref_participants.value,\n\n      messages: this.messages.value,\n      startDirectMessage: this.startDirectMessage.value,\n      directMessageDetails: this.directMessageDetails.value,\n      coHost: this.coHost.value,\n      coHostResponsibility: this.coHostResponsibility.value,\n\n      // Event settings\n      audioSetting: this.audioSetting.value,\n      videoSetting: this.videoSetting.value,\n      screenshareSetting: this.screenshareSetting.value,\n      chatSetting: this.chatSetting.value,\n\n      // Display settings\n      autoWave: this.autoWave.value,\n      forceFullDisplay: this.forceFullDisplay.value,\n      prevForceFullDisplay: this.prevForceFullDisplay.value,\n      prevMeetingDisplayType: this.prevMeetingDisplayType.value,\n\n      // Waiting room\n      waitingRoomFilter: this.waitingRoomFilter.value,\n      waitingRoomList: this.waitingRoomList.value,\n      waitingRoomCounter: this.waitingRoomCounter.value,\n      filteredWaitingRoomList: this.filteredWaitingRoomList.value,\n\n      // Requests\n      requestFilter: this.requestFilter.value,\n      requestList: this.requestList.value,\n      requestCounter: this.requestCounter.value,\n      filteredRequestList: this.filteredRequestList.value,\n\n      // Total requests and waiting room\n      totalReqWait: this.totalReqWait.value,\n\n      // Alerts\n      alertVisible: this.alertVisible.value,\n      alertMessage: this.alertMessage.value,\n      alertType: this.alertType.value,\n      alertPosition: this.alertPosition.value,\n      alertDuration: this.alertDuration.value,\n\n      // Progress Timer\n      progressTimerVisible: this.progressTimerVisible.value,\n      progressTimerValue: this.progressTimerValue.value,\n\n      // Menu modals\n      isMenuModalVisible: this.isMenuModalVisible.value,\n      isRecordingModalVisible: this.isRecordingModalVisible.value,\n      isSettingsModalVisible: this.isSettingsModalVisible.value,\n      isRequestsModalVisible: this.isRequestsModalVisible.value,\n      isWaitingModalVisible: this.isWaitingModalVisible.value,\n      isCoHostModalVisible: this.isCoHostModalVisible.value,\n      isMediaSettingsModalVisible: this.isMediaSettingsModalVisible.value,\n      isDisplaySettingsModalVisible: this.isDisplaySettingsModalVisible.value,\n\n      // Other Modals\n      isParticipantsModalVisible: this.isParticipantsModalVisible.value,\n      isMessagesModalVisible: this.isMessagesModalVisible.value,\n      isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n      isConfirmHereModalVisible: this.isConfirmHereModalVisible.value,\n      isLoadingModalVisible: this.isLoadingModalVisible.value,\n\n      // Recording Options\n      recordingMediaOptions: this.recordingMediaOptions.value,\n      recordingAudioOptions: this.recordingAudioOptions.value,\n      recordingVideoOptions: this.recordingVideoOptions.value,\n      recordingVideoType: this.recordingVideoType.value,\n      recordingVideoOptimized: this.recordingVideoOptimized.value,\n      recordingDisplayType: this.recordingDisplayType.value,\n      recordingAddHLS: this.recordingAddHLS.value,\n      recordingAddText: this.recordingAddText.value,\n      recordingCustomText: this.recordingCustomText.value,\n      recordingCustomTextPosition: this.recordingCustomTextPosition.value,\n      recordingCustomTextColor: this.recordingCustomTextColor.value,\n      recordingNameTags: this.recordingNameTags.value,\n      recordingBackgroundColor: this.recordingBackgroundColor.value,\n      recordingNameTagsColor: this.recordingNameTagsColor.value,\n      recordingOrientationVideo: this.recordingOrientationVideo.value,\n      clearedToResume: this.clearedToResume.value,\n      clearedToRecord: this.clearedToRecord.value,\n      recordState: this.recordState.value,\n      showRecordButtons: this.showRecordButtons.value,\n      recordingProgressTime: this.recordingProgressTime.value,\n      audioSwitching: this.audioSwitching.value,\n      videoSwitching: this.videoSwitching.value,\n\n      // Media states\n      videoAlreadyOn: this.videoAlreadyOn.value,\n      audioAlreadyOn: this.audioAlreadyOn.value,\n      componentSizes: this.componentSizes.value,\n\n      // Permissions\n      hasCameraPermission: this.hasCameraPermission.value,\n      hasAudioPermission: this.hasAudioPermission.value,\n\n      // Transports\n      transportCreated: this.transportCreated.value,\n      localTransportCreated: this.localTransportCreated.value,\n      transportCreatedVideo: this.transportCreatedVideo.value,\n      transportCreatedAudio: this.transportCreatedAudio.value,\n      transportCreatedScreen: this.transportCreatedScreen.value,\n      producerTransport: this.producerTransport.value,\n      localProducerTransport: this.localProducerTransport.value,\n      videoProducer: this.videoProducer.value,\n      localVideoProducer: this.localVideoProducer.value,\n      params: this.params.value,\n      videoParams: this.videoParams.value,\n      audioParams: this.audioParams.value,\n      audioProducer: this.audioProducer.value,\n      audioLevel: this.audioLevel.value,\n      localAudioProducer: this.localAudioProducer.value,\n      consumerTransports: this.consumerTransports.value,\n      consumingTransports: this.consumingTransports.value,\n\n      // Polls\n      polls: this.polls.value,\n      poll: this.poll.value,\n      isPollModalVisible: this.isPollModalVisible.value,\n\n      // Background\n      customImage: this.customImage.value,\n      selectedImage: this.selectedImage.value,\n      segmentVideo: this.segmentVideo.value,\n      selfieSegmentation: this.selfieSegmentation.value,\n      pauseSegmentation: this.pauseSegmentation.value,\n      processedStream: this.processedStream.value,\n      keepBackground: this.keepBackground.value,\n      backgroundHasChanged: this.backgroundHasChanged.value,\n      virtualStream: this.virtualStream.value,\n      mainCanvas: this.mainCanvas.value,\n      prevKeepBackground: this.prevKeepBackground.value,\n      appliedBackground: this.appliedBackground.value,\n      isBackgroundModalVisible: this.isBackgroundModalVisible.value,\n      autoClickBackground: this.autoClickBackground.value,\n\n      // Breakout rooms\n      breakoutRooms: this.breakoutRooms.value,\n      currentRoomIndex: this.currentRoomIndex.value,\n      canStartBreakout: this.canStartBreakout.value,\n      breakOutRoomStarted: this.breakOutRoomStarted.value,\n      breakOutRoomEnded: this.breakOutRoomEnded.value,\n      hostNewRoom: this.hostNewRoom.value,\n      limitedBreakRoom: this.limitedBreakRoom.value,\n      mainRoomsLength: this.mainRoomsLength.value,\n      memberRoom: this.memberRoom.value,\n      isBreakoutRoomsModalVisible: this.isBreakoutRoomsModalVisible.value,\n\n      // Whiteboard\n      whiteboardUsers: this.whiteboardUsers.value,\n      currentWhiteboardIndex: this.currentWhiteboardIndex.value,\n      canStartWhiteboard: this.canStartWhiteboard.value,\n      whiteboardStarted: this.whiteboardStarted.value,\n      whiteboardEnded: this.whiteboardEnded.value,\n      whiteboardLimit: this.whiteboardLimit.value,\n      isWhiteboardModalVisible: this.isWhiteboardModalVisible.value,\n      isConfigureWhiteboardModalVisible: this.isConfigureWhiteboardModalVisible.value,\n      shapes: this.shapes.value,\n      useImageBackground: this.useImageBackground.value,\n      redoStack: this.redoStack.value,\n      undoStack: this.undoStack.value,\n      canvasStream: this.canvasStream.value,\n      canvasWhiteboard: this.canvasWhiteboard.value,\n\n      // Screenboard\n      canvasScreenboard: this.canvasScreenboard.value,\n      processedScreenStream: this.processedScreenStream.value,\n      annotateScreenStream: this.annotateScreenStream.value,\n      mainScreenCanvas: this.mainScreenCanvas.value,\n      isScreenboardModalVisible: this.isScreenboardModalVisible.value,\n\n      validated: this.validated.value,\n      device: this.device.value,\n      socket: this.socket.value,\n      localSocket: this.localSocket!.value,\n      checkMediaPermission: false,\n      onWeb: true,\n\n      // Update functions\n      updateRoomName: this.updateRoomName.bind(this),\n      updateMember: this.updateMember.bind(this),\n      updateAdminPasscode: this.updateAdminPasscode.bind(this),\n      updateYouAreCoHost: this.updateYouAreCoHost.bind(this),\n      updateYouAreHost: this.updateYouAreHost.bind(this),\n      updateIslevel: this.updateIslevel.bind(this),\n      updateCoHost: this.updateCoHost.bind(this),\n      updateCoHostResponsibility: this.updateCoHostResponsibility.bind(this),\n      updateConfirmedToRecord: this.updateConfirmedToRecord.bind(this),\n      updateMeetingDisplayType: this.updateMeetingDisplayType.bind(this),\n      updateMeetingVideoOptimized: this.updateMeetingVideoOptimized.bind(this),\n      updateEventType: this.updateEventType.bind(this),\n      updateParticipants: this.updateParticipants.bind(this),\n      updateParticipantsCounter: this.updateParticipantsCounter.bind(this),\n      updateParticipantsFilter: this.updateParticipantsFilter.bind(this),\n\n      // More update functions for media details\n      updateConsume_sockets: this.updateConsume_sockets.bind(this),\n      updateRtpCapabilities: this.updateRtpCapabilities.bind(this),\n      updateRoomRecvIPs: this.updateRoomRecvIPs.bind(this),\n      updateMeetingRoomParams: this.updateMeetingRoomParams.bind(this),\n      updateItemPageLimit: this.updateItemPageLimit.bind(this),\n      updateAudioOnlyRoom: this.updateAudioOnlyRoom.bind(this),\n      updateAddForBasic: this.updateAddForBasic.bind(this),\n      updateScreenPageLimit: this.updateScreenPageLimit.bind(this),\n      updateShareScreenStarted: this.updateShareScreenStarted.bind(this),\n      updateShared: this.updateShared.bind(this),\n      updateTargetOrientation: this.updateTargetOrientation.bind(this),\n      updateTargetResolution: this.updateTargetResolution.bind(this),\n      updateTargetResolutionHost: this.updateTargetResolutionHost.bind(this),\n      updateVidCons: this.updateVidCons.bind(this),\n      updateFrameRate: this.updateFrameRate.bind(this),\n      updateHParams: this.updateHParams.bind(this),\n      updateVParams: this.updateVParams.bind(this),\n      updateScreenParams: this.updateScreenParams.bind(this),\n      updateAParams: this.updateAParams.bind(this),\n\n      // More update functions for recording details\n      updateRecordingAudioPausesLimit: this.updateRecordingAudioPausesLimit.bind(this),\n      updateRecordingAudioPausesCount: this.updateRecordingAudioPausesCount.bind(this),\n      updateRecordingAudioSupport: this.updateRecordingAudioSupport.bind(this),\n      updateRecordingAudioPeopleLimit: this.updateRecordingAudioPeopleLimit.bind(this),\n      updateRecordingAudioParticipantsTimeLimit:\n        this.updateRecordingAudioParticipantsTimeLimit.bind(this),\n      updateRecordingVideoPausesCount: this.updateRecordingVideoPausesCount.bind(this),\n      updateRecordingVideoPausesLimit: this.updateRecordingVideoPausesLimit.bind(this),\n      updateRecordingVideoSupport: this.updateRecordingVideoSupport.bind(this),\n      updateRecordingVideoPeopleLimit: this.updateRecordingVideoPeopleLimit.bind(this),\n      updateRecordingVideoParticipantsTimeLimit:\n        this.updateRecordingVideoParticipantsTimeLimit.bind(this),\n      updateRecordingAllParticipantsSupport: this.updateRecordingAllParticipantsSupport.bind(this),\n      updateRecordingVideoParticipantsSupport:\n        this.updateRecordingVideoParticipantsSupport.bind(this),\n      updateRecordingAllParticipantsFullRoomSupport:\n        this.updateRecordingAllParticipantsFullRoomSupport.bind(this),\n      updateRecordingVideoParticipantsFullRoomSupport:\n        this.updateRecordingVideoParticipantsFullRoomSupport.bind(this),\n      updateRecordingPreferredOrientation: this.updateRecordingPreferredOrientation.bind(this),\n      updateRecordingSupportForOtherOrientation:\n        this.updateRecordingSupportForOtherOrientation.bind(this),\n      updateRecordingMultiFormatsSupport: this.updateRecordingMultiFormatsSupport.bind(this),\n\n      updateUserRecordingParams: this.updateUserRecordingParams.bind(this),\n      updateCanRecord: this.updateCanRecord.bind(this),\n      updateStartReport: this.updateStartReport.bind(this),\n      updateEndReport: this.updateEndReport.bind(this),\n      updateRecordTimerInterval: this.updateRecordTimerInterval.bind(this),\n      updateRecordStartTime: this.updateRecordStartTime.bind(this),\n      updateRecordElapsedTime: this.updateRecordElapsedTime.bind(this),\n      updateIsTimerRunning: this.updateIsTimerRunning.bind(this),\n      updateCanPauseResume: this.updateCanPauseResume.bind(this),\n      updateRecordChangeSeconds: this.updateRecordChangeSeconds.bind(this),\n      updatePauseLimit: this.updatePauseLimit.bind(this),\n      updatePauseRecordCount: this.updatePauseRecordCount.bind(this),\n      updateCanLaunchRecord: this.updateCanLaunchRecord.bind(this),\n      updateStopLaunchRecord: this.updateStopLaunchRecord.bind(this),\n\n      updateParticipantsAll: this.updateParticipantsAll.bind(this),\n\n      updateFirstAll: this.updateFirstAll.bind(this),\n      updateUpdateMainWindow: this.updateUpdateMainWindow.bind(this),\n      updateFirst_round: this.updateFirst_round.bind(this),\n      updateLandScaped: this.updateLandScaped.bind(this),\n      updateLock_screen: this.updateLock_screen.bind(this),\n      updateScreenId: this.updateScreenId.bind(this),\n      updateAllVideoStreams: this.updateAllVideoStreams.bind(this),\n      updateNewLimitedStreams: this.updateNewLimitedStreams.bind(this),\n      updateNewLimitedStreamsIDs: this.updateNewLimitedStreamsIDs.bind(this),\n      updateActiveSounds: this.updateActiveSounds.bind(this),\n      updateScreenShareIDStream: this.updateScreenShareIDStream.bind(this),\n      updateScreenShareNameStream: this.updateScreenShareNameStream.bind(this),\n      updateAdminIDStream: this.updateAdminIDStream.bind(this),\n      updateAdminNameStream: this.updateAdminNameStream.bind(this),\n      updateYouYouStream: this.updateYouYouStream.bind(this),\n      updateYouYouStreamIDs: this.updateYouYouStreamIDs.bind(this),\n      updateLocalStream: this.updateLocalStream.bind(this),\n      updateRecordStarted: this.updateRecordStarted.bind(this),\n      updateRecordResumed: this.updateRecordResumed.bind(this),\n      updateRecordPaused: this.updateRecordPaused.bind(this),\n      updateRecordStopped: this.updateRecordStopped.bind(this),\n      updateAdminRestrictSetting: this.updateAdminRestrictSetting.bind(this),\n      updateVideoRequestState: this.updateVideoRequestState.bind(this),\n      updateVideoRequestTime: this.updateVideoRequestTime.bind(this),\n      updateVideoAction: this.updateVideoAction.bind(this),\n      updateLocalStreamVideo: this.updateLocalStreamVideo.bind(this),\n      updateUserDefaultVideoInputDevice: this.updateUserDefaultVideoInputDevice.bind(this),\n      updateCurrentFacingMode: this.updateCurrentFacingMode.bind(this),\n      updatePrevFacingMode: this.updatePrevFacingMode.bind(this),\n      updateDefVideoID: this.updateDefVideoID.bind(this),\n      updateAllowed: this.updateAllowed.bind(this),\n      updateDispActiveNames: this.updateDispActiveNames.bind(this),\n      updateP_dispActiveNames: this.updateP_dispActiveNames.bind(this),\n      updateActiveNames: this.updateActiveNames.bind(this),\n      updatePrevActiveNames: this.updatePrevActiveNames.bind(this),\n      updateP_activeNames: this.updateP_activeNames.bind(this),\n      updateMembersReceived: this.updateMembersReceived.bind(this),\n      updateDeferScreenReceived: this.updateDeferScreenReceived.bind(this),\n      updateHostFirstSwitch: this.updateHostFirstSwitch.bind(this),\n      updateMicAction: this.updateMicAction.bind(this),\n      updateScreenAction: this.updateScreenAction.bind(this),\n      updateChatAction: this.updateChatAction.bind(this),\n      updateAudioRequestState: this.updateAudioRequestState.bind(this),\n      updateScreenRequestState: this.updateScreenRequestState.bind(this),\n      updateChatRequestState: this.updateChatRequestState.bind(this),\n      updateAudioRequestTime: this.updateAudioRequestTime.bind(this),\n      updateScreenRequestTime: this.updateScreenRequestTime.bind(this),\n      updateChatRequestTime: this.updateChatRequestTime.bind(this),\n      updateOldSoundIds: this.updateOldSoundIds.bind(this),\n      updateHostLabel: this.updateHostLabel.bind(this),\n      updateMainScreenFilled: this.updateMainScreenFilled.bind(this),\n      updateLocalStreamScreen: this.updateLocalStreamScreen.bind(this),\n      updateScreenAlreadyOn: this.updateScreenAlreadyOn.bind(this),\n      updateChatAlreadyOn: this.updateChatAlreadyOn.bind(this),\n      updateRedirectURL: this.updateRedirectURL.bind(this),\n      updateOldAllStreams: this.updateOldAllStreams.bind(this),\n      updateAdminVidID: this.updateAdminVidID.bind(this),\n      updateStreamNames: this.updateStreamNames.bind(this),\n      updateNon_alVideoStreams: this.updateNon_alVideoStreams.bind(this),\n      updateSortAudioLoudness: this.updateSortAudioLoudness.bind(this),\n      updateAudioDecibels: this.updateAudioDecibels.bind(this),\n      updateMixed_alVideoStreams: this.updateMixed_alVideoStreams.bind(this),\n      updateNon_alVideoStreams_muted: this.updateNon_alVideoStreams_muted.bind(this),\n      updatePaginatedStreams: this.updatePaginatedStreams.bind(this),\n      updateLocalStreamAudio: this.updateLocalStreamAudio.bind(this),\n      updateDefAudioID: this.updateDefAudioID.bind(this),\n      updateUserDefaultAudioInputDevice: this.updateUserDefaultAudioInputDevice.bind(this),\n      updateUserDefaultAudioOutputDevice: this.updateUserDefaultAudioOutputDevice.bind(this),\n      updatePrevAudioInputDevice: this.updatePrevAudioInputDevice.bind(this),\n      updatePrevVideoInputDevice: this.updatePrevVideoInputDevice.bind(this),\n      updateAudioPaused: this.updateAudioPaused.bind(this),\n      updateMainScreenPerson: this.updateMainScreenPerson.bind(this),\n      updateAdminOnMainScreen: this.updateAdminOnMainScreen.bind(this),\n      updateScreenStates: this.updateScreenStates.bind(this),\n      updatePrevScreenStates: this.updatePrevScreenStates.bind(this),\n      updateUpdateDateState: this.updateUpdateDateState.bind(this),\n      updateLastUpdate: this.updateLastUpdate.bind(this),\n      updateNForReadjustRecord: this.updateNForReadjustRecord.bind(this),\n      updateFixedPageLimit: this.updateFixedPageLimit.bind(this),\n      updateRemoveAltGrid: this.updateRemoveAltGrid.bind(this),\n      updateNForReadjust: this.updateNForReadjust.bind(this),\n      updateLastReorderTime: this.updateLastReorderTime.bind(this),\n      updateAudStreamNames: this.updateAudStreamNames.bind(this),\n      updateCurrentUserPage: this.updateCurrentUserPage.bind(this),\n      updateMainHeightWidth: this.updateMainHeightWidth.bind(this),\n      updatePrevMainHeightWidth: this.updatePrevMainHeightWidth.bind(this),\n      updatePrevDoPaginate: this.updatePrevDoPaginate.bind(this),\n      updateDoPaginate: this.updateDoPaginate.bind(this),\n      updateShareEnded: this.updateShareEnded.bind(this),\n      updateLStreams: this.updateLStreams.bind(this),\n      updateChatRefStreams: this.updateChatRefStreams.bind(this),\n      updateControlHeight: this.updateControlHeight.bind(this),\n      updateIsWideScreen: this.updateIsWideScreen.bind(this),\n      updateIsMediumScreen: this.updateIsMediumScreen.bind(this),\n      updateIsSmallScreen: this.updateIsSmallScreen.bind(this),\n      updateAddGrid: this.updateAddGrid.bind(this),\n      updateAddAltGrid: this.updateAddAltGrid.bind(this),\n      updateGridRows: this.updateGridRows.bind(this),\n      updateGridCols: this.updateGridCols.bind(this),\n      updateAltGridRows: this.updateAltGridRows.bind(this),\n      updateAltGridCols: this.updateAltGridCols.bind(this),\n      updateNumberPages: this.updateNumberPages.bind(this),\n      updateCurrentStreams: this.updateCurrentStreams.bind(this),\n      updateShowMiniView: this.updateShowMiniView.bind(this),\n      updateNStream: this.updateNStream.bind(this),\n      updateDefer_receive: this.updateDefer_receive.bind(this),\n      updateAllAudioStreams: this.updateAllAudioStreams.bind(this),\n      updateRemoteScreenStream: this.updateRemoteScreenStream.bind(this),\n      updateScreenProducer: this.updateScreenProducer.bind(this),\n      updateGotAllVids: this.updateGotAllVids.bind(this),\n      updatePaginationHeightWidth: this.updatePaginationHeightWidth.bind(this),\n      updatePaginationDirection: this.updatePaginationDirection.bind(this),\n      updateGridSizes: this.updateGridSizes.bind(this),\n      updateScreenForceFullDisplay: this.updateScreenForceFullDisplay.bind(this),\n      updateMainGridStream: this.updateMainGridStream.bind(this),\n      updateOtherGridStreams: this.updateOtherGridStreams.bind(this),\n      updateAudioOnlyStreams: this.updateAudioOnlyStreams.bind(this),\n      updateVideoInputs: this.updateVideoInputs.bind(this),\n      updateAudioInputs: this.updateAudioInputs.bind(this),\n      updateMeetingProgressTime: this.updateMeetingProgressTime.bind(this),\n      updateMeetingElapsedTime: this.updateMeetingElapsedTime.bind(this),\n      updateRef_participants: this.updateRef_participants.bind(this),\n\n      updateMessages: this.updateMessages.bind(this),\n      updateStartDirectMessage: this.updateStartDirectMessage.bind(this),\n      updateDirectMessageDetails: this.updateDirectMessageDetails.bind(this),\n      updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\n\n      // Event settings\n      updateAudioSetting: this.updateAudioSetting.bind(this),\n      updateVideoSetting: this.updateVideoSetting.bind(this),\n      updateScreenshareSetting: this.updateScreenshareSetting.bind(this),\n      updateChatSetting: this.updateChatSetting.bind(this),\n\n      // Display settings\n      updateAutoWave: this.updateAutoWave.bind(this),\n      updateForceFullDisplay: this.updateForceFullDisplay.bind(this),\n      updatePrevForceFullDisplay: this.updatePrevForceFullDisplay.bind(this),\n      updatePrevMeetingDisplayType: this.updatePrevMeetingDisplayType.bind(this),\n\n      // Waiting room\n      updateWaitingRoomFilter: this.updateWaitingRoomFilter.bind(this),\n      updateWaitingRoomList: this.updateWaitingRoomList.bind(this),\n      updateWaitingRoomCounter: this.updateWaitingRoomCounter.bind(this),\n\n      // Requests\n      updateRequestFilter: this.updateRequestFilter.bind(this),\n      updateRequestList: this.updateRequestList.bind(this),\n      updateRequestCounter: this.updateRequestCounter.bind(this),\n\n      // Total requests and waiting room\n      updateTotalReqWait: this.updateTotalReqWait.bind(this),\n\n      // Menu modals\n      updateIsMenuModalVisible: this.updateIsMenuModalVisible.bind(this),\n      updateIsRecordingModalVisible: this.updateIsRecordingModalVisible.bind(this),\n      updateIsSettingsModalVisible: this.updateIsSettingsModalVisible.bind(this),\n      updateIsRequestsModalVisible: this.updateIsRequestsModalVisible.bind(this),\n      updateIsWaitingModalVisible: this.updateIsWaitingModalVisible.bind(this),\n      updateIsCoHostModalVisible: this.updateIsCoHostModalVisible.bind(this),\n      updateIsMediaSettingsModalVisible: this.updateIsMediaSettingsModalVisible.bind(this),\n      updateIsDisplaySettingsModalVisible: this.updateIsDisplaySettingsModalVisible.bind(this),\n\n      // Other modals\n      updateIsParticipantsModalVisible: this.updateIsParticipantsModalVisible.bind(this),\n      updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\n      updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\n      updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\n      updateIsLoadingModalVisible: this.updateIsLoadingModalVisible.bind(this),\n\n      // Recording Options\n      updateRecordingMediaOptions: this.updateRecordingMediaOptions.bind(this),\n      updateRecordingAudioOptions: this.updateRecordingAudioOptions.bind(this),\n      updateRecordingVideoOptions: this.updateRecordingVideoOptions.bind(this),\n      updateRecordingVideoType: this.updateRecordingVideoType.bind(this),\n      updateRecordingVideoOptimized: this.updateRecordingVideoOptimized.bind(this),\n      updateRecordingDisplayType: this.updateRecordingDisplayType.bind(this),\n      updateRecordingAddHLS: this.updateRecordingAddHLS.bind(this),\n      updateRecordingAddText: this.updateRecordingAddText.bind(this),\n      updateRecordingCustomText: this.updateRecordingCustomText.bind(this),\n      updateRecordingCustomTextPosition: this.updateRecordingCustomTextPosition.bind(this),\n      updateRecordingCustomTextColor: this.updateRecordingCustomTextColor.bind(this),\n      updateRecordingNameTags: this.updateRecordingNameTags.bind(this),\n      updateRecordingBackgroundColor: this.updateRecordingBackgroundColor.bind(this),\n      updateRecordingNameTagsColor: this.updateRecordingNameTagsColor.bind(this),\n      updateRecordingOrientationVideo: this.updateRecordingOrientationVideo.bind(this),\n      updateClearedToResume: this.updateClearedToResume.bind(this),\n      updateClearedToRecord: this.updateClearedToRecord.bind(this),\n      updateRecordState: this.updateRecordState.bind(this),\n      updateShowRecordButtons: this.updateShowRecordButtons.bind(this),\n      updateRecordingProgressTime: this.updateRecordingProgressTime.bind(this),\n      updateAudioSwitching: this.updateAudioSwitching.bind(this),\n      updateVideoSwitching: this.updateVideoSwitching.bind(this),\n\n      // Media states\n      updateVideoAlreadyOn: this.updateVideoAlreadyOn.bind(this),\n      updateAudioAlreadyOn: this.updateAudioAlreadyOn.bind(this),\n      updateComponentSizes: this.updateComponentSizes.bind(this),\n\n      // Permissions\n      updateHasCameraPermission: this.updateHasCameraPermission.bind(this),\n      updateHasAudioPermission: this.updateHasAudioPermission.bind(this),\n\n      // Transports\n      updateTransportCreated: this.updateTransportCreated.bind(this),\n      updateLocalTransportCreated: this.updateLocalTransportCreated.bind(this),\n      updateTransportCreatedVideo: this.updateTransportCreatedVideo.bind(this),\n      updateTransportCreatedAudio: this.updateTransportCreatedAudio.bind(this),\n      updateTransportCreatedScreen: this.updateTransportCreatedScreen.bind(this),\n      updateProducerTransport: this.updateProducerTransport.bind(this),\n      updateLocalProducerTransport: this.updateLocalProducerTransport.bind(this),\n      updateVideoProducer: this.updateVideoProducer.bind(this),\n      updateLocalVideoProducer: this.updateLocalVideoProducer.bind(this),\n      updateParams: this.updateParams.bind(this),\n      updateVideoParams: this.updateVideoParams.bind(this),\n      updateAudioParams: this.updateAudioParams.bind(this),\n      updateAudioProducer: this.updateAudioProducer.bind(this),\n      updateAudioLevel: this.updateAudioLevel.bind(this),\n      updateLocalAudioProducer: this.updateLocalAudioProducer.bind(this),\n      updateConsumerTransports: this.updateConsumerTransports.bind(this),\n      updateConsumingTransports: this.updateConsumingTransports.bind(this),\n\n      // Polls\n      updatePolls: this.updatePolls.bind(this),\n      updatePoll: this.updatePoll.bind(this),\n      updateIsPollModalVisible: this.updateIsPollModalVisible.bind(this),\n\n      // Background\n      updateCustomImage: this.updateCustomImage.bind(this),\n      updateSelectedImage: this.updateSelectedImage.bind(this),\n      updateSegmentVideo: this.updateSegmentVideo.bind(this),\n      updateSelfieSegmentation: this.updateSelfieSegmentation.bind(this),\n      updatePauseSegmentation: this.updatePauseSegmentation.bind(this),\n      updateProcessedStream: this.updateProcessedStream.bind(this),\n      updateKeepBackground: this.updateKeepBackground.bind(this),\n      updateBackgroundHasChanged: this.updateBackgroundHasChanged.bind(this),\n      updateVirtualStream: this.updateVirtualStream.bind(this),\n      updateMainCanvas: this.updateMainCanvas.bind(this),\n      updatePrevKeepBackground: this.updatePrevKeepBackground.bind(this),\n      updateAppliedBackground: this.updateAppliedBackground.bind(this),\n      updateIsBackgroundModalVisible: this.updateIsBackgroundModalVisible.bind(this),\n      updateAutoClickBackground: this.updateAutoClickBackground.bind(this),\n\n      // Breakout rooms\n      updateBreakoutRooms: this.updateBreakoutRooms.bind(this),\n      updateCurrentRoomIndex: this.updateCurrentRoomIndex.bind(this),\n      updateCanStartBreakout: this.updateCanStartBreakout.bind(this),\n      updateBreakOutRoomStarted: this.updateBreakOutRoomStarted.bind(this),\n      updateBreakOutRoomEnded: this.updateBreakOutRoomEnded.bind(this),\n      updateHostNewRoom: this.updateHostNewRoom.bind(this),\n      updateLimitedBreakRoom: this.updateLimitedBreakRoom.bind(this),\n      updateMainRoomsLength: this.updateMainRoomsLength.bind(this),\n      updateMemberRoom: this.updateMemberRoom.bind(this),\n      updateIsBreakoutRoomsModalVisible: this.updateIsBreakoutRoomsModalVisible.bind(this),\n\n      // Whiteboard\n      updateWhiteboardUsers: this.updateWhiteboardUsers.bind(this),\n      updateCurrentWhiteboardIndex: this.updateCurrentWhiteboardIndex.bind(this),\n      updateCanStartWhiteboard: this.updateCanStartWhiteboard.bind(this),\n      updateWhiteboardStarted: this.updateWhiteboardStarted.bind(this),\n      updateWhiteboardEnded: this.updateWhiteboardEnded.bind(this),\n      updateWhiteboardLimit: this.updateWhiteboardLimit.bind(this),\n      updateIsWhiteboardModalVisible: this.updateIsWhiteboardModalVisible.bind(this),\n      updateIsConfigureWhiteboardModalVisible:\n        this.updateIsConfigureWhiteboardModalVisible.bind(this),\n      updateShapes: this.updateShapes.bind(this),\n      updateUseImageBackground: this.updateUseImageBackground.bind(this),\n      updateRedoStack: this.updateRedoStack.bind(this),\n      updateUndoStack: this.updateUndoStack.bind(this),\n      updateCanvasStream: this.updateCanvasStream.bind(this),\n      updateCanvasWhiteboard: this.updateCanvasWhiteboard.bind(this),\n\n      // Screenboard\n      updateCanvasScreenboard: this.updateCanvasScreenboard.bind(this),\n      updateProcessedScreenStream: this.updateProcessedScreenStream.bind(this),\n      updateAnnotateScreenStream: this.updateAnnotateScreenStream.bind(this),\n      updateMainScreenCanvas: this.updateMainScreenCanvas.bind(this),\n      updateIsScreenboardModalVisible: this.updateIsScreenboardModalVisible.bind(this),\n\n      // Other functions\n      checkOrientation: this.checkOrientation.bind(this),\n\n      updateDevice: this.updateDevice.bind(this),\n      updateSocket: this.updateSocket.bind(this),\n      updateLocalSocket: this.updateLocalSocket.bind(this),\n      updateValidated: this.updateValidated.bind(this),\n      isDarkModeValue: this.modernThemeDarkMode.value,\n      updateIsDarkMode: this.updateModernThemeDarkMode.bind(this),\n\n      customVideoCard: this.customVideoCard,\n      customAudioCard: this.customAudioCard,\n      customMiniCard: this.customMiniCard,\n\n      showAlert: this.showAlert.bind(this),\n      getUpdatedAllParams: () => {\n\n        try {\n          if (this.sourceParameters !== null) {\n            const nextSourceParameters = {\n              ...this.getAllParams(),\n              ...this.mediaSFUFunctions(),\n            };\n            this.sourceParameters = nextSourceParameters;\n            if (this.updateSourceParameters) {\n              this.updateSourceParameters(nextSourceParameters);\n            }\n          }\n        } catch {\n          console.log('error updateSourceParameters');\n        }\n\n        return {\n          ...this.getAllParams(),\n          ...this.mediaSFUFunctions(),\n        };\n      },\n    };\n  }\n\n  mediaSFUParameters: any = {\n    ...this.getAllParams(),\n    ...this.mediaSFUFunctions(),\n  };\n\n  getUpdatedAllParams = (): any => {\n    return {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n  };\n\n  PrejoinPageComponent: any = {\n    component: this.PrejoinPage,\n    injector: null,\n  };\n\n  updatePrejoinPageComponent = () => {\n    const PrejoinComp = {\n      component: this.PrejoinPage,\n      injector: this.createInjector({\n        parameters: {\n          showAlert:\n            this.showAlert ||\n            (() => {\n              console.log('showAlert not defined');\n            }),\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\n          connectSocket: this.socketManager.connectSocket,\n          connectLocalSocket: this.socketManager.connectLocalSocket,\n          updateSocket: this.updateSocket,\n          updateLocalSocket: this.updateLocalSocket,\n          updateValidated: this.updateValidated,\n          updateApiUserName: this.updateApiUserName,\n          updateApiToken: this.updateApiToken,\n          updateLink: this.updateLink,\n          updateRoomName: this.updateRoomName,\n          updateMember: this.updateMember,\n        },\n        credentials: this.credentials,\n        localLink: this.localLink,\n        connectMediaSFU: this.connectMediaSFU,\n        returnUI: this.returnUI,\n        noUIPreJoinOptions: this.noUIPreJoinOptions,\n        joinMediaSFURoom: this.joinMediaSFURoom,\n        createMediaSFURoom: this.createMediaSFURoom,\n      }),\n    };\n\n    this.PrejoinPageComponent = { ...PrejoinComp };\n\n    this.cdr.detectChanges();\n  };\n\n  /**\n   * Initializes function overrides by wrapping original implementations\n   * with custom logic if provided in uiOverrides\n   */\n  initializeFunctionOverrides(): void {\n    // Apply consumerResume override\n    if (this.uiOverrideResolver.hasOverride('consumerResume')) {\n      const originalConsumerResume = this.consumerResume.consumerResume.bind(\n        this.consumerResume,\n      );\n      this.consumerResume.consumerResume = this.uiOverrideResolver.applyFunctionOverride(\n        'consumerResume',\n        originalConsumerResume,\n      );\n    }\n\n    // Apply addVideosGrid override\n    if (this.uiOverrideResolver.hasOverride('addVideosGrid')) {\n      const originalAddVideosGrid = this.addVideosGrid.addVideosGrid.bind(\n        this.addVideosGrid,\n      );\n      this.addVideosGrid.addVideosGrid = this.uiOverrideResolver.applyFunctionOverride(\n        'addVideosGrid',\n        originalAddVideosGrid,\n      );\n    }\n\n    // Apply prepopulateUserMedia override\n    if (this.uiOverrideResolver.hasOverride('prepopulateUserMedia')) {\n      const originalPrepopulateUserMedia = this.prepopulateUserMedia.prepopulateUserMedia.bind(\n        this.prepopulateUserMedia,\n      );\n      this.prepopulateUserMedia.prepopulateUserMedia = this.uiOverrideResolver.applyFunctionOverride(\n        'prepopulateUserMedia',\n        originalPrepopulateUserMedia,\n      );\n    }\n  }\n\n  ngOnInit() {\n    this.updateModernThemeDarkMode(this.resolvePreferredTheme());\n\n    // Initialize UI overrides if provided\n    if (this.uiOverrides) {\n      this.uiOverrideResolver.setOverrides(this.uiOverrides);\n    }\n\n    // Apply function overrides\n    this.initializeFunctionOverrides();\n\n    if (this.PrejoinPage) {\n      this.updatePrejoinPageComponent();\n    }\n\n    this.setupResizeListener();\n    if (this.validated) {\n      this.connectAndAddSocketMethods();\n    }\n\n    this.mainHeightWidthSubscription = this.mainHeightWidth.subscribe(() => {\n      this.updateMainVideoSize();\n    });\n\n    this.validatedSubscription = this.validated.subscribe((validated) => {\n      if (validated) {\n        this.handleValidated();\n      }\n    });\n    this.islevelSubscription = this.islevel.subscribe((islevel) => {\n      if (islevel) {\n        this.updateControlChatButtons();\n      }\n    });\n    this.coHostSubscription = combineLatest([this.coHost, this.coHostResponsibility]).subscribe(\n      ([coHost, coHostResponsibility]) => {\n        if (coHost || coHostResponsibility) {\n          this.updateControlChatButtons();\n        }\n      },\n    );\n\n    this.mediaSFUParameters = {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n  }\n\n  ngOnDestroy() {\n    window.removeEventListener('resize', this.handleResize);\n    window.removeEventListener('orientationchange', this.handleResize);\n    if (this.mainHeightWidthSubscription) {\n      this.mainHeightWidthSubscription.unsubscribe();\n    }\n    if (this.validatedSubscription) {\n      this.validatedSubscription.unsubscribe();\n    }\n    if (this.islevelSubscription) {\n      this.islevelSubscription.unsubscribe();\n    }\n    if (this.coHostSubscription) {\n      this.coHostSubscription.unsubscribe();\n    }\n    if (this.ScreenboardSubscription) {\n      this.ScreenboardSubscription.unsubscribe();\n    }\n    if (this.recordingSubscription) {\n      this.recordingSubscription.unsubscribe();\n    }\n  }\n\n  updateMainVideoSize = async () => {\n    if (!this.lock_screen.value && !this.shared.value) {\n      this.prepopulateUserMedia.prepopulateUserMedia({\n        name: this.hostLabel.value,\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n      });\n    } else {\n      if (!this.first_round.value) {\n        this.prepopulateUserMedia.prepopulateUserMedia({\n          name: this.hostLabel.value,\n          parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n        });\n      }\n    }\n  };\n\n  async connectAndAddSocketMethods() {\n    this.mediaSFUParameters = {\n      ...this.getAllParams(),\n      ...this.mediaSFUFunctions(),\n    };\n    const socket_ = await this.connect_Socket(this.apiUserName.value, this.apiToken.value);\n    if (socket_) {\n      this.updateSocket(socket_);\n    }\n  }\n\n  async handleValidated() {\n    this.updateAllVideoStreams([\n      { producerId: 'youyou', stream: undefined, id: 'youyou', name: 'youyou' },\n    ]);\n\n    this.updateStreamNames([{ id: 'youyou', name: 'youyou', producerId: '' }]);\n\n    if (this.validated.value) {\n\n      try {\n        if (!this.localUIMode.value) {\n          this.updateIsLoadingModalVisible(true);\n          await this.connectAndAddSocketMethods();\n        } else {\n          this.updateIsLoadingModalVisible(false);\n        }\n      } catch (error) {\n        console.log('error connectAndaAddSocketMethods', error);\n      }\n\n      this.startMeetingProgressTimer.startMeetingProgressTimer({\n        startTime: Date.now() / 1000,\n        parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n      });\n\n      try {\n        if (this.sourceParameters !== null) {\n          const nextSourceParameters = {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          };\n          this.sourceParameters = nextSourceParameters;\n          if (this.updateSourceParameters) {\n            this.updateSourceParameters(nextSourceParameters);\n          }\n        }\n      } catch {\n        console.log('error updateSourceParameters');\n      }\n\n    }\n  }\n\n  @HostListener('window:resize')\n  @HostListener('window:orientationchange')\n  async handleResize() {\n    let fraction = 0;\n\n    if (\n      window.innerHeight < window.innerWidth &&\n      (this.eventType.value == 'webinar' || this.eventType.value == 'conference')\n    ) {\n      const currentHeight = window.innerHeight;\n      fraction = Number((40 / currentHeight).toFixed(3));\n      if (fraction != this.controlHeight.value) {\n        this.updateControlHeight(Number(fraction));\n      }\n    } else {\n      // Set default control button height for portrait mode or other event types\n      const currentHeight = window.innerHeight;\n      fraction = Number((40 / currentHeight).toFixed(3));\n      fraction = Number(fraction);\n      if (fraction != this.controlHeight.value) {\n        this.updateControlHeight(Number(fraction));\n      }\n    }\n\n    const dimensions = this.computeDimensionsMethod({\n      containerWidthFraction: 1,\n      containerHeightFraction: 1,\n      mainSize: this.mainHeightWidth.value,\n      doStack: true,\n      defaultFraction:\n        this.eventType.value == 'webinar' || this.eventType.value == 'conference'\n          ? 1 - fraction\n          : 1,\n    });\n\n    this.updateComponentSizes(dimensions);\n\n    const orientation = this.checkOrientation();\n    if (orientation == 'portrait') {\n      if (!this.isWideScreen.value) {\n        if (this.shareScreenStarted.value || this.shared.value) {\n          this.updateScreenForceFullDisplay(true);\n        }\n      }\n    }\n\n    // Updates the main grid view\n    await this.prepopulateUserMedia.prepopulateUserMedia({\n      name: this.hostLabel.value,\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n    });\n    // Updates the mini grid view\n    await this.onScreenChanges.onScreenChanges({\n      changed: true,\n      parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n    });\n  }\n\n  async disconnectAllSockets(consume_sockets: ConsumeSocket[]): Promise<void> {\n    for (const socket of consume_sockets) {\n      try {\n        const ip = Object.keys(socket)[0];\n        await socket[ip].disconnect();\n      } catch (error) {\n        console.log(`Error disconnecting socket with IP: ${Object.keys(socket)[0]}`, error);\n      }\n    }\n  }\n\n  async closeAndReset() {\n    //close and clean up all sockets, modals,... and reset all states to initial values\n\n    this.updateIsMessagesModalVisible(false);\n    this.updateIsParticipantsModalVisible(false);\n    this.updateIsWaitingModalVisible(false);\n    this.updateIsRequestsModalVisible(false);\n    this.updateIsCoHostModalVisible(false);\n    this.updateIsSettingsModalVisible(false);\n    this.updateIsDisplaySettingsModalVisible(false);\n    this.updateIsMediaSettingsModalVisible(false);\n    this.updateIsMenuModalVisible(false);\n    this.updateIsShareEventModalVisible(false);\n    this.updateIsConfirmExitModalVisible(false);\n    await this.disconnectAllSockets(this.consume_sockets.value);\n    await this.updateStatesToInitialValues();\n    this.updateMeetingProgressTime('00:00:00');\n    this.updateMeetingElapsedTime(0);\n    this.updateRecordingProgressTime('00:00:00');\n    this.updateRecordElapsedTime(0);\n    this.updateShowRecordButtons(false);\n\n    this.updateIsConfigureWhiteboardModalVisible(false);\n    this.updateIsWhiteboardModalVisible(false);\n    this.updateIsMenuModalVisible(false);\n    this.updateIsRecordingModalVisible(false);\n    this.updateIsPollModalVisible(false);\n    this.updateIsBreakoutRoomsModalVisible(false);\n    this.updateIsBackgroundModalVisible(false);\n    this.updateIsLoadingModalVisible(false);\n    this.updateIsConfirmHereModalVisible(false);\n\n    await sleep({ ms: 500 });\n    this.updateValidated(false);\n    //if on web, reload the page\n    window.location.reload();\n  }\n\n  computeDimensionsMethod = ({\n    containerWidthFraction = 1,\n    containerHeightFraction = 1,\n    mainSize,\n    doStack = true,\n    defaultFraction,\n  }: {\n    containerWidthFraction?: number;\n    containerHeightFraction?: number;\n    mainSize: number;\n    doStack?: boolean;\n    defaultFraction: number;\n  }): ComponentSizes => {\n    const parentWidth = window.innerWidth * containerWidthFraction;\n    const parentHeight = window.innerHeight * containerHeightFraction * defaultFraction;\n    let isWideScreen = parentWidth >= 768;\n\n    if (!isWideScreen && parentWidth > 1.5 * parentHeight) {\n      isWideScreen = true;\n    }\n\n    this.updateIsWideScreen(isWideScreen);\n\n    const dimensions = this.calculateDimensions({\n      parentWidth,\n      parentHeight,\n      isWideScreen,\n      mainSize,\n      doStack,\n    });\n    return dimensions;\n  };\n\n  calculateDimensions({\n    parentWidth,\n    parentHeight,\n    isWideScreen,\n    mainSize,\n    doStack,\n  }: {\n    parentWidth: number;\n    parentHeight: number;\n    isWideScreen: boolean;\n    mainSize: number;\n    doStack: boolean;\n  }): ComponentSizes {\n    if (doStack) {\n      return isWideScreen\n        ? {\n          mainHeight: Math.floor(parentHeight),\n          otherHeight: Math.floor(parentHeight),\n          mainWidth: Math.floor((mainSize / 100) * parentWidth),\n          otherWidth: Math.floor(((100 - mainSize) / 100) * parentWidth),\n        }\n        : {\n          mainHeight: Math.floor((mainSize / 100) * parentHeight),\n          otherHeight: Math.floor(((100 - mainSize) / 100) * parentHeight),\n          mainWidth: Math.floor(parentWidth),\n          otherWidth: Math.floor(parentWidth),\n        };\n    } else {\n      return {\n        mainHeight: Math.floor(parentHeight),\n        otherHeight: Math.floor(parentHeight),\n        mainWidth: Math.floor(parentWidth),\n        otherWidth: Math.floor(parentWidth),\n      };\n    }\n  }\n\n  handleOrientationChange() {\n    window.addEventListener('resize', this.handleResize.bind(this));\n    window.addEventListener('orientationchange', this.handleResize.bind(this));\n  }\n\n  setupResizeListener() {\n    this.handleResize();\n  }\n\n  orientation = window.innerHeight > window.innerWidth ? 'portrait' : 'landscape';\n\n  async joinRoom(data: {\n    socket: Socket;\n    roomName: string;\n    islevel: string;\n    member: string;\n    sec: string;\n    apiUserName: string;\n  }): Promise<ResponseJoinRoom | null> {\n    const { socket, roomName, islevel, member, sec, apiUserName } = data;\n\n    try {\n      const response: ResponseJoinRoom | null = await this.joinRoomClient.joinRoomClient({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n      });\n\n      return response;\n    } catch (error) {\n      console.log('Error joining room:', error);\n      throw new Error('Failed to join the room. Please check your connection and try again.');\n    }\n  }\n\n  async join_Room({\n    socket,\n    roomName,\n    islevel,\n    member,\n    sec,\n    apiUserName,\n    isLocal = false,\n  }: {\n    socket: Socket;\n    roomName: string;\n    islevel: string;\n    member: string;\n    sec: string;\n    apiUserName: string;\n    isLocal?: boolean;\n  }): Promise<void> {\n    let data: ResponseJoinRoom | null;\n\n    if (!isLocal) {\n      data = await this.joinRoom({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n      });\n    } else {\n      const localData: ResponseJoinLocalRoom = await this.joinLocalRoom.joinLocalRoom({\n        socket,\n        roomName,\n        islevel,\n        member,\n        sec,\n        apiUserName,\n        parameters: {\n          showAlert:\n            this.showAlert ||\n            (() => {\n              console.log('showAlert not defined');\n            }),\n          updateIsLoadingModalVisible: this.updateIsLoadingModalVisible,\n          connectSocket: this.socketManager.connectSocket,\n          connectLocalSocket: this.socketManager.connectLocalSocket,\n          updateSocket: this.updateSocket,\n          updateLocalSocket: this.updateLocalSocket,\n          updateValidated: this.updateValidated,\n          updateApiUserName: this.updateApiUserName,\n          updateApiToken: this.updateApiToken,\n          updateLink: this.updateLink,\n          updateRoomName: this.updateRoomName,\n          updateMember: this.updateMember,\n        },\n        checkConnect:\n          this.localLink.length > 0 &&\n          this.connectMediaSFU === true &&\n          !this.link.value.includes('mediasfu.com'),\n        localLink: this.localLink,\n        joinMediaSFURoom: this.joinMediaSFURoom,\n      });\n\n      data = await createResponseJoinRoom({ localRoom: localData });\n    }\n\n    const updateAndComplete = async (data: ResponseJoinRoom) => {\n      // Update room parameters\n      try {\n        // Check if roomRecvIPs is not empty\n        if (!data.roomRecvIPs || data.roomRecvIPs.length === 0) {\n          data.roomRecvIPs = ['none'];\n\n          if (\n            this.link.value !== \"\" &&\n            this.link.value.includes(\"mediasfu.com\") &&\n            !isLocal\n          ) {\n            // Community Edition Only\n            await this.receiveAllPipedTransports.receiveAllPipedTransports({\n              community: true,\n              nsock: this.getUpdatedAllParams().socket,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n        }\n\n\n        this.updateRoomParametersClient.updateRoomParametersClient({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n            data: data,\n          },\n        });\n\n        if (data.isHost) {\n          this.updateIslevel('2');\n        } else {\n          // Issue with isHost for local room\n          if (islevel !== '2') {\n            this.updateIslevel('1');\n          }\n        }\n\n        if (data.secureCode && data.secureCode !== '') {\n          this.updateAdminPasscode(data.secureCode);\n        }\n\n        if (data.rtpCapabilities) {\n          try {\n            const device_ = await this.createDeviceClient.createDeviceClient({\n              rtpCapabilities: data.rtpCapabilities,\n            });\n\n            if (device_) {\n              this.device.next(device_);\n            }\n          } catch (error) {\n            console.error('Error creating device:', error);\n          }\n        }\n      } catch (error) {\n        console.error('Error in updateAndComplete:', error);\n      }\n    };\n\n    if (data && data.success) {\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && isLocal) {\n        this.roomData.next(data);\n        return;\n      } else if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\n        // Update roomData\n        if (this.roomData.value) {\n          // Updating only the recording and meeting room parameters\n          this.roomData.value.recordingParams = data.recordingParams;\n          this.roomData.value.meetingRoomParams = data.meetingRoomParams;\n          this.roomData.next(this.roomData.value);\n        } else {\n          this.roomData.next(data);\n        }\n      } else {\n        // Update roomData\n        this.roomData.next(data);\n        if (!this.link.value.includes('mediasfu.com')) {\n          this.roomData.value!.meetingRoomParams = data.meetingRoomParams;\n        }\n      }\n\n      await updateAndComplete(data);\n    } else {\n      if (this.link.value !== '' && this.link.value.includes('mediasfu.com') && !isLocal) {\n        // Join local room only\n        if (this.roomData.value) {\n          await updateAndComplete(this.roomData.value);\n        }\n        return;\n      }\n\n      // Might be a wrong room name or room is full or other error; check reason in data object if available\n      try {\n        if (this.showAlert && data?.reason) {\n          this.showAlert({\n            message: data.reason,\n            type: 'danger',\n            duration: 3000,\n          });\n        }\n      } catch (error) {\n        /* handle error */\n      }\n    }\n  }\n\n  updateStatesToInitialValues = async () => {\n    const initialValues = initialValuesState as { [key: string]: any };\n    const updateFunctions = this.getAllParams() as unknown as {\n      [key: string]: (value: any) => void;\n    };\n\n    for (const key in initialValues) {\n      if (Object.prototype.hasOwnProperty.call(initialValues, key)) {\n        const updateFunctionName = `update${key.charAt(0).toUpperCase() + key.slice(1)}`;\n        const updateFunction = updateFunctions[updateFunctionName];\n\n        if (typeof updateFunction === 'function') {\n          try {\n            updateFunction(initialValues[key]);\n          } catch {\n            /* handle error */\n          }\n        }\n      }\n    }\n  };\n\n  faMicrophone = faMicrophone;\n  faMicrophoneSlash = faMicrophoneSlash;\n  faVideo = faVideo;\n  faVideoSlash = faVideoSlash;\n  faSync = faSync;\n  faPhone = faPhone;\n  faShareAlt = faShareAlt;\n  faComments = faComments;\n\n  onCloseMenuModal = () => {\n    this.updateIsMenuModalVisible(false);\n  };\n\n  onEventSettingsClose = () => {\n    this.updateIsSettingsModalVisible(false);\n  };\n\n  onCoHostClose = () => {\n    this.updateIsCoHostModalVisible(false);\n  };\n\n  onMediaSettingsClose = () => {\n    this.updateIsMediaSettingsModalVisible(false);\n  };\n\n  onDisplaySettingsClose = () => {\n    this.updateIsDisplaySettingsModalVisible(false);\n  };\n\n  onPollClose = () => {\n    this.updateIsPollModalVisible(false);\n  };\n\n  onBreakoutRoomsClose = () => {\n    this.updateIsBreakoutRoomsModalVisible(false);\n  };\n\n  onConfigureWhiteboardClose = () => {\n    this.updateIsConfigureWhiteboardModalVisible(false);\n  };\n\n  onMessagesClose = () => {\n    this.updateIsMessagesModalVisible(false);\n  };\n\n  onRecordingClose = () => {\n    this.updateIsRecordingModalVisible(false);\n  };\n\n  onParticipantsClose = () => {\n    this.updateIsParticipantsModalVisible(false);\n  };\n\n  onBackgroundClose = () => {\n    this.updateIsBackgroundModalVisible(false);\n  };\n\n  onConfirmExitClose = () => {\n    this.updateIsConfirmExitModalVisible(false);\n  };\n\n  onConfirmHereClose = () => {\n    this.updateIsConfirmHereModalVisible(false);\n  };\n\n  onSuppressConfirmHere = () => {\n    this.suppressConfirmHereForSession = true;\n  };\n\n  onScreenboardClose = () => {\n    this.updateIsScreenboardModalVisible(false);\n  };\n\n  onShareEventClose = () => {\n    this.updateIsShareEventModalVisible(false);\n  };\n\n  onAlertHide = () => {\n    this.updateAlertVisible(false);\n  };\n\n  messageWidget = {\n    component: MessageWidget,\n    injector: this.createInjector({\n      icon: this.faComments,\n      showBadge: this.showMessagesBadge.value,\n      badgeValue: 1,\n      iconColor: 'black',\n    }),\n  };\n\n  controlChatButtons: ButtonTouch[] = [];\n\n  controlChatButtonsArray: ButtonTouch[] = [\n    {\n      icon: faMoon,\n      alternateIcon: faSun,\n      active: () => this.modernThemeDarkMode.value,\n      onPress: () => this.updateModernThemeDarkMode(!this.modernThemeDarkMode.value),\n      activeColor: 'rgba(255,255,255,0.9)',\n      inActiveColor: 'rgba(0,0,0,0.9)',\n      show: true,\n    },\n    {\n      icon: this.faShareAlt,\n      active: true,\n      alternateIcon: this.faShareAlt,\n      onPress: () => this.updateIsShareEventModalVisible(!this.isShareEventModalVisible.value),\n      activeColor: 'black',\n      inActiveColor: 'black',\n      show: true,\n    },\n    {\n      customComponent: this.messageWidget,\n      onPress: () =>\n        this.launchMessages.launchMessages({\n          updateIsMessagesModalVisible: this.updateIsMessagesModalVisible.bind(this),\n          isMessagesModalVisible: this.isMessagesModalVisible.value,\n        }),\n      show: true,\n    },\n    {\n      icon: this.faSync,\n      active: true,\n      alternateIcon: this.faSync,\n      onPress: () =>\n        this.switchVideoAlt.switchVideoAlt({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      activeColor: 'black',\n      inActiveColor: 'black',\n      show: true,\n    },\n    {\n      icon: this.faVideoSlash,\n      alternateIcon: this.faVideo,\n      active: () => this.videoActive.value,\n      onPress: () =>\n        this.clickVideo.clickVideo({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      show: true,\n    },\n    {\n      icon: this.faMicrophoneSlash,\n      alternateIcon: this.faMicrophone,\n      active: () => this.micActive.value,\n      onPress: () =>\n        this.clickAudio.clickAudio({\n          parameters: {\n            ...this.getAllParams(),\n            ...this.mediaSFUFunctions(),\n          },\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      show: true,\n    },\n    {\n      icon: this.faPhone,\n      active: this.endCallActive.value,\n      onPress: () =>\n        this.launchConfirmExit.launchConfirmExit({\n          updateIsConfirmExitModalVisible: this.updateIsConfirmExitModalVisible.bind(this),\n          isConfirmExitModalVisible: this.isConfirmExitModalVisible.value,\n        }),\n      activeColor: 'green',\n      inActiveColor: 'red',\n      show: true,\n    },\n  ];\n\n  updateControlChatButtons() {\n    this.controlChatButtons = this.controlChatButtonsArray.map((button) => {\n      return {\n        ...button,\n        show: typeof button.show === 'function' ? button.show() : button.show,\n        active: typeof button.active === 'function' ? button.active() : button.active,\n      };\n    });\n  }\n\n  async connect_Socket(\n    apiUserName: string,\n    token: string,\n    skipSockets: boolean = false\n  ): Promise<Socket | null> {\n\n    const socketDefault = this.socket.value;\n    const socketAlt =\n      this.connectMediaSFU && this.localSocket!.value && this.localSocket!.value.id\n        ? this.localSocket!.value\n        : socketDefault;\n\n    if (this.socket.value && this.socket.value.id) {\n      if (!skipSockets) {\n        // Event listeners on socketDefault\n        socketDefault.on('disconnect', async () => {\n          await this.disconnect.disconnect({\n            showAlert: this.showAlert.bind(this),\n            redirectURL: this.redirectURL.value,\n            onWeb: true,\n            updateValidated: this.updateValidated.bind(this),\n          });\n          if (this.videoAlreadyOn.value) {\n            await this.clickVideo.clickVideo({\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n          if (this.audioAlreadyOn.value) {\n            await this.clickAudio.clickAudio({\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          }\n\n          await this.closeAndReset();\n        });\n\n        socketDefault.on('allMembers', async (membersData: AllMembersData) => {\n          if (membersData) {\n            await this.allMembers.allMembers({\n              apiUserName: apiUserName,\n              apiKey: '', //not recommended - use apiToken instead. Use for testing/development only\n              apiToken: token,\n              members: membersData.members,\n              requestss: membersData.requests ? membersData.requests : this.requestList.value,\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\n              coHostRes: membersData.coHostResponsibilities\n                ? membersData.coHostResponsibilities\n                : this.coHostResponsibility.value,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              consume_sockets: this.consume_sockets.value,\n            });\n          }\n        });\n\n        socketDefault.on('allMembersRest', async (membersData: AllMembersRestData) => {\n          if (membersData) {\n            await this.allMembersRest.allMembersRest({\n              apiUserName: apiUserName,\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\n              members: membersData.members,\n              apiToken: token,\n              settings: membersData.settings,\n              coHoste: membersData.coHost ? membersData.coHost : this.coHost.value,\n              coHostRes: membersData.coHostResponsibilities\n                ? membersData.coHostResponsibilities\n                : this.coHostResponsibility.value,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              consume_sockets: this.consume_sockets.value,\n            });\n          }\n        });\n\n        socketDefault.on(\n          'producer-media-paused',\n          async ({\n            producerId,\n            kind,\n            name,\n          }: {\n            producerId: string;\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\n            name: string;\n          }) => {\n            await this.producerMediaPaused.producerMediaPaused({\n              producerId,\n              kind,\n              name,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          },\n        );\n\n        socketDefault.on(\n          'producer-media-resumed',\n          async ({ kind, name }: { kind: 'audio'; name: string }) => {\n            await this.producerMediaResumed.producerMediaResumed({\n              kind,\n              name,\n              parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n            });\n          },\n        );\n\n        socketDefault.on(\n          'producer-media-closed',\n          async ({\n            producerId,\n            kind,\n          }: {\n            producerId: string;\n            kind: 'video' | 'audio' | 'screenshare' | 'screen';\n          }) => {\n            if (producerId && kind) {\n              await this.producerMediaClosed.producerMediaClosed({\n                producerId,\n                kind,\n                parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n              });\n            }\n          },\n        );\n\n        socketDefault.on('meetingEnded', async () => {\n          await this.meetingEnded.meetingEnded({\n            showAlert: this.showAlert.bind(this),\n            redirectURL: this.redirectURL.value,\n            onWeb: true,\n            eventType: this.eventType.value,\n            updateValidated: this.updateValidated.bind(this),\n          });\n\n          if (this.videoAlreadyOn.value) {\n            await this.clickVideo.clickVideo({\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          }\n          if (this.audioAlreadyOn.value) {\n            await this.clickAudio.clickAudio({\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          }\n\n          await this.closeAndReset();\n        });\n\n        socketDefault.on('disconnectUserSelf', async () => {\n          await this.disconnectUserSelf.disconnectUserSelf({\n            socket: socketDefault,\n            member: this.member.value,\n            roomName: this.roomName.value,\n          });\n        });\n\n        socketDefault.on('receiveMessage', async ({ message }: { message: Message }) => {\n          await this.receiveMessage.receiveMessage({\n            message,\n            messages: this.messages.value,\n            participantsAll: this.participantsAll.value,\n            member: this.member.value,\n            eventType: this.eventType.value,\n            islevel: this.islevel.value,\n            coHost: this.coHost.value,\n            updateMessages: this.updateMessages.bind(this),\n            updateShowMessagesBadge: this.updateShowMessagesBadge.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'meetingTimeRemaining',\n          async ({ timeRemaining }: { timeRemaining: number }) => {\n            await this.meetingTimeRemaining.meetingTimeRemaining({\n              timeRemaining,\n              showAlert: this.showAlert.bind(this),\n              eventType: this.eventType.value,\n            });\n          },\n        );\n\n        socketDefault.on('meetingStillThere', async () => {\n          if (this.suppressConfirmHereForSession) {\n            return;\n          }\n\n          this.meetingStillThere.meetingStillThere({\n            updateIsConfirmHereModalVisible: this.updateIsConfirmHereModalVisible.bind(this),\n          });\n        });\n\n        socketDefault.on(\n          'updateConsumingDomains',\n          async ({ domains, alt_domains }: UpdateConsumingDomainsData) => {\n            await this.updateConsumingDomains.updateConsumingDomains({\n              domains,\n              alt_domains,\n              apiUserName,\n              apiKey: '', // not recommended - use apiToken instead. Use for testing/development only\n              apiToken: token,\n              parameters: {\n                ...this.getAllParams(),\n                ...this.mediaSFUFunctions(),\n              },\n            });\n          },\n        );\n      }\n\n      if (this.localLink !== \"\" && socketDefault && !skipSockets) {\n        await this.join_Room({\n          socket: socketDefault,\n          roomName: this.roomName.value,\n          islevel: this.islevel.value,\n          member: this.member.value,\n          sec: token,\n          apiUserName: apiUserName,\n          isLocal: true,\n        });\n      }\n\n      // Check if localSocket has changed\n      const localChanged =\n        this.localSocket!.value && this.localSocket!.value.id && this.localSocket!.value.id !== socketAlt.id;\n\n\n      if (!skipSockets && localChanged) {\n        // Re-call connect_Socket with skipSockets = true\n        await this.connect_Socket(apiUserName, token, true);\n        await sleep({ ms: 1000 })\n        this.updateIsLoadingModalVisible(false);\n        return socketDefault;\n      } else {\n        if (this.link.value !== '' && this.link.value.includes('mediasfu.com')) {\n          // Token might be different for local room\n          const token = this.apiToken.value;\n          await this.join_Room({\n            socket:\n              this.connectMediaSFU && socketAlt && socketAlt.id ? socketAlt : socketDefault,\n            roomName: this.roomName.value,\n            islevel: this.islevel.value,\n            member: this.member.value,\n            sec: token,\n            apiUserName: apiUserName,\n          });\n        }\n\n        await this.receiveRoomMessages.receiveRoomMessages({\n          socket: socketDefault,\n          roomName: this.roomName.value,\n          updateMessages: this.updateMessages.bind(this),\n        });\n\n        if (!skipSockets) {\n          await this.prepopulateUserMedia.prepopulateUserMedia({\n            name: this.hostLabel.value,\n            parameters: { ...this.getAllParams(), ...this.mediaSFUFunctions() },\n          });\n        }\n\n        return socketDefault;\n      }\n    } else {\n      return null;\n    }\n  }\n}\n","import { Injectable, Input, OnInit } from '@angular/core';\r\nimport { SoundPlayer as sharedSoundPlayer } from 'mediasfu-shared';\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 | Promise<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    void sharedSoundPlayer({ soundUrl });\r\n  }\r\n}\r\n","import { Component, Input, OnInit, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faTimes, faUserTie, faEye, faEyeSlash, faCheck, faMicrophone, faMicrophoneSlash, faVideo, faVideoSlash, faStar, faMinus, faUsers, faSearch, faPlus } from '@fortawesome/free-solid-svg-icons';\nimport { Participant, ShowAlert } from '../../../@types/types';\nimport { Socket } from 'socket.io-client';\nimport { AddPanelist } from '../../../methods/panelists-methods/add-panelist.service';\nimport { RemovePanelist } from '../../../methods/panelists-methods/remove-panelist.service';\nimport { FocusPanelists } from '../../../methods/panelists-methods/focus-panelists.service';\n\nexport interface PanelistsModalParameters {\n  participants: Participant[];\n  panelists: Participant[];\n  member: string;\n  islevel: string;\n  socket: Socket;\n  roomName: string;\n  showAlert?: ShowAlert;\n  itemPageLimit: number;\n  panelistsFocused?: boolean;\n  updatePanelists?: (panelists: Participant[]) => void;\n  updatePanelistsFocused?: (focused: boolean) => void;\n  getUpdatedAllParams: () => PanelistsModalParameters;\n}\n\nexport interface PanelistsModalOptions {\n  isPanelistsModalVisible: boolean;\n  onPanelistsClose: () => void;\n  parameters: PanelistsModalParameters;\n  backgroundColor?: string;\n  position?: string;\n}\n\n@Component({\n  selector: 'app-panelists-modal',\n  imports: [CommonModule, FontAwesomeModule],\n  templateUrl: './panelists-modal.component.html',\n  styleUrls: ['./panelists-modal.component.css'],\n})\nexport class PanelistsModalComponent implements OnInit, OnChanges {\n  @Input() isPanelistsModalVisible = false;\n  @Input() onPanelistsClose!: () => void;\n  @Input() parameters: PanelistsModalParameters = {} as PanelistsModalParameters;\n  @Input() backgroundColor = '#1e293b';\n  @Input() position = 'center';\n\n  // FontAwesome Icons\n  faTimes = faTimes;\n  faUserTie = faUserTie;\n  faEye = faEye;\n  faEyeSlash = faEyeSlash;\n  faCheck = faCheck;\n  faMicrophone = faMicrophone;\n  faMicrophoneSlash = faMicrophoneSlash;\n  faVideo = faVideo;\n  faVideoSlash = faVideoSlash;\n  faStar = faStar;\n  faMinus = faMinus;\n  faUsers = faUsers;\n  faSearch = faSearch;\n  faPlus = faPlus;\n\n  // Local State\n  searchFilter = '';\n  localPanelists: Participant[] = [];\n  isFocused = false;\n  muteOthersMic = false;\n  muteOthersCamera = false;\n  participantsState: Participant[] = [];\n  availableParticipants: Participant[] = [];\n  isHost = false;\n\n  constructor(\n    private addPanelistService: AddPanelist,\n    private removePanelistService: RemovePanelist,\n    private focusPanelistsService: FocusPanelists\n  ) {}\n\n  ngOnInit() {\n    this.updateStateFromParams();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['parameters'] || changes['isPanelistsModalVisible']) {\n      this.updateStateFromParams();\n    }\n  }\n\n  updateStateFromParams() {\n    if (this.isPanelistsModalVisible && this.parameters.getUpdatedAllParams) {\n      const freshParams = this.parameters.getUpdatedAllParams();\n      this.participantsState = freshParams.participants || [];\n      if (freshParams.panelists) {\n        this.localPanelists = [...freshParams.panelists];\n      }\n      if (freshParams.panelistsFocused !== undefined) {\n        this.isFocused = freshParams.panelistsFocused;\n      }\n      this.isHost = freshParams.islevel === '2';\n      this.updateAvailableParticipants();\n    }\n  }\n\n  handleSearch(event: Event) {\n    const inputElement = event.target as HTMLInputElement;\n    this.searchFilter = inputElement.value;\n    this.updateAvailableParticipants();\n  }\n\n  updateAvailableParticipants() {\n    this.availableParticipants = this.participantsState\n      .filter((p) => !this.localPanelists.some((lp) => lp.name === p.name) && p.islevel !== '2')\n      .filter((p) =>\n        this.searchFilter ? p.name.toLowerCase().includes(this.searchFilter.toLowerCase()) : true\n      );\n  }\n\n  async handleAddPanelist(participant: Participant) {\n    const success = await this.addPanelistService.addPanelist({\n      socket: this.parameters.socket,\n      participant,\n      currentPanelists: this.localPanelists,\n      maxPanelists: this.parameters.itemPageLimit,\n      roomName: this.parameters.roomName,\n      member: this.parameters.member,\n      islevel: this.parameters.islevel,\n      showAlert: this.parameters.showAlert,\n    });\n\n    if (success) {\n      this.localPanelists = [...this.localPanelists, participant];\n      this.parameters.updatePanelists?.(this.localPanelists);\n      this.updateAvailableParticipants();\n    }\n  }\n\n  async handleRemovePanelist(participant: Participant) {\n    await this.removePanelistService.removePanelist({\n      socket: this.parameters.socket,\n      participant,\n      roomName: this.parameters.roomName,\n      member: this.parameters.member,\n      islevel: this.parameters.islevel,\n      showAlert: this.parameters.showAlert,\n    });\n\n    this.localPanelists = this.localPanelists.filter((p) => p.name !== participant.name);\n    this.parameters.updatePanelists?.(this.localPanelists);\n    this.updateAvailableParticipants();\n  }\n\n  async handleToggleFocus() {\n    const newFocused = !this.isFocused;\n\n    await this.focusPanelistsService.focusPanelists({\n      socket: this.parameters.socket,\n      roomName: this.parameters.roomName,\n      member: this.parameters.member,\n      islevel: this.parameters.islevel,\n      focusEnabled: newFocused,\n      muteOthersMic: newFocused ? this.muteOthersMic : false,\n      muteOthersCamera: newFocused ? this.muteOthersCamera : false,\n      showAlert: this.parameters.showAlert,\n    });\n\n    this.isFocused = newFocused;\n    this.parameters.updatePanelistsFocused?.(newFocused);\n  }\n\n  toggleMuteOthersMic() {\n    this.muteOthersMic = !this.muteOthersMic;\n  }\n\n  toggleMuteOthersCamera() {\n    this.muteOthersCamera = !this.muteOthersCamera;\n  }\n}\n","<div *ngIf=\"isPanelistsModalVisible\" class=\"panelists-overlay\" (click)=\"onPanelistsClose()\">\n  <div class=\"panelists-modal-container\" [style.backgroundColor]=\"backgroundColor\" (click)=\"$event.stopPropagation()\">\n    \n    <!-- Header -->\n    <div class=\"modal-header\">\n      <div class=\"header-title-container\">\n        <fa-icon [icon]=\"faUserTie\" class=\"icon-white\"></fa-icon>\n        <span class=\"header-title\">Panelists</span>\n        <div class=\"count-badge\">\n          <span class=\"count-text\">{{ localPanelists.length }} / {{ parameters.itemPageLimit }}</span>\n        </div>\n      </div>\n      <button class=\"close-button\" (click)=\"onPanelistsClose()\">\n        <fa-icon [icon]=\"faTimes\" class=\"icon-white\"></fa-icon>\n      </button>\n    </div>\n\n    <!-- Focus Controls -->\n    <div *ngIf=\"isHost && localPanelists.length > 0\" class=\"focus-container\">\n      <div class=\"focus-row\">\n        <div class=\"focus-label-container\">\n          <fa-icon [icon]=\"isFocused ? faEye : faEyeSlash\" [class]=\"isFocused ? 'icon-purple' : 'icon-faded'\"></fa-icon>\n          <span class=\"focus-label-text\">Focus on Panelists</span>\n        </div>\n        <button \n          (click)=\"handleToggleFocus()\" \n          class=\"focus-button\" \n          [style.backgroundColor]=\"isFocused ? '#ef4444' : '#8b5cf6'\">\n          {{ isFocused ? 'Disable Focus' : 'Enable Focus' }}\n        </button>\n      </div>\n\n      <div *ngIf=\"!isFocused\" class=\"mute-row\">\n        <button class=\"checkbox-container\" (click)=\"toggleMuteOthersMic()\">\n          <div class=\"checkbox\" [class.checkbox-checked]=\"muteOthersMic\">\n            <fa-icon *ngIf=\"muteOthersMic\" [icon]=\"faCheck\" class=\"icon-small\"></fa-icon>\n          </div>\n          <fa-icon [icon]=\"muteOthersMic ? faMicrophoneSlash : faMicrophone\" class=\"icon-white\"></fa-icon>\n          <span class=\"checkbox-text\">Mute others' mic</span>\n        </button>\n\n        <button class=\"checkbox-container\" (click)=\"toggleMuteOthersCamera()\">\n          <div class=\"checkbox\" [class.checkbox-checked]=\"muteOthersCamera\">\n            <fa-icon *ngIf=\"muteOthersCamera\" [icon]=\"faCheck\" class=\"icon-small\"></fa-icon>\n          </div>\n          <fa-icon [icon]=\"muteOthersCamera ? faVideoSlash : faVideo\" class=\"icon-white\"></fa-icon>\n          <span class=\"checkbox-text\">Mute others' cam</span>\n        </button>\n      </div>\n    </div>\n\n    <!-- Content -->\n    <div class=\"content-container scrollable-area\">\n      <!-- Current Panelists -->\n      <div class=\"section\">\n        <div class=\"section-header\">\n          <fa-icon [icon]=\"faStar\" class=\"icon-yellow\"></fa-icon>\n          <span class=\"section-title\">Current Panelists</span>\n        </div>\n\n        <div *ngIf=\"localPanelists.length === 0\" class=\"empty-container\">\n          <span class=\"empty-text\">No panelists selected yet</span>\n        </div>\n\n        <div *ngIf=\"localPanelists.length > 0\" class=\"list-container\">\n          <div *ngFor=\"let panelist of localPanelists\" class=\"panelist-item\">\n            <div class=\"panelist-item-left\">\n              <fa-icon [icon]=\"faStar\" class=\"icon-yellow\"></fa-icon>\n              <span class=\"panelist-name\">{{ panelist.name }}</span>\n            </div>\n            <button *ngIf=\"isHost\" (click)=\"handleRemovePanelist(panelist)\" class=\"action-btn remove-btn\">\n              <fa-icon [icon]=\"faMinus\" class=\"btn-icon\"></fa-icon>\n              Remove\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <!-- Add Panelists -->\n      <div *ngIf=\"isHost && localPanelists.length < parameters.itemPageLimit\" class=\"section\">\n        <div class=\"section-header\">\n          <fa-icon [icon]=\"faUsers\" class=\"icon-faded\"></fa-icon>\n          <span class=\"section-title\">Add Panelists</span>\n        </div>\n\n        <!-- Search -->\n        <div class=\"search-container\">\n          <fa-icon [icon]=\"faSearch\" class=\"icon-faded\"></fa-icon>\n          <input \n            type=\"text\" \n            class=\"search-input\" \n            placeholder=\"Search participants...\" \n            [value]=\"searchFilter\"\n            (input)=\"handleSearch($event)\" />\n        </div>\n\n        <!-- Available Participants -->\n        <div *ngIf=\"availableParticipants.length === 0\" class=\"empty-container\">\n          <span class=\"empty-text\">{{ searchFilter ? 'No matching participants' : 'No available participants to add' }}</span>\n        </div>\n\n        <div *ngIf=\"availableParticipants.length > 0\" class=\"available-list scrollable-area\">\n          <div *ngFor=\"let participant of availableParticipants\" class=\"available-item\">\n            <div class=\"panelist-item-left\">\n              <span class=\"participant-name\">{{ participant.name }}</span>\n              <div class=\"level-badge\" [ngClass]=\"participant.islevel === '1' ? 'level-elevated' : 'level-basic'\">\n                <span>{{ participant.islevel === '1' ? 'Elevated' : 'Basic' }}</span>\n              </div>\n            </div>\n            <button (click)=\"handleAddPanelist(participant)\" class=\"action-btn add-btn\">\n              <fa-icon [icon]=\"faPlus\" class=\"btn-icon\"></fa-icon>\n              Add\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <!-- Limit Reached Message -->\n      <div *ngIf=\"isHost && localPanelists.length >= parameters.itemPageLimit\" class=\"limit-container\">\n        <span class=\"limit-text\">Maximum panelist limit ({{ parameters.itemPageLimit }}) reached. Remove a panelist to add more.</span>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport {\n  faTimes,\n  faUserShield,\n  faUsers,\n  faCog,\n  faChevronUp,\n  faChevronDown,\n  faCheck,\n  faClock,\n  faBan,\n  faMicrophone,\n  faVideo,\n  faDesktop,\n  faComment\n} from '@fortawesome/free-solid-svg-icons';\nimport { Participant, ShowAlert } from '../../../@types/types';\nimport { Socket } from 'socket.io-client';\nimport { UpdateParticipantPermission, PermissionLevel } from '../../../methods/permissions-methods/update-participant-permission.service';\nimport { BulkUpdateParticipantPermissions } from '../../../methods/permissions-methods/bulk-update-participant-permissions.service';\nimport { UpdatePermissionConfig, PermissionConfig, PermissionCapabilities } from '../../../methods/permissions-methods/update-permission-config.service';\n\nexport interface PermissionsModalParameters {\n  participants: Participant[];\n  member: string;\n  islevel: string;\n  socket: Socket;\n  roomName: string;\n  showAlert?: ShowAlert;\n  permissionConfig?: PermissionConfig;\n  updatePermissionConfig?: (config: PermissionConfig) => void;\n  getUpdatedAllParams: () => PermissionsModalParameters;\n  audioSetting?: string;\n  videoSetting?: string;\n  screenshareSetting?: string;\n  chatSetting?: string;\n}\n\ntype PermissionValue = PermissionCapabilities[keyof PermissionCapabilities];\n\n@Component({\n  selector: 'app-permissions-modal',\n  standalone: true,\n  imports: [CommonModule, FormsModule, FontAwesomeModule],\n  templateUrl: './permissions-modal.component.html',\n  styleUrls: ['./permissions-modal.component.css'],\n})\nexport class PermissionsModalComponent implements OnInit, OnChanges {\n  @Input() isPermissionsModalVisible = false;\n  @Input() onPermissionsClose!: () => void;\n  @Input() parameters: PermissionsModalParameters = {} as PermissionsModalParameters;\n  @Input() backgroundColor = '#1e293b';\n  @Input() position = 'center';\n\n  // FontAwesome Icons\n  faTimes = faTimes;\n  faUserShield = faUserShield;\n  faUsers = faUsers;\n  faCog = faCog;\n  faChevronUp = faChevronUp;\n  faChevronDown = faChevronDown;\n  faCheck = faCheck;\n  faClock = faClock;\n  faBan = faBan;\n  faMicrophone = faMicrophone;\n  faVideo = faVideo;\n  faDesktop = faDesktop;\n  faComment = faComment;\n\n  activeTab: 'users' | 'config' = 'users';\n  searchFilter = '';\n  selectedParticipants: Set<string> = new Set();\n  expandedLevel: 'level0' | 'level1' | null = 'level0';\n  \n  localConfig!: PermissionConfig;\n  participantsState: Participant[] = [];\n\n  constructor(\n    private updateParticipantPermissionService: UpdateParticipantPermission,\n    private bulkUpdateParticipantPermissionsService: BulkUpdateParticipantPermissions,\n    private updatePermissionConfigService: UpdatePermissionConfig\n  ) {}\n\n  ngOnInit() {\n    this.updateStateFromParams();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['parameters'] || changes['isPermissionsModalVisible']) {\n      this.updateStateFromParams();\n    }\n  }\n\n  computeInitialConfig(): PermissionConfig {\n    if (this.parameters.permissionConfig) return this.parameters.permissionConfig;\n    return this.updatePermissionConfigService.getPermissionConfigFromEventSettings(\n      this.parameters.audioSetting || 'approval',\n      this.parameters.videoSetting || 'approval',\n      this.parameters.screenshareSetting || 'disallow',\n      this.parameters.chatSetting || 'allow'\n    );\n  }\n\n  updateStateFromParams() {\n    if (this.isPermissionsModalVisible && this.parameters.getUpdatedAllParams) {\n      const freshParams = this.parameters.getUpdatedAllParams();\n      this.participantsState = freshParams.participants || [];\n      \n      if (freshParams.permissionConfig) {\n        this.localConfig = JSON.parse(JSON.stringify(freshParams.permissionConfig));\n      } else if (!this.localConfig) {\n        this.localConfig = this.computeInitialConfig();\n      }\n    }\n  }\n\n  get isHost(): boolean {\n    return this.parameters.islevel === '2';\n  }\n\n  get filteredParticipants(): Participant[] {\n    return this.participantsState\n      .filter((p) => p.islevel !== '2')\n      .filter((p) => (this.searchFilter ? p.name.toLowerCase().includes(this.searchFilter.toLowerCase()) : true));\n  }\n\n  get participantsByLevel(): { '1': Participant[], '0': Participant[] } {\n    const grouped: { '1': Participant[], '0': Participant[] } = { '1': [], '0': [] };\n    this.filteredParticipants.forEach((p) => {\n      const level = p.islevel === '1' ? '1' : '0';\n      grouped[level].push(p);\n    });\n    return grouped;\n  }\n\n  getLevelLabel(level: '1' | '0'): string {\n    return level === '1' ? 'Elevated' : 'Basic';\n  }\n\n  getLevelColor(level: '1' | '0'): string {\n    return level === '1' ? '#3b82f6' : '#6b7280';\n  }\n\n  hasSelected(participantName: string): boolean {\n    return this.selectedParticipants.has(participantName);\n  }\n\n  handleParticipantSelect(participantName: string) {\n    if (this.selectedParticipants.has(participantName)) {\n      this.selectedParticipants.delete(participantName);\n    } else {\n      this.selectedParticipants.add(participantName);\n    }\n  }\n\n  handleSelectAll() {\n    if (this.selectedParticipants.size === this.filteredParticipants.length && this.filteredParticipants.length > 0) {\n      this.selectedParticipants.clear();\n    } else {\n      this.filteredParticipants.forEach((p) => this.selectedParticipants.add(p.name));\n    }\n  }\n\n  async handleBulkUpdate(newLevel: PermissionLevel) {\n    const selectedList = this.filteredParticipants.filter((p) => this.selectedParticipants.has(p.name));\n    if (selectedList.length === 0) {\n      this.parameters.showAlert?.({\n        message: 'Please select participants to update',\n        type: 'danger',\n        duration: 3000,\n      });\n      return;\n    }\n\n    await this.bulkUpdateParticipantPermissionsService.bulkUpdateParticipantPermissions({\n      socket: this.parameters.socket,\n      participants: selectedList,\n      newLevel,\n      member: this.parameters.member,\n      islevel: this.parameters.islevel,\n      roomName: this.parameters.roomName,\n      showAlert: this.parameters.showAlert,\n      maxBatchSize: 50,\n    });\n\n    this.selectedParticipants.clear();\n  }\n\n  async handleSingleUpdate(participant: Participant, newLevel: PermissionLevel) {\n    await this.updateParticipantPermissionService.updateParticipantPermission({\n      socket: this.parameters.socket,\n      participant,\n      newLevel,\n      member: this.parameters.member,\n      islevel: this.parameters.islevel,\n      roomName: this.parameters.roomName,\n      showAlert: this.parameters.showAlert,\n    });\n  }\n\n  handleConfigChange(\n    level: 'level0' | 'level1',\n    capability: keyof PermissionCapabilities,\n    value: PermissionValue\n  ) {\n    switch (capability) {\n      case 'useChat':\n        this.localConfig[level].useChat = value === 'allow' ? 'allow' : 'disallow';\n        return;\n      case 'useMic':\n        this.localConfig[level].useMic = value as PermissionCapabilities['useMic'];\n        return;\n      case 'useCamera':\n        this.localConfig[level].useCamera = value as PermissionCapabilities['useCamera'];\n        return;\n      case 'useScreen':\n        this.localConfig[level].useScreen = value as PermissionCapabilities['useScreen'];\n        return;\n    }\n  }\n\n  async handleSaveConfig() {\n    await this.updatePermissionConfigService.updatePermissionConfig({\n      socket: this.parameters.socket,\n      config: this.localConfig,\n      member: this.parameters.member,\n      islevel: this.parameters.islevel,\n      roomName: this.parameters.roomName,\n      showAlert: this.parameters.showAlert,\n    });\n    this.parameters.updatePermissionConfig?.(this.localConfig);\n  }\n\n  toggleLevelConfig(level: 'level0' | 'level1') {\n    this.expandedLevel = this.expandedLevel === level ? null : level;\n  }\n\n  // Enums for template usage\n  levels: ('1' | '0')[] = ['1', '0'];\n  configLevels: ('level0' | 'level1')[] = ['level0', 'level1'];\n  capabilities: (keyof PermissionCapabilities)[] = ['useMic', 'useCamera', 'useScreen', 'useChat'];\n  readonly chatOptions: PermissionCapabilities['useChat'][] = ['allow', 'disallow'];\n  readonly standardOptions: PermissionCapabilities['useMic'][] = ['allow', 'approval', 'disallow'];\n\n  getParticipantsForLevel(level: '1' | '0'): Participant[] {\n    return this.participantsByLevel[level];\n  }\n\n  getConfigValue(level: 'level0' | 'level1', capability: keyof PermissionCapabilities): PermissionValue {\n    return this.localConfig[level][capability] as PermissionValue;\n  }\n\n  isSelectedConfigOption(\n    level: 'level0' | 'level1',\n    capability: keyof PermissionCapabilities,\n    value: PermissionValue\n  ): boolean {\n    return this.getConfigValue(level, capability) === value;\n  }\n\n  getCapabilityIcon(capability: keyof PermissionCapabilities) {\n    switch (capability) {\n      case 'useMic': return this.faMicrophone;\n      case 'useCamera': return this.faVideo;\n      case 'useScreen': return this.faDesktop;\n      case 'useChat': return this.faComment;\n    }\n  }\n\n  getCapabilityName(capability: keyof PermissionCapabilities) {\n    switch (capability) {\n      case 'useMic': return 'Microphone';\n      case 'useCamera': return 'Camera';\n      case 'useScreen': return 'Screen Share';\n      case 'useChat': return 'Chat';\n    }\n  }\n\n  getStatusIcon(status: string) {\n    switch (status) {\n      case 'allow': return this.faCheck;\n      case 'approval': return this.faClock;\n      case 'disallow': return this.faBan;\n      default: return this.faCheck;\n    }\n  }\n\n  getStatusColor(status: string) {\n    switch (status) {\n      case 'allow': return '#22c55e';\n      case 'approval': return '#f59e0b';\n      case 'disallow': return '#ef4444';\n      default: return '#22c55e';\n    }\n  }\n\n  getOptionsForCapability(capability: keyof PermissionCapabilities): readonly PermissionValue[] {\n    if (capability === 'useChat') {\n      return this.chatOptions;\n    }\n    return this.standardOptions;\n  }\n}\n","<div *ngIf=\"isPermissionsModalVisible\" class=\"permissions-overlay\" (click)=\"onPermissionsClose()\">\n  <div class=\"permissions-modal-container\" [style.backgroundColor]=\"backgroundColor\" (click)=\"$event.stopPropagation()\">\n    \n    <!-- Header -->\n    <div class=\"modal-header\">\n      <div class=\"header-title-container\">\n        <fa-icon [icon]=\"faUserShield\" class=\"icon-white\"></fa-icon>\n        <span class=\"header-title\">Permissions</span>\n      </div>\n      <button class=\"close-button\" (click)=\"onPermissionsClose()\">\n        <fa-icon [icon]=\"faTimes\" class=\"icon-white\"></fa-icon>\n      </button>\n    </div>\n\n    <!-- Tabs -->\n    <div class=\"tabs-container\">\n      <button class=\"tab-button\" [class.tab-active]=\"activeTab === 'users'\" (click)=\"activeTab = 'users'\">\n        <fa-icon [icon]=\"faUsers\" [class]=\"activeTab === 'users' ? 'icon-white' : 'icon-faded'\"></fa-icon>\n        <span class=\"tab-text\" [class.tab-text-active]=\"activeTab === 'users'\">User Permissions</span>\n      </button>\n      <button class=\"tab-button\" [class.tab-active]=\"activeTab === 'config'\" (click)=\"activeTab = 'config'\">\n        <fa-icon [icon]=\"faCog\" [class]=\"activeTab === 'config' ? 'icon-white' : 'icon-faded'\"></fa-icon>\n        <span class=\"tab-text\" [class.tab-text-active]=\"activeTab === 'config'\">Level Config</span>\n      </button>\n    </div>\n\n    <!-- Content -->\n    <div class=\"content-container scrollable-area\">\n      <!-- Users Tab -->\n      <div *ngIf=\"activeTab === 'users'\">\n        <!-- Search & Bulk Actions -->\n        <div class=\"search-section\">\n          <input \n            type=\"text\" \n            class=\"search-input\" \n            placeholder=\"Search participants...\" \n            [(ngModel)]=\"searchFilter\" />\n\n          <div *ngIf=\"isHost\" class=\"bulk-actions-container\">\n            <button class=\"select-action-btn\" (click)=\"handleSelectAll()\">\n              {{ selectedParticipants.size === filteredParticipants.length && filteredParticipants.length > 0 ? 'Deselect All' : 'Select All' }}\n            </button>\n\n            <div *ngIf=\"selectedParticipants.size > 0\" class=\"selected-count-row\">\n              <span class=\"selected-count-text\">{{ selectedParticipants.size }} selected &rarr;</span>\n              <button class=\"bulk-elevate-btn\" (click)=\"handleBulkUpdate('1')\">Set Elevated</button>\n              <button class=\"bulk-basic-btn\" (click)=\"handleBulkUpdate('0')\">Set Basic</button>\n            </div>\n          </div>\n        </div>\n\n        <!-- Participants by Level -->\n        <div *ngFor=\"let level of levels\" class=\"level-group\">\n          <div class=\"level-header\">\n            <div class=\"level-dot\" [style.backgroundColor]=\"getLevelColor(level)\"></div>\n            <span class=\"level-title\">{{ getLevelLabel(level) }}</span>\n            <div class=\"level-count-badge\">\n              <span class=\"level-count-text\">{{ getParticipantsForLevel(level).length }}</span>\n            </div>\n          </div>\n\n          <div *ngIf=\"getParticipantsForLevel(level).length === 0\" class=\"empty-level\">\n            <span class=\"empty-level-text\">No participants at this level</span>\n          </div>\n\n          <div *ngIf=\"getParticipantsForLevel(level).length > 0\" class=\"participants-list\">\n            <div *ngFor=\"let participant of getParticipantsForLevel(level)\" \n                 class=\"participant-item\" \n                 [class.participant-item-selected]=\"hasSelected(participant.name)\">\n              \n              <div class=\"participant-item-left\">\n                <button *ngIf=\"isHost\" class=\"checkbox-wrapper\" (click)=\"handleParticipantSelect(participant.name)\">\n                  <div class=\"checkbox\" [class.checkbox-checked]=\"hasSelected(participant.name)\">\n                    <fa-icon *ngIf=\"hasSelected(participant.name)\" [icon]=\"faCheck\" class=\"icon-small\"></fa-icon>\n                  </div>\n                </button>\n                <span class=\"participant-name\">{{ participant.name }}</span>\n              </div>\n\n              <div *ngIf=\"isHost\" class=\"action-buttons\">\n                <button *ngIf=\"level === '0'\" class=\"single-action-btn\" (click)=\"handleSingleUpdate(participant, '1')\">\n                  Make Elevated\n                </button>\n                <button *ngIf=\"level === '1'\" class=\"single-action-btn\" (click)=\"handleSingleUpdate(participant, '0')\">\n                  Make Basic\n                </button>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Config Tab -->\n      <div *ngIf=\"activeTab === 'config'\">\n        <p class=\"config-intro-text\">\n          Configure what each permission level can do. Host (level 2) always has full permissions.\n        </p>\n\n        <div *ngFor=\"let levelKey of configLevels\" class=\"config-level-group\">\n          <button class=\"config-level-header\" (click)=\"toggleLevelConfig(levelKey)\">\n            <div class=\"config-level-header-left\">\n              <div class=\"level-dot\" [style.backgroundColor]=\"levelKey === 'level0' ? '#6b7280' : '#3b82f6'\"></div>\n              <span class=\"config-level-title\">{{ levelKey === 'level0' ? 'Basic (Level 0)' : 'Elevated (Level 1)' }}</span>\n            </div>\n            <fa-icon [icon]=\"expandedLevel === levelKey ? faChevronUp : faChevronDown\" class=\"icon-white\"></fa-icon>\n          </button>\n\n          <div *ngIf=\"expandedLevel === levelKey\" class=\"capabilities-container\">\n            <div *ngFor=\"let capability of capabilities\" class=\"capability-row\">\n              <div class=\"capability-left\">\n                <div class=\"capability-icon-wrap\">\n                  <fa-icon [icon]=\"getCapabilityIcon(capability)\" class=\"icon-faded\"></fa-icon>\n                </div>\n                <span class=\"capability-name\">{{ getCapabilityName(capability) }}</span>\n              </div>\n\n              <!-- Host controls -->\n              <div *ngIf=\"isHost\" class=\"capability-options-row\">\n                <button *ngFor=\"let val of getOptionsForCapability(capability)\"\n                        class=\"config-option-btn\"\n                        [class.config-option-btn-selected]=\"isSelectedConfigOption(levelKey, capability, val)\"\n                        (click)=\"handleConfigChange(levelKey, capability, val)\">\n                  <span class=\"config-option-text\" [class.config-option-text-selected]=\"isSelectedConfigOption(levelKey, capability, val)\">\n                    {{ val | titlecase }}\n                  </span>\n                </button>\n              </div>\n\n              <!-- Non-host view -->\n              <div *ngIf=\"!isHost\" class=\"capability-status\" [style.color]=\"getStatusColor(getConfigValue(levelKey, capability))\">\n                <fa-icon [icon]=\"getStatusIcon(getConfigValue(levelKey, capability))\"></fa-icon>\n                <span class=\"capability-status-text\">{{ getConfigValue(levelKey, capability) }}</span>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <button *ngIf=\"isHost\" class=\"save-config-btn\" (click)=\"handleSaveConfig()\">\n          Save Configuration\n        </button>\n      </div>\n    </div>\n  </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["sharedJoinConsumeRoom","sharedProducerClosed","sharedNewPipeProducer","sharedGetOverlayPosition","sharedTranslationRoomConfig","sharedTranslationConfigUpdated","sharedTranslationLanguageSet","sharedTranslationSubscribed","sharedTranslationUnsubscribed","sharedTranslationProducerReady","sharedTranslationProducerClosed","sharedTranslationChannelsAvailable","sharedTranslationMemberState","sharedTranslationError","sharedTranslationTranscript","sharedTranslationSpeakerOutputChanged","sharedControlMedia","i4","i1.ControlMedia","i2.LiveSubtitleService","sharedAutoAdjust","sharedCalculateRowsAndColumns","sharedChangeVids","sharedCheckGrid","sharedCheckPermission","sharedCheckScreenShare","sharedCloseAndResize","sharedCompareActiveNames","sharedCompareScreenStates","sharedConnectIps","i1.NewPipeProducer","i2.ProducerClosed","i3.JoinConsumeRoom","sharedConnectLocalIps","sharedConnectRecvTransport","sharedConnectSendTransport","sharedConnectSendTransportAudio","sharedConnectSendTransportScreen","sharedConnectSendTransportVideo","sharedCreateSendTransport","sharedDisconnectSendTransportAudio","sharedDisconnectSendTransportVideo","sharedDisconnectSendTransportScreen","sharedDispStreams","sharedGeneratePageContent","sharedGetEstimate","sharedGetPipedProducersAlt","sharedGetProducersPiped","sharedGetVideos","sharedMixStreams","sharedOnScreenChanges","sharedProcessConsumerTransports","sharedProcessConsumerTransportsAudio","sharedReadjust","sharedReceiveAllPipedTransports","sharedReorderStreams","sharedRePort","sharedRequestScreenShare","sharedResumePauseAudioStreams","sharedResumePauseStreams","sharedResumeSendTransportAudio","sharedReUpdateInter","sharedSignalNewConsumerTransport","sharedStartShareScreen","sharedStopShareScreen","sharedStreamSuccessAudio","sharedStreamSuccessAudioSwitch","sharedStreamSuccessScreen","sharedSwitchUserAudio","sharedClickVideo","sharedSwitchUserVideo","i1.ClickVideo","sharedSwitchUserVideoAlt","sharedTrigger","sharedUpdateMiniCardsGrid","sharedUpdateParticipantAudioDecibels","sharedAParams","sharedHParams","sharedScreenParams","sharedVParams","sharedLaunchBackground","sharedLaunchBreakoutRooms","sharedBreakoutRoomUpdated","sharedLaunchCoHost","sharedModifyCoHostSettings","sharedLaunchDisplaySettings","sharedModifyDisplaySettings","sharedLaunchConfirmExit","sharedConfirmExit","sharedLaunchMediaSettings","sharedLaunchMenuModal","sharedLaunchMessages","sharedLaunchParticipants","sharedMessageParticipants","sharedMuteParticipants","sharedRemoveParticipants","sharedHandleCreatePoll","sharedHandleEndPoll","sharedHandleVotePoll","sharedLaunchPoll","sharedPollUpdated","sharedCheckPauseState","sharedCheckResumeState","sharedConfirmRecording","sharedLaunchRecording","sharedRecordPauseTimer","sharedRecordResumeTimer","sharedRecordStartTimer","sharedRecordUpdateTimer","sharedStartRecording","sharedStopRecording","sharedUpdateRecording","sharedLaunchRequests","sharedRespondToRequests","sharedLaunchSettings","sharedModifySettings","sharedClickAudio","sharedClickChat","sharedClickScreenShare","sharedSwitchAudio","sharedSwitchVideo","sharedSwitchVideoAlt","sharedJoinRoomOnMediaSFU","sharedFormatNumber","sharedGetModalPosition","sharedSleep","sharedValidateAlphanumeric","sharedLaunchWaiting","sharedRespondToWaiting","sharedLaunchConfigureWhiteboard","sharedCreateDeviceClient","sharedJoinRoomClient","sharedUpdateRoomParametersClient","sharedJoinConRoom","sharedJoinRoom","sharedCheckMediasfuURL","sharedJoinLocalRoom","i1.JoinRoomOnMediaSFU","sharedAllMembers","sharedAllMembersRest","sharedAllWaitingRoomMembers","sharedBanParticipant","sharedControlMediaHost","sharedDisconnect","sharedDisconnectUserSelf","sharedGetDomains","sharedHostRequestResponse","sharedMeetingEnded","sharedMeetingStillThere","sharedMeetingTimeRemaining","sharedParticipantRequested","sharedPersonJoined","sharedProducerMediaClosed","sharedProducerMediaPaused","sharedProducerMediaResumed","sharedReInitiateRecording","sharedReceiveMessage","sharedRecordingNotice","sharedRoomRecordParams","sharedScreenProducerId","sharedStartRecords","sharedStoppedRecording","sharedTimeLeftRecording","sharedUpdateConsumingDomains","sharedUpdateMediaSettings","sharedUpdatedCoHost","sharedUserWaiting","sharedConnectSocket","sharedConnectLocalSocket","sharedDisconnectSocket","i2","i3","i1.ModifyCoHostSettings","i1.GeneratePageContent","i1.ModifyDisplaySettings","i1.ModifySettings","i1.ConfirmExit","i1.SwitchAudio","i2.SwitchVideo","i3.SwitchVideoAlt","i6","i1.SendMessage","sharedCheckLimitsAndMakeRequest","i1","sharedCreateRoomOnMediaSFU","BehaviorSubject","i2.CheckLimitsAndMakeRequest","i3.CreateRoomOnMediaSFU","i4.JoinRoomOnMediaSFU","i5","SHARED_SUPPORTED_LANGUAGE_CODES","sharedIsLanguageSupported","sharedNormalizeLanguageCode","sharedGetLanguageName","sharedGetLanguageNativeName","sharedGetSupportedLanguages","sharedGetLanguageMetadata","i1.MuteParticipants","i2.MessageParticipants","i3.RemoveParticipants","getRecordingDisplayAdvice","i1.RespondToRequests","i1.RespondToWaiting","sharedAddPanelist","sharedRemovePanelist","sharedFocusPanelists","sharedUpdateParticipantPermission","sharedBulkUpdateParticipantPermissions","sharedUpdatePermissionConfig","sharedIsSpeakerInMyBreakoutRoom","sharedPauseOriginalProducer","sharedResumeOriginalProducer","sharedIsConsumingTranslationForSpeaker","sharedGetActiveTranslationConsumers","sharedFindOriginalProducerForSpeaker","sharedStopConsumingTranslation","sharedSyncTranslationStateAfterBreakoutChange","sharedPanelistsUpdated","sharedPanelistFocusChanged","sharedPanelistControlMedia","sharedAddedAsPanelist","sharedRemovedFromPanelists","sharedPermissionUpdated","sharedPermissionConfigUpdated","i1.UIOverrideResolverService","sharedReceiveRoomMessages","sharedCreateResponseJoinRoom","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.SendMessage","i70.MuteParticipants","i71.MessageParticipants","i72.RemoveParticipants","i73.LaunchPoll","i74.LaunchBreakoutRooms","i75.LaunchConfigureWhiteboard","i76.StartMeetingProgressTimer","i77.UpdateRecording","i78.StopRecording","i79.UserWaiting","i80.PersonJoined","i81.AllWaitingRoomMembers","i82.RoomRecordParams","i83.BanParticipant","i84.UpdatedCoHost","i85.ParticipantRequested","i86.ScreenProducerId","i87.UpdateMediaSettings","i88.ProducerMediaPaused","i89.ProducerMediaResumed","i90.ProducerMediaClosed","i91.ControlMediaHost","i92.MeetingEnded","i93.DisconnectUserSelf","i94.ReceiveMessage","i95.MeetingTimeRemaining","i96.MeetingStillThere","i97.StartRecords","i98.ReInitiateRecording","i99.RecordingNotice","i100.TimeLeftRecording","i101.StoppedRecording","i102.HostRequestResponse","i103.AllMembers","i104.AllMembersRest","i105.Disconnect","i106.PollUpdated","i107.BreakoutRoomUpdated","i108.SocketManager","i109.JoinRoomClient","i110.JoinLocalRoom","i111.UpdateRoomParametersClient","i112.ClickVideo","i113.ClickAudio","i114.ClickScreenShare","i115.SwitchVideoAlt","i116.StreamSuccessVideo","i117.StreamSuccessAudio","i118.StreamSuccessScreen","i119.StreamSuccessAudioSwitch","i120.CheckPermission","i121.UpdateConsumingDomains","i122.ReceiveRoomMessages","i123.UIOverrideResolverService","i124.LiveSubtitleService","i125.TranslationConsumerSwitch","i126.PanelistsUpdated","i127.PanelistFocusChanged","i128.ReceiveControlMedia","i129.AddedAsPanelist","i130.RemovedFromPanelists","i131.PermissionUpdated","i132.PermissionConfigUpdated","i133.TranslationReceiveMethods","i134","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.UIOverrideResolverService","i97","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.StreamSuccessVideo","i112.StreamSuccessAudio","i113.StreamSuccessScreen","i114.StreamSuccessAudioSwitch","i115.CheckPermission","i116.UpdateConsumingDomains","i117.ReceiveRoomMessages","i118.UIOverrideResolverService","i119","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.UIOverrideResolverService","i83","sharedSoundPlayer","i1.AddPanelist","i2.RemovePanelist","i3.FocusPanelists","i1.UpdateParticipantPermission","i2.BulkUpdateParticipantPermissions","i3.UpdatePermissionConfig"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}