Skip to content
This repository was archived by the owner on Jan 5, 2024. It is now read-only.

Commit 4ce80cf

Browse files
authored
release: 发布 0.6.2 版本 (#303)
2 parents 7e93f18 + ad3bdf5 commit 4ce80cf

13 files changed

Lines changed: 710 additions & 206 deletions

File tree

Contributing.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,18 @@
4141
4242
**如果你还没有成为贡献者,需要通过联系方式通知仓库所有者将你添加到贡献者名单中**
4343

44-
项目采用采用 `dev/main` 的形式进行分支开发
44+
项目采用采用【分支开发,主干发布】的模式进行开发
4545

46-
- `dev/version`:作为正在开发的版本
4746
- `main`:最新的稳定版本,并且历史版本将用 `tag` 作为标记
47+
- `release/version`:作为发布后的稳定版本
4848

4949
分支开发时,以 issue 号作为命名:
5050
- `feature/{任务号}`:新功能
5151
- `bugfix/{任务号}`:修复的bug
5252
- `hotfix/{任务号}`:紧急修复的问题
5353

54+
> 没有 Issue 号的,请使用合适的分支名称,参照动宾短语的语法
55+
5456

5557
**分支开发流程**
5658
1. 拉取指定分支获取最新代码
@@ -110,7 +112,7 @@
110112
111113
## 组件开发规范
112114
* 组件名称要以 **“T”** 字母作为开头,例如 `TButton``TTable``TTab``TInputText` 等,以最大限度避免与其他组件的命名出现冲突(项目中可能会有多个组件框架出现)
113-
> 如何判断是组件类?组件类必须继承 `TDesignComponentBase` 以及会以 `TDesignComponentBase` 结尾的组件基类
115+
> 如何判断是组件类?组件类必须继承 `TDesignComponentBase` 或以 `TDesign...ComponentBase` 命名的组件基类
114116
* 可输入组件要以 `Input` 开头,例如 `TInputText``TInputCheckBox`
115117
* 分组或容器组件以 `Group``Container` 作为后缀命名,如 `TAvatarGroup``TInputGroup`
116118
* 组件的参数名称,不用与官方保持一致,命名规范参照开发语言规范即可

doc/TDesign.Docs.ServerSide/TDesign.xml

Lines changed: 13 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

doc/TDesign.Docs.Shared/Pages/Components/Basic/ButtonPage.razor

Lines changed: 217 additions & 48 deletions
Large diffs are not rendered by default.

doc/TDesign.Docs.WebAssembly/wwwroot/TDesign.xml

Lines changed: 13 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"dependencies": {
3-
"tdesign-vue": "^1.0.8"
3+
"tdesign-vue": "^1.4.0"
44
}
55
}
Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,103 @@
1-
namespace TDesign.Test.Components.Basic;
1+
using ComponentBuilder.FluentRenderTree;
22

3-
public class ButtonTest : TestBase
3+
namespace TDesign.Test.Components.Basic;
4+
public class ButtonTest : TestBase<TButton>
45
{
56
[Fact(DisplayName = "按钮 - 渲染 button 元素标记")]
67
public void Test_Render_Button_Tag()
78
{
8-
TestContext.RenderComponent<TButton>().Should().HaveTag("button");
9+
RenderComponent().Should().HaveTag("button");
910
}
1011

1112
[Fact(DisplayName = "按钮 - Theme 参数 ")]
1213
public void Test_Theme_Parameter()
1314
{
14-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Theme, Theme.Primary)).Should().HaveClass("t-button--theme-primary");
15+
RenderComponent(m => m.Add(p => p.Theme, Theme.Primary)).Should().HaveClass("t-button--theme-primary");
1516

16-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Theme, Theme.Success)).Should().HaveClass("t-button--theme-success");
17+
RenderComponent(m => m.Add(p => p.Theme, Theme.Success)).Should().HaveClass("t-button--theme-success");
1718

18-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Theme, Theme.Danger)).Should().HaveClass("t-button--theme-danger");
19+
RenderComponent(m => m.Add(p => p.Theme, Theme.Danger)).Should().HaveClass("t-button--theme-danger");
1920

20-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Theme, Theme.Warning)).Should().HaveClass("t-button--theme-warning");
21+
RenderComponent(m => m.Add(p => p.Theme, Theme.Warning)).Should().HaveClass("t-button--theme-warning");
2122
}
2223

