in src/maps_planner/index.ts [638:709]
function createTimeline() {
if (!timeline || dayPlanItinerary.length === 0) return;
timeline.innerHTML = '';
dayPlanItinerary.forEach((item, index) => {
const timelineItem = document.createElement('div');
timelineItem.className = 'timeline-item';
const timeDisplay = item.time || 'Flexible';
timelineItem.innerHTML = `
<div class="timeline-time">${timeDisplay}</div>
<div class="timeline-connector">
<div class="timeline-dot"></div>
<div class="timeline-line"></div>
</div>
<div class="timeline-content" data-index="${index}">
<div class="timeline-title">${item.name}</div>
<div class="timeline-description">${item.description}</div>
${item.duration ? `<div class="timeline-duration">${item.duration}</div>` : ''}
</div>
`;
const timelineContent = timelineItem.querySelector('.timeline-content');
if (timelineContent) {
timelineContent.addEventListener('click', () => {
const popupIndex = popUps.findIndex((p) => p.name === item.name);
if (popupIndex !== -1) {
highlightCard(popupIndex);
map.panTo(popUps[popupIndex].position);
}
});
}
timeline.appendChild(timelineItem);
});
if (lines.length > 0 && isPlannerMode) {
const timelineItems = timeline.querySelectorAll('.timeline-item');
for (let i = 0; i < timelineItems.length - 1; i++) {
const currentItem = dayPlanItinerary[i];
const nextItem = dayPlanItinerary[i + 1];
const connectingLine = lines.find(
(line) =>
line.name.includes(currentItem.name) ||
line.name.includes(nextItem.name),
);
if (
connectingLine &&
(connectingLine.transport || connectingLine.travelTime)
) {
const transportItem = document.createElement('div');
transportItem.className = 'timeline-item transport-item';
transportItem.innerHTML = `
<div class="timeline-time"></div>
<div class="timeline-connector">
<div class="timeline-dot" style="background-color: #999;"></div>
<div class="timeline-line"></div>
</div>
<div class="timeline-content transport">
<div class="timeline-title">
<i class="fas fa-${getTransportIcon(connectingLine.transport || 'travel')}"></i>
${connectingLine.transport || 'Travel'}
</div>
<div class="timeline-description">${connectingLine.name}</div>
${connectingLine.travelTime ? `<div class="timeline-duration">${connectingLine.travelTime}</div>` : ''}
</div>
`;
timelineItems[i].after(transportItem);
}
}
}
}