Canvas: sist berørt boks forblir øverst (persistent z-order)

Hver gang en boks klikkes/dras økes en global z-teller og boksen
får høyeste verdi. Rekkefølgen bevares etter at boksen deselekteres.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
vegard 2026-03-19 07:21:51 +00:00
parent cf992b6f58
commit e520b8037c

View file

@ -63,6 +63,8 @@
let isLassoing = $state(false);
let spaceHeld = $state(false);
let dragTargetId: string | null = null;
let topZCounter = $state(1);
let zOrderMap = $state(new Map<string, number>());
let dragStartWorld = { x: 0, y: 0 };
let dragObjectStart = { x: 0, y: 0 };
let dragGroupStarts = new Map<string, { x: number; y: number }>();
@ -212,6 +214,13 @@
}
onSelectionChange?.([...selectedIds]);
// Bring to front
topZCounter++;
zOrderMap = new Map(zOrderMap);
for (const sid of selectedIds) {
zOrderMap.set(sid, topZCounter);
}
// Record start positions for all selected objects (group drag)
dragGroupStarts = new Map();
for (const sid of selectedIds) {
@ -506,7 +515,7 @@
style:top="{obj.y}px"
style:width="{obj.width}px"
style:height="{obj.height}px"
style:z-index={selectedIds.has(obj.id) ? 10 : 1}
style:z-index={zOrderMap.get(obj.id) ?? 1}
>
{@render renderObject(obj)}
</div>