Phase C (T2-1..T3-10): command palette, reader mode (real Readability.js, E2E), boost force-dark, screenshot, split view, vertical tabs, Glance (Alt+click), tab groups (6 colors), workspaces, speed dial, InPrivate tabs, quick find, source view, print, PiP, TTS (94 tests GREEN)

This commit is contained in:
Yun Chan 2026-08-15 15:22:44 +09:00
parent 0caa1111e7
commit 406957088f
14 changed files with 3496 additions and 7 deletions

View file

@ -262,8 +262,15 @@
BorderBrush="{StaticResource BorderSubtle}" BorderThickness="1,1,1,0"
Padding="10,7,4,7" MouseLeftButtonUp="Tab_Click"
PreviewMouseDown="Tab_PreviewMouseDown"
MouseRightButtonUp="Tab_ContextMenu"
ToolTip="{Binding Url}">
<DockPanel>
<Border DockPanel.Dock="Left" Width="3" CornerRadius="2" Margin="0,0,7,0"
Visibility="{Binding GroupColor, Converter={x:Static feat:StringToBrushConverter.VisibleIf}}">
<Border.Background>
<SolidColorBrush Color="{Binding GroupColor, Converter={x:Static feat:StringToBrushConverter.Conv}}"/>
</Border.Background>
</Border>
<Button DockPanel.Dock="Right" Style="{StaticResource CardActionButton}"
Content="&#xE711;" FontSize="9" Padding="5,3" Margin="4,0,0,0"
Click="TabClose_Click" ToolTip="탭 닫기 (Ctrl+W)"
@ -302,12 +309,20 @@
<!-- ===== 본문 ===== -->
<Grid Grid.Row="3">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="SideStripCol" Width="0"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition x:Name="SplitCol" Width="0"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition x:Name="RightCol" Width="420" MinWidth="56" MaxWidth="900"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<!-- T2-5 세로 탭 사이드 호스트 -->
<Border x:Name="TabSideHost" Grid.Column="0" Background="{StaticResource PanelBg}"
BorderBrush="{StaticResource BorderSubtle}" BorderThickness="0,0,1,0"
ClipToBounds="True" MinWidth="170" MaxWidth="330"/>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
@ -348,7 +363,15 @@
</Grid>
<!-- 리사이즈 핸들 (펼침 상태에서만 노출). 드래그로 우측 패널 폭 변경. -->
<GridSplitter x:Name="RightSplitter" Grid.Column="1" Width="7"
<!-- T2-3 분할 화면: 드래그 스플리터 + 우측 탭 호스트 -->
<GridSplitter x:Name="SplitSplitter" Grid.Column="2" Width="7"
HorizontalAlignment="Center" VerticalAlignment="Stretch"
ResizeBehavior="PreviousAndNext" ResizeDirection="Columns"
Background="Transparent" Cursor="SizeWE" Visibility="Collapsed"/>
<Border x:Name="SplitRightHost" Grid.Column="3" ClipToBounds="True" Background="Black"
Visibility="Collapsed"/>
<GridSplitter x:Name="RightSplitter" Grid.Column="4" Width="7"
HorizontalAlignment="Center" VerticalAlignment="Stretch"
ResizeBehavior="PreviousAndNext" ResizeDirection="Columns"
Background="Transparent" Cursor="SizeWE"
@ -368,7 +391,7 @@
</GridSplitter>
<!-- 범용 우측 패널: 헤더(토글 버튼, 항상 노출) + 본문(펼침 시). 접기/펼치기·폭·상태 저장. -->
<Border Grid.Column="2" Background="{StaticResource PanelBg}"
<Border Grid.Column="5" Background="{StaticResource PanelBg}"
BorderBrush="{StaticResource BorderSubtle}" BorderThickness="1,0,0,0">
<Grid>
<Grid.RowDefinitions>
@ -583,6 +606,33 @@
</Border>
</Popup>
<!-- ===== 명령 팔레트 (T2-1, Ctrl+K) ===== -->
<Popup Name="PalettePopup" PlacementTarget="{Binding ElementName=AddressBox}"
Placement="Center" StaysOpen="False" AllowsTransparency="True" PopupAnimation="Fade"
Width="560">
<Border Background="{StaticResource CardBg}" BorderBrush="{StaticResource BorderBrush}"
BorderThickness="1" CornerRadius="12" Padding="10">
<StackPanel>
<Border Background="{StaticResource GlassBg}" BorderBrush="{StaticResource BorderBrush}"
BorderThickness="1" CornerRadius="8" Margin="2,0,2,8">
<TextBox Name="PaletteBox" Style="{StaticResource DarkTextBox}" BorderThickness="0"
Background="Transparent" Padding="12,10" FontSize="13.5"
TextChanged="PaletteBox_TextChanged" PreviewKeyDown="PaletteBox_PreviewKeyDown"/>
</Border>
<ListBox Name="PaletteResults" Style="{StaticResource SuggestList}"
ItemContainerStyle="{StaticResource SuggestItem}" MaxHeight="360"
PreviewMouseLeftButtonUp="PaletteResult_Click">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}" TextTrimming="CharacterEllipsis"
FontSize="12.5" Padding="4,2"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Border>
</Popup>
<!-- ===== 링크로 받기 플라이아웃 (YouTube/Instagram/X URL 붙여넣기) ===== -->
<Popup Name="LinkPopup" PlacementTarget="{Binding ElementName=LinkBtn}"
Placement="Bottom" HorizontalOffset="-10" VerticalOffset="6"