From c8aaafcb548160cf85b7b1d01a334bbe0e45ef82 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 4 Aug 2026 19:37:46 +0900 Subject: [PATCH] =?UTF-8?q?fix(B05):=20=EC=9C=A0=ED=86=A0=EA=B3=A1?= =?UTF-8?q?=EC=84=A0=20=EB=A6=AC=EC=82=AC=EC=9D=B4=EC=A0=80=20TDZ=20?= =?UTF-8?q?=ED=81=AC=EB=9E=98=EC=8B=9C=EB=A1=9C=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=A7=84=EC=9E=85=20=EB=B6=88=EA=B0=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20+=20=ED=91=9C=EC=8B=9C=EC=84=A0=202px?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 원인: createPanelResizer가 생성 중 세션 저장 높이를 복원하며 onResize → syncHandlePosition을 부르는데 'open'(let) 선언이 그 아래라 TDZ ReferenceError로 B05 렌더 전체가 죽었다. 저장된 높이가 있는 브라우저에서만 재현돼(새 세션 테스트는 통과) 사용자 환경에서만 접속 불가로 나타났다. 상태 선언을 리사이저 생성 앞으로 이동. - 리사이저 상시 표시선 1px→2px, hover/드래그 3px→4px(2026-08-04 사용자 지시) 검증: masshaul-open=true + height=320 세션 상태로 진입 — 본문 렌더, 오버레이 320px 복원, 오류 0. Co-Authored-By: Claude Opus 5 (1M context) --- B05_wf2_Route/B05_wf2_Route_UI_Profile_MassHaul.ts | 9 ++++++--- ui_template/ui_template_resizer.css | 8 ++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/B05_wf2_Route/B05_wf2_Route_UI_Profile_MassHaul.ts b/B05_wf2_Route/B05_wf2_Route_UI_Profile_MassHaul.ts index 010a0768..195e61b5 100644 --- a/B05_wf2_Route/B05_wf2_Route_UI_Profile_MassHaul.ts +++ b/B05_wf2_Route/B05_wf2_Route_UI_Profile_MassHaul.ts @@ -171,6 +171,12 @@ export function createRouteMassHaulPanel(onChanged: () => void): RouteMassHaulPa scroll.className = "b05-profile__masshaul-scroll"; const legendLayer = document.createElement("div"); legendLayer.className = "b05-profile__masshaul-legend"; + // 상태 선언은 반드시 리사이저 생성보다 **먼저** — createPanelResizer가 세션에 저장된 + // 높이를 복원하며 생성 중에 onResize → syncHandlePosition을 부르는데, `open`이 그 아래 + // 있으면 TDZ ReferenceError로 B05 페이지 전체가 죽는다(2026-08-04 사용자 보고 — + // 저장된 높이가 있는 브라우저에서만 재현되는 이유). + let open = sessionStorage.getItem(OPEN_KEY) === "true"; + let context: RouteMassHaulContext | null = null; // 높이 조절 — 메인 하단 패널과 같은 공용 리사이저(위 경계, 위로 끌면 커짐, 세션 보존). let resizeRedrawPending = false; const resizer = createPanelResizer({ @@ -218,9 +224,6 @@ export function createRouteMassHaulPanel(onChanged: () => void): RouteMassHaulPa { passive: false }, ); - let open = sessionStorage.getItem(OPEN_KEY) === "true"; - let context: RouteMassHaulContext | null = null; - /** * 손잡이를 오버레이 **위 경계**에 태운다(2026-08-04 사용자 지시 — 펼치면 같이 올라와 * 테이블 영역을 침범해도 된다). 접혀 있으면 패널 바닥으로 돌아온다. 높이 조절 중에도 diff --git a/ui_template/ui_template_resizer.css b/ui_template/ui_template_resizer.css index 9c9531af..e933e97f 100644 --- a/ui_template/ui_template_resizer.css +++ b/ui_template/ui_template_resizer.css @@ -27,7 +27,7 @@ top: 50%; right: 0; left: 0; - height: 1px; + height: 2px; transform: translateY(-50%); } @@ -35,7 +35,7 @@ top: 0; bottom: 0; left: 50%; - width: 1px; + width: 2px; transform: translateX(-50%); } @@ -46,12 +46,12 @@ .ui-resizer--vertical:hover::before, .ui-resizer--vertical.is-dragging::before { - height: 3px; + height: 4px; } .ui-resizer--horizontal:hover::before, .ui-resizer--horizontal.is-dragging::before { - width: 3px; + width: 4px; } /* 위아래로 끌어 높이를 조절 — 패널 위쪽 경계에 가로로 눕는다. */