2324
[Fact(DisplayName = "按钮 - HtmlType 参数渲染 HTML 的 type 属性")]
2425
public void Test_HtmlType_Parameter()
2526
{
26-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.HtmlType, ButtonHtmlType.Button)).Should().HaveAttribute("type", "button");
27+
RenderComponent(m => m.Add(p => p.HtmlType, ButtonHtmlType.Button)).Should().HaveAttribute("type", "button");
2728

28-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.HtmlType, ButtonHtmlType.Submit)).Should().HaveAttribute("type", "submit");
29+
RenderComponent(m => m.Add(p => p.HtmlType, ButtonHtmlType.Submit)).Should().HaveAttribute("type", "submit");
2930

30-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.HtmlType, ButtonHtmlType.Reset)).Should().HaveAttribute("type", "reset");
31+
RenderComponent(m => m.Add(p => p.HtmlType, ButtonHtmlType.Reset)).Should().HaveAttribute("type", "reset");
3132
}
3233

3334
[Fact(DisplayName = "按钮 - Varient 参数")]
3435
public void Test_Type_Parameter()
3536
{
36-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Varient, ButtonVarient.Dashed)).Should().HaveClass("t-button--variant-dashed");
37+
RenderComponent(m => m.Add(p => p.Varient, ButtonVarient.Dashed)).Should().HaveClass("t-button--variant-dashed");
3738

38-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Varient, ButtonVarient.Base)).Should().HaveClass("t-button--variant-base");
39+
RenderComponent(m => m.Add(p => p.Varient, ButtonVarient.Base)).Should().HaveClass("t-button--variant-base");
3940

40-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Varient, ButtonVarient.Outline)).Should().HaveClass("t-button--variant-outline");
41+
RenderComponent(m => m.Add(p => p.Varient, ButtonVarient.Outline)).Should().HaveClass("t-button--variant-outline");
4142

42-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Varient, ButtonVarient.Text)).Should().HaveClass("t-button--variant-text");
43+
RenderComponent(m => m.Add(p => p.Varient, ButtonVarient.Text)).Should().HaveClass("t-button--variant-text");
4344
}
4445

4546
[Fact(DisplayName = "按钮 - Ghost 参数")]
4647
public void Test_Ghost_Parameter()
4748
{
48-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Ghost, true)).Should().HaveClass("t-button--ghost");
49+
RenderComponent(m => m.Add(p => p.Ghost, true)).Should().HaveClass("t-button--ghost");
4950
}
5051

5152
[Fact(DisplayName = "按钮 - Size 参数")]
5253
public void Test_Size_Parameter()
5354
{
54-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Size, Size.Small)).Should().HaveClass("t-size-s");
55-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Size, Size.Medium)).Should().HaveClass("t-size-m");
56-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Size, Size.Large)).Should().HaveClass("t-size-l");
55+
RenderComponent(m => m.Add(p => p.Size, Size.Small)).Should().HaveClass("t-size-s");
56+
RenderComponent(m => m.Add(p => p.Size, Size.Medium)).Should().HaveClass("t-size-m");
57+
RenderComponent(m => m.Add(p => p.Size, Size.Large)).Should().HaveClass("t-size-l");
5758
}
5859

5960
[Fact(DisplayName = "按钮 - Block 参数")]
6061
public void Test_Block_Parameter()
6162
{
62-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Block, true)).Should().HaveClass("t-size-full-width");
63+
RenderComponent(m => m.Add(p => p.Block, true)).Should().HaveClass("t-size-full-width");
6364
}
6465

6566
[Fact(DisplayName = "按钮 - Shape 参数")]
6667
public void Test_Shape_Parameter()
6768
{
68-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Shape, ButtonShape.Rectangle)).Should().HaveClass("t-button--shape-rectangle");
69-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Shape, ButtonShape.Square)).Should().HaveClass("t-button--shape-square");
70-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Shape, ButtonShape.Circle)).Should().HaveClass("t-button--shape-circle");
71-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Shape, ButtonShape.Round)).Should().HaveClass("t-button--shape-round");
69+
RenderComponent(m => m.Add(p => p.Shape, ButtonShape.Rectangle)).Should().HaveClass("t-button--shape-rectangle");
70+
RenderComponent(m => m.Add(p => p.Shape, ButtonShape.Square)).Should().HaveClass("t-button--shape-square");
71+
RenderComponent(m => m.Add(p => p.Shape, ButtonShape.Circle)).Should().HaveClass("t-button--shape-circle");
72+
RenderComponent(m => m.Add(p => p.Shape, ButtonShape.Round)).Should().HaveClass("t-button--shape-round");
7273
}
7374

