import * as Blockly from 'blockly'; const BROWSER_STORAGE_KEY = 'esp32block_projects'; let workspace = null; let captureOutput = null; let writeFile = null; let checkConnected = null; let browserList; let browserNameInput; let browserSaveBtn, browserLoadBtn, browserDownloadBtn, browserDeleteBtn; let browserSelected = null; export function initProjectsDialog(deps) { workspace = deps.workspace; captureOutput = deps.captureDeviceOutput; writeFile = deps.writeFileToDevice; checkConnected = deps.isConnected; browserList = document.getElementById('browser-list'); browserNameInput = document.getElementById('browser-save-name'); browserSaveBtn = document.getElementById('browser-save-btn'); browserLoadBtn = document.getElementById('browser-load-btn'); browserDownloadBtn = document.getElementById('browser-download-btn'); browserDeleteBtn = document.getElementById('browser-delete-btn'); browserSaveBtn.addEventListener('click', saveBrowser); browserLoadBtn.addEventListener('click', loadBrowser); browserDownloadBtn.addEventListener('click', downloadBrowser); browserDeleteBtn.addEventListener('click', deleteBrowser); refreshBrowserList(); } export function refreshAll() { refreshBrowserList(); } export async function saveCurrentWorkspaceToDevice(preferredName = 'main') { if (!workspace || !writeFile || !checkConnected || !checkConnected()) return null; const filename = preferredName.endsWith('.blk') ? preferredName : preferredName + '.blk'; const state = Blockly.serialization.workspaces.save(workspace); const json = JSON.stringify(state); await writeFile(json, filename); return filename; } export async function loadWorkspaceFromDevice(preferredName = 'main') { if (!workspace || !captureOutput || !checkConnected || !checkConnected()) return null; const filename = preferredName.endsWith('.blk') ? preferredName : preferredName + '.blk'; const raw = await captureOutput( `f=open('${filename}','r')\nprint(f.read(),end='')\nf.close()` ); const state = JSON.parse(raw.trim()); Blockly.serialization.workspaces.load(state, workspace); return filename; } // ─── Browser column ────────────────────────────────────── function getBrowserProjects() { try { return JSON.parse(localStorage.getItem(BROWSER_STORAGE_KEY) || '{}'); } catch { return {}; } } function setBrowserProjects(projects) { localStorage.setItem(BROWSER_STORAGE_KEY, JSON.stringify(projects)); } function refreshBrowserList() { const projects = getBrowserProjects(); const names = Object.keys(projects).sort(); browserList.innerHTML = ''; browserSelected = null; updateBrowserButtons(); if (names.length === 0) { browserList.innerHTML = '