and even more work

This commit is contained in:
2025-11-16 09:48:03 +01:00
parent f6b39cb678
commit 0b50f1ade2
13 changed files with 299 additions and 76 deletions

View File

@@ -62,8 +62,8 @@
<PackageReference Include="Pilz.Configuration" Version="3.2.7" /> <PackageReference Include="Pilz.Configuration" Version="3.2.7" />
<PackageReference Include="Pilz.Cryptography" Version="2.1.2" /> <PackageReference Include="Pilz.Cryptography" Version="2.1.2" />
<PackageReference Include="Pilz.IO" Version="2.1.0" /> <PackageReference Include="Pilz.IO" Version="2.1.0" />
<PackageReference Include="Pilz.UI" Version="3.1.1" /> <PackageReference Include="Pilz.UI" Version="3.1.4" />
<PackageReference Include="Pilz.UI.AvaloniaUI" Version="1.2.8" /> <PackageReference Include="Pilz.UI.AvaloniaUI" Version="1.2.13" />
<PackageReference Include="Avalonia" Version="11.3.8" /> <PackageReference Include="Avalonia" Version="11.3.8" />
<PackageReference Include="Avalonia.Desktop" Version="11.3.8" /> <PackageReference Include="Avalonia.Desktop" Version="11.3.8" />
<PackageReference Include="Avalonia.Svg" Version="11.3.0" /> <PackageReference Include="Avalonia.Svg" Version="11.3.0" />

View File

@@ -9,6 +9,7 @@
<!-- <FluentTheme DensityStyle="Compact" /> --> <!-- <FluentTheme DensityStyle="Compact" /> -->
<!-- <SimpleTheme /> --> <!-- <SimpleTheme /> -->
<StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml"/> <StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml"/>
<!-- <StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Simple.xaml"/> -->
<StyleInclude Source="avares://MinecraftModpackUpdateManager/Assets/Styles/StylesEnhancedDefaults.axaml"/> <StyleInclude Source="avares://MinecraftModpackUpdateManager/Assets/Styles/StylesEnhancedDefaults.axaml"/>
</Application.Styles> </Application.Styles>
</Application> </Application>

View File

