From 281c71b55bd52ac5cec988a1018d5fce3783b146 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Fri, 16 Oct 2026 13:44:50 +0900 Subject: [PATCH] =?UTF-8?q?refactor(logic):=20348-1=20=EC=88=9C=EC=88=98?= =?UTF-8?q?=20=EA=B3=84=EC=82=B0=20TS=2049=20=ED=8C=8C=EC=9D=BC=20/logic/=20=EB=A1=9C=20=EC=98=AE?= =?UTF-8?q?=EA=B9=80=20=E2=80=94=20=EC=9D=B4=EB=A6=84=20=EC=95=9E=EB=A8=B8?= =?UTF-8?q?=EB=A6=AC=20=EA=B7=B8=EB=8C=80=EB=A1=9C=20=C2=B7=20=EB=8F=99?= =?UTF-8?q?=EC=9E=91=20=EA=B3=A0=EC=B9=A8=20=EC=97=86=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 옮김: B04 2 · B05 23 · B06 11 · A00_Common/design 13 (9,299 줄) · 이미 logic/ 에 있던 16 파일 그대로 - 안 옮김: 묶음 입구(package.json build:*) · 파이썬 · 순수지만 계산 아닌 8 (보기 결선 · 콜백 · API 타입 · 갈아끼움 알림판) - import 266 줄(142 파일) · 시험 · 주석 · 짝 표시 문자열 경로 고침 · B05 · B06 CLAUDE.md 짝 줄 logic/ - 시험 도우미 새 경로: 가짜 require 열쇠 · B05()/B06() 부름 · 형제 import 자리 · tsc 묶어 돌리는 시험 · 정규식 · rglob - design_view_cross 줄 한도 시험 685 → 688 (긴 import 경로 줄바꿈 3줄) - 확인: typecheck 0 · 서버 묶음 넷(corridor · server-calc · b07-extent · b07-note) 다시 지어 코드 같음(//#region 경로 주석만 다름) · 관련 시험 270 파일 — 남은 실패 19 는 옮기기 전과 같음 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_014utrjfoW831Vc5wJUd13kL --- A00_Common/design/design_pipeline_cross.ts | 2 +- A00_Common/design/design_pipeline_page.ts | 10 +++++----- A00_Common/design/design_profile.ts | 8 ++++---- A00_Common/design/design_profile_base.ts | 2 +- A00_Common/design/design_profile_free_view.ts | 2 +- A00_Common/design/design_store.ts | 6 +++--- A00_Common/design/design_structure_ford_calc.ts | 2 +- A00_Common/design/design_structure_form.ts | 2 +- A00_Common/design/design_structure_pipe_calc.ts | 4 ++-- A00_Common/design/design_view_cross.ts | 5 ++++- A00_Common/design/{ => logic}/design_pipeline.ts | 4 ++-- .../{ => logic}/design_pipeline_stations.ts | 6 +++--- .../design/{ => logic}/design_pipeline_types.ts | 4 ++-- .../design/{ => logic}/design_profile_free.ts | 8 ++++---- .../design/{ => logic}/design_structure_box.ts | 0 .../design/{ => logic}/design_structure_ford.ts | 0 .../design_structure_ford_pavement.ts | 0 .../design/{ => logic}/design_structure_guard.ts | 0 .../design/{ => logic}/design_structure_pipe.ts | 2 +- .../design/{ => logic}/design_structure_road.ts | 0 .../{ => logic}/design_structure_slope_tier.ts | 0 .../design/{ => logic}/design_structure_spec.ts | 0 .../{ => logic}/design_structure_widening.ts | 0 B04_PreProcess/B04_PreProcess_UI_Basins.ts | 2 +- B04_PreProcess/B04_PreProcess_UI_FlowRamp.ts | 2 +- B04_PreProcess/B04_PreProcess_UI_FlowStrength.ts | 6 +++++- B04_PreProcess/B04_PreProcess_UI_MapViewer.ts | 2 +- .../B04_PreProcess_UI_MapRender_Prepare.ts | 4 ++-- .../B04_PreProcess_UI_RouteSamples.ts | 0 B05_Profile/B05_Profile_Api_HaulPlan.ts | 2 +- B05_Profile/B05_Profile_Api_Replan.ts | 2 +- B05_Profile/B05_Profile_Api_Structures.ts | 2 +- B05_Profile/B05_Profile_Route_Save.py | 2 +- B05_Profile/B05_Profile_UI_Corridor_Build.ts | 6 +++--- .../B05_Profile_UI_Corridor_Deform_Structure.ts | 2 +- B05_Profile/B05_Profile_UI_Corridor_Envelope.ts | 5 ++++- B05_Profile/B05_Profile_UI_Corridor_Loft.ts | 12 ++++++------ .../B05_Profile_UI_Corridor_Station_Structure.ts | 2 +- .../B05_Profile_UI_Corridor_Structures.ts | 10 +++++----- .../B05_Profile_UI_Corridor_Structures_Box.ts | 2 +- B05_Profile/B05_Profile_UI_Corridor_Tin.ts | 8 ++++---- B05_Profile/B05_Profile_UI_Drainage_Facility.ts | 10 +++++----- .../B05_Profile_UI_Drainage_Facility_Hidden.ts | 2 +- B05_Profile/B05_Profile_UI_Drainage_Live.ts | 2 +- B05_Profile/B05_Profile_UI_Drainage_Panel.ts | 6 +++--- .../B05_Profile_UI_Drainage_Panel_Types.ts | 2 +- B05_Profile/B05_Profile_UI_Drainage_Render.ts | 2 +- B05_Profile/B05_Profile_UI_Drainage_Spans.ts | 2 +- B05_Profile/B05_Profile_UI_Page_Structures.ts | 2 +- B05_Profile/B05_Profile_UI_Profile_Balance.ts | 2 +- B05_Profile/B05_Profile_UI_Profile_Edit.ts | 4 ++-- B05_Profile/B05_Profile_UI_Profile_Layout.ts | 2 +- B05_Profile/B05_Profile_UI_Profile_MinCover.ts | 4 ++-- .../B05_Profile_UI_Profile_Panel_Tools.ts | 8 ++++---- B05_Profile/B05_Profile_UI_Profile_Preview.ts | 2 +- B05_Profile/B05_Profile_UI_Profile_Render.ts | 4 ++-- .../B05_Profile_UI_Profile_RunHighlight.ts | 4 ++-- B05_Profile/B05_Profile_UI_Profile_Table.ts | 2 +- B05_Profile/B05_Profile_UI_Profile_Tools.ts | 4 ++-- B05_Profile/B05_Profile_UI_RouteEdit.ts | 10 +++++++--- B05_Profile/B05_Profile_UI_RouteEdit_Apply.ts | 2 +- B05_Profile/B05_Profile_UI_RouteEdit_Contour.ts | 2 +- .../B05_Profile_UI_RouteEdit_Cross_Draw.ts | 2 +- B05_Profile/B05_Profile_UI_RouteEdit_CurveBar.ts | 4 ++-- B05_Profile/B05_Profile_UI_RouteEdit_Draft.ts | 2 +- .../B05_Profile_UI_RouteEdit_Footprint.ts | 2 +- .../B05_Profile_UI_RouteEdit_Initial_Model.ts | 2 +- B05_Profile/B05_Profile_UI_RouteEdit_Input.ts | 2 +- B05_Profile/B05_Profile_UI_RouteEdit_Label.ts | 7 +++++-- B05_Profile/B05_Profile_UI_RouteEdit_Pointer.ts | 4 ++-- B05_Profile/B05_Profile_UI_RouteEdit_Render.ts | 4 ++-- .../B05_Profile_UI_Structures_Define_Form.ts | 4 ++-- B05_Profile/B05_Profile_UI_Structures_Fields.ts | 4 ++-- B05_Profile/B05_Profile_UI_Structures_Groups.ts | 8 ++++---- B05_Profile/B05_Profile_UI_Structures_List.ts | 8 ++++---- B05_Profile/B05_Profile_UI_Structures_Marks.ts | 2 +- B05_Profile/B05_Profile_UI_Structures_Panel.ts | 2 +- .../B05_Profile_UI_Structures_Panel_Commit.ts | 6 +++--- .../B05_Profile_UI_Structures_Panel_Events.ts | 2 +- .../B05_Profile_UI_Structures_Panel_Options.ts | 12 ++++++++---- .../B05_Profile_UI_Structures_Panel_Types.ts | 2 +- B05_Profile/B05_Profile_UI_Structures_Spec.ts | 6 +++--- .../B05_Profile_UI_Structures_Widening.ts | 2 +- B05_Profile/CLAUDE.md | 4 ++-- B05_Profile/logic/B05_Profile_Footprint_Stage.ts | 2 +- .../logic/B05_Profile_Footprint_Strokes.ts | 2 +- B05_Profile/logic/B05_Profile_Grade_Carry.ts | 2 +- B05_Profile/logic/B05_Profile_Grade_Ground.ts | 2 +- B05_Profile/logic/B05_Profile_MassHaul_Stage.ts | 2 +- B05_Profile/logic/B05_Profile_Pipeline_Detail.ts | 4 ++-- B05_Profile/logic/B05_Profile_Pipeline_Grade.ts | 6 +++--- .../logic/B05_Profile_Pipeline_RouteGround.ts | 6 +++--- B05_Profile/logic/B05_Profile_PlanFootprint.ts | 2 +- B05_Profile/logic/B05_Profile_Sections_Ground.ts | 2 +- .../logic/B05_Profile_Sections_Stations.ts | 8 ++++---- .../B05_Profile_UI_Corridor_Build_Types.ts | 6 +++--- .../B05_Profile_UI_Corridor_Deform.ts | 0 .../B05_Profile_UI_Corridor_Frames.ts | 4 ++-- .../B05_Profile_UI_Corridor_Loft_Grid.ts | 0 .../B05_Profile_UI_Corridor_Loft_Toe.ts | 0 .../B05_Profile_UI_Corridor_Region.ts | 0 .../B05_Profile_UI_Corridor_Structures_Hash.ts | 4 ++-- .../B05_Profile_UI_Corridor_Structures_Pick.ts | 4 ++-- .../B05_Profile_UI_Corridor_Structures_Wing.ts | 6 +++--- .../B05_Profile_UI_Corridor_Tin_Design.ts | 2 +- .../B05_Profile_UI_Corridor_Tin_Pslg.ts | 0 .../B05_Profile_UI_Drainage_Facility_Merge.ts | 0 .../B05_Profile_UI_Profile_Alignment.ts | 0 .../{ => logic}/B05_Profile_UI_Profile_Data.ts | 2 +- .../{ => logic}/B05_Profile_UI_Profile_Guard.ts | 2 +- .../B05_Profile_UI_Profile_Straighten.ts | 0 .../B05_Profile_UI_RouteEdit_Curve.ts | 0 .../B05_Profile_UI_RouteEdit_Edits.ts | 0 .../B05_Profile_UI_RouteEdit_Frame.ts | 0 .../B05_Profile_UI_Structures_Balloon.ts | 10 +++++----- .../B05_Profile_UI_Structures_Define.ts | 0 .../B05_Profile_UI_Structures_Summary.ts | 0 .../{ => logic}/B05_Profile_Util_Station.ts | 0 B06_Section/B06_Section_Cross_Refresh.ts | 6 +++--- B06_Section/B06_Section_Section_Store.ts | 2 +- B06_Section/B06_Section_Structure_Layouts.ts | 4 ++-- B06_Section/B06_Section_UI_Cross_Body_Guard.ts | 2 +- B06_Section/B06_Section_UI_Cross_Box_Geom.ts | 6 +++--- B06_Section/B06_Section_UI_Cross_Card_Chrome.ts | 2 +- B06_Section/B06_Section_UI_Cross_Culvert.ts | 2 +- .../B06_Section_UI_Cross_Culvert_Extra.ts | 6 +++--- B06_Section/B06_Section_UI_Cross_Culvert_Geom.ts | 16 ++++++++-------- .../B06_Section_UI_Cross_Culvert_Tiers.ts | 8 ++++---- .../B06_Section_UI_Cross_Culvert_Types.ts | 2 +- B06_Section/B06_Section_UI_Cross_Culvert_Wire.ts | 8 ++++---- B06_Section/B06_Section_UI_Cross_Detail_Cad.ts | 4 ++-- .../B06_Section_UI_Cross_Detail_Select.ts | 2 +- B06_Section/B06_Section_UI_Cross_Detail_Table.ts | 2 +- .../B06_Section_UI_Cross_FillSlope_Notice.ts | 6 +++--- B06_Section/B06_Section_UI_Cross_Ford_Geom.ts | 8 ++++---- B06_Section/B06_Section_UI_Cross_Panel_Base.ts | 2 +- B06_Section/B06_Section_UI_Cross_Revetment.ts | 8 ++++---- .../B06_Section_UI_Cross_Structure_Panel.ts | 2 +- B06_Section/B06_Section_UI_Cross_View.ts | 2 +- B06_Section/B06_Section_UI_Cross_View_Panels.ts | 2 +- .../B06_Section_UI_Cross_View_Structure.ts | 2 +- B06_Section/B06_Section_UI_Cross_Wall.ts | 4 ++-- B06_Section/B06_Section_UI_Cross_Wall_Hatch.ts | 2 +- B06_Section/B06_Section_UI_Page_Persist.ts | 2 +- B06_Section/B06_Section_UI_Page_Pipe_Options.ts | 2 +- B06_Section/B06_Section_UI_Page_Span_Control.ts | 2 +- B06_Section/B06_Section_UI_Page_Station_Swap.ts | 2 +- .../B06_Section_UI_Page_Structures_Panel.ts | 2 +- B06_Section/CLAUDE.md | 2 +- .../{ => logic}/B06_Section_Cross_Stage.ts | 6 +++--- B06_Section/logic/B06_Section_Station_Swap.ts | 2 +- .../B06_Section_UI_Cross_Berm_Info.ts | 2 +- .../B06_Section_UI_Cross_Culvert_Basin.ts | 4 ++-- .../B06_Section_UI_Cross_Culvert_Const.ts | 4 ++-- .../B06_Section_UI_Cross_Culvert_Solve.ts | 4 ++-- .../B06_Section_UI_Cross_Detail_Geom.ts | 2 +- .../B06_Section_UI_Cross_FillSlope_Warn.ts | 2 +- .../{ => logic}/B06_Section_UI_Cross_Fit.ts | 2 +- .../{ => logic}/B06_Section_UI_Cross_Lean.ts | 4 ++-- .../B06_Section_UI_Cross_Structure_Cut.ts | 8 ++++---- .../{ => logic}/B06_Section_UI_Page_Patches.ts | 10 +++++----- .../B07_DesignDetail_Engine_Cross_Table_Edit.py | 2 +- .../B07_DesignDetail_Note_Options_Node.ts | 4 ++-- M02_MasterTemplete/M02_Table_Fill_Spec.py | 2 +- M02_MasterTemplete/StructOptions/M02_SO_Def.ts | 2 +- .../StructOptions/M02_SO_Def_Spec.ts | 5 ++++- .../StructOptions/M02_SO_Def_Spec_Model.ts | 2 +- .../StructOptions/M02_SO_Def_Table.ts | 2 +- resources/master_data/ref/_걷을_옛코드.md | 2 +- resources/tester/helper_108_drag_box_hit.cjs | 2 +- resources/tester/helper_115_8_corridor_loft.cjs | 6 +++--- .../tester/helper_129_menu_equals_panel.cjs | 2 +- resources/tester/helper_135_3_chute_solid.cjs | 4 ++-- resources/tester/helper_139_4_buried_outlet.cjs | 2 +- resources/tester/helper_139_6_pipe_fit.cjs | 2 +- resources/tester/helper_165_pavement_flow.cjs | 4 +++- resources/tester/helper_166_1_note_options.cjs | 4 ++-- resources/tester/helper_172_1_loft_wrinkle.cjs | 2 +- resources/tester/helper_173_7_inlet_animal.cjs | 4 +++- resources/tester/helper_176_1_seam.cjs | 2 +- resources/tester/helper_178_3_slope_tiers.cjs | 6 +++--- resources/tester/helper_209_1_detail_select.cjs | 2 +- resources/tester/helper_215_1_free_profile.cjs | 4 ++-- resources/tester/helper_219_1_arrow_owner.cjs | 6 +++--- resources/tester/helper_225_1_pipe_round.cjs | 4 ++-- resources/tester/helper_231_1_pave_reload.cjs | 4 +++- .../tester/helper_234_1_structure_station.cjs | 6 +++--- resources/tester/helper_259_detail_region.cjs | 2 +- resources/tester/helper_260_note_cad.cjs | 6 +++--- resources/tester/helper_261_3_detail_pick.cjs | 2 +- resources/tester/helper_286_1_ford_pavement.cjs | 2 +- resources/tester/helper_287_ford_pavement.cjs | 2 +- .../tester/helper_294_3_ford_extend_chute.cjs | 6 ++++-- .../tester/helper_295_pick_order_detail.cjs | 2 +- resources/tester/helper_319_kind_swap.cjs | 2 +- resources/tester/helper_322_2_check.cjs | 4 ++-- resources/tester/helper_323_4_attach.cjs | 4 +++- resources/tester/helper_323_7_new_type.cjs | 4 +++- resources/tester/helper_323_9_twin_cards_3d.cjs | 4 +++- resources/tester/helper_342_1_entry.ts | 4 ++-- resources/tester/helper_344_2_route_pairs.cjs | 6 +++--- resources/tester/helper_344_3_entry.ts | 7 +++++-- .../tester/helper_344_3_pipeline_stations.cjs | 6 ++++-- .../tester/helper_344_4_design_pipeline.cjs | 4 ++-- resources/tester/helper_346_1_pipeline_page.cjs | 6 +++--- .../tester/helper_346_2_draft_cross_pills.cjs | 2 +- .../tester/helper_346_2_pipeline_cross_page.cjs | 6 +++--- resources/tester/helper_52_4_ford.cjs | 4 ++-- resources/tester/helper_52_structure_spec.cjs | 6 +++--- .../tester/helper_52_structure_spec_box.cjs | 9 ++++++--- resources/tester/helper_54_10_soil_tiers.cjs | 4 +++- resources/tester/helper_54_14_balloon_lines.cjs | 2 +- resources/tester/helper_65_ford_box.cjs | 8 ++++---- resources/tester/helper_87_widening.cjs | 2 +- resources/tester/helper_91_ground_free.cjs | 4 ++-- .../tester/helper_b05_curve_radius_floor.cjs | 2 +- .../helper_b05_routeedit_initial_apply.cjs | 2 +- resources/tester/helper_b05_routeedit_pick.cjs | 2 +- resources/tester/helper_b05_routeedit_view.cjs | 2 +- .../tester/helper_b05_structures_define.cjs | 2 +- .../helper_b05_structures_form_summary.cjs | 4 ++-- resources/tester/helper_m02_so_def_spec.cjs | 2 +- resources/tester/test_107_ford_free.py | 4 ++-- resources/tester/test_173_6_half_width_apply.py | 2 +- resources/tester/test_173_7_inlet_animal.py | 4 +++- .../tester/test_177_2_inlet_animal_select.py | 4 ++-- .../tester/test_211_1_inlet_revet_height.py | 2 +- .../tester/test_213_1_hidden_station_pvi.py | 2 +- resources/tester/test_213_2_ghost_edit_drop.py | 2 +- resources/tester/test_215_1_free_profile.py | 4 ++-- resources/tester/test_224_2_station_snap.py | 2 +- resources/tester/test_225_1_pipe_round.py | 2 +- resources/tester/test_233_2_view_pick.py | 2 +- resources/tester/test_233_3_release.py | 2 +- .../tester/test_286_1_ford_pavement_design.py | 2 +- resources/tester/test_294_7_ford_slab_pick.py | 2 +- resources/tester/test_298_add_reanalyze.py | 2 +- resources/tester/test_307_pick_highlight.py | 2 +- resources/tester/test_344_4_design_pipeline.py | 2 +- resources/tester/test_52_14_etc_text.py | 2 +- resources/tester/test_52_1b_pipe_links.py | 2 +- .../test_52_3_structure_spec_ford_pavement.py | 9 +++++---- resources/tester/test_52_7_safety.py | 2 +- resources/tester/test_54_29_pick_same_panel.py | 4 ++-- .../tester/test_b05_facility_options_merge.py | 4 ++-- resources/tester/test_b05_min_cover_guard.py | 2 +- .../tester/test_b05_routeedit_frame_mirror.py | 2 +- resources/tester/test_b05_station_merge.mjs | 2 +- resources/tester/test_b06_berm_review_info.py | 6 +++--- resources/tester/test_b06_fill_slope_warn.py | 2 +- resources/tester/test_b06_ground_unlock.py | 16 ++++++++++------ resources/tester/test_b06_height_unlock.py | 8 ++++---- .../tester/test_b06_pipe_wall_height_mirror.py | 4 +++- resources/tester/test_b06_wall_lean_table.py | 8 +++++--- resources/tester/test_b06_wall_shape_unified.py | 4 ++-- .../tester/test_route_polyline_browser_mirror.py | 4 ++-- .../tester/test_route_polyline_handle_drag.py | 6 +++--- 257 files changed, 484 insertions(+), 425 deletions(-) rename A00_Common/design/{ => logic}/design_pipeline.ts (99%) rename A00_Common/design/{ => logic}/design_pipeline_stations.ts (91%) rename A00_Common/design/{ => logic}/design_pipeline_types.ts (99%) rename A00_Common/design/{ => logic}/design_profile_free.ts (98%) rename A00_Common/design/{ => logic}/design_structure_box.ts (100%) rename A00_Common/design/{ => logic}/design_structure_ford.ts (100%) rename A00_Common/design/{ => logic}/design_structure_ford_pavement.ts (100%) rename A00_Common/design/{ => logic}/design_structure_guard.ts (100%) rename A00_Common/design/{ => logic}/design_structure_pipe.ts (98%) rename A00_Common/design/{ => logic}/design_structure_road.ts (100%) rename A00_Common/design/{ => logic}/design_structure_slope_tier.ts (100%) rename A00_Common/design/{ => logic}/design_structure_spec.ts (100%) rename A00_Common/design/{ => logic}/design_structure_widening.ts (100%) rename B04_PreProcess/{ => logic}/B04_PreProcess_UI_MapRender_Prepare.ts (99%) rename B04_PreProcess/{ => logic}/B04_PreProcess_UI_RouteSamples.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_UI_Corridor_Build_Types.ts (89%) rename B05_Profile/{ => logic}/B05_Profile_UI_Corridor_Deform.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_UI_Corridor_Frames.ts (98%) rename B05_Profile/{ => logic}/B05_Profile_UI_Corridor_Loft_Grid.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_UI_Corridor_Loft_Toe.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_UI_Corridor_Region.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_UI_Corridor_Structures_Hash.ts (95%) rename B05_Profile/{ => logic}/B05_Profile_UI_Corridor_Structures_Pick.ts (92%) rename B05_Profile/{ => logic}/B05_Profile_UI_Corridor_Structures_Wing.ts (98%) rename B05_Profile/{ => logic}/B05_Profile_UI_Corridor_Tin_Design.ts (97%) rename B05_Profile/{ => logic}/B05_Profile_UI_Corridor_Tin_Pslg.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_UI_Drainage_Facility_Merge.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_UI_Profile_Alignment.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_UI_Profile_Data.ts (96%) rename B05_Profile/{ => logic}/B05_Profile_UI_Profile_Guard.ts (96%) rename B05_Profile/{ => logic}/B05_Profile_UI_Profile_Straighten.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_UI_RouteEdit_Curve.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_UI_RouteEdit_Edits.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_UI_RouteEdit_Frame.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_UI_Structures_Balloon.ts (95%) rename B05_Profile/{ => logic}/B05_Profile_UI_Structures_Define.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_UI_Structures_Summary.ts (100%) rename B05_Profile/{ => logic}/B05_Profile_Util_Station.ts (100%) rename B06_Section/{ => logic}/B06_Section_Cross_Stage.ts (95%) rename B06_Section/{ => logic}/B06_Section_UI_Cross_Berm_Info.ts (97%) rename B06_Section/{ => logic}/B06_Section_UI_Cross_Culvert_Basin.ts (99%) rename B06_Section/{ => logic}/B06_Section_UI_Cross_Culvert_Const.ts (99%) rename B06_Section/{ => logic}/B06_Section_UI_Cross_Culvert_Solve.ts (99%) rename B06_Section/{ => logic}/B06_Section_UI_Cross_Detail_Geom.ts (99%) rename B06_Section/{ => logic}/B06_Section_UI_Cross_FillSlope_Warn.ts (98%) rename B06_Section/{ => logic}/B06_Section_UI_Cross_Fit.ts (99%) rename B06_Section/{ => logic}/B06_Section_UI_Cross_Lean.ts (88%) rename B06_Section/{ => logic}/B06_Section_UI_Cross_Structure_Cut.ts (94%) rename B06_Section/{ => logic}/B06_Section_UI_Page_Patches.ts (92%) diff --git a/A00_Common/design/design_pipeline_cross.ts b/A00_Common/design/design_pipeline_cross.ts index c3d92c4fc..0cd2ea14b 100644 --- a/A00_Common/design/design_pipeline_cross.ts +++ b/A00_Common/design/design_pipeline_cross.ts @@ -14,7 +14,7 @@ import type { CrossSection, SectionDetailResponse } from "../../B06_Section/B06_Section_Api_Fetch"; import { effectiveStandardCross } from "../../B06_Section/B06_Section_UI_Standard_Panel"; import type { CrossInput, SectionSpecs } from "../../B05_Profile/logic/B05_Profile_Pipeline_Detail"; -import type { PipelineStation } from "./design_pipeline_types"; +import type { PipelineStation } from "./logic/design_pipeline_types"; export interface PipelineCrossSource { input: CrossInput; diff --git a/A00_Common/design/design_pipeline_page.ts b/A00_Common/design/design_pipeline_page.ts index fd941dd97..46aebc78f 100644 --- a/A00_Common/design/design_pipeline_page.ts +++ b/A00_Common/design/design_pipeline_page.ts @@ -19,26 +19,26 @@ * [저장](sub5)이 서버 정본 — 노선을 먼저 보내고 `pendingAlignment(DRAFT_ROUTE_ID)` 를 새 노선에 보냄. * ========================================================================== */ -import { createDesignPipeline, publishToStore, type DesignPipeline } from "./design_pipeline"; +import { createDesignPipeline, publishToStore, type DesignPipeline } from "./logic/design_pipeline"; import { pipelineCrossSource, type PipelineCrossSource } from "./design_pipeline_cross"; -import { createStationsStage } from "./design_pipeline_stations"; +import { createStationsStage } from "./logic/design_pipeline_stations"; import type { PipelineInputs, PipelineStation, RouteDraft, StageFn, Vertex, -} from "./design_pipeline_types"; +} from "./logic/design_pipeline_types"; import { useDesignStore } from "./design_store"; import { fetchDetailPipePoints } from "../../B04_PreProcess/B04_PreProcess_Api_Fetch"; import type { SectionDetailResponse } from "../../B06_Section/B06_Section_Api_Fetch"; -import { createCrossStage } from "../../B06_Section/B06_Section_Cross_Stage"; +import { createCrossStage } from "../../B06_Section/logic/B06_Section_Cross_Stage"; import { emptyEdits, type AlignmentBase, type AlignmentEdits, type ProfileAlignment, -} from "../../B05_Profile/B05_Profile_UI_Profile_Alignment"; +} from "../../B05_Profile/logic/B05_Profile_UI_Profile_Alignment"; import { markAlignmentSaved, readAlignmentDraft, diff --git a/A00_Common/design/design_profile.ts b/A00_Common/design/design_profile.ts index ecf90d80b..05787a867 100644 --- a/A00_Common/design/design_profile.ts +++ b/A00_Common/design/design_profile.ts @@ -23,7 +23,7 @@ import { hasLegacyAlignment, readAlignment, toDesignProfile, -} from "../../B05_Profile/B05_Profile_UI_Profile_Data"; +} from "../../B05_Profile/logic/B05_Profile_UI_Profile_Data"; import { createProgressCircle } from "@ui/ui_template_progress"; import { showToast } from "@ui/ui_template_elements"; import { saveProfileAlignment } from "../../B05_Profile/B05_Profile_Api_Fetch"; @@ -39,12 +39,12 @@ import type { AlignmentBase, AlignmentEdits, ProfileAlignment, -} from "../../B05_Profile/B05_Profile_UI_Profile_Alignment"; +} from "../../B05_Profile/logic/B05_Profile_UI_Profile_Alignment"; import { buildAlignment, emptyEdits, toAlignmentBase, -} from "../../B05_Profile/B05_Profile_UI_Profile_Alignment"; +} from "../../B05_Profile/logic/B05_Profile_UI_Profile_Alignment"; import { createProfileEditStore } from "../../B05_Profile/B05_Profile_UI_Profile_Edit"; import { structureGroupMenuItems, @@ -69,7 +69,7 @@ import { createElevationHold, createProfileDrag, } from "../../B05_Profile/B05_Profile_UI_Profile_Drag"; -import { planCurveWarning, sampleAt } from "../../B05_Profile/B05_Profile_UI_Profile_Guard"; +import { planCurveWarning, sampleAt } from "../../B05_Profile/logic/B05_Profile_UI_Profile_Guard"; import { listedBase } from "./design_profile_base"; import * as pagePipeline from "./design_pipeline_page"; import type { RouteProfilePanelCallbacks } from "../../B05_Profile/B05_Profile_UI_Profile_Panel_Types"; diff --git a/A00_Common/design/design_profile_base.ts b/A00_Common/design/design_profile_base.ts index b706bfe86..423667a34 100644 --- a/A00_Common/design/design_profile_base.ts +++ b/A00_Common/design/design_profile_base.ts @@ -5,7 +5,7 @@ * ========================================================================== */ import type { SectionDetailResponse } from "../../B06_Section/B06_Section_Api_Fetch"; -import type { AlignmentBase } from "../../B05_Profile/B05_Profile_UI_Profile_Alignment"; +import type { AlignmentBase } from "../../B05_Profile/logic/B05_Profile_UI_Profile_Alignment"; import type { IrregularStation } from "../../B05_Profile/B05_Profile_UI_IrregularStations"; import { irregularGraphStations, diff --git a/A00_Common/design/design_profile_free_view.ts b/A00_Common/design/design_profile_free_view.ts index 9584478f9..48584c4ee 100644 --- a/A00_Common/design/design_profile_free_view.ts +++ b/A00_Common/design/design_profile_free_view.ts @@ -17,7 +17,7 @@ import { parseWindowTransform, type ChartWindow, type FreeDraw, -} from "./design_profile_free"; +} from "./logic/design_profile_free"; const SVG_NS = "http://www.w3.org/2000/svg"; diff --git a/A00_Common/design/design_store.ts b/A00_Common/design/design_store.ts index 3b0720983..9f5199e22 100644 --- a/A00_Common/design/design_store.ts +++ b/A00_Common/design/design_store.ts @@ -24,10 +24,10 @@ import type { StateName } from "../b_page_state"; import { CURRENT_PROJECT_ID_KEY } from "../../config/config_frontend"; import type { StructureInstance } from "../../B05_Profile/B05_Profile_Api_Structures"; import type { DetailPipeInput } from "../../B04_PreProcess/B04_PreProcess_Api_Fetch"; -import type { AlignmentEdits } from "../../B05_Profile/B05_Profile_UI_Profile_Alignment"; +import type { AlignmentEdits } from "../../B05_Profile/logic/B05_Profile_UI_Profile_Alignment"; import type { SectionDetailResponse } from "../../B06_Section/B06_Section_Api_Fetch"; -import type { ProfileAlignment } from "../../B05_Profile/B05_Profile_UI_Profile_Alignment"; -import type { PipelineStation, PlanFootprint, RouteDraft } from "./design_pipeline_types"; +import type { ProfileAlignment } from "../../B05_Profile/logic/B05_Profile_UI_Profile_Alignment"; +import type { PipelineStation, PlanFootprint, RouteDraft } from "./logic/design_pipeline_types"; /** 한 페이지의 두 보기(계획서 24-1). */ export type DesignView = "profile" | "cross"; diff --git a/A00_Common/design/design_structure_ford_calc.ts b/A00_Common/design/design_structure_ford_calc.ts index 0cfa6c52d..afe825847 100644 --- a/A00_Common/design/design_structure_ford_calc.ts +++ b/A00_Common/design/design_structure_ford_calc.ts @@ -17,7 +17,7 @@ import { fordSection } from "../../B05_Profile/B05_Profile_UI_Drainage_Facility_Fields"; import type { SpecForm } from "./design_structure_form"; -import type { SpecContainer, SpecItem } from "./design_structure_spec"; +import type { SpecContainer, SpecItem } from "./logic/design_structure_spec"; /** 월류 폭(m) → 필요 월류 높이(m) · 0.01 m 올림. 유량 · 폭이 없으면 null. */ export function fordHeightM(designFlowM3s: number | null, widthM: number): number | null { diff --git a/A00_Common/design/design_structure_form.ts b/A00_Common/design/design_structure_form.ts index 20014b367..1448cc72e 100644 --- a/A00_Common/design/design_structure_form.ts +++ b/A00_Common/design/design_structure_form.ts @@ -32,7 +32,7 @@ import { type SpecState, type SplitRole, type StructureSpec, -} from "./design_structure_spec"; +} from "./logic/design_structure_spec"; import { group, grid, diff --git a/A00_Common/design/design_structure_pipe_calc.ts b/A00_Common/design/design_structure_pipe_calc.ts index 3f8223d5c..ee2e6a242 100644 --- a/A00_Common/design/design_structure_pipe_calc.ts +++ b/A00_Common/design/design_structure_pipe_calc.ts @@ -11,8 +11,8 @@ import type { CrossSection } from "../../B06_Section/B06_Section_Api_Fetch"; import { computeStoredLayouts } from "../../B06_Section/B06_Section_Structure_Layouts"; -export { DEFAULT_BASIN_SHAPE } from "../../B06_Section/B06_Section_UI_Cross_Culvert_Basin"; -export { pipeLengthText } from "../../B06_Section/B06_Section_UI_Cross_Culvert_Const"; // 「8 m (7.6)」(225-1) +export { DEFAULT_BASIN_SHAPE } from "../../B06_Section/logic/B06_Section_UI_Cross_Culvert_Basin"; +export { pipeLengthText } from "../../B06_Section/logic/B06_Section_UI_Cross_Culvert_Const"; // 「8 m (7.6)」(225-1) import { PIPE_MATCH_M } from "./design_selection"; /** 횡단 측점 목록을 대는 곳 — 횡단 보기가 자료를 받으면 걸어 둠(종단만 연 동안은 없음). */ diff --git a/A00_Common/design/design_view_cross.ts b/A00_Common/design/design_view_cross.ts index 1abcf1a1b..85da53112 100644 --- a/A00_Common/design/design_view_cross.ts +++ b/A00_Common/design/design_view_cross.ts @@ -43,7 +43,10 @@ import { savingDesign } from "./design_save"; import { applyStructurePick } from "../../B06_Section/B06_Section_UI_Page_Structure_Pick"; import { bindCrossPick } from "../../B06_Section/B06_Section_UI_Page_Pick_Sync"; import { createSectionView } from "../../B06_Section/B06_Section_UI_Section_View"; -import { revetFormOf, revetWallSpec } from "../../B06_Section/B06_Section_UI_Cross_Culvert_Const"; +import { + revetFormOf, + revetWallSpec, +} from "../../B06_Section/logic/B06_Section_UI_Cross_Culvert_Const"; import { applyPipeOptionsToCache, type PipeOptionsContext, diff --git a/A00_Common/design/design_pipeline.ts b/A00_Common/design/logic/design_pipeline.ts similarity index 99% rename from A00_Common/design/design_pipeline.ts rename to A00_Common/design/logic/design_pipeline.ts index 7b2f1728a..df3f19950 100644 --- a/A00_Common/design/design_pipeline.ts +++ b/A00_Common/design/logic/design_pipeline.ts @@ -1,5 +1,5 @@ /* ============================================================================= - * A00_Common/design/design_pipeline.ts + * A00_Common/design/logic/design_pipeline.ts * 실시간 계산 묶음 하나(PLAN 344-4) — 조작마다 차례 번호(generation) +1 · 단계 사이마다 번호 * 확인 · 옛 번호 결과 버림 · 뒤 단계 요청은 AbortController 로 끊음. 계약(키 모양 · 단계 · deps) * = `design_pipeline_types.ts` 머리 주석. @@ -13,7 +13,7 @@ * 화면 · fetch · 세션은 단계 함수(주입) 몫 — 이 파일은 차례 · 버림 · 범위 · 기록만. * ========================================================================== */ -import type { DesignStore } from "./design_store"; +import type { DesignStore } from "../design_store"; import type { ChangeRange, ChangeSource, diff --git a/A00_Common/design/design_pipeline_stations.ts b/A00_Common/design/logic/design_pipeline_stations.ts similarity index 91% rename from A00_Common/design/design_pipeline_stations.ts rename to A00_Common/design/logic/design_pipeline_stations.ts index 851cd4d63..9dc61c492 100644 --- a/A00_Common/design/design_pipeline_stations.ts +++ b/A00_Common/design/logic/design_pipeline_stations.ts @@ -1,5 +1,5 @@ /* ============================================================================= - * A00_Common/design/design_pipeline_stations.ts + * A00_Common/design/logic/design_pipeline_stations.ts * 계산 묶음 stations 단계(PLAN 346-1) — 측점 계산은 `B05_Profile/logic/B05_Profile_Sections_Stations.ts` * (서버 `generate_sections` 짝) · 여기는 단계 꼴 · 범위 밖 앞 값 재사용만. * ========================================================================== */ @@ -8,12 +8,12 @@ import { buildStations, REUSE_MARGIN_M, type StationsOptions, -} from "../../B05_Profile/logic/B05_Profile_Sections_Stations"; +} from "../../../B05_Profile/logic/B05_Profile_Sections_Stations"; import type { PlanPipe, PlanStructure, PlanType, -} from "../../common_util/common_util_structure_station"; +} from "../../../common_util/common_util_structure_station"; import type { PipelineStation, StageContext, StageFn } from "./design_pipeline_types"; /** 범위 밖 측점은 앞 값(같은 열쇠 · 같은 자리)을 그대로 — 뒤 단계가 같은 객체로 「안 바뀜」을 앎. */ diff --git a/A00_Common/design/design_pipeline_types.ts b/A00_Common/design/logic/design_pipeline_types.ts similarity index 99% rename from A00_Common/design/design_pipeline_types.ts rename to A00_Common/design/logic/design_pipeline_types.ts index 74e08a4dd..d8fd3122c 100644 --- a/A00_Common/design/design_pipeline_types.ts +++ b/A00_Common/design/logic/design_pipeline_types.ts @@ -1,5 +1,5 @@ /* ============================================================================= - * A00_Common/design/design_pipeline_types.ts + * A00_Common/design/logic/design_pipeline_types.ts * 실시간 계산 묶음 **계약**(PLAN 344-4) — 키별 모양 · 단계 입력 · 출력. 다른 창(sub1 · sub2 · * sub3 · sub6 · sub8)은 이 모양대로 단계 함수를 만들어 `createDesignPipeline({ stages })` 에 넣음. * 계산 묶음 본체 = `design_pipeline.ts`. @@ -53,7 +53,7 @@ import type { AlignmentBase, AlignmentEdits, ProfileAlignment, -} from "../../B05_Profile/B05_Profile_UI_Profile_Alignment"; +} from "../../../B05_Profile/logic/B05_Profile_UI_Profile_Alignment"; /** 평면 좌표(m) — 도면 좌표계 x · y. */ export type Vertex = [number, number]; diff --git a/A00_Common/design/design_profile_free.ts b/A00_Common/design/logic/design_profile_free.ts similarity index 98% rename from A00_Common/design/design_profile_free.ts rename to A00_Common/design/logic/design_profile_free.ts index 9a35981fb..4bb03c965 100644 --- a/A00_Common/design/design_profile_free.ts +++ b/A00_Common/design/logic/design_profile_free.ts @@ -1,5 +1,5 @@ /* ============================================================================= - * A00_Common/design/design_profile_free.ts + * A00_Common/design/logic/design_profile_free.ts * 종단 [자유지정] 계산 — 범위 · 클릭 점 · 측점선 붙음 · 높이 변환 · 기울기 판정 · 적용(215-1). * * 흐름: 세로 측점선 둘로 범위를 고름 → 시작(또는 끝) 세로선 근처 클릭 = 그 측점 계획고에 이은 @@ -17,16 +17,16 @@ import type { AlignmentBase, AlignmentEdits, ProfileAlignment, -} from "../../B05_Profile/B05_Profile_UI_Profile_Alignment"; +} from "../../../B05_Profile/logic/B05_Profile_UI_Profile_Alignment"; import { buildAlignment, chainageKey, controlElevationAt, -} from "../../B05_Profile/B05_Profile_UI_Profile_Alignment"; +} from "../../../B05_Profile/logic/B05_Profile_UI_Profile_Alignment"; import { baseElevationAt, defaultCurveLength, -} from "../../B05_Profile/B05_Profile_UI_Profile_Straighten"; +} from "../../../B05_Profile/logic/B05_Profile_UI_Profile_Straighten"; /** 두 chainage 를 같은 측점으로 볼 허용 오차(m). */ const SAME_M = 1e-6; diff --git a/A00_Common/design/design_structure_box.ts b/A00_Common/design/logic/design_structure_box.ts similarity index 100% rename from A00_Common/design/design_structure_box.ts rename to A00_Common/design/logic/design_structure_box.ts diff --git a/A00_Common/design/design_structure_ford.ts b/A00_Common/design/logic/design_structure_ford.ts similarity index 100% rename from A00_Common/design/design_structure_ford.ts rename to A00_Common/design/logic/design_structure_ford.ts diff --git a/A00_Common/design/design_structure_ford_pavement.ts b/A00_Common/design/logic/design_structure_ford_pavement.ts similarity index 100% rename from A00_Common/design/design_structure_ford_pavement.ts rename to A00_Common/design/logic/design_structure_ford_pavement.ts diff --git a/A00_Common/design/design_structure_guard.ts b/A00_Common/design/logic/design_structure_guard.ts similarity index 100% rename from A00_Common/design/design_structure_guard.ts rename to A00_Common/design/logic/design_structure_guard.ts diff --git a/A00_Common/design/design_structure_pipe.ts b/A00_Common/design/logic/design_structure_pipe.ts similarity index 98% rename from A00_Common/design/design_structure_pipe.ts rename to A00_Common/design/logic/design_structure_pipe.ts index 9f1371201..128cf4e88 100644 --- a/A00_Common/design/design_structure_pipe.ts +++ b/A00_Common/design/logic/design_structure_pipe.ts @@ -18,7 +18,7 @@ import { BOX_SPEC } from "./design_structure_box"; import { FORD_SPEC } from "./design_structure_ford"; import { FORD_PAVEMENT_SPEC } from "./design_structure_ford_pavement"; import { ETC_SPEC, PAVEMENT_SPEC } from "./design_structure_road"; -import { baseType } from "../../common_util/common_util_structure_catalog"; +import { baseType } from "../../../common_util/common_util_structure_catalog"; const SOIL = "기슭막이"; // 저장 값(옛 키 그대로) — 화면 이름은 흙막이 const BASIN = "집수정"; diff --git a/A00_Common/design/design_structure_road.ts b/A00_Common/design/logic/design_structure_road.ts similarity index 100% rename from A00_Common/design/design_structure_road.ts rename to A00_Common/design/logic/design_structure_road.ts diff --git a/A00_Common/design/design_structure_slope_tier.ts b/A00_Common/design/logic/design_structure_slope_tier.ts similarity index 100% rename from A00_Common/design/design_structure_slope_tier.ts rename to A00_Common/design/logic/design_structure_slope_tier.ts diff --git a/A00_Common/design/design_structure_spec.ts b/A00_Common/design/logic/design_structure_spec.ts similarity index 100% rename from A00_Common/design/design_structure_spec.ts rename to A00_Common/design/logic/design_structure_spec.ts diff --git a/A00_Common/design/design_structure_widening.ts b/A00_Common/design/logic/design_structure_widening.ts similarity index 100% rename from A00_Common/design/design_structure_widening.ts rename to A00_Common/design/logic/design_structure_widening.ts diff --git a/B04_PreProcess/B04_PreProcess_UI_Basins.ts b/B04_PreProcess/B04_PreProcess_UI_Basins.ts index 39b93d257..408614e69 100644 --- a/B04_PreProcess/B04_PreProcess_UI_Basins.ts +++ b/B04_PreProcess/B04_PreProcess_UI_Basins.ts @@ -39,7 +39,7 @@ import { pointAtChainage, resampleRoute, type RoutePoint, -} from "./B04_PreProcess_UI_RouteSamples"; +} from "./logic/B04_PreProcess_UI_RouteSamples"; import { PIPE_MATCH_M } from "../A00_Common/design/design_selection"; function L(key: keyof typeof ui_locales): string { diff --git a/B04_PreProcess/B04_PreProcess_UI_FlowRamp.ts b/B04_PreProcess/B04_PreProcess_UI_FlowRamp.ts index fb64a8e9a..aa777a11e 100644 --- a/B04_PreProcess/B04_PreProcess_UI_FlowRamp.ts +++ b/B04_PreProcess/B04_PreProcess_UI_FlowRamp.ts @@ -11,7 +11,7 @@ import "@ui/ui_template_flow_legend.css"; import { currentLanguageIndex, ui_locales } from "@ui/ui_template_locale"; import { themeColor } from "@ui/ui_template_palette"; -import type { RoutePoint } from "./B04_PreProcess_UI_RouteSamples"; +import type { RoutePoint } from "./logic/B04_PreProcess_UI_RouteSamples"; /** 강도 색띠 — 파랑(적음) → 빨강(많음). 정의처는 `ui_template_theme.css`. */ const RAMP_TOKENS: ReadonlyArray<[name: string, fallback: string]> = [ diff --git a/B04_PreProcess/B04_PreProcess_UI_FlowStrength.ts b/B04_PreProcess/B04_PreProcess_UI_FlowStrength.ts index 80499ab85..a6c6ea3bf 100644 --- a/B04_PreProcess/B04_PreProcess_UI_FlowStrength.ts +++ b/B04_PreProcess/B04_PreProcess_UI_FlowStrength.ts @@ -27,7 +27,11 @@ import { normalizeStrength, rampColor, } from "./B04_PreProcess_UI_FlowRamp"; -import { pointAtChainage, resampleRoute, type RoutePoint } from "./B04_PreProcess_UI_RouteSamples"; +import { + pointAtChainage, + resampleRoute, + type RoutePoint, +} from "./logic/B04_PreProcess_UI_RouteSamples"; function L(key: keyof typeof ui_locales): string { return ui_locales[key][currentLanguageIndex]; diff --git a/B04_PreProcess/B04_PreProcess_UI_MapViewer.ts b/B04_PreProcess/B04_PreProcess_UI_MapViewer.ts index edb6cbf2a..cf4ec2f40 100644 --- a/B04_PreProcess/B04_PreProcess_UI_MapViewer.ts +++ b/B04_PreProcess/B04_PreProcess_UI_MapViewer.ts @@ -41,7 +41,7 @@ import { type PreparedLayer, type ViewState, } from "./B04_PreProcess_UI_MapRender"; -import { prepareLayer, prepareMetricPolyline } from "./B04_PreProcess_UI_MapRender_Prepare"; +import { prepareLayer, prepareMetricPolyline } from "./logic/B04_PreProcess_UI_MapRender_Prepare"; import { drawStationTicks } from "./B04_PreProcess_UI_MapOverlays"; import type { WatershedAnalysis } from "./B04_PreProcess_Api_Fetch"; diff --git a/B04_PreProcess/B04_PreProcess_UI_MapRender_Prepare.ts b/B04_PreProcess/logic/B04_PreProcess_UI_MapRender_Prepare.ts similarity index 99% rename from B04_PreProcess/B04_PreProcess_UI_MapRender_Prepare.ts rename to B04_PreProcess/logic/B04_PreProcess_UI_MapRender_Prepare.ts index 149cfeea0..5eca0fcaa 100644 --- a/B04_PreProcess/B04_PreProcess_UI_MapRender_Prepare.ts +++ b/B04_PreProcess/logic/B04_PreProcess_UI_MapRender_Prepare.ts @@ -8,7 +8,7 @@ * 순환 참조가 생기지 않는다. * ========================================================================== */ -import type { VWorldMeta } from "./B04_PreProcess_Api_Fetch"; +import type { VWorldMeta } from "../B04_PreProcess_Api_Fetch"; import type { GeoJsonCollection, GeoJsonGeometry, @@ -16,7 +16,7 @@ import type { PreparedFeature, PreparedLayer, PreparedPart, -} from "./B04_PreProcess_UI_MapRender"; +} from "../B04_PreProcess_UI_MapRender"; function isPoint(value: unknown): value is [number, number] { return Array.isArray(value) && typeof value[0] === "number" && typeof value[1] === "number"; diff --git a/B04_PreProcess/B04_PreProcess_UI_RouteSamples.ts b/B04_PreProcess/logic/B04_PreProcess_UI_RouteSamples.ts similarity index 100% rename from B04_PreProcess/B04_PreProcess_UI_RouteSamples.ts rename to B04_PreProcess/logic/B04_PreProcess_UI_RouteSamples.ts diff --git a/B05_Profile/B05_Profile_Api_HaulPlan.ts b/B05_Profile/B05_Profile_Api_HaulPlan.ts index b4813838a..acfa2e943 100644 --- a/B05_Profile/B05_Profile_Api_HaulPlan.ts +++ b/B05_Profile/B05_Profile_Api_HaulPlan.ts @@ -12,7 +12,7 @@ import { API_BASE_URL } from "@config/config_frontend"; import type { HaulPlan } from "@util/common_util_mass_haul_balance"; -import type { StageContext } from "../A00_Common/design/design_pipeline_types"; +import type { StageContext } from "../A00_Common/design/logic/design_pipeline_types"; import type { MassHaulStageOutput } from "./logic/B05_Profile_MassHaul_Stage"; /** 서버가 돌려주는 배분 한 벌 — **화면이 쓰는 꼴 그대로**라 그리기 코드가 손대지 않는다. diff --git a/B05_Profile/B05_Profile_Api_Replan.ts b/B05_Profile/B05_Profile_Api_Replan.ts index 40ac0fbba..d6626e02e 100644 --- a/B05_Profile/B05_Profile_Api_Replan.ts +++ b/B05_Profile/B05_Profile_Api_Replan.ts @@ -18,7 +18,7 @@ import { API_BASE_URL } from "@config/config_frontend"; import { readState, writeState } from "../A00_Common/b_page_state"; import { heightAt } from "../common_util/common_util_surface_sampler"; import { loadDesignTerrainGrid } from "./B05_Profile_Api_TerrainGrid"; -import type { RouteDraft } from "../A00_Common/design/design_pipeline_types"; +import type { RouteDraft } from "../A00_Common/design/logic/design_pipeline_types"; /** 편집 창 분석 지형 — las = 확정 지표면(라이다) · sheet = 수치지형도 서피스. */ export type AnalysisTerrain = "las" | "sheet"; diff --git a/B05_Profile/B05_Profile_Api_Structures.ts b/B05_Profile/B05_Profile_Api_Structures.ts index 0a89149af..005ac7089 100644 --- a/B05_Profile/B05_Profile_Api_Structures.ts +++ b/B05_Profile/B05_Profile_Api_Structures.ts @@ -23,7 +23,7 @@ import { type DefinedSpot, type StructureDefinition, withDefinition, -} from "./B05_Profile_UI_Structures_Define"; +} from "./logic/B05_Profile_UI_Structures_Define"; /** 배치형태 — 점형(측점 1개) / 구간형(시~종점) / 부지형(위치+면적). */ export type StructurePlacement = "point" | "interval" | "site"; diff --git a/B05_Profile/B05_Profile_Route_Save.py b/B05_Profile/B05_Profile_Route_Save.py index 9354d5d44..8207b29ca 100644 --- a/B05_Profile/B05_Profile_Route_Save.py +++ b/B05_Profile/B05_Profile_Route_Save.py @@ -4,7 +4,7 @@ API — `POST /api/projects/{id}/route/replan`(`B05_Profile_Router_Replan.replan_route`): 요청 `RouteSaveRequest` = 옛 칸(`vertices` · `initial` · `balanced_profile` · `terrain` · `station_snap`) + - `draft` — 계약 `RouteDraft`(`A00_Common/design/design_pipeline_types.ts`) 그대로 + `draft` — 계약 `RouteDraft`(`A00_Common/design/logic/design_pipeline_types.ts`) 그대로 `{rev, nodes: [[x, y]…], curveOn: [bool…], curveRadius: [m | null…], curveLock, curveArc, stationSnap, terrain}` · 오면 `vertices` · `station_snap` · `terrain` 대신 이것. `as_initial` — 추천 노선 [적용](초기값 다시 뜸) · 손으로 고친 노선 저장은 false(초기값 그대로). diff --git a/B05_Profile/B05_Profile_UI_Corridor_Build.ts b/B05_Profile/B05_Profile_UI_Corridor_Build.ts index 518edba60..610c8a0e9 100644 --- a/B05_Profile/B05_Profile_UI_Corridor_Build.ts +++ b/B05_Profile/B05_Profile_UI_Corridor_Build.ts @@ -38,20 +38,20 @@ import { lerpPoints, slerpLeft, type PieceControl, -} from "./B05_Profile_UI_Corridor_Frames"; +} from "./logic/B05_Profile_UI_Corridor_Frames"; import { buildCorridorStructures, type RouteFrame } from "./B05_Profile_UI_Corridor_Structures"; export type { CorridorStructure, StructureFrame } from "./B05_Profile_UI_Corridor_Structures"; import type { CorridorBuildResult, CorridorCap, CorridorRibbon, -} from "./B05_Profile_UI_Corridor_Build_Types"; +} from "./logic/B05_Profile_UI_Corridor_Build_Types"; // 결과 자료형은 `_Build_Types` 에 있다(2026-09-02 분리) — 호출부 경로 유지를 위해 재수출. export type { CorridorBuildResult, CorridorCap, CorridorRibbon, -} from "./B05_Profile_UI_Corridor_Build_Types"; +} from "./logic/B05_Profile_UI_Corridor_Build_Types"; import { structureSilhouettes } from "./B05_Profile_UI_Corridor_Station_Structure"; /** 종방향 세분 간격(m) — 곡선 각짐 방지(2026-08-23 사용자: 노선 폴리라인 따라 세분). diff --git a/B05_Profile/B05_Profile_UI_Corridor_Deform_Structure.ts b/B05_Profile/B05_Profile_UI_Corridor_Deform_Structure.ts index 605a28595..a4f5dfa6b 100644 --- a/B05_Profile/B05_Profile_UI_Corridor_Deform_Structure.ts +++ b/B05_Profile/B05_Profile_UI_Corridor_Deform_Structure.ts @@ -10,7 +10,7 @@ import type { CrossSection } from "../B06_Section/B06_Section_Api_Fetch"; import type { CorridorStructure } from "./B05_Profile_UI_Corridor_Structures"; import { structureSilhouettes } from "./B05_Profile_UI_Corridor_Station_Structure"; -import type { DeformLimit, DeformSide } from "./B05_Profile_UI_Corridor_Deform"; +import type { DeformLimit, DeformSide } from "./logic/B05_Profile_UI_Corridor_Deform"; /** 측점 프레임 축(모델 좌표) — 중심 · 좌향 단위 벡터. */ interface StationAxis { diff --git a/B05_Profile/B05_Profile_UI_Corridor_Envelope.ts b/B05_Profile/B05_Profile_UI_Corridor_Envelope.ts index 3530d33cc..ab489928a 100644 --- a/B05_Profile/B05_Profile_UI_Corridor_Envelope.ts +++ b/B05_Profile/B05_Profile_UI_Corridor_Envelope.ts @@ -12,7 +12,10 @@ import type { SectionDetailResponse } from "../B06_Section/B06_Section_Api_Fetch"; import type { RoutePoint } from "./B05_Profile_Api_Fetch"; -import type { CorridorBuildResult, CorridorRibbon } from "./B05_Profile_UI_Corridor_Build_Types"; +import type { + CorridorBuildResult, + CorridorRibbon, +} from "./logic/B05_Profile_UI_Corridor_Build_Types"; import { structureHashParts } from "./B05_Profile_UI_Corridor_Structures"; /** diff --git a/B05_Profile/B05_Profile_UI_Corridor_Loft.ts b/B05_Profile/B05_Profile_UI_Corridor_Loft.ts index 6830e7acd..cb6a38fc1 100644 --- a/B05_Profile/B05_Profile_UI_Corridor_Loft.ts +++ b/B05_Profile/B05_Profile_UI_Corridor_Loft.ts @@ -16,10 +16,10 @@ import type * as THREE from "three"; import type { ModelBounds } from "./B05_Profile_UI_Markers"; -import type { CorridorBuildResult } from "./B05_Profile_UI_Corridor_Build_Types"; +import type { CorridorBuildResult } from "./logic/B05_Profile_UI_Corridor_Build_Types"; import type { TerrainBandSplit } from "./B05_Profile_UI_Corridor_Split"; import type { TerrainHeightIndex } from "./B05_Profile_UI_Corridor_Terrain"; -import { roadRows } from "./B05_Profile_UI_Corridor_Deform"; +import { roadRows } from "./logic/B05_Profile_UI_Corridor_Deform"; import { noFillLimits } from "./B05_Profile_UI_Corridor_Deform_Structure"; import { tinTerrain, type TinDesigner, type TinStats } from "./B05_Profile_UI_Corridor_Tin"; import { @@ -27,7 +27,7 @@ import { SECTION_STEP_M, structureTopLoops, type TinDesign, -} from "./B05_Profile_UI_Corridor_Tin_Design"; +} from "./logic/B05_Profile_UI_Corridor_Tin_Design"; import { EDGE_ANCHOR, EDGE_DESIGN, @@ -39,7 +39,7 @@ import { TAG_CUT, TAG_FILL, TAG_HOLE, -} from "./B05_Profile_UI_Corridor_Tin_Pslg"; +} from "./logic/B05_Profile_UI_Corridor_Tin_Pslg"; import { arcFractions, atFraction, @@ -50,8 +50,8 @@ import { stationLofts, } from "./B05_Profile_UI_Corridor_Loft_Profile"; import { smoothSlopeNormals } from "./B05_Profile_UI_Corridor_Loft_Shade"; -import { gauss, pinBack, smoothToe } from "./B05_Profile_UI_Corridor_Loft_Toe"; -import { taubin, type GridRow } from "./B05_Profile_UI_Corridor_Loft_Grid"; +import { gauss, pinBack, smoothToe } from "./logic/B05_Profile_UI_Corridor_Loft_Toe"; +import { taubin, type GridRow } from "./logic/B05_Profile_UI_Corridor_Loft_Grid"; // ponytail: 이보다 짧은 비탈은 없는 것으로(10 cm) — 부채꼴 끝 0.2 m 행 사이 실오라기 삼각형을 막음. const MIN_SLOPE_M = 0.1; diff --git a/B05_Profile/B05_Profile_UI_Corridor_Station_Structure.ts b/B05_Profile/B05_Profile_UI_Corridor_Station_Structure.ts index 13b7a6c7e..8a22ff43b 100644 --- a/B05_Profile/B05_Profile_UI_Corridor_Station_Structure.ts +++ b/B05_Profile/B05_Profile_UI_Corridor_Station_Structure.ts @@ -21,7 +21,7 @@ import { fordLayoutOf, wallSpanOf, } from "./B05_Profile_UI_Corridor_Structures"; -import { groundInterpolator } from "../B06_Section/B06_Section_UI_Cross_Culvert_Solve"; +import { groundInterpolator } from "../B06_Section/logic/B06_Section_UI_Cross_Culvert_Solve"; /** 한 측의 구조물 실루엣 — 비탈 조각을 이걸로 갈아 끼운다. */ export interface StructureSilhouette { diff --git a/B05_Profile/B05_Profile_UI_Corridor_Structures.ts b/B05_Profile/B05_Profile_UI_Corridor_Structures.ts index 9365f237b..fbdeb6050 100644 --- a/B05_Profile/B05_Profile_UI_Corridor_Structures.ts +++ b/B05_Profile/B05_Profile_UI_Corridor_Structures.ts @@ -20,7 +20,7 @@ * 폴리곤을 갈아 끼워(`polygons`) 측점 사이를 Catmull-Rom으로 잇는다. 벽은 여전히 하나다. * ========================================================================== */ -import { structureHashParts, wallSweepAt } from "./B05_Profile_UI_Corridor_Structures_Hash"; +import { structureHashParts, wallSweepAt } from "./logic/B05_Profile_UI_Corridor_Structures_Hash"; import type { CrossSection, CulvertSideSpec } from "../B06_Section/B06_Section_Api_Fetch"; import { computeCulvertLayout } from "../B06_Section/B06_Section_UI_Cross_Culvert"; import { @@ -29,7 +29,7 @@ import { restrictToSide, tierSpanOf, } from "../B06_Section/B06_Section_UI_Cross_Culvert_Wire"; -import { pipeWallThicknessM } from "../B06_Section/B06_Section_UI_Cross_Culvert_Const"; +import { pipeWallThicknessM } from "../B06_Section/logic/B06_Section_UI_Cross_Culvert_Const"; import type { CulvertLayout } from "../B06_Section/B06_Section_UI_Cross_Culvert"; import { computeFordLayout, fordAdjustOf } from "../B06_Section/B06_Section_UI_Cross_Ford"; import type { FordLayout } from "../B06_Section/B06_Section_UI_Cross_Ford"; @@ -42,7 +42,7 @@ import { import type { SectionPolygon } from "./B05_Profile_UI_Corridor_Structures_Box"; import { computeBoxLayout, DEFAULT_BOX_SIDE_ADJUST } from "../B06_Section/B06_Section_UI_Cross_Box"; import type { BoxAdjust, BoxLayout } from "../B06_Section/B06_Section_UI_Cross_Box"; -import { buildWingSolids } from "./B05_Profile_UI_Corridor_Structures_Wing"; +import { buildWingSolids } from "./logic/B05_Profile_UI_Corridor_Structures_Wing"; import { buildWallPath, detachedControlsOf, @@ -54,7 +54,7 @@ import { computeRevetmentLayout } from "../B06_Section/B06_Section_UI_Cross_Reve import { withoutGuardedFill } from "../B06_Section/B06_Section_UI_Cross_Body_Guard"; import { chuteBands, fordPavementChute } from "./B05_Profile_UI_Corridor_Structures_Chute"; import { isChuteSegment } from "../B06_Section/B06_Section_UI_Cross_Wall_Hatch"; -import { builds, culvertBody, ownsBody } from "./B05_Profile_UI_Corridor_Structures_Pick"; +import { builds, culvertBody, ownsBody } from "./logic/B05_Profile_UI_Corridor_Structures_Pick"; /** 스윕 프레임 하나 — 노선 위 한 지점의 중심 XY·좌향 단위벡터와 종단 표고 오프셋. */ export interface StructureFrame { @@ -695,4 +695,4 @@ export function buildCorridorStructures( } // 해시 요약은 `_Structures_Hash.ts` 에 있다(2026-09-02 분리) — 호출부 경로 유지를 위해 재수출. -export { structureHashParts } from "./B05_Profile_UI_Corridor_Structures_Hash"; +export { structureHashParts } from "./logic/B05_Profile_UI_Corridor_Structures_Hash"; diff --git a/B05_Profile/B05_Profile_UI_Corridor_Structures_Box.ts b/B05_Profile/B05_Profile_UI_Corridor_Structures_Box.ts index 01a49e1aa..347f64537 100644 --- a/B05_Profile/B05_Profile_UI_Corridor_Structures_Box.ts +++ b/B05_Profile/B05_Profile_UI_Corridor_Structures_Box.ts @@ -15,7 +15,7 @@ import type { CrossSection } from "../B06_Section/B06_Section_Api_Fetch"; import { computeBoxLayout } from "../B06_Section/B06_Section_UI_Cross_Box"; import type { BoxAdjust } from "../B06_Section/B06_Section_UI_Cross_Box"; import type { CorridorStructure, StructureFrame } from "./B05_Profile_UI_Corridor_Structures"; -import { buildWingSolids } from "./B05_Profile_UI_Corridor_Structures_Wing"; +import { buildWingSolids } from "./logic/B05_Profile_UI_Corridor_Structures_Wing"; import { chuteBands } from "./B05_Profile_UI_Corridor_Structures_Chute"; /** 단면 폴리곤 한 장 — [offset, elevation] 목록. */ diff --git a/B05_Profile/B05_Profile_UI_Corridor_Tin.ts b/B05_Profile/B05_Profile_UI_Corridor_Tin.ts index 8baab4e3e..865a4ffcf 100644 --- a/B05_Profile/B05_Profile_UI_Corridor_Tin.ts +++ b/B05_Profile/B05_Profile_UI_Corridor_Tin.ts @@ -14,11 +14,11 @@ import * as THREE from "three"; import type { ModelBounds } from "./B05_Profile_UI_Markers"; -import type { CorridorBuildResult } from "./B05_Profile_UI_Corridor_Build_Types"; +import type { CorridorBuildResult } from "./logic/B05_Profile_UI_Corridor_Build_Types"; import type { TerrainBandSplit } from "./B05_Profile_UI_Corridor_Split"; import type { TerrainHeightIndex } from "./B05_Profile_UI_Corridor_Terrain"; -import { CellRegion } from "./B05_Profile_UI_Corridor_Region"; -import type { TinDesign } from "./B05_Profile_UI_Corridor_Tin_Design"; +import { CellRegion } from "./logic/B05_Profile_UI_Corridor_Region"; +import type { TinDesign } from "./logic/B05_Profile_UI_Corridor_Tin_Design"; import { EDGE_TERRAIN, LoopIndex, @@ -28,7 +28,7 @@ import { TAG_FILL, TAG_TERRAIN, TriGrid, -} from "./B05_Profile_UI_Corridor_Tin_Pslg"; +} from "./logic/B05_Profile_UI_Corridor_Tin_Pslg"; /** 절토 · 성토 색 — 리본 색과 같은 값. */ const CUT_COLOR = new THREE.Color(0xb5179e); diff --git a/B05_Profile/B05_Profile_UI_Drainage_Facility.ts b/B05_Profile/B05_Profile_UI_Drainage_Facility.ts index 253be24d5..f2cf3a0dc 100644 --- a/B05_Profile/B05_Profile_UI_Drainage_Facility.ts +++ b/B05_Profile/B05_Profile_UI_Drainage_Facility.ts @@ -7,7 +7,7 @@ * 시설 종류는 구조물 배치의 "종류" 드롭다운이, 위치(시작·기준·종료 측점)는 위치 * 칸이 담당하므로 여기에는 부속 옵션 필드만 있다. * - * 배관 부속(PLAN 52-1): 사용자 구조물 표 01 명세 폼(`A00_Common/design/design_structure_pipe`) + * 배관 부속(PLAN 52-1): 사용자 구조물 표 01 명세 폼(`A00_Common/design/logic/design_structure_pipe`) * — 관 · 관 보호공(유입 · 유출) · 흙막이 추가 · 도수로/돌붙임 컨테이너. 저장 키는 옛 키 그대로 · * 옛 관종 · 날개벽 · 집수정 형식 칸은 화면에서 빠지고 값은 남음(지난 정의 값). * @@ -56,15 +56,15 @@ import { type SpecForm, type SpecLinks, } from "../A00_Common/design/design_structure_form"; -import { PIPE_SPEC } from "../A00_Common/design/design_structure_pipe"; +import { PIPE_SPEC } from "../A00_Common/design/logic/design_structure_pipe"; import { catalogRow } from "../common_util/common_util_structure_catalog"; import { BOX_SPEC, bodyOf, bodyOptions, boxOptionsIn, -} from "../A00_Common/design/design_structure_box"; -import { FORD_SPEC, withLegacyGuards } from "../A00_Common/design/design_structure_ford"; +} from "../A00_Common/design/logic/design_structure_box"; +import { FORD_SPEC, withLegacyGuards } from "../A00_Common/design/logic/design_structure_ford"; import { overflowSync } from "../A00_Common/design/design_structure_ford_calc"; import { pipeDrawn, @@ -78,7 +78,7 @@ import { type GroupItems, type SummaryItem, } from "../common_util/common_util_summary_item"; -import { FORD_PAVEMENT_SPEC } from "../A00_Common/design/design_structure_ford_pavement"; +import { FORD_PAVEMENT_SPEC } from "../A00_Common/design/logic/design_structure_ford_pavement"; import { createHiddenOptions } from "./B05_Profile_UI_Drainage_Facility_Hidden"; export type { InletStructureKind }; // 목록은 700줄 한계로 `_Fields` 로 옮김 — 부르던 곳은 그대로 diff --git a/B05_Profile/B05_Profile_UI_Drainage_Facility_Hidden.ts b/B05_Profile/B05_Profile_UI_Drainage_Facility_Hidden.ts index 5567822b7..0d97bf32d 100644 --- a/B05_Profile/B05_Profile_UI_Drainage_Facility_Hidden.ts +++ b/B05_Profile/B05_Profile_UI_Drainage_Facility_Hidden.ts @@ -11,7 +11,7 @@ * · 필수 검사는 이 폼에 없다(레지스트리 옵션 칸은 `renderOptionFields` 가 숨긴 칸을 뺌). * ========================================================================== */ -import { hiddenFormKeys } from "./B05_Profile_UI_Drainage_Facility_Merge"; +import { hiddenFormKeys } from "./logic/B05_Profile_UI_Drainage_Facility_Merge"; export interface HiddenOptions { /** 폼이 받은 옵션 — 숨긴 칸의 옛 값 보존용. `setFacility` 가 부른다. */ diff --git a/B05_Profile/B05_Profile_UI_Drainage_Live.ts b/B05_Profile/B05_Profile_UI_Drainage_Live.ts index 06cf8df7e..0714734cb 100644 --- a/B05_Profile/B05_Profile_UI_Drainage_Live.ts +++ b/B05_Profile/B05_Profile_UI_Drainage_Live.ts @@ -15,7 +15,7 @@ import { API_BASE_URL } from "@config/config_frontend"; import { createProgressCircle } from "@ui/ui_template_progress"; import { openModal } from "@ui/ui_template_modal"; import { readStateRaw, writeStateRaw } from "../A00_Common/b_page_state"; -import type { StageFn } from "../A00_Common/design/design_pipeline_types"; +import type { StageFn } from "../A00_Common/design/logic/design_pipeline_types"; import { computeDetailBasins, type DetailBasinResponse, diff --git a/B05_Profile/B05_Profile_UI_Drainage_Panel.ts b/B05_Profile/B05_Profile_UI_Drainage_Panel.ts index 8ce773bbb..ec29e8a39 100644 --- a/B05_Profile/B05_Profile_UI_Drainage_Panel.ts +++ b/B05_Profile/B05_Profile_UI_Drainage_Panel.ts @@ -24,16 +24,16 @@ import { import { prepareLayer, prepareMetricPolyline, -} from "../B04_PreProcess/B04_PreProcess_UI_MapRender_Prepare"; +} from "../B04_PreProcess/logic/B04_PreProcess_UI_MapRender_Prepare"; import { type RoutePoint } from "./B05_Profile_Api_Fetch"; import type { FlowArrow } from "../B04_PreProcess/B04_PreProcess_UI_FlowArrows"; import { buildStrengthArray } from "../B04_PreProcess/B04_PreProcess_UI_FlowRamp"; -import { resampleRoute } from "../B04_PreProcess/B04_PreProcess_UI_RouteSamples"; +import { resampleRoute } from "../B04_PreProcess/logic/B04_PreProcess_UI_RouteSamples"; import { batched, createPipeEditor } from "./B05_Profile_UI_Drainage_Pipes"; import { followMovedPipe, PIPE_MATCH_M } from "../A00_Common/design/design_pipe_ids"; import { snapStructureStation } from "../common_util/common_util_structure_station"; import { createFacilityStore } from "./B05_Profile_UI_Drainage_Facility"; -import { mergeFacilityOptions } from "./B05_Profile_UI_Drainage_Facility_Merge"; +import { mergeFacilityOptions } from "./logic/B05_Profile_UI_Drainage_Facility_Merge"; import { readPendingPipes, writePendingPipes } from "./B05_Profile_Api_Pipes_Draft"; import { buildPipeReports } from "./B05_Profile_UI_Drainage_Report"; import { fillFordHeights, fordWaitsOf, waitsFordHeight } from "./B05_Profile_UI_Drainage_Ford_Fill"; diff --git a/B05_Profile/B05_Profile_UI_Drainage_Panel_Types.ts b/B05_Profile/B05_Profile_UI_Drainage_Panel_Types.ts index cf31e5cb2..442b186c4 100644 --- a/B05_Profile/B05_Profile_UI_Drainage_Panel_Types.ts +++ b/B05_Profile/B05_Profile_UI_Drainage_Panel_Types.ts @@ -13,7 +13,7 @@ import type { FacilityAttributes } from "./B05_Profile_UI_Drainage_Facility"; import type { PipeFacility, PipeSource } from "../B04_PreProcess/B04_PreProcess_Api_Fetch"; import type { MapContextMenuItem } from "@ui/ui_template_context_menu"; import type { RouteSpanBand } from "./B05_Profile_UI_Drainage_Spans"; -import type { StageFn } from "../A00_Common/design/design_pipeline_types"; +import type { StageFn } from "../A00_Common/design/logic/design_pipeline_types"; export interface DrainagePanel { root: HTMLElement; diff --git a/B05_Profile/B05_Profile_UI_Drainage_Render.ts b/B05_Profile/B05_Profile_UI_Drainage_Render.ts index c50ea8138..706b7af6e 100644 --- a/B05_Profile/B05_Profile_UI_Drainage_Render.ts +++ b/B05_Profile/B05_Profile_UI_Drainage_Render.ts @@ -29,7 +29,7 @@ import { import type { DetailBasin, VWorldMeta } from "../B04_PreProcess/B04_PreProcess_Api_Fetch"; import { drawFlowArrows, type FlowArrow } from "../B04_PreProcess/B04_PreProcess_UI_FlowArrows"; import { drawStrengthLine } from "../B04_PreProcess/B04_PreProcess_UI_FlowRamp"; -import type { RoutePoint } from "../B04_PreProcess/B04_PreProcess_UI_RouteSamples"; +import type { RoutePoint } from "../B04_PreProcess/logic/B04_PreProcess_UI_RouteSamples"; import { basinColor, createMetricProjector, diff --git a/B05_Profile/B05_Profile_UI_Drainage_Spans.ts b/B05_Profile/B05_Profile_UI_Drainage_Spans.ts index 3b86acf97..e3de5596a 100644 --- a/B05_Profile/B05_Profile_UI_Drainage_Spans.ts +++ b/B05_Profile/B05_Profile_UI_Drainage_Spans.ts @@ -11,7 +11,7 @@ * 않는다. 이름은 안 적는다(종단에 이미 있고, 지도에 글자를 얹으면 눈금·유역 번호와 겹친다). * ========================================================================== */ -import type { RoutePoint } from "../B04_PreProcess/B04_PreProcess_UI_RouteSamples"; +import type { RoutePoint } from "../B04_PreProcess/logic/B04_PreProcess_UI_RouteSamples"; import type { StructureInstance, StructureType } from "./B05_Profile_Api_Structures"; /** 계획선 위에 얹을 구간 하나 — 누가거리 두 값과 색. */ diff --git a/B05_Profile/B05_Profile_UI_Page_Structures.ts b/B05_Profile/B05_Profile_UI_Page_Structures.ts index 0009778ff..39e67f418 100644 --- a/B05_Profile/B05_Profile_UI_Page_Structures.ts +++ b/B05_Profile/B05_Profile_UI_Page_Structures.ts @@ -30,7 +30,7 @@ import { import type { IrregularStation } from "./B05_Profile_UI_IrregularStations"; import type { createRoutePanel } from "./B05_Profile_UI_Panel"; import type { createRouteProfilePanel } from "./B05_Profile_UI_Profile_Panel"; -import { followedStation } from "./B05_Profile_UI_Profile_Alignment"; +import { followedStation } from "./logic/B05_Profile_UI_Profile_Alignment"; import { followSnapped } from "./B05_Profile_UI_Structures_Snap"; import { plantsStation } from "./B05_Profile_UI_Profile_Structures"; import { listPick } from "../common_util/common_util_structure_catalog"; diff --git a/B05_Profile/B05_Profile_UI_Profile_Balance.ts b/B05_Profile/B05_Profile_UI_Profile_Balance.ts index 16dbea888..03013d8e5 100644 --- a/B05_Profile/B05_Profile_UI_Profile_Balance.ts +++ b/B05_Profile/B05_Profile_UI_Profile_Balance.ts @@ -14,7 +14,7 @@ * 표시줄은 상태를 갖지 않는다 — 그릴 때마다 현재 선형·편집 상태를 인자로 받는다. * ========================================================================== */ -import type { ProfileAlignment } from "./B05_Profile_UI_Profile_Alignment"; +import type { ProfileAlignment } from "./logic/B05_Profile_UI_Profile_Alignment"; import type { MinCoverViolation } from "./B05_Profile_UI_Profile_MinCover"; export interface BalanceBarParams { diff --git a/B05_Profile/B05_Profile_UI_Profile_Edit.ts b/B05_Profile/B05_Profile_UI_Profile_Edit.ts index 2c653d574..108c60135 100644 --- a/B05_Profile/B05_Profile_UI_Profile_Edit.ts +++ b/B05_Profile/B05_Profile_UI_Profile_Edit.ts @@ -15,8 +15,8 @@ * 라벨에 가려 보이지 않기 때문이다. * ========================================================================== */ -import type { AlignmentEdits, ProfileAlignment } from "./B05_Profile_UI_Profile_Alignment"; -import { chainageKey, emptyEdits, hasEdits } from "./B05_Profile_UI_Profile_Alignment"; +import type { AlignmentEdits, ProfileAlignment } from "./logic/B05_Profile_UI_Profile_Alignment"; +import { chainageKey, emptyEdits, hasEdits } from "./logic/B05_Profile_UI_Profile_Alignment"; import { ALIGNMENT_DRAFT_KEY_PREFIX, draftProjectId, diff --git a/B05_Profile/B05_Profile_UI_Profile_Layout.ts b/B05_Profile/B05_Profile_UI_Profile_Layout.ts index cbf42e8ab..859c49c75 100644 --- a/B05_Profile/B05_Profile_UI_Profile_Layout.ts +++ b/B05_Profile/B05_Profile_UI_Profile_Layout.ts @@ -8,7 +8,7 @@ * ========================================================================== */ import { LONG_PAD } from "../B06_Section/B06_Section_UI_Section_Common"; -import { normalizedLongitudinal } from "./B05_Profile_UI_Profile_Data"; +import { normalizedLongitudinal } from "./logic/B05_Profile_UI_Profile_Data"; import { TABLE_TARGET_FONT_PX, tableCellWidthFor } from "./B05_Profile_UI_Profile_Table"; import type { LongitudinalSection, SectionStation } from "../B06_Section/B06_Section_Api_Fetch"; import { diff --git a/B05_Profile/B05_Profile_UI_Profile_MinCover.ts b/B05_Profile/B05_Profile_UI_Profile_MinCover.ts index e52f83b3c..f69067f2b 100644 --- a/B05_Profile/B05_Profile_UI_Profile_MinCover.ts +++ b/B05_Profile/B05_Profile_UI_Profile_MinCover.ts @@ -20,8 +20,8 @@ * ========================================================================== */ import { showToast } from "@ui/ui_template_elements"; -import { controlElevationAt } from "./B05_Profile_UI_Profile_Alignment"; -import type { AlignmentBase, ProfileAlignment } from "./B05_Profile_UI_Profile_Alignment"; +import { controlElevationAt } from "./logic/B05_Profile_UI_Profile_Alignment"; +import type { AlignmentBase, ProfileAlignment } from "./logic/B05_Profile_UI_Profile_Alignment"; import type { PipeFacility } from "../B04_PreProcess/B04_PreProcess_Api_Fetch"; diff --git a/B05_Profile/B05_Profile_UI_Profile_Panel_Tools.ts b/B05_Profile/B05_Profile_UI_Profile_Panel_Tools.ts index 46f861f58..8d173cd0f 100644 --- a/B05_Profile/B05_Profile_UI_Profile_Panel_Tools.ts +++ b/B05_Profile/B05_Profile_UI_Profile_Panel_Tools.ts @@ -15,8 +15,8 @@ import type { AlignmentBase, AlignmentEdits, ProfileAlignment, -} from "./B05_Profile_UI_Profile_Alignment"; -import { adjustStation } from "./B05_Profile_UI_Profile_Alignment"; +} from "./logic/B05_Profile_UI_Profile_Alignment"; +import { adjustStation } from "./logic/B05_Profile_UI_Profile_Alignment"; import { HOLD_DELAY_MS, HOLD_INTERVAL_MS } from "./B05_Profile_UI_Profile_Edit"; import { createProfileHistory, @@ -30,9 +30,9 @@ import { shiftStraightRuns, straightenBetween, tiltStraightRun, -} from "./B05_Profile_UI_Profile_Straighten"; +} from "./logic/B05_Profile_UI_Profile_Straighten"; import type { IrregularStation } from "./B05_Profile_UI_IrregularStations"; -import { createFreeDraw } from "../A00_Common/design/design_profile_free"; +import { createFreeDraw } from "../A00_Common/design/logic/design_profile_free"; import { createFreeView, type FreeChartGeom } from "../A00_Common/design/design_profile_free_view"; import { arrowsBelongToProfile } from "../B06_Section/B06_Section_UI_Cross_Panel_Base"; import { stepStructureStation } from "../common_util/common_util_structure_station"; diff --git a/B05_Profile/B05_Profile_UI_Profile_Preview.ts b/B05_Profile/B05_Profile_UI_Profile_Preview.ts index 4ed712a3b..5457feaf6 100644 --- a/B05_Profile/B05_Profile_UI_Profile_Preview.ts +++ b/B05_Profile/B05_Profile_UI_Profile_Preview.ts @@ -9,7 +9,7 @@ * 끌기 중에는 계속 호출되므로 디바운스하고, 늦게 온 응답은 seq 비교로 버린다. * ========================================================================== */ -import type { AlignmentEdits, ProfileAlignment } from "./B05_Profile_UI_Profile_Alignment"; +import type { AlignmentEdits, ProfileAlignment } from "./logic/B05_Profile_UI_Profile_Alignment"; import { holdScreenAlignment, refreshCrossDesigns } from "../B06_Section/B06_Section_Cross_Refresh"; import { staleChainages } from "../B06_Section/B06_Section_UI_Section_Common"; import type { SectionDetailResponse } from "../B06_Section/B06_Section_Api_Fetch"; diff --git a/B05_Profile/B05_Profile_UI_Profile_Render.ts b/B05_Profile/B05_Profile_UI_Profile_Render.ts index 60bca4a84..dc5f5ba8b 100644 --- a/B05_Profile/B05_Profile_UI_Profile_Render.ts +++ b/B05_Profile/B05_Profile_UI_Profile_Render.ts @@ -20,14 +20,14 @@ import { windowElevationRange, } from "../B06_Section/B06_Section_UI_Section_Common"; import type { SectionDetailResponse } from "../B06_Section/B06_Section_Api_Fetch"; -import { normalizedLongitudinal, toDesignProfile } from "./B05_Profile_UI_Profile_Data"; +import { normalizedLongitudinal, toDesignProfile } from "./logic/B05_Profile_UI_Profile_Data"; import { adjustStation, setCurveRadius, type AlignmentBase, type AlignmentEdits, type ProfileAlignment, -} from "./B05_Profile_UI_Profile_Alignment"; +} from "./logic/B05_Profile_UI_Profile_Alignment"; import { createEditOverlay } from "./B05_Profile_UI_Profile_Edit"; import { createRunHighlight } from "./B05_Profile_UI_Profile_RunHighlight"; import { diff --git a/B05_Profile/B05_Profile_UI_Profile_RunHighlight.ts b/B05_Profile/B05_Profile_UI_Profile_RunHighlight.ts index c8db8b66a..65e544fc8 100644 --- a/B05_Profile/B05_Profile_UI_Profile_RunHighlight.ts +++ b/B05_Profile/B05_Profile_UI_Profile_RunHighlight.ts @@ -12,8 +12,8 @@ * (`onYAxis`)에서 되짚는다 — 두 눈금의 (표고, y) 두 쌍이면 1차식이 정해진다. * ========================================================================== */ -import type { ProfileAlignment } from "./B05_Profile_UI_Profile_Alignment"; -import type { StraightRun } from "./B05_Profile_UI_Profile_Straighten"; +import type { ProfileAlignment } from "./logic/B05_Profile_UI_Profile_Alignment"; +import type { StraightRun } from "./logic/B05_Profile_UI_Profile_Straighten"; const SVG_NS = "http://www.w3.org/2000/svg"; /** 두 chainage를 같은 변화점으로 볼 허용 오차(m). */ diff --git a/B05_Profile/B05_Profile_UI_Profile_Table.ts b/B05_Profile/B05_Profile_UI_Profile_Table.ts index e1cb163fb..b48c66550 100644 --- a/B05_Profile/B05_Profile_UI_Profile_Table.ts +++ b/B05_Profile/B05_Profile_UI_Profile_Table.ts @@ -17,7 +17,7 @@ import type { AlignmentCurve, AlignmentSegment, ProfileAlignment, -} from "./B05_Profile_UI_Profile_Alignment"; +} from "./logic/B05_Profile_UI_Profile_Alignment"; import { stationLabel } from "../B06_Section/B06_Section_UI_Section_Common"; import { irregularStationId, diff --git a/B05_Profile/B05_Profile_UI_Profile_Tools.ts b/B05_Profile/B05_Profile_UI_Profile_Tools.ts index 35182c856..f14a0b087 100644 --- a/B05_Profile/B05_Profile_UI_Profile_Tools.ts +++ b/B05_Profile/B05_Profile_UI_Profile_Tools.ts @@ -14,8 +14,8 @@ * [자유지정] → 범위를 고르고 클릭으로 계획선을 잇는다(`design_profile_free` 몫 · 215-1). * ========================================================================== */ -import type { StraightRun } from "./B05_Profile_UI_Profile_Straighten"; -import { sameRun } from "./B05_Profile_UI_Profile_Straighten"; +import type { StraightRun } from "./logic/B05_Profile_UI_Profile_Straighten"; +import { sameRun } from "./logic/B05_Profile_UI_Profile_Straighten"; import type { FreeChartGeom } from "../A00_Common/design/design_profile_free_view"; export type ProfileToolMode = "none" | "straighten" | "shift" | "free"; diff --git a/B05_Profile/B05_Profile_UI_RouteEdit.ts b/B05_Profile/B05_Profile_UI_RouteEdit.ts index 186c5eff1..e13a17937 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit.ts @@ -41,7 +41,7 @@ import { buildEditedPolyline, type EditedCurve, type EditedNode, -} from "./B05_Profile_UI_RouteEdit_Curve"; +} from "./logic/B05_Profile_UI_RouteEdit_Curve"; import { drawRouteEditScene, polylineLengthM } from "./B05_Profile_UI_RouteEdit_Render"; import { bindNodeSplice, bindRouteEditNavigation } from "./B05_Profile_UI_RouteEdit_Input"; import { bindRouteEditPointer } from "./B05_Profile_UI_RouteEdit_Pointer"; @@ -61,7 +61,11 @@ import { viewPxPerMeter, } from "./B05_Profile_UI_RouteEdit_View"; import { createCurveBar } from "./B05_Profile_UI_RouteEdit_CurveBar"; -import { curveSpans, snapCurveStations, stationsAlong } from "./B05_Profile_UI_RouteEdit_Frame"; +import { + curveSpans, + snapCurveStations, + stationsAlong, +} from "./logic/B05_Profile_UI_RouteEdit_Frame"; import { lockColumn, readRouteLocks, @@ -76,7 +80,7 @@ import { flattenServerPlan, spliceNode, type CurveLock, -} from "./B05_Profile_UI_RouteEdit_Edits"; +} from "./logic/B05_Profile_UI_RouteEdit_Edits"; import { bindHistoryControls, createRouteEditHistory, diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Apply.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Apply.ts index bd43901b7..01405b58d 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Apply.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Apply.ts @@ -12,7 +12,7 @@ * ========================================================================== */ import { clearDrafts, clearResults } from "../A00_Common/b_page_state"; -import type { RouteDraft } from "../A00_Common/design/design_pipeline_types"; +import type { RouteDraft } from "../A00_Common/design/logic/design_pipeline_types"; import { useDesignStore } from "../A00_Common/design/design_store"; import { currentRoute, remountRoute } from "../A00_Common/router"; import { hideLoadingOverlay, showLoadingOverlay, showToast } from "@ui/ui_template_elements"; diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Contour.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Contour.ts index 709e616e8..41ad14506 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Contour.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Contour.ts @@ -21,7 +21,7 @@ import { import { prepareLayer, prepareMetricPolylines, -} from "../B04_PreProcess/B04_PreProcess_UI_MapRender_Prepare"; +} from "../B04_PreProcess/logic/B04_PreProcess_UI_MapRender_Prepare"; import type { VWorldMeta } from "../B04_PreProcess/B04_PreProcess_Api_Fetch"; /** 도엽 등고선의 표고 속성 이름 — B04 지도가 쓰는 것과 같은 키. */ diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Cross_Draw.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Cross_Draw.ts index 5d06c97c7..37c0a30e2 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Cross_Draw.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Cross_Draw.ts @@ -19,7 +19,7 @@ import { svgElement, svgText } from "@util/common_util_svg"; import type { ContentBounds } from "../A00_Common/b_svg_zoom_pan"; import type { CrossSection } from "./../B06_Section/B06_Section_Api_Fetch"; -import { fillSlopeLengths, toeOffsets } from "./../B06_Section/B06_Section_UI_Cross_Fit"; +import { fillSlopeLengths, toeOffsets } from "../B06_Section/logic/B06_Section_UI_Cross_Fit"; import type { CrossPreviewResponse } from "./B05_Profile_Api_Replan"; /** 그림 가장자리 여백(px) — 위는 범례 한 줄, 아래는 눈금 안내 한 줄 몫이다. */ diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_CurveBar.ts b/B05_Profile/B05_Profile_UI_RouteEdit_CurveBar.ts index 06483dc4b..b15278aa0 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_CurveBar.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_CurveBar.ts @@ -10,13 +10,13 @@ * 들고 간다. 두 벌로 두면 교각이 바뀔 때 서로 어긋난다(`_Edits.ts` 설명 참고). * ========================================================================== */ -import type { EditedCurve, EditedNode, Vertex } from "./B05_Profile_UI_RouteEdit_Curve"; +import type { EditedCurve, EditedNode, Vertex } from "./logic/B05_Profile_UI_RouteEdit_Curve"; import { curveOptionalAt, deflectionRad, radiusFloorM, type CurveLock, -} from "./B05_Profile_UI_RouteEdit_Edits"; +} from "./logic/B05_Profile_UI_RouteEdit_Edits"; import { centerDirectionOf, createCurveLabel, diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Draft.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Draft.ts index 8775940d4..a9fdd9ebe 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Draft.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Draft.ts @@ -13,7 +13,7 @@ * 초안은 `fromPage` 로 편집기 새 걸음이 됨. 사진첩이 없으면 편집기 사진 그대로. * ========================================================================== */ -import type { RouteDraft } from "../A00_Common/design/design_pipeline_types"; +import type { RouteDraft } from "../A00_Common/design/logic/design_pipeline_types"; import { pageHistory } from "./B05_Profile_UI_Profile_History"; import { sameLine, diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Footprint.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Footprint.ts index de4b89298..82faeb7d3 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Footprint.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Footprint.ts @@ -9,7 +9,7 @@ * ========================================================================== */ import { draftProjectId, useDesignStore } from "../A00_Common/design/design_store"; -import type { Vertex } from "./B05_Profile_UI_RouteEdit_Curve"; +import type { Vertex } from "./logic/B05_Profile_UI_RouteEdit_Curve"; import { type FootprintStrokeKind, type FootprintValue, diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Initial_Model.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Initial_Model.ts index 7199fa9b8..38346cfce 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Initial_Model.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Initial_Model.ts @@ -10,7 +10,7 @@ import type { RouteInitialLogic, RouteInitialWeights, } from "./B05_Profile_Api_RouteInitial"; -import { flattenServerPlan } from "./B05_Profile_UI_RouteEdit_Edits"; +import { flattenServerPlan } from "./logic/B05_Profile_UI_RouteEdit_Edits"; import type { RouteEditSnapshot } from "./B05_Profile_UI_RouteEdit_History"; import { parseBalance, type BalanceProfile } from "./B05_Profile_UI_RouteEdit_Recommend_Profile"; diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Input.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Input.ts index 4eef74ec3..910775aef 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Input.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Input.ts @@ -17,7 +17,7 @@ import { pickPx, wheelZoomsIn } from "../A00_Common/touch_bridge"; import { computeMaxScale, type ViewState } from "../B04_PreProcess/B04_PreProcess_UI_MapRender"; import type { VWorldMeta } from "../B04_PreProcess/B04_PreProcess_Api_Fetch"; import type { StationLabelBox } from "../B04_PreProcess/B04_PreProcess_UI_MapOverlays"; -import { curveArcVertices, type EditedCurve } from "./B05_Profile_UI_RouteEdit_Curve"; +import { curveArcVertices, type EditedCurve } from "./logic/B05_Profile_UI_RouteEdit_Curve"; /** 배수유역도와 같은 값 — 한 번에 얼마나 확대·축소할지. */ const ZOOM_IN_FACTOR = 1.15; diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Label.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Label.ts index 6a139feb2..b4bfdb3ca 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Label.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Label.ts @@ -22,11 +22,14 @@ import { createButton } from "@ui/ui_template_elements"; import { numberField, toggleButton } from "./B05_Profile_UI_Panel_Fields"; -import { CURVE_OPTIONAL_INNER_ANGLE_DEG, type CurveLock } from "./B05_Profile_UI_RouteEdit_Edits"; +import { + CURVE_OPTIONAL_INNER_ANGLE_DEG, + type CurveLock, +} from "./logic/B05_Profile_UI_RouteEdit_Edits"; // `deflectionRad` 는 화면을 안 만지는 셈이라 `_Edits.ts` 로 옮겼다(2026-09-12) — 순수 // 함수가 DOM 파일에 얹혀 있으면 시험이 화면째 들여와야 한다. 재수출로 부르던 자리를 지킨다. -export { deflectionRad } from "./B05_Profile_UI_RouteEdit_Edits"; +export { deflectionRad } from "./logic/B05_Profile_UI_RouteEdit_Edits"; /** 곡선 중심이 있는 **화면 방향**(단위벡터) — 패널을 그 반대쪽에 붙이는 데 쓴다. * diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Pointer.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Pointer.ts index 2da4c4f10..1f9dc33de 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Pointer.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Pointer.ts @@ -16,7 +16,7 @@ import { type EditedCurve, type EditedNode, type Vertex, -} from "./B05_Profile_UI_RouteEdit_Curve"; +} from "./logic/B05_Profile_UI_RouteEdit_Curve"; import { arcAtScreen, handleAtScreen, @@ -30,7 +30,7 @@ import { radiusFloorM, shortfallCrossed, type CurveLock, -} from "./B05_Profile_UI_RouteEdit_Edits"; +} from "./logic/B05_Profile_UI_RouteEdit_Edits"; /** 노드를 잡았다고 볼 거리(px). 손가락·마우스 모두 무리 없는 크기. */ const NODE_HIT_PX = 9; diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Render.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Render.ts index e3c70d476..11d93c8b1 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Render.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Render.ts @@ -24,10 +24,10 @@ import { drawStationTicks, type StationLabelBox, } from "../B04_PreProcess/B04_PreProcess_UI_MapOverlays"; -import type { EditedCurve, EditedNode, Vertex } from "./B05_Profile_UI_RouteEdit_Curve"; +import type { EditedCurve, EditedNode, Vertex } from "./logic/B05_Profile_UI_RouteEdit_Curve"; import { contourBandRect, setStationLabelBoxes } from "./B05_Profile_UI_RouteEdit_Input"; import type { CrossWatch } from "./B05_Profile_UI_RouteEdit_Cross"; -import { stationFrameAt } from "./B05_Profile_UI_RouteEdit_Frame"; +import { stationFrameAt } from "./logic/B05_Profile_UI_RouteEdit_Frame"; import type { MeasureMark } from "./B05_Profile_UI_RouteEdit_Measure"; import { stationLabel as formatStation } from "../common_util/common_util_station"; import { arcLocked, straightLocked } from "./B05_Profile_UI_RouteEdit_Lock"; diff --git a/B05_Profile/B05_Profile_UI_Structures_Define_Form.ts b/B05_Profile/B05_Profile_UI_Structures_Define_Form.ts index bce554803..13958c0b8 100644 --- a/B05_Profile/B05_Profile_UI_Structures_Define_Form.ts +++ b/B05_Profile/B05_Profile_UI_Structures_Define_Form.ts @@ -11,8 +11,8 @@ * ========================================================================== */ import type { StructureType } from "./B05_Profile_Api_Structures"; -import { ruleDefaults, ruleStates } from "./B05_Profile_UI_Structures_Define"; -import { isOptionVisible } from "./B05_Profile_UI_Structures_Summary"; +import { ruleDefaults, ruleStates } from "./logic/B05_Profile_UI_Structures_Define"; +import { isOptionVisible } from "./logic/B05_Profile_UI_Structures_Summary"; /** 시설 폼이 가릴 옵션 키 — 「구조물 옵션 보이기」에서 끈 것 + 정의 「안 씀」. */ export function hiddenOptionKeys(type: StructureType | null): string[] { diff --git a/B05_Profile/B05_Profile_UI_Structures_Fields.ts b/B05_Profile/B05_Profile_UI_Structures_Fields.ts index 82e43d2d8..4879405f3 100644 --- a/B05_Profile/B05_Profile_UI_Structures_Fields.ts +++ b/B05_Profile/B05_Profile_UI_Structures_Fields.ts @@ -7,8 +7,8 @@ * 저장은 누가거리(m), 화면 입출력만 측점번호+잔여거리. * ========================================================================== */ -import { chainageToStation, stationToChainage } from "./B05_Profile_Util_Station"; -import { DEFAULT_BASIN_SHAPE } from "../B06_Section/B06_Section_UI_Cross_Culvert_Basin"; +import { chainageToStation, stationToChainage } from "./logic/B05_Profile_Util_Station"; +import { DEFAULT_BASIN_SHAPE } from "../B06_Section/logic/B06_Section_UI_Cross_Culvert_Basin"; import { fillPipeHeights } from "../common_util/common_util_culvert_sets"; import { snapStructureStation } from "../common_util/common_util_structure_station"; diff --git a/B05_Profile/B05_Profile_UI_Structures_Groups.ts b/B05_Profile/B05_Profile_UI_Structures_Groups.ts index aac595a29..7c9c262e2 100644 --- a/B05_Profile/B05_Profile_UI_Structures_Groups.ts +++ b/B05_Profile/B05_Profile_UI_Structures_Groups.ts @@ -17,13 +17,13 @@ import { openItemPicker } from "@ui/ui_template_item_picker"; import { pipeStructureId } from "@ui/ui_template_item_picker_project"; import type { StructureType } from "./B05_Profile_Api_Structures"; -import { hiddenFormKeys } from "./B05_Profile_UI_Drainage_Facility_Merge"; +import { hiddenFormKeys } from "./logic/B05_Profile_UI_Drainage_Facility_Merge"; import { buildSummaryRow, type SummaryRow } from "./B05_Profile_UI_Structures_Summary_Row"; -import { isOptionVisible } from "./B05_Profile_UI_Structures_Summary"; -import { SHAPE_FIELDS, shapeFields, shapeKey } from "./B05_Profile_UI_Structures_Define"; +import { isOptionVisible } from "./logic/B05_Profile_UI_Structures_Summary"; +import { SHAPE_FIELDS, shapeFields, shapeKey } from "./logic/B05_Profile_UI_Structures_Define"; import { numberInput } from "./B05_Profile_UI_Structures_Fields"; import { grid, group as boxOf, labeled, stepper } from "./B05_Profile_UI_Drainage_Facility_Fields"; -import { specFor } from "../A00_Common/design/design_structure_pipe"; +import { specFor } from "../A00_Common/design/logic/design_structure_pipe"; import { GROUP_JOIN, type GroupItems, diff --git a/B05_Profile/B05_Profile_UI_Structures_List.ts b/B05_Profile/B05_Profile_UI_Structures_List.ts index 424ab6a62..9d30940a8 100644 --- a/B05_Profile/B05_Profile_UI_Structures_List.ts +++ b/B05_Profile/B05_Profile_UI_Structures_List.ts @@ -22,7 +22,7 @@ import { summaryTooltip, type SummaryItem, } from "../common_util/common_util_summary_item"; -import { specFor } from "../A00_Common/design/design_structure_pipe"; +import { specFor } from "../A00_Common/design/logic/design_structure_pipe"; import { PIPE_MATCH_M } from "../A00_Common/design/design_selection"; import { pipeExtraCount } from "../A00_Common/design/design_structure_pipe_calc"; import { @@ -30,9 +30,9 @@ import { isNone, linkOf, readState, -} from "../A00_Common/design/design_structure_spec"; -import { withLegacyGuards } from "../A00_Common/design/design_structure_ford"; -import { asRoad } from "./B05_Profile_UI_Structures_Define"; +} from "../A00_Common/design/logic/design_structure_spec"; +import { withLegacyGuards } from "../A00_Common/design/logic/design_structure_ford"; +import { asRoad } from "./logic/B05_Profile_UI_Structures_Define"; export interface StructureListParams { /** 목록을 담을