From 1203a447fc7ed6ccc990fcfee334d8c657928718 Mon Sep 17 00:00:00 2001 From: Radian06 Date: Wed, 4 Feb 2026 16:49:55 +0900 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20=EC=A2=8C=EC=B8=A1=20=EC=82=AC?= =?UTF-8?q?=EC=9D=B4=EB=93=9C=EB=B0=94=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mkdir | 0 src/App.tsx | 61 +++++++++++++++++++++++--- src/components/Sidebar.tsx | 88 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 144 insertions(+), 5 deletions(-) create mode 100644 mkdir create mode 100644 src/components/Sidebar.tsx diff --git a/mkdir b/mkdir new file mode 100644 index 0000000..e69de29 diff --git a/src/App.tsx b/src/App.tsx index f5d6b50..cfa04ee 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,11 +1,62 @@ -import { Routes, Route } from 'react-router-dom'; -import LoginPage from './pages/LoginPage'; +import { useState } from 'react'; +import Sidebar from './components/sidebar'; function App() { + const dummyStudents = ["김제현", "이슬아", "박지민", "최유진"]; + const [selectedStudent, setSelectedStudent] = useState(dummyStudents[0]); + return ( - - } /> - +
+ {/* 좌측 사이드바: Sidebar.tsx 내부에 'sticky top-0'과 'h-screen'이 있어야 고정됩니다. */} + + + {/* 우측 메인 콘텐츠 영역: 세로로 아주 길게 설정 */} +
+
+ {/* 상단 섹션 */} +
+

+ {selectedStudent} 학생 학습 관리 대시보드 +

+

스크롤을 내려서 사이드바 고정을 확인해보세요. ↓

+
+ + {/* 테스트용 긴 콘텐츠 박스들 */} +
+
+

오늘 할 일 (상단)

+
+ 콘텐츠 1 +
+
+ +
+

주간 학습 리포트 (중간)

+
+ 콘텐츠 2 +
+
+ +
+

월간 계획표 (하단)

+
+ 콘텐츠 3 +
+
+
+ +
+ 끝까지 내려왔습니다! 여전히 사이드바가 왼쪽에 보이나요? +
+
+
+
); } diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx new file mode 100644 index 0000000..9959157 --- /dev/null +++ b/src/components/Sidebar.tsx @@ -0,0 +1,88 @@ +import React from 'react'; + +interface SidebarProps { + role: 'mentor' | 'mentee'; + userName: string; + students?: string[]; + selectedStudent?: string | null; + onStudentSelect?: (name: string) => void; +} + +const Sidebar: React.FC = ({ + role, + userName, + students = [], + selectedStudent, + onStudentSelect, +}) => { + return ( + + ); +}; + +export default Sidebar; \ No newline at end of file From 547d697a0779f99d4a9d2da0240ff6d92f809ae0 Mon Sep 17 00:00:00 2001 From: Radian06 Date: Wed, 4 Feb 2026 20:28:19 +0900 Subject: [PATCH 2/6] =?UTF-8?q?style:=20px=20->=20=EB=B7=B0=ED=8F=AC?= =?UTF-8?q?=ED=8A=B8=20=EB=8B=A8=EC=9C=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 43 ++++++++++++++++++++++++++++++++++++++ package.json | 2 ++ src/components/Sidebar.tsx | 32 ++++++++++++++-------------- 3 files changed, 61 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 86db858..39d9e88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,8 @@ "name": "seol-study", "version": "0.0.0", "dependencies": { + "@fullcalendar/daygrid": "^6.1.20", + "@fullcalendar/react": "^6.1.20", "@tanstack/react-query": "^5.90.20", "react": "^19.2.0", "react-dom": "^19.2.0", @@ -926,6 +928,36 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@fullcalendar/core": { + "version": "6.1.20", + "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.20.tgz", + "integrity": "sha512-1cukXLlePFiJ8YKXn/4tMKsy0etxYLCkXk8nUCFi11nRONF2Ba2CD5b21/ovtOO2tL6afTJfwmc1ed3HG7eB1g==", + "license": "MIT", + "peer": true, + "dependencies": { + "preact": "~10.12.1" + } + }, + "node_modules/@fullcalendar/daygrid": { + "version": "6.1.20", + "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.20.tgz", + "integrity": "sha512-AO9vqhkLP77EesmJzuU+IGXgxNulsA8mgQHynclJ8U70vSwAVnbcLG9qftiTAFSlZjiY/NvhE7sflve6cJelyQ==", + "license": "MIT", + "peerDependencies": { + "@fullcalendar/core": "~6.1.20" + } + }, + "node_modules/@fullcalendar/react": { + "version": "6.1.20", + "resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.20.tgz", + "integrity": "sha512-1w0pZtceaUdfAnxMSCGHCQalhi+mR1jOe76sXzyAXpcPz/Lf0zHSdcGK/U2XpZlnQgQtBZW+d+QBnnzVQKCxAA==", + "license": "MIT", + "peerDependencies": { + "@fullcalendar/core": "~6.1.20", + "react": "^16.7.0 || ^17 || ^18 || ^19", + "react-dom": "^16.7.0 || ^17 || ^18 || ^19" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -3483,6 +3515,17 @@ "dev": true, "license": "MIT" }, + "node_modules/preact": { + "version": "10.12.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.12.1.tgz", + "integrity": "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", diff --git a/package.json b/package.json index c779d81..e292850 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ "preview": "vite preview" }, "dependencies": { + "@fullcalendar/daygrid": "^6.1.20", + "@fullcalendar/react": "^6.1.20", "@tanstack/react-query": "^5.90.20", "react": "^19.2.0", "react-dom": "^19.2.0", diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 9959157..4d8ed81 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -16,19 +16,19 @@ const Sidebar: React.FC = ({ onStudentSelect, }) => { return ( - From 64e242779d23e3e77d539c1996efc40996b865a9 Mon Sep 17 00:00:00 2001 From: Radian06 Date: Thu, 5 Feb 2026 17:06:09 +0900 Subject: [PATCH 5/6] =?UTF-8?q?style:=20=EC=82=AC=EC=9D=B4=EB=93=9C?= =?UTF-8?q?=EB=B0=94=20=EA=B0=84=EA=B2=A9=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Sidebar.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index c3caf71..3751a52 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -19,7 +19,7 @@ const Sidebar: React.FC = ({ onStudentSelect, }) => { return ( -