Al1Abdullah commited on
Commit
e8b2ac4
·
1 Parent(s): ec14506

Implement responsive design for mobile screens

Browse files
Files changed (2) hide show
  1. frontend/main.js +36 -3
  2. frontend/style.css +87 -0
frontend/main.js CHANGED
@@ -33,14 +33,47 @@ document.addEventListener('DOMContentLoaded', () => {
33
  });
34
  });
35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  sidebarToggle.addEventListener('click', () => {
37
- sidebar.classList.toggle('collapsed');
38
- mainContent.classList.toggle('collapsed');
39
- if (!sidebar.classList.contains('collapsed')) {
 
 
 
 
 
40
  animateNavText();
41
  }
42
  });
43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  function formatAIResponse(text) {
45
  text = text.replace(/\*\*(.*?)\*\*/g, '<strong>$1<\/strong>');
46
  text = text.replace(/^\d+\.\s+(.*)/gm, '<li>$1<\/li>');
 
33
  });
34
  });
35
 
36
+ // Function to check if it's a mobile view
37
+ function isMobileView() {
38
+ return window.innerWidth <= 768;
39
+ }
40
+
41
+ // Initial setup for sidebar based on screen size
42
+ if (isMobileView()) {
43
+ sidebar.classList.add('collapsed'); // Start collapsed on mobile
44
+ mainContent.classList.remove('collapsed'); // Main content always full width on mobile
45
+ } else {
46
+ // Desktop default state (can be adjusted if you want it collapsed by default)
47
+ sidebar.classList.remove('collapsed');
48
+ mainContent.classList.remove('collapsed');
49
+ }
50
+
51
  sidebarToggle.addEventListener('click', () => {
52
+ if (isMobileView()) {
53
+ sidebar.classList.toggle('active'); // Use 'active' for mobile slide-in
54
+ // mainContent does not toggle 'collapsed' on mobile
55
+ } else {
56
+ sidebar.classList.toggle('collapsed');
57
+ mainContent.classList.toggle('collapsed');
58
+ }
59
+ if (!sidebar.classList.contains('collapsed') && !isMobileView()) {
60
  animateNavText();
61
  }
62
  });
63
 
64
+ // Adjust sidebar on window resize
65
+ window.addEventListener('resize', () => {
66
+ if (isMobileView()) {
67
+ sidebar.classList.add('collapsed');
68
+ sidebar.classList.remove('active');
69
+ mainContent.classList.remove('collapsed');
70
+ } else {
71
+ sidebar.classList.remove('collapsed');
72
+ sidebar.classList.remove('active');
73
+ mainContent.classList.remove('collapsed');
74
+ }
75
+ });
76
+
77
  function formatAIResponse(text) {
78
  text = text.replace(/\*\*(.*?)\*\*/g, '<strong>$1<\/strong>');
79
  text = text.replace(/^\d+\.\s+(.*)/gm, '<li>$1<\/li>');
frontend/style.css CHANGED
@@ -310,4 +310,91 @@ button:hover {
310
 
311
  .sidebar.collapsed .nav-text {
312
  animation: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
313
  }
 
310
 
311
  .sidebar.collapsed .nav-text {
312
  animation: none;
313
+ }
314
+
315
+ /* Responsive adjustments for smaller screens */
316
+ @media (max-width: 768px) {
317
+ .app-layout {
318
+ flex-direction: column;
319
+ }
320
+
321
+ .sidebar {
322
+ width: 100%;
323
+ height: auto;
324
+ position: relative; /* Change from fixed to relative */
325
+ padding: 1rem;
326
+ box-shadow: none;
327
+ transform: translateX(-100%); /* Hide sidebar by default */
328
+ transition: transform 0.3s ease;
329
+ }
330
+
331
+ .sidebar.active {
332
+ transform: translateX(0);
333
+ }
334
+
335
+ .sidebar.collapsed {
336
+ width: 100%;
337
+ transform: translateX(-100%);
338
+ }
339
+
340
+ .sidebar-header {
341
+ margin-bottom: 1rem;
342
+ }
343
+
344
+ .sidebar-header h2 {
345
+ opacity: 1; /* Always show title on mobile */
346
+ }
347
+
348
+ #sidebar-toggle {
349
+ display: block; /* Ensure toggle is visible */
350
+ transform: rotate(0deg) !important; /* Reset rotation */
351
+ }
352
+
353
+ .sidebar.active #sidebar-toggle {
354
+ transform: rotate(180deg) !important; /* Rotate when active */
355
+ }
356
+
357
+ .sidebar-nav .nav-link .nav-text {
358
+ opacity: 1; /* Always show text on mobile */
359
+ width: auto;
360
+ overflow: visible;
361
+ }
362
+
363
+ .sidebar-nav .nav-link {
364
+ justify-content: flex-start;
365
+ }
366
+
367
+ .main-content {
368
+ margin-left: 0; /* Remove left margin */
369
+ width: 100%; /* Take full width */
370
+ padding: 1rem; /* Adjust padding */
371
+ overflow-y: auto; /* Ensure scrolling */
372
+ }
373
+
374
+ .main-content.collapsed {
375
+ margin-left: 0;
376
+ width: 100%;
377
+ }
378
+
379
+ .container {
380
+ padding: 1rem; /* Adjust container padding */
381
+ }
382
+
383
+ .card {
384
+ padding: 1.5rem; /* Adjust card padding */
385
+ }
386
+
387
+ /* Adjust font sizes for better mobile readability */
388
+ body {
389
+ font-size: 0.9rem;
390
+ }
391
+
392
+ .card h2 {
393
+ font-size: 1.5rem;
394
+ }
395
+
396
+ select, input[type="text"], button {
397
+ padding: 0.8rem;
398
+ font-size: 0.9rem;
399
+ }
400
  }