{#snippet menu()} {/snippet}
{profile?.nickname ?? otherNickname} {STATUS_LABELS_FR[status] ?? 'Hors ligne'}
{#if status === 'away' && profile?.awayMessage}
Message d'absence : {profile.awayMessage}
{/if}
{#if !messagesQuery?.data}
Chargement…
{/if} {#each messages as message (message.id)} {#if message.type === 'system'}
{message.content}
{:else}
{message.user.nickname}{desktop.showTimestamps ? ` (${formatFrenchTime(new Date(message.timestamp)).replace('h', ':')})` : ''}:
{/if} {/each} {#if typingQuery?.data?.length}
{typingQuery.data.map((user) => user.nickname).join(', ')} est en train d'écrire…
{/if}
{ const needsSpace = draft.length > 0 && !draft.endsWith(' '); draft = `${draft}${needsSpace ? ' ' : ''}${code} `; document.getElementById(`im-input-${roomId}`)?.focus(); }} />
{#if cooldownSeconds > 0}Patiente {cooldownSeconds}s…{:else if error}{error}{/if} {#if draft.length > MAX_MESSAGE_LENGTH * 0.8}{draft.length}/{MAX_MESSAGE_LENGTH}{/if}