@whereby.com/browser-sdk 1.6.1 → 1.7.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.
@@ -1,11 +1,8 @@
1
1
  ---
2
2
  name: Build, test & deploy
3
3
  on:
4
- push:
5
- branches:
6
- - main
7
- paths:
8
- - "package.json"
4
+ release:
5
+ types: [created]
9
6
  jobs:
10
7
  build_and_test:
11
8
  concurrency: build_and_test_main_${{ github.head_ref }}
@@ -22,10 +19,30 @@ jobs:
22
19
 
23
20
  - name: Test
24
21
  run: yarn test
22
+ get_version_tag:
23
+ runs-on: ubuntu-latest
24
+ needs: build_and_test
25
+ outputs:
26
+ tag: ${{ steps.tag_check.outputs.tag }}
27
+ steps:
28
+ - uses: actions/checkout@v3
29
+ - name: Get version tag
30
+ id: tag_check
31
+ # 1st sed: remove major.minor.patch numbers
32
+ # 2nd sed: remove wrapper quotes
33
+ # 3rd sed: remove "-" and tag version if exists
34
+ run: |
35
+ TAG=$(npm pkg get version \
36
+ | sed 's/\([0-9]*\.[0-9]*\.[0-9]*\)//' \
37
+ | sed 's/^"\(.*\)"$/\1/' \
38
+ | sed 's/-\([a-z]*\)\([0-9]*\)/\1/')
39
+ echo "tag=$TAG" >> $GITHUB_OUTPUT
25
40
  deploy_cdn:
26
41
  concurrency: deploy_cdn_main_${{ github.head_ref }}
27
42
  name: Deploy to CDN
28
- needs: build_and_test
43
+ needs: get_version_tag
44
+ # Only run when there's no version tag (e.g. -beta) specified
45
+ if: ${{ needs.get_version_tag.outputs.tag == 0 }}
29
46
  runs-on: ubuntu-latest
30
47
  env:
31
48
  GITHUB_TOKEN: ${{ secrets.WHEREBY_GITHUB_TOKEN }}
@@ -59,18 +76,27 @@ jobs:
59
76
  deploy_npm:
60
77
  concurrency: deploy_npm_main_${{ github.head_ref }}
61
78
  name: Deploy to npm
62
- needs: build_and_test
79
+ needs: get_version_tag
63
80
  runs-on: ubuntu-latest
64
- env:
65
- GITHUB_TOKEN: ${{ secrets.WHEREBY_GITHUB_TOKEN }}
66
81
  steps:
67
82
  - name: Checkout source code
68
- uses: actions/checkout@v2
69
-
70
- - name: Build
71
- uses: ./.github/actions/build
83
+ uses: actions/checkout@v3
72
84
 
73
- - name: Deploy to npm
74
- uses: JS-DevTools/npm-publish@v1
85
+ # Setup .npmrc file to publish to npm
86
+ - uses: actions/setup-node@v3
75
87
  with:
76
- token: ${{ secrets.NPM_TOKEN }}
88
+ node-version: "16.x"
89
+ registry-url: "https://registry.npmjs.org"
90
+
91
+ - name: Publish on npm
92
+ run: |
93
+ TAG=${{ needs.get_version_tag.outputs.tag }}
94
+ if [[ -z ${TAG} ]]; then
95
+ echo "deploy with latest tag"
96
+ npm publish
97
+ else
98
+ echo "deploy with ${{ needs.get_version_tag.outputs.tag }} tag"
99
+ npm publish --tag ${{ needs.get_version_tag.outputs.tag }}
100
+ fi
101
+ env:
102
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @whereby.com/browser-sdk
2
2
 
3
- Clientside library defining a web component to allow embedding Whereby video rooms in web applications. Only normal iframe under the hood, the web component adds syntactic sugar to make it easier to customize the Whereby experience and hook into powerful features such as listening to room events and sending co.mmands to the room from the host application.
3
+ Clientside library defining a web component to allow embedding Whereby video rooms in web applications. Only normal iframe under the hood, the web component adds syntactic sugar to make it easier to customize the Whereby experience and hook into powerful features such as listening to room events and sending commands to the room from the host application.
4
4
 
5
5
  ## Usage
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whereby.com/browser-sdk",
3
- "version": "1.6.1",
3
+ "version": "1.7.1",
4
4
  "description": "Configurable web component for embedding Whereby video rooms in web applications",
5
5
  "author": "Whereby AS",
6
6
  "license": "MIT",
@@ -73,6 +73,7 @@ describe("@whereby/browser-sdk", () => {
73
73
  stopRecording: expect.any(Function),
74
74
  toggleCamera: expect.any(Function),
75
75
  toggleMicrophone: expect.any(Function),
76
+ toggleScreenshare: expect.any(Function),
76
77
  })
77
78
  );
78
79
  });
