@oh-just-another/editor 0.58.0
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/CHANGELOG.md +20 -0
- package/LICENSE +21 -0
- package/README.md +142 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/Diagram.d.ts +136 -0
- package/dist/Diagram.d.ts.map +1 -0
- package/dist/Diagram.js +576 -0
- package/dist/Diagram.js.map +1 -0
- package/dist/capabilities.d.ts +78 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +74 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/dom-focus.d.ts +8 -0
- package/dist/dom-focus.d.ts.map +1 -0
- package/dist/dom-focus.js +13 -0
- package/dist/dom-focus.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/png-export.d.ts +36 -0
- package/dist/png-export.d.ts.map +1 -0
- package/dist/png-export.js +84 -0
- package/dist/png-export.js.map +1 -0
- package/package.json +75 -0
package/dist/Diagram.js
ADDED
|
@@ -0,0 +1,576 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState, } from "react";
|
|
3
|
+
import { Clipboard, Copy, Delete, Download, FileDown, FileUp, Grid3x3, Grip, HelpCircle, ImageDown, Library as LibraryIcon, Magnet, Maximize, Minus, Monitor, Moon, MousePointer, Plus, Redo2, RotateCcw, Scissors, Sun, Undo2, ZoomIn, ZoomOut, } from "lucide-react";
|
|
4
|
+
import { BottomBar, BottomSheet, ButtonGroup, ContextMenu, DEFAULT_CONTEXT_MENU, DEFAULT_VERTICAL_TOOLBAR, DiagramRoot, CommandPalette, DiagramSurface, HelpButton, HelpDialog, IconButton, LibraryPanel, MainMenu, ResetToContentButton, LinkHoverPopup, LinkDropShapeMenu, LinkCaptionEditor, SelectionFloatingPanel, TextEditorOverlay, FrameNameEditorOverlay, ToastHost, Toolbar, Tooltip, TooltipProvider, TopBar, UILayer, useDiagramOptional, useHelpDialogHotkey, useMobileLayout, usePalettePlacement, useScene, } from "@oh-just-another/react-ui";
|
|
5
|
+
/**
|
|
6
|
+
* Lucide icon sizing — `MENU_ICON_SIZE` is for in-row icons of
|
|
7
|
+
* `MainMenu.Item`, `TOGGLE_ICON_SIZE` is for the segmented Theme /
|
|
8
|
+
* Grid toggles, `BUTTON_ICON_SIZE` is for `IconButton` slot
|
|
9
|
+
* children (library, zoom, fit). All share `BUTTON_ICON_STROKE`
|
|
10
|
+
* for visual consistency with the toolbar.
|
|
11
|
+
*/
|
|
12
|
+
const MENU_ICON_SIZE = 14;
|
|
13
|
+
const TOGGLE_ICON_SIZE = 14;
|
|
14
|
+
const BUTTON_ICON_SIZE = 16;
|
|
15
|
+
const BUTTON_ICON_STROKE = 1.75;
|
|
16
|
+
const menuIcon = { size: MENU_ICON_SIZE, strokeWidth: BUTTON_ICON_STROKE };
|
|
17
|
+
const toggleIcon = { size: TOGGLE_ICON_SIZE, strokeWidth: BUTTON_ICON_STROKE };
|
|
18
|
+
const buttonIcon = { size: BUTTON_ICON_SIZE, strokeWidth: BUTTON_ICON_STROKE };
|
|
19
|
+
/** Default target for the Help-menu "GitHub" link (overridable / hideable via the `repositoryUrl` prop). */
|
|
20
|
+
const DEFAULT_REPOSITORY_URL = "https://github.com/oh-just-another/diagram";
|
|
21
|
+
import { formatHotkey } from "@oh-just-another/state";
|
|
22
|
+
import { emptyScene } from "@oh-just-another/scene";
|
|
23
|
+
import { parseScene, stringifyScene } from "@oh-just-another/serialization";
|
|
24
|
+
import { renderSceneToSvg } from "@oh-just-another/renderer-svg";
|
|
25
|
+
import { WasmTextShaper } from "@oh-just-another/text-wasm";
|
|
26
|
+
import { WasmRasterizer } from "@oh-just-another/raster-wasm";
|
|
27
|
+
import { createRenderWorker } from "@oh-just-another/renderer-canvas";
|
|
28
|
+
import { registerAnimationAdapter, setActiveRasterizer, setActiveTextShaper, } from "@oh-just-another/renderer-core";
|
|
29
|
+
import { registerLayoutKind } from "@oh-just-another/scene";
|
|
30
|
+
import { defaultRegistry } from "@oh-just-another/templates";
|
|
31
|
+
import { detectCapabilities, logCapabilities, } from "./capabilities";
|
|
32
|
+
import { exportSceneToPng } from "./png-export";
|
|
33
|
+
import { isEditableTarget } from "./dom-focus";
|
|
34
|
+
export const Diagram = forwardRef(function Diagram(props, ref) {
|
|
35
|
+
const { initialScene, initialMode = "select", templates, fileDropHandlers, layoutKinds, animationAdapters, onReady, onSceneChange, onSelectionChange, capabilities: capabilityOverrides, workerFactory, hideTopBar, hideBottomBar, hideToolbar, hideLibraryButton, hideMainMenu, hideZoomControls, hideResetToContent, hideHelpButton, hideContextMenu, hideSelectionPanel, renderTopBarLeft, renderTopBarCenter, renderTopBarRight, renderBottomBarLeft, renderBottomBarCenter, renderBottomBarRight, renderMainMenuExtras, onImportTemplates, theme: themeProp, defaultTheme = "system", onThemeChange, persistTheme, repositoryUrl, onConfirm, onNotify, className, style, } = props;
|
|
36
|
+
// Theme: controlled when `themeProp` is provided, otherwise
|
|
37
|
+
// self-managed via `internalTheme`. The lazy `useState` initializer
|
|
38
|
+
// reads from `localStorage` once when `persistTheme` is on.
|
|
39
|
+
const storageKey = useMemo(() => {
|
|
40
|
+
if (persistTheme === true)
|
|
41
|
+
return "diagram-theme";
|
|
42
|
+
if (typeof persistTheme === "string")
|
|
43
|
+
return persistTheme;
|
|
44
|
+
return null;
|
|
45
|
+
}, [persistTheme]);
|
|
46
|
+
const [internalTheme, setInternalTheme] = useState(() => {
|
|
47
|
+
if (!storageKey || typeof window === "undefined")
|
|
48
|
+
return defaultTheme;
|
|
49
|
+
const stored = window.localStorage.getItem(storageKey);
|
|
50
|
+
if (stored === "light" || stored === "dark" || stored === "system")
|
|
51
|
+
return stored;
|
|
52
|
+
return defaultTheme;
|
|
53
|
+
});
|
|
54
|
+
const theme = themeProp ?? internalTheme;
|
|
55
|
+
const changeTheme = useCallback((next) => {
|
|
56
|
+
if (themeProp === undefined)
|
|
57
|
+
setInternalTheme(next);
|
|
58
|
+
if (storageKey && typeof window !== "undefined") {
|
|
59
|
+
window.localStorage.setItem(storageKey, next);
|
|
60
|
+
}
|
|
61
|
+
onThemeChange?.(next);
|
|
62
|
+
}, [themeProp, onThemeChange, storageKey]);
|
|
63
|
+
const seed = useMemo(() => initialScene ?? emptyScene(), [initialScene]);
|
|
64
|
+
// Does the initial scene contain any text? Drives whether first paint
|
|
65
|
+
// waits for the MSDF shaper (see the mount gate below).
|
|
66
|
+
const sceneHasText = useMemo(() => {
|
|
67
|
+
for (const s of seed.elements.values())
|
|
68
|
+
if (s.type === "text")
|
|
69
|
+
return true;
|
|
70
|
+
return false;
|
|
71
|
+
}, [seed]);
|
|
72
|
+
// --- Plugin registration ---
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
if (templates)
|
|
75
|
+
for (const t of templates)
|
|
76
|
+
defaultRegistry.register(t);
|
|
77
|
+
if (layoutKinds)
|
|
78
|
+
for (const k of layoutKinds)
|
|
79
|
+
registerLayoutKind(k);
|
|
80
|
+
if (animationAdapters)
|
|
81
|
+
for (const a of animationAdapters)
|
|
82
|
+
registerAnimationAdapter(a);
|
|
83
|
+
}, [templates, layoutKinds, animationAdapters]);
|
|
84
|
+
// --- Capabilities + WASM async load ---
|
|
85
|
+
const [profile, setProfile] = useState(null);
|
|
86
|
+
const [wasmShaper, setWasmShaper] = useState(null);
|
|
87
|
+
const [wasmRaster, setWasmRaster] = useState(null);
|
|
88
|
+
// True once the MSDF text-shaper load has SETTLED (loaded or failed).
|
|
89
|
+
// Used to hold the first paint of a text-bearing scene until the real
|
|
90
|
+
// font is ready, so text doesn't render in a fallback font and then
|
|
91
|
+
// snap to the WASM font ("jump" on load — a FOUT).
|
|
92
|
+
const [wasmTextSettled, setWasmTextSettled] = useState(false);
|
|
93
|
+
const detectionRef = useRef(null);
|
|
94
|
+
const loggedRef = useRef(false);
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
let cancelled = false;
|
|
97
|
+
void (async () => {
|
|
98
|
+
detectionRef.current ??= detectCapabilities(capabilityOverrides);
|
|
99
|
+
const detected = await detectionRef.current;
|
|
100
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- `cancelled` is mutated by the cleanup closure; CFA inside the IIFE can't see it
|
|
101
|
+
if (cancelled)
|
|
102
|
+
return;
|
|
103
|
+
if (!loggedRef.current) {
|
|
104
|
+
loggedRef.current = true;
|
|
105
|
+
logCapabilities(detected);
|
|
106
|
+
}
|
|
107
|
+
setProfile(detected);
|
|
108
|
+
const loads = [];
|
|
109
|
+
if (detected.wasmText) {
|
|
110
|
+
loads.push(WasmTextShaper.loadBundled().then((shaper) => {
|
|
111
|
+
if (cancelled)
|
|
112
|
+
return;
|
|
113
|
+
setActiveTextShaper(shaper);
|
|
114
|
+
setWasmShaper(shaper);
|
|
115
|
+
setWasmTextSettled(true);
|
|
116
|
+
}, (err) => {
|
|
117
|
+
if (cancelled)
|
|
118
|
+
return;
|
|
119
|
+
// Settle even on failure so a text-bearing scene still
|
|
120
|
+
// mounts (with the fallback font) instead of hanging.
|
|
121
|
+
setWasmTextSettled(true);
|
|
122
|
+
console.warn("[diagram] WASM text shaper load failed", err);
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
if (detected.wasmRaster) {
|
|
126
|
+
loads.push(WasmRasterizer.loadBundled().then((r) => {
|
|
127
|
+
if (cancelled)
|
|
128
|
+
return;
|
|
129
|
+
setActiveRasterizer(r);
|
|
130
|
+
setWasmRaster(r);
|
|
131
|
+
}, (err) => {
|
|
132
|
+
console.warn("[diagram] WASM rasterizer load failed", err);
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
await Promise.allSettled(loads);
|
|
136
|
+
})();
|
|
137
|
+
return () => {
|
|
138
|
+
cancelled = true;
|
|
139
|
+
};
|
|
140
|
+
}, [capabilityOverrides]);
|
|
141
|
+
// --- Editor wiring ---
|
|
142
|
+
const [editor, setEditor] = useState(null);
|
|
143
|
+
const handleReady = useCallback((e) => {
|
|
144
|
+
if (fileDropHandlers) {
|
|
145
|
+
for (const handler of fileDropHandlers)
|
|
146
|
+
e.registerFileDropHandler(handler);
|
|
147
|
+
}
|
|
148
|
+
setEditor(e);
|
|
149
|
+
onReady?.(e);
|
|
150
|
+
}, [fileDropHandlers, onReady]);
|
|
151
|
+
useEffect(() => {
|
|
152
|
+
if (!editor)
|
|
153
|
+
return undefined;
|
|
154
|
+
if (!wasmShaper && !wasmRaster)
|
|
155
|
+
return undefined;
|
|
156
|
+
editor.setMode(editor.mode);
|
|
157
|
+
return undefined;
|
|
158
|
+
}, [editor, wasmShaper, wasmRaster]);
|
|
159
|
+
// Animation adapters (GIF decoder) are registered in the plugin
|
|
160
|
+
// effect above, which runs AFTER the editor's first paint (child
|
|
161
|
+
// effects fire before parent ones). Force one render once both the
|
|
162
|
+
// editor and the adapters are in place so each animated shape's first
|
|
163
|
+
// `getFrameAt` runs — that kicks off the async decode, after which the
|
|
164
|
+
// decode→re-render nudge (`onAnimationContentReady`) paints the frame.
|
|
165
|
+
// Without this, a paused GIF restored from storage never even starts
|
|
166
|
+
// decoding and stays blank.
|
|
167
|
+
useEffect(() => {
|
|
168
|
+
if (editor && animationAdapters && animationAdapters.length > 0) {
|
|
169
|
+
editor.forceRender();
|
|
170
|
+
}
|
|
171
|
+
}, [editor, animationAdapters]);
|
|
172
|
+
useEffect(() => {
|
|
173
|
+
if (!editor || (!onSceneChange && !onSelectionChange))
|
|
174
|
+
return undefined;
|
|
175
|
+
let lastScene = editor.scene;
|
|
176
|
+
let lastSelection = editor.selection;
|
|
177
|
+
return editor.subscribe(() => {
|
|
178
|
+
if (onSceneChange && editor.scene !== lastScene) {
|
|
179
|
+
lastScene = editor.scene;
|
|
180
|
+
onSceneChange(editor.scene);
|
|
181
|
+
}
|
|
182
|
+
if (onSelectionChange && editor.selection !== lastSelection) {
|
|
183
|
+
lastSelection = editor.selection;
|
|
184
|
+
onSelectionChange(editor.selection);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}, [editor, onSceneChange, onSelectionChange]);
|
|
188
|
+
// Hold Cmd / Ctrl to temporarily pull a shape off the grid during a
|
|
189
|
+
// drag (standard). We read the modifier state off every key event
|
|
190
|
+
// (and reset on blur) so a missed keyup can't leave snapping stuck off.
|
|
191
|
+
useEffect(() => {
|
|
192
|
+
if (!editor)
|
|
193
|
+
return undefined;
|
|
194
|
+
const sync = (e) => {
|
|
195
|
+
// Don't track the modifier (or touch snap state) while typing in a
|
|
196
|
+
// field — keep the editor's snap-suppress flag inert there.
|
|
197
|
+
if (isEditableTarget(e.target))
|
|
198
|
+
return;
|
|
199
|
+
editor.setSnapSuppressed(e.metaKey || e.ctrlKey);
|
|
200
|
+
};
|
|
201
|
+
const reset = () => {
|
|
202
|
+
editor.setSnapSuppressed(false);
|
|
203
|
+
};
|
|
204
|
+
window.addEventListener("keydown", sync);
|
|
205
|
+
window.addEventListener("keyup", sync);
|
|
206
|
+
window.addEventListener("blur", reset);
|
|
207
|
+
return () => {
|
|
208
|
+
window.removeEventListener("keydown", sync);
|
|
209
|
+
window.removeEventListener("keyup", sync);
|
|
210
|
+
window.removeEventListener("blur", reset);
|
|
211
|
+
editor.setSnapSuppressed(false);
|
|
212
|
+
};
|
|
213
|
+
}, [editor]);
|
|
214
|
+
useImperativeHandle(ref, () => ({
|
|
215
|
+
editor,
|
|
216
|
+
capabilities: profile,
|
|
217
|
+
getScene: () => editor?.scene ?? seed,
|
|
218
|
+
loadScene: (scene) => editor?.loadScene(scene),
|
|
219
|
+
getMode: () => editor?.mode ?? null,
|
|
220
|
+
setMode: (mode) => editor?.setMode(mode),
|
|
221
|
+
getSelection: () => editor?.selection ?? new Set(),
|
|
222
|
+
setSelection: (ids) => editor?.setSelection(ids),
|
|
223
|
+
undo: () => {
|
|
224
|
+
editor?.undo();
|
|
225
|
+
},
|
|
226
|
+
redo: () => {
|
|
227
|
+
editor?.redo();
|
|
228
|
+
},
|
|
229
|
+
zoomToFit: () => {
|
|
230
|
+
editor?.zoomToFit();
|
|
231
|
+
},
|
|
232
|
+
}), [editor, seed, profile]);
|
|
233
|
+
if (!profile) {
|
|
234
|
+
return _jsx("div", { className: className, style: style });
|
|
235
|
+
}
|
|
236
|
+
// Hold the first paint of a text-bearing scene until the MSDF shaper
|
|
237
|
+
// has settled, so text renders in its final font from frame one (no
|
|
238
|
+
// fallback-font → WASM-font jump). Only the WebGL2 MSDF path swaps
|
|
239
|
+
// fonts like this; Canvas2D always draws system fonts (no jump), and
|
|
240
|
+
// text-free scenes have nothing to jump — both mount immediately, so
|
|
241
|
+
// we don't pay shaper-load latency on first paint.
|
|
242
|
+
if (profile.renderer === "webgl2" && profile.wasmText && !wasmTextSettled && sceneHasText) {
|
|
243
|
+
return _jsx("div", { className: className, style: style });
|
|
244
|
+
}
|
|
245
|
+
return (_jsx(ToastHost, { children: _jsx(TooltipProvider, { children: _jsx("div", { className: className, "data-diagram-root": true, ...(theme === "system" ? {} : { "data-theme": theme }), style: {
|
|
246
|
+
position: "relative",
|
|
247
|
+
width: "100%",
|
|
248
|
+
height: "100%",
|
|
249
|
+
background: "var(--du-canvas-bg)",
|
|
250
|
+
...style,
|
|
251
|
+
}, children: _jsx(DiagramRoot, { initialScene: seed, initialMode: initialMode, onReady: handleReady, renderer: profile.renderer, ...(profile.renderer === "offscreen"
|
|
252
|
+
? { workerFactory: workerFactory ?? createRenderWorker }
|
|
253
|
+
: {}), ...(wasmShaper ? { textShaper: wasmShaper } : {}), ...(wasmRaster ? { rasterizer: wasmRaster } : {}), children: _jsx(EditorShell, { hideTopBar: hideTopBar, hideBottomBar: hideBottomBar, hideToolbar: hideToolbar, hideLibraryButton: hideLibraryButton, hideMainMenu: hideMainMenu, hideZoomControls: hideZoomControls, hideResetToContent: hideResetToContent, hideHelpButton: hideHelpButton, hideContextMenu: hideContextMenu, hideSelectionPanel: hideSelectionPanel, renderTopBarLeft: renderTopBarLeft, renderTopBarCenter: renderTopBarCenter, renderTopBarRight: renderTopBarRight, renderBottomBarLeft: renderBottomBarLeft, renderBottomBarCenter: renderBottomBarCenter, renderBottomBarRight: renderBottomBarRight, renderMainMenuExtras: renderMainMenuExtras, onImportTemplates: onImportTemplates, repositoryUrl: repositoryUrl, onConfirm: onConfirm, onNotify: onNotify, theme: theme, changeTheme: changeTheme }) }) }) }) }));
|
|
254
|
+
});
|
|
255
|
+
// Match the primary public name (`<Editor>`) in DevTools / stack traces,
|
|
256
|
+
// even though the internal forwardRef function is named `Diagram`.
|
|
257
|
+
Diagram.displayName = "Editor";
|
|
258
|
+
/**
|
|
259
|
+
* Inner shell — must render *inside* `<DiagramRoot>` so hooks that
|
|
260
|
+
* need the editor context (`usePalettePlacement`, `useDiagramOptional`,
|
|
261
|
+
* `useHelpDialogHotkey`) resolve correctly. Composes the
|
|
262
|
+
* canvas-surface + ui-layer overlay + side panels into one tree.
|
|
263
|
+
*/
|
|
264
|
+
const EditorShell = ({ hideTopBar, hideBottomBar, hideToolbar, hideLibraryButton, hideMainMenu, hideZoomControls, hideResetToContent, hideHelpButton, hideContextMenu, hideSelectionPanel, renderTopBarLeft, renderTopBarCenter, renderTopBarRight, renderBottomBarLeft, renderBottomBarCenter, renderBottomBarRight, renderMainMenuExtras, onImportTemplates, repositoryUrl, onConfirm, onNotify, theme, changeTheme, }) => {
|
|
265
|
+
const editor = useDiagramOptional();
|
|
266
|
+
// Omitted → project repo; explicit string → that URL; null → no link.
|
|
267
|
+
const repositoryHref = repositoryUrl === undefined ? DEFAULT_REPOSITORY_URL : repositoryUrl;
|
|
268
|
+
// Native dialogs by default; hosts can route through their own UI.
|
|
269
|
+
const confirmDialog = onConfirm ?? ((message) => window.confirm(message));
|
|
270
|
+
const notify = onNotify ??
|
|
271
|
+
((message) => {
|
|
272
|
+
window.alert(message);
|
|
273
|
+
});
|
|
274
|
+
// Subscribe to scene changes so the Grid toggle in MainMenu reads
|
|
275
|
+
// the latest viewport.gridSize / gridStyle. `useScene` is a thin
|
|
276
|
+
// selector hook — re-renders only on scene identity flips.
|
|
277
|
+
void useScene();
|
|
278
|
+
const paletteDropHandlers = usePalettePlacement();
|
|
279
|
+
// Touch / narrow screens: the library opens as a bottom sheet instead of
|
|
280
|
+
// a left overlay (which would cover the whole small canvas).
|
|
281
|
+
const mobile = useMobileLayout();
|
|
282
|
+
// The templates library is a floating overlay opened via the toolbar
|
|
283
|
+
// toggle and closed via its ✕. Starts closed; no dock / pin.
|
|
284
|
+
const [libraryOpen, setLibraryOpen] = useState(false);
|
|
285
|
+
const [helpOpen, setHelpOpen] = useState(false);
|
|
286
|
+
useHelpDialogHotkey(() => {
|
|
287
|
+
setHelpOpen((v) => !v);
|
|
288
|
+
});
|
|
289
|
+
// Layout (left → right): templates library overlay at the window
|
|
290
|
+
// edge, then the floating vertical creation toolbar, then the canvas.
|
|
291
|
+
// The library overlays the canvas (no reflow); the toolbar floats just
|
|
292
|
+
// to its right when open, else near the edge. On mobile the library is a
|
|
293
|
+
// bottom sheet, so the toolbar never shifts.
|
|
294
|
+
const LIBRARY_PANEL_WIDTH = 240;
|
|
295
|
+
const BAR_INSET = 12;
|
|
296
|
+
const toolbarLeft = !mobile && libraryOpen ? LIBRARY_PANEL_WIDTH + BAR_INSET : BAR_INSET;
|
|
297
|
+
// Items for the vertical creation dock: an optional templates-library
|
|
298
|
+
// toggle on top (hidden with `hideLibraryButton`), then the standard
|
|
299
|
+
// creation tools.
|
|
300
|
+
const toolbarItems = useMemo(() => hideLibraryButton
|
|
301
|
+
? [...DEFAULT_VERTICAL_TOOLBAR]
|
|
302
|
+
: [
|
|
303
|
+
{
|
|
304
|
+
kind: "action",
|
|
305
|
+
id: "toggle-library",
|
|
306
|
+
label: _jsx(LibraryIcon, { ...buttonIcon }),
|
|
307
|
+
title: "Templates library",
|
|
308
|
+
active: libraryOpen,
|
|
309
|
+
onClick: () => {
|
|
310
|
+
setLibraryOpen((v) => !v);
|
|
311
|
+
},
|
|
312
|
+
},
|
|
313
|
+
{ kind: "divider" },
|
|
314
|
+
...DEFAULT_VERTICAL_TOOLBAR,
|
|
315
|
+
], [hideLibraryButton, libraryOpen]);
|
|
316
|
+
return (_jsxs("div", { style: { position: "absolute", inset: 0 }, onDragEnter: paletteDropHandlers.onDragEnter, onDragOver: paletteDropHandlers.onDragOver, onDragLeave: paletteDropHandlers.onDragLeave, onDrop: paletteDropHandlers.onDrop, children: [_jsxs("div", { style: {
|
|
317
|
+
position: "absolute",
|
|
318
|
+
top: 0,
|
|
319
|
+
bottom: 0,
|
|
320
|
+
left: 0,
|
|
321
|
+
right: 0,
|
|
322
|
+
}, children: [_jsx(DiagramSurface, { style: { position: "absolute", inset: 0 } }), _jsx(TextEditorOverlay, {}), _jsx(FrameNameEditorOverlay, {}), _jsx(LinkHoverPopup, {}), _jsx(LinkDropShapeMenu, {}), _jsx(LinkCaptionEditor, {}), !hideContextMenu && _jsx(ContextMenu, { items: DEFAULT_CONTEXT_MENU })] }), !hideToolbar ? (_jsx(Toolbar, { orientation: "vertical", items: toolbarItems, style: {
|
|
323
|
+
position: "absolute",
|
|
324
|
+
// Vertically centred on the left; floats just to the right of
|
|
325
|
+
// the library when it's open (else flush near the edge).
|
|
326
|
+
// `env(safe-area-inset-left)` is 0 on desktop, clears the notch
|
|
327
|
+
// in mobile landscape.
|
|
328
|
+
top: "50%",
|
|
329
|
+
left: `calc(env(safe-area-inset-left, 0px) + ${toolbarLeft}px)`,
|
|
330
|
+
transform: "translateY(-50%)",
|
|
331
|
+
zIndex: 60,
|
|
332
|
+
} })) : null, _jsxs(UILayer, { children: [!hideTopBar && (_jsx(TopBar, { left: _jsxs(ButtonGroup, { ariaLabel: "Logo and main menu", children: [_jsx("span", { "aria-label": "Diagram", title: "Diagram", className: "du-icon-button", style: {
|
|
333
|
+
minWidth: 36,
|
|
334
|
+
padding: "0 10px",
|
|
335
|
+
cursor: "default",
|
|
336
|
+
fontWeight: 600,
|
|
337
|
+
letterSpacing: 0.5,
|
|
338
|
+
}, children: "\u2317" }), !hideMainMenu && (_jsxs(MainMenu, { children: [_jsxs(MainMenu.Group, { title: "File", children: [_jsx(MainMenu.Item, { icon: _jsx(FileUp, { ...menuIcon }), onClick: () => {
|
|
339
|
+
openSceneFile(editor, notify);
|
|
340
|
+
}, children: "Open\u2026" }), _jsx(MainMenu.Item, { icon: _jsx(FileDown, { ...menuIcon }), onClick: () => {
|
|
341
|
+
if (editor)
|
|
342
|
+
downloadScene(editor.scene);
|
|
343
|
+
}, disabled: !editor, children: "Save as JSON" }), _jsxs(MainMenu.Submenu, { icon: _jsx(Download, { ...menuIcon }), label: "Export\u2026", disabled: !editor, children: [_jsx(MainMenu.Item, { icon: _jsx(ImageDown, { ...menuIcon }), onClick: () => editor && void downloadPng(editor, "transparent", notify), disabled: !editor, children: "PNG (transparent)" }), _jsx(MainMenu.Item, { icon: _jsx(ImageDown, { ...menuIcon }), onClick: () => editor && void downloadPng(editor, "color", notify), disabled: !editor, children: "PNG (with background)" }), _jsx(MainMenu.Item, { icon: _jsx(ImageDown, { ...menuIcon }), onClick: () => editor && void downloadPng(editor, "color-and-grid", notify), disabled: !editor, children: "PNG (with background + grid)" }), _jsx(MainMenu.Separator, {}), _jsx(MainMenu.Item, { icon: _jsx(Download, { ...menuIcon }), onClick: () => {
|
|
344
|
+
if (editor)
|
|
345
|
+
downloadSvg(editor.scene);
|
|
346
|
+
}, disabled: !editor, children: "SVG" })] }), _jsx(MainMenu.Item, { icon: _jsx(RotateCcw, { ...menuIcon }), onClick: () => {
|
|
347
|
+
if (!editor)
|
|
348
|
+
return;
|
|
349
|
+
if (confirmDialog("Reset canvas? This clears all shapes.")) {
|
|
350
|
+
// editor.clear() keeps viewport (zoom /
|
|
351
|
+
// pan / gridSize) and layers — only
|
|
352
|
+
// shapes / edges go. loadScene(emptyScene())
|
|
353
|
+
// would also drop the grid because
|
|
354
|
+
// DEFAULT_VIEWPORT has no gridSize.
|
|
355
|
+
editor.clear();
|
|
356
|
+
}
|
|
357
|
+
}, disabled: !editor, children: "Reset canvas" })] }), _jsx(MainMenu.Separator, {}), _jsxs(MainMenu.Group, { title: "Edit", children: [_jsx(MainMenu.Item, { icon: _jsx(Undo2, { ...menuIcon }), shortcut: "\u2318Z", onClick: () => editor?.undo(), disabled: !editor, children: "Undo" }), _jsx(MainMenu.Item, { icon: _jsx(Redo2, { ...menuIcon }), shortcut: "\u21E7\u2318Z", onClick: () => editor?.redo(), disabled: !editor, children: "Redo" }), _jsx(MainMenu.Item, { icon: _jsx(Scissors, { ...menuIcon }), shortcut: "\u2318X", onClick: () => editor?.cutSelected(), disabled: !editor, children: "Cut" }), _jsx(MainMenu.Item, { icon: _jsx(Copy, { ...menuIcon }), shortcut: "\u2318C", onClick: () => editor?.copySelected(), disabled: !editor, children: "Copy" }), _jsx(MainMenu.Item, { icon: _jsx(Clipboard, { ...menuIcon }), shortcut: "\u2318V", onClick: () => editor?.paste(), disabled: !editor, children: "Paste" }), _jsx(MainMenu.Item, { icon: _jsx(MousePointer, { ...menuIcon }), shortcut: "\u2318A", onClick: () => editor?.selectAll(), disabled: !editor, children: "Select all" }), _jsx(MainMenu.Item, { icon: _jsx(Delete, { ...menuIcon }), shortcut: "\u232B", onClick: () => editor?.deleteSelected(), disabled: !editor, children: "Delete selected" })] }), _jsx(MainMenu.Separator, {}), _jsxs(MainMenu.Group, { title: "View", children: [_jsx(MainMenu.Item, { icon: _jsx(Maximize, { ...menuIcon }), shortcut: "\u21E7F", onClick: () => editor?.zoomToFit(), disabled: !editor, children: "Fit to screen" }), _jsx(MainMenu.Item, { icon: _jsx(ZoomIn, { ...menuIcon }), shortcut: "\u2318+", onClick: () => editor?.zoomIn(), disabled: !editor, children: "Zoom in" }), _jsx(MainMenu.Item, { icon: _jsx(ZoomOut, { ...menuIcon }), shortcut: "\u2318\u2212", onClick: () => editor?.zoomOut(), disabled: !editor, children: "Zoom out" })] }), _jsx(MainMenu.Separator, {}), _jsx(MainMenu.Group, { title: "Theme", children: _jsx(MainMenu.Toggle, { value: theme, onChange: changeTheme, options: [
|
|
358
|
+
{ value: "light", label: "Light", icon: _jsx(Sun, { ...toggleIcon }) },
|
|
359
|
+
{ value: "dark", label: "Dark", icon: _jsx(Moon, { ...toggleIcon }) },
|
|
360
|
+
{ value: "system", label: "System", icon: _jsx(Monitor, { ...toggleIcon }) },
|
|
361
|
+
] }) }), _jsx(MainMenu.Group, { title: "Grid", children: _jsx(MainMenu.Toggle, { value: gridSelection(editor), onChange: (next) => {
|
|
362
|
+
applyGridSelection(editor, next);
|
|
363
|
+
}, options: [
|
|
364
|
+
{ value: "lines", label: "Lines", icon: _jsx(Grid3x3, { ...toggleIcon }) },
|
|
365
|
+
{ value: "dots", label: "Dots", icon: _jsx(Grip, { ...toggleIcon }) },
|
|
366
|
+
{ value: "off", label: "Off", icon: _jsx(Minus, { ...toggleIcon }) },
|
|
367
|
+
] }) }), _jsx(MainMenu.Group, { title: "Snap to grid", children: _jsx(MainMenu.Toggle, { value: snapSelection(editor), onChange: (next) => {
|
|
368
|
+
editor?.setSnapToGrid(next === "on");
|
|
369
|
+
}, options: [
|
|
370
|
+
{ value: "on", label: "On", icon: _jsx(Magnet, { ...toggleIcon }) },
|
|
371
|
+
{ value: "off", label: "Off", icon: _jsx(Minus, { ...toggleIcon }) },
|
|
372
|
+
] }) }), _jsx(MainMenu.Separator, {}), _jsxs(MainMenu.Group, { title: "Help", children: [_jsx(MainMenu.Item, { icon: _jsx(HelpCircle, { ...menuIcon }), shortcut: "?", onClick: () => {
|
|
373
|
+
setHelpOpen(true);
|
|
374
|
+
}, children: "Hotkeys" }), repositoryHref ? (_jsx(MainMenu.ItemLink, { href: repositoryHref, external: true, children: "GitHub" })) : null] }), renderMainMenuExtras ? (_jsxs(_Fragment, { children: [_jsx(MainMenu.Separator, {}), renderMainMenuExtras()] })) : null] })), renderTopBarLeft ? renderTopBarLeft() : null] }), center: renderTopBarCenter?.(), right: _jsx(ButtonGroup, { ariaLabel: "Top bar actions", children: renderTopBarRight ? renderTopBarRight() : null }) })), !hideBottomBar && (_jsx(BottomBar, { left: renderBottomBarLeft ? renderBottomBarLeft() : null, center: renderBottomBarCenter ? (renderBottomBarCenter()) : !hideResetToContent ? (_jsx(ResetToContentButton, {})) : null, right: renderBottomBarRight ? (renderBottomBarRight()) : !hideZoomControls ? (
|
|
375
|
+
// Help sits inside the zoom pill group, right next to it.
|
|
376
|
+
_jsx(ZoomControls, { trailing: !hideHelpButton ? _jsx(HelpButton, {}) : undefined })) : !hideHelpButton ? (_jsx(HelpButton, {})) : null })), mobile ? (libraryOpen ? (_jsx(BottomSheet, { snapPoints: [0, 60, 92], defaultValue: 60, style: { pointerEvents: "auto" }, onChange: (vh) => {
|
|
377
|
+
if (vh <= 0)
|
|
378
|
+
setLibraryOpen(false);
|
|
379
|
+
}, children: _jsx(LibraryPanel, { open: true, sheet: true, onClose: () => {
|
|
380
|
+
setLibraryOpen(false);
|
|
381
|
+
}, ...(onImportTemplates ? { onImport: onImportTemplates } : {}) }) })) : null) : (_jsx(LibraryPanel, { open: libraryOpen, side: "left", style: { left: 0 }, onClose: () => {
|
|
382
|
+
setLibraryOpen(false);
|
|
383
|
+
}, ...(onImportTemplates ? { onImport: onImportTemplates } : {}) }))] }), !hideSelectionPanel && _jsx(SelectionFloatingPanel, {}), _jsx(HelpDialog, { open: helpOpen, onClose: () => {
|
|
384
|
+
setHelpOpen(false);
|
|
385
|
+
} }), _jsx(CommandPalette, {}), void editor] }));
|
|
386
|
+
};
|
|
387
|
+
/**
|
|
388
|
+
* Platform-correct hotkey labels for the zoom-control tooltips — ⌘
|
|
389
|
+
* glyphs on macOS, "Ctrl+…" elsewhere, mirroring the top toolbar's
|
|
390
|
+
* tool tooltips. Descriptors mirror the bound zoom hotkeys in
|
|
391
|
+
* `actionZoom.ts` (display uses the minus/plus glyphs).
|
|
392
|
+
*/
|
|
393
|
+
const ZOOM_OUT_HOTKEY = formatHotkey({ meta: true, key: "−" });
|
|
394
|
+
const ZOOM_IN_HOTKEY = formatHotkey({ meta: true, key: "+" });
|
|
395
|
+
const ZOOM_RESET_HOTKEY = formatHotkey({ meta: true, key: "0" });
|
|
396
|
+
const ZOOM_FIT_HOTKEY = formatHotkey({ alt: true, key: "1" });
|
|
397
|
+
/**
|
|
398
|
+
* Bottom-right zoom controls — three pills (zoom-out / zoom level / zoom-in)
|
|
399
|
+
* + a fit-to-screen button. Wraps the editor's zoom API in the
|
|
400
|
+
* unified IconButton chrome so the visual style matches the rest of
|
|
401
|
+
* the bar.
|
|
402
|
+
*
|
|
403
|
+
* `trailing` lets the host append extra controls inside the same pill
|
|
404
|
+
* group (e.g. the Help button, so it sits right next to zoom).
|
|
405
|
+
*/
|
|
406
|
+
const ZoomControls = ({ trailing }) => {
|
|
407
|
+
const editor = useDiagramOptional();
|
|
408
|
+
// Force re-render on viewport change.
|
|
409
|
+
const [, force] = useState(0);
|
|
410
|
+
useEffect(() => {
|
|
411
|
+
if (!editor)
|
|
412
|
+
return undefined;
|
|
413
|
+
return editor.subscribe(() => {
|
|
414
|
+
force((n) => n + 1);
|
|
415
|
+
});
|
|
416
|
+
}, [editor]);
|
|
417
|
+
if (!editor)
|
|
418
|
+
return null;
|
|
419
|
+
const zoom = editor.scene.viewport.zoom;
|
|
420
|
+
return (_jsxs(ButtonGroup, { ariaLabel: "Zoom", children: [_jsx(IconButton, { label: `Zoom out (${ZOOM_OUT_HOTKEY})`, onClick: () => {
|
|
421
|
+
editor.zoomOut();
|
|
422
|
+
}, children: _jsx(Minus, { ...buttonIcon }) }), _jsx(Tooltip, { content: `Reset zoom to 100% (${ZOOM_RESET_HOTKEY})`, children: _jsxs("button", { type: "button", className: "du-icon-button", "aria-label": "Reset zoom to 100%", onClick: () => {
|
|
423
|
+
editor.resetZoom();
|
|
424
|
+
}, style: {
|
|
425
|
+
minWidth: 56,
|
|
426
|
+
padding: "0 8px",
|
|
427
|
+
borderRadius: 0,
|
|
428
|
+
}, children: [Math.round(zoom * 100), "%"] }) }), _jsx(IconButton, { label: `Zoom in (${ZOOM_IN_HOTKEY})`, onClick: () => {
|
|
429
|
+
editor.zoomIn();
|
|
430
|
+
}, children: _jsx(Plus, { ...buttonIcon }) }), _jsx(IconButton, { label: `Fit to screen (${ZOOM_FIT_HOTKEY})`, onClick: () => {
|
|
431
|
+
editor.zoomToFit();
|
|
432
|
+
}, children: _jsx(Maximize, { ...buttonIcon }) }), trailing] }));
|
|
433
|
+
};
|
|
434
|
+
// --- MainMenu File-group helpers --------------------------------------------
|
|
435
|
+
/**
|
|
436
|
+
* Trigger a browser download of arbitrary bytes. Used by the
|
|
437
|
+
* Save / Export menu items. Creates a temporary `<a>`, clicks it,
|
|
438
|
+
* cleans up the object URL on the next animation frame so the
|
|
439
|
+
* browser has time to start the download.
|
|
440
|
+
*/
|
|
441
|
+
const downloadBlob = (blob, filename) => {
|
|
442
|
+
const url = URL.createObjectURL(blob);
|
|
443
|
+
const a = document.createElement("a");
|
|
444
|
+
a.href = url;
|
|
445
|
+
a.download = filename;
|
|
446
|
+
document.body.appendChild(a);
|
|
447
|
+
a.click();
|
|
448
|
+
document.body.removeChild(a);
|
|
449
|
+
requestAnimationFrame(() => {
|
|
450
|
+
URL.revokeObjectURL(url);
|
|
451
|
+
});
|
|
452
|
+
};
|
|
453
|
+
/** "Save as JSON" — serialises the scene through @serialization. */
|
|
454
|
+
const downloadScene = (scene) => {
|
|
455
|
+
const json = stringifyScene(scene, 2);
|
|
456
|
+
downloadBlob(new Blob([json], { type: "application/json" }), "scene.diagram.json");
|
|
457
|
+
};
|
|
458
|
+
/**
|
|
459
|
+
* "Open…" — file picker that accepts `.diagram.json`, parses it,
|
|
460
|
+
* and replaces the editor's scene. Resets history (matches the
|
|
461
|
+
* default `loadScene` behaviour). User cancellation = no-op.
|
|
462
|
+
*/
|
|
463
|
+
const openSceneFile = (editor, notify) => {
|
|
464
|
+
if (!editor)
|
|
465
|
+
return;
|
|
466
|
+
const input = document.createElement("input");
|
|
467
|
+
input.type = "file";
|
|
468
|
+
input.accept = "application/json,.json";
|
|
469
|
+
input.onchange = () => {
|
|
470
|
+
const file = input.files?.[0];
|
|
471
|
+
if (!file)
|
|
472
|
+
return;
|
|
473
|
+
void file.text().then((text) => {
|
|
474
|
+
try {
|
|
475
|
+
const scene = parseScene(text);
|
|
476
|
+
editor.loadScene(scene);
|
|
477
|
+
}
|
|
478
|
+
catch (err) {
|
|
479
|
+
console.error("[diagram] failed to parse scene file:", err);
|
|
480
|
+
notify("Failed to parse the file — make sure it was saved through this app's Save action.");
|
|
481
|
+
}
|
|
482
|
+
});
|
|
483
|
+
};
|
|
484
|
+
input.click();
|
|
485
|
+
};
|
|
486
|
+
/**
|
|
487
|
+
* "Export as PNG" — renders the **full scene** (not just the visible
|
|
488
|
+
* viewport) into an OffscreenCanvas via the standard `renderScene` +
|
|
489
|
+
* `renderLinks` pipeline and downloads the result. Three variants
|
|
490
|
+
* exposed in the menu:
|
|
491
|
+
*
|
|
492
|
+
* • transparent — PNG with alpha channel preserved
|
|
493
|
+
* • color — solid background fill (host canvas colour)
|
|
494
|
+
* • color-and-grid — solid fill + same grid the user sees
|
|
495
|
+
*
|
|
496
|
+
* Scale fixed at 2× for retina-quality output (matches the standard /
|
|
497
|
+
* standard default). The full-scene contract makes this symmetric with
|
|
498
|
+
* SVG export, which always emits the whole scene.
|
|
499
|
+
*
|
|
500
|
+
* Implementation lives in `./png-export.ts` so this file stays
|
|
501
|
+
* focused on UI wiring.
|
|
502
|
+
*/
|
|
503
|
+
const PNG_EXPORT_SCALE = 2;
|
|
504
|
+
const downloadPng = async (editor, background, notify) => {
|
|
505
|
+
const backgroundColor = readCanvasBackgroundColor();
|
|
506
|
+
const blob = await exportSceneToPng(editor.scene, {
|
|
507
|
+
background,
|
|
508
|
+
scale: PNG_EXPORT_SCALE,
|
|
509
|
+
backgroundColor,
|
|
510
|
+
});
|
|
511
|
+
if (!blob) {
|
|
512
|
+
// Empty scene — convertToBlob unavailable or no shapes to export.
|
|
513
|
+
notify("Nothing to export — the canvas is empty.");
|
|
514
|
+
return;
|
|
515
|
+
}
|
|
516
|
+
downloadBlob(blob, "scene.png");
|
|
517
|
+
};
|
|
518
|
+
/**
|
|
519
|
+
* Read the host's current `--du-canvas-bg` CSS variable. Falls back
|
|
520
|
+
* to white if the variable isn't set (e.g. host hasn't loaded the
|
|
521
|
+
* react-ui stylesheet). Matches what the user sees behind the
|
|
522
|
+
* shapes on the live canvas.
|
|
523
|
+
*/
|
|
524
|
+
const readCanvasBackgroundColor = () => {
|
|
525
|
+
const probe = document.querySelector('canvas[data-layer="main"]') ?? document.body;
|
|
526
|
+
const value = getComputedStyle(probe).getPropertyValue("--du-canvas-bg").trim();
|
|
527
|
+
return value || "#ffffff";
|
|
528
|
+
};
|
|
529
|
+
/**
|
|
530
|
+
* "Export as SVG" — uses `@renderer-svg.renderSceneToSvg` so the
|
|
531
|
+
* output is identical to the headless render path (vector, no
|
|
532
|
+
* bitmap fall-back, works in any browser). One file per scene.
|
|
533
|
+
*/
|
|
534
|
+
const downloadSvg = (scene) => {
|
|
535
|
+
const svg = renderSceneToSvg(scene);
|
|
536
|
+
downloadBlob(new Blob([svg], { type: "image/svg+xml" }), "scene.svg");
|
|
537
|
+
};
|
|
538
|
+
// --- Grid toggle helpers ----------------------------------------------------
|
|
539
|
+
const DEFAULT_GRID_SIZE = 20;
|
|
540
|
+
/**
|
|
541
|
+
* Map the current viewport state to the segmented Grid toggle's
|
|
542
|
+
* value. `"off"` when the user hid the grid (gridSize 0 / unset);
|
|
543
|
+
* otherwise the stored gridStyle (default `"lines"`).
|
|
544
|
+
*/
|
|
545
|
+
const gridSelection = (editor) => {
|
|
546
|
+
if (!editor)
|
|
547
|
+
return "lines";
|
|
548
|
+
const vp = editor.scene.viewport;
|
|
549
|
+
if (!vp.gridSize || vp.gridSize <= 0)
|
|
550
|
+
return "off";
|
|
551
|
+
return vp.gridStyle ?? "lines";
|
|
552
|
+
};
|
|
553
|
+
/**
|
|
554
|
+
* Map the editor's snap-to-grid state to the Snap toggle. Defaults to
|
|
555
|
+
* "on" (matches the editor default; snapping is independent of grid
|
|
556
|
+
* visibility).
|
|
557
|
+
*/
|
|
558
|
+
const snapSelection = (editor) => (editor?.snapToGridEnabled ?? true) ? "on" : "off";
|
|
559
|
+
/**
|
|
560
|
+
* Inverse — translate the toggle's value back into a `setGrid`
|
|
561
|
+
* call. Switching from "off" to lines/dots restores the default
|
|
562
|
+
* grid size so the user doesn't have to also re-enter it
|
|
563
|
+
* separately.
|
|
564
|
+
*/
|
|
565
|
+
const applyGridSelection = (editor, next) => {
|
|
566
|
+
if (!editor)
|
|
567
|
+
return;
|
|
568
|
+
if (next === "off") {
|
|
569
|
+
editor.setGrid({ size: 0 });
|
|
570
|
+
return;
|
|
571
|
+
}
|
|
572
|
+
const vp = editor.scene.viewport;
|
|
573
|
+
const size = vp.gridSize && vp.gridSize > 0 ? vp.gridSize : DEFAULT_GRID_SIZE;
|
|
574
|
+
editor.setGrid({ size, style: next });
|
|
575
|
+
};
|
|
576
|
+
//# sourceMappingURL=Diagram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Diagram.js","sourceRoot":"","sources":["../src/Diagram.tsx"],"names":[],"mappings":"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"}
|