+
{@render children()}
@@ -361,27 +404,6 @@
{#if newContactModalStore.isOpen}
newContactModalStore.close()} />
{/if}
-
-
- contactsFilterStore.setSearchQuery(query)}
- placeholder="Neuer Kontakt oder suchen..."
- emptyText="Keine Kontakte gefunden"
- searchingText="Suche..."
- onCreate={handleCreate}
- onParseCreate={handleParseCreate}
- createText="Erstellen"
- appIcon="contacts"
- bottomOffset={inputBarBottomOffset}
- hasFabRight={showContactsToolbar}
- />
-
-
- {#if showContactsToolbar}
-
- {/if}
@@ -416,6 +438,18 @@
padding-left: 180px;
}
+ /* Immersive mode - fullscreen, no padding */
+ .main-content.immersive {
+ padding: 0 !important;
+ height: 100vh;
+ width: 100vw;
+ }
+
+ .content-wrapper.immersive {
+ padding: 0;
+ height: 100%;
+ }
+
.content-wrapper {
/* No max-width - let individual views control their own width */
padding: 1rem;
diff --git a/apps/todo/apps/web/src/lib/stores/settings.svelte.ts b/apps/todo/apps/web/src/lib/stores/settings.svelte.ts
index d2fe38e1e..da510d5e3 100644
--- a/apps/todo/apps/web/src/lib/stores/settings.svelte.ts
+++ b/apps/todo/apps/web/src/lib/stores/settings.svelte.ts
@@ -58,6 +58,10 @@ export interface TodoAppSettings {
dailyGoal: number | null;
/** Show productivity streak */
showStreak: boolean;
+
+ // Immersive Mode
+ /** Fullscreen mode - hides all UI elements */
+ immersiveModeEnabled: boolean;
}
const DEFAULT_SETTINGS: TodoAppSettings = {
@@ -89,6 +93,9 @@ const DEFAULT_SETTINGS: TodoAppSettings = {
pomodoroEnabled: false,
dailyGoal: null,
showStreak: false,
+
+ // Immersive Mode
+ immersiveModeEnabled: false,
};
const STORAGE_KEY = 'todo-settings';
@@ -198,6 +205,19 @@ export const todoSettings = {
return settings.showStreak;
},
+ // Immersive Mode
+ get immersiveModeEnabled() {
+ return settings.immersiveModeEnabled;
+ },
+
+ /**
+ * Toggle Immersive Mode (fullscreen, hide all UI)
+ */
+ toggleImmersiveMode() {
+ settings = { ...settings, immersiveModeEnabled: !settings.immersiveModeEnabled };
+ saveSettings(settings);
+ },
+
/**
* Initialize settings from localStorage
*/
diff --git a/apps/todo/apps/web/src/routes/(app)/+layout.svelte b/apps/todo/apps/web/src/routes/(app)/+layout.svelte
index b365e8a16..dc9f27600 100644
--- a/apps/todo/apps/web/src/routes/(app)/+layout.svelte
+++ b/apps/todo/apps/web/src/routes/(app)/+layout.svelte
@@ -3,7 +3,7 @@
import { page } from '$app/stores';
import { onMount } from 'svelte';
import { locale } from 'svelte-i18n';
- import { PillNavigation, QuickInputBar } from '@manacore/shared-ui';
+ import { PillNavigation, QuickInputBar, ImmersiveModeToggle } from '@manacore/shared-ui';
import {
SplitPaneContainer,
setSplitPanelContext,
@@ -18,6 +18,7 @@
} from '@manacore/shared-ui';
import { authStore } from '$lib/stores/auth.svelte';
import { userSettings } from '$lib/stores/user-settings.svelte';
+ import { todoSettings } from '$lib/stores/settings.svelte';
import { projectsStore } from '$lib/stores/projects.svelte';
import { labelsStore } from '$lib/stores/labels.svelte';
import { tasksStore } from '$lib/stores/tasks.svelte';
@@ -215,6 +216,18 @@
}
}
}
+
+ // F = Toggle Immersive Mode (no modifier keys)
+ if (
+ (event.key === 'f' || event.key === 'F') &&
+ !event.ctrlKey &&
+ !event.metaKey &&
+ !event.shiftKey &&
+ !event.altKey
+ ) {
+ event.preventDefault();
+ todoSettings.toggleImmersiveMode();
+ }
}
function handleModeChange(isSidebar: boolean) {
@@ -262,6 +275,9 @@
// Initialize split-panel from URL/localStorage
splitPanel.initialize();
+ // Initialize todo settings
+ todoSettings.initialize();
+
// Load data
await Promise.all([
projectsStore.fetchProjects(),
@@ -328,66 +344,80 @@