diff --git a/src/components/editor/LevelEditForm.svelte b/src/components/editor/LevelEditForm.svelte
new file mode 100644
index 0000000..bd6f4be
--- /dev/null
+++ b/src/components/editor/LevelEditForm.svelte
@@ -0,0 +1,248 @@
+
+
+
+
← Back to Level List
+
+
📝 Edit Level
+
+ {#if isLoading}
+
+ Loading level data...
+
+ {:else if !isAuthorized}
+
+ You do not have permission to edit levels.
+
+ {:else if error}
+
+ {error}
+
+
+ {:else if level}
+
Editing: {level.name}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/if}
+
+
+
diff --git a/src/components/editor/LevelEditor.svelte b/src/components/editor/LevelEditor.svelte
index 0fbd6fc..34c8bf5 100644
--- a/src/components/editor/LevelEditor.svelte
+++ b/src/components/editor/LevelEditor.svelte
@@ -1,29 +1,118 @@
← Back to Game
📝 Level Editor
-
Create and customize your own asteroid field levels
+
Manage and edit game levels (Superadmin Only)
-
- The level editor is being migrated to Svelte.
- This component will include:
-
- - Difficulty presets
- - Ship, base, and celestial object configuration
- - Asteroid generation settings
- - JSON editor
- - Save/load functionality
-
-
+ {#if isLoading}
+
+ Checking permissions and loading levels...
+
+ {:else if !isAuthorized}
+
+ You do not have permission to access the level editor.
+ This feature requires superadmin (canManageOfficial) privileges.
+
+ {:else if error}
+
+ {:else}
+
+ {#if levels.length === 0}
+ No levels found.
+ {:else}
+
+
+
+
+ | Name |
+ Type |
+ Difficulty |
+ Order |
+ Actions |
+
+
+
+ {#each levels as level}
+
+ | {level.name} |
+ {getLevelTypeLabel(level.levelType)} |
+ {level.difficulty} |
+ {level.sortOrder} |
+
+
+ |
+
+ {/each}
+
+
+
+ {/if}
+
+ {/if}
@@ -31,12 +120,49 @@
diff --git a/src/components/layouts/App.svelte b/src/components/layouts/App.svelte
index c0a3ecf..d9109e8 100644
--- a/src/components/layouts/App.svelte
+++ b/src/components/layouts/App.svelte
@@ -11,6 +11,7 @@
import LevelSelect from '../game/LevelSelect.svelte';
import PlayLevel from '../game/PlayLevel.svelte';
import LevelEditor from '../editor/LevelEditor.svelte';
+ import LevelEditForm from '../editor/LevelEditForm.svelte';
import SettingsScreen from '../settings/SettingsScreen.svelte';
import ControlsScreen from '../controls/ControlsScreen.svelte';
import Leaderboard from '../leaderboard/Leaderboard.svelte';
@@ -45,6 +46,9 @@
+
+
+
diff --git a/src/components/layouts/AppHeader.svelte b/src/components/layouts/AppHeader.svelte
index 9a4d6a0..e82cf67 100644
--- a/src/components/layouts/AppHeader.svelte
+++ b/src/components/layouts/AppHeader.svelte
@@ -1,9 +1,12 @@
{#if visible}
@@ -33,7 +48,9 @@
🎮 Customize Controls
🏆 Leaderboard
-
📝 Level Editor
+ {#if isAdmin}
+
📝 Level Editor
+ {/if}
⚙️ Settings
diff --git a/src/services/cloudLevelService.ts b/src/services/cloudLevelService.ts
index 9262e61..a73fcb7 100644
--- a/src/services/cloudLevelService.ts
+++ b/src/services/cloudLevelService.ts
@@ -1,5 +1,4 @@
import { SupabaseService } from './supabaseService';
-import { AuthService } from './authService';
import type { LevelConfig } from '../levels/config/levelConfig';
import log from '../core/logger';
@@ -617,6 +616,100 @@ export class CloudLevelService {
return true;
}
+ // =========================================
+ // ADMIN LEVEL MANAGEMENT
+ // =========================================
+
+ /**
+ * Get all levels for admin editing (requires canManageOfficial)
+ */
+ public async getAllLevelsForAdmin(): Promise