Skip to content

PopoverService: New design#6953

Merged
Mr-Technician merged 14 commits intoMudBlazor:devfrom
ScarletKuro:popoverfix
Jun 7, 2023
Merged

PopoverService: New design#6953
Mr-Technician merged 14 commits intoMudBlazor:devfrom
ScarletKuro:popoverfix

Conversation

@ScarletKuro
Copy link
Member

@ScarletKuro ScarletKuro commented Jun 1, 2023

Description

Fixes #6498

Now long read:

  1. I have refactored the current MudPopoverService implementation and its related components, moving them to the "Service" folder. Additionally, I have split the classes into separate files. This separation allows us to maintain a cleaner codebase by avoiding the mixing of services and components, as they belong to different folders. Despite these changes, the namespace remains unchanged to ensure compatibility.
    By splitting the classes into separate files, we also gain the advantage of faster code navigation. It is generally recommended to split classes into separate files, except in cases where classes, interfaces, enums, etc., are nested within another class. This approach enhances code organization and makes it easier to locate and work with specific components.
  2. I have introduced the ObserverManager as a replacement for the C# event mechanism. This new class will play a significant role in v7, as I plan to leverage it extensively to handle events in an observer manner. This approach will allow us to eliminate the usage of async void in many areas.
    The ObserverManager provides a flexible and easily extensible solution. For instance, if we want to incorporate a timer that automatically unsubscribes inactive subscriptions, it can be implemented with just a few lines of code. While I haven't implemented this feature in the current codebase to avoid unnecessary complexity, it highlights the immense potential of the ObserverManager class.
    It should be used only internally.
  3. I have implemented a new feature called BatchPeriodicQueue which serves an important purpose in the new PopoverService implementation. This queue allows us to add items to the queue and then receive periodic notifications at a specified time interval, containing all the items that were queued.
    While I'm not certain if this specific functionality will be applicable in other parts of the codebase, it plays a crucial role within the context of the PopoverService. By utilizing the BatchPeriodicQueue, we can efficiently manage and process queued items in batches, improving performance.
    It should be used only internally.
  4. The current design of the MudPopoverService presents several challenges that can be deceptive at first glance. While the initial registration of a RenderFragment may seem simple, it quickly becomes complex due to the subsequent handling of the MudPopoverHandler, including the need to store it in the Popover component. Knowing when and where to call methods such as Initialize, SetComponentBaseParameters, and UpdateFragment adds further confusion. Additionally, both the Popover component and the MudPopoverService utilize the MudPopoverHandler, making it unclear who bears which responsibilities. It is also crucial not to overlook the usage of InitializeIfNeeded on the MudPopoverService, adding another layer of complexity. The dependency on MudComponentBase for SetComponentBaseParameters further complicates matters.
    However, with the introduction of the new PopoverService, all these problems are eliminated. This revamped service automatically determines when initialization is required and assumes all necessary responsibilities. It offers three main methods: CreatePopoverAsync, UpdatePopoverAsync, and DestroyPopoverAsync, which provide a straightforward approach to managing popovers. The improved API naming also contributes to better clarity, as the old naming conventions proved confusing.
    Furthermore, the PopoverService incorporates an interface called IPopover and a base class called PopoverBase to facilitate easy implementation of custom Popover components. This approach opens up possibilities for extending the interface and base class to incorporate new features, such as the proposed rendering queue mentioned in the discussion linked here: GitHub Issue #6498. In contrast, the previous approach would likely have required an API-breaking change.
    Overall, the new PopoverService provides a significantly improved alternative to the previous implementation. By leveraging interfaces and base classes, developers can create their own Popover components and seamlessly integrate them with the PopoverService. This updated design not only resolves existing issues but also allows for easy future enhancements without compromising compatibility.
IPopoverService API
/// <summary>
/// Represents a service for managing popovers.
/// </summary>
public interface IPopoverService : IAsyncDisposable
{
  /// <summary>
  /// Gets the current popover options.
  /// </summary>
  PopoverOptions PopoverOptions { get; }

  /// <summary>
  /// Gets the collection of active popovers that were created via <see cref="CreatePopoverAsync"/>. Disappears from collection after calling <see cref="DestroyPopoverAsync"/>.
  /// </summary>
  IEnumerable<IMudPopoverState> ActivePopovers { get; }

  /// <summary>
  /// Gets a value indicating whether the <see cref="IPopoverService"/> is initialized.
  /// </summary>
  /// <value>
  /// <c>true</c> if the <see cref="IPopoverService"/> is initialized; otherwise, <c>false</c>.
  /// </value>
  bool IsInitialized { get; }

  /// <summary>
  /// Subscribes an observer to receive popover update notifications.
  /// </summary>
  /// <param name="observer">The observer to subscribe.</param>
  void SubscribeOnPopoverUpdate(IPopoverObserver observer);

  /// <summary>
  /// Unsubscribes an observer from receiving popover update notifications.
  /// </summary>
  /// <param name="observer">The observer to unsubscribe.</param>
  void UnsubscribeOnSubscribeOnPopoverUpdate(IPopoverObserver observer);

  /// <summary>
  /// Creates a popover.
  /// </summary>
  /// <param name="mudPopover">The popover to create.</param>
  Task CreatePopoverAsync(IPopover mudPopover);

  /// <summary>
  /// Updates an existing popover.
  /// </summary>
  /// <param name="mudPopover">The popover to update.</param>
  /// <returns><c>true</c> if the update was successful; otherwise, <c>false</c>.</returns>
  Task<bool> UpdatePopoverAsync(IPopover mudPopover);

  /// <summary>
  /// Destroys a popover.
  /// </summary>
  /// <param name="mudPopover">The popover to destroy.</param>
  /// <returns>The task result indicates whether the popover was successfully destroyed.</returns>
  Task<bool> DestroyPopoverAsync(IPopover mudPopover);

  /// <summary>
  /// Counts the number of popover providers.
  /// </summary>
  /// <returns>The task result contains the count of popover providers.</returns>
  ValueTask<int> CountProvidersAsync();
}
IPopoverObserver API
/// <summary>
/// Represents an observer for popover updates.
/// </summary>
public interface IPopoverObserver
{
    /// <summary>
    /// Gets the unique identifier of the observer.
    /// </summary>
    public Guid Id { get; }

    /// <summary>
    /// Notifies the observer of a popover collection update in <see cref="IPopoverService.ActivePopovers"/>.
    /// This notification is triggered only when <see cref="IPopoverService.CreatePopoverAsync"/> or <see cref="IPopoverService.DestroyPopover"/> is called.
    /// </summary>
    /// <param name="state">The updated state of the popover.</param>
    /// <remarks>
    /// Please note that this notification will not be triggered when <see cref="IPopoverService.UpdatePopover"/> is called.
    /// </remarks>
    public Task PopoverCollectionUpdatedNotification(IMudPopoverState state);
}
IPopover API
/// <summary>
/// Represents a popover component.
/// </summary>
public interface IPopover
{
    /// <summary>
    /// Gets the unique identifier of the popover.
    /// </summary>
    Guid Id { get; }

    /// <summary>
    /// Gets the CSS class of the popover.
    /// </summary>
    public string PopoverClass { get; }

    /// <summary>
    /// Gets the inline styles of the popover.
    /// </summary>
    public string PopoverStyles { get; }

    /// <summary>
    /// If true, the popover is visible.
    /// </summary>
    bool Open { get; set; }

    /// <summary>
    /// Use Tag to attach any user data object to the component for your convenience.
    /// </summary>
    object? Tag { get; set; }

    /// <summary>
    /// UserAttributes carries all attributes you add to the component that don't match any of its parameters.
    /// They will be splatted onto the underlying HTML tag.
    /// </summary>
    Dictionary<string, object> UserAttributes { get; set; }

    /// <summary>
    /// Child content of the component.
    /// </summary>
    RenderFragment? ChildContent { get; set; }
}
BatchPeriodicQueue API
/// <summary>
/// Represents a batch periodic queue for managing items of type <typeparamref name="T"/>.
/// </summary>
/// <typeparam name="T">The type of items in the queue.</typeparam>
internal class BatchPeriodicQueue<T> : IAsyncDisposable
{
    /// <summary>
    /// Initializes a new instance of the <see cref="BatchPeriodicQueue{T}"/> class with the specified batch timer handler and period.
    /// </summary>
    /// <param name="handler">The batch timer handler.</param>
    /// <param name="period">The time period for triggering batch execution.</param>
    /// <param name="tickOnDispose">Specifies whether to trigger a guaranteed <see cref="IBatchTimerHandler{T}.OnBatchTimerElapsedAsync"/> when calling <see cref="DisposeAsync"/>.</param>
    public BatchPeriodicQueue(IBatchTimerHandler<T> handler, TimeSpan period, bool tickOnDispose = true);

