From ef8f7d5ea4178a5f705e03d6ef64d69d1f1169b3 Mon Sep 17 00:00:00 2001 From: caadiq Date: Tue, 14 Apr 2026 18:58:42 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A3=BC=EC=B0=A8=EB=B3=84=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0=20=ED=83=AD=20-=20=EC=A3=BC=EC=B0=A8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80/=EC=82=AD=EC=A0=9C/=ED=8E=B8=EC=A7=91=20+=20=EC=98=81?= =?UTF-8?q?=EC=86=8D=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - WeeklyScheduler 컴포넌트: 주차 카드 리스트, 펼침 애니메이션, 추가/삭제 - 주차 추가 시 직전 주차 설정 복사 (done 상태는 초기화) - 마지막 한 주차는 삭제 불가 - 주차별 날짜 범위 표시 (1주차는 시작 날짜부터 다음 목요일 전일) - 검은 마법사 월별 슬롯 배정: 한 달에 한 주차만 선점 가능, 두 달 걸치는 주차는 빈 슬롯 활용 - 새 주차 추가 시 같은 달 중복이면 검은 마법사 자동 초기화 - 1주차에만 완료/미완료 버튼 노출 - Select 드롭다운을 portal로 이동해 부모 overflow:hidden 영향 제거 - state.schedulerWeeks로 슬롯별 영속화 + 마이그레이션 Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/src/components/Select.jsx | 138 +++++---- .../src/features/liberation/Liberation.jsx | 11 + .../liberation/components/WeeklyDefault.jsx | 10 +- .../liberation/components/WeeklyScheduler.jsx | 285 ++++++++++++++++++ 4 files changed, 387 insertions(+), 57 deletions(-) create mode 100644 frontend/src/features/liberation/components/WeeklyScheduler.jsx diff --git a/frontend/src/components/Select.jsx b/frontend/src/components/Select.jsx index 13013e3..bf4d3d1 100644 --- a/frontend/src/components/Select.jsx +++ b/frontend/src/components/Select.jsx @@ -1,38 +1,103 @@ -import { useEffect, useRef, useState } from 'react' +import { useEffect, useLayoutEffect, useRef, useState } from 'react' +import { createPortal } from 'react-dom' import { motion, AnimatePresence } from 'framer-motion' /** - * 커스텀 드롭다운 셀렉트 - *