@100mslive/roomkit-react 0.3.14-alpha.5 → 0.3.14-alpha.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -4951,7 +4951,7 @@
4951
4951
  "format": "cjs"
4952
4952
  },
4953
4953
  "../hms-video-store/dist/index.js": {
4954
- "bytes": 355009,
4954
+ "bytes": 355745,
4955
4955
  "imports": [
4956
4956
  {
4957
4957
  "path": "../../node_modules/reselect/es/index.js",
@@ -10974,7 +10974,7 @@
10974
10974
  ],
10975
10975
  "format": "esm"
10976
10976
  },
10977
- "../../../../../../../tmp/tmp-2808-dzzZXVch7YJl/19030590f5d3/tldraw.css": {
10977
+ "../../../../../../../tmp/tmp-2777-zkWjkXYni4cX/19035d7bc873/tldraw.css": {
10978
10978
  "bytes": 80111,
10979
10979
  "imports": [
10980
10980
  {
@@ -11024,7 +11024,7 @@
11024
11024
  }
11025
11025
  ]
11026
11026
  },
11027
- "../../../../../../../tmp/tmp-2808-dzzZXVch7YJl/19030590ee81/index.css": {
11027
+ "../../../../../../../tmp/tmp-2777-zkWjkXYni4cX/19035d7bc181/index.css": {
11028
11028
  "bytes": 597,
11029
11029
  "imports": [
11030
11030
  {
@@ -11033,7 +11033,7 @@
11033
11033
  "external": true
11034
11034
  },
11035
11035
  {
11036
- "path": "../../../../../../../tmp/tmp-2808-dzzZXVch7YJl/19030590f5d3/tldraw.css",
11036
+ "path": "../../../../../../../tmp/tmp-2777-zkWjkXYni4cX/19035d7bc873/tldraw.css",
11037
11037
  "kind": "import-rule",
11038
11038
  "original": "@tldraw/tldraw/tldraw.css"
11039
11039
  }
@@ -11108,7 +11108,7 @@
11108
11108
  "original": "../../common/constants"
11109
11109
  },
11110
11110
  {
11111
- "path": "../../../../../../../tmp/tmp-2808-dzzZXVch7YJl/19030590ee81/index.css",
11111
+ "path": "../../../../../../../tmp/tmp-2777-zkWjkXYni4cX/19035d7bc181/index.css",
11112
11112
  "kind": "import-statement",
11113
11113
  "original": "@100mslive/hms-whiteboard/index.css"
11114
11114
  },
@@ -13891,7 +13891,7 @@
13891
13891
  "format": "esm"
13892
13892
  },
13893
13893
  "src/Prebuilt/App.tsx": {
13894
- "bytes": 10909,
13894
+ "bytes": 10754,
13895
13895
  "imports": [
13896
13896
  {
13897
13897
  "path": "react",
@@ -14147,7 +14147,7 @@
14147
14147
  "format": "esm"
14148
14148
  },
14149
14149
  "src/Diagnostics/components.tsx": {
14150
- "bytes": 2317,
14150
+ "bytes": 2686,
14151
14151
  "imports": [
14152
14152
  {
14153
14153
  "path": "react",
@@ -14409,7 +14409,7 @@
14409
14409
  "format": "esm"
14410
14410
  },
14411
14411
  "src/Diagnostics/AudioTest.tsx": {
14412
- "bytes": 4763,
14412
+ "bytes": 5269,
14413
14413
  "imports": [
14414
14414
  {
14415
14415
  "path": "react",
@@ -14480,7 +14480,7 @@
14480
14480
  "format": "esm"
14481
14481
  },
14482
14482
  "src/Diagnostics/BrowserTest.tsx": {
14483
- "bytes": 4051,
14483
+ "bytes": 4184,
14484
14484
  "imports": [
14485
14485
  {
14486
14486
  "path": "react",
@@ -14521,7 +14521,7 @@
14521
14521
  "format": "esm"
14522
14522
  },
14523
14523
  "src/Diagnostics/ConnectivityTest.tsx": {
14524
- "bytes": 11149,
14524
+ "bytes": 11322,
14525
14525
  "imports": [
14526
14526
  {
14527
14527
  "path": "react",
@@ -14582,7 +14582,7 @@
14582
14582
  "format": "esm"
14583
14583
  },
14584
14584
  "src/Diagnostics/VideoTest.tsx": {
14585
- "bytes": 2316,
14585
+ "bytes": 2346,
14586
14586
  "imports": [
14587
14587
  {
14588
14588
  "path": "react",
@@ -14648,7 +14648,7 @@
14648
14648
  "format": "esm"
14649
14649
  },
14650
14650
  "src/Diagnostics/Diagnostics.tsx": {
14651
- "bytes": 4440,
14651
+ "bytes": 4666,
14652
14652
  "imports": [
14653
14653
  {
14654
14654
  "path": "react",
@@ -14961,7 +14961,7 @@
14961
14961
  "dist/index.js": {
14962
14962
  "imports": [
14963
14963
  {
14964
- "path": "dist/chunk-W6E3MUWX.js",
14964
+ "path": "dist/chunk-DR5OAQOV.js",
14965
14965
  "kind": "import-statement"
14966
14966
  }
14967
14967
  ],
@@ -15037,16 +15037,16 @@
15037
15037
  "inputs": {},
15038
15038
  "bytes": 1882
15039
15039
  },
15040
- "dist/HLSView-AV4CONPM.js.map": {
15040
+ "dist/HLSView-RRYP5FV5.js.map": {
15041
15041
  "imports": [],
15042
15042
  "exports": [],
15043
15043
  "inputs": {},
15044
15044
  "bytes": 100275
15045
15045
  },
15046
- "dist/HLSView-AV4CONPM.js": {
15046
+ "dist/HLSView-RRYP5FV5.js": {
15047
15047
  "imports": [
15048
15048
  {
15049
- "path": "dist/chunk-W6E3MUWX.js",
15049
+ "path": "dist/chunk-DR5OAQOV.js",
15050
15050
  "kind": "import-statement"
15051
15051
  },
15052
15052
  {
@@ -15224,7 +15224,7 @@
15224
15224
  "default"
15225
15225
  ],
15226
15226
  "entryPoint": "src/Prebuilt/layouts/HLSView.jsx",
15227
- "cssBundle": "dist/HLSView-HMJGKVNU.css",
15227
+ "cssBundle": "dist/HLSView-YIIBVIYC.css",
15228
15228
  "inputs": {
15229
15229
  "src/Prebuilt/layouts/HLSView.jsx": {
15230
15230
  "bytesInOutput": 27671
@@ -15283,13 +15283,13 @@
15283
15283
  },
15284
15284
  "bytes": 61702
15285
15285
  },
15286
- "dist/chunk-W6E3MUWX.js.map": {
15286
+ "dist/chunk-DR5OAQOV.js.map": {
15287
15287
  "imports": [],
15288
15288
  "exports": [],
15289
15289
  "inputs": {},
15290
- "bytes": 3889166
15290
+ "bytes": 3893083
15291
15291
  },
15292
- "dist/chunk-W6E3MUWX.js": {
15292
+ "dist/chunk-DR5OAQOV.js": {
15293
15293
  "imports": [
15294
15294
  {
15295
15295
  "path": "react",
@@ -17772,7 +17772,7 @@
17772
17772
  "external": true
17773
17773
  },
17774
17774
  {
17775
- "path": "dist/HLSView-AV4CONPM.js",
17775
+ "path": "dist/HLSView-RRYP5FV5.js",
17776
17776
  "kind": "dynamic-import"
17777
17777
  },
17778
17778
  {
@@ -18356,7 +18356,7 @@
18356
18356
  ],
18357
18357
  "inputs": {
18358
18358
  "<define:process.env>": {
18359
- "bytesInOutput": 17887
18359
+ "bytesInOutput": 17870
18360
18360
  },
18361
18361
  "../../node_modules/lodash/lodash.js": {
18362
18362
  "bytesInOutput": 224414
@@ -18641,7 +18641,7 @@
18641
18641
  "bytesInOutput": 887
18642
18642
  },
18643
18643
  "src/Prebuilt/App.tsx": {
18644
- "bytesInOutput": 8043
18644
+ "bytesInOutput": 7946
18645
18645
  },
18646
18646
  "src/Prebuilt/components/AppData/AppData.tsx": {
18647
18647
  "bytesInOutput": 6013
@@ -18839,7 +18839,7 @@
18839
18839
  "bytesInOutput": 9484
18840
18840
  },
18841
18841
  "../hms-video-store/dist/index.js": {
18842
- "bytesInOutput": 457464
18842
+ "bytesInOutput": 458428
18843
18843
  },
18844
18844
  "../../node_modules/reselect/es/index.js": {
18845
18845
  "bytesInOutput": 2550
@@ -19237,7 +19237,7 @@
19237
19237
  "src/Prebuilt/components/VideoLayouts/WhiteboardLayout.tsx": {
19238
19238
  "bytesInOutput": 2797
19239
19239
  },
19240
- "../../../../../../../tmp/tmp-2808-dzzZXVch7YJl/19030590ee81/index.css": {
19240
+ "../../../../../../../tmp/tmp-2777-zkWjkXYni4cX/19035d7bc181/index.css": {
19241
19241
  "bytesInOutput": 0
19242
19242
  },
19243
19243
  "src/Prebuilt/common/PeersSorter.ts": {
@@ -19382,31 +19382,31 @@
19382
19382
  "bytesInOutput": 27
19383
19383
  },
19384
19384
  "src/Diagnostics/Diagnostics.tsx": {
19385
- "bytesInOutput": 4678
19385
+ "bytesInOutput": 4900
19386
19386
  },
19387
19387
  "src/Diagnostics/components.tsx": {
19388
- "bytesInOutput": 2109
19388
+ "bytesInOutput": 2375
19389
19389
  },
19390
19390
  "src/Diagnostics/hms.ts": {
19391
19391
  "bytesInOutput": 237
19392
19392
  },
19393
19393
  "src/Diagnostics/AudioTest.tsx": {
19394
- "bytesInOutput": 4847
19394
+ "bytesInOutput": 5538
19395
19395
  },
19396
19396
  "src/Diagnostics/DeviceSelector.jsx": {
19397
19397
  "bytesInOutput": 2155
19398
19398
  },
19399
19399
  "src/Diagnostics/BrowserTest.tsx": {
19400
- "bytesInOutput": 4041
19400
+ "bytesInOutput": 4243
19401
19401
  },
19402
19402
  "src/Diagnostics/ConnectivityTest.tsx": {
19403
- "bytesInOutput": 12447
19403
+ "bytesInOutput": 12614
19404
19404
  },
19405
19405
  "src/Diagnostics/VideoTest.tsx": {
19406
- "bytesInOutput": 2265
19406
+ "bytesInOutput": 2295
19407
19407
  }
19408
19408
  },
19409
- "bytes": 1848367
19409
+ "bytes": 1850795
19410
19410
  },
19411
19411
  "dist/index.css.map": {
19412
19412
  "imports": [],
@@ -19468,22 +19468,22 @@
19468
19468
  }
19469
19469
  ],
19470
19470
  "inputs": {
19471
- "../../../../../../../tmp/tmp-2808-dzzZXVch7YJl/19030590f5d3/tldraw.css": {
19471
+ "../../../../../../../tmp/tmp-2777-zkWjkXYni4cX/19035d7bc873/tldraw.css": {
19472
19472
  "bytesInOutput": 75223
19473
19473
  },
19474
- "../../../../../../../tmp/tmp-2808-dzzZXVch7YJl/19030590ee81/index.css": {
19474
+ "../../../../../../../tmp/tmp-2777-zkWjkXYni4cX/19035d7bc181/index.css": {
19475
19475
  "bytesInOutput": 401
19476
19476
  }
19477
19477
  },
19478
19478
  "bytes": 75901
19479
19479
  },
19480
- "dist/HLSView-HMJGKVNU.css.map": {
19480
+ "dist/HLSView-YIIBVIYC.css.map": {
19481
19481
  "imports": [],
19482
19482
  "exports": [],
19483
19483
  "inputs": {},
19484
19484
  "bytes": 122402
19485
19485
  },
19486
- "dist/HLSView-HMJGKVNU.css": {
19486
+ "dist/HLSView-YIIBVIYC.css": {
19487
19487
  "imports": [
19488
19488
  {
19489
19489
  "path": "https://fonts.googleapis.com/css2?family=Inter:wght@400;500&display=swap",
@@ -19537,10 +19537,10 @@
19537
19537
  }
19538
19538
  ],
19539
19539
  "inputs": {
19540
- "../../../../../../../tmp/tmp-2808-dzzZXVch7YJl/19030590f5d3/tldraw.css": {
19540
+ "../../../../../../../tmp/tmp-2777-zkWjkXYni4cX/19035d7bc873/tldraw.css": {
19541
19541
  "bytesInOutput": 75223
19542
19542
  },
19543
- "../../../../../../../tmp/tmp-2808-dzzZXVch7YJl/19030590ee81/index.css": {
19543
+ "../../../../../../../tmp/tmp-2777-zkWjkXYni4cX/19035d7bc181/index.css": {
19544
19544
  "bytesInOutput": 401
19545
19545
  }
19546
19546
  },
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "prebuilt",
11
11
  "roomkit"
12
12
  ],
13
- "version": "0.3.14-alpha.5",
13
+ "version": "0.3.14-alpha.7",
14
14
  "author": "100ms",
15
15
  "license": "MIT",
16
16
  "repository": {
@@ -74,12 +74,12 @@
74
74
  "react": ">=17.0.2 <19.0.0"
75
75
  },
76
76
  "dependencies": {
77
- "@100mslive/hls-player": "0.3.14-alpha.5",
77
+ "@100mslive/hls-player": "0.3.14-alpha.7",
78
78
  "@100mslive/hms-noise-cancellation": "0.0.1",
79
- "@100mslive/hms-virtual-background": "1.13.14-alpha.5",
80
- "@100mslive/hms-whiteboard": "0.0.4-alpha.5",
81
- "@100mslive/react-icons": "0.10.14-alpha.5",
82
- "@100mslive/react-sdk": "0.10.14-alpha.5",
79
+ "@100mslive/hms-virtual-background": "1.13.14-alpha.7",
80
+ "@100mslive/hms-whiteboard": "0.0.4-alpha.7",
81
+ "@100mslive/react-icons": "0.10.14-alpha.7",
82
+ "@100mslive/react-sdk": "0.10.14-alpha.7",
83
83
  "@100mslive/types-prebuilt": "0.12.9",
84
84
  "@emoji-mart/data": "^1.0.6",
85
85
  "@emoji-mart/react": "^1.0.1",
@@ -115,5 +115,5 @@
115
115
  "uuid": "^8.3.2",
116
116
  "worker-timers": "^7.0.40"
117
117
  },
118
- "gitHead": "2d512204b017ee7b52ba3459eb0af1ef57cd8568"
118
+ "gitHead": "c57e858bbc09c5b82722610c4ae0fcf200e61161"
119
119
  }
@@ -21,21 +21,25 @@ import { useAudioOutputTest } from '../Prebuilt/components/hooks/useAudioOutputT
21
21
  import { TEST_AUDIO_URL } from '../Prebuilt/common/constants';
22
22
 
23
23
  const SelectContainer = ({ children }: { children: React.ReactNode }) => (
24
- <Box css={{ w: '50%', '@lg': { w: '100%' } }}>{children}</Box>
24
+ <Box css={{ w: 'calc(50% - 0.75rem)', '@lg': { w: '100%' } }}>{children}</Box>
25
25
  );
26
26
 
27
27
  const MicTest = () => {
28
28
  const devices = useHMSStore(selectDevices);
29
29
  const [isRecording, setIsRecording] = useState(false);
30
30
  const { audioInputDeviceId } = useHMSStore(selectLocalMediaSettings);
31
- const [selectedMic, setSelectedMic] = useState(audioInputDeviceId || 'default');
31
+ const [selectedMic, setSelectedMic] = useState(audioInputDeviceId || devices.audioInput[0]?.deviceId);
32
32
  const trackID = useHMSStore(selectLocalAudioTrackID);
33
33
  const audioLevel = useHMSStore(selectTrackAudioByID(trackID));
34
+ const { audioOutputDeviceId } = useHMSStore(selectLocalMediaSettings);
35
+ const { playing, setPlaying, audioRef } = useAudioOutputTest({
36
+ deviceId: audioOutputDeviceId || devices.audioOutput[0]?.deviceId,
37
+ });
34
38
 
35
39
  return (
36
40
  <SelectContainer>
37
41
  <DeviceSelector
38
- title="Microphone(Input)"
42
+ title="Microphone (Input)"
39
43
  devices={devices.audioInput}
40
44
  selection={selectedMic}
41
45
  icon={<MicOnIcon />}
@@ -47,6 +51,8 @@ const MicTest = () => {
47
51
  />
48
52
  <Flex css={{ gap: '$6', alignItems: 'center' }}>
49
53
  <Button
54
+ variant="standard"
55
+ icon
50
56
  onClick={() =>
51
57
  hmsDiagnostics
52
58
  .startMicCheck(selectedMic, () => {
@@ -58,23 +64,45 @@ const MicTest = () => {
58
64
  }
59
65
  disabled={isRecording}
60
66
  >
67
+ <MicOnIcon />
61
68
  {isRecording ? 'Recording...' : 'Record'}
62
69
  </Button>
63
- {isRecording && (
64
- <>
65
- <Text>
66
- <MicOnIcon />
67
- </Text>
68
- <Progress.Root value={audioLevel} css={{ h: '$2' }}>
69
- <Progress.Content
70
- style={{
71
- transform: `translateX(-${100 - audioLevel}%)`,
72
- transition: 'transform 0.3s',
73
- }}
74
- />
75
- </Progress.Root>
76
- </>
77
- )}
70
+
71
+ <Button
72
+ icon
73
+ variant="standard"
74
+ outlined={hmsDiagnostics.getRecordedAudio() === TEST_AUDIO_URL}
75
+ onClick={() => {
76
+ if (audioRef.current) {
77
+ audioRef.current.src = hmsDiagnostics.getRecordedAudio() || '';
78
+ audioRef.current.play();
79
+ }
80
+ }}
81
+ disabled={playing || hmsDiagnostics.getRecordedAudio() === TEST_AUDIO_URL}
82
+ >
83
+ <SpeakerIcon />
84
+ {playing ? 'Playing...' : 'Playback'}
85
+ </Button>
86
+ <audio
87
+ ref={audioRef}
88
+ onEnded={() => setPlaying(false)}
89
+ onPlay={() => setPlaying(true)}
90
+ style={{ display: 'none' }}
91
+ />
92
+ </Flex>
93
+
94
+ <Flex align="center" css={{ mt: '$4', maxWidth: '10rem', opacity: isRecording ? '1' : '0', gap: '$4' }}>
95
+ <Text>
96
+ <MicOnIcon />
97
+ </Text>
98
+ <Progress.Root value={audioLevel} css={{ h: '$2' }}>
99
+ <Progress.Content
100
+ style={{
101
+ transform: `translateX(-${100 - audioLevel}%)`,
102
+ transition: 'transform 0.3s',
103
+ }}
104
+ />
105
+ </Progress.Root>
78
106
  </Flex>
79
107
  </SelectContainer>
80
108
  );
@@ -84,37 +112,22 @@ const SpeakerTest = () => {
84
112
  const actions = useHMSActions();
85
113
  const devices = useHMSStore(selectDevices);
86
114
  const { audioOutputDeviceId } = useHMSStore(selectLocalMediaSettings);
87
- const { playing, setPlaying, audioRef } = useAudioOutputTest({ deviceId: audioOutputDeviceId || 'default' });
115
+
116
+ if (devices.audioOutput.length === 0) {
117
+ return <></>;
118
+ }
88
119
 
89
120
  return (
90
121
  <SelectContainer>
91
122
  <DeviceSelector
92
- title="Speaker(output)"
123
+ title="Speaker (Output)"
93
124
  devices={devices.audioOutput}
94
- selection={audioOutputDeviceId || 'default'}
125
+ selection={audioOutputDeviceId || devices.audioOutput[0]?.deviceId}
95
126
  icon={<SpeakerIcon />}
96
127
  onChange={(deviceId: string) => {
97
128
  actions.setAudioOutputDevice(deviceId);
98
129
  }}
99
130
  />
100
- <Button
101
- onClick={() => {
102
- if (audioRef.current) {
103
- audioRef.current.src = hmsDiagnostics.getRecordedAudio() || TEST_AUDIO_URL;
104
- audioRef.current.play();
105
- }
106
- }}
107
- disabled={playing}
108
- >
109
- <SpeakerIcon />
110
- <Text css={{ ml: '$4' }}>{playing ? 'Playing' : 'Playback'}</Text>
111
- </Button>
112
- <audio
113
- ref={audioRef}
114
- onEnded={() => setPlaying(false)}
115
- onPlay={() => setPlaying(true)}
116
- style={{ display: 'none' }}
117
- />
118
131
  </SelectContainer>
119
132
  );
120
133
  };
@@ -129,8 +142,9 @@ export const AudioTest = () => {
129
142
  <>
130
143
  <TestContainer>
131
144
  <Text variant="body2" css={{ c: '$on_primary_medium' }}>
132
- Record an audio clip and play it back to check that your microphone and speaker are working. If they aren't,
133
- make sure your volume is turned up, try a different speaker or microphone, or check your bluetooth settings.
145
+ Record a 10 second audio clip and play it back to check that your microphone and speaker are working. If they
146
+ aren't, make sure your volume is turned up, try a different speaker or microphone, or check your bluetooth
147
+ settings.
134
148
  </Text>
135
149
 
136
150
  <Flex
@@ -71,6 +71,11 @@ export const browserTypeIconInfo = {
71
71
  val: 'Safari',
72
72
  icon: `${CMS_MEDIA_SERVER}cms/Safari_254e74ed94/Safari_254e74ed94.svg`,
73
73
  },
74
+ 'mobile safari': {
75
+ key: 'safari',
76
+ val: 'Safari',
77
+ icon: `${CMS_MEDIA_SERVER}cms/Safari_254e74ed94/Safari_254e74ed94.svg`,
78
+ },
74
79
  edge: {
75
80
  key: 'edge',
76
81
  val: 'Edge',
@@ -88,11 +93,11 @@ const CheckDetails = ({ title, value, iconURL }: { title: string; value: string;
88
93
  <Text css={{ c: '$on_primary_medium', mb: '$6' }}>{title}</Text>
89
94
  <Flex align="center">
90
95
  {iconURL && (
91
- <Box css={{ size: '2rem', r: '$round', bg: '$surface_brighter' }}>
96
+ <Box css={{ size: '2rem', r: '$round', bg: '$surface_brighter', mr: '$4' }}>
92
97
  <img style={{ objectFit: 'contain', width: '2rem' }} src={iconURL} alt={value} />
93
98
  </Box>
94
99
  )}
95
- <Text css={{ ml: '$4' }}>{value}</Text>
100
+ <Text>{value}</Text>
96
101
  </Flex>
97
102
  </Box>
98
103
  );
@@ -114,7 +119,7 @@ export const BrowserTest = () => {
114
119
  iconURL={
115
120
  parsedUserAgent.getBrowser().name &&
116
121
  browserTypeIconInfo[parsedUserAgent.getBrowser().name?.toLowerCase() as keyof typeof browserTypeIconInfo]
117
- .icon
122
+ ?.icon
118
123
  }
119
124
  value={`${parsedUserAgent.getBrowser().name} ${parsedUserAgent.getBrowser().version}`}
120
125
  />
@@ -123,7 +128,7 @@ export const BrowserTest = () => {
123
128
  iconURL={
124
129
  parsedUserAgent.getOS().name &&
125
130
  operatingSystemIconInfo[parsedUserAgent.getOS().name?.toLowerCase() as keyof typeof operatingSystemIconInfo]
126
- .icon
131
+ ?.icon
127
132
  }
128
133
  value={`${parsedUserAgent.getOS().name} ${parsedUserAgent.getOS().version}`}
129
134
  />
@@ -1,7 +1,7 @@
1
- import React, { useState } from 'react';
1
+ import React, { useContext, useState } from 'react';
2
2
  import { ConnectivityCheckResult, ConnectivityState, DiagnosticsRTCStats } from '@100mslive/react-sdk';
3
3
  import { CheckCircleIcon, CrossCircleIcon, LinkIcon } from '@100mslive/react-icons';
4
- import { TestContainer, TestFooter } from './components';
4
+ import { DiagnosticsContext, TestContainer, TestFooter } from './components';
5
5
  import { Button } from '../Button';
6
6
  import { Box, Flex } from '../Layout';
7
7
  import { Loading } from '../Loading';
@@ -310,12 +310,14 @@ const RegionSelector = ({
310
310
  };
311
311
 
312
312
  export const ConnectivityTest = () => {
313
+ const { setConnectivityTested } = useContext(DiagnosticsContext);
313
314
  const [region, setRegion] = useState<string | undefined>(Object.keys(Regions)[0]);
314
315
  const [error, setError] = useState<Error | undefined>();
315
316
  const [progress, setProgress] = useState<ConnectivityState>();
316
317
  const [result, setResult] = useState<ConnectivityCheckResult | undefined>();
317
318
 
318
319
  const startTest = () => {
320
+ setConnectivityTested(false);
319
321
  setError(undefined);
320
322
  setResult(undefined);
321
323
  hmsDiagnostics
@@ -324,6 +326,7 @@ export const ConnectivityTest = () => {
324
326
  setProgress(state);
325
327
  },
326
328
  result => {
329
+ setConnectivityTested(true);
327
330
  setResult(result);
328
331
  },
329
332
  region,
@@ -21,8 +21,8 @@ const DiagnosticsStepIcon: Record<string, React.ReactNode> = {
21
21
  const Container = ({ children }: { children: React.ReactNode }) => (
22
22
  <Box
23
23
  css={{
24
- px: '155px',
25
- py: '160px',
24
+ px: '120px',
25
+ py: '120px',
26
26
  bg: '$background_dim',
27
27
  lineHeight: '1.5',
28
28
  '-webkit-text-size-adjust': '100%',
@@ -67,7 +67,7 @@ const DiagnosticsStepHeader = () => {
67
67
 
68
68
  const DiagnosticsStep = () => {
69
69
  return (
70
- <Box css={{ border: '1px solid $border_default', r: '$1', w: '75%', '@lg': { w: '100%' } }}>
70
+ <Box css={{ border: '1px solid $border_default', r: '$1', w: '75%', maxWidth: '65rem', '@lg': { w: '100%' } }}>
71
71
  <DiagnosticsStepHeader />
72
72
  <Box css={{ maxHeight: '55vh', overflowY: 'auto' }}>
73
73
  <DiagnosticsStepTest />
@@ -77,7 +77,7 @@ const DiagnosticsStep = () => {
77
77
  };
78
78
 
79
79
  const DiagnosticsStepsList = () => {
80
- const { activeStep } = useContext(DiagnosticsContext);
80
+ const { activeStep, connectivityTested } = useContext(DiagnosticsContext);
81
81
 
82
82
  return (
83
83
  <Box css={{ w: '25%', '@lg': { display: 'none' } }}>
@@ -85,18 +85,18 @@ const DiagnosticsStepsList = () => {
85
85
  const keys = Object.keys(DiagnosticsSteps);
86
86
  const activeStepIndex = keys.indexOf(activeStep);
87
87
  const keyIndex = keys.indexOf(key);
88
- const isStepCompleted = activeStepIndex > keyIndex;
88
+ const isStepCompleted = activeStepIndex > keyIndex || (activeStep === 'connectivity' && connectivityTested);
89
89
 
90
90
  let color = '$on_primary_low';
91
- if (isStepCompleted) {
92
- color = '$primary_bright';
93
- }
94
91
  if (activeStep === key) {
95
92
  color = '$on_primary_high';
96
93
  }
94
+ if (isStepCompleted) {
95
+ color = '$primary_bright';
96
+ }
97
97
 
98
98
  return (
99
- <Flex css={{ mb: '$10', c: color, gap: '$4', alignItems: 'center' }}>
99
+ <Flex key={key} css={{ mb: '$10', c: color, gap: '$4', alignItems: 'center' }}>
100
100
  {isStepCompleted ? (
101
101
  <CheckCircleIcon width="1rem" height="1rem" />
102
102
  ) : (
@@ -112,10 +112,11 @@ const DiagnosticsStepsList = () => {
112
112
 
113
113
  export const Diagnostics = () => {
114
114
  const [activeStep, setActiveStep] = React.useState(Object.keys(DiagnosticsSteps)[0]);
115
+ const [connectivityTested, setConnectivityTested] = React.useState(false);
115
116
  return (
116
117
  <HMSRoomProvider store={hmsStore} actions={hmsActions} notifications={hmsNotifications} stats={hmsStats}>
117
118
  <HMSThemeProvider themeType="default">
118
- <DiagnosticsContext.Provider value={{ activeStep, setActiveStep }}>
119
+ <DiagnosticsContext.Provider value={{ activeStep, setActiveStep, connectivityTested, setConnectivityTested }}>
119
120
  <Container>
120
121
  <Text variant="h4">Pre-call Test</Text>
121
122
  <Text variant="md" css={{ c: '$on_primary_medium' }}>
@@ -27,10 +27,10 @@ export const VideoTest = () => {
27
27
  {trackID && (
28
28
  <StyledVideoTile.Container
29
29
  css={{
30
- w: '90%',
31
- height: '$48',
30
+ width: '90%',
31
+ aspectRatio: '16/9',
32
32
  mr: '$10',
33
- '@lg': { mr: 0, mb: '$10' },
33
+ '@lg': { mr: 0, mb: '$10', aspectRatio: '1/1' },
34
34
  }}
35
35
  >
36
36
  <Video mirror={true} trackId={trackID} />
@@ -15,11 +15,17 @@ export const DiagnosticsSteps: Record<string, string> = {
15
15
  export const DiagnosticsContext = React.createContext<{
16
16
  activeStep: string;
17
17
  setActiveStep: React.Dispatch<React.SetStateAction<string>>;
18
+ connectivityTested: boolean;
19
+ setConnectivityTested: React.Dispatch<React.SetStateAction<boolean>>;
18
20
  }>({
19
21
  activeStep: 'video',
20
22
  setActiveStep: () => {
21
23
  return;
22
24
  },
25
+ connectivityTested: false,
26
+ setConnectivityTested: () => {
27
+ return;
28
+ },
23
29
  });
24
30
 
25
31
  export const TestContainer = ({ css, children }: { css?: CSS; children: React.ReactNode }) => {
@@ -55,11 +61,17 @@ export const TestFooter = ({
55
61
  css={{
56
62
  py: '$8',
57
63
  px: '$10',
64
+ position: 'sticky',
65
+ bottom: '0',
66
+ background: '$background_dim',
58
67
  justifyContent: 'space-between',
59
68
  alignItems: 'center',
60
69
  borderTop: '1px solid $border_default',
61
70
  fontSize: '$sm',
71
+ borderBottomLeftRadius: '$1',
72
+ borderBottomRightRadius: '$1',
62
73
  lineHeight: '$sm',
74
+ zIndex: 1001,
63
75
  '@lg': { flexDirection: 'column', gap: '$8' },
64
76
  }}
65
77
  >