{#each Object.entries($liveMetadata.cursorPositions) as [userId, cursor], index (userId)} {@const foregroundApp = $liveMetadata.foregroundApps.get(userId)} {@const popoverId = `scene-user-${index}`} {@const interaction = $incomingInteraction?.friendId === userId ? $incomingInteraction : null} {#if cursor && (userId === $liveMetadata.localId || $onlineFriendIds.has(userId))} {@const renderedX = selectedUserId === userId ? selectedUserX : cursor.mapped.x}
{#if interaction}
dismissInteraction(interaction.interactionId)} onOpenImage={(source) => { viewedImage = { source, senderName: displayName(userId) }; dismissInteraction(interaction.interactionId); }} /> {/if} {#if foregroundApp?.ico}
{/if}
setPopoverOpen(userId, cursor.mapped.x, open, trigger)} triggerClass="scene-hitbox" panelClass="scene-hitbox bottom-[calc(100%+0.75rem)] w-68" panelStyle={`left: clamp(calc(0.5rem - ${(renderedX ?? cursor.mapped.x) * 100}vw), -8rem, calc(100vw - ${(renderedX ?? cursor.mapped.x) * 100}vw - 17.5rem))`} closeOnOutsidePointer={lockedPopoverUserId !== userId} closeOnWindowBlur={lockedPopoverUserId !== userId} closeOnFocusOut={lockedPopoverUserId !== userId} > {#snippet trigger()}
{/snippet}
(lockedPopoverUserId = active ? userId : null)} onDismiss={() => { selectedUserId = null; selectedUserX = null; lockedPopoverUserId = null; }} onSent={() => { selectedUserId = null; selectedUserX = null; lockedPopoverUserId = null; }} />
{/if} {/each}
{#if viewedImage}
(viewedImage = null)} /> {/if}