Skip to content

Commit 42002f6

Browse files
committed
1 parent 223af86 commit 42002f6

9 files changed

Lines changed: 70 additions & 60 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"devDependencies": {
2929
"@babel/core": "7.12.0",
3030
"@excalidraw/eslint-config": "1.0.3",
31-
"@excalidraw/excalidraw": "^0.18.0-c1dbbdf",
31+
"@excalidraw/excalidraw": "^0.18.0-816c81c",
3232
"@types/mermaid": "^9.2.0",
3333
"@types/react": "18.2.14",
3434
"@types/react-dom": "18.2.4",

playground/ExcalidrawWrapper.tsx

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,34 +21,34 @@ const ExcalidrawWrapper = ({
2121
theme,
2222
apiRef,
2323
}: ExcalidrawWrapperProps) => {
24-
const [excalidrawAPI, setExcalidrawAPI] =
24+
const [readyExcalidrawAPI, setReadyExcalidrawAPI] =
2525
useState<ExcalidrawImperativeAPI | null>(null);
2626

2727
useEffect(() => {
28-
if (!excalidrawAPI) {
28+
if (!readyExcalidrawAPI || readyExcalidrawAPI.isDestroyed) {
2929
return;
3030
}
3131

3232
if (mermaidDefinition === "" || mermaidOutput === null) {
33-
excalidrawAPI.resetScene();
33+
readyExcalidrawAPI.resetScene();
3434
return;
3535
}
3636

3737
const { elements, files } = graphToExcalidraw(mermaidOutput, {
3838
fontSize: DEFAULT_FONT_SIZE,
3939
});
4040

41-
excalidrawAPI.updateScene({
41+
readyExcalidrawAPI.updateScene({
4242
elements: convertToExcalidrawElements(elements),
4343
});
44-
excalidrawAPI.scrollToContent(excalidrawAPI.getSceneElements(), {
44+
readyExcalidrawAPI.scrollToContent(readyExcalidrawAPI.getSceneElements(), {
4545
fitToContent: true,
4646
});
4747

4848
if (files) {
49-
excalidrawAPI.addFiles(Object.values(files));
49+
readyExcalidrawAPI.addFiles(Object.values(files));
5050
}
51-
}, [mermaidDefinition, mermaidOutput]);
51+
}, [mermaidDefinition, mermaidOutput, readyExcalidrawAPI]);
5252

5353
return (
5454
<div className="excalidraw-wrapper">
@@ -60,12 +60,20 @@ const ExcalidrawWrapper = ({
6060
currentItemFontFamily: 1,
6161
},
6262
}}
63-
excalidrawAPI={(api) => {
64-
setExcalidrawAPI(api);
63+
onExcalidrawAPI={(api) => {
6564
if (apiRef) {
6665
apiRef.current = api;
6766
}
6867
}}
68+
onInitialize={(api) => {
69+
setReadyExcalidrawAPI(api);
70+
}}
71+
onUnmount={() => {
72+
setReadyExcalidrawAPI(null);
73+
if (apiRef) {
74+
apiRef.current = null;
75+
}
76+
}}
6977
/>
7078
</div>
7179
);

playground/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ const App = () => {
151151
const handleInsertMermaidSvg = useCallback(
152152
(svgHtml: string, width: number, height: number) => {
153153
const api = excalidrawAPIRef.current;
154-
if (!api) {
154+
if (!api || api.isDestroyed) {
155155
return;
156156
}
157157

src/converter/helpers.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { ExcalidrawTextElement } from "@excalidraw/excalidraw/element/types";
2-
import type { Arrowhead } from "@excalidraw/element/types";
2+
import type { Arrowhead } from "@excalidraw/excalidraw/element/types";
33
import {
44
ContainerStyle,
55
CONTAINER_STYLE_PROPERTY,
@@ -25,7 +25,7 @@ export interface ArrowType {
2525
*/
2626
const MERMAID_EDGE_TYPE_MAPPER: { [key: string]: ArrowType } = {
2727
arrow_circle: {
28-
endArrowhead: "dot",
28+
endArrowhead: "circle",
2929
},
3030
arrow_cross: {
3131
endArrowhead: "bar",
@@ -35,8 +35,8 @@ const MERMAID_EDGE_TYPE_MAPPER: { [key: string]: ArrowType } = {
3535
startArrowhead: null,
3636
},
3737
double_arrow_circle: {
38-
endArrowhead: "dot",
39-
startArrowhead: "dot",
38+
endArrowhead: "circle",
39+
startArrowhead: "circle",
4040
},
4141
double_arrow_cross: {
4242
endArrowhead: "bar",

src/converter/transformToExcalidrawSkeleton.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import type { ExcalidrawElementSkeleton } from "@excalidraw/excalidraw/element/transform";
1+
import type {
2+
ExcalidrawElementSkeleton,
3+
ValidContainer,
4+
ValidLinearElement,
5+
} from "@excalidraw/excalidraw/element/transform";
26
import type { LocalPoint } from "@excalidraw/excalidraw/math/types";
37
import { Arrow, Line, Node, Text } from "../elementSkeleton.js";
48

@@ -62,11 +66,8 @@ export const transformToExcalidrawContainerSkeleton = (
6266
textAlign: element.label?.textAlign,
6367
verticalAlign: element.label?.verticalAlign || "middle",
6468
strokeColor: element.label?.color || "#000",
65-
} as ExcalidrawElementSkeleton["label"];
66-
67-
if (element.groupId) {
68-
label.groupIds = [element.groupId];
69-
}
69+
...(element.groupId ? { groupIds: [element.groupId] } : {}),
70+
} as NonNullable<ValidContainer["label"]>;
7071

7172
let extraProps = {};
7273
if (element.type === "rectangle" && element.subtype === "activation") {
@@ -75,7 +76,7 @@ export const transformToExcalidrawContainerSkeleton = (
7576
fillStyle: "solid",
7677
};
7778
}
78-
const container: ExcalidrawElementSkeleton = {
79+
const container: ValidContainer = {
7980
id: element.id,
8081
type: element.type,
8182
x: element.x,
@@ -98,7 +99,7 @@ export const transformToExcalidrawContainerSkeleton = (
9899
};
99100

100101
export const transformToExcalidrawArrowSkeleton = (arrow: Arrow) => {
101-
const arrowElement: ExcalidrawElementSkeleton = {
102+
const arrowElement: ValidLinearElement = {
102103
type: "arrow",
103104
x: arrow.startX,
104105
y: arrow.startY,

src/elementSkeleton.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export type Arrow = Omit<Line, "type" | "strokeStyle"> & {
1414
};
1515
strokeStyle?: ValidLinearElement["strokeStyle"] | null;
1616
strokeWidth?: ValidLinearElement["strokeWidth"];
17-
points?: readonly (readonly [number, number])[];
17+
points?: readonly [number, number][];
1818
sequenceNumber?: Container;
1919
startArrowhead?: SupportedArrowhead;
2020
endArrowhead?: SupportedArrowhead;
@@ -119,9 +119,9 @@ export const createArrowSkeletonFromSVG = (
119119
.split(",")
120120
.map((coord) => parseFloat(coord));
121121

122-
const points: (readonly [number, number])[] = [];
122+
const points: [number, number][] = [];
123123
commands.forEach((command) => {
124-
const currPoints: readonly (readonly [number, number])[] = command
124+
const currPoints: [number, number][] = command
125125
.substring(1)
126126
.trim()
127127
.split(" ")

src/graphToExcalidraw.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { Class } from "./parser/class.js";
99
import { classToExcalidrawSkeletonConvertor } from "./converter/types/class.js";
1010
import { ERD } from "./parser/er.js";
1111
import { erToExcalidrawSkeletonConvertor } from "./converter/types/er.js";
12+
import type { LocalPoint } from "@excalidraw/excalidraw/math/types";
1213
import { dedupeConsecutivePoints } from "./utils.js";
1314

1415
const normalizeLinearElementPoints = (
@@ -21,7 +22,7 @@ const normalizeLinearElementPoints = (
2122
return element;
2223
}
2324

24-
const points = element.points as readonly (readonly [number, number])[];
25+
const points = element.points as readonly LocalPoint[];
2526
if (points.length < 2) {
2627
return element;
2728
}

src/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export const decodeEntities = function (text: string): string {
6060

6161
const DEFAULT_POINT_DEDUPE_THRESHOLD = 0.5;
6262

63-
export const dedupeConsecutivePoints = <T extends readonly [number, number]>(
63+
export const dedupeConsecutivePoints = <T extends [number, number]>(
6464
points: readonly T[],
6565
threshold = DEFAULT_POINT_DEDUPE_THRESHOLD
6666
): T[] => {

yarn.lock

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,44 +1119,44 @@
11191119
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.42.0.tgz#484a1d638de2911e6f5a30c12f49c7e4a3270fb6"
11201120
integrity sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==
11211121

1122-
"@excalidraw/common@0.18.0-c1dbbdf":
1123-
version "0.18.0-c1dbbdf"
1124-
resolved "https://registry.yarnpkg.com/@excalidraw/common/-/common-0.18.0-c1dbbdf.tgz#a03ee04f7f97aa167cb20c920b1fa3ef85c30cf3"
1125-
integrity sha512-btCGdybDLhL6XoVCAw6cOvTnrUsXyrKs2tv6LpOK/Fz0m4J1ZtKQuVWbN6ZmLPsj0e2NVDVeu/0FYruh+f4BlA==
1122+
"@excalidraw/common@0.18.0-816c81c":
1123+
version "0.18.0-816c81c"
1124+
resolved "https://registry.yarnpkg.com/@excalidraw/common/-/common-0.18.0-816c81c.tgz#8b4ea61f6a866b1c04c4ee35994b3ca2b68b0739"
1125+
integrity sha512-trDWhlYruUquUE15qebwjPqn2ov4A+gnMGUa/i4zaimXJlWLBSgwWuSn5PS9baE+xD/Qmka/9g9A4yan/AO9Qw==
11261126
dependencies:
11271127
tinycolor2 "1.6.0"
11281128

1129-
"@excalidraw/element@0.18.0-c1dbbdf":
1130-
version "0.18.0-c1dbbdf"
1131-
resolved "https://registry.yarnpkg.com/@excalidraw/element/-/element-0.18.0-c1dbbdf.tgz#253707b99bce0c3acdf9036ef22f8e2bbd2c746f"
1132-
integrity sha512-t9X7h91HfiHEigHFC9UtiuTE6DMrJC41IFQMOKOTjI8Mov0SA2vq1HBmsAF81XwcR7vGCq8cMI3Y7FfxvLgN0g==
1129+
"@excalidraw/element@0.18.0-816c81c":
1130+
version "0.18.0-816c81c"
1131+
resolved "https://registry.yarnpkg.com/@excalidraw/element/-/element-0.18.0-816c81c.tgz#fa4038a97877be9d7524f813aba2760f31ec355f"
1132+
integrity sha512-krvXRa5lvpTLWeL0Hrh6a0ptb0drHTveq8mPgElDfF23jJ98AID4//xxq3A8pMNh5+efn68XkTEAPwX28FkJYg==
11331133
dependencies:
1134-
"@excalidraw/common" "0.18.0-c1dbbdf"
1135-
"@excalidraw/math" "0.18.0-c1dbbdf"
1134+
"@excalidraw/common" "0.18.0-816c81c"
1135+
"@excalidraw/math" "0.18.0-816c81c"
11361136

11371137
"@excalidraw/eslint-config@1.0.3":
11381138
version "1.0.3"
11391139
resolved "https://registry.yarnpkg.com/@excalidraw/eslint-config/-/eslint-config-1.0.3.tgz#2122ef7413ae77874ae9848ce0f1c6b3f0d8bbbd"
11401140
integrity sha512-GemHNF5Z6ga0BWBSX7GJaNBUchLu6RwTcAB84eX1MeckRNhNasAsPCdelDlFalz27iS4RuYEQh0bPE8SRxJgbQ==
11411141

1142-
"@excalidraw/excalidraw@^0.18.0-c1dbbdf":
1143-
version "0.18.0-c1dbbdf"
1144-
resolved "https://registry.yarnpkg.com/@excalidraw/excalidraw/-/excalidraw-0.18.0-c1dbbdf.tgz#f2b42410cd4ea60cbc91fe358642f40fce4a5515"
1145-
integrity sha512-XPZTw3uFJuAOVduccfYeqtumDC6WdPJihjQGbodkWuKq4n8zqRkyZqLMjd86aVKKLVvUlGKiOLD/ptFX7Ogy5A==
1142+
"@excalidraw/excalidraw@^0.18.0-816c81c":
1143+
version "0.18.0-816c81c"
1144+
resolved "https://registry.yarnpkg.com/@excalidraw/excalidraw/-/excalidraw-0.18.0-816c81c.tgz#dc45daad65b2288e4e2be3583055a836dc098749"
1145+
integrity sha512-Evl1W5NOZ9yo6JrsUQWax02oBlNT2XhI5TIDFOXDltmWNu1kYAVKdRyYFB1gLc132mEPUP3AijLFaD5PCRtDzg==
11461146
dependencies:
11471147
"@braintree/sanitize-url" "6.0.2"
11481148
"@codemirror/commands" "^6.0.0"
11491149
"@codemirror/language" "^6.0.0"
11501150
"@codemirror/state" "^6.0.0"
11511151
"@codemirror/view" "^6.0.0"
1152-
"@excalidraw/common" "0.18.0-c1dbbdf"
1153-
"@excalidraw/element" "0.18.0-c1dbbdf"
1152+
"@excalidraw/common" "0.18.0-816c81c"
1153+
"@excalidraw/element" "0.18.0-816c81c"
11541154
"@excalidraw/laser-pointer" "1.3.1"
1155-
"@excalidraw/math" "0.18.0-c1dbbdf"
1156-
"@excalidraw/mermaid-to-excalidraw" "2.0.0-rc4"
1155+
"@excalidraw/math" "0.18.0-816c81c"
1156+
"@excalidraw/mermaid-to-excalidraw" "2.1.0"
11571157
"@excalidraw/random-username" "1.1.0"
11581158
"@lezer/highlight" "^1.0.0"
1159-
browser-fs-access "0.29.1"
1159+
browser-fs-access "0.38.0"
11601160
canvas-roundrect-polyfill "0.0.1"
11611161
clsx "1.1.1"
11621162
cross-env "7.0.3"
@@ -1192,17 +1192,17 @@
11921192
resolved "https://registry.yarnpkg.com/@excalidraw/markdown-to-text/-/markdown-to-text-0.1.2.tgz#1703705e7da608cf478f17bfe96fb295f55a23eb"
11931193
integrity sha512-1nDXBNAojfi3oSFwJswKREkFm5wrSjqay81QlyRv2pkITG/XYB5v+oChENVBQLcxQwX4IUATWvXM5BcaNhPiIg==
11941194

1195-
"@excalidraw/math@0.18.0-c1dbbdf":
1196-
version "0.18.0-c1dbbdf"
1197-
resolved "https://registry.yarnpkg.com/@excalidraw/math/-/math-0.18.0-c1dbbdf.tgz#629db0295829db58311f85a137ef91fb111f0af6"
1198-
integrity sha512-DImlgxUB19CPPbWuCRPQvelrA7oCE2dq6q68ufKFDxPVb43SZDq2ivk5G1fjoHyII8pQHkPHP9CS6+AkBNQLjA==
1195+
"@excalidraw/math@0.18.0-816c81c":
1196+
version "0.18.0-816c81c"
1197+
resolved "https://registry.yarnpkg.com/@excalidraw/math/-/math-0.18.0-816c81c.tgz#b6233894ef02c40250b2828bdcdcee188d448fa7"
1198+
integrity sha512-MKZrDCTaIOoneVoV7MrPkiSWLLZW0GltoOYCmQNx9LMpJiFidaCKE3WFMcz6x2l8E0Ytz0NMJJuc9+WZg+HcPg==
11991199
dependencies:
1200-
"@excalidraw/common" "0.18.0-c1dbbdf"
1200+
"@excalidraw/common" "0.18.0-816c81c"
12011201

1202-
"@excalidraw/mermaid-to-excalidraw@2.0.0-rc4":
1203-
version "2.0.0-rc4"
1204-
resolved "https://registry.yarnpkg.com/@excalidraw/mermaid-to-excalidraw/-/mermaid-to-excalidraw-2.0.0-rc4.tgz#9d38568de8e403fefb6a162efa71e024ea1f7e03"
1205-
integrity sha512-92efu7VTYF6appGKgbDJAZEM/YXICpYPYOfl+j1E9SVilIFCJEAg7xH2lt/c44WFtffG+rWKrYwf9KUrPYy1Qw==
1202+
"@excalidraw/mermaid-to-excalidraw@2.1.0":
1203+
version "2.1.0"
1204+
resolved "https://registry.yarnpkg.com/@excalidraw/mermaid-to-excalidraw/-/mermaid-to-excalidraw-2.1.0.tgz#a5b9cf87c3185558cda7f9687d87b9937f452358"
1205+
integrity sha512-RMd+c2b7WzzUjhERMpKwp8PhF2/XlHDjr/zK+Gxfp8K9sVlafPYJ5OEa/GkN6edi2rBUXRfW+41WdO6L56b6Kw==
12061206
dependencies:
12071207
"@excalidraw/markdown-to-text" "0.1.2"
12081208
"@mermaid-js/parser" "^0.6.3"
@@ -2873,10 +2873,10 @@ braces@^3.0.2, braces@~3.0.2:
28732873
dependencies:
28742874
fill-range "^7.0.1"
28752875

2876-
browser-fs-access@0.29.1:
2877-
version "0.29.1"
2878-
resolved "https://registry.yarnpkg.com/browser-fs-access/-/browser-fs-access-0.29.1.tgz#8a9794c73cf86b9aec74201829999c597128379c"
2879-
integrity sha512-LSvVX5e21LRrXqVMhqtAwj5xPgDb+fXAIH80NsnCQ9xuZPs2xWsOREi24RKgZa1XOiQRbcmVrv87+ulOKsgjxw==
2876+
browser-fs-access@0.38.0:
2877+
version "0.38.0"
2878+
resolved "https://registry.yarnpkg.com/browser-fs-access/-/browser-fs-access-0.38.0.tgz#9024c5bf3d962287a08d14beebb86cb819cbb838"
2879+
integrity sha512-JveqW2w6pEZqFEEfMgCszXzYpE89dG+nPsmOdcs741mFFAROeL+iqjGEpR07RI+s0YY0EFr+4KnOoACprJTpOw==
28802880

28812881
browserslist@^4.21.9:
28822882
version "4.21.9"

0 commit comments

Comments
 (0)