@100mslive/roomkit-react 0.1.1 → 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.
Files changed (242) hide show
  1. package/README.md +18 -0
  2. package/dist/Accordion/Accordion.d.ts +62 -138
  3. package/dist/Accordion/index.d.ts +62 -138
  4. package/dist/{ActiveSpeakerView-G32BDM5F.js → ActiveSpeakerView-4XPIRZOK.js} +6 -6
  5. package/dist/{ActiveSpeakerView-LW4WDBC6.css → ActiveSpeakerView-ADEYHQMU.css} +2 -2
  6. package/dist/{PinnedTrackView-OAA4HAID.css.map → ActiveSpeakerView-ADEYHQMU.css.map} +2 -2
  7. package/dist/Avatar/Avatar.d.ts +31 -69
  8. package/dist/Button/Button.d.ts +31 -69
  9. package/dist/Checkbox/Checkbox.d.ts +62 -138
  10. package/dist/Collapsible/Collapsible.d.ts +93 -207
  11. package/dist/Divider/Divider.d.ts +62 -138
  12. package/dist/Dropdown/Dropdown.d.ts +372 -828
  13. package/dist/Fieldset/Fieldset.d.ts +31 -69
  14. package/dist/Footer/Footer.d.ts +248 -552
  15. package/dist/{HLSView-DIQQF2PP.css → HLSView-DWEEMZ6Z.css} +2 -2
  16. package/dist/{HLSView-DIQQF2PP.css.map → HLSView-DWEEMZ6Z.css.map} +2 -2
  17. package/dist/{HLSView-ZYNT3HJD.js → HLSView-I26CVF5U.js} +16 -16
  18. package/dist/HLSView-I26CVF5U.js.map +7 -0
  19. package/dist/IconButton/IconButton.d.ts +31 -69
  20. package/dist/Input/Input.d.ts +189 -417
  21. package/dist/Label/Label.d.ts +31 -69
  22. package/dist/Layout/Box.d.ts +31 -69
  23. package/dist/Layout/Flex.d.ts +31 -69
  24. package/dist/Link/Link.d.ts +31 -69
  25. package/dist/Modal/Dialog.d.ts +248 -552
  26. package/dist/Modal/DialogContent.d.ts +217 -483
  27. package/dist/Pagination/StyledPagination.d.ts +124 -276
  28. package/dist/{PinnedTrackView-OAA4HAID.css → PinnedTrackView-5DPVVOZW.css} +2 -2
  29. package/dist/{conference-LE4T3ZNF.css.map → PinnedTrackView-5DPVVOZW.css.map} +2 -2
  30. package/dist/{PinnedTrackView-GTXL2UTS.js → PinnedTrackView-GGTCNH5V.js} +6 -6
  31. package/dist/Popover/index.d.ts +93 -207
  32. package/dist/Prebuilt/provider/roomLayoutProvider/constants/index.d.ts +2 -0
  33. package/dist/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.d.ts +9 -0
  34. package/dist/Prebuilt/provider/roomLayoutProvider/index.d.ts +9 -0
  35. package/dist/Progress/index.d.ts +62 -138
  36. package/dist/RadioGroup/RadioGroup.d.ts +93 -207
  37. package/dist/ReactSelect/ReactSelect.d.ts +310 -690
  38. package/dist/Select/Select.d.ts +93 -207
  39. package/dist/Slider/Slider.d.ts +31 -69
  40. package/dist/Stats/StyledStats.d.ts +186 -414
  41. package/dist/Switch/Switch.d.ts +31 -69
  42. package/dist/Tabs/Tabs.d.ts +124 -276
  43. package/dist/Text/Text.d.ts +31 -69
  44. package/dist/Theme/ThemeProvider.d.ts +63 -140
  45. package/dist/Theme/base.config.d.ts +31 -53
  46. package/dist/Theme/index.d.ts +0 -1
  47. package/dist/Theme/stitches.config.d.ts +404 -915
  48. package/dist/TileMenu/StyledMenuTile.d.ts +217 -483
  49. package/dist/Toast/Toast.d.ts +187 -415
  50. package/dist/Video/Video.d.ts +31 -69
  51. package/dist/VideoList/StyledVideoList.d.ts +93 -207
  52. package/dist/VideoTile/StyledVideoTile.d.ts +279 -621
  53. package/dist/{VirtualBackground-HWU22Q6S.js → VirtualBackground-ZRRE4DUA.js} +4 -3
  54. package/dist/{VirtualBackground-HWU22Q6S.js.map → VirtualBackground-ZRRE4DUA.js.map} +2 -2
  55. package/dist/{chunk-4VY5NUK7.js → chunk-4ISMCWQA.js} +49 -146
  56. package/dist/chunk-4ISMCWQA.js.map +7 -0
  57. package/dist/{chunk-TEHZYXCJ.js → chunk-KKLZ7K2L.js} +167 -164
  58. package/dist/chunk-KKLZ7K2L.js.map +7 -0
  59. package/dist/chunk-LUND6FLY.js +8626 -0
  60. package/dist/chunk-LUND6FLY.js.map +7 -0
  61. package/dist/chunk-MYK3T45M.js +58 -0
  62. package/dist/chunk-MYK3T45M.js.map +7 -0
  63. package/dist/{chunk-A2PNZIK7.js → chunk-THORW2WT.js} +4 -4
  64. package/dist/{chunk-A2PNZIK7.js.map → chunk-THORW2WT.js.map} +1 -1
  65. package/dist/{conference-YHO2J3Z6.js → conference-5TDUAQ6K.js} +593 -532
  66. package/dist/conference-5TDUAQ6K.js.map +7 -0
  67. package/dist/{conference-LE4T3ZNF.css → conference-BDCDGBIS.css} +2 -2
  68. package/dist/{ActiveSpeakerView-LW4WDBC6.css.map → conference-BDCDGBIS.css.map} +2 -2
  69. package/dist/index.cjs.css +1 -1
  70. package/dist/index.cjs.css.map +2 -2
  71. package/dist/index.cjs.js +2952 -2662
  72. package/dist/index.cjs.js.map +4 -4
  73. package/dist/index.css +1 -1
  74. package/dist/index.css.map +2 -2
  75. package/dist/index.js +4 -8
  76. package/dist/meta.cjs.json +750 -484
  77. package/dist/meta.esbuild.json +844 -581
  78. package/dist/{transcription-L6VBK75V.js → transcription-PYTSSAOB.js} +3 -3
  79. package/package.json +13 -9
  80. package/src/Accordion/Accordion.tsx +3 -3
  81. package/src/AudioLevel/AudioLevel.tsx +1 -1
  82. package/src/Avatar/Avatar.tsx +8 -3
  83. package/src/Button/Button.tsx +76 -20
  84. package/src/Checkbox/Checkbox.tsx +4 -4
  85. package/src/Collapsible/Collapsible.tsx +1 -1
  86. package/src/Divider/Divider.tsx +2 -2
  87. package/src/Divider/HorizontalDivider.stories.tsx +2 -2
  88. package/src/Divider/VerticalDivider.stories.tsx +1 -1
  89. package/src/Dropdown/Dropdown.stories.tsx +3 -3
  90. package/src/Dropdown/Dropdown.tsx +16 -14
  91. package/src/IconButton/IconButton.tsx +8 -7
  92. package/src/Input/Input.tsx +9 -8
  93. package/src/Input/PasswordInput.stories.tsx +2 -2
  94. package/src/Label/Label.tsx +1 -1
  95. package/src/Link/Link.tsx +4 -4
  96. package/src/Loading/Loading.tsx +7 -10
  97. package/src/Modal/Dialog.stories.tsx +2 -2
  98. package/src/Modal/DialogContent.tsx +3 -3
  99. package/src/Pagination/StyledPagination.tsx +4 -4
  100. package/src/Popover/Popover.stories.tsx +5 -5
  101. package/src/Popover/index.tsx +1 -1
  102. package/src/Prebuilt/App.jsx +101 -68
  103. package/src/Prebuilt/IconButton.jsx +2 -2
  104. package/src/Prebuilt/Prebuilt.stories.tsx +8 -2
  105. package/src/Prebuilt/common/constants.js +0 -1
  106. package/src/Prebuilt/common/utils.js +0 -6
  107. package/src/Prebuilt/components/AppData/AppData.jsx +7 -4
  108. package/src/Prebuilt/components/AppData/useUISettings.js +0 -4
  109. package/src/Prebuilt/components/AudioVideoToggle.jsx +73 -20
  110. package/src/Prebuilt/components/BottomActionSheet/BottomActionSheet.jsx +1 -1
  111. package/src/Prebuilt/components/Chat/Chat.jsx +6 -2
  112. package/src/Prebuilt/components/Chat/ChatBody.jsx +13 -11
  113. package/src/Prebuilt/components/Chat/ChatFooter.jsx +2 -2
  114. package/src/Prebuilt/components/Chat/ChatHeader.jsx +3 -3
  115. package/src/Prebuilt/components/Chat/ChatSelector.jsx +2 -2
  116. package/src/Prebuilt/components/Chat/useEmojiPickerStyles.js +6 -6
  117. package/src/Prebuilt/components/Chip.jsx +24 -0
  118. package/src/Prebuilt/components/Connection/ConnectionIndicator.jsx +6 -6
  119. package/src/Prebuilt/components/Connection/TileConnection.jsx +2 -2
  120. package/src/Prebuilt/components/Connection/connectionQualityUtils.js +4 -4
  121. package/src/Prebuilt/components/EmojiReaction.jsx +13 -10
  122. package/src/Prebuilt/components/ErrorBoundary.jsx +2 -2
  123. package/src/Prebuilt/components/FullPageProgress.jsx +5 -3
  124. package/src/Prebuilt/components/GoLiveButton.jsx +1 -4
  125. package/src/Prebuilt/components/HMSVideo/HLSQualitySelector.jsx +2 -2
  126. package/src/Prebuilt/components/HMSVideo/PlayButton.jsx +1 -1
  127. package/src/Prebuilt/components/HMSVideo/VideoProgress.jsx +3 -3
  128. package/src/Prebuilt/components/HMSVideo/VideoTime.jsx +3 -1
  129. package/src/Prebuilt/components/HMSVideo/VolumeControl.jsx +1 -1
  130. package/src/Prebuilt/components/Header/AdditionalRoomState.jsx +17 -17
  131. package/src/Prebuilt/components/Header/AmbientMusic.jsx +1 -1
  132. package/src/Prebuilt/components/Header/ConferencingHeader.jsx +4 -6
  133. package/src/Prebuilt/components/Header/HeaderComponents.jsx +10 -5
  134. package/src/Prebuilt/components/Header/ParticipantFilter.jsx +2 -2
  135. package/src/Prebuilt/components/Header/ParticipantList.jsx +2 -2
  136. package/src/Prebuilt/components/Header/StreamActions.jsx +9 -19
  137. package/src/Prebuilt/components/Header/StreamingHeader.jsx +5 -6
  138. package/src/Prebuilt/components/HlsStatsOverlay.jsx +2 -2
  139. package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.jsx +102 -0
  140. package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.stories.tsx +40 -0
  141. package/src/Prebuilt/components/LeaveRoom.jsx +11 -11
  142. package/src/Prebuilt/components/MetaActions.jsx +2 -2
  143. package/src/Prebuilt/components/MoreSettings/BulkRoleChangeModal.jsx +2 -2
  144. package/src/Prebuilt/components/MoreSettings/ChangeSelfRole.jsx +1 -1
  145. package/src/Prebuilt/components/MoreSettings/MoreSettings.jsx +1 -0
  146. package/src/Prebuilt/components/Notifications/HLSFailureModal.jsx +69 -0
  147. package/src/Prebuilt/components/Notifications/Notifications.jsx +1 -3
  148. package/src/Prebuilt/components/Notifications/PermissionErrorModal.jsx +108 -26
  149. package/src/Prebuilt/components/Notifications/ReconnectNotifications.jsx +1 -1
  150. package/src/Prebuilt/components/PIP/pipUtils.js +2 -2
  151. package/src/Prebuilt/components/Playlist/Playlist.jsx +4 -4
  152. package/src/Prebuilt/components/Playlist/PlaylistControls.jsx +3 -3
  153. package/src/Prebuilt/components/Playlist/PlaylistItem.jsx +3 -3
  154. package/src/Prebuilt/components/Playlist/VideoPlayer.jsx +4 -4
  155. package/src/Prebuilt/components/PostLeave.jsx +4 -4
  156. package/src/Prebuilt/components/Preview/PreviewContainer.jsx +17 -6
  157. package/src/Prebuilt/components/Preview/PreviewForm.jsx +74 -0
  158. package/src/Prebuilt/components/Preview/PreviewJoin.jsx +100 -37
  159. package/src/Prebuilt/components/RoleChangeModal.jsx +3 -3
  160. package/src/Prebuilt/components/ScreenshareDisplay.jsx +2 -2
  161. package/src/Prebuilt/components/Settings/DeviceSettings.jsx +3 -9
  162. package/src/Prebuilt/components/Settings/SettingsModal.jsx +8 -32
  163. package/src/Prebuilt/components/Settings/StartRecording.jsx +4 -12
  164. package/src/Prebuilt/components/Settings/SwitchWithLabel.jsx +2 -3
  165. package/src/Prebuilt/components/Settings/common.js +26 -0
  166. package/src/Prebuilt/components/StatsForNerds.jsx +5 -5
  167. package/src/Prebuilt/components/Streaming/Common.jsx +11 -11
  168. package/src/Prebuilt/components/Streaming/HLSStreaming.jsx +6 -12
  169. package/src/Prebuilt/components/Streaming/RTMPStreaming.jsx +4 -6
  170. package/src/Prebuilt/components/Streaming/StreamingLanding.jsx +4 -4
  171. package/src/Prebuilt/components/TileMenu.jsx +7 -7
  172. package/src/Prebuilt/components/Toast/ToastConfig.jsx +12 -20
  173. package/src/Prebuilt/components/conference.jsx +9 -2
  174. package/src/Prebuilt/components/hooks/useDropdownSelection.jsx +1 -4
  175. package/src/Prebuilt/components/pdfAnnotator/pdfErrorView.jsx +2 -2
  176. package/src/Prebuilt/components/pdfAnnotator/pdfFileOptions.jsx +1 -1
  177. package/src/Prebuilt/components/pdfAnnotator/pdfHeader.jsx +1 -1
  178. package/src/Prebuilt/components/pdfAnnotator/pdfInfo.jsx +2 -2
  179. package/src/Prebuilt/components/pdfAnnotator/shareScreenOptions.jsx +12 -20
  180. package/src/Prebuilt/components/pdfAnnotator/uploadedFile.jsx +4 -4
  181. package/src/Prebuilt/images/Logo.svg +8 -0
  182. package/src/Prebuilt/images/first_person.png +0 -0
  183. package/src/Prebuilt/images/rtmp.png +0 -0
  184. package/src/Prebuilt/index.d.ts +6 -1
  185. package/src/Prebuilt/layouts/HLSView.jsx +1 -1
  186. package/src/Prebuilt/layouts/InsetView.jsx +0 -3
  187. package/src/Prebuilt/layouts/NonPublisherView.jsx +2 -2
  188. package/src/Prebuilt/layouts/SidePane.jsx +1 -1
  189. package/src/Prebuilt/layouts/WaitingView.jsx +2 -2
  190. package/src/Prebuilt/layouts/mainView.jsx +42 -5
  191. package/src/Prebuilt/plugins/FlyingEmoji.jsx +2 -2
  192. package/src/Prebuilt/plugins/VirtualBackground/VirtualBackground.jsx +1 -0
  193. package/src/Prebuilt/plugins/whiteboard/ToggleWhiteboard.jsx +1 -3
  194. package/src/Prebuilt/primitives/DialogContent.jsx +4 -4
  195. package/src/Prebuilt/primitives/DropdownTrigger.jsx +3 -3
  196. package/src/Prebuilt/provider/roomLayoutProvider/constants/index.ts +33 -0
  197. package/src/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.ts +57 -0
  198. package/src/Prebuilt/provider/roomLayoutProvider/index.tsx +26 -0
  199. package/src/Progress/index.tsx +2 -2
  200. package/src/RadioGroup/RadioGroup.tsx +3 -3
  201. package/src/ReactSelect/ReactSelect.stories.tsx +7 -7
  202. package/src/ReactSelect/ReactSelect.tsx +8 -8
  203. package/src/Select/Select.tsx +6 -6
  204. package/src/Slider/Slider.tsx +5 -5
  205. package/src/Stats/Stats.tsx +12 -2
  206. package/src/Stats/StyledStats.tsx +3 -3
  207. package/src/Switch/Switch.tsx +5 -5
  208. package/src/Tabs/Tabs.stories.tsx +2 -2
  209. package/src/Tabs/Tabs.tsx +2 -2
  210. package/src/Text/Text.tsx +2 -2
  211. package/src/Theme/ThemeProvider.tsx +4 -7
  212. package/src/Theme/ThemeStory.jsx +17 -19
  213. package/src/Theme/base.config.ts +31 -59
  214. package/src/Theme/index.tsx +0 -1
  215. package/src/Theme/stitches.config.ts +2 -7
  216. package/src/TileMenu/StyledMenuTile.tsx +9 -8
  217. package/src/Toast/Toast.tsx +10 -9
  218. package/src/Tooltip/Tooltip.stories.tsx +1 -1
  219. package/src/Tooltip/Tooltip.tsx +4 -4
  220. package/src/Video/Video.tsx +1 -1
  221. package/src/VideoTile/StyledVideoTile.tsx +12 -12
  222. package/src/assets/android-perm-0.png +0 -0
  223. package/src/assets/android-perm-1.png +0 -0
  224. package/src/assets/ios-perm-0.png +0 -0
  225. package/src/fixtures/chats.ts +1 -1
  226. package/dist/HLSView-ZYNT3HJD.js.map +0 -7
  227. package/dist/Theme/themes.d.ts +0 -64
  228. package/dist/chunk-4VY5NUK7.js.map +0 -7
  229. package/dist/chunk-BSQIN5RC.js +0 -65
  230. package/dist/chunk-BSQIN5RC.js.map +0 -7
  231. package/dist/chunk-TEHZYXCJ.js.map +0 -7
  232. package/dist/chunk-ZET2HMGS.js +0 -8331
  233. package/dist/chunk-ZET2HMGS.js.map +0 -7
  234. package/dist/conference-YHO2J3Z6.js.map +0 -7
  235. package/src/Prebuilt/components/Preview/PreviewName.jsx +0 -37
  236. package/src/Prebuilt/components/Streaming/RTMPIcon.jsx +0 -69
  237. package/src/Prebuilt/hms.js +0 -7
  238. package/src/Prebuilt/plugins/confetti.jsx +0 -60
  239. package/src/Theme/themes.ts +0 -70
  240. /package/dist/{ActiveSpeakerView-G32BDM5F.js.map → ActiveSpeakerView-4XPIRZOK.js.map} +0 -0
  241. /package/dist/{PinnedTrackView-GTXL2UTS.js.map → PinnedTrackView-GGTCNH5V.js.map} +0 -0
  242. /package/dist/{transcription-L6VBK75V.js.map → transcription-PYTSSAOB.js.map} +0 -0
