{#each timeMarkers as marker} {@const xPos = timeToX(marker.value)} {#if xPos >= PADDING && xPos <= effectiveWidth - PADDING}
{formatTime(marker.value)}
{/if} {/each}
{#each sorted as item} {@const xStart = timeToX(item.start)} {@const xEnd = timeToX(item.end)} {@const barWidth = Math.max(xEnd - xStart, 8)} {@const isTop = item.placement === 'top'} {@const rowOffset = (item.row - 1) * (BAR_HEIGHT + BAR_GAP)} {@const yPos = isTop ? TIMELINE_Y - BAR_OFFSET - rowOffset - BAR_HEIGHT : TIMELINE_Y + BAR_OFFSET + rowOffset} {@const color = getEventColor(item)}
handleItemClick(item, e)} on:keydown={(e) => handleItemKeydown(item, e)} >
{item.title}
{/each}
{#if selectedItem}
(selectedItem = null)}>×
{selectedItem.title}
{#if selectedItem.subtitle}
{selectedItem.subtitle}
{/if}
{selectedItem.labelTime || formatTime(selectedItem.start)} {#if selectedItem.region}
{selectedItem.region} {/if}
{#if selectedItem.tags && selectedItem.tags.length > 0}
{#each selectedItem.tags as tag}
{tag}
{/each}
{/if}
{/if}