diff --git a/frontend/package-lock.json b/frontend/package-lock.json index bd6fcd8..4a67cba 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -5313,9 +5313,9 @@ } }, "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "dev": true, "license": "ISC", "dependencies": { diff --git a/frontend/src/components/layout/Layout.jsx b/frontend/src/components/layout/Layout.jsx index cf35e78..c8f7724 100644 --- a/frontend/src/components/layout/Layout.jsx +++ b/frontend/src/components/layout/Layout.jsx @@ -1,10 +1,14 @@ import Navbar from './Navbar'; -const Layout = ({ children }) => { +const Layout = ({ children, fullWidth = false, noPadding = false }) => { + const mainClasses = fullWidth || noPadding + ? "flex-1 flex flex-col" + : "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"; + return ( -
+
-
+
{children}
diff --git a/frontend/src/components/layout/Navbar.jsx b/frontend/src/components/layout/Navbar.jsx index 7d38cef..b39371f 100644 --- a/frontend/src/components/layout/Navbar.jsx +++ b/frontend/src/components/layout/Navbar.jsx @@ -61,8 +61,8 @@ const Navbar = () => { if (!user) return null; return ( -
{getStatusBadge()} @@ -352,14 +352,14 @@ const SuggestionCard = ({ suggestion, type, onAccept, onReject }) => { diff --git a/frontend/src/pages/EventChatPage.jsx b/frontend/src/pages/EventChatPage.jsx index 2a54cb1..644d368 100644 --- a/frontend/src/pages/EventChatPage.jsx +++ b/frontend/src/pages/EventChatPage.jsx @@ -352,11 +352,10 @@ const EventChatPage = () => { } return ( - -
-
- {/* Header */} -
+ +
+ {/* Header */} +

{event.name}

@@ -379,15 +378,24 @@ const EventChatPage = () => { )}
- {myHeats.length > 0 && ( +
+ {myHeats.length > 0 && ( + + )} - )} +
@@ -401,9 +409,9 @@ const EventChatPage = () => { /> )} - {/* Tab Navigation */} -
- +
-
- {/* Chat Tab */} - {activeTab === 'chat' && ( -
+ {/* Content Area - flex-1 fills remaining space */} +
+ {/* Chat Tab */} + {activeTab === 'chat' && ( +
{/* Sidebar - visible only on chat tab on larger screens */}
{ myHeats={myHeats} /> )} -
- - {/* Leave Event Button */} -
- -
+
{ existingCompetitorNumber={myCompetitorNumber} /> -
); }; diff --git a/frontend/src/pages/MatchChatPage.jsx b/frontend/src/pages/MatchChatPage.jsx index fa1d6fe..2394f95 100644 --- a/frontend/src/pages/MatchChatPage.jsx +++ b/frontend/src/pages/MatchChatPage.jsx @@ -213,11 +213,10 @@ const MatchChatPage = () => { } return ( - -
-
- {/* Header with Partner Info */} -
+ +
+ {/* Header with Partner Info */} +
@@ -256,8 +255,8 @@ const MatchChatPage = () => {
- {/* WebRTC Status Bar */} -
+ {/* WebRTC Status Bar */} +
@@ -273,22 +272,23 @@ const MatchChatPage = () => { {connectionState === CONNECTION_STATE.CONNECTED ? 'E2E Encrypted (DTLS)' : 'WebRTC P2P Ready'} -
+
-
- {/* WebRTC Warning */} - {webrtcDetection && ( -
- -
- )} + {/* Content Area - flex-1 fills remaining space */} +
+ {/* WebRTC Warning */} + {webrtcDetection && ( +
+ +
+ )} - + { disabled={!isConnected} placeholder="Write a message..." /> -
- - {/* Info Box */} -
-

- 🚀 WebRTC P2P File Transfer Active! Videos are transferred directly between users via - RTCDataChannel with 16KB chunking and real-time progress monitoring. The server is only used for - SDP/ICE exchange (signaling). Connection is end-to-end encrypted (DTLS). -

-
);