Skip to content
This repository was archived by the owner on Jan 28, 2026. It is now read-only.

Commit 2276eb0

Browse files
authored
Merge pull request #153 from DigitalProductInnovationAndDevelopment/unified_search_ui
Unified search UI & dark mode
2 parents 13700cb + 405b43b commit 2276eb0

52 files changed

Lines changed: 8976 additions & 3002 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

frontend/package-lock.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"@testing-library/user-event": "^13.5.0",
99
"cors": "^2.8.5",
1010
"d3-geo": "^3.1.1",
11+
"ogl": "^1.0.11",
1112
"react": "^18.2.0",
1213
"react-datepicker": "^8.4.0",
1314
"react-dom": "^18.2.0",

frontend/src/App.jsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import React, { useState } from 'react';
22
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
3-
import { LandingPageLight } from './pages/light_mode/landing_light';
4-
import SearchPageLight from './pages/light_mode/search_light';
5-
import { AboutPage } from './pages/light_mode/about_light';
6-
import { PositionDetailLight } from './pages/light_mode/position_detail_light';
7-
import GraphViewLight from './pages/light_mode/graph_view_light';
8-
import WorldMapPapersPage from './pages/light_mode/WorldMapPapersPage';
3+
import { LandingPageLight } from './pages/home';
4+
import SearchPageLight from './pages/search';
5+
import { AboutPage } from './pages/about';
6+
import { PositionDetailLight } from './pages/trend_graphs';
7+
import GraphViewLight from './pages/collaboration_graph';
8+
import WorldMapPapersPage from './pages/world_map';
99

