@100mslive/roomkit-react 0.3.14-alpha.11 → 0.3.14-alpha.12

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 (33) hide show
  1. package/dist/{HLSView-72D4HXOZ.js → HLSView-6X6A7QVC.js} +2 -2
  2. package/dist/{HLSView-X4TA7M5M.css → HLSView-J7FHXBEW.css} +3 -3
  3. package/dist/{HLSView-X4TA7M5M.css.map → HLSView-J7FHXBEW.css.map} +1 -1
  4. package/dist/{chunk-OZVDS5TG.js → chunk-2VGMEGOM.js} +460 -511
  5. package/dist/{chunk-OZVDS5TG.js.map → chunk-2VGMEGOM.js.map} +4 -4
  6. package/dist/index.cjs.css +2 -2
  7. package/dist/index.cjs.css.map +1 -1
  8. package/dist/index.cjs.js +2220 -2265
  9. package/dist/index.cjs.js.map +4 -4
  10. package/dist/index.css +2 -2
  11. package/dist/index.css.map +1 -1
  12. package/dist/index.js +1 -1
  13. package/dist/meta.cjs.json +21 -65
  14. package/dist/meta.esbuild.json +33 -77
  15. package/package.json +8 -7
  16. package/src/Prebuilt/components/Chat/ChatBody.tsx +23 -8
  17. package/src/Prebuilt/components/Header/AdditionalRoomState.jsx +4 -66
  18. package/dist/Prebuilt/components/HMSVideo/PlayButton.d.ts +0 -6
  19. package/dist/Prebuilt/components/Polls/common/VoterList.d.ts +0 -4
  20. package/src/Prebuilt/common/roles.js +0 -4
  21. package/src/Prebuilt/components/AppData/useAppConfig.js +0 -7
  22. package/src/Prebuilt/components/HMSVideo/PlayButton.tsx +0 -27
  23. package/src/Prebuilt/components/Header/AmbientMusic.jsx +0 -88
  24. package/src/Prebuilt/components/Image.jsx +0 -7
  25. package/src/Prebuilt/components/MetaActions.jsx +0 -37
  26. package/src/Prebuilt/components/Playlist/Playlist.jsx +0 -124
  27. package/src/Prebuilt/components/Playlist/PlaylistControls.jsx +0 -172
  28. package/src/Prebuilt/components/Playlist/PlaylistItem.jsx +0 -51
  29. package/src/Prebuilt/components/Playlist/VideoPlayer.jsx +0 -95
  30. package/src/Prebuilt/components/Polls/CreatePollQuiz/Timer.jsx +0 -71
  31. package/src/Prebuilt/components/Polls/common/VoterList.tsx +0 -22
  32. package/src/Prebuilt/components/ScreenshareHintModal.jsx +0 -37
  33. /package/dist/{HLSView-72D4HXOZ.js.map → HLSView-6X6A7QVC.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- import { styled } from '../../Theme';
2
-
3
- export const Image = styled('img', {
4
- width: '100%',
5
- height: 'auto',
6
- r: '$3',
7
- });
@@ -1,37 +0,0 @@
1
- import React from 'react';
2
- import { selectIsConnectedToRoom, useHMSStore } from '@100mslive/react-sdk';
3
- import { BrbIcon, HandIcon } from '@100mslive/react-icons';
4
- import { Flex } from '../../Layout';
5
- import { Tooltip } from '../../Tooltip';
6
- import IconButton from '../IconButton';
7
- import { useMyMetadata } from './hooks/useMetadata';
8
-
9
- const MetaActions = ({ isMobile = false, compact = false }) => {
10
- const isConnected = useHMSStore(selectIsConnectedToRoom);
11
- const { isHandRaised, isBRBOn, toggleHandRaise, toggleBRB } = useMyMetadata();
12
-
13
- if (!isConnected) {
14
- return null;
15
- }
16
-
17
- return (
18
- <Flex align="center" css={{ gap: compact ? '$4' : '$8' }}>
19
- <Tooltip title={`${!isHandRaised ? 'Raise' : 'Unraise'} hand`}>
20
- <IconButton
21
- onClick={toggleHandRaise}
22
- active={!isHandRaised}
23
- data-testid={isMobile ? 'raise_hand_btn_mobile' : 'raise_hand_btn'}
24
- >
25
- <HandIcon />
26
- </IconButton>
27
- </Tooltip>
28
- <Tooltip title={isBRBOn ? `I'm back` : `I'll be right back`}>
29
- <IconButton onClick={toggleBRB} active={!isBRBOn} data-testid="brb_btn">
30
- <BrbIcon />
31
- </IconButton>
32
- </Tooltip>
33
- </Flex>
34
- );
35
- };
36
-
37
- export default MetaActions;
@@ -1,124 +0,0 @@
1
- import React, { Fragment, useState } from 'react';
2
- import { HMSPlaylistType, selectIsAllowedToPublish, useHMSStore } from '@100mslive/react-sdk';
3
- import { AudioPlayerIcon, CrossIcon, VideoPlayerIcon } from '@100mslive/react-icons';
4
- import { Box, Dropdown, Flex, Text, Tooltip } from '../../../';
5
- import IconButton from '../../IconButton';
6
- import { AudioPlaylistControls } from './PlaylistControls';
7
- import { PlaylistItem } from './PlaylistItem';
8
- import { usePlaylist } from '../hooks/usePlaylist';
9
-
10
- const BrowseAndPlayFromLocal = ({ type, actions }) => {
11
- return (
12
- <Fragment>
13
- <Text as="label" htmlFor={`${type}PlaylistBrowse`} variant="sm" css={{ cursor: 'pointer', mr: '$2' }}>
14
- Browse
15
- </Text>
16
- <input
17
- type="file"
18
- id={`${type}PlaylistBrowse`}
19
- accept={type === HMSPlaylistType.audio ? 'audio/*' : 'video/*'}
20
- onChange={e => {
21
- const file = e.target.files[0];
22
- const id = file.lastModified;
23
- actions.setList([
24
- {
25
- type,
26
- id,
27
- name: file.name,
28
- url: URL.createObjectURL(file),
29
- },
30
- ]);
31
- actions.play(id);
32
- }}
33
- style={{ display: 'none' }}
34
- />
35
- </Fragment>
36
- );
37
- };
38
-
39
- export const Playlist = ({ type }) => {
40
- const isAudioPlaylist = type === HMSPlaylistType.audio;
41
- const { active, list: playlist, actions } = usePlaylist(type);
42
- const [open, setOpen] = useState(false);
43
- const [collapse, setCollapse] = useState(false);
44
- const isAllowedToPublish = useHMSStore(selectIsAllowedToPublish);
45
- if (!isAllowedToPublish.screen || playlist.length === 0) {
46
- return null;
47
- }
48
-
49
- return (
50
- <Fragment>
51
- <Dropdown.Root open={open} onOpenChange={setOpen}>
52
- <Dropdown.Trigger asChild data-testid={type === HMSPlaylistType.audio ? 'audio_playlist' : 'video_playlist'}>
53
- <IconButton active={!active}>
54
- <Tooltip title={isAudioPlaylist ? 'Audio Playlist' : 'Video Playlist'}>
55
- <Box>{isAudioPlaylist ? <AudioPlayerIcon /> : <VideoPlayerIcon />}</Box>
56
- </Tooltip>
57
- </IconButton>
58
- </Dropdown.Trigger>
59
- <Dropdown.Content
60
- sideOffset={5}
61
- align="center"
62
- css={{
63
- maxHeight: 'unset',
64
- width: '$60',
65
- p: '$0',
66
- bg: '$surface_bright',
67
- border: '1px solid $border_default',
68
- }}
69
- >
70
- <Flex
71
- align="center"
72
- css={{
73
- p: '$4 $8',
74
- borderBottom: '1px solid $border_bright',
75
- bg: '$surface_default',
76
- }}
77
- >
78
- <Text variant="md" css={{ flex: '1 1 0' }}>
79
- {isAudioPlaylist ? 'Audio Player' : 'Video Playlist'}
80
- </Text>
81
- <BrowseAndPlayFromLocal type={type} actions={actions} />
82
- <IconButton
83
- css={{ mr: '-$4' }}
84
- onClick={async () => {
85
- if (active) {
86
- await actions.stop();
87
- }
88
- setOpen(false);
89
- setCollapse(false);
90
- }}
91
- >
92
- <CrossIcon width={24} height={24} />
93
- </IconButton>
94
- </Flex>
95
- {!collapse && (
96
- <Box css={{ maxHeight: '$96', overflowY: 'auto' }}>
97
- {playlist.map(playlistItem => {
98
- return (
99
- <PlaylistItem
100
- key={playlistItem.id}
101
- {...playlistItem}
102
- onClick={async e => {
103
- e.preventDefault();
104
- try {
105
- await actions.play(playlistItem.id);
106
- } catch (e) {
107
- // error in playlist, stop or play next
108
- }
109
- // Close the dropdown list for videoplaylist
110
- if (!isAudioPlaylist) {
111
- setOpen(false);
112
- }
113
- }}
114
- />
115
- );
116
- })}
117
- </Box>
118
- )}
119
- {isAudioPlaylist && <AudioPlaylistControls onToggle={() => setCollapse(value => !value)} />}
120
- </Dropdown.Content>
121
- </Dropdown.Root>
122
- </Fragment>
123
- );
124
- };
@@ -1,172 +0,0 @@
1
- import React from 'react';
2
- import {
3
- HMSPlaylistType,
4
- selectAudioPlaylist,
5
- selectAudioTrackVolume,
6
- selectPeerSharingVideoPlaylist,
7
- selectVideoPlaylist,
8
- selectVideoPlaylistAudioTrackByPeerID,
9
- useHMSActions,
10
- useHMSStore,
11
- } from '@100mslive/react-sdk';
12
- import { NextIcon, PauseIcon, PlayIcon, PlaylistIcon, PrevIcon, SpeakerIcon } from '@100mslive/react-icons';
13
- import { Box, Flex, IconButton, Slider, Text } from '../../../';
14
- import { usePlaylist } from '../hooks/usePlaylist';
15
-
16
- const Progress = ({ type, duration }) => {
17
- const selectPlaylist = type === HMSPlaylistType.audio ? selectAudioPlaylist : selectVideoPlaylist;
18
- const progress = useHMSStore(selectPlaylist.progress);
19
- const hmsActions = useHMSActions();
20
- const playlistAction = type === HMSPlaylistType.audio ? hmsActions.audioPlaylist : hmsActions.videoPlaylist;
21
-
22
- if (!duration) {
23
- return null;
24
- }
25
-
26
- return (
27
- <Slider
28
- step={1}
29
- value={[progress]}
30
- onValueChange={e => {
31
- playlistAction.seekTo(e[0] * 0.01 * duration);
32
- }}
33
- />
34
- );
35
- };
36
-
37
- export const PlaylistActive = ({ type, onToggle }) => {
38
- const isAudioPlaylist = type === HMSPlaylistType.audio;
39
- const selector = isAudioPlaylist ? selectAudioPlaylist : selectVideoPlaylist;
40
- const active = useHMSStore(selector.selectedItem);
41
- if (!active) {
42
- return null;
43
- }
44
- return (
45
- <Box css={{ mt: '$8' }}>
46
- <Flex justify="between" css={{ w: '100%' }}>
47
- <Box>
48
- <Text variant="md">{active.name}</Text>
49
- {active.metadata?.description && <Text variant="xs">{active.metadata?.description}</Text>}
50
- </Box>
51
- <IconButton onClick={onToggle} css={{ alignSelf: 'center' }} data-testid="playlist_collapse_btn">
52
- <PlaylistIcon />
53
- </IconButton>
54
- </Flex>
55
- </Box>
56
- );
57
- };
58
-
59
- const Controls = ({ type, css = {} }) => {
60
- const { active, hasNext, hasPrevious, actions } = usePlaylist(type);
61
- if (!active) {
62
- return null;
63
- }
64
- return (
65
- <Flex justify="center" css={css}>
66
- <IconButton
67
- disabled={!hasPrevious}
68
- onClick={() => {
69
- actions.playPrevious();
70
- }}
71
- data-testid="playlist_prev_btn"
72
- >
73
- <PrevIcon />
74
- </IconButton>
75
- <IconButton
76
- onClick={() => {
77
- active.playing ? actions.pause() : actions.play(active.id);
78
- }}
79
- data-testid="playlist_play_pause_btn"
80
- >
81
- {active.playing ? <PauseIcon width={32} height={32} /> : <PlayIcon width={32} height={32} />}
82
- </IconButton>
83
- <IconButton
84
- disabled={!hasNext}
85
- onClick={() => {
86
- actions.playNext();
87
- }}
88
- data-testid="playlist_next_btn"
89
- >
90
- <NextIcon />
91
- </IconButton>
92
- </Flex>
93
- );
94
- };
95
-
96
- const VolumeControl = () => {
97
- const hmsActions = useHMSActions();
98
- const volume = useHMSStore(selectVideoPlaylist.volume);
99
- const active = useHMSStore(selectVideoPlaylist.selectedItem);
100
- const peerSharingPlaylist = useHMSStore(selectPeerSharingVideoPlaylist);
101
- const audioTrack = useHMSStore(selectVideoPlaylistAudioTrackByPeerID(peerSharingPlaylist?.id));
102
- const audioTrackVolume = useHMSStore(selectAudioTrackVolume(audioTrack?.id));
103
- const sliderVolume = active ? volume : audioTrackVolume;
104
-
105
- return (
106
- <Flex align="center" css={{ color: '$on_primary_high' }}>
107
- <SpeakerIcon />
108
- <Slider
109
- css={{ mx: '$4', w: '$20' }}
110
- min={0}
111
- max={100}
112
- step={1}
113
- value={[Math.floor(sliderVolume ?? 100)]}
114
- onValueChange={e => {
115
- const value = e[0];
116
- if (active) {
117
- hmsActions.videoPlaylist.setVolume(value);
118
- } else if (audioTrack) {
119
- hmsActions.setVolume(value, audioTrack.id);
120
- }
121
- }}
122
- thumbStyles={{ w: '$6', h: '$6' }}
123
- />
124
- </Flex>
125
- );
126
- };
127
-
128
- export const AudioPlaylistControls = ({ onToggle }) => {
129
- const { active } = usePlaylist(HMSPlaylistType.audio);
130
- if (!active) {
131
- return null;
132
- }
133
- return (
134
- <Box
135
- css={{
136
- p: '$8',
137
- borderTop: '1px solid $border_bright',
138
- bg: '$surface_default',
139
- }}
140
- >
141
- <Controls type={HMSPlaylistType.audio} />
142
- <Progress type={HMSPlaylistType.audio} duration={active.duration} />
143
- <PlaylistActive type={HMSPlaylistType.audio} onToggle={onToggle} />
144
- </Box>
145
- );
146
- };
147
-
148
- export const VideoPlaylistControls = ({ children }) => {
149
- const { active } = usePlaylist(HMSPlaylistType.video);
150
-
151
- return (
152
- <Box
153
- css={{
154
- p: '$8',
155
- mt: '-$24',
156
- w: '100%',
157
- zIndex: 1,
158
- '@lg': {
159
- mt: 0,
160
- p: '$6',
161
- },
162
- }}
163
- >
164
- {active && <Progress type={HMSPlaylistType.video} duration={active.duration} />}
165
- <Flex align="center" justify="between">
166
- <VolumeControl />
167
- {active && <Controls css={{ flex: '1 1 0' }} />}
168
- {children}
169
- </Flex>
170
- </Box>
171
- );
172
- };
@@ -1,51 +0,0 @@
1
- import React from 'react';
2
- import { Dropdown, Flex, Text } from '../../../';
3
-
4
- function formatDuration(duration) {
5
- if (!duration) {
6
- return '';
7
- }
8
- let mins = Math.floor(duration / 60);
9
- if (mins < 10) {
10
- mins = `0${String(mins)}`;
11
- }
12
- let secs = Math.floor(duration % 60);
13
- if (secs < 10) {
14
- secs = `0${String(secs)}`;
15
- }
16
-
17
- return `${mins}:${secs}`;
18
- }
19
-
20
- export const PlaylistItem = React.memo(({ name, metadata, duration, selected, onClick }) => {
21
- return (
22
- <Dropdown.Item
23
- css={{
24
- flexDirection: 'column',
25
- alignItems: 'flex-start',
26
- h: '$18',
27
- p: '$8',
28
- '&:hover': {
29
- cursor: 'pointer',
30
- bg: '$surface_default',
31
- },
32
- '&:focus-visible': {
33
- bg: '$surface_default',
34
- },
35
- }}
36
- onClick={onClick}
37
- >
38
- <Flex align="center" justify="between" css={{ width: '100%', minHeight: 0 }}>
39
- <Text variant="md" css={{ color: selected ? '$primary_default' : '$on_primary_high' }}>
40
- {name}
41
- </Text>
42
- <Text variant="xs">{formatDuration(duration)}</Text>
43
- </Flex>
44
- {metadata?.description && (
45
- <Text variant="xs" css={{ mt: '$4' }}>
46
- {metadata?.description}
47
- </Text>
48
- )}
49
- </Dropdown.Item>
50
- );
51
- });
@@ -1,95 +0,0 @@
1
- import React, { useRef } from 'react';
2
- import { useFullscreen, useToggle } from 'react-use';
3
- import screenfull from 'screenfull';
4
- import {
5
- selectVideoPlaylist,
6
- selectVideoPlaylistAudioTrackByPeerID,
7
- selectVideoPlaylistVideoTrackByPeerID,
8
- useHMSActions,
9
- useHMSStore,
10
- } from '@100mslive/react-sdk';
11
- import { CrossIcon, ExpandIcon, ShrinkIcon } from '@100mslive/react-icons';
12
- import { Box, Flex, IconButton, Text, Video, VideoTileStats } from '../../../';
13
- import { VideoPlaylistControls } from './PlaylistControls';
14
- import { useUISettings } from '../AppData/useUISettings';
15
- import { UI_SETTINGS } from '../../common/constants';
16
-
17
- export const VideoPlayer = React.memo(({ peerId }) => {
18
- const videoTrack = useHMSStore(selectVideoPlaylistVideoTrackByPeerID(peerId));
19
- const audioTrack = useHMSStore(selectVideoPlaylistAudioTrackByPeerID(peerId));
20
- const active = useHMSStore(selectVideoPlaylist.selectedItem);
21
- const isAudioOnly = useUISettings(UI_SETTINGS.isAudioOnly);
22
- const hmsActions = useHMSActions();
23
- const ref = useRef(null);
24
- const [show, toggle] = useToggle(false);
25
- const isFullscreen = useFullscreen(ref, show, {
26
- onClose: () => toggle(false),
27
- });
28
- const showStatsOnTiles = useUISettings(UI_SETTINGS.showStatsOnTiles);
29
-
30
- return (
31
- <Flex direction="column" justify="center" css={{ w: '100%', h: '100%' }} ref={ref}>
32
- {active && (
33
- <Flex
34
- justify="between"
35
- align="center"
36
- css={{
37
- bg: '$surface_default',
38
- p: '$2 $2 $2 $6',
39
- borderTopLeftRadius: '$1',
40
- borderTopRightRadius: '$1',
41
- }}
42
- >
43
- <Text css={{ color: '$on_primary_high' }}>{active.name}</Text>
44
- <IconButton
45
- css={{
46
- color: '$on_primary_high',
47
- }}
48
- onClick={() => {
49
- hmsActions.videoPlaylist.stop();
50
- }}
51
- data-testid="videoplaylist_cross_btn"
52
- >
53
- <CrossIcon />
54
- </IconButton>
55
- </Flex>
56
- )}
57
- {showStatsOnTiles ? (
58
- <Box css={{ '& > div': { top: '$14', left: '$8' } }}>
59
- <VideoTileStats
60
- audioTrackID={audioTrack?.id}
61
- videoTrackID={videoTrack?.id}
62
- peerID={peerId}
63
- isLocal={active}
64
- />
65
- </Box>
66
- ) : null}
67
- <Video
68
- trackId={videoTrack?.id}
69
- attach={!isAudioOnly}
70
- css={{
71
- objectFit: 'contain',
72
- h: 'auto',
73
- r: '$1',
74
- borderTopLeftRadius: 0,
75
- borderTopRightRadius: 0,
76
- }}
77
- />
78
- <VideoPlaylistControls>
79
- {screenfull.enabled && (
80
- <IconButton
81
- onClick={toggle}
82
- css={{
83
- color: '$on_primary_high',
84
- height: 'max-content',
85
- alignSelf: 'center',
86
- cursor: 'pointer',
87
- }}
88
- >
89
- {isFullscreen ? <ShrinkIcon /> : <ExpandIcon />}
90
- </IconButton>
91
- )}
92
- </VideoPlaylistControls>
93
- </Flex>
94
- );
95
- });
@@ -1,71 +0,0 @@
1
- // @ts-check
2
- import React, { useRef, useState } from 'react';
3
- import { Dropdown, Flex, Switch, Text } from '../../../../';
4
- import { DialogDropdownTrigger } from '../../../primitives/DropdownTrigger';
5
- import { useDropdownSelection } from '../../hooks/useDropdownSelection';
6
-
7
- const timerSettings = {
8
- 10: '10 secs',
9
- 15: '15 secs',
10
- 20: '20 secs',
11
- 25: '25 secs',
12
- 30: '30 secs',
13
- 60: '1 min',
14
- 120: '2 mins',
15
- 300: '5 mins',
16
- };
17
-
18
- export const Timer = ({ timer, setTimer, showTimerDropDown, setShowTimerDropDown }) => {
19
- const selectionBg = useDropdownSelection();
20
- const [timerDropdownToggle, setTimerDropdownToggle] = useState(false);
21
- const timerDropdownRef = useRef();
22
-
23
- return (
24
- <Flex justify="between" align="center" css={{ mt: '$10' }}>
25
- <Flex align="center">
26
- <Switch checked={showTimerDropDown} onCheckedChange={setShowTimerDropDown} css={{ mr: '$6' }} />
27
- <Text variant="body2" css={{ c: '$on_surface_medium' }}>
28
- Timer
29
- </Text>
30
- </Flex>
31
- <Flex align="center">
32
- {showTimerDropDown ? (
33
- <Dropdown.Root open={timerDropdownToggle} onOpenChange={setTimerDropdownToggle}>
34
- <DialogDropdownTrigger
35
- ref={timerDropdownRef}
36
- title={timerSettings[timer]}
37
- open={timerDropdownToggle}
38
- titleCss={{ c: '$on_surface_high', ml: '$md' }}
39
- />
40
- <Dropdown.Portal>
41
- <Dropdown.Content
42
- align="start"
43
- sideOffset={8}
44
- css={{
45
- w: timerDropdownRef.current?.clientWidth,
46
- zIndex: 1000,
47
- }}
48
- >
49
- {Object.keys(timerSettings).map(value => {
50
- const val = parseInt(value);
51
- return (
52
- <Dropdown.Item
53
- key={value}
54
- onSelect={() => setTimer(val)}
55
- css={{
56
- px: '$9',
57
- bg: timer === val ? selectionBg : undefined,
58
- }}
59
- >
60
- {timerSettings[val]}
61
- </Dropdown.Item>
62
- );
63
- })}
64
- </Dropdown.Content>
65
- </Dropdown.Portal>
66
- </Dropdown.Root>
67
- ) : null}
68
- </Flex>
69
- </Flex>
70
- );
71
- };
@@ -1,22 +0,0 @@
1
- import React from 'react';
2
- import { Avatar, Flex, Text } from '../../../../';
3
-
4
- export const VoterList = ({ voters }: { voters: string[] }) => {
5
- return voters.map((voter, index) => (
6
- <Flex align="center" key={`${voter}-${index}`} css={{ gap: '$4', py: '$2' }}>
7
- <Avatar
8
- name={voter}
9
- css={{
10
- position: 'relative',
11
- transform: 'unset',
12
- fontSize: '$tiny',
13
- size: '$9',
14
- p: '$4',
15
- }}
16
- />
17
- <Text variant="xs" css={{ color: '$on_surface_medium', fontWeight: '$semiBold' }}>
18
- {voter}
19
- </Text>
20
- </Flex>
21
- ));
22
- };
@@ -1,37 +0,0 @@
1
- import React from 'react';
2
- import { useHMSActions } from '@100mslive/react-sdk';
3
- import { Button } from '../../Button';
4
- import { Dialog } from '../../Modal';
5
- import { DialogContent, DialogRow } from '../primitives/DialogContent';
6
-
7
- export const ScreenShareHintModal = ({ onClose }) => {
8
- const hmsActions = useHMSActions();
9
- return (
10
- <Dialog.Root defaultOpen onOpenChange={value => !value && onClose()}>
11
- <DialogContent title="AudioOnly Screenshare">
12
- <img
13
- src="https://images.app.100ms.live/share-audio.png"
14
- alt="AudioOnly Screenshare instructions"
15
- width="100%"
16
- />
17
- <DialogRow justify="end">
18
- <Button
19
- variant="primary"
20
- onClick={() => {
21
- hmsActions
22
- .setScreenShareEnabled(true, {
23
- audioOnly: true,
24
- displaySurface: 'browser',
25
- })
26
- .catch(console.error);
27
- onClose();
28
- }}
29
- data-testid="audio_screenshare_continue"
30
- >
31
- Continue
32
- </Button>
33
- </DialogRow>
34
- </DialogContent>
35
- </Dialog.Root>
36
- );
37
- };