diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx
index 50a418b..1cef8eb 100644
--- a/src/renderer/App.tsx
+++ b/src/renderer/App.tsx
@@ -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() {
+
+
{printOpen && setPrintOpen(false)} />}
>
diff --git a/src/renderer/components/modals/ModalLayer.tsx b/src/renderer/components/modals/ModalLayer.tsx
index 3d874a7..afc032e 100644
--- a/src/renderer/components/modals/ModalLayer.tsx
+++ b/src/renderer/components/modals/ModalLayer.tsx
@@ -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 ;
case 'find-in-files':
return ;
+ case 'crashReports':
+ return ;
}
}
\ No newline at end of file
diff --git a/src/renderer/stores/app-store.ts b/src/renderer/stores/app-store.ts
index e5de0c3..e2e74c5 100644
--- a/src/renderer/stores/app-store.ts
+++ b/src/renderer/stores/app-store.ts
@@ -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 extends { props: infer P } ? [props?: P] : []
) => void;
closeModal: () => void;
+ setFirstRun: (value: boolean) => void;
+ newBuffer: (content?: string) => void;
}
export const useAppStore = create()(
@@ -59,6 +63,7 @@ export const useAppStore = create()(
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()(
return { modal: candidate };
}),
closeModal: () => set({ modal: { kind: null } }),
+ setFirstRun: (value) => set({ firstRun: value }),
+ newBuffer: (_content?: string) => set({ firstRun: false }),
}),
{
name: 'mc-app-store',