aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ui/src/components/SettingsView.svelte
diff options
context:
space:
mode:
author简律纯 <i@jyunko.cn>2026-01-14 12:09:36 +0800
committerGitHub <noreply@github.com>2026-01-14 12:09:36 +0800
commitb8cfb443b23e644ac0a7f469b500b2beaf001e9a (patch)
tree220f1968d22c4116bb86849168e242eb18234921 /ui/src/components/SettingsView.svelte
parentf1babdf9a625ddbb661f4e0678e6258511347656 (diff)
parente636559dbc509a305dc372887fd1549322092d72 (diff)
downloadDropOut-b8cfb443b23e644ac0a7f469b500b2beaf001e9a.tar.gz
DropOut-b8cfb443b23e644ac0a7f469b500b2beaf001e9a.zip
Merge pull request #11 from NtskwK/refactor/ui
Diffstat (limited to 'ui/src/components/SettingsView.svelte')
-rw-r--r--ui/src/components/SettingsView.svelte129
1 files changed, 129 insertions, 0 deletions
diff --git a/ui/src/components/SettingsView.svelte b/ui/src/components/SettingsView.svelte
new file mode 100644
index 0000000..9f260c1
--- /dev/null
+++ b/ui/src/components/SettingsView.svelte
@@ -0,0 +1,129 @@
+<script lang="ts">
+ import { settingsState } from "../stores/settings.svelte";
+</script>
+
+<div class="p-8 bg-zinc-900 h-full overflow-y-auto">
+ <h2 class="text-3xl font-bold mb-8">Settings</h2>
+
+ <div class="space-y-6 max-w-2xl">
+ <!-- Java Path -->
+ <div class="bg-zinc-800/50 p-6 rounded-lg border border-zinc-700">
+ <label
+ for="java-path"
+ class="block text-sm font-bold text-zinc-400 mb-2 uppercase tracking-wide"
+ >Java Executable Path</label
+ >
+ <div class="flex gap-2">
+ <input
+ id="java-path"
+ bind:value={settingsState.settings.java_path}
+ type="text"
+ class="bg-zinc-950 text-white flex-1 p-3 rounded border border-zinc-700 focus:border-indigo-500 outline-none font-mono text-sm"
+ placeholder="e.g. java, /usr/bin/java"
+ />
+ <button
+ onclick={() => settingsState.detectJava()}
+ disabled={settingsState.isDetectingJava}
+ class="bg-zinc-700 hover:bg-zinc-600 disabled:opacity-50 text-white px-4 py-2 rounded transition-colors whitespace-nowrap"
+ >
+ {settingsState.isDetectingJava ? "Detecting..." : "Auto Detect"}
+ </button>
+ </div>
+
+ {#if settingsState.javaInstallations.length > 0}
+ <div class="mt-4 space-y-2">
+ <p class="text-xs text-zinc-400 uppercase font-bold">Detected Java Installations:</p>
+ {#each settingsState.javaInstallations as java}
+ <button
+ onclick={() => settingsState.selectJava(java.path)}
+ class="w-full text-left p-3 bg-zinc-950 rounded border transition-colors {settingsState.settings.java_path === java.path ? 'border-indigo-500 bg-indigo-950/30' : 'border-zinc-700 hover:border-zinc-500'}"
+ >
+ <div class="flex justify-between items-center">
+ <div>
+ <span class="text-white font-mono text-sm">{java.version}</span>
+ <span class="text-zinc-500 text-xs ml-2">{java.is_64bit ? "64-bit" : "32-bit"}</span>
+ </div>
+ {#if settingsState.settings.java_path === java.path}
+ <span class="text-indigo-400 text-xs">Selected</span>
+ {/if}
+ </div>
+ <div class="text-zinc-500 text-xs font-mono truncate mt-1">{java.path}</div>
+ </button>
+ {/each}
+ </div>
+ {/if}
+
+ <p class="text-xs text-zinc-500 mt-2">
+ The command or path to the Java Runtime Environment. Click "Auto Detect" to find installed Java versions.
+ </p>
+ </div>
+
+ <!-- Memory -->
+ <div class="bg-zinc-800/50 p-6 rounded-lg border border-zinc-700">
+ <h3
+ class="block text-sm font-bold text-zinc-400 mb-4 uppercase tracking-wide"
+ >Memory Allocation (RAM)</h3>
+
+ <div class="grid grid-cols-2 gap-6">
+ <div>
+ <label for="min-memory" class="block text-xs text-zinc-500 mb-1"
+ >Minimum (MB)</label
+ >
+ <input
+ id="min-memory"
+ bind:value={settingsState.settings.min_memory}
+ type="number"
+ class="bg-zinc-950 text-white w-full p-3 rounded border border-zinc-700 focus:border-indigo-500 outline-none"
+ />
+ </div>
+ <div>
+ <label for="max-memory" class="block text-xs text-zinc-500 mb-1"
+ >Maximum (MB)</label
+ >
+ <input
+ id="max-memory"
+ bind:value={settingsState.settings.max_memory}
+ type="number"
+ class="bg-zinc-950 text-white w-full p-3 rounded border border-zinc-700 focus:border-indigo-500 outline-none"
+ />
+ </div>
+ </div>
+ </div>
+
+ <!-- Resolution -->
+ <div class="bg-zinc-800/50 p-6 rounded-lg border border-zinc-700">
+ <h3
+ class="block text-sm font-bold text-zinc-400 mb-4 uppercase tracking-wide"
+ >Game Window Size</h3>
+ <div class="grid grid-cols-2 gap-6">
+ <div>
+ <label for="window-width" class="block text-xs text-zinc-500 mb-1">Width</label>
+ <input
+ id="window-width"
+ bind:value={settingsState.settings.width}
+ type="number"
+ class="bg-zinc-950 text-white w-full p-3 rounded border border-zinc-700 focus:border-indigo-500 outline-none"
+ />
+ </div>
+ <div>
+ <label for="window-height" class="block text-xs text-zinc-500 mb-1">Height</label>
+ <input
+ id="window-height"
+ bind:value={settingsState.settings.height}
+ type="number"
+ class="bg-zinc-950 text-white w-full p-3 rounded border border-zinc-700 focus:border-indigo-500 outline-none"
+ />
+ </div>
+ </div>
+ </div>
+
+ <div class="pt-4">
+ <button
+ onclick={() => settingsState.saveSettings()}
+ class="bg-indigo-600 hover:bg-indigo-500 text-white font-bold py-3 px-8 rounded shadow-lg transition-transform active:scale-95"
+ >
+ Save Settings
+ </button>
+ </div>
+ </div>
+</div>