@100mslive/roomkit-react 0.3.8-alpha.2 → 0.3.8-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{HLSView-XZDT3RRC.js → HLSView-KESSHZG2.js} +2 -2
- package/dist/{chunk-SQPIZNW2.js → chunk-KRTJ2T7F.js} +277 -272
- package/dist/{chunk-SQPIZNW2.js.map → chunk-KRTJ2T7F.js.map} +4 -4
- package/dist/index.cjs.js +521 -513
- package/dist/index.cjs.js.map +4 -4
- package/dist/index.js +1 -1
- package/dist/meta.cjs.json +93 -78
- package/dist/meta.esbuild.json +98 -83
- package/package.json +6 -6
- package/src/Prebuilt/components/AppData/AppData.tsx +2 -1
- package/src/Prebuilt/components/ConferenceScreen.tsx +2 -34
- package/src/Prebuilt/layouts/VideoStreamingSection.tsx +3 -1
- package/src/Prebuilt/plugins/CaptionsViewer.tsx +46 -11
- /package/dist/{HLSView-XZDT3RRC.js.map → HLSView-KESSHZG2.js.map} +0 -0
package/package.json
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
"prebuilt",
|
11
11
|
"roomkit"
|
12
12
|
],
|
13
|
-
"version": "0.3.8-alpha.
|
13
|
+
"version": "0.3.8-alpha.4",
|
14
14
|
"author": "100ms",
|
15
15
|
"license": "MIT",
|
16
16
|
"repository": {
|
@@ -82,11 +82,11 @@
|
|
82
82
|
"react": ">=17.0.2 <19.0.0"
|
83
83
|
},
|
84
84
|
"dependencies": {
|
85
|
-
"@100mslive/hls-player": "0.3.8-alpha.
|
85
|
+
"@100mslive/hls-player": "0.3.8-alpha.4",
|
86
86
|
"@100mslive/hms-noise-cancellation": "0.0.1",
|
87
|
-
"@100mslive/hms-virtual-background": "1.13.8-alpha.
|
88
|
-
"@100mslive/react-icons": "0.10.8-alpha.
|
89
|
-
"@100mslive/react-sdk": "0.10.8-alpha.
|
87
|
+
"@100mslive/hms-virtual-background": "1.13.8-alpha.4",
|
88
|
+
"@100mslive/react-icons": "0.10.8-alpha.4",
|
89
|
+
"@100mslive/react-sdk": "0.10.8-alpha.4",
|
90
90
|
"@100mslive/types-prebuilt": "0.12.8",
|
91
91
|
"@emoji-mart/data": "^1.0.6",
|
92
92
|
"@emoji-mart/react": "^1.0.1",
|
@@ -122,5 +122,5 @@
|
|
122
122
|
"uuid": "^8.3.2",
|
123
123
|
"worker-timers": "^7.0.40"
|
124
124
|
},
|
125
|
-
"gitHead": "
|
125
|
+
"gitHead": "1ac0f11a034d8e0aed06479e20671c86bffd77f8"
|
126
126
|
}
|
@@ -68,7 +68,8 @@ const initialAppData = {
|
|
68
68
|
[POLL_STATE.pollInView]: '',
|
69
69
|
[POLL_STATE.view]: '',
|
70
70
|
},
|
71
|
-
|
71
|
+
// by default off, so it will not appear in beam bots
|
72
|
+
[APP_DATA.caption]: false,
|
72
73
|
};
|
73
74
|
|
74
75
|
export const AppData = React.memo(() => {
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import React, { useEffect, useRef, useState } from 'react';
|
2
|
-
import { useMedia } from 'react-use';
|
3
2
|
import { DefaultConferencingScreen_Elements } from '@100mslive/types-prebuilt';
|
4
3
|
import { v4 as uuid } from 'uuid';
|
5
4
|
import {
|
@@ -19,7 +18,6 @@ import { ActivatedPIP } from './PIP/PIPComponent';
|
|
19
18
|
import { PictureInPicture } from './PIP/PIPManager';
|
20
19
|
import { RoleChangeRequestModal } from './RoleChangeRequest/RoleChangeRequestModal';
|
21
20
|
import { Box, Flex } from '../../Layout';
|
22
|
-
import { config } from '../../Theme';
|
23
21
|
import { useHMSPrebuiltContext } from '../AppContext';
|
24
22
|
import { VideoStreamingSection } from '../layouts/VideoStreamingSection';
|
25
23
|
// @ts-ignore: No implicit Any
|
@@ -28,21 +26,17 @@ import FullPageProgress from './FullPageProgress';
|
|
28
26
|
import { Header } from './Header';
|
29
27
|
import { PreviousRoleInMetadata } from './PreviousRoleInMetadata';
|
30
28
|
import { RaiseHand } from './RaiseHand';
|
31
|
-
import { CaptionsViewer } from '../plugins/CaptionsViewer';
|
32
29
|
import {
|
33
30
|
useRoomLayoutConferencingScreen,
|
34
31
|
useRoomLayoutPreviewScreen,
|
35
32
|
} from '../provider/roomLayoutProvider/hooks/useRoomLayoutScreen';
|
36
33
|
// @ts-ignore: No implicit Any
|
37
|
-
import {
|
38
|
-
// @ts-ignore: No implicit Any
|
39
|
-
import { useAuthToken, useIsCaptionEnabled, useSetAppDataByKey } from './AppData/useUISettings';
|
34
|
+
import { useAuthToken, useSetAppDataByKey } from './AppData/useUISettings';
|
40
35
|
import { useLandscapeHLSStream, useMobileHLSStream } from '../common/hooks';
|
41
|
-
import { APP_DATA, isAndroid, isIOS, isIPadOS
|
36
|
+
import { APP_DATA, isAndroid, isIOS, isIPadOS } from '../common/constants';
|
42
37
|
|
43
38
|
export const ConferenceScreen = () => {
|
44
39
|
const { userName, endpoints, onJoin: onJoinFunc } = useHMSPrebuiltContext();
|
45
|
-
const isMobile = useMedia(config.media.md);
|
46
40
|
const screenProps = useRoomLayoutConferencingScreen();
|
47
41
|
const { isPreviewScreenEnabled } = useRoomLayoutPreviewScreen();
|
48
42
|
const roomState = useHMSStore(selectRoomState);
|
@@ -63,10 +57,6 @@ export const ConferenceScreen = () => {
|
|
63
57
|
const isMobileHLSStream = useMobileHLSStream();
|
64
58
|
const isLandscapeHLSStream = useLandscapeHLSStream();
|
65
59
|
const isMwebHLSStream = isMobileHLSStream || isLandscapeHLSStream;
|
66
|
-
const isCaptionEnabled = useIsCaptionEnabled();
|
67
|
-
const isChatOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.CHAT);
|
68
|
-
|
69
|
-
const showCaptionAtTop = screenProps.elements?.chat?.is_overlay && isChatOpen;
|
70
60
|
|
71
61
|
const toggleControls = () => {
|
72
62
|
if (dropdownListRef.current?.length === 0 && isMobileDevice && !isMwebHLSStream) {
|
@@ -134,28 +124,6 @@ export const ConferenceScreen = () => {
|
|
134
124
|
<FullPageProgress text="Starting live stream..." css={{ opacity: 0.8, bg: '$background_dim' }} />
|
135
125
|
</Box>
|
136
126
|
) : null}
|
137
|
-
{isCaptionEnabled && screenProps.screenType !== 'hls_live_streaming' && (
|
138
|
-
<Box
|
139
|
-
css={{
|
140
|
-
position: 'fixed',
|
141
|
-
maxWidth: isMobile ? '100%' : '40%',
|
142
|
-
bottom: showCaptionAtTop ? '' : hideControlsForStreaming ? '5%' : '10%',
|
143
|
-
top: showCaptionAtTop ? (hideControlsForStreaming ? '5%' : '10%') : '',
|
144
|
-
left: isMobile ? 0 : '50%',
|
145
|
-
transform: isMobile ? '' : 'translateX(-50%)',
|
146
|
-
background: '#000000A3',
|
147
|
-
overflow: 'clip',
|
148
|
-
zIndex: 10,
|
149
|
-
height: 'fit-content',
|
150
|
-
r: '$1',
|
151
|
-
p: '$6',
|
152
|
-
transition: 'bottom 0.3s ease-in-out',
|
153
|
-
'&:empty': { display: 'none' },
|
154
|
-
}}
|
155
|
-
>
|
156
|
-
<CaptionsViewer />
|
157
|
-
</Box>
|
158
|
-
)}
|
159
127
|
<Flex css={{ size: '100%', overflow: 'hidden' }} direction="column">
|
160
128
|
{!(screenProps.hideSections.includes('header') || isMwebHLSStream) && (
|
161
129
|
<Box
|
@@ -16,6 +16,8 @@ import { PDFView } from './PDFView';
|
|
16
16
|
import SidePane from './SidePane';
|
17
17
|
// @ts-ignore: No implicit Any
|
18
18
|
import { WaitingView } from './WaitingView';
|
19
|
+
import { CaptionsViewer } from '../plugins/CaptionsViewer';
|
20
|
+
// @ts-ignore: No implicit Any
|
19
21
|
import {
|
20
22
|
usePDFConfig,
|
21
23
|
useUrlToEmbed,
|
@@ -25,7 +27,6 @@ import {
|
|
25
27
|
import { useCloseScreenshareWhiteboard } from '../components/hooks/useCloseScreenshareWhiteboard';
|
26
28
|
import { useLandscapeHLSStream, useMobileHLSStream } from '../common/hooks';
|
27
29
|
import { SESSION_STORE_KEY } from '../common/constants';
|
28
|
-
|
29
30
|
// @ts-ignore: No implicit Any
|
30
31
|
const HLSView = React.lazy(() => import('./HLSView'));
|
31
32
|
|
@@ -105,6 +106,7 @@ export const VideoStreamingSection = ({
|
|
105
106
|
// @ts-ignore
|
106
107
|
return <GridLayout {...(elements as DefaultConferencingScreen_Elements)?.video_tile_layout?.grid} />;
|
107
108
|
})}
|
109
|
+
<CaptionsViewer />
|
108
110
|
<Box
|
109
111
|
css={{
|
110
112
|
flex: match({ isLandscapeHLSStream, isMobileHLSStream })
|
@@ -1,8 +1,15 @@
|
|
1
1
|
import React, { useEffect, useState } from 'react';
|
2
|
+
import { useMedia } from 'react-use';
|
2
3
|
import { HMSTranscript, selectPeerNameByID, useHMSStore, useTranscript } from '@100mslive/react-sdk';
|
3
|
-
import { Flex } from '../../Layout';
|
4
|
+
import { Box, Flex } from '../../Layout';
|
4
5
|
import { Text } from '../../Text';
|
5
|
-
|
6
|
+
import { config } from '../../Theme';
|
7
|
+
// @ts-ignore: No implicit Any
|
8
|
+
import { useIsSidepaneTypeOpen } from '../components/AppData/useSidepane';
|
9
|
+
// @ts-ignore: No implicit Any
|
10
|
+
import { useIsCaptionEnabled } from '../components/AppData/useUISettings';
|
11
|
+
import { useRoomLayoutConferencingScreen } from '../provider/roomLayoutProvider/hooks/useRoomLayoutScreen';
|
12
|
+
import { SIDE_PANE_OPTIONS } from '../common/constants';
|
6
13
|
interface CaptionQueueData extends HMSTranscript {
|
7
14
|
transcriptQueue: SimpleQueue;
|
8
15
|
}
|
@@ -135,7 +142,7 @@ class CaptionMaintainerQueue {
|
|
135
142
|
}
|
136
143
|
}
|
137
144
|
const TranscriptView = ({ peer_id, data }: { peer_id: string; data: string }) => {
|
138
|
-
const peerName = useHMSStore(selectPeerNameByID(peer_id));
|
145
|
+
const peerName = useHMSStore(selectPeerNameByID(peer_id)) || 'Participant';
|
139
146
|
data = data.trim();
|
140
147
|
if (!data) return null;
|
141
148
|
return (
|
@@ -145,15 +152,24 @@ const TranscriptView = ({ peer_id, data }: { peer_id: string; data: string }) =>
|
|
145
152
|
fontWeight: '$normal',
|
146
153
|
}}
|
147
154
|
>
|
148
|
-
{
|
155
|
+
<b>{peerName}: </b>
|
156
|
+
{data}
|
149
157
|
</Text>
|
150
158
|
);
|
151
159
|
};
|
152
160
|
|
153
161
|
export const CaptionsViewer = () => {
|
162
|
+
const { elements, screenType } = useRoomLayoutConferencingScreen();
|
163
|
+
const isMobile = useMedia(config.media.md);
|
164
|
+
const isChatOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.CHAT);
|
165
|
+
|
166
|
+
const showCaptionAtTop = elements?.chat?.is_overlay && isChatOpen && isMobile;
|
167
|
+
|
154
168
|
const [captionQueue] = useState<CaptionMaintainerQueue>(new CaptionMaintainerQueue());
|
155
169
|
const [currentData, setCurrentData] = useState<{ [key: string]: string }[]>([]);
|
156
170
|
|
171
|
+
const isCaptionEnabled = useIsCaptionEnabled();
|
172
|
+
|
157
173
|
useEffect(() => {
|
158
174
|
const timeInterval = setInterval(() => {
|
159
175
|
if (!captionQueue) {
|
@@ -177,15 +193,34 @@ export const CaptionsViewer = () => {
|
|
177
193
|
}
|
178
194
|
return false;
|
179
195
|
});
|
180
|
-
if (dataToShow.length <= 0) {
|
196
|
+
if (dataToShow.length <= 0 || screenType === 'hls_live_streaming' || !isCaptionEnabled) {
|
181
197
|
return null;
|
182
198
|
}
|
183
199
|
return (
|
184
|
-
<
|
185
|
-
{
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
200
|
+
<Box
|
201
|
+
css={{
|
202
|
+
position: 'absolute',
|
203
|
+
w: isMobile ? '100%' : '40%',
|
204
|
+
bottom: showCaptionAtTop ? '' : '0',
|
205
|
+
top: showCaptionAtTop ? '0' : '',
|
206
|
+
left: isMobile ? 0 : '50%',
|
207
|
+
transform: isMobile ? '' : 'translateX(-50%)',
|
208
|
+
background: '#000000A3',
|
209
|
+
overflow: 'clip',
|
210
|
+
zIndex: 10,
|
211
|
+
height: 'fit-content',
|
212
|
+
r: '$1',
|
213
|
+
p: '$6',
|
214
|
+
transition: 'bottom 0.3s ease-in-out',
|
215
|
+
'&:empty': { display: 'none' },
|
216
|
+
}}
|
217
|
+
>
|
218
|
+
<Flex direction="column">
|
219
|
+
{dataToShow.map((data: { [key: string]: string }, index: number) => {
|
220
|
+
const key = Object.keys(data)[0];
|
221
|
+
return <TranscriptView key={index} peer_id={key} data={data[key]} />;
|
222
|
+
})}
|
223
|
+
</Flex>
|
224
|
+
</Box>
|
190
225
|
);
|
191
226
|
};
|
File without changes
|