{#if mentionUnreadCount > 0 || connectionError}
{#if mentionUnreadCount > 0} ({mentionUnreadCount} mention{mentionUnreadCount > 1 ? 's' : ''}) {/if} {#if connectionError} ⚠️ {connectionError} {/if}
{/if}
{#if rateLimitWarning}
{rateLimitWarning} {#if cooldownEndTime} Vous pourrez envoyer un autre message dans {cooldownProgress.toFixed(1)}s {/if}
{/if}
handleScroll(e)} bind:this={chatArea} > {#if isInitialLoading}
{:else if isLoadingMore}
{/if} {#if showRegistrationPrompt}
Vous devez être inscrit pour lire l'historique complet de ce salon.
{/if} {#each visibleMessages as message (message.id)}
{#if message.type === 'emote'} {message.user.nickname} {message.content} {:else} {message.user.nickname}: {/if}
{/each}
{#if currentUser}
{/if}
{#if currentTextStyle.gradient && currentTextStyle.gradient.length > 1}
{:else}
{/if} {#if showCharCounter} {currentMessage.length}/{MAX_MESSAGE_LENGTH} {/if}
{#if mentionOpen} {/if} {#if cooldownEndTime}
{/if}

{usersOnline.length} {usersOnline.length === 1 ? 'personne ici' : 'personnes ici'}

{#each usersOnline as user (user.id)}
{ e.stopPropagation(); selectedUserId = user.id; closeUserMenu(); }} ondblclick={() => openImWith(user)} oncontextmenu={(e) => openUserMenu(e, user)} onkeydown={(e) => { if (e.key === 'Enter') openImWith(user); }} > {user.nickname}
{/each} {#if usersOffline.length > 0} {#each usersOffline as user (user.id)}
{ e.stopPropagation(); selectedUserId = user.id; closeUserMenu(); }} ondblclick={() => openImWith(user)} oncontextmenu={(e) => openUserMenu(e, user)} onkeydown={(e) => { if (e.key === 'Enter') openImWith(user); }} > {user.nickname}
{/each} {/if}
{#if userMenu} {/if}