Phase 3 구현: 텍스트 삽입 + RecordingTip/ResultPopup + Settings

- TextInsertService: clipboard save→set→Ctrl+V→restore (@nut-tree-fork/nut-js)
- RecordingTip 팝업: 9개 웨이브바 cos분포, thinking 점근수렴, 2-phase 리사이즈
- ResultPopup 팝업: 복사 버튼, auto-close, 마우스 호버 유지, 다크모드
- WindowManager: 팝업 프리로딩, 커서 위치 표시, 멀티모니터 보정
- Settings 모달: General/Audio/STT/LLM 탭
- VoiceModeService: 전사 완료 시 자동 텍스트 삽입 + 팝업 연동
- electron-vite: 팝업 HTML 멀티 엔트리 + popup preload 빌드
This commit is contained in:
Yun Chan 2026-04-05 02:11:58 +09:00
parent 1d152d01a1
commit 517210af2f
16 changed files with 1366 additions and 10 deletions

21
src/preload/popup.ts Normal file
View file

@ -0,0 +1,21 @@
// src/preload/popup.ts
// 팝업 윈도우(RecordingTip, ResultPopup)용 최소 preload
import { contextBridge, ipcRenderer } from 'electron'
type Unsubscribe = () => void
const popupAPI = {
send: (channel: string, ...args: unknown[]): void => {
ipcRenderer.send(channel, ...args)
},
on: (channel: string, callback: (...args: unknown[]) => void): Unsubscribe => {
const handler = (_event: Electron.IpcRendererEvent, ...args: unknown[]) => callback(...args)
ipcRenderer.on(channel, handler)
return () => ipcRenderer.removeListener(channel, handler)
}
} as const
contextBridge.exposeInMainWorld('popupAPI', popupAPI)
export type PopupAPI = typeof popupAPI