@100mslive/roomkit-react 0.1.6-alpha.1 → 0.1.6-alpha.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. package/dist/{HLSView-HNVYG5VE.js → HLSView-HL455FYH.js} +3 -3
  2. package/dist/Prebuilt/components/Footer/ChatToggle.d.ts +1 -3
  3. package/dist/Prebuilt/components/Leave/DesktopLeaveRoom.d.ts +2 -1
  4. package/dist/Prebuilt/components/Leave/MwebLeaveRoom.d.ts +2 -1
  5. package/dist/Prebuilt/components/SidePaneTabs.d.ts +7 -0
  6. package/dist/{VirtualBackground-UM2FOUHQ.js → VirtualBackground-6EP3X7MO.js} +6 -6
  7. package/dist/VirtualBackground-6EP3X7MO.js.map +7 -0
  8. package/dist/{chunk-LYSAET4G.js → chunk-6JF3GAOH.js} +109 -127
  9. package/dist/chunk-6JF3GAOH.js.map +7 -0
  10. package/dist/{chunk-POE7H4IE.js → chunk-KAJJ56J4.js} +2 -2
  11. package/dist/{chunk-POE7H4IE.js.map → chunk-KAJJ56J4.js.map} +1 -1
  12. package/dist/{chunk-364HP22I.js → chunk-UXBTLGWY.js} +2 -2
  13. package/dist/{conference-UWLJHMB2.js → conference-MPZNWHV5.js} +472 -415
  14. package/dist/conference-MPZNWHV5.js.map +7 -0
  15. package/dist/index.cjs.js +714 -678
  16. package/dist/index.cjs.js.map +4 -4
  17. package/dist/index.js +2 -2
  18. package/dist/meta.cjs.json +153 -153
  19. package/dist/meta.esbuild.json +185 -184
  20. package/package.json +6 -6
  21. package/src/Button/Button.tsx +6 -6
  22. package/src/Prebuilt/components/Chat/Chat.jsx +3 -9
  23. package/src/Prebuilt/components/Chat/useEmojiPickerStyles.js +1 -0
  24. package/src/Prebuilt/components/Footer/ChatToggle.tsx +2 -9
  25. package/src/Prebuilt/components/Footer/Footer.tsx +23 -7
  26. package/src/Prebuilt/components/Footer/ParticipantList.jsx +4 -5
  27. package/src/Prebuilt/components/Footer/RoleAccordion.tsx +1 -1
  28. package/src/Prebuilt/components/Header/HeaderComponents.jsx +10 -9
  29. package/src/Prebuilt/components/InsetTile.tsx +1 -0
  30. package/src/Prebuilt/components/Leave/DesktopLeaveRoom.tsx +7 -9
  31. package/src/Prebuilt/components/Leave/LeaveRoom.tsx +6 -2
  32. package/src/Prebuilt/components/Leave/MwebLeaveRoom.tsx +7 -4
  33. package/src/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.tsx +1 -1
  34. package/src/Prebuilt/components/Notifications/Notifications.jsx +4 -3
  35. package/src/Prebuilt/components/Preview/PreviewJoin.tsx +2 -3
  36. package/src/Prebuilt/components/RoleChangeRequestModal.tsx +4 -3
  37. package/src/Prebuilt/components/ScreenshareTile.jsx +15 -7
  38. package/src/Prebuilt/components/SidePaneTabs.tsx +141 -0
  39. package/src/Prebuilt/components/conference.jsx +9 -1
  40. package/src/Prebuilt/components/hooks/useMetadata.jsx +7 -25
  41. package/src/Prebuilt/layouts/SidePane.tsx +12 -10
  42. package/src/Prebuilt/plugins/VirtualBackground/VirtualBackground.jsx +3 -3
  43. package/src/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.ts +2 -2
  44. package/dist/VirtualBackground-UM2FOUHQ.js.map +0 -7
  45. package/dist/chunk-LYSAET4G.js.map +0 -7
  46. package/dist/conference-UWLJHMB2.js.map +0 -7
  47. package/src/Prebuilt/components/Chat/ChatParticipantHeader.jsx +0 -84
  48. /package/dist/{HLSView-HNVYG5VE.js.map → HLSView-HL455FYH.js.map} +0 -0
  49. /package/dist/{chunk-364HP22I.js.map → chunk-UXBTLGWY.js.map} +0 -0