@@ -3,6 +3,7 @@ using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using ModpackUpdater.Apps.Manager.Ui; using ModpackUpdater.Apps.Manager.Ui;
using Pilz.Features; using Pilz.Features;
using Pilz.UI.Symbols;
namespace ModpackUpdater.Apps.Manager; namespace ModpackUpdater.Apps.Manager;
@@ -10,6 +11,7 @@ public partial class App : Application
{ {
public override void Initialize() public override void Initialize()
{ {
SymbolGlobals.DefaultImageSmallSize = 17;
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
AppGlobals.Initialize(); AppGlobals.Initialize();
PluginFeatureController.Instance.RegisterAllOwn(); PluginFeatureController.Instance.RegisterAllOwn();

View File

@@ -26,8 +26,8 @@
<PackageReference Include="Pilz.Configuration" Version="3.2.7" /> <PackageReference Include="Pilz.Configuration" Version="3.2.7" />
<PackageReference Include="Pilz.Cryptography" Version="2.1.2" /> <PackageReference Include="Pilz.Cryptography" Version="2.1.2" />
<PackageReference Include="Pilz.Features" Version="2.12.0" /> <PackageReference Include="Pilz.Features" Version="2.12.0" />
<PackageReference Include="Pilz.UI" Version="3.1.1" /> <PackageReference Include="Pilz.UI" Version="3.1.4" />
<PackageReference Include="Pilz.UI.AvaloniaUI" Version="1.2.8" /> <PackageReference Include="Pilz.UI.AvaloniaUI" Version="1.2.13" />
<PackageReference Include="Pilz.UI.AvaloniaUI.Features" Version="1.0.0" /> <PackageReference Include="Pilz.UI.AvaloniaUI.Features" Version="1.0.0" />
<PackageReference Include="Avalonia" Version="11.3.8" /> <PackageReference Include="Avalonia" Version="11.3.8" />
<PackageReference Include="Avalonia.Desktop" Version="11.3.8" /> <PackageReference Include="Avalonia.Desktop" Version="11.3.8" />

View File

@@ -3,44 +3,32 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:modpackUpdater="clr-namespace:ModpackUpdater;assembly=ModpackUpdater"
xmlns:local="clr-namespace:ModpackUpdater.Apps.Manager.Ui" xmlns:local="clr-namespace:ModpackUpdater.Apps.Manager.Ui"
xmlns:manager="clr-namespace:ModpackUpdater.Apps.Manager"
xmlns:vm="clr-namespace:ModpackUpdater.Apps.Manager.Ui.Models" xmlns:vm="clr-namespace:ModpackUpdater.Apps.Manager.Ui.Models"
xmlns:controls="https://git.pilzinsel64.de/pilz-framework/pilz" xmlns:pilz="https://git.pilzinsel64.de/pilz-framework/pilz"
xmlns:symbols="clr-namespace:Pilz.UI.Symbols;assembly=Pilz.UI"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="ModpackUpdater.Apps.Manager.Ui.MainWindow" x:Class="ModpackUpdater.Apps.Manager.Ui.MainWindow"
x:DataType="vm:MainWindowViewModel" x:DataType="vm:MainWindowViewModel"
Title="Minecraft Modpack Manager" Title="Minecraft Modpack Manager"
Padding="3" Padding="3"
WindowState="Maximized"
Loaded="Window_OnLoaded"> Loaded="Window_OnLoaded">
<Window.Styles>
<Style Selector="DropDownButton /template/ Path#PART_DropDownGlyph">
<Setter Property="IsVisible" Value="False"/>
</Style>
</Window.Styles>
<Grid <Grid
RowDefinitions="Auto,*"> RowDefinitions="Auto,*">
<Menu>
<Menu.Items>
<MenuItem x:Name="MenuItemWorkspace" Header="Workspace">
<MenuItem.Items>
<MenuItem x:Name="MenuItemWorkspacePreferences" Header="Workspace preferences"/>
<MenuItem x:Name="MenuItemSaveWorkspace" Header="Save workspace"/>
<Separator/>
<MenuItem x:Name="MenuItemNewWorkspace" Header="New workspace"/>
<Separator/>
<MenuItem x:Name="MenuItemRecentWorkspaces" Header="Recent workspaces"/>
</MenuItem.Items>
</MenuItem>
<MenuItem x:Name="MenuItemTools" Header="Tools"/>
</Menu.Items>
</Menu>
<!-- Tree view --> <!-- Tree view -->
<Grid <Grid
x:Name="GridMain" x:Name="GridMain"
Grid.Row="1" Grid.Row="1"
ColumnDefinitions="300,*,300" ColumnDefinitions="Auto,*,300"
Margin="3"> Margin="3">
<StackPanel <StackPanel
@@ -48,14 +36,54 @@
Margin="3" Margin="3"
Spacing="6"> Spacing="6">
<Menu> <!-- StackPanel: Menu for updates -->
<Menu.Items> <StackPanel
<MenuItem x:Name="MenuItemCreateUpdate" Header="Create" Click="MenuItemCreateUpdate_OnClick"/> Orientation="Horizontal">
<MenuItem x:Name="MenuItemEditUpdate" Header="Edit" Click="MenuItemEditUpdate_OnClick"/>
<MenuItem x:Name="MenuItemRemoveUpdate" Header="Remove" Click="MenuItemRemoveUpdate_OnClick"/>
</Menu.Items>
</Menu>
<!-- Button: Workspace -->
<pilz:ImageButton
x:Name="ButtonWorkspace"
Text="Workspace"
Background="Transparent">
<pilz:ImageButton.Flyout>
<MenuFlyout>
<MenuFlyout.Items>
<MenuItem x:Name="MenuItemWorkspacePreferences" Header="Workspace _preferences"/>
<MenuItem x:Name="MenuItemSaveWorkspace" Header="_Save workspace" HotKey="Ctrl+S"/>
<Separator/>
<MenuItem x:Name="MenuItemNewWorkspace" Header="_New workspace"/>
<Separator/>
<MenuItem x:Name="MenuItemRecentWorkspaces" Header="_Recent workspaces"/>
</MenuFlyout.Items>
</MenuFlyout>
</pilz:ImageButton.Flyout>
</pilz:ImageButton>
<!-- Button: Update -->
<pilz:ImageButton
x:Name="ButtonUpdate"
Text="Update"
Background="Transparent">
<pilz:ImageButton.Flyout>
<MenuFlyout>
<MenuFlyout.Items>
<MenuItem x:Name="MenuItemCreateUpdate" Header="_Create update" Click="MenuItemCreateUpdate_OnClick"/>
<MenuItem x:Name="MenuItemRemoveUpdate" Header="_Remove update" Click="MenuItemRemoveUpdate_OnClick"/>
</MenuFlyout.Items>
</MenuFlyout>
</pilz:ImageButton.Flyout>
</pilz:ImageButton>
<!-- Button: Tools -->
<pilz:ImageButton
x:Name="ButtonTools"
Text="Tools"
Background="Transparent"/>
</StackPanel>
<!-- TreeView: Updates -->
<ScrollViewer <ScrollViewer
VerticalScrollBarVisibility="Auto"> VerticalScrollBarVisibility="Auto">
@@ -69,7 +97,9 @@
ItemsSource="{Binding Nodes}"> ItemsSource="{Binding Nodes}">
<StackPanel Orientation="Horizontal" Spacing="6"> <StackPanel Orientation="Horizontal" Spacing="6">
<Image Source="{Binding Image}" Width="16"/> <Image
Source="{Binding Image}"
Width="{x:Static symbols:SymbolGlobals.DefaultImageSmallSize}"/>
<TextBlock Text="{Binding DisplayText}"/> <TextBlock Text="{Binding DisplayText}"/>
</StackPanel> </StackPanel>
</TreeDataTemplate> </TreeDataTemplate>
@@ -94,28 +124,33 @@
DataType="vm:ActionSetTreeNode"> DataType="vm:ActionSetTreeNode">
<StackPanel <StackPanel
Orientation="Horizontal" Orientation="Horizontal">
Spacing="6">
<controls:ImageButton <!-- Button: Add action -->
<pilz:ImageButton
x:Name="ButtonAddAction" x:Name="ButtonAddAction"
Text="Add" Text="Add"
ImageSource="{x:Static local:MainWindow.ButtonImageAddAction}" ImageSource="{x:Static local:MainWindow.ButtonImageAddAction}"
Background="Transparent" Background="Transparent"
Click="ButtonAddAction_OnClick"/> Click="ButtonAddAction_OnClick"/>
<controls:ImageButton <!-- Button: Remove action -->
<pilz:ImageButton
x:Name="ButtonRemoveAction" x:Name="ButtonRemoveAction"
Text="Remove" Text="Remove"
ImageSource="{x:Static local:MainWindow.ButtonImageRemoveAction}" ImageSource="{x:Static local:MainWindow.ButtonImageRemoveAction}"
Background="Transparent" Background="Transparent"
Click="ButtonRemoveAction_OnClick"/> Click="ButtonRemoveAction_OnClick"/>
<!-- TextBox: Version -->
<TextBox <TextBox
Margin="3, 0, 3, 0"
Width="100" Width="100"
Text="{Binding Version}"/> Text="{Binding Version}"/>
<!-- CheckBox: Is public -->
<CheckBox <CheckBox
Margin="3, 0, 3, 0"
Content="Public" Content="Public"
IsChecked="{Binding IsPublic}"/> IsChecked="{Binding IsPublic}"/>
</StackPanel> </StackPanel>
@@ -176,8 +211,10 @@
<!-- Header --> <!-- Header -->
<StackPanel Orientation="Horizontal" Spacing="6"> <StackPanel Orientation="Horizontal" Spacing="6">
<Image x:Name="ImageUpdate"/> <Image
<TextBlock Text="Update" FontSize="20"/> x:Name="ImageUpdate"
Width="{x:Static symbols:SymbolGlobals.DefaultImageMediumSize}"/>
<TextBlock Text="Update" FontSize="{x:Static symbols:SymbolGlobals.DefaultImageMediumSize}"/>
</StackPanel> </StackPanel>
<!-- Inherit from --> <!-- Inherit from -->
@@ -208,7 +245,9 @@
<!-- Header --> <!-- Header -->
<StackPanel Orientation="Horizontal" Spacing="6"> <StackPanel Orientation="Horizontal" Spacing="6">
<Image x:Name="ImageGeneral"/> <Image
x:Name="ImageGeneral"
Width="{x:Static symbols:SymbolGlobals.DefaultImageMediumSize}"/>
<TextBlock Text="General" FontSize="20"/> <TextBlock Text="General" FontSize="20"/>
</StackPanel> </StackPanel>
@@ -246,11 +285,14 @@
<!-- Header --> <!-- Header -->
<StackPanel Orientation="Horizontal" Spacing="6"> <StackPanel Orientation="Horizontal" Spacing="6">
<Image x:Name="ImageDestination"/> <Image
x:Name="ImageDestination"
Width="{x:Static symbols:SymbolGlobals.DefaultImageMediumSize}"/>
<TextBlock Text="Destination" FontSize="20"/> <TextBlock Text="Destination" FontSize="20"/>
</StackPanel> </StackPanel>
<!-- Destination path --> <!-- Destination path -->
<Label Content="Destination path" Target="TextBoxInstallDestPath"/>
<TextBox <TextBox
x:Name="TextBoxInstallDestPath" x:Name="TextBoxInstallDestPath"
Text="{Binding DestPath}"/> Text="{Binding DestPath}"/>
@@ -262,7 +304,9 @@
<!-- Header --> <!-- Header -->
<StackPanel Orientation="Horizontal" Spacing="6"> <StackPanel Orientation="Horizontal" Spacing="6">
<Image x:Name="ImageSource"/> <Image
x:Name="ImageSource"
Width="{x:Static symbols:SymbolGlobals.DefaultImageMediumSize}"/>
<TextBlock Text="Source" FontSize="20"/> <TextBlock Text="Source" FontSize="20"/>
</StackPanel> </StackPanel>
@@ -323,7 +367,9 @@
<!-- Header --> <!-- Header -->
<StackPanel Orientation="Horizontal" Spacing="6"> <StackPanel Orientation="Horizontal" Spacing="6">
<Image x:Name="ImageMetadata"/> <Image
x:Name="ImageMetadata"
Width="{x:Static symbols:SymbolGlobals.DefaultImageMediumSize}"/>
<TextBlock Text="Metadata" FontSize="20"/> <TextBlock Text="Metadata" FontSize="20"/>
</StackPanel> </StackPanel>

View File

@@ -30,20 +30,28 @@ public partial class MainWindow : Window, IMainApi
InitializeComponent(); InitializeComponent();
MenuItemWorkspace.Icon = AppGlobals.Symbols.GetImage(AppSymbols.workspace, SymbolSize.Small); ButtonWorkspace.ImageSource = AppGlobals.Symbols.GetImageSource(AppSymbols.workspace);
MenuItemWorkspacePreferences.Icon = AppGlobals.Symbols.GetImage(AppSymbols.settings, SymbolSize.Small); MenuItemWorkspacePreferences.Icon = AppGlobals.Symbols.GetImage(AppSymbols.settings, SymbolSize.Small);
MenuItemSaveWorkspace.Icon = AppGlobals.Symbols.GetImage(AppSymbols.save, SymbolSize.Small); MenuItemSaveWorkspace.Icon = AppGlobals.Symbols.GetImage(AppSymbols.save, SymbolSize.Small);
MenuItemNewWorkspace.Icon = AppGlobals.Symbols.GetImage(AppSymbols.new_window, SymbolSize.Small); MenuItemNewWorkspace.Icon = AppGlobals.Symbols.GetImage(AppSymbols.new_window, SymbolSize.Small);
MenuItemRecentWorkspaces.Icon = AppGlobals.Symbols.GetImage(AppSymbols.time_machine, SymbolSize.Small); MenuItemRecentWorkspaces.Icon = AppGlobals.Symbols.GetImage(AppSymbols.time_machine, SymbolSize.Small);
// MenuItemUpdates.Icon = AppGlobals.Symbols.GetImage(AppSymbols.update_done, SymbolSize.Small); ButtonUpdate.ImageSource = AppGlobals.Symbols.GetImageSource(AppSymbols.update_done);
ButtonTools.ImageSource = AppGlobals.Symbols.GetImageSource(AppSymbols.tools);
MenuItemCreateUpdate.Icon = AppGlobals.Symbols.GetImage(AppSymbols.add, SymbolSize.Small); MenuItemCreateUpdate.Icon = AppGlobals.Symbols.GetImage(AppSymbols.add, SymbolSize.Small);
MenuItemRemoveUpdate.Icon = AppGlobals.Symbols.GetImage(AppSymbols.remove, SymbolSize.Small); MenuItemRemoveUpdate.Icon = AppGlobals.Symbols.GetImage(AppSymbols.remove, SymbolSize.Small);
MenuItemTools.Icon = AppGlobals.Symbols.GetImage(AppSymbols.tools, SymbolSize.Small); ImageUpdate.Source = AppGlobals.Symbols.GetImageSource(AppSymbols.update_done);
ImageMetadata.Source = AppGlobals.Symbols.GetImageSource(AppSymbols.show_property);
ImageGeneral.Source = AppGlobals.Symbols.GetImageSource(AppSymbols.normal_screen);
ImageSource.Source = AppGlobals.Symbols.GetImageSource(AppSymbols.input);
ImageDestination.Source = AppGlobals.Symbols.GetImageSource(AppSymbols.output);
PluginFeatureController.Instance.Features.Get(FeatureTypes.Workspace).InsertItemsTo(MenuItemNewWorkspace.Items, PluginFeatureController.Instance.Features.Get(FeatureTypes.Workspace).InsertItemsTo(MenuItemNewWorkspace.Items,
customClickHandler: MenuItemNewWorkspaceItem_Click, customClickHandler: MenuItemNewWorkspaceItem_Click,
insertPrioSplitters: true); insertPrioSplitters: true);
PluginFeatureController.Instance.Functions.Get(FeatureTypes.Tools).InsertItemsTo(MenuItemTools.Items,
var menuFlyoutTools = new MenuFlyout();
ButtonTools.Flyout = menuFlyoutTools;
PluginFeatureController.Instance.Functions.Get(FeatureTypes.Tools).InsertItemsTo(menuFlyoutTools.Items,
customClickHandler: MenuItemToolsItem_Click, customClickHandler: MenuItemToolsItem_Click,
insertPrioSplitters: true); insertPrioSplitters: true);
} }
@@ -129,31 +137,6 @@ public partial class MainWindow : Window, IMainApi
func.Execute(new MainApiParameters(this)); func.Execute(new MainApiParameters(this));
} }
private void MenuItemCreateUpdate_OnClick(object? sender, RoutedEventArgs e)
{
// ...
}
private void MenuItemRemoveUpdate_OnClick(object? sender, RoutedEventArgs e)
{
// ...
}
private void MenuItemEditUpdate_OnClick(object? sender, RoutedEventArgs e)
{
// ...
}
private void MenuItemAddAction_OnClick(object? sender, RoutedEventArgs e)
{
// ...
}
private void MenuItemRemoveAction_OnClick(object? sender, RoutedEventArgs e)
{
// ...
}
private void ButtonAddAction_OnClick(object? sender, RoutedEventArgs e) private void ButtonAddAction_OnClick(object? sender, RoutedEventArgs e)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
@@ -163,4 +146,14 @@ public partial class MainWindow : Window, IMainApi
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
private void MenuItemCreateUpdate_OnClick(object? sender, RoutedEventArgs e)
{
throw new NotImplementedException();
}
private void MenuItemRemoveUpdate_OnClick(object? sender, RoutedEventArgs e)
{
throw new NotImplementedException();
}
} }

