Improve Workshop submission editor

This commit is contained in:
Thomas Camlong committed 2026-07-21 12:12:30 +02:00
1 parent 3eef50e43c
commit 59ecf04d22
11 files changed
+145 -89

No files matched your search

@@ -46,7 +46,11 @@ export function CodeEditorToolbar({
<Group gap={6}>
<IconCode size={16} aria-hidden />
<Text size="xs" fw={600}>
{props.language === "jsx" ? props.messages.languageJsx : props.messages.languageJson}
{props.language === "jsx"
? props.messages.languageJsx
: props.language === "css"
? "CSS"
: props.messages.languageJson}
</Text>
</Group>
<Group gap={6}>
@@ -102,7 +106,7 @@ export function CodeEditorToolbar({
variant="subtle"
leftSection={<IconWand size={14} />}
onClick={onFormat}
disabled={props.language === "json" && formattedValue === props.value}
disabled={props.language !== "jsx" && formattedValue === props.value}
>
{props.messages.format}
</Button>
@@ -43,7 +43,7 @@ export interface CustomWidgetCodeEditorProps {
messages: CustomWidgetEditorMessages;
description?: string;
placeholder?: string;
language: "jsx" | "json";
language: "jsx" | "json" | "css";
diagnostics?: EditorDiagnostic[];
error?: ReactNode;
required?: boolean;
@@ -256,7 +256,7 @@ function EditorLoader() {
</Group>
);
}
function formatCode(value: string, language: "jsx" | "json") {
function formatCode(value: string, language: "jsx" | "json" | "css") {
if (language === "json") {
try {
return `${JSON.stringify(JSON.parse(value) as unknown, null, 2)}\n`;
@@ -2,6 +2,7 @@
import { autocompletion } from "@codemirror/autocomplete";
import { indentWithTab } from "@codemirror/commands";
import { css } from "@codemirror/lang-css";
import { javascript } from "@codemirror/lang-javascript";
import { json } from "@codemirror/lang-json";
import { linter } from "@codemirror/lint";
@@ -18,7 +19,7 @@ import type { EditorDiagnostic } from "./analyzer";
interface DirectCodeMirrorProps {
value: string;
language: "jsx" | "json";
language: "jsx" | "json" | "css";
diagnostics: EditorDiagnostic[];
completions: Completion[];
id: string;
@@ -103,7 +104,9 @@ function createExtensions(instanceId: string, props: DirectCodeMirrorProps) {
autocompletion({ override: [createCustomJsxCompletionSource(props.completions)] }),
customJsxComponentHover,
]
: [json()];
: props.language === "css"
? [css()]
: [json()];
return [
basicSetup,
...language,