I-Synergy.Framework.UI.Maui 2025.11029.11433.38-preview

Prefix Reserved
This is a prerelease version of I-Synergy.Framework.UI.Maui.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package I-Synergy.Framework.UI.Maui --version 2025.11029.11433.38-preview
                    
NuGet\Install-Package I-Synergy.Framework.UI.Maui -Version 2025.11029.11433.38-preview
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="I-Synergy.Framework.UI.Maui" Version="2025.11029.11433.38-preview" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="I-Synergy.Framework.UI.Maui" Version="2025.11029.11433.38-preview" />
                    
Directory.Packages.props
<PackageReference Include="I-Synergy.Framework.UI.Maui" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add I-Synergy.Framework.UI.Maui --version 2025.11029.11433.38-preview
                    
#r "nuget: I-Synergy.Framework.UI.Maui, 2025.11029.11433.38-preview"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package I-Synergy.Framework.UI.Maui@2025.11029.11433.38-preview
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=I-Synergy.Framework.UI.Maui&version=2025.11029.11433.38-preview&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=I-Synergy.Framework.UI.Maui&version=2025.11029.11433.38-preview&prerelease
                    
Install as a Cake Tool

I-Synergy Framework UI MAUI

Cross-platform .NET MAUI UI framework for building modern applications on Windows, Android, iOS, and macOS. This package provides a complete MAUI implementation of the I-Synergy Framework UI services, controls, and patterns.

NuGet License .NET Platforms

Features

  • Cross-platform support for Android, iOS, Windows, and macOS
  • Dialog service with robust error handling and fallback mechanisms
  • Navigation service with page and modal navigation
  • Theme service with dynamic color palettes and light/dark mode
  • File service with platform-specific pickers
  • Clipboard service for text and data operations
  • Camera service for photo capture and gallery access
  • Custom controls (NavigationMenu, ImageBrowser, ErrorPresenter, TabbedView)
  • Value converters for all common data types
  • Behaviors (SelectAllOnFocusBehavior)
  • Platform extensions for Windows-specific features
  • Dynamic theme system with 40+ built-in color palettes
  • Token storage with secure platform-specific implementations

Installation

Install the package via NuGet:

dotnet add package I-Synergy.Framework.UI.Maui

Quick Start

1. Configure MauiProgram

Setup your MAUI application with I-Synergy Framework services:

using ISynergy.Framework.UI.Extensions;
using Microsoft.Extensions.Logging;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();

        builder
            .UseMauiApp<App>()
            .ConfigureLogging((appBuilder, logging) =>
            {
#if DEBUG
                logging.AddDebug();
                logging.SetMinimumLevel(LogLevel.Trace);
#endif
            })
            .ConfigureServices<App, AppContext, CommonServices, SettingsService, Resources>(
                appBuilder =>
                {
                    // Register additional services here
                    appBuilder.Services.AddScoped<IProductService, ProductService>();
                    appBuilder.Services.AddTransient<MainViewModel>();
                },
                Assembly.GetExecutingAssembly(),
                assemblyName => assemblyName.Name.StartsWith("MyApp")
            );

        return builder.Build();
    }
}

2. Create XAML Views with ViewModels

<?xml version="1.0" encoding="utf-8" ?>
<ui:View xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:ui="clr-namespace:ISynergy.Framework.UI.Controls;assembly=ISynergy.Framework.UI.Maui"
         xmlns:vm="clr-namespace:MyApp.ViewModels"
         x:Class="MyApp.Views.ProductListView"
         x:DataType="vm:ProductListViewModel"
         Title="{Binding Title}">

    <Grid RowDefinitions="Auto,*">
        
        <HorizontalStackLayout Grid.Row="0" Padding="10">
            <Button Text="Add Product"
                    Command="{Binding AddProductCommand}" />
            <Button Text="Refresh"
                    Command="{Binding RefreshCommand}" />
        </HorizontalStackLayout>

        
        <CollectionView Grid.Row="1"
                        ItemsSource="{Binding Products}"
                        SelectionMode="Single"
                        SelectedItem="{Binding SelectedProduct}">
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <Grid Padding="10">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>

                        <Label Text="{Binding Name}"
                               FontSize="16"
                               FontAttributes="Bold" />
                        <Label Grid.Column="1"
                               Text="{Binding Price, StringFormat='{0:C}'}"
                               VerticalOptions="Center" />
                    </Grid>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
    </Grid>
