## 2026-06-03 — "내 일정" 2차 보강: 공용 캘린더 그리드 + 표 뷰 색상/정렬 + 메모 이미지·라이트박스 + 플래너 이동 + Jira 기준 + 기간 삭제 + 높이 조절·호버 확대

### 배경

전역 "내 일정"(My Schedule)을 출시([2026-06-03-2](./2026-06-03-2.md))한 뒤, 실제로 메모를 쌓아 쓰면서 드러난 부족한 점들을 메웠다 — 플래너와 캘린더 코드가 갈라져 중복되고, 표 뷰가 밋밋하고, 메모에 이미지를 못 넣고, 개인 항목을 프로젝트로 승격할 길이 없고, Jira 가져오기 기준이 고정이고, 쌓인 메모를 한 번에 정리할 수단이 없고, 월뷰가 짤리는데 셀이 고정 높이였다.

### 주요 변경

#### 1. 공용 `CalendarGrid` 추출 + 플래너 캘린더 뷰 (`5d7d10b`)

- 날짜 헬퍼·범위/이동/제목 로직·요일 라벨을 `calendar/calendarShared.ts`로 분리.
- 월/주/일을 그리는 프레젠테이션 전용 `CalendarGrid`(제네릭 `CalChip` 소비) 신설. `PersonalAgenda`를 공용 모듈 기반으로 리팩터.
- `PlannerCalendar` 추가 — 플래너에도 월/주/일/표 뷰 토글, 리사이즈 패널, 백로그, 포털 ⋮ 메뉴. `PlannerForm`은 `initialDueDate` 빠른 추가 지원.

#### 2. 캘린더 칩 클릭 + 표 뷰 색상/정렬 (`9115e54`, `e631d77`, `76eebb3`, `21a34fe`, `ec0223a`, `f9f0547`, `b584006`, `0868bae`)

- 그리드 셀 안의 칩을 클릭하면 사이드 패널과 동일하게 열림 — 메모=편집 폼, 스케줄/플래너=프로젝트 딥링크, Jira=새 탭.
- 표 뷰의 **종류** 칩에 종류별 색상 배경(메모=인디고, 스케줄=그린, 플래너=앰버, Jira=블루), **상태** 컬럼도 색상 배지. 누락됐던 `agenda.kind.jira` i18n 키 추가.
- 컬럼 헤더(날짜/종류/상태) 클릭 정렬(asc/desc 토글), `KIND_ORDER`로 종류 정렬 고정, 날짜로 안정 tiebreak. 빈 상태·날짜 없는 행은 항상 하단.

#### 3. 메모 이미지 삽입 + 공용 라이트박스 (`6b912db`, `235b8cd`)

- 플래너의 이미지 인프라(base64 업로드/삭제/서빙, `images` 컬럼)를 `personal_items`에 미러링. 편집 폼에서 붙여넣기/드래그앤드롭/파일 선택으로 추가, 썸네일 미리보기·삭제, 항목 삭제 시 디스크 정리.
- 재사용 `ImageLightbox`(portal + 전체화면 오버레이, 배경/Esc 닫기) 추가. 내 일정·플래너 썸네일 클릭 시 원본 크기 확대.

#### 4. 개인 항목·Jira 이슈를 프로젝트 플래너로 이동/추가 (`f0caf67`)

- `MoveToPlannerButton`: 프로젝트 선택 포털 드롭다운(hover-reveal, 뷰포트 클램핑).
- **서버**: `POST /personal-items/:id/move-to-planner`(이미지·태그·마감일·완료상태 이관 후 원본 삭제), `POST /agenda/jira/import-to-planner`(Jira 이슈는 그대로 두고 플래너에 추가).

#### 5. Jira 가져오기 기준 사용자 설정 (`1de34f1`)

- 연결 설정에 가져오기 기준 추가 — '나에게 할당만'/'완료 포함' 토글, 프로젝트 키 제한, 고급 JQL. `agenda.jira` 설정에 저장되어 `/agenda/jira`의 JQL 빌드와 import 양쪽에 동일 적용. 기본값은 기존 동작('나에게 할당 + 미완료') 유지.

