feat(todo): inline layout editor replacing ViewEditorModal

Replace the modal-based view editor with an inline editor that appears
directly on the page when the Layout pill is toggled:

- Edit toolbar: view name input, groupBy selector pills, page width (S/M/L/XL)
- Column editor: color picker, name input, reorder arrows, delete, add column
- Changes are applied live and visually reflected in the board below
- Escape key exits edit mode
- Remove ViewEditorModal from layout (no longer needed)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-03-31 13:31:33 +02:00
parent d8b6178549
commit 27cd84ca90

View file

@ -54,8 +54,6 @@
useAllBoardViews,
getActiveProjects,
} from '$lib/data/task-queries';
import { boardViewsStore } from '$lib/stores/board-views.svelte';
import { ViewEditorModal } from '$lib/components/board-views';
import SyncIndicator from '$lib/components/SyncIndicator.svelte';
import { List, X } from '@manacore/shared-icons';
@ -70,16 +68,6 @@
// Use first board view as the single active view
let activeView = $derived(boardViews.value[0] ?? null);
// View Editor Modal (opened via Layout pill)
let showViewEditor = $state(false);
async function handleSaveView(data: Partial<LocalBoardView>) {
if (activeView) {
await boardViewsStore.updateView(activeView.id, data);
}
showViewEditor = false;
}
// Provide data to child components via Svelte context
setContext('projects', allProjects);
setContext('tasks', allTasks);
@ -279,12 +267,12 @@
? [
{
href: '/',
label: 'Layout',
icon: 'grid',
label: editMode ? 'Fertig' : 'Layout',
icon: editMode ? 'check' : 'grid',
onClick: () => {
showViewEditor = true;
editMode = !editMode;
},
active: showViewEditor,
active: editMode,
},
]
: []),
@ -574,16 +562,6 @@
{#if authStore.isAuthenticated}
<SessionExpiredBanner locale={$locale || 'de'} loginHref="/login" />
{/if}
<!-- View Editor Modal -->
<ViewEditorModal
open={showViewEditor}
view={activeView}
onSave={handleSaveView}
onClose={() => {
showViewEditor = false;
}}
/>
</AuthGate>
<style>