feat(scenes): add scene darkness reveal and fix project reopen crash

Add darkenScene with Opening brush in presentation, persist reveal strokes per scene during a session, and close projects properly on return to home. Harden dnd asset streaming to avoid Windows main-process crashes when reopening projects.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ivan Fontosh
2026-07-02 19:41:26 +08:00
parent d54e9ed02d
commit 4631a1bece
19 changed files with 526 additions and 11 deletions
@@ -0,0 +1,31 @@
import { useEffect, useState } from 'react';
import { ipcChannels } from '../../../shared/ipc/contracts';
import type { SceneDarknessEvent, SceneDarknessState } from '../../../shared/types';
import { getDndApi } from '../dndApi';
export function useSceneDarknessState(): readonly [
SceneDarknessState | null,
{ dispatch: (event: SceneDarknessEvent) => Promise<void> },
] {
const api = getDndApi();
const [state, setState] = useState<SceneDarknessState | null>(null);
useEffect(() => {
void api.invoke(ipcChannels.sceneDarkness.getState, {}).then((r) => {
setState(r.state);
});
return api.on(ipcChannels.sceneDarkness.stateChanged, ({ state: next }) => {
setState(next);
});
}, [api]);
return [
state,
{
dispatch: async (event) => {
await api.invoke(ipcChannels.sceneDarkness.dispatch, { event });
},
},
] as const;
}