{ 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}