Button: subtle variants (primary/secondary, left unchanged per the user's call), glass (formerly secondaryOnGlow, with its own font-normal), accent, strong (cta-strong/ink, replacing the `!` overrides on the Home hero), danger. Uses the --color-btn* tokens instead of bg-[var(--mf-btn-...)]. Radius unified to rounded-control. IconButton: adds shape (square/round), size (xs/sm/md/lg), tone (muted/subtle/plain), pressed (aria-pressed + text-accent), href/reload (links), surface (permanent background + hover to surface-hover instead of the generic `hover` alias, which matched surface-2 and gave no contrast). New PlayButton: a single place for the play/pause SVGs, strong/glass variants, as="span" for non-interactive overlays. Replaces TransportControls' main button, the MixTile overlay, and the "Top result" circle in Explore. Migrated to IconButton: close queue, "Create playlist" (Sidebar), Like (TrackInfo, with pressed), queue (PlayerExtras), back (TopBar), login (MobileHeader), and the row actions in tables (remove/add, size xs). BackLink uses size-icon-sm and drops a duplicate hover. Decision (not blocking): remove TopBar's decorative "forward" button and PlayerExtras' decorative AlignJustify icon (visually dead code). TransportControls' buttons (shuffle/prev/next/repeat) are deliberately left unmigrated: they currently have no background or hit-box of their own, and IconButton always applies a fixed-size box — migrating them would have added a visible hover pill that couldn't be verified without Docker this session. Verified with npm run check/build.
34 lines
797 B
Svelte
34 lines
797 B
Svelte
<script lang="ts">
|
|
import ArrowLeft from '@lucide/svelte/icons/arrow-left';
|
|
import { previousPage } from '$lib/navigation.svelte';
|
|
|
|
interface Props {
|
|
href: string;
|
|
label: string;
|
|
}
|
|
|
|
let { href, label }: Props = $props();
|
|
|
|
const previous = $derived(previousPage());
|
|
const target = $derived(previous ?? { url: href, label });
|
|
|
|
function onclick(event: MouseEvent) {
|
|
if (!previous) return;
|
|
if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)
|
|
return;
|
|
event.preventDefault();
|
|
history.back();
|
|
}
|
|
</script>
|
|
|
|
<a
|
|
href={target.url}
|
|
{onclick}
|
|
class="inline-flex items-center text-fg-3 transition-colors hover:text-accent-soft"
|
|
>
|
|
<span class="grid size-8 place-items-center">
|
|
<ArrowLeft class="size-icon-sm" />
|
|
</span>
|
|
{target.label}
|
|
</a>
|