web: music dock joins the layout flow — removes the nav-dock overlap hacks
The music dock was position:fixed, overlaying the bottom of the content, so the nav dock needed a pile of hacks to dodge it: a hand-measured MUSIC_DOCK_HEIGHT (72) constant, a presence flag, a translateY lift, and a matching hover-threshold lift (via a ref) so it wouldn't slide away under the cursor. Fragile the moment the music dock's height changed. Now the dock is an in-flow bottom bar that reserves its own height: - DashboardLayout is a flex column: the content region (flex-1, min-h-0) shrinks when the music dock takes its space; MusicPlayerHost renders an in-flow bar (shrink-0) instead of a fixed overlay. - The nav Dock is absolute within the content region and measures its reveal/hide boundary from that region's bottom edge (a boundaryRef) — so it always sits just above whatever's at the bottom, music dock or not, with zero knowledge of it. - Deleted MUSIC_DOCK_HEIGHT, musicDockPresent, the lift, and the transform hack. Bonus: content at the very bottom is no longer hidden under the fixed dock. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -249,8 +249,10 @@ export const MusicPlayerHost = () => {
|
||||
|
||||
if (!current) return null;
|
||||
|
||||
// In-flow bottom bar (NOT position:fixed) — it reserves its own height so the content above shrinks to
|
||||
// fit and the nav dock naturally sits above it, no overlap hacks needed.
|
||||
return (
|
||||
<div className="fixed inset-x-0 bottom-0 z-50 flex items-center gap-3 border-t border-border bg-card/95 px-4 py-2 backdrop-blur">
|
||||
<div className="flex shrink-0 items-center gap-3 border-t border-border bg-card/95 px-4 py-2 backdrop-blur">
|
||||
{/* cover + info — click to open this album in /music */}
|
||||
<button
|
||||
type="button"
|
||||
|
||||
@@ -19,9 +19,6 @@ export type MusicPlayerState = {
|
||||
|
||||
const INITIAL: MusicPlayerState = { queue: [], index: 0, playing: false };
|
||||
|
||||
// Amount (px) the nav Dock shifts up while the music dock is present, so it clears it.
|
||||
export const MUSIC_DOCK_HEIGHT = 72;
|
||||
|
||||
export function useMusicPlayer() {
|
||||
const [state, setState] = useGlobal<MusicPlayerState>('MUSIC_PLAYER', INITIAL);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user