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

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 (232) hide show
  1. package/dist/{HLSView-P57IRMAR.js → HLSView-HNVYG5VE.js} +309 -151
  2. package/dist/HLSView-HNVYG5VE.js.map +7 -0
  3. package/dist/Prebuilt/App.d.ts +3 -0
  4. package/dist/Prebuilt/AppContext.d.ts +13 -0
  5. package/dist/Prebuilt/common/PeersSorter.d.ts +21 -0
  6. package/dist/Prebuilt/components/Chat/ChatFooter.d.ts +7 -0
  7. package/dist/Prebuilt/components/Connection/ConnectionIndicator.d.ts +6 -0
  8. package/dist/Prebuilt/components/Connection/TileConnection.d.ts +10 -0
  9. package/dist/Prebuilt/components/Footer/ChatToggle.d.ts +4 -0
  10. package/dist/Prebuilt/components/Footer/Footer.d.ts +6 -0
  11. package/dist/Prebuilt/components/Footer/RoleAccordion.d.ts +14 -0
  12. package/dist/Prebuilt/components/Footer/RoleOptions.d.ts +6 -0
  13. package/dist/Prebuilt/components/Header/Header.d.ts +2 -0
  14. package/dist/Prebuilt/components/Header/StreamActions.d.ts +11 -0
  15. package/dist/Prebuilt/components/InsetTile.d.ts +2 -0
  16. package/dist/Prebuilt/components/Leave/DesktopLeaveRoom.d.ts +8 -0
  17. package/dist/Prebuilt/components/Leave/EndSessionContent.d.ts +9 -0
  18. package/dist/Prebuilt/components/Leave/LeaveAtoms.d.ts +2196 -0
  19. package/dist/Prebuilt/components/Leave/LeaveCard.d.ts +11 -0
  20. package/dist/Prebuilt/components/Leave/LeaveRoom.d.ts +5 -0
  21. package/dist/Prebuilt/components/Leave/LeaveSessionContent.d.ts +8 -0
  22. package/dist/Prebuilt/components/Leave/MwebLeaveRoom.d.ts +8 -0
  23. package/dist/Prebuilt/components/MoreSettings/MoreSettings.d.ts +6 -0
  24. package/dist/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.d.ts +6 -0
  25. package/dist/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.d.ts +6 -0
  26. package/dist/Prebuilt/components/Pagination.d.ts +6 -0
  27. package/dist/Prebuilt/components/Preview/PreviewContainer.d.ts +3 -0
  28. package/dist/Prebuilt/components/Preview/PreviewForm.d.ts +10 -0
  29. package/dist/Prebuilt/components/Preview/PreviewJoin.d.ts +16 -0
  30. package/dist/Prebuilt/components/RoleChangeRequestModal.d.ts +2 -0
  31. package/dist/Prebuilt/components/SecondaryTiles.d.ts +3 -0
  32. package/dist/Prebuilt/components/VideoLayouts/EqualProminence.d.ts +3 -0
  33. package/dist/Prebuilt/components/VideoLayouts/Grid.d.ts +6 -0
  34. package/dist/Prebuilt/components/VideoLayouts/GridLayout.d.ts +12 -0
  35. package/dist/Prebuilt/components/VideoLayouts/ProminenceLayout.d.ts +15 -0
  36. package/dist/Prebuilt/components/VideoLayouts/RoleProminence.d.ts +3 -0
  37. package/dist/Prebuilt/components/VideoLayouts/ScreenshareLayout.d.ts +3 -0
  38. package/dist/Prebuilt/components/VideoLayouts/interface.d.ts +9 -0
  39. package/dist/Prebuilt/components/hooks/useAutoStartStreaming.d.ts +1 -0
  40. package/dist/Prebuilt/components/hooks/useRedirectToLeave.d.ts +3 -0
  41. package/dist/Prebuilt/components/hooks/useRoleProminencePeers.d.ts +5 -0
  42. package/dist/Prebuilt/components/hooks/useTileLayout.d.ts +13 -0
  43. package/dist/Prebuilt/components/hooks/useVideoTileLayout.d.ts +13 -0
  44. package/dist/Prebuilt/layouts/SidePane.d.ts +9 -0
  45. package/dist/Prebuilt/layouts/VideoStreamingSection.d.ts +7 -0
  46. package/dist/Prebuilt/plugins/whiteboard/ToggleWhiteboard.d.ts +5 -0
  47. package/dist/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.d.ts +1 -0
  48. package/dist/Prebuilt/provider/roomLayoutProvider/hooks/useInsetEnabled.d.ts +1 -0
  49. package/dist/Prebuilt/provider/roomLayoutProvider/hooks/useRoomLayoutScreen.d.ts +17 -0
  50. package/dist/Prebuilt/provider/roomLayoutProvider/index.d.ts +6 -1
  51. package/dist/{VirtualBackground-GGCQJ5JM.js → VirtualBackground-UM2FOUHQ.js} +5 -11
  52. package/dist/VirtualBackground-UM2FOUHQ.js.map +7 -0
  53. package/dist/{chunk-P5X32KOD.js → chunk-364HP22I.js} +8 -5
  54. package/dist/chunk-364HP22I.js.map +7 -0
  55. package/dist/{chunk-OSM4QEQG.js → chunk-LYSAET4G.js} +3742 -5462
  56. package/dist/chunk-LYSAET4G.js.map +7 -0
  57. package/dist/chunk-POE7H4IE.js +898 -0
  58. package/dist/chunk-POE7H4IE.js.map +7 -0
  59. package/dist/conference-UWLJHMB2.js +5727 -0
  60. package/dist/conference-UWLJHMB2.js.map +7 -0
  61. package/dist/index.cjs.js +9655 -15326
  62. package/dist/index.cjs.js.map +4 -4
  63. package/dist/index.js +2 -2
  64. package/dist/meta.cjs.json +2513 -3456
  65. package/dist/meta.esbuild.json +2807 -3838
  66. package/package.json +8 -7
  67. package/src/Button/Button.tsx +2 -2
  68. package/src/Prebuilt/App.tsx +58 -53
  69. package/src/Prebuilt/{AppContext.jsx → AppContext.tsx} +11 -3
  70. package/src/Prebuilt/IconButton.jsx +11 -0
  71. package/src/Prebuilt/Prebuilt.stories.tsx +1 -0
  72. package/src/Prebuilt/common/{PeersSorter.js → PeersSorter.ts} +16 -11
  73. package/src/Prebuilt/common/constants.js +4 -114
  74. package/src/Prebuilt/common/hooks.js +34 -1
  75. package/src/Prebuilt/common/utils.js +1 -9
  76. package/src/Prebuilt/components/AppData/AppData.jsx +11 -15
  77. package/src/Prebuilt/components/AppData/useUISettings.js +6 -10
  78. package/src/Prebuilt/components/AudioVideoToggle.jsx +10 -2
  79. package/src/Prebuilt/components/AuthToken.jsx +11 -42
  80. package/src/Prebuilt/components/Chat/Chat.jsx +75 -27
  81. package/src/Prebuilt/components/Chat/ChatBody.jsx +95 -36
  82. package/src/Prebuilt/components/Chat/ChatFooter.tsx +199 -0
  83. package/src/Prebuilt/components/Chat/ChatParticipantHeader.jsx +84 -0
  84. package/src/Prebuilt/components/Chat/ChatSelector.jsx +16 -17
  85. package/src/Prebuilt/components/Chat/ChatSelectorContainer.jsx +81 -0
  86. package/src/Prebuilt/components/Chat/useEmojiPickerStyles.js +5 -4
  87. package/src/Prebuilt/components/Connection/{ConnectionIndicator.jsx → ConnectionIndicator.tsx} +12 -4
  88. package/src/Prebuilt/components/Connection/TileConnection.tsx +71 -0
  89. package/src/Prebuilt/components/EmojiReaction.jsx +19 -22
  90. package/src/Prebuilt/components/Footer/{ChatToggle.jsx → ChatToggle.tsx} +13 -9
  91. package/src/Prebuilt/components/Footer/Footer.tsx +98 -0
  92. package/src/Prebuilt/components/Footer/ParticipantList.jsx +187 -179
  93. package/src/Prebuilt/components/Footer/RoleAccordion.tsx +94 -0
  94. package/src/Prebuilt/components/Footer/RoleOptions.tsx +155 -0
  95. package/src/Prebuilt/components/FullPageProgress.jsx +3 -3
  96. package/src/Prebuilt/components/HMSVideo/Controls.jsx +3 -2
  97. package/src/Prebuilt/components/HMSVideo/HLSQualitySelector.jsx +63 -18
  98. package/src/Prebuilt/components/HMSVideo/HMSVideo.jsx +2 -2
  99. package/src/Prebuilt/components/HMSVideo/PlayButton.jsx +1 -1
  100. package/src/Prebuilt/components/HMSVideo/VideoProgress.jsx +5 -6
  101. package/src/Prebuilt/components/HMSVideo/VideoTime.jsx +3 -3
  102. package/src/Prebuilt/components/HMSVideo/VolumeControl.jsx +38 -9
  103. package/src/Prebuilt/components/Header/{ConferencingHeader.jsx → Header.tsx} +9 -7
  104. package/src/Prebuilt/components/Header/HeaderComponents.jsx +13 -4
  105. package/src/Prebuilt/components/Header/{StreamActions.jsx → StreamActions.tsx} +54 -67
  106. package/src/Prebuilt/components/Header/common.jsx +5 -2
  107. package/src/Prebuilt/components/Header/index.tsx +1 -0
  108. package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.jsx +23 -4
  109. package/src/Prebuilt/components/InsetTile.tsx +128 -0
  110. package/src/Prebuilt/components/{MoreSettings/SplitComponents/DesktopLeaveRoom.jsx → Leave/DesktopLeaveRoom.tsx} +67 -25
  111. package/src/Prebuilt/components/{EndSessionContent.jsx → Leave/EndSessionContent.tsx} +18 -11
  112. package/src/Prebuilt/components/Leave/LeaveAtoms.tsx +26 -0
  113. package/src/Prebuilt/components/Leave/LeaveCard.tsx +36 -0
  114. package/src/Prebuilt/components/Leave/LeaveRoom.tsx +66 -0
  115. package/src/Prebuilt/components/{LeaveSessionContent.jsx → Leave/LeaveSessionContent.tsx} +20 -6
  116. package/src/Prebuilt/components/{MoreSettings/SplitComponents/MwebLeaveRoom.jsx → Leave/MwebLeaveRoom.tsx} +43 -18
  117. package/src/Prebuilt/components/MetaActions.jsx +15 -23
  118. package/src/Prebuilt/components/MoreSettings/ActionTile.jsx +5 -0
  119. package/src/Prebuilt/components/MoreSettings/ChangeNameContent.jsx +16 -7
  120. package/src/Prebuilt/components/MoreSettings/ChangeNameModal.jsx +1 -1
  121. package/src/Prebuilt/components/MoreSettings/FullScreenItem.jsx +1 -4
  122. package/src/Prebuilt/components/MoreSettings/MoreSettings.tsx +27 -0
  123. package/src/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.tsx +216 -0
  124. package/src/Prebuilt/components/MoreSettings/SplitComponents/{MwebOptions.jsx → MwebOptions.tsx} +107 -45
  125. package/src/Prebuilt/components/Notifications/HLSFailureModal.jsx +3 -1
  126. package/src/Prebuilt/components/Notifications/Notifications.jsx +46 -30
  127. package/src/Prebuilt/components/Notifications/PeerNotifications.jsx +14 -2
  128. package/src/Prebuilt/components/Notifications/PermissionErrorModal.jsx +10 -4
  129. package/src/Prebuilt/components/Notifications/ReconnectNotifications.jsx +5 -11
  130. package/src/Prebuilt/components/PIP/PIPComponent.jsx +7 -16
  131. package/src/Prebuilt/components/PIP/PIPManager.js +1 -0
  132. package/src/Prebuilt/components/Pagination.tsx +60 -0
  133. package/src/Prebuilt/components/Playlist/Playlist.jsx +1 -6
  134. package/src/Prebuilt/components/PostLeave.jsx +7 -7
  135. package/src/Prebuilt/components/Preview/{PreviewContainer.jsx → PreviewContainer.tsx} +16 -15
  136. package/src/Prebuilt/components/Preview/{PreviewForm.jsx → PreviewForm.tsx} +16 -8
  137. package/src/Prebuilt/components/Preview/{PreviewJoin.jsx → PreviewJoin.tsx} +48 -22
  138. package/src/Prebuilt/components/RaiseHand.jsx +0 -7
  139. package/src/Prebuilt/components/RoleChangeRequestModal.tsx +119 -0
  140. package/src/Prebuilt/components/ScreenshareDisplay.jsx +4 -10
  141. package/src/Prebuilt/components/ScreenshareTile.jsx +43 -36
  142. package/src/Prebuilt/components/SecondaryTiles.tsx +36 -0
  143. package/src/Prebuilt/components/Settings/LayoutSettings.jsx +2 -12
  144. package/src/Prebuilt/components/Settings/NotificationSettings.jsx +3 -9
  145. package/src/Prebuilt/components/Settings/SettingsModal.jsx +3 -9
  146. package/src/Prebuilt/components/StatsForNerds.jsx +3 -1
  147. package/src/Prebuilt/components/TileMenu/TileMenu.jsx +16 -17
  148. package/src/Prebuilt/components/TileMenu/TileMenuContent.jsx +33 -27
  149. package/src/Prebuilt/components/Toast/ToastConfig.jsx +58 -15
  150. package/src/Prebuilt/components/VideoLayouts/EqualProminence.tsx +65 -0
  151. package/src/Prebuilt/components/VideoLayouts/Grid.tsx +43 -0
  152. package/src/Prebuilt/components/VideoLayouts/GridLayout.tsx +110 -0
  153. package/src/Prebuilt/components/VideoLayouts/ProminenceLayout.tsx +74 -0
  154. package/src/Prebuilt/components/VideoLayouts/RoleProminence.tsx +59 -0
  155. package/src/Prebuilt/components/VideoLayouts/ScreenshareLayout.tsx +52 -0
  156. package/src/Prebuilt/components/VideoLayouts/interface.ts +10 -0
  157. package/src/Prebuilt/components/VideoTile.jsx +116 -74
  158. package/src/Prebuilt/components/conference.jsx +86 -85
  159. package/src/Prebuilt/components/hooks/useAutoStartStreaming.tsx +57 -0
  160. package/src/Prebuilt/components/hooks/useMetadata.jsx +19 -3
  161. package/src/Prebuilt/components/hooks/useRedirectToLeave.tsx +34 -0
  162. package/src/Prebuilt/components/hooks/useRoleProminencePeers.tsx +38 -0
  163. package/src/Prebuilt/components/hooks/useTileLayout.tsx +127 -0
  164. package/src/Prebuilt/components/hooks/useVideoTileLayout.ts +26 -0
  165. package/src/Prebuilt/components/pdfAnnotator/pdfFileOptions.jsx +5 -72
  166. package/src/Prebuilt/components/pdfAnnotator/submitPdf.jsx +4 -45
  167. package/src/Prebuilt/components/pdfAnnotator/uploadedFile.jsx +2 -17
  168. package/src/Prebuilt/components/peerTileUtils.jsx +1 -1
  169. package/src/Prebuilt/images/empty-chat.svg +12 -0
  170. package/src/Prebuilt/layouts/EmbedView.jsx +17 -50
  171. package/src/Prebuilt/layouts/HLSView.jsx +138 -51
  172. package/src/Prebuilt/layouts/PDFView.jsx +1 -11
  173. package/src/Prebuilt/layouts/SidePane.tsx +108 -0
  174. package/src/Prebuilt/layouts/VideoStreamingSection.tsx +96 -0
  175. package/src/Prebuilt/layouts/WhiteboardView.jsx +10 -34
  176. package/src/Prebuilt/plugins/FlyingEmoji.jsx +14 -2
  177. package/src/Prebuilt/plugins/VirtualBackground/VirtualBackground.jsx +1 -4
  178. package/src/Prebuilt/plugins/whiteboard/{ToggleWhiteboard.jsx → ToggleWhiteboard.tsx} +5 -9
  179. package/src/Prebuilt/primitives/DialogContent.jsx +15 -11
  180. package/src/Prebuilt/provider/roomLayoutProvider/constants/index.ts +17 -2
  181. package/src/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.ts +36 -13
  182. package/src/Prebuilt/provider/roomLayoutProvider/hooks/useInsetEnabled.ts +10 -0
  183. package/src/Prebuilt/provider/roomLayoutProvider/hooks/useRoomLayoutScreen.ts +65 -0
  184. package/src/Prebuilt/provider/roomLayoutProvider/index.tsx +17 -6
  185. package/src/Prebuilt/services/FeatureFlags.jsx +0 -1
  186. package/src/VideoTile/StyledVideoTile.tsx +1 -0
  187. package/dist/HLSView-P57IRMAR.js.map +0 -7
  188. package/dist/PinnedTrackView-4FYJEBTB.js +0 -102
  189. package/dist/PinnedTrackView-4FYJEBTB.js.map +0 -7
  190. package/dist/VirtualBackground-GGCQJ5JM.js.map +0 -7
  191. package/dist/chunk-IVTWKQI3.js +0 -827
  192. package/dist/chunk-IVTWKQI3.js.map +0 -7
  193. package/dist/chunk-OSM4QEQG.js.map +0 -7
  194. package/dist/chunk-P5X32KOD.js.map +0 -7
  195. package/dist/chunk-RVCZPPTL.js +0 -1100
  196. package/dist/chunk-RVCZPPTL.js.map +0 -7
  197. package/dist/conference-P6I6ESVF.js +0 -8995
  198. package/dist/conference-P6I6ESVF.js.map +0 -7
  199. package/src/Prebuilt/components/AudioLevel/BeamSpeakerLabelsLogging.jsx +0 -16
  200. package/src/Prebuilt/components/Chat/ChatFooter.jsx +0 -150
  201. package/src/Prebuilt/components/Chat/ChatHeader.jsx +0 -67
  202. package/src/Prebuilt/components/Connection/TileConnection.jsx +0 -39
  203. package/src/Prebuilt/components/EqualProminence.jsx +0 -180
  204. package/src/Prebuilt/components/FirstPersonDisplay.jsx +0 -50
  205. package/src/Prebuilt/components/Footer/Footer.jsx +0 -73
  206. package/src/Prebuilt/components/Header/Header.jsx +0 -8
  207. package/src/Prebuilt/components/Header/StreamingHeader.jsx +0 -54
  208. package/src/Prebuilt/components/LeaveCard.jsx +0 -19
  209. package/src/Prebuilt/components/LeaveRoom.jsx +0 -94
  210. package/src/Prebuilt/components/MoreSettings/MoreSettings.jsx +0 -10
  211. package/src/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.jsx +0 -219
  212. package/src/Prebuilt/components/Notifications/MessageNotifications.jsx +0 -25
  213. package/src/Prebuilt/components/Pagination.jsx +0 -29
  214. package/src/Prebuilt/components/RoleChangeRequestModal.jsx +0 -26
  215. package/src/Prebuilt/components/VideoList.jsx +0 -73
  216. package/src/Prebuilt/components/gridView.jsx +0 -85
  217. package/src/Prebuilt/components/hooks/useFeatures.js +0 -22
  218. package/src/Prebuilt/components/hooks/useNavigation.js +0 -19
  219. package/src/Prebuilt/components/hooks/useSkipPreview.jsx +0 -20
  220. package/src/Prebuilt/components/pdfAnnotator/pdfErrorView.jsx +0 -29
  221. package/src/Prebuilt/images/Logo.svg +0 -8
  222. package/src/Prebuilt/layouts/ActiveSpeakerView.jsx +0 -34
  223. package/src/Prebuilt/layouts/InsetView.jsx +0 -260
  224. package/src/Prebuilt/layouts/PinnedTrackView.jsx +0 -59
  225. package/src/Prebuilt/layouts/SidePane.jsx +0 -52
  226. package/src/Prebuilt/layouts/mainGridView.jsx +0 -98
  227. package/src/Prebuilt/layouts/mainView.jsx +0 -141
  228. package/src/Prebuilt/layouts/screenShareView.jsx +0 -183
  229. /package/{src/Prebuilt/components/Header/index.jsx → dist/Prebuilt/components/Header/index.d.ts} +0 -0
  230. /package/src/Prebuilt/components/{ScreenShare.jsx → ScreenShareToggle.jsx} +0 -0
  231. /package/src/{assets → Prebuilt/images}/android-perm-1.png +0 -0
  232. /package/src/{assets → Prebuilt/images}/ios-perm-0.png +0 -0