</ui:View>
using ISynergy.Framework.Mvvm.ViewModels;

public partial class ProductListView : View
{
    public ProductListView()
    {
        InitializeComponent();
    }
}

3. Use Dialog Service

The MAUI dialog service provides comprehensive error handling and fallback mechanisms:

using ISynergy.Framework.Mvvm.ViewModels;
using ISynergy.Framework.Mvvm.Commands;

public class ProductListViewModel : ViewModelNavigation<Product>
{
    private readonly IProductService _productService;

    public ObservableCollection<Product> Products { get; } = new();

    public AsyncRelayCommand AddProductCommand { get; }
    public AsyncRelayCommand RefreshCommand { get; }
    public AsyncRelayCommand<Product> DeleteProductCommand { get; }

    public ProductListViewModel(
        ICommonServices commonServices,
        IProductService productService,
        ILogger<ProductListViewModel> logger)
        : base(commonServices, logger)
    {
        _productService = productService;

        Title = "Products";

        AddProductCommand = new AsyncRelayCommand(AddProductAsync);
        RefreshCommand = new AsyncRelayCommand(RefreshAsync);
        DeleteProductCommand = new AsyncRelayCommand<Product>(DeleteProductAsync);
    }

    public override async Task InitializeAsync()
    {
        await base.InitializeAsync();
        await RefreshAsync();
        IsInitialized = true;
    }

    private async Task AddProductAsync()
    {
        await CommonServices.DialogService
            .ShowDialogAsync<ProductEditWindow, ProductEditViewModel, Product>();

        await RefreshAsync();
    }

    private async Task RefreshAsync()
    {
        try
        {
            CommonServices.BusyService.StartBusy("Loading products...");

            var products = await _productService.GetAllAsync();

            Products.Clear();
            foreach (var product in products)
            {
                Products.Add(product);
            }
        }
        catch (Exception ex)
        {
            await CommonServices.DialogService.ShowErrorAsync(ex, "Error");
        }
        finally
        {
            CommonServices.BusyService.StopBusy();
        }
    }

    private async Task DeleteProductAsync(Product product)
    {
        var result = await CommonServices.DialogService.ShowMessageAsync(
            $"Are you sure you want to delete {product.Name}?",
            "Confirm Delete",
            MessageBoxButtons.YesNo);

        if (result == MessageBoxResult.Yes)
        {
            try
            {
                await _productService.DeleteAsync(product.Id);
                Products.Remove(product);

                await CommonServices.DialogService.ShowInformationAsync(
                    "Product deleted successfully",
                    "Success");
            }
            catch (Exception ex)
            {
                await CommonServices.DialogService.ShowErrorAsync(ex, "Error");
            }
        }
    }
}

4. Navigation Service

Navigate between pages using the navigation service:

using ISynergy.Framework.Mvvm.Abstractions.Services;

public class MainViewModel : ViewModel
{
    private readonly INavigationService _navigationService;

    public AsyncRelayCommand NavigateToProductsCommand { get; }
    public AsyncRelayCommand NavigateToSettingsCommand { get; }

    public MainViewModel(
        ICommonServices commonServices,
        INavigationService navigationService,
        ILogger<MainViewModel> logger)
        : base(commonServices, logger)
    {
        _navigationService = navigationService;

        NavigateToProductsCommand = new AsyncRelayCommand(NavigateToProductsAsync);
        NavigateToSettingsCommand = new AsyncRelayCommand(NavigateToSettingsAsync);
    }

    private async Task NavigateToProductsAsync()
    {
        await _navigationService.NavigateAsync<ProductListViewModel>();
    }

    private async Task NavigateToSettingsAsync()
    {
        await _navigationService.NavigateAsync<SettingsViewModel>();
    }

    // Navigate with parameters
    private async Task NavigateToProductDetailAsync(Product product)
    {
        await _navigationService.NavigateAsync<ProductDetailViewModel>(product);
    }