package/src/lib/index.js CHANGED
@@ -84,6 +84,9 @@ define("WherebyEmbed", {
84
84
  toggleMicrophone(enabled) {
85
85
  this._postCommand("toggle_microphone", [enabled]);
86
86
  },
87
+ toggleScreenshare(enabled) {
88
+ this._postCommand("toggle_screenshare", [enabled]);
89
+ },
87
90
 
88
91
  onmessage({ origin, data }) {
89
92
  const url = new URL(this.room, `https://${this.subdomain}.whereby.com`);
package/dist/lib.cjs.js DELETED
@@ -1,146 +0,0 @@
1
- 'use strict';
2
-
3
- var heresy = require('heresy');
4
-
5
- const boolAttrs = [
6
- "audio",
7
- "background",
8
- "chat",
9
- "people",
10
- "embed",
11
- "emptyRoomInvitation",
12
- "help",
13
- "leaveButton",
14
- "precallReview",
15
- "screenshare",
16
- "video",
17
- "floatSelf",
18
- "recording",
19
- "logo",
20
- "locking",
21
- "participantCount",
22
- "settingsButton",
23
- "pipButton",
24
- "moreButton",
25
- "personality",
26
- "subgridLabels",
27
- "lowData",
28
- "breakout",
29
- ];
30
-
31
- heresy.define("WherebyEmbed", {
32
- oninit() {
33
- this.iframe = heresy.ref();
34
- },
35
- onconnected() {
36
- window.addEventListener("message", this);
37
- },
38
- ondisconnected() {
39
- window.removeEventListener("message", this);
40
- },
41
- observedAttributes: [
42
- "displayName",
43
- "minimal",
44
- "room",
45
- "subdomain",
46
- "lang",
47
- "metadata",
48
- "groups",
49
- "virtualBackgroundUrl",
50
- "avatarUrl",
51
- ...boolAttrs,
52
- ].map((a) => a.toLowerCase()),
53
- onattributechanged({ attributeName, oldValue }) {
54
- if (["room", "subdomain"].includes(attributeName) && oldValue == null) return;
55
- this.render();
56
- },
57
- style(self) {
58
- return `
59
- ${self} {
60
- display: block;
61
- }
62
- ${self} iframe {
63
- border: none;
64
- height: 100%;
65
- width: 100%;
66
- }
67
- `;
68
- },
69
-
70
- // Commands
71
- _postCommand(command, args = []) {
72
- if (this.iframe.current) {
73
- const url = new URL(this.room, `https://${this.subdomain}.whereby.com`);
74
- this.iframe.current.contentWindow.postMessage({ command, args }, url.origin);
75
- }
76
- },
77
- startRecording() {
78
- this._postCommand("start_recording");
79
- },
80
- stopRecording() {
81
- this._postCommand("stop_recording");
82
- },
83
- toggleCamera(enabled) {
84
- this._postCommand("toggle_camera", [enabled]);
85
- },
86
- toggleMicrophone(enabled) {
87
- this._postCommand("toggle_microphone", [enabled]);
88
- },
89
-
90
- onmessage({ origin, data }) {
91
- const url = new URL(this.room, `https://${this.subdomain}.whereby.com`);
92
- if (origin !== url.origin) return;
93
- const { type, payload: detail } = data;
94
- this.dispatchEvent(new CustomEvent(type, { detail }));
95
- },
96
- render() {
97
- const {
98
- avatarurl: avatarUrl,
99
- displayname: displayName,
100
- lang,
101
- metadata,
102
- minimal,
103
- room,
104
- groups,
105
- virtualbackgroundurl: virtualBackgroundUrl,
106
- } = this;
107
- if (!room) return this.html`Whereby: Missing room attr.`;
108
- // Get subdomain from room URL, or use it specified
109
- let m = /https:\/\/([^.]+)\.whereby.com\/.+/.exec(room);
110
- const subdomain = (m && m[1]) || this.subdomain;
111
- if (!subdomain) return this.html`Whereby: Missing subdomain attr.`;
112
- const url = new URL(room, `https://${subdomain}.whereby.com`);
113
- Object.entries({
114
- jsApi: true,
115
- we: "1.6.1",
116
- iframeSource: subdomain,
117
- ...(displayName && { displayName }),
118
- ...(lang && { lang: lang }),
119
- ...(metadata && { metadata: metadata }),
120
- ...(groups && { groups: groups }),
121
- ...(virtualBackgroundUrl && { virtualBackgroundUrl: virtualBackgroundUrl }),
122
- ...(avatarUrl && { avatarUrl: avatarUrl }),
123
- // the original ?embed name was confusing, so we give minimal
124
- ...(minimal != null && { embed: minimal }),
125
- ...boolAttrs.reduce(
126
- // add to URL if set in any way
127
- (o, v) => (this[v.toLowerCase()] != null ? { ...o, [v]: this[v.toLowerCase()] } : o),
128
- {}
129
- ),
130
- }).forEach(([k, v]) => {
131
- if (!url.searchParams.has(k)) {
132
- url.searchParams.set(k, v);
133
- }
134
- });
135
- this.html`
136
- <iframe
137
- ref=${this.iframe}
138
- src=${url}
139
- allow="autoplay; camera; microphone; fullscreen; speaker; display-capture" />
140
- `;
141
- },
142
- });
143
-
144
- var index = { sdkVersion: "1.6.1" };
145
-
146
- module.exports = index;
package/dist/lib.esm.js DELETED
@@ -1,144 +0,0 @@
1
- import { define, ref } from 'heresy';
2
-
3
- const boolAttrs = [
4
- "audio",
5
- "background",
6
- "chat",
7
- "people",
8
- "embed",
9
- "emptyRoomInvitation",
10
- "help",
11
- "leaveButton",
12
- "precallReview",
13
- "screenshare",
14
- "video",
15
- "floatSelf",
16
- "recording",
17
- "logo",
18
- "locking",
19
- "participantCount",
20
- "settingsButton",
21
- "pipButton",
22
- "moreButton",
23
- "personality",
24
- "subgridLabels",
25
- "lowData",
26
- "breakout",
27
- ];
28
-
29
- define("WherebyEmbed", {
30
- oninit() {
31
- this.iframe = ref();
32
- },
33
- onconnected() {
34
- window.addEventListener("message", this);
35
- },
36
- ondisconnected() {
37
- window.removeEventListener("message", this);
38
- },
39
- observedAttributes: [
40
- "displayName",
41
- "minimal",
42
- "room",
43
- "subdomain",
44
- "lang",
45
- "metadata",
46
- "groups",
47
- "virtualBackgroundUrl",
48
- "avatarUrl",
49
- ...boolAttrs,
50
- ].map((a) => a.toLowerCase()),
51
- onattributechanged({ attributeName, oldValue }) {
52
- if (["room", "subdomain"].includes(attributeName) && oldValue == null) return;
53
- this.render();
54
- },
55
- style(self) {
56
- return `
57
- ${self} {
58
- display: block;
59
- }
60
- ${self} iframe {
61
- border: none;
62
- height: 100%;
63
- width: 100%;
64
- }
65
- `;
66
- },
67
-
68
- // Commands
69
- _postCommand(command, args = []) {
70
- if (this.iframe.current) {
71
- const url = new URL(this.room, `https://${this.subdomain}.whereby.com`);
72
- this.iframe.current.contentWindow.postMessage({ command, args }, url.origin);
73
- }
74
- },
75
- startRecording() {
76
- this._postCommand("start_recording");
77
- },
78
- stopRecording() {
79
- this._postCommand("stop_recording");
80
- },
81
- toggleCamera(enabled) {
82
- this._postCommand("toggle_camera", [enabled]);
83
- },
84
- toggleMicrophone(enabled) {
85
- this._postCommand("toggle_microphone", [enabled]);
86
- },
87
-
88
- onmessage({ origin, data }) {
89
- const url = new URL(this.room, `https://${this.subdomain}.whereby.com`);
90
- if (origin !== url.origin) return;
91
- const { type, payload: detail } = data;
92
- this.dispatchEvent(new CustomEvent(type, { detail }));
93
- },
94
- render() {
95
- const {
96
- avatarurl: avatarUrl,
97
- displayname: displayName,
98
- lang,
99
- metadata,
100
- minimal,
101
- room,
102
- groups,
103
- virtualbackgroundurl: virtualBackgroundUrl,
104
- } = this;
105
- if (!room) return this.html`Whereby: Missing room attr.`;
106
- // Get subdomain from room URL, or use it specified
107
- let m = /https:\/\/([^.]+)\.whereby.com\/.+/.exec(room);
108
- const subdomain = (m && m[1]) || this.subdomain;
109
- if (!subdomain) return this.html`Whereby: Missing subdomain attr.`;
110
- const url = new URL(room, `https://${subdomain}.whereby.com`);
111
- Object.entries({
112
- jsApi: true,
113
- we: "1.6.1",
114
- iframeSource: subdomain,
115
- ...(displayName && { displayName }),
116
- ...(lang && { lang: lang }),
117
- ...(metadata && { metadata: metadata }),
118
- ...(groups && { groups: groups }),
119
- ...(virtualBackgroundUrl && { virtualBackgroundUrl: virtualBackgroundUrl }),
120
- ...(avatarUrl && { avatarUrl: avatarUrl }),
121
- // the original ?embed name was confusing, so we give minimal
122
- ...(minimal != null && { embed: minimal }),
123
- ...boolAttrs.reduce(
124
- // add to URL if set in any way
125
- (o, v) => (this[v.toLowerCase()] != null ? { ...o, [v]: this[v.toLowerCase()] } : o),
126
- {}
127
- ),
128
- }).forEach(([k, v]) => {
129
- if (!url.searchParams.has(k)) {
130
- url.searchParams.set(k, v);
131
- }
132
- });
133
- this.html`
134
- <iframe
135
- ref=${this.iframe}
136
- src=${url}
137
- allow="autoplay; camera; microphone; fullscreen; speaker; display-capture" />
138
- `;
139
- },
140
- });
141
-
142
- var index = { sdkVersion: "1.6.1" };
143
-
144
- export { index as default };
package/dist/v1.js DELETED
@@ -1,15 +0,0 @@
1
- /*! (c) Andrea Giammarchi - ISC */
2
- var e={};try{e.WeakMap=WeakMap}catch(t){e.WeakMap=function(e,t){var n=t.defineProperty,r=t.hasOwnProperty,s=o.prototype;return s.delete=function(e){return this.has(e)&&delete e[this._]},s.get=function(e){return this.has(e)?e[this._]:void 0},s.has=function(e){return r.call(e,this._)},s.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},o;function o(t){n(this,"_",{value:"_@ungap/weakmap"+e++}),t&&t.forEach(a,this)}function a(e){this.set(e[0],e[1])}}(Math.random(),Object)}var t=e.WeakMap,n={};try{n.Event=new Event(".").constructor}catch(e){try{n.Event=new CustomEvent(".").constructor}catch(e){n.Event=function(e,t){t||(t={});var n=document.createEvent("Event"),r=!!t.bubbles,s=!!t.cancelable;n.initEvent(e,r,s);try{n.bubbles=r,n.cancelable=s}catch(n){}return n}}}var r=n.Event,s={};
3
- /*! (c) Andrea Giammarchi - ISC */try{s.WeakSet=WeakSet}catch(e){!function(e){var t=new e,n=r.prototype;function r(n){t.set(this,new e),n&&n.forEach(this.add,this)}n.add=function(e){return t.get(this).set(e,1),this},n.delete=function(e){return t.get(this).delete(e)},n.has=function(e){return t.get(this).has(e)},s.WeakSet=r}(WeakMap)}var o,a,i=s.WeakSet,c="-"+Math.random().toFixed(6)+"%",l=!1;
4
- /*! (c) Andrea Giammarchi - ISC */try{o=document.createElement("template"),a="tabindex","content"in o&&(o.innerHTML='<p tabindex="'+c+'"></p>',o.content.childNodes[0].getAttribute(a)==c)||(c="_dt: "+c.slice(1,-1)+";",l=!0)}catch(e){}var u="\x3c!--"+c+"--\x3e",h=/^(?:plaintext|script|style|textarea|title|xmp)$/i,f=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;
5
- /*! (c) Andrea Giammarchi - ISC */
6
- function p(e){return e.join(u).replace(w,N).replace(y,C)}var d=" \\f\\n\\r\\t",m="[^ \\f\\n\\r\\t\\/>\"'=]+",g="[ \\f\\n\\r\\t]+"+m,v="<([A-Za-z]+[A-Za-z0-9:._-]*)((?:",b="(?:\\s*=\\s*(?:'[^']*?'|\"[^\"]*?\"|<[^>]*?>|"+m.replace("\\/","")+"))?)",y=new RegExp(v+g+b+"+)(["+d+"]*/?>)","g"),w=new RegExp(v+g+b+"*)(["+d+"]*/>)","g"),E=new RegExp("("+g+"\\s*=\\s*)(['\"]?)"+u+"\\2","gi");function C(e,t,n,r){return"<"+t+n.replace(E,x)+r}function x(e,t,n){return t+(n||'"')+c+(n||'"')}function N(e,t,n){return f.test(t)?e:"<"+t+n+"></"+t+">"}const{isArray:k}=Array,{indexOf:A,slice:$}=[];var _=e=>({get:t=>e.get(t),set:(t,n)=>(e.set(t,n),n)});const S=(e,t)=>111===e.nodeType?1/t<0?t?(({firstChild:e,lastChild:t})=>{const n=document.createRange();return n.setStartAfter(e),n.setEndAfter(t),n.deleteContents(),e})(e):e.lastChild:t?e.valueOf():e.firstChild:e,L=e=>{const{childNodes:t}=e,{length:n}=t;if(n<2)return n?t[0]:e;const r=$.call(t,0);return{ELEMENT_NODE:1,nodeType:111,firstChild:r[0],lastChild:r[n-1],valueOf(){if(t.length!==n){let t=0;for(;t<n;)e.appendChild(r[t++])}return e}}};
7
- /*! (c) Andrea Giammarchi - ISC */
8
- var j=function(e){var t="fragment",n="template",r="content"in o(n)?function(e){var t=o(n);return t.innerHTML=e,t.content}:function(e){var r=o(t),a=o(n),i=null;if(/^[^\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)){var c=RegExp.$1;a.innerHTML="<table>"+e+"</table>",i=a.querySelectorAll(c)}else a.innerHTML=e,i=a.childNodes;return s(r,i),r};return function(e,t){return("svg"===t?a:r)(e)};function s(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function o(n){return n===t?e.createDocumentFragment():e.createElementNS("http://www.w3.org/1999/xhtml",n)}function a(e){var n=o(t),r=o("div");return r.innerHTML='<svg xmlns="http://www.w3.org/2000/svg">'+e+"</svg>",s(n,r.firstChild.childNodes),n}}(document),M=(e,t,n,r,s)=>{const o=n.length;let a=t.length,i=o,c=0,l=0,u=null;for(;c<a||l<i;)if(a===c){const t=i<o?l?r(n[l-1],-0).nextSibling:r(n[i-l],0):s;for(;l<i;)e.insertBefore(r(n[l++],1),t)}else if(i===l)for(;c<a;)u&&u.has(t[c])||e.removeChild(r(t[c],-1)),c++;else if(t[c]===n[l])c++,l++;else if(t[a-1]===n[i-1])a--,i--;else if(t[c]===n[i-1]&&n[l]===t[a-1]){const s=r(t[--a],-1).nextSibling;e.insertBefore(r(n[l++],1),r(t[c++],-1).nextSibling),e.insertBefore(r(n[--i],1),s),t[a]=n[i]}else{if(!u){u=new Map;let e=l;for(;e<i;)u.set(n[e],e++)}if(u.has(t[c])){const s=u.get(t[c]);if(l<s&&s<i){let o=c,h=1;for(;++o<a&&o<i&&u.get(t[o])===s+h;)h++;if(h>s-l){const o=r(t[c],0);for(;l<s;)e.insertBefore(r(n[l++],1),o)}else e.replaceChild(r(n[l++],1),r(t[c++],-1))}else c++}else e.removeChild(r(t[c++],-1))}return n},O=function(e,t,n,r,s){var o=s in e,a=e.createDocumentFragment();return a.appendChild(e.createTextNode("g")),a.appendChild(e.createTextNode("")),(o?e.importNode(a,!0):a.cloneNode(!0)).childNodes.length<2?function e(t,n){for(var r=t.cloneNode(),s=t.childNodes||[],o=s.length,a=0;n&&a<o;a++)r.appendChild(e(s[a],n));return r}:o?e.importNode:function(e,t){return e.cloneNode(!!t)}}(document,0,0,0,"importNode"),T="".trim||function(){return String(this).replace(/^\s+|\s+/g,"")},R=l?function(e,t){var n=t.join(" ");return t.slice.call(e,0).sort((function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1}))}:function(e,t){return t.slice.call(e,0)};function W(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}function P(e,t,n,r){for(var s=e.childNodes,o=s.length,a=0;a<o;){var i=s[a];switch(i.nodeType){case 1:var l=r.concat(a);Z(i,t,n,l),P(i,t,n,l);break;case 8:var f=i.textContent;if(f===c)n.shift(),t.push(h.test(e.nodeName)?D(e,r):B(i,r.concat(a)));else switch(f.slice(0,2)){case"/*":if("*/"!==f.slice(-2))break;case"👻":e.removeChild(i),a--,o--}break;case 3:h.test(e.nodeName)&&T.call(i.textContent)===u&&(n.shift(),t.push(D(e,r)))}a++}}function Z(e,t,n,r){for(var s=e.attributes,o=[],a=[],i=R(s,n),h=i.length,f=0;f<h;){var p,d=i[f++],m=d.value===c;if(m||1<(p=d.value.split(u)).length){var g=d.name;if(o.indexOf(g)<0){o.push(g);var v=n.shift().replace(m?/^(?:|[\S\s]*?\s)(\S+?)\s*=\s*('|")?$/:new RegExp("^(?:|[\\S\\s]*?\\s)("+g+")\\s*=\\s*('|\")[\\S\\s]*","i"),"$1"),b=s[v]||s[v.toLowerCase()];if(m)t.push(z(b,r,v,null));else{for(var y=p.length-2;y--;)n.shift();t.push(z(b,r,v,p))}}a.push(d)}}f=0;for(var w=(0<(h=a.length)&&l&&!("ownerSVGElement"in e));f<h;){var E=a[f++];w&&(E.value=""),e.removeAttribute(E.name)}var C=e.nodeName;if(/^script$/i.test(C)){var x=document.createElement(C);for(h=s.length,f=0;f<h;)x.setAttributeNode(s[f++].cloneNode(!0));x.textContent=e.textContent,e.parentNode.replaceChild(x,e)}}function B(e,t){return{type:"any",node:e,path:t}}function z(e,t,n,r){return{type:"attr",node:e,path:t,name:n,sparse:r}}function D(e,t){return{type:"text",node:e,path:t}}var U=_(new t);function F(e,t){var n=(e.convert||p)(t),r=e.transform;r&&(n=r(n));var s=j(n,e.type);q(s);var o=[];return P(s,o,t.slice(0),[]),{content:s,updates:function(n){for(var r=[],s=o.length,a=0,i=0;a<s;){var c=o[a++],l=W(n,c.path);switch(c.type){case"any":r.push({fn:e.any(l,[]),sparse:!1});break;case"attr":var u=c.sparse,h=e.attribute(l,c.name,c.node);null===u?r.push({fn:h,sparse:!1}):(i+=u.length-2,r.push({fn:h,sparse:!0,values:u}));break;case"text":r.push({fn:e.text(l),sparse:!1}),l.textContent=""}}return s+=i,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+" values instead of "+s+"\n"+t.join("${value}"));for(var o=1,a=1;o<e;){var i=r[o-a];if(i.sparse){var c=i.values,l=c[0],u=1,h=c.length;for(a+=h-2;u<h;)l+=arguments[o++]+c[u++];i.fn(l)}else i.fn(arguments[o++])}return n}}}}function H(e,t){var n=U.get(t)||U.set(t,F(e,t));return n.updates(O.call(document,n.content,!0))}var V=[];function q(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===T.call(r.textContent).length&&e.removeChild(r)}}
9
- /*! (c) Andrea Giammarchi - ISC */var I=function(){var e=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,t=/([^A-Z])([A-Z]+)/g;return function(e,t){return"ownerSVGElement"in e?function(e,t){var n;t?n=t.cloneNode(!0):(e.setAttribute("style","--hyper:style;"),n=e.getAttributeNode("style"));return n.value="",e.setAttributeNode(n),r(n,!0)}(e,t):r(e.style,!1)};function n(e,t,n){return t+"-"+n.toLowerCase()}function r(r,s){var o,a;return function(i){var c,l,u,h;switch(typeof i){case"object":if(i){if("object"===o){if(!s&&a!==i)for(l in a)l in i||(r[l]="")}else s?r.value="":r.cssText="";for(l in c=s?{}:r,i)u="number"!=typeof(h=i[l])||e.test(l)?h:h+"px",!s&&/^--/.test(l)?c.setProperty(l,u):c[l]=u;o="object",s?r.value=function(e){var r,s=[];for(r in e)s.push(r.replace(t,n),":",e[r],";");return s.join("")}(a=c):a=i;break}default:a!=i&&(o="string",a=i,s?r.value=i||"":r.cssText=i||"")}}}}();const G=(e,t)=>{let n,r=!0;const s=document.createAttributeNS(null,t);return t=>{n!==t&&(n=t,null==n?r||(e.removeAttributeNode(s),r=!0):(s.value=t,r&&(e.setAttributeNodeNS(s),r=!1)))}},J=({dataset:e})=>t=>{for(const n in t){const r=t[n];null==r?delete e[n]:e[n]=r}},K=(e,t)=>"dataset"===t?J(e):n=>{e[t]=n},Q=/^(?:form|list)$/i,X=(e,t)=>e.ownerDocument.createTextNode(t);function Y(e){return this.type=e,function(e){var t=V,n=q;return function(r){return t!==r&&(n=H(e,t=r)),n.apply(null,arguments)}}(this)}function ee(e){return e(this)}Y.prototype={attribute(e,t,n){const r="svg"===this.type;switch(t){case"class":if(r)return G(e,t);t="className";case"props":return K(e,t);case"aria":return(e=>t=>{for(const n in t){const r="role"===n?n:`aria-${n}`,s=t[n];null==s?e.removeAttribute(r):e.setAttribute(r,s)}})(e);case"style":return I(e,n,r);case"ref":return(e=>t=>{"function"==typeof t?t(e):t.current=e})(e);case".dataset":return J(e);default:return"."===t.slice(0,1)?K(e,t.slice(1)):"?"===t.slice(0,1)?((e,t,n)=>r=>{n!==!!r&&((n=!!r)?e.setAttribute(t,""):e.removeAttribute(t))})(e,t.slice(1)):"on"===t.slice(0,2)?((e,t)=>{let n,r=t.slice(2);return!(t in e)&&t.toLowerCase()in e&&(r=r.toLowerCase()),t=>{const s=k(t)?t:[t,!1];n!==s[0]&&(n&&e.removeEventListener(r,n,s[1]),(n=s[0])&&e.addEventListener(r,n,s[1]))}})(e,t):!(t in e)||r||Q.test(t)?G(e,t):((e,t)=>{let n;return r=>{n!==r&&(n=r,e[t]!==r&&(null==r?(e[t]="",e.removeAttribute(t)):e[t]=r))}})(e,t)}},any(e,t){const{type:n}=this;let r,s=!1;const o=a=>{switch(typeof a){case"string":case"number":case"boolean":s?r!==a&&(r=a,t[0].textContent=a):(s=!0,r=a,t=M(e.parentNode,t,[X(e,a)],S,e));break;case"function":o(a(e));break;case"object":case"undefined":if(null==a){s=!1,t=M(e.parentNode,t,[],S,e);break}default:if(s=!1,r=a,k(a))if(0===a.length)t.length&&(t=M(e.parentNode,t,[],S,e));else switch(typeof a[0]){case"string":case"number":case"boolean":o(String(a));break;case"function":o(a.map(ee,e));break;case"object":k(a[0])&&(a=a.concat.apply([],a));default:t=M(e.parentNode,t,a,S,e)}else"ELEMENT_NODE"in a?t=M(e.parentNode,t,11===a.nodeType?$.call(a.childNodes):[a],S,e):"text"in a?o(String(a.text)):"any"in a?o(a.any):"html"in a?t=M(e.parentNode,t,$.call(j([].concat(a.html).join(""),n).childNodes),S,e):"length"in a&&o($.call(a))}};return o},text(e){let t;const n=r=>{if(t!==r){t=r;const s=typeof r;"object"===s&&r?"text"in r?n(String(r.text)):"any"in r?n(r.any):"html"in r?n([].concat(r.html).join("")):"length"in r&&n($.call(r).join("")):"function"===s?n(r(e)):e.textContent=null==r?"":r}};return n}};const{create:te,freeze:ne,keys:re}=Object,se=Y.prototype,oe=_(new t),ae=e=>({html:ce("html",e),svg:ce("svg",e),render(t,n){const r="function"==typeof n?n():n,s=oe.get(t)||oe.set(t,ie()),o=r instanceof he?le(e,s,r):r;return o!==s.wire&&(s.wire=o,t.textContent="",t.appendChild(o.valueOf())),t}}),ie=()=>({stack:[],entry:null,wire:null}),ce=(e,n)=>{const r=_(new t);return s.for=(e,t)=>{const o=r.get(e)||r.set(e,te(null));return o[t]||(o[t]=(e=>function(){return le(n,e,s.apply(null,arguments))})(ie()))},s.node=function(){return le(n,ie(),s.apply(null,arguments)).valueOf()},s;function s(){return new he(e,pe.apply(null,arguments))}},le=(e,t,{type:n,template:r,values:s})=>{const{length:o}=s;ue(e,t,s,o);let{entry:a}=t;if(a&&a.template===r&&a.type===n)a.tag(r,...s);else{const o=new e(n);t.entry=a={type:n,template:r,tag:o,wire:L(o(r,...s))}}return a.wire},ue=(e,{stack:t},n,r)=>{for(let s=0;s<r;s++){const r=n[s];r instanceof fe?n[s]=le(e,t[s]||(t[s]=ie()),r):k(r)?ue(e,t[s]||(t[s]=ie()),r,r.length):t[s]=null}r<t.length&&t.splice(r)};function he(e,t){this.type=e,this.template=t.shift(),this.values=t}ne(he);const fe=he;function pe(){let e=[],t=0,{length:n}=arguments;for(;t<n;)e.push(arguments[t++]);return e}ae(Y);var de="function"==typeof cancelAnimationFrame,me=de?cancelAnimationFrame:clearTimeout,ge=de?requestAnimationFrame:setTimeout;function ve(e){var t,n,r,s,o;return i(),function(e,i,l){return r=e,s=i,o=l,n||(n=ge(a)),--t<0&&c(!0),c};function a(){i(),r.apply(s,o||[])}function i(){t=e||1/0,n=de?0:null}function c(e){var t=!!n;return t&&(me(n),e&&a()),t}}
10
- /*! (c) Andrea Giammarchi - ISC */let be=null;const ye=_(new WeakMap),we=(e,t,n)=>{e.apply(t,n)},Ee={async:!1,always:!1},Ce=(e,t)=>"function"==typeof t?t(e):t,xe=(e,t,n,r)=>{const s=be.i++,{hook:o,args:a,stack:i,length:c}=be;s===c&&(be.length=i.push({}));const l=i[s];if(l.args=a,s===c){const s="function"==typeof n,{async:a,always:i}=(s?r:n)||r||Ee;l.$=s?n(t):Ce(void 0,t),l._=a?ye.get(o)||ye.set(o,ve()):we,l.f=t=>{const n=e(l.$,t);(i||l.$!==n)&&(l.$=n,l._(o,null,l.args))}}return[l.$,l.f]},Ne=new WeakMap;function ke({hook:e}){return e===this.hook}const Ae=new WeakMap,$e=_(Ae),_e=()=>{},Se=e=>(t,n)=>{const r=be.i++,{hook:s,after:o,stack:a,length:i}=be;if(r<i){const s=a[r],{update:i,values:c,stop:l}=s;if(!n||n.some(Te,c)){s.values=n,e&&l(e);const{clean:r}=s;r&&(s.clean=null,r());const a=()=>{s.clean=t()};e?i(a):o.push(a)}}else{const r=e?ve():_e,i={clean:null,update:r,values:n,stop:_e};be.length=a.push(i),($e.get(s)||$e.set(s,[])).push(i);const c=()=>{i.clean=t()};e?i.stop=r(c):o.push(c)}},Le=e=>{(Ae.get(e)||[]).forEach((e=>{const{clean:t,stop:n}=e;n(),t&&(e.clean=null,t())}))};Ae.has.bind(Ae);const je=Se(!0),Me=Se(!1),Oe=(e,t)=>{const n=be.i++,{stack:r,length:s}=be;return n===s?be.length=r.push({$:e(),_:t}):t&&!t.some(Te,r[n]._)||(r[n]={$:e(),_:t}),r[n].$};function Te(e,t){return e!==this[t]}let Re=null;try{Re=new{o(){}}.o}catch(Ot){}let We=e=>class extends e{};if(Re){const{getPrototypeOf:e,setPrototypeOf:t}=Object,{construct:n}="object"==typeof Reflect?Reflect:{construct(e,n,r){const s=[null];for(let e=0;e<n.length;e++)s.push(n[e]);const o=e.bind.apply(e,s);return t(new o,r.prototype)}};We=function(r,s){function o(){return n(s?e(r):r,arguments,o)}return t(o.prototype,r.prototype),t(o,r)}}const Pe={map:{},re:null},Ze=e=>new RegExp(`<(/)?(${e.join("|")})([^A-Za-z0-9:._-])`,"g");let Be=null;const ze=(e,t)=>{const{map:n,re:r}=Be||t;return e.replace(r,((e,t,r,s)=>{const{tagName:o,is:a,element:i}=n[r];return i?t?`</${a}>`:`<${a}${s}`:t?`</${o}>`:`<${o} is="${a}"${s}`}))},De=({tagName:e,is:t,element:n})=>n?t:`${e}[is="${t}"]`,Ue=()=>Be,Fe=e=>{Be=e},He={useCallback:(e,t)=>Oe((()=>e),t),useContext:e=>{const{hook:t,args:n}=be,r=Ne.get(e),s={hook:t,args:n};return r.some(ke,s)||r.push(s),e.value},useEffect:je,useLayoutEffect:Me,useMemo:Oe,useReducer:xe,useRef:e=>{const t=be.i++,{stack:n,length:r}=be;return t===r&&(be.length=n.push({current:e})),n[t]},useState:(e,t)=>xe(Ce,e,void 0,t)},{render:Ve,html:qe,svg:Ie}=(e=>{const t=te(se);return re(e).forEach((n=>{t[n]=e[n](t[n]||("convert"===n?p:String))})),n.prototype=t,ae(n);function n(){return Y.apply(this,arguments)}})({transform:()=>e=>ze(e,Pe)}),{defineProperties:Ge}=Object,Je=new t,Ke=new t,Qe=new t,Xe=new i,Ye="attributeChangedCallback",et="connectedCallback",tt=`dis${et}`,nt=(e,t,n)=>{if(n in e){const r=e[n];t[n]={configurable:true,value(){return dt.call(this),r.apply(this,arguments)}}}else t[n]={configurable:true,value:dt}},rt=e=>{const{prototype:n}=e,r=[],s={html:{configurable:true,get:ht},svg:{configurable:true,get:ft}};if(s["_🔥"]={value:{events:r,info:null}},"handleEvent"in n||(s.handleEvent={configurable:true,value:pt}),"render"in n&&n.render.length){const{oninit:e}=n;Ge(n,{oninit:{configurable:true,value(){const t=(e=>{const t=[];return function n(){const r=be,s=[];be={hook:n,args:arguments,stack:t,i:0,length:t.length,after:s};try{return e.apply(null,arguments)}finally{be=r;for(let e=0,{length:t}=s;e<t;e++)s[e]()}}})(this.render.bind(this,He));Ge(this,{render:{configurable:true,value:t}}),this.addEventListener("disconnected",Le.bind(null,t),!1),e&&e.apply(this,arguments)}}})}"oninit"in n&&(r.push("init"),nt(n,s,"render")),nt(n,s,Ye),nt(n,s,et),nt(n,s,tt),[[Ye,"onattributechanged",mt],[et,"onconnected",gt],[tt,"ondisconnected",bt],[et,"render",vt]].forEach((([e,t,o])=>{if(!(e in n)&&t in n)if("render"!==t&&r.push(t.slice(2)),e in s){const t=s[e].value;s[e]={configurable:true,value(){return t.apply(this,arguments),o.apply(this,arguments)}}}else s[e]={configurable:true,value:o}}));const o=e.booleanAttributes||[];o.forEach((e=>{e in n||(s[e]={configurable:true,get(){return this.hasAttribute(e)},set(t){t&&"false"!==t?this.setAttribute(e,t):this.removeAttribute(e)}})}));const a=e.observedAttributes||[];a.forEach((e=>{e in n||(s[e]={configurable:true,get(){return this.getAttribute(e)},set(t){null==t?this.removeAttribute(e):this.setAttribute(e,t)}})}));(e.mappedAttributes||[]).forEach((e=>{const o=new t,a="on"+e in n;a&&r.push(e),s[e]={configurable:true,get(){return o.get(this)},set(t){if(o.set(this,t),a){const n=st(e);if(n.detail=t,Xe.has(this))this.dispatchEvent(n);else{const e=Qe.get(this);e?e.push(n):Qe.set(this,[n])}}}}})),Ge(n,s);const i=o.concat(a);return i.length?Ge(e,{observedAttributes:{configurable:true,get:()=>i}}):e},st=e=>new r(e),ot=(...e)=>new fe("html",e);ot.for=qe.for;const at=(...e)=>new fe("svg",e);at.for=Ie.for;const it=(e,n,r)=>{const s=ct(e,n,new t);return r.set(e,s),s},ct=(e,t,n)=>(r,...s)=>{const o=n.get(r)||((e,t,{info:n})=>{const r=n?ze(t.join("_🔥"),n).split("_🔥"):t;return e.set(t,r),r})(n,r,e["_🔥"]);return Ve(e,(()=>t(o,...s)))};function lt(e){this.addEventListener(e,this)}function ut(e){this.dispatchEvent(e)}function ht(){return Je.get(this)||it(this,ot,Je)}function ft(){return Ke.get(this)||it(this,at,Ke)}function pt(e){this[`on${e.type}`](e)}function dt(){if(!Xe.has(this)){Xe.add(this),this["_🔥"].events.forEach(lt,this),this.dispatchEvent(st("init"));const e=Qe.get(this);e&&(Qe.delete(this),e.forEach(ut,this))}}function mt(e,t,n){const r=st("attributechanged");r.attributeName=e,r.oldValue=t,r.newValue=n,this.dispatchEvent(r)}function gt(){this.dispatchEvent(st("connected"))}function vt(){this.render()}function bt(){this.dispatchEvent(st("disconnected"))}const{create:yt,defineProperty:wt,defineProperties:Et,getOwnPropertyNames:Ct,getOwnPropertySymbols:xt,getOwnPropertyDescriptor:Nt,keys:kt}=Object,At={element:HTMLElement},$t=new t;new t;const _t=new t;new t;const St=e=>{const t=yt(null),n=yt(null),r={prototype:n,statics:t};return Ct(e).concat(xt(e)).forEach((r=>{const s=Nt(e,r);switch(s.enumerable=!1,r){case"extends":r="tagName";case"contains":case"includes":case"name":case"booleanAttributes":case"mappedAttributes":case"observedAttributes":case"style":case"tagName":t[r]=s;break;default:n[r]=s}})),r},Lt=(e,t,n)=>{if(!/^([A-Z][A-Za-z0-9_]*)(<([A-Za-z0-9:._-]+)>|:([A-Za-z0-9:._-]+))?$/.test(e))throw"Invalid name";const{$1:r,$3:s,$4:o}=RegExp;let a=s||o||t.tagName||t.extends||"element";const i="fragment"===a;if(i)a="element";else if(!/^[A-Za-z0-9:._-]+$/.test(a))throw"Invalid tag";let c="",l="";a.indexOf("-")<0?(c=r.replace(/(([A-Z0-9])([A-Z0-9][a-z]))|(([a-z])([A-Z]))/g,"$2$5-$3$6").toLowerCase()+n,c.indexOf("-")<0&&(l="-heresy")):(c=a+n,a="element");const u=c+l;if(customElements.get(u))throw`Duplicated ${u} definition`;const h=We("object"==typeof t?_t.get(t)||((e,t)=>{const{statics:n,prototype:r}=St(e),s=We(At[t]||(At[t]=document.createElement(t).constructor),!1);return Et(s.prototype,r),Et(s,n),_t.set(e,rt(s)),s})(t,a):$t.get(t)||(e=>{const t=We(e,!1);return $t.set(e,rt(t)),t})(t),!0),f="element"===a;if(wt(h,"new",{value:f?()=>document.createElement(u):()=>document.createElement(a,{is:u})}),wt(h.prototype,"is",{value:u}),""===n){const e=(e=>{const{length:t}=e;let n=0,r=0;for(;r<t;)n=(n<<5)-n+e.charCodeAt(r++),n&=n;return n.toString(36)})(c.toUpperCase());Pe.map[r]=jt(h,a,u,{id:e,i:0}),Pe.re=Ze(kt(Pe.map))}if(i){const{render:e}=h.prototype;wt(h.prototype,"render",{configurable:!0,value(){if(e&&e.apply(this,arguments),this.parentNode){const{firstChild:e}=this;let t=null;if(e){const n=document.createRange();n.setStartBefore(e),n.setEndAfter(this.lastChild),t=n.extractContents(),this.parentNode.replaceChild(t,this)}}}})}const p=[u,h];return f||p.push({extends:a}),customElements.define(...p),{Class:h,is:u,name:r,tagName:a}},jt=(e,t,n,r)=>{const{prototype:s}=e,o=((e,t)=>({tagName:e,is:t,element:"element"===e}))(t,n),a=[De(o)],i=e.includes||e.contains;if(i){const e={};kt(i).forEach((t=>{const n=`-${r.id}-${r.i++}`,{Class:s,is:o,name:c,tagName:l}=Lt(t,i[t],n);a.push(De(e[c]=jt(s,l,o,r)))}));const t=Ze(kt(e)),{events:n}=s["_🔥"],o={events:n,info:{map:e,re:t}};if(wt(s,"_🔥",{value:o}),"render"in s){const{render:e}=s,{info:t}=o;wt(s,"render",{configurable:!0,value(){const n=Ue();Fe(t);const r=e.apply(this,arguments);return Fe(n),r}})}}return"style"in e&&(e=>{if((e||"").length){const t=document.createElement("style");t.type="text/css",t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e));const n=document.head||document.querySelector("head");n.insertBefore(t,n.lastChild)}})(e.style(...a)),o},Mt=["audio","background","chat","people","embed","emptyRoomInvitation","help","leaveButton","precallReview","screenshare","video","floatSelf","recording","logo","locking","participantCount","settingsButton","pipButton","moreButton","personality","subgridLabels","lowData","breakout"];var Ot,Tt;Ot="WherebyEmbed",Tt={oninit(){this.iframe=((e,t)=>e?e[t]||(e[t]={current:null}):{current:null})()},onconnected(){window.addEventListener("message",this)},ondisconnected(){window.removeEventListener("message",this)},observedAttributes:["displayName","minimal","room","subdomain","lang","metadata","groups","virtualBackgroundUrl","avatarUrl",...Mt].map((e=>e.toLowerCase())),onattributechanged({attributeName:e,oldValue:t}){["room","subdomain"].includes(e)&&null==t||this.render()},style:e=>`\n ${e} {\n display: block;\n }\n ${e} iframe {\n border: none;\n height: 100%;\n width: 100%;\n }\n `,_postCommand(e,t=[]){if(this.iframe.current){const n=new URL(this.room,`https://${this.subdomain}.whereby.com`);this.iframe.current.contentWindow.postMessage({command:e,args:t},n.origin)}},startRecording(){this._postCommand("start_recording")},stopRecording(){this._postCommand("stop_recording")},toggleCamera(e){this._postCommand("toggle_camera",[e])},toggleMicrophone(e){this._postCommand("toggle_microphone",[e])},onmessage({origin:e,data:t}){if(e!==new URL(this.room,`https://${this.subdomain}.whereby.com`).origin)return;const{type:n,payload:r}=t;this.dispatchEvent(new CustomEvent(n,{detail:r}))},render(){const{avatarurl:e,displayname:t,lang:n,metadata:r,minimal:s,room:o,groups:a,virtualbackgroundurl:i}=this;if(!o)return this.html`Whereby: Missing room attr.`;let c=/https:\/\/([^.]+)\.whereby.com\/.+/.exec(o);const l=c&&c[1]||this.subdomain;if(!l)return this.html`Whereby: Missing subdomain attr.`;const u=new URL(o,`https://${l}.whereby.com`);Object.entries({jsApi:!0,we:"1.6.1",iframeSource:l,...t&&{displayName:t},...n&&{lang:n},...r&&{metadata:r},...a&&{groups:a},...i&&{virtualBackgroundUrl:i},...e&&{avatarUrl:e},...null!=s&&{embed:s},...Mt.reduce(((e,t)=>null!=this[t.toLowerCase()]?{...e,[t]:this[t.toLowerCase()]}:e),{})}).forEach((([e,t])=>{u.searchParams.has(e)||u.searchParams.set(e,t)})),this.html`
11
- <iframe
12
- ref=${this.iframe}
13
- src=${u}
14
- allow="autoplay; camera; microphone; fullscreen; speaker; display-capture" />
15
- `}},("string"==typeof Ot?Lt(Ot,Tt,""):Lt(Ot.name,Ot,"")).Class;var Rt={sdkVersion:"1.6.1"};export{Rt as default};