- ExpectedDraw = 키트 createPlanKit 「b05」 한 벌 — 위치 칸(찾기 → 지도 이동만) · 그리기 칸 머리 「예정노선 수정」 · 받은 노선 켬끔 · 길이 비교 한 줄 · [받은 노선으로](받은 꼭짓점 다시 추적 + 초안 expected [] · 한 걸음)
- 고칠 선 = 받은 원본 꼭짓점(GET /route/plan/source · 635-2) · 고친 뒤엔 고친 꼭짓점
- 새 B05_Profile_UI_Panel_Plan — registerPanelSection order 1 · 2 빈 자리 + 편집기가 채움
- 켬 = 발자국 ~ 구조물 마커 불투명 --draw-map-dim(0.35 · 새 토큰) · 등고 높이값 · 예정노선 그림은 그대로 · 장면 overAll = { paint, dim }
- 도구줄 「예정노선 변경」 · 「예정노선 원본」 걷음(map_toolbar · map_tools · Chrome · css)
- RouteEdit 683 → 682 줄(주석 한 줄 걷고 frame 한 줄) · Render 648 → 653
- 시험: 새 test_635_3 · 626_3 키트 · 아이콘 걷음 대조로 고침 · 551_2 불투명 값(색 아님) 받음 · 568_1 · 634_2 아이콘 목록에서 둘 뺌(걷음)
- 검증_sub6 B: 픽셀 불투명 255 → 89 · 끌기 · 지움 · 다시 긋기 · 받은 노선으로 · 저장 · 다시 열기 · 초기화 = 받은 노선 · 지킴 지문 110/110 · 되돌림
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
48 lines
1.8 KiB
TypeScript
48 lines
1.8 KiB
TypeScript
/* =============================================================================
|
|
* B05_Profile_UI_Panel_Plan.ts
|
|
* 종단 보기 왼쪽 「위치」 · 「그리기」 칸 자리(PLAN 635-3 · 요구 546) — 예정노선 키트(`createPlanKit` 「b05」) 칸을 앉힘.
|
|
* 칸은 페이지가 먼저 세우고 편집기는 노선을 읽은 뒤 섬 → 칸 = 빈 자리(order 1 · 2) · 편집기가 `fillPlanPanel` 로 채움.
|
|
* 늦게 온 쪽이 붙임 · 새 칸 자리(페이지 다시 세움) = 떠난 편집기 칸(문서 밖) 버림 · 비면 자리 숨김.
|
|
* ========================================================================== */
|
|
|
|
import { registerPanelSection } from "../A00_Common/design/design_panel";
|
|
|
|
type Slot = "site" | "draw";
|
|
const holders: Partial<Record<Slot, HTMLElement>> = {};
|
|
const cards: Partial<Record<Slot, HTMLElement | null>> = {};
|
|
|
|
const attach = (slot: Slot): void => {
|
|
const holder = holders[slot];
|
|
if (!holder) return;
|
|
const card = cards[slot];
|
|
holder.replaceChildren(...(card ? [card] : []));
|
|
holder.hidden = !card;
|
|
};
|
|
|
|
for (const [slot, order, title] of [
|
|
["site", 1, "위치"],
|
|
["draw", 2, "그리기"],
|
|
] as const)
|
|
registerPanelSection({
|
|
id: `plan-${slot}`,
|
|
title,
|
|
views: ["profile"],
|
|
order,
|
|
build: () => {
|
|
const holder = document.createElement("div");
|
|
holder.className = "b05-route__plan-slot";
|
|
holders[slot] = holder;
|
|
if (!cards[slot]?.isConnected) cards[slot] = null; // 떠난 편집기 칸
|
|
attach(slot);
|
|
return holder;
|
|
},
|
|
});
|
|
|
|
/** 키트 칸을 앉힘(새 편집기가 갈음). */
|
|
export function fillPlanPanel(next: Record<Slot, HTMLElement | null>): void {
|
|
for (const slot of ["site", "draw"] as const) {
|
|
cards[slot] = next[slot];
|
|
attach(slot);
|
|
}
|
|
}
|