From c53e0a026032b4d07441f650003bf38486647bd8 Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Mon, 28 Oct 2024 15:48:08 +0100 Subject: [PATCH 01/20] Prepare for next version --- Directory.Build.props | 4 ++-- eng/pipelines/version.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index e1afaa992..2c9c2e7bd 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,8 +12,8 @@ $(MSBuildThisFileDirectory) true - 4.10.3 - 4.10.3 + 4.10.4 + 4.10.4 $(VersionFile) $(VersionFile) diff --git a/eng/pipelines/version.yml b/eng/pipelines/version.yml index a5370f979..2c2629c78 100644 --- a/eng/pipelines/version.yml +++ b/eng/pipelines/version.yml @@ -2,5 +2,5 @@ variables: # File and Package version # dev branch: 1.2.4-Preview-23282-1' (PackageSuffix is always ignored in Dev branch) # main branch: 1.2.4-RC.1' (PackageSuffix is ignored, if empty, in Main branch) - FileVersion: '4.10.3' # Set the next final version here. + FileVersion: '4.10.4' # Set the next final version here. PackageSuffix: '' From 1a7e1eb6ada14235d0325c568205eb461fb141f5 Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Tue, 29 Oct 2024 10:47:00 +0100 Subject: [PATCH 02/20] Doc hotfix --- WHATSNEW.md | 4 ++++ examples/Demo/Shared/wwwroot/docs/WhatsNew.md | 3 +++ 2 files changed, 7 insertions(+) diff --git a/WHATSNEW.md b/WHATSNEW.md index ede6bba95..3247d03fc 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -1,5 +1,9 @@ ## V4.10.3 +### Important note +- The main class name for the `FluentAppBar` component has been renamed from `nav-menu-container` to `fluent-appbar`. If you have custom CSS in your app targeting that class, you need to change that to you the new class name. + + ### General - \[General\] Apply global color-scheme to reflect theme in use ([#2854](https://github.com/microsoft/fluentui-blazor/pull/2854)) diff --git a/examples/Demo/Shared/wwwroot/docs/WhatsNew.md b/examples/Demo/Shared/wwwroot/docs/WhatsNew.md index 6899bade2..5119b6cb0 100644 --- a/examples/Demo/Shared/wwwroot/docs/WhatsNew.md +++ b/examples/Demo/Shared/wwwroot/docs/WhatsNew.md @@ -1,5 +1,8 @@ ## V4.10.3 +### Important note +- The main class name for the `FluentAppBar` component has been renamed from `nav-menu-container` to `fluent-appbar`. If you have custom CSS in your app targeting that class, you need to change that to you the new class name. + ### General - \[General\] Apply global color-scheme to reflect theme in use ([#2854](https://github.com/microsoft/fluentui-blazor/pull/2854)) From 78ff71e3d8514c6a8b59be86db1da4b907b10b3c Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Tue, 29 Oct 2024 11:01:11 +0100 Subject: [PATCH 03/20] Fix #2868 by removing not working optimalization check (#2875) --- src/Core/Components/DataGrid/FluentDataGrid.razor.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Core/Components/DataGrid/FluentDataGrid.razor.js b/src/Core/Components/DataGrid/FluentDataGrid.razor.js index d865375ab..2d2f9b4e6 100644 --- a/src/Core/Components/DataGrid/FluentDataGrid.razor.js +++ b/src/Core/Components/DataGrid/FluentDataGrid.razor.js @@ -1,5 +1,4 @@ let initialColumnsWidths = {}; -var latestGridElement = null; export function init(gridElement) { if (gridElement === undefined || gridElement === null) { @@ -159,9 +158,6 @@ export function checkColumnPopupPosition(gridElement, selector) { } } export function enableColumnResizing(gridElement) { - if (gridElement === latestGridElement) - return; - latestGridElement = gridElement; const columns = []; let min = 75; let headerBeingResized; @@ -224,7 +220,9 @@ export function enableColumnResizing(gridElement) { resizeHandle = target; headerBeingResized = target.parentNode; - resizeHandle.setPointerCapture(pointerId); + if (resizeHandle) { + resizeHandle.setPointerCapture(pointerId); + } }; const dragHandle = header.querySelector('.col-width-draghandle'); From 1c0fbf50fe6cc6aee7d2af7d73768e4f47fe7160 Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Tue, 29 Oct 2024 22:03:27 +0100 Subject: [PATCH 04/20] TSA work --- .config/tsaoptions.json | 12 ++++++++++++ eng/pipelines/build-all-lib.yml | 5 +++++ eng/pipelines/build-core-lib.yml | 5 +++++ 3 files changed, 22 insertions(+) create mode 100644 .config/tsaoptions.json diff --git a/.config/tsaoptions.json b/.config/tsaoptions.json new file mode 100644 index 000000000..0a6a26aa3 --- /dev/null +++ b/.config/tsaoptions.json @@ -0,0 +1,12 @@ +{ + "areaPath": "DevDiv\\ASP.NET Core\\Blazor\\FluentUI Blazor Components", + "codebaseName": "fluentui-blazor", + "instanceUrl": "https://devdiv.visualstudio.com/", + "iterationPath": "DevDiv", + "notificationAliases": [ + "fluentui-blazor@microsoft.com" + ], + "projectName": "DEVDIV", + "repositoryName": "microsoft-fluentui-blazor", + "template": "TFSDEVDIV" + } \ No newline at end of file diff --git a/eng/pipelines/build-all-lib.yml b/eng/pipelines/build-all-lib.yml index 3c6d1a9fd..22f3b64a0 100644 --- a/eng/pipelines/build-all-lib.yml +++ b/eng/pipelines/build-all-lib.yml @@ -42,6 +42,11 @@ extends: #template: v1/1ES.Unofficial.PipelineTemplate.yml@1esPipelines template: azure-pipelines/MicroBuild.1ES.Official.yml@MicroBuildTemplate parameters: + sdl: + policheck: + enabled: true + tsa: + enabled: true # Update the pool with your team's 1ES hosted pool. pool: name: NetCore1ESPool-Internal diff --git a/eng/pipelines/build-core-lib.yml b/eng/pipelines/build-core-lib.yml index e71204a7c..e2f7168fc 100644 --- a/eng/pipelines/build-core-lib.yml +++ b/eng/pipelines/build-core-lib.yml @@ -76,6 +76,11 @@ extends: #template: v1/1ES.Unofficial.PipelineTemplate.yml@1esPipelines template: azure-pipelines/MicroBuild.1ES.Official.yml@MicroBuildTemplate parameters: + sdl: + policheck: + enabled: true + tsa: + enabled: true # Update the pool with your team's 1ES hosted pool. pool: name: NetCore1ESPool-Internal From 01be30bc7c72aa9ba376411746f9801ab04b6fcb Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Tue, 29 Oct 2024 22:17:54 +0100 Subject: [PATCH 05/20] Change TSA repo name --- .config/tsaoptions.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.config/tsaoptions.json b/.config/tsaoptions.json index 0a6a26aa3..4b4aa7236 100644 --- a/.config/tsaoptions.json +++ b/.config/tsaoptions.json @@ -7,6 +7,6 @@ "fluentui-blazor@microsoft.com" ], "projectName": "DEVDIV", - "repositoryName": "microsoft-fluentui-blazor", + "repositoryName": "fluentui-blazor", "template": "TFSDEVDIV" - } \ No newline at end of file + } From 8646587b9c0cd27ab269e1f43c42788192ac2b3d Mon Sep 17 00:00:00 2001 From: Gerald Versluis Date: Thu, 31 Oct 2024 21:04:02 +0100 Subject: [PATCH 06/20] [Docs] Update README with Blazor Hybrid workaround note (#2892) --- README.md | 4 ++++ examples/Demo/Shared/Pages/BlazorHybrid.razor | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/README.md b/README.md index 0cfa40c8f..b94d1dbee 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,10 @@ maintaining accessibility. This is accomplished through setting various "design You can use this library in **Blazor Hybrid** (MAUI/WPF/Windows Forms) projects. Setup is almost the same as described in the "Getting started" section above, but to get everything to work you'll need to take one extra steps (for now) described below. ### Temporary workaround for MAUI/WPF/Windows Forms issues + +> [!NOTE] +> The workaround below only applies to .NET 8 (and below). As of .NET 9 this workaround is no longer needed. If you have this workaround in place for .NET 9 your Blazor Hybrid project **will not load**. + Currently when using the WebView to run Blazor (so all Hybrid variants) the web-components script is not imported automatically (see [#404](https://github.com/microsoft/fluentui-blazor/issues/404)). There is also an issue with loading the custom event handlers that are being configured by the web-components script. Until these are fixed on the WebView side, there is a workaround available, namely to intercept `'_framework/blazor.modules.json'` and provide proper JS initializers file (created by build). The needed `initializersLoader.webview.js` has been added to the library and needs to be included with a script tag **before** the `_framework/blazor.webview.js` script tag: diff --git a/examples/Demo/Shared/Pages/BlazorHybrid.razor b/examples/Demo/Shared/Pages/BlazorHybrid.razor index 9c72eadd4..7d56ac660 100644 --- a/examples/Demo/Shared/Pages/BlazorHybrid.razor +++ b/examples/Demo/Shared/Pages/BlazorHybrid.razor @@ -5,6 +5,10 @@

Blazor Hybrid

+

+ Note: The workaround below only applies to .NET 8 (and below). As of .NET 9 this workaround is no longer needed. If you have this workaround in place for .NET 9 your Blazor Hybrid project will not load. +

+

It is possible to use this library in your Blazor Hybrid projects. Setup is almost the same as described in the "Getting started" section above, however to get everything to work you'll need to take one extra step: From 1e4a052789b007088358cdde02da415839f8cbb0 Mon Sep 17 00:00:00 2001 From: Denis Voituron Date: Tue, 5 Nov 2024 17:11:39 +0100 Subject: [PATCH 07/20] Fix the Calendar disabled day in RTL direction (#2909) --- src/Core/Components/DateTime/FluentCalendar.razor.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Core/Components/DateTime/FluentCalendar.razor.css b/src/Core/Components/DateTime/FluentCalendar.razor.css index 4fef01cb0..7d76f1623 100644 --- a/src/Core/Components/DateTime/FluentCalendar.razor.css +++ b/src/Core/Components/DateTime/FluentCalendar.razor.css @@ -190,6 +190,10 @@ animation: none; } +[dir="rtl"] .fluent-calendar ::deep .day[disabled]::before { + transform: translate(4px, 0px) rotate(45deg); +} + /* "Months" View */ From 7ca17bc36dc7d933a424e2aa5531c1152d33c35d Mon Sep 17 00:00:00 2001 From: Denis Voituron Date: Tue, 5 Nov 2024 17:16:16 +0100 Subject: [PATCH 08/20] KeyCode: Add a new StopRepeat property (#2908) Co-authored-by: Vincent Baaij --- ...icrosoft.FluentUI.AspNetCore.Components.xml | 14 ++++++++++++-- .../KeyCode/Examples/KeyCodeExample.razor | 1 + .../Examples/KeyCodeGlobalExample.razor | 18 ++++++++++++++---- .../Components/KeyCode/FluentKeyCode.razor.cs | 16 +++++++++++----- .../Components/KeyCode/FluentKeyCode.razor.js | 8 ++++++-- .../KeyCode/FluentKeyCodeEventArgs.cs | 8 +++++++- .../KeyCodeProvider/FluentKeyCodeTests.razor | 10 +++++----- tests/Core/List/FluentAutocompleteTests.razor | 2 +- 8 files changed, 57 insertions(+), 20 deletions(-) diff --git a/examples/Demo/Shared/Microsoft.FluentUI.AspNetCore.Components.xml b/examples/Demo/Shared/Microsoft.FluentUI.AspNetCore.Components.xml index 7b3c527b7..b477893a9 100644 --- a/examples/Demo/Shared/Microsoft.FluentUI.AspNetCore.Components.xml +++ b/examples/Demo/Shared/Microsoft.FluentUI.AspNetCore.Components.xml @@ -5196,6 +5196,11 @@ its default action should not be taken as it normally would be. + +