    // Modal navigation
    private async Task ShowModalAsync()
    {
        await _navigationService.NavigateModalAsync<ModalViewModel>();
    }
}

5. Theme Service

Apply dynamic themes with custom accent colors:

using ISynergy.Framework.Mvvm.Abstractions.Services;
using ISynergy.Framework.Core.Enumerations;

// Theme service is automatically configured during startup
// It reads theme preferences from ISettingsService

// To show theme selection to users:
public class SettingsViewModel : ViewModel
{
    public AsyncRelayCommand ChangeThemeCommand { get; }

    public SettingsViewModel(
        ICommonServices commonServices,
        ILogger<SettingsViewModel> logger)
        : base(commonServices, logger)
    {
        ChangeThemeCommand = new AsyncRelayCommand(ChangeThemeAsync);
    }

    private async Task ChangeThemeAsync()
    {
        await CommonServices.DialogService
            .ShowDialogAsync<ThemeWindow, ThemeViewModel, ThemeStyle>();
    }
}

The theme service supports:

  • Light and dark modes
  • 40+ built-in accent colors
  • Dynamic theme switching
  • Platform-specific customization (Windows title bar, Android status bar)

6. Use Custom Controls

<ui:NavigationMenu ItemsSource="{Binding MenuItems}"
                   SelectedItem="{Binding SelectedMenuItem}"
                   IsExpanded="{Binding IsMenuExpanded}" />
ImageBrowser
<controls:ImageBrowser Images="{Binding ProductImages}"
                       SelectedImage="{Binding SelectedImage}"
                       AllowAdd="True"
                       AllowRemove="True" />
ErrorPresenter
<controls:ErrorPresenter Errors="{Binding ValidationErrors}"
                         IsVisible="{Binding HasErrors}" />
TabbedView
<ui:TabbedView>
    <ui:TabbedView.Items>
        <TabViewItem Title="General">
            <local:GeneralSettingsView />
        </TabViewItem>
        <TabViewItem Title="Security">
            <local:SecuritySettingsView />
        </TabViewItem>
    </ui:TabbedView.Items>
</ui:TabbedView>

Platform-Specific Features

Windows Integration

The MAUI framework provides Windows-specific extensions:

// In Platforms/Windows folder
using ISynergy.Framework.UI.Platforms.Windows.Extensions;

// Customize app window
var window = GetAppWindow();
window.SetIcon("Assets/icon.ico");
window.SetTitle("My Application");

// Apply theme colors to title bar
_themeService.ApplyTheme(); // Automatically updates title bar

Android Integration

Theme colors are automatically applied to Android status bar and action bar.

iOS/macOS Integration

Native navigation bar and status bar colors are synchronized with theme.

Value Converters

The MAUI framework includes 20+ value converters:


<Label IsVisible="{Binding IsActive, Converter={StaticResource BoolToVisibilityConverter}}" />
<Label Text="{Binding IsEnabled, Converter={StaticResource BoolToYesNoConverter}}" />


<Label Text="{Binding Amount, Converter={StaticResource DecimalToCurrencyConverter}}" />
<Label Text="{Binding Quantity, Converter={StaticResource IntegerToStringConverter}}" />


<Label Text="{Binding CreatedDate, Converter={StaticResource DateTimeToStringConverter}}" />
<Label Text="{Binding UpdatedDate, Converter={StaticResource DateTimeOffsetToLocalStringConverter}}" />


<Label IsVisible="{Binding Name, Converter={StaticResource StringNullOrEmptyToBoolConverter}}" />
<Label Text="{Binding Description, Converter={StaticResource StringToUpperConverter}}" />


<Label IsVisible="{Binding Items, Converter={StaticResource CollectionNullOrEmptyToBoolConverter}}" />
<Label Text="{Binding Items, Converter={StaticResource CollectionCountConverter}}" />


<BoxView Color="{Binding HexColor, Converter={StaticResource StringToColorConverter}}" />


<Picker ItemsSource="{Binding Source={StaticResource OrderStatusEnum}}"
        SelectedItem="{Binding Status, Converter={StaticResource EnumToStringConverter}}" />


