<UserControl xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:m="using:SourceGit.Models"
             xmlns:vm="using:SourceGit.ViewModels"
             xmlns:v="using:SourceGit.Views"
             xmlns:c="using:SourceGit.Converters"
             mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
             x:Class="SourceGit.Views.Repository"
             x:DataType="vm:Repository">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="{Binding Source={x:Static vm:Preference.Instance}, Path=Layout.RepositorySidebarWidth, Mode=TwoWay}" MinWidth="200" MaxWidth="400"/>
      <ColumnDefinition Width="3"/>
      <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>

    <!-- Left Panel -->
    <Grid Grid.Column="0" Classes="repository_leftpanel" RowDefinitions="Auto,*">
      <!-- Page Switcher for Left Contents (Dashboard or CommitSearch) -->
      <Grid Grid.Row="0" Height="24" Margin="0,6" HorizontalAlignment="Center" ColumnDefinitions="48,1,48">
        <Border Grid.Column="0" Grid.ColumnSpan="3"
                Height="24"
                BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}"
                CornerRadius="12"/>

        <RadioButton Grid.Column="0"
                     Classes="icon_button"
                     Width="48"
                     GroupName="SearchGroup"
                     IsChecked="{Binding !IsSearching, Mode=OneWay}">
          <Path Width="14" Height="14" Stretch="Fill" HorizontalAlignment="Center" Data="{StaticResource Icons.Home}"/>
        </RadioButton>

        <Rectangle Grid.Column="1" Width="0.65" HorizontalAlignment="Center" VerticalAlignment="Stretch" Fill="{DynamicResource Brush.Border2}"/>

        <RadioButton Grid.Column="2"
                     Width="48"
                     Classes="icon_button"
                     GroupName="SearchGroup"
                     IsChecked="{Binding IsSearching, Mode=TwoWay}">
          <Path Width="14" Height="14" Stretch="Fill" HorizontalAlignment="Center" Data="{StaticResource Icons.Search}"/>
        </RadioButton>
      </Grid>
      
      <!-- Dashboard -->
      <Grid Grid.Row="1" Margin="0,0,0,8" RowDefinitions="Auto,Auto,*" IsVisible="{Binding !IsSearching}">
        <!-- Page Switcher for Right Panel -->
        <Border Grid.Row="0" Margin="8,0,4,0" BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}" CornerRadius="6">
          <Border CornerRadius="6" ClipToBounds="True">
            <ListBox Background="Transparent" SelectedIndex="{Binding SelectedViewIndex, Mode=TwoWay}">
              <ListBox.Styles>
                <Style Selector="ListBoxItem">
                  <Setter Property="Height" Value="28"/>
                  <Setter Property="Margin" Value="0"/>
                  <Setter Property="Padding" Value="0"/>
                  <Setter Property="BorderThickness" Value="0,0,0,1"/>
                  <Setter Property="BorderBrush" Value="{DynamicResource Brush.Border2}"/>
                </Style>
                <Style Selector="ListBoxItem:nth-last-child(1)">
                  <Setter Property="BorderThickness" Value="0"/>
                </Style>
                <Style Selector="ListBoxItem:pointerover /template/ ContentPresenter#PART_ContentPresenter, ListBoxItem:selected /template/ ContentPresenter#PART_ContentPresenter">
                  <Setter Property="Background" Value="Transparent"/>
                </Style>
                <Style Selector="ListBoxItem:selected Grid.view_mode">
                  <Setter Property="Background" Value="{DynamicResource Brush.AccentHovered}"/>
                </Style>
              </ListBox.Styles>

              <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                  <StackPanel Orientation="Vertical"/>
                </ItemsPanelTemplate>
              </ListBox.ItemsPanel>

              <ListBoxItem>
                <Grid Classes="view_mode" ColumnDefinitions="32,*,Auto,Auto">
                  <Path Grid.Column="0" Width="12" Height="12" Data="{StaticResource Icons.Histories}"/>
                  <TextBlock Grid.Column="1" Classes="monospace" Text="{DynamicResource Text.Histories}"/>
                  <ToggleButton Grid.Column="2"
                                Classes="layout_direction"
                                Width="32" Height="26"
                                IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=UseTwoColumnsLayoutInHistories, Mode=TwoWay}"
                                ToolTip.Tip="{DynamicResource Text.Histories.DisplayMode}"/>
                  <Button Grid.Column="3" Classes="icon_button" Width="32" Command="{Binding NavigateToCurrentHead}" ToolTip.Tip="{DynamicResource Text.Repository.NavigateToCurrentHead}">
                    <Path Width="14" Height="14" Data="{StaticResource Icons.Target}" Fill="{DynamicResource Brush.FG1}"/>
                  </Button>
                </Grid>
              </ListBoxItem>

              <ListBoxItem>
                <Grid Classes="view_mode" ColumnDefinitions="32,*,Auto">
                  <Path Grid.Column="0" Width="12" Height="12" Data="{StaticResource Icons.Send}"/>
                  <TextBlock Grid.Column="1" Classes="monospace" Text="{DynamicResource Text.WorkingCopy}"/>
                  <Border Grid.Column="2"
                          Margin="6,0"
                          Height="18"
                          CornerRadius="9"
                          VerticalAlignment="Center"
                          Background="{DynamicResource Brush.Badge}"
                          IsVisible="{Binding WorkingCopyChangesCount, Converter={x:Static c:IntConverters.IsGreaterThanZero}}">
                    <TextBlock Classes="monospace" FontSize="10" HorizontalAlignment="Center" Margin="9,0" Text="{Binding WorkingCopyChangesCount}" Foreground="{DynamicResource Brush.BadgeFG}"/>
                  </Border>
                </Grid>
              </ListBoxItem>

              <ListBoxItem>
                <Grid Classes="view_mode" ColumnDefinitions="32,*,Auto">
                  <Path Grid.Column="0" Width="12" Height="12" Data="{StaticResource Icons.Stashes}"/>
                  <TextBlock Grid.Column="1" Classes="monospace" Text="{DynamicResource Text.Stashes}"/>
                  <Border Grid.Column="2"
                          Margin="6,0"
                          Height="18"
                          CornerRadius="9"
                          VerticalAlignment="Center"
                          Background="{DynamicResource Brush.Badge}"
                          IsVisible="{Binding StashesCount, Converter={x:Static c:IntConverters.IsGreaterThanZero}}">
                    <TextBlock Classes="monospace" FontSize="10" HorizontalAlignment="Center" Margin="9,0" Text="{Binding StashesCount}" Foreground="{DynamicResource Brush.BadgeFG}"/>
                  </Border>
                </Grid>
              </ListBoxItem>
            </ListBox>
          </Border>
        </Border>
        
        <!-- Filter Branches -->
        <TextBox Grid.Row="1"
                 Height="24"
                 Margin="8,6,4,0"
                 BorderThickness="1"
                 CornerRadius="4"
                 BorderBrush="{DynamicResource Brush.Border2}"
                 Watermark="{DynamicResource Text.Repository.SearchBranchTag}"
                 Text="{Binding SearchBranchFilter, Mode=TwoWay}"
                 VerticalContentAlignment="Center">
          <TextBox.InnerLeftContent>
            <Path Width="14" Height="14"
                  Margin="6,0,0,0"
                  Fill="{DynamicResource Brush.FG2}"
                  Data="{StaticResource Icons.Search}"/>
          </TextBox.InnerLeftContent>

          <TextBox.InnerRightContent>
            <Button Classes="icon_button"
                    Width="16"
                    Margin="0,0,6,0"
                    Command="{Binding ClearSearchBranchFilter}"
                    IsVisible="{Binding SearchBranchFilter, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
                    HorizontalAlignment="Right">
              <Path Width="14" Height="14"
                    Margin="0,1,0,0"
                    Fill="{DynamicResource Brush.FG1}"
                    Data="{StaticResource Icons.Clear}"/>
            </Button>
          </TextBox.InnerRightContent>
        </TextBox>

        <Grid Grid.Row="2" x:Name="LeftSidebarGroups" Margin="0,4,0,0" RowDefinitions="28,Auto,28,Auto,28,Auto,28,Auto,28,Auto">
          <!-- Local Branches -->
          <ToggleButton Grid.Row="0" Classes="group_expander" IsChecked="{Binding IsLocalBranchGroupExpanded, Mode=TwoWay}">
            <TextBlock Classes="group_header_label" Margin="0" Text="{DynamicResource Text.Repository.LocalBranches}"/>
          </ToggleButton>
          <v:BranchTree Grid.Row="1"
                        x:Name="LocalBranchTree"
                        Height="0"
                        Margin="8,0,4,0"
                        Nodes="{Binding LocalBranchTrees}"
                        IsVisible="{Binding IsLocalBranchGroupExpanded}"
                        SelectionChanged="OnLocalBranchTreeSelectionChanged"
                        RowsChanged="OnBranchTreeRowsChanged"/>

          <!-- Remotes -->
          <ToggleButton Grid.Row="2" Classes="group_expander" IsChecked="{Binding IsRemoteGroupExpanded, Mode=TwoWay}">
            <Grid ColumnDefinitions="*,Auto">
              <TextBlock Grid.Column="0" Classes="group_header_label" Margin="0" Text="{DynamicResource Text.Repository.Remotes}"/>
              <Button Grid.Column="1" Classes="icon_button" Width="14" Margin="8,0" Command="{Binding AddRemote}" ToolTip.Tip="{DynamicResource Text.Repository.Remotes.Add}">
                <Path Width="12" Height="12" Data="{StaticResource Icons.Remote.Add}"/>
              </Button>
            </Grid>
          </ToggleButton>
          <v:BranchTree Grid.Row="3"
                        x:Name="RemoteBranchTree"
                        Height="0"
                        Margin="8,0,4,0"
                        Nodes="{Binding RemoteBranchTrees}"
                        IsVisible="{Binding IsRemoteGroupExpanded}"
                        SelectionChanged="OnRemoteBranchTreeSelectionChanged"
                        RowsChanged="OnBranchTreeRowsChanged"/>

          <!-- Tags -->
          <ToggleButton Grid.Row="4" Classes="group_expander" IsChecked="{Binding IsTagGroupExpanded, Mode=TwoWay}">
            <Grid ColumnDefinitions="Auto,*,Auto">
              <TextBlock Grid.Column="0" Classes="group_header_label" Margin="0" Text="{DynamicResource Text.Repository.Tags}"/>
              <TextBlock Grid.Column="1" Text="{Binding Tags, Converter={x:Static c:ListConverters.ToCount}}" Foreground="{DynamicResource Brush.FG2}" FontWeight="Bold"/>
              <Button Grid.Column="2" Classes="icon_button" Width="14" Margin="8,0" Command="{Binding CreateNewTag}" ToolTip.Tip="{DynamicResource Text.Repository.Tags.Add}">
                <Path Width="12" Height="12" Data="{StaticResource Icons.Tag.Add}"/>
              </Button>
            </Grid>
          </ToggleButton>
          <DataGrid Grid.Row="5"
                    x:Name="TagsList"
                    Height="0"
                    Margin="8,0,4,0"
                    Background="Transparent"
                    ItemsSource="{Binding VisibleTags}"
                    SelectionMode="Single"
                    CanUserReorderColumns="False"
                    CanUserResizeColumns="False"
                    CanUserSortColumns="False"
                    IsReadOnly="True"
                    HeadersVisibility="None"
                    Focusable="False"
                    RowHeight="24"
                    HorizontalScrollBarVisibility="Disabled"
                    VerticalScrollBarVisibility="Auto"
                    IsVisible="{Binding IsTagGroupExpanded, Mode=OneWay}"
                    SelectionChanged="OnTagDataGridSelectionChanged"
                    ContextRequested="OnTagContextRequested"
                    PropertyChanged="OnLeftSidebarDataGridPropertyChanged">
            <DataGrid.Styles>
              <Style Selector="DataGridRow">
                <Setter Property="CornerRadius" Value="4" />
              </Style>

              <Style Selector="DataGridRow /template/ Border#RowBorder">
                <Setter Property="ClipToBounds" Value="True" />
              </Style>

              <Style Selector="Grid.repository_leftpanel DataGridRow:pointerover /template/ Rectangle#BackgroundRectangle">
                <Setter Property="Fill" Value="{DynamicResource Brush.AccentHovered}" />
                <Setter Property="Opacity" Value=".5"/>
              </Style>
              <Style Selector="Grid.repository_leftpanel DataGridRow:selected /template/ Rectangle#BackgroundRectangle">
                <Setter Property="Fill" Value="{DynamicResource Brush.AccentHovered}" />
                <Setter Property="Opacity" Value="1"/>
              </Style>
              <Style Selector="Grid.repository_leftpanel:focus-within DataGridRow:selected /template/ Rectangle#BackgroundRectangle">
                <Setter Property="Fill" Value="{DynamicResource Brush.Accent}" />
                <Setter Property="Opacity" Value=".65"/>
              </Style>
              <Style Selector="Grid.repository_leftpanel:focus-within DataGridRow:selected:pointerover /template/ Rectangle#BackgroundRectangle">
                <Setter Property="Fill" Value="{DynamicResource Brush.Accent}" />
                <Setter Property="Opacity" Value=".8"/>
              </Style>
            </DataGrid.Styles>

            <DataGrid.Columns>
              <DataGridTemplateColumn Header="ICON">
                <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate x:DataType="{x:Type m:Tag}">
                    <Path Width="10" Height="10" Margin="8,0" Data="{StaticResource Icons.Tag}"/>
                  </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
              </DataGridTemplateColumn>

              <DataGridTemplateColumn Width="*" Header="NAME">
                <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate x:DataType="{x:Type m:Tag}">
                    <TextBlock Text="{Binding Name}" Classes="monospace" TextTrimming="CharacterEllipsis" />
                  </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
              </DataGridTemplateColumn>

              <DataGridTemplateColumn Header="FILTER">
                <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate x:DataType="{x:Type m:Tag}">
                    <ToggleButton Classes="filter"
                                  Margin="0,0,8,0"
                                  Background="Transparent"
                                  IsCheckedChanged="OnTagFilterIsCheckedChanged"
                                  IsChecked="{Binding IsFiltered}"
                                  ToolTip.Tip="{DynamicResource Text.Filter}"/>
                  </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
              </DataGridTemplateColumn>
            </DataGrid.Columns>
          </DataGrid>

          <!-- Submodules -->
          <ToggleButton Grid.Row="6" Classes="group_expander" IsChecked="{Binding IsSubmoduleGroupExpanded, Mode=TwoWay}">
            <Grid ColumnDefinitions="Auto,*,Auto,Auto">
              <TextBlock Grid.Column="0" Classes="group_header_label" Margin="0" Text="{DynamicResource Text.Repository.Submodules}"/>
              <TextBlock Grid.Column="1" Text="{Binding Submodules, Converter={x:Static c:ListConverters.ToCount}}" Foreground="{DynamicResource Brush.FG2}" FontWeight="Bold"/>
              <Button Grid.Column="2"
                      Classes="icon_button"
                      Width="14"
                      Margin="8,0"
                      Command="{Binding UpdateSubmodules}"
                      IsVisible="{Binding Submodules, Converter={x:Static c:ListConverters.IsNotNullOrEmpty}}"
                      ToolTip.Tip="{DynamicResource Text.Repository.Submodules.Update}">
                <Path Width="12" Height="12" Data="{StaticResource Icons.Loading}"/>
              </Button>
              <Button Grid.Column="3"
                      Classes="icon_button"
                      Width="14"
                      Margin="0,0,8,0"
                      Command="{Binding AddSubmodule}"
                      ToolTip.Tip="{DynamicResource Text.Repository.Submodules.Add}">
                <Path Width="12" Height="12" Data="{StaticResource Icons.Submodule.Add}"/>
              </Button>
            </Grid>
          </ToggleButton>
          <DataGrid Grid.Row="7"
                    x:Name="SubmoduleList"
                    Height="0"
                    Margin="8,0,4,0"
                    Background="Transparent"
                    ItemsSource="{Binding Submodules}"
                    SelectionMode="Single"
                    CanUserReorderColumns="False"
                    CanUserResizeColumns="False"
                    CanUserSortColumns="False"
                    IsReadOnly="True"
                    HeadersVisibility="None"
                    Focusable="False"
                    RowHeight="26"
                    HorizontalScrollBarVisibility="Disabled"
                    VerticalScrollBarVisibility="Auto"
                    ContextRequested="OnSubmoduleContextRequested"
                    DoubleTapped="OnDoubleTappedSubmodule"
                    PropertyChanged="OnLeftSidebarDataGridPropertyChanged"
                    IsVisible="{Binding IsSubmoduleGroupExpanded, Mode=OneWay}">
            <DataGrid.Styles>
              <Style Selector="DataGridRow">
                <Setter Property="CornerRadius" Value="4" />
              </Style>

              <Style Selector="DataGridRow /template/ Border#RowBorder">
                <Setter Property="ClipToBounds" Value="True" />
              </Style>

              <Style Selector="DataGridRow:pointerover /template/ Rectangle#BackgroundRectangle">
                <Setter Property="Fill" Value="{DynamicResource Brush.AccentHovered}" />
              </Style>

              <Style Selector="DataGridRow:selected /template/ Rectangle#BackgroundRectangle">
                <Setter Property="Fill" Value="{DynamicResource Brush.Accent}" />
              </Style>
            </DataGrid.Styles>

            <DataGrid.Columns>
              <DataGridTemplateColumn Header="ICON">
                <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate>
                    <Path Width="10" Height="10" Margin="8,0" Data="{StaticResource Icons.Submodule}"/>
                  </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
              </DataGridTemplateColumn>

              <DataGridTemplateColumn Width="*" Header="NAME">
                <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate>
                    <Border Padding="0,0,4,0">
                      <TextBlock Text="{Binding}" ClipToBounds="True" Classes="monospace" TextTrimming="CharacterEllipsis"/>
                    </Border>
                  </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
              </DataGridTemplateColumn>
            </DataGrid.Columns>
          </DataGrid>

          <!-- Worktrees -->
          <ToggleButton Grid.Row="8" Classes="group_expander" IsChecked="{Binding IsWorktreeGroupExpanded, Mode=TwoWay}">
            <Grid ColumnDefinitions="Auto,*,Auto,Auto">
              <TextBlock Grid.Column="0" Classes="group_header_label" Margin="0" Text="{DynamicResource Text.Repository.Worktrees}"/>
              <TextBlock Grid.Column="1" Text="{Binding Worktrees, Converter={x:Static c:ListConverters.ToCount}}" Foreground="{DynamicResource Brush.FG2}" FontWeight="Bold"/>
              <Button Grid.Column="2"
                      Classes="icon_button"
                      Width="14"
                      Margin="8,0"
                      Command="{Binding PruneWorktrees}"
                      IsVisible="{Binding Worktrees, Converter={x:Static c:ListConverters.IsNotNullOrEmpty}}"
                      ToolTip.Tip="{DynamicResource Text.Repository.Worktrees.Prune}">
                <Path Width="12" Height="12" Data="{StaticResource Icons.Loading}"/>
              </Button>
              <Button Grid.Column="3"
                      Classes="icon_button"
                      Width="14"
                      Margin="0,0,8,0"
                      Command="{Binding AddWorktree}"
                      ToolTip.Tip="{DynamicResource Text.Repository.Worktrees.Add}">
                <Path Width="12" Height="12" Data="{StaticResource Icons.Worktree.Add}"/>
              </Button>
            </Grid>
          </ToggleButton>
          <DataGrid Grid.Row="9"
                    x:Name="WorktreeList"
                    Height="0"
                    Margin="8,0,4,0"
                    Background="Transparent"
                    ItemsSource="{Binding Worktrees}"
                    SelectionMode="Single"
                    CanUserReorderColumns="False"
                    CanUserResizeColumns="False"
                    CanUserSortColumns="False"
                    IsReadOnly="True"
                    HeadersVisibility="None"
                    Focusable="False"
                    RowHeight="26"
                    HorizontalScrollBarVisibility="Disabled"
                    VerticalScrollBarVisibility="Auto"
                    ContextRequested="OnWorktreeContextRequested"
                    DoubleTapped="OnDoubleTappedWorktree"
                    PropertyChanged="OnLeftSidebarDataGridPropertyChanged"
                    IsVisible="{Binding IsWorktreeGroupExpanded, Mode=OneWay}">
            <DataGrid.Styles>
              <Style Selector="DataGridRow">
                <Setter Property="CornerRadius" Value="4" />
              </Style>

              <Style Selector="DataGridRow /template/ Border#RowBorder">
                <Setter Property="ClipToBounds" Value="True" />
              </Style>

              <Style Selector="DataGridRow:pointerover /template/ Rectangle#BackgroundRectangle">
                <Setter Property="Fill" Value="{DynamicResource Brush.AccentHovered}" />
              </Style>

              <Style Selector="DataGridRow:selected /template/ Rectangle#BackgroundRectangle">
                <Setter Property="Fill" Value="{DynamicResource Brush.Accent}" />
              </Style>
            </DataGrid.Styles>

            <DataGrid.Columns>
              <DataGridTemplateColumn Header="ICON">
                <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate>
                    <Path Width="10" Height="10" Margin="8,0,0,0" Data="{StaticResource Icons.Worktree}"/>
                  </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
              </DataGridTemplateColumn>

              <DataGridTemplateColumn Width="*" Header="FullPath">
                <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate>
                    <TextBlock Classes="monospace" Margin="8,0,0,0" TextTrimming="CharacterEllipsis">
                      <Run Text="{Binding FullPath}"/>
                      <Run Text="{Binding Name}" Foreground="{DynamicResource Brush.FG2}"/>
                    </TextBlock>
                  </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
              </DataGridTemplateColumn>

              <DataGridTemplateColumn Header="FullPath">
                <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate>
                    <Path Width="10" Height="10" Margin="4,0,8,0" Data="{StaticResource Icons.Lock}" Fill="{DynamicResource Brush.FG2}" IsVisible="{Binding IsLocked}"/>
                  </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
              </DataGridTemplateColumn>
            </DataGrid.Columns>
          </DataGrid>
        </Grid>
      </Grid>

      <!-- Commit Search Panel -->
      <Grid Grid.Row="1" RowDefinitions="Auto,32,*" Margin="8,0,4,8" IsVisible="{Binding IsSearching}" PropertyChanged="OnSearchCommitPanelPropertyChanged">
        <!-- Search Input Box -->
        <TextBox Grid.Row="0"
                 x:Name="TxtSearchCommitsBox"
                 Height="24"
                 BorderThickness="1"
                 BorderBrush="{DynamicResource Brush.Border2}"
                 Background="{DynamicResource Brush.Contents}"
                 CornerRadius="4"
                 Watermark="{DynamicResource Text.Repository.Search}"
                 Text="{Binding SearchCommitFilter, Mode=TwoWay}"
                 VerticalContentAlignment="Center"
                 KeyDown="OnSearchKeyDown">
          <TextBox.InnerLeftContent>
            <Path Width="14" Height="14"
                  Margin="6,0,0,0"
                  Fill="{DynamicResource Brush.FG2}"
                  Data="{StaticResource Icons.Search}"/>
          </TextBox.InnerLeftContent>

          <TextBox.InnerRightContent>
            <Button Classes="icon_button"
                    Width="16"
                    Margin="0,0,6,0"
                    Command="{Binding ClearSearchCommitFilter}"
                    IsVisible="{Binding SearchCommitFilter, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
                    HorizontalAlignment="Right">
              <Path Width="14" Height="14"
                    Margin="0,1,0,0"
                    Fill="{DynamicResource Brush.FG1}"
                    Data="{StaticResource Icons.Clear}"/>
            </Button>
          </TextBox.InnerRightContent>
        </TextBox>

        <Grid Grid.Row="1" ColumnDefinitions="Auto,*">
          <TextBlock Grid.Column="0"
                     Text="{DynamicResource Text.Repository.Search.By}"
                     Foreground="{DynamicResource Brush.FG2}"
                     Margin="2,0,0,0"/>

          <ComboBox Grid.Column="1"
                    MinHeight="24" Height="24"
                    Padding="8,0"
                    Background="{DynamicResource Brush.Contents}"
                    BorderBrush="{DynamicResource Brush.Border2}"
                    HorizontalAlignment="Right"
                    SelectedIndex="{Binding SearchCommitFilterType, Mode=TwoWay}">
            <ComboBox.Items>
              <TextBlock Text="{DynamicResource Text.Repository.Search.BySHA}" FontSize="12"/>
              <TextBlock Text="{DynamicResource Text.Repository.Search.ByUser}" FontSize="12"/>
              <TextBlock Text="{DynamicResource Text.Repository.Search.ByMessage}" FontSize="12"/>
              <TextBlock Text="{DynamicResource Text.Repository.Search.ByFile}" FontSize="12"/>
            </ComboBox.Items>
          </ComboBox>
        </Grid>

        <DataGrid Grid.Row="2"
                  ItemsSource="{Binding SearchedCommits}"
                  SelectionMode="Single"
                  SelectedItem="{Binding SearchResultSelectedCommit, Mode=OneWay}"
                  CanUserReorderColumns="False"
                  CanUserResizeColumns="False"
                  CanUserSortColumns="False"
                  IsReadOnly="True"
                  HeadersVisibility="None"
                  Focusable="False"
                  RowHeight="50"
                  BorderThickness="1"
                  BorderBrush="{DynamicResource Brush.Border2}"
                  Background="{DynamicResource Brush.Contents}"
                  CornerRadius="4"
                  HorizontalScrollBarVisibility="Disabled"
                  VerticalScrollBarVisibility="Auto"
                  SelectionChanged="OnSearchResultDataGridSelectionChanged">
          <DataGrid.Columns>
            <DataGridTemplateColumn Width="*">
              <DataGridTemplateColumn.CellTemplate>
                <DataTemplate DataType="m:Commit">
                  <Border BorderBrush="{DynamicResource Brush.Border2}" BorderThickness="0,0,0,1" Padding="4">
                    <Grid RowDefinitions="Auto,*">
                      <Grid Grid.Row="0" ColumnDefinitions="Auto,*,Auto,Auto">
                        <v:Avatar Width="16" Height="16"
                                  VerticalAlignment="Center"
                                  IsHitTestVisible="False"
                                  User="{Binding Author}"/>
                        <TextBlock Grid.Column="1" Classes="monospace" Text="{Binding Author.Name}" Margin="8,0,0,0"/>
                        <TextBlock Grid.Column="2" Classes="monospace" Text="{Binding SHA, Converter={x:Static c:StringConverters.ToShortSHA}}" Foreground="DarkOrange" Margin="8,0,0,0"/>
                        <TextBlock Grid.Column="3" Classes="monospace" Text="{Binding AuthorTimeShortStr}" Foreground="{DynamicResource Brush.FG2}" Margin="8,0,0,0"/>
                      </Grid>

                      <TextBlock Grid.Row="1" Text="{Binding Subject}" VerticalAlignment="Bottom"/>
                    </Grid>
                  </Border>
                </DataTemplate>
              </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
          </DataGrid.Columns>
        </DataGrid>

        <Path Grid.Row="2"
              HorizontalAlignment="Center" VerticalAlignment="Center"
              Width="48" Height="48"
              Data="{StaticResource Icons.Empty}"
              Fill="{DynamicResource Brush.FG2}">
          <Path.IsVisible>
            <MultiBinding Converter="{x:Static BoolConverters.And}">
              <Binding Path="SearchedCommits.Count" Converter="{x:Static c:IntConverters.IsZero}"/>
              <Binding Path="IsSearchLoadingVisible" Converter="{x:Static BoolConverters.Not}"/>
            </MultiBinding>
          </Path.IsVisible>
        </Path>
        
        <v:LoadingIcon Grid.Row="2"
                       Width="48" Height="48"
                       HorizontalAlignment="Center" VerticalAlignment="Center"
                       IsVisible="{Binding IsSearchLoadingVisible}"/>
      </Grid>
    </Grid>

    <!-- Splitter -->
    <GridSplitter Grid.Column="1"
                  MinWidth="1"
                  HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                  Background="Transparent"
                  BorderThickness="0,0,1,0"
                  BorderBrush="{DynamicResource Brush.Border0}"/>

    <!-- Right -->
    <Grid Grid.Column="2" RowDefinitions="Auto,Auto,*"> 
      <Grid Grid.Row="0" Height="28" ColumnDefinitions="*,Auto,Auto,Auto" Background="{DynamicResource Brush.Conflict}" IsVisible="{Binding InProgressContext, Converter={x:Static ObjectConverters.IsNotNull}}">
        <ContentControl Grid.Column="0" Margin="8,0" Content="{Binding InProgressContext}">
          <ContentControl.DataTemplates>
            <DataTemplate DataType="vm:CherryPickInProgress">
              <TextBlock FontWeight="Bold" Foreground="{DynamicResource Brush.ConflictForeground}" Text="{DynamicResource Text.InProgress.CherryPick}"/>
            </DataTemplate>

            <DataTemplate DataType="vm:RebaseInProgress">
              <TextBlock FontWeight="Bold" Foreground="{DynamicResource Brush.ConflictForeground}" Text="{DynamicResource Text.InProgress.Rebase}"/>
            </DataTemplate>

            <DataTemplate DataType="vm:RevertInProgress">
              <TextBlock FontWeight="Bold" Foreground="{DynamicResource Brush.ConflictForeground}" Text="{DynamicResource Text.InProgress.Revert}"/>
            </DataTemplate>

            <DataTemplate DataType="vm:MergeInProgress">
              <TextBlock FontWeight="Bold" Foreground="{DynamicResource Brush.ConflictForeground}" Text="{DynamicResource Text.InProgress.Merge}"/>
            </DataTemplate>
          </ContentControl.DataTemplates>
        </ContentControl>

        <Button Grid.Column="1" 
                Classes="flat" 
                FontWeight="Regular"
                BorderThickness="0"
                Content="{DynamicResource Text.Repository.Resolve}" 
                Padding="8,0" Margin="4,0" 
                Command="{Binding GotoResolve}">
          <Button.IsVisible>
            <Binding Path="SelectedViewIndex" Converter="{x:Static c:IntConverters.IsNotOne}"/>
          </Button.IsVisible>
        </Button>
        <Button Grid.Column="2" 
                Classes="flat primary" 
                FontWeight="Regular"
                BorderThickness="0"
                Content="{DynamicResource Text.Repository.Continue}" 
                Padding="8,0" Margin="4,0" 
                Command="{Binding ContinueMerge}" 
                IsVisible="{Binding !HasUnsolvedConflicts}"/>
        <Button Grid.Column="3" 
                Classes="flat" 
                FontWeight="Regular"
                BorderThickness="0"
                Content="{DynamicResource Text.Repository.Abort}" 
                Padding="8,0" Margin="4,0" 
                Command="{Binding AbortMerge}"/>
      </Grid>

      <Border Grid.Row="1" Background="{DynamicResource Brush.ToolBar}" BorderThickness="0,0,0,1" BorderBrush="{DynamicResource Brush.Border0}">
        <Border.IsVisible>
          <MultiBinding Converter="{x:Static BoolConverters.And}">
            <Binding Path="SelectedViewIndex" Converter="{x:Static c:IntConverters.IsZero}"/>
            <Binding Path="Settings.Filters.Count" Converter="{x:Static c:IntConverters.IsGreaterThanZero}"/>
          </MultiBinding>
        </Border.IsVisible>

        <Grid Height="28" ColumnDefinitions="Auto,*,Auto">
          <TextBlock Grid.Column="0" Margin="8,0,0,0" Classes="table_header" Text="{DynamicResource Text.Repository.FilterCommitPrefix}"/>

          <ItemsControl Grid.Column="1" Margin="8,0,0,0" ItemsSource="{Binding Settings.Filters}">
            <ItemsControl.ItemsPanel>
              <ItemsPanelTemplate>
                <VirtualizingStackPanel Orientation="Horizontal" VerticalAlignment="Center"/>
              </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            
            <ItemsControl.ItemTemplate>
              <DataTemplate>
                <Border Height="20" Margin="0,0,6,0" BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}" CornerRadius="12">
                  <TextBlock Classes="monospace" Text="{Binding Converter={x:Static c:StringConverters.TrimRefsPrefix}}" Margin="8,0"/>
                </Border>
              </DataTemplate>
            </ItemsControl.ItemTemplate>
          </ItemsControl>
          
          <Button Grid.Column="2" Classes="icon_button" Command="{Binding ClearHistoriesFilter}">
            <TextBlock Margin="16,0,8,0" Text="{DynamicResource Text.Repository.ClearAllCommitsFilter}" Foreground="{DynamicResource Brush.Accent}"/>
          </Button>
        </Grid>
      </Border>

      <ContentControl Grid.Row="2" Content="{Binding SelectedView}">
        <ContentControl.DataTemplates>
          <DataTemplate DataType="vm:Histories">
            <v:Histories NavigationId="{Binding NavigationId}"/>
          </DataTemplate>

          <DataTemplate DataType="vm:WorkingCopy">
            <v:WorkingCopy/>
          </DataTemplate>

          <DataTemplate DataType="vm:StashesPage">
            <v:StashesPage/>
          </DataTemplate>
        </ContentControl.DataTemplates>
      </ContentControl>
    </Grid>
  </Grid>
</UserControl>
