release / govulncheck (push) Successful in 18s
release / web (push) Successful in 1m45s
release / go (push) Successful in 1m58s
release / integration (push) Successful in 5m39s
release / android (push) Successful in 5m43s
release / Build signed APK (releases and dev) (push) Successful in 5m58s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 26s
release / Verify release artifacts (tag releases only) (push) Skipped
- /settings lands on Account: the Android app, profile, password, signed-in devices. Then Playback, Appearance, Notifications, Connections, About. - Each setting is a row (name, one short line, control at the end) in a capped-width column; one-of-N choices are a shared Segmented control. - Collection and Settings share one SectionRail. - Connections leads ListenBrainz with a status line: not connected, connected and not sending, or sending with the last scrobble's age. - Notifications prints its column labels once; the digest email's settings link points at /settings/notifications. - #5596: the profile form now loads what is stored and sends only the fields that changed. It used to start blank, and the server reads a blank as "clear", so one Save wiped the display name and email. - Recommendation metrics moves to Library › Your listening, and Hidden tracks gets a Library tab. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
33 lines
1.2 KiB
Svelte
33 lines
1.2 KiB
Svelte
<script lang="ts">
|
|
import SectionRail from '#lib/components/SectionRail.svelte';
|
|
|
|
let { children } = $props<{ children: import('svelte').Snippet }>();
|
|
|
|
// Settings (#5595): one page per section down a left rail, laid out as
|
|
// the Collection is. Account is first and is where /settings lands. The
|
|
// admin's settings are a separate area (/admin) a listener never sees.
|
|
const items = [
|
|
{ href: '/settings/account', label: 'Account' },
|
|
{ href: '/settings/playback', label: 'Playback' },
|
|
{ href: '/settings/appearance', label: 'Appearance' },
|
|
{ href: '/settings/notifications', label: 'Notifications' },
|
|
{ href: '/settings/connections', label: 'Connections' },
|
|
{ href: '/settings/about', label: 'About' }
|
|
];
|
|
</script>
|
|
|
|
<div class="space-y-4">
|
|
<h1 class="font-display text-2xl font-medium text-text-primary">Settings</h1>
|
|
<div class="md:grid md:grid-cols-[11rem_minmax(0,1fr)] md:gap-6">
|
|
<div class="mb-4 md:mb-0">
|
|
<div class="md:sticky md:top-4">
|
|
<SectionRail label="Settings sections" {items} />
|
|
</div>
|
|
</div>
|
|
<!-- Capped so a row's control sits near its name on a wide screen. -->
|
|
<div class="min-w-0 max-w-3xl space-y-6">
|
|
{@render children?.()}
|
|
</div>
|
|
</div>
|
|
</div>
|