diff --git a/app/lib/RoomClient.js b/app/lib/RoomClient.js index 6969735..fb6ed29 100644 --- a/app/lib/RoomClient.js +++ b/app/lib/RoomClient.js @@ -604,7 +604,7 @@ export default class RoomClient { for (const consumer of peer.consumers) { - if (consumer.kind !== 'audio') + if (consumer.appData.source !== 'mic') continue; consumer.pause('mute-audio'); @@ -640,7 +640,7 @@ export default class RoomClient { for (const consumer of peer.consumers) { - if (consumer.kind !== 'audio' || !consumer.supported) + if (consumer.appData.source !== 'mic' || !consumer.supported) continue; consumer.resume(); @@ -676,7 +676,7 @@ export default class RoomClient { for (const consumer of peer.consumers) { - if (consumer.kind !== 'video') + if (consumer.appData.source !== 'webcam') continue; consumer.pause('pause-video'); @@ -712,7 +712,7 @@ export default class RoomClient { for (const consumer of peer.consumers) { - if (consumer.kind !== 'video' || !consumer.supported) + if (consumer.appData.source !== 'webcam' || !consumer.supported) continue; consumer.resume(); diff --git a/app/lib/components/FullScreenView.jsx b/app/lib/components/FullScreenView.jsx new file mode 100644 index 0000000..6192eee --- /dev/null +++ b/app/lib/components/FullScreenView.jsx @@ -0,0 +1,91 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import classnames from 'classnames'; +import * as appPropTypes from './appPropTypes'; +import * as stateActions from '../redux/stateActions'; +import FullView from './FullView'; + +const FullScreenView = (props) => +{ + const { + advancedMode, + consumer, + toggleConsumerFullscreen + } = props; + + if (!consumer) + return null; + + const consumerVisible = ( + Boolean(consumer) && + !consumer.locallyPaused && + !consumer.remotelyPaused + ); + + let consumerProfile; + + if (consumer) + consumerProfile = consumer.profile; + + return ( +
+ {consumerVisible && !consumer.supported ? +
+

incompatible video

+
+ :null + } + +
+
+ { + e.stopPropagation(); + toggleConsumerFullscreen(consumer); + }} + /> +
+ + +
+ ); +}; + +FullScreenView.propTypes = +{ + advancedMode : PropTypes.bool, + consumer : appPropTypes.Consumer, + toggleConsumerFullscreen : PropTypes.func.isRequired +}; + +const mapStateToProps = (state) => +{ + return { + consumer : state.consumers[state.room.fullScreenConsumer] + }; +}; + +const mapDispatchToProps = (dispatch) => +{ + return { + toggleConsumerFullscreen : (consumer) => + { + if (consumer) + dispatch(stateActions.toggleConsumerFullscreen(consumer.id)); + } + }; +}; + +const FullScreenViewContainer = connect( + mapStateToProps, + mapDispatchToProps +)(FullScreenView); + +export default FullScreenViewContainer; diff --git a/app/lib/components/FullView.jsx b/app/lib/components/FullView.jsx new file mode 100644 index 0000000..3edc64a --- /dev/null +++ b/app/lib/components/FullView.jsx @@ -0,0 +1,90 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import classnames from 'classnames'; +import Spinner from 'react-spinner'; + +export default class FullView extends React.Component +{ + constructor(props) + { + super(props); + + // Latest received video track. + // @type {MediaStreamTrack} + this._videoTrack = null; + } + + render() + { + const { + videoVisible, + videoProfile + } = this.props; + + return ( +
+
+ ); + } + + componentDidMount() + { + const { videoTrack } = this.props; + + this._setTracks(videoTrack); + } + + componentWillReceiveProps(nextProps) + { + const { videoTrack } = nextProps; + + this._setTracks(videoTrack); + } + + _setTracks(videoTrack) + { + if (this._videoTrack === videoTrack) + return; + + this._videoTrack = videoTrack; + + const { video } = this.refs; + + if (videoTrack) + { + const stream = new MediaStream; + + if (videoTrack) + stream.addTrack(videoTrack); + + video.srcObject = stream; + } + else + { + video.srcObject = null; + } + } +} + +FullView.propTypes = +{ + videoTrack : PropTypes.any, + videoVisible : PropTypes.bool, + videoProfile : PropTypes.string +}; diff --git a/app/lib/components/Me.jsx b/app/lib/components/Me.jsx index ad3259f..99bb31a 100644 --- a/app/lib/components/Me.jsx +++ b/app/lib/components/Me.jsx @@ -86,51 +86,55 @@ class Me extends React.Component data-tip-disable={!tip} data-type='dark' > - {connected ? -
-
- { - micState === 'on' ? onMuteMic() : onUnmuteMic(); - }} - /> +
+ {connected ? +
+
+ { + micState === 'on' ? onMuteMic() : onUnmuteMic(); + }} + /> -
- { - webcamState === 'on' ? onDisableWebcam() : onEnableWebcam(); - }} - /> -
- :null - } +
+ { + webcamState === 'on' ? onDisableWebcam() : onEnableWebcam(); + }} + /> +
+ :null + } - onChangeDisplayName(displayName)} - /> - - {screenProducer ? - onChangeDisplayName(displayName)} /> +
+ + {screenProducer ? +
+ +
:null } diff --git a/app/lib/components/Peer.jsx b/app/lib/components/Peer.jsx index e9567b2..6ad97f1 100644 --- a/app/lib/components/Peer.jsx +++ b/app/lib/components/Peer.jsx @@ -4,6 +4,7 @@ import PropTypes from 'prop-types'; import classnames from 'classnames'; import * as appPropTypes from './appPropTypes'; import * as requestActions from '../redux/requestActions'; +import * as stateActions from '../redux/stateActions'; import PeerView from './PeerView'; import ScreenView from './ScreenView'; @@ -19,6 +20,9 @@ const Peer = (props) => onUnmuteMic, onDisableWebcam, onEnableWebcam, + onDisableScreen, + onEnableScreen, + toggleConsumerFullscreen, style } = props; @@ -57,35 +61,6 @@ const Peer = (props) => screen : screenConsumer })} > -
-
- { - e.stopPropagation(); - micEnabled ? onMuteMic(peer.name) : onUnmuteMic(peer.name); - }} - /> - -
- { - e.stopPropagation(); - videoVisible ? - onDisableWebcam(peer.name) : onEnableWebcam(peer.name); - }} - /> -
- {videoVisible && !webcamConsumer.supported ?

incompatible video

@@ -94,6 +69,43 @@ const Peer = (props) => }
+
+
+ { + e.stopPropagation(); + micEnabled ? onMuteMic(peer.name) : onUnmuteMic(peer.name); + }} + /> + +
+ { + e.stopPropagation(); + videoVisible ? + onDisableWebcam(peer.name) : onEnableWebcam(peer.name); + }} + /> + +
+ { + e.stopPropagation(); + toggleConsumerFullscreen(webcamConsumer); + }} + /> +
{screenConsumer ?
+
+
+ { + e.stopPropagation(); + screenVisible ? + onDisableScreen(peer.name) : onEnableScreen(peer.name); + }} + /> + +
+ { + e.stopPropagation(); + toggleConsumerFullscreen(screenConsumer); + }} + /> +
Peer.propTypes = { - advancedMode : PropTypes.bool, - peer : appPropTypes.Peer.isRequired, - micConsumer : appPropTypes.Consumer, - webcamConsumer : appPropTypes.Consumer, - screenConsumer : appPropTypes.Consumer, - onMuteMic : PropTypes.func.isRequired, - onUnmuteMic : PropTypes.func.isRequired, - onEnableWebcam : PropTypes.func.isRequired, - onDisableWebcam : PropTypes.func.isRequired, - streamDimensions : PropTypes.object, - style : PropTypes.object + advancedMode : PropTypes.bool, + peer : appPropTypes.Peer.isRequired, + micConsumer : appPropTypes.Consumer, + webcamConsumer : appPropTypes.Consumer, + screenConsumer : appPropTypes.Consumer, + onMuteMic : PropTypes.func.isRequired, + onUnmuteMic : PropTypes.func.isRequired, + onEnableWebcam : PropTypes.func.isRequired, + onDisableWebcam : PropTypes.func.isRequired, + streamDimensions : PropTypes.object, + style : PropTypes.object, + onEnableScreen : PropTypes.func.isRequired, + onDisableScreen : PropTypes.func.isRequired, + toggleConsumerFullscreen : PropTypes.func.isRequired }; const mapStateToProps = (state, { name }) => @@ -176,6 +215,19 @@ const mapDispatchToProps = (dispatch) => onDisableWebcam : (peerName) => { dispatch(requestActions.pausePeerVideo(peerName)); + }, + onEnableScreen : (peerName) => + { + dispatch(requestActions.resumePeerScreen(peerName)); + }, + onDisableScreen : (peerName) => + { + dispatch(requestActions.pausePeerScreen(peerName)); + }, + toggleConsumerFullscreen : (consumer) => + { + if (consumer) + dispatch(stateActions.toggleConsumerFullscreen(consumer.id)); } }; }; diff --git a/app/lib/components/Peers.jsx b/app/lib/components/Peers.jsx index 6d93b12..1dfd94e 100644 --- a/app/lib/components/Peers.jsx +++ b/app/lib/components/Peers.jsx @@ -74,8 +74,7 @@ class Peers extends React.Component componentWillReceiveProps(nextProps) { - if (nextProps.videoStreams) - this.updateDimensions(nextProps); + this.updateDimensions(nextProps); } render() @@ -83,7 +82,8 @@ class Peers extends React.Component const { advancedMode, activeSpeakerName, - peers + peers, + toolAreaOpen } = this.props; const style = @@ -108,6 +108,7 @@ class Peers extends React.Component advancedMode={advancedMode} name={peer.name} style={style} + toolAreaOpen={toolAreaOpen} />
@@ -124,7 +125,8 @@ Peers.propTypes = advancedMode : PropTypes.bool, peers : PropTypes.arrayOf(appPropTypes.Peer).isRequired, videoStreams : PropTypes.any, - activeSpeakerName : PropTypes.string + activeSpeakerName : PropTypes.string, + toolAreaOpen : PropTypes.bool }; const mapStateToProps = (state) => @@ -140,7 +142,8 @@ const mapStateToProps = (state) => return { peers : peersArray, videoStreams : videoStreams, - activeSpeakerName : state.room.activeSpeakerName + activeSpeakerName : state.room.activeSpeakerName, + toolAreaOpen : state.toolarea.toolAreaOpen }; }; diff --git a/app/lib/components/Room.jsx b/app/lib/components/Room.jsx index 8ae0258..64349e3 100644 --- a/app/lib/components/Room.jsx +++ b/app/lib/components/Room.jsx @@ -12,6 +12,7 @@ import Peers from './Peers'; import Notifications from './Notifications'; import ToolAreaButton from './ToolArea/ToolAreaButton'; import ToolArea from './ToolArea/ToolArea'; +import FullScreenView from './FullScreenView'; class Room extends React.Component { @@ -59,6 +60,7 @@ class Room extends React.Component return (
+
@@ -49,6 +50,14 @@ const room = (state = initialState, action) => return { ...state, advancedMode }; } + case 'TOGGLE_FULLSCREEN_CONSUMER': + { + const { consumerId } = action.payload; + const currentConsumer = state.fullScreenConsumer; + + return { ...state, fullScreenConsumer: currentConsumer ? null : consumerId }; + } + default: return state; } diff --git a/app/lib/redux/stateActions.js b/app/lib/redux/stateActions.js index 4db655b..86adba5 100644 --- a/app/lib/redux/stateActions.js +++ b/app/lib/redux/stateActions.js @@ -361,6 +361,14 @@ export const toggleChat = () => }; }; +export const toggleConsumerFullscreen = (consumerId) => +{ + return { + type : 'TOGGLE_FULLSCREEN_CONSUMER', + payload : { consumerId } + }; +}; + export const increaseBadge = () => { return { diff --git a/app/resources/images/icon_fullscreen_black.svg b/app/resources/images/icon_fullscreen_black.svg new file mode 100644 index 0000000..0a13c87 --- /dev/null +++ b/app/resources/images/icon_fullscreen_black.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/resources/images/icon_fullscreen_exit_black.svg b/app/resources/images/icon_fullscreen_exit_black.svg new file mode 100644 index 0000000..a5bab63 --- /dev/null +++ b/app/resources/images/icon_fullscreen_exit_black.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/stylus/components/Chat.styl b/app/stylus/components/Chat.styl index 6399832..6cfe785 100644 --- a/app/stylus/components/Chat.styl +++ b/app/stylus/components/Chat.styl @@ -7,7 +7,7 @@ max-width: 300px; right: 0; width: 90vw; - z-index: 9999; + z-index: 100; > .launcher { align-self: flex-end; diff --git a/app/stylus/components/FullScreenView.styl b/app/stylus/components/FullScreenView.styl new file mode 100644 index 0000000..1338c5d --- /dev/null +++ b/app/stylus/components/FullScreenView.styl @@ -0,0 +1,75 @@ +[data-component='FullScreenView'] { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 200; + + > .controls { + position: absolute; + z-index: 201; + right: 0; + top: 0; + display: flex; + flex-direction:; row; + justify-content: flex-start; + align-items: center; + padding: 0.4vmin; + + > .button { + flex: 0 0 auto; + margin: 0.2vmin; + border-radius: 2px; + background-position: center; + background-size: 75%; + background-repeat: no-repeat; + background-color: rgba(#000, 0.5); + cursor: pointer; + transition-property: opacity, background-color; + transition-duration: 0.15s; + + +desktop() { + width: 5vmin; + height: 5vmin; + opacity: 0.85; + + &:hover { + opacity: 1; + } + } + + +mobile() { + width: 5vmin; + height: 5vmin; + } + + &.fullscreen { + background-image: url('/resources/images/icon_fullscreen_exit_black.svg'); + background-color: rgba(#fff, 0.7); + } + } + } + + .incompatible-video { + position: absolute; + z-index: 2 + top: 0; + bottom: 0; + left: 0; + right: 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + > p { + padding: 6px 12px; + border-radius: 6px; + user-select: none; + pointer-events: none; + font-size: 15px; + color: rgba(#fff, 0.55); + } + } +} diff --git a/app/stylus/components/FullView.styl b/app/stylus/components/FullView.styl new file mode 100644 index 0000000..ff3f3e2 --- /dev/null +++ b/app/stylus/components/FullView.styl @@ -0,0 +1,105 @@ +[data-component='FullView'] { + position: relative; + flex: 100 100 auto; + height: 100%; + width: 100%; + display: flex; + flex-direction: column; + overflow: hidden; + background-color: rgba(#2a4b58, 0.9); + background-image: url('/resources/images/buddy.svg'); + background-position: bottom; + background-size: auto 85%; + background-repeat: no-repeat; + + > .info { + $backgroundTint = #000; + + position: absolute; + z-index: 5 + top: 0.6vmin; + left: 0.6vmin; + bottom: 0; + right: 0; + display: flex; + flex-direction: column; + justify-content: space-between; + + > .media { + flex: 0 0 auto; + display: flex; + flex-direction: row; + + > .box { + padding: 0.4vmin; + border-radius: 2px; + background-color: rgba(#000, 0.25); + + > p { + user-select: none; + pointer-events: none; + margin-bottom: 2px; + color: rgba(#fff, 0.7); + font-size: 10px; + + &:last-child { + margin-bottom: 0; + } + } + } + } + } + + > video { + flex: 100 100 auto; + height: 100%; + width: 100%; + object-fit: contain; + user-select: none; + transition-property: opacity; + transition-duration: .15s; + background-color: rgba(#000, 0.75); + + &.hidden { + opacity: 0; + transition-duration: 0s; + } + + &.loading { + filter: blur(5px); + } + } + + > .spinner-container { + position: absolute; + top: 0 + bottom: 0; + left: 0; + right: 0; + background-color: rgba(#000, 0.75); + + .react-spinner { + position: relative; + width: 48px; + height: 48px; + top: 50%; + left: 50%; + + .react-spinner_bar { + position: absolute; + width: 20%; + height: 7.8%; + top: -3.9%; + left: -10%; + animation: PeerView-spinner 1.2s linear infinite; + border-radius: 5px; + background-color: rgba(#fff, 0.5); + } + } + } +} + +@keyframes FullView-spinner { + 0% { opacity: 1; } + 100% { opacity: 0.15; } +} diff --git a/app/stylus/components/Me.styl b/app/stylus/components/Me.styl index aefbd0d..f1095a9 100644 --- a/app/stylus/components/Me.styl +++ b/app/stylus/components/Me.styl @@ -1,87 +1,121 @@ [data-component='Me'] { + flex: 100 100 auto; position: relative; - height: 100%; - width: 100%; + flex-direction: row; + display: flex; - > .controls { - position: absolute; - z-index: 10 - top: 0; - left: 0; - right: 0; - display: flex; - flex-direction:; row; - justify-content: flex-end; - align-items: center; - padding: 0.4vmin; + > .view-container { + position: relative; + width: 20vmin; + height: 15vmin; - > .button { - flex: 0 0 auto; - margin: 0.2vmin; - border-radius: 2px; - background-position: center; - background-size: 75%; - background-repeat: no-repeat; - background-color: rgba(#000, 0.5); - cursor: pointer; - transition-property: opacity, background-color; - transition-duration: 0.15s; + &.webcam { + order: 2; + } - +desktop() { - width: 24px; - height: 24px; - opacity: 0.85; + &.screen { + order: 1; + } - &:hover { - opacity: 1; - } - } + > .controls { + position: absolute; + z-index: 10; + right: 0; + top: 0; + display: flex; + flex-direction:; row; + justify-content: flex-start; + align-items: center; + padding: 0.4vmin; - +mobile() { - width: 22px; - height: 22px; - } + > .button { + flex: 0 0 auto; + margin: 0.2vmin; + border-radius: 2px; + background-position: center; + background-size: 75%; + background-repeat: no-repeat; + background-color: rgba(#000, 0.5); + cursor: pointer; + transition-property: opacity, background-color; + transition-duration: 0.15s; - &.unsupported { - pointer-events: none; - } + +desktop() { + width: 24px; + height: 24px; + opacity: 0.85; - &.disabled { - pointer-events: none; - opacity: 0.5; - } - - &.on { - background-color: rgba(#fff, 0.7); - } - - &.mic { - &.on { - background-image: url('/resources/images/icon_mic_black_on.svg'); + &:hover { + opacity: 1; + } } - &.off { - background-image: url('/resources/images/icon_mic_white_off.svg'); - background-color: rgba(#d42241, 0.7); + +mobile() { + width: 22px; + height: 22px; } &.unsupported { - background-image: url('/resources/images/icon_mic_white_unsupported.svg'); + pointer-events: none; + } + + &.disabled { + pointer-events: none; + opacity: 0.5; } - } - &.webcam { &.on { - background-image: url('/resources/images/icon_webcam_black_on.svg'); + background-color: rgba(#fff, 0.7); } - &.off { - background-image: url('/resources/images/icon_remote_webcam_white_off.svg'); - background-color: rgba(#d42241, 0.7); + &.mic { + &.on { + background-image: url('/resources/images/icon_mic_black_on.svg'); + } + + &.off { + background-image: url('/resources/images/icon_remote_mic_white_off.svg'); + background-color: rgba(#d42241, 0.7); + } + + &.unsupported { + background-image: url('/resources/images/icon_mic_white_unsupported.svg'); + } } - &.unsupported { - background-image: url('/resources/images/icon_webcam_white_unsupported.svg'); + &.webcam { + &.on { + background-image: url('/resources/images/icon_webcam_black_on.svg'); + } + + &.off { + background-image: url('/resources/images/icon_remote_webcam_white_off.svg'); + background-color: rgba(#d42241, 0.7); + } + + &.unsupported { + background-image: url('/resources/images/icon_webcam_white_unsupported.svg'); + } + } + + &.screen { + &.on { + background-image: url('/resources/images/share-screen-black.svg'); + } + + &.off { + background-image: url('/resources/images/no-share-screen-white.svg'); + background-color: rgba(#d42241, 0.7); + } + + &.unsupported { + background-image: url('/resources/images/no-share-screen-white.svg'); + } + } + + &.fullscreen { + background-image: url('/resources/images/icon_fullscreen_black.svg'); + background-color: rgba(#fff, 0.7); } } } diff --git a/app/stylus/components/Peer.styl b/app/stylus/components/Peer.styl index efeef3a..a95884e 100644 --- a/app/stylus/components/Peer.styl +++ b/app/stylus/components/Peer.styl @@ -13,89 +13,6 @@ &:not(.screen) { } - > .controls { - position: absolute; - z-index: 10; - right: 0; - top: 0; - display: flex; - flex-direction:; row; - justify-content: flex-start; - align-items: center; - padding: 0.4vmin; - - > .button { - flex: 0 0 auto; - margin: 0.2vmin; - border-radius: 2px; - background-position: center; - background-size: 75%; - background-repeat: no-repeat; - background-color: rgba(#000, 0.5); - cursor: pointer; - transition-property: opacity, background-color; - transition-duration: 0.15s; - - +desktop() { - width: 24px; - height: 24px; - opacity: 0.85; - - &:hover { - opacity: 1; - } - } - - +mobile() { - width: 22px; - height: 22px; - } - - &.unsupported { - pointer-events: none; - } - - &.disabled { - pointer-events: none; - opacity: 0.5; - } - - &.on { - background-color: rgba(#fff, 0.7); - } - - &.mic { - &.on { - background-image: url('/resources/images/icon_mic_black_on.svg'); - } - - &.off { - background-image: url('/resources/images/icon_remote_mic_white_off.svg'); - background-color: rgba(#d42241, 0.7); - } - - &.unsupported { - background-image: url('/resources/images/icon_mic_white_unsupported.svg'); - } - } - - &.webcam { - &.on { - background-image: url('/resources/images/icon_webcam_black_on.svg'); - } - - &.off { - background-image: url('/resources/images/icon_remote_webcam_white_off.svg'); - background-color: rgba(#d42241, 0.7); - } - - &.unsupported { - background-image: url('/resources/images/icon_webcam_white_unsupported.svg'); - } - } - } - } - +mobile() { display: flex; flex-direction: column; @@ -104,6 +21,8 @@ } > .view-container { + position: relative; + &.webcam { order: 2; } @@ -111,6 +30,109 @@ &.screen { order: 1; } + + > .controls { + position: absolute; + z-index: 10; + right: 0; + top: 0; + display: flex; + flex-direction:; row; + justify-content: flex-start; + align-items: center; + padding: 0.4vmin; + + > .button { + flex: 0 0 auto; + margin: 0.2vmin; + border-radius: 2px; + background-position: center; + background-size: 75%; + background-repeat: no-repeat; + background-color: rgba(#000, 0.5); + cursor: pointer; + transition-property: opacity, background-color; + transition-duration: 0.15s; + + +desktop() { + width: 24px; + height: 24px; + opacity: 0.85; + + &:hover { + opacity: 1; + } + } + + +mobile() { + width: 22px; + height: 22px; + } + + &.unsupported { + pointer-events: none; + } + + &.disabled { + pointer-events: none; + opacity: 0.5; + } + + &.on { + background-color: rgba(#fff, 0.7); + } + + &.mic { + &.on { + background-image: url('/resources/images/icon_mic_black_on.svg'); + } + + &.off { + background-image: url('/resources/images/icon_remote_mic_white_off.svg'); + background-color: rgba(#d42241, 0.7); + } + + &.unsupported { + background-image: url('/resources/images/icon_mic_white_unsupported.svg'); + } + } + + &.webcam { + &.on { + background-image: url('/resources/images/icon_webcam_black_on.svg'); + } + + &.off { + background-image: url('/resources/images/icon_remote_webcam_white_off.svg'); + background-color: rgba(#d42241, 0.7); + } + + &.unsupported { + background-image: url('/resources/images/icon_webcam_white_unsupported.svg'); + } + } + + &.screen { + &.on { + background-image: url('/resources/images/share-screen-black.svg'); + } + + &.off { + background-image: url('/resources/images/no-share-screen-white.svg'); + background-color: rgba(#d42241, 0.7); + } + + &.unsupported { + background-image: url('/resources/images/no-share-screen-white.svg'); + } + } + + &.fullscreen { + background-image: url('/resources/images/icon_fullscreen_black.svg'); + background-color: rgba(#fff, 0.7); + } + } + } } .incompatible-video { diff --git a/app/stylus/components/Room.styl b/app/stylus/components/Room.styl index aa62aa0..e766650 100644 --- a/app/stylus/components/Room.styl +++ b/app/stylus/components/Room.styl @@ -153,8 +153,6 @@ } +desktop() { - height: 200px; - width: 235px; bottom: 20px; left: 20px; border: 1px solid rgba(#fff, 0.15); diff --git a/app/stylus/index.styl b/app/stylus/index.styl index b70a957..84f4e42 100644 --- a/app/stylus/index.styl +++ b/app/stylus/index.styl @@ -46,6 +46,8 @@ body { @import './components/Settings'; @import './components/ToolArea'; @import './components/ParticipantList'; + @import './components/FullScreenView'; + @import './components/FullView'; } // Hack to detect in JS the current media query