mirror of
https://github.com/radzenhq/radzen-blazor.git
synced 2026-02-04 05:35:44 +00:00
* Remove Microsoft.CodeAnalysis. Add own C# expression parser. * Popup dialog animations (#2118) * Experiment with popup and dialog animations. * Move animations to a separate _animations.scss * Remove dialog closing animation. * Support side dialog positions. Prefix keyframes. * Use --rz-transition for animation function and duration * Reset site.css. * PanelMenu animations. * Display none is toggled a bit late. * RadzenPanel animations. * More animations. * Use transitions for panel menu. * Remove old code. * Accordion uses transitions. * Panel uses transitions. * Extract expand and collapse implementation in a separate component. * Set initial expand state earlier to prevent two renders. * Add open animation to notifications. * Handle onanimationend before toggling the animation classes. * Add menu animation. * Experiment with tree animation. * Add animations to fieldset. --------- Co-authored-by: yordanov <vasil@yordanov.info> * ExpressionSerializer and tests added (#2119) * Fix failing tests. * various components RequiresUnreferencedCode attribute added (#2120) * RequiresUnreferencedCode added to ExpressionSerializer * Update premium themes * RequiresUnreferencedCode added to ExpressionParser * FormComponentWithAutoComplete RequiresUnreferencedCode removed * Revert "FormComponentWithAutoComplete RequiresUnreferencedCode removed" This reverts commitec900a4df8. * Revert "RequiresUnreferencedCode added to ExpressionParser" This reverts commitf93b3b159b. * Revert "RequiresUnreferencedCode added to ExpressionSerializer" This reverts commit06fecec9a6. * Revert "various components RequiresUnreferencedCode attribute added (#2120)" This reverts commit2ed1a6cac1. * Remove RadzenHtml. * ExpressionSerializer FormatValue updated to use InvariantCulture * Catch potential JS interop exceptions that could occur during disposing. * Revert "Remove RadzenHtml." This reverts commit319085bf49. * SelectBar made single tab stop * RadioButtonList and CheckBoxList made single tab stop * SelectBar accessibility improved * RadioButtonList accessibility improved * CheckBoxList accessibility improved * Update radio button focus styles * Update checkbox list focus styles * Update Checkbox Radio and SelectBar focus styles * SelectBar, CheckBoxList and RadioButtonList focus state improved * Check for Multiple added * Use non-rendering event handlers for transitionend. * Rename css class rz-selectbutton to rz-selectbar and improve focus states * Fix selectbar focus outline offset * Update premium themes * Selectbar item focus styles should not be visible if the item is disabled. * CheckBoxList and RadioButtonList item focus should be visible only on keyboard input * SelectBar, CheckBoxList and RadioButtonList focus logic improved * Update animations * RadzenText margin-block should be 0 if it is in RadzenStack. Resolves #2134 * RadzenText margin-block should be 0 if it is first level child in RadzenStack * CheckBoxList focused fixed * Add toggle state classes to panel menu icon. * Update accordion styles to reflect expander changes * Add animation styles to expand arrow in Menu and ProfileMenu * Use a instead of NavLink as it seems to cause performance issues. * Set @bind-Expanded. * Revert "Set @bind-Expanded." This reverts commit 994107367bdf09043950f8bbe701eb9edefec676. * Revert "Use a instead of NavLink as it seems to cause performance issues." This reverts commit 05d5bef8f421bbeb5828ba1e9c5af6793ea3d32a. * Reduce rendering of panel menu items. * Add panel menu component. * Use ChildContent to render the toggle icon of the panel menu item. * Sync panel menu item selection in the item itself. * Rename ExpandedInternal to expanded. * Move filtering to the panel menu component. * Remove the transitionend handler to avoid a second rendering pass. * Build the assets for the net9.0 framework. * Do not trigger render when Click is used. * Panel menu keyboard navigation renders only when needed. * Focus reworked to use AsNonRenderingEventHandler * Focus the first item. * Update Panel demo * Use a more robust algorithm for month view event rendering that handles overlapping of events across a week. * Use RadzenStack in RadioButtonList * Add parsing support for `&` and `|`. * Add parsing support for `^`, `>>` and `<<`. * Simplify expression parsing tests. * Use RadzenStack in RadioButtonList and CheckBoxList * Change defaults for AlignItems and JustifyContent in RadioButtonList and CheckBoxList * Update RadioButtonList and CheckBoxList demos * Add --rz-input-border-block-end css variables to improve Fluent theme styles * Removed AsNonRenderingEventHandler from RadioButtonList and HtmlEditor focus and blur * Removed AsNonRenderingEventHandler from CheckBoxList * Simplify RadzenTable rendering. * Optimize memory usage of the ClassList utility. * Refactor RadzenButton to use ClassList. * RadzenSelectBar and RadzenSplitButton use ClassList. * Refactor RadzenBadge and RadzenAlert to use ClassList. * Refactor RadzenCard and RadzenFormField to use ClassList. * Refactor RadzenCardGroup and progress components to use ClassList. * Refactor RadzenMenu to use ClassList. * Use ClassList in RadzenBody, RadzenLayout and editor rendering components. * RadzenDialog uses ClassList. * RadzenDataGrid uses ClassList. * RadzenPager uses ClassList. * RadzenColumn uses ClassList. * Fix RadzenSplitButtonItem focused state. --------- Co-authored-by: Atanas Korchev <akorchev@gmail.com> Co-authored-by: Atanas Korchev <454726+akorchev@users.noreply.github.com> Co-authored-by: yordanov <vasil@yordanov.info> Co-authored-by: Quentin H <67709967+quintushr@users.noreply.github.com>
230 lines
7.0 KiB
C#
230 lines
7.0 KiB
C#
using Bunit;
|
|
using Microsoft.AspNetCore.Components;
|
|
using System.Linq;
|
|
using Xunit;
|
|
|
|
namespace Radzen.Blazor.Tests
|
|
{
|
|
public class PanelTests
|
|
{
|
|
[Fact]
|
|
public void Panel_Renders_CssClasses()
|
|
{
|
|
using var ctx = new TestContext();
|
|
|
|
var component = ctx.RenderComponent<RadzenPanel>();
|
|
|
|
component.Render();
|
|
|
|
Assert.Contains(@$"rz-panel", component.Markup);
|
|
Assert.Contains(@$"rz-panel-titlebar", component.Markup);
|
|
Assert.Contains(@$"rz-panel-content-wrapper", component.Markup);
|
|
Assert.Contains(@$"rz-panel-content", component.Markup);
|
|
}
|
|
|
|
[Fact]
|
|
public void Panel_Renders_TextParameter()
|
|
{
|
|
using var ctx = new TestContext();
|
|
|
|
var component = ctx.RenderComponent<RadzenPanel>();
|
|
|
|
var value = "Test";
|
|
|
|
component.SetParametersAndRender(parameters => parameters.Add(p => p.Text, value));
|
|
|
|
Assert.Contains(@$"<span>{value}</span>", component.Markup);
|
|
}
|
|
|
|
[Fact]
|
|
public void Panel_Renders_IconParameter()
|
|
{
|
|
using var ctx = new TestContext();
|
|
|
|
var component = ctx.RenderComponent<RadzenPanel>();
|
|
|
|
var value = "Test";
|
|
|
|
component.SetParametersAndRender(parameters => parameters.Add(p => p.Icon, value));
|
|
|
|
Assert.Contains(@$"<i class=""notranslate rzi"">{value}</i>", component.Markup);
|
|
}
|
|
|
|
[Fact]
|
|
public void Panel_Renders_ChildContentParameter()
|
|
{
|
|
using var ctx = new TestContext();
|
|
|
|
var component = ctx.RenderComponent<RadzenPanel>();
|
|
|
|
var value = "MyChildContent";
|
|
|
|
component.SetParametersAndRender(parameters => parameters.Add(p => p.ChildContent, value));
|
|
|
|
Assert.Contains(@$"{value}", component.Markup);
|
|
}
|
|
|
|
[Fact]
|
|
public void Panel_Renders_HeaderTemplateParameter()
|
|
{
|
|
using var ctx = new TestContext();
|
|
|
|
var component = ctx.RenderComponent<RadzenPanel>();
|
|
|
|
var value = "MyHeaderTemplate";
|
|
|
|
component.SetParametersAndRender(parameters => parameters.Add(p => p.HeaderTemplate, value));
|
|
|
|
Assert.Contains(@$"{value}", component.Markup);
|
|
}
|
|
|
|
[Fact]
|
|
public void Panel_Renders_FooterTemplateParameter()
|
|
{
|
|
using var ctx = new TestContext();
|
|
|
|
var component = ctx.RenderComponent<RadzenPanel>();
|
|
|
|
var value = "MyFooterTemplate";
|
|
|
|
component.SetParametersAndRender(parameters => parameters.Add(p => p.FooterTemplate, value));
|
|
|
|
Assert.Contains(@$"{value}", component.Markup);
|
|
}
|
|
|
|
[Fact]
|
|
public void Panel_Renders_AllowCollapseParameter()
|
|
{
|
|
using var ctx = new TestContext();
|
|
|
|
var component = ctx.RenderComponent<RadzenPanel>();
|
|
|
|
var classes = @"class=""rz-panel-titlebar-icon rz-panel-titlebar-toggler""";
|
|
|
|
component.Render();
|
|
|
|
Assert.DoesNotContain(classes, component.Markup);
|
|
|
|
component.SetParametersAndRender(parameters => parameters.Add<bool>(p => p.AllowCollapse, true));
|
|
|
|
Assert.Contains(classes, component.Markup);
|
|
}
|
|
|
|
[Fact]
|
|
public void Panel_Renders_CollapsedParameter()
|
|
{
|
|
using var ctx = new TestContext();
|
|
|
|
var component = ctx.RenderComponent<RadzenPanel>();
|
|
|
|
component.SetParametersAndRender(parameters => parameters.Add<bool>(p => p.AllowCollapse, true));
|
|
|
|
Assert.Contains(@"<span class=""notranslate rzi rzi-minus""></span>", component.Markup);
|
|
|
|
component.SetParametersAndRender(parameters => parameters.Add<bool>(p => p.Collapsed, true));
|
|
|
|
Assert.Contains(@"<span class=""notranslate rzi rzi-plus""></span>", component.Markup);
|
|
}
|
|
|
|
[Fact]
|
|
public void Panel_Renders_StyleParameter()
|
|
{
|
|
using var ctx = new TestContext();
|
|
|
|
var component = ctx.RenderComponent<RadzenPanel>();
|
|
|
|
var value = "width:20px";
|
|
|
|
component.SetParametersAndRender(parameters => parameters.Add(p => p.Style, value));
|
|
|
|
Assert.Contains(@$"style=""{value}""", component.Markup);
|
|
}
|
|
|
|
[Fact]
|
|
public void Panel_Renders_UnmatchedParameter()
|
|
{
|
|
using var ctx = new TestContext();
|
|
|
|
var component = ctx.RenderComponent<RadzenPanel>();
|
|
|
|
component.SetParametersAndRender(parameters => parameters.AddUnmatched("autofocus", ""));
|
|
|
|
Assert.Contains(@$"autofocus", component.Markup);
|
|
}
|
|
|
|
[Fact]
|
|
public void Panel_Raises_ExpandAndCollapseEvents()
|
|
{
|
|
using var ctx = new TestContext();
|
|
|
|
var component = ctx.RenderComponent<RadzenPanel>();
|
|
|
|
var raised = false;
|
|
|
|
component.SetParametersAndRender(parameters =>
|
|
{
|
|
parameters.Add<bool>(p => p.AllowCollapse, true);
|
|
parameters.Add(p => p.Collapse, args => { raised = true; });
|
|
});
|
|
|
|
component.Find("a").Click();
|
|
|
|
Assert.True(raised);
|
|
|
|
raised = false;
|
|
|
|
component.SetParametersAndRender(parameters => parameters.Add(p => p.Expand, args => { raised = true; }));
|
|
|
|
component.Find("a").Click();
|
|
}
|
|
|
|
[Fact]
|
|
public void Panel_Renders_SummaryWhenCollapsed()
|
|
{
|
|
using var ctx = new TestContext();
|
|
var component = ctx.RenderComponent<RadzenPanel>();
|
|
|
|
component.SetParametersAndRender(parameters =>
|
|
{
|
|
parameters.Add<bool>(p => p.AllowCollapse, true);
|
|
parameters.Add<bool>(p => p.Collapsed, true);
|
|
parameters.Add<RenderFragment>(p => p.SummaryTemplate, builder =>
|
|
{
|
|
builder.OpenElement(0, "p");
|
|
builder.AddContent(0, "SummaryContent");
|
|
builder.CloseElement();
|
|
});
|
|
|
|
});
|
|
|
|
Assert.Contains("SummaryContent", component.Markup);
|
|
}
|
|
|
|
[Fact]
|
|
public void Panel_DoesNotRender_SummaryWhenOpen()
|
|
{
|
|
using var ctx = new TestContext();
|
|
var component = ctx.RenderComponent<RadzenPanel>();
|
|
|
|
component.SetParametersAndRender(parameters =>
|
|
{
|
|
parameters.Add<bool>(p => p.AllowCollapse, true);
|
|
parameters.Add<bool>(p => p.Collapsed, false);
|
|
parameters.Add<RenderFragment>(p => p.SummaryTemplate, builder =>
|
|
{
|
|
builder.OpenElement(0, "p");
|
|
builder.AddContent(0, "SummaryContent");
|
|
builder.CloseElement();
|
|
});
|
|
|
|
});
|
|
|
|
Assert.Contains("SummaryContent", component.Markup);
|
|
Assert.Equal(
|
|
"true",
|
|
component.Find(".rz-panel-content-summary").ParentElement.ParentElement.Attributes.First(attr => attr.Name == "aria-hidden").Value
|
|
);
|
|
}
|
|
}
|
|
}
|