<Label Text="{Binding Id, Converter={StaticResource GuidToStringConverter}}" />

File Operations

File Service

using ISynergy.Framework.Mvvm.Abstractions.Services;
using ISynergy.Framework.Core.Models.Results;

public class DocumentViewModel : ViewModel
{
    private readonly IFileService<FileResult> _fileService;

    public DocumentViewModel(
        ICommonServices commonServices,
        IFileService<FileResult> fileService,
        ILogger<DocumentViewModel> logger)
        : base(commonServices, logger)
    {
        _fileService = fileService;

        OpenFileCommand = new AsyncRelayCommand(OpenFileAsync);
        SaveFileCommand = new AsyncRelayCommand(SaveFileAsync);
    }

    public AsyncRelayCommand OpenFileCommand { get; }
    public AsyncRelayCommand SaveFileCommand { get; }

    private async Task OpenFileAsync()
    {
        var file = await _fileService.BrowseFileAsync(
            new[] { ".pdf", ".docx", ".txt" });

        if (file is not null)
        {
            // Read file content
            using var stream = await file.OpenReadAsync();
            // Process file...
        }
    }

    private async Task SaveFileAsync()
    {
        var file = await _fileService.SaveFileAsync(
            "document.pdf",
            "Documents",
            new[] { ".pdf" });

        if (file is not null)
        {
            // Write file content
            using var stream = await file.OpenWriteAsync();
            // Save content...
        }
    }
}

Camera Service

using ISynergy.Framework.Mvvm.Abstractions.Services;

public class ProfileViewModel : ViewModel
{
    private readonly ICameraService _cameraService;

    public AsyncRelayCommand TakePhotoCommand { get; }
    public AsyncRelayCommand PickPhotoCommand { get; }

    public ImageSource ProfileImage
    {
        get => GetValue<ImageSource>();
        set => SetValue(value);
    }

    public ProfileViewModel(
        ICommonServices commonServices,
        ICameraService cameraService,
        ILogger<ProfileViewModel> logger)
        : base(commonServices, logger)
    {
        _cameraService = cameraService;

        TakePhotoCommand = new AsyncRelayCommand(TakePhotoAsync);
        PickPhotoCommand = new AsyncRelayCommand(PickPhotoAsync);
    }

    private async Task TakePhotoAsync()
    {
        var photo = await _cameraService.TakePhotoAsync();

        if (photo is not null)
        {
            ProfileImage = ImageSource.FromStream(() => photo.OpenReadAsync().Result);
        }
    }

    private async Task PickPhotoAsync()
    {
        var photo = await _cameraService.PickPhotoAsync();

        if (photo is not null)
        {
            ProfileImage = ImageSource.FromStream(() => photo.OpenReadAsync().Result);
        }
    }
}

Behaviors

SelectAllOnFocusBehavior

<Entry Text="{Binding SearchText}">
    <Entry.Behaviors>
        <behaviors:SelectAllOnFocusBehavior />
    </Entry.Behaviors>
</Entry>

Configuration

Application Features

Configure optional application features:

{
  "ApplicationFeatures": {
    "EnableAnalytics": true,
    "EnableCrashReporting": true,
    "EnableNotifications": true
  },
  "ClientApplicationOptions": {
    "ApplicationName": "My Application",
    "BaseUrl": "https://api.myapp.com",
    "ApiVersion": "v1"
  }
}

Font Configuration

The framework automatically configures multiple fonts:

  • Segoe UI (Regular, Bold, SemiBold, Light, SemiLight)
  • Open Sans (Regular, Medium, SemiBold)
  • OpenDyslexic (Regular, Bold)
  • Segoe MDL2 Assets (Icon font)

Best Practices

Use NavigateAsync for standard navigation and NavigateModalAsync for dialogs and overlays.

Always dispose ViewModels and unsubscribe from events in the Cleanup method to prevent memory leaks.

The dialog service implements circuit breaker pattern with automatic fallback to console/debug output if UI is not available.

