{$t('chat.conversations')}

{#each conversations as conv}
{/each} {#if conversations.length === 0}

{$t('chat.no_conversations')}

{/if}
✈️

{#if collectionName && !panelMode} {$t('travel_assistant')} Β· {collectionName} {:else} {$t('travel_assistant')} {/if}

{#if chatProviders.length === 0}
{providerError || 'No AI providers configured.'} Add an API key in Settings
{:else}
{#if messages.length === 0 && !activeConversation}
🌍

{$t('chat.welcome_title')}

{$t('chat.welcome_message')}

{:else} {#each visibleMessages as msg}
{#if msg.role === 'assistant'}
{@html renderAssistantMarkdown(msg.content)}
{:else}
{msg.content}
{/if} {#if msg.role === 'assistant' && msg.tool_results}
{#each deduplicateContextTools(uniqueToolResultsByCallId(msg.tool_results)) as result} {#if hasPlaceResults(result)}
{#each getPlaceResults(result) as place} {@const placeLink = getPreferredPlaceLink(place)}

{place.name}

{#if place.address}

{place.address}

{/if} {#if place.rating}
⭐ {place.rating}
{/if} {#if placeLink} {/if} {#if collectionId} {@const isDuplicate = mergedLocationNames.has( normalizeLocationName(place.name) )} {/if}
{/each}
{:else if hasWebSearchResults(result)}
{#each getWebSearchResults(result) as item}

{item.snippet}

{/each}
{:else}
{getToolSummary(result).icon} {getToolSummary(result).text}
{/if} {/each}
{/if} {#if msg.role === 'assistant' && isStreaming && msg.id === lastVisibleMessageId}
{$t('processing')}
{/if}
{/each} {/if}
{#if promptTripContext} {/if} {#if startDate && endDate} {/if}
{/if}
{#if showDateSelector && selectedPlaceToAdd} {/if}