diff --git a/index.html b/index.html index 2437a76..357dd83 100644 --- a/index.html +++ b/index.html @@ -4,8 +4,33 @@ - Mitsi + + + + + + + + + + + + Mitsi - Conferencing Platform to Connect and Collaborate +
diff --git a/package-lock.json b/package-lock.json index d99ad76..347d996 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,7 @@ "next-themes": "^0.4.6", "react": "^19.1.1", "react-dom": "^19.1.1", + "react-helmet": "^6.1.0", "react-hook-form": "^7.62.0", "react-router-dom": "^7.8.2", "socket.io-client": "^4.8.1", @@ -47,6 +48,7 @@ "@types/node": "^24.3.0", "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", + "@types/react-helmet": "^6.1.11", "@types/uniqid": "^5.3.4", "@vitejs/plugin-react": "^5.0.1", "@vitest/eslint-plugin": "^1.3.4", @@ -3039,6 +3041,16 @@ "@types/react": "^19.2.0" } }, + "node_modules/@types/react-helmet": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.11.tgz", + "integrity": "sha512-0QcdGLddTERotCXo3VFlUSWO3ztraw8nZ6e3zJSgG7apwV5xt+pJUS8ewPBqT4NYB1optGLprNQzFleIY84u/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -5556,7 +5568,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -5955,6 +5966,18 @@ "dev": true, "license": "MIT" }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/loupe": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", @@ -6193,6 +6216,15 @@ "dev": true, "license": "MIT" }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -6431,6 +6463,23 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -6489,6 +6538,36 @@ "react": "^19.2.0" } }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "license": "MIT" + }, + "node_modules/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.1.1", + "react-side-effect": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.3.0" + } + }, + "node_modules/react-helmet/node_modules/react-side-effect": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", + "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.3.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-hook-form": { "version": "7.65.0", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.65.0.tgz", diff --git a/package.json b/package.json index 17f0324..505e687 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "next-themes": "^0.4.6", "react": "^19.1.1", "react-dom": "^19.1.1", + "react-helmet": "^6.1.0", "react-hook-form": "^7.62.0", "react-router-dom": "^7.8.2", "socket.io-client": "^4.8.1", @@ -56,6 +57,7 @@ "@types/node": "^24.3.0", "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", + "@types/react-helmet": "^6.1.11", "@types/uniqid": "^5.3.4", "@vitejs/plugin-react": "^5.0.1", "@vitest/eslint-plugin": "^1.3.4", diff --git a/src/components/room/control-bar.tsx b/src/components/room/control-bar.tsx index 7f1d77e..0400a8e 100644 --- a/src/components/room/control-bar.tsx +++ b/src/components/room/control-bar.tsx @@ -10,8 +10,8 @@ import Screen from './screen'; const ControlBar = () => { return ( -
-
+
+
{/* Left Controls */}
{/* Microphone */} diff --git a/src/components/room/grid/my-tile.tsx b/src/components/room/grid/my-tile.tsx index ea6c75c..eebd76a 100644 --- a/src/components/room/grid/my-tile.tsx +++ b/src/components/room/grid/my-tile.tsx @@ -26,7 +26,6 @@ const MyTile: React.FC = ({ layout }) => { if (!cameraOn || !videoRef.current) return; const track = getTrack('camera'); if (!track) return; - console.log({ track }); videoRef.current.srcObject = new MediaStream([track]); }, [cameraOn, cameraDeviceId, getTrack]); @@ -41,7 +40,10 @@ const MyTile: React.FC = ({ layout }) => { {cameraOn ? (