@digitalsamba/embedded-sdk 0.0.19 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.html DELETED
@@ -1,318 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
6
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
7
- <title>Document</title>
8
- <!-- <script src="https://unpkg.com/@digitalsamba/embedded-sdk"></script>-->
9
- <script src="./umd/index.js"></script>
10
- <style>
11
- .user-list-row {
12
- display: flex;
13
- margin: 12px 0 8px;
14
- align-items: center;
15
- }
16
-
17
- .user-list-avatar {
18
- width: 24px;
19
- height: 24px;
20
- display: block;
21
- border-radius: 50%;
22
- margin-right: 8px;
23
- }
24
-
25
- .speaker-indicator {
26
- width: 8px;
27
- height: 8px;
28
- display: block;
29
- border-radius: 50%;
30
- margin-right: 8px;
31
- background: #4cd964;
32
- opacity: 0;
33
- margin-left: 8px;
34
- }
35
-
36
- .speaker-indicator.show {
37
- opacity: 1
38
- }
39
-
40
-
41
- .log p {
42
- font-size: 14px;
43
- line-height: 1;
44
- margin: 0 0 4px
45
- }
46
-
47
- .buttons button, .captions-buttons button {
48
- margin: 2px;
49
- }
50
- </style>
51
- </head>
52
- <body>
53
- <div style="display: flex">
54
- <div class="ifp">
55
-
56
- </div>
57
- <div style="min-width: 300px ; padding: 0 16px">
58
- <h3>Room users:</h3>
59
- <div class="participants">
60
-
61
- </div>
62
- <h3>Room state</h3>
63
- <div class="state">
64
-
65
- </div>
66
- </div>
67
- </div>
68
- <div class="div buttons" style=" border: 1px solid yellow">
69
- <button class="c0" style="margin-right: 15px; border: 2px solid blue">LOAD</button>
70
-
71
- </div>
72
- <div class="div captions-buttons" style=" border: 1px solid yellow">
73
- <p>captions controls</p>
74
-
75
- </div>
76
-
77
- <div class="log">
78
-
79
- </div>
80
-
81
- <script async defer>
82
- const parent = document.querySelector('.ifp');
83
- const frame = document.querySelector('.if');
84
- const buttonsParent = document.querySelector('.buttons');
85
- const captionsButtonsParent = document.querySelector('.captions-buttons');
86
- const participantList = document.querySelector('.participants');
87
-
88
- const btn0 = document.querySelector('.c0');
89
-
90
-
91
- // change these values to connect to your room
92
- const TEAM = 'some-team';
93
- const ROOM = 'some-room';
94
- let ROOM_URL = 'https://localhost:3000/Public'
95
-
96
- if(window.location.search) {
97
- const params = new URLSearchParams(window.location.search);
98
- const dynamicRoomUrl = params.get('roomUrl');
99
- if(dynamicRoomUrl) {
100
- ROOM_URL = dynamicRoomUrl
101
- }
102
- }
103
-
104
- //const api = new DigitalSambaEmbedded({ root: parent, team: TEAM, room: ROOM});
105
- // const api = new DigitalSambaEmbedded({ frame});
106
- //const api = new DigitalSambaEmbedded({ url: ROOM_URL}, {reportErrors: true});
107
-
108
-
109
- var api = DigitalSambaEmbedded.createControl({ url: ROOM_URL, root: parent });
110
-
111
- const log = document.querySelector('.log');
112
-
113
- api.frame.width = 900;
114
- api.frame.height = 700;
115
-
116
- btn0.onclick = () => {api.load({ frameAttributes: {style: "border: 5px solid red"}, reportErrors: true })}
117
-
118
- const baseControls = [
119
- {command: 'toggleVideo', label: 'toggle video' },
120
- {command: 'enableVideo', label: 'enable video' },
121
- {command: 'disableVideo', label: 'disable video' },
122
- {command: 'toggleAudio', label: 'toggle audio' },
123
- {command: 'enableAudio', label: 'enable audio' },
124
- {command: 'disableAudio', label: 'disable audio' },
125
- {command: 'startScreenshare', label: 'start screenshare' },
126
- {command: 'stopScreenshare', label: 'stop screenshare' },
127
- {command: 'raiseHand', label: 'raise hand' },
128
- {command: 'startRecording', label: 'start recording' },
129
- {command: 'stopRecording', label: 'stop recording' },
130
- {command: 'showToolbar', label: 'show toolbar' },
131
- {command: 'hideToolbar', label: 'hide toolbar' },
132
- {command: 'toggleToolbar', label: 'toggle toolbar' },
133
- {command: 'changeLayoutMode', label: 'auto layout', args: ['auto'] },
134
- {command: 'changeLayoutMode', label: 'tiled layout', args: ['tiled'] },
135
- {command: 'showCaptions', label: 'show captions'},
136
- {command: 'hideCaptions', label: 'hide captions'},
137
- {command: 'toggleCaptions', label: 'toggle captions'},
138
- {command: 'leaveSession', label: 'leave session' },
139
- {command: 'endSession', label: 'end session' },
140
- ]
141
-
142
- baseControls.forEach(control => {
143
- const button = document.createElement("button");
144
- button.innerHTML = control.label;
145
- button.onclick = () => api[control.command](...(control.args || []))
146
-
147
- buttonsParent.appendChild(button);
148
- })
149
-
150
- const captionsControls = [
151
- {command: 'configureCaptions', label: 'set font size - small', args: [{fontSize: 'small'}] },
152
- {command: 'configureCaptions', label: 'set font size - medium', args: [{fontSize: 'medium'}] },
153
- {command: 'configureCaptions', label: 'set font size - large', args: [{fontSize: 'large'}] },
154
- {command: 'configureCaptions', label: 'set spoken language - english', args: [{spokenLanguage: 'en'}] },
155
- {command: 'configureCaptions', label: 'set spoken language - french', args: [{spokenLanguage: 'fr'}] },
156
- {command: 'configureCaptions', label: 'set spoken language - spanish', args: [{spokenLanguage: 'es'}] },
157
- ]
158
-
159
- captionsControls.forEach(control => {
160
- const button = document.createElement("button");
161
- button.innerHTML = control.label;
162
- button.onclick = () => api[control.command](...(control.args || []))
163
-
164
- captionsButtonsParent.appendChild(button);
165
- })
166
-
167
- api.on('*', (data) => {
168
- log.innerHTML += `<p>${Number(new Date)}: ev(${data?.type}): ${JSON.stringify(data)}</p>`
169
- });
170
-
171
- api.on('userJoined', (data) => {
172
- log.innerHTML += `<p>${Number(new Date)}: USER JOINED: ${JSON.stringify(data)}</p>`
173
- });
174
-
175
- api.on('userLeft', (data) => {
176
- log.innerHTML += `<p>${Number(new Date)}: USER LEFT: ${JSON.stringify(data)}</p>`
177
- });
178
-
179
- api.on('permissionsChanged', ({ data }) => {
180
- if(data.broadcast !== undefined){
181
- if(data.broadcast) {
182
- alert('You were granted broadcast permission')
183
- } else {
184
- alert('Your permission to broadcast was rejected')
185
- }
186
- }
187
-
188
- if(data.screenshare !== undefined){
189
- if(data.screenshare) {
190
- alert('You were granted screenshare permission')
191
- } else {
192
- alert('Your permission to screenshare was rejected')
193
- }
194
- }
195
- });
196
-
197
- api.on('handRaised', ({data}) => {
198
- const control = document.querySelector('#lower-hand-'+data.userId);
199
-
200
- if(control) {
201
- control.style.display = 'inline'
202
- }
203
- })
204
-
205
- api.on('handLowered', ({data}) => {
206
- const id = data.user;
207
-
208
- const control = document.querySelector('#lower-hand-'+ id );
209
-
210
- if(control) {
211
- control.style.display = 'none'
212
- }
213
- })
214
-
215
- const stateBlock = document.querySelector('.state');
216
-
217
- api.on('roomStateUpdated', ({data}) => {
218
- stateBlock.innerHTML = JSON.stringify(data);
219
- })
220
-
221
- api.on('usersUpdated', ({data: {users}}) => {
222
- participantList.innerHTML = '';
223
-
224
- users.forEach(user => {
225
- const row = document.createElement('div');
226
- row.className = 'user-list-row';
227
- const subButtons = document.createElement('div')
228
- row.appendChild(subButtons);
229
-
230
- const avatar = document.createElement('span');
231
- avatar.className = 'user-list-avatar';
232
- avatar.style.background = user.avatarColor;
233
- row.appendChild(avatar);
234
-
235
-
236
- const name = document.createElement('span');
237
- name.className = 'user-list-name';
238
- name.innerText = user.name;
239
- row.appendChild(name);
240
-
241
- const speakerIndicator = document.createElement('span')
242
- speakerIndicator.className = `speaker-indicator speaker-indicator-${user.id}`;
243
- row.appendChild(speakerIndicator);
244
-
245
-
246
- if(user.kind === 'local') {
247
- const label = document.createElement('span');
248
- label.className = 'user-list-label';
249
- label.innerText = '(you)'
250
- label.style.color = '#777';
251
- row.appendChild(label);
252
- } else {
253
- const micControl = document.createElement('button');
254
- micControl.innerHTML = 'toggle mic'
255
- micControl.style.margin = '0 4px';
256
- micControl.onclick = () => {api.requestToggleAudio(user.id)}
257
- row.appendChild(micControl);
258
-
259
- const kickControl = document.createElement('button');
260
- kickControl.innerHTML = 'kick'
261
- kickControl.style.margin = '0 4px';
262
- kickControl.onclick = () => {api.removeUser(user.id)}
263
- row.appendChild(kickControl);
264
-
265
- const allowBroadcastControl = document.createElement('button');
266
- allowBroadcastControl.innerHTML = 'allow broadcast'
267
- allowBroadcastControl.style.margin = '0 4px';
268
- allowBroadcastControl.onclick = () => {api.allowBroadcast(user.id)}
269
- subButtons.appendChild(allowBroadcastControl);
270
-
271
- const disallowBroadcastControl = document.createElement('button');
272
- disallowBroadcastControl.innerHTML = 'disallow broadcast'
273
- disallowBroadcastControl.style.margin = '0 4px';
274
- disallowBroadcastControl.onclick = () => {api.disallowBroadcast(user.id)}
275
- subButtons.appendChild(disallowBroadcastControl);
276
-
277
- const allowScreenshareControl = document.createElement('button');
278
- allowScreenshareControl.innerHTML = 'allow screenshare'
279
- allowScreenshareControl.style.margin = '0 4px';
280
- allowScreenshareControl.onclick = () => {api.allowScreenshare(user.id)}
281
- subButtons.appendChild(allowScreenshareControl);
282
-
283
- const disallowScreenshareControl = document.createElement('button');
284
- disallowScreenshareControl.innerHTML = 'disallow screenshare'
285
- disallowScreenshareControl.style.margin = '0 4px';
286
- disallowScreenshareControl.onclick = () => {api.disallowScreenshare(user.id)}
287
- subButtons.appendChild(disallowScreenshareControl);
288
- }
289
-
290
- const raisedHandControl = document.createElement('button');
291
- raisedHandControl.id = 'lower-hand-'+user.id;
292
- raisedHandControl.innerHTML = 'lower hand'
293
- raisedHandControl.style.margin = '0 4px';
294
- raisedHandControl.style.display = 'none';
295
- raisedHandControl.onclick = () => {api.lowerHand(user.id)}
296
- row.appendChild(raisedHandControl);
297
-
298
- participantList.appendChild(row);
299
- participantList.appendChild(subButtons);
300
-
301
- })
302
- })
303
-
304
- api.on('activeSpeakerChanged', ({data}) => {
305
- const currentIndicator = document.querySelector('.speaker-indicator.show')
306
- if(currentIndicator) {
307
- currentIndicator.className = currentIndicator.className.replace(' show', '');
308
-
309
- }
310
-
311
- const newIndicator = document.querySelector(`.speaker-indicator-${data.user.id}`);
312
- newIndicator.className = newIndicator.className + ' show'
313
- })
314
-
315
- </script>
316
-
317
- </body>
318
- </html>
@@ -1,303 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
6
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
7
- <title>Document</title>
8
- <!-- <script src="https://unpkg.com/@digitalsamba/embedded-sdk"></script>-->
9
- <script src="./umd/index.js"></script>
10
- <style>
11
- .user-list-row {
12
- display: flex;
13
- margin-bottom: 8px;
14
- align-items: center;
15
- }
16
-
17
- .user-list-avatar {
18
- width: 24px;
19
- height: 24px;
20
- display: block;
21
- border-radius: 50%;
22
- margin-right: 8px;
23
- }
24
-
25
- .log p {
26
- font-size: 14px;
27
- line-height: 1;
28
- margin: 0 0 4px
29
- }
30
-
31
- .buttons button, .captions-buttons button {
32
- margin: 2px;
33
- }
34
- </style>
35
- <script>
36
- const initialRoomState = {
37
- username: "",
38
- audioEnabled: false,
39
- videoEnabled: false,
40
- showToolbar: false,
41
- showCaptions: false,
42
- layoutMode: 'auto'
43
- }
44
- </script>
45
- </head>
46
- <body>
47
- <div class="sdk-prep">
48
- <h3>Initial settings</h3>
49
-
50
- <label for="prep-username-input">
51
- <p>Username:</p>
52
- <input type="text" id="prep-username-input">
53
- </label>
54
- <div class="prep-checkboxes"></div>
55
- <fieldset>
56
- <legend>Layout mode:</legend>
57
- <div>
58
- <input type="radio" id="prep-layout-mode1" checked name="contact" value="auto" onchange="initialRoomState.layoutMode = 'auto'" />
59
- <label for="prep-layout-mode1">Auto</label>
60
-
61
- <input type="radio" id="contactChoice2" name="contact" value="tiled" onchange="initialRoomState.layoutMode = 'tiled'"/>
62
- <label for="contactChoice2">Tiled</label>
63
- </div>
64
- </fieldset>
65
- <div style="margin-top: 20px">
66
- <button type="button" class="sdk-prep-submit">load</button>
67
- </div>
68
- </div>
69
- <div class="sdk-ready" style="display: none">
70
- <div style="display: flex">
71
- <div class="ifp">
72
-
73
- </div>
74
- <div style="min-width: 300px ; padding: 0 16px">
75
- <h3>Room users:</h3>
76
- <div class="participants">
77
-
78
- </div>
79
- </div>
80
- </div>
81
- <div class="div buttons" style=" border: 1px solid yellow">
82
- <button class="c0" style="margin-right: 15px; border: 2px solid blue">LOAD</button>
83
-
84
- </div>
85
- <div class="div captions-buttons" style=" border: 1px solid yellow">
86
- <p>captions controls</p>
87
-
88
- </div>
89
-
90
- <div class="log">
91
-
92
- </div>
93
- </div>
94
-
95
- <script async defer>
96
- const parent = document.querySelector('.ifp');
97
- const frame = document.querySelector('.if');
98
- const buttonsParent = document.querySelector('.buttons');
99
- const captionsButtonsParent = document.querySelector('.captions-buttons');
100
- const participantList = document.querySelector('.participants');
101
- const btn0 = document.querySelector('.c0');
102
- const prepButton = document.querySelector('.sdk-prep-submit');
103
- const prepBlock = document.querySelector('.sdk-prep')
104
- const controlsBlock = document.querySelector('.sdk-ready')
105
- const prepUsernameInput = document.getElementById('prep-username-input')
106
- const prepCheckboxesParent = document.querySelector('.prep-checkboxes')
107
-
108
- // change these values to connect to your room
109
- const TEAM = 'some-team';
110
- const ROOM = 'some-room';
111
- let ROOM_URL = 'https://localhost:3000/Public'
112
-
113
- if(window.location.search) {
114
- const params = new URLSearchParams(window.location.search);
115
- const dynamicRoomUrl = params.get('roomUrl');
116
- if(dynamicRoomUrl) {
117
- ROOM_URL = dynamicRoomUrl
118
- }
119
- }
120
-
121
- //const api = new DigitalSambaEmbedded({ root: parent, team: TEAM, room: ROOM});
122
- // const api = new DigitalSambaEmbedded({ frame});
123
- //const api = new DigitalSambaEmbedded({ url: ROOM_URL}, {reportErrors: true});
124
-
125
- const prepCheckboxes = [
126
- {control: 'audioEnabled', label: 'Microphone enabled by default'},
127
- {control: 'videoEnabled', label: 'Camera enabled by default'},
128
- {control: 'showToolbar', label: 'Show toolbar'},
129
- {control: 'showCaptions', label: 'Show captions'},
130
- ];
131
-
132
- prepCheckboxes.forEach(control => {
133
- const label = document.createElement('label');
134
- label.style.display = 'block'
135
- label.htmlFor = 'prep-' + control.control;
136
- label.innerHTML = '<span>' + control.label + '</span>'
137
-
138
-
139
- const field = document.createElement('input');
140
- field.type = 'checkbox';
141
- field.id = 'prep-' + control.control;
142
-
143
- field.onchange = (e) => {
144
- initialRoomState[control.control] = e.target.checked
145
- }
146
-
147
- label.appendChild(field);
148
- prepCheckboxesParent.appendChild(label)
149
-
150
- })
151
-
152
- prepButton.onclick = () => {
153
- prepBlock.style.display = 'none'
154
- controlsBlock.style.display = 'block'
155
-
156
- createControl()
157
- }
158
-
159
- prepUsernameInput.onchange = (e) => {
160
- initialRoomState.username = e.target.value
161
-
162
- console.warn(initialRoomState, '.,s')
163
- }
164
-
165
-
166
- const createControl = () => {
167
- const api = DigitalSambaEmbedded.createControl({ url: ROOM_URL, root: parent, roomSettings: initialRoomState });
168
-
169
- const log = document.querySelector('.log');
170
-
171
- api.frame.width = 900;
172
- api.frame.height = 700;
173
-
174
- btn0.onclick = () => {api.load({ frameAttributes: {style: "border: 5px solid red"}, reportErrors: true })}
175
-
176
- const baseControls = [
177
- {command: 'toggleVideo', label: 'toggle video' },
178
- {command: 'enableVideo', label: 'enable video' },
179
- {command: 'disableVideo', label: 'disable video' },
180
- {command: 'toggleAudio', label: 'toggle audio' },
181
- {command: 'enableAudio', label: 'enable audio' },
182
- {command: 'disableAudio', label: 'disable audio' },
183
- {command: 'startScreenshare', label: 'start screenshare' },
184
- {command: 'stopScreenshare', label: 'stop screenshare' },
185
- {command: 'startRecording', label: 'start recording' },
186
- {command: 'stopRecording', label: 'stop recording' },
187
- {command: 'showToolbar', label: 'show toolbar' },
188
- {command: 'hideToolbar', label: 'hide toolbar' },
189
- {command: 'toggleToolbar', label: 'toggle toolbar' },
190
- {command: 'changeLayoutMode', label: 'auto layout', args: ['auto'] },
191
- {command: 'changeLayoutMode', label: 'tiled layout', args: ['tiled'] },
192
- {command: 'showCaptions', label: 'show captions'},
193
- {command: 'hideCaptions', label: 'hide captions'},
194
- {command: 'toggleCaptions', label: 'toggle captions'},
195
- {command: 'leaveSession', label: 'leave session' },
196
- {command: 'endSession', label: 'end session' },
197
- ]
198
-
199
- baseControls.forEach(control => {
200
- const button = document.createElement("button");
201
- button.innerHTML = control.label;
202
- button.onclick = () => api[control.command](...(control.args || []))
203
-
204
- buttonsParent.appendChild(button);
205
- })
206
-
207
- const captionsControls = [
208
- {command: 'configureCaptions', label: 'set font size - small', args: [{fontSize: 'small'}] },
209
- {command: 'configureCaptions', label: 'set font size - medium', args: [{fontSize: 'medium'}] },
210
- {command: 'configureCaptions', label: 'set font size - large', args: [{fontSize: 'large'}] },
211
- {command: 'configureCaptions', label: 'set spoken language - english', args: [{spokenLanguage: 'en'}] },
212
- {command: 'configureCaptions', label: 'set spoken language - french', args: [{spokenLanguage: 'fr'}] },
213
- {command: 'configureCaptions', label: 'set spoken language - spanish', args: [{spokenLanguage: 'es'}] },
214
- ]
215
-
216
- captionsControls.forEach(control => {
217
- const button = document.createElement("button");
218
- button.innerHTML = control.label;
219
- button.onclick = () => api[control.command](...(control.args || []))
220
-
221
- captionsButtonsParent.appendChild(button);
222
- })
223
-
224
- api.on('*', (data) => {
225
- log.innerHTML += `<p>${Number(new Date)}: ev(${data?.type}): ${JSON.stringify(data)}</p>`
226
- });
227
-
228
- api.on('userJoined', (data) => {
229
- log.innerHTML += `<p>${Number(new Date)}: USER JOINED: ${JSON.stringify(data)}</p>`
230
- });
231
-
232
- api.on('userLeft', (data) => {
233
- log.innerHTML += `<p>${Number(new Date)}: USER LEFT: ${JSON.stringify(data)}</p>`
234
- });
235
-
236
- api.on('permissionsChanged', ({ data }) => {
237
- if(data.broadcast !== undefined){
238
- if(data.broadcast) {
239
- alert('You were granted broadcast permission')
240
- } else {
241
- alert('Your permission to broadcast was rejected')
242
- }
243
- }
244
-
245
- if(data.screenshare !== undefined){
246
- if(data.screenshare) {
247
- alert('You were granted screenshare permission')
248
- } else {
249
- alert('Your permission to screenshare was rejected')
250
- }
251
- }
252
- });
253
-
254
-
255
- api.on('usersUpdated', ({data: {users}}) => {
256
- participantList.innerHTML = '';
257
-
258
-
259
- users.forEach(user => {
260
- const row = document.createElement('div');
261
- row.className = 'user-list-row';
262
-
263
- const avatar = document.createElement('span');
264
- avatar.className = 'user-list-avatar';
265
- avatar.style.background = user.avatarColor;
266
- row.appendChild(avatar);
267
-
268
-
269
- const name = document.createElement('span');
270
- name.className = 'user-list-name';
271
- name.innerText = user.name;
272
- row.appendChild(name);
273
-
274
- if(user.kind === 'local') {
275
- const label = document.createElement('span');
276
- label.className = 'user-list-label';
277
- label.innerText = '(you)'
278
- label.style.color = '#777';
279
- row.appendChild(label);
280
- } else {
281
- const micControl = document.createElement('button');
282
- micControl.innerHTML = 'toggle mic'
283
- micControl.style.margin = '0 4px';
284
- micControl.onclick = () => {api.requestToggleAudio(user.id)}
285
- row.appendChild(micControl);
286
-
287
- const kickControl = document.createElement('button');
288
- kickControl.innerHTML = 'kick'
289
- kickControl.style.margin = '0 4px';
290
- kickControl.onclick = () => {api.removeUser(user.id)}
291
- row.appendChild(kickControl);
292
- }
293
-
294
- participantList.appendChild(row);
295
-
296
- })
297
- })
298
- }
299
-
300
- </script>
301
-
302
- </body>
303
- </html>