+ Gets or sets whether the key pressed can be repeated. + + Gets or sets a collection of additional attributes that will be applied to the created element. @@ -5204,7 +5209,7 @@ - + Internal method. @@ -5218,7 +5223,7 @@ - + Internal method. @@ -5284,6 +5289,11 @@ Gets the identifier of the targeted DOM element. + + + Gets a boolean value that is true if the given key is being held down such that it is automatically repeating. + + Returns a string that represents the key pressed. diff --git a/examples/Demo/Shared/Pages/KeyCode/Examples/KeyCodeExample.razor b/examples/Demo/Shared/Pages/KeyCode/Examples/KeyCodeExample.razor index 953582326..84a0b54ef 100644 --- a/examples/Demo/Shared/Pages/KeyCode/Examples/KeyCodeExample.razor +++ b/examples/Demo/Shared/Pages/KeyCode/Examples/KeyCodeExample.razor @@ -46,6 +46,7 @@
  • Location: @LastKeyCode?.Location.ToString()
  • TargetId: @LastKeyCode?.TargetId
  • +
  • Repeat: @LastKeyCode?.Repeat
  • diff --git a/examples/Demo/Shared/Pages/KeyCode/Examples/KeyCodeGlobalExample.razor b/examples/Demo/Shared/Pages/KeyCode/Examples/KeyCodeGlobalExample.razor index 34c0fe78f..dcc8b27ce 100644 --- a/examples/Demo/Shared/Pages/KeyCode/Examples/KeyCodeGlobalExample.razor +++ b/examples/Demo/Shared/Pages/KeyCode/Examples/KeyCodeGlobalExample.razor @@ -1,10 +1,14 @@ @inject IKeyCodeService KeyCodeService @implements IAsyncDisposable - + + + + @if (!KeyPressed.Any()) @@ -21,6 +25,7 @@ @code { private bool IncludeKeyUp = false; + private bool StopRepeat = false; private List<(string Key, string Event)> KeyPressed = new(); protected override void OnInitialized() @@ -36,6 +41,11 @@ return Task.CompletedTask; } + if (StopRepeat && args.Repeat) + { + return Task.CompletedTask; + } + KeyPressed.Add((args.ToString(), args.Name)); StateHasChanged(); return Task.CompletedTask; diff --git a/src/Core/Components/KeyCode/FluentKeyCode.razor.cs b/src/Core/Components/KeyCode/FluentKeyCode.razor.cs index a8b20a331..13c8db769 100644 --- a/src/Core/Components/KeyCode/FluentKeyCode.razor.cs +++ b/src/Core/Components/KeyCode/FluentKeyCode.razor.cs @@ -103,6 +103,12 @@ public partial class FluentKeyCode : IAsyncDisposable [Parameter] public KeyCode[] PreventDefaultOnly { get; set; } = Array.Empty(); + /// + /// Gets or sets whether the key pressed can be repeated. + /// + [Parameter] + public bool StopRepeat { get; set; } + /// /// Gets or sets a collection of additional attributes that will be applied to the created element. /// @@ -128,7 +134,7 @@ protected async override Task OnAfterRenderAsync(bool firstRender) OnKeyUp.HasDelegate ? "KeyUp" : string.Empty, }); - _javaScriptEventId = await _jsModule.InvokeAsync("RegisterKeyCode", GlobalDocument, eventNames.Length > 1 ? eventNames : "KeyDown", Anchor, ChildContent is null ? null : Element, Only, IgnoreModifier ? Ignore.Union(_Modifiers) : Ignore, StopPropagation, PreventDefault, PreventDefaultOnly, _dotNetHelper, PreventMultipleKeyDown); + _javaScriptEventId = await _jsModule.InvokeAsync("RegisterKeyCode", GlobalDocument, eventNames.Length > 1 ? eventNames : "KeyDown", Anchor, ChildContent is null ? null : Element, Only, IgnoreModifier ? Ignore.Union(_Modifiers) : Ignore, StopPropagation, PreventDefault, PreventDefaultOnly, _dotNetHelper, PreventMultipleKeyDown, StopRepeat); } } @@ -145,11 +151,11 @@ protected async override Task OnAfterRenderAsync(bool firstRender) /// /// [JSInvokable] - public async Task OnKeyDownRaisedAsync(int keyCode, string value, bool ctrlKey, bool shiftKey, bool altKey, bool metaKey, int location, string targetId) + public async Task OnKeyDownRaisedAsync(int keyCode, string value, bool ctrlKey, bool shiftKey, bool altKey, bool metaKey, int location, string targetId, bool repeat) { if (OnKeyDown.HasDelegate) { - await OnKeyDown.InvokeAsync(FluentKeyCodeEventArgs.Instance("keydown", keyCode, value, ctrlKey, shiftKey, altKey, metaKey, location, targetId)); + await OnKeyDown.InvokeAsync(FluentKeyCodeEventArgs.Instance("keydown", keyCode, value, ctrlKey, shiftKey, altKey, metaKey, location, targetId, repeat)); } } @@ -166,11 +172,11 @@ public async Task OnKeyDownRaisedAsync(int keyCode, string value, bool ctrlKey, /// /// [JSInvokable] - public async Task OnKeyUpRaisedAsync(int keyCode, string value, bool ctrlKey, bool shiftKey, bool altKey, bool metaKey, int location, string targetId) + public async Task OnKeyUpRaisedAsync(int keyCode, string value, bool ctrlKey, bool shiftKey, bool altKey, bool metaKey, int location, string targetId, bool repeat) { if (OnKeyUp.HasDelegate) { - await OnKeyUp.InvokeAsync(FluentKeyCodeEventArgs.Instance("keyup", keyCode, value, ctrlKey, shiftKey, altKey, metaKey, location, targetId)); + await OnKeyUp.InvokeAsync(FluentKeyCodeEventArgs.Instance("keyup", keyCode, value, ctrlKey, shiftKey, altKey, metaKey, location, targetId, repeat)); } } diff --git a/src/Core/Components/KeyCode/FluentKeyCode.razor.js b/src/Core/Components/KeyCode/FluentKeyCode.razor.js index 6c4af317f..ae94633a3 100644 --- a/src/Core/Components/KeyCode/FluentKeyCode.razor.js +++ b/src/Core/Components/KeyCode/FluentKeyCode.razor.js @@ -1,4 +1,4 @@ -export function RegisterKeyCode(globalDocument, eventNames, id, elementRef, onlyCodes, excludeCodes, stopPropagation, preventDefault, preventDefaultOnly, dotNetHelper, preventMultipleKeydown) { +export function RegisterKeyCode(globalDocument, eventNames, id, elementRef, onlyCodes, excludeCodes, stopPropagation, preventDefault, preventDefaultOnly, dotNetHelper, preventMultipleKeydown, stopRepeat) { const element = globalDocument ? document : elementRef == null ? document.getElementById(id) : elementRef; @@ -27,6 +27,10 @@ export function RegisterKeyCode(globalDocument, eventNames, id, elementRef, only const handler = function (e, netMethod) { const keyCode = e.which || e.keyCode || e.charCode; + if (stopRepeat && e.repeat) { + return; + } + if (!!dotNetHelper && !!dotNetHelper.invokeMethodAsync) { const targetId = e.currentTarget?.id ?? ""; @@ -52,7 +56,7 @@ export function RegisterKeyCode(globalDocument, eventNames, id, elementRef, only if (isStopPropagation) { e.stopPropagation(); } - dotNetHelper.invokeMethodAsync(netMethod, keyCode, e.key, e.ctrlKey, e.shiftKey, e.altKey, e.metaKey, e.location, targetId); + dotNetHelper.invokeMethodAsync(netMethod, keyCode, e.key, e.ctrlKey, e.shiftKey, e.altKey, e.metaKey, e.location, targetId, e.repeat); return; } } diff --git a/src/Core/Components/KeyCode/FluentKeyCodeEventArgs.cs b/src/Core/Components/KeyCode/FluentKeyCodeEventArgs.cs index 6328853ea..2f98a34b9 100644 --- a/src/Core/Components/KeyCode/FluentKeyCodeEventArgs.cs +++ b/src/Core/Components/KeyCode/FluentKeyCodeEventArgs.cs @@ -2,7 +2,7 @@ namespace Microsoft.FluentUI.AspNetCore.Components; public class FluentKeyCodeEventArgs { - internal static FluentKeyCodeEventArgs Instance(string name, int keyCode, string value, bool ctrlKey, bool shiftKey, bool altKey, bool metaKey, int location, string targetId) + internal static FluentKeyCodeEventArgs Instance(string name, int keyCode, string value, bool ctrlKey, bool shiftKey, bool altKey, bool metaKey, int location, string targetId, bool repeat) { return new FluentKeyCodeEventArgs { @@ -16,6 +16,7 @@ internal static FluentKeyCodeEventArgs Instance(string name, int keyCode, string AltKey = altKey, MetaKey = metaKey, TargetId = targetId, + Repeat = repeat }; } @@ -71,6 +72,11 @@ internal static FluentKeyCodeEventArgs Instance(string name, int keyCode, string ///
    public string TargetId { get; init; } = string.Empty; + /// + /// Gets a boolean value that is true if the given key is being held down such that it is automatically repeating. + /// + public bool Repeat { get; init; } = false; + /// /// Returns a string that represents the key pressed. /// Example: "Ctrl + Shift + A" diff --git a/tests/Core/KeyCodeProvider/FluentKeyCodeTests.razor b/tests/Core/KeyCodeProvider/FluentKeyCodeTests.razor index d76d026f5..bb4b94afe 100644 --- a/tests/Core/KeyCodeProvider/FluentKeyCodeTests.razor +++ b/tests/Core/KeyCodeProvider/FluentKeyCodeTests.razor @@ -16,7 +16,7 @@ // Arrange && Act var cut = Render(@
    ); - await cut.FindComponent().Instance.OnKeyDownRaisedAsync(65, "A", false, false, false, false, 0, "myZone"); + await cut.FindComponent().Instance.OnKeyDownRaisedAsync(65, "A", false, false, false, false, 0, "myZone", false); // Assert Assert.Equal(65, pressed.KeyCode); @@ -37,7 +37,7 @@ // Arrange && Act var cut = Render(@
    ); - await cut.FindComponent().Instance.OnKeyUpRaisedAsync(65, "A", false, false, false, false, 0, "myZone"); + await cut.FindComponent().Instance.OnKeyUpRaisedAsync(65, "A", false, false, false, false, 0, "myZone", false); // Assert Assert.Equal(65, pressed.KeyCode); @@ -51,7 +51,7 @@ // Arrange && Act var cut = Render(@Hello World); - await cut.FindComponent().Instance.OnKeyDownRaisedAsync(65, "A", false, false, false, false, 0, "myZone"); + await cut.FindComponent().Instance.OnKeyDownRaisedAsync(65, "A", false, false, false, false, 0, "myZone", false); // Assert Assert.Equal(65, pressed.KeyCode); @@ -72,7 +72,7 @@ // Arrange && Act var cut = Render(@
    ); - await cut.FindComponent().Instance.OnKeyDownRaisedAsync(65, "A", true, true, true, true, 0, "myZone"); + await cut.FindComponent().Instance.OnKeyDownRaisedAsync(65, "A", true, true, true, true, 0, "myZone", false); // Assert Assert.Equal(65, pressed.KeyCode); @@ -99,7 +99,7 @@ // Arrange && Act var cut = Render(@
    ); - await cut.FindComponent().Instance.OnKeyDownRaisedAsync(65, "A", ctrlKey, shiftKey, altKey, metaKey, 0, "myZone"); + await cut.FindComponent().Instance.OnKeyDownRaisedAsync(65, "A", ctrlKey, shiftKey, altKey, metaKey, 0, "myZone", false); // Assert Assert.Equal(expected, pressed.ToString()); diff --git a/tests/Core/List/FluentAutocompleteTests.razor b/tests/Core/List/FluentAutocompleteTests.razor index 013d1277b..4524b1b7a 100644 --- a/tests/Core/List/FluentAutocompleteTests.razor +++ b/tests/Core/List/FluentAutocompleteTests.razor @@ -433,7 +433,7 @@ await cut.InvokeAsync(async () => await cut.FindComponents() .ElementAt(popoverOpened ? 1 : 0) .Instance - .OnKeyDownRaisedAsync((int)key, string.Empty, false, false, false, false, 0, string.Empty)); + .OnKeyDownRaisedAsync((int)key, string.Empty, false, false, false, false, 0, string.Empty, false)); } // Search customers From 166eb60903ef0d99d646da29725fa0c8ef6f7a8e Mon Sep 17 00:00:00 2001 From: Denis Voituron Date: Tue, 5 Nov 2024 17:20:45 +0100 Subject: [PATCH 09/20] [Autocomplete] Fix the Autocomplete Clear button (#2906) --- src/Core/Components/List/FluentAutocomplete.razor | 6 ++---- src/Core/Components/List/ListComponentBase.razor.cs | 5 +---- ...luentAutocomplete_AutofocusAttribute.verified.razor.html | 4 ++-- ...mpleteTests.FluentAutocomplete_Empty.verified.razor.html | 4 ++-- ...luentAutocomplete_Keyboard-ArrowDown.verified.razor.html | 2 +- ....FluentAutocomplete_Keyboard-ArrowUp.verified.razor.html | 2 +- ...luentAutocomplete_Keyboard-Backspace.verified.razor.html | 2 +- ...s.FluentAutocomplete_Keyboard-Escape.verified.razor.html | 2 +- ...entAutocomplete_MaxAutoHeight_Opened.verified.razor.html | 2 +- ...ompleteTests.FluentAutocomplete_Name.verified.razor.html | 2 +- ...ithOverlayHiddenOnEmpty_HasNoOverlay.verified.razor.html | 4 ++-- ...uentAutocomplete_OnClear_ShowOverlay.verified.razor.html | 2 +- ...pleteTests.FluentAutocomplete_Opened.verified.razor.html | 2 +- ...s.FluentAutocomplete_SelectedOptions.verified.razor.html | 2 +- ...plete_SelectedOptions_OnDismissClick.verified.razor.html | 2 +- ...utocomplete_SelectedOptions_Template.verified.razor.html | 2 +- ...teTests.FluentAutocomplete_Templates.verified.razor.html | 2 +- ...teTests.FluentAutocomplete_ValueText.verified.razor.html | 4 ++-- ....FluentAutocomplete_ValueText_Clears.verified.razor.html | 2 +- ...Tests.FluentAutocomplete_Width_Empty.verified.razor.html | 4 ++-- 20 files changed, 26 insertions(+), 31 deletions(-) diff --git a/src/Core/Components/List/FluentAutocomplete.razor b/src/Core/Components/List/FluentAutocomplete.razor index 58f2205f0..129a6ef42 100644 --- a/src/Core/Components/List/FluentAutocomplete.razor +++ b/src/Core/Components/List/FluentAutocomplete.razor @@ -80,9 +80,8 @@ Style="cursor: pointer;" Slot="end" Title="Clear" + Focusable="true" @onfocus="@(e => { IsReachedMaxItems = false; IsMultiSelectOpened = false; })" - tabindex="0" - role="button" OnClick="@OnClearAsync" /> } } @@ -95,9 +94,8 @@ Style="cursor: pointer;" Slot="end" Title="Search" + Focusable="true" @onfocus="@(e => { IsReachedMaxItems = false; IsMultiSelectOpened = false; })" - tabindex="0" - role="button" OnClick="@OnDropDownExpandedAsync" /> } } diff --git a/src/Core/Components/List/ListComponentBase.razor.cs b/src/Core/Components/List/ListComponentBase.razor.cs index 9fa23b31e..61573d025 100644 --- a/src/Core/Components/List/ListComponentBase.razor.cs +++ b/src/Core/Components/List/ListComponentBase.razor.cs @@ -536,10 +536,7 @@ protected virtual async Task RaiseChangedEventsAsync() { if (SelectedOptionsChanged.HasDelegate) { - if (_selectedOptions.Count != 0) - { - await SelectedOptionsChanged.InvokeAsync(_selectedOptions); - } + await SelectedOptionsChanged.InvokeAsync(_selectedOptions); } } else diff --git a/tests/Core/List/FluentAutocompleteTests.FluentAutocomplete_AutofocusAttribute.verified.razor.html b/tests/Core/List/FluentAutocompleteTests.FluentAutocomplete_AutofocusAttribute.verified.razor.html index 437af7ddb..edb9ef5c9 100644 --- a/tests/Core/List/FluentAutocompleteTests.FluentAutocomplete_AutofocusAttribute.verified.razor.html +++ b/tests/Core/List/FluentAutocompleteTests.FluentAutocomplete_AutofocusAttribute.verified.razor.html @@ -1,7 +1,7 @@
    -
    - - - Gets the first (optional) SelectColumn - - Constructs an instance of . @@ -5221,6 +5216,7 @@ + @@ -5235,6 +5231,7 @@ + diff --git a/src/Core/Components/DataGrid/Columns/SelectColumn.cs b/src/Core/Components/DataGrid/Columns/SelectColumn.cs index 2d185325b..5eaa739eb 100644 --- a/src/Core/Components/DataGrid/Columns/SelectColumn.cs +++ b/src/Core/Components/DataGrid/Columns/SelectColumn.cs @@ -70,6 +70,7 @@ public IEnumerable SelectedItems { _selectedItems.Clear(); _selectedItems.AddRange(value); + SelectAll = false; } } } @@ -518,7 +519,7 @@ internal async Task OnClickAllAsync(MouseEventArgs e) _selectedItems.Clear(); if (SelectAll == true) { - _selectedItems.AddRange(InternalGridContext.Items); + _selectedItems.AddRange(InternalGridContext.Grid.Items?.ToArray() ?? InternalGridContext.Items); } if (SelectedItemsChanged.HasDelegate) diff --git a/src/Core/Components/DataGrid/FluentDataGrid.razor.cs b/src/Core/Components/DataGrid/FluentDataGrid.razor.cs index aeaf7ea99..620c708d6 100644 --- a/src/Core/Components/DataGrid/FluentDataGrid.razor.cs +++ b/src/Core/Components/DataGrid/FluentDataGrid.razor.cs @@ -245,11 +245,6 @@ public partial class FluentDataGrid : FluentComponentBase, IHandleEve [Parameter] public bool AutoFit { get; set; } - /// - /// Gets the first (optional) SelectColumn - /// - internal IEnumerable> SelectColumns => _columns.OfType>(); - private ElementReference? _gridReference; private Virtualize<(int, TGridItem)>? _virtualizeComponent; diff --git a/src/Core/Components/KeyCode/FluentKeyCode.razor.cs b/src/Core/Components/KeyCode/FluentKeyCode.razor.cs index 13c8db769..4db296506 100644 --- a/src/Core/Components/KeyCode/FluentKeyCode.razor.cs +++ b/src/Core/Components/KeyCode/FluentKeyCode.razor.cs @@ -149,6 +149,7 @@ protected async override Task OnAfterRenderAsync(bool firstRender) /// /// /// + /// /// [JSInvokable] public async Task OnKeyDownRaisedAsync(int keyCode, string value, bool ctrlKey, bool shiftKey, bool altKey, bool metaKey, int location, string targetId, bool repeat) @@ -170,6 +171,7 @@ public async Task OnKeyDownRaisedAsync(int keyCode, string value, bool ctrlKey, /// /// /// + /// /// [JSInvokable] public async Task OnKeyUpRaisedAsync(int keyCode, string value, bool ctrlKey, bool shiftKey, bool altKey, bool metaKey, int location, string targetId, bool repeat) diff --git a/tests/Core/DataGrid/FluentDataGridColumSelectTests.razor b/tests/Core/DataGrid/FluentDataGridColumSelectTests.razor index 4ab346000..eba852bc7 100644 --- a/tests/Core/DataGrid/FluentDataGridColumSelectTests.razor +++ b/tests/Core/DataGrid/FluentDataGridColumSelectTests.razor @@ -67,7 +67,7 @@ ); // Pre-Assert - Assert.Equal(1, cut.FindAll("svg").Count); + Assert.Single(cut.FindAll("svg")); Assert.Empty(cut.FindAll("svg[row-selected]")); Assert.Empty(SelectedItems); @@ -131,7 +131,7 @@ ); // Pre-Assert - Assert.Equal(1, cut.FindAll("svg").Count); + Assert.Single(cut.FindAll("svg")); Assert.Empty(cut.FindAll("svg[row-selected]")); Assert.Empty(items.Where(i => i.Selected)); @@ -227,8 +227,8 @@ // Act - Click and select Row 1 await ClickOnRowAsync(cut, row: 1); - Assert.Equal(1, cut.FindAll("svg[row-selected]").Count); - Assert.Equal(1, SelectedItems.Count()); + Assert.Single(cut.FindAll("svg[row-selected]")); + Assert.Single(SelectedItems); // Act - Click and unselect Row 1 await ClickOnRowAsync(cut, row: 1); @@ -301,8 +301,8 @@ // Act - Click and select Row 1 await ClickOnRowAsync(cut, row: 1); - Assert.Equal(1, cut.FindAll("svg[row-selected]").Count); - Assert.Equal(1, items.Where(i => i.Selected).Count()); + Assert.Single(cut.FindAll("svg[row-selected]")); + Assert.Single(items.Where(i => i.Selected)); // Act - Click and unselect Row 1 await ClickOnRowAsync(cut, row: 1); diff --git a/tests/Core/Utilities/DebounceActionTests.cs b/tests/Core/Utilities/DebounceActionTests.cs index bfdd846dc..d1a3e732e 100644 --- a/tests/Core/Utilities/DebounceActionTests.cs +++ b/tests/Core/Utilities/DebounceActionTests.cs @@ -76,7 +76,7 @@ public async Task Debounce_MultipleCalls() Assert.Equal(1, actionCalledCount); } - [Fact] + [Fact(Skip = "Locally validated, but some CI/CD failures are due to poor server performance.")] public async Task Debounce_MultipleCalls_Async() { var watcher = Stopwatch.StartNew(); From b56bcd36ba3165d7bc4ac3297cfc99a9cf5bfeb5 Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Sun, 10 Nov 2024 15:48:54 +0100 Subject: [PATCH 13/20] Add RTL specific styling for fixing web component bug. Fix #2898 (#2917) --- src/Core/Components/Accordion/FluentAccordionItem.razor.css | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/Core/Components/Accordion/FluentAccordionItem.razor.css diff --git a/src/Core/Components/Accordion/FluentAccordionItem.razor.css b/src/Core/Components/Accordion/FluentAccordionItem.razor.css new file mode 100644 index 000000000..252a4237b --- /dev/null +++ b/src/Core/Components/Accordion/FluentAccordionItem.razor.css @@ -0,0 +1,3 @@ +[dir='rtl'] fluent-accordion-item::part(button) { + text-align: right; +} From 90524613af2bd5af75cac49bdadc999ca605b15a Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Sun, 10 Nov 2024 17:28:33 +0100 Subject: [PATCH 14/20] [TreeItem] Only pass initially selected state to the web component (#2916) * Fix #2911 by only passing initially selected state to the fluent-tree-item WC * Make GetFluewtnTreeItem use InitiallySelected * Update IssueTester.razor --------- Co-authored-by: Denis Voituron --- examples/Demo/Shared/Pages/Lab/IssueTester.razor | 2 +- src/Core/Components/TreeView/FluentTreeItem.razor | 2 +- src/Core/Components/TreeView/FluentTreeItem.razor.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/Demo/Shared/Pages/Lab/IssueTester.razor b/examples/Demo/Shared/Pages/Lab/IssueTester.razor index 5f282702b..8b1378917 100644 --- a/examples/Demo/Shared/Pages/Lab/IssueTester.razor +++ b/examples/Demo/Shared/Pages/Lab/IssueTester.razor @@ -1 +1 @@ - \ No newline at end of file + diff --git a/src/Core/Components/TreeView/FluentTreeItem.razor b/src/Core/Components/TreeView/FluentTreeItem.razor index 39390d0fd..fb5adcad0 100644 --- a/src/Core/Components/TreeView/FluentTreeItem.razor +++ b/src/Core/Components/TreeView/FluentTreeItem.razor @@ -7,7 +7,7 @@ style="@Style" id="@Id" expanded="@Expanded" - selected="@Selected" + selected="@InitiallySelected" disabled="@Disabled" @onselectedchange="@HandleSelectedChangeAsync" @onexpandedchange="@HandleExpandedChangeAsync" diff --git a/src/Core/Components/TreeView/FluentTreeItem.razor.cs b/src/Core/Components/TreeView/FluentTreeItem.razor.cs index 8642f5f28..0cbcf6619 100644 --- a/src/Core/Components/TreeView/FluentTreeItem.razor.cs +++ b/src/Core/Components/TreeView/FluentTreeItem.razor.cs @@ -211,7 +211,7 @@ internal static RenderFragment GetFluentTreeItem(FluentTreeView owner, ITreeView builder.AddAttribute(i++, "Id", item.Id); builder.AddAttribute(i++, "Items", item.Items); builder.AddAttribute(i++, "Text", item.Text); - builder.AddAttribute(i++, "Selected", owner.SelectedItem == item); + builder.AddAttribute(i++, "InitiallySelected", owner.SelectedItem == item); builder.AddAttribute(i++, "Expanded", item.Expanded); builder.AddAttribute(i++, "Disabled", item.Disabled); builder.AddAttribute(i++, "IconCollapsed", item.IconCollapsed); From c0499840c38d06fd6d2040117784ce0d1ba182b4 Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Mon, 11 Nov 2024 10:53:40 +0100 Subject: [PATCH 15/20] Update to Fluent UI System Icons 1.1.265 (#2920) --- WHATSNEW.md | 41 ++++++++++++++++--- examples/Demo/Shared/wwwroot/docs/WhatsNew.md | 41 ++++++++++++++++--- src/Assets/FluentUI.Icons/Icons/Filled16.cs | 6 ++- src/Assets/FluentUI.Icons/Icons/Filled20.cs | 7 +++- src/Assets/FluentUI.Icons/Icons/Filled24.cs | 8 +++- src/Assets/FluentUI.Icons/Icons/Filled28.cs | 3 ++ src/Assets/FluentUI.Icons/Icons/Filled32.cs | 6 ++- src/Assets/FluentUI.Icons/Icons/Filled48.cs | 3 ++ src/Assets/FluentUI.Icons/Icons/Light32.cs | 1 + src/Assets/FluentUI.Icons/Icons/Regular16.cs | 6 ++- src/Assets/FluentUI.Icons/Icons/Regular20.cs | 7 +++- src/Assets/FluentUI.Icons/Icons/Regular24.cs | 8 +++- src/Assets/FluentUI.Icons/Icons/Regular28.cs | 3 ++ src/Assets/FluentUI.Icons/Icons/Regular32.cs | 6 ++- src/Assets/FluentUI.Icons/Icons/Regular48.cs | 3 ++ 15 files changed, 125 insertions(+), 24 deletions(-) diff --git a/WHATSNEW.md b/WHATSNEW.md index b6fa08354..64ac044f0 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -1,35 +1,64 @@ ## V4.10.4 +### General +- \[General\] Supports .NET 9 GA version + +### Components +- \[Accordion\] Fix RTL specific styling ([#2917](https://github.com/microsoft/fluentui-blazor/pull/2917)) +- \[Autocomplete\] Fix Icon Titles (Dismiss and Search) and delete predefined element ([#2891](https://github.com/microsoft/fluentui-blazor/pull/2891)) +- \[Autocomplete\] Fix the Autocomplete Clear button ([#2906](https://github.com/microsoft/fluentui-blazor/pull/2906)) +- \[Calendar\] Fix the Calendar disabled day in RTL direction ([#2909](https://github.com/microsoft/fluentui-blazor/pull/2909)) +- \[DataGrid\] Fix `SelectAll` after reloading data when the `Virtualize` is set ([#2915](https://github.com/microsoft/fluentui-blazor/pull/2915)) +- \[DataGrid\] Remove optimalization check as it can break in certain scenarios ([#2875](https://github.com/microsoft/fluentui-blazor/pull/2875)) +- \[KeyCode\] Add a new `StopRepeat` property ([#2908](https://github.com/microsoft/fluentui-blazor/pull/2908)) +- \[MessageBar\] Implement ClearAfterNavigation on provider level ([#2919](https://github.com/microsoft/fluentui-blazor/pull/2919)) +- \[TreeItem\] Only pass initially selected state to the web component ([#2916](https://github.com/microsoft/fluentui-blazor/pull/2916)) + +### Demo site and documentation +- \[Docs\] Update README with Blazor Hybrid workaround note ([#2892](https://github.com/microsoft/fluentui-blazor/pull/2892)) + ### Icons -- Update to Fluent UI System Icons 1.1.263 (changes since 1.1.261) +- Update to Fluent UI System Icons 1.1.265 (changes since 1.1.261) **What's new (Name / Size(s) / Variant(s))** + - Animal Paw Print / 16, 20, 24, 28, 32, 48 / Filled & Regular - Arrow Bounce / 12, 28, 48 / Filled & Regular + - Arrow Clockwise Dashes / 28, 48 / Filled & Regular + - Arrow Clockwise Dashes Settings / 16, 20, 24, 28, 32, 48 / Filled & Regular - Arrow Down Left / 12, 28 / Filled & Regular - Arrow Flow Diagonal Up Right / 12, 28, 48 / Filled & Regular - - Arrow Up Right Dashes / 12, 20, 24, 28, 32, 48 / Filled & Regular - Arrow Up Right / 12, 28 / Filled & Regular - - Arrow Wrap Up To Down / 20, 32 / Filled & Regular + - Arrow Up Right Dashes / 12, 20, 24, 28, 32, 48 / Filled & Regular - Arrow Wrap / 32 / Filled & Regular + - Arrow Wrap Up To Down / 20, 32 / Filled & Regular + - Chat Off / 16 / Filled & Regular - Coin Multiple / 16, 24 / Filled & Regular - Comment Badge / 16, 20, 24 / Filled & Regular - - Data Usage Checkmark / 16, 20, 24, 28, 32, 48 / Filled & Regular + - Connected / 24, 32 / Filled & Regular - Data Usage / 28, 32, 48 / Filled & Regular + - Data Usage Checkmark / 16, 20, 24, 28, 32, 48 / Filled & Regular - Document One Page Multiple / 16, 20, 24 / Filled & Regular + - Document One Page Multiple / 16, 20, 24 / Filled & Regular + - Document One Page Multiple Sparkle / 16, 20, 24 / Filled & Regular - Document One Page Multiple Sparkle / 16, 20, 24 / Filled & Regular + - Lightbulb / 32 / Light - Line Horizontal 1 Dash Dot Dash / 20 / Filled & Regular - Line Horizontal 1 Dot / 20 / Filled & Regular - Line Horizontal 3 / 16, 24, 28, 32, 48 / Filled & Regular - Navigation / 28, 32, 48 / Filled & Regular - Pause Circle / 16 / Filled & Regular - - Stack Off / 16, 20, 24, 28, 32, 48 / Filled & Regular + - Square Text Arrow Repeat All / 16, 20, 24 / Filled & Regular - Stack / 28, 48 / Filled & Regular + - Stack Off / 16, 20, 24, 28, 32, 48 / Filled & Regular - Text Bullet List Square / 28 / Filled & Regular - - TextBox Checkmark / 16, 20, 24, 28, 32, 48 / Filled & Regular - TextBox / 20, 28, 32, 48 / Filled & Regular + - TextBox Checkmark / 16, 20, 24, 28, 32, 48 / Filled & Regular + - Translate / 32 / Filled & Regular **What's updated (Name / Size(s) / Variant(s))** - Add Circle / 16 / Filled & Regular + - Arrow Clockwise Dashes / 16, 20, 24, 32 / Filled & Regular + - Arrow Counterclockwise Dashes / 20, 24 / Filled & Regular - Coin Multiple / 20 / Filled & Regular - Subtract Circle Arrow Back / 16 / Filled & Regular - Subtract Circle Arrow Forward / 16 / Filled & Regular diff --git a/examples/Demo/Shared/wwwroot/docs/WhatsNew.md b/examples/Demo/Shared/wwwroot/docs/WhatsNew.md index 0ca254dc7..9d781f37f 100644 --- a/examples/Demo/Shared/wwwroot/docs/WhatsNew.md +++ b/examples/Demo/Shared/wwwroot/docs/WhatsNew.md @@ -1,35 +1,64 @@ ## V4.10.4 +### General +- \[General\] Supports .NET 9 GA version + +### Components +- \[Accordion\] Fix RTL specific styling ([#2917](https://github.com/microsoft/fluentui-blazor/pull/2917)) +- \[Autocomplete\] Fix Icon Titles (Dismiss and Search) and delete predefined element ([#2891](https://github.com/microsoft/fluentui-blazor/pull/2891)) +- \[Autocomplete\] Fix the Autocomplete Clear button ([#2906](https://github.com/microsoft/fluentui-blazor/pull/2906)) +- \[Calendar\] Fix the Calendar disabled day in RTL direction ([#2909](https://github.com/microsoft/fluentui-blazor/pull/2909)) +- \[DataGrid\] Fix `SelectAll` after reloading data when the `Virtualize` is set ([#2915](https://github.com/microsoft/fluentui-blazor/pull/2915)) +- \[DataGrid\] Remove optimalization check as it can break in certain scenarios ([#2875](https://github.com/microsoft/fluentui-blazor/pull/2875)) +- \[KeyCode\] Add a new `StopRepeat` property ([#2908](https://github.com/microsoft/fluentui-blazor/pull/2908)) +- \[MessageBar\] Implement ClearAfterNavigation on provider level ([#2919](https://github.com/microsoft/fluentui-blazor/pull/2919)) +- \[TreeItem\] Only pass initially selected state to the web component ([#2916](https://github.com/microsoft/fluentui-blazor/pull/2916)) + +### Demo site and documentation +- \[Docs\] Update README with Blazor Hybrid workaround note ([#2892](https://github.com/microsoft/fluentui-blazor/pull/2892)) + ### Icons -- Update to Fluent UI System Icons 1.1.263 (changes since 1.1.261) +- Update to Fluent UI System Icons 1.1.265 (changes since 1.1.261) **What's new (Name / Size(s) / Variant(s))** + - Animal Paw Print / 16, 20, 24, 28, 32, 48 / Filled & Regular - Arrow Bounce / 12, 28, 48 / Filled & Regular + - Arrow Clockwise Dashes / 28, 48 / Filled & Regular + - Arrow Clockwise Dashes Settings / 16, 20, 24, 28, 32, 48 / Filled & Regular - Arrow Down Left / 12, 28 / Filled & Regular - Arrow Flow Diagonal Up Right / 12, 28, 48 / Filled & Regular - - Arrow Up Right Dashes / 12, 20, 24, 28, 32, 48 / Filled & Regular - Arrow Up Right / 12, 28 / Filled & Regular - - Arrow Wrap Up To Down / 20, 32 / Filled & Regular + - Arrow Up Right Dashes / 12, 20, 24, 28, 32, 48 / Filled & Regular - Arrow Wrap / 32 / Filled & Regular + - Arrow Wrap Up To Down / 20, 32 / Filled & Regular + - Chat Off / 16 / Filled & Regular - Coin Multiple / 16, 24 / Filled & Regular - Comment Badge / 16, 20, 24 / Filled & Regular - - Data Usage Checkmark / 16, 20, 24, 28, 32, 48 / Filled & Regular + - Connected / 24, 32 / Filled & Regular - Data Usage / 28, 32, 48 / Filled & Regular + - Data Usage Checkmark / 16, 20, 24, 28, 32, 48 / Filled & Regular - Document One Page Multiple / 16, 20, 24 / Filled & Regular + - Document One Page Multiple / 16, 20, 24 / Filled & Regular + - Document One Page Multiple Sparkle / 16, 20, 24 / Filled & Regular - Document One Page Multiple Sparkle / 16, 20, 24 / Filled & Regular + - Lightbulb / 32 / Light - Line Horizontal 1 Dash Dot Dash / 20 / Filled & Regular - Line Horizontal 1 Dot / 20 / Filled & Regular - Line Horizontal 3 / 16, 24, 28, 32, 48 / Filled & Regular - Navigation / 28, 32, 48 / Filled & Regular - Pause Circle / 16 / Filled & Regular - - Stack Off / 16, 20, 24, 28, 32, 48 / Filled & Regular + - Square Text Arrow Repeat All / 16, 20, 24 / Filled & Regular - Stack / 28, 48 / Filled & Regular + - Stack Off / 16, 20, 24, 28, 32, 48 / Filled & Regular - Text Bullet List Square / 28 / Filled & Regular - - TextBox Checkmark / 16, 20, 24, 28, 32, 48 / Filled & Regular - TextBox / 20, 28, 32, 48 / Filled & Regular + - TextBox Checkmark / 16, 20, 24, 28, 32, 48 / Filled & Regular + - Translate / 32 / Filled & Regular **What's updated (Name / Size(s) / Variant(s))** - Add Circle / 16 / Filled & Regular + - Arrow Clockwise Dashes / 16, 20, 24, 32 / Filled & Regular + - Arrow Counterclockwise Dashes / 20, 24 / Filled & Regular - Coin Multiple / 20 / Filled & Regular - Subtract Circle Arrow Back / 16 / Filled & Regular - Subtract Circle Arrow Forward / 16 / Filled & Regular diff --git a/src/Assets/FluentUI.Icons/Icons/Filled16.cs b/src/Assets/FluentUI.Icons/Icons/Filled16.cs index 431ee95ab..df542dd73 100644 --- a/src/Assets/FluentUI.Icons/Icons/Filled16.cs +++ b/src/Assets/FluentUI.Icons/Icons/Filled16.cs @@ -45,6 +45,7 @@ public class AlignStretchVertical : Icon { public AlignStretchVertical() : base( public class AlignTop : Icon { public AlignTop() : base("AlignTop", IconVariant.Filled, IconSize.Size16, "") { } } public class AnimalCat : Icon { public AnimalCat() : base("AnimalCat", IconVariant.Filled, IconSize.Size16, "") { } } public class AnimalDog : Icon { public AnimalDog() : base("AnimalDog", IconVariant.Filled, IconSize.Size16, "") { } } + public class AnimalPawPrint : Icon { public AnimalPawPrint() : base("AnimalPawPrint", IconVariant.Filled, IconSize.Size16, "") { } } public class AnimalRabbit : Icon { public AnimalRabbit() : base("AnimalRabbit", IconVariant.Filled, IconSize.Size16, "") { } } public class AnimalTurtle : Icon { public AnimalTurtle() : base("AnimalTurtle", IconVariant.Filled, IconSize.Size16, "") { } } public class AppFolder : Icon { public AppFolder() : base("AppFolder", IconVariant.Filled, IconSize.Size16, "") { } } @@ -68,7 +69,8 @@ public class ArrowCircleUp : Icon { public ArrowCircleUp() : base("ArrowCircleUp public class ArrowCircleUpLeft : Icon { public ArrowCircleUpLeft() : base("ArrowCircleUpLeft", IconVariant.Filled, IconSize.Size16, "") { } } public class ArrowCircleUpRight : Icon { public ArrowCircleUpRight() : base("ArrowCircleUpRight", IconVariant.Filled, IconSize.Size16, "") { } } public class ArrowClockwise : Icon { public ArrowClockwise() : base("ArrowClockwise", IconVariant.Filled, IconSize.Size16, "") { } } - public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Filled, IconSize.Size16, "") { } } + public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Filled, IconSize.Size16, "") { } } + public class ArrowClockwiseDashesSettings : Icon { public ArrowClockwiseDashesSettings() : base("ArrowClockwiseDashesSettings", IconVariant.Filled, IconSize.Size16, "") { } } public class ArrowCollapseAll : Icon { public ArrowCollapseAll() : base("ArrowCollapseAll", IconVariant.Filled, IconSize.Size16, "") { } } public class ArrowCounterclockwise : Icon { public ArrowCounterclockwise() : base("ArrowCounterclockwise", IconVariant.Filled, IconSize.Size16, "") { } } public class ArrowCurveDownLeft : Icon { public ArrowCurveDownLeft() : base("ArrowCurveDownLeft", IconVariant.Filled, IconSize.Size16, "") { } } @@ -290,6 +292,7 @@ public class ChatEmpty : Icon { public ChatEmpty() : base("ChatEmpty", IconVaria public class ChatLock : Icon { public ChatLock() : base("ChatLock", IconVariant.Filled, IconSize.Size16, "") { } } public class ChatMultiple : Icon { public ChatMultiple() : base("ChatMultiple", IconVariant.Filled, IconSize.Size16, "") { } } public class ChatMultipleHeart : Icon { public ChatMultipleHeart() : base("ChatMultipleHeart", IconVariant.Filled, IconSize.Size16, "") { } } + public class ChatOff : Icon { public ChatOff() : base("ChatOff", IconVariant.Filled, IconSize.Size16, "") { } } public class ChatSettings : Icon { public ChatSettings() : base("ChatSettings", IconVariant.Filled, IconSize.Size16, "") { } } public class ChatSparkle : Icon { public ChatSparkle() : base("ChatSparkle", IconVariant.Filled, IconSize.Size16, "") { } } public class ChatWarning : Icon { public ChatWarning() : base("ChatWarning", IconVariant.Filled, IconSize.Size16, "") { } } @@ -1225,6 +1228,7 @@ public class SquareHintArrowBack : Icon { public SquareHintArrowBack() : base("S public class SquareHintHexagon : Icon { public SquareHintHexagon() : base("SquareHintHexagon", IconVariant.Filled, IconSize.Size16, "") { } } public class SquareHintSparkles : Icon { public SquareHintSparkles() : base("SquareHintSparkles", IconVariant.Filled, IconSize.Size16, "") { } } public class SquareMultiple : Icon { public SquareMultiple() : base("SquareMultiple", IconVariant.Filled, IconSize.Size16, "") { } } + public class SquareTextArrowRepeatAll : Icon { public SquareTextArrowRepeatAll() : base("SquareTextArrowRepeatAll", IconVariant.Filled, IconSize.Size16, "") { } } public class Stack : Icon { public Stack() : base("Stack", IconVariant.Filled, IconSize.Size16, "") { } } public class StackOff : Icon { public StackOff() : base("StackOff", IconVariant.Filled, IconSize.Size16, "") { } } public class StackStar : Icon { public StackStar() : base("StackStar", IconVariant.Filled, IconSize.Size16, "") { } } diff --git a/src/Assets/FluentUI.Icons/Icons/Filled20.cs b/src/Assets/FluentUI.Icons/Icons/Filled20.cs index 97c728e56..546052242 100644 --- a/src/Assets/FluentUI.Icons/Icons/Filled20.cs +++ b/src/Assets/FluentUI.Icons/Icons/Filled20.cs @@ -59,6 +59,7 @@ public class AlignStretchVertical : Icon { public AlignStretchVertical() : base( public class AlignTop : Icon { public AlignTop() : base("AlignTop", IconVariant.Filled, IconSize.Size20, "") { } } public class AnimalCat : Icon { public AnimalCat() : base("AnimalCat", IconVariant.Filled, IconSize.Size20, "") { } } public class AnimalDog : Icon { public AnimalDog() : base("AnimalDog", IconVariant.Filled, IconSize.Size20, "") { } } + public class AnimalPawPrint : Icon { public AnimalPawPrint() : base("AnimalPawPrint", IconVariant.Filled, IconSize.Size20, "") { } } public class AnimalRabbit : Icon { public AnimalRabbit() : base("AnimalRabbit", IconVariant.Filled, IconSize.Size20, "") { } } public class AnimalRabbitOff : Icon { public AnimalRabbitOff() : base("AnimalRabbitOff", IconVariant.Filled, IconSize.Size20, "") { } } public class AnimalTurtle : Icon { public AnimalTurtle() : base("AnimalTurtle", IconVariant.Filled, IconSize.Size20, "") { } } @@ -101,10 +102,11 @@ public class ArrowCircleUp : Icon { public ArrowCircleUp() : base("ArrowCircleUp public class ArrowCircleUpLeft : Icon { public ArrowCircleUpLeft() : base("ArrowCircleUpLeft", IconVariant.Filled, IconSize.Size20, "") { } } public class ArrowCircleUpRight : Icon { public ArrowCircleUpRight() : base("ArrowCircleUpRight", IconVariant.Filled, IconSize.Size20, "") { } } public class ArrowClockwise : Icon { public ArrowClockwise() : base("ArrowClockwise", IconVariant.Filled, IconSize.Size20, "") { } } - public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Filled, IconSize.Size20, "") { } } + public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Filled, IconSize.Size20, "") { } } + public class ArrowClockwiseDashesSettings : Icon { public ArrowClockwiseDashesSettings() : base("ArrowClockwiseDashesSettings", IconVariant.Filled, IconSize.Size20, "") { } } public class ArrowCollapseAll : Icon { public ArrowCollapseAll() : base("ArrowCollapseAll", IconVariant.Filled, IconSize.Size20, "") { } } public class ArrowCounterclockwise : Icon { public ArrowCounterclockwise() : base("ArrowCounterclockwise", IconVariant.Filled, IconSize.Size20, "") { } } - public class ArrowCounterclockwiseDashes : Icon { public ArrowCounterclockwiseDashes() : base("ArrowCounterclockwiseDashes", IconVariant.Filled, IconSize.Size20, "") { } } + public class ArrowCounterclockwiseDashes : Icon { public ArrowCounterclockwiseDashes() : base("ArrowCounterclockwiseDashes", IconVariant.Filled, IconSize.Size20, "") { } } public class ArrowCurveDownLeft : Icon { public ArrowCurveDownLeft() : base("ArrowCurveDownLeft", IconVariant.Filled, IconSize.Size20, "") { } } public class ArrowCurveDownRight : Icon { public ArrowCurveDownRight() : base("ArrowCurveDownRight", IconVariant.Filled, IconSize.Size20, "") { } } public class ArrowCurveUpLeft : Icon { public ArrowCurveUpLeft() : base("ArrowCurveUpLeft", IconVariant.Filled, IconSize.Size20, "") { } } @@ -2045,6 +2047,7 @@ public class SquareHintSparkles : Icon { public SquareHintSparkles() : base("Squ public class SquareMultiple : Icon { public SquareMultiple() : base("SquareMultiple", IconVariant.Filled, IconSize.Size20, "") { } } public class SquareShadow : Icon { public SquareShadow() : base("SquareShadow", IconVariant.Filled, IconSize.Size20, "") { } } public class SquaresNested : Icon { public SquaresNested() : base("SquaresNested", IconVariant.Filled, IconSize.Size20, "") { } } + public class SquareTextArrowRepeatAll : Icon { public SquareTextArrowRepeatAll() : base("SquareTextArrowRepeatAll", IconVariant.Filled, IconSize.Size20, "") { } } public class Stack : Icon { public Stack() : base("Stack", IconVariant.Filled, IconSize.Size20, "") { } } public class StackAdd : Icon { public StackAdd() : base("StackAdd", IconVariant.Filled, IconSize.Size20, "") { } } public class StackArrowForward : Icon { public StackArrowForward() : base("StackArrowForward", IconVariant.Filled, IconSize.Size20, "") { } } diff --git a/src/Assets/FluentUI.Icons/Icons/Filled24.cs b/src/Assets/FluentUI.Icons/Icons/Filled24.cs index 230086577..bf0780fe2 100644 --- a/src/Assets/FluentUI.Icons/Icons/Filled24.cs +++ b/src/Assets/FluentUI.Icons/Icons/Filled24.cs @@ -48,6 +48,7 @@ public class AlignStraighten : Icon { public AlignStraighten() : base("AlignStra public class AlignTop : Icon { public AlignTop() : base("AlignTop", IconVariant.Filled, IconSize.Size24, "") { } } public class AnimalCat : Icon { public AnimalCat() : base("AnimalCat", IconVariant.Filled, IconSize.Size24, "") { } } public class AnimalDog : Icon { public AnimalDog() : base("AnimalDog", IconVariant.Filled, IconSize.Size24, "") { } } + public class AnimalPawPrint : Icon { public AnimalPawPrint() : base("AnimalPawPrint", IconVariant.Filled, IconSize.Size24, "") { } } public class AnimalRabbit : Icon { public AnimalRabbit() : base("AnimalRabbit", IconVariant.Filled, IconSize.Size24, "") { } } public class AnimalTurtle : Icon { public AnimalTurtle() : base("AnimalTurtle", IconVariant.Filled, IconSize.Size24, "") { } } public class AppFolder : Icon { public AppFolder() : base("AppFolder", IconVariant.Filled, IconSize.Size24, "") { } } @@ -86,10 +87,11 @@ public class ArrowCircleUp : Icon { public ArrowCircleUp() : base("ArrowCircleUp public class ArrowCircleUpLeft : Icon { public ArrowCircleUpLeft() : base("ArrowCircleUpLeft", IconVariant.Filled, IconSize.Size24, "") { } } public class ArrowCircleUpRight : Icon { public ArrowCircleUpRight() : base("ArrowCircleUpRight", IconVariant.Filled, IconSize.Size24, "") { } } public class ArrowClockwise : Icon { public ArrowClockwise() : base("ArrowClockwise", IconVariant.Filled, IconSize.Size24, "") { } } - public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Filled, IconSize.Size24, "") { } } + public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Filled, IconSize.Size24, "") { } } + public class ArrowClockwiseDashesSettings : Icon { public ArrowClockwiseDashesSettings() : base("ArrowClockwiseDashesSettings", IconVariant.Filled, IconSize.Size24, "") { } } public class ArrowCollapseAll : Icon { public ArrowCollapseAll() : base("ArrowCollapseAll", IconVariant.Filled, IconSize.Size24, "") { } } public class ArrowCounterclockwise : Icon { public ArrowCounterclockwise() : base("ArrowCounterclockwise", IconVariant.Filled, IconSize.Size24, "") { } } - public class ArrowCounterclockwiseDashes : Icon { public ArrowCounterclockwiseDashes() : base("ArrowCounterclockwiseDashes", IconVariant.Filled, IconSize.Size24, "") { } } + public class ArrowCounterclockwiseDashes : Icon { public ArrowCounterclockwiseDashes() : base("ArrowCounterclockwiseDashes", IconVariant.Filled, IconSize.Size24, "") { } } public class ArrowCurveDownLeft : Icon { public ArrowCurveDownLeft() : base("ArrowCurveDownLeft", IconVariant.Filled, IconSize.Size24, "") { } } public class ArrowDown : Icon { public ArrowDown() : base("ArrowDown", IconVariant.Filled, IconSize.Size24, "") { } } public class ArrowDownExclamation : Icon { public ArrowDownExclamation() : base("ArrowDownExclamation", IconVariant.Filled, IconSize.Size24, "") { } } @@ -592,6 +594,7 @@ public class Component2DoubleTapSwipeDown : Icon { public Component2DoubleTapSwi public class Component2DoubleTapSwipeUp : Icon { public Component2DoubleTapSwipeUp() : base("Component2DoubleTapSwipeUp", IconVariant.Filled, IconSize.Size24, "") { } } public class Compose : Icon { public Compose() : base("Compose", IconVariant.Filled, IconSize.Size24, "") { } } public class ConferenceRoom : Icon { public ConferenceRoom() : base("ConferenceRoom", IconVariant.Filled, IconSize.Size24, "") { } } + public class Connected : Icon { public Connected() : base("Connected", IconVariant.Filled, IconSize.Size24, "") { } } public class Connector : Icon { public Connector() : base("Connector", IconVariant.Filled, IconSize.Size24, "") { } } public class ContactCard : Icon { public ContactCard() : base("ContactCard", IconVariant.Filled, IconSize.Size24, "") { } } public class ContactCardGroup : Icon { public ContactCardGroup() : base("ContactCardGroup", IconVariant.Filled, IconSize.Size24, "") { } } @@ -1808,6 +1811,7 @@ public class SquareHintApps : Icon { public SquareHintApps() : base("SquareHintA public class SquareHintHexagon : Icon { public SquareHintHexagon() : base("SquareHintHexagon", IconVariant.Filled, IconSize.Size24, "") { } } public class SquareHintSparkles : Icon { public SquareHintSparkles() : base("SquareHintSparkles", IconVariant.Filled, IconSize.Size24, "") { } } public class SquareMultiple : Icon { public SquareMultiple() : base("SquareMultiple", IconVariant.Filled, IconSize.Size24, "") { } } + public class SquareTextArrowRepeatAll : Icon { public SquareTextArrowRepeatAll() : base("SquareTextArrowRepeatAll", IconVariant.Filled, IconSize.Size24, "") { } } public class Stack : Icon { public Stack() : base("Stack", IconVariant.Filled, IconSize.Size24, "") { } } public class StackAdd : Icon { public StackAdd() : base("StackAdd", IconVariant.Filled, IconSize.Size24, "") { } } public class StackArrowForward : Icon { public StackArrowForward() : base("StackArrowForward", IconVariant.Filled, IconSize.Size24, "") { } } diff --git a/src/Assets/FluentUI.Icons/Icons/Filled28.cs b/src/Assets/FluentUI.Icons/Icons/Filled28.cs index f12a650c9..84d61663f 100644 --- a/src/Assets/FluentUI.Icons/Icons/Filled28.cs +++ b/src/Assets/FluentUI.Icons/Icons/Filled28.cs @@ -31,6 +31,7 @@ public class AlignLeft : Icon { public AlignLeft() : base("AlignLeft", IconVaria public class AlignRight : Icon { public AlignRight() : base("AlignRight", IconVariant.Filled, IconSize.Size28, "") { } } public class AlignTop : Icon { public AlignTop() : base("AlignTop", IconVariant.Filled, IconSize.Size28, "") { } } public class AnimalCat : Icon { public AnimalCat() : base("AnimalCat", IconVariant.Filled, IconSize.Size28, "") { } } + public class AnimalPawPrint : Icon { public AnimalPawPrint() : base("AnimalPawPrint", IconVariant.Filled, IconSize.Size28, "") { } } public class AnimalRabbit : Icon { public AnimalRabbit() : base("AnimalRabbit", IconVariant.Filled, IconSize.Size28, "") { } } public class AnimalTurtle : Icon { public AnimalTurtle() : base("AnimalTurtle", IconVariant.Filled, IconSize.Size28, "") { } } public class AppFolder : Icon { public AppFolder() : base("AppFolder", IconVariant.Filled, IconSize.Size28, "") { } } @@ -47,6 +48,8 @@ public class ArrowCircleLeft : Icon { public ArrowCircleLeft() : base("ArrowCirc public class ArrowCircleRight : Icon { public ArrowCircleRight() : base("ArrowCircleRight", IconVariant.Filled, IconSize.Size28, "") { } } public class ArrowCircleUp : Icon { public ArrowCircleUp() : base("ArrowCircleUp", IconVariant.Filled, IconSize.Size28, "") { } } public class ArrowClockwise : Icon { public ArrowClockwise() : base("ArrowClockwise", IconVariant.Filled, IconSize.Size28, "") { } } + public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Filled, IconSize.Size28, "") { } } + public class ArrowClockwiseDashesSettings : Icon { public ArrowClockwiseDashesSettings() : base("ArrowClockwiseDashesSettings", IconVariant.Filled, IconSize.Size28, "") { } } public class ArrowCounterclockwise : Icon { public ArrowCounterclockwise() : base("ArrowCounterclockwise", IconVariant.Filled, IconSize.Size28, "") { } } public class ArrowCurveDownLeft : Icon { public ArrowCurveDownLeft() : base("ArrowCurveDownLeft", IconVariant.Filled, IconSize.Size28, "") { } } public class ArrowDown : Icon { public ArrowDown() : base("ArrowDown", IconVariant.Filled, IconSize.Size28, "") { } } diff --git a/src/Assets/FluentUI.Icons/Icons/Filled32.cs b/src/Assets/FluentUI.Icons/Icons/Filled32.cs index 832f46aa2..a3a3865f0 100644 --- a/src/Assets/FluentUI.Icons/Icons/Filled32.cs +++ b/src/Assets/FluentUI.Icons/Icons/Filled32.cs @@ -28,6 +28,7 @@ public class AlignCenterVertical : Icon { public AlignCenterVertical() : base("A public class AlignLeft : Icon { public AlignLeft() : base("AlignLeft", IconVariant.Filled, IconSize.Size32, "") { } } public class AlignRight : Icon { public AlignRight() : base("AlignRight", IconVariant.Filled, IconSize.Size32, "") { } } public class AlignTop : Icon { public AlignTop() : base("AlignTop", IconVariant.Filled, IconSize.Size32, "") { } } + public class AnimalPawPrint : Icon { public AnimalPawPrint() : base("AnimalPawPrint", IconVariant.Filled, IconSize.Size32, "") { } } public class AnimalRabbit : Icon { public AnimalRabbit() : base("AnimalRabbit", IconVariant.Filled, IconSize.Size32, "") { } } public class AnimalRabbitOff : Icon { public AnimalRabbitOff() : base("AnimalRabbitOff", IconVariant.Filled, IconSize.Size32, "") { } } public class AppFolder : Icon { public AppFolder() : base("AppFolder", IconVariant.Filled, IconSize.Size32, "") { } } @@ -42,7 +43,8 @@ public class ArrowCircleLeft : Icon { public ArrowCircleLeft() : base("ArrowCirc public class ArrowCircleRight : Icon { public ArrowCircleRight() : base("ArrowCircleRight", IconVariant.Filled, IconSize.Size32, "") { } } public class ArrowCircleUp : Icon { public ArrowCircleUp() : base("ArrowCircleUp", IconVariant.Filled, IconSize.Size32, "") { } } public class ArrowClockwise : Icon { public ArrowClockwise() : base("ArrowClockwise", IconVariant.Filled, IconSize.Size32, "") { } } - public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Filled, IconSize.Size32, "") { } } + public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Filled, IconSize.Size32, "") { } } + public class ArrowClockwiseDashesSettings : Icon { public ArrowClockwiseDashesSettings() : base("ArrowClockwiseDashesSettings", IconVariant.Filled, IconSize.Size32, "") { } } public class ArrowCounterclockwise : Icon { public ArrowCounterclockwise() : base("ArrowCounterclockwise", IconVariant.Filled, IconSize.Size32, "") { } } public class ArrowDown : Icon { public ArrowDown() : base("ArrowDown", IconVariant.Filled, IconSize.Size32, "") { } } public class ArrowDownLeft : Icon { public ArrowDownLeft() : base("ArrowDownLeft", IconVariant.Filled, IconSize.Size32, "") { } } @@ -196,6 +198,7 @@ public class CommentMultiple : Icon { public CommentMultiple() : base("CommentMu public class CommentMultipleLink : Icon { public CommentMultipleLink() : base("CommentMultipleLink", IconVariant.Filled, IconSize.Size32, "") { } } public class CommentText : Icon { public CommentText() : base("CommentText", IconVariant.Filled, IconSize.Size32, "") { } } public class Compose : Icon { public Compose() : base("Compose", IconVariant.Filled, IconSize.Size32, "") { } } + public class Connected : Icon { public Connected() : base("Connected", IconVariant.Filled, IconSize.Size32, "") { } } public class ContactCard : Icon { public ContactCard() : base("ContactCard", IconVariant.Filled, IconSize.Size32, "") { } } public class ContactCardRibbon : Icon { public ContactCardRibbon() : base("ContactCardRibbon", IconVariant.Filled, IconSize.Size32, "") { } } public class ContentSettings : Icon { public ContentSettings() : base("ContentSettings", IconVariant.Filled, IconSize.Size32, "") { } } @@ -622,6 +625,7 @@ public class TextGrammarLightning : Icon { public TextGrammarLightning() : base( public class TextT : Icon { public TextT() : base("TextT", IconVariant.Filled, IconSize.Size32, "") { } } public class Timer : Icon { public Timer() : base("Timer", IconVariant.Filled, IconSize.Size32, "") { } } public class Toolbox : Icon { public Toolbox() : base("Toolbox", IconVariant.Filled, IconSize.Size32, "") { } } + public class Translate : Icon { public Translate() : base("Translate", IconVariant.Filled, IconSize.Size32, "") { } } public class Triangle : Icon { public Triangle() : base("Triangle", IconVariant.Filled, IconSize.Size32, "") { } } public class TriangleDown : Icon { public TriangleDown() : base("TriangleDown", IconVariant.Filled, IconSize.Size32, "") { } } public class TriangleLeft : Icon { public TriangleLeft() : base("TriangleLeft", IconVariant.Filled, IconSize.Size32, "") { } } diff --git a/src/Assets/FluentUI.Icons/Icons/Filled48.cs b/src/Assets/FluentUI.Icons/Icons/Filled48.cs index 3a305718c..58bc6c5bc 100644 --- a/src/Assets/FluentUI.Icons/Icons/Filled48.cs +++ b/src/Assets/FluentUI.Icons/Icons/Filled48.cs @@ -29,6 +29,7 @@ public class AlignCenterVertical : Icon { public AlignCenterVertical() : base("A public class AlignLeft : Icon { public AlignLeft() : base("AlignLeft", IconVariant.Filled, IconSize.Size48, "") { } } public class AlignRight : Icon { public AlignRight() : base("AlignRight", IconVariant.Filled, IconSize.Size48, "") { } } public class AlignTop : Icon { public AlignTop() : base("AlignTop", IconVariant.Filled, IconSize.Size48, "") { } } + public class AnimalPawPrint : Icon { public AnimalPawPrint() : base("AnimalPawPrint", IconVariant.Filled, IconSize.Size48, "") { } } public class AppFolder : Icon { public AppFolder() : base("AppFolder", IconVariant.Filled, IconSize.Size48, "") { } } public class AppGeneric : Icon { public AppGeneric() : base("AppGeneric", IconVariant.Filled, IconSize.Size48, "") { } } public class ApprovalsApp : Icon { public ApprovalsApp() : base("ApprovalsApp", IconVariant.Filled, IconSize.Size48, "") { } } @@ -41,6 +42,8 @@ public class ArrowCircleLeft : Icon { public ArrowCircleLeft() : base("ArrowCirc public class ArrowCircleRight : Icon { public ArrowCircleRight() : base("ArrowCircleRight", IconVariant.Filled, IconSize.Size48, "") { } } public class ArrowCircleUp : Icon { public ArrowCircleUp() : base("ArrowCircleUp", IconVariant.Filled, IconSize.Size48, "") { } } public class ArrowClockwise : Icon { public ArrowClockwise() : base("ArrowClockwise", IconVariant.Filled, IconSize.Size48, "") { } } + public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Filled, IconSize.Size48, "") { } } + public class ArrowClockwiseDashesSettings : Icon { public ArrowClockwiseDashesSettings() : base("ArrowClockwiseDashesSettings", IconVariant.Filled, IconSize.Size48, "") { } } public class ArrowCounterclockwise : Icon { public ArrowCounterclockwise() : base("ArrowCounterclockwise", IconVariant.Filled, IconSize.Size48, "") { } } public class ArrowDown : Icon { public ArrowDown() : base("ArrowDown", IconVariant.Filled, IconSize.Size48, "") { } } public class ArrowDownLeft : Icon { public ArrowDownLeft() : base("ArrowDownLeft", IconVariant.Filled, IconSize.Size48, "") { } } diff --git a/src/Assets/FluentUI.Icons/Icons/Light32.cs b/src/Assets/FluentUI.Icons/Icons/Light32.cs index 84e92cd77..a673c4035 100644 --- a/src/Assets/FluentUI.Icons/Icons/Light32.cs +++ b/src/Assets/FluentUI.Icons/Icons/Light32.cs @@ -99,6 +99,7 @@ public class LayoutRowTwo : Icon { public LayoutRowTwo() : base("LayoutRowTwo", public class LayoutRowTwoFocusTop : Icon { public LayoutRowTwoFocusTop() : base("LayoutRowTwoFocusTop", IconVariant.Light, IconSize.Size32, "") { } } public class LayoutRowTwoFocusTopSettings : Icon { public LayoutRowTwoFocusTopSettings() : base("LayoutRowTwoFocusTopSettings", IconVariant.Light, IconSize.Size32, "") { } } public class LayoutRowTwoSettings : Icon { public LayoutRowTwoSettings() : base("LayoutRowTwoSettings", IconVariant.Light, IconSize.Size32, "") { } } + public class Lightbulb : Icon { public Lightbulb() : base("Lightbulb", IconVariant.Light, IconSize.Size32, "") { } } public class Link : Icon { public Link() : base("Link", IconVariant.Light, IconSize.Size32, "") { } } public class LockClosed : Icon { public LockClosed() : base("LockClosed", IconVariant.Light, IconSize.Size32, "") { } } public class LockOpen : Icon { public LockOpen() : base("LockOpen", IconVariant.Light, IconSize.Size32, "") { } } diff --git a/src/Assets/FluentUI.Icons/Icons/Regular16.cs b/src/Assets/FluentUI.Icons/Icons/Regular16.cs index dc1d70bf0..29393b540 100644 --- a/src/Assets/FluentUI.Icons/Icons/Regular16.cs +++ b/src/Assets/FluentUI.Icons/Icons/Regular16.cs @@ -45,6 +45,7 @@ public class AlignStretchVertical : Icon { public AlignStretchVertical() : base( public class AlignTop : Icon { public AlignTop() : base("AlignTop", IconVariant.Regular, IconSize.Size16, "") { } } public class AnimalCat : Icon { public AnimalCat() : base("AnimalCat", IconVariant.Regular, IconSize.Size16, "") { } } public class AnimalDog : Icon { public AnimalDog() : base("AnimalDog", IconVariant.Regular, IconSize.Size16, "") { } } + public class AnimalPawPrint : Icon { public AnimalPawPrint() : base("AnimalPawPrint", IconVariant.Regular, IconSize.Size16, "") { } } public class AnimalRabbit : Icon { public AnimalRabbit() : base("AnimalRabbit", IconVariant.Regular, IconSize.Size16, "") { } } public class AnimalTurtle : Icon { public AnimalTurtle() : base("AnimalTurtle", IconVariant.Regular, IconSize.Size16, "") { } } public class AppFolder : Icon { public AppFolder() : base("AppFolder", IconVariant.Regular, IconSize.Size16, "") { } } @@ -68,7 +69,8 @@ public class ArrowCircleUp : Icon { public ArrowCircleUp() : base("ArrowCircleUp public class ArrowCircleUpLeft : Icon { public ArrowCircleUpLeft() : base("ArrowCircleUpLeft", IconVariant.Regular, IconSize.Size16, "") { } } public class ArrowCircleUpRight : Icon { public ArrowCircleUpRight() : base("ArrowCircleUpRight", IconVariant.Regular, IconSize.Size16, "") { } } public class ArrowClockwise : Icon { public ArrowClockwise() : base("ArrowClockwise", IconVariant.Regular, IconSize.Size16, "") { } } - public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Regular, IconSize.Size16, "") { } } + public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Regular, IconSize.Size16, "") { } } + public class ArrowClockwiseDashesSettings : Icon { public ArrowClockwiseDashesSettings() : base("ArrowClockwiseDashesSettings", IconVariant.Regular, IconSize.Size16, "") { } } public class ArrowCollapseAll : Icon { public ArrowCollapseAll() : base("ArrowCollapseAll", IconVariant.Regular, IconSize.Size16, "") { } } public class ArrowCounterclockwise : Icon { public ArrowCounterclockwise() : base("ArrowCounterclockwise", IconVariant.Regular, IconSize.Size16, "") { } } public class ArrowCurveDownLeft : Icon { public ArrowCurveDownLeft() : base("ArrowCurveDownLeft", IconVariant.Regular, IconSize.Size16, "") { } } @@ -290,6 +292,7 @@ public class ChatEmpty : Icon { public ChatEmpty() : base("ChatEmpty", IconVaria public class ChatLock : Icon { public ChatLock() : base("ChatLock", IconVariant.Regular, IconSize.Size16, "") { } } public class ChatMultiple : Icon { public ChatMultiple() : base("ChatMultiple", IconVariant.Regular, IconSize.Size16, "") { } } public class ChatMultipleHeart : Icon { public ChatMultipleHeart() : base("ChatMultipleHeart", IconVariant.Regular, IconSize.Size16, "") { } } + public class ChatOff : Icon { public ChatOff() : base("ChatOff", IconVariant.Regular, IconSize.Size16, "") { } } public class ChatSettings : Icon { public ChatSettings() : base("ChatSettings", IconVariant.Regular, IconSize.Size16, "") { } } public class ChatSparkle : Icon { public ChatSparkle() : base("ChatSparkle", IconVariant.Regular, IconSize.Size16, "") { } } public class ChatWarning : Icon { public ChatWarning() : base("ChatWarning", IconVariant.Regular, IconSize.Size16, "") { } } @@ -1190,6 +1193,7 @@ public class SquareHintArrowBack : Icon { public SquareHintArrowBack() : base("S public class SquareHintHexagon : Icon { public SquareHintHexagon() : base("SquareHintHexagon", IconVariant.Regular, IconSize.Size16, "") { } } public class SquareHintSparkles : Icon { public SquareHintSparkles() : base("SquareHintSparkles", IconVariant.Regular, IconSize.Size16, "") { } } public class SquareMultiple : Icon { public SquareMultiple() : base("SquareMultiple", IconVariant.Regular, IconSize.Size16, "") { } } + public class SquareTextArrowRepeatAll : Icon { public SquareTextArrowRepeatAll() : base("SquareTextArrowRepeatAll", IconVariant.Regular, IconSize.Size16, "") { } } public class Stack : Icon { public Stack() : base("Stack", IconVariant.Regular, IconSize.Size16, "") { } } public class StackOff : Icon { public StackOff() : base("StackOff", IconVariant.Regular, IconSize.Size16, "") { } } public class StackStar : Icon { public StackStar() : base("StackStar", IconVariant.Regular, IconSize.Size16, "") { } } diff --git a/src/Assets/FluentUI.Icons/Icons/Regular20.cs b/src/Assets/FluentUI.Icons/Icons/Regular20.cs index d3cc734e4..d7161b9d0 100644 --- a/src/Assets/FluentUI.Icons/Icons/Regular20.cs +++ b/src/Assets/FluentUI.Icons/Icons/Regular20.cs @@ -59,6 +59,7 @@ public class AlignStretchVertical : Icon { public AlignStretchVertical() : base( public class AlignTop : Icon { public AlignTop() : base("AlignTop", IconVariant.Regular, IconSize.Size20, "") { } } public class AnimalCat : Icon { public AnimalCat() : base("AnimalCat", IconVariant.Regular, IconSize.Size20, "") { } } public class AnimalDog : Icon { public AnimalDog() : base("AnimalDog", IconVariant.Regular, IconSize.Size20, "") { } } + public class AnimalPawPrint : Icon { public AnimalPawPrint() : base("AnimalPawPrint", IconVariant.Regular, IconSize.Size20, "") { } } public class AnimalRabbit : Icon { public AnimalRabbit() : base("AnimalRabbit", IconVariant.Regular, IconSize.Size20, "") { } } public class AnimalRabbitOff : Icon { public AnimalRabbitOff() : base("AnimalRabbitOff", IconVariant.Regular, IconSize.Size20, "") { } } public class AnimalTurtle : Icon { public AnimalTurtle() : base("AnimalTurtle", IconVariant.Regular, IconSize.Size20, "") { } } @@ -101,10 +102,11 @@ public class ArrowCircleUp : Icon { public ArrowCircleUp() : base("ArrowCircleUp public class ArrowCircleUpLeft : Icon { public ArrowCircleUpLeft() : base("ArrowCircleUpLeft", IconVariant.Regular, IconSize.Size20, "") { } } public class ArrowCircleUpRight : Icon { public ArrowCircleUpRight() : base("ArrowCircleUpRight", IconVariant.Regular, IconSize.Size20, "") { } } public class ArrowClockwise : Icon { public ArrowClockwise() : base("ArrowClockwise", IconVariant.Regular, IconSize.Size20, "") { } } - public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Regular, IconSize.Size20, "") { } } + public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Regular, IconSize.Size20, "") { } } + public class ArrowClockwiseDashesSettings : Icon { public ArrowClockwiseDashesSettings() : base("ArrowClockwiseDashesSettings", IconVariant.Regular, IconSize.Size20, "") { } } public class ArrowCollapseAll : Icon { public ArrowCollapseAll() : base("ArrowCollapseAll", IconVariant.Regular, IconSize.Size20, "") { } } public class ArrowCounterclockwise : Icon { public ArrowCounterclockwise() : base("ArrowCounterclockwise", IconVariant.Regular, IconSize.Size20, "") { } } - public class ArrowCounterclockwiseDashes : Icon { public ArrowCounterclockwiseDashes() : base("ArrowCounterclockwiseDashes", IconVariant.Regular, IconSize.Size20, "") { } } + public class ArrowCounterclockwiseDashes : Icon { public ArrowCounterclockwiseDashes() : base("ArrowCounterclockwiseDashes", IconVariant.Regular, IconSize.Size20, "") { } } public class ArrowCurveDownLeft : Icon { public ArrowCurveDownLeft() : base("ArrowCurveDownLeft", IconVariant.Regular, IconSize.Size20, "") { } } public class ArrowCurveDownRight : Icon { public ArrowCurveDownRight() : base("ArrowCurveDownRight", IconVariant.Regular, IconSize.Size20, "") { } } public class ArrowCurveUpLeft : Icon { public ArrowCurveUpLeft() : base("ArrowCurveUpLeft", IconVariant.Regular, IconSize.Size20, "") { } } @@ -2009,6 +2011,7 @@ public class SquareHintSparkles : Icon { public SquareHintSparkles() : base("Squ public class SquareMultiple : Icon { public SquareMultiple() : base("SquareMultiple", IconVariant.Regular, IconSize.Size20, "") { } } public class SquareShadow : Icon { public SquareShadow() : base("SquareShadow", IconVariant.Regular, IconSize.Size20, "") { } } public class SquaresNested : Icon { public SquaresNested() : base("SquaresNested", IconVariant.Regular, IconSize.Size20, "") { } } + public class SquareTextArrowRepeatAll : Icon { public SquareTextArrowRepeatAll() : base("SquareTextArrowRepeatAll", IconVariant.Regular, IconSize.Size20, "") { } } public class Stack : Icon { public Stack() : base("Stack", IconVariant.Regular, IconSize.Size20, "") { } } public class StackAdd : Icon { public StackAdd() : base("StackAdd", IconVariant.Regular, IconSize.Size20, "") { } } public class StackArrowForward : Icon { public StackArrowForward() : base("StackArrowForward", IconVariant.Regular, IconSize.Size20, "") { } } diff --git a/src/Assets/FluentUI.Icons/Icons/Regular24.cs b/src/Assets/FluentUI.Icons/Icons/Regular24.cs index 06e2ede3d..19afe8d3e 100644 --- a/src/Assets/FluentUI.Icons/Icons/Regular24.cs +++ b/src/Assets/FluentUI.Icons/Icons/Regular24.cs @@ -48,6 +48,7 @@ public class AlignStraighten : Icon { public AlignStraighten() : base("AlignStra public class AlignTop : Icon { public AlignTop() : base("AlignTop", IconVariant.Regular, IconSize.Size24, "") { } } public class AnimalCat : Icon { public AnimalCat() : base("AnimalCat", IconVariant.Regular, IconSize.Size24, "") { } } public class AnimalDog : Icon { public AnimalDog() : base("AnimalDog", IconVariant.Regular, IconSize.Size24, "") { } } + public class AnimalPawPrint : Icon { public AnimalPawPrint() : base("AnimalPawPrint", IconVariant.Regular, IconSize.Size24, "") { } } public class AnimalRabbit : Icon { public AnimalRabbit() : base("AnimalRabbit", IconVariant.Regular, IconSize.Size24, "") { } } public class AnimalTurtle : Icon { public AnimalTurtle() : base("AnimalTurtle", IconVariant.Regular, IconSize.Size24, "") { } } public class AppFolder : Icon { public AppFolder() : base("AppFolder", IconVariant.Regular, IconSize.Size24, "") { } } @@ -86,10 +87,11 @@ public class ArrowCircleUp : Icon { public ArrowCircleUp() : base("ArrowCircleUp public class ArrowCircleUpLeft : Icon { public ArrowCircleUpLeft() : base("ArrowCircleUpLeft", IconVariant.Regular, IconSize.Size24, "") { } } public class ArrowCircleUpRight : Icon { public ArrowCircleUpRight() : base("ArrowCircleUpRight", IconVariant.Regular, IconSize.Size24, "") { } } public class ArrowClockwise : Icon { public ArrowClockwise() : base("ArrowClockwise", IconVariant.Regular, IconSize.Size24, "") { } } - public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Regular, IconSize.Size24, "") { } } + public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Regular, IconSize.Size24, "") { } } + public class ArrowClockwiseDashesSettings : Icon { public ArrowClockwiseDashesSettings() : base("ArrowClockwiseDashesSettings", IconVariant.Regular, IconSize.Size24, "") { } } public class ArrowCollapseAll : Icon { public ArrowCollapseAll() : base("ArrowCollapseAll", IconVariant.Regular, IconSize.Size24, "") { } } public class ArrowCounterclockwise : Icon { public ArrowCounterclockwise() : base("ArrowCounterclockwise", IconVariant.Regular, IconSize.Size24, "") { } } - public class ArrowCounterclockwiseDashes : Icon { public ArrowCounterclockwiseDashes() : base("ArrowCounterclockwiseDashes", IconVariant.Regular, IconSize.Size24, "") { } } + public class ArrowCounterclockwiseDashes : Icon { public ArrowCounterclockwiseDashes() : base("ArrowCounterclockwiseDashes", IconVariant.Regular, IconSize.Size24, "") { } } public class ArrowCurveDownLeft : Icon { public ArrowCurveDownLeft() : base("ArrowCurveDownLeft", IconVariant.Regular, IconSize.Size24, "") { } } public class ArrowDown : Icon { public ArrowDown() : base("ArrowDown", IconVariant.Regular, IconSize.Size24, "") { } } public class ArrowDownExclamation : Icon { public ArrowDownExclamation() : base("ArrowDownExclamation", IconVariant.Regular, IconSize.Size24, "") { } } @@ -595,6 +597,7 @@ public class Component2DoubleTapSwipeDown : Icon { public Component2DoubleTapSwi public class Component2DoubleTapSwipeUp : Icon { public Component2DoubleTapSwipeUp() : base("Component2DoubleTapSwipeUp", IconVariant.Regular, IconSize.Size24, "") { } } public class Compose : Icon { public Compose() : base("Compose", IconVariant.Regular, IconSize.Size24, "") { } } public class ConferenceRoom : Icon { public ConferenceRoom() : base("ConferenceRoom", IconVariant.Regular, IconSize.Size24, "") { } } + public class Connected : Icon { public Connected() : base("Connected", IconVariant.Regular, IconSize.Size24, "") { } } public class Connector : Icon { public Connector() : base("Connector", IconVariant.Regular, IconSize.Size24, "") { } } public class ContactCard : Icon { public ContactCard() : base("ContactCard", IconVariant.Regular, IconSize.Size24, "") { } } public class ContactCardGroup : Icon { public ContactCardGroup() : base("ContactCardGroup", IconVariant.Regular, IconSize.Size24, "") { } } @@ -1774,6 +1777,7 @@ public class SquareHintApps : Icon { public SquareHintApps() : base("SquareHintA public class SquareHintHexagon : Icon { public SquareHintHexagon() : base("SquareHintHexagon", IconVariant.Regular, IconSize.Size24, "") { } } public class SquareHintSparkles : Icon { public SquareHintSparkles() : base("SquareHintSparkles", IconVariant.Regular, IconSize.Size24, "") { } } public class SquareMultiple : Icon { public SquareMultiple() : base("SquareMultiple", IconVariant.Regular, IconSize.Size24, "") { } } + public class SquareTextArrowRepeatAll : Icon { public SquareTextArrowRepeatAll() : base("SquareTextArrowRepeatAll", IconVariant.Regular, IconSize.Size24, "") { } } public class Stack : Icon { public Stack() : base("Stack", IconVariant.Regular, IconSize.Size24, "") { } } public class StackAdd : Icon { public StackAdd() : base("StackAdd", IconVariant.Regular, IconSize.Size24, "") { } } public class StackArrowForward : Icon { public StackArrowForward() : base("StackArrowForward", IconVariant.Regular, IconSize.Size24, "") { } } diff --git a/src/Assets/FluentUI.Icons/Icons/Regular28.cs b/src/Assets/FluentUI.Icons/Icons/Regular28.cs index f48d45154..98ff316ee 100644 --- a/src/Assets/FluentUI.Icons/Icons/Regular28.cs +++ b/src/Assets/FluentUI.Icons/Icons/Regular28.cs @@ -31,6 +31,7 @@ public class AlignLeft : Icon { public AlignLeft() : base("AlignLeft", IconVaria public class AlignRight : Icon { public AlignRight() : base("AlignRight", IconVariant.Regular, IconSize.Size28, "") { } } public class AlignTop : Icon { public AlignTop() : base("AlignTop", IconVariant.Regular, IconSize.Size28, "") { } } public class AnimalCat : Icon { public AnimalCat() : base("AnimalCat", IconVariant.Regular, IconSize.Size28, "") { } } + public class AnimalPawPrint : Icon { public AnimalPawPrint() : base("AnimalPawPrint", IconVariant.Regular, IconSize.Size28, "") { } } public class AnimalRabbit : Icon { public AnimalRabbit() : base("AnimalRabbit", IconVariant.Regular, IconSize.Size28, "") { } } public class AnimalTurtle : Icon { public AnimalTurtle() : base("AnimalTurtle", IconVariant.Regular, IconSize.Size28, "") { } } public class AppFolder : Icon { public AppFolder() : base("AppFolder", IconVariant.Regular, IconSize.Size28, "") { } } @@ -47,6 +48,8 @@ public class ArrowCircleLeft : Icon { public ArrowCircleLeft() : base("ArrowCirc public class ArrowCircleRight : Icon { public ArrowCircleRight() : base("ArrowCircleRight", IconVariant.Regular, IconSize.Size28, "") { } } public class ArrowCircleUp : Icon { public ArrowCircleUp() : base("ArrowCircleUp", IconVariant.Regular, IconSize.Size28, "") { } } public class ArrowClockwise : Icon { public ArrowClockwise() : base("ArrowClockwise", IconVariant.Regular, IconSize.Size28, "") { } } + public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Regular, IconSize.Size28, "") { } } + public class ArrowClockwiseDashesSettings : Icon { public ArrowClockwiseDashesSettings() : base("ArrowClockwiseDashesSettings", IconVariant.Regular, IconSize.Size28, "") { } } public class ArrowCounterclockwise : Icon { public ArrowCounterclockwise() : base("ArrowCounterclockwise", IconVariant.Regular, IconSize.Size28, "") { } } public class ArrowCurveDownLeft : Icon { public ArrowCurveDownLeft() : base("ArrowCurveDownLeft", IconVariant.Regular, IconSize.Size28, "") { } } public class ArrowDown : Icon { public ArrowDown() : base("ArrowDown", IconVariant.Regular, IconSize.Size28, "") { } } diff --git a/src/Assets/FluentUI.Icons/Icons/Regular32.cs b/src/Assets/FluentUI.Icons/Icons/Regular32.cs index 1e2522994..c5eb13a01 100644 --- a/src/Assets/FluentUI.Icons/Icons/Regular32.cs +++ b/src/Assets/FluentUI.Icons/Icons/Regular32.cs @@ -28,6 +28,7 @@ public class AlignCenterVertical : Icon { public AlignCenterVertical() : base("A public class AlignLeft : Icon { public AlignLeft() : base("AlignLeft", IconVariant.Regular, IconSize.Size32, "") { } } public class AlignRight : Icon { public AlignRight() : base("AlignRight", IconVariant.Regular, IconSize.Size32, "") { } } public class AlignTop : Icon { public AlignTop() : base("AlignTop", IconVariant.Regular, IconSize.Size32, "") { } } + public class AnimalPawPrint : Icon { public AnimalPawPrint() : base("AnimalPawPrint", IconVariant.Regular, IconSize.Size32, "") { } } public class AnimalRabbit : Icon { public AnimalRabbit() : base("AnimalRabbit", IconVariant.Regular, IconSize.Size32, "") { } } public class AnimalRabbitOff : Icon { public AnimalRabbitOff() : base("AnimalRabbitOff", IconVariant.Regular, IconSize.Size32, "") { } } public class AppFolder : Icon { public AppFolder() : base("AppFolder", IconVariant.Regular, IconSize.Size32, "") { } } @@ -42,7 +43,8 @@ public class ArrowCircleLeft : Icon { public ArrowCircleLeft() : base("ArrowCirc public class ArrowCircleRight : Icon { public ArrowCircleRight() : base("ArrowCircleRight", IconVariant.Regular, IconSize.Size32, "") { } } public class ArrowCircleUp : Icon { public ArrowCircleUp() : base("ArrowCircleUp", IconVariant.Regular, IconSize.Size32, "") { } } public class ArrowClockwise : Icon { public ArrowClockwise() : base("ArrowClockwise", IconVariant.Regular, IconSize.Size32, "") { } } - public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Regular, IconSize.Size32, "") { } } + public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Regular, IconSize.Size32, "") { } } + public class ArrowClockwiseDashesSettings : Icon { public ArrowClockwiseDashesSettings() : base("ArrowClockwiseDashesSettings", IconVariant.Regular, IconSize.Size32, "") { } } public class ArrowCounterclockwise : Icon { public ArrowCounterclockwise() : base("ArrowCounterclockwise", IconVariant.Regular, IconSize.Size32, "") { } } public class ArrowDown : Icon { public ArrowDown() : base("ArrowDown", IconVariant.Regular, IconSize.Size32, "") { } } public class ArrowDownLeft : Icon { public ArrowDownLeft() : base("ArrowDownLeft", IconVariant.Regular, IconSize.Size32, "") { } } @@ -196,6 +198,7 @@ public class CommentMultiple : Icon { public CommentMultiple() : base("CommentMu public class CommentMultipleLink : Icon { public CommentMultipleLink() : base("CommentMultipleLink", IconVariant.Regular, IconSize.Size32, "") { } } public class CommentText : Icon { public CommentText() : base("CommentText", IconVariant.Regular, IconSize.Size32, "") { } } public class Compose : Icon { public Compose() : base("Compose", IconVariant.Regular, IconSize.Size32, "") { } } + public class Connected : Icon { public Connected() : base("Connected", IconVariant.Regular, IconSize.Size32, "") { } } public class ContactCard : Icon { public ContactCard() : base("ContactCard", IconVariant.Regular, IconSize.Size32, "") { } } public class ContactCardRibbon : Icon { public ContactCardRibbon() : base("ContactCardRibbon", IconVariant.Regular, IconSize.Size32, "") { } } public class ContentSettings : Icon { public ContentSettings() : base("ContentSettings", IconVariant.Regular, IconSize.Size32, "") { } } @@ -612,6 +615,7 @@ public class TextGrammarLightning : Icon { public TextGrammarLightning() : base( public class TextT : Icon { public TextT() : base("TextT", IconVariant.Regular, IconSize.Size32, "") { } } public class Timer : Icon { public Timer() : base("Timer", IconVariant.Regular, IconSize.Size32, "") { } } public class Toolbox : Icon { public Toolbox() : base("Toolbox", IconVariant.Regular, IconSize.Size32, "") { } } + public class Translate : Icon { public Translate() : base("Translate", IconVariant.Regular, IconSize.Size32, "") { } } public class Triangle : Icon { public Triangle() : base("Triangle", IconVariant.Regular, IconSize.Size32, "") { } } public class TriangleDown : Icon { public TriangleDown() : base("TriangleDown", IconVariant.Regular, IconSize.Size32, "") { } } public class TriangleLeft : Icon { public TriangleLeft() : base("TriangleLeft", IconVariant.Regular, IconSize.Size32, "") { } } diff --git a/src/Assets/FluentUI.Icons/Icons/Regular48.cs b/src/Assets/FluentUI.Icons/Icons/Regular48.cs index 246d12bbe..a28fbc369 100644 --- a/src/Assets/FluentUI.Icons/Icons/Regular48.cs +++ b/src/Assets/FluentUI.Icons/Icons/Regular48.cs @@ -29,6 +29,7 @@ public class AlignCenterVertical : Icon { public AlignCenterVertical() : base("A public class AlignLeft : Icon { public AlignLeft() : base("AlignLeft", IconVariant.Regular, IconSize.Size48, "") { } } public class AlignRight : Icon { public AlignRight() : base("AlignRight", IconVariant.Regular, IconSize.Size48, "") { } } public class AlignTop : Icon { public AlignTop() : base("AlignTop", IconVariant.Regular, IconSize.Size48, "") { } } + public class AnimalPawPrint : Icon { public AnimalPawPrint() : base("AnimalPawPrint", IconVariant.Regular, IconSize.Size48, "") { } } public class AppFolder : Icon { public AppFolder() : base("AppFolder", IconVariant.Regular, IconSize.Size48, "") { } } public class AppGeneric : Icon { public AppGeneric() : base("AppGeneric", IconVariant.Regular, IconSize.Size48, "") { } } public class ApprovalsApp : Icon { public ApprovalsApp() : base("ApprovalsApp", IconVariant.Regular, IconSize.Size48, "") { } } @@ -41,6 +42,8 @@ public class ArrowCircleLeft : Icon { public ArrowCircleLeft() : base("ArrowCirc public class ArrowCircleRight : Icon { public ArrowCircleRight() : base("ArrowCircleRight", IconVariant.Regular, IconSize.Size48, "") { } } public class ArrowCircleUp : Icon { public ArrowCircleUp() : base("ArrowCircleUp", IconVariant.Regular, IconSize.Size48, "") { } } public class ArrowClockwise : Icon { public ArrowClockwise() : base("ArrowClockwise", IconVariant.Regular, IconSize.Size48, "") { } } + public class ArrowClockwiseDashes : Icon { public ArrowClockwiseDashes() : base("ArrowClockwiseDashes", IconVariant.Regular, IconSize.Size48, "") { } } + public class ArrowClockwiseDashesSettings : Icon { public ArrowClockwiseDashesSettings() : base("ArrowClockwiseDashesSettings", IconVariant.Regular, IconSize.Size48, "") { } } public class ArrowCounterclockwise : Icon { public ArrowCounterclockwise() : base("ArrowCounterclockwise", IconVariant.Regular, IconSize.Size48, "") { } } public class ArrowDown : Icon { public ArrowDown() : base("ArrowDown", IconVariant.Regular, IconSize.Size48, "") { } } public class ArrowDownLeft : Icon { public ArrowDownLeft() : base("ArrowDownLeft", IconVariant.Regular, IconSize.Size48, "") { } } From bb1075066e887d5d6793512ec4ff80bfdd669361 Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Mon, 11 Nov 2024 12:55:35 +0100 Subject: [PATCH 16/20] - Implement ClearMessages in provider (#2919) - Update docs --- .../Pages/MessageBar/MessageBarPage.razor | 21 ++++++++++++++- .../Demo/Shared/Shared/DemoMainLayout.razor | 2 +- .../FluentMessageBarProvider.razor.cs | 27 +++++++++++++++++-- .../MessageBar/Services/MessageService.cs | 6 ++--- 4 files changed, 49 insertions(+), 7 deletions(-) diff --git a/examples/Demo/Shared/Pages/MessageBar/MessageBarPage.razor b/examples/Demo/Shared/Pages/MessageBar/MessageBarPage.razor index cb74df0a9..e9ac04071 100644 --- a/examples/Demo/Shared/Pages/MessageBar/MessageBarPage.razor +++ b/examples/Demo/Shared/Pages/MessageBar/MessageBarPage.razor @@ -35,6 +35,23 @@ ) +

    Sections

    +

    + You can use multiple message bar providers in a single page/app. In the example below you can add a message bar on the top of the window, but also + in the notification center or in a dialog. An area to display messages in is called a Section. + + You can specify in wich Section you want your message to appear in through the MessageOptions. + +

    + +

    Clear message bars on navigation

    +

    + By default, message bars will not be removed when navigating to another page. This can be changed by setting the ClearAfterNavigation + parameter to true on a FluentMenuProvider. When using multiple providers (see Sections above), the parameter needs to be set for each + provider individually. + You can also set the behavior on a per message basis by using the same parameter of the MessageOptions class. +

    +

    Examples

    @@ -44,7 +61,7 @@ If you click on "Add in a dialog" multiple times, you will see that only one message is displayed. Once you dismiss that one, the next one will be displayed.

    -

    This is the advised way to use MessageBars

    +

    Using the MessageService is the advised way to use message bars.

    @@ -100,3 +117,5 @@ + + diff --git a/examples/Demo/Shared/Shared/DemoMainLayout.razor b/examples/Demo/Shared/Shared/DemoMainLayout.razor index aa20f6336..fd838adb4 100644 --- a/examples/Demo/Shared/Shared/DemoMainLayout.razor +++ b/examples/Demo/Shared/Shared/DemoMainLayout.razor @@ -56,7 +56,7 @@
    - + diff --git a/src/Core/Components/MessageBar/FluentMessageBarProvider.razor.cs b/src/Core/Components/MessageBar/FluentMessageBarProvider.razor.cs index 5175ec76e..ddd6b1f1f 100644 --- a/src/Core/Components/MessageBar/FluentMessageBarProvider.razor.cs +++ b/src/Core/Components/MessageBar/FluentMessageBarProvider.razor.cs @@ -1,4 +1,5 @@ using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Routing; using Microsoft.FluentUI.AspNetCore.Components.Utilities; namespace Microsoft.FluentUI.AspNetCore.Components; @@ -6,6 +7,9 @@ namespace Microsoft.FluentUI.AspNetCore.Components; /// public partial class FluentMessageBarProvider : FluentComponentBase, IDisposable { + [Inject] + private NavigationManager NavigationManager { get; set; } = default!; + /// protected string? ClassValue => new CssBuilder(Class).Build(); @@ -83,7 +87,12 @@ protected override void OnInitialized() { MessageService.OnMessageItemsUpdated += OnMessageItemsUpdatedHandler; MessageService.OnMessageItemsUpdatedAsync += OnMessageItemsUpdatedHandlerAsync; - base.OnInitialized(); + + if (ClearAfterNavigation) + { + NavigationManager.LocationChanged += ClearMessages; + } + } /// @@ -92,7 +101,7 @@ protected virtual void OnMessageItemsUpdatedHandler() InvokeAsync(StateHasChanged); } - protected async virtual Task OnMessageItemsUpdatedHandlerAsync() + protected virtual async Task OnMessageItemsUpdatedHandlerAsync() { await Task.Run(() => { @@ -100,10 +109,24 @@ await Task.Run(() => }); } + private void ClearMessages(object? sender, LocationChangedEventArgs args) + { + if (AllMessagesForCategory.Any()) + { + InvokeAsync(() => + { + MessageService.Clear(Section); + StateHasChanged(); + }); + } + } + /// public void Dispose() { MessageService.OnMessageItemsUpdated -= OnMessageItemsUpdatedHandler; MessageService.OnMessageItemsUpdatedAsync -= OnMessageItemsUpdatedHandlerAsync; + + NavigationManager.LocationChanged -= ClearMessages; } } diff --git a/src/Core/Components/MessageBar/Services/MessageService.cs b/src/Core/Components/MessageBar/Services/MessageService.cs index 697dcbca1..272abe1ca 100644 --- a/src/Core/Components/MessageBar/Services/MessageService.cs +++ b/src/Core/Components/MessageBar/Services/MessageService.cs @@ -62,7 +62,7 @@ public virtual IEnumerable MessagesToShow(int count = 5, string? sectio MessageLock.EnterReadLock(); try { - IEnumerable? messages = string.IsNullOrEmpty(section) + var messages = string.IsNullOrEmpty(section) ? MessageList : MessageList.Where(x => x.Section == section); @@ -301,11 +301,11 @@ private void RemoveMessageItems(string? section = null) return; } - IEnumerable? messages = string.IsNullOrEmpty(section) + var messages = string.IsNullOrEmpty(section) ? MessageList : MessageList.Where(i => i.Section == section); - foreach (Message message in messages) + foreach (var message in messages) { message.OnClose -= Remove; } From ba0f770841ba95fcdd949ee5e44d24484419b66b Mon Sep 17 00:00:00 2001 From: Adrien Clerbois <50712277+AClerbois@users.noreply.github.com> Date: Wed, 13 Nov 2024 07:45:36 +0100 Subject: [PATCH 17/20] Add Contributor with contrib.rocks (#2924) --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index b94d1dbee..e7dde5aa0 100644 --- a/README.md +++ b/README.md @@ -190,6 +190,14 @@ and offers support, like most other open source projects, on a best effort base We offer some guidelines on how you can get started [contributing to the project](https://github.com/microsoft/fluentui-blazor/blob/main/docs/contributing.md). We also have a document that explains and shows how to [write and develop unit tests](https://github.com/microsoft/fluentui-blazor/blob/main/docs/unit-tests.md) +### 🏆 Contributors + + + + + +Made with [contrib.rocks](https://contrib.rocks). + ## Joining the Community Looking to get answers to questions or engage with us in real-time? Our community is active on [Gitter](https://app.gitter.im/#/room/#fluentui-blazor:gitter.im) and [Discord](https://discord.gg/FcSNfg4). Submit requests From 4506a7f79094a6d5419fe9993a31bfd6d4d40d78 Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Wed, 13 Nov 2024 10:24:38 +0100 Subject: [PATCH 18/20] - Use .NET 9 GA SDK - Fix #2922 by adding !important in tab css --- Directory.Packages.props | 6 +++--- src/Core/Components/Tabs/FluentTab.razor.css | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 05998044d..08c30ded1 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -4,9 +4,9 @@ 8.0.0 8.0.10 8.0.10 - 9.0.0-rc.2.24473.5 - 9.0.0-rc.2.24474.3 - 9.0.0-rc.2.24474.1 + 9.0.0 + 9.0.0 + 9.0.0 diff --git a/src/Core/Components/Tabs/FluentTab.razor.css b/src/Core/Components/Tabs/FluentTab.razor.css index d18d53fb9..a4c4054e9 100644 --- a/src/Core/Components/Tabs/FluentTab.razor.css +++ b/src/Core/Components/Tabs/FluentTab.razor.css @@ -1,4 +1,4 @@ -fluent-tab { +fluent-tab { -webkit-user-select: none; user-select: none; font-weight: 400; @@ -25,7 +25,7 @@ } ::deep .fluent-tab-close { - fill: var(--neutral-fill-strong-active); + fill: var(--neutral-fill-strong-active) !important; cursor: pointer; max-width: 12px; max-height: 12px; @@ -33,5 +33,5 @@ } ::deep .fluent-tab-close:hover { - fill: var(--neutral-fill-strong-hover); - } \ No newline at end of file + fill: var(--neutral-fill-strong-hover) !important; + } From 20de0d33d8ad78a7361948520a8251b79c244a34 Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Wed, 13 Nov 2024 10:55:23 +0100 Subject: [PATCH 19/20] Fix #2923 --- WHATSNEW.md | 1 + .../Demo/Shared/Pages/Lab/IssueTester.razor | 39 +++++++++++++++++++ examples/Demo/Shared/wwwroot/docs/WhatsNew.md | 1 + .../List/ListComponentBase.razor.cs | 6 +-- 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/WHATSNEW.md b/WHATSNEW.md index 64ac044f0..585bc0bf9 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -12,6 +12,7 @@ - \[DataGrid\] Remove optimalization check as it can break in certain scenarios ([#2875](https://github.com/microsoft/fluentui-blazor/pull/2875)) - \[KeyCode\] Add a new `StopRepeat` property ([#2908](https://github.com/microsoft/fluentui-blazor/pull/2908)) - \[MessageBar\] Implement ClearAfterNavigation on provider level ([#2919](https://github.com/microsoft/fluentui-blazor/pull/2919)) +- \[Tab\] Use correct color for close icon ([#2922](https://github.com/microsoft/fluentui-blazor/issues/2922)) - \[TreeItem\] Only pass initially selected state to the web component ([#2916](https://github.com/microsoft/fluentui-blazor/pull/2916)) ### Demo site and documentation diff --git a/examples/Demo/Shared/Pages/Lab/IssueTester.razor b/examples/Demo/Shared/Pages/Lab/IssueTester.razor index 8b1378917..2b7a0f440 100644 --- a/examples/Demo/Shared/Pages/Lab/IssueTester.razor +++ b/examples/Demo/Shared/Pages/Lab/IssueTester.razor @@ -1 +1,40 @@ +@page "/counter" + + +@foreach (var t in _test.CBVal) +{ + +} + + +@code { + + private readonly test _test = new(); + private readonly List _ddval = new() { "one", "two" }; + + private readonly List _t2 = new() { new Row { Rval = true }, new Row { Rval = false }, new Row { Rval = false }, new Row { Rval = true } }; + private readonly List _t3 = new() { new Row { Rval = false }, new Row { Rval = true }, new Row { Rval = true }, new Row { Rval = true } }; + + private void UpdateSelect2(string newVal) + { + _test.BMAddress = newVal; + if (newVal == "one") _test.CBVal = _t3; + if (newVal == "two") _test.CBVal = _t2; + if (newVal == null) _test.CBVal = new List(); + } + + public class test + { + public string BMAddress { get; set; } = "one"; + public List CBVal { get; set; } = new(); + } + + public class Row + { + public bool Rval { get; set; } + } + + +} diff --git a/examples/Demo/Shared/wwwroot/docs/WhatsNew.md b/examples/Demo/Shared/wwwroot/docs/WhatsNew.md index 9d781f37f..8a3eaa494 100644 --- a/examples/Demo/Shared/wwwroot/docs/WhatsNew.md +++ b/examples/Demo/Shared/wwwroot/docs/WhatsNew.md @@ -12,6 +12,7 @@ - \[DataGrid\] Remove optimalization check as it can break in certain scenarios ([#2875](https://github.com/microsoft/fluentui-blazor/pull/2875)) - \[KeyCode\] Add a new `StopRepeat` property ([#2908](https://github.com/microsoft/fluentui-blazor/pull/2908)) - \[MessageBar\] Implement ClearAfterNavigation on provider level ([#2919](https://github.com/microsoft/fluentui-blazor/pull/2919)) +- \[Tab\] Use correct color for close icon ([#2922](https://github.com/microsoft/fluentui-blazor/issues/2922)) - \[TreeItem\] Only pass initially selected state to the web component ([#2916](https://github.com/microsoft/fluentui-blazor/pull/2916)) ### Demo site and documentation diff --git a/src/Core/Components/List/ListComponentBase.razor.cs b/src/Core/Components/List/ListComponentBase.razor.cs index 61573d025..a24e56243 100644 --- a/src/Core/Components/List/ListComponentBase.razor.cs +++ b/src/Core/Components/List/ListComponentBase.razor.cs @@ -210,10 +210,10 @@ public override async Task SetParametersAsync(ParameterView parameters) newValue = (string?)parameter.Value; break; case nameof(Items): - if (Items is not null) + if (Items is not null && OptionSelected is not null) { - newSelectedOption = Items.FirstOrDefault(i => OptionSelected?.Invoke(i) == true); - newValue = GetOptionValue(newSelectedOption); + newSelectedOption = Items.FirstOrDefault(i => OptionSelected?.Invoke(i) == true); + newValue = GetOptionValue(newSelectedOption); } break; default: From a288ed0b183899c30ca10253b07bd5568808d645 Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Wed, 13 Nov 2024 11:56:08 +0100 Subject: [PATCH 20/20] Update whatsnew --- WHATSNEW.md | 1 + examples/Demo/Shared/wwwroot/docs/WhatsNew.md | 1 + 2 files changed, 2 insertions(+) diff --git a/WHATSNEW.md b/WHATSNEW.md index 585bc0bf9..4a1422e3f 100644 --- a/WHATSNEW.md +++ b/WHATSNEW.md @@ -12,6 +12,7 @@ - \[DataGrid\] Remove optimalization check as it can break in certain scenarios ([#2875](https://github.com/microsoft/fluentui-blazor/pull/2875)) - \[KeyCode\] Add a new `StopRepeat` property ([#2908](https://github.com/microsoft/fluentui-blazor/pull/2908)) - \[MessageBar\] Implement ClearAfterNavigation on provider level ([#2919](https://github.com/microsoft/fluentui-blazor/pull/2919)) +- \[Select\] Fix ValueChanged regression [#2923](https://github.com/microsoft/fluentui-blazor/issues/2923) - \[Tab\] Use correct color for close icon ([#2922](https://github.com/microsoft/fluentui-blazor/issues/2922)) - \[TreeItem\] Only pass initially selected state to the web component ([#2916](https://github.com/microsoft/fluentui-blazor/pull/2916)) diff --git a/examples/Demo/Shared/wwwroot/docs/WhatsNew.md b/examples/Demo/Shared/wwwroot/docs/WhatsNew.md index 8a3eaa494..7531dd850 100644 --- a/examples/Demo/Shared/wwwroot/docs/WhatsNew.md +++ b/examples/Demo/Shared/wwwroot/docs/WhatsNew.md @@ -12,6 +12,7 @@ - \[DataGrid\] Remove optimalization check as it can break in certain scenarios ([#2875](https://github.com/microsoft/fluentui-blazor/pull/2875)) - \[KeyCode\] Add a new `StopRepeat` property ([#2908](https://github.com/microsoft/fluentui-blazor/pull/2908)) - \[MessageBar\] Implement ClearAfterNavigation on provider level ([#2919](https://github.com/microsoft/fluentui-blazor/pull/2919)) +- \[Select\] Fix ValueChanged regression [#2923](https://github.com/microsoft/fluentui-blazor/issues/2923) - \[Tab\] Use correct color for close icon ([#2922](https://github.com/microsoft/fluentui-blazor/issues/2922)) - \[TreeItem\] Only pass initially selected state to the web component ([#2916](https://github.com/microsoft/fluentui-blazor/pull/2916))