    /// <summary>
    /// Enqueues an item to the batch queue.
    /// </summary>
    /// <param name="item">The item to enqueue.</param>
    public void QueueItem(T item);

    /// <summary>
    /// Gets the count of items in the batch queue.
    /// </summary>
    public int Count { get; }

    /// <summary>
    /// Starts the batch processing asynchronously.
    /// </summary>
    /// <param name="cancellationToken">Indicates that the start process has been aborted.</param>
    /// <returns>A <see cref="Task"/> that represents the asynchronous Start operation.</returns>
    public Task StartBatchAsync(CancellationToken cancellationToken = default);

    /// <summary>
    /// Stops the batch processing asynchronously.
    /// </summary>
    /// <param name="cancellationToken">Indicates that the shutdown process should no longer be graceful.</param>
    /// <returns>A <see cref="Task"/> that represents the asynchronous Stop operation.</returns>
    public Task StopBatchAsync(CancellationToken cancellationToken);

    /// <inheritdoc/>
    public ValueTask DisposeAsync();
}
IBatchTimerHandler API
/// <summary>
/// Represents a handler for batch timer events in conjunction with <see cref="BatchPeriodicQueue{T}"/>.
/// </summary>
/// <typeparam name="TItems">The type of items handled by the batch timer.</typeparam>
internal interface IBatchTimerHandler<in TItems>
{
    /// <summary>
    /// Handles the batch timer elapsed event asynchronously.
    /// </summary>
    /// <param name="items">The collection of items to handle.</param>
    /// <param name="cancellationToken">The cancellation token to cancel the operation.</param>
    /// <returns>A task representing the asynchronous operation.</returns>
    Task OnBatchTimerElapsedAsync(IReadOnlyCollection<TItems> items, CancellationToken cancellationToken = default);
}
ObserverManager API
/// <summary>
/// Maintains a collection of observers.
/// </summary>
/// <typeparam name="TIdentity">The address type, used to identify observers.</typeparam>
/// <typeparam name="TObserver">The observer type.</typeparam>
internal class ObserverManager<TIdentity, TObserver> : IEnumerable<TObserver> where TIdentity : notnull
{
    /// <summary>
    /// Initializes a new instance of the <see cref="ObserverManager{TIdentity,TObserver}"/> class. 
    /// </summary>
    /// <param name="log">The log.</param>
    public ObserverManager(ILogger log);

    /// <summary>
    /// Gets the number of observers.
    /// </summary>
    public int Count { get; }

    /// <summary>
    /// Gets a copy of the observers.
    /// </summary>
    public IDictionary<TIdentity, TObserver> Observers { get; }

    /// <summary>
    /// Removes all observers.
    /// </summary>
    public void Clear();

    /// <summary>
    /// Ensures that the provided <paramref name="observer"/> is subscribed, renewing its subscription.
    /// </summary>
    /// <param name="id">The observer's identity.</param>
    /// <param name="observer">The observer.</param>
    public void Subscribe(TIdentity id, TObserver observer);

    /// <summary>
    /// Ensures that the provided <paramref name="id"/> is unsubscribed.
    /// </summary>
    /// <param name="id">The observer.</param>
    public void Unsubscribe(TIdentity id);

    /// <summary>
    /// Notifies all observers.
    /// </summary>
    /// <param name="notification">The notification delegate to call on each observer.</param>
    /// <param name="predicate">The predicate used to select observers to notify.</param>
    /// <returns>A <see cref="Task"/> representing the work performed.</returns>
    public Task NotifyAsync(Func<TObserver, Task> notification, Func<TObserver, bool>? predicate = null);

    /// <summary>
    /// Notifies all observers which match the provided <paramref name="predicate"/>.
    /// </summary>
    /// <param name="notification">The notification delegate to call on each observer.</param>
    /// <param name="predicate">The predicate used to select observers to notify.</param>
    public void Notify(Action<TObserver> notification, Func<TObserver, bool>? predicate = null);

    /// <summary>
    /// Returns an enumerator that iterates through the collection.
    /// </summary>
    /// <returns>A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection.</returns>
    public IEnumerator<TObserver> GetEnumerator();

    /// <summary>
    /// Returns an enumerator that iterates through a collection.
    /// </summary>
    /// <returns>An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.</returns>
    IEnumerator IEnumerable.GetEnumerator();

    /// <summary>
    /// An observer entry.
    /// </summary>
    private class ObserverEntry
    {
        /// <summary>
        /// Gets or sets the observer.
        /// </summary>
        public TObserver Observer { get; set; }

        public ObserverEntry(TObserver observer);
    }
}

How Has This Been Tested?

Unit test, new unit tests, visual testing

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)

Checklist:

  • The PR is submitted to the correct branch (dev).
  • My code follows the code style of this project.
  • I've added relevant tests.

@github-actions github-actions bot added breaking change This change will require consumer code updates enhancement Adds a new feature or enhances existing functionality (not fixing a defect) in the main library labels Jun 1, 2023
@henon henon self-requested a review June 1, 2023 15:37
@henon henon removed the breaking change This change will require consumer code updates label Jun 1, 2023
@codecov
Copy link

codecov bot commented Jun 1, 2023

Codecov Report

Patch coverage: 96.60% and project coverage change: +0.10 🎉

Comparison is base (6869afb) 90.89% compared to head (5f3a6a3) 90.99%.

Additional details and impacted files
@@            Coverage Diff             @@
##              dev    #6953      +/-   ##
==========================================
+ Coverage   90.89%   90.99%   +0.10%     
==========================================
  Files         402      411       +9     
  Lines       14536    14750     +214     
==========================================
+ Hits        13212    13422     +210     
- Misses       1324     1328       +4     
Impacted Files Coverage Δ
...rc/MudBlazor/Services/Popover/MudPopoverService.cs 80.00% <80.00%> (ø)
src/MudBlazor/Services/Popover/PopoverService.cs 95.95% <95.95%> (ø)
...c/MudBlazor/Components/Popover/MudPopover.razor.cs 76.00% <100.00%> (-9.00%) ⬇️
src/MudBlazor/Components/Popover/MudPopoverBase.cs 100.00% <100.00%> (ø)
...Blazor/Components/Popover/MudPopoverProvider.razor 100.00% <100.00%> (ø)
...zor/Components/Popover/MudPopoverProvider.razor.cs 93.54% <100.00%> (-6.46%) ⬇️
src/MudBlazor/Interop/PopoverJsInterop.cs 100.00% <100.00%> (ø)
...rc/MudBlazor/Services/Popover/MudPopoverHandler.cs 100.00% <100.00%> (ø)
src/MudBlazor/Services/Popover/MudPopoverHolder.cs 100.00% <100.00%> (ø)
src/MudBlazor/Services/Popover/PopoverOptions.cs 100.00% <100.00%> (ø)
... and 3 more

... and 6 files with indirect coverage changes

☔ View full report in Codecov by Sentry.
📢 Do you have feedback about the report comment? Let us know in this issue.

@ScarletKuro
Copy link
Member Author

I have refactored the code by splitting the BatchPeriodicQueue into two separate classes: BackgroundTaskBase and BatchPeriodicQueue. The reason behind this separation is that the BatchPeriodicQueue class serves a specific purpose and may not be applicable or useful throughout the entire codebase. On the other hand, BackgroundTaskBase shares similarities with the BackgroundService in ASP.NET Core but is decoupled from the IHostedService lifecycle. This separation allows for potential future usage of BackgroundTaskBase to handle various background jobs independently.

@ScarletKuro
Copy link
Member Author

ScarletKuro commented Jun 1, 2023

I also tested CodeBeam.MudBlazor.Extensions against the new changes. I don't know if the author has maintained the test infrastructure up to date, but the existing tests have passed successfully. It appears that many of these tests rely on the functionality provided by MudPopoverProvider. These positive test results indicate that, at least for now, the changes have not introduced any regressions or issues

@ScarletKuro ScarletKuro marked this pull request as ready for review June 1, 2023 23:48
@ScarletKuro ScarletKuro requested a review from Mr-Technician June 1, 2023 23:48
@henon
Copy link
Contributor

