From 5d403b86833c23ff7974daa829a9cbb2f837f4ec Mon Sep 17 00:00:00 2001 From: HsiangNianian Date: Sun, 18 Jan 2026 14:36:52 +0800 Subject: feat(frontend): add instance creation wizard - Create multi-step InstanceCreationModal with version and mod loader selection - Step 1: Instance name input - Step 2: Minecraft version selection with search and filtering - Step 3: Mod loader choice (vanilla/Fabric/Forge) with version selection - Automatically installs vanilla version + mod loader during creation - Wire new modal to InstancesView, replace old simple creation dialog - Remove unused confirmCreate function This wizard integrates version management into instance creation workflow, streamlining the user experience by combining instance setup and version installation into a single guided process. --- ui/src/components/InstanceCreationModal.svelte | 485 +++++++++++++++++++++++++ ui/src/components/InstancesView.svelte | 43 +-- 2 files changed, 487 insertions(+), 41 deletions(-) create mode 100644 ui/src/components/InstanceCreationModal.svelte (limited to 'ui/src/components') diff --git a/ui/src/components/InstanceCreationModal.svelte b/ui/src/components/InstanceCreationModal.svelte new file mode 100644 index 0000000..c54cb98 --- /dev/null +++ b/ui/src/components/InstanceCreationModal.svelte @@ -0,0 +1,485 @@ + + +{#if isOpen} + +{/if} diff --git a/ui/src/components/InstancesView.svelte b/ui/src/components/InstancesView.svelte index a4881e6..e42f813 100644 --- a/ui/src/components/InstancesView.svelte +++ b/ui/src/components/InstancesView.svelte @@ -3,6 +3,7 @@ import { instancesState } from "../stores/instances.svelte"; import { Plus, Trash2, Edit2, Copy, Check, X } from "lucide-svelte"; import type { Instance } from "../types"; + import InstanceCreationModal from "./InstanceCreationModal.svelte"; let showCreateModal = $state(false); let showEditModal = $state(false); @@ -17,7 +18,6 @@ }); function handleCreate() { - newInstanceName = ""; showCreateModal = true; } @@ -38,13 +38,6 @@ showDuplicateModal = true; } - async function confirmCreate() { - if (!newInstanceName.trim()) return; - await instancesState.createInstance(newInstanceName.trim()); - showCreateModal = false; - newInstanceName = ""; - } - async function confirmEdit() { if (!selectedInstance || !newInstanceName.trim()) return; await instancesState.updateInstance({ @@ -195,39 +188,7 @@ -{#if showCreateModal} -
-
-

Create Instance

- e.key === "Enter" && confirmCreate()} - autofocus - /> -
- - -
-
-
-{/if} + (showCreateModal = false)} /> {#if showEditModal && selectedInstance} -- cgit v1.2.3-70-g09d2