|
74 | 74 | try { |
75 | 75 | await saveSchemaToServer(schema, 'solution.json'); |
76 | 76 | lastSent = now; dirty = false; |
77 | | - setStatus('Auto-saved to solution.json'); |
| 77 | + setStatus('Changes saved'); |
78 | 78 | } catch (e) { |
79 | 79 | // Ignore transient failures; we'll retry next tick |
80 | 80 | console.error(e); |
81 | | - setStatus('Auto-save failed (will retry)'); |
| 81 | + setStatus('Save failed (will retry)'); |
82 | 82 | } |
83 | 83 | }, 250); // check 4x per second; flush at >=1s since last send |
84 | 84 |
|
|
460 | 460 | } |
461 | 461 | })(); |
462 | 462 |
|
| 463 | + // --- Theme change detection --- |
| 464 | + function setupThemeChangeListener() { |
| 465 | + const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); |
| 466 | + |
| 467 | + function handleThemeChange() { |
| 468 | + // Re-render the diagram when theme changes to update table colors |
| 469 | + if (schema) { |
| 470 | + Diagram.renderSchema(svg, schema, selectedTableId, selectTable, selectColumn, selectedColId); |
| 471 | + } |
| 472 | + } |
| 473 | + |
| 474 | + // Listen for theme changes |
| 475 | + mediaQuery.addEventListener('change', handleThemeChange); |
| 476 | + |
| 477 | + // Also listen for the older 'addListener' method for broader browser support |
| 478 | + if (mediaQuery.addListener) { |
| 479 | + mediaQuery.addListener(handleThemeChange); |
| 480 | + } |
| 481 | + } |
| 482 | + |
463 | 483 | // --- boot |
464 | 484 | (async function init() { |
465 | 485 | try { |
|
474 | 494 | } catch (err) { |
475 | 495 | console.warn('initial_state.json not found or failed to load. Starting empty.', err); |
476 | 496 | schema = makeEmptySchema('Untitled schema'); |
477 | | - setStatus('No initial_state.json found. Starting with an empty schema.'); |
| 497 | + setStatus('Starting with a new schema'); |
478 | 498 | } |
479 | 499 | } else { |
480 | 500 | setStatus(`Loaded: ${schema.name}`); |
|
490 | 510 | Diagram.enableDragging(svg, schema, save, () => selectedTableId, () => selectedColId, selectTable, selectColumn); |
491 | 511 | Diagram.enablePanZoom(svg, () => { /* persist view? not necessary */ }); |
492 | 512 |
|
| 513 | + // Setup theme change detection |
| 514 | + setupThemeChangeListener(); |
| 515 | + |
493 | 516 | // Pre-populate FK target selects |
494 | 517 | UI.fillTables(fkToTable, schema); |
495 | 518 | const first = schema.tables[0]; |
|
0 commit comments