1010
function App() {
11-
const [isDarkMode, setIsDarkMode] = useState(false);
11+
const [isDarkMode, setIsDarkMode] = useState(true);
1212

1313
const toggleDarkMode = () => {
1414
setIsDarkMode(!isDarkMode);
@@ -21,11 +21,11 @@ function App() {
2121
<main>
2222
<Routes>
2323
<Route path="/" element={<LandingPageLight darkMode={isDarkMode} toggleDarkMode={toggleDarkMode} />} />
24-
<Route path="/search" element={<SearchPageLight darkMode={isDarkMode} toggleDarkMode={toggleDarkMode} />} />
24+
<Route path="/search" element={<SearchPageLight darkMode={isDarkMode} />} />
2525
<Route path="/graph-view" element={<GraphViewLight darkMode={isDarkMode} toggleDarkMode={toggleDarkMode} />} />
2626
<Route path="/about" element={<AboutPage darkMode={isDarkMode} toggleDarkMode={toggleDarkMode} />} />
27-
<Route path="/trends" element={<PositionDetailLight darkMode={isDarkMode} toggleDarkMode={toggleDarkMode} />} />
28-
<Route path="/world-map" element={<WorldMapPapersPage darkMode={isDarkMode} toggleDarkMode={toggleDarkMode} />} />
27+
<Route path="/trends" element={<PositionDetailLight darkMode={true} />} />
28+
<Route path="/world-map" element={<WorldMapPapersPage />} />
2929
</Routes>
3030
</main>
3131
</div>
Lines changed: 8 additions & 0 deletions
Loading

frontend/src/assets/styles/global.css

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,20 @@ body.dark {
2323
color: var(--color-text-dark);
2424
}
2525

26+
/* Dark mode input placeholder styles */
27+
.dark input::placeholder {
28+
color: #888;
29+
opacity: 1;
30+
}
31+
32+
.dark input:-ms-input-placeholder {
33+
color: #888;
34+
}
35+
36+
.dark input::-ms-input-placeholder {
37+
color: #888;
38+
}
39+
2640
/* App layout */
2741
.app {
2842
width: 100%;

frontend/src/assets/styles/institutionDropdown.module.css

Lines changed: 23 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,30 @@
33
width: 100%;
44
margin-bottom: 0;
55
}
6+
67
.label {
78
font-weight: 600;
89
margin-bottom: 0.25rem;
910
display: block;
1011
}
12+
1113
.inputWrapper {
1214
position: relative;
1315
display: flex;
1416
align-items: center;
1517
}
18+
1619
.input {
1720
width: 100%;
1821
padding: 0.75rem;
1922
border: 1px solid #e5e7eb;
2023
border-radius: 6px;
2124
outline: none;
22-
font-size: 0.875rem;
23-
background-color: #fff;
24-
transition: border-color 0.2s ease;
25-
height: 48px;
26-
box-sizing: border-box;
27-
line-height: 1.5;
25+
font-size: 1rem;
26+
background: #222;
27+
color: #fff;
2828
}
2929

30-
.input:focus {
31-
border-color: #4F6AF6;
32-
box-shadow: 0 0 0 2px rgba(79, 106, 246, 0.1);
33-
}
3430
.toggleBtn {
3531
position: absolute;
3632
right: 32px;
@@ -49,91 +45,45 @@
4945
align-items: center;
5046
justify-content: center;
5147
}
48+
5249
.dropdownList {
5350
position: absolute;
5451
top: 100%;
5552
left: 0;
5653
right: 0;
5754
max-height: 220px;
5855
overflow-y: auto;
59-
background: #fff;
60-
border: 1px solid #e5e7eb;
61-
border-radius: 6px;
56+
background: #222;
57+
color: #fff;
58+
border: 1px solid #ccc;
59+
border-top: none;
6260
z-index: 10;
63-
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
64-
margin-top: 4px;
61+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
6562
}
63+
6664
.dropdownItem {
6765
padding: 0.75rem 1rem;
6866
cursor: pointer;
6967
transition: background 0.15s;
70-
border-bottom: 1px solid #f3f4f6;
71-
}
72-
73-
.dropdownItem:last-child {
74-
border-bottom: none;
68+
background: #222;
69+
color: #fff;
7570
}
7671

7772
.dropdownItem:hover {
78-
background: #f9fafb;
73+
background: #333;
74+
color: #fff;
7975
}
80-
.loading, .noResults {
76+
77+
.loading,
78+
.noResults {
8179
padding: 0.75rem 1rem;
8280
color: #6b7280;
8381
text-align: center;
8482
font-size: 0.875rem;
8583
}
84+
8685
.selectedValue {
8786
margin-top: 0.5rem;
88-
font-size: 0.875rem;
89-
color: #4F6AF6;
90-
font-weight: 500;
91-
}
92-
93-
/* Dark mode styles */
94-
:global(.dark) .label {
95-
color: #ccc;
96-
}
97-
98-
:global(.dark) .input {
99-
background-color: #1a1a1a;
100-
border: 1px solid #404040;
101-
color: #fff;
102-
}
103-
104-
:global(.dark) .input:focus {
105-
border-color: #4F6AF6;
106-
box-shadow: 0 0 0 2px rgba(79, 106, 246, 0.2);
107-
}
108-
109-
:global(.dark) .toggleBtn {
110-
color: #ccc;
111-
}
112-
113-
:global(.dark) .toggleBtn:hover {
114-
color: #4F6AF6;
115-
}
116-
117-
:global(.dark) .dropdownList {
118-
background: #2a2a2a;
119-
border: 1px solid #404040;
120-
box-shadow: 0 4px 12px rgba(0,0,0,0.3);
121-
}
122-
123-
:global(.dark) .dropdownItem {
124-
border-bottom: 1px solid #404040;
125-
color: #fff;
126-
}
127-
128-
:global(.dark) .dropdownItem:hover {
129-
background: #404040;
130-
}
131-
132-
:global(.dark) .loading,
133-
:global(.dark) .noResults {
134-
color: #ccc;
135-
}
136-
137-
:global(.dark) .selectedValue {
138-
color: #4F6AF6;
87+
font-size: 0.95rem;
88+
color: #333;
13989
}

0 commit comments

Comments
 (0)