import { awaitEvent, emitEvent } from "./events.js"; import { clearPlanner, loadPlanner } from "./planner.js"; import { getAtlasIndexFromMetadata } from "./atlas.js"; export function showOpenFileDialog() { const input = document.createElement("input"); input.type = "file"; input.accept = ".ncpf.json"; input.addEventListener("change", async () => { const data = await new Promise(resolve => { const reader = new FileReader(); reader.addEventListener("load", () => { resolve(JSON.parse(reader.result)); }); reader.readAsText(input.files[0]); }); void loadFile(data); }); input.click(); } export async function loadExampleFile(filename) { const data = await fetch(`./examples/${filename}.ncpf.json`) .then(data => data.json()); return loadFile(data); } export async function loadFile(data) { if (!data.designs) throw new Error("invalid file"); if (data.designs.length === 0) throw new Error("no designs"); let design = data.designs[0]; if (data.designs.length > 1) { const prepChoice = awaitEvent("fileLoad:chooseDesign:choice"); emitEvent("fileLoad:chooseDesign", data); const res = await prepChoice; design = data.designs[res.detail]; } if (!design) throw new Error("no design"); const blocks = data.configuration[design.type].blocks .map(block => getAtlasIndexFromMetadata(block, design.type, "blocks")); const designWithAtlas = design.design.map(a => a.map(b => b.map(c => c === -1 ? -1 : blocks[c]))); loadPlanner(design.dimensions, design.type, designWithAtlas); }