@100mslive/roomkit-react 0.1.0 → 0.1.2-alpha.0
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/README.md +18 -0
- package/dist/Accordion/Accordion.d.ts +62 -138
- package/dist/Accordion/index.d.ts +62 -138
- package/dist/{ActiveSpeakerView-H3VYXANB.js → ActiveSpeakerView-4XPIRZOK.js} +6 -6
- package/dist/{HLSView-6BVBCQM7.css → ActiveSpeakerView-ADEYHQMU.css} +2 -2
- package/dist/{PinnedTrackView-QQ5FDXJX.css.map → ActiveSpeakerView-ADEYHQMU.css.map} +2 -2
- package/dist/Avatar/Avatar.d.ts +31 -69
- package/dist/Button/Button.d.ts +31 -69
- package/dist/Checkbox/Checkbox.d.ts +62 -138
- package/dist/Collapsible/Collapsible.d.ts +93 -207
- package/dist/Divider/Divider.d.ts +62 -138
- package/dist/Dropdown/Dropdown.d.ts +372 -828
- package/dist/Fieldset/Fieldset.d.ts +31 -69
- package/dist/Footer/Footer.d.ts +248 -552
- package/dist/{conference-KN6OKGDU.css → HLSView-DWEEMZ6Z.css} +2 -2
- package/dist/{HLSView-6BVBCQM7.css.map → HLSView-DWEEMZ6Z.css.map} +2 -2
- package/dist/{HLSView-3RDXRV7Y.js → HLSView-I26CVF5U.js} +16 -16
- package/dist/HLSView-I26CVF5U.js.map +7 -0
- package/dist/IconButton/IconButton.d.ts +31 -69
- package/dist/Input/Input.d.ts +189 -417
- package/dist/Label/Label.d.ts +31 -69
- package/dist/Layout/Box.d.ts +31 -69
- package/dist/Layout/Flex.d.ts +31 -69
- package/dist/Link/Link.d.ts +31 -69
- package/dist/Modal/Dialog.d.ts +248 -552
- package/dist/Modal/DialogContent.d.ts +217 -483
- package/dist/Pagination/StyledPagination.d.ts +124 -276
- package/dist/{PinnedTrackView-QQ5FDXJX.css → PinnedTrackView-5DPVVOZW.css} +2 -2
- package/dist/{conference-KN6OKGDU.css.map → PinnedTrackView-5DPVVOZW.css.map} +2 -2
- package/dist/{PinnedTrackView-453PELNU.js → PinnedTrackView-GGTCNH5V.js} +6 -6
- package/dist/Popover/index.d.ts +93 -207
- package/dist/Prebuilt/provider/roomLayoutProvider/constants/index.d.ts +2 -0
- package/dist/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.d.ts +9 -0
- package/dist/Prebuilt/provider/roomLayoutProvider/index.d.ts +9 -0
- package/dist/Progress/index.d.ts +62 -138
- package/dist/RadioGroup/RadioGroup.d.ts +93 -207
- package/dist/ReactSelect/ReactSelect.d.ts +310 -690
- package/dist/Select/Select.d.ts +93 -207
- package/dist/Slider/Slider.d.ts +31 -69
- package/dist/Stats/StyledStats.d.ts +186 -414
- package/dist/Switch/Switch.d.ts +31 -69
- package/dist/Tabs/Tabs.d.ts +124 -276
- package/dist/Text/Text.d.ts +31 -69
- package/dist/Theme/ThemeProvider.d.ts +63 -140
- package/dist/Theme/base.config.d.ts +31 -53
- package/dist/Theme/index.d.ts +0 -1
- package/dist/Theme/stitches.config.d.ts +404 -915
- package/dist/TileMenu/StyledMenuTile.d.ts +217 -483
- package/dist/Toast/Toast.d.ts +187 -415
- package/dist/Video/Video.d.ts +31 -69
- package/dist/VideoList/StyledVideoList.d.ts +93 -207
- package/dist/VideoTile/StyledVideoTile.d.ts +279 -621
- package/dist/{VirtualBackground-LHYBWUT5.js → VirtualBackground-ZRRE4DUA.js} +4 -3
- package/dist/{VirtualBackground-LHYBWUT5.js.map → VirtualBackground-ZRRE4DUA.js.map} +2 -2
- package/dist/{chunk-KYYP6ZVK.js → chunk-4ISMCWQA.js} +49 -146
- package/dist/chunk-4ISMCWQA.js.map +7 -0
- package/dist/{chunk-7YUYZ64D.js → chunk-KKLZ7K2L.js} +577 -898
- package/dist/chunk-KKLZ7K2L.js.map +7 -0
- package/dist/{chunk-HCAGFNXW.js → chunk-LUND6FLY.js} +1490 -1134
- package/dist/chunk-LUND6FLY.js.map +7 -0
- package/dist/chunk-MYK3T45M.js +58 -0
- package/dist/chunk-MYK3T45M.js.map +7 -0
- package/dist/{chunk-XRJXE6UO.js → chunk-THORW2WT.js} +4 -4
- package/dist/{chunk-XRJXE6UO.js.map → chunk-THORW2WT.js.map} +1 -1
- package/dist/{conference-IDNRO4WK.js → conference-5TDUAQ6K.js} +593 -532
- package/dist/conference-5TDUAQ6K.js.map +7 -0
- package/dist/{ActiveSpeakerView-REZLWPPI.css → conference-BDCDGBIS.css} +2 -2
- package/dist/{ActiveSpeakerView-REZLWPPI.css.map → conference-BDCDGBIS.css.map} +2 -2
- package/dist/index.cjs.css +1 -1
- package/dist/index.cjs.css.map +2 -2
- package/dist/index.cjs.js +3450 -3418
- package/dist/index.cjs.js.map +4 -4
- package/dist/index.css +1 -1
- package/dist/index.css.map +2 -2
- package/dist/index.js +4 -8
- package/dist/meta.cjs.json +761 -490
- package/dist/meta.esbuild.json +857 -589
- package/dist/{transcription-BTSB7FZH.js → transcription-PYTSSAOB.js} +3 -3
- package/package.json +14 -9
- package/src/Accordion/Accordion.tsx +3 -3
- package/src/AudioLevel/AudioLevel.tsx +1 -1
- package/src/Avatar/Avatar.tsx +8 -3
- package/src/Button/Button.tsx +76 -20
- package/src/Checkbox/Checkbox.tsx +4 -4
- package/src/Collapsible/Collapsible.tsx +1 -1
- package/src/Divider/Divider.tsx +2 -2
- package/src/Divider/HorizontalDivider.stories.tsx +2 -2
- package/src/Divider/VerticalDivider.stories.tsx +1 -1
- package/src/Dropdown/Dropdown.stories.tsx +3 -3
- package/src/Dropdown/Dropdown.tsx +16 -14
- package/src/IconButton/IconButton.tsx +8 -7
- package/src/Input/Input.tsx +9 -8
- package/src/Input/PasswordInput.stories.tsx +2 -2
- package/src/Label/Label.tsx +1 -1
- package/src/Link/Link.tsx +4 -4
- package/src/Loading/Loading.tsx +7 -10
- package/src/Modal/Dialog.stories.tsx +2 -2
- package/src/Modal/DialogContent.tsx +3 -3
- package/src/Pagination/StyledPagination.tsx +4 -4
- package/src/Popover/Popover.stories.tsx +5 -5
- package/src/Popover/index.tsx +1 -1
- package/src/Prebuilt/App.jsx +101 -68
- package/src/Prebuilt/IconButton.jsx +2 -2
- package/src/Prebuilt/Prebuilt.stories.tsx +8 -2
- package/src/Prebuilt/common/constants.js +0 -1
- package/src/Prebuilt/common/utils.js +0 -6
- package/src/Prebuilt/components/AppData/AppData.jsx +7 -4
- package/src/Prebuilt/components/AppData/useUISettings.js +0 -4
- package/src/Prebuilt/components/AudioVideoToggle.jsx +73 -20
- package/src/Prebuilt/components/BottomActionSheet/BottomActionSheet.jsx +1 -1
- package/src/Prebuilt/components/Chat/Chat.jsx +6 -2
- package/src/Prebuilt/components/Chat/ChatBody.jsx +13 -11
- package/src/Prebuilt/components/Chat/ChatFooter.jsx +2 -2
- package/src/Prebuilt/components/Chat/ChatHeader.jsx +3 -3
- package/src/Prebuilt/components/Chat/ChatSelector.jsx +2 -2
- package/src/Prebuilt/components/Chat/useEmojiPickerStyles.js +6 -6
- package/src/Prebuilt/components/Chip.jsx +24 -0
- package/src/Prebuilt/components/Connection/ConnectionIndicator.jsx +6 -6
- package/src/Prebuilt/components/Connection/TileConnection.jsx +2 -2
- package/src/Prebuilt/components/Connection/connectionQualityUtils.js +4 -4
- package/src/Prebuilt/components/EmojiReaction.jsx +13 -10
- package/src/Prebuilt/components/ErrorBoundary.jsx +2 -2
- package/src/Prebuilt/components/FullPageProgress.jsx +5 -3
- package/src/Prebuilt/components/GoLiveButton.jsx +1 -4
- package/src/Prebuilt/components/HMSVideo/HLSQualitySelector.jsx +2 -2
- package/src/Prebuilt/components/HMSVideo/PlayButton.jsx +1 -1
- package/src/Prebuilt/components/HMSVideo/VideoProgress.jsx +3 -3
- package/src/Prebuilt/components/HMSVideo/VideoTime.jsx +3 -1
- package/src/Prebuilt/components/HMSVideo/VolumeControl.jsx +1 -1
- package/src/Prebuilt/components/Header/AdditionalRoomState.jsx +17 -17
- package/src/Prebuilt/components/Header/AmbientMusic.jsx +1 -1
- package/src/Prebuilt/components/Header/ConferencingHeader.jsx +4 -6
- package/src/Prebuilt/components/Header/HeaderComponents.jsx +10 -5
- package/src/Prebuilt/components/Header/ParticipantFilter.jsx +2 -2
- package/src/Prebuilt/components/Header/ParticipantList.jsx +2 -2
- package/src/Prebuilt/components/Header/StreamActions.jsx +9 -19
- package/src/Prebuilt/components/Header/StreamingHeader.jsx +5 -6
- package/src/Prebuilt/components/HlsStatsOverlay.jsx +2 -2
- package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.jsx +102 -0
- package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.stories.tsx +40 -0
- package/src/Prebuilt/components/LeaveRoom.jsx +11 -11
- package/src/Prebuilt/components/MetaActions.jsx +2 -2
- package/src/Prebuilt/components/MoreSettings/BulkRoleChangeModal.jsx +2 -2
- package/src/Prebuilt/components/MoreSettings/ChangeSelfRole.jsx +1 -1
- package/src/Prebuilt/components/MoreSettings/MoreSettings.jsx +1 -0
- package/src/Prebuilt/components/Notifications/HLSFailureModal.jsx +69 -0
- package/src/Prebuilt/components/Notifications/Notifications.jsx +1 -3
- package/src/Prebuilt/components/Notifications/PermissionErrorModal.jsx +108 -26
- package/src/Prebuilt/components/Notifications/ReconnectNotifications.jsx +1 -1
- package/src/Prebuilt/components/PIP/pipUtils.js +2 -2
- package/src/Prebuilt/components/Playlist/Playlist.jsx +4 -4
- package/src/Prebuilt/components/Playlist/PlaylistControls.jsx +3 -3
- package/src/Prebuilt/components/Playlist/PlaylistItem.jsx +3 -3
- package/src/Prebuilt/components/Playlist/VideoPlayer.jsx +4 -4
- package/src/Prebuilt/components/PostLeave.jsx +4 -4
- package/src/Prebuilt/components/Preview/PreviewContainer.jsx +17 -6
- package/src/Prebuilt/components/Preview/PreviewForm.jsx +74 -0
- package/src/Prebuilt/components/Preview/PreviewJoin.jsx +100 -37
- package/src/Prebuilt/components/RoleChangeModal.jsx +3 -3
- package/src/Prebuilt/components/ScreenshareDisplay.jsx +2 -2
- package/src/Prebuilt/components/Settings/DeviceSettings.jsx +3 -9
- package/src/Prebuilt/components/Settings/SettingsModal.jsx +8 -32
- package/src/Prebuilt/components/Settings/StartRecording.jsx +4 -12
- package/src/Prebuilt/components/Settings/SwitchWithLabel.jsx +2 -3
- package/src/Prebuilt/components/Settings/common.js +26 -0
- package/src/Prebuilt/components/StatsForNerds.jsx +5 -5
- package/src/Prebuilt/components/Streaming/Common.jsx +11 -11
- package/src/Prebuilt/components/Streaming/HLSStreaming.jsx +6 -12
- package/src/Prebuilt/components/Streaming/RTMPStreaming.jsx +4 -6
- package/src/Prebuilt/components/Streaming/StreamingLanding.jsx +4 -4
- package/src/Prebuilt/components/TileMenu.jsx +7 -7
- package/src/Prebuilt/components/Toast/ToastConfig.jsx +12 -20
- package/src/Prebuilt/components/conference.jsx +9 -2
- package/src/Prebuilt/components/hooks/useDropdownSelection.jsx +1 -4
- package/src/Prebuilt/components/pdfAnnotator/pdfErrorView.jsx +2 -2
- package/src/Prebuilt/components/pdfAnnotator/pdfFileOptions.jsx +1 -1
- package/src/Prebuilt/components/pdfAnnotator/pdfHeader.jsx +1 -1
- package/src/Prebuilt/components/pdfAnnotator/pdfInfo.jsx +2 -2
- package/src/Prebuilt/components/pdfAnnotator/shareScreenOptions.jsx +12 -20
- package/src/Prebuilt/components/pdfAnnotator/uploadedFile.jsx +4 -4
- package/src/Prebuilt/images/Logo.svg +8 -0
- package/src/Prebuilt/images/first_person.png +0 -0
- package/src/Prebuilt/images/rtmp.png +0 -0
- package/src/Prebuilt/index.d.ts +6 -1
- package/src/Prebuilt/layouts/HLSView.jsx +1 -1
- package/src/Prebuilt/layouts/InsetView.jsx +0 -3
- package/src/Prebuilt/layouts/NonPublisherView.jsx +2 -2
- package/src/Prebuilt/layouts/SidePane.jsx +1 -1
- package/src/Prebuilt/layouts/WaitingView.jsx +2 -2
- package/src/Prebuilt/layouts/mainView.jsx +42 -5
- package/src/Prebuilt/plugins/FlyingEmoji.jsx +2 -2
- package/src/Prebuilt/plugins/VirtualBackground/VirtualBackground.jsx +1 -0
- package/src/Prebuilt/plugins/whiteboard/ToggleWhiteboard.jsx +1 -3
- package/src/Prebuilt/primitives/DialogContent.jsx +4 -4
- package/src/Prebuilt/primitives/DropdownTrigger.jsx +3 -3
- package/src/Prebuilt/provider/roomLayoutProvider/constants/index.ts +33 -0
- package/src/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.ts +57 -0
- package/src/Prebuilt/provider/roomLayoutProvider/index.tsx +26 -0
- package/src/Progress/index.tsx +2 -2
- package/src/RadioGroup/RadioGroup.tsx +3 -3
- package/src/ReactSelect/ReactSelect.stories.tsx +7 -7
- package/src/ReactSelect/ReactSelect.tsx +8 -8
- package/src/Select/Select.tsx +6 -6
- package/src/Slider/Slider.tsx +5 -5
- package/src/Stats/Stats.tsx +12 -2
- package/src/Stats/StyledStats.tsx +3 -3
- package/src/Switch/Switch.tsx +5 -5
- package/src/Tabs/Tabs.stories.tsx +2 -2
- package/src/Tabs/Tabs.tsx +2 -2
- package/src/Text/Text.tsx +2 -2
- package/src/Theme/ThemeProvider.tsx +4 -7
- package/src/Theme/ThemeStory.jsx +17 -19
- package/src/Theme/base.config.ts +31 -59
- package/src/Theme/index.tsx +0 -1
- package/src/Theme/stitches.config.ts +2 -7
- package/src/TileMenu/StyledMenuTile.tsx +11 -8
- package/src/Toast/Toast.tsx +10 -9
- package/src/Tooltip/Tooltip.stories.tsx +1 -1
- package/src/Tooltip/Tooltip.tsx +4 -4
- package/src/Video/Video.tsx +1 -1
- package/src/VideoTile/StyledVideoTile.tsx +12 -12
- package/src/assets/android-perm-0.png +0 -0
- package/src/assets/android-perm-1.png +0 -0
- package/src/assets/ios-perm-0.png +0 -0
- package/src/fixtures/chats.ts +1 -1
- package/dist/HLSView-3RDXRV7Y.js.map +0 -7
- package/dist/Theme/themes.d.ts +0 -64
- package/dist/chunk-7YUYZ64D.js.map +0 -7
- package/dist/chunk-HCAGFNXW.js.map +0 -7
- package/dist/chunk-KYYP6ZVK.js.map +0 -7
- package/dist/chunk-ULXGBUSC.js +0 -65
- package/dist/chunk-ULXGBUSC.js.map +0 -7
- package/dist/conference-IDNRO4WK.js.map +0 -7
- package/src/Prebuilt/components/Preview/PreviewName.jsx +0 -37
- package/src/Prebuilt/components/Streaming/RTMPIcon.jsx +0 -24
- package/src/Prebuilt/hms.js +0 -7
- package/src/Prebuilt/plugins/confetti.jsx +0 -60
- package/src/Theme/themes.ts +0 -70
- /package/dist/{ActiveSpeakerView-H3VYXANB.js.map → ActiveSpeakerView-4XPIRZOK.js.map} +0 -0
- /package/dist/{PinnedTrackView-453PELNU.js.map → PinnedTrackView-GGTCNH5V.js.map} +0 -0
- /package/dist/{transcription-BTSB7FZH.js.map → transcription-PYTSSAOB.js.map} +0 -0
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Flex
|
|
3
|
-
import {
|
|
2
|
+
import { Flex } from '../../../';
|
|
3
|
+
import { SpeakerTag } from './HeaderComponents';
|
|
4
4
|
import { ParticipantCount } from './ParticipantList';
|
|
5
5
|
import { StreamActions } from './StreamActions';
|
|
6
6
|
|
|
7
|
-
export const ConferencingHeader = (
|
|
7
|
+
export const ConferencingHeader = () => {
|
|
8
8
|
return (
|
|
9
9
|
<Flex justify="between" align="center" css={{ position: 'relative', height: '100%' }}>
|
|
10
10
|
<Flex align="center" css={{ position: 'absolute', left: '$10' }}>
|
|
11
|
-
<
|
|
12
|
-
<VerticalDivider css={{ ml: '$8' }} />
|
|
13
|
-
{!isPreview ? <SpeakerTag /> : null}
|
|
11
|
+
<SpeakerTag />
|
|
14
12
|
</Flex>
|
|
15
13
|
|
|
16
14
|
<Flex
|
|
@@ -3,13 +3,17 @@ import { useMedia } from 'react-use';
|
|
|
3
3
|
import { selectDominantSpeaker, selectIsConnectedToRoom, useHMSStore } from '@100mslive/react-sdk';
|
|
4
4
|
import { VolumeOneIcon } from '@100mslive/react-icons';
|
|
5
5
|
import { config as cssConfig, Flex, styled, Text, textEllipsis } from '../../../';
|
|
6
|
-
import {
|
|
6
|
+
import { useRoomLayout } from '../../provider/roomLayoutProvider';
|
|
7
7
|
import { isStreamingKit } from '../../common/utils';
|
|
8
8
|
|
|
9
9
|
export const SpeakerTag = () => {
|
|
10
10
|
const dominantSpeaker = useHMSStore(selectDominantSpeaker);
|
|
11
11
|
return dominantSpeaker && dominantSpeaker.name ? (
|
|
12
|
-
<Flex
|
|
12
|
+
<Flex
|
|
13
|
+
align="center"
|
|
14
|
+
justify="center"
|
|
15
|
+
css={{ flex: '1 1 0', color: '$on_primary_high', '@md': { display: 'none' } }}
|
|
16
|
+
>
|
|
13
17
|
<VolumeOneIcon />
|
|
14
18
|
<Text variant="md" css={{ ...textEllipsis(200), ml: '$2' }} title={dominantSpeaker.name}>
|
|
15
19
|
{dominantSpeaker.name}
|
|
@@ -22,20 +26,21 @@ export const SpeakerTag = () => {
|
|
|
22
26
|
|
|
23
27
|
const LogoImg = styled('img', {
|
|
24
28
|
maxHeight: '$14',
|
|
25
|
-
p: '$2',
|
|
26
29
|
w: 'auto',
|
|
30
|
+
objectFit: 'contain',
|
|
27
31
|
'@md': {
|
|
28
32
|
maxHeight: '$12',
|
|
29
33
|
},
|
|
30
34
|
});
|
|
31
35
|
|
|
32
36
|
export const Logo = () => {
|
|
33
|
-
const
|
|
37
|
+
const roomLayout = useRoomLayout();
|
|
38
|
+
const logo = roomLayout?.logo?.url;
|
|
34
39
|
const isMobile = useMedia(cssConfig.media.md);
|
|
35
40
|
const isConnected = useHMSStore(selectIsConnectedToRoom);
|
|
36
41
|
// Hide logo for now as there is not enough space
|
|
37
42
|
if (isConnected && isMobile && isStreamingKit()) {
|
|
38
43
|
return null;
|
|
39
44
|
}
|
|
40
|
-
return logo ? <LogoImg src={logo} alt="Brand Logo"
|
|
45
|
+
return logo ? <LogoImg src={logo} alt="Brand Logo" /> : null;
|
|
41
46
|
};
|
|
@@ -19,7 +19,7 @@ export const ParticipantFilter = ({ selection, onSelection, isConnected, roles }
|
|
|
19
19
|
asChild
|
|
20
20
|
data-testid="participant_list_filter"
|
|
21
21
|
css={{
|
|
22
|
-
border: '1px solid $
|
|
22
|
+
border: '1px solid $on_surface_low',
|
|
23
23
|
r: '$0',
|
|
24
24
|
p: '$2 $4',
|
|
25
25
|
}}
|
|
@@ -29,7 +29,7 @@ export const ParticipantFilter = ({ selection, onSelection, isConnected, roles }
|
|
|
29
29
|
<Text variant="sm" css={{ ...textEllipsis(80) }}>
|
|
30
30
|
{selectionValue || 'Everyone'}
|
|
31
31
|
</Text>
|
|
32
|
-
<Box css={{ ml: '$2', color: '$
|
|
32
|
+
<Box css={{ ml: '$2', color: '$on_surface_low' }}>
|
|
33
33
|
{open ? <ChevronUpIcon width={14} height={14} /> : <ChevronDownIcon width={14} height={14} />}
|
|
34
34
|
</Box>
|
|
35
35
|
</Flex>
|
|
@@ -258,7 +258,7 @@ const ParticipantMoreActions = ({ onRoleChange, peerId }) => {
|
|
|
258
258
|
}}
|
|
259
259
|
>
|
|
260
260
|
<RemoveUserIcon />
|
|
261
|
-
<Text css={{ ml: '$4', color: '$
|
|
261
|
+
<Text css={{ ml: '$4', color: '$alert_error_default' }}>Remove Participant</Text>
|
|
262
262
|
</Dropdown.Item>
|
|
263
263
|
)}
|
|
264
264
|
</Dropdown.Content>
|
|
@@ -313,7 +313,7 @@ export const ParticipantSearch = ({ onSearch, placeholder }) => {
|
|
|
313
313
|
left: '$4',
|
|
314
314
|
top: '$2',
|
|
315
315
|
transform: 'translateY(50%)',
|
|
316
|
-
color: '$
|
|
316
|
+
color: '$on_surface_medium',
|
|
317
317
|
}}
|
|
318
318
|
>
|
|
319
319
|
<SearchIcon />
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import React, { Fragment,
|
|
1
|
+
import React, { Fragment, useState } from 'react';
|
|
2
2
|
import { useMedia } from 'react-use';
|
|
3
3
|
import {
|
|
4
|
-
|
|
4
|
+
HMSRoomState,
|
|
5
5
|
selectIsConnectedToRoom,
|
|
6
6
|
selectPermissions,
|
|
7
|
+
selectRoomState,
|
|
7
8
|
useHMSActions,
|
|
8
9
|
useHMSStore,
|
|
9
10
|
useRecordingStreaming,
|
|
@@ -15,7 +16,7 @@ import { ResolutionInput } from '../Streaming/ResolutionInput';
|
|
|
15
16
|
import { getResolution } from '../Streaming/RTMPStreaming';
|
|
16
17
|
import { ToastManager } from '../Toast/ToastManager';
|
|
17
18
|
import { AdditionalRoomState, getRecordingText } from './AdditionalRoomState';
|
|
18
|
-
import {
|
|
19
|
+
import { useSidepaneToggle } from '../AppData/useSidepane';
|
|
19
20
|
import { useSetAppDataByKey } from '../AppData/useUISettings';
|
|
20
21
|
import { APP_DATA, RTMP_RECORD_DEFAULT_RESOLUTION, SIDE_PANE_OPTIONS } from '../../common/constants';
|
|
21
22
|
|
|
@@ -26,7 +27,7 @@ export const LiveStatus = () => {
|
|
|
26
27
|
}
|
|
27
28
|
return (
|
|
28
29
|
<Flex align="center">
|
|
29
|
-
<Box css={{ w: '$4', h: '$4', r: '$round', bg: '$
|
|
30
|
+
<Box css={{ w: '$4', h: '$4', r: '$round', bg: '$alert_error_default', mr: '$2' }} />
|
|
30
31
|
<Text>
|
|
31
32
|
Live
|
|
32
33
|
<Text as="span" css={{ '@md': { display: 'none' } }}>
|
|
@@ -61,7 +62,7 @@ export const RecordingStatus = () => {
|
|
|
61
62
|
>
|
|
62
63
|
<Box
|
|
63
64
|
css={{
|
|
64
|
-
color: '$
|
|
65
|
+
color: '$alert_error_default',
|
|
65
66
|
}}
|
|
66
67
|
>
|
|
67
68
|
<RecordIcon width={24} height={24} />
|
|
@@ -72,16 +73,6 @@ export const RecordingStatus = () => {
|
|
|
72
73
|
|
|
73
74
|
const EndStream = () => {
|
|
74
75
|
const toggleStreaming = useSidepaneToggle(SIDE_PANE_OPTIONS.STREAMING);
|
|
75
|
-
const sidePane = useSidepaneState();
|
|
76
|
-
useEffect(() => {
|
|
77
|
-
if (window && !sidePane) {
|
|
78
|
-
const userStartedStream = window.sessionStorage.getItem('userStartedStream');
|
|
79
|
-
if (userStartedStream === 'true') {
|
|
80
|
-
toggleStreaming();
|
|
81
|
-
window.sessionStorage.setItem('userStartedStream', '');
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}, [sidePane, toggleStreaming]);
|
|
85
76
|
|
|
86
77
|
return (
|
|
87
78
|
<Button data-testid="end_stream" variant="danger" icon onClick={toggleStreaming}>
|
|
@@ -93,7 +84,6 @@ const EndStream = () => {
|
|
|
93
84
|
|
|
94
85
|
const StartRecording = () => {
|
|
95
86
|
const permissions = useHMSStore(selectPermissions);
|
|
96
|
-
const recordingUrl = useHMSStore(selectAppData(APP_DATA.recordingUrl));
|
|
97
87
|
const [resolution, setResolution] = useState(RTMP_RECORD_DEFAULT_RESOLUTION);
|
|
98
88
|
const [open, setOpen] = useState(false);
|
|
99
89
|
const [recordingStarted, setRecordingState] = useSetAppDataByKey(APP_DATA.recordingStarted);
|
|
@@ -115,7 +105,7 @@ const StartRecording = () => {
|
|
|
115
105
|
</Popover.Trigger>
|
|
116
106
|
<Popover.Portal>
|
|
117
107
|
<Popover.Content align="end" sideOffset={8} css={{ w: '$64' }}>
|
|
118
|
-
<Text variant="body" css={{ color: '$
|
|
108
|
+
<Text variant="body" css={{ color: '$on_surface_medium' }}>
|
|
119
109
|
Are you sure you want to end the recording?
|
|
120
110
|
</Text>
|
|
121
111
|
<Button
|
|
@@ -175,7 +165,6 @@ const StartRecording = () => {
|
|
|
175
165
|
try {
|
|
176
166
|
setRecordingState(true);
|
|
177
167
|
await hmsActions.startRTMPOrRecording({
|
|
178
|
-
meetingURL: recordingUrl,
|
|
179
168
|
resolution: getResolution(resolution),
|
|
180
169
|
record: true,
|
|
181
170
|
});
|
|
@@ -208,12 +197,13 @@ export const StreamActions = () => {
|
|
|
208
197
|
const permissions = useHMSStore(selectPermissions);
|
|
209
198
|
const isMobile = useMedia(cssConfig.media.md);
|
|
210
199
|
const { isStreamingOn } = useRecordingStreaming();
|
|
200
|
+
const roomState = useHMSStore(selectRoomState);
|
|
211
201
|
|
|
212
202
|
return (
|
|
213
203
|
<Flex align="center" css={{ gap: '$4' }}>
|
|
214
204
|
<AdditionalRoomState />
|
|
215
205
|
<Flex align="center" css={{ gap: '$4', '@md': { display: 'none' } }}>
|
|
216
|
-
<LiveStatus />
|
|
206
|
+
{roomState !== HMSRoomState.Preview ? <LiveStatus /> : null}
|
|
217
207
|
<RecordingStatus />
|
|
218
208
|
</Flex>
|
|
219
209
|
{isConnected && !isMobile ? <StartRecording /> : null}
|
|
@@ -4,11 +4,11 @@ import { config as cssConfig, Flex } from '../../../';
|
|
|
4
4
|
import { EmojiReaction } from '../EmojiReaction';
|
|
5
5
|
import { LeaveRoom } from '../LeaveRoom';
|
|
6
6
|
import MetaActions from '../MetaActions';
|
|
7
|
-
import {
|
|
7
|
+
import { SpeakerTag } from './HeaderComponents';
|
|
8
8
|
import { ParticipantCount } from './ParticipantList';
|
|
9
9
|
import { LiveStatus, RecordingStatus, StreamActions } from './StreamActions';
|
|
10
10
|
|
|
11
|
-
export const StreamingHeader = (
|
|
11
|
+
export const StreamingHeader = () => {
|
|
12
12
|
const isMobile = useMedia(cssConfig.media.md);
|
|
13
13
|
return (
|
|
14
14
|
<Flex justify="between" align="center" css={{ position: 'relative', height: '100%' }}>
|
|
@@ -19,15 +19,14 @@ export const StreamingHeader = ({ isPreview }) => {
|
|
|
19
19
|
left: '$10',
|
|
20
20
|
}}
|
|
21
21
|
>
|
|
22
|
-
|
|
23
|
-
{isMobile && (
|
|
22
|
+
{isMobile ? (
|
|
24
23
|
<Flex align="center" gap={2}>
|
|
25
24
|
<LeaveRoom />
|
|
26
25
|
<LiveStatus />
|
|
27
26
|
<RecordingStatus />
|
|
28
27
|
</Flex>
|
|
29
|
-
)}
|
|
30
|
-
|
|
28
|
+
) : null}
|
|
29
|
+
<SpeakerTag />
|
|
31
30
|
</Flex>
|
|
32
31
|
|
|
33
32
|
<Flex
|
|
@@ -13,7 +13,7 @@ export function HlsStatsOverlay({ hlsStatsState, onClose }) {
|
|
|
13
13
|
marginLeft: '$8',
|
|
14
14
|
padding: '$8 $8 $10',
|
|
15
15
|
zIndex: 10,
|
|
16
|
-
backgroundColor: '
|
|
16
|
+
backgroundColor: '$surface_brighter',
|
|
17
17
|
borderRadius: '$1',
|
|
18
18
|
}}
|
|
19
19
|
direction="column"
|
|
@@ -44,7 +44,7 @@ export function HlsStatsOverlay({ hlsStatsState, onClose }) {
|
|
|
44
44
|
<HlsStatsRow label="distance from live">
|
|
45
45
|
{getDurationFromSeconds(hlsStatsState.distanceFromLive / 1000)}
|
|
46
46
|
</HlsStatsRow>
|
|
47
|
-
<HlsStatsRow label="Dropped frames">{
|
|
47
|
+
<HlsStatsRow label="Dropped frames">{hlsStatsState?.droppedFrames}</HlsStatsRow>
|
|
48
48
|
</Flex>
|
|
49
49
|
);
|
|
50
50
|
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { VerticalMenuIcon } from '@100mslive/react-icons';
|
|
2
|
+
import { Dropdown } from '../../../Dropdown';
|
|
3
|
+
import { Box, Flex } from '../../../Layout';
|
|
4
|
+
import { styled } from '../../../Theme';
|
|
5
|
+
import { Tooltip } from '../../../Tooltip';
|
|
6
|
+
import IconButton from '../../IconButton';
|
|
7
|
+
|
|
8
|
+
const IconSection = styled(IconButton, {
|
|
9
|
+
w: 'unset',
|
|
10
|
+
h: '$14',
|
|
11
|
+
p: '$4',
|
|
12
|
+
r: '$1',
|
|
13
|
+
borderTopRightRadius: 0,
|
|
14
|
+
borderColor: '$border_default',
|
|
15
|
+
borderBottomRightRadius: 0,
|
|
16
|
+
'@md': {
|
|
17
|
+
mx: 0,
|
|
18
|
+
borderTopRightRadius: '$1',
|
|
19
|
+
borderBottomRightRadius: '$1',
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const OptionsSection = styled(IconButton, {
|
|
24
|
+
w: 'unset',
|
|
25
|
+
h: '$14',
|
|
26
|
+
p: '$4',
|
|
27
|
+
r: '$1',
|
|
28
|
+
borderTopLeftRadius: 0,
|
|
29
|
+
borderColor: '$border_default',
|
|
30
|
+
borderBottomLeftRadius: 0,
|
|
31
|
+
borderLeftWidth: 0,
|
|
32
|
+
'&:not([disabled]):focus-visible': {
|
|
33
|
+
boxShadow: 'none',
|
|
34
|
+
},
|
|
35
|
+
'@md': {
|
|
36
|
+
display: 'none',
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
export const IconButtonWithOptions = ({
|
|
41
|
+
tooltipMessage = '',
|
|
42
|
+
icon,
|
|
43
|
+
options = [],
|
|
44
|
+
active,
|
|
45
|
+
onClick = () => {
|
|
46
|
+
return;
|
|
47
|
+
},
|
|
48
|
+
key = '',
|
|
49
|
+
}) => {
|
|
50
|
+
const bgCss = { backgroundColor: active ? '$transparent' : '$secondary_dim' };
|
|
51
|
+
const iconCss = { color: active ? '$on_surface_high' : '$on_primary_high' };
|
|
52
|
+
return (
|
|
53
|
+
<Flex>
|
|
54
|
+
<IconSection css={bgCss} onClick={onClick} key={key}>
|
|
55
|
+
<Tooltip disabled={!tooltipMessage} title={tooltipMessage}>
|
|
56
|
+
<Flex align="center" justify="center" css={iconCss}>
|
|
57
|
+
{icon}
|
|
58
|
+
</Flex>
|
|
59
|
+
</Tooltip>
|
|
60
|
+
</IconSection>
|
|
61
|
+
<Dropdown.Root>
|
|
62
|
+
<Dropdown.Trigger asChild>
|
|
63
|
+
<OptionsSection css={bgCss}>
|
|
64
|
+
<Tooltip title="View Options">
|
|
65
|
+
<Box css={iconCss}>
|
|
66
|
+
<VerticalMenuIcon />
|
|
67
|
+
</Box>
|
|
68
|
+
</Tooltip>
|
|
69
|
+
</OptionsSection>
|
|
70
|
+
</Dropdown.Trigger>
|
|
71
|
+
<Dropdown.Content
|
|
72
|
+
sideOffset={5}
|
|
73
|
+
align="center"
|
|
74
|
+
css={{
|
|
75
|
+
w: '$64',
|
|
76
|
+
maxHeight: '$96',
|
|
77
|
+
p: 0,
|
|
78
|
+
border: 'none',
|
|
79
|
+
}}
|
|
80
|
+
>
|
|
81
|
+
{options.map((option, index) => (
|
|
82
|
+
<Dropdown.Item
|
|
83
|
+
key={option.title}
|
|
84
|
+
css={{
|
|
85
|
+
flexDirection: 'column',
|
|
86
|
+
alignItems: 'flex-start',
|
|
87
|
+
backgroundColor: option.active ? '$surface_bright' : '$surface_dim',
|
|
88
|
+
borderTop: index === 0 ? 'none' : '1px solid $border_default',
|
|
89
|
+
'&:hover': {
|
|
90
|
+
cursor: 'pointer',
|
|
91
|
+
},
|
|
92
|
+
p: '0',
|
|
93
|
+
}}
|
|
94
|
+
>
|
|
95
|
+
{option.content}
|
|
96
|
+
</Dropdown.Item>
|
|
97
|
+
))}
|
|
98
|
+
</Dropdown.Content>
|
|
99
|
+
</Dropdown.Root>
|
|
100
|
+
</Flex>
|
|
101
|
+
);
|
|
102
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Meta } from '@storybook/react';
|
|
3
|
+
import { MicIcon } from '@100mslive/react-icons';
|
|
4
|
+
import { Box } from '../../../Layout';
|
|
5
|
+
import { Text } from '../../../Text';
|
|
6
|
+
import { IconButtonWithOptions } from './IconButtonWithOptions';
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
title: 'Components/IconButtonWithOptions',
|
|
10
|
+
component: IconButtonWithOptions,
|
|
11
|
+
argTypes: {
|
|
12
|
+
tooltipMessage: { control: 'text' },
|
|
13
|
+
icon: { control: 'object' },
|
|
14
|
+
options: { control: 'object' },
|
|
15
|
+
active: { control: 'boolean' },
|
|
16
|
+
onClick: { control: 'function' },
|
|
17
|
+
key: { control: 'string' },
|
|
18
|
+
},
|
|
19
|
+
} as Meta;
|
|
20
|
+
|
|
21
|
+
const Template = args => (
|
|
22
|
+
<Box css={{ ml: '$20', bg: '$background_dim', p: '$8' }}>
|
|
23
|
+
<IconButtonWithOptions {...args} />
|
|
24
|
+
</Box>
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
export const Default = Template.bind({});
|
|
28
|
+
Default.args = {
|
|
29
|
+
tooltipMessage: 'Click me!',
|
|
30
|
+
icon: <MicIcon height={32} width={32} />,
|
|
31
|
+
options: [
|
|
32
|
+
{ title: 'Option 1', content: <Text>Some content</Text> },
|
|
33
|
+
{ title: 'Option 2', content: <Text>Some more content</Text> },
|
|
34
|
+
],
|
|
35
|
+
active: true,
|
|
36
|
+
onClick: () => {
|
|
37
|
+
return;
|
|
38
|
+
},
|
|
39
|
+
key: '',
|
|
40
|
+
};
|
|
@@ -89,7 +89,7 @@ export const LeaveRoom = () => {
|
|
|
89
89
|
asChild
|
|
90
90
|
css={{
|
|
91
91
|
'&[data-state="open"]': {
|
|
92
|
-
bg: '$
|
|
92
|
+
bg: '$alert_error_dim',
|
|
93
93
|
},
|
|
94
94
|
}}
|
|
95
95
|
>
|
|
@@ -106,27 +106,27 @@ export const LeaveRoom = () => {
|
|
|
106
106
|
data-testid="end_room_btn"
|
|
107
107
|
>
|
|
108
108
|
<Flex gap={4}>
|
|
109
|
-
<Box css={{ color: '$
|
|
109
|
+
<Box css={{ color: '$alert_error_default' }}>
|
|
110
110
|
<AlertTriangleIcon />
|
|
111
111
|
</Box>
|
|
112
112
|
<Flex direction="column" align="start">
|
|
113
|
-
<Text variant="lg" css={{ c: '$
|
|
113
|
+
<Text variant="lg" css={{ c: '$alert_error_default' }}>
|
|
114
114
|
End Room for All
|
|
115
115
|
</Text>
|
|
116
|
-
<Text variant="sm" css={{ c: '$
|
|
116
|
+
<Text variant="sm" css={{ c: '$on_surface_medium', mt: '$2' }}>
|
|
117
117
|
Warning: You can’t undo this action
|
|
118
118
|
</Text>
|
|
119
119
|
</Flex>
|
|
120
120
|
</Flex>
|
|
121
121
|
</Dropdown.Item>
|
|
122
|
-
<Dropdown.Item css={{ bg: '$
|
|
122
|
+
<Dropdown.Item css={{ bg: '$surface_default' }} onClick={leaveRoom} data-testid="just_leave_btn">
|
|
123
123
|
<Flex gap={4}>
|
|
124
124
|
<Box>
|
|
125
125
|
<ExitIcon />
|
|
126
126
|
</Box>
|
|
127
127
|
<Flex direction="column" align="start">
|
|
128
128
|
<Text variant="lg">Leave {isStreamKit ? 'Studio' : 'Room'}</Text>
|
|
129
|
-
<Text variant="sm" css={{ c: '$
|
|
129
|
+
<Text variant="sm" css={{ c: '$on_surface_medium', mt: '$2' }}>
|
|
130
130
|
You can always rejoin later
|
|
131
131
|
</Text>
|
|
132
132
|
</Flex>
|
|
@@ -174,16 +174,16 @@ export const LeaveRoom = () => {
|
|
|
174
174
|
};
|
|
175
175
|
|
|
176
176
|
const LeaveIconButton = styled(IconButton, {
|
|
177
|
-
color: '$
|
|
177
|
+
color: '$on_primary_high',
|
|
178
178
|
h: '$14',
|
|
179
179
|
px: '$8',
|
|
180
180
|
r: '$1',
|
|
181
|
-
bg: '$
|
|
181
|
+
bg: '$alert_error_default',
|
|
182
182
|
'&:not([disabled]):hover': {
|
|
183
|
-
bg: '$
|
|
183
|
+
bg: '$alert_error_default',
|
|
184
184
|
},
|
|
185
185
|
'&:not([disabled]):active': {
|
|
186
|
-
bg: '$
|
|
186
|
+
bg: '$alert_error_default',
|
|
187
187
|
},
|
|
188
188
|
'@md': {
|
|
189
189
|
px: '$4',
|
|
@@ -192,7 +192,7 @@ const LeaveIconButton = styled(IconButton, {
|
|
|
192
192
|
});
|
|
193
193
|
|
|
194
194
|
const MenuTriggerButton = styled(LeaveIconButton, {
|
|
195
|
-
borderLeft: '1px solid $
|
|
195
|
+
borderLeft: '1px solid $alert_error_dim',
|
|
196
196
|
borderTopLeftRadius: 0,
|
|
197
197
|
borderBottomLeftRadius: 0,
|
|
198
198
|
px: '$3',
|
|
@@ -25,14 +25,14 @@ const MetaActions = ({ isMobile = false, compact = false }) => {
|
|
|
25
25
|
<IconButton
|
|
26
26
|
onClick={toggleHandRaise}
|
|
27
27
|
active={!isHandRaised}
|
|
28
|
-
data-testid={
|
|
28
|
+
data-testid={isMobile ? 'raise_hand_btn_mobile' : 'raise_hand_btn'}
|
|
29
29
|
>
|
|
30
30
|
<HandIcon />
|
|
31
31
|
</IconButton>
|
|
32
32
|
</Tooltip>
|
|
33
33
|
)}
|
|
34
34
|
{isBRBEnabled && (
|
|
35
|
-
<Tooltip title={
|
|
35
|
+
<Tooltip title={isBRBOn ? `I'm back` : `I'll be right back`}>
|
|
36
36
|
<IconButton onClick={toggleBRB} active={!isBRBOn} data-testid="brb_btn">
|
|
37
37
|
<BrbIcon />
|
|
38
38
|
</IconButton>
|
|
@@ -121,7 +121,7 @@ export const BulkRoleChangeModal = ({ onOpenChange }) => {
|
|
|
121
121
|
</DialogRow>
|
|
122
122
|
<DialogRow>
|
|
123
123
|
{errorMessage && (
|
|
124
|
-
<Flex gap={2} css={{ c: '$
|
|
124
|
+
<Flex gap={2} css={{ c: '$alert_error_default', w: '70%', ml: 'auto' }}>
|
|
125
125
|
<AlertTriangleIcon />
|
|
126
126
|
<Text css={{ c: 'inherit' }}>{errorMessage}</Text>
|
|
127
127
|
</Flex>
|
|
@@ -129,7 +129,7 @@ export const BulkRoleChangeModal = ({ onOpenChange }) => {
|
|
|
129
129
|
</DialogRow>
|
|
130
130
|
<DialogRow justify="end">
|
|
131
131
|
<Button variant="primary" onClick={changeBulkRole} disabled={!(selectedRole && selectedBulkRole.length > 0)}>
|
|
132
|
-
{isSubmiting && <Loading css={{ color: '$
|
|
132
|
+
{isSubmiting && <Loading css={{ color: '$on_primary_medium' }} />}
|
|
133
133
|
Apply
|
|
134
134
|
</Button>
|
|
135
135
|
</DialogRow>
|
|
@@ -43,7 +43,7 @@ export const ChangeSelfRole = ({ onClick }) => {
|
|
|
43
43
|
</Text>
|
|
44
44
|
<ArrowRightIcon />
|
|
45
45
|
</Dropdown.TriggerItem>
|
|
46
|
-
<Dropdown.SubMenuContent sideOffset={8} alignOffset={-5} css={{ '@md': { w: '$64' } }}>
|
|
46
|
+
<Dropdown.SubMenuContent sideOffset={8} alignOffset={-5} css={{ py: '$0', '@md': { w: '$64' } }}>
|
|
47
47
|
{availableSelfChangeRoles.map(role => (
|
|
48
48
|
<Dropdown.Item
|
|
49
49
|
key={role}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import React, { useCallback, useState } from 'react';
|
|
2
|
+
import { selectHLSState, useHMSActions, useHMSStore } from '@100mslive/react-sdk';
|
|
3
|
+
import { Button } from '../../../Button';
|
|
4
|
+
import { Flex } from '../../../Layout';
|
|
5
|
+
import { Dialog } from '../../../Modal';
|
|
6
|
+
import { Text } from '../../../Text';
|
|
7
|
+
import { useSetAppDataByKey } from '../AppData/useUISettings';
|
|
8
|
+
import { APP_DATA } from '../../common/constants';
|
|
9
|
+
|
|
10
|
+
export function HLSFailureModal() {
|
|
11
|
+
const { hlsError } = useHMSStore(selectHLSState).error || false;
|
|
12
|
+
const [openModal, setOpenModal] = useState(!!hlsError);
|
|
13
|
+
const hmsActions = useHMSActions();
|
|
14
|
+
const [isHLSStarted, setHLSStarted] = useSetAppDataByKey(APP_DATA.hlsStarted);
|
|
15
|
+
const startHLS = useCallback(async () => {
|
|
16
|
+
try {
|
|
17
|
+
if (isHLSStarted) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
setHLSStarted(true);
|
|
21
|
+
await hmsActions.startHLSStreaming({});
|
|
22
|
+
} catch (error) {
|
|
23
|
+
if (error.message.includes('invalid input')) {
|
|
24
|
+
await startHLS();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
setHLSStarted(false);
|
|
28
|
+
}
|
|
29
|
+
}, [hmsActions, isHLSStarted, setHLSStarted]);
|
|
30
|
+
|
|
31
|
+
return hlsError ? (
|
|
32
|
+
<Dialog.Root
|
|
33
|
+
open={openModal}
|
|
34
|
+
onOpenChange={value => {
|
|
35
|
+
if (!value) {
|
|
36
|
+
setOpenModal(false);
|
|
37
|
+
}
|
|
38
|
+
}}
|
|
39
|
+
>
|
|
40
|
+
<Dialog.Portal>
|
|
41
|
+
<Dialog.Overlay />
|
|
42
|
+
<Dialog.Content css={{ w: 'min(360px, 90%)' }}>
|
|
43
|
+
<Dialog.Title
|
|
44
|
+
css={{
|
|
45
|
+
display: 'flex',
|
|
46
|
+
alignItems: 'center',
|
|
47
|
+
justifyContent: 'space-between',
|
|
48
|
+
borderBottom: '1px solid $border_default',
|
|
49
|
+
mt: '$4',
|
|
50
|
+
}}
|
|
51
|
+
>
|
|
52
|
+
<Text variant="h6" css={{ fontWeight: '$semiBold' }}>
|
|
53
|
+
Failed to Go Live
|
|
54
|
+
</Text>
|
|
55
|
+
</Dialog.Title>
|
|
56
|
+
<Text variant="sm" css={{ mb: '$10', color: '$on_surface_medium' }}>
|
|
57
|
+
Something went wrong and your live broadcast failed. Please try again.
|
|
58
|
+
</Text>
|
|
59
|
+
<Flex align="center" justify="between" css={{ w: '100%', gap: '$8' }}>
|
|
60
|
+
<Button outlined variant="standard" css={{ w: '100%' }} onClick={() => setOpenModal(false)}>
|
|
61
|
+
Dismiss
|
|
62
|
+
</Button>
|
|
63
|
+
<Button css={{ w: '100%' }}>Go Live</Button>
|
|
64
|
+
</Flex>
|
|
65
|
+
</Dialog.Content>
|
|
66
|
+
</Dialog.Portal>
|
|
67
|
+
</Dialog.Root>
|
|
68
|
+
) : null;
|
|
69
|
+
}
|
|
@@ -59,8 +59,6 @@ export function Notifications() {
|
|
|
59
59
|
inlineAction: true,
|
|
60
60
|
action: (
|
|
61
61
|
<Button
|
|
62
|
-
as="div"
|
|
63
|
-
variant="primary"
|
|
64
62
|
onClick={() => {
|
|
65
63
|
ToastManager.removeToast(toastId);
|
|
66
64
|
window.location.reload();
|
|
@@ -81,7 +79,7 @@ export function Notifications() {
|
|
|
81
79
|
}, 2000);
|
|
82
80
|
return;
|
|
83
81
|
}
|
|
84
|
-
// Autoplay error or user denied screen share(cancelled browser pop-up)
|
|
82
|
+
// Autoplay error or user denied screen share (cancelled browser pop-up)
|
|
85
83
|
if (notification.data?.code === 3008 || notification.data?.code === 3001 || notification.data?.code === 3011) {
|
|
86
84
|
return;
|
|
87
85
|
}
|