web: single-pointer selection + post-action focus, video debounce, tags metadata sidebar

Selection: plain arrow nav now clears prior multi-selection so exactly
one tile is ringed at a time; shift-extend still grows from the anchor.
onApprove / onRestore / onDelete advance focus via focusAfter(ids)
before clearing selection, matching onArchive.

Preview: defer mounting <VideoPlayer> by 250ms so arrow-skim across
video tiles doesn't open and immediately cancel range requests; hard-
abort the underlying <video> on unmount so the connection releases.

Tags drill view: right-sidebar metadata wired in (single-photo
RightSidebar, BulkMetadataSidebar for >=2 selected), resizable edge
mirrors the timeline.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-18 23:52:16 +02:00
parent c783f129cc
commit 155e9bb126
7 changed files with 173 additions and 37 deletions

View File

@@ -26,6 +26,7 @@
import { isAuthenticated } from "$lib/stores/session.svelte";
import { untrack } from "svelte";
import {
clearSelection,
isSelected,
selectRange,
selection,
@@ -570,6 +571,10 @@
const destUid = rows[r]?.uids[c];
if (!destUid) return;
// Plain arrow nav collapses any prior multi-selection to the cursor
// (mirrors gridKeyNav.moveFocus). Shift-extend keeps `ids` growing
// from the anchor below.
if (!extending) clearSelection();
setFocused(destUid);
if (!extending) setAnchor(destUid);
if (extending && selection.focused) selectRange(destUid);