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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user