feat: expand cockpit integrations and support workflows

Add Phoenix remote desktop, action connector, documentation engine, and gamification support. Refactor support-case processing and search/action UI, and update installer assets and dependencies.
This commit is contained in:
Meik
2026-07-13 11:16:53 +02:00
parent bbedbf71c8
commit 0b52999b1d
303 changed files with 11235 additions and 3580 deletions

View File

@@ -0,0 +1,112 @@
<Window x:Class="FasdDesktopUi.Pages.LevelUpPage.LevelUpPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
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:local="clr-namespace:FasdDesktopUi.Pages.LevelUpPage"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon"
xmlns:vc="clr-namespace:FasdDesktopUi.Basics.Converter"
mc:Ignorable="d"
Title="LevelUpPage"
Height="700"
Width="600"
WindowStartupLocation="CenterScreen"
ResizeMode="NoResize"
WindowStyle="None"
AllowsTransparency="True"
x:Name="LevelUpWindow"
IsVisibleChanged="HandleVisibilityChanged"
Background="Transparent">
<Window.Resources>
<vc:LanguageDefinitionsConverter x:Key="LanguageConverter" />
<Style TargetType="TextBlock">
<Setter Property="Foreground"
Value="{DynamicResource FontColor.DetailsPage.TitleSection.Header}" />
<Setter Property="HorizontalAlignment"
Value="Center" />
<Setter Property="FontWeight"
Value="Bold" />
</Style>
</Window.Resources>
<Border Padding="75"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="{DynamicResource Color.AppBackground}"
CornerRadius="25">
<Border.Effect>
<DropShadowEffect Color="{DynamicResource BorderDarkColor}"
Opacity="0.5"
BlurRadius="25"/>
</Border.Effect>
<StackPanel>
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Center">
<TextBlock FontSize="60"
Margin="0 0 5 10"
FontWeight="UltraBold">Level Up!</TextBlock>
<ico:AdaptableIcon SelectedInternGif="partyPopper"
IconHeight="130"
IconWidth="130"
Margin="0 -60 -45 0" />
</StackPanel>
<Border Height="225"
Width="225"
CornerRadius="150"
BorderBrush="{DynamicResource Color.FunctionMarker}"
BorderThickness="35"
Margin="0 0 0 10">
<StackPanel>
<TextBlock x:Name="LastLevelTextBlock"
FontSize="110"
VerticalAlignment="Top">
<TextBlock.RenderTransform>
<TranslateTransform x:Name="UpperTransform" />
</TextBlock.RenderTransform>
</TextBlock>
<TextBlock x:Name="NewLevelTextBlock"
FontSize="110"
VerticalAlignment="Top"
Margin="0,40,0,0">
<TextBlock.RenderTransform>
<TranslateTransform x:Name="LowerTransform" />
</TextBlock.RenderTransform>
</TextBlock>
</StackPanel>
</Border>
<TextBlock Text="{Binding ElementName=LevelUpWindow, Path=LevelTitle}"
FontSize="40"
FontWeight="Bold" />
<Border HorizontalAlignment="Center"
Padding="15 7.5"
CornerRadius="5"
Margin="0 15 0 0"
Cursor="Hand"
Background="{DynamicResource Color.FunctionMarker}"
MouseLeftButtonUp="Continue_Click"
TouchDown="Continue_Click">
<Border.Resources>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}"
Value="True">
<Setter Property="Opacity"
Value="0.7" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Resources>
<TextBlock FontSize="17"
Text="{Binding Converter={StaticResource LanguageConverter}, ConverterParameter=Gamification.LevelUp.Continue}"
Foreground="{DynamicResource Color.AppBackground}" />
</Border>
</StackPanel>
</Border>
</Window>

View File

@@ -0,0 +1,91 @@
using System;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Animation;
namespace FasdDesktopUi.Pages.LevelUpPage
{
public partial class LevelUpPage : Window
{
public int NewLevel
{
get { return (int)GetValue(NewLevelProperty); }
set { SetValue(NewLevelProperty, value); }
}
public static readonly DependencyProperty NewLevelProperty =
DependencyProperty.Register(nameof(NewLevel), typeof(int), typeof(LevelUpPage), new PropertyMetadata(0, new PropertyChangedCallback(HandleLevelChanged)));
private static void HandleLevelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (!(d is LevelUpPage levelupPage))
return;
levelupPage.LastLevelTextBlock.Text = (levelupPage.NewLevel - 1).ToString();
levelupPage.NewLevelTextBlock.Text = levelupPage.NewLevel.ToString();
}
public string LevelTitle
{
get { return (string)GetValue(LevelTitleProperty); }
set { SetValue(LevelTitleProperty, value); }
}
public static readonly DependencyProperty LevelTitleProperty =
DependencyProperty.Register(nameof(LevelTitle), typeof(string), typeof(LevelUpPage), new PropertyMetadata("string.Empty"));
public LevelUpPage()
{
InitializeComponent();
}
private async Task AnimateText()
{
await Task.Delay(900);
double animationDistance = NewLevelTextBlock.ActualHeight + NewLevelTextBlock.Margin.Top + NewLevelTextBlock.Margin.Bottom;
Duration duration = TimeSpan.FromMilliseconds(500);
DoubleAnimation lowerAnimation = new DoubleAnimation
{
From = 0,
To = -animationDistance,
Duration = duration,
EasingFunction = new CubicEase
{
EasingMode = EasingMode.EaseInOut
}
};
DoubleAnimation upperAnimation = new DoubleAnimation
{
From = 0,
To = -animationDistance,
Duration = duration,
EasingFunction = new CubicEase
{
EasingMode = EasingMode.EaseInOut
}
};
LowerTransform.BeginAnimation(TranslateTransform.YProperty, lowerAnimation);
UpperTransform.BeginAnimation(TranslateTransform.YProperty, upperAnimation);
}
private async void HandleVisibilityChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (Visibility != Visibility.Visible)
return;
await AnimateText();
}
private void Continue_Click(object sender, RoutedEventArgs e)
{
Close();
}
}
}