create-ekka-desktop-app 0.3.6 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-ekka-desktop-app",
3
- "version": "0.3.6",
3
+ "version": "0.3.8",
4
4
  "description": "Create an EKKA desktop app with built-in demo backend. No setup required.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -14,7 +14,8 @@
14
14
  "preview": "vite preview",
15
15
  "tauri": "tauri",
16
16
  "tauri:dev": "tauri dev",
17
- "tauri:build": "tauri build"
17
+ "prebuild:check": "node -e \"const fs=require('fs');const p=s=>{try{return fs.readFileSync(s,'utf8')}catch{return''}};const e=['.env.local','.env','src-tauri/.env.local','src-tauri/.env'].map(p).join('\\n');if(!/^EKKA_ENGINE_URL=.+/m.test(e)&&!process.env.EKKA_ENGINE_URL){console.error('\\n❌ EKKA_ENGINE_URL not set. Add to .env.local before building:\\n\\n echo \\'EKKA_ENGINE_URL=https://api.ekka.ai\\' >> .env.local\\n');process.exit(1)}console.log('✓ EKKA_ENGINE_URL configured')\"",
18
+ "tauri:build": "npm run prebuild:check && tauri build"
18
19
  },
19
20
  "dependencies": {
20
21
  "@tauri-apps/api": "^2.0.0",
@@ -35,6 +35,34 @@ interface DemoState {
35
35
  error: string | null;
36
36
  }
37
37
 
38
+ // DocGen state persisted across tab switches
39
+ interface DocGenPersistedState {
40
+ runId: string | null;
41
+ folder: string | null;
42
+ }
43
+
44
+ const DOCGEN_STORAGE_KEY = 'ekka.docgen.state';
45
+
46
+ function loadDocGenState(): DocGenPersistedState {
47
+ try {
48
+ const saved = localStorage.getItem(DOCGEN_STORAGE_KEY);
49
+ if (saved) {
50
+ return JSON.parse(saved) as DocGenPersistedState;
51
+ }
52
+ } catch {
53
+ // Ignore parse errors
54
+ }
55
+ return { runId: null, folder: null };
56
+ }
57
+
58
+ function saveDocGenState(state: DocGenPersistedState): void {
59
+ try {
60
+ localStorage.setItem(DOCGEN_STORAGE_KEY, JSON.stringify(state));
61
+ } catch {
62
+ // Ignore storage errors
63
+ }
64
+ }
65
+
38
66
  export function DemoApp(): ReactElement {
39
67
  const [selectedPage, setSelectedPage] = useState<Page>('path-permissions');
40
68
  const [darkMode, setDarkMode] = useState<boolean>(() => {
@@ -51,6 +79,14 @@ export function DemoApp(): ReactElement {
51
79
  error: null,
52
80
  });
53
81
 
82
+ // DocGen state - persisted to localStorage
83
+ const [docGenState, setDocGenState] = useState<DocGenPersistedState>(loadDocGenState);
84
+
85
+ const handleDocGenStateChange = (newState: DocGenPersistedState) => {
86
+ setDocGenState(newState);
87
+ saveDocGenState(newState);
88
+ };
89
+
54
90
  useEffect(() => {
55
91
  void initializeApp();
56
92
  }, []);
@@ -251,7 +287,13 @@ export function DemoApp(): ReactElement {
251
287
  {state.error && <div style={errorStyle}>{state.error}</div>}
252
288
  {selectedPage === 'path-permissions' && <PathPermissionsPage darkMode={darkMode} />}
253
289
  {selectedPage === 'vault' && <VaultPage darkMode={darkMode} />}
254
- {selectedPage === 'doc-gen' && <DocGenPage darkMode={darkMode} />}
290
+ {selectedPage === 'doc-gen' && (
291
+ <DocGenPage
292
+ darkMode={darkMode}
293
+ persistedState={docGenState}
294
+ onStateChange={handleDocGenStateChange}
295
+ />
296
+ )}
255
297
  {selectedPage === 'runner' && <RunnerPage darkMode={darkMode} />}
256
298
  {selectedPage === 'audit-log' && <AuditLogPage darkMode={darkMode} />}
257
299
  {selectedPage === 'system' && <SystemPage darkMode={darkMode} />}