@@ -0,0 +1,141 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { useMedia } from 'react-use';
3
+ import { ConferencingScreen } from '@100mslive/types-prebuilt';
4
+ import { selectPeerCount, useHMSStore } from '@100mslive/react-sdk';
5
+ import { CrossIcon } from '@100mslive/react-icons';
6
+ // @ts-ignore: No implicit Any
7
+ import { Chat } from './Chat/Chat';
8
+ // @ts-ignore: No implicit Any
9
+ import { ParticipantList } from './Footer/ParticipantList';
10
+ import { config as cssConfig, Flex, IconButton, Tabs, Text } from '../..';
11
+ // @ts-ignore: No implicit Any
12
+ import { useRoomLayoutConferencingScreen } from '../provider/roomLayoutProvider/hooks/useRoomLayoutScreen';
13
+ // @ts-ignore: No implicit Any
14
+ import { useIsSidepaneTypeOpen, useSidepaneReset, useSidepaneToggle } from './AppData/useSidepane';
15
+ // @ts-ignore: No implicit Any
16
+ import { SIDE_PANE_OPTIONS } from '../common/constants';
17
+
18
+ const tabTriggerCSS = {
19
+ color: '$on_surface_high',
20
+ p: '$4',
21
+ fontWeight: '$semiBold',
22
+ fontSize: '$sm',
23
+ w: '100%',
24
+ justifyContent: 'center',
25
+ };
26
+
27
+ export const SidePaneTabs = React.memo<{
28
+ active: 'Participants | Chat';
29
+ screenType: keyof ConferencingScreen;
30
+ hideControls?: boolean;
31
+ }>(({ active = SIDE_PANE_OPTIONS.CHAT, screenType, hideControls }) => {
32
+ const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);
33
+ const toggleParticipants = useSidepaneToggle(SIDE_PANE_OPTIONS.PARTICIPANTS);
34
+ const resetSidePane = useSidepaneReset();
35
+ const [activeTab, setActiveTab] = useState(active);
36
+ const peerCount = useHMSStore(selectPeerCount);
37
+ const { elements } = useRoomLayoutConferencingScreen();
38
+ const showChat = !!elements?.chat;
39
+ const showParticipants = !!elements?.participant_list;
40
+ const hideTabs = !(showChat && showParticipants);
41
+ const isMobile = useMedia(cssConfig.media.md);
42
+ const isOverlayChat = !!elements?.chat?.is_overlay && isMobile;
43
+ const isChatOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.CHAT);
44
+
45
+ useEffect(() => {
46
+ if (activeTab === SIDE_PANE_OPTIONS.CHAT && !showChat && showParticipants) {
47
+ setActiveTab(SIDE_PANE_OPTIONS.PARTICIPANTS);
48
+ } else if (activeTab === SIDE_PANE_OPTIONS.PARTICIPANTS && showChat && !showParticipants) {
49
+ setActiveTab(SIDE_PANE_OPTIONS.CHAT);
50
+ } else if (!showChat && !showParticipants) {
51
+ resetSidePane();
52
+ }
53
+ }, [showChat, activeTab, showParticipants, resetSidePane]);
54
+
55
+ useEffect(() => {
56
+ setActiveTab(active);
57
+ }, [active]);
58
+
59
+ return (
60
+ <Flex
61
+ direction="column"
62
+ css={{
63
+ color: '$on_primary_high',
64
+ h: '100%',
65
+ marginTop: hideControls && isOverlayChat ? '$17' : '0',
66
+ transition: 'margin 0.3s ease-in-out',
67
+ }}
68
+ >
69
+ {isOverlayChat && isChatOpen && showChat ? (
70
+ <Chat screenType={screenType} />
71
+ ) : (
72
+ <>
73
+ {hideTabs ? (
74
+ <>
75
+ <Text variant="sm" css={{ fontWeight: '$semiBold', p: '$4', c: '$on_surface_high', pr: '$12' }}>
76
+ {showChat ? 'Chat' : `Participants (${peerCount})`}
77
+ </Text>
78
+
79
+ {showChat ? <Chat screenType={screenType} /> : <ParticipantList />}
80
+ </>
81
+ ) : (
82
+ <Tabs.Root
83
+ value={activeTab}
84
+ onValueChange={setActiveTab}
85
+ css={{
86
+ flexDirection: 'column',
87
+ size: '100%',
88
+ }}
89
+ >
90
+ <Tabs.List css={{ w: 'calc(100% - $12)', p: '$2', borderRadius: '$2', bg: '$surface_default' }}>
91
+ <Tabs.Trigger
92
+ value={SIDE_PANE_OPTIONS.CHAT}
93
+ onClick={toggleChat}
94
+ css={{
95
+ ...tabTriggerCSS,
96
+ color: activeTab !== SIDE_PANE_OPTIONS.CHAT ? '$on_surface_low' : '$on_surface_high',
97
+ }}
98
+ >
99
+ Chat
100
+ </Tabs.Trigger>
101
+ <Tabs.Trigger
102
+ value={SIDE_PANE_OPTIONS.PARTICIPANTS}
103
+ onClick={toggleParticipants}
104
+ css={{
105
+ ...tabTriggerCSS,
106
+ color: activeTab !== SIDE_PANE_OPTIONS.PARTICIPANTS ? '$on_surface_low' : '$on_surface_high',
107
+ }}
108
+ >
109
+ Participants ({peerCount})
110
+ </Tabs.Trigger>
111
+ </Tabs.List>
112
+ <Tabs.Content value={SIDE_PANE_OPTIONS.PARTICIPANTS} css={{ p: 0 }}>
113
+ <ParticipantList />
114
+ </Tabs.Content>
115
+ <Tabs.Content value={SIDE_PANE_OPTIONS.CHAT} css={{ p: 0 }}>
116
+ <Chat screenType={screenType} />
117
+ </Tabs.Content>
118
+ </Tabs.Root>
119
+ )}
120
+ </>
121
+ )}
122
+
123
+ {isOverlayChat && isChatOpen ? null : (
124
+ <IconButton
125
+ css={{ position: 'absolute', right: '$10', top: '$11', '@md': { top: '$8', right: '$8' } }}
126
+ onClick={e => {
127
+ e.stopPropagation();
128
+ if (activeTab === SIDE_PANE_OPTIONS.CHAT) {
129
+ toggleChat();
130
+ } else {
131
+ toggleParticipants();
132
+ }
133
+ }}
134
+ data-testid="close_chat"
135
+ >
136
+ <CrossIcon />
137
+ </IconButton>
138
+ )}
139
+ </Flex>
140
+ );
141
+ });
@@ -49,6 +49,7 @@ const Conference = () => {
49
49
  setHideControls(value => !value);
50
50
  }