Dialog Service Usage

  • Always use dialog service instead of platform-specific alerts
  • Dialog service includes comprehensive error handling
  • Supports graceful degradation with multiple fallback mechanisms
  • Prevents concurrent dialogs with semaphore locking
  • Includes timeout and retry logic
  • Use NavigateAsync<TViewModel>() for page navigation
  • Use NavigateModalAsync<TViewModel>() for modals
  • Pass parameters through navigation methods
  • Call InitializeAsync() after navigation completes
  • Clean up resources in OnNavigatedFrom()

Theme Management

  • Theme is automatically applied on startup
  • Theme changes are persisted in settings
  • Platform-specific colors are synchronized
  • Support both light and dark modes
  • Use ThemeWindow for user selection

Performance Tips

  • Use CollectionView instead of ListView for better performance
  • Implement virtualization for large lists
  • Dispose images and streams properly
  • Use async/await for all I/O operations
  • Leverage compiled bindings with x:DataType

Dependencies

  • I-Synergy.Framework.UI - Base UI abstractions
  • I-Synergy.Framework.Mvvm - MVVM framework
  • Microsoft.Maui.Controls - MAUI controls
  • Microsoft.Extensions.DependencyInjection - DI container
  • Microsoft.Extensions.Configuration.Json - Configuration
  • SkiaSharp - 2D graphics

Platform Requirements

  • Android: API 21 (Lollipop) or higher
  • iOS: iOS 11.0 or higher
  • macOS: macOS 10.15 (Catalina) or higher
  • Windows: Windows 10.0.19041.0 or higher

Documentation

For more information about the I-Synergy Framework:

  • I-Synergy.Framework.UI - Base UI abstractions
  • I-Synergy.Framework.Core - Core framework
  • I-Synergy.Framework.Mvvm - MVVM framework
  • I-Synergy.Framework.UI.WPF - WPF implementation
  • I-Synergy.Framework.UI.WinUI - WinUI implementation
  • I-Synergy.Framework.UI.Blazor - Blazor implementation

Support

For issues, questions, or contributions, please visit the GitHub repository.

Product Compatible and additional computed target framework versions.
.NET net10.0-android36.0 is compatible.  net10.0-ios26.0 is compatible.  net10.0-maccatalyst26.0 is compatible.  net10.0-windows10.0.19041 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on I-Synergy.Framework.UI.Maui:

Package Downloads
I-Synergy.Framework.Synchronization.Maui

