11<script lang =" ts" >
2+ import { run } from " svelte/legacy" ;
3+
24import { cpp } from " @codemirror/lang-cpp" ;
35import { go } from " @codemirror/lang-go" ;
46import { 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
3743let 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" ) );
105111let debugMode = urlParams .has (" debug" );
106- let fontSize = " 1em" ;
112+ let fontSize = $state ( " 1em" ) ;
107113const range = (start : number , end : number ) =>
108114 Array .from ({ length: end - start }, (_v , k ) => k + start );
109115const 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
117124function 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
131138function 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
169176function 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
181190function 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 >
0 commit comments