@@ -1,11 +1,25 @@
1
1
  import React, { useEffect, useState } from 'react';
2
+ import { useMedia } from 'react-use';
2
3
  import { HMSNotificationTypes, useHMSNotifications } from '@100mslive/react-sdk';
3
- import { Dialog, Text } from '../../../';
4
+ import { Button, config as cssConfig, Dialog, Flex, Text } from '../../../';
5
+ import androidPermissions from '../../../assets/android-perm-0.png';
6
+ import androidPermissionAlert from '../../../assets/android-perm-1.png';
7
+ import iosPermissions from '../../../assets/ios-perm-0.png';
8
+ import { isAndroid, isIOS } from '../../common/constants';
4
9
 
5
10
  export function PermissionErrorModal() {
6
11
  const notification = useHMSNotifications(HMSNotificationTypes.ERROR);
7
12
  const [deviceType, setDeviceType] = useState('');
8
13
  const [isSystemError, setIsSystemError] = useState(false);
14
+ const [showAndroidPrompt, setShowAndroidPrompt] = useState(true);
15
+ const isMobile = useMedia(cssConfig.media.md);
16
+
17
+ useEffect(() => {
18
+ if (showAndroidPrompt && isAndroid && isMobile) {
19
+ setDeviceType('camera and microphone');
20
+ }
21
+ }, []);
22
+
9
23
  useEffect(() => {
10
24
  if (
11
25
  !notification ||
@@ -20,46 +34,114 @@ export function PermissionErrorModal() {
20
34
  const hasVideo = errorMessage.includes('video');
21
35
  const hasScreen = errorMessage.includes('screen');
22
36
  if (hasAudio && hasVideo) {
23
- setDeviceType('Camera and Microphone');
37
+ setDeviceType('camera and microphone');
24
38
  } else if (hasAudio) {
25
- setDeviceType('Microphone');
39
+ setDeviceType('microphone');
26
40
  } else if (hasVideo) {
27
- setDeviceType('Camera');
41
+ setDeviceType('camera');
28
42
  } else if (hasScreen) {
29
- setDeviceType('Screenshare');
43
+ setDeviceType('screen');
30
44
  }
31
45
  setIsSystemError(notification.data.code === 3011);
32
46
  }, [notification]);
47
+
33
48
  return deviceType ? (
34
- <Dialog.Root
35
- open
36
- onOpenChange={value => {
37
- if (!value) {
38
- setDeviceType('');
39
- }
40
- }}
41
- >
49
+ <Dialog.Root open={!!deviceType}>
42
50
  <Dialog.Portal>
43
51
  <Dialog.Overlay />
44
- <Dialog.Content css={{ w: 'min(480px, 90%)' }}>
52
+ <Dialog.Content css={{ w: 'min(380px, 90%)', p: '$8' }}>
45
53
  <Dialog.Title
46
54
  css={{
47
- display: 'flex',
48
- alignItems: 'center',
49
- justifyContent: 'space-between',
50
- borderBottom: '1px solid $borderDefault',
51
- pb: '$8',
55
+ borderBottom: '1px solid $border_default',
52
56
  }}
53
57
  >
54
- <Text css={{ fontWeight: '$semiBold' }}>{deviceType} permissions are blocked</Text>
55
- <Dialog.DefaultClose data-testid="dialoge_cross_icon" css={{ alignSelf: 'start' }} />
58
+ {isMobile && isIOS ? <img style={{ maxWidth: '100%', maxHeight: '100%' }} src={iosPermissions} /> : null}
59
+
60
+ {/* Images for android */}
61
+ {isMobile && isAndroid ? (
62
+ showAndroidPrompt ? (
63
+ <img src={androidPermissions} style={{ maxWidth: '100%', maxHeight: '100%' }} />
64
+ ) : (
65
+ <img src={androidPermissionAlert} style={{ maxWidth: '100%', maxHeight: '100%' }} />
66
+ )
67
+ ) : null}
68
+
69
+ <Text variant="h6">
70
+ {showAndroidPrompt ? `Allow access to your ${deviceType}` : `We can't access your ${deviceType}`}
71
+ </Text>
56
72
  </Dialog.Title>
57
- <Text variant="md" css={{ py: '$10' }}>
58
- Access to {deviceType} is required.&nbsp;
59
- {isSystemError
60
- ? `Enable permissions for ${deviceType} from sytem settings`
61
- : `Enable permissions for ${deviceType} from address bar or browser settings`}
73
+
74
+ <Text variant="sm" css={{ pt: '$4', pb: '$10', color: '$on_surface_medium' }}>
75
+ {/* IOS prompt text */}
76
+ {isMobile && isIOS
77
+ ? 'Enable permissions by reloading this page and clicking “Allow” on the pop-up, or change settings from the address bar.'
78
+ : null}
79
+
80
+ {/* Initial prompt for android devices */}
81
+ {isMobile && showAndroidPrompt && isAndroid
82
+ ? 'In order for others to see and hear you, your browser will request camera and microphone access.'
83
+ : null}
84
+
85
+ {/* Successive prompts for android devices */}
86
+ {isMobile && !showAndroidPrompt && isAndroid
87
+ ? 'To allow other users to see and hear you, click the blocked camera icon in your browser’s address bar.'
88
+ : null}
89
+
90
+ {/* Prompt for desktops */}
91
+ {!isMobile ? `Access to ${deviceType} is required. ` : null}
92
+
93
+ {isSystemError && !isMobile
94
+ ? `Enable permissions for ${deviceType}${deviceType === 'screen' ? 'share' : ''} from sytem settings`
95
+ : null}
96
+ {!isSystemError && !isMobile
97
+ ? `Enable permissions for ${deviceType}${
98
+ deviceType === 'screen' ? 'share' : ''
99
+ } from address bar or browser settings.`
100
+ : null}
62
101
  </Text>
102
+
103
+ {/* CTA section */}
104
+ {isMobile && isIOS ? (
105
+ <>
106
+ <Button onClick={() => window.location.reload()} css={{ w: '100%', mb: '$6' }}>
107
+ Reload
108
+ </Button>
109
+ <Button outlined variant="standard" onClick={() => setDeviceType('')} css={{ w: '100%' }}>
110
+ Continue anyway
111
+ </Button>
112
+ </>
113
+ ) : null}
114
+
115
+ {isMobile && isAndroid ? (
116
+ showAndroidPrompt ? (
117
+ <Button
118
+ css={{ w: '100%' }}
119
+ onClick={() => {
120
+ setDeviceType('');
121
+ setShowAndroidPrompt(false);
122
+ }}
123
+ >
124
+ Continue
125
+ </Button>
126
+ ) : (
127
+ <>
128
+ <Button onClick={() => setDeviceType('')} css={{ w: '100%', mb: '$6' }}>
129
+ I've allowed access
130
+ </Button>
131
+ <Button outlined variant="standard" onClick={() => setDeviceType('')} css={{ w: '100%' }}>
132
+ Continue anyway
133
+ </Button>
134
+ </>
135
+ )
136
+ ) : null}
137
+
138
+ {!isMobile ? (
139
+ <Flex justify="end" css={{ w: '100%' }}>
140
+ <Button outlined variant="standard" onClick={() => setDeviceType('')}>
141
+ Dismiss
142
+ </Button>
143
+ </Flex>
144
+ ) : null}
63
145
  </Dialog.Content>
64
146
  </Dialog.Portal>
65
147
  </Dialog.Root>
@@ -58,7 +58,7 @@ export const ReconnectNotifications = () => {
58
58
  <div style={{ display: 'inline', margin: '0.25rem' }}>
59
59
  <Loading size={16} />
60
60
  </div>
61
- <Text css={{ fontSize: '$space$8', color: '$textHighEmp' }}>
61
+ <Text css={{ fontSize: '$space$8', color: '$on_surface_high' }}>
62
62
  You lost your network connection. Trying to reconnect.
63
63
  </Text>
64
64
  </Flex>
@@ -5,12 +5,12 @@ function setPIPCanvasColors() {
5
5
  if (!CANVAS_FILL_COLOR) {
6
6
  CANVAS_FILL_COLOR = window
7
7
  .getComputedStyle(document.documentElement)
8
- .getPropertyValue('--hms-ui-colors-surfaceLight');
8
+ .getPropertyValue('--hms-ui-colors-surface_bright');
9
9
  }
10
10
  if (!CANVAS_STROKE_COLOR) {
11
11
  CANVAS_STROKE_COLOR = window
12
12
  .getComputedStyle(document.documentElement)
13
- .getPropertyValue('--hms-ui-colors-borderLight');
13
+ .getPropertyValue('--hms-ui-colors-border_bright');
14
14
  }
15
15
  }
16
16
 
@@ -68,16 +68,16 @@ export const Playlist = ({ type }) => {
68
68
  maxHeight: 'unset',
69
69
  width: '$60',
70
70
  p: '$0',
71
- bg: '$bgSecondary',
72
- border: '1px solid $menuBg',
71
+ bg: '$surface_bright',
72
+ border: '1px solid $border_default',
73
73
  }}
74
74
  >
75
75
  <Flex
76
76
  align="center"
77
77
  css={{
78
78
  p: '$4 $8',
79
- borderBottom: '1px solid $borderLight',
80
- bg: '$menuBg',
79
+ borderBottom: '1px solid $border_bright',
80
+ bg: '$surface_default',
81
81
  }}
82
82
  >
83
83
  <Text variant="md" css={{ flex: '1 1 0' }}>
@@ -103,7 +103,7 @@ const VolumeControl = () => {
103
103
  const sliderVolume = active ? volume : audioTrackVolume;
104
104
 
105
105
  return (
106
- <Flex align="center" css={{ color: '$white' }}>
106
+ <Flex align="center" css={{ color: '$on_primary_high' }}>
107
107
  <SpeakerIcon />
108
108
  <Slider
109
109
  css={{ mx: '$4', w: '$20' }}
@@ -134,8 +134,8 @@ export const AudioPlaylistControls = ({ onToggle }) => {
134
134
  <Box
135
135
  css={{
136
136
  p: '$8',
137
- borderTop: '1px solid $borderLight',
138
- bg: '$menuBg',
137
+ borderTop: '1px solid $border_bright',
138
+ bg: '$surface_default',
139
139
  }}
140
140
  >
141
141
  <Controls type={HMSPlaylistType.audio} />
@@ -27,16 +27,16 @@ export const PlaylistItem = React.memo(({ name, metadata, duration, selected, on
27
27
  p: '$8',
28
28
  '&:hover': {
29
29
  cursor: 'pointer',
30
- bg: '$menuBg',
30
+ bg: '$surface_default',
31
31
  },
32
32
  '&:focus-visible': {
33
- bg: '$menuBg',
33
+ bg: '$surface_default',
34
34
  },
35
35
  }}
36
36
  onClick={onClick}
37
37
  >
38
38
  <Flex align="center" justify="between" css={{ width: '100%', minHeight: 0 }}>
39
- <Text variant="md" css={{ color: selected ? '$brandDefault' : '$textPrimary' }}>
39
+ <Text variant="md" css={{ color: selected ? '$primary_default' : '$on_primary_high' }}>
40
40
  {name}
41
41
  </Text>
42
42
  <Text variant="xs">{formatDuration(duration)}</Text>
@@ -34,16 +34,16 @@ export const VideoPlayer = React.memo(({ peerId }) => {
34
34
  justify="between"
35
35
  align="center"
36
36
  css={{
37
- bg: '$menuBg',
37
+ bg: '$surface_default',
38
38
  p: '$2 $2 $2 $6',
39
39
  borderTopLeftRadius: '$1',
40
40
  borderTopRightRadius: '$1',
41
41
  }}
42
42
  >
43
- <Text css={{ color: '$textPrimary' }}>{active.name}</Text>
43
+ <Text css={{ color: '$on_primary_high' }}>{active.name}</Text>
44
44
  <IconButton
45
45
  css={{
46
- color: '$white',
46
+ color: '$on_primary_high',
47
47
  }}
48
48
  onClick={() => {
49
49
  hmsActions.videoPlaylist.stop();
@@ -80,7 +80,7 @@ export const VideoPlayer = React.memo(({ peerId }) => {
80
80
  <IconButton
81
81
  onClick={() => toggle()}
82
82
  css={{
83
- color: '$white',
83
+ color: '$on_primary_high',
84
84
  height: 'max-content',
85
85
  alignSelf: 'center',
86
86
  cursor: 'pointer',
@@ -26,18 +26,18 @@ const PostLeave = () => {
26
26
  justify="center"
27
27
  direction="column"
28
28
  align="center"
29
- css={{ bg: '$mainBg', flex: '1 1 0', position: 'relative' }}
29
+ css={{ bg: '$background_dim', flex: '1 1 0', position: 'relative' }}
30
30
  >
31
31
  <Text variant="h2" css={{ fontWeight: '$semiBold' }}>
32
32
  👋
33
33
  </Text>
34
- <Text variant="h4" css={{ color: '$textHighEmp', fontWeight: '$semiBold', mt: '$12' }}>
34
+ <Text variant="h4" css={{ color: '$on_surface_high', fontWeight: '$semiBold', mt: '$12' }}>
35
35
  You left the {getRoutePrefix() ? 'stream' : 'room'}
36
36
  </Text>
37
37
  <Text
38
38
  variant="body1"
39
39
  css={{
40
- color: '$textMedEmp',
40
+ color: '$on_surface_medium',
41
41
  mt: '$8',
42
42
  fontWeight: '$regular',
43
43
  textAlign: 'center',
@@ -52,7 +52,7 @@ const PostLeave = () => {
52
52
  !
53
53
  </Text>
54
54
  <Flex css={{ mt: '$14', gap: '$10', alignItems: 'center' }}>
55
- <Text variant="body1" css={{ color: '$textMedEmp', fontWeight: '$regular' }}>
55
+ <Text variant="body1" css={{ color: '$on_surface_medium', fontWeight: '$regular' }}>
56
56
  Left by mistake?
57
57
  </Text>
58
58
  <Button
@@ -1,8 +1,10 @@
1
1
  import React from 'react';
2
2
  import { useParams } from 'react-router-dom';
3
3
  import { useSearchParam } from 'react-use';
4
- import { Box, Flex, Loading } from '../../../';
4
+ import { HMSRoomState, selectRoomState, useHMSStore } from '@100mslive/react-sdk';
5
+ import { Box, Flex } from '../../../';
5
6
  import SidePane from '../../layouts/SidePane';
7
+ import FullPageProgress from '../FullPageProgress';
6
8
  import { Header } from '../Header';
7
9
  import PreviewJoin from './PreviewJoin';
8
10
  import { useAuthToken } from '../AppData/useUISettings';
@@ -18,6 +20,9 @@ const PreviewContainer = () => {
18
20
  const { roomId: urlRoomId, role: userRole } = useParams(); // from the url
19
21
  const authToken = useAuthToken();
20
22
 
23
+ const roomState = useHMSStore(selectRoomState);
24
+ const isPreview = roomState === HMSRoomState.Preview;
25
+
21
26
  const onJoin = () => {
22
27
  let meetingURL = `/meeting/${urlRoomId}`;
23
28
  if (userRole) {
@@ -27,14 +32,20 @@ const PreviewContainer = () => {
27
32
  };
28
33
  return (
29
34
  <Flex direction="column" css={{ size: '100%' }}>
30
- <Box css={{ h: '$18', '@md': { h: '$17', flexShrink: 0 } }} data-testid="header">
31
- <Header />
32
- </Box>
33
- <Flex css={{ flex: '1 1 0', position: 'relative', overflowY: 'auto' }} justify="center" align="center">
35
+ {isPreview ? null : (
36
+ <Box css={{ h: '$18', '@md': { h: '$17', flexShrink: 0 } }} data-testid="header">
37
+ <Header />
38
+ </Box>
39
+ )}
40
+ <Flex
41
+ css={{ flex: '1 1 0', position: 'relative', overflowY: 'auto', color: '$primary_default' }}
42
+ justify="center"
43
+ align="center"
44
+ >
34
45
  {authToken ? (
35
46
  <PreviewJoin initialName={initialName} skipPreview={skipPreview} asRole={previewAsRole} onJoin={onJoin} />
36
47
  ) : (
37
- <Loading size={100} />
48
+ <FullPageProgress />
38
49
  )}
39
50
  <SidePane
40
51
  css={{
@@ -0,0 +1,74 @@
1
+ import React from 'react';
2
+ import { useMedia } from 'react-use';
3
+ import { JoinForm_JoinBtnType } from '@100mslive/types-prebuilt/elements/join_form';
4
+ import { selectPermissions, useHMSStore, useRecordingStreaming } from '@100mslive/react-sdk';
5
+ import { RadioIcon } from '@100mslive/react-icons';
6
+ import { Button, config as cssConfig, Flex, Input, styled } from '../../..';
7
+ import { useRoomLayout } from '../../provider/roomLayoutProvider';
8
+ import { PreviewSettings } from './PreviewJoin';
9
+
10
+ const PreviewForm = ({
11
+ name,
12
+ onChange,
13
+ onJoin,
14
+ enableJoin,
15
+ cannotPublishVideo = false,
16
+ cannotPublishAudio = false,
17
+ }) => {
18
+ const formSubmit = e => {
19
+ e.preventDefault();
20
+ };
21
+ const mediaQueryLg = cssConfig.media.md;
22
+ const isMobile = useMedia(mediaQueryLg);
23
+ const { isHLSRunning } = useRecordingStreaming();
24
+ const permissions = useHMSStore(selectPermissions);
25
+ const layout = useRoomLayout();
26
+ const { join_form: joinForm = {} } = layout?.screens?.preview?.default?.elements || {};
27
+ const showGoLive =
28
+ joinForm.join_btn_type === JoinForm_JoinBtnType.JOIN_BTN_TYPE_JOIN_AND_GO_LIVE &&
29
+ !isHLSRunning &&
30
+ permissions?.hlsStreaming;
31
+
32
+ return (
33
+ <Form
34
+ css={{ flexDirection: cannotPublishVideo ? 'column' : 'row', '@md': { flexDirection: 'row' } }}
35
+ onSubmit={formSubmit}
36
+ >
37
+ <Flex align="center" css={{ gap: '$8', w: '100%' }}>
38
+ <Input
39
+ required
40
+ id="name"
41
+ css={{ w: '100%', boxSizing: 'border-box' }}
42
+ value={name}
43
+ onChange={e => onChange(e.target.value.trimStart())}
44
+ placeholder="Enter name"
45
+ autoFocus
46
+ autoComplete="name"
47
+ />
48
+ {cannotPublishAudio && cannotPublishVideo && !isMobile ? <PreviewSettings /> : null}
49
+ </Flex>
50
+
51
+ {Object.keys(joinForm).length > 0 ? (
52
+ <Button type="submit" icon disabled={!name || !enableJoin} onClick={onJoin}>
53
+ {/* Conditions to show go live: The first broadcaster joins a streaming kit that is not live */}
54
+ {showGoLive ? <RadioIcon height={18} width={18} /> : null}
55
+ {showGoLive ? joinForm.go_live_btn_label : joinForm.join_btn_label}
56
+ </Button>
57
+ ) : null}
58
+ </Form>
59
+ );
60
+ };
61
+
62
+ const Form = styled('form', {
63
+ width: '100%',
64
+ display: 'flex',
65
+ alignItems: 'center',
66
+ gap: '$8',
67
+ mt: '$10',
68
+ mb: '$10',
69
+ '@md': {
70
+ gap: '$4',
71
+ },
72
+ });
73
+
74
+ export default PreviewForm;