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