Merge remote-tracking branch 'origin/sub_laptop_4' into main_laptop_1 — 588 단축키 등록부 · UI_Edit 충돌(sub1 고르기 · 속성 판 + sub4 keyIs) 양쪽 살림

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-29 19:24:37 +09:00
co-authored by Claude Opus 5.5
34 changed files with 1304 additions and 193 deletions
+3 -2
View File
@@ -18,6 +18,7 @@
* ========================================================================== */
import { createButton, showToast } from "@ui/ui_template_elements";
import { keyIs } from "../A00_Common/key_registry";
import { createInputField } from "@ui/ui_template_input";
import { createSegment } from "@ui/ui_template_segment";
import { createText } from "@ui/ui_template_text";
@@ -444,7 +445,7 @@ export function createPlanDraw(params: PlanDrawParams): PlanDraw {
panelState();
},
key(event) {
if (mode === "draw" && event.key === "Enter") {
if (mode === "draw" && keyIs(event, "plan.drawFinish")) {
setMode("idle");
return true;
}
@@ -455,7 +456,7 @@ export function createPlanDraw(params: PlanDrawParams): PlanDraw {
setMode("idle");
return true;
}
if (mode === "draw" && active !== null && event.key === "Backspace") {
if (mode === "draw" && active !== null && keyIs(event, "plan.drawBack")) {
const network = params.network();
const step =
network.lines[active].vertices.length < 2
+2 -1
View File
@@ -18,6 +18,7 @@
import { showToast } from "@ui/ui_template_elements";
import { themeColor } from "@ui/ui_template_palette";
import { keyIs } from "../A00_Common/key_registry";
import {
distanceAlong,
lineLength,
@@ -527,7 +528,7 @@ export function createPlanEdit(params: PlanEditParams): PlanEdit {
lineIndex,
key(event) {
if (!selected || !params.enabled()) return false;
if (event.key === "Delete" && params.editable()) {
if (keyIs(event, "plan.delete") && params.editable()) {
dropSelected();
return true;
}
+9 -10
View File
@@ -32,6 +32,7 @@ import {
import { clearState, readState, writeState } from "../A00_Common/b_page_state";
import { currentProjectId } from "../A00_Common/b_project_switch";
import { mountGroupStep } from "../A00_Common/group_workflow";
import { keyIs } from "../A00_Common/key_registry";
import { fetchSessionUser } from "../A06_Login/A06_Login_Api_Fetch";
import { heightAt as gridHeightAt } from "../common_util/common_util_surface_sampler";
import {
@@ -513,16 +514,14 @@ export async function renderD03PlanAnalysis(root: HTMLElement): Promise<void> {
if (!root.isConnected) return window.removeEventListener("keydown", onKey);
const typing = (event.target as HTMLElement | null)?.closest?.("input, textarea, select");
if (typing || !editable) return;
const key = event.key.toLowerCase();
const ctrl = event.ctrlKey || event.metaKey;
const handled =
ctrl && key === "z" && !event.shiftKey
? (undo(), true)
: ctrl && (key === "y" || (key === "z" && event.shiftKey))
? (redo(), true)
: measuring && event.key === "Escape"
? (setMeasure(false), true)
: !ctrl && (draw.key(event) || edit.key(event));
// 키 = 등록부(588-3 · 한글 자판도 자판 자리로)
const handled = keyIs(event, "plan.undo")
? (undo(), true)
: keyIs(event, "plan.redo")
? (redo(), true)
: measuring && event.key === "Escape"
? (setMeasure(false), true)
: draw.key(event) || edit.key(event);
if (handled) {
event.preventDefault();
map.redraw();