#### 6. 기간 일괄 메모 삭제 (`fc3542b`)

- **서버**: `POST /api/personal-items/bulk-delete` — `due_at` 날짜 범위 `[from, to]` 매칭, `done_only`/`include_backlog` 필터, 이미지까지 정리.
- **클라이언트**: 헤더 휴지통 버튼 → 모달(기간 선택·완료만·백로그 옵션 + 실시간 삭제 대상 카운트 미리보기 + 확인).

#### 7. 월뷰 높이 조절 + 오버플로 셀 호버 확대 (`2a1b1e4`)

- 월뷰 그리드 아래 드래그 핸들로 행 높이 조절(64~280px, localStorage 영속). 핸들 Δ가 그리드 전체 높이 Δ가 되도록 행당 Δ/6 적용해 핸들이 커서를 따라감. 셀 높이에 따라 표시 칩 수 자동 산정.
- 오버플로(+N) 있는 월뷰 셀을 ~420ms 호버하면 그 날짜가 포털 카드로 확대돼 전체 항목 표시(scale 인 애니메이션, 스크롤/리사이즈 시 닫힘, 커서 이동용 grace 타이머). `CalendarGrid`에 optional `monthCellHeight` prop(기본 92 — 플래너 등 기존 호출부 영향 없음).

### 수정된 주요 파일

| 파일 | 변경 내용 |
|------|----------|
| `src/client/src/components/calendar/calendarShared.ts` | 날짜 헬퍼·범위/이동/제목·요일 라벨 공용 모듈 (신규) |
| `src/client/src/components/calendar/CalendarGrid.tsx` | 월/주/일 그리드 프레젠테이션 컴포넌트 (신규) + `monthCellHeight`·호버 확대 팝오버 |
| `src/client/src/components/PlannerCalendar.tsx` | 플래너 캘린더 뷰 (신규) |
| `src/client/src/components/PersonalAgenda.tsx` | 공용 그리드 기반 리팩터 + 표 색상/정렬 + 이미지·태그·기간삭제·높이조절 |
| `src/client/src/components/MoveToPlannerButton.tsx` | 프로젝트 선택 포털 드롭다운 (신규) |
| `src/client/src/components/ImageLightbox.tsx` | 공용 원본 크기 라이트박스 (신규) |
| `src/client/src/components/PlannerForm.tsx`, `PlannerItem.tsx`, `PlannerList.tsx` | 캘린더 뷰 토글·`initialDueDate`·라이트박스 연결 |
| `src/server/routes/personal.ts` | bulk-delete · move-to-planner · jira import-to-planner · Jira 기준 JQL |
| `src/server/routes/images.ts` | personal_items 이미지 업로드/삭제/서빙 |
| `src/server/db/schema.ts`, `queries.ts` | `personal_items.images` 컬럼 + 관련 쿼리 |
| `src/client/src/api/personal.ts`, `types.ts`, `i18n.tsx` | API 함수·타입·번역 키 |

### 아키텍처 결정

1. **공용 `CalendarGrid` 추출**: 내 일정과 플래너가 동일한 월/주/일 그리드를 쓰므로 프레젠테이션을 데이터-소스 비종속으로 분리(`CalChip` + 콜백). 신규 호출부는 `monthCellHeight` 등 optional prop만 추가해 기존 동작을 깨지 않는다.
2. **이미지 인프라 미러링**: 플래너의 검증된 base64 업로드/서빙/정리 경로를 `personal_items`에 그대로 미러링해 새 스토리지 설계 없이 재사용.
3. **기간 삭제 미리보기는 클라이언트 계산**: 클라이언트가 이미 전체 개인 항목을 들고 있으므로 별도 프리뷰 엔드포인트 없이 서버와 동일한 매칭 술어로 카운트를 계산해 전송 전 투명하게 보여준다.