7475
[Fact(DisplayName = "按钮 - Disabled 参数")]
7576
public void Test_Disabled_Parameter()
7677
{
77-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Disabled, true)).Should().HaveClass("t-is-disabled").And.HaveAttribute("disabled","disabled");
78+
RenderComponent(m => m.Add(p => p.Disabled, true)).Should().HaveClass("t-is-disabled").And.HaveAttribute("disabled","disabled");
7879
}
7980

8081

8182
[Fact(DisplayName = "按钮 - Loading 参数")]
8283
public void Test_Loading_Parameter()
8384
{
84-
TestContext.RenderComponent<TButton>(m => m.Add(p => p.Loading, true)).Should().HaveClass("t-is-loading");
85+
RenderComponent(m => m.Add(p => p.Loading, true)).Should().HaveClass("t-is-loading");
86+
}
87+
88+
[Fact(DisplayName ="按钮 - 有图标和文字一起适配")]
89+
public void Test_Icon_With_Text()
90+
{
91+
var button= RenderComponent(m => m.Add(p => p.Icon, IconName.Add));
92+
button.FindComponent<TIcon>().MarkupMatches(b => b.Component<TIcon>().Attribute(m => m.Name, IconName.Add).Close());
93+
}
94+
95+
[Theory(DisplayName ="按钮 - 不同的 HTML 标记渲染按钮")]
96+
[InlineData(new object[] { "div"})]
97+
[InlineData(new object[] { "a" })]
98+
[InlineData(new object[] { "span" })]
99+
public void Test_Button_With_TagName(string tag)
100+
{
101+
RenderComponent(m => m.Add(p => p.TagName, tag)).Should().HaveTag(tag);
85102
}
86103
}

src/TDesign/Components/TButton.cs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,13 @@ namespace TDesign;
55
/// <summary>
66
/// 表示用于开启一个闭环的操作任务的按钮。
77
/// </summary>
8-
[HtmlTag("button")]
98
[CssClass("t-button")]
10-
public class TButton : TDesignComponentBase, IHasChildContent
9+
public class TButton : TDesignAdditionParameterWithChildContentComponentBase
1110
{
1211
/// <summary>
1312
/// <inheritdoc/>
1413
/// </summary>
1514
[Parameter][HtmlAttribute("onclick")] public EventCallback<MouseEventArgs?> OnClick { get; set; }
16-
/// <summary>
17-
/// <inheritdoc/>
18-
/// </summary>
19-
[Parameter] public RenderFragment? ChildContent { get; set; }
2015

2116
/// <summary>
2217
/// 设置按钮的 HTML 类型。默认时 <see cref="ButtonHtmlType.Button"/> 类型。
@@ -57,17 +52,28 @@ public class TButton : TDesignComponentBase, IHasChildContent
5752
/// </summary>
5853
[Parameter][CssClass("t-is-loading")] public bool Loading { get; set; }
5954

55+
/// <summary>
56+
/// 设置按钮风格的 HTML 元素名称。默认是 button。
57+
/// </summary>
58+
[Parameter] public string? TagName { get; set; } = "button";
59+
60+
/// <summary>
61+
/// 图标的名称。
62+
/// </summary>
63+
[Parameter]public object? Icon { get; set; }
64+
65+
/// <inheritdoc/>
66+
public override string GetTagName() => TagName;
67+
6068
/// <summary>
6169
/// <inheritdoc/>
6270
/// </summary>
6371
/// <param name="builder"></param>
6472
/// <param name="sequence"></param>
6573
protected override void AddContent(RenderTreeBuilder builder, int sequence)
6674
{
67-
builder.CreateElement(sequence, "span", content =>
68-
{
69-
base.AddContent(content, sequence);
70-
}, new { @class = "t-button__text" });
75+
builder.Component<TIcon>(Icon is not null).Attribute(m => m.Name, Icon).Close();
76+
builder.Span("t-button__text",ChildContent is not null).Content(ChildContent).Close();
7177
}
7278
}
7379

0 commit comments

Comments
 (0)