diff --git a/package-lock.json b/package-lock.json
index 731efe1..f5d4221 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,6 +12,7 @@
"@tanstack/react-query": "^5.90.12",
"@tanstack/react-query-devtools": "^5.91.1",
"axios": "^1.13.2",
+ "clsx": "^2.1.1",
"framer-motion": "^12.23.26",
"react": "^19.2.0",
"react-dom": "^19.2.0",
diff --git a/package.json b/package.json
index 8bfc223..819030e 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,7 @@
"@tanstack/react-query": "^5.90.12",
"@tanstack/react-query-devtools": "^5.91.1",
"axios": "^1.13.2",
+ "clsx": "^2.1.1",
"framer-motion": "^12.23.26",
"react": "^19.2.0",
"react-dom": "^19.2.0",
diff --git a/src/mocks/filterData.ts b/src/mocks/filterData.ts
new file mode 100644
index 0000000..2e8a112
--- /dev/null
+++ b/src/mocks/filterData.ts
@@ -0,0 +1,22 @@
+export const filterData = [
+ {
+ id: 1,
+ label: 'ALL',
+ value: 'ALL',
+ },
+ {
+ id: 2,
+ label: 'Subject1',
+ value: 'Subject1',
+ },
+ {
+ id: 3,
+ label: 'Subject2',
+ value: 'Subject2',
+ },
+ {
+ id: 4,
+ label: 'Subject3',
+ value: 'Subject3',
+ },
+];
diff --git a/src/pages/home/Home.tsx b/src/pages/home/Home.tsx
index 32f943b..6ecf0a4 100644
--- a/src/pages/home/Home.tsx
+++ b/src/pages/home/Home.tsx
@@ -1,4 +1,5 @@
import Navbar from '../../components/Navbar/Navbar';
+import ListFilter from './components/Filter/ListFilter';
import Alert from './components/Alert/Alert';
import Banner from './components/Banner/Banner';
import Chart from './components/Chart/Chart';
@@ -8,6 +9,7 @@ const Home = () => {
<>
+
>
diff --git a/src/pages/home/components/Filter/ItemFilter.tsx b/src/pages/home/components/Filter/ItemFilter.tsx
new file mode 100644
index 0000000..bb518f1
--- /dev/null
+++ b/src/pages/home/components/Filter/ItemFilter.tsx
@@ -0,0 +1,26 @@
+import clsx from 'clsx';
+import type { FilterItem } from '../../../../types/filter.type';
+import { useFilterStore } from '../../../../stores/filterStore';
+
+interface ItemFilterProps {
+ item: FilterItem;
+}
+
+const ItemFilter = ({ item }: ItemFilterProps) => {
+ const { selectedFilter, setFilter } = useFilterStore();
+ const active = selectedFilter === item.value;
+
+ return (
+
+ );
+};
+
+export default ItemFilter;
diff --git a/src/pages/home/components/Filter/ListFilter.tsx b/src/pages/home/components/Filter/ListFilter.tsx
new file mode 100644
index 0000000..afa13ee
--- /dev/null
+++ b/src/pages/home/components/Filter/ListFilter.tsx
@@ -0,0 +1,14 @@
+import { filterData } from '../../../../mocks/filterData';
+import ItemFilter from './ItemFilter';
+
+const ListFilter = () => {
+ return (
+
+ {filterData.map((item) => (
+
+ ))}
+
+ );
+};
+
+export default ListFilter;
diff --git a/src/stores/filterStore.ts b/src/stores/filterStore.ts
new file mode 100644
index 0000000..0b71a9e
--- /dev/null
+++ b/src/stores/filterStore.ts
@@ -0,0 +1,13 @@
+import { create } from 'zustand';
+
+export type FilterValue = string;
+
+interface FilterState {
+ selectedFilter: FilterValue;
+ setFilter: (filter: FilterValue) => void;
+}
+
+export const useFilterStore = create((set) => ({
+ selectedFilter: 'ALL',
+ setFilter: (filter) => set({ selectedFilter: filter }),
+}));
diff --git a/src/types/filter.type.ts b/src/types/filter.type.ts
new file mode 100644
index 0000000..0baa9ba
--- /dev/null
+++ b/src/types/filter.type.ts
@@ -0,0 +1,5 @@
+export interface FilterItem {
+ id: number;
+ label: string;
+ value: string;
+}