Skip to content

Commit 8e2a0cf

Browse files
author
Yann Leflour
committed
Add mermaid graph
1 parent 980d965 commit 8e2a0cf

File tree

17 files changed

+1104
-46
lines changed

17 files changed

+1104
-46
lines changed

pnpm-lock.yaml

Lines changed: 789 additions & 26 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ui-sketcher-webview/.eslintrc.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@ module.exports = {
2020
"warn",
2121
{ allowConstantExport: true },
2222
],
23+
"react-hooks/rules-of-hooks": "off",
2324
},
2425
};
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
### What's an "indicator"
2+
3+
Used when hovering over a shape or when it's selected; must return only SVG elements here.
4+
In Tldraw, it's the blue box or line that appears when hovering over a shape.

ui-sketcher-webview/package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@
1313
"@tldraw/tldraw": "2.0.0-canary.ba4091c59418",
1414
"canvas-size": "^1.2.6",
1515
"daisyui": "^4.4.19",
16+
"firacode": "^6.2.0",
17+
"mermaid": "^10.6.1",
1618
"react": "^18.2.0",
17-
"react-dom": "^18.2.0"
19+
"react-dom": "^18.2.0",
20+
"valtio": "^1.12.1"
1821
},
1922
"pnpm": {
2023
"overrides": {

ui-sketcher-webview/src/App.tsx

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,49 @@
1-
import { Tldraw } from "@tldraw/tldraw";
1+
import { TLOnMountHandler, Tldraw } from "@tldraw/tldraw";
22
import "@tldraw/tldraw/tldraw.css";
3-
import { useMakeReal } from "./lib/useMakeReal";
3+
import { useSettings } from "./domain/use-settings";
44
import { shapeUtils } from "./shapes-utils";
55
import { ShareZone } from "./share-zone/share-zone";
6+
import { isMermaid } from "./tools/mermaid/mermaid.utils";
7+
8+
const onMount: TLOnMountHandler = (editor) => {
9+
editor.registerExternalContentHandler("embed", async (asset) => {
10+
alert("embed");
11+
});
12+
editor.registerExternalContentHandler("files", async (asset) => {
13+
alert("files");
14+
});
15+
editor.registerExternalContentHandler("url", async (asset) => {
16+
alert("url");
17+
});
18+
// editor.registerExternalContentHandler("svg-text", async (asset) => {
19+
// alert("svg-text");
20+
// });
21+
editor.registerExternalContentHandler("text", async (asset) => {
22+
if (isMermaid(asset.text)) {
23+
console.debug("mermaid");
24+
editor.createShape({
25+
type: "mermaid",
26+
x: asset.point?.x,
27+
y: asset.point?.y,
28+
props: { source: asset.text },
29+
});
30+
return;
31+
}
32+
alert("text");
33+
});
34+
};
635

736
export const App = () => {
837
// TODO: use editor persistence per file
9-
const makeReal = useMakeReal();
38+
const settings = useSettings();
1039

1140
return (
1241
<div className={`h-screen w-screen`}>
1342
<Tldraw
14-
persistenceKey={makeReal.persistanceKey}
43+
persistenceKey={settings.persistanceKey}
1544
shapeUtils={shapeUtils}
1645
shareZone={<ShareZone />}
46+
onMount={onMount}
1747
/>
1848
</div>
1949
);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import "@tldraw/tldraw/tldraw.css";
2+
import { proxy, useSnapshot } from "valtio";
3+
4+
const settings = proxy({
5+
partialRenderEnabled: window.partialRenderEnabled || false,
6+
persistanceKey: window.workspaceId,
7+
});
8+
9+
export const useSettings = () => useSnapshot(settings);

ui-sketcher-webview/src/domain/use-tldraw.ts

Whitespace-only changes.

ui-sketcher-webview/src/lib/useMakeReal.ts

Lines changed: 0 additions & 14 deletions
This file was deleted.

ui-sketcher-webview/src/main.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from "react";
22
import ReactDOM from "react-dom/client";
33
import { App } from "./App.tsx";
44
import "./index.css";
5+
import "firacode/distr/fira_code.css";
56

67
ReactDOM.createRoot(document.getElementById("root")!).render(
78
<React.StrictMode>
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { MermaidShapeUtil } from "../tools/mermaid/mermaid.shape-util";
12
import { PreviewShapeUtil } from "./preview-shape";
23

3-
export const shapeUtils = [PreviewShapeUtil];
4+
export const shapeUtils = [PreviewShapeUtil, MermaidShapeUtil];

0 commit comments

Comments
 (0)