Files
EMLy/frontend/src/routes/image/+layout.svelte
Flavio Fois 51679b61eb feat: Added light mode plus various bug fixes
- Added click handler for Easter egg that enables music inspiration feature.
- Updated credits page to include new icons and handle click events.
- Enhanced inspiration page to fetch and display Spotify track embed HTML.
- Refactored inspiration loading logic to include track data.
- Introduced theme selection in settings with light and dark modes.
- Updated settings page to reflect new theme options and improve toast messages.
- Refined layout styles across various pages for consistent theming.
- Bumped application version to 1.5.0 in installer script.
2026-02-09 21:46:37 +01:00

145 lines
2.6 KiB
Svelte

<script lang="ts">
import {
WindowMinimise,
WindowMaximise,
WindowUnmaximise,
WindowIsMaximised,
Quit,
} from "$lib/wailsjs/runtime/runtime";
import type { LayoutProps } from "./$types";
let { data, children }: LayoutProps = $props();
let isMaximized = $state(false);
async function syncMaxState() {
isMaximized = await WindowIsMaximised();
}
async function toggleMaximize() {
if (isMaximized) {
WindowUnmaximise();
} else {
WindowMaximise();
}
isMaximized = !isMaximized;
}
function minimize() {
WindowMinimise();
}
function closeWindow() {
Quit();
}
function onTitlebarDblClick() {
toggleMaximize();
}
syncMaxState();
</script>
<div class="app-layout">
<!-- Titlebar -->
<!-- svelte-ignore a11y_no_static_element_interactions -->
<div
class="titlebar"
ondblclick={onTitlebarDblClick}
style="--wails-draggable:drag"
>
<div class="title">EMLy Viewer</div>
<div class="controls">
<button class="btn" onclick={minimize}>─</button>
<button class="btn" onclick={toggleMaximize}>
{#if isMaximized}
{:else}
{/if}
</button>
<button class="btn close" onclick={closeWindow}>✕</button>
</div>
</div>
<!-- Content -->
<main class="content">
{@render children()}
</main>
</div>
<style>
:global(body) {
margin: 0;
background: var(--background);
color: var(--foreground);
overflow: hidden;
}
.app-layout {
display: flex;
flex-direction: column;
height: 100vh;
overflow: hidden;
background: var(--background);
color: var(--foreground);
}
.titlebar {
height: 32px;
background: var(--background);
display: flex;
align-items: center;
justify-content: space-between;
padding-left: 12px;
-webkit-app-region: drag;
user-select: none;
flex: 0 0 32px;
z-index: 50;
border-bottom: 1px solid var(--border);
}
.title {
font-size: 13px;
font-weight: 500;
color: var(--muted-foreground);
}
.controls {
display: flex;
height: 100%;
opacity: 0.5;
}
.btn {
width: 46px;
height: 100%;
border: none;
background: transparent;
color: var(--foreground);
font-size: 14px;
cursor: pointer;
-webkit-app-region: no-drag;
display: flex;
align-items: center;
justify-content: center;
}
.btn:hover {
background: var(--accent);
}
.close:hover {
background: #e81123;
color: white;
}
.content {
flex: 1;
overflow: hidden;
position: relative;
background: var(--background);
}
</style>