51
51
  };
52
+ const autoRoomJoined = useRef(isPreviewScreenEnabled);
52
53
 
53
54
  useEffect(() => {
54
55
  let timeout = null;
@@ -84,7 +85,13 @@ const Conference = () => {
84
85
  }, [isConnectedToRoom, prevState, roomState, navigate, role, roomId, isPreviewScreenEnabled]);
85
86
 
86
87
  useEffect(() => {
87
- if (authTokenInAppData && !isConnectedToRoom && !isPreviewScreenEnabled && roomState !== HMSRoomState.Connecting) {
88
+ if (
89
+ authTokenInAppData &&
90
+ !isConnectedToRoom &&
91
+ !isPreviewScreenEnabled &&
92
+ roomState !== HMSRoomState.Connecting &&
93
+ !autoRoomJoined.current
94
+ ) {
88
95
  hmsActions
89
96
  .join({
90
97
  userName,
@@ -97,6 +104,7 @@ const Conference = () => {
97
104
  },
98
105
  })
99
106
  .catch(console.error);
107
+ autoRoomJoined.current = true;
100
108
  }
101
109
  }, [authTokenInAppData, endpoints?.init, hmsActions, isConnectedToRoom, isPreviewScreenEnabled, roomState, userName]);
102
110
 
@@ -1,4 +1,4 @@
1
- import { useCallback, useState } from 'react';
1
+ import { useCallback } from 'react';
2
2
  import {
3
3
  selectLocalPeerID,
4
4
  selectPeerMetadata,
@@ -12,8 +12,6 @@ export const useMyMetadata = () => {
12
12
  const localPeerId = useHMSStore(selectLocalPeerID);
13
13
  const vanillaStore = useHMSVanillaStore();
14
14
  const metaData = useHMSStore(selectPeerMetadata(localPeerId));
15
- const [isHandRaised, setHandRaised] = useState(metaData?.isHandRaised || false);
16
- const [isBRBOn, setBRBOn] = useState(metaData?.isBRBOn || false); // BRB = be right back
17
15
 
18
16
  const update = async updatedFields => {
19
17
  try {
@@ -27,28 +25,12 @@ export const useMyMetadata = () => {
27
25
  };
28
26
 
29
27
  const toggleHandRaise = useCallback(async () => {
30
- const brbUpdate = !isHandRaised ? false : isBRBOn;
31
- const success = await update({
32
- isHandRaised: !isHandRaised,
33
- isBRBOn: brbUpdate,
34
- });
35
- if (success) {
36
- setBRBOn(brbUpdate);
37
- setHandRaised(!isHandRaised);
38
- }
39
- }, [isHandRaised, isBRBOn]); //eslint-disable-line
28
+ await update({ isHandRaised: !metaData?.isHandRaised, isBRBOn: false });
29
+ }, [metaData?.isHandRaised]); //eslint-disable-line
40
30
 
41
31
  const toggleBRB = useCallback(async () => {
42
- const handRaiseUpdate = !isBRBOn ? false : isHandRaised;
43
- const success = await update({
44
- isHandRaised: handRaiseUpdate,
45
- isBRBOn: !isBRBOn,
46
- });
47
- if (success) {
48
- setBRBOn(!isBRBOn);
49
- setHandRaised(handRaiseUpdate);
50
- }
51
- }, [isHandRaised, isBRBOn]); //eslint-disable-line
32
+ await update({ isBRBOn: !metaData?.isBRBOn, isHandRaised: false });
33
+ }, [metaData?.isBRBOn]); //eslint-disable-line
52
34
 
53
35
  const setPrevRole = async role => {
54
36
  await update({
@@ -57,8 +39,8 @@ export const useMyMetadata = () => {
57
39
  };
58
40
 
59
41
  return {
60
- isHandRaised,
61
- isBRBOn,
42
+ isHandRaised: !!metaData?.isHandRaised,
43
+ isBRBOn: !!metaData?.isBRBOn,
62
44
  metaData,
63
45
  updateMetaData: update,
64
46
  toggleHandRaise,
@@ -2,10 +2,7 @@ import React from 'react';
2
2
  import { useMedia } from 'react-use';
3
3
  import { ConferencingScreen } from '@100mslive/types-prebuilt';
4
4
  import { selectAppData, selectVideoTrackByPeerID, useHMSStore } from '@100mslive/react-sdk';
5
- // @ts-ignore: No implicit Any
6
- import { Chat } from '../components/Chat/Chat';
7
- // @ts-ignore: No implicit Any
8
- import { ParticipantList } from '../components/Footer/ParticipantList';
5
+ import { SidePaneTabs } from '../components/SidePaneTabs';
9
6
  // @ts-ignore: No implicit Any
10
7
  import { StreamingLanding } from '../components/Streaming/StreamingLanding';
11
8
  import { TileCustomisationProps } from '../components/VideoLayouts/GridLayout';
@@ -32,10 +29,8 @@ const SidePane = ({
32
29
  const trackId = useHMSStore(selectVideoTrackByPeerID(activeScreensharePeerId))?.id;
33
30
  const { elements } = useRoomLayoutConferencingScreen();
34
31
  let ViewComponent;
35
- if (sidepane === SIDE_PANE_OPTIONS.PARTICIPANTS) {
36
- ViewComponent = <ParticipantList />;
37
- } else if (sidepane === SIDE_PANE_OPTIONS.CHAT) {
38
- ViewComponent = <Chat screenType={screenType} hideControls={hideControls} />;
32
+ if (sidepane === SIDE_PANE_OPTIONS.PARTICIPANTS || sidepane === SIDE_PANE_OPTIONS.CHAT) {
33
+ ViewComponent = <SidePaneTabs screenType={screenType} hideControls={hideControls} active={sidepane} />;
39
34
  } else if (sidepane === SIDE_PANE_OPTIONS.STREAMING) {
40
35
  ViewComponent = <StreamingLanding />;
41
36
  }
@@ -43,6 +38,14 @@ const SidePane = ({
43
38
  return null;
44
39
  }
45
40
 
41
+ const tileLayout = {
42
+ hideParticipantNameOnTile: tileProps?.hide_participant_name_on_tile,
43
+ roundedVideoTile: tileProps?.rounded_video_tile,
44
+ hideAudioMuteOnTile: tileProps?.hide_audio_mute_on_tile,
45
+ hideMetadataOnTile: tileProps?.hide_metadata_on_tile,
46
+ objectFit: tileProps?.video_object_fit,
47
+ };
48
+
46
49
  const mwebStreamingChat = isMobile && sidepane === SIDE_PANE_OPTIONS.CHAT && elements?.chat?.is_overlay;
47
50
 
48
51
  return (
@@ -64,8 +67,7 @@ const SidePane = ({
64
67
  width="100%"
65
68
  height={225}
66
69
  rootCSS={{ p: 0, alignSelf: 'start', flexShrink: 0 }}
67
- objectFit="contain"
68
- {...tileProps}
70
+ {...tileLayout}
69
71
  />
70
72
  )}
71
73
  {!!ViewComponent && (
@@ -1,7 +1,7 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
2
  import { HMSVirtualBackgroundTypes } from '@100mslive/hms-virtual-background';
3
3
  import {
4
- selectIsAllowedToPublish,
4
+ selectIsLocalVideoEnabled,
5
5
  selectIsLocalVideoPluginPresent,
6
6
  selectLocalPeerRole,
7
7
  selectLocalVideoTrackID,
@@ -23,8 +23,8 @@ export const VirtualBackground = ({
23
23
  }) => {
24
24
  const pluginRef = useRef(null);
25
25
  const hmsActions = useHMSActions();
26
- const isAllowedToPublish = useHMSStore(selectIsAllowedToPublish);
27
26
  const role = useHMSStore(selectLocalPeerRole);
27
+ const isVideoOn = useHMSStore(selectIsLocalVideoEnabled);
28
28
  const [isVBLoading, setIsVBLoading] = useState(false);
29
29
  const [isVBSupported, setIsVBSupported] = useState(false);
30
30
  const [isVBOn, setIsVBOn] = useState(false);
@@ -69,7 +69,7 @@ export const VirtualBackground = ({
69
69
  }
70
70
  }
71
71
 
72
- if (!isAllowedToPublish.video || !isVBSupported) {
72
+ if (!isVBSupported || !isVideoOn) {
73
73
  return null;
74
74
  }
75
75
  if (asActionTile) {
@@ -29,7 +29,7 @@ export type useFetchRoomLayoutResponse = {
29
29
  };
30
30
 
31
31
  export const useFetchRoomLayout = ({
32
- endpoint = 'https://api.100ms.live/v2/layouts/ui',
32
+ endpoint = '',
33
33
  authToken = '',
34
34
  }: useFetchRoomLayoutProps): useFetchRoomLayoutResponse => {
35
35
  const [layout, setLayout] = useState<Layout | undefined>(undefined);
@@ -51,7 +51,7 @@ export const useFetchRoomLayout = ({
51
51
  }
52
52
  isFetchInProgress.current = true;
53
53
  try {
54
- const resp = await fetchWithRetry(endpoint, {
54
+ const resp = await fetchWithRetry(endpoint || 'https://api.100ms.live/v2/layouts/ui', {
55
55
  headers: {
56
56
  Authorization: `Bearer ${authToken}`,
57
57
  },
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/Prebuilt/plugins/VirtualBackground/VirtualBackground.jsx", "../src/Prebuilt/plugins/VirtualBackground/vbutils.js"],
4
- "sourcesContent": ["import React, { useEffect, useRef, useState } from 'react';\nimport { HMSVirtualBackgroundTypes } from '@100mslive/hms-virtual-background';\nimport {\n selectIsAllowedToPublish,\n selectIsLocalVideoPluginPresent,\n selectLocalPeerRole,\n selectLocalVideoTrackID,\n useHMSActions,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { VirtualBackgroundIcon } from '@100mslive/react-icons';\nimport { ActionTile } from '../../components/MoreSettings/ActionTile';\nimport { Loading } from '../../../Loading';\nimport { Tooltip } from '../../../Tooltip';\nimport IconButton from '../../IconButton';\nimport { getRandomVirtualBackground } from './vbutils';\n\nexport const VirtualBackground = ({\n asActionTile = false,\n onVBClick = () => {\n return;\n },\n}) => {\n const pluginRef = useRef(null);\n const hmsActions = useHMSActions();\n const isAllowedToPublish = useHMSStore(selectIsAllowedToPublish);\n const role = useHMSStore(selectLocalPeerRole);\n const [isVBLoading, setIsVBLoading] = useState(false);\n const [isVBSupported, setIsVBSupported] = useState(false);\n const [isVBOn, setIsVBOn] = useState(false);\n const localPeerVideoTrackID = useHMSStore(selectLocalVideoTrackID);\n const isVBPresent = useHMSStore(selectIsLocalVideoPluginPresent('HMSVB'));\n\n async function createPlugin() {\n if (!pluginRef.current) {\n const { HMSVBPlugin } = await import('@100mslive/hms-virtual-background');\n pluginRef.current = new HMSVBPlugin(HMSVirtualBackgroundTypes.NONE, HMSVirtualBackgroundTypes.NONE);\n }\n }\n useEffect(() => {\n if (!localPeerVideoTrackID) {\n return;\n }\n createPlugin().then(() => {\n //check support of plugin\n const pluginSupport = hmsActions.validateVideoPluginSupport(pluginRef.current);\n setIsVBSupported(pluginSupport.isSupported);\n });\n }, [hmsActions, localPeerVideoTrackID]);\n\n async function addPlugin() {\n setIsVBLoading(true);\n try {\n await createPlugin();\n window.HMS.virtualBackground = pluginRef.current;\n const { background, backgroundType } = getRandomVirtualBackground();\n await pluginRef.current.setBackground(background, backgroundType);\n await hmsActions.addPluginToVideoTrack(pluginRef.current, Math.floor(role.publishParams.video.frameRate / 2));\n } catch (err) {\n console.error('add virtual background plugin failed', err);\n }\n setIsVBLoading(false);\n }\n\n async function removePlugin() {\n if (pluginRef.current) {\n await hmsActions.removePluginFromVideoTrack(pluginRef.current);\n pluginRef.current = null;\n }\n }\n\n if (!isAllowedToPublish.video || !isVBSupported) {\n return null;\n }\n if (asActionTile) {\n return (\n <ActionTile.Root\n data-testid=\"virtual_bg_btn\"\n active={isVBPresent}\n disabled={isVBLoading}\n onClick={() => {\n setIsVBOn(!isVBOn);\n !isVBPresent ? addPlugin() : removePlugin();\n onVBClick();\n }}\n >\n <VirtualBackgroundIcon />\n <ActionTile.Title>Virtual Background</ActionTile.Title>\n </ActionTile.Root>\n );\n }\n\n return (\n <Tooltip\n boxCss={{ zIndex: '100' }}\n title={isVBLoading ? 'Adding virtual background' : `Turn ${!isVBPresent ? 'on' : 'off'} virtual background`}\n >\n <IconButton\n active={!isVBPresent}\n disabled={isVBLoading}\n onClick={() => {\n !isVBPresent ? addPlugin() : removePlugin();\n }}\n data-testid=\"virtual_bg_btn\"\n >\n {isVBLoading ? <Loading /> : <VirtualBackgroundIcon />}\n </IconButton>\n </Tooltip>\n );\n};\n\nexport default VirtualBackground;\n", "/* eslint-disable no-case-declarations */\nimport { HMSVirtualBackgroundTypes } from '@100mslive/hms-virtual-background';\nexport function getRandomVirtualBackground() {\n const backgroundList = [\n {\n background: HMSVirtualBackgroundTypes.BLUR,\n backgroundType: HMSVirtualBackgroundTypes.BLUR,\n },\n ];\n\n const images = [\n 'https://www.100ms.live/images/vb-1.jpeg',\n 'https://www.100ms.live/images/vb-2.jpg',\n 'https://www.100ms.live/images/vb-3.png',\n 'https://d2qi07yyjujoxr.cloudfront.net/webapp/vb/hms1.png',\n 'https://d2qi07yyjujoxr.cloudfront.net/webapp/vb/hms2.png',\n 'https://d2qi07yyjujoxr.cloudfront.net/webapp/vb/hms3.png',\n 'https://d2qi07yyjujoxr.cloudfront.net/webapp/vb/hms4.png',\n ].map(url => ({\n background: url,\n backgroundType: HMSVirtualBackgroundTypes.IMAGE,\n }));\n\n backgroundList.push(...images);\n\n /* \n //TODO: update with a better quality gif.\n const gifList = [\n {\n background: \"https://www.100ms.live/images/vb-1.gif\",\n backgroundType: HMSVirtualBackgroundTypes.GIF,\n },\n ];\n backgroundList.push(...gifList); \n */\n\n const videoList = [\n 'https://www.100ms.live/images/video-1.mp4',\n 'https://www.100ms.live/images/video-2.mp4',\n 'https://www.100ms.live/images/video-5.mp4',\n 'https://www.100ms.live/images/video-7.mp4',\n 'https://www.100ms.live/images/video-8.mp4',\n ].map(url => ({\n background: url,\n backgroundType: HMSVirtualBackgroundTypes.VIDEO,\n }));\n backgroundList.push(...videoList);\n\n const randomIdx = Math.floor(Math.random() * backgroundList.length);\n const virtualBackground = backgroundList[randomIdx];\n switch (virtualBackground.backgroundType) {\n case HMSVirtualBackgroundTypes.IMAGE:\n const img = document.createElement('img');\n img.alt = 'VB';\n img.src = backgroundList[randomIdx].background;\n virtualBackground.background = img;\n return virtualBackground;\n case HMSVirtualBackgroundTypes.VIDEO:\n const videoEl = document.createElement('video');\n videoEl.src = backgroundList[randomIdx].background;\n virtualBackground.background = videoEl;\n return virtualBackground;\n default:\n return virtualBackground;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["HMSVirtualBackgroundTypes", "HMSVirtualBackgroundTypes"]
7
- }