henon commented Jun 2, 2023

I haven't yet had time to look over everything. Just one note about the BatchPeriodicQueue. It looks to me like a highly specialized queue which I am not sure will ever be needed anywhere else again. It is a little bit like if I need to hammer in some nails and I also need to drive some screws at the same time then I first make a specialized screwdriver-hammer and use that instead of just using a screwdriver and a hammer to do the job. Just my 2 cents, it is not a change request, just a comment about the design choice ;)

@henon
Copy link
Contributor

henon commented Jun 2, 2023

  /// <summary>
  /// Subscribes an observer to receive popover update notifications.
  /// </summary>
  /// <param name="observer">The observer to subscribe.</param>
  void SubscribeOnPopoverUpdate(IPopoverObserver observer);

  /// <summary>
  /// Unsubscribes an observer from receiving popover update notifications.
  /// </summary>
  /// <param name="observer">The observer to unsubscribe.</param>
  void UnsubscribeOnSubscribeOnPopoverUpdate(IPopoverObserver observer);

These two I suggest to simply name Subscribe and Unsubscribe. The additional information that the longer names try to convey are best described in the doc string IMO

Copy link
Contributor

@henon henon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the new service very much. It is so much easier to understand. Take my nit-picking here and there as constructive suggestions, nothing more.

@ScarletKuro
Copy link
Member Author

I haven't yet had time to look over everything. Just one note about the BatchPeriodicQueue. It looks to me like a highly specialized queue which I am not sure will ever be needed anywhere else again. It is a little bit like if I need to hammer in some nails and I also need to drive some screws at the same time then I first make a specialized screwdriver-hammer and use that instead of just using a screwdriver and a hammer to do the job. Just my 2 cents, it is not a change request, just a comment about the design choice ;)

Have you read this comment? This is why I split it into two implementations #6953 (comment)
Now BatchPeriodicQueue implements only few lines basically implementing: this
Or do you have other suggestions? I wouldn't really want to move the code to PopoverService as it will be hardred to test.

@ScarletKuro
Copy link
Member Author

  /// <summary>
  /// Subscribes an observer to receive popover update notifications.
  /// </summary>
  /// <param name="observer">The observer to subscribe.</param>
  void SubscribeOnPopoverUpdate(IPopoverObserver observer);

  /// <summary>
  /// Unsubscribes an observer from receiving popover update notifications.
  /// </summary>
  /// <param name="observer">The observer to unsubscribe.</param>
  void UnsubscribeOnSubscribeOnPopoverUpdate(IPopoverObserver observer);

These two I suggest to simply name Subscribe and Unsubscribe. The additional information that the longer names try to convey are best described in the doc string IMO

Sure.

@henon
Copy link
Contributor

henon commented Jun 2, 2023

I haven't yet had time to look over everything. Just one note about the BatchPeriodicQueue. It looks to me like a highly specialized queue which I am not sure will ever be needed anywhere else again. It is a little bit like if I need to hammer in some nails and I also need to drive some screws at the same time then I first make a specialized screwdriver-hammer and use that instead of just using a screwdriver and a hammer to do the job. Just my 2 cents, it is not a change request, just a comment about the design choice ;)

Have you read this comment? This is why I split it into two implementations #6953 (comment) Now BatchPeriodicQueue implements only few lines basically implementing: this Or do you have other suggestions? I wouldn't really want to move the code to PopoverService as it will be hardred to test.

Yeah, better testability is of course a good justification.

@ScarletKuro
Copy link
Member Author

I think I have addressed all suggestions, please check.

@ScarletKuro
Copy link
Member Author

Oh forgot to Obsolete old service / classes, will do later.

@ScarletKuro
Copy link
Member Author

Done.

@ScarletKuro ScarletKuro requested a review from henon June 2, 2023 13:37
@Mr-Technician Mr-Technician merged commit 54c6a11 into MudBlazor:dev Jun 7, 2023
@henon
Copy link
Contributor

henon commented Jun 7, 2023

Many thanks @ScarletKuro, it is plain that this PR took quite a lot of effort!

