b7e6ff6915
Добавлена загрузка файлов перетаскиванием в блоки «Аудио игры», «Аудио сцены» и «Превью сцены»: подсветка зоны, подсказки, фильтрация по типу, импорт без диалога. IPC и main принимают пути файлов напрямую; для Electron 41 пути получаются через webUtils.getPathForFile в preload (File.path в renderer больше недоступен). Улучшен dev-запуск: Vite слушает 127.0.0.1, ожидание готовности по localhost. Co-authored-by: Cursor <cursoragent@cursor.com>
30 lines
722 B
TypeScript
30 lines
722 B
TypeScript
import { contextBridge, webUtils } from 'electron';
|
|
|
|
import type { IpcEventMap, IpcInvokeMap } from '../shared/ipc/contracts';
|
|
|
|
import { invoke, on } from './ipcClient';
|
|
|
|
export type DndApi = {
|
|
invoke: <K extends keyof IpcInvokeMap>(
|
|
channel: K,
|
|
payload: IpcInvokeMap[K]['req'],
|
|
) => Promise<IpcInvokeMap[K]['res']>;
|
|
on: <K extends keyof IpcEventMap>(channel: K, listener: (payload: IpcEventMap[K]) => void) => () => void;
|
|
getPathForFile: (file: File) => string;
|
|
};
|
|
|
|
const api: DndApi = {
|
|
invoke,
|
|
on,
|
|
getPathForFile: (file) => webUtils.getPathForFile(file),
|
|
};
|
|
|
|
contextBridge.exposeInMainWorld('dnd', api);
|
|
|
|
declare global {
|
|
var dnd: DndApi | undefined;
|
|
interface Window {
|
|
dnd: DndApi;
|
|
}
|
|
}
|