Skip to content

Commit b7e5492

Browse files
authored
Merge pull request #130 from tmr232/upgrade-svelte
Update Svelte and Vite
2 parents 9bd021c + 58528f1 commit b7e5492

File tree

16 files changed

+237
-157
lines changed

16 files changed

+237
-157
lines changed

bun.lock

Lines changed: 68 additions & 57 deletions
Large diffs are not rendered by default.

package.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,16 @@
2828
"@eslint/js": "^9.12.0",
2929
"@panzoom/panzoom": "^4.5.1",
3030
"@rollup/plugin-wasm": "^6.2.2",
31-
"@sveltejs/vite-plugin-svelte": "^3.1.2",
31+
"@sveltejs/vite-plugin-svelte": "^5.0.3",
3232
"@types/bun": "latest",
3333
"@types/eslint__js": "^8.42.3",
3434
"@types/svgdom": "^0.1.2",
3535
"eslint": "^9.12.0",
3636
"graphology-utils": "^2.5.2",
3737
"lz-string": "^1.5.0",
3838
"oxlint": "0.15.13",
39-
"svelte": "^4.2.19",
39+
"sv": "^0.6.26",
40+
"svelte": "^5.0.0",
4041
"svelte-awesome-color-picker": "^3.1.4",
4142
"svelte-codemirror-editor": "^1.4.1",
4243
"tree-sitter-c": "^0.23.1",
@@ -46,9 +47,9 @@
4647
"tree-sitter-python": "^0.23.2",
4748
"tree-sitter-typescript": "^0.23.2",
4849
"typedoc": "^0.27.1",
49-
"typescript-eslint": "^8.16.0",
5050
"typescript": "^5.7.3",
51-
"vite": "^5.4.8"
51+
"typescript-eslint": "^8.16.0",
52+
"vite": "6.2.2"
5253
},
5354
"peerDependencies": {
5455
"typescript": "^5.6.2"

src/components/CodeSegmentation.svelte

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,14 @@ import {
1717
let parsers: Parsers;
1818
let graphviz: Graphviz;
1919
let nodeColors: NodeColors;
20-
export let simplify: boolean = true;
21-
export let trim: boolean = true;
22-
export let code: string;
23-
export let language: Language;
20+
interface Props {
21+
simplify?: boolean;
22+
trim?: boolean;
23+
code: string;
24+
language: Language;
25+
}
26+
27+
let { simplify = true, trim = true, code, language }: Props = $props();
2428
2529
async function initialize() {
2630
const utils = await initializeUtils();
@@ -117,7 +121,7 @@ function recolorNodes() {
117121

118122
{#await initialize() then _}
119123
<pre>{@html renderWrapper(code, language, { simplify, trim })}</pre>
120-
<button on:click={recolorNodes}>Recolor Nodes</button>
124+
<button onclick={recolorNodes}>Recolor Nodes</button>
121125
{/await}
122126

123127
<style>

src/components/ColorSchemeEditor.svelte

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ import {
1010
} from "../control-flow/colors";
1111
const dispatch = createEventDispatcher();
1212
13-
export let colorList = getLightColorList();
13+
interface Props {
14+
colorList?: ColorList;
15+
}
16+
17+
let { colorList = $bindable(getLightColorList()) }: Props = $props();
1418
1519
const colorLabels = new Map([
1620
["node.default", "Default"],
@@ -62,13 +66,13 @@ function resetList() {
6266
<fieldset>
6367
<legend>Controls</legend>
6468
<div class="controls">
65-
<button on:click={copyList} title="Copy color scheme to clipboard"
69+
<button onclick={copyList} title="Copy color scheme to clipboard"
6670
>Copy</button
6771
>
68-
<button on:click={pasteList} title="Paste color scheme from clipboard"
72+
<button onclick={pasteList} title="Paste color scheme from clipboard"
6973
>Paste</button
7074
>
71-
<button on:click={resetList} title="Reset color scheme to defaults"
75+
<button onclick={resetList} title="Reset color scheme to defaults"
7276
>Reset</button
7377
>
7478
</div>

src/components/Demo.svelte

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
<script lang="ts">
2+
import { run } from "svelte/legacy";
3+
24
import { cpp } from "@codemirror/lang-cpp";
35
import { go } from "@codemirror/lang-go";
46
import { javascript } from "@codemirror/lang-javascript";
@@ -27,12 +29,16 @@ const defaultCodeSamples: { [language in Language]?: string } = {
2729
" return <h1>Hello, Stranger.</h1>;}",
2830
};
2931
30-
export let code: { [language in Language]?: string } = {};
32+
interface Props {
33+
code?: { [language in Language]?: string };
34+
}
35+
36+
let { code = {} }: Props = $props();
3137
32-
const languageCode = evolve(defaultCodeSamples, code);
38+
const languageCode = $state(evolve(defaultCodeSamples, code));
3339
34-
let offsetToHighlight: number | undefined = undefined;
35-
let colorList = getSystemColorList();
40+
let offsetToHighlight: number | undefined = $state(undefined);
41+
let colorList = $state(getSystemColorList());
3642
// ADD-LANGUAGES-HERE
3743
let languages: {
3844
language: Language;
@@ -95,24 +101,25 @@ if (urlParams.has("tsx")) {
95101
);
96102
}
97103
98-
let simplify = true;
99-
let flatSwitch = true;
100-
let highlight = true;
101-
let colorPicker = false;
102-
let verbose = urlParams.has("verbose");
103-
let showSegmentation = urlParams.has("segmentation");
104-
let showRegions = urlParams.has("showRegions");
104+
let simplify = $state(true);
105+
let flatSwitch = $state(true);
106+
let highlight = $state(true);
107+
let colorPicker = $state(false);
108+
let verbose = $state(urlParams.has("verbose"));
109+
let showSegmentation = $state(urlParams.has("segmentation"));
110+
let showRegions = $state(urlParams.has("showRegions"));
105111
let debugMode = urlParams.has("debug");
106-
let fontSize = "1em";
112+
let fontSize = $state("1em");
107113
const range = (start: number, end: number) =>
108114
Array.from({ length: end - start }, (_v, k) => k + start);
109115
const fontSizes: { label: string; value: string }[] = [
110116
{ label: "Default", value: "1em" },
111117
...range(8, 31).map((n) => ({ label: `${n}`, value: `${n}px` })),
112118
];
113119
114-
let selection =
115-
languages[Number.parseInt(urlParams.get("language"))] ?? languages[0];
120+
let selection = $state(
121+
languages[Number.parseInt(urlParams.get("language"))] ?? languages[0],
122+
);
116123
117124
function share() {
118125
const compressedCode = LZString.compressToEncodedURIComponent(
@@ -126,7 +133,7 @@ function share() {
126133
window.open(newUrl, "_blank").focus();
127134
}
128135
129-
let graph: Graph;
136+
let graph: Graph = $state();
130137
131138
function downloadString(text: string, fileType: string, fileName: string) {
132139
const blob = new Blob([text], { type: fileType });
@@ -164,7 +171,7 @@ function cursorMoved(event): void {
164171
offsetToHighlight = index;
165172
}
166173
167-
let editor: Editor;
174+
let editor: Editor = $state();
168175
169176
function onNodeClicked(
170177
e: CustomEvent<{ node: string; offset: number | null }>,
@@ -174,9 +181,11 @@ function onNodeClicked(
174181
if (offset !== null && offset !== undefined) editor?.setCursor(offset);
175182
}
176183
177-
$: if (!colorPicker && graph) {
178-
graph.applyColors(colorList);
179-
}
184+
run(() => {
185+
if (!colorPicker && graph) {
186+
graph.applyColors(colorList);
187+
}
188+
});
180189
181190
function onColorPreview(e) {
182191
colorList = e.detail.colors;
@@ -209,7 +218,7 @@ isDark.subscribe(() => {
209218
<div class="themeToggleWrapper">
210219
<button
211220
class="themeToggle"
212-
on:click={onToggleClick}
221+
onclick={onToggleClick}
213222
title="Switch between the light and dark themes."
214223
></button>
215224
</div>
@@ -223,7 +232,7 @@ isDark.subscribe(() => {
223232
<div class="controls">
224233
<select
225234
bind:value={selection}
226-
on:change={(e) => console.log(selection)}
235+
onchange={(e) => console.log(selection)}
227236
>
228237
{#each languages as language}
229238
<option value={language}>
@@ -238,7 +247,7 @@ isDark.subscribe(() => {
238247
</option>
239248
{/each}
240249
</select>
241-
<button on:click={share}>Share (experimental)</button>
250+
<button onclick={share}>Share (experimental)</button>
242251
</div>
243252
<div class="codemirror">
244253
<Editor
@@ -292,9 +301,9 @@ isDark.subscribe(() => {
292301
{/if}
293302
</div>
294303
<div class="download">
295-
<button on:click={saveSVG}>Save SVG</button>
304+
<button onclick={saveSVG}>Save SVG</button>
296305
{#if debugMode}
297-
<button on:click={editDOT}>Edit DOT</button>
306+
<button onclick={editDOT}>Edit DOT</button>
298307
{/if}
299308
</div>
300309
</div>

src/components/Editor.svelte

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@ import { EditorView } from "@codemirror/view";
66
import { createEventDispatcher } from "svelte";
77
import CodeMirror from "svelte-codemirror-editor";
88
import { isDark } from "./lightdark.ts";
9-
export let code: string;
10-
export let lang: LanguageSupport;
11-
export let fontSize: string = "1em";
9+
interface Props {
10+
code: string;
11+
lang: LanguageSupport;
12+
fontSize?: string;
13+
}
14+
15+
let { code = $bindable(), lang, fontSize = "1em" }: Props = $props();
1216
1317
let editorView: EditorView;
1418
let cursorPos: { row: number; column: number; index: number };

src/components/Graph.svelte

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,31 @@ let dot: string;
2323
let tree: Tree;
2424
let savedSvg: string;
2525
let getNodeOffset: (nodeId: string) => number | undefined = () => undefined;
26-
export let colorList = getLightColorList();
27-
export let offsetToHighlight: number | undefined = undefined;
28-
export let code: string;
29-
export let language: Language;
30-
export let verbose: boolean = false;
31-
export let simplify: boolean = true;
32-
export let trim: boolean = true;
33-
export let flatSwitch: boolean = true;
34-
export let highlight: boolean = true;
35-
export let showRegions: boolean = false;
26+
interface Props {
27+
colorList?: ColorList;
28+
offsetToHighlight?: number | undefined;
29+
code: string;
30+
language: Language;
31+
verbose?: boolean;
32+
simplify?: boolean;
33+
trim?: boolean;
34+
flatSwitch?: boolean;
35+
highlight?: boolean;
36+
showRegions?: boolean;
37+
}
38+
39+
let {
40+
colorList = $bindable(getLightColorList()),
41+
offsetToHighlight = undefined,
42+
code,
43+
language,
44+
verbose = false,
45+
simplify = true,
46+
trim = true,
47+
flatSwitch = true,
48+
highlight = true,
49+
showRegions = false,
50+
}: Props = $props();
3651
3752
const dispatch = createEventDispatcher();
3853
@@ -207,9 +222,9 @@ export function applyColors(colors: ColorList) {
207222
<div class="results">
208223
{#await initialize() then}
209224
<!-- I don't know how to make this part accessible. PRs welcome! -->
210-
<!-- svelte-ignore a11y-click-events-have-key-events -->
211-
<!-- svelte-ignore a11y-no-static-element-interactions -->
212-
<div class="graph" on:click={onClick}>
225+
<!-- svelte-ignore a11y_click_events_have_key_events -->
226+
<!-- svelte-ignore a11y_no_static_element_interactions -->
227+
<div class="graph" onclick={onClick}>
213228
{@html renderWrapper(
214229
code,
215230
language,

src/components/TestGraph.svelte

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,24 @@ import { type TestFuncRecord } from "../test/commentTestUtils";
44
import type { RenderOptions } from "./renderer.ts";
55
import { processRecord } from "./utils";
66
7-
let ast: string = "";
8-
let dot: string = "";
7+
let ast: string = $state("");
8+
let dot: string = $state("");
99
let visibleTestResults: string = "";
10-
export let record: TestFuncRecord;
11-
export let verbose: boolean = false;
12-
export let simplify: boolean = true;
13-
export let trim: boolean = true;
14-
export let flatSwitch: boolean = true;
10+
interface Props {
11+
record: TestFuncRecord;
12+
verbose?: boolean;
13+
simplify?: boolean;
14+
trim?: boolean;
15+
flatSwitch?: boolean;
16+
}
17+
18+
let {
19+
record,
20+
verbose = false,
21+
simplify = true,
22+
trim = true,
23+
flatSwitch = true,
24+
}: Props = $props();
1525
1626
function formatAST(ast: string): string {
1727
return ast

src/components/TestViewer.svelte

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ async function runAllTests() {
4242
return { testResults, failCount };
4343
}
4444
45-
let simplify: boolean = true;
46-
let verbose: boolean = false;
47-
let trim: boolean = true;
48-
let flatSwitch: boolean = true;
49-
let showAll: boolean = false;
45+
let simplify: boolean = $state(true);
46+
let verbose: boolean = $state(false);
47+
let trim: boolean = $state(true);
48+
let flatSwitch: boolean = $state(true);
49+
let showAll: boolean = $state(false);
5050
</script>
5151

5252
<div class="controls">

src/components/WebviewRenderer.svelte

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,27 @@ let dot: string;
1717
let getNodeOffset: (nodeId: string) => number | undefined = () => undefined;
1818
let tree: Tree;
1919
let svg: string;
20-
export let colorList = getLightColorList();
21-
export let codeAndOffset: CodeAndOffset | null = null;
22-
export let verbose: boolean = false;
23-
export let simplify: boolean = true;
24-
export let trim: boolean = true;
25-
export let flatSwitch: boolean = true;
26-
export let highlight: boolean = true;
27-
export let showRegions: boolean = false;
20+
interface Props {
21+
colorList?: ColorList;
22+
codeAndOffset?: CodeAndOffset | null;
23+
verbose?: boolean;
24+
simplify?: boolean;
25+
trim?: boolean;
26+
flatSwitch?: boolean;
27+
highlight?: boolean;
28+
showRegions?: boolean;
29+
}
30+
31+
let {
32+
colorList = getLightColorList(),
33+
codeAndOffset = null,
34+
verbose = false,
35+
simplify = true,
36+
trim = true,
37+
flatSwitch = true,
38+
highlight = true,
39+
showRegions = false,
40+
}: Props = $props();
2841
2942
const getRenderer = memoizeFunction({
3043
func: (options: RenderOptions, colorList: ColorList, graphviz: Graphviz) =>
@@ -132,9 +145,9 @@ function onClick(event: MouseEvent) {
132145

133146
{#await initialize() then}
134147
<!-- I don't know how to make this part accessible. PRs welcome! -->
135-
<!-- svelte-ignore a11y-click-events-have-key-events -->
136-
<!-- svelte-ignore a11y-no-static-element-interactions -->
137-
<div class="graph" on:click={onClick}>
148+
<!-- svelte-ignore a11y_click_events_have_key_events -->
149+
<!-- svelte-ignore a11y_no_static_element_interactions -->
150+
<div class="graph" onclick={onClick}>
138151
{@html renderWrapper(
139152
codeAndOffset,
140153
{

0 commit comments

Comments
 (0)