diff --git a/package-lock.json b/package-lock.json index 9f48ca9c424..491297fcdae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,8 @@ "@googlemaps/react-wrapper": "^1.1.35", "@googlemaps/typescript-guards": "^2.0.0", "@headlessui/react": "^1.7.3", + "@livekit/components-react": "^0.4.1", + "@livekit/react-components": "^1.1.0", "@loadable/component": "^5.15.0", "@material-ui/core": "^4.11.4", "@material-ui/lab": "^4.0.0-alpha.58", @@ -47,6 +49,7 @@ "i18next": "^22.0.6", "i18next-browser-languagedetector": "^7.0.0", "libphonenumber-js": "^1.10.13", + "livekit-client": "^1.6.8", "lodash": "^4.17.21", "moment": "^2.29.4", "postcss-loader": "^7.0.2", @@ -6298,6 +6301,64 @@ "node": ">= 4" } }, + "node_modules/@floating-ui/core": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.2.tgz", + "integrity": "sha512-FaO9KVLFnxknZaGWGmNtjD2CVFuc0u4yeGEofoyXO2wgRA7fLtkngT6UB0vtWQWuhH3iMTZZ/Y89CMeyGfn8pA==" + }, + "node_modules/@floating-ui/dom": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.3.tgz", + "integrity": "sha512-lK9cZUrHSJLMVAdCvDqs6Ug8gr0wmqksYiaoj/bxj2gweRQkSuhg2/V6Jswz2KiQ0RAULbqw1oQDJIMpQ5GfGA==", + "dependencies": { + "@floating-ui/core": "^1.2.2" + } + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz", + "integrity": "sha512-4BC1NMoacEBzSXRwKjZ/X/gmnbp/HU5Qqat7E8xqorUtBFZS+bwfGH5/wqOC2K6GV0rgEobp3OjGRMa5fK9pFg==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.3.0.tgz", + "integrity": "sha512-uz9YifyKlixV6AcKlOX8WNdtF7l6nakGyLYxYaCa823bEBqyj/U2ssqtctO38itNEwXb8/lMzjdoJ+aaJuOdrw==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.3.0.tgz", + "integrity": "sha512-x5tMwzF2lTH8pyv8yeZRodItP2IVlzzmBuD1M7BjawWgg9XAvktqJJ91Qjgoaf8qJpHQ8FEU9VxRfOkLhh86QA==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.19.tgz", + "integrity": "sha512-Hyb+lB8T18cvLNX0S3llz7PcSOAJMLwiVKBuuzwM/nI5uoBw+gQjnf9il0fR1C3DKOI5Kc79pkJ4/xB0Uw9aFQ==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react": ">=16.x" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -7907,6 +7968,79 @@ "dev": true, "license": "MIT" }, + "node_modules/@livekit/components-core": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@livekit/components-core/-/components-core-0.3.1.tgz", + "integrity": "sha512-+m43k3ippgRLZ6fuRV8e3VWK7R23+VFKiSWmu1hDZYYWYZp60Z/sShx17AD1Gl6Da7NtVnccYO5xU29Hpibpfg==", + "dependencies": { + "@floating-ui/dom": "^1.1.0", + "email-regex": "^5.0.0", + "global-tld-list": "^0.0.1002", + "ip-regex": "^5.0.0", + "loglevel": "^1.8.1", + "rxjs": "^7.8.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "livekit-client": "^1.6.4" + } + }, + "node_modules/@livekit/components-react": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@livekit/components-react/-/components-react-0.4.1.tgz", + "integrity": "sha512-hY5aDXaoYaaluKKQ11y7rhomBQwiD1uT2o/mJaVFevI0LrH74HIRs2v8hGJie7sO8d6SaWymPpIsrbSVQvjJWg==", + "dependencies": { + "@livekit/components-core": "0.3.1", + "@react-hook/latest": "^1.0.3", + "clsx": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "livekit-client": "^1.6.4", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@livekit/react-components": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@livekit/react-components/-/react-components-1.1.0.tgz", + "integrity": "sha512-55xeByZ7SmfoIkFsxFkKQubKEHas9ym1YABP9sfgrURhA4aLwk2IFQLp0RHmtQW8rxZkn572quNqyLuPYUgXzg==", + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.1.1", + "@fortawesome/free-solid-svg-icons": "^6.1.1", + "@fortawesome/react-fontawesome": "^0.1.18", + "@livekit/react-core": "^1.1.0", + "@types/react-responsive": "^8.0.2", + "react-aspect-ratio": "^1.0.50", + "react-responsive": "^9.0.2", + "react-tiny-popover": "^6.0.5" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "livekit-client": "^1.3.2", + "react": ">=15", + "react-dom": ">=15" + } + }, + "node_modules/@livekit/react-core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@livekit/react-core/-/react-core-1.1.0.tgz", + "integrity": "sha512-0VkEFlqGgL3m4244CZoYa3Vkmiq7xFYNfc5xEA62y5lOHzeNT1FQbOyPrYc4puFWOjWKlzfG+iDmu7h0aAZQPQ==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "livekit-client": "^1.3.2", + "react": ">=15", + "react-dom": ">=15" + } + }, "node_modules/@loadable/component": { "version": "5.15.2", "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.15.2.tgz", @@ -8676,6 +8810,60 @@ "@pnotify/core": "^5.2.0" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "node_modules/@react-dnd/asap": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-5.0.2.tgz", @@ -8694,6 +8882,14 @@ "integrity": "sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==", "license": "MIT" }, + "node_modules/@react-hook/latest": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@react-hook/latest/-/latest-1.0.3.tgz", + "integrity": "sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg==", + "peerDependencies": { + "react": ">=16.8" + } + }, "node_modules/@react-spring/animated": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.6.1.tgz", @@ -18233,6 +18429,14 @@ "@types/react": "*" } }, + "node_modules/@types/react-responsive": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@types/react-responsive/-/react-responsive-8.0.5.tgz", + "integrity": "sha512-k3gQJgI87oP5IrVZe//3LKJFnAeFaqqWmmtl5eoYL2H3HqFcIhUaE30kRK1CsW3DHdojZxcVj4ZNc2ClsEu2PA==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-swipeable-views": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/@types/react-swipeable-views/-/react-swipeable-views-0.13.1.tgz", @@ -19994,6 +20198,11 @@ "dev": true, "license": "MIT" }, + "node_modules/async-await-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/async-await-queue/-/async-await-queue-1.2.1.tgz", + "integrity": "sha512-v2j+/EMzAnuJZ8I4570KJMFhi6G9g3WZyFh6cPnmQSJh3nLao77XpRt01kyFegQazPSKvue1yaIYDp/NfV/b0g==" + }, "node_modules/async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", @@ -23078,6 +23287,11 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/css-mediaquery": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", + "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==" + }, "node_modules/css-minimizer-webpack-plugin": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", @@ -24533,6 +24747,17 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/email-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/email-regex/-/email-regex-5.0.0.tgz", + "integrity": "sha512-he76Cm8JFxb6OGQHabLBPdsiStgPmJeAEhctmw0uhonUh1pCBsHpI6/rB62s2GNzjBb0YlhIcF/1l9Lp5AfH0Q==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -25826,7 +26051,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" @@ -27251,6 +27475,11 @@ "dev": true, "license": "ISC" }, + "node_modules/global-tld-list": { + "version": "0.0.1002", + "resolved": "https://registry.npmjs.org/global-tld-list/-/global-tld-list-0.0.1002.tgz", + "integrity": "sha512-11yCbAiy37cLCsb4EZElHdgK08gqJinBLrlWifycRG+8cSymU+SvZ6lBHzfKXwYl/e4hB3o+RCnl1rnR/rkAYA==" + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -28372,6 +28601,17 @@ "dev": true, "license": "MIT" }, + "node_modules/ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -33522,6 +33762,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/livekit-client": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/livekit-client/-/livekit-client-1.6.8.tgz", + "integrity": "sha512-QuzPwuW2bETuLo20SGgd0AOf8WJQwnZRkakiza3AYE+T9Oj+8h9UFQE7rtLYz1F3D5iYgFEuv1sC1WTAwUojPw==", + "dependencies": { + "async-await-queue": "^1.2.1", + "events": "^3.3.0", + "loglevel": "^1.8.0", + "protobufjs": "^7.0.0", + "sdp-transform": "^2.14.1", + "ts-debounce": "^4.0.0", + "typed-emitter": "^2.1.0", + "ua-parser-js": "^1.0.2", + "webrtc-adapter": "^8.1.1" + } + }, + "node_modules/livekit-client/node_modules/sdp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz", + "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==" + }, + "node_modules/livekit-client/node_modules/webrtc-adapter": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-8.2.1.tgz", + "integrity": "sha512-uZGIyr9FgjNHwEy8dkSV6Dq7wASbaSeSpibhrzFiRf9eSmUsMd4a55ZIfCdaASeIbalGWEQIkcE59Y9VkgqDZw==", + "dependencies": { + "sdp": "^3.2.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">=3.10.0" + } + }, "node_modules/load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -33759,6 +34032,23 @@ "node": ">=8" } }, + "node_modules/loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -33919,6 +34209,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/matchmediaquery": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.1.tgz", + "integrity": "sha512-Hlk20WQHRIm9EE9luN1kjRjYXAQToHOIAHPJn9buxBwuhfTHoKUcX+lXBbxc85DVQfXYbEQ4HcwQdd128E3qHQ==", + "dependencies": { + "css-mediaquery": "^0.1.2" + } + }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -37717,6 +38015,29 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/protobufjs": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.2.tgz", + "integrity": "sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -38076,6 +38397,14 @@ "node": ">=14" } }, + "node_modules/react-aspect-ratio": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/react-aspect-ratio/-/react-aspect-ratio-1.1.4.tgz", + "integrity": "sha512-lWZiiAbgAVnAWWk7J19S8Sm7Z9lquMneXNEein4EcOpaLR2Ql55qdfHFFaZjZ1P5J4M2C/jlt7GQmSyoAfx63Q==", + "peerDependencies": { + "react": "^0.14.7 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-async-script": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/react-async-script/-/react-async-script-1.2.0.tgz", @@ -38587,6 +38916,23 @@ "node": ">=0.10.0" } }, + "node_modules/react-responsive": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-9.0.2.tgz", + "integrity": "sha512-+4CCab7z8G8glgJoRjAwocsgsv6VA2w7JPxFWHRc7kvz8mec1/K5LutNC2MG28Mn8mu6+bu04XZxHv5gyfT7xQ==", + "dependencies": { + "hyphenate-style-name": "^1.0.0", + "matchmediaquery": "^0.3.0", + "prop-types": "^15.6.1", + "shallow-equal": "^1.2.1" + }, + "engines": { + "node": ">=0.10" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/react-scripts": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.0.tgz", @@ -40339,6 +40685,15 @@ "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", "license": "MIT" }, + "node_modules/react-tiny-popover": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/react-tiny-popover/-/react-tiny-popover-6.0.10.tgz", + "integrity": "sha512-ECMucd701SxWHGa+2YuVvccCxxTjmhomcD0ZYTF+Qmi5qNAj8pdlExFN+k+p1G78QTYIGPGNLocxRb9f6cZ0Mw==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -41896,11 +42251,9 @@ } }, "node_modules/rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "dev": true, - "license": "Apache-2.0", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dependencies": { "tslib": "^2.1.0" } @@ -42258,6 +42611,14 @@ "integrity": "sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw==", "license": "MIT" }, + "node_modules/sdp-transform": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.1.tgz", + "integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw==", + "bin": { + "sdp-verify": "checker.js" + } + }, "node_modules/secure-compare": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", @@ -44473,6 +44834,11 @@ "dev": true, "license": "MIT" }, + "node_modules/ts-debounce": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ts-debounce/-/ts-debounce-4.0.0.tgz", + "integrity": "sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==" + }, "node_modules/ts-dedent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", @@ -44528,7 +44894,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true, "license": "0BSD" }, "node_modules/tsutils": { @@ -44631,6 +44996,14 @@ "node": ">= 0.6" } }, + "node_modules/typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz", + "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==", + "optionalDependencies": { + "rxjs": "*" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -44660,6 +45033,24 @@ "node": ">=4.2.0" } }, + "node_modules/ua-parser-js": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.34.tgz", + "integrity": "sha512-K9mwJm/DaB6mRLZfw6q8IMXipcrmuT6yfhYmwhAkuh+81sChuYstYA+znlgaflUPaYUa3odxKPKGw6Vw/lANew==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, "node_modules/uglify-js": { "version": "3.17.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.3.tgz", @@ -51287,6 +51678,48 @@ } } }, + "@floating-ui/core": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.2.tgz", + "integrity": "sha512-FaO9KVLFnxknZaGWGmNtjD2CVFuc0u4yeGEofoyXO2wgRA7fLtkngT6UB0vtWQWuhH3iMTZZ/Y89CMeyGfn8pA==" + }, + "@floating-ui/dom": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.3.tgz", + "integrity": "sha512-lK9cZUrHSJLMVAdCvDqs6Ug8gr0wmqksYiaoj/bxj2gweRQkSuhg2/V6Jswz2KiQ0RAULbqw1oQDJIMpQ5GfGA==", + "requires": { + "@floating-ui/core": "^1.2.2" + } + }, + "@fortawesome/fontawesome-common-types": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz", + "integrity": "sha512-4BC1NMoacEBzSXRwKjZ/X/gmnbp/HU5Qqat7E8xqorUtBFZS+bwfGH5/wqOC2K6GV0rgEobp3OjGRMa5fK9pFg==" + }, + "@fortawesome/fontawesome-svg-core": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.3.0.tgz", + "integrity": "sha512-uz9YifyKlixV6AcKlOX8WNdtF7l6nakGyLYxYaCa823bEBqyj/U2ssqtctO38itNEwXb8/lMzjdoJ+aaJuOdrw==", + "requires": { + "@fortawesome/fontawesome-common-types": "6.3.0" + } + }, + "@fortawesome/free-solid-svg-icons": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.3.0.tgz", + "integrity": "sha512-x5tMwzF2lTH8pyv8yeZRodItP2IVlzzmBuD1M7BjawWgg9XAvktqJJ91Qjgoaf8qJpHQ8FEU9VxRfOkLhh86QA==", + "requires": { + "@fortawesome/fontawesome-common-types": "6.3.0" + } + }, + "@fortawesome/react-fontawesome": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.19.tgz", + "integrity": "sha512-Hyb+lB8T18cvLNX0S3llz7PcSOAJMLwiVKBuuzwM/nI5uoBw+gQjnf9il0fR1C3DKOI5Kc79pkJ4/xB0Uw9aFQ==", + "requires": { + "prop-types": "^15.8.1" + } + }, "@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -52553,6 +52986,49 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", "dev": true }, + "@livekit/components-core": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@livekit/components-core/-/components-core-0.3.1.tgz", + "integrity": "sha512-+m43k3ippgRLZ6fuRV8e3VWK7R23+VFKiSWmu1hDZYYWYZp60Z/sShx17AD1Gl6Da7NtVnccYO5xU29Hpibpfg==", + "requires": { + "@floating-ui/dom": "^1.1.0", + "email-regex": "^5.0.0", + "global-tld-list": "^0.0.1002", + "ip-regex": "^5.0.0", + "loglevel": "^1.8.1", + "rxjs": "^7.8.0" + } + }, + "@livekit/components-react": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@livekit/components-react/-/components-react-0.4.1.tgz", + "integrity": "sha512-hY5aDXaoYaaluKKQ11y7rhomBQwiD1uT2o/mJaVFevI0LrH74HIRs2v8hGJie7sO8d6SaWymPpIsrbSVQvjJWg==", + "requires": { + "@livekit/components-core": "0.3.1", + "@react-hook/latest": "^1.0.3", + "clsx": "^1.2.1" + } + }, + "@livekit/react-components": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@livekit/react-components/-/react-components-1.1.0.tgz", + "integrity": "sha512-55xeByZ7SmfoIkFsxFkKQubKEHas9ym1YABP9sfgrURhA4aLwk2IFQLp0RHmtQW8rxZkn572quNqyLuPYUgXzg==", + "requires": { + "@fortawesome/fontawesome-svg-core": "^6.1.1", + "@fortawesome/free-solid-svg-icons": "^6.1.1", + "@fortawesome/react-fontawesome": "^0.1.18", + "@livekit/react-core": "^1.1.0", + "@types/react-responsive": "^8.0.2", + "react-aspect-ratio": "^1.0.50", + "react-responsive": "^9.0.2", + "react-tiny-popover": "^6.0.5" + } + }, + "@livekit/react-core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@livekit/react-core/-/react-core-1.1.0.tgz", + "integrity": "sha512-0VkEFlqGgL3m4244CZoYa3Vkmiq7xFYNfc5xEA62y5lOHzeNT1FQbOyPrYc4puFWOjWKlzfG+iDmu7h0aAZQPQ==" + }, "@loadable/component": { "version": "5.15.2", "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.15.2.tgz", @@ -53049,6 +53525,60 @@ "@pnotify/core": "^5.2.0" } }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "@react-dnd/asap": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-5.0.2.tgz", @@ -53064,6 +53594,11 @@ "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-4.0.2.tgz", "integrity": "sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==" }, + "@react-hook/latest": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@react-hook/latest/-/latest-1.0.3.tgz", + "integrity": "sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg==" + }, "@react-spring/animated": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.6.1.tgz", @@ -59825,6 +60360,14 @@ "@types/react": "*" } }, + "@types/react-responsive": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/@types/react-responsive/-/react-responsive-8.0.5.tgz", + "integrity": "sha512-k3gQJgI87oP5IrVZe//3LKJFnAeFaqqWmmtl5eoYL2H3HqFcIhUaE30kRK1CsW3DHdojZxcVj4ZNc2ClsEu2PA==", + "requires": { + "@types/react": "*" + } + }, "@types/react-swipeable-views": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/@types/react-swipeable-views/-/react-swipeable-views-0.13.1.tgz", @@ -61106,6 +61649,11 @@ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, + "async-await-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/async-await-queue/-/async-await-queue-1.2.1.tgz", + "integrity": "sha512-v2j+/EMzAnuJZ8I4570KJMFhi6G9g3WZyFh6cPnmQSJh3nLao77XpRt01kyFegQazPSKvue1yaIYDp/NfV/b0g==" + }, "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", @@ -63341,6 +63889,11 @@ } } }, + "css-mediaquery": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", + "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==" + }, "css-minimizer-webpack-plugin": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", @@ -64368,6 +64921,11 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "email-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/email-regex/-/email-regex-5.0.0.tgz", + "integrity": "sha512-he76Cm8JFxb6OGQHabLBPdsiStgPmJeAEhctmw0uhonUh1pCBsHpI6/rB62s2GNzjBb0YlhIcF/1l9Lp5AfH0Q==" + }, "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -65277,8 +65835,7 @@ "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "evp_bytestokey": { "version": "1.0.3", @@ -66308,6 +66865,11 @@ } } }, + "global-tld-list": { + "version": "0.0.1002", + "resolved": "https://registry.npmjs.org/global-tld-list/-/global-tld-list-0.0.1002.tgz", + "integrity": "sha512-11yCbAiy37cLCsb4EZElHdgK08gqJinBLrlWifycRG+8cSymU+SvZ6lBHzfKXwYl/e4hB3o+RCnl1rnR/rkAYA==" + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -67064,6 +67626,11 @@ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, + "ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==" + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -70889,6 +71456,37 @@ } } }, + "livekit-client": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/livekit-client/-/livekit-client-1.6.8.tgz", + "integrity": "sha512-QuzPwuW2bETuLo20SGgd0AOf8WJQwnZRkakiza3AYE+T9Oj+8h9UFQE7rtLYz1F3D5iYgFEuv1sC1WTAwUojPw==", + "requires": { + "async-await-queue": "^1.2.1", + "events": "^3.3.0", + "loglevel": "^1.8.0", + "protobufjs": "^7.0.0", + "sdp-transform": "^2.14.1", + "ts-debounce": "^4.0.0", + "typed-emitter": "^2.1.0", + "ua-parser-js": "^1.0.2", + "webrtc-adapter": "^8.1.1" + }, + "dependencies": { + "sdp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz", + "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==" + }, + "webrtc-adapter": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-8.2.1.tgz", + "integrity": "sha512-uZGIyr9FgjNHwEy8dkSV6Dq7wASbaSeSpibhrzFiRf9eSmUsMd4a55ZIfCdaASeIbalGWEQIkcE59Y9VkgqDZw==", + "requires": { + "sdp": "^3.2.0" + } + } + } + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -71069,6 +71667,16 @@ } } }, + "loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==" + }, + "long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -71181,6 +71789,14 @@ "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", "dev": true }, + "matchmediaquery": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.1.tgz", + "integrity": "sha512-Hlk20WQHRIm9EE9luN1kjRjYXAQToHOIAHPJn9buxBwuhfTHoKUcX+lXBbxc85DVQfXYbEQ4HcwQdd128E3qHQ==", + "requires": { + "css-mediaquery": "^0.1.2" + } + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -73687,6 +74303,25 @@ "xtend": "^4.0.0" } }, + "protobufjs": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.2.tgz", + "integrity": "sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -73950,6 +74585,11 @@ "whatwg-fetch": "^3.6.2" } }, + "react-aspect-ratio": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/react-aspect-ratio/-/react-aspect-ratio-1.1.4.tgz", + "integrity": "sha512-lWZiiAbgAVnAWWk7J19S8Sm7Z9lquMneXNEein4EcOpaLR2Ql55qdfHFFaZjZ1P5J4M2C/jlt7GQmSyoAfx63Q==" + }, "react-async-script": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/react-async-script/-/react-async-script-1.2.0.tgz", @@ -74294,6 +74934,17 @@ "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", "dev": true }, + "react-responsive": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-9.0.2.tgz", + "integrity": "sha512-+4CCab7z8G8glgJoRjAwocsgsv6VA2w7JPxFWHRc7kvz8mec1/K5LutNC2MG28Mn8mu6+bu04XZxHv5gyfT7xQ==", + "requires": { + "hyphenate-style-name": "^1.0.0", + "matchmediaquery": "^0.3.0", + "prop-types": "^15.6.1", + "shallow-equal": "^1.2.1" + } + }, "react-scripts": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.0.tgz", @@ -75506,6 +76157,11 @@ } } }, + "react-tiny-popover": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/react-tiny-popover/-/react-tiny-popover-6.0.10.tgz", + "integrity": "sha512-ECMucd701SxWHGa+2YuVvccCxxTjmhomcD0ZYTF+Qmi5qNAj8pdlExFN+k+p1G78QTYIGPGNLocxRb9f6cZ0Mw==" + }, "react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -76620,10 +77276,9 @@ } }, "rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "dev": true, + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "requires": { "tslib": "^2.1.0" } @@ -76869,6 +77524,11 @@ "resolved": "https://registry.npmjs.org/sdp/-/sdp-2.12.0.tgz", "integrity": "sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw==" }, + "sdp-transform": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.1.tgz", + "integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw==" + }, "secure-compare": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", @@ -78506,6 +79166,11 @@ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", "dev": true }, + "ts-debounce": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ts-debounce/-/ts-debounce-4.0.0.tgz", + "integrity": "sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==" + }, "ts-dedent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", @@ -78544,8 +79209,7 @@ "tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "tsutils": { "version": "3.21.0", @@ -78616,6 +79280,14 @@ "mime-types": "~2.1.24" } }, + "typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz", + "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==", + "requires": { + "rxjs": "*" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -78636,6 +79308,11 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" }, + "ua-parser-js": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.34.tgz", + "integrity": "sha512-K9mwJm/DaB6mRLZfw6q8IMXipcrmuT6yfhYmwhAkuh+81sChuYstYA+znlgaflUPaYUa3odxKPKGw6Vw/lANew==" + }, "uglify-js": { "version": "3.17.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.3.tgz", diff --git a/package.json b/package.json index 9e1a7d9dc7d..76dbfd0521b 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "coronasafe Contributors" ], "homepage": "https://care.coronasafe.in", - "proxy": "https://careapi.coronasafe.in", + "proxy": "http://127.0.0.1:8000", "main": "./src/index.tsx", "keywords": [ "Coronasafe", @@ -35,6 +35,8 @@ "@googlemaps/react-wrapper": "^1.1.35", "@googlemaps/typescript-guards": "^2.0.0", "@headlessui/react": "^1.7.3", + "@livekit/components-react": "^0.4.1", + "@livekit/react-components": "^1.1.0", "@loadable/component": "^5.15.0", "@material-ui/core": "^4.11.4", "@material-ui/lab": "^4.0.0-alpha.58", @@ -68,6 +70,7 @@ "i18next": "^22.0.6", "i18next-browser-languagedetector": "^7.0.0", "libphonenumber-js": "^1.10.13", + "livekit-client": "^1.6.8", "lodash": "^4.17.21", "moment": "^2.29.4", "postcss-loader": "^7.0.2", diff --git a/src/Common/LiveKit.tsx b/src/Common/LiveKit.tsx new file mode 100644 index 00000000000..d7c14352571 --- /dev/null +++ b/src/Common/LiveKit.tsx @@ -0,0 +1,81 @@ +import { LiveKitRoom } from "@livekit/react-components"; +import "@livekit/react-components/dist/index.css"; +import { useEffect, useState } from "react"; +import ButtonV2 from "../Components/Common/components/ButtonV2"; +import { getLiveKitToken } from "../Redux/actions"; +import { Error } from "../Utils/Notifications"; +import { useDispatch } from "react-redux"; + +export const LiveKit = (props: { + sourceUsername: string; + targetUsername: string; +}) => { + const dispatch = useDispatch(); + const [status, setStatus] = useState("Disconnected"); + const [connect, setConnect] = useState(false); + const [token, setToken] = useState(""); + + const getToken = async () => { + const tokenData = await dispatch( + getLiveKitToken({ + source: props.sourceUsername, + target: props.targetUsername, + }) + ); + if (tokenData) { + setToken(tokenData.access); + console.log(tokenData); + } else { + Error({ + msg: "Error fetching token", + }); + } + }; + + useEffect(() => { + async function fetchData() { + getToken(); + } + fetchData(); + }, []); + + return ( +
+

