Skip to content

Commit ac3fe1a

Browse files
authored
fix compiler options UI (sveltejs#526)
* fix sveltejs#525 * lint
1 parent 32f7a94 commit ac3fe1a

File tree

2 files changed

+34
-28
lines changed

2 files changed

+34
-28
lines changed

packages/editor/src/lib/Workspace.svelte.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { CompileError, CompileResult } from 'svelte/compiler';
1+
import type { CompileError, CompileOptions, CompileResult } from 'svelte/compiler';
22
import { EditorState } from '@codemirror/state';
33
import { compile_file } from './compile-worker';
44
import { BROWSER } from 'esm-env';
@@ -74,12 +74,17 @@ const default_extensions = [
7474
// extensions.push(vim());
7575
// }
7676

77+
interface ExposedCompilerOptions {
78+
generate: 'client' | 'server';
79+
dev: boolean;
80+
}
81+
7782
export class Workspace {
7883
// TODO this stuff should all be readonly
7984
creating = $state.raw<{ parent: string; type: 'file' | 'directory' } | null>(null);
8085
modified = $state<Record<string, boolean>>({});
8186

82-
compiler_options = $state.raw<{ generate: 'client' | 'server'; dev: boolean }>({
87+
#compiler_options = $state.raw<ExposedCompilerOptions>({
8388
generate: 'client',
8489
dev: false
8590
});
@@ -128,6 +133,10 @@ export class Workspace {
128133
return this.#files;
129134
}
130135

136+
get compiler_options() {
137+
return this.#compiler_options;
138+
}
139+
131140
get current() {
132141
return this.#current;
133142
}
@@ -150,10 +159,6 @@ export class Workspace {
150159
});
151160
}
152161

153-
invalidate() {
154-
this.#reset_diagnostics();
155-
}
156-
157162
mark_saved() {
158163
this.modified = {};
159164
}
@@ -304,6 +309,11 @@ export class Workspace {
304309
this.#view = null;
305310
}
306311

312+
update_compiler_options(options: Partial<ExposedCompilerOptions>) {
313+
this.#compiler_options = { ...this.#compiler_options, ...options };
314+
this.#reset_diagnostics();
315+
}
316+
307317
update_file(file: File) {
308318
if (file.name === this.#current.name) {
309319
this.#current = file;

packages/repl/src/lib/Output/CompilerOptions.svelte

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,40 +3,36 @@
33
import { Checkbox } from '@sveltejs/site-kit/components';
44
55
let { workspace }: { workspace: Workspace } = $props();
6-
7-
function onchange() {
8-
workspace.invalidate();
9-
}
106
</script>
117

128
<div class="options">
139
result = svelte.compile(source, &#123;
1410
<div class="option">
1511
<span class="key">generate:</span>
1612

17-
<input
18-
id="client"
19-
type="radio"
20-
bind:group={workspace.compiler_options.generate}
21-
value="client"
22-
{onchange}
23-
/>
24-
<label for="client"><span class="string">"client"</span></label>
25-
26-
<input
27-
id="server"
28-
type="radio"
29-
bind:group={workspace.compiler_options.generate}
30-
value="server"
31-
{onchange}
32-
/>
33-
<label for="server"><span class="string">"server"</span>,</label>
13+
{#each ['client', 'server'] as const as generate}
14+
<input
15+
id={generate}
16+
type="radio"
17+
checked={workspace.compiler_options.generate === generate}
18+
value={generate}
19+
onchange={() => {
20+
workspace.update_compiler_options({ generate });
21+
}}
22+
/>
23+
<label for={generate}><span class="string">"{generate}"</span></label>
24+
{/each}
3425
</div>
3526

3627
<!-- svelte-ignore a11y_label_has_associated_control (TODO this warning should probably be disabled if there's a component)-->
3728
<label class="option">
3829
<span class="key">dev:</span>
39-
<Checkbox bind:checked={workspace.compiler_options.dev!} {onchange} />
30+
<Checkbox
31+
checked={workspace.compiler_options.dev!}
32+
onchange={(dev) => {
33+
workspace.update_compiler_options({ dev });
34+
}}
35+
/>
4036
<span class="boolean">{workspace.compiler_options.dev}</span>,
4137
</label>
4238
});

0 commit comments

Comments
 (0)