fix(ui): align island header separators via shared header height
This commit is contained in:
@@ -12,10 +12,12 @@
|
||||
<DockPanel>
|
||||
|
||||
<!-- ── Header (sticky top): id · title · trash/skull · gear — task detail only ── -->
|
||||
<Border DockPanel.Dock="Top" Classes="island-header"
|
||||
IsVisible="{Binding IsTaskDetailVisible}">
|
||||
<detail:TaskHeaderBar/>
|
||||
</Border>
|
||||
<Grid DockPanel.Dock="Top" IsVisible="{Binding IsTaskDetailVisible}">
|
||||
<Grid.RowDefinitions><RowDefinition Height="Auto" SharedSizeGroup="IslandHeader"/></Grid.RowDefinitions>
|
||||
<Border Classes="island-header">
|
||||
<detail:TaskHeaderBar/>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<!-- ── Body: task details (normal), notes editor (notes mode), or prep log (prep mode) ── -->
|
||||
<Grid>
|
||||
|
||||
@@ -183,27 +183,30 @@
|
||||
<DockPanel LastChildFill="True">
|
||||
|
||||
<!-- ── Header ── -->
|
||||
<Border DockPanel.Dock="Top" Classes="island-header">
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="heading" Text="{loc:Tr lists.heading}"/>
|
||||
<Grid DockPanel.Dock="Top">
|
||||
<Grid.RowDefinitions><RowDefinition Height="Auto" SharedSizeGroup="IslandHeader"/></Grid.RowDefinitions>
|
||||
<Border Classes="island-header">
|
||||
<StackPanel Spacing="4">
|
||||
<TextBlock Classes="heading" Text="{loc:Tr lists.heading}"/>
|
||||
|
||||
<!-- Search row -->
|
||||
<Border Classes="search-wrap" Margin="0,8,0,12">
|
||||
<Grid ColumnDefinitions="Auto,*,Auto" VerticalAlignment="Center">
|
||||
<PathIcon Grid.Column="0" Width="14" Height="14"
|
||||
Data="{StaticResource Icon.Search}"
|
||||
Foreground="{DynamicResource TextFaintBrush}"
|
||||
Margin="2,0,0,0"/>
|
||||
<TextBox Grid.Column="1" x:Name="SearchBox" Classes="search-inner"
|
||||
PlaceholderText="{loc:Tr lists.searchPlaceholder}"
|
||||
Text="{Binding SearchText, Mode=TwoWay}"/>
|
||||
<Border Grid.Column="2" Classes="kbd" Margin="0,0,2,0">
|
||||
<TextBlock Text="{loc:Tr lists.searchKbd}"/>
|
||||
</Border>
|
||||
</Grid>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<!-- Search row -->
|
||||
<Border Classes="search-wrap" Margin="0,8,0,12">
|
||||
<Grid ColumnDefinitions="Auto,*,Auto" VerticalAlignment="Center">
|
||||
<PathIcon Grid.Column="0" Width="14" Height="14"
|
||||
Data="{StaticResource Icon.Search}"
|
||||
Foreground="{DynamicResource TextFaintBrush}"
|
||||
Margin="2,0,0,0"/>
|
||||
<TextBox Grid.Column="1" x:Name="SearchBox" Classes="search-inner"
|
||||
PlaceholderText="{loc:Tr lists.searchPlaceholder}"
|
||||
Text="{Binding SearchText, Mode=TwoWay}"/>
|
||||
<Border Grid.Column="2" Classes="kbd" Margin="0,0,2,0">
|
||||
<TextBlock Text="{loc:Tr lists.searchKbd}"/>
|
||||
</Border>
|
||||
</Grid>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<!-- ── No-repo banner — visible until any User list has a linked working dir; no
|
||||
dismiss, no persisted state, comes back if the last repo link is removed. ── -->
|
||||
|
||||
@@ -10,64 +10,67 @@
|
||||
<DockPanel LastChildFill="True">
|
||||
|
||||
<!-- Header -->
|
||||
<Border DockPanel.Dock="Top" Classes="island-header">
|
||||
<Grid ColumnDefinitions="*,Auto">
|
||||
<StackPanel Grid.Column="0" Spacing="4">
|
||||
<TextBlock Classes="eyebrow" Text="{Binding HeaderEyebrow}"/>
|
||||
<TextBlock Classes="display"
|
||||
Text="{Binding HeaderTitle}"
|
||||
TextTrimming="CharacterEllipsis"/>
|
||||
<TextBlock Classes="meta"
|
||||
Foreground="{DynamicResource TextMuteBrush}"
|
||||
Text="{Binding Subtitle}"
|
||||
TextTrimming="CharacterEllipsis"/>
|
||||
<ctl:OperationIndicator Status="{Binding PlanningOperation}"/>
|
||||
</StackPanel>
|
||||
<Grid DockPanel.Dock="Top">
|
||||
<Grid.RowDefinitions><RowDefinition Height="Auto" SharedSizeGroup="IslandHeader"/></Grid.RowDefinitions>
|
||||
<Border Classes="island-header">
|
||||
<Grid ColumnDefinitions="*,Auto">
|
||||
<StackPanel Grid.Column="0" Spacing="4">
|
||||
<TextBlock Classes="eyebrow" Text="{Binding HeaderEyebrow}"/>
|
||||
<TextBlock Classes="display"
|
||||
Text="{Binding HeaderTitle}"
|
||||
TextTrimming="CharacterEllipsis"/>
|
||||
<TextBlock Classes="meta"
|
||||
Foreground="{DynamicResource TextMuteBrush}"
|
||||
Text="{Binding Subtitle}"
|
||||
TextTrimming="CharacterEllipsis"/>
|
||||
<ctl:OperationIndicator Status="{Binding PlanningOperation}"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="4"
|
||||
VerticalAlignment="Top">
|
||||
<Border Classes="kbd" VerticalAlignment="Center" Margin="0,0,6,0"
|
||||
IsVisible="{Binding HasStatusPill}">
|
||||
<TextBlock Text="{Binding StatusPill}"/>
|
||||
</Border>
|
||||
<Button Classes="icon-btn" Classes.active="{Binding IsShowingCompleted}"
|
||||
IsVisible="{Binding !IsNotesList}"
|
||||
Command="{Binding ToggleShowCompletedCommand}"
|
||||
ToolTip.Tip="{loc:Tr tasks.showCompletedTip}">
|
||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Eye}"/>
|
||||
</Button>
|
||||
<Button Classes="icon-btn" IsVisible="{Binding IsLetClaudeVisible}"
|
||||
Command="{Binding LetClaudeHandleCommand}" ToolTip.Tip="{loc:Tr tasks.letClaudeTip}">
|
||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.AgentSuggested}"/>
|
||||
</Button>
|
||||
<Button Classes="icon-btn" IsVisible="{Binding IsMergeReviewsVisible}"
|
||||
Command="{Binding MergeReviewsCommand}" ToolTip.Tip="{loc:Tr tasks.mergeReviewsTip}">
|
||||
<!-- Icon.GitBranch is line-art: stroke-rendered, PathIcon would fill the lines away -->
|
||||
<Viewbox Width="16" Height="16">
|
||||
<Path Classes="icon-stroke" Data="{StaticResource Icon.GitBranch}"/>
|
||||
</Viewbox>
|
||||
</Button>
|
||||
<Button Classes="icon-btn" IsVisible="{Binding IsQuickClaudeVisible}"
|
||||
Command="{Binding OpenQuickClaudeSessionCommand}" ToolTip.Tip="{loc:Tr tasks.quickClaudeTip}">
|
||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.ArrowOut}"/>
|
||||
</Button>
|
||||
<Button Classes="icon-btn" IsVisible="{Binding IsMyDayList}"
|
||||
Command="{Binding ClearDayCommand}" ToolTip.Tip="{loc:Tr tasks.clearDayTip}">
|
||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Broom}"/>
|
||||
</Button>
|
||||
<Button Classes="icon-btn" IsVisible="{Binding IsMyDayList}"
|
||||
Command="{Binding ShowPrepLogCommand}" ToolTip.Tip="{loc:Tr tasks.planMyDayTip}">
|
||||
<Viewbox Width="18" Height="18">
|
||||
<Path Classes="icon-stroke" Data="{StaticResource Icon.PlanDay}"/>
|
||||
</Viewbox>
|
||||
</Button>
|
||||
<Button Classes="icon-btn" IsVisible="{Binding !IsNotesList}"
|
||||
Command="{Binding OpenListSettingsCommand}" ToolTip.Tip="{loc:Tr tasks.listSettingsTip}">
|
||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Settings}"/>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="4"
|
||||
VerticalAlignment="Top">
|
||||
<Border Classes="kbd" VerticalAlignment="Center" Margin="0,0,6,0"
|
||||
IsVisible="{Binding HasStatusPill}">
|
||||
<TextBlock Text="{Binding StatusPill}"/>
|
||||
</Border>
|
||||
<Button Classes="icon-btn" Classes.active="{Binding IsShowingCompleted}"
|
||||
IsVisible="{Binding !IsNotesList}"
|
||||
Command="{Binding ToggleShowCompletedCommand}"
|
||||
ToolTip.Tip="{loc:Tr tasks.showCompletedTip}">
|
||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Eye}"/>
|
||||
</Button>
|
||||
<Button Classes="icon-btn" IsVisible="{Binding IsLetClaudeVisible}"
|
||||
Command="{Binding LetClaudeHandleCommand}" ToolTip.Tip="{loc:Tr tasks.letClaudeTip}">
|
||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.AgentSuggested}"/>
|
||||
</Button>
|
||||
<Button Classes="icon-btn" IsVisible="{Binding IsMergeReviewsVisible}"
|
||||
Command="{Binding MergeReviewsCommand}" ToolTip.Tip="{loc:Tr tasks.mergeReviewsTip}">
|
||||
<!-- Icon.GitBranch is line-art: stroke-rendered, PathIcon would fill the lines away -->
|
||||
<Viewbox Width="16" Height="16">
|
||||
<Path Classes="icon-stroke" Data="{StaticResource Icon.GitBranch}"/>
|
||||
</Viewbox>
|
||||
</Button>
|
||||
<Button Classes="icon-btn" IsVisible="{Binding IsQuickClaudeVisible}"
|
||||
Command="{Binding OpenQuickClaudeSessionCommand}" ToolTip.Tip="{loc:Tr tasks.quickClaudeTip}">
|
||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.ArrowOut}"/>
|
||||
</Button>
|
||||
<Button Classes="icon-btn" IsVisible="{Binding IsMyDayList}"
|
||||
Command="{Binding ClearDayCommand}" ToolTip.Tip="{loc:Tr tasks.clearDayTip}">
|
||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Broom}"/>
|
||||
</Button>
|
||||
<Button Classes="icon-btn" IsVisible="{Binding IsMyDayList}"
|
||||
Command="{Binding ShowPrepLogCommand}" ToolTip.Tip="{loc:Tr tasks.planMyDayTip}">
|
||||
<Viewbox Width="18" Height="18">
|
||||
<Path Classes="icon-stroke" Data="{StaticResource Icon.PlanDay}"/>
|
||||
</Viewbox>
|
||||
</Button>
|
||||
<Button Classes="icon-btn" IsVisible="{Binding !IsNotesList}"
|
||||
Command="{Binding OpenListSettingsCommand}" ToolTip.Tip="{loc:Tr tasks.listSettingsTip}">
|
||||
<PathIcon Width="15" Height="15" Data="{StaticResource Icon.Settings}"/>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<!-- Add-task row -->
|
||||
<Border DockPanel.Dock="Top" Classes="add-task" Margin="16,14,16,8"
|
||||
|
||||
@@ -142,7 +142,8 @@
|
||||
</Border>
|
||||
|
||||
<!-- Three islands (user-resizable) -->
|
||||
<Grid Grid.Row="1" Margin="7">
|
||||
<!-- Shared-size scope: the island headers share one height so their separators line up -->
|
||||
<Grid Grid.Row="1" Margin="7" Grid.IsSharedSizeScope="True">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="260" MinWidth="200"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
|
||||
Reference in New Issue
Block a user