@@ -1,94 +0,0 @@
1
- import React from 'react';
2
- import { useParams } from 'react-router-dom';
3
- import { useMedia } from 'react-use';
4
- import { selectIsConnectedToRoom, selectPermissions, useHMSActions, useHMSStore } from '@100mslive/react-sdk';
5
- import { DesktopLeaveRoom } from './MoreSettings/SplitComponents/DesktopLeaveRoom';
6
- import { MwebLeaveRoom } from './MoreSettings/SplitComponents/MwebLeaveRoom';
7
- import { PictureInPicture } from './PIP/PIPManager';
8
- import { ToastManager } from './Toast/ToastManager';
9
- import { IconButton } from '../../IconButton';
10
- import { config as cssConfig, styled } from '../../Theme';
11
- import { useHMSPrebuiltContext } from '../AppContext';
12
- import { useNavigation } from './hooks/useNavigation';
13
-
14
- export const LeaveRoom = () => {
15
- const navigate = useNavigation();
16
- const params = useParams();
17
- const isConnected = useHMSStore(selectIsConnectedToRoom);
18
- const permissions = useHMSStore(selectPermissions);
19
- const isMobile = useMedia(cssConfig.media.md);
20
- const hmsActions = useHMSActions();
21
- const { showLeave, onLeave } = useHMSPrebuiltContext();
22
-
23
- const stopStream = async () => {
24
- try {
25
- console.log('Stopping HLS stream');
26
- await hmsActions.stopHLSStreaming();
27
- ToastManager.addToast({ title: 'Stopping the stream' });
28
- } catch (e) {
29
- console.error('Error stopping stream', e);
30
- ToastManager.addToast({ title: 'Error in stopping the stream', type: 'error' });
31
- }
32
- };
33
-
34
- const redirectToLeavePage = () => {
35
- if (showLeave) {
36
- if (params.role) {
37
- navigate('/leave/' + params.roomId + '/' + params.role);
38
- } else {
39
- navigate('/leave/' + params.roomId);
40
- }
41
- }
42
- PictureInPicture.stop().catch(() => console.error('stopping pip'));
43
- ToastManager.clearAllToast();
44
- onLeave?.();
45
- };
46
-
47
- const leaveRoom = () => {
48
- hmsActions.leave();
49
- redirectToLeavePage();
50
- };
51
-
52
- // const endRoom = () => {
53
- // hmsActions.endRoom(false, 'End Room');
54
- // redirectToLeavePage();
55
- // };
56
-
57
- if (!permissions || !isConnected) {
58
- return null;
59
- }
60
- return isMobile ? (
61
- <MwebLeaveRoom leaveIconButton={LeaveIconButton} leaveRoom={leaveRoom} stopStream={stopStream} />
62
- ) : (
63
- <DesktopLeaveRoom
64
- leaveIconButton={LeaveIconButton}
65
- menuTriggerButton={MenuTriggerButton}
66
- leaveRoom={leaveRoom}
67
- stopStream={stopStream}
68
- />
69
- );
70
- };
71
-
72
- const LeaveIconButton = styled(IconButton, {
73
- color: '$on_primary_high',
74
- h: '$14',
75
- px: '$4',
76
- r: '$1',
77
- bg: '$alert_error_default',
78
- '&:not([disabled]):hover': {
79
- bg: '$alert_error_bright',
80
- },
81
- '&:not([disabled]):active': {
82
- bg: '$alert_error_default',
83
- },
84
- '@md': {
85
- mx: 0,
86
- },
87
- });
88
-
89
- const MenuTriggerButton = styled(LeaveIconButton, {
90
- borderLeft: '1px solid $alert_error_dim',
91
- borderTopLeftRadius: 0,
92
- borderBottomLeftRadius: 0,
93
- px: '$2',
94
- });
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
- import { useMedia } from 'react-use';
3
- import { DesktopOptions } from './SplitComponents/DesktopOptions';
4
- import { MwebOptions } from './SplitComponents/MwebOptions';
5
- import { config as cssConfig } from '../../../';
6
-
7
- export const MoreSettings = () => {
8
- const isMobile = useMedia(cssConfig.media.md);
9
- return isMobile ? <MwebOptions /> : <DesktopOptions />;
10
- };
@@ -1,219 +0,0 @@
1
- import React, { Fragment, useState } from 'react';
2
- import { HMSHLSPlayer } from '@100mslive/hls-player';
3
- import {
4
- selectAppData,
5
- selectLocalPeerID,
6
- selectLocalPeerRoleName,
7
- useHMSActions,
8
- useHMSStore,
9
- } from '@100mslive/react-sdk';
10
- import { BrbIcon, CheckIcon, DragHandleIcon, HandIcon, InfoIcon, PipIcon, SettingsIcon } from '@100mslive/react-icons';
11
- import { Checkbox, Dropdown, Flex, Text, Tooltip } from '../../../../';
12
- import IconButton from '../../../IconButton';
13
- import { PIP } from '../../PIP';
14
- import { RoleChangeModal } from '../../RoleChangeModal';
15
- import SettingsModal from '../../Settings/SettingsModal';
16
- import StartRecording from '../../Settings/StartRecording';
17
- import { StatsForNerds } from '../../StatsForNerds';
18
- import { BulkRoleChangeModal } from '.././BulkRoleChangeModal';
19
- import { FullScreenItem } from '.././FullScreenItem';
20
- import { MuteAllModal } from '.././MuteAllModal';
21
- import { useHLSViewerRole } from '../../AppData/useUISettings';
22
- import { useDropdownList } from '../../hooks/useDropdownList';
23
- import { useIsFeatureEnabled } from '../../hooks/useFeatures';
24
- import { useMyMetadata } from '../../hooks/useMetadata';
25
- import { useShowStreamingUI } from '../../../common/hooks';
26
- import { FeatureFlags } from '../../../services/FeatureFlags';
27
- import { APP_DATA, FEATURE_LIST, isMacOS } from '../../../common/constants';
28
-
29
- const MODALS = {
30
- CHANGE_NAME: 'changeName',
31
- SELF_ROLE_CHANGE: 'selfRoleChange',
32
- MORE_SETTINGS: 'moreSettings',
33
- START_RECORDING: 'startRecording',
34
- DEVICE_SETTINGS: 'deviceSettings',
35
- STATS_FOR_NERDS: 'statsForNerds',
36
- BULK_ROLE_CHANGE: 'bulkRoleChange',
37
- MUTE_ALL: 'muteAll',
38
- EMBED_URL: 'embedUrl',
39
- };
40
-
41
- export const DesktopOptions = () => {
42
- const localPeerId = useHMSStore(selectLocalPeerID);
43
- const localPeerRole = useHMSStore(selectLocalPeerRoleName);
44
- const hmsActions = useHMSActions();
45
- const enablHlsStats = useHMSStore(selectAppData(APP_DATA.hlsStats));
46
- const isSFNEnabled = useIsFeatureEnabled(FEATURE_LIST.STARTS_FOR_NERDS);
47
- const [openModals, setOpenModals] = useState(new Set());
48
- const { isHandRaised, isBRBOn, toggleHandRaise, toggleBRB } = useMyMetadata();
49
- const isHandRaiseEnabled = useIsFeatureEnabled(FEATURE_LIST.HAND_RAISE);
50
- const isBRBEnabled = useIsFeatureEnabled(FEATURE_LIST.BRB);
51
- const showStreamingUI = useShowStreamingUI();
52
- const hlsViewerRole = useHLSViewerRole();
53
- const isHlsViewer = hlsViewerRole === localPeerRole;
54
- const isPIPEnabled = useIsFeatureEnabled(FEATURE_LIST.PICTURE_IN_PICTURE);
55
-
56
- useDropdownList({ open: openModals.size > 0, name: 'MoreSettings' });
57
-
58
- const updateState = (modalName, value) => {
59
- setOpenModals(modals => {
60
- const copy = new Set(modals);
61
- if (value) {
62
- // avoiding extra set state trigger which removes currently open dialog by clearing set.
63
- copy.clear();
64
- copy.add(modalName);
65
- } else {
66
- copy.delete(modalName);
67
- }
68
- return copy;
69
- });
70
- };
71
-
72
- return (
73
- <Fragment>
74
- <Dropdown.Root
75
- open={openModals.has(MODALS.MORE_SETTINGS)}
76
- onOpenChange={value => updateState(MODALS.MORE_SETTINGS, value)}
77
- modal={false}
78
- >
79
- <Dropdown.Trigger asChild data-testid="more_settings_btn">
80
- <IconButton>
81
- <Tooltip title="More options">
82
- <DragHandleIcon />
83
- </Tooltip>
84
- </IconButton>
85
- </Dropdown.Trigger>
86
-
87
- <Dropdown.Content
88
- sideOffset={5}
89
- align="end"
90
- css={{
91
- py: '$0',
92
- maxHeight: 'unset',
93
- '@md': { w: '$64' },
94
- "div[role='separator']:first-child": {
95
- display: 'none',
96
- },
97
- }}
98
- >
99
- {isHandRaiseEnabled && !showStreamingUI ? (
100
- <Dropdown.Item onClick={toggleHandRaise} data-testid="raise_hand_btn">
101
- <HandIcon />
102
- <Text variant="sm" css={{ ml: '$4', color: '$on_surface_high' }}>
103
- Raise Hand
104
- </Text>
105
- <Flex justify="end" css={{ color: '$on_surface_high', flexGrow: '1' }}>
106
- {isHandRaised ? <CheckIcon /> : null}
107
- </Flex>
108
- </Dropdown.Item>
109
- ) : null}
110
-
111
- {isBRBEnabled && !showStreamingUI ? (
112
- <Dropdown.Item onClick={toggleBRB} data-testid="brb_btn">
113
- <BrbIcon />
114
- <Text variant="sm" css={{ ml: '$4', color: '$on_surface_high' }}>
115
- Be Right Back
116
- </Text>
117
- <Flex justify="end" css={{ color: '$on_surface_high', flexGrow: '1' }}>
118
- {isBRBOn ? <CheckIcon /> : null}
119
- </Flex>
120
- </Dropdown.Item>
121
- ) : null}
122
-
123
- {(isBRBEnabled || isHandRaiseEnabled) && !showStreamingUI ? (
124
- <Dropdown.ItemSeparator css={{ mx: '0' }} />
125
- ) : null}
126
-
127
- {isPIPEnabled && !isHlsViewer ? (
128
- <Dropdown.Item>
129
- <PIP
130
- content={
131
- <Flex css={{ w: '100%' }}>
132
- <PipIcon />
133
- <Text variant="sm" css={{ ml: '$4' }}>
134
- Picture in picture mode
135
- </Text>
136
- </Flex>
137
- }
138
- />
139
- </Dropdown.Item>
140
- ) : null}
141
-
142
- <FullScreenItem />
143
- {/* {isAllowedToPublish.screen && isEmbedEnabled && (
144
- <EmbedUrl setShowOpenUrl={() => updateState(MODALS.EMBED_URL, true)} />
145
- )} */}
146
-
147
- <Dropdown.ItemSeparator css={{ mx: 0 }} />
148
-
149
- <Dropdown.Item onClick={() => updateState(MODALS.DEVICE_SETTINGS, true)} data-testid="device_settings_btn">
150
- <SettingsIcon />
151
- <Text variant="sm" css={{ ml: '$4' }}>
152
- Settings
153
- </Text>
154
- </Dropdown.Item>
155
-
156
- {FeatureFlags.enableStatsForNerds &&
157
- isSFNEnabled &&
158
- (localPeerRole === 'hls-viewer' ? (
159
- HMSHLSPlayer.isSupported() ? (
160
- <Dropdown.Item
161
- onClick={() => hmsActions.setAppData(APP_DATA.hlsStats, !enablHlsStats)}
162
- data-testid="hls_stats"
163
- >
164
- <Checkbox.Root
165
- css={{ margin: '$2' }}
166
- checked={enablHlsStats}
167
- onCheckedChange={() => hmsActions.setAppData(APP_DATA.hlsStats, !enablHlsStats)}
168
- >
169
- <Checkbox.Indicator>
170
- <CheckIcon width={16} height={16} />
171
- </Checkbox.Indicator>
172
- </Checkbox.Root>
173
- <Flex justify="between" css={{ width: '100%' }}>
174
- <Text variant="sm" css={{ ml: '$4' }}>
175
- Show HLS Stats
176
- </Text>
177
-
178
- <Text variant="sm" css={{ ml: '$4' }}>
179
- {`${isMacOS ? '⌘' : 'ctrl'} + ]`}
180
- </Text>
181
- </Flex>
182
- </Dropdown.Item>
183
- ) : null
184
- ) : (
185
- <Dropdown.Item
186
- onClick={() => updateState(MODALS.STATS_FOR_NERDS, true)}
187
- data-testid="stats_for_nreds_btn"
188
- >
189
- <InfoIcon />
190
- <Text variant="sm" css={{ ml: '$4' }}>
191
- Stats for Nerds
192
- </Text>
193
- </Dropdown.Item>
194
- ))}
195
- </Dropdown.Content>
196
- </Dropdown.Root>
197
- {openModals.has(MODALS.BULK_ROLE_CHANGE) && (
198
- <BulkRoleChangeModal onOpenChange={value => updateState(MODALS.BULK_ROLE_CHANGE, value)} />
199
- )}
200
- {openModals.has(MODALS.MUTE_ALL) && <MuteAllModal onOpenChange={value => updateState(MODALS.MUTE_ALL, value)} />}
201
-
202
- {openModals.has(MODALS.START_RECORDING) && (
203
- <StartRecording open onOpenChange={value => updateState(MODALS.START_RECORDING, value)} />
204
- )}
205
- {openModals.has(MODALS.DEVICE_SETTINGS) && (
206
- <SettingsModal open onOpenChange={value => updateState(MODALS.DEVICE_SETTINGS, value)} />
207
- )}
208
- {FeatureFlags.enableStatsForNerds && openModals.has(MODALS.STATS_FOR_NERDS) && (
209
- <StatsForNerds open onOpenChange={value => updateState(MODALS.STATS_FOR_NERDS, value)} />
210
- )}
211
- {openModals.has(MODALS.SELF_ROLE_CHANGE) && (
212
- <RoleChangeModal peerId={localPeerId} onOpenChange={value => updateState(MODALS.SELF_ROLE_CHANGE, value)} />
213
- )}
214
- {/* {openModals.has(MODALS.EMBED_URL) && (
215
- <EmbedUrlModal onOpenChange={value => updateState(MODALS.EMBED_URL, value)} />
216
- )} */}
217
- </Fragment>
218
- );
219
- };
@@ -1,25 +0,0 @@
1
- import { useEffect } from 'react';
2
- import { HMSNotificationTypes, useHMSNotifications } from '@100mslive/react-sdk';
3
- import { ToastBatcher } from '../Toast/ToastBatcher';
4
- import { useIsHeadless, useSubscribedNotifications } from '../AppData/useUISettings';
5
- import { useIsFeatureEnabled } from '../hooks/useFeatures';
6
- import { FEATURE_LIST, SUBSCRIBED_NOTIFICATIONS } from '../../common/constants';
7
-
8
- export const MessageNotifications = () => {
9
- const notification = useHMSNotifications(HMSNotificationTypes.NEW_MESSAGE);
10
- const isChatEnabled = useIsFeatureEnabled(FEATURE_LIST.CHAT);
11
- const isNewMessageSubscribed = useSubscribedNotifications(SUBSCRIBED_NOTIFICATIONS.NEW_MESSAGE);
12
- const isHeadless = useIsHeadless();
13
- useEffect(() => {
14
- if (!notification) {
15
- return;
16
- }
17
- console.debug(`[${notification.type}]`, notification);
18
- if (!isNewMessageSubscribed || notification.data?.ignored || !isChatEnabled) {
19
- return;
20
- }
21
- ToastBatcher.showToast({ notification });
22
- }, [notification, isNewMessageSubscribed, isHeadless, isChatEnabled]);
23
-
24
- return null;
25
- };
@@ -1,29 +0,0 @@
1
- import React from 'react';
2
- import { ChevronLeftIcon, ChevronRightIcon } from '@100mslive/react-icons';
3
- import { StyledPagination } from '../../Pagination';
4
-
5
- export const Pagination = ({ page, onPageChange, numPages }) => {
6
- const disableLeft = page === 0;
7
- const disableRight = page === numPages - 1;
8
- const nextPage = () => {
9
- onPageChange(Math.min(page + 1, numPages - 1));
10
- };
11
- const prevPage = () => {
12
- onPageChange(Math.max(page - 1, 0));
13
- };
14
- return (
15
- <StyledPagination.Root>
16
- <StyledPagination.Chevron disabled={disableLeft} onClick={prevPage}>
17
- <ChevronLeftIcon width={16} height={16} style={{ cursor: disableLeft ? 'not-allowed' : 'pointer' }} />
18
- </StyledPagination.Chevron>
19
- <StyledPagination.Dots>
20
- {[...Array(numPages)].map((_, i) => (
21
- <StyledPagination.Dot key={i} active={page === i} onClick={() => onPageChange(i)} />
22
- ))}
23
- </StyledPagination.Dots>
24
- <StyledPagination.Chevron disabled={disableRight} onClick={nextPage}>
25
- <ChevronRightIcon width={16} height={16} style={{ cursor: disableRight ? 'not-allowed' : 'pointer' }} />
26
- </StyledPagination.Chevron>
27
- </StyledPagination.Root>
28
- );
29
- };
@@ -1,26 +0,0 @@
1
- import React from 'react';
2
- import { selectRoleChangeRequest, useHMSActions, useHMSStore } from '@100mslive/react-sdk';
3
- import { RequestDialog } from '../primitives/DialogContent';
4
- import { useIsHeadless } from './AppData/useUISettings';
5
-
6
- export const RoleChangeRequestModal = () => {
7
- const hmsActions = useHMSActions();
8
- const isHeadless = useIsHeadless();
9
- const roleChangeRequest = useHMSStore(selectRoleChangeRequest);
10
-
11
- if (!roleChangeRequest?.role || isHeadless) {
12
- return null;
13
- }
14
-
15
- return (
16
- <RequestDialog
17
- title="Role Change Request"
18
- onOpenChange={value => !value && hmsActions.rejectChangeRole(roleChangeRequest)}
19
- body={`${roleChangeRequest?.requestedBy?.name} has requested you to change your role to ${roleChangeRequest?.role?.name}.`}
20
- onAction={() => {
21
- hmsActions.acceptChangeRole(roleChangeRequest);
22
- }}
23
- actionText="Accept"
24
- />
25
- );
26
- };
@@ -1,73 +0,0 @@
1
- import React, { Fragment, useEffect, useState } from 'react';
2
- import { useVideoList } from '@100mslive/react-sdk';
3
- import { useTheme } from '../../Theme';
4
- import { StyledVideoList } from '../../VideoList';
5
- import { Pagination } from './Pagination';
6
- import ScreenshareTile from './ScreenshareTile';
7
- import VideoTile from './VideoTile';
8
- import { useAppConfig } from './AppData/useAppConfig';
9
- import { useIsHeadless } from './AppData/useUISettings';
10
-
11
- const List = ({ maxTileCount, peers, maxColCount, maxRowCount, includeScreenShareForPeer }) => {
12
- const { aspectRatio } = useTheme();
13
- const tileOffset = useAppConfig('headlessConfig', 'tileOffset');
14
- const isHeadless = useIsHeadless();
15
-
16
- const { ref, pagesWithTiles } = useVideoList({
17
- peers,
18
- maxTileCount,
19
- maxColCount,
20
- maxRowCount,
21
- includeScreenShareForPeer,
22
- aspectRatio,
23
- offsetY: getOffset({ isHeadless, tileOffset }),
24
- });
25
- const [page, setPage] = useState(0);
26
- useEffect(() => {
27
- // currentPageIndex should not exceed pages length
28
- if (page >= pagesWithTiles.length) {
29
- setPage(0);
30
- }
31
- }, [pagesWithTiles.length, page]);
32
- return (
33
- <StyledVideoList.Root ref={ref}>
34
- <StyledVideoList.Container css={{ flexWrap: 'wrap', placeContent: 'center' }}>
35
- {pagesWithTiles && pagesWithTiles.length > 0
36
- ? pagesWithTiles[page]?.map(tile => {
37
- if (tile.width === 0 || tile.height === 0) {
38
- return null;
39
- }
40
- return (
41
- <Fragment key={tile.track?.id || tile.peer.id}>
42
- {tile.track?.source === 'screen' ? (
43
- <ScreenshareTile width={tile.width} height={tile.height} peerId={tile.peer.id} />
44
- ) : (
45
- <VideoTile
46
- width={tile.width}
47
- height={tile.height}
48
- peerId={tile.peer?.id}
49
- trackId={tile.track?.id}
50
- />
51
- )}
52
- </Fragment>
53
- );
54
- })
55
- : null}
56
- </StyledVideoList.Container>
57
- {!isHeadless && pagesWithTiles.length > 1 ? (
58
- <Pagination page={page} onPageChange={setPage} numPages={pagesWithTiles.length} />
59
- ) : null}
60
- </StyledVideoList.Root>
61
- );
62
- };
63
-
64
- const VideoList = React.memo(List);
65
-
66
- const getOffset = ({ tileOffset, isHeadless }) => {
67
- if (!isHeadless || isNaN(Number(tileOffset))) {
68
- return 32;
69
- }
70
- return Number(tileOffset);
71
- };
72
-
73
- export default VideoList;
@@ -1,85 +0,0 @@
1
- import React, { Fragment } from 'react';
2
- import { useMedia } from 'react-use';
3
- import { Box, Flex } from '../../Layout';
4
- import { config as cssConfig } from '../../Theme';
5
- import { FirstPersonDisplay } from './FirstPersonDisplay';
6
- import { Image } from './Image';
7
- import VideoList from './VideoList';
8
- import { useAppConfig } from './AppData/useAppConfig';
9
- import { useIsHeadless } from './AppData/useUISettings';
10
-
11
- const MAX_TILES_FOR_MOBILE = 4;
12
-
13
- /**
14
- * the below variables are for showing webinar etc. related image if required on certain meeting urls
15
- */
16
- const webinarProps = JSON.parse(process.env.REACT_APP_WEBINAR_PROPS || '{}');
17
- const eventRoomIDs = webinarProps?.ROOM_IDS || [];
18
- const eventsImg = webinarProps?.IMAGE_FILE || ''; // the image to show in center
19
- // the link to navigate to when user clicks on the image
20
- const webinarInfoLink = webinarProps?.LINK_HREF || 'https://100ms.live/';
21
-
22
- // The center of the screen shows bigger tiles
23
- export const GridCenterView = ({ peers, maxTileCount }) => {
24
- const mediaQueryLg = cssConfig.media.md;
25
- const limitMaxTiles = useMedia(mediaQueryLg);
26
-
27
- const headlessConfig = useAppConfig('headlessConfig');
28
- const isHeadless = useIsHeadless();
29
- return (
30
- <Fragment>
31
- <Box
32
- css={{
33
- flex: '1 1 0',
34
- height: '100%',
35
- mx: isHeadless && Number(headlessConfig?.tileOffset) === 0 ? '0' : '$8',
36
- '@md': { flex: '2 1 0' },
37
- }}
38
- >
39
- {peers && peers.length > 0 ? (
40
- <VideoList peers={peers} maxTileCount={limitMaxTiles ? MAX_TILES_FOR_MOBILE : maxTileCount} />
41
- ) : eventRoomIDs.some(id => window.location.href.includes(id)) ? (
42
- <Box
43
- css={{
44
- display: 'grid',
45
- placeItems: 'center',
46
- size: '100%',
47
- p: '$12',
48
- }}
49
- >
50
- <a href={webinarInfoLink} target="_blank" rel="noreferrer">
51
- <Image css={{ p: '$4', boxShadow: '$sm' }} alt="Event template" src={eventsImg} />
52
- </a>
53
- </Box>
54
- ) : (
55
- <FirstPersonDisplay />
56
- )}
57
- </Box>
58
- </Fragment>
59
- );
60
- };
61
-
62
- // Side pane shows smaller tiles
63
- export const GridSidePaneView = ({ peers }) => {
64
- const headlessConfig = useAppConfig('headlessConfig');
65
- const isHeadless = useIsHeadless();
66
- return (
67
- <Flex
68
- direction="column"
69
- css={{
70
- flex: '0 0 20%',
71
- mx: isHeadless && Number(headlessConfig?.tileOffset) === 0 ? '0' : '$8',
72
- '@lg': {
73
- flex: '0 0 25%',
74
- },
75
- '@md': {
76
- flex: '1 1 0',
77
- },
78
- }}
79
- >
80
- <Flex css={{ flex: '1 1 0' }} align="end">
81
- {peers && peers.length > 0 && <VideoList peers={peers} maxColCount={1} />}
82
- </Flex>
83
- </Flex>
84
- );
85
- };
@@ -1,22 +0,0 @@
1
- import { selectTemplateAppData, useHMSStore } from '@100mslive/react-sdk';
2
-
3
- export const useFeatures = () => {
4
- let features = useHMSStore(selectTemplateAppData)?.features;
5
- return features && typeof features === 'string' ? features.split(',') : undefined;
6
- };
7
-
8
- export const useIsFeatureEnabled = key => {
9
- let features = useFeatures();
10
- return features ? features.includes(key) : true;
11
- };
12
-
13
- export const useRolePreference = () => {
14
- let preference = useHMSStore(selectTemplateAppData)?.rolePreference;
15
- try {
16
- preference = JSON.parse(preference || '{}');
17
- return preference;
18
- } catch (e) {
19
- console.log('role preference parse error', e);
20
- return undefined;
21
- }
22
- };
@@ -1,19 +0,0 @@
1
- import { useCallback } from 'react';
2
- import { useNavigate } from 'react-router-dom';
3
- import { getRoutePrefix } from '../../common/utils';
4
-
5
- export const useNavigation = () => {
6
- const navigate = useNavigate();
7
- const navigation = useCallback(
8
- path => {
9
- const prefix = getRoutePrefix();
10
- let route = path;
11
- if (prefix && !path.startsWith(prefix)) {
12
- route = `${prefix}${path}`;
13
- }
14
- navigate(route);
15
- },
16
- [navigate],
17
- );
18
- return navigation;
19
- };
@@ -1,20 +0,0 @@
1
- import { useEffect } from 'react';
2
- import { useSearchParam } from 'react-use';
3
- import { useSetUiSettings } from '../AppData/useUISettings';
4
- import { QUERY_PARAM_SKIP_PREVIEW, QUERY_PARAM_SKIP_PREVIEW_HEADFUL, UI_SETTINGS } from '../../common/constants';
5
-
6
- export const useSkipPreview = () => {
7
- // way to skip preview for automated tests, beam recording and streaming
8
- const beamInToken = useSearchParam('token') === 'beam_recording'; // old format to remove
9
- // use this field to join directly for quick testing while in local
10
- const directJoinHeadfulFromEnv = process.env.REACT_APP_HEADLESS_JOIN === 'true';
11
- const directJoinHeadful = useSearchParam(QUERY_PARAM_SKIP_PREVIEW_HEADFUL) === 'true' || directJoinHeadfulFromEnv;
12
- let skipPreview = useSearchParam(QUERY_PARAM_SKIP_PREVIEW) === 'true';
13
- skipPreview = skipPreview || beamInToken || directJoinHeadful;
14
- const [, setIsHeadless] = useSetUiSettings(UI_SETTINGS.isHeadless);
15
- useEffect(() => {
16
- !directJoinHeadful && setIsHeadless(skipPreview);
17
- }, [directJoinHeadful, skipPreview]); //eslint-disable-line
18
-
19
- return skipPreview;
20
- };
@@ -1,29 +0,0 @@
1
- import React from 'react';
2
- import { InfoIcon } from '@100mslive/react-icons';
3
- import { Text } from '../../../';
4
- import { DialogRow } from '../../primitives/DialogContent';
5
-
6
- export const PdfErrorView = ({ isPDFUrlValid }) => {
7
- return (
8
- !isPDFUrlValid && (
9
- <DialogRow
10
- css={{
11
- mt: '-$8',
12
- color: '$alert_error_default',
13
- justifyContent: 'start',
14
- }}
15
- >
16
- <InfoIcon width="12px" height="12px" />
17
- <Text
18
- variant="caption"
19
- css={{
20
- pl: '$1',
21
- color: '$alert_error_default',
22
- }}
23
- >
24
- Please enter a valid PDF URL
25
- </Text>
26
- </DialogRow>
27
- )
28
- );
29
- };
@@ -1,8 +0,0 @@
1
- <svg width="32" height="42" viewBox="0 0 32 42" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect x="14.528" y="5.91187" width="2.944" height="30.176" fill="#538DFF"/>
3
- <rect x="22.2692" y="7.19727" width="2.944" height="30.176" transform="rotate(30 22.2692 7.19727)" fill="#538DFF"/>
4
- <rect x="31.088" y="19.5278" width="2.944" height="30.176" transform="rotate(90 31.088 19.5278)" fill="#538DFF"/>
5
- <rect x="29.8026" y="27.269" width="2.944" height="30.176" transform="rotate(120 29.8026 27.269)" fill="#538DFF"/>
6
- <rect x="24.8188" y="33.3304" width="2.944" height="30.176" transform="rotate(150 24.8188 33.3304)" fill="#538DFF"/>
7
- <rect x="28.3306" y="12.181" width="2.944" height="30.176" transform="rotate(60 28.3306 12.181)" fill="#538DFF"/>
8
- </svg>