I-Synergy Synchronization Client Framework for .Net Maui

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2025.11102.11228.52-preview 0 11/2/2025
2025.11102.10309.42-preview 0 11/2/2025
2025.11029.11433.38-preview 109 10/29/2025
2025.11029.10201.38-preview 115 10/29/2025
2025.11027.11947.55-preview 119 10/27/2025
2025.11022.12207.12-preview 111 10/22/2025
2025.11019.12053.37-preview 121 10/19/2025
2025.11016.11750.24-preview 111 10/16/2025
2025.11015.10219.44-preview 117 10/15/2025
2025.11014.10245.12-preview 121 10/14/2025
2025.11012.10130.11-preview 61 10/12/2025
2025.11010.10052.52-preview 116 10/9/2025
2024.1339.1 239 12/4/2024
2024.1336.1 213 12/1/2024
2024.1332.1 223 11/27/2024
2024.1330.1 197 11/25/2024
2024.1328.1 230 11/23/2024
2024.1325.1 203 11/20/2024
2024.1323.1 181 11/18/2024
2024.1316.1 150 11/11/2024
2024.1307.1 166 11/2/2024
2024.1300.1 152 10/26/2024
2024.1294.1 173 10/20/2024
2024.1290.1 182 10/16/2024
2024.1283.1 182 10/8/2024
2024.1282.1 195 10/8/2024
2024.1278.1 199 10/4/2024
2024.1277.1 206 10/3/2024
2024.1275.2 181 10/1/2024
2024.1275.1 210 10/1/2024
2024.1274.1 207 9/30/2024
2024.1263.1 209 9/19/2024
2024.1261.1 203 9/17/2024
2024.1258.1 196 9/13/2024
2024.1257.1 214 9/13/2024
2024.1256.1 175 9/12/2024
2024.1254.1 219 9/10/2024
2024.1250.1 254 9/6/2024
2024.1249.1 214 9/5/2024
2024.1246.1 204 9/2/2024
2024.1245.1 225 9/1/2024
2024.1237.1 216 8/24/2024
2024.1235.0.1-preview 180 8/23/2024
2024.1230.1 246 8/18/2024
2024.1229.1 229 8/16/2024
2024.1228.1 244 8/15/2024
2024.1222.1 195 8/8/2024
2024.1221.1 156 8/7/2024
2024.1221.0.2-preview 145 8/8/2024
2024.1221.0.1-preview 170 8/8/2024
2024.1220.1 154 8/7/2024
2024.1219.0.2-preview 124 8/6/2024
2024.1219.0.1-preview 111 8/6/2024
2024.1217.0.2-preview 118 8/4/2024
2024.1217.0.1-preview 127 8/4/2024
2024.1216.0.2-preview 102 8/3/2024
2024.1216.0.1-preview 116 8/3/2024
2024.1208.0.1-preview 163 7/26/2024
2024.1207.0.7-preview 125 7/25/2024
2024.1207.0.5-preview 133 7/25/2024
2024.1166.1 212 6/14/2024
2024.1165.1 177 6/13/2024
2024.1164.1 192 6/12/2024
2024.1162.1 191 6/10/2024
2024.1158.1 217 6/6/2024
2024.1156.1 194 6/4/2024
2024.1152.1 221 5/31/2024
2024.1151.1 210 5/29/2024
2024.1150.2 183 5/29/2024
2024.1150.1 178 5/29/2024
2024.1149.1 178 5/28/2024
2024.1147.1 176 5/26/2024
2024.1146.2 177 5/25/2024
2024.1146.1 209 5/25/2024
2024.1145.1 208 5/24/2024
2024.1135.2 203 5/14/2024
2024.1135.1 185 5/14/2024
2024.1134.1 193 5/13/2024
2024.1130.1 188 5/9/2024
2024.1123.1 160 5/2/2024
2024.1121.1 175 4/30/2024
2024.1114.1 224 4/22/2024
2024.1113.0.5-preview 155 4/22/2024
2024.1113.0.3-preview 147 4/22/2024
2024.1113.0.2-preview 162 4/22/2024
2024.1113.0.1-preview 139 4/22/2024
2024.1108.0.1-preview 166 4/17/2024
2024.1107.0.1-preview 140 4/16/2024
2024.1094.2 200 4/3/2024
2024.1094.1 162 4/3/2024
2024.1092.1 181 4/1/2024
2024.1088.1 216 3/28/2024
2024.1085.1 193 3/25/2024
2024.1080.2 205 3/20/2024
2024.1080.1 184 3/20/2024
2024.1078.1 205 3/18/2024
2024.1077.1 184 3/17/2024
2024.1073.1 208 3/13/2024
2024.1070.1 228 3/10/2024
2024.1069.1 218 3/9/2024
2024.1068.1 214 3/8/2024
2024.1066.2 204 3/6/2024
2024.1066.1 184 3/6/2024
2024.1065.1 211 3/5/2024
2024.1065.0.1-preview 169 3/5/2024
2024.1063.2 197 3/3/2024
2024.1063.1 210 3/3/2024
2024.1062.1 192 3/2/2024
2024.1061.2 196 3/1/2024
2024.1061.1 203 3/1/2024
2024.1060.2 209 2/29/2024
2024.1060.1 212 2/29/2024
2024.1060.0.5-preview 160 2/29/2024
2024.1060.0.3-preview 151 2/29/2024
2024.1059.0.1-preview 154 2/28/2024
2024.1058.1 200 2/27/2024
2024.1056.1 179 2/25/2024
2024.1055.1 210 2/24/2024
2024.1052.1 202 2/21/2024
2024.1050.2 228 2/20/2024
2024.1050.1 201 2/19/2024
2024.1049.1 215 2/18/2024
2024.1048.1 173 2/17/2024
2024.1047.1 172 2/16/2024
2024.1035.1 215 2/4/2024
2024.1034.2 196 2/3/2024
2024.1029.1 192 1/29/2024
2024.1023.1 197 1/23/2024
2024.1022.1 204 1/22/2024
2024.1020.1 172 1/20/2024
2024.1019.1 177 1/19/2024
2024.1017.1 183 1/17/2024
2024.1012.1 222 1/12/2024
2024.1010.1 205 1/10/2024
2024.1008.1 216 1/8/2024
2024.1007.1 245 1/7/2024
2024.1005.1 197 1/5/2024
2024.1004.1 228 1/4/2024
2023.1365.1 203 12/31/2023
2023.1362.1 208 12/28/2023
2023.1361.1 164 12/27/2023
2023.1359.1 216 12/25/2023
2023.1358.1 186 12/24/2023
2023.1357.1 198 12/23/2023
2023.1342.1 239 12/8/2023
2023.1336.1 176 12/2/2023
2023.1332.1 177 11/28/2023
2023.1330.1 195 11/26/2023
2023.1325.1 201 11/21/2023
2023.1323.1 163 11/19/2023
2023.1320.1 189 11/17/2023
2023.1318.1 155 11/15/2023
2023.1317.1 126 11/13/2023
2023.1307.1 139 11/3/2023
2023.1305.1 144 11/1/2023
2023.1304.1 139 10/31/2023
2023.1294.1 131 10/21/2023
2023.1290.1 129 10/16/2023
2023.1289.1 164 10/16/2023
2023.1284.1 167 10/11/2023
2023.1276.1 157 10/3/2023
2023.1275.1 169 10/2/2023
2023.1272.1 154 9/29/2023
2023.1269.1 111 9/26/2023
2023.1242.1 217 8/30/2023
2023.1231.1 245 8/19/2023
2023.1229.1 210 8/17/2023
2023.1228.1 208 8/16/2023
2023.1227.1 215 8/15/2023
2023.1224.2 219 8/12/2023
2023.1224.1 221 8/12/2023
2023.1213.2 240 8/1/2023
2023.1213.1 267 8/1/2023
2023.1209.1 240 7/27/2023
2023.1201.1 252 7/20/2023
2023.1197.1 243 7/16/2023
2023.1178.1 214 6/27/2023
2023.1175.1 233 6/24/2023
2023.1174.1 216 6/22/2023
2023.1169.1 234 6/18/2023
2023.1165.1 218 6/14/2023
2023.1161.1 244 6/11/2023
2023.1159.1 230 6/7/2023
2023.1157.1 265 6/6/2023
2023.1146.1 246 5/27/2023
2023.1139.1 244 5/19/2023
2023.1137.1 249 5/17/2023
2023.1136.1 272 5/16/2023
2023.1118.1 277 4/28/2023
2023.1111.1 283 4/21/2023
2023.1110.1 264 4/20/2023
2023.1105.1 267 4/15/2023
2023.1103.1 283 4/13/2023
2023.1102.1 315 4/12/2023
2023.1101.1 320 4/11/2023
2023.1090.1 294 3/31/2023
2023.1089.1 303 3/30/2023
2023.1088.1 288 3/29/2023
2023.1082.1 332 3/23/2023
2023.1078.1 328 3/19/2023
2023.1075.1 330 3/16/2023
2023.1070.1 346 3/11/2023
2023.1069.1 311 3/10/2023
2023.1064.1 355 3/5/2023
2023.1060.1 337 3/1/2023
2023.1057.1 366 2/26/2023
2023.1046.1 337 2/15/2023
2023.1043.2 365 2/12/2023
2023.1043.1 357 2/12/2023
2023.1042.1 370 2/11/2023
2023.1041.1 364 2/10/2023
2023.1039.1 382 2/8/2023
2023.1036.1 365 2/5/2023
2023.1035.1 396 2/4/2023
2023.1033.1 391 2/2/2023
2023.1030.1 405 1/30/2023
2023.1028.1 397 1/28/2023
2023.1026.1 397 1/26/2023
2023.1025.1 413 1/25/2023
2023.1024.1 409 1/24/2023
2023.1023.1 385 1/23/2023