Welcome {props.sourceUsername} !

+

+ Status:{" "} + + {status} + +

+ { + setConnect(!connect); + if (status != "Connected") { + setStatus("Connecting..."); + } else { + setStatus("Disconnected"); + } + }} + variant={status === "Connected" ? "danger" : "primary"} + > + {status === "Connected" ? "Disconnect" : "Connect"} + + {connect && token && ( + { + setStatus("Connected"); + }} + onLeave={() => { + setStatus("Disconnected"); + setConnect(false); + }} + /> + )} +
+ ); +}; diff --git a/src/Components/Facility/DoctorLiveConnect.tsx b/src/Components/Facility/DoctorLiveConnect.tsx new file mode 100644 index 00000000000..d7024a8cf67 --- /dev/null +++ b/src/Components/Facility/DoctorLiveConnect.tsx @@ -0,0 +1,60 @@ +import { useState, useEffect } from "react"; + +import loadable from "@loadable/component"; +import { useDispatch, useSelector } from "react-redux"; +import { getFacilityUsers } from "../../Redux/actions"; +const PageTitle = loadable(() => import("../Common/PageTitle")); +import { LiveKit } from "../../Common/LiveKit"; +import { get } from "lodash"; + +const DoctorLiveConnect = (props: { facilityId: string; userId: string }) => { + const { facilityId, userId } = props; + const [user, setUser] = useState(null); + const { currentUser } = useSelector((state) => state) as any; + + const dispatchAction: any = useDispatch(); + useEffect(() => { + const fetchUsers = async () => { + if (facilityId) { + const res = await dispatchAction(getFacilityUsers(facilityId)); + if (res && res.data) { + setUser(res.data.results.find((user: any) => user.id == userId)); + } + } else { + setUser(null); + } + }; + fetchUsers(); + }, [facilityId]); + + return ( + user && ( +
+ +
+
+
+
+
+
+ + Connect to Doctor {user.first_name} {user.last_name} + +
+
+
+ +
+
+
+
+
+
+ ) + ); +}; + +export default DoctorLiveConnect; diff --git a/src/Components/Facility/DoctorVideoSlideover.tsx b/src/Components/Facility/DoctorVideoSlideover.tsx index 99b489edb8d..2176becf084 100644 --- a/src/Components/Facility/DoctorVideoSlideover.tsx +++ b/src/Components/Facility/DoctorVideoSlideover.tsx @@ -6,6 +6,7 @@ import { getFacilityUsers } from "../../Redux/actions"; import { UserAssignedModel } from "../Users/models"; import { SkillObjectModel } from "../Users/models"; import CareIcon from "../../CAREUI/icons/CareIcon"; +import { Link } from "raviger"; export default function DoctorVideoSlideover(props: { show: boolean; @@ -85,7 +86,13 @@ export default function DoctorVideoSlideover(props: { ); }) .map((doctor) => { - return ; + return ( + + ); })} @@ -94,7 +101,7 @@ export default function DoctorVideoSlideover(props: { ); } -function UserListItem(props: { user: UserAssignedModel }) { +function UserListItem(props: { user: UserAssignedModel; facilityId: string }) { const user = props.user; const icon = user.user_type === "Doctor" ? "fa-user-doctor " : " fa-user-nurse"; @@ -144,6 +151,18 @@ function UserListItem(props: { user: UserAssignedModel }) { {user.first_name} {user.last_name}
+ +
+ + Connect on Care + + +
+ { + return fireRequest("getLiveKitToken", [], params); +}; diff --git a/src/Redux/api.tsx b/src/Redux/api.tsx index dbe3c3a9b03..e2590406164 100644 --- a/src/Redux/api.tsx +++ b/src/Redux/api.tsx @@ -880,6 +880,11 @@ const routes: Routes = { path: "/api/v1/hcx/make_claim/", method: "POST", }, + + getLiveKitToken: { + path: "/api/v1/livekit/get_token/", + method: "POST", + }, }; export default routes; diff --git a/src/Router/AppRouter.tsx b/src/Router/AppRouter.tsx index 845c720bc2c..2857ac3c26c 100644 --- a/src/Router/AppRouter.tsx +++ b/src/Router/AppRouter.tsx @@ -69,6 +69,7 @@ import { UpdateFacilityMiddleware } from "../Components/Facility/UpdateFacilityM import useConfig from "../Common/hooks/useConfig"; import ConsultationClaims from "../Components/Facility/ConsultationClaims"; import { handleSignOut } from "../Utils/utils"; +import DoctorLiveConnect from "../Components/Facility/DoctorLiveConnect"; export default function AppRouter() { const { static_black_logo, enable_hcx } = useConfig(); @@ -394,6 +395,10 @@ export default function AppRouter() { tab={tab} /> ), + "/facility/:facilityId/live_connect/:userId": ({ + facilityId, + userId, + }: any) => , "/not-found": () => , }; diff --git a/src/style/index.css b/src/style/index.css index ba65d8322e9..c9a264ae507 100644 --- a/src/style/index.css +++ b/src/style/index.css @@ -15,6 +15,10 @@ body { @apply font-sans text-gray-900 w-full h-full antialiased; } +.react-tiny-popover-container { + color: white !important; +} + h1, h2, h3,