refactor(theme): remove custom theme editor and community themes

Remove unused custom theme functionality:
- Delete custom-themes-store.svelte.ts from shared-theme
- Remove ThemeEditor, ColorPicker, ThemeLivePreview components
- Remove CommunityThemeGallery, ThemeCommunityCard components
- Remove ThemeEditorPage, CommunityThemesPage
- Simplify ThemePage to show only built-in themes
- Remove editor and community routes from contacts app
- Update THEMING.md documentation

The built-in theme variants (default, ocean, forest, sunset, etc.)
provide sufficient customization. Custom theme creation was never
fully implemented and added unnecessary complexity.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Till-JS 2025-12-12 02:34:43 +01:00
parent db701fd648
commit 12ba2cf824
17 changed files with 44 additions and 3395 deletions

View file

@ -1,15 +0,0 @@
/**
* Custom Themes Store - Manages user's custom themes and community themes
*/
import { createCustomThemesStore } from '@manacore/shared-theme';
import { authStore } from './auth.svelte';
// Auth URL for theme API calls
const MANA_AUTH_URL = 'http://localhost:3001';
// Create the custom themes store
export const customThemesStore = createCustomThemesStore({
authUrl: MANA_AUTH_URL,
getAccessToken: () => authStore.getAccessToken(),
});

View file

@ -2,7 +2,6 @@
import { goto } from '$app/navigation';
import { ThemePage } from '@manacore/shared-theme-ui';
import { theme } from '$lib/stores/theme';
import { customThemesStore } from '$lib/stores/custom-themes.svelte';
</script>
<svelte:head>
@ -17,9 +16,4 @@
onModeChange={(m) => theme.setMode(m)}
showBackButton={true}
onBack={() => goto('/')}
showCustomThemes={true}
{customThemesStore}
onCreateTheme={() => goto('/themes/editor')}
onEditTheme={(t) => goto(`/themes/editor?id=${t.id}`)}
onCommunityThemes={() => goto('/themes/community')}
/>

View file

@ -1,29 +0,0 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { CommunityThemesPage } from '@manacore/shared-theme-ui';
import { customThemesStore } from '$lib/stores/custom-themes.svelte';
import { theme } from '$lib/stores/theme';
// Get effective mode from theme store
let effectiveMode = $derived(
theme.mode === 'system'
? typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches
? 'dark'
: 'light'
: theme.mode
) as 'light' | 'dark';
</script>
<svelte:head>
<title>Community Themes | Contacts</title>
</svelte:head>
<CommunityThemesPage
store={customThemesStore}
{effectiveMode}
onBack={() => goto('/themes')}
onSelectTheme={(t) => {
// Could open a detail modal here
console.log('Selected theme:', t);
}}
/>

View file

@ -1,75 +0,0 @@
<script lang="ts">
import { goto } from '$app/navigation';
import { page } from '$app/stores';
import { ThemeEditorPage } from '@manacore/shared-theme-ui';
import { customThemesStore } from '$lib/stores/custom-themes.svelte';
import { theme } from '$lib/stores/theme';
import { onMount } from 'svelte';
import type { CustomTheme } from '@manacore/shared-theme';
// Get theme ID from URL if editing
let themeId = $derived($page.url.searchParams.get('id'));
let editingTheme = $state<CustomTheme | undefined>(undefined);
// Load theme data if editing
onMount(async () => {
if (themeId) {
await customThemesStore.loadCustomThemes();
editingTheme = customThemesStore.customThemes.find((t) => t.id === themeId);
}
});
// Get effective mode from theme store
let effectiveMode = $derived(
theme.mode === 'system'
? typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches
? 'dark'
: 'light'
: theme.mode
) as 'light' | 'dark';
async function handleSave(themeData: {
name: string;
description?: string;
emoji: string;
lightColors: any;
darkColors: any;
}) {
if (themeId && editingTheme) {
await customThemesStore.updateTheme(themeId, themeData);
} else {
await customThemesStore.createTheme(themeData);
}
goto('/themes');
}
async function handlePublish(themeData: {
name: string;
description?: string;
emoji: string;
lightColors: any;
darkColors: any;
tags?: string[];
}) {
let theme: CustomTheme;
if (themeId && editingTheme) {
theme = await customThemesStore.updateTheme(themeId, themeData);
} else {
theme = await customThemesStore.createTheme(themeData);
}
await customThemesStore.publishTheme(theme.id, { tags: themeData.tags });
goto('/themes');
}
</script>
<svelte:head>
<title>{themeId ? 'Theme bearbeiten' : 'Neues Theme'} | Contacts</title>
</svelte:head>
<ThemeEditorPage
{effectiveMode}
existingTheme={editingTheme}
onBack={() => goto('/themes')}
onSave={handleSave}
onPublish={handlePublish}
/>