/* ============================================================================= * B05_Profile_UI_Structures_Panel.ts * 「구조물 배치」 사이드바 섹션 — 구조물군(A~G) → 타입 → 위치(측점) → B05 옵션. * * 구 「구조물 배치」(비정규 측점, 자유 텍스트)를 흡수한 단일 섹션이다(2026-08-17 * 컨테이너 병합). 위치 입력은 측점번호+잔여거리 두 칸이고, 순서는 시작 측점 → * 기준 측점 → 종료 측점이다(점형은 기준 측점만). 저장은 누가거리(m)로 한다. * * 계곡 통과 시설(배관/BOX암거/물넘이/세월교, A군 managed_by)도 **같은 폼**에서 * 편집한다 — 자동 배치 배관이든 수동 배관이든 같은 구조물이라 별도 UI를 두지 * 않는다(2026-08-17 사용자 지시). 저장소만 관 지점 정본(`pipe_points.json`)이라 * 추가·수정·삭제를 콜백으로 배수유역 패널에 넘긴다. 부속 옵션(유형·집수정· * 기슭막이·돌붙임·날개벽)은 옵션 자리의 서브폼이 그린다. 상세 치수는 B06/B07 몫. * ========================================================================== */ import { defaultOptions, isB05Option, structureAnchorM, type StructureInstance, type StructurePlacement, type StructureType, } from "./B05_Profile_Api_Structures"; import type { PipeFacility, PipeSource } from "../B04_PreProcess/B04_PreProcess_Api_Fetch"; import { createFacilityOptionsForm, type FacilityAttributes, } from "./B05_Profile_UI_Drainage_Facility"; import { field, numberInput, select, stationFields } from "./B05_Profile_UI_Structures_Fields"; import { renderStructureList } from "./B05_Profile_UI_Structures_List"; import { formatStation } from "./B05_Profile_Util_Station"; /** 구조물군 표시 이름. 리스트 기호(A~G)만으로는 무엇인지 알기 어렵다. * 우클릭 메뉴(종단그래프·배수유역도)도 같은 이름을 쓴다(2026-08-18 일원화). */ export const GROUP_LABELS: Record = { A: "A 횡단배수", B: "B 종단배수", C: "C 사면안정", D: "D 계류·사방", E: "E 안전·부대·용지", F: "F 생태·녹화", G: "G 노면공", 호환: "기타", }; /** 구간형 신규 추가 시 기본 구간 길이(m). 사용자가 종점을 바로 고칠 수 있게 짧게 잡는다. */ const DEFAULT_INTERVAL_LENGTH_M = 15; /** 계곡 통과 시설 1건 — 관 지점 정본에서 온 병합 표시·폼 편집용 항목. */ export interface PipeFacilityItem { chainage_m: number; facility: PipeFacility; start_m?: number; end_m?: number; /** 자동 배치 출처(stream/spacing/user) — 배관 유형(계곡부형/보완형) 제안 근거. */ source?: PipeSource; /** 담당 유역의 설계유량(㎥/s) — 물넘이·세월교 개략 단면 계산의 입력. */ design_flow_m3s?: number | null; /** 부속 옵션(유형·집수정·기슭막이·돌붙임·날개벽·세월교 관 등). */ options?: Record; } export interface StructuresSection { root: HTMLElement; /** 배치된 구조물 목록(