Phase 2C: fix reel centering via window-relative card positioning

The transitioned track translateY collapsed to 0 in Chromium (percent-
translated zero-height track), leaving the active cover one stride low
per step. The track is now a fixed anchor at the reel centre; each card
positions itself at (index - activeIndex) * stride and animates its own
small `top`, so no coordinate ever exceeds +/-RENDER_RADIUS * stride.

Verified with the transition ON: centre offset 0 at every index in the
12- and 500-item fixtures, 5 cards in the DOM at scale, wheel gates,
dialog semantics, Tab containment, focus restore, and polite announce
all pass. Dev window.__preview*/__ui handles removed from App.svelte.
This commit is contained in:
KeelrLeek committed 2026-07-22 19:38:10 -05:00
1 parent e6252b9bb3
commit 56036216f8
2 files changed
+27 -28

No files matched your search

+1 -10
View File
@@ -6,7 +6,7 @@
import ArtworkViewer from "./components/ArtworkViewer.svelte";
import LoginModal from "./components/LoginModal.svelte";
import PreviewOverlay from "./components/PreviewOverlay.svelte";
import { previewUi, openPreviewFixture } from "./lib/preview/previewSession.svelte.js";
import { previewUi } from "./lib/preview/previewSession.svelte.js";
import Home from "./views/Home.svelte";
import Search from "./views/Search.svelte";
import Library from "./views/Library.svelte";
@@ -43,15 +43,6 @@
refreshLibrary();
refreshPlaylists();
// Dev-only hook for the Phase 2 exit-gate check (500-item fixture in a
// plain browser) and for driving the modal without a Tauri backend.
if (import.meta.env.DEV && typeof window !== "undefined") {
window.__previewFixture = (n = 12) => openPreviewFixture(n);
window.__previewUi = previewUi; // debug: the app's own store instance
window.__ui = ui; // debug: known-good reactive store, same instance
window.__togglePv = () => (previewUi.open = !previewUi.open);
window.__toggleNp = () => (ui.nowPlaying = !ui.nowPlaying);
}
</script>
<div