From 3565e8f63fa268e63d70a7ac2a1ce98953867e5f Mon Sep 17 00:00:00 2001 From: Devansh Trivedi Date: Wed, 24 Sep 2025 16:27:33 +0530 Subject: [PATCH 1/4] updated botwidget responsiveness for smartphones screens --- components/BotWidget.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/components/BotWidget.tsx b/components/BotWidget.tsx index b98fdae..e1a54aa 100644 --- a/components/BotWidget.tsx +++ b/components/BotWidget.tsx @@ -72,24 +72,24 @@ export default function BotWidget() { }; return ( -
+
{open && ( -
-
+
+
{messages.map((msg, i) => { let contentElement; @@ -134,7 +134,7 @@ export default function BotWidget() { return (
-
+
setInput(e.target.value)} placeholder="What have you covered so far?" - className="flex-grow border p-2 rounded text-black" + className="flex-grow border p-2 rounded text-black text-sm sm:text-base" disabled={loading} onKeyDown={(e) => { if (e.key === "Enter" && !loading) { @@ -170,7 +170,7 @@ export default function BotWidget() { : "bg-blue-600 hover:bg-blue-700" }`} > - +
{loading && ( From 2102cec6757f92f05fe9a41476194d07422b3be4 Mon Sep 17 00:00:00 2001 From: Devansh Trivedi Date: Thu, 25 Sep 2025 10:35:56 +0530 Subject: [PATCH 2/4] updated responsiveness --- components/BotWidget.tsx | 104 ++++++++++++++++++++++++++++++++------- 1 file changed, 87 insertions(+), 17 deletions(-) diff --git a/components/BotWidget.tsx b/components/BotWidget.tsx index e1a54aa..2ab10ec 100644 --- a/components/BotWidget.tsx +++ b/components/BotWidget.tsx @@ -15,6 +15,7 @@ export default function BotWidget() { }, ]); const [loading, setLoading] = useState(false); + const [screenSize, setScreenSize] = useState({ width: 0, height: 0 }); const chatRef = useRef(null); const messagesEndRef = useRef(null); @@ -22,6 +23,17 @@ export default function BotWidget() { messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); }, [messages]); + useEffect(() => { + const handleResize = () => { + setScreenSize({ width: window.innerWidth, height: window.innerHeight }); + }; + + handleResize(); // Set initial size + window.addEventListener('resize', handleResize); + + return () => window.removeEventListener('resize', handleResize); + }, []); + useEffect(() => { if (open) { setTimeout(() => { @@ -72,24 +84,61 @@ export default function BotWidget() { }; return ( -
+
{open && ( -
-
+
= 640 ? `${screenSize.width * 0.85}px` : 'calc(100vw - 1rem)', + maxWidth: '85vw', + height: screenSize.height >= 1200 ? `${screenSize.height * 0.70}px` : + screenSize.height >= 900 ? `${screenSize.height * 0.68}px` : + screenSize.height >= 700 ? `${screenSize.height * 0.65}px` : + `${screenSize.height * 0.60}px`, + maxHeight: '70vh' + }}> +
= 900 ? '1rem' : '0.875rem' + }}> {messages.map((msg, i) => { let contentElement; @@ -103,11 +152,11 @@ export default function BotWidget() { {data.map((q, idx) => (
-

{q.title}

-

{q.description}

-

+

{q.title}

+

{q.description}

+

Topic: {q.topic} | Level: {q.level}

@@ -134,11 +183,24 @@ export default function BotWidget() { return (
= 1536 ? '1.5rem' : + screenSize.width >= 1280 ? '1.25rem' : + screenSize.width >= 1024 ? '1rem' : + screenSize.width >= 768 ? '0.75rem' : '0.5rem', + fontSize: screenSize.width >= 1536 ? '1.5rem' : + screenSize.width >= 1280 ? '1.25rem' : + screenSize.width >= 1024 ? '1.125rem' : + screenSize.width >= 768 ? '1rem' : + screenSize.width >= 640 ? '0.875rem' : '0.75rem', + marginLeft: msg.role === "user" ? (screenSize.width >= 1024 ? '2rem' : '1rem') : '0', + marginRight: msg.role === "bot" ? (screenSize.width >= 1024 ? '2rem' : '1rem') : '0' + }} > {contentElement}
@@ -147,13 +209,16 @@ export default function BotWidget() {
-
-
+
+
setInput(e.target.value)} placeholder="What have you covered so far?" - className="flex-grow border p-2 rounded text-black text-sm sm:text-base" + className="flex-grow border p-3 rounded-lg text-black focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all" + style={{ + fontSize: screenSize.width >= 900 ? '1rem' : '0.875rem' + }} disabled={loading} onKeyDown={(e) => { if (e.key === "Enter" && !loading) { @@ -164,17 +229,22 @@ export default function BotWidget() {
{loading && ( -

🤖 Thinking...

+

= 900 ? '1rem' : '0.875rem' + }}>🤖 Thinking...

)}
From 0b21340297425f9ce3be2027e60ca079f862dbf4 Mon Sep 17 00:00:00 2001 From: Devansh Trivedi Date: Fri, 26 Sep 2025 23:10:38 +0530 Subject: [PATCH 3/4] solved said issue of responsiveness --- app/globals.css | 2 + components/BotWidget.tsx | 215 +++++++++++++++------------------------ 2 files changed, 83 insertions(+), 134 deletions(-) diff --git a/app/globals.css b/app/globals.css index 449c304..8e74f37 100644 --- a/app/globals.css +++ b/app/globals.css @@ -315,3 +315,5 @@ display: none; } */ + + diff --git a/components/BotWidget.tsx b/components/BotWidget.tsx index 2ab10ec..73f54a9 100644 --- a/components/BotWidget.tsx +++ b/components/BotWidget.tsx @@ -11,11 +11,10 @@ export default function BotWidget() { const [messages, setMessages] = useState([ { role: "bot", - content: "👋 Hi! I’m your DSAMate Bot. Tell me what you’ve done so far!", + content: "👋 Hi! I'm your DSAMate Bot. Tell me what you've done so far!", }, ]); const [loading, setLoading] = useState(false); - const [screenSize, setScreenSize] = useState({ width: 0, height: 0 }); const chatRef = useRef(null); const messagesEndRef = useRef(null); @@ -23,17 +22,6 @@ export default function BotWidget() { messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); }, [messages]); - useEffect(() => { - const handleResize = () => { - setScreenSize({ width: window.innerWidth, height: window.innerHeight }); - }; - - handleResize(); // Set initial size - window.addEventListener('resize', handleResize); - - return () => window.removeEventListener('resize', handleResize); - }, []); - useEffect(() => { if (open) { setTimeout(() => { @@ -84,141 +72,101 @@ export default function BotWidget() { }; return ( -
+
+ {/* Bot Button - Responsive sizing */} + {/* Chat Window - Responsive positioning and sizing */} {open && ( -
= 640 ? `${screenSize.width * 0.85}px` : 'calc(100vw - 1rem)', - maxWidth: '85vw', - height: screenSize.height >= 1200 ? `${screenSize.height * 0.70}px` : - screenSize.height >= 900 ? `${screenSize.height * 0.68}px` : - screenSize.height >= 700 ? `${screenSize.height * 0.65}px` : - `${screenSize.height * 0.60}px`, - maxHeight: '70vh' - }}> -
= 900 ? '1rem' : '0.875rem' - }}> +
+ + {/* Messages Container - Responsive padding and text sizing */} +
{messages.map((msg, i) => { - let contentElement; - - // Try to parse JSON - try { - const data = JSON.parse(msg.content); - if (Array.isArray(data) && data[0]?.title && data[0]?.description) { - // Render as question cards - contentElement = ( -
- {data.map((q, idx) => ( -
-

{q.title}

-

{q.description}

-

- Topic: {q.topic} | Level: {q.level} -

-
- ))} -
- ); - } else { - contentElement = {msg.content}; - } - } catch { - // Parse markdown-style formatting - const formattedContent = msg.content - .replace(/\*\*(.*?)\*\*/g, '$1') // **bold** - .replace(/\*(.*?)\*/g, '$1') // *italic* - .replace(/^(\d+\.)\s/gm, '$1 '); // numbered lists - - contentElement = ( - - ); - } - - return ( -
= 1536 ? '1.5rem' : - screenSize.width >= 1280 ? '1.25rem' : - screenSize.width >= 1024 ? '1rem' : - screenSize.width >= 768 ? '0.75rem' : '0.5rem', - fontSize: screenSize.width >= 1536 ? '1.5rem' : - screenSize.width >= 1280 ? '1.25rem' : - screenSize.width >= 1024 ? '1.125rem' : - screenSize.width >= 768 ? '1rem' : - screenSize.width >= 640 ? '0.875rem' : '0.75rem', - marginLeft: msg.role === "user" ? (screenSize.width >= 1024 ? '2rem' : '1rem') : '0', - marginRight: msg.role === "bot" ? (screenSize.width >= 1024 ? '2rem' : '1rem') : '0' - }} - > - {contentElement} -
- ); -})} + let contentElement; + + // Try to parse JSON + try { + const data = JSON.parse(msg.content); + if (Array.isArray(data) && data[0]?.title && data[0]?.description) { + // Render as question cards + contentElement = ( +
+ {data.map((q, idx) => ( +
+

{q.title}

+

{q.description}

+

+ Topic: {q.topic} | Level: {q.level} +

+
+ ))} +
+ ); + } else { + contentElement = {msg.content}; + } + } catch { + // Parse markdown-style formatting + const formattedContent = msg.content + .replace(/\*\*(.*?)\*\*/g, '$1') // **bold** + .replace(/\*(.*?)\*/g, '$1') // *italic* + .replace(/^(\d+\.)\s/gm, '$1 '); // numbered lists + + contentElement = ( + + ); + } + + return ( +
+ {contentElement} +
+ ); + })}
-
-
+ {/* Input Area - Responsive padding and sizing */} +
+
setInput(e.target.value)} placeholder="What have you covered so far?" - className="flex-grow border p-3 rounded-lg text-black focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all" - style={{ - fontSize: screenSize.width >= 900 ? '1rem' : '0.875rem' - }} + className="flex-grow border p-2 sm:p-3 rounded-lg text-black focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all + text-sm sm:text-base" disabled={loading} onKeyDown={(e) => { if (e.key === "Enter" && !loading) { @@ -229,26 +177,25 @@ export default function BotWidget() {
{loading && ( -

= 900 ? '1rem' : '0.875rem' - }}>🤖 Thinking...

+

+ 🤖 Thinking... +

)}
)}
); -} +} \ No newline at end of file From c5359169eef8f7bae0a759d03bdabb732160565d Mon Sep 17 00:00:00 2001 From: Devansh Trivedi Date: Sat, 27 Sep 2025 16:54:58 +0530 Subject: [PATCH 4/4] correct button sizes issue --- components/BotWidget.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/components/BotWidget.tsx b/components/BotWidget.tsx index 73f54a9..9def334 100644 --- a/components/BotWidget.tsx +++ b/components/BotWidget.tsx @@ -72,11 +72,11 @@ export default function BotWidget() { }; return ( -
+
{/* Bot Button - Responsive sizing */} @@ -93,8 +93,8 @@ export default function BotWidget() { {/* Chat Window - Responsive positioning and sizing */} {open && (
{/* Messages Container - Responsive padding and text sizing */}