diff --git a/flowchart/package.json b/flowchart/package.json index e30f57b..8996253 100644 --- a/flowchart/package.json +++ b/flowchart/package.json @@ -16,6 +16,8 @@ "svelte": "^5.55.4", "svelte-check": "^4.4.6", "typescript": "~6.0.2", - "vite": "^8.0.10" + "vite": "^8.0.10", + "dagre": "^0.8.5", + "@types/dagre": "^0.7.52" } } diff --git a/flowchart/src/App.svelte b/flowchart/src/App.svelte index ebd035c..2975af8 100644 --- a/flowchart/src/App.svelte +++ b/flowchart/src/App.svelte @@ -5,6 +5,8 @@ import Properties from './lib/Properties.svelte'; import Canvas from './lib/Canvas.svelte'; import { fcState } from './lib/flowchartState.svelte'; + import { parseFlowchartText, exportToFlowchartText } from './lib/parser'; + import { applyAutoLayout } from './lib/layout'; import { onMount } from 'svelte'; onMount(() => { @@ -21,26 +23,42 @@ window.addEventListener('message', (event) => { if (event.data?.type === 'FLOWCHART_LOAD') { try { - const payload = JSON.parse(event.data.payload); + const payload = typeof event.data.payload === 'string' ? JSON.parse(event.data.payload) : event.data.payload; + function processData(data: any) { + if (typeof data === 'string' && !data.trim().startsWith('{')) { + const { shapes, arrows } = parseFlowchartText(data); + return applyAutoLayout(shapes, arrows); + } + return data; + } + // Legacy format (just data object) - if (!payload.initialData && !payload.draftData && payload.shapes) { - fcState.initialData = payload; - fcState.loadData(payload); + if (!payload.initialData && !payload.draftData && (payload.shapes || typeof payload === 'string')) { + const data = processData(payload); + fcState.initialData = data; + fcState.loadData(data); } else { // New format { initialData, draftData } if (payload.initialData) { - fcState.initialData = payload.initialData; + fcState.initialData = processData(payload.initialData); } if (payload.draftData) { - fcState.loadData(payload.draftData); + fcState.loadData(processData(payload.draftData)); } else if (payload.initialData) { - fcState.loadData(payload.initialData); + fcState.loadData(processData(payload.initialData)); } } } catch(e) { console.error("Invalid data format", e); } + } else if (event.data?.type === 'FLOWCHART_GET_TEXT') { + const text = exportToFlowchartText(fcState.shapes, fcState.arrows); + window.parent.postMessage({ + type: 'FLOWCHART_TEXT_RESPONSE', + requestId: event.data.requestId, + payload: text + }, '*'); } }); diff --git a/flowchart/src/lib/Properties.svelte b/flowchart/src/lib/Properties.svelte index d48f8b9..37fa185 100644 --- a/flowchart/src/lib/Properties.svelte +++ b/flowchart/src/lib/Properties.svelte @@ -55,7 +55,7 @@ Warna Isi