{
if (!interactive || event.target !== event.currentTarget) return;
// The surrounding bits-ui ContextMenu.Trigger opens on the bubbling
// contextmenu event and prevents the native menu itself. Calling
// preventDefault() here makes the trigger treat the event as handled
// (it bails when defaultPrevented is set), leaving no menu at all.
oncontext?.(undefined, event);
}}
>
{#each visibleElements as element (element.id)}
{@const selected = isSelected(element.id)}
{@const singleSelected = selected && selectedIds.length === 1}
beginDrag(event, element)}
oncontextmenu={(event) => {
if (!interactive) return;
// Let the event bubble so the editor's ContextMenu.Trigger can open.
oncontext?.(element.id, event);
}}
onkeydown={(event) => {
if (interactive && (event.key === 'Enter' || event.key === ' ')) {
event.preventDefault();
selectElement(element.id, modifierPressed(event));
}
}}
>
{#if element.type === 'text'}
{element.text}
{:else if element.type === 'image'}
})
{:else if element.type === 'video'}
{:else}
{/if}
{#if singleSelected && !element.locked}
{#each resizeDirections as direction (direction)}
beginResize(event, element, direction)}
role="presentation"
>
{/each}
{element.type}
{/if}
{#if selected && selectedIds.length > 1}
selected
{/if}
{/each}
{#if snapGuides.x !== undefined}
{/if}
{#if snapGuides.y !== undefined}
{/if}
{#if marquee}
{/if}