@ScarletKuro ScarletKuro deleted the popoverfix branch June 7, 2023 11:07
@ScarletKuro ScarletKuro restored the popoverfix branch June 7, 2023 11:07
mblichowski added a commit to mblichowski/MudBlazor-extended that referenced this pull request Aug 18, 2023
* MudAutocomplete: Fix highlight of selected item when Strict is set to false (MudBlazor#6489)

* MudOverlay: Add nullable annotation. (MudBlazor#6665)

* MudMainContent: Add nullable annotation. (MudBlazor#6664)

* MudMainContent: Add nullable annotation.

* inconsistent test fail

* MudOverlay: CA2012: Use ValueTasks correctly (MudBlazor#6670)

* MudTabs: Fix XSS in Text (MudBlazor#5478) (MudBlazor#6680)

Co-authored-by: Sean O'Donnell <Sean.O'[email protected]>

* MudText: Add nullable annotation. (MudBlazor#6677)

* MudVirtualize: Add nullable annotation. (MudBlazor#6678)

* MudSimpleTable: Add nullable annotation. (MudBlazor#6679)

* MudBooleanInput: Add nullable annotation. (MudBlazor#6681)

* MudBooleanInput: Add nullable annotation.

* Update bug_report.yml (MudBlazor#6696)

* Form components: Add ResetAsync / ResetValueAsync (MudBlazor#6693)

* MudSwitch: LabelPosition.Start uses row-reverse instead of RTL (MudBlazor#6638)

* MudSwitch: Fixes a bug with LabelPosition.Start and character that exists in RTL alphabet
---------

Co-authored-by: Yan Gauthier <[email protected]>

* Docs: Fix typo in toggle example (MudBlazor#6709)

* MudAutocomplete: Fix Race Condition MudBlazor#6475 (MudBlazor#6701)

* Dialog: Add ClassBackground Option to Support Blurred Background (MudBlazor#6725)

* Build(deps): Bump FluentValidation from 11.5.1 to 11.5.2 in /src (MudBlazor#6617)

Bumps [FluentValidation](https://github.com/JeremySkinner/fluentvalidation) from 11.5.1 to 11.5.2.
- [Release notes](https://github.com/JeremySkinner/fluentvalidation/releases)
- [Changelog](https://github.com/FluentValidation/FluentValidation/blob/main/Changelog.txt)
- [Commits](FluentValidation/FluentValidation@11.5.1...11.5.2)

---
updated-dependencies:
- dependency-name: FluentValidation
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* MudBreakpointProvider: Add nullable annotation (MudBlazor#6720)

* BreakpointService & ResizeService: KeyNotFoundException fix MudBlazor#3993 MudBlazor#3356 MudBlazor#3698 (MudBlazor#6727)

* BreakpointService & ResizeService: KeyNotFoundException fix MudBlazor#3993 MudBlazor#3356 MudBlazor#3698
* Add SubscribeAsync & UnsubscribeAsync

* Build(deps): Bump Microsoft.AspNetCore.Components.WebAssembly in /src (MudBlazor#6672)

Bumps [Microsoft.AspNetCore.Components.WebAssembly](https://github.com/dotnet/aspnetcore) from 7.0.4 to 7.0.5.
- [Release notes](https://github.com/dotnet/aspnetcore/releases)
- [Changelog](https://github.com/dotnet/aspnetcore/blob/main/docs/ReleasePlanning.md)
- [Commits](dotnet/aspnetcore@v7.0.4...v7.0.5)

---
updated-dependencies:
- dependency-name: Microsoft.AspNetCore.Components.WebAssembly
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump Microsoft.AspNetCore.Components.WebAssembly.Server (MudBlazor#6673)

Bumps [Microsoft.AspNetCore.Components.WebAssembly.Server](https://github.com/dotnet/aspnetcore) from 7.0.4 to 7.0.5.
- [Release notes](https://github.com/dotnet/aspnetcore/releases)
- [Changelog](https://github.com/dotnet/aspnetcore/blob/main/docs/ReleasePlanning.md)
- [Commits](dotnet/aspnetcore@v7.0.4...v7.0.5)

---
updated-dependencies:
- dependency-name: Microsoft.AspNetCore.Components.WebAssembly.Server
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump Microsoft.AspNetCore.Components.WebAssembly.DevServer (MudBlazor#6675)

Bumps [Microsoft.AspNetCore.Components.WebAssembly.DevServer](https://github.com/dotnet/aspnetcore) from 7.0.4 to 7.0.5.
- [Release notes](https://github.com/dotnet/aspnetcore/releases)
- [Changelog](https://github.com/dotnet/aspnetcore/blob/main/docs/ReleasePlanning.md)
- [Commits](dotnet/aspnetcore@v7.0.4...v7.0.5)

---
updated-dependencies:
- dependency-name: Microsoft.AspNetCore.Components.WebAssembly.DevServer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump FluentAssertions from 6.10.0 to 6.11.0 in /src (MudBlazor#6733)

Bumps [FluentAssertions](https://github.com/fluentassertions/fluentassertions) from 6.10.0 to 6.11.0.
- [Release notes](https://github.com/fluentassertions/fluentassertions/releases)
- [Changelog](https://github.com/fluentassertions/fluentassertions/blob/develop/AcceptApiChanges.ps1)
- [Commits](fluentassertions/fluentassertions@6.10.0...6.11.0)

---
updated-dependencies:
- dependency-name: FluentAssertions
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* MudChip, MudChipSet: Await where applicable (MudBlazor#6735)

* MudChip & MudChipSet await where applicable

* NotifySelection -> NotifySelectionAsync

* MudHighlighter: Add nullable annotation. (MudBlazor#6731)

* MudHighlighter: Add nullable annotation.

* MudDialog: Fix description of the DefaultFocus parameter (MudBlazor#6751)

* MudCollapse: Add nullable annotation. (MudBlazor#6747)

* MudDataGrid: Add drag and drop column reordering (MudBlazor#6700)

* MudDataGrid: Add Drag and Drop support for MudDataGrid



---------

Co-authored-by: segfault <[email protected]>
Co-authored-by: Meinrad Recheis <[email protected]>

* MudAppBar: Bottom=true should render <footer> instead of <header> (MudBlazor#6646)

* Fix HTML tag upon positioning MudAppBar at the bottom

* Add unit tests for AppBar fix

* Update copyright year in AppBarTests.cs

* Obsolete ICommand & CommandParameter (MudBlazor#6773)

* DateRangePicker: Highlight current date (MudBlazor#6753)

* DateRangePicker: Highlight current date as in normal DatePickers

* Added Tests

* MudPicker: HandleKeyDown was called twice (MudBlazor#6777)

* Build(deps): Bump bunit from 1.18.4 to 1.19.14 in /src (MudBlazor#6780)

Bumps [bunit](https://github.com/bUnit-dev/bUnit) from 1.18.4 to 1.19.14.
- [Release notes](https://github.com/bUnit-dev/bUnit/releases)
- [Changelog](https://github.com/bUnit-dev/bUnit/blob/main/CHANGELOG.md)
- [Commits](bUnit-dev/bUnit@v1.18.4...v1.19.14)

---
updated-dependencies:
- dependency-name: bunit
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* MudButton: Add ability to set custom rel attribute content (MudBlazor#6301)

* SnackbarOptions: Remove Parameter attribute from non-component class. (MudBlazor#6801)

* MudAutoComplete: Add BeforeItemsTemplate and AfterItemsTemplate (MudBlazor#6752)

* MudAutoComplete: Add BeforItemsTemplate and AfterItemsTemplate

* MudTreeView: Don't accept clicks and selection changes for Disabled items (MudBlazor#6783)

* MudTreeView: Evaluate the Disabled-Parameter for Selection

* Added Tests for DoubleClick

* Returning early if component TreeView is disabled

* Allow expanding / collapsing TreeViewItems on disabled TreeViews

* Fix typo in size parameter. (MudBlazor#6807)

Co-authored-by: Riley Nielsen <[email protected]>

* MudDataGrid: Fix runtime exception with PageSizeOptions (MudBlazor#6784)

Co-authored-by: Yan Gauthier <[email protected]>

* MudToolBar: Allow longer content (MudBlazor#6808)

* ToolBar: allow larger content

* Reset flex-wrap value for pagination-toolbar.

---------

Co-authored-by: Brecht Debaere <[email protected]>

* MudTable: Avoid NoRecordsContent showing before loading data (MudBlazor#6811)

* Table: Initialize Loading to true to avoid NoRecordsContent showing

* Add unit tests

---------

Co-authored-by: Brecht Debaere <[email protected]>
Co-authored-by: Riley Nielsen <[email protected]>

* MudPicker: Add OnClick event (MudBlazor#6797) (MudBlazor#6798)

Add OnClick event for all Pickers

* Build(deps): Bump ReportGenerator from 5.1.19 to 5.1.20 in /src (MudBlazor#6782)

Bumps [ReportGenerator](https://github.com/danielpalme/ReportGenerator) from 5.1.19 to 5.1.20.
- [Release notes](https://github.com/danielpalme/ReportGenerator/releases)
- [Commits](danielpalme/ReportGenerator@v5.1.19...v5.1.20)

---
updated-dependencies:
- dependency-name: ReportGenerator
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* MudMenu: Added Example with nested Menu (MudBlazor#6828)

* MudAutocomplete: Fix Value binding not updating (MudBlazor#6805)

* Fixes MudBlazor#5993
* AutocompleteImmediateCoerceValueTest added

* MudDropContainer: Fix bad index when dropping item on itself (MudBlazor#5006) (MudBlazor#6830)

* Docs: Remove ReadOnly from Form example (MudBlazor#6832)

* Remove ReadOnly from example

* Update MudFormExample.razor

* Docs: Toggle MudMini menu icon when menu is open. (MudBlazor#6384)

* MudDataGrid: FilterDefinition as interface (MudBlazor#6848)

* MudDataGrid: FilterDefinition as interface

* Evaluate FieldType only once

* MudTable: Fix discrepency with initial RowsPerPage in TablePager (MudBlazor#6776)

Co-authored-by: Yan Gauthier <[email protected]>

* Build: Temporarily fix SDK at 7.0.203 (MudBlazor#6864)

* Build: Temporarily fix SDK version on build server (MudBlazor#6865)

* Build: Workaround Fix for 7.0.302 SDK bug (MudBlazor#6872)

* Build: Remove SDK version fix (MudBlazor#6873)

* MudTimePicker: Fix duplicate hour event in minute mode MudBlazor#6523 (MudBlazor#6599)

* MudTimepicker: Delete duplicate submit event (MudBlazor#6523)
* MudTimepicker: Resolved problem with hour event being called even in minute mode

Co-authored-by: sho <[email protected]>

* ISnackbar: Add RemoveByKey MudBlazor#6857 (MudBlazor#6860)

* Add "void ISnackbar.RemoveByKey(string)" API

* Add documentation for "ISnackbar.RemoveByKey"

* Add test for "ISnackbar.RemoveByKey"

* ScrollToTop: Add OnClick event (MudBlazor#6870)

* Added OnClick event for MudScrollToTop (MudBlazor#6517)

+ MudScrollToTop it is an invisible wrapper for all inner components is does not allow 'clicking' them. So i think that better way to handle clicking is to add event handler for MudScrollToTop.
+ Added tests for MudScrollToTop;

* Fixed return type of OnButtonClick + typo fixed.

+ Renamed MudScrollToTop.OnElementClick to MudScrollToTop.OnButtonClick;
+ Return type of MudScrollToTop.OnButtonClick (void -> Task) changed;
+ Typo fix;

* Direct JS call replaced with ScrollManager method call

Direct JS API call replaced with ScrollManager method call in visual test for ScrollToTop component

* Types of test parameters changed string->bool

* PickerToolbar: Fix issue with landscape mode for non-static pickers (MudBlazor#5867) (MudBlazor#6874)

* MudPickerToolbar: Fix issue with landscape mode for non static pickers (MudBlazor#5867)

* MudPickerToolbar: Add tests for MudPickerToolbar (MudBlazor#5867)

* fix table loading style (MudBlazor#6885)

* Build: Update AspNetCore Packages (MudBlazor#6894)

* Build: Update webcompiler to 3.5.44 (MudBlazor#6895)

* Build(deps): Bump Microsoft.NET.Test.Sdk from 17.5.0 to 17.6.0 in /src (MudBlazor#6902)

Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.5.0 to 17.6.0.
- [Release notes](https://github.com/microsoft/vstest/releases)
- [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md)
- [Commits](microsoft/vstest@v17.5.0...v17.6.0)

---
updated-dependencies:
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Tabs: Add TabHeaderClass property (MudBlazor#5424) (MudBlazor#6298)

* Tabs: Add TabToolbarClass property (MudBlazor#5424)

* Tabs: Rename TabToolbarClass to TabHeaderClass and also toolbar to tabHeader in doc strings (MudBlazor#5424)

* Build(deps): Bump Microsoft.CodeAnalysis.CSharp in /src (MudBlazor#6903)

Bumps [Microsoft.CodeAnalysis.CSharp](https://github.com/dotnet/roslyn) from 4.5.0 to 4.6.0.
- [Release notes](https://github.com/dotnet/roslyn/releases)
- [Changelog](https://github.com/dotnet/roslyn/blob/main/docs/Breaking%20API%20Changes.md)
- [Commits](https://github.com/dotnet/roslyn/commits)

---
updated-dependencies:
- dependency-name: Microsoft.CodeAnalysis.CSharp
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump coverlet.msbuild from 3.2.0 to 6.0.0 in /src (MudBlazor#6904)

Bumps [coverlet.msbuild](https://github.com/coverlet-coverage/coverlet) from 3.2.0 to 6.0.0.
- [Release notes](https://github.com/coverlet-coverage/coverlet/releases)
- [Commits](coverlet-coverage/coverlet@v3.2.0...v6.0.0)

---
updated-dependencies:
- dependency-name: coverlet.msbuild
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump bunit from 1.19.14 to 1.20.8 in /src (MudBlazor#6905)

Bumps [bunit](https://github.com/bUnit-dev/bUnit) from 1.19.14 to 1.20.8.
- [Release notes](https://github.com/bUnit-dev/bUnit/releases)
- [Changelog](https://github.com/bUnit-dev/bUnit/blob/main/CHANGELOG.md)
- [Commits](bUnit-dev/bUnit@v1.19.14...v1.20.8)

---
updated-dependencies:
- dependency-name: bunit
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump ReportGenerator from 5.1.20 to 5.1.21 in /src (MudBlazor#6906)

Bumps [ReportGenerator](https://github.com/danielpalme/ReportGenerator) from 5.1.20 to 5.1.21.
- [Release notes](https://github.com/danielpalme/ReportGenerator/releases)
- [Commits](danielpalme/ReportGenerator@v5.1.20...v5.1.21)

---
updated-dependencies:
- dependency-name: ReportGenerator
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* MudToolBar: Optional Wrapping and Appbar compatibility (MudBlazor#6869)

* Added Parameter Wrapping to MudToolBar

* Fixed Documentation naming from Appbar to ToolBar

* Added Wrapping Parameter to AppBar.razor.cs

* Added Wrapping Parameter to AppBar.razor

* toolbar css now supports wrapping, and appbar-height

* Fixed missing parenthesis in _toolbar.scss

* possible fix for sass error

* Renamed Wrapping to WrapContent

* Remove newline in MudToolBar.razor

---------

Co-authored-by: Riley Nielsen <[email protected]>

* Revert Build(deps): Bump Microsoft.CodeAnalysis.CSharp (MudBlazor#6903) (MudBlazor#6913)

* MudDataGrid: Removed duplicate code from filter header cell (MudBlazor#6912)

* Build: Fix build to 7.0.203 SDK until 7.0.302 SDK is fixed (MudBlazor#6915)

* MudToolBar: Add example and test for new WrapContent (MudBlazor#6916)

* MudDataGrid: Remove unused UnitTests.Viewer (MudBlazor#6928)

* MudAppBar: Fix default value of WrapContent (MudBlazor#6808, MudBlazor#6869) (MudBlazor#6929)

* MudAppBar: Fix default value of WrapContent (MudBlazor#6808, MudBlazor#6869)

* MudColorPicker: Fix/Enable color picker validation (MudBlazor#6841) (MudBlazor#6924)

Fixes: MudBlazor#6841

* MudDataGrid: Filterable false removes filter from dropdown in filters panel MudBlazor#6137 (MudBlazor#6212)

Co-authored-by: Ben Groseclose <[email protected]>

* MudTable: Add methods to expand or collapse all groups (MudBlazor#6812)

* MudTable: Added "ToggleExpandGroups" to expand or collapse all groups

* Added documentation for the new "ToggleExpandGroups" feature

* Fixed dateformat on the releases-page (MudBlazor#6945)

* MudMenuItem: Add AutoClose parameter for controlling closing behavior (MudBlazor#6942)

* MudMenuItem: Adds CloseMenuOnClick parameter to optionally prevent menu close on click

* MudMenuItem: Adds test for CloseMenuOnClick parameter

* MudMenuItem: Rename CloseMenuOnClick to AutoClose

* MudMenuItem: Correction in AutoClose parameter doc

* Docs: Correct typos (MudBlazor#6845)

* Update GridPage.razor

* Fix typo in LinkPage.razor

* Update MudMessageBox.razor.cs

* Inputs: Fix order of Value and Text changes for increased stability (MudBlazor#6900)

* PopoverService: New design (MudBlazor#6953)

* PopoverService: New design

* IPopoverService: Rename SubscribeOnPopoverUpdate/UnsubscribeOnSubscribeOnPopoverUpdate to Subscribe/Unsubscribe

* PopoverService: early exit in UpdatePopoverAsync

* ObserverManager: Remove sync Notify

* ObserverManager: Remove ILogger param name comment

* IPopoverService: Rename CountProvidersAsync to GetProviderCountAsync

* Rename MudPopoverState to MudPopoverHolder

* ObserverManager: Add remark about defunc

* Rename BackgroundTaskBase to BackgroundWorkerBase, add additional explanation in XML comments

* Obsolete IMudPopoverService, MudPopoverService, MudPopoverHandler

* Rename PopoverBase to MudPopoverBase

* Add explanations to IMudPopoverHolder

* Add comment to MudPopoverBase

* ObserverManager: remove obvious xml comments

* PopoverService: Remove ConfigureAwait(false) (MudBlazor#6981)

* MudExpansionPanels: Add nullable annotation. (MudBlazor#6976)

* MudExpansionPanels: Add nullable annotation.

* Some nits

* MudProgress: Add nullable annotation. (MudBlazor#6993)

* MudProgress: Add nullable annotation.

* Use NumericConverter<double>.AreEqual

* Implements MudBlazor#6988 (MudBlazor#6989)

* Revert "MudHighlighter: Add Markup parameter to render Text using MarkupString" (MudBlazor#7004)

This reverts commit 6499da0.

* Docs: MudDatePicker - Added example for IsDateDisabledFunc and AdditionalDateClassesFunc (MudBlazor#6262)

* Docs: MudDatePicker - Added example for IsDateDisabledFunc and AdditionalDateClassesFunc

* Update DatePickerPage.razor

Fixed the grammar to read "By setting the IsDateDisabledFunc parameter"

* Update DatePickerPage.razor

Correct minor typo

---------

Co-authored-by: Raffaele Borrelli <[email protected]>
Co-authored-by: Riley Nielsen <[email protected]>

* MudNavLink: Adjusted line-height and alignment when in mini drawer (MudBlazor#5848) (MudBlazor#6958)

* DocStrings: Handle base and derived class with same (MudBlazor#7016)

* MudImage: Add nullable annotation. (MudBlazor#6997)

* PopoverService: Move StateHasChanged from responsibility (MudBlazor#6998)

* PopoverService: Move StateHasChanged from responsibility

* MudSelect: Fix loss of focus to receive key strokes (MudBlazor#7023)

* MudSelect: Fix focus lose to receive key strokes

* Remove debug output

* ColorPickerTests: Fix flaky test (MudBlazor#7025)

* MudDialog: Add generic DialogParameters<T> (MudBlazor#7029)

* DialogParameters: Add generic variant

* PopoverService: Fix DisposeAsync deadlock on WPF/WinForm platforms (MudBlazor#7044)

* Revert "Build: Fix build to 7.0.203 SDK until 7.0.302 SDK is fixed (MudBlazor#6915)" (MudBlazor#7052)

This reverts commit 751011a.

* Revert "Build: Workaround Fix for 7.0.302 SDK bug (MudBlazor#6872)"

This reverts commit b8d8b71.

* Build(deps): Bump Microsoft.NET.Test.Sdk from 17.6.0 to 17.6.2 in /src (MudBlazor#6999)

Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.6.0 to 17.6.2.
- [Release notes](https://github.com/microsoft/vstest/releases)
- [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md)
- [Commits](microsoft/vstest@v17.6.0...v17.6.2)

---
updated-dependencies:
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump ReportGenerator from 5.1.21 to 5.1.22 in /src (MudBlazor#7000)

Bumps [ReportGenerator](https://github.com/danielpalme/ReportGenerator) from 5.1.21 to 5.1.22.
- [Release notes](https://github.com/danielpalme/ReportGenerator/releases)
- [Commits](danielpalme/ReportGenerator@v5.1.21...v5.1.22)

---
updated-dependencies:
- dependency-name: ReportGenerator
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump Blazor-Analytics from 3.11.0 to 3.12.0 in /src (MudBlazor#7001)

Bumps [Blazor-Analytics](https://github.com/isc30/blazor-analytics) from 3.11.0 to 3.12.0.
- [Release notes](https://github.com/isc30/blazor-analytics/releases)
- [Commits](isc30/blazor-analytics@v3.11.0...v3.12.0)

---
updated-dependencies:
- dependency-name: Blazor-Analytics
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump NUnit3TestAdapter from 4.4.2 to 4.5.0 in /src (MudBlazor#6969)

Bumps [NUnit3TestAdapter](https://github.com/nunit/nunit3-vs-adapter) from 4.4.2 to 4.5.0.
- [Release notes](https://github.com/nunit/nunit3-vs-adapter/releases)
- [Commits](nunit/nunit3-vs-adapter@V4.4.2...V4.5.0)

---
updated-dependencies:
- dependency-name: NUnit3TestAdapter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* MudDataGrid: Add ability to completely use own IFilterDefinition (MudBlazor#7057)

* MudDataGrid: Add ability to completely use own IFilterDefinition

* Build(deps): Bump Microsoft.AspNetCore.Components.WebAssembly in /src (MudBlazor#7043)

Bumps [Microsoft.AspNetCore.Components.WebAssembly](https://github.com/dotnet/aspnetcore) from 7.0.5 to 7.0.7.
- [Release notes](https://github.com/dotnet/aspnetcore/releases)
- [Changelog](https://github.com/dotnet/aspnetcore/blob/main/docs/ReleasePlanning.md)
- [Commits](dotnet/aspnetcore@v7.0.5...v7.0.7)

---
updated-dependencies:
- dependency-name: Microsoft.AspNetCore.Components.WebAssembly
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Docs: Add multiple Accept example to FileUpload. (MudBlazor#6890)

* DataGrid: Allow resizing when overflowing with sticky columns (MudBlazor#6991)

Co-authored-by: Yan Gauthier <[email protected]>

* FileUploadTests: set culture to InvariantCulture to remove dependency on local system culture. (MudBlazor#7030)

* MudDateRangePicker: Add support for `AdditionalDateClassesFunc` (MudBlazor#6202) (MudBlazor#6203)

* SortDefinition: Fix build warning about missing nullable (MudBlazor#7067)

* MudBlazor.Docs.Wasm: enable nullable (MudBlazor#7068)

* MudRating: Add nullable annotation. (MudBlazor#7069)

* MudStack: Add nullable annotation. (MudBlazor#7071)

* MudSwipeArea: Add nullable annotation. (MudBlazor#7072)

* ServiceCollectionExtensions: Fix registration with options (MudBlazor#7065)

* ServiceCollectionExtensions: Fix registration

* Remove ExcludeFromCodeCoverage from ServiceCollectionExtensions

* Revert "Remove ExcludeFromCodeCoverage from ServiceCollectionExtensions"

This reverts commit f166b30.

* MudRTLProvider: Add nullable annotation. (MudBlazor#7073)

* Docs: remove unused leftover in MudRTLProvider folder

* MudContainer: Add nullable annotation. (MudBlazor#7075)

* MudSlider: Add nullable annotation. (MudBlazor#7077)

* MudDataGrid: Add Localization Capabilites (MudBlazor#7024)

* MudDataGrid: Add Localization Capabilities

---------

Co-authored-by: Artyom M <[email protected]>
Co-authored-by: Meinrad Recheis <[email protected]>

* DataGridServerMultiSelectionTest: use PropertyColumn instead (MudBlazor#7079)

* MudCheckBox: Add nullable annotation. (MudBlazor#7082)

* MudCheckBox: Add nullable annotation.

* MudElement: Add nullable annotation. (MudBlazor#7083)

* MudPaper: Add nullable annotation. (MudBlazor#7084)

* MudHidden: Add nullable annotation. (MudBlazor#7087)

* Palette: suppress obsolete warning in our code base (MudBlazor#7078)

* MudSwitch: Add nullable annotation. (MudBlazor#7088)

* EventUtil: nullable & XML comments (MudBlazor#7090)

* ResizeListenerService & BreakpointService: Allow user defined breakpoints (MudBlazor#7074)

* ResizeListenerService & BreakpointService: Allow user defined breakpoints
* Add Clone extension, update comments

* MudTimeline: Add nullable annotation (MudBlazor#7096)

Co-authored-by: Artyom M <[email protected]>

* MudTooltip: Add nullable annotation. (MudBlazor#7094)

Co-authored-by: Artyom M <[email protected]>

* MudToolBar: Add nullable annotation. (MudBlazor#7095)

* MudThemeProvider: Add nullable annotation. (MudBlazor#7097)

Co-authored-by: Artyom M <[email protected]>

* Localization: fix net6.0 dependencies (MudBlazor#7104)

* PopoverService: Clear all observers on DisposeAsync & nits (MudBlazor#7105)

* MudForm: Remove child form from parent form on Dispose (MudBlazor#7086)

* Removes child from from parent MudForm instance when it is disposed.
Fixes MudBlazor#7066
---------

Signed-off-by: Jimit Ndiaye <[email protected]>

* Build(deps): Bump Microsoft.AspNetCore.Components.WebAssembly.Server (MudBlazor#7100)

Bumps [Microsoft.AspNetCore.Components.WebAssembly.Server](https://github.com/dotnet/aspnetcore) from 7.0.5 to 7.0.8.
- [Release notes](https://github.com/dotnet/aspnetcore/releases)
- [Changelog](https://github.com/dotnet/aspnetcore/blob/main/docs/ReleasePlanning.md)
- [Commits](dotnet/aspnetcore@v7.0.5...v7.0.8)

---
updated-dependencies:
- dependency-name: Microsoft.AspNetCore.Components.WebAssembly.Server
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump Microsoft.AspNetCore.Components.WebAssembly in /src (MudBlazor#7101)

Bumps [Microsoft.AspNetCore.Components.WebAssembly](https://github.com/dotnet/aspnetcore) from 7.0.7 to 7.0.8.
- [Release notes](https://github.com/dotnet/aspnetcore/releases)
- [Changelog](https://github.com/dotnet/aspnetcore/blob/main/docs/ReleasePlanning.md)
- [Commits](dotnet/aspnetcore@v7.0.7...v7.0.8)

---
updated-dependencies:
- dependency-name: Microsoft.AspNetCore.Components.WebAssembly
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump Microsoft.AspNetCore.Components.WebAssembly.DevServer (MudBlazor#7103)

Bumps [Microsoft.AspNetCore.Components.WebAssembly.DevServer](https://github.com/dotnet/aspnetcore) from 7.0.5 to 7.0.8.
- [Release notes](https://github.com/dotnet/aspnetcore/releases)
- [Changelog](https://github.com/dotnet/aspnetcore/blob/main/docs/ReleasePlanning.md)
- [Commits](dotnet/aspnetcore@v7.0.5...v7.0.8)

---
updated-dependencies:
- dependency-name: Microsoft.AspNetCore.Components.WebAssembly.DevServer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* MudHighlighter: Add Markup parameter to render Text using HTML Markup (MudBlazor#7092)

* implements MudBlazor#7091

* Localization: sync dependency versions (MudBlazor#7112)

* MudSkeleton: Add nullable annotation. (MudBlazor#7113)

* MudScrollToTop: Add nullable annotation. (MudBlazor#7114)

* Move ScarletKuro to core team. (MudBlazor#7119)

* MudPagination: Add nullable annotation. (MudBlazor#7124)

* MudPageContentNavigation: Add nullable annotation. (MudBlazor#7125)

* MudBreadcrumbs: Add nullable annotation. (MudBlazor#7126)

* DateRangePicker: Add Parameter Clearable (MudBlazor#6430)

* DateRangePickerClearable

* Little Test

* MudDatePicker: Fix ArgumentOutOfRangeException (MudBlazor#7120) (MudBlazor#7127)

* Popover: Fix "Cannot read properties of null"(JS) (MudBlazor#7131)

* DataGrid: Make FilterDefinition compatible with EF Core (MudBlazor#7109)

Co-authored-by: Artyom M <[email protected]>

* Themes: nullable & XML comments (MudBlazor#7089)

* Themes: nullable & XML comments

* add Obsolete

* MudBaseButton: Add nullable annotation. (MudBlazor#7136)

* MudMessageBox: Add nullable annotation. (MudBlazor#7137)

* BrowserViewportSevice: Rework of IBreakpointService & IResizeService (MudBlazor#7098)

* BrowserViewportSevice: Rework of IBreakpointService & IResizeService

* Rename

* MudCarousel: Add nullable annotation. (MudBlazor#7138)

* ResizeService & BreakpointService: Obsolete (MudBlazor#7139)

* mudResizeListener.js: Fix cancelListener (MudBlazor#7140)

* Docs: Remove Warning on install (MudBlazor#7141)

When I install MudBlazor.Templates, I see this message:
'Warning: use of 'dotnet new --install' is deprecated. Use 'dotnet new install' instead.'

* Add SourceLink support (MudBlazor#7143)

* ResizeService & BreakpointService: Fix Obsolete (MudBlazor#7147)

* MudLayout: Add nullable annotation. (MudBlazor#7148)

* MudRender: Add nullable annotation. (MudBlazor#7149)

* SetHueSlider: fix flaky test (MudBlazor#7150)

* Extensions: Add nullable annotation. (MudBlazor#7151)

* MudSparkLine: Add nullable annotation. (MudBlazor#7152)

* Build: fix Tests for 1.21.9 version (MudBlazor#7157)

* Build(deps): Bump Microsoft.NET.Test.Sdk from 17.6.2 to 17.6.3 in /src (MudBlazor#7145)

Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.6.2 to 17.6.3.
- [Release notes](https://github.com/microsoft/vstest/releases)
- [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md)
- [Commits](microsoft/vstest@v17.6.2...v17.6.3)

---
updated-dependencies:
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* MudDataGrid: Fix flaky data grid test (MudBlazor#7160)

* Docs: Fix copy-to-clipboard function for certain snippets (MudBlazor#7161)

* MudForm/MudBaseInput: Fix swallowed user input on `FieldChanged` re-render (MudBlazor#7158) (MudBlazor#7159)

* MudForm/MudBaseInput: Fix swalled user input on FieldChanged re-render
(MudBlazor#7158)

Fixes: MudBlazor#7158

* Add unit test to validate changes

* Nuget package: Use PackageLicenseExpression instead of PackageLicenseFile (MudBlazor#7168)

* MudDataGrid: Added the EditDialogOptions to inline MudDialog for the DataGridEditMode.Form (MudBlazor#7162)

* MudDataGrid: Fix SingleSelection (MudBlazor#7021)

Co-authored-by: Artyom M <[email protected]>

* MudLink: Add nullable annotation. (MudBlazor#7175)

* MudNavMenu: Add nullable annotation. (MudBlazor#7176)

* MudFileUpload: Add AppendMultipleFiles property (MudBlazor#7027)

* MudFileUpload: Changed how OnChange method stores files when T = IReadOnlyList. (MudBlazor#6699)

* Changed returned value of FilesChanged from Files to _value

* Add FileUploadAppendMultiple property.

* Correct docs message.

* Add unit test.

---------

Co-authored-by: Riley Nielsen <[email protected]>

* MudTabs: Fix flickering with initial ActivePanelIndex != 1 (MudBlazor#7058)

Co-authored-by: Pecze Tamás <[email protected]>

* DataGrid: Fix Select-all behaviour when filtered (MudBlazor#7142) (MudBlazor#7167)

* MudDrawer: Add nullable annotation. (MudBlazor#7186)

* TimePicker: Handle conversion error (MudBlazor#6947)

Co-authored-by: Stefan Jetzer <[email protected]>

* MudTable/MudDataGrid: ItemSize parameter for components using Virtualize (MudBlazor#7190)

* add itemsize to mudvirtualize

* add itemsize to mudtable

* add itemsize muddatagrid

* MudDebouncedInput: Fix swallowed user input on component re-render (MudBlazor#7193) (MudBlazor#7194)

* MudDebouncedInput: Fix swalled user input on component re-render (MudBlazor#7193)

Fixes: MudBlazor#7193

* Fix formatting

* Suppress text update only when debounce is active

Fixes a regression where a default `Value` for a debounced field would
not set the `Text` property on initial render, even though the `Value`
was successfully updated.

* Add more tests

* MudRangeInput: fix clearable button is misaligned (MudBlazor#7200)

* MudDataGrid: Fix when nested property has same name (MudBlazor#7198)

* Docs: Fix reference type issue on `DropZone` reorder save example (MudBlazor#7191) (MudBlazor#7209)

* Build(deps): Bump ReportGenerator from 5.1.22 to 5.1.23 in /src (MudBlazor#7185)

Bumps [ReportGenerator](https://github.com/danielpalme/ReportGenerator) from 5.1.22 to 5.1.23.
- [Release notes](https://github.com/danielpalme/ReportGenerator/releases)
- [Commits](danielpalme/ReportGenerator@v5.1.22...v5.1.23)

---
updated-dependencies:
- dependency-name: ReportGenerator
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump ColorCode.HTML from 2.0.14 to 2.0.15 in /src (MudBlazor#7218)

Bumps [ColorCode.HTML](https://github.com/CommunityToolkit/ColorCode-Universal) from 2.0.14 to 2.0.15.
- [Release notes](https://github.com/CommunityToolkit/ColorCode-Universal/releases)
- [Commits](CommunityToolkit/ColorCode-Universal@v2.0.14...v2.0.15)

---
updated-dependencies:
- dependency-name: ColorCode.HTML
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Date/Time Pickers: Add DisableUnderline param like in MudTextField (MudBlazor#7226)

* Fix issue_7070 (MudBlazor#7207)

* Build(deps): Bump FluentValidation from 11.5.2 to 11.6.0 in /src (MudBlazor#7184)

Bumps [FluentValidation](https://github.com/JeremySkinner/fluentvalidation) from 11.5.2 to 11.6.0.
- [Release notes](https://github.com/JeremySkinner/fluentvalidation/releases)
- [Changelog](https://github.com/FluentValidation/FluentValidation/blob/main/Changelog.txt)
- [Commits](FluentValidation/FluentValidation@11.5.2...11.6.0)

---
updated-dependencies:
- dependency-name: FluentValidation
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump Microsoft.AspNetCore.Components.WebAssembly.DevServer (MudBlazor#7217)

Bumps [Microsoft.AspNetCore.Components.WebAssembly.DevServer](https://github.com/dotnet/aspnetcore) from 7.0.8 to 7.0.9.
- [Release notes](https://github.com/dotnet/aspnetcore/releases)
- [Changelog](https://github.com/dotnet/aspnetcore/blob/main/docs/ReleasePlanning.md)
- [Commits](dotnet/aspnetcore@v7.0.8...v7.0.9)

---
updated-dependencies:
- dependency-name: Microsoft.AspNetCore.Components.WebAssembly.DevServer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* MudMask: Fix Clearable with non-PatternMasks (MudBlazor#7238) (MudBlazor#7244)

* MudMask: Fix `Clearable` not working as expected

..with different `Mask` implementations other than `PatternMask`.

Fixes: MudBlazor#7238

* Tooltip: Fix arrow placement when using ChildContent (MudBlazor#7271)

* Docs: Updated Sponsors (MudBlazor#7288)

* Docs: Fixed content security policy for Carbon Ads (MudBlazor#7289)

* Doc: Fix wrong z-index order in themeing doc ( MudBlazor#6707) (MudBlazor#7294)

* Build(deps): Bump bunit from 1.21.9 to 1.22.19 in /src (MudBlazor#7279)

Bumps [bunit](https://github.com/bUnit-dev/bUnit) from 1.21.9 to 1.22.19.
- [Release notes](https://github.com/bUnit-dev/bUnit/releases)
- [Changelog](https://github.com/bUnit-dev/bUnit/blob/main/CHANGELOG.md)
- [Commits](bUnit-dev/bUnit@v1.21.9...v1.22.19)

---
updated-dependencies:
- dependency-name: bunit
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* DataGridAdvancedExample.razor: Fix typo "gobally" (MudBlazor#7300)

* MudColor: Change ToString default mode to RGBA (MudBlazor#7275, MudBlazor#7303)

* MudDataGrid: Fix CurrentPage not working (MudBlazor#7267) (MudBlazor#7308)

* MudDataGrid: New parameter "SelectOnRowClick" (MudBlazor#6547)

* MudMenu: Add IsOpen property (MudBlazor#7266) (MudBlazor#7290)

* MudTable: Add doc for default column sorting direction and allow unsorted (MudBlazor#7293)

* MudFocusTrap: Add nullable annotation. (MudBlazor#7331)

* Prerendering: Check if JSRuntime is available (MudBlazor#7333)

* Build(deps): Bump Microsoft.AspNetCore.Components.WebAssembly in /src (MudBlazor#7253)

Bumps [Microsoft.AspNetCore.Components.WebAssembly](https://github.com/dotnet/aspnetcore) from 7.0.8 to 7.0.9.
- [Release notes](https://github.com/dotnet/aspnetcore/releases)
- [Changelog](https://github.com/dotnet/aspnetcore/blob/main/docs/ReleasePlanning.md)
- [Commits](dotnet/aspnetcore@v7.0.8...v7.0.9)

---
updated-dependencies:
- dependency-name: Microsoft.AspNetCore.Components.WebAssembly
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Build(deps): Bump Microsoft.AspNetCore.Components.WebAssembly.Server (MudBlazor#7252)

Bumps [Microsoft.AspNetCore.Components.WebAssembly.Server](https://github.com/dotnet/aspnetcore) from 7.0.8 to 7.0.9.
- [Release notes](https://github.com/dotnet/aspnetcore/releases)
- [Changelog](https://github.com/dotnet/aspnetcore/blob/main/docs/ReleasePlanning.md)
- [Commits](dotnet/aspnetcore@v7.0.8...v7.0.9)

---
updated-dependencies:
- dependency-name: Microsoft.AspNetCore.Components.WebAssembly.Server
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Optimization: Replace .Count() > 0 with .Any() (MudBlazor#6809)

* Replace .Count() > 0 with .Any()

* Use Count property instead of Count method

---------

Co-authored-by: Brecht Debaere <[email protected]>

* MudInputControl: Add nullable annotation. (MudBlazor#7340)

* merge bugfix

* Active tab toggling merge bugfix

---------

Signed-off-by: dependabot[bot] <[email protected]>
Signed-off-by: Jimit Ndiaye <[email protected]>
Co-authored-by: csombi <[email protected]>
Co-authored-by: Artyom M <[email protected]>
Co-authored-by: elodon <[email protected]>
Co-authored-by: Sean O'Donnell <Sean.O'[email protected]>
Co-authored-by: TDroogers <[email protected]>
Co-authored-by: SinisterMaya <[email protected]>
Co-authored-by: Yan Gauthier <[email protected]>
Co-authored-by: Oriol Mesa <[email protected]>
Co-authored-by: Mehmet Can Karagöz <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Robin <[email protected]>
Co-authored-by: segfault- <[email protected]>
Co-authored-by: segfault <[email protected]>
Co-authored-by: Meinrad Recheis <[email protected]>
Co-authored-by: Martin Arndt <[email protected]>
Co-authored-by: TehGM <[email protected]>
Co-authored-by: Derek Welton <[email protected]>
Co-authored-by: Riley Nielsen <[email protected]>
Co-authored-by: Riley Nielsen <[email protected]>
Co-authored-by: bdebaere <[email protected]>
Co-authored-by: Brecht Debaere <[email protected]>
Co-authored-by: Wesley Ferrera <[email protected]>
Co-authored-by: Benjamin Höglinger-Stelzer <[email protected]>
Co-authored-by: ZephyrZiggurat <[email protected]>
Co-authored-by: Mike Surcouf <[email protected]>
Co-authored-by: sho <[email protected]>
Co-authored-by: sho <[email protected]>
Co-authored-by: Kumima <[email protected]>
Co-authored-by: Vladimir Senchikhin <[email protected]>
Co-authored-by: lostinmilkshake <[email protected]>
Co-authored-by: Jing Ling <[email protected]>
Co-authored-by: Łukasz Prajer <[email protected]>
Co-authored-by: Tim Weidner <[email protected]>
Co-authored-by: adgranger <[email protected]>
Co-authored-by: Jason Rebelo <[email protected]>
Co-authored-by: Benjamin Groseclose <[email protected]>
Co-authored-by: Ben Groseclose <[email protected]>
Co-authored-by: Davide Ferrari <[email protected]>
Co-authored-by: Jeffrey Jangli <[email protected]>
Co-authored-by: Raffaele Borrelli <[email protected]>
Co-authored-by: Raffaele Borrelli <[email protected]>
Co-authored-by: joe-gregory <[email protected]>
Co-authored-by: Simon Schulze <[email protected]>
Co-authored-by: Eric M <[email protected]>
Co-authored-by: Meduris <[email protected]>
Co-authored-by: Samuel Meenzen <[email protected]>
Co-authored-by: Jimit Ndiaye <[email protected]>
Co-authored-by: Dionysis Chasakis <[email protected]>
Co-authored-by: Alfonso Martín Tapia <[email protected]>
Co-authored-by: Barna Zoltán <[email protected]>
Co-authored-by: Jakob Sorgeloos <[email protected]>
Co-authored-by: Geccoka <[email protected]>
Co-authored-by: Pecze Tamás <[email protected]>
Co-authored-by: Richard Davies <[email protected]>
Co-authored-by: Cerberus4444 <[email protected]>
Co-authored-by: Stefan Jetzer <[email protected]>
Co-authored-by: Marc Zwart <[email protected]>
Co-authored-by: Mark Novak <[email protected]>
Co-authored-by: DennisOstertag <[email protected]>
Co-authored-by: o-khytrov <[email protected]>
Co-authored-by: Jonny Larsson <[email protected]>
Co-authored-by: AlessandroMartinelli <[email protected]>
Co-authored-by: hybrid2102 <[email protected]>
Co-authored-by: Ben <[email protected]>
Co-authored-by: Alasdair Cooper <[email protected]>
Co-authored-by: Drastamat Sargsyan <[email protected]>
Co-authored-by: Martin Stoeckli <[email protected]>
ScarletKuro added a commit that referenced this pull request Aug 19, 2023
* PopoverService: New design

* IPopoverService: Rename SubscribeOnPopoverUpdate/UnsubscribeOnSubscribeOnPopoverUpdate to Subscribe/Unsubscribe

* PopoverService: early exit in UpdatePopoverAsync

* ObserverManager: Remove sync Notify

* ObserverManager: Remove ILogger param name comment

* IPopoverService: Rename CountProvidersAsync to GetProviderCountAsync

* Rename MudPopoverState to MudPopoverHolder

* ObserverManager: Add remark about defunc

* Rename BackgroundTaskBase to BackgroundWorkerBase, add additional explanation in XML comments

* Obsolete IMudPopoverService, MudPopoverService, MudPopoverHandler

* Rename PopoverBase to MudPopoverBase

* Add explanations to IMudPopoverHolder

* Add comment to MudPopoverBase

* ObserverManager: remove obvious xml comments
ilovepilav pushed a commit to ilovepilav/MudBlazor that referenced this pull request Nov 25, 2023
* PopoverService: New design

* IPopoverService: Rename SubscribeOnPopoverUpdate/UnsubscribeOnSubscribeOnPopoverUpdate to Subscribe/Unsubscribe

* PopoverService: early exit in UpdatePopoverAsync

* ObserverManager: Remove sync Notify

* ObserverManager: Remove ILogger param name comment

* IPopoverService: Rename CountProvidersAsync to GetProviderCountAsync

* Rename MudPopoverState to MudPopoverHolder

* ObserverManager: Add remark about defunc

* Rename BackgroundTaskBase to BackgroundWorkerBase, add additional explanation in XML comments

* Obsolete IMudPopoverService, MudPopoverService, MudPopoverHandler

* Rename PopoverBase to MudPopoverBase

* Add explanations to IMudPopoverHolder

* Add comment to MudPopoverBase

* ObserverManager: remove obvious xml comments
@henon henon added the legendary Marks contributions that are highly valuable, innovative, or significantly impactful to the project label Jun 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement Adds a new feature or enhances existing functionality (not fixing a defect) in the main library legendary Marks contributions that are highly valuable, innovative, or significantly impactful to the project

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Large dispose time of multiple MudPopover

3 participants