diff --git a/.env.exemple b/.env.exemple
new file mode 100644
index 0000000..3452b5c
--- /dev/null
+++ b/.env.exemple
@@ -0,0 +1 @@
+VITE_API_URL=
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index f52343a..bd7187d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,5 @@ dist-ssr
*storybook.log
storybook-static
+
+.env
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 2e4d992..4b8ff7e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1109,12 +1109,6 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@kurkle/color": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz",
- "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==",
- "license": "MIT"
- },
"node_modules/@mdx-js/react": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz",
@@ -2156,14 +2150,14 @@
}
},
"node_modules/@vitest/browser": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.0.13.tgz",
- "integrity": "sha512-lruSgrYPVAJzKmX6EJYCg9nY+0A4VkeTLpTzf1jRD/XMjNbzD9yy7D499xmVKglwJczANYJXBvZSPGcRlon+0w==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.0.10.tgz",
+ "integrity": "sha512-irO+aGxYx/rAhjEBLsGPO4JQ8dA+A43enIST0j4xQ2kYHatHi9tUcxkRRGpClGuUVU42mi+iQsFFzd4xxpoV3g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/mocker": "4.0.13",
- "@vitest/utils": "4.0.13",
+ "@vitest/mocker": "4.0.10",
+ "@vitest/utils": "4.0.10",
"magic-string": "^0.30.21",
"pixelmatch": "7.1.0",
"pngjs": "^7.0.0",
@@ -2175,18 +2169,18 @@
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
- "vitest": "4.0.13"
+ "vitest": "4.0.10"
}
},
"node_modules/@vitest/browser-playwright": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.0.13.tgz",
- "integrity": "sha512-oaRY+/pvwS4/sN2rE2aZh9jdli8EkXm5AidmXEbWRu2wW0omG9PmgChWCX2jsD9qRLQxXTSLl5oKezANNF6LnQ==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.0.10.tgz",
+ "integrity": "sha512-pm7Hl7BNyluox+uGJPnT7vCRDSI+ibHcWQRtnCACAZWxD6/b2gN+8pO0qTDPHpxDSTPKDS5sT2dKTHLcr+lsng==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/browser": "4.0.13",
- "@vitest/mocker": "4.0.13",
+ "@vitest/browser": "4.0.10",
+ "@vitest/mocker": "4.0.10",
"tinyrainbow": "^3.0.3"
},
"funding": {
@@ -2194,7 +2188,7 @@
},
"peerDependencies": {
"playwright": "*",
- "vitest": "4.0.13"
+ "vitest": "4.0.10"
},
"peerDependenciesMeta": {
"playwright": {
@@ -2203,14 +2197,14 @@
}
},
"node_modules/@vitest/coverage-v8": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.13.tgz",
- "integrity": "sha512-w77N6bmtJ3CFnL/YHiYotwW/JI3oDlR3K38WEIqegRfdMSScaYxwYKB/0jSNpOTZzUjQkG8HHEz4sdWQMWpQ5g==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.10.tgz",
+ "integrity": "sha512-g+brmtoKa/sAeIohNJnnWhnHtU6GuqqVOSQ4SxDIPcgZWZyhJs5RmF5LpqXs8Kq64lANP+vnbn5JLzhLj/G56g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@bcoe/v8-coverage": "^1.0.2",
- "@vitest/utils": "4.0.13",
+ "@vitest/utils": "4.0.10",
"ast-v8-to-istanbul": "^0.3.8",
"debug": "^4.4.3",
"istanbul-lib-coverage": "^3.2.2",
@@ -2225,8 +2219,8 @@
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
- "@vitest/browser": "4.0.13",
- "vitest": "4.0.13"
+ "@vitest/browser": "4.0.10",
+ "vitest": "4.0.10"
},
"peerDependenciesMeta": {
"@vitest/browser": {
@@ -2303,13 +2297,13 @@
}
},
"node_modules/@vitest/mocker": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.13.tgz",
- "integrity": "sha512-eNCwzrI5djoauklwP1fuslHBjrbR8rqIVbvNlAnkq1OTa6XT+lX68mrtPirNM9TnR69XUPt4puBCx2Wexseylg==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.10.tgz",
+ "integrity": "sha512-e2OfdexYkjkg8Hh3L9NVEfbwGXq5IZbDovkf30qW2tOh7Rh9sVtmSr2ztEXOFbymNxS4qjzLXUQIvATvN4B+lg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "4.0.13",
+ "@vitest/spy": "4.0.10",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.21"
},
@@ -2340,9 +2334,9 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.13.tgz",
- "integrity": "sha512-ooqfze8URWbI2ozOeLDMh8YZxWDpGXoeY3VOgcDnsUxN0jPyPWSUvjPQWqDGCBks+opWlN1E4oP1UYl3C/2EQA==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.10.tgz",
+ "integrity": "sha512-99EQbpa/zuDnvVjthwz5bH9o8iPefoQZ63WV8+bsRJZNw3qQSvSltfut8yu1Jc9mqOYi7pEbsKxYTi/rjaq6PA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2353,13 +2347,13 @@
}
},
"node_modules/@vitest/runner": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.13.tgz",
- "integrity": "sha512-9IKlAru58wcVaWy7hz6qWPb2QzJTKt+IOVKjAx5vb5rzEFPTL6H4/R9BMvjZ2ppkxKgTrFONEJFtzvnyEpiT+A==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.10.tgz",
+ "integrity": "sha512-EXU2iSkKvNwtlL8L8doCpkyclw0mc/t4t9SeOnfOFPyqLmQwuceMPA4zJBa6jw0MKsZYbw7kAn+gl7HxrlB8UQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "4.0.13",
+ "@vitest/utils": "4.0.10",
"pathe": "^2.0.3"
},
"funding": {
@@ -2367,13 +2361,13 @@
}
},
"node_modules/@vitest/snapshot": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.13.tgz",
- "integrity": "sha512-hb7Usvyika1huG6G6l191qu1urNPsq1iFc2hmdzQY3F5/rTgqQnwwplyf8zoYHkpt7H6rw5UfIw6i/3qf9oSxQ==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.10.tgz",
+ "integrity": "sha512-2N4X2ZZl7kZw0qeGdQ41H0KND96L3qX1RgwuCfy6oUsF2ISGD/HpSbmms+CkIOsQmg2kulwfhJ4CI0asnZlvkg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "4.0.13",
+ "@vitest/pretty-format": "4.0.10",
"magic-string": "^0.30.21",
"pathe": "^2.0.3"
},
@@ -2382,9 +2376,9 @@
}
},
"node_modules/@vitest/spy": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.13.tgz",
- "integrity": "sha512-hSu+m4se0lDV5yVIcNWqjuncrmBgwaXa2utFLIrBkQCQkt+pSwyZTPFQAZiiF/63j8jYa8uAeUZ3RSfcdWaYWw==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.10.tgz",
+ "integrity": "sha512-AsY6sVS8OLb96GV5RoG8B6I35GAbNrC49AO+jNRF9YVGb/g9t+hzNm1H6kD0NDp8tt7VJLs6hb7YMkDXqu03iw==",
"dev": true,
"license": "MIT",
"funding": {
@@ -2392,13 +2386,13 @@
}
},
"node_modules/@vitest/utils": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.13.tgz",
- "integrity": "sha512-ydozWyQ4LZuu8rLp47xFUWis5VOKMdHjXCWhs1LuJsTNKww+pTHQNK4e0assIB9K80TxFyskENL6vCu3j34EYA==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.10.tgz",
+ "integrity": "sha512-kOuqWnEwZNtQxMKg3WmPK1vmhZu9WcoX69iwWjVz+jvKTsF1emzsv3eoPcDr6ykA3qP2bsCQE7CwqfNtAVzsmg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "4.0.13",
+ "@vitest/pretty-format": "4.0.10",
"tinyrainbow": "^3.0.3"
},
"funding": {
@@ -2690,18 +2684,6 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/chart.js": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz",
- "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==",
- "license": "MIT",
- "dependencies": {
- "@kurkle/color": "^0.3.0"
- },
- "engines": {
- "pnpm": ">=8"
- }
- },
"node_modules/check-error": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
@@ -4439,16 +4421,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/react-chartjs-2": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.3.1.tgz",
- "integrity": "sha512-h5IPXKg9EXpjoBzUfyWJvllMjG2mQ4EiuHQFhms/AjUm0XSZHhyRy2xVmLXHKrtcdrPO4mnGqRtYoD0vp95A0A==",
- "license": "MIT",
- "peerDependencies": {
- "chart.js": "^4.1.1",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- }
- },
"node_modules/react-docgen": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-8.0.2.tgz",
@@ -5227,9 +5199,9 @@
}
},
"node_modules/unplugin": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz",
- "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==",
+ "version": "2.3.10",
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.10.tgz",
+ "integrity": "sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5359,19 +5331,19 @@
}
},
"node_modules/vitest": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.13.tgz",
- "integrity": "sha512-QSD4I0fN6uZQfftryIXuqvqgBxTvJ3ZNkF6RWECd82YGAYAfhcppBLFXzXJHQAAhVFyYEuFTrq6h0hQqjB7jIQ==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.10.tgz",
+ "integrity": "sha512-2Fqty3MM9CDwOVet/jaQalYlbcjATZwPYGcqpiYQqgQ/dLC7GuHdISKgTYIVF/kaishKxLzleKWWfbSDklyIKg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/expect": "4.0.13",
- "@vitest/mocker": "4.0.13",
- "@vitest/pretty-format": "4.0.13",
- "@vitest/runner": "4.0.13",
- "@vitest/snapshot": "4.0.13",
- "@vitest/spy": "4.0.13",
- "@vitest/utils": "4.0.13",
+ "@vitest/expect": "4.0.10",
+ "@vitest/mocker": "4.0.10",
+ "@vitest/pretty-format": "4.0.10",
+ "@vitest/runner": "4.0.10",
+ "@vitest/snapshot": "4.0.10",
+ "@vitest/spy": "4.0.10",
+ "@vitest/utils": "4.0.10",
"debug": "^4.4.3",
"es-module-lexer": "^1.7.0",
"expect-type": "^1.2.2",
@@ -5397,13 +5369,12 @@
},
"peerDependencies": {
"@edge-runtime/vm": "*",
- "@opentelemetry/api": "^1.9.0",
"@types/debug": "^4.1.12",
"@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0",
- "@vitest/browser-playwright": "4.0.13",
- "@vitest/browser-preview": "4.0.13",
- "@vitest/browser-webdriverio": "4.0.13",
- "@vitest/ui": "4.0.13",
+ "@vitest/browser-playwright": "4.0.10",
+ "@vitest/browser-preview": "4.0.10",
+ "@vitest/browser-webdriverio": "4.0.10",
+ "@vitest/ui": "4.0.10",
"happy-dom": "*",
"jsdom": "*"
},
@@ -5411,9 +5382,6 @@
"@edge-runtime/vm": {
"optional": true
},
- "@opentelemetry/api": {
- "optional": true
- },
"@types/debug": {
"optional": true
},
@@ -5441,16 +5409,16 @@
}
},
"node_modules/vitest/node_modules/@vitest/expect": {
- "version": "4.0.13",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.13.tgz",
- "integrity": "sha512-zYtcnNIBm6yS7Gpr7nFTmq8ncowlMdOJkWLqYvhr/zweY6tFbDkDi8BPPOeHxEtK1rSI69H7Fd4+1sqvEGli6w==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.10.tgz",
+ "integrity": "sha512-3QkTX/lK39FBNwARCQRSQr0TP9+ywSdxSX+LgbJ2M1WmveXP72anTbnp2yl5fH+dU6SUmBzNMrDHs80G8G2DZg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@standard-schema/spec": "^1.0.0",
"@types/chai": "^5.2.2",
- "@vitest/spy": "4.0.13",
- "@vitest/utils": "4.0.13",
+ "@vitest/spy": "4.0.10",
+ "@vitest/utils": "4.0.10",
"chai": "^6.2.1",
"tinyrainbow": "^3.0.3"
},
diff --git a/src/assets/bell.svg b/public/bell.svg
similarity index 100%
rename from src/assets/bell.svg
rename to public/bell.svg
diff --git a/src/assets/close.svg b/public/close.svg
similarity index 100%
rename from src/assets/close.svg
rename to public/close.svg
diff --git a/public/empty.png b/public/empty.png
new file mode 100644
index 0000000..2ad3933
Binary files /dev/null and b/public/empty.png differ
diff --git a/src/assets/logo.png b/public/logo.png
similarity index 100%
rename from src/assets/logo.png
rename to public/logo.png
diff --git a/src/assets/person.svg b/public/person.svg
similarity index 100%
rename from src/assets/person.svg
rename to public/person.svg
diff --git a/src/assets/react.svg b/public/react.svg
similarity index 100%
rename from src/assets/react.svg
rename to public/react.svg
diff --git a/public/sortByAlpha.svg b/public/sortByAlpha.svg
new file mode 100644
index 0000000..28789ca
--- /dev/null
+++ b/public/sortByAlpha.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/sortByAntiAlpha.svg b/public/sortByAntiAlpha.svg
new file mode 100644
index 0000000..f74e5d8
--- /dev/null
+++ b/public/sortByAntiAlpha.svg
@@ -0,0 +1,5 @@
+
diff --git a/public/timerArrowDown.svg b/public/timerArrowDown.svg
new file mode 100644
index 0000000..df66463
--- /dev/null
+++ b/public/timerArrowDown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/timerArrowUp.svg b/public/timerArrowUp.svg
new file mode 100644
index 0000000..861ced2
--- /dev/null
+++ b/public/timerArrowUp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/components/Event/Event.jsx b/src/components/Event/Event.jsx
new file mode 100644
index 0000000..deaec58
--- /dev/null
+++ b/src/components/Event/Event.jsx
@@ -0,0 +1,79 @@
+import styles from "./Event.module.css";
+import {useState, useEffect} from "react";
+import {Link} from "react-router";
+import Button from "/src/components/ui/button/button.jsx"
+
+function Event({event}){
+ const [eventMenu, seteventMenu] = useState(false);
+ const [windowSize, setWindowSize] = useState({
+ width: null,
+ height: null,
+ });
+
+ useEffect(() => {
+ function handleResize() {
+ setWindowSize({
+ width: window.innerWidth,
+ height: window.innerHeight,
+ });
+ }
+ window.addEventListener("resize", handleResize);
+ handleResize();
+ return () => window.removeEventListener("resize", handleResize);
+ }, []);
+
+
+
+
+ return (
+
+
+
+
+ {event.image == null ? (
+

+ ) : (
+

+ )}
+
+
+
{event.name}
+
{event.description}
+
+
+ {event.tasks
+ .slice(0,5)
+ .map((task, index) => (
+ - - {task.name}
+ ))}
+ {event.tasks.length > 5 ? (
+ - ...
+ ) : null}
+
+
+
+
+ {windowSize.width > 768 ? (
+
+
+
+ ) : null}
+
+
+ {(windowSize.width <= 768 || eventMenu) ? (
+
+
+
+ ) : null}
+
+
+ )
+}
+
+export default Event;
\ No newline at end of file
diff --git a/src/components/Event/Event.module.css b/src/components/Event/Event.module.css
new file mode 100644
index 0000000..142d004
--- /dev/null
+++ b/src/components/Event/Event.module.css
@@ -0,0 +1,135 @@
+.eventContainer {
+ display: flex;
+ flex-direction: column;
+ margin: 1rem 0;
+ width: 80%;
+}
+
+.eventContainerTop {
+ display: flex;
+}
+
+.eventContainerBottom{
+ display: flex;
+ align-items: center;
+ justify-content: end;
+}
+
+.moreLink {
+ width: fit-content;
+}
+
+.eventImageDiv {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-right: 1rem;
+ width: auto;
+ height: 6rem;
+ flex-shrink: 0;
+}
+
+.eventImage {
+ max-width: 100%;
+ max-height: 100%;
+ object-fit: contain;
+ border-radius: 20px;
+}
+
+
+.eventContent {
+ display: flex;
+}
+
+.eventTitle {
+ font-size: 2rem;
+}
+
+
+
+
+
+
+.eventButtons {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: flex-end;
+ width: fit-content;
+ overflow: visible;
+}
+
+.eventButtons a {
+ white-space: nowrap;
+}
+
+
+
+
+.moreButton {
+ background: none;
+ border: none;
+ color: #019AFF;
+ font-size: 1.5rem;
+ transition: all 0.2s ease;
+ cursor: pointer;
+ border-radius: 50%;
+ width: 55px;
+ height: 55px;
+}
+
+.moreButton:hover {
+ font-size: 2rem;
+ background: rgba(191, 191, 191, 0.5);
+}
+
+.moreButton:focus {
+ outline: none;
+}
+.moreButton:focus-visible {
+ outline: 2px solid black;
+}
+
+.moreButtonClicked {
+ rotate: 90deg;
+}
+
+
+.eventMenuOpen {
+ display: flex;
+}
+
+.eventMenuClose {
+ display: none;
+}
+
+
+
+
+
+@media screen and (max-width: 768px) {
+ .eventImage {
+ width: 100%;
+ height: auto;
+ display: block;
+ object-fit: cover;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+
+ .eventContainer{
+ padding: 0;
+ }
+
+ .eventImageDiv {
+ margin: 0;
+ }
+
+ .eventContent {
+ flex-direction: column;
+ }
+
+ .eventInfos, .eventContainerBottom {
+ padding: 10px;
+ }
+}
\ No newline at end of file
diff --git a/src/components/Filter/Filter.jsx b/src/components/Filter/Filter.jsx
new file mode 100644
index 0000000..e0f39e2
--- /dev/null
+++ b/src/components/Filter/Filter.jsx
@@ -0,0 +1,61 @@
+import styles from "./Filter.module.css";
+
+function Filter({isFilterVisible, filters, setFilters}){
+ const setAlphabeticalOrder = (order) => {
+ setFilters(prev => ({
+ ...prev,
+ alphabetical : prev.alphabetical === order ? null : order
+ }));
+ };
+
+ const setYearOrder = (order) => {
+ setFilters(prev => ({
+ ...prev,
+ yearOrder: prev.yearOrder === order ? null : order
+ }));
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default Filter;
\ No newline at end of file
diff --git a/src/components/Filter/Filter.module.css b/src/components/Filter/Filter.module.css
new file mode 100644
index 0000000..b316702
--- /dev/null
+++ b/src/components/Filter/Filter.module.css
@@ -0,0 +1,85 @@
+.filterContainer {
+ display: flex;
+ flex-direction: column;
+ gap: 0.4rem;
+ overflow: hidden;
+ max-height: 0;
+ opacity: 0;
+ transition: max-height 0.5s ease, opacity 0.8s ease, transform 0.5s ease;
+}
+
+.filterOpen {
+ max-height: 200px;
+ opacity: 1;
+ transform: translateY(0);
+}
+
+.filterClose{
+ max-height: 200px;
+ opacity: 0;
+}
+
+
+.filterTag {
+ border: none;
+ background: none;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 50%;
+ width: 45px;
+ height: 45px;
+}
+
+
+.filterTag:focus {
+ outline: none;
+}
+.filterTag:focus-visible {
+ outline: 2px solid black;
+}
+
+.filterTag:hover {
+ cursor: pointer;
+ svg{
+ fill: #019AFF;
+ }
+}
+
+
+.filterTag svg {
+ transform: scale(1);
+ color: black;
+}
+
+
+.active {
+ border: 1px solid #019AFF;
+}
+
+.active svg {
+ fill: #019AFF;
+ transform: scale(1);
+}
+
+@media screen and (max-width: 768px){
+ .filterContainer {
+ flex-direction: row;
+ flex-wrap: wrap;
+ }
+
+ .filterOpen{
+ display: flex;
+ }
+ .filterClose{
+ display: none;
+ }
+
+ .filterMenu {
+ width: 100%;
+ }
+
+ abbr {
+ width: fit-content;
+ }
+}
\ No newline at end of file
diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx
index ea9ad80..2a8ea25 100644
--- a/src/components/Header/Header.jsx
+++ b/src/components/Header/Header.jsx
@@ -41,7 +41,7 @@ function Header() {