feat(480 드롭다운): 마우스로 고른 뒤 한 박자 뒤 초점 뺌 — 키보드 고름 그대로 · 공용 진입 · CAD iframe · 종단 새 창 세 자리

- ui_template_native_menu.ts releaseSelectAfterPick — 창 캡처 pointerdown · keydown · change · 아직 그 select 에 초점일 때만 blur
- 시험 test_280_6_select_release 새로 · 옛 가짜 import 두 헬퍼(282-1 · 224-1c)에 새 함수 흉내

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-19 22:07:40 +09:00
co-authored by Claude Opus 5.5
parent afe6e4a799
commit 9a8ff3ee86
8 changed files with 163 additions and 7 deletions
@@ -9,6 +9,7 @@
* ========================================================================== */
import { showToast } from "@ui/ui_template_elements";
import { releaseSelectAfterPick } from "@ui/ui_template_native_menu";
import type { DesignProfile } from "./design_profile";
/** 메인 창 문서 · 창에 걸린 듣기가 받아야 할 새 창 이벤트. */
@@ -101,6 +102,8 @@ function attachPopout(profile: DesignProfile, spec: PopoutSpec): void {
true,
),
);
// 새 창 드롭다운도 고른 뒤 초점 뺌 — change 는 메인으로 안 넘김(요구 280-6).
releaseSelectAfterPick(next);
// 새 창이 초점을 잃으면 길게 누르기를 끊는다(메인 창 blur 듣기).
next.addEventListener("blur", () => window.dispatchEvent(new FocusEvent("blur")));
// 새 창 크기 기준으로 다시 맞춘다.
+7 -1
View File
@@ -13,7 +13,11 @@ import "./device_context"; // 맨 앞 — 그리기 전에 <html> 기기 표시(
import "./touch_bridge"; // 손가락 → 마우스 번역(기기대응 3-1)
import "@ui/ui_template_theme.css";
import { injectBaseStyles } from "@ui/ui_template_elements";
import { blockNativeMenu, NATIVE_MENU_ROUTE } from "@ui/ui_template_native_menu";
import {
blockNativeMenu,
NATIVE_MENU_ROUTE,
releaseSelectAfterPick,
} from "@ui/ui_template_native_menu";
import { initLoupe, LOUPE_ROUTE } from "@ui/ui_template_loupe";
import { ROUTES, type RoutePath } from "@config/config_frontend";
import { initThemeAndLang, injectShellStyles, renderShell } from "./app_shell";
@@ -58,6 +62,8 @@ function bootstrap(): void {
// B · M 페이지는 브라우저 기본 오른쪽 클릭 메뉴를 막음 — 우리 메뉴는 그대로(계획서 39-9a)
blockNativeMenu(window, () => NATIVE_MENU_ROUTE.test(currentRoute()));
// 드롭다운을 마우스로 고르면 초점 뺌 — 휠 · ↑↓ 가 값을 또 바꾸지 않게(요구 280-6)
releaseSelectAfterPick(window);
// B01~B09 · M01 · M02 돋보기 — 오른쪽 길게 누름 · Z 누름 동안(계획서 218-1 · 220)
initLoupe(window, () => LOUPE_ROUTE.test(currentRoute()));