diff --git a/frontend/src/lib/shell/WorkspaceTree.svelte b/frontend/src/lib/shell/WorkspaceTree.svelte index 05e36e0..7338e0e 100644 --- a/frontend/src/lib/shell/WorkspaceTree.svelte +++ b/frontend/src/lib/shell/WorkspaceTree.svelte @@ -378,6 +378,8 @@ .workspace-create-header h2 { margin: 0; font-size: 1rem; } .workspace-create-field { display: grid; gap: 0.35rem; color: var(--vt-color-text-muted); font-size: 0.75rem; } .workspace-create-field input, .workspace-create-field select { width: 100%; min-height: 2rem; box-sizing: border-box; border: 1px solid var(--vt-color-border-strong); border-radius: var(--vt-radius-sm); background: #0f1424; color: var(--vt-color-text-primary); padding: 0.35rem 0.5rem; font: inherit; font-size: 0.84rem; } + .workspace-create-field select { appearance: none; background-color: #0f1424; background-image: linear-gradient(45deg, transparent 50%, var(--vt-color-text-muted) 50%), linear-gradient(135deg, var(--vt-color-text-muted) 50%, transparent 50%); background-position: calc(100% - 14px) 50%, calc(100% - 9px) 50%; background-size: 5px 5px, 5px 5px; background-repeat: no-repeat; padding-right: 1.7rem; } + .workspace-create-field select option { background: #0f1424; color: var(--vt-color-text-primary); } .workspace-create-field input:focus, .workspace-create-field select:focus { outline: none; border-color: var(--vt-color-accent); box-shadow: var(--vt-focus-ring); } .workspace-template-summary { display: grid; gap: 0.55rem; padding: 0.75rem; border: 1px solid var(--vt-color-border); border-radius: var(--vt-radius-md); background: var(--vt-color-surface-muted); } .workspace-template-summary p { margin: 0; color: var(--vt-color-text-secondary); font-size: 0.8rem; line-height: 1.45; } diff --git a/frontend/tests/select-styles-test.mjs b/frontend/tests/select-styles-test.mjs new file mode 100644 index 0000000..b474b0b --- /dev/null +++ b/frontend/tests/select-styles-test.mjs @@ -0,0 +1,9 @@ +import assert from 'node:assert/strict'; +import { readFile } from 'node:fs/promises'; + +const source = await readFile(new URL('../src/lib/shell/WorkspaceTree.svelte', import.meta.url), 'utf8'); + +assert.match(source, /\.workspace-create-field select\s*\{[^}]*appearance:\s*none/, 'workspace template select must hide the native arrow'); +assert.match(source, /\.workspace-create-field select option\s*\{[^}]*background/, 'workspace template options must use the application surface'); + +console.log('workspace select style contract passed'); diff --git a/scripts/test.sh b/scripts/test.sh index a0e65d5..cae4f57 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -47,6 +47,10 @@ DEBUG_MODE_STATUS=0 (cd "$ROOT" && node --experimental-vm-modules frontend/tests/debug-mode-test.mjs) || DEBUG_MODE_STATUS=$? report "session-only debug mode" "$DEBUG_MODE_STATUS" +SELECT_STYLE_STATUS=0 +(cd "$ROOT" && node frontend/tests/select-styles-test.mjs) || SELECT_STYLE_STATUS=$? +report "workspace select styles" "$SELECT_STYLE_STATUS" + # ── Frontend tests ── echo "[frontend]" if ensure_npm_deps "$ROOT/frontend"; then