feat(renderer): mount UpdateBanner, FirstRunWizard, and CrashReportModal

This commit is contained in:
2026-06-08 06:43:40 +05:30
parent 691b00a2b8
commit 9b899b5205
3 changed files with 15 additions and 1 deletions
+4
View File
@@ -4,6 +4,8 @@ import { ModalLayer } from './components/modals/ModalLayer';
import { Toaster } from './components/ui/sonner';
import { ReplPanel } from './components/tools/ReplPanel';
import { PrintPreview } from './components/tools/PrintPreview';
import { UpdateBanner } from './components/UpdateBanner';
import { FirstRunWizard } from './components/FirstRunWizard';
import { useWelcomeTrigger } from './hooks/use-welcome-trigger';
function App() {
@@ -21,6 +23,8 @@ function App() {
<AppShell />
<ModalLayer />
<Toaster />
<UpdateBanner />
<FirstRunWizard />
<ReplPanel />
{printOpen && <PrintPreview onClose={() => setPrintOpen(false)} />}
</>
@@ -2,6 +2,7 @@ import { useAppStore } from '@/stores/app-store';
import { AboutDialog } from './AboutDialog';
import { AsciiGeneratorDialog } from './AsciiGeneratorDialog';
import { ConfirmDialog } from './ConfirmDialog';
import { CrashReportModal } from './CrashReportModal';
import { ExportBatchDialog } from './ExportBatchDialog';
import { ExportDocxDialog } from './ExportDocxDialog';
import { ExportHtmlDialog } from './ExportHtmlDialog';
@@ -41,5 +42,7 @@ export function ModalLayer() {
return <TableGeneratorDialog />;
case 'find-in-files':
return <FindInFilesDialog />;
case 'crashReports':
return <CrashReportModal onClose={useAppStore.getState().closeModal} />;
}
}
+8 -1
View File
@@ -30,7 +30,8 @@ export type ModalState =
| { kind: 'export-word'; props: { sourcePath: string } }
| { kind: 'ascii-generator' }
| { kind: 'table-generator' }
| { kind: 'find-in-files' };
| { kind: 'find-in-files' }
| { kind: 'crashReports' };
export type ModalKind = ModalState['kind'];
@@ -40,6 +41,7 @@ interface AppState {
zenMode: boolean;
paneSizes: PaneSizes;
modal: ModalState;
firstRun: boolean;
toggleSidebar: () => void;
togglePreview: () => void;
setZenMode: (value: boolean) => void;
@@ -49,6 +51,8 @@ interface AppState {
...args: Extract<ModalState, { kind: K }> extends { props: infer P } ? [props?: P] : []
) => void;
closeModal: () => void;
setFirstRun: (value: boolean) => void;
newBuffer: (content?: string) => void;
}
export const useAppStore = create<AppState>()(
@@ -59,6 +63,7 @@ export const useAppStore = create<AppState>()(
zenMode: false,
paneSizes: { sidebar: 20, editor: 50, preview: 30 },
modal: { kind: null },
firstRun: true,
toggleSidebar: () => set((s) => ({ sidebarVisible: !s.sidebarVisible })),
togglePreview: () => set((s) => ({ previewVisible: !s.previewVisible })),
setZenMode: (value) => set({ zenMode: value }),
@@ -69,6 +74,8 @@ export const useAppStore = create<AppState>()(
return { modal: candidate };
}),
closeModal: () => set({ modal: { kind: null } }),
setFirstRun: (value) => set({ firstRun: value }),
newBuffer: (_content?: string) => set({ firstRun: false }),
}),
{
name: 'mc-app-store',