feat: the home band keeps its hero's own cross, and the side trips stay quiet

The CLI and hub buttons take the shape the hero gave them before the bar did —
`xs`, hint-coloured, the hub keeping its outbound mark — so a side trip does not
read as loudly as the thing the page is for.

The ellipsis is gone while the hero is on the page: the hero's cross already
puts it away, so a menu whose only item repeats that is a button that does
nothing new. It comes back when it has something of its own to carry, which is
the side trips on a narrow bar and the way back to a hero that has been put
away. That entry is now "Pin session hero to homepage", and "Remove session
chat" survives only as the cross's own words, where one action keeps one name.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Guilhem Lemouel
2026-10-07 03:50:26 -07:00
co-authored by Claude Opus 5
parent 87a975f025
commit 16bb5e194a
@@ -20,7 +20,15 @@
<script lang="ts">
import TextInput from '$lib/components/text_input/TextInput.svelte'
import { ArrowUp, Globe2, KeyRound, PlugZap, Settings, WandSparkles, X } from 'lucide-svelte'
import {
ArrowUp,
ExternalLink,
Globe2,
KeyRound,
PlugZap,
Settings,
WandSparkles
} from 'lucide-svelte'
import Button from '../common/button/Button.svelte'
import { Badge } from '../common'
import CloseButton from '../common/CloseButton.svelte'
@@ -366,19 +374,25 @@
goes when the bar cannot hold it, not where it belongs. They fold back below the width
above. -->
{#if sideTripsInBar}
<!-- The same quiet shape the hero gave them before the bar took them: xs, hint-coloured,
and the hub keeps its outbound mark. They sit beside the page's own buttons, and a
side trip should not read as loudly as the thing the page is for. -->
<Button
variant="subtle"
unifiedSize="sm"
unifiedSize="xs"
btnClasses="!text-2xs !text-hint"
startIcon={{ icon: PlugZap }}
on:click={() => homeConnectDrawer?.openDrawer?.()}
onClick={() => homeConnectDrawer?.openDrawer?.()}
>
CLI / MCP
</Button>
{#if hubOffered}
<Button
variant="subtle"
unifiedSize="sm"
unifiedSize="xs"
btnClasses="!text-2xs !text-hint"
startIcon={{ icon: Globe2 }}
endIcon={{ icon: ExternalLink }}
href={$hubBaseUrlStore}
target="_blank"
>
@@ -400,26 +414,21 @@
{/if}
<!-- Nothing left to hold once the side trips stand in the bar and the composer is on the
page: an ellipsis that opens an empty menu is a button that does nothing. -->
{#if showComposer || !sideTripsInBar}
<!-- No menu while the hero is on the page and its side trips are in the bar: the hero's own
cross removes it, so an ellipsis holding a second way to do that is a button whose only
item is a duplicate. -->
{#if !sideTripsInBar || (showComposer && collapsed)}
<DropdownV2
placement="bottom-end"
size="sm"
items={[
...(showComposer
...(showComposer && collapsed
? [
collapsed
? {
displayName: 'Restore session chat',
icon: WandSparkles,
action: () => setCollapsed(false)
}
: {
// The same words as the cross on the composer itself: one thing, one name,
// whichever of the two a reader reaches for.
displayName: 'Remove session chat',
icon: X,
action: () => setCollapsed(true)
}
{
displayName: 'Pin session hero to homepage',
icon: WandSparkles,
action: () => setCollapsed(false)
}
]
: []),
...(sideTripsInBar