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

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.
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
- }