a simple web player for subsonic tinysub.devins.page
subsonic navidrome javascript
11
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: border between titlebar and app on tauri builds

+16 -5
+8 -2
src/App.svelte
··· 1 1 <script lang="ts"> 2 - import { init, onGlobalKey, settings, ui } from "./lib/app.svelte.js"; 2 + import { 3 + init, 4 + isTauri, 5 + onGlobalKey, 6 + settings, 7 + ui, 8 + } from "./lib/app.svelte.js"; 3 9 import Sidebar from "./lib/Sidebar.svelte"; 4 10 import Queue from "./lib/Queue.svelte"; 5 11 import Playback from "./lib/Playback.svelte"; ··· 19 25 app.style.setProperty("--sidebar-width", `${settings.sidebarWidth}rem`); 20 26 } 21 27 }); 22 - 23 28 $effect(() => { 24 29 const classList = document.body.classList; 30 + classList.toggle("is-tauri", isTauri); 25 31 classList.toggle("dynamic", !!settings.dynamicColors); 26 32 classList.toggle("rounded-art", !!settings.roundedArt); 27 33 classList.toggle("transparent-bg", !!settings.transparentBackgrounds);
+4
src/app.css
··· 66 66 border-bottom: env(safe-area-inset-bottom) solid var(--bg-tertiary); 67 67 } 68 68 69 + body.is-tauri { 70 + border-top: 1px solid var(--border); 71 + } 72 + 69 73 html { 70 74 font-size: 0.8125rem; 71 75 user-select: none;
+1 -3
src/lib/ContextMenu.svelte
··· 1 1 <script lang="ts"> 2 2 import { onMount } from "svelte"; 3 + import { isTauri } from "./app.svelte.js"; 3 4 4 5 type Item = { 5 6 label?: string; ··· 15 16 items: Item[]; 16 17 onclose: () => void; 17 18 }>(); 18 - 19 - const isTauri = 20 - typeof window !== "undefined" && !!(window as any).__TAURI_INTERNALS__; 21 19 22 20 let active = $state<number | null>(null), 23 21 subActive = $state<number | null>(null),
+3
src/lib/app.svelte.ts
··· 14 14 import { prev, next, undo, redo } from "./queue.svelte.js"; 15 15 import { initTheme } from "./theme.svelte.js"; 16 16 17 + export const isTauri = 18 + typeof window !== "undefined" && !!(window as any).__TAURI_INTERNALS__; 19 + 17 20 export const onGlobalKey = (e: KeyboardEvent) => { 18 21 if (document.activeElement?.matches("input, textarea") || ui.hasModalOpen) 19 22 return;