Skip to content

Commit 5906e17

Browse files
year filters
1 parent 22ad78a commit 5906e17

File tree

2 files changed

+338
-52
lines changed

2 files changed

+338
-52
lines changed

src/components/ModelListingsView.css

Lines changed: 134 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,26 @@
2323
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2));
2424
}
2525

26-
/* Trim filter positioned absolutely in top-right */
27-
.trim-filter {
26+
/* Filters container positioned absolutely in top-right */
27+
.filters-container {
2828
position: absolute;
2929
top: 1.5rem;
3030
right: 1.5rem;
31-
width: 200px;
31+
display: flex;
32+
gap: 0.75rem;
3233
z-index: 50;
3334
}
3435

36+
/* Year filter */
37+
.year-filter {
38+
width: 150px;
39+
}
40+
41+
/* Trim filter */
42+
.trim-filter {
43+
width: 200px;
44+
}
45+
3546
.trim-filter__button {
3647
width: 100%;
3748
padding: 0.65rem 1rem;
@@ -118,22 +129,119 @@
118129
opacity: 0.8;
119130
}
120131

132+
/* Year filter button */
133+
.year-filter__button {
134+
width: 100%;
135+
padding: 0.65rem 1rem;
136+
border-radius: 6px;
137+
border: 2px solid rgba(102, 126, 234, 0.3);
138+
background: rgba(102, 126, 234, 0.1);
139+
color: white;
140+
font-size: 0.9rem;
141+
font-weight: 600;
142+
cursor: pointer;
143+
transition: all 0.2s ease;
144+
display: flex;
145+
justify-content: space-between;
146+
align-items: center;
147+
gap: 0.5rem;
148+
}
149+
150+
.year-filter__button:hover,
151+
.year-filter__button:focus-visible {
152+
background: rgba(102, 126, 234, 0.2);
153+
border-color: rgba(102, 126, 234, 0.5);
154+
outline: none;
155+
}
156+
157+
.year-filter__arrow {
158+
font-size: 0.7rem;
159+
transition: transform 0.2s ease;
160+
color: rgba(255, 255, 255, 0.7);
161+
}
162+
163+
.year-filter__arrow.open {
164+
transform: rotate(180deg);
165+
}
166+
167+
.year-filter__menu {
168+
position: absolute;
169+
top: calc(100% + 0.5rem);
170+
left: 0;
171+
right: 0;
172+
background: var(--bg-primary);
173+
border: 2px solid rgba(102, 126, 234, 0.3);
174+
border-radius: 6px;
175+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
176+
max-height: 300px;
177+
overflow-y: auto;
178+
z-index: 100;
179+
padding: 0.5rem 0;
180+
}
181+
182+
.year-filter__menu-item {
183+
display: flex;
184+
align-items: center;
185+
gap: 0.75rem;
186+
padding: 0.6rem 1rem;
187+
cursor: pointer;
188+
transition: background 0.15s ease;
189+
font-size: 0.9rem;
190+
color: white;
191+
}
192+
193+
.year-filter__menu-item:hover {
194+
background: rgba(102, 126, 234, 0.15);
195+
}
196+
197+
.year-filter__menu-item input[type="checkbox"] {
198+
width: 16px;
199+
height: 16px;
200+
cursor: pointer;
201+
accent-color: var(--primary-color);
202+
}
203+
204+
.year-filter__clear {
205+
background: none;
206+
border: none;
207+
color: var(--primary-color);
208+
font-weight: 600;
209+
font-size: 0.85rem;
210+
cursor: pointer;
211+
padding: 0;
212+
transition: opacity 0.15s ease;
213+
}
214+
215+
.year-filter__clear:hover {
216+
opacity: 0.8;
217+
}
218+
121219
@media (max-width: 900px) {
122220
.model-listings-view {
123221
padding: 1.35rem;
124222
}
125223

126-
.trim-filter {
224+
.filters-container {
127225
top: 1.35rem;
128226
right: 1.35rem;
227+
gap: 0.65rem;
228+
}
229+
230+
.year-filter {
231+
width: 140px;
232+
}
233+
234+
.trim-filter {
129235
width: 180px;
130236
}
131237

238+
.year-filter__button,
132239
.trim-filter__button {
133240
padding: 0.6rem 0.9rem;
134241
font-size: 0.875rem;
135242
}
136243

244+
.year-filter__menu-item,
137245
.trim-filter__menu-item {
138246
padding: 0.55rem 0.9rem;
139247
font-size: 0.875rem;
@@ -143,24 +251,33 @@
143251
@media (max-width: 768px) {
144252
.model-listings-view {
145253
padding: 1.25rem;
146-
padding-top: 4.5rem; /* Make room for filter at top */
254+
padding-top: 7.5rem; /* Make room for filters at top */
147255
margin-top: 1.5rem;
148256
}
149257

150-
/* Mobile: position at top left */
151-
.trim-filter {
258+
/* Mobile: stack filters vertically at top left */
259+
.filters-container {
152260
top: 1.25rem;
153261
right: auto;
154262
left: 1.25rem;
263+
flex-direction: column;
264+
gap: 0.75rem;
155265
width: calc(100% - 2.5rem);
156266
max-width: 300px;
157267
}
158268

269+
.year-filter,
270+
.trim-filter {
271+
width: 100%;
272+
}
273+
274+
.year-filter__button,
159275
.trim-filter__button {
160276
padding: 0.65rem 1rem;
161277
font-size: 0.9rem;
162278
}
163279

280+
.year-filter__menu-item,
164281
.trim-filter__menu-item {
165282
padding: 0.6rem 1rem;
166283
font-size: 0.9rem;
@@ -170,23 +287,31 @@
170287
@media (max-width: 540px) {
171288
.model-listings-view {
172289
padding: 1rem;
173-
padding-top: 4.25rem;
290+
padding-top: 7.25rem;
174291
margin-top: 1.25rem;
175292
}
176293

177-
.trim-filter {
294+
.filters-container {
178295
top: 1rem;
179296
left: 1rem;
180297
right: 1rem;
181298
width: calc(100% - 2rem);
182299
max-width: none;
300+
gap: 0.65rem;
301+
}
302+
303+
.year-filter,
304+
.trim-filter {
305+
width: 100%;
183306
}
184307

308+
.year-filter__button,
185309
.trim-filter__button {
186310
padding: 0.6rem 0.85rem;
187311
font-size: 0.875rem;
188312
}
189313

314+
.year-filter__menu-item,
190315
.trim-filter__menu-item {
191316
padding: 0.55rem 0.85rem;
192317
font-size: 0.875rem;

0 commit comments

Comments
 (0)