<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:Nodify">

    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/Nodify.Shared;component/Themes/Controls.xaml" />
        <ResourceDictionary Source="pack://application:,,,/Nodify.Shared;component/Themes/Icons.xaml" />
    </ResourceDictionary.MergedDictionaries>

    <local:ResizeDirectionToVisiblityConverter x:Key="ResizeDirectionToVisiblityConverter" />

    <Style x:Key="EditableTextBlockBaseStyle"
           TargetType="{x:Type local:EditableTextBlock}">
        <Setter Property="Background"
                Value="Transparent" />
        <Setter Property="BorderThickness"
                Value="1" />
        <Setter Property="BorderBrush"
                Value="DodgerBlue" />
        <Setter Property="MinHeight"
                Value="{Binding FontSize, RelativeSource={RelativeSource Self}}" />
        <Setter Property="Padding"
                Value="0" />
        <Setter Property="Foreground"
                Value="White" />
        <Setter Property="VerticalContentAlignment"
                Value="Center" />
        <Setter Property="HorizontalContentAlignment"
                Value="Stretch" />
        <Setter Property="Cursor"
                Value="IBeam" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:EditableTextBlock}">
                    <Grid VerticalAlignment="{TemplateBinding VerticalAlignment}"
                          HorizontalAlignment="{TemplateBinding HorizontalAlignment}">
                        <TextBlock Text="{Binding Text, ElementName=PART_TextBox}"
                                   Background="{TemplateBinding Background}"
                                   Foreground="{TemplateBinding Foreground}"
                                   TextWrapping="{TemplateBinding TextWrapping}"
                                   Padding="{TemplateBinding Padding}"
                                   TextTrimming="{TemplateBinding TextTrimming}"
                                   VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                   HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                   x:Name="PART_Text" />

                        <TextBox Text="{Binding Text, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
                                 MinWidth="{TemplateBinding MinWidth}"
                                 MinHeight="{TemplateBinding MinHeight}"
                                 Background="{TemplateBinding Background}"
                                 Foreground="{TemplateBinding Foreground}"
                                 TextWrapping="{TemplateBinding TextWrapping}"
                                 BorderBrush="{TemplateBinding BorderBrush}"
                                 BorderThickness="{TemplateBinding BorderThickness}"
                                 AcceptsReturn="{TemplateBinding AcceptsReturn}"
                                 FontSize="{TemplateBinding FontSize}"
                                 Padding="{TemplateBinding Padding}"
                                 MaxLength="{TemplateBinding MaxLength}"
                                 MinLines="{TemplateBinding MinLines}"
                                 MaxLines="{TemplateBinding MinLines}"
                                 VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                                 HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                                 AcceptsTab="True"
                                 Visibility="Collapsed"
                                 Margin="-1"
                                 x:Name="PART_TextBox" />
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEditing"
                                 Value="True">
                            <Setter TargetName="PART_TextBox"
                                    Property="Visibility"
                                    Value="Visible" />
                            <Setter TargetName="PART_Text"
                                    Property="Visibility"
                                    Value="Collapsed" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="{x:Type local:EditableTextBlock}"
           BasedOn="{StaticResource EditableTextBlockBaseStyle}" />

    <Style TargetType="{x:Type local:TabControlEx}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:TabControlEx}">
                    <Grid KeyboardNavigation.TabNavigation="Local"
                          SnapsToDevicePixels="true"
                          ClipToBounds="true">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <Grid Panel.ZIndex="1"
                              Margin="2,2,2,0"
                              Background="{TemplateBinding Background}"
                              KeyboardNavigation.TabIndex="1">
                            <ScrollViewer x:Name="PART_ScrollViewer"
                                          HorizontalScrollBarVisibility="Auto"
                                          VerticalScrollBarVisibility="Auto">
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto" />
                                        <ColumnDefinition Width="Auto" />
                                    </Grid.ColumnDefinitions>
                                    <StackPanel Orientation="Horizontal"
                                                IsItemsHost="True" />
                                    <Button Style="{StaticResource IconButton}"
                                            Command="{TemplateBinding AddTabCommand}"
                                            Height="34"
                                            VerticalAlignment="Bottom"
                                            BorderBrush="{DynamicResource HighlightedBackgroundBrush}"
                                            Grid.Column="1"
                                            ToolTip="Add new tab">
                                        <Path Width="25"
                                              Height="15"
                                              Data="{StaticResource AddGeometry}"
                                              Fill="{TemplateBinding Foreground}"
                                              Stretch="Uniform" />
                                    </Button>
                                </Grid>
                            </ScrollViewer>
                        </Grid>
                        <Border x:Name="ContentPanel"
                                Background="{TemplateBinding Background}"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                KeyboardNavigation.TabNavigation="Local"
                                KeyboardNavigation.DirectionalNavigation="Contained"
                                KeyboardNavigation.TabIndex="2"
                                Grid.Row="1">
                            <ContentPresenter x:Name="PART_SelectedContentHost"
                                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                              Margin="{TemplateBinding Padding}"
                                              ContentSource="SelectedContent" />
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled"
                                 Value="false">
                            <Setter Property="Opacity"
                                    Value=".5" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="{x:Type local:TabItemEx}">
        <Setter Property="Background"
                Value="{DynamicResource BackgroundBrush}" />
        <Setter Property="Foreground"
                Value="{DynamicResource ForegroundBrush}" />
        <Setter Property="RenderTransform">
            <Setter.Value>
                <ScaleTransform ScaleY="0" />
            </Setter.Value>
        </Setter>
        <Setter Property="RenderTransformOrigin"
                Value="1 1" />
        <Setter Property="VerticalAlignment"
                Value="Bottom" />
        <Setter Property="VerticalContentAlignment"
                Value="Stretch" />
        <Setter Property="HorizontalContentAlignment"
                Value="Stretch" />
        <Setter Property="Padding"
                Value="7" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:TabItemEx}">
                    <Border x:Name="mBorder"
                            BorderThickness="1"
                            CornerRadius="5 5 0 0"
                            Background="{TemplateBinding Background}"
                            Padding="{TemplateBinding Padding}">
                        <Grid>
                            <StackPanel Orientation="Horizontal">
                                <local:EditableTextBlock Text="{TemplateBinding Header}"
                                                         Foreground="{TemplateBinding Foreground}" />
                                <Button x:Name="mCloseBtn"
                                        Command="{TemplateBinding CloseTabCommand}"
                                        CommandParameter="{TemplateBinding CloseTabCommandParameter}"
                                        Visibility="Hidden"
                                        Margin="5 0 0 0"
                                        Background="{DynamicResource HighlightedBackgroundBrush}"
                                        BorderBrush="{DynamicResource BackgroundBrush}"
                                        Style="{StaticResource IconButton}"
                                        ToolTip="Close Tab">
                                    <Path Width="16"
                                          Height="8"
                                          Data="{StaticResource CloseGeometry}"
                                          Fill="{TemplateBinding Foreground}"
                                          Stretch="Uniform" />
                                </Button>
                            </StackPanel>
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver"
                                 Value="True">
                            <Setter Property="Visibility"
                                    Value="Visible"
                                    TargetName="mCloseBtn" />
                            <Setter Property="Background"
                                    Value="{DynamicResource HighlightedBackgroundBrush}" />
                        </Trigger>
                        <Trigger Property="IsSelected"
                                 Value="True">
                            <Setter Property="TextElement.FontWeight"
                                    Value="Bold" />
                            <Setter Property="Background"
                                    Value="{DynamicResource HighlightedBackgroundBrush}" />
                            <Setter Property="Padding"
                                    Value="8" />
                            <Setter Property="Visibility"
                                    Value="Visible"
                                    TargetName="mCloseBtn" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Duration="0:0:.5"
                                         From="0"
                                         To="1"
                                         Storyboard.TargetProperty="(RenderTransform).(ScaleTransform.ScaleY)">
                            <DoubleAnimation.EasingFunction>
                                <ElasticEase Oscillations="1"
                                             Springiness="3"
                                             EasingMode="EaseOut" />
                            </DoubleAnimation.EasingFunction>
                        </DoubleAnimation>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>

    <Style TargetType="{x:Type local:Swatches}">
        <Style.Resources>
            <local:MultiValueEqualityConverter x:Key="MultiValueEqualityConverter" />
            <local:ColorToSolidColorBrushConverter x:Key="ColorToSolidColorBrushConverter" />
        </Style.Resources>
        <Setter Property="Background"
                Value="#1e293b" />
        <Setter Property="Padding"
                Value="6" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:Swatches">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            Padding="{TemplateBinding Padding}"
                            CornerRadius="8">
                        <ItemsControl ItemsSource="{TemplateBinding Colors}">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <WrapPanel Orientation="Horizontal" />
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Border CornerRadius="50"
                                            Padding="1"
                                            Margin="3">
                                        <Border.Style>
                                            <Style TargetType="{x:Type Border}">
                                                <Setter Property="Background"
                                                        Value="Transparent" />
                                                <Style.Triggers>
                                                    <DataTrigger Value="True">
                                                        <DataTrigger.Binding>
                                                            <MultiBinding Converter="{StaticResource MultiValueEqualityConverter}">
                                                                <Binding RelativeSource="{RelativeSource AncestorType=local:Swatches}"
                                                                         Path="SelectedColor"
                                                                         Mode="OneWay" />
                                                                <Binding Mode="OneWay" />
                                                            </MultiBinding>
                                                        </DataTrigger.Binding>
                                                        <Setter Property="Background"
                                                                Value="White" />
                                                    </DataTrigger>
                                                </Style.Triggers>
                                            </Style>
                                        </Border.Style>
                                        <Ellipse Width="24"
                                                 Height="24"
                                                 Stroke="#1e293b"
                                                 Fill="{Binding ., Converter={StaticResource ColorToSolidColorBrushConverter}}"
                                                 Cursor="Hand" />
                                    </Border>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsEnabled"
                     Value="False">
                <Setter Property="Opacity"
                        Value="0.7" />
            </Trigger>
        </Style.Triggers>
    </Style>

    <Style TargetType="{x:Type local:ResizablePanel}">
        <Setter Property="BorderBrush"
                Value="#1e293b" />
        <Setter Property="BorderThickness"
                Value="1" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:ResizablePanel">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <Grid>
                            <ContentPresenter Margin="{TemplateBinding Padding}" />

                            <local:Resizer Direction="TopLeft"
                                           HorizontalAlignment="Left"
                                           VerticalAlignment="Top"
                                           Visibility="{TemplateBinding Directions, Converter={StaticResource ResizeDirectionToVisiblityConverter}, ConverterParameter=TopLeft}" />

                            <local:Resizer Direction="TopRight"
                                           HorizontalAlignment="Right"
                                           VerticalAlignment="Top"
                                           Visibility="{TemplateBinding Directions, Converter={StaticResource ResizeDirectionToVisiblityConverter}, ConverterParameter=TopRight}" />

                            <local:Resizer Direction="BottomLeft"
                                           HorizontalAlignment="Left"
                                           VerticalAlignment="Bottom"
                                           Visibility="{TemplateBinding Directions, Converter={StaticResource ResizeDirectionToVisiblityConverter}, ConverterParameter=BottomLeft}" />

                            <local:Resizer Direction="BottomRight"
                                           HorizontalAlignment="Right"
                                           VerticalAlignment="Bottom"
                                           Visibility="{TemplateBinding Directions, Converter={StaticResource ResizeDirectionToVisiblityConverter}, ConverterParameter=BottomRight}" />

                            <local:Resizer Direction="Left"
                                           HorizontalAlignment="Left"
                                           VerticalAlignment="Center"
                                           Visibility="{TemplateBinding Directions, Converter={StaticResource ResizeDirectionToVisiblityConverter}, ConverterParameter=Left}" />

                            <local:Resizer Direction="Right"
                                           HorizontalAlignment="Right"
                                           VerticalAlignment="Center"
                                           Visibility="{TemplateBinding Directions, Converter={StaticResource ResizeDirectionToVisiblityConverter}, ConverterParameter=Right}" />

                            <local:Resizer Direction="Top"
                                           HorizontalAlignment="Center"
                                           VerticalAlignment="Top"
                                           Visibility="{TemplateBinding Directions, Converter={StaticResource ResizeDirectionToVisiblityConverter}, ConverterParameter=Top}" />

                            <local:Resizer Direction="Bottom"
                                           HorizontalAlignment="Center"
                                           VerticalAlignment="Bottom"
                                           Visibility="{TemplateBinding Directions, Converter={StaticResource ResizeDirectionToVisiblityConverter}, ConverterParameter=Bottom}" />
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="{x:Type local:Resizer}">
        <Setter Property="Background"
                Value="#1e293b" />
        <Setter Property="Width"
                Value="6" />
        <Setter Property="Height"
                Value="6" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:Resizer">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}" />
                    <ControlTemplate.Triggers>
                        <Trigger Property="Direction"
                                 Value="TopLeft">
                            <Setter Property="Cursor"
                                    Value="SizeNWSE" />
                            <Setter Property="Margin"
                                    Value="-4 -4 0 0" />
                        </Trigger>
                        <Trigger Property="Direction"
                                 Value="TopRight">
                            <Setter Property="Cursor"
                                    Value="SizeNESW" />
                            <Setter Property="Margin"
                                    Value="0 -4 -4 0" />
                        </Trigger>
                        <Trigger Property="Direction"
                                 Value="BottomLeft">
                            <Setter Property="Cursor"
                                    Value="SizeNESW" />
                            <Setter Property="Margin"
                                    Value="-4 0 0 -4" />
                        </Trigger>
                        <Trigger Property="Direction"
                                 Value="BottomRight">
                            <Setter Property="Cursor"
                                    Value="SizeNWSE" />
                            <Setter Property="Margin"
                                    Value="0 0 -4 -4" />
                        </Trigger>
                        <Trigger Property="Direction"
                                 Value="Left">
                            <Setter Property="Cursor"
                                    Value="SizeWE" />
                            <Setter Property="Margin"
                                    Value="-4 0 0 0" />
                        </Trigger>
                        <Trigger Property="Direction"
                                 Value="Right">
                            <Setter Property="Cursor"
                                    Value="SizeWE" />
                            <Setter Property="Margin"
                                    Value="0 0 -4 0" />
                        </Trigger>
                        <Trigger Property="Direction"
                                 Value="Top">
                            <Setter Property="Cursor"
                                    Value="SizeNS" />
                            <Setter Property="Margin"
                                    Value="0 -4 0 0" />
                        </Trigger>
                        <Trigger Property="Direction"
                                 Value="Bottom">
                            <Setter Property="Cursor"
                                    Value="SizeNS" />
                            <Setter Property="Margin"
                                    Value="0 0 0 -4" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>