diff --git a/ChartSample/ChartSample.sln b/ChartSample/ChartSample.sln
new file mode 100644
index 0000000..f66af1b
--- /dev/null
+++ b/ChartSample/ChartSample.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.14.36212.18 d17.14
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChartSample", "ChartSample\ChartSample.csproj", "{3AC44380-7435-40D5-A2C7-621738BD7D71}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {3AC44380-7435-40D5-A2C7-621738BD7D71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3AC44380-7435-40D5-A2C7-621738BD7D71}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3AC44380-7435-40D5-A2C7-621738BD7D71}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3AC44380-7435-40D5-A2C7-621738BD7D71}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {BB271940-53D8-4167-B040-4503C0C40C88}
+ EndGlobalSection
+EndGlobal
diff --git a/ChartSample/ChartSample/App.xaml b/ChartSample/ChartSample/App.xaml
new file mode 100644
index 0000000..874ade9
--- /dev/null
+++ b/ChartSample/ChartSample/App.xaml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ChartSample/ChartSample/App.xaml.cs b/ChartSample/ChartSample/App.xaml.cs
new file mode 100644
index 0000000..90c3f34
--- /dev/null
+++ b/ChartSample/ChartSample/App.xaml.cs
@@ -0,0 +1,15 @@
+namespace ChartSample
+{
+ public partial class App : Application
+ {
+ public App()
+ {
+ InitializeComponent();
+ }
+
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
+ }
+ }
+}
\ No newline at end of file
diff --git a/ChartSample/ChartSample/AppShell.xaml b/ChartSample/ChartSample/AppShell.xaml
new file mode 100644
index 0000000..2440602
--- /dev/null
+++ b/ChartSample/ChartSample/AppShell.xaml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/ChartSample/ChartSample/AppShell.xaml.cs b/ChartSample/ChartSample/AppShell.xaml.cs
new file mode 100644
index 0000000..08a4439
--- /dev/null
+++ b/ChartSample/ChartSample/AppShell.xaml.cs
@@ -0,0 +1,10 @@
+namespace ChartSample
+{
+ public partial class AppShell : Shell
+ {
+ public AppShell()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/ChartSample/ChartSample/AzureOpenAIService.cs b/ChartSample/ChartSample/AzureOpenAIService.cs
new file mode 100644
index 0000000..aa657f9
--- /dev/null
+++ b/ChartSample/ChartSample/AzureOpenAIService.cs
@@ -0,0 +1,119 @@
+using Azure;
+using Azure.AI.OpenAI;
+using Microsoft.Extensions.AI;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ChartSample
+{
+ internal class AzureOpenAIService
+ {
+ const string endpoint = "";
+ const string deploymentName = "";
+ string key = "";
+ internal IChatClient? Client { get; set; }
+ internal string? ChatHistory { get; set; }
+ public AzureOpenAIService()
+ {
+ GetAzureOpenAI();
+ }
+
+ private void GetAzureOpenAI()
+ {
+ try
+ {
+ var client = new AzureOpenAIClient(new Uri(endpoint), new AzureKeyCredential(key)).AsChatClient(modelId: deploymentName);
+ Client = client;
+ }
+ catch (Exception)
+ {
+ }
+ }
+
+ public async Task> GetCleanedData(ObservableCollection rawData)
+ {
+ ObservableCollection collection = new ObservableCollection();
+
+ var prompt = $"Clean the following e-commerce website traffic data, resolve outliers and fill missing values:\n{string.Join("\n", rawData.Select(d => $"{d.DateTime:yyyy-MM-dd-HH-m-ss}: {d.Visitors}"))} and the output cleaned data should be in the yyyy-MM-dd-HH-m-ss:Value, not required explanations";
+
+ try
+ {
+ if(Client != null)
+ {
+ ChatHistory = prompt;
+ var response = await Client.CompleteAsync(ChatHistory);
+ return CleanedData(response.ToString(), collection);
+ }
+ }
+ catch (Exception)
+ {
+ return await Task.FromResult(GetDummyData(collection));
+ }
+
+ return collection;
+ }
+
+ private ObservableCollection CleanedData(string json, ObservableCollection collection)
+ {
+ if(string.IsNullOrEmpty(json))
+ {
+ return new ObservableCollection();
+ }
+
+ var lines = json.Split('\n');
+ foreach (var line in lines)
+ {
+ if(string.IsNullOrWhiteSpace(line))
+ {
+ continue;
+ }
+
+ var parts = line.Split(':');
+ if(parts.Length == 2)
+ {
+ var date = DateTime.ParseExact(parts[0].Trim(), "yyyy-MM-dd-HH-m-ss", CultureInfo.InvariantCulture);
+ var high = double.Parse(parts[1].Trim());
+ collection.Add(new Model { DateTime = date, Visitors = high });
+ }
+ }
+
+ return collection;
+ }
+
+ private ObservableCollection GetDummyData(ObservableCollection collection)
+ {
+ return new ObservableCollection()
+ {
+ new Model { DateTime = new DateTime(2024, 07, 01, 00, 00, 00), Visitors = 150 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 01, 00, 00), Visitors = 160 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 02, 00, 00), Visitors = 155 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 03, 00, 00), Visitors = 162 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 04, 00, 00), Visitors = 170 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 05, 00, 00), Visitors = 175 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 06, 00, 00), Visitors = 145 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 07, 00, 00), Visitors = 180 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 08, 00, 00), Visitors = 190 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 09, 00, 00), Visitors = 185 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 10, 00, 00), Visitors = 200 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 11, 00, 00), Visitors = 207 }, // Missing data
+ new Model { DateTime = new DateTime(2024, 07, 01, 12, 00, 00), Visitors = 220 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 13, 00, 00), Visitors = 230 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 14, 00, 00), Visitors = 237 }, // Missing data
+ new Model { DateTime = new DateTime(2024, 07, 01, 15, 00, 00), Visitors = 250 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 16, 00, 00), Visitors = 260 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 17, 00, 00), Visitors = 270 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 18, 00, 00), Visitors = 277 }, // Missing data
+ new Model { DateTime = new DateTime(2024, 07, 01, 19, 00, 00), Visitors = 280 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 20, 00, 00), Visitors = 290 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 21, 00, 00), Visitors = 300 },
+ new Model { DateTime = new DateTime(2024, 07, 01, 22, 00, 00), Visitors = 307 }, // Missing data
+ new Model { DateTime = new DateTime(2024, 07, 01, 23, 00, 00), Visitors = 320 },
+ };
+ }
+ }
+}
diff --git a/ChartSample/ChartSample/ChartSample.csproj b/ChartSample/ChartSample/ChartSample.csproj
new file mode 100644
index 0000000..026f27b
--- /dev/null
+++ b/ChartSample/ChartSample/ChartSample.csproj
@@ -0,0 +1,72 @@
+
+
+
+ net9.0-android;net9.0-ios;net9.0-maccatalyst
+ $(TargetFrameworks);net9.0-windows10.0.19041.0
+
+
+
+
+
+
+ Exe
+ ChartSample
+ true
+ true
+ enable
+ enable
+
+
+ ChartSample
+
+
+ com.companyname.chartsample
+
+
+ 1.0
+ 1
+
+
+ None
+
+ 15.0
+ 15.0
+ 21.0
+ 10.0.17763.0
+ 10.0.17763.0
+ 6.5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ChartSample/ChartSample/MainPage.xaml b/ChartSample/ChartSample/MainPage.xaml
new file mode 100644
index 0000000..a514b08
--- /dev/null
+++ b/ChartSample/ChartSample/MainPage.xaml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ChartSample/ChartSample/MainPage.xaml.cs b/ChartSample/ChartSample/MainPage.xaml.cs
new file mode 100644
index 0000000..a2415da
--- /dev/null
+++ b/ChartSample/ChartSample/MainPage.xaml.cs
@@ -0,0 +1,109 @@
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+
+namespace ChartSample
+{
+ public partial class MainPage : ContentPage
+ {
+ public MainPage()
+ {
+ InitializeComponent();
+ }
+
+ protected override async void OnParentSet()
+ {
+ base.OnParentSet();
+ viewModel.IsBusy = true;
+ await Task.Delay(2000);
+ await viewModel.LoadCleanedDataAsync();
+ }
+ }
+
+ public class Model
+ {
+ public DateTime DateTime { get; set; }
+
+ public double Visitors { get; set; }
+ }
+
+ public class ViewModel : INotifyPropertyChanged
+ {
+ private ObservableCollection cleanData;
+ public ObservableCollection CleanedData
+ {
+ get { return cleanData; }
+ set
+ {
+ cleanData = value;
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("CleanedData"));
+ }
+ }
+ private bool isBusy;
+ public bool IsBusy
+ {
+ get { return isBusy; }
+ set
+ {
+ isBusy = value;
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsBusy"));
+ }
+ }
+ public ObservableCollection PaletteBrushes { get; set; }
+ public ObservableCollection RawData { get; set; }
+
+ public ViewModel()
+ {
+ IsBusy = false;
+
+ PaletteBrushes = new ObservableCollection()
+ {
+ new SolidColorBrush(Color.FromArgb("#ffa600")),
+ new SolidColorBrush(Color.FromArgb("#58508d")),
+ };
+
+ RawData = new ObservableCollection()
+ {
+ new Model{ DateTime = new DateTime(2024, 07, 01, 00, 00, 00), Visitors = 150 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 01, 00, 00), Visitors = 160 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 02, 00, 00), Visitors = 155 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 03, 00, 00), Visitors = double.NaN },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 04, 00, 00), Visitors = 170 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 05, 00, 00), Visitors = 175 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 06, 00, 00), Visitors = 145 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 07, 00, 00), Visitors = 180 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 08, 00, 00), Visitors = 190 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 09, 00, 00), Visitors = 185 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 10, 00, 00), Visitors = 200 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 11, 00, 00), Visitors = double.NaN },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 12, 00, 00), Visitors = 220 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 13, 00, 00), Visitors = 230 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 14, 00, 00), Visitors = double.NaN },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 15, 00, 00), Visitors = 250 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 16, 00, 00), Visitors = 260 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 17, 00, 00), Visitors = 270 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 18, 00, 00), Visitors = double.NaN },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 19, 00, 00), Visitors = 280 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 20, 00, 00), Visitors = 290 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 21, 00, 00), Visitors = 300 },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 22, 00, 00), Visitors = double.NaN },
+ new Model{ DateTime = new DateTime(2024, 07, 01, 23, 00, 00), Visitors = 320 },
+ };
+
+ CleanedData = new ObservableCollection();
+ }
+
+ internal async Task LoadCleanedDataAsync()
+ {
+ var service = new AzureOpenAIService();
+ CleanedData = await service.GetCleanedData(RawData);
+ IsBusy = false;
+ }
+
+ public event PropertyChangedEventHandler? PropertyChanged;
+
+ protected virtual void OnPropertyChanged(string propertyName)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+ }
+}
diff --git a/ChartSample/ChartSample/MauiProgram.cs b/ChartSample/ChartSample/MauiProgram.cs
new file mode 100644
index 0000000..47a6c38
--- /dev/null
+++ b/ChartSample/ChartSample/MauiProgram.cs
@@ -0,0 +1,27 @@
+using Microsoft.Extensions.Logging;
+using Syncfusion.Maui.Core.Hosting;
+
+namespace ChartSample
+{
+ public static class MauiProgram
+ {
+ public static MauiApp CreateMauiApp()
+ {
+ var builder = MauiApp.CreateBuilder();
+ builder
+ .UseMauiApp()
+ .ConfigureSyncfusionCore()
+ .ConfigureFonts(fonts =>
+ {
+ fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
+ fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
+ });
+
+#if DEBUG
+ builder.Logging.AddDebug();
+#endif
+
+ return builder.Build();
+ }
+ }
+}
diff --git a/ChartSample/ChartSample/Platforms/Android/AndroidManifest.xml b/ChartSample/ChartSample/Platforms/Android/AndroidManifest.xml
new file mode 100644
index 0000000..e9937ad
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/Android/AndroidManifest.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ChartSample/ChartSample/Platforms/Android/MainActivity.cs b/ChartSample/ChartSample/Platforms/Android/MainActivity.cs
new file mode 100644
index 0000000..77976a2
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/Android/MainActivity.cs
@@ -0,0 +1,11 @@
+using Android.App;
+using Android.Content.PM;
+using Android.OS;
+
+namespace ChartSample
+{
+ [Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
+ public class MainActivity : MauiAppCompatActivity
+ {
+ }
+}
diff --git a/ChartSample/ChartSample/Platforms/Android/MainApplication.cs b/ChartSample/ChartSample/Platforms/Android/MainApplication.cs
new file mode 100644
index 0000000..fdb562b
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/Android/MainApplication.cs
@@ -0,0 +1,16 @@
+using Android.App;
+using Android.Runtime;
+
+namespace ChartSample
+{
+ [Application]
+ public class MainApplication : MauiApplication
+ {
+ public MainApplication(IntPtr handle, JniHandleOwnership ownership)
+ : base(handle, ownership)
+ {
+ }
+
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+ }
+}
diff --git a/ChartSample/ChartSample/Platforms/Android/Resources/values/colors.xml b/ChartSample/ChartSample/Platforms/Android/Resources/values/colors.xml
new file mode 100644
index 0000000..c04d749
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/Android/Resources/values/colors.xml
@@ -0,0 +1,6 @@
+
+
+ #512BD4
+ #2B0B98
+ #2B0B98
+
\ No newline at end of file
diff --git a/ChartSample/ChartSample/Platforms/MacCatalyst/AppDelegate.cs b/ChartSample/ChartSample/Platforms/MacCatalyst/AppDelegate.cs
new file mode 100644
index 0000000..6edbd24
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/MacCatalyst/AppDelegate.cs
@@ -0,0 +1,10 @@
+using Foundation;
+
+namespace ChartSample
+{
+ [Register("AppDelegate")]
+ public class AppDelegate : MauiUIApplicationDelegate
+ {
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+ }
+}
diff --git a/ChartSample/ChartSample/Platforms/MacCatalyst/Entitlements.plist b/ChartSample/ChartSample/Platforms/MacCatalyst/Entitlements.plist
new file mode 100644
index 0000000..de4adc9
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/MacCatalyst/Entitlements.plist
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ com.apple.security.app-sandbox
+
+
+ com.apple.security.network.client
+
+
+
+
diff --git a/ChartSample/ChartSample/Platforms/MacCatalyst/Info.plist b/ChartSample/ChartSample/Platforms/MacCatalyst/Info.plist
new file mode 100644
index 0000000..7268977
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/MacCatalyst/Info.plist
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UIDeviceFamily
+
+ 2
+
+ UIRequiredDeviceCapabilities
+
+ arm64
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ XSAppIconAssets
+ Assets.xcassets/appicon.appiconset
+
+
diff --git a/ChartSample/ChartSample/Platforms/MacCatalyst/Program.cs b/ChartSample/ChartSample/Platforms/MacCatalyst/Program.cs
new file mode 100644
index 0000000..b337835
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/MacCatalyst/Program.cs
@@ -0,0 +1,16 @@
+using ObjCRuntime;
+using UIKit;
+
+namespace ChartSample
+{
+ public class Program
+ {
+ // This is the main entry point of the application.
+ static void Main(string[] args)
+ {
+ // if you want to use a different Application Delegate class from "AppDelegate"
+ // you can specify it here.
+ UIApplication.Main(args, null, typeof(AppDelegate));
+ }
+ }
+}
diff --git a/ChartSample/ChartSample/Platforms/Tizen/Main.cs b/ChartSample/ChartSample/Platforms/Tizen/Main.cs
new file mode 100644
index 0000000..c3170d3
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/Tizen/Main.cs
@@ -0,0 +1,17 @@
+using System;
+using Microsoft.Maui;
+using Microsoft.Maui.Hosting;
+
+namespace ChartSample
+{
+ internal class Program : MauiApplication
+ {
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+
+ static void Main(string[] args)
+ {
+ var app = new Program();
+ app.Run(args);
+ }
+ }
+}
diff --git a/ChartSample/ChartSample/Platforms/Tizen/tizen-manifest.xml b/ChartSample/ChartSample/Platforms/Tizen/tizen-manifest.xml
new file mode 100644
index 0000000..973139e
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/Tizen/tizen-manifest.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ maui-appicon-placeholder
+
+
+
+
+ http://tizen.org/privilege/internet
+
+
+
+
\ No newline at end of file
diff --git a/ChartSample/ChartSample/Platforms/Windows/App.xaml b/ChartSample/ChartSample/Platforms/Windows/App.xaml
new file mode 100644
index 0000000..b27f796
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/Windows/App.xaml
@@ -0,0 +1,8 @@
+
+
+
diff --git a/ChartSample/ChartSample/Platforms/Windows/App.xaml.cs b/ChartSample/ChartSample/Platforms/Windows/App.xaml.cs
new file mode 100644
index 0000000..910af53
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/Windows/App.xaml.cs
@@ -0,0 +1,25 @@
+using Microsoft.UI.Xaml;
+
+// To learn more about WinUI, the WinUI project structure,
+// and more about our project templates, see: http://aka.ms/winui-project-info.
+
+namespace ChartSample.WinUI
+{
+ ///
+ /// Provides application-specific behavior to supplement the default Application class.
+ ///
+ public partial class App : MauiWinUIApplication
+ {
+ ///
+ /// Initializes the singleton application object. This is the first line of authored code
+ /// executed, and as such is the logical equivalent of main() or WinMain().
+ ///
+ public App()
+ {
+ this.InitializeComponent();
+ }
+
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+ }
+
+}
diff --git a/ChartSample/ChartSample/Platforms/Windows/Package.appxmanifest b/ChartSample/ChartSample/Platforms/Windows/Package.appxmanifest
new file mode 100644
index 0000000..dbb89bc
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/Windows/Package.appxmanifest
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+ $placeholder$
+ User Name
+ $placeholder$.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ChartSample/ChartSample/Platforms/Windows/app.manifest b/ChartSample/ChartSample/Platforms/Windows/app.manifest
new file mode 100644
index 0000000..aa22b94
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/Windows/app.manifest
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+ true/PM
+ PerMonitorV2, PerMonitor
+
+
+
diff --git a/ChartSample/ChartSample/Platforms/iOS/AppDelegate.cs b/ChartSample/ChartSample/Platforms/iOS/AppDelegate.cs
new file mode 100644
index 0000000..6edbd24
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/iOS/AppDelegate.cs
@@ -0,0 +1,10 @@
+using Foundation;
+
+namespace ChartSample
+{
+ [Register("AppDelegate")]
+ public class AppDelegate : MauiUIApplicationDelegate
+ {
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+ }
+}
diff --git a/ChartSample/ChartSample/Platforms/iOS/Info.plist b/ChartSample/ChartSample/Platforms/iOS/Info.plist
new file mode 100644
index 0000000..0004a4f
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/iOS/Info.plist
@@ -0,0 +1,32 @@
+
+
+
+
+ LSRequiresIPhoneOS
+
+ UIDeviceFamily
+
+ 1
+ 2
+
+ UIRequiredDeviceCapabilities
+
+ arm64
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ XSAppIconAssets
+ Assets.xcassets/appicon.appiconset
+
+
diff --git a/ChartSample/ChartSample/Platforms/iOS/Program.cs b/ChartSample/ChartSample/Platforms/iOS/Program.cs
new file mode 100644
index 0000000..b337835
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/iOS/Program.cs
@@ -0,0 +1,16 @@
+using ObjCRuntime;
+using UIKit;
+
+namespace ChartSample
+{
+ public class Program
+ {
+ // This is the main entry point of the application.
+ static void Main(string[] args)
+ {
+ // if you want to use a different Application Delegate class from "AppDelegate"
+ // you can specify it here.
+ UIApplication.Main(args, null, typeof(AppDelegate));
+ }
+ }
+}
diff --git a/ChartSample/ChartSample/Platforms/iOS/Resources/PrivacyInfo.xcprivacy b/ChartSample/ChartSample/Platforms/iOS/Resources/PrivacyInfo.xcprivacy
new file mode 100644
index 0000000..24ab3b4
--- /dev/null
+++ b/ChartSample/ChartSample/Platforms/iOS/Resources/PrivacyInfo.xcprivacy
@@ -0,0 +1,51 @@
+
+
+
+
+
+ NSPrivacyAccessedAPITypes
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryFileTimestamp
+ NSPrivacyAccessedAPITypeReasons
+
+ C617.1
+
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategorySystemBootTime
+ NSPrivacyAccessedAPITypeReasons
+
+ 35F9.1
+
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryDiskSpace
+ NSPrivacyAccessedAPITypeReasons
+
+ E174.1
+
+
+
+
+
+
diff --git a/ChartSample/ChartSample/Properties/launchSettings.json b/ChartSample/ChartSample/Properties/launchSettings.json
new file mode 100644
index 0000000..4f85793
--- /dev/null
+++ b/ChartSample/ChartSample/Properties/launchSettings.json
@@ -0,0 +1,8 @@
+{
+ "profiles": {
+ "Windows Machine": {
+ "commandName": "Project",
+ "nativeDebugging": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/ChartSample/ChartSample/Resources/AppIcon/appicon.svg b/ChartSample/ChartSample/Resources/AppIcon/appicon.svg
new file mode 100644
index 0000000..9d63b65
--- /dev/null
+++ b/ChartSample/ChartSample/Resources/AppIcon/appicon.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/ChartSample/ChartSample/Resources/AppIcon/appiconfg.svg b/ChartSample/ChartSample/Resources/AppIcon/appiconfg.svg
new file mode 100644
index 0000000..21dfb25
--- /dev/null
+++ b/ChartSample/ChartSample/Resources/AppIcon/appiconfg.svg
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/ChartSample/ChartSample/Resources/Fonts/OpenSans-Regular.ttf b/ChartSample/ChartSample/Resources/Fonts/OpenSans-Regular.ttf
new file mode 100644
index 0000000..33b3e0d
Binary files /dev/null and b/ChartSample/ChartSample/Resources/Fonts/OpenSans-Regular.ttf differ
diff --git a/ChartSample/ChartSample/Resources/Fonts/OpenSans-Semibold.ttf b/ChartSample/ChartSample/Resources/Fonts/OpenSans-Semibold.ttf
new file mode 100644
index 0000000..a1f8571
Binary files /dev/null and b/ChartSample/ChartSample/Resources/Fonts/OpenSans-Semibold.ttf differ
diff --git a/ChartSample/ChartSample/Resources/Images/dotnet_bot.png b/ChartSample/ChartSample/Resources/Images/dotnet_bot.png
new file mode 100644
index 0000000..1d1b981
Binary files /dev/null and b/ChartSample/ChartSample/Resources/Images/dotnet_bot.png differ
diff --git a/ChartSample/ChartSample/Resources/Raw/AboutAssets.txt b/ChartSample/ChartSample/Resources/Raw/AboutAssets.txt
new file mode 100644
index 0000000..89dc758
--- /dev/null
+++ b/ChartSample/ChartSample/Resources/Raw/AboutAssets.txt
@@ -0,0 +1,15 @@
+Any raw assets you want to be deployed with your application can be placed in
+this directory (and child directories). Deployment of the asset to your application
+is automatically handled by the following `MauiAsset` Build Action within your `.csproj`.
+
+
+
+These files will be deployed with your package and will be accessible using Essentials:
+
+ async Task LoadMauiAsset()
+ {
+ using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt");
+ using var reader = new StreamReader(stream);
+
+ var contents = reader.ReadToEnd();
+ }
diff --git a/ChartSample/ChartSample/Resources/Splash/splash.svg b/ChartSample/ChartSample/Resources/Splash/splash.svg
new file mode 100644
index 0000000..21dfb25
--- /dev/null
+++ b/ChartSample/ChartSample/Resources/Splash/splash.svg
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/ChartSample/ChartSample/Resources/Styles/Colors.xaml b/ChartSample/ChartSample/Resources/Styles/Colors.xaml
new file mode 100644
index 0000000..30307a5
--- /dev/null
+++ b/ChartSample/ChartSample/Resources/Styles/Colors.xaml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+ #512BD4
+ #ac99ea
+ #242424
+ #DFD8F7
+ #9880e5
+ #2B0B98
+
+ White
+ Black
+ #D600AA
+ #190649
+ #1f1f1f
+
+ #E1E1E1
+ #C8C8C8
+ #ACACAC
+ #919191
+ #6E6E6E
+ #404040
+ #212121
+ #141414
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ChartSample/ChartSample/Resources/Styles/Styles.xaml b/ChartSample/ChartSample/Resources/Styles/Styles.xaml
new file mode 100644
index 0000000..86f574d
--- /dev/null
+++ b/ChartSample/ChartSample/Resources/Styles/Styles.xaml
@@ -0,0 +1,451 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index 6f82130..c7facc9 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,63 @@
# Visualize-Missing-Web-Traffic-Data-Using-AI-in-a-MAUI-Chart
+
This sample demonstrates how to integrate AI services and handle missing and abnormal data in the MAUI Cartesian Chart
+
+## Sample
+
+```xaml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+## Requirements to run the demo
+
+To run the demo, refer to [System Requirements for .NET MAUI](https://help.syncfusion.com/maui/system-requirements)
+
+## Troubleshooting:
+### Path too long exception
+
+If you are facing path too long exception when building this example project, close Visual Studio and rename the repository to short and build the project.
+
+## License
+
+Syncfusion has no liability for any damage or consequence that may arise from using or viewing the samples. The samples are for demonstrative purposes. If you choose to use or access the samples, you agree to not hold Syncfusion liable, in any form, for any damage related to use, for accessing, or viewing the samples. By accessing, viewing, or seeing the samples, you acknowledge and agree Syncfusion's samples will not allow you seek injunctive relief in any form for any claim related to the sample. If you do not agree to this, do not view, access, utilize, or otherwise do anything with Syncfusion's samples.