View File

@@ -36,4 +36,9 @@ public enum AppSymbols
broom, broom,
renew, renew,
list_view, list_view,
show_property,
normal_screen,
input,
output,
git,
} }

View File

@@ -16,8 +16,8 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Pilz" Version="2.6.1" /> <PackageReference Include="Pilz" Version="2.6.1" />
<PackageReference Include="Pilz.UI" Version="3.1.1" /> <PackageReference Include="Pilz.UI" Version="3.1.4" />
<PackageReference Include="Pilz.UI.AvaloniaUI" Version="1.2.8" /> <PackageReference Include="Pilz.UI.AvaloniaUI" Version="1.2.13" />
<PackageReference Include="Avalonia" Version="11.3.8" /> <PackageReference Include="Avalonia" Version="11.3.8" />
<PackageReference Include="Avalonia.Desktop" Version="11.3.8" /> <PackageReference Include="Avalonia.Desktop" Version="11.3.8" />
<PackageReference Include="Avalonia.Svg" Version="11.3.0" /> <PackageReference Include="Avalonia.Svg" Version="11.3.0" />

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="480" height="480">
<path fill="#F4511E" d="M42.2,22.1L25.9,5.8C25.4,5.3,24.7,5,24,5c0,0,0,0,0,0c-0.7,0-1.4,0.3-1.9,0.8l-3.5,3.5l4.1,4.1c0.4-0.2,0.8-0.3,1.3-0.3c1.7,0,3,1.3,3,3c0,0.5-0.1,0.9-0.3,1.3l4,4c0.4-0.2,0.8-0.3,1.3-0.3c1.7,0,3,1.3,3,3s-1.3,3-3,3c-1.7,0-3-1.3-3-3c0-0.5,0.1-0.9,0.3-1.3l-4-4c-0.1,0-0.2,0.1-0.3,0.1v10.4c1.2,0.4,2,1.5,2,2.8c0,1.7-1.3,3-3,3s-3-1.3-3-3c0-1.3,0.8-2.4,2-2.8V18.8c-1.2-0.4-2-1.5-2-2.8c0-0.5,0.1-0.9,0.3-1.3l-4.1-4.1L5.8,22.1C5.3,22.6,5,23.3,5,24c0,0.7,0.3,1.4,0.8,1.9l16.3,16.3c0,0,0,0,0,0c0.5,0.5,1.2,0.8,1.9,0.8s1.4-0.3,1.9-0.8l16.3-16.3c0.5-0.5,0.8-1.2,0.8-1.9C43,23.3,42.7,22.6,42.2,22.1z" />
</svg>

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="480" height="480">
<linearGradient id="tF5jXHsBSdYe~15_6tmTFa" x1="24" x2="24" y1="7.958" y2="32.803" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#32bdef" />
<stop offset="1" stop-color="#1ea2e4" />
</linearGradient>
<path fill="url(#tF5jXHsBSdYe~15_6tmTFa)" d="M29.19,25H26V9c0-0.552-0.448-1-1-1h-2c-0.552,0-1,0.448-1,1v16h-3.19c-0.72,0-1.08,0.87-0.571,1.379l4.701,4.701c0.586,0.586,1.536,0.586,2.121,0l4.701-4.701C30.271,25.87,29.91,25,29.19,25z" />
<linearGradient id="tF5jXHsBSdYe~15_6tmTFb" x1="37" x2="37" y1="5.113" y2="25.441" gradientTransform="matrix(-1 0 0 1 48 0)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#32bdef" />
<stop offset="1" stop-color="#1ea2e4" />
</linearGradient>
<path fill="url(#tF5jXHsBSdYe~15_6tmTFb)" d="M5.81,19H9v-7.172L5.293,8.121c-0.391-0.391-0.391-1.024,0-1.414l1.414-1.414c0.391-0.391,1.024-0.391,1.414,0l4,4C12.684,9.856,13,10.619,13,11.414V19h3.19c0.72,0,1.08,0.87,0.571,1.379L12.06,25.08c-0.586,0.586-1.536,0.586-2.121,0l-4.701-4.701C4.729,19.87,5.09,19,5.81,19z" />
<linearGradient id="tF5jXHsBSdYe~15_6tmTFc" x1="37" x2="37" y1="5.113" y2="25.441" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#32bdef" />
<stop offset="1" stop-color="#1ea2e4" />
</linearGradient>
<path fill="url(#tF5jXHsBSdYe~15_6tmTFc)" d="M42.19,19H39v-7.172l3.707-3.707c0.391-0.391,0.391-1.024,0-1.414l-1.414-1.414c-0.391-0.391-1.024-0.391-1.414,0l-4,4C35.316,9.856,35,10.619,35,11.414V19h-3.19c-0.72,0-1.08,0.87-0.571,1.379l4.701,4.701c0.586,0.586,1.536,0.586,2.121,0l4.701-4.701C43.271,19.87,42.91,19,42.19,19z" />
<linearGradient id="tF5jXHsBSdYe~15_6tmTFd" x1="39.25" x2="44.171" y1="-590.623" y2="-604.567" gradientTransform="matrix(1 0 0 -1 0 -562)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#32bdef" />
<stop offset="1" stop-color="#1ea2e4" />
</linearGradient>
<path fill="url(#tF5jXHsBSdYe~15_6tmTFd)" d="M39,30v13l4.828-4.828c0.75-0.75,1.172-1.768,1.172-2.828V30c0-0.552-0.448-1-1-1h-4C39.448,29,39,29.448,39,30z" />
<linearGradient id="tF5jXHsBSdYe~15_6tmTFe" x1="9" x2="39" y1="-602" y2="-602" gradientTransform="matrix(1 0 0 -1 0 -562)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#0362b0" />
<stop offset=".112" stop-color="#036abd" />
<stop offset=".258" stop-color="#036fc5" />
<stop offset=".5" stop-color="#0370c8" />
<stop offset=".742" stop-color="#036fc5" />
<stop offset=".888" stop-color="#036abd" />
<stop offset="1" stop-color="#0362b0" />
</linearGradient>
<rect width="30" height="6" x="9" y="37" fill="url(#tF5jXHsBSdYe~15_6tmTFe)" />
<linearGradient id="tF5jXHsBSdYe~15_6tmTFf" x1="-549.75" x2="-544.829" y1="-590.623" y2="-604.567" gradientTransform="rotate(180 -270.5 -281)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#32bdef" />
<stop offset="1" stop-color="#1ea2e4" />
</linearGradient>
<path fill="url(#tF5jXHsBSdYe~15_6tmTFf)" d="M9,30v13l-4.828-4.828C3.421,37.421,3,36.404,3,35.343V30c0-0.552,0.448-1,1-1h4C8.552,29,9,29.448,9,30z" />
</svg>

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="480" height="480">
<linearGradient id="zQnX_u5TVUyKpnweuzAEVa" x1="-381.96" x2="-371.96" y1="-1380.109" y2="-1380.109" gradientTransform="matrix(1 0 0 -1 389.237 -1361.109)" gradientUnits="userSpaceOnUse">
<stop offset=".273" stop-color="#912fbd" />
<stop offset=".588" stop-color="#8f2ebb" />
<stop offset=".758" stop-color="#892bb3" />
<stop offset=".894" stop-color="#7e26a5" />
<stop offset="1" stop-color="#701f94" />
</linearGradient>
<path fill="url(#zQnX_u5TVUyKpnweuzAEVa)" d="M16.996,17l-8.997,0.007c-0.552,0.001-1,0.449-0.999,1.001L7.003,21L17,20.992L16.996,17z" />
<linearGradient id="zQnX_u5TVUyKpnweuzAEVb" x1="16.525" x2="21.446" y1="-1637.127" y2="-1651.07" gradientTransform="matrix(1 0 0 -1 -.022 -1630.206)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#ae4cd5" />
<stop offset="1" stop-color="#ac4ad5" />
</linearGradient>
<path fill="url(#zQnX_u5TVUyKpnweuzAEVb)" d="M17,8.004l0.011,13l3.405-3.416c0.374-0.376,0.584-0.885,0.584-1.415L20.993,7l-2.994,0.003 C17.447,7.004,16.999,7.452,17,8.004z" />
<linearGradient id="zQnX_u5TVUyKpnweuzAEVc" x1="-1604.119" x2="-1594.119" y1="638.46" y2="638.46" gradientTransform="matrix(-1 0 0 1 -1562.594 -609.46)" gradientUnits="userSpaceOnUse">
<stop offset=".273" stop-color="#912fbd" />
<stop offset=".588" stop-color="#8f2ebb" />
<stop offset=".758" stop-color="#892bb3" />
<stop offset=".894" stop-color="#7e26a5" />
<stop offset="1" stop-color="#701f94" />
</linearGradient>
<path fill="url(#zQnX_u5TVUyKpnweuzAEVc)" d="M31.004,31l8.997-0.007c0.552-0.001,1-0.449,0.999-1.001L40.997,27L31,27.008L31.004,31z" />
<linearGradient id="zQnX_u5TVUyKpnweuzAEVd" x1="-1205.055" x2="-1200.136" y1="381.523" y2="367.584" gradientTransform="matrix(-1 0 0 1 -1173.464 -340.176)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#ae4cd5" />
<stop offset="1" stop-color="#ac4ad5" />
</linearGradient>
<path fill="url(#zQnX_u5TVUyKpnweuzAEVd)" d="M31,39.996L30.989,27l-3.406,3.417C27.209,30.792,26.999,31.3,27,31.829L27.007,41 l2.994-0.003C30.553,40.996,31.001,40.548,31,39.996z" />
<linearGradient id="zQnX_u5TVUyKpnweuzAEVe" x1="-1626.498" x2="-1616.498" y1="-1380.299" y2="-1380.299" gradientTransform="rotate(180 -793.086 -680.252)" gradientUnits="userSpaceOnUse">
<stop offset=".273" stop-color="#912fbd" />
<stop offset=".588" stop-color="#8f2ebb" />
<stop offset=".758" stop-color="#892bb3" />
<stop offset=".894" stop-color="#7e26a5" />
<stop offset="1" stop-color="#701f94" />
</linearGradient>
<path fill="url(#zQnX_u5TVUyKpnweuzAEVe)" d="M30.996,17.007l9-0.007c0.552-0.001,1,0.445,1.001,0.995L41,20.992L31,21L30.996,17.007z" />
<linearGradient id="zQnX_u5TVUyKpnweuzAEVf" x1="-1228.014" x2="-1223.093" y1="-1637.658" y2="-1651.601" gradientTransform="rotate(180 -598.651 -815.082)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#ae4cd5" />
<stop offset="1" stop-color="#ac4ad5" />
</linearGradient>
<path fill="url(#zQnX_u5TVUyKpnweuzAEVf)" d="M30.989,7.999L31,20.997l-3.408-3.41c-0.374-0.375-0.585-0.883-0.585-1.414L27,7.003 L29.993,7C30.542,6.999,30.988,7.447,30.989,7.999z" />
<linearGradient id="zQnX_u5TVUyKpnweuzAEVg" x1="-359.508" x2="-349.508" y1="639.223" y2="639.223" gradientTransform="translate(365.896 -610.563)" gradientUnits="userSpaceOnUse">
<stop offset=".273" stop-color="#912fbd" />
<stop offset=".588" stop-color="#8f2ebb" />
<stop offset=".758" stop-color="#892bb3" />
<stop offset=".894" stop-color="#7e26a5" />
<stop offset="1" stop-color="#701f94" />
</linearGradient>
<path fill="url(#zQnX_u5TVUyKpnweuzAEVg)" d="M17.004,30.993l-9,0.007c-0.552,0.001-1-0.445-1.001-0.995L7,27.008L17,27L17.004,30.993z" />
<linearGradient id="zQnX_u5TVUyKpnweuzAEVh" x1="38.977" x2="43.897" y1="381.863" y2="367.921" gradientTransform="translate(-22.845 -340.716)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#ae4cd5" />
<stop offset="1" stop-color="#ac4ad5" />
</linearGradient>
<path fill="url(#zQnX_u5TVUyKpnweuzAEVh)" d="M17.011,40L17,27.003l3.407,3.41c0.374,0.375,0.585,0.884,0.586,1.414L21,40.997L18.008,41 C17.458,41.001,17.012,40.553,17.011,40z" />
</svg>

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="480" height="480">
<linearGradient id="IImKg~zhyy01_0NN5Q3nua" x1="24" x2="24" y1="3.745" y2="28.133" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#32bdef" />
<stop offset="1" stop-color="#1ea2e4" />
</linearGradient>
<path fill="url(#IImKg~zhyy01_0NN5Q3nua)" d="M29.762,10.14l-4.701-4.701c-0.585-0.586-1.535-0.586-2.121,0l-4.701,4.701 c-0.509,0.509-0.149,1.379,0.571,1.379H22v16c0,0.552,0.448,1,1,1h2c0.552,0,1-0.448,1-1v-16h3.19 C29.91,11.519,30.271,10.649,29.762,10.14z" />
<linearGradient id="IImKg~zhyy01_0NN5Q3nub" x1="9.659" x2="9.659" y1="3.37" y2="27.758" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#32bdef" />
<stop offset="1" stop-color="#1ea2e4" />
</linearGradient>
<path fill="url(#IImKg~zhyy01_0NN5Q3nub)" d="M3.306,21.339v-6.648c-0.001-0.828,0.671-1.5,1.5-1.5l6.648,0c0.72,0,1.08,0.87,0.571,1.379 l-2.256,2.256l5.364,5.364c0.562,0.562,0.878,1.325,0.878,2.121v5.657c0.001,0.552-0.447,1-1,1h-2c-0.552,0.001-1-0.447-1-1v-5.242 l-5.071-5.071l-2.256,2.256C4.176,22.419,3.306,22.059,3.306,21.339z" />
<linearGradient id="IImKg~zhyy01_0NN5Q3nuc" x1="38.341" x2="38.341" y1="3.37" y2="27.758" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#32bdef" />
<stop offset="1" stop-color="#1ea2e4" />
</linearGradient>
<path fill="url(#IImKg~zhyy01_0NN5Q3nuc)" d="M44.694,21.339v-6.648c0.001-0.828-0.671-1.5-1.5-1.5l-6.648,0 c-0.72,0-1.08,0.87-0.571,1.379l2.256,2.256l-5.364,5.364c-0.562,0.562-0.878,1.325-0.878,2.121v5.657c-0.001,0.552,0.447,1,1,1h2 c0.552,0.001,1-0.447,1-1v-5.242l5.071-5.071l2.256,2.256C43.824,22.419,44.694,22.059,44.694,21.339z" />
<linearGradient id="IImKg~zhyy01_0NN5Q3nud" x1="39.25" x2="44.171" y1="614.623" y2="628.567" gradientTransform="translate(0 -586)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#32bdef" />
<stop offset="1" stop-color="#1ea2e4" />
</linearGradient>
<path fill="url(#IImKg~zhyy01_0NN5Q3nud)" d="M39,30v13l4.828-4.828c0.75-0.75,1.172-1.768,1.172-2.828V30c0-0.552-0.448-1-1-1h-4 C39.448,29,39,29.448,39,30z" />
<linearGradient id="IImKg~zhyy01_0NN5Q3nue" x1="9" x2="39" y1="626" y2="626" gradientTransform="translate(0 -586)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#0362b0" />
<stop offset=".112" stop-color="#036abd" />
<stop offset=".258" stop-color="#036fc5" />
<stop offset=".5" stop-color="#0370c8" />
<stop offset=".742" stop-color="#036fc5" />
<stop offset=".888" stop-color="#036abd" />
<stop offset="1" stop-color="#0362b0" />
</linearGradient>
<rect width="30" height="6" x="9" y="37" fill="url(#IImKg~zhyy01_0NN5Q3nue)" />
<linearGradient id="IImKg~zhyy01_0NN5Q3nuf" x1="-999.75" x2="-994.829" y1="614.623" y2="628.567" gradientTransform="matrix(-1 0 0 1 -991 -586)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#32bdef" />
<stop offset="1" stop-color="#1ea2e4" />
</linearGradient>
<path fill="url(#IImKg~zhyy01_0NN5Q3nuf)" d="M9,30v13l-4.828-4.828C3.421,37.421,3,36.404,3,35.343V30c0-0.552,0.448-1,1-1h4 C8.552,29,9,29.448,9,30z" />
</svg>

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 48 48" width="480" height="480">
<linearGradient id="SVGID_1_" x1="13.069" x2="31.926" y1="652.001" y2="624.725" gradientTransform="matrix(1 0 0 -1 0 662)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#7dd8f3" />
<stop offset="1" stop-color="#45b0d0" />
</linearGradient>
<path fill="url(#SVGID_1_)" d="M4,38V13h40v25c0,1.1-0.9,2-2,2H6C4.9,40,4,39.1,4,38z" />
<path fill="#0f94bf" d="M38.5,22h-23c-0.3,0-0.5-0.2-0.5-0.5v-1c0-0.3,0.2-0.5,0.5-0.5h23c0.3,0,0.5,0.2,0.5,0.5v1C39,21.8,38.8,22,38.5,22z" />
<path fill="#0f94bf" d="M38.5,27h-23c-0.3,0-0.5-0.2-0.5-0.5v-1c0-0.3,0.2-0.5,0.5-0.5h23c0.3,0,0.5,0.2,0.5,0.5v1C39,26.8,38.8,27,38.5,27z" />
<path fill="#0f94bf" d="M38.5,32h-23c-0.3,0-0.5-0.2-0.5-0.5v-1c0-0.3,0.2-0.5,0.5-0.5h23c0.3,0,0.5,0.2,0.5,0.5v1C39,31.8,38.8,32,38.5,32z" />
<linearGradient id="SVGID_2_" x1="4.808" x2="42.75" y1="655.22" y2="647.505" gradientTransform="matrix(1 0 0 -1 0 662)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#0077d2" />
<stop offset="1" stop-color="#0b59a2" />
</linearGradient>
<path fill="url(#SVGID_2_)" d="M44,10v3H4v-3c0-1.1,0.9-2,2-2h36C43.1,8,44,8.9,44,10z" />
<path fill="#0f94bf" d="M9.5,22h1c0.3,0,0.5-0.2,0.5-0.5v-1c0-0.3-0.2-0.5-0.5-0.5h-1C9.2,20,9,20.2,9,20.5v1C9,21.8,9.2,22,9.5,22z" />
<path fill="#0f94bf" d="M9.5,27h1c0.3,0,0.5-0.2,0.5-0.5v-1c0-0.3-0.2-0.5-0.5-0.5h-1C9.2,25,9,25.2,9,25.5v1C9,26.8,9.2,27,9.5,27z" />
<path fill="#0f94bf" d="M9.5,32h1c0.3,0,0.5-0.2,0.5-0.5v-1c0-0.3-0.2-0.5-0.5-0.5h-1C9.2,30,9,30.2,9,30.5v1C9,31.8,9.2,32,9.5,32z" />
<path d="M37.5,30C31.2,30,26,34.3,26,39.5c0,0.2,0,0.3,0,0.5h16c1.1,0,2-0.9,2-2v-6.3C42.1,30.6,39.9,30,37.5,30z" opacity=".05" />
<path d="M37.5,30.5c-6.1,0-11,4-11,9c0,0.2,0,0.3,0,0.5H42c1.1,0,2-0.9,2-2v-5.7C42.2,31.2,39.9,30.5,37.5,30.5z" opacity=".07" />
<radialGradient id="SVGID_3_" cx="19.257" cy="1093.685" r="10.612" gradientTransform="matrix(1.05 0 0 -1.0625 17.35 1198.876)" gradientUnits="userSpaceOnUse">
<stop offset=".55" stop-color="#e4e4e6" />
<stop offset=".73" stop-color="#e1e2e4" />
<stop offset=".854" stop-color="#d8dadc" />
<stop offset=".961" stop-color="#c9cdcf" />
<stop offset="1" stop-color="#c1c6c9" />
</radialGradient>
<ellipse cx="37.5" cy="39.5" fill="url(#SVGID_3_)" rx="10.5" ry="8.5" />
<linearGradient id="SVGID_4_" x1="33.044" x2="42.082" y1="1106.456" y2="1097.418" gradientTransform="matrix(1 0 0 -1 0 1140)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#32bdef" />
<stop offset="1" stop-color="#1ea2e4" />
</linearGradient>
<circle cx="37.5" cy="38" r="7" fill="url(#SVGID_4_)" />
<radialGradient id="SVGID_5_" cx="35.143" cy="1107.852" r="10.382" gradientTransform="matrix(1 0 0 -1 0 1140)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#4b4b4b" />
<stop offset=".531" stop-color="#393939" />
<stop offset="1" stop-color="#252525" />
</radialGradient>
<circle cx="37.5" cy="38" r="4" fill="url(#SVGID_5_)" />
<circle cx="39.5" cy="35" r="1" fill="#fff" />
</svg>