- Ctrl+Alt+A/Z 맨 앞 창 통째 캡쳐(DWM 확장 프레임 경계), S/X 드래그 캡쳐. A/S 새 대화, Z/X 마지막 대화 - 캡쳐 후 창을 확실히 앞으로(AttachThreadInput), capture.image 에 목적지 path 실어 그 Composer 만 소비 - 드래그 선택영역 원본 밝기·더블버퍼(번쩍임) — code-assistant-v2 복사본에서 이식 - 단축키 Ctrl+Alt+Q/W: Eclipse·ADT·SAP GUI 바인딩 목록 대조해 비어 있는 조합으로 - 버튼 cursor:pointer(Tailwind v4), 가운데 스피너, 스니펫→챗 버튼, 스니펫 검색창 높이 84→88 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { useEffect } from "react"
|
|
import { useLocation, useNavigate, useRoutes } from "react-router-dom"
|
|
import { routes } from "./routes"
|
|
import { ErrorBoundary } from "./shared/components/ErrorBoundary"
|
|
import { initBridgeNavigate, setBridgeNavigate } from "@/lib/bridge/bridgeNavigate"
|
|
import { reportRoute } from "@/lib/bridge/webviewBridge"
|
|
import { DesktopWindowFrame } from "@/shared/components/DesktopWindowFrame"
|
|
|
|
export default function App() {
|
|
const element = useRoutes(routes)
|
|
const navigate = useNavigate()
|
|
const location = useLocation()
|
|
|
|
// C#가 navigate 푸시(예: Ctrl+Shift+7 → /snippet)를 보내면 이 콜백으로 라우팅.
|
|
useEffect(() => {
|
|
setBridgeNavigate(navigate)
|
|
initBridgeNavigate()
|
|
return () => setBridgeNavigate(null)
|
|
}, [navigate])
|
|
|
|
// route 바뀔 때마다 호스트에 보고 — C#가 마지막 챗봇 위치 기억(Ctrl+Alt+W 복귀용).
|
|
useEffect(() => {
|
|
reportRoute(location.pathname)
|
|
}, [location.pathname])
|
|
|
|
return (
|
|
<DesktopWindowFrame>
|
|
<ErrorBoundary>{element}</ErrorBoundary>
|
|
</DesktopWindowFrame>
|
|
)
|
|
}
|