Compare commits

...

964 Commits

Author SHA1 Message Date
Argo Zhang
d06670cb6f feat(Chart): add AddDataset method (#7354)
* doc: 更新示例

* feat(Chart): add AddDataset method
2025-12-17 13:54:12 +08:00
Argo Zhang
3aba824723 feat(Chart): add more Colors (#7353) 2025-12-17 12:59:52 +08:00
Argo Zhang
0d0bf5c3ed feat(Chart): support custome BackgroundColor (#7352)
* feat(Chart): add Hidden parameter on ChartDataset

* chore: update documentation

* feat(Chart): support custome BackgroundColor
2025-12-17 12:38:03 +08:00
Argo Zhang
264b9d6f5a feat(Chart): add Hidden parameter on ChartDataset (#7351) 2025-12-17 10:44:07 +08:00
Argo Zhang
f1154eda38 feat(Region): update region data of Chongqin (#7344) 2025-12-16 18:02:30 +08:00
Argo Zhang
e6acb2d816 doc(SelectRegion): add inject service method doc (#7342) 2025-12-16 15:57:52 +08:00
Argo Zhang
09f22268ee doc(DateTimeRange): add Holiday package doc (#7341) 2025-12-16 15:54:46 +08:00
Argo Zhang
a5e0a0870f doc(HikVision): update HikVision document (#7337) 2025-12-15 19:03:51 +08:00
Argo Zhang
ad34783cec feat(Reboot): increase reboot count down time (#7335)
* doc: 更新倒计时时长为 4 分钟

* doc: 更新时长
2025-12-14 16:46:29 +08:00
Argo Zhang
7b85630a7c feat(PdfReader): support client download use pdf stream (#7333) 2025-12-14 16:44:23 +08:00
Argo Zhang
b1f9ed5d74 refactor(PdfReader): add z-index value (#7331) 2025-12-14 14:33:02 +08:00
Argo Zhang
05565f213a fix(PdfReader): render pdf when set ShowToolbar is false (#7329)
* chore: bump version 10.0.16

* fix(PdfReader): render pdf when set ShowToolbar is false
2025-12-14 13:52:43 +08:00
Argo Zhang
894e27cd1d feat(QueryPageOptions): SearchModel support serialize (#7327)
* refactor: 代码重构增加 type 标识类型

* test: 更新单元测试

* test: 补充单元测试

* test: 增加单元测试提高覆盖率

* chore: bump version 10.1.4-beta07
2025-12-14 03:09:02 +00:00
Argo Zhang
258c5465d4 fix(EditorForm): add IsFixed parameter prevent trigger OnParameterSet (#7324)
* fix(EditorForm): add IsFixed parameter

* chore: bump version 10.1.3

* chore: bump version 10.1.3-beta01

Co-Authored-By: Tony-ST0754 <244411587+tony-st0754@users.noreply.github.com>

* Revert "chore: bump version 10.1.3-beta01"

This reverts commit a41d1949c8.

---------

Co-authored-by: Tony-ST0754 <244411587+tony-st0754@users.noreply.github.com>
2025-12-13 20:45:50 +08:00
Argo Zhang
dbae1d036d fix(Table): support QueryPageOptions serialization (#7323)
* 添加 QueryPageOptions json序列化失败例子

* 测试通过

* 更新示例

* Revert "更新示例"

This reverts commit 0bbbb21c28.

* Revert "测试通过"

This reverts commit d2db59e522.

# Conflicts:
#	src/BootstrapBlazor/Extensions/QueryPageOptionsExtensions.cs

* Revert "添加 QueryPageOptions json序列化失败例子"

This reverts commit 1679565888.

* revert: 撤销单元测试更改

* refactor: 优化代码

* feat: 增加 JsonFilterKeyValueActionConverter 转换器

* refactor: 更新 IFilterAction 序列化实现类

* test: 增加单元测试

* fix: 修复搜索过滤集合序列化逻辑

* refactor: 统一键值

---------

Co-authored-by: 2248356998 qq.com <2248356998@qq.com>
2025-12-13 20:37:47 +08:00
Argo Zhang
2e5c6759c7 feat(PdfReader): add load progress function (#7322)
* chore: bump version 10.1.4-beta05

* doc: 更新示例

* chore: bump version 10.0.14

* refactor: 更新示例

* chore: bump version 10.0.15
2025-12-13 16:32:19 +08:00
Argo Zhang
904fd36da9 fix(PopConfirmButton): parameter IsKeepDisabled not work (#7319)
* fix(PopConfirmButton): parameter IsKeepDisabled not work

* doc: 更新文档

* chore: bump version 10.1.4-beta05
2025-12-13 10:08:41 +08:00
Argo Zhang
33256b8aea test(QueryPageOptions): wip update unit test (#7317) 2025-12-12 21:37:21 +08:00
Argo Zhang
b39563f772 doc(Vote): prevent vote under debug env (#7315) 2025-12-12 21:26:31 +08:00
Argo Zhang
a4a3f1a603 doc(Calendar): update documentation (#7313)
* doc(Calendar): update documentation

* doc: update test

Co-Authored-By: kykcoco <63773378+kykcoco@users.noreply.github.com>

* revert: 撤销更改

Co-Authored-By: kykcoco <63773378+kykcoco@users.noreply.github.com>

* Revert "revert: 撤销更改"

This reverts commit 25eaed59be.

* Revert "doc: update test"

This reverts commit bd61de6016.

---------

Co-authored-by: kykcoco <63773378+kykcoco@users.noreply.github.com>
2025-12-12 20:09:33 +08:00
Diego
ff28f9c6c0 fix(Table): support QueryPageOptions serialization (#7310)
* 添加 QueryPageOptions json序列化失败例子

* 测试通过

* 更新示例

* revert: 撤销更改

* revert: 撤销代码更改

* refactor: 代码格式化

* doc: 增加注释

Co-Authored-By: Diego <82756760+kimdiego2098@users.noreply.github.com>

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-12-12 20:01:42 +08:00
Argo Zhang
ace10cfd94 chore(Deploy): update sdk version to net10 (#7309) 2025-12-12 15:31:47 +08:00
Argo Zhang
f9aa99e30b fix(Table): support value type (#7307)
* fix: 兼容值类型数据

* chore: bump version 10.1.4-beta04
2025-12-12 11:33:09 +08:00
Argo Zhang
81ca44ced0 fix(CountButton): add Task yield prevent block thread (#7306) 2025-12-12 10:47:00 +08:00
Argo Zhang
8dd3e1d178 fix(Button): add Task yield prevent block thread (#7303)
* fix(Button): add Task yield prevent block thread

* chore: bump version 10.1.4-beta03
2025-12-12 10:34:16 +08:00
Argo Zhang
dbf866c4d1 doc(Button): add IsKeepDisabled parameter doc (#7301) 2025-12-12 10:19:15 +08:00
Argo Zhang
af8fef4c83 feat(PdfReader): add OnGetStreamAsync parameter (#7300)
* doc: 更新文档说明

* feat(PdfReader): add OnGetStreamAsync parameter
2025-12-12 10:09:55 +08:00
Argo Zhang
19c6e27ecd fix(Table): make sure dispose drag columns (#7297)
* fix(Table): make sure dispose drag columns

* chore: bump version 10.1.4-beta02
2025-12-11 18:34:17 +08:00
Argo Zhang
604e468621 feat(Table): support navigation property null value (#7296)
* fix: 修复复杂导航属性获取值表达式不支持 null 值问题

* chore: bump version 10.1.4-beta01

* refactor: 优化代码
2025-12-11 17:28:03 +08:00
Argo Zhang
24729ef606 doc(Select): add DefaultVirtualizeItemText parameter sample code (#7294)
* doc: 更新多语言键值拼写错误

* perf: 改用 Find 提高性能

* doc: 更新示例文档

* refactor: 更改绑定值为可为空
2025-12-11 13:08:47 +08:00
Argo Zhang
76809d256a doc(HikVision): update HikVision component documentation (#7291) 2025-12-10 13:05:31 +08:00
Argo Zhang
420100468b doc(IDynamicObject): update table dynamic data sample (#7289) 2025-12-10 11:46:45 +08:00
Argo Zhang
c941dc8a20 feat(Html2Pdf): bump version 10.0.1 (#7287) 2025-12-10 10:49:31 +08:00
Argo Zhang
d4dc19559a chore(HikVision): remove AddBootstrapBlazorHikVision service (#7285) 2025-12-10 10:19:57 +08:00
Argo Zhang
b964850ad7 chore(editorconfig): remove csproj encoding config (#7283) 2025-12-10 09:52:43 +08:00
Argo Zhang
ee2950100c fix(AutoComplete): shoud trigger ValueChanged after enter (#7281) 2025-12-09 16:00:38 +08:00
Argo Zhang
87822912ac feat(IpAddress): trigger ValueChanged on paste event (#7280)
* refactor: 增加 JSInvoke 能力

* refactor: 更改样式

* refactor: 增加客户端更改 IP 回调方法

* test: 更新单元测试

* chore: bump version 10.1.3
2025-12-09 13:52:44 +08:00
Argo Zhang
8ef6fe83c8 feat(HikVision): improve dispose performance (#7278) 2025-12-09 13:08:07 +08:00
Argo Zhang
8e4db1cbe5 feat(IpAddress): support paste function (#7276)
* feat(IpAddress): support paste function

* refactor: 代码格式化
2025-12-09 10:29:28 +08:00
Argo Zhang
19da5ef12e feat(HikVision): support auto hide Wnd change route (#7274) 2025-12-09 09:52:16 +08:00
Argo Zhang
f9a7e9a840 feat(IZipArchiveService): add ExtractToDirectoryAsync method (#7272)
* feat: 增加 ExtractToDirectoryAsync 异步方法

* refactor: 移除报错日志

* chore: bump version 10.1.2

* refactor: 增加取消令牌支持

* test: 更新单元测试

* test: 更新单元测试
2025-12-08 14:11:07 +08:00
Argo Zhang
2e41fc0a68 feat(HikVision): add HidePlugin function (#7269) 2025-12-07 15:05:18 +08:00
Argo Zhang
3881fcbfeb feat(HikVision): add remove plugin function (#7267) 2025-12-06 20:33:45 +08:00
Argo Zhang
4ca4df4ae1 feat(HikVision): hack JSVideoPlugin script prevent throw exception (#7265) 2025-12-06 16:44:22 +08:00
Argo Zhang
2218973d14 feat(HikVision): add szBasePath parameter (#7263)
* doc: 增加初始化失败逻辑

* doc: 增加海康威视 sdk 下载提示框

* feat(HikVision): add szBasePath parameter
2025-12-06 11:38:06 +08:00
Argo Zhang
83a69f7b5a doc(HikVision): rename HikVision component name (#7261)
* doc: 更新映射文件

* chore: bump version 10.0.0-beta04
2025-12-05 16:02:56 +08:00
Argo Zhang
ba29cfa71c feat(BootstrapInputGroupLabel): add IToolbarComponent cascading value (#7259)
* feat(BootstrapInputGroupLabel): add IToolbarComponent cascading value

* test: 增加单元测试

* chore: bump version 10.1.2-beta01
2025-12-05 06:49:19 +00:00
Argo Zhang
fd396e36ea feat(BootstrapInputGroupLabel): add IsGroupLabel parameter (#7257)
* feat(Table): use dropdown-column selector

* feat: 增加 IsGroupLabel 参数

* style: 增加样式

* test: 增加单元测试
2025-12-05 14:29:04 +08:00
Argo Zhang
17edba3906 feat(Table): use dropdown-column selector (#7255) 2025-12-05 13:20:17 +08:00
Argo Zhang
08ce31fab8 feat(Module): support auto append Interop argument (#7254) 2025-12-05 12:48:32 +08:00
Argo Zhang
6937eaa5ef doc(HikVision): add GetChannles info (#7252) 2025-12-05 12:46:10 +08:00
Argo Zhang
d6e0b2bfd7 feat(HikVision): support IDispose interface (#7250) 2025-12-04 18:22:19 +08:00
Argo Zhang
cbc926bdf0 doc(HikVision): add HikVision component (#7248)
* chore: 增加映射

* feat: 增加海康摄像头服务

* doc: 增加示例文档

* chore: 增加示例文档

* chore: 增加海康摄像头依赖

* doc: 移除插件

* doc: 增加多语言支持

* doc: 更新菜单多语言

* doc: 更新键值

* doc: 增加用户名与密码
2025-12-04 17:42:28 +08:00
Argo Zhang
2dc7e9a146 feat(HikVision): add HikVision component (#7245)
* chore: 增加映射

* feat: 增加海康摄像头服务

* doc: 增加示例文档
2025-12-04 15:53:48 +08:00
Argo Zhang
990c5f32bb test(EditDialog): update unit test for use IsAsync on submit button (#7243) 2025-12-04 03:48:40 +00:00
trapezoid
5076c5d403 fix(OtpInput): typo in character validation for OtpInput (#7240)
* Fix typo in character validation for OtpInput

The letter 'G' is missing, meaning it is not possible to input only 'G' in OtpInput.

Signed-off-by: trapezoid <trapezoid.g@gmail.com>

* chore: bump version 10.1.1

---------

Signed-off-by: trapezoid <trapezoid.g@gmail.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-12-04 11:30:19 +08:00
Argo Zhang
292ceeb802 doc(CherryMarkdown): update documentation (#7239) 2025-12-03 16:34:51 +08:00
Argo Zhang
9fdd344f24 feat(EditDialog): add IsAsync on save button (#7237)
* feat(EditDialog): add IsAsync on save button

* chore: bump version 10.1.1-beta01
2025-12-03 12:12:35 +08:00
Argo Zhang
307072469c feat(Button): use javascript control IsAsync behavior (#7235)
* feat(Button): use javascript control IsAsync behavior

* refactor: 增加条件
2025-12-03 12:10:13 +08:00
Argo Zhang
0fe26b809a feat(PdfReader): support download (#7232) 2025-12-03 11:01:42 +08:00
Argo Zhang
f3ebc70e3b feat(Vditor): support edit form (#7230) 2025-12-03 10:20:30 +08:00
Argo Zhang
445c0cf857 feat(PdfReader): support wasm mode (#7228) 2025-12-03 09:07:55 +08:00
Argo Zhang
e7aa481e1d fix(NullSwitch): prevent trigger OnValueChagned first render (#7226)
* fix(Switch): remove assign value

* doc: update encode

* chore: bump version 10.1.0
2025-12-02 14:17:59 +08:00
Argo Zhang
7198317312 chore(PdfReader): bump version 10.0.9 (#7224) 2025-12-02 10:47:18 +08:00
Argo Zhang
f34a356ca8 feat(UniverSheet): bump version 10.0.1 (#7222) 2025-12-01 12:07:15 +08:00
Argo Zhang
8a81a24340 fix(CherryMarkdown): add max allow size parameter on Upload method (#7220) 2025-12-01 11:07:57 +08:00
Argo Zhang
ab0a9023b1 chore(Bench): remove SimpleJob attribute (#7218)
* chore: 更改 header

* refactor: 移除 Job 标签
2025-11-30 09:15:18 +08:00
Argo Zhang
7cab9dedc8 feat(PdfReader): add OnRotationChanged parameter (#7216) 2025-11-30 09:13:10 +08:00
Argo Zhang
43e5c93987 feat(PdfReader): add Document properties Function (#7213) 2025-11-29 10:38:02 +08:00
Argo Zhang
35f48ed099 feat(PdfReader): add ResetToolbarView function (#7211) 2025-11-28 16:02:54 +08:00
Argo Zhang
59265cfd7f feat(PdfReader): update pdf_view css (#7209) 2025-11-28 12:20:35 +08:00
Argo Zhang
14a9221e75 feat(Vditor): support bind value (#7207) 2025-11-28 11:55:50 +08:00
Argo Zhang
9013824f2f feat(PdfReader): add width observer function (#7205) 2025-11-28 11:23:07 +08:00
Argo Zhang
228867663b feat(PdfReader): add ShowToolbar parameter (#7203) 2025-11-28 09:01:27 +08:00
Argo Zhang
3d63087123 feat(PdfReader): add EnableThumbnails parameter (#7201)
* doc: 更新 EnableThumbnails 示例

* chore: bump version 10.0.4-beta01
2025-11-28 08:37:35 +08:00
Argo Zhang
b7fb049327 chore(PdfReader): bump version 10.0.3 (#7199) 2025-11-27 16:14:30 +08:00
Argo Zhang
08c3461df7 chore(PdfReader): bump version 10.0.2 (#7197) 2025-11-27 15:41:38 +08:00
Argo Zhang
ef960aee22 feat(PdfReader): add localization doc (#7195)
* chore: bump version 10.0.1

* refactor: 精简代码
2025-11-27 15:17:04 +08:00
Argo Zhang
02b0591ca7 feat(PdfReader): add OnPrintingAsync parameter (#7193) 2025-11-27 12:23:25 +08:00
Argo Zhang
84d42b594a feat(PdfReader): add ShowPrint parameter (#7191)
* feat(PdfReader): add OnDownloadAsync function

* chore: updated version to 10.0.1-beta06

* feat(PdfReader): add ShowPrint parameter
2025-11-27 11:40:59 +08:00
Argo Zhang
1786ad70ea feat(PdfReader): add OnDownloadAsync function (#7189)
* feat(PdfReader): add OnDownloadAsync function

* chore: updated version to 10.0.1-beta06
2025-11-27 09:19:52 +08:00
Argo Zhang
a33217d934 fix(Table): reset columns after toggle visible (#7187)
* fix(Table): 列被隐藏再取消隐藏后,拖动列改变列顺序的功能不正常 #7176

* refactor: 复用脚本

* test: 更新单元测试

* test: 重构单元测试

---------

Co-Authored-By: ljmay168 <209402714+ljmay168@users.noreply.github.com>
2025-11-26 16:32:46 +08:00
Argo Zhang
b161e57cf0 feat(PdfReader): add thumbnails function (#7185)
* chore: 增加缩略图功能

* feat(PdfReader): add thumbnails function

* chore: 更新依赖

* chore: 更新解决方案
2025-11-26 15:28:49 +08:00
Argo Zhang
26c6bfd0a7 feat(PdfReader): add TwoPagesOnView function (#7182) 2025-11-26 10:10:15 +08:00
Argo Zhang
c4e567cf79 feat(PdfReader): add scale function (#7179) 2025-11-25 17:35:42 +08:00
Argo Zhang
b93acd5ef1 feat(PdfReader): add OnPageChangedAsync parameter (#7178)
* doc: 更新示例

* feat(PdfReader): add OnPageChangedAsync parameter
2025-11-25 17:31:22 +08:00
Argo Zhang
707e9b6f1d feat(PdfReader): redesign PdfReader component (#7171)
* refactor: 更新示例

* refactor: 更新 header 配置

* chore: 更新 readme 文档

* chore: 更新依赖

* doc: 更新示例
2025-11-24 15:10:16 +08:00
Argo Zhang
4063397ee1 doc(Readme): update visual studio download link (#7173) 2025-11-24 15:08:47 +08:00
Argo Zhang
4dc311a464 perf(CacheManager): remove Get/SetPropertyValue dynamic model cache (#7168)
* refactor: 精简代码

* refactor: 重构方法减少内存使用
2025-11-23 08:54:46 +00:00
Argo Zhang
58d3c27d6d feat(SlideButton): support prefers-reduced-motion css (#7166)
* feat(SlideButton): support prefers-reduced-motion css

* refactor: 增加滚动条处理逻辑

* refactor: 增加动画关闭事件
2025-11-23 14:14:16 +08:00
Argo Zhang
7fa5b2e021 chore(Fork): update Delete All custom command (#7164) 2025-11-23 10:24:24 +08:00
Argo Zhang
a70a3310cc feat(Message): support ClassString/StyleString option (#7162)
* feat(Message): support ClassString/StyleString option

* test: 增加单元测试

* doc: 更新说明文档
2025-11-23 10:22:47 +08:00
Argo Zhang
5a39882aac chore(Fork): add custom command (#7160) 2025-11-22 18:11:23 +08:00
Argo Zhang
09eebf8aee test(Toast): add ClassString unit test (#7158)
* test: 增加 StyleString 单元测试

* test: 增加 ClassString 单元测试
2025-11-22 18:08:38 +08:00
Argo Zhang
4dd80fc77f doc(Vote): vote toast support phone (#7156) 2025-11-22 05:51:29 +00:00
ICE
e1b67f96cd fix(Menu): add sub menu content when disabled (#7152)
* 当布局的IsCollapsed为true时,菜单中isdisabled为true的列会显示错位文字

* refactor: 复用代码

* Update BootstrapBlazor.csproj

bump version 10.0.2-beta01

Co-Authored-By: ICE <225503484+braia123@users.noreply.github.com>

---------

Co-authored-by: Argo Zhang <argo@live.ca>
Co-authored-by: ICE <225503484+braia123@users.noreply.github.com>
2025-11-21 09:33:50 +00:00
Argo Zhang
2191cf609c feat(TableExport): update MiniExcel version to 1.42.0 (#7154) 2025-11-21 10:33:31 +08:00
Argo Zhang
3e0658d10e doc(Vote): update vote taost content (#7150) 2025-11-20 12:51:42 +08:00
Argo Zhang
fa86be3455 feat(ToastOption): add StyleString/ClassString parameter (#7149)
* feat: 增加 StyleString 参数

* refactor: 增加对样式支持

* chore: 移除背景透明效果
2025-11-20 12:48:48 +08:00
Argo Zhang
b81b3e4847 feat(Dom2Image): updated snapdom version to 2.0.0 (#7146) 2025-11-19 14:24:51 +08:00
Argo Zhang
047a234c5e feat(DriverJs): add OverlayClickBehavior support (#7143) 2025-11-19 09:38:22 +08:00
Argo Zhang
dc655ec66a feat(Mermaid): add DownloadPdfAsync method (#7141)
* doc: 增加 pdf 导出功能

* feat(Mermaid): add DownloadPdfAsync method
2025-11-18 14:55:02 +08:00
Argo Zhang
83489f9323 feat(EditorForm): add IsRenderWhenValueChanged parameter (#7138)
* feat: 增加 IEditorFormValueChanged 接口

* feat: 实现通知功能

* doc: 更新联动示例

* feat: 增加 IsRenderWhenValueChanged 参数

* chore: bump version 10.0.1

* refactor: 重新设计逻辑

* refactor: 精简代码
2025-11-17 10:37:40 +08:00
Argo Zhang
b7e3028b92 chore(EditorConfig): add namespace rules (#7136)
* chore: 增加命名空间提示信息配置

* chore: 增加命名空间格式配置
2025-11-17 09:31:28 +08:00
Argo Zhang
52058b6966 test(TestBase): move IDispose interface to TestBase (#7134)
* test: 移动接口到基类

* test: 消除警告信息
2025-11-17 09:28:41 +08:00
Argo Zhang
f95a8609c9 test(Localizer): remove net9 localizer test (#7132) 2025-11-16 13:03:22 +08:00
Argo Zhang
238f8e7cb8 test(bUnit): updated to version 2.0 (#7130)
* chore: 更新依赖到最新

* chore: 更新文件编码

* chore: 更新文件编码

* refactor: 更改过期方法

* test: 更新 ToMarkup 扩展方法

* chore: 更新文件编码

* test: 更新 MouseEventArgs 参数

* refactor: 精简代码

* refactor: 精简代码

* refactor: 增加延时确保单元测试通过

* chore: 增加异步销毁代码
2025-11-16 12:47:24 +08:00
Argo Zhang
56554f729a chore(git): update gitattribute config (#7128)
* chore: 更新 header 配置

* chore: 更新语言统计配置

* chore: 增加 attribute 配置文件

* chore: bump version 10.0.1
2025-11-16 11:05:08 +08:00
Argo Zhang
5d3d9809d8 chore(Player): bump version 10.0.1 (#7126) 2025-11-16 11:03:18 +08:00
Argo Zhang
d764813dee feat(Menu): add style prevent text overflow (#7124)
* chore(Tools): remove pack/watch scripts

* chore: bump version net10

* chore: 更新样式

* refactor: 重构样式文件
2025-11-15 07:17:15 +00:00
Argo Zhang
aa4d7d26fd chore(Tools): remove pack/watch scripts (#7123)
* chore(Tools): remove pack/watch scripts

* chore: bump version net10
2025-11-15 14:57:19 +08:00
Argo Zhang
72ed324443 chore(OctIcons): bump version 10.0.1 (#7120) 2025-11-14 05:03:52 +00:00
Argo Zhang
015d341022 chore(Dashboard): bump version 10.0.0 (#7118) 2025-11-13 10:39:09 +08:00
Argo Zhang
bfbcad91fb chore(BaiduSpeech): bump version 10.0.1 (#7116) 2025-11-13 01:17:32 +00:00
Argo Zhang
dfd4582ef0 chore(BaiduOrc): bump version 10.0.1 (#7114)
* chore: 更新依赖

* chore: 删除 sln 文件

* chore: 精简配置文件

* revert: 撤销更新

* chore: 更新编码
2025-11-13 09:13:50 +08:00
Argo Zhang
a3a0130e6e chore(EditorConfig): simplified configuration (#7112)
* chore: 删除 sln 文件

* chore: 精简配置文件
2025-11-13 09:12:01 +08:00
Argo Zhang
4aa98f781a test(Sass): remove ITestOutputHelper parameter (#7110) 2025-11-12 13:10:13 +08:00
Argo Zhang
f23d8b48d4 chore(Route): update NotFound parameter (#7106)
* refactor: 精简 Route 页面

* chore: 更新编码
2025-11-12 05:03:09 +00:00
Argo Zhang
1512b3de9a doc(Dom2Image): update menu item name (#7108) 2025-11-12 04:59:25 +00:00
Argo Zhang
51f951b94a chore(Extensions): bump version 10.0.0 (#7104)
* chore: 工具更新到 10.0.0

* chore: 依赖更新到 net10
2025-11-12 12:17:27 +08:00
Argo Zhang
1c4b202667 chore(Dependence): bump version 10.0.0 (#7102) 2025-11-12 08:19:14 +08:00
Argo Zhang
0ac5f7f4e4 feat(TargetFramework): support net10 (#7100)
* refactor: 精简单元测试配置

* chore: 更新框架为 net10

* chore: 更新解决方案配置

* refactor: 精简代码

* refactor: 增加逻辑不是当前月日期不参与 Range
2025-11-12 00:09:29 +00:00
Argo Zhang
5e93bb5c27 feat(DatetimeRange): simplify SCSS selectors for start and end (#7098)
* refactor: 精简代码

* refactor: 增加逻辑不是当前月日期不参与 Range
2025-11-11 16:09:57 +08:00
Argo Zhang
164a42ea44 feat(SelectCity): bump version 9.0.9 (#7096) 2025-11-11 13:51:32 +08:00
Argo Zhang
8b8ef2c009 perf(Message): improve performance (#7094)
* doc: 更新示例

* chore: 更新字典

* refactor: 精简代码

* refactor: 移除 Clear 方法参数传递

* chore: 增加字典

* feat: 支持全局配置自动隐藏时长设置

* doc: 更新注释

* feat: 精简反转逻辑

* refactor: 更新 Clear 方法

* chore: 增加命名空间

* refactor: 更新 init 接口参数

* refactor: 重构 Dismiss 逻辑提高性能

* fix: 修复异步消息未清除 dom 问题

* refactor: 更新关闭逻辑

* refactor: 移除 click 事件委托

* refactor: 精简代码

* test: 更新单元测试

* refactor: 精简代码

* perf: 提高性能
2025-11-11 12:48:19 +08:00
Argo Zhang
e7d93b0fc2 doc(Collapse): update laocalizer parameter name (#7090) 2025-11-10 16:21:47 +08:00
Argo Zhang
91d0151173 test(Localizer): update GetJsonStringByTypeName_UseKeyWhenValueIsNull test (#7088)
* doc: 更新注释

* refactor: 更新单元测试
2025-11-09 10:31:02 +08:00
Argo Zhang
746d0c9a9a feat(CherryMarkdown): support valitdate in validate form (#7086)
support validate in validate form
2025-11-08 18:20:02 +08:00
Argo Zhang
ce8a674683 feat(Markdown): auto show label in validate form (#7084) 2025-11-08 16:58:58 +08:00
Argo Zhang
7d099e0f60 feat(Vditor): add border raduis variable (#7082) 2025-11-08 11:39:42 +08:00
Argo Zhang
b64b4d2e8b chore(Editor): bump version 9.0.9 (#7080) 2025-11-08 09:48:50 +08:00
Argo Zhang
a5915cce17 feat(Editor): support ShowLabel parameter (#7078) 2025-11-07 15:32:03 +08:00
Argo Zhang
8f2f770bae feat(Vditor): support ShowLabel parameter (#7076) 2025-11-07 15:19:12 +08:00
Argo Zhang
d111d4d3bf feat(CherryMarkdown): auto show label in validate form (#7074) 2025-11-07 15:11:34 +08:00
Argo Zhang
124a67797f doc(WebsiteOptions): add GetTargets method (#7072)
* refactor: 增加 TargetFrameworks 配置

* refactor: 增加 GetTargets 方法

* doc: 使用 GetTargets 方法重构
2025-11-07 14:24:01 +08:00
Argo Zhang
5330eec2cd feat(Layout): add OnTabHeaderTextLocalizer parameter (#7070)
* feat(Layout): add OnTabHeaderTextLocalizer parameter

* refactor: 重构代码

* chore: bump version 9.12.2-beta03

* test: 增加单元测试

* refactor: 重构代码

* refactor: 精简代码
2025-11-07 13:26:35 +08:00
Argo Zhang
986f8d5969 feat(Table): multiple select column adapts to compact mode (#7068)
* refactor: 更新代码减少提示信息

* doc: 更新示例

* feat: 多选列增加默认居中逻辑

* test: 更新单元测试

* chore: bump version 9.12.2-beta02

* revert: 撤销更改

* refactor: 调整紧凑模式下左右间距

* refactor: 调整紧凑模式下复选框宽度

* refactor: 精简代码

* feat: 增加 CheckboxColumnCompactWidth 参数

* feat: 使用 CheckboxColumnCompactWidth 值渲染选择列宽度

* test: 增加单元测试

* refactor: 增加 CheckboxColumnCompactWidth 参数

* test: 增加单元测试

* test: 增加单元测试

* test: 更新单元测试

* doc: 代码格式化
2025-11-07 11:03:35 +08:00
Argo Zhang
e212123ece chore(Config): update file encod to UTF-8 (#7066) 2025-11-06 12:10:58 +08:00
Argo Zhang
823f5dbb69 feat(OctIcon): bump version 9.0.7 (#7064) 2025-11-06 10:32:40 +08:00
Argo Zhang
6c4d0c53ae feat(Tab): add OnTabHeaderTextLocalizer parameter (#7062)
* feat: add OnTabHeaderTextLocalizer parameter

* chore: bump version 9.12.2-beta01

* test: 增加单元测试

* doc: 增加文档
2025-11-05 14:23:16 +08:00
Argo Zhang
a5b2c89e8c revert(ImagePreview): do not move dom end of body (#7060)
* refactor: 撤销元素移动防止报错

* chore: bump version 9.12.1
2025-11-04 08:55:21 +08:00
braia123
c6b14dc242 feat(AutoFill): support update value by external code (#7058)
* 赋值给Value时更新input显示内容

* 测试用按钮删除

* refactor: 重构代码

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-11-04 08:55:01 +08:00
Argo Zhang
eaa2a93cf6 feat(Transfer): add IsWrapItemText parameter (#7057)
* chore: 增加预处理指令

* doc: 更新文档注释

* doc: 文档格式化

* refactor: 默认值更改为 true

* feat: 增加 IsWrapItemText 参数

* doc: 代码格式化

* feat: 增加样式

* doc: 更新示例

* doc: 文档格式化

* test: 更新单元测试

* chore: bump version 9.12.1-beta02
2025-11-03 16:44:57 +08:00
Argo Zhang
8d5d690044 doc(Router): compatible with NET10 (#7054) 2025-11-02 18:14:50 +08:00
Argo Zhang
d443952e02 feat(Table): remove table-layout style when fix column (#7052)
* feat: 固定列时移除 table-layout 样式

* doc: 更新示例

* chore: bump version

* doc: 更新模板列示例

* chore: bump version 9.12.1-beta01

* refactor: 文档格式化
2025-11-02 17:58:17 +08:00
Argo Zhang
841ccabe59 doc(Table): add IsGroupExtendButtons documentation (#7050)
* doc: 更新样式增加内联布局

* doc: 增加 IsGroupExtendButtons 文档
2025-11-02 07:10:07 +00:00
Argo Zhang
8640cbf792 feat(Table): add ShowMoreButton parameter (#7048)
* doc: 更正单词拼写错误

* feat: 增加 ShowMoreButton 参数

* feat: 增加 MoreButtonTemplate 参数

* feat: 增加 MoreButtonDropdownTemplate 参数

* feat: 增加 更多按钮 图标

* feat: 增加 ShowMoreButton 控制

* feat: 增加 DropdownItem 组件

* doc: 更新示例

* feat: 增加 IDropdownItem 接口

* feat: 增加 DropdownItem 组件

* feat: 增加 DropdownDivider 组件

* feat: 实现 ItemsTemplate 模板功能

* feat: 增加 RenderMoreButton 模板

* doc: 更新示例

* revert: 撤销更新

* revert: 撤销更改

* revert: 撤销更改

* doc: 更新示例

* test: 增加单元测试

* doc: 文档格式化
2025-11-01 22:05:11 +08:00
Argo Zhang
19054357dc feat(Dropdown): add ItemsTemplate parameter (#7046)
* feat: 增加 DropdownItem 组件

* feat: 增加 IDropdownItem 接口

* feat: 增加 DropdownItem 组件

* feat: 增加 DropdownDivider 组件

* feat: 实现 ItemsTemplate 模板功能

* refactor: 代码格式化

* feat: 移除 IDropdownItem 接口

* doc: 更新示例

* doc: 增加 ItemsTemplate 示例

* doc: 增加多语言

* refactor: 移除 DropdownDivider 组件

* refactor: 精简代码

* refactor: 更新示例

* refactor: 更改属性名

* test: 增加单元测试

* refactor: 代码格式化

* doc: 代码格式化

* refactor: 移除变量

* refactor: 增加条件渲染

* refactor: 增加 ButtonText 判断
2025-11-01 16:56:08 +08:00
Argo Zhang
2f53676597 feat(Table): add IsGroupExtendButtons parameter (#7044)
* feat(Table): add UseButtonGroup parameter

* refactor: 更改名字

* test: 增加单元测试

* refactor: 更改参数名称
2025-11-01 11:13:44 +08:00
Argo Zhang
d4e13e8fea doc(CardUpload): add ActionButtonTemplate parameter documentation (#7042)
* refactor: 更新依赖包

* chore: bump DriverJs 9.0.5

* doc: 增加文档注释
2025-10-31 14:53:09 +08:00
Argo Zhang
70156e6968 feat(DriveJs): remove AutoDrive parameter (#7040) 2025-10-31 13:30:19 +08:00
Argo Zhang
7652927fe9 doc(Html2Pdf): add PdfOptions documentation (#7038)
* doc: 增加检查依赖缺失命令

* doc: 更新注释文档

* doc: 增加 PdfOptions 说明

* chore: bump versiopn 9.12.0
2025-10-31 08:48:32 +08:00
Argo Zhang
eea95694fe feat(Html2Pdf): add PaperFormat parameter (#7036)
* refactor: 增加 PdfOptions 配置项

* doc: 更新示例增加 Options 配置

* chore: bump version 9.11.5-beta11

* chore: 更新 Html2Pdf 依赖包

* test: 增加单元测试
2025-10-30 19:46:14 +08:00
Argo Zhang
a55507d8ad feat(ImagePreviewer): move the body end prevent blocked (#7034) 2025-10-30 13:11:17 +08:00
Argo Zhang
4a6cd161d6 feat(ImagePreview): support class/style html attirbute (#7032) 2025-10-30 13:00:06 +08:00
Argo Zhang
54cb5602e0 feat(CardUpload): add BeforeActionButtonTemplate parameter (#7030)
* feat(CardUpload): add BeforeActionButtonTemplate parameter

* test: 增加单元测试
2025-10-30 12:19:50 +08:00
Argo Zhang
365c07fc3e feat(CardUpload): add ActionButtonTemplate parameter (#7027)
* feat: 增加 ActionButtonTemplate 模板

* refactor: 增加条件

* test: 增加单元测试
2025-10-30 12:10:59 +08:00
Argo Zhang
d82ddbeaef feat(CardUpload): adjust IconTemplate order (#7025)
* refactor: 调整 IconTemplate 优先级别

* test: 更新单元测试消除警告信息

* test: 调整单元测试
2025-10-29 17:46:48 +08:00
Argo Zhang
c132947f1f feat(Layout): add OnCloseTabItemAsync parameter (#7023)
* feat(Layout): add OnCloseTabItemAsync parameter

* chore: bump version 9.11.5-beta10

* test: 更新单元测试

* doc: 更新注释
2025-10-29 12:49:24 +08:00
Argo Zhang
f1310982ab refactor(Table): revert add async keyword for ResetDynamicContext (#7022)
* 持久化列的显隐到bb-table-column-visiable-{ClientTableName}

* revert: 撤销异步更改

* doc: 增加注释

* refactor: 消除警告信息

* refactor: 代码重构

* Revert "持久化列的显隐到bb-table-column-visiable-{ClientTableName}"

This reverts commit cb0f351d6b.

# Conflicts:
#	src/BootstrapBlazor/Components/Table/Table.razor.Checkbox.cs

* revert: 撤销更改

* refactor: 兼容 null 项

* test: 增加单元测试

* test: 更新单元测试

---------

Co-authored-by: braia123 <guanxin_11@126.com>
2025-10-29 12:41:24 +08:00
Argo Zhang
cd3f29b20e fix(Table): AutoScrollLastSelectedRowToView support ClickSelect mode (#7019)
* 持久化列的显隐到bb-table-column-visiable-{ClientTableName}

* refactor: 增加持久化逻辑

* refactor: 增加本地持久化方法

* refactor: 增加空兼容

* feat: 增加 ColumnVisibleItemConverter 标签

* refactor: 更新条件

* refactor: 更新加载逻辑

* doc: 更新文档

* chore: 更新依赖

* test: 增加单元测试

* feat: 增加 ReloadColumnVisibleFromBrowserAsync 方法

* test: 更新单元测试

* chore: bump version 9.11.5-beta08

Co-Authored-By: braia123 <225503484+braia123@users.noreply.github.com>

* fix: 支持单选模式下选中行滚动效果

* chore: bump version 9.11.5-beta09

Co-Authored-By: water1983 <50308296+water1983@users.noreply.github.com>

* refactor: 增加分号

---------

Co-authored-by: braia123 <guanxin_11@126.com>
Co-authored-by: braia123 <225503484+braia123@users.noreply.github.com>
Co-authored-by: water1983 <50308296+water1983@users.noreply.github.com>
2025-10-28 17:35:12 +08:00
braia123
c29d23a343 feat(Table): add ReloadColumnVisibleFromBrowserAsync method (#7011)
* 持久化列的显隐到bb-table-column-visiable-{ClientTableName}

* refactor: 增加持久化逻辑

* refactor: 增加本地持久化方法

* refactor: 增加空兼容

* feat: 增加 ColumnVisibleItemConverter 标签

* refactor: 更新条件

* refactor: 更新加载逻辑

* doc: 更新文档

* chore: 更新依赖

* test: 增加单元测试

* feat: 增加 ReloadColumnVisibleFromBrowserAsync 方法

* test: 更新单元测试

* chore: bump version 9.11.5-beta08

Co-Authored-By: braia123 <225503484+braia123@users.noreply.github.com>

---------

Co-authored-by: Argo Zhang <argo@live.ca>
Co-authored-by: braia123 <225503484+braia123@users.noreply.github.com>
2025-10-27 19:20:26 +08:00
Argo Zhang
854643e607 doc(Vote): add button icon (#7017) 2025-10-27 17:29:36 +08:00
Argo Zhang
b65b91b25e chore(Html2Pdf): bump version 9.0.6-beta01 (#7015) 2025-10-27 17:15:44 +08:00
Argo Zhang
045fa2e836 feat(Html2Pdf): add PdfOptions parameter (#7013)
* feat: 增加 PdfOptions 配置项

* chore: bump version 9.11.5-beta07

* test: 更新单元测试

* test: 增加单元测试
2025-10-27 13:01:41 +08:00
Argo Zhang
b3f199e3cd doc(Vote): add gitee vote toast (#7009)
* refactor: 增加 doTask 客户端脚本

* feat: 增加投票弹窗

* refactor: 增加点击逻辑

* refactor: 增加延时
2025-10-26 14:27:24 +08:00
Argo Zhang
09610c4a3e fix(LinkButton): missing class attribute (#7007)
* refactor: 调整 AdditionalAttributes 渲染顺序

* chore: bump version 9.11.5-beta06
2025-10-26 10:54:27 +08:00
Argo Zhang
61175b090d doc(Install): upate Install documentation (#7005)
* refactor: 删除其他文档

* doc: 删除其他模式资源文件

* doc: 更新安装文档

* doc: 删除 Coms 文档

* doc: 实现本地化

* refactor: 更新错误
2025-10-25 21:43:22 +08:00
Argo Zhang
daa5d791b2 doc(Hosting): add hosting model documentation (#7003)
* doc: 增加托管模型菜单

* doc: 增加模板

* doc: 增加托管模型文档

* doc: 调整托管模型文档顺序

* doc: 支持富文本

* doc: 增加托管模型菜单

* doc: 更新编号
2025-10-25 19:28:21 +08:00
Argo Zhang
7f58aa97ff feat(SortableList): bump version 9.0.4 (#7001)
* doc: 更新示例

* chore: bump version 9.0.4
2025-10-24 23:21:18 +08:00
Argo Zhang
37ab016e2b feat(DateTimePicker): add IsButton parameter (#6999)
* feat: 增加日期选择按钮

* refactor: 增加逻辑

* refactor: 移除 DateTimePickerButton 组件

* refactor: 重构脚本支持 Button 模式切换

* feat: 增加按钮元素

* doc: 增加多语言

* doc: 更新示例

* doc: 文档格式化

* test: 更新单元测试

* chore: bump version 9.11.5-beta05
2025-10-24 21:13:33 +08:00
Diego
7239ed0f1a perf(GetUniqueName): add cache for assembly GetUniqueName method (#6996)
* feat: GetUniqueName方法添加缓存

* feat: 添加特性缓存

* chore: bump version 9.11.5-beta04

* test: 更新单元测试

* revert: 撤销更改

* refactor: 撤销 GetAttribute 缓存

* revert: 撤销命名空间更改

* revert: 撤销单元测试更改

* refactor: 精简代码

---------

Co-Authored-By: Diego <82756760+kimdiego2098@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-10-24 09:31:57 +08:00
Argo Zhang
9662123b0e chore(Docker): support net10 image (#6995) 2025-10-23 14:33:12 +08:00
Argo Zhang
b801dcec92 revert(Table): restore editing when enable virtualize (#6993) 2025-10-23 14:03:00 +08:00
Argo Zhang
f2de6f4519 chore(Action): update pack action (#6991)
* revert: 更新语言版本

* refactor: 增加自定义参数

* chore: 增加 props 引用

* refactor: 更新 pack 提高运行效率

* refactor: 撤销分支
2025-10-23 13:04:26 +08:00
Argo Zhang
d28cda3eec chore(Action): add net9 pack action (#6989)
* chore: update action for net9

* refactor: 更新 C# 版本

* refactor: 更新 action

* chore: 删除 action 分支
2025-10-23 11:42:42 +08:00
Argo Zhang
58180ef956 feat(EditorForm): add IsShowDisplayTooltip parameter (#6987)
* refactor: 精简代码

* feat: 增加 showTooltip 参数

* feat(EditorForm): add IsShowDisplayTooltip parameter

* chore: bump version 9.11.5-beta03

* refactor: 更新索引

* test: 更新单元测试
2025-10-23 10:58:33 +08:00
Argo Zhang
22bc849ad2 fix(EditorForm): parameter LabelWidth not work when set GroupOrder (#6984) 2025-10-23 09:28:31 +08:00
Argo Zhang
6943c84436 doc(Link): add AtomUI link (#6982) 2025-10-23 09:26:56 +08:00
braia123
17b2560fbf refactor(AutoFill): sync client value after server rerender (#6975)
* Update AutoFill.razor.cs

当初始化或选择选项后更新_clientValue

* chore: bump version 9.11.5-beta02

* refactor: 更新代码

---------

Co-authored-by: braia123 <guanxin_11@126.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-10-22 19:34:33 +08:00
Argo Zhang
bfcb69c925 doc(readme): add ecological partners (#6972) 2025-10-22 12:30:02 +08:00
Argo Zhang
7ec07557b4 feat(SelectCity): support polyphonetic characters (#6970)
* refactor: 增加多版本号配置

* chore: bump version 9.0.8-beta01
2025-10-22 11:21:29 +08:00
Argo Zhang
d98352086c feat(IPinyinService): add IPinyinService interface (#6968)
* refactor: 增加拼音服务

* refactor: 增加 IPinyinService 服务

* feat: 增加 PinyinLetterCaseCategory 枚举类

* feat: 更新并实现 IPinService 接口

* test: 增加单元测试

* chore: bump version 9.11.5-beta01
2025-10-22 10:10:57 +08:00
Argo Zhang
f5eac6b223 fix(TableDynamicContext): AddAutoGenerateColumnAttribute parameter Text not work (#6966)
* perf: 优化性能减少一次 new

* refactor: 精简代码

* doc: 更新示例

* refactor: 精简代码

* fix: 修复动态时设置 Text 无效问题

* chore: bump version 9.11.4

* refactor: 更新示例
2025-10-21 13:16:08 +08:00
Argo Zhang
1b117f36f0 feat(Region): bump version 9.0.7 (#6964)
* chore: bump version 9.0.5

* revert: 撤销更新

* chore: bump vesion 9.0.7
2025-10-21 13:06:56 +08:00
Argo Zhang
b9ef772757 doc(InstallServer): remove extra angle brackets (#6962) 2025-10-20 14:01:56 +08:00
Argo Zhang
531733d12b feat(Transfer): add IsWrapItem/ItemWidth parameter (#6960)
* feat: 增加 IsWrapItem 参数

* test: 增加单元测试

* test: 更新单元测试

* feat: 增加 ItemWidth 参数

* doc: 移除多余箭头

* Revert "doc: 移除多余箭头"

This reverts commit fce10f669b.

* chore: bump version 9.11.3-beta06

Co-Authored-By: 18636609650 <165882425+18636609650@users.noreply.github.com>

* test: 更新单元测试

---------

Co-authored-by: 18636609650 <165882425+18636609650@users.noreply.github.com>
2025-10-20 13:55:37 +08:00
Argo Zhang
2de60c876d feat(Transfer): make search icon align right (#6959) 2025-10-20 12:47:06 +08:00
Argo Zhang
4cff8983c9 feat(IP2Region): bump version 9.0.4 (#6956)
* chore: 更改注入方法名称

* feat(IP2Region): bump version 9.0.4
2025-10-19 16:07:32 +08:00
Argo Zhang
ab2a546fab fix(Cascade): display incorrect when set Items async (#6954)
* fix: 修复数据源为 null 时赋值逻辑

* chore: bump version 9.11.3-beta05

* test: 增加单元测试
2025-10-19 14:19:59 +08:00
Argo Zhang
313b0ba148 chore(Version): update run target frameworks (#6952)
* refactor: 增加条件编译

* chore: 更新 Version 配置文件

* chore: 更改为字符串比较
2025-10-19 11:41:14 +08:00
Argo Zhang
0addc2f1ef feat(AutoFill): add IsAutoClearWhenInvalid parameter (#6950)
* AutoFill组件变动

input输入Enter时,如候选项唯一,直接选中
当焦点从AutoFill移出时,如GetDisplayText(Value)对应的内容与input中的内容不符则清空Value和Input

* Modify Enter key handling in AutoComplete component

Signed-off-by: braia123 <guanxin_11@126.com>

* refactor: 代码重构

* refactor: 移除 onblur 回调

* revert: 撤销清空逻辑

* revert: 撤销 js 方法

* refactor: TriggerBlurString 移动到组件内

* feat: 增加 IsAutoClearWhenInvalid 参数实现逻辑

* doc: 更新示例

* refactor: 更改方法为 TriggerChange

* test: 增加单元测试

* doc: 代码格式化

* chore: bump version 9.11.-3-beta04

---------

Signed-off-by: braia123 <guanxin_11@126.com>
Co-authored-by: braia123 <guanxin_11@126.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-10-19 10:41:46 +08:00
braia123
337f129f5d feat(AutoFill): auto select when item length equal 1 (#6947)
* AutoFill组件变动

input输入Enter时,如候选项唯一,直接选中
当焦点从AutoFill移出时,如GetDisplayText(Value)对应的内容与input中的内容不符则清空Value和Input

* Modify Enter key handling in AutoComplete component

Signed-off-by: braia123 <guanxin_11@126.com>

* refactor: 代码重构

* refactor: 移除 onblur 回调

* revert: 撤销清空逻辑

* revert: 撤销 js 方法

---------

Signed-off-by: braia123 <guanxin_11@126.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-10-19 09:26:33 +08:00
Argo Zhang
a88529ba57 doc(IpAddress): add IsDisabled parameter documentation (#6946) 2025-10-18 18:41:46 +08:00
Argo Zhang
5002470b11 refactor(Keydown): remove NumpadEnter check (#6944)
* refactor: 移除 NumpadEnter 判断

* feat: 增加异常保护
2025-10-18 18:33:36 +08:00
Argo Zhang
d08064853b fix(SelectCity): reset Value after update IsMultiple parameter (#6942)
* refactor: 更新值

* chore: bump version 9.0.6
2025-10-18 17:25:09 +08:00
Argo Zhang
7c728614ea feat(NET10): add NET10 support (#6940)
* doc: 增加 nosnippet 标签

* chore: 增加脚本指纹

* chore: 增加 net10 依赖包

* doc: 增加 NotFound 路由

* chore: 更新网站运行时为 net10

* chore: 更新脚本版本

* refactor: 更改滚动条对齐方式

* chore: 增加 logs 目录自动创建脚本

* chore: 更改输出目录

* chore: 更改 dotnet 命令路径

* doc: 更新支持列表

* doc: 增加 NET10 支持列表

* chore: 更新 slnx 解决方案文件

* chore: 增加 AutoRestart 配置

* refactor: 移除配置项

* chore: 更新依赖包

* test: 更新单元测试
2025-10-18 12:02:12 +08:00
Argo Zhang
a14b67e53d feat(SelectCity): disable AutoClose when set IsMultiple to true (#6938)
* doc: 代码格式化

* chore: 更新依赖

* chore: bump version 9.11.3-beta03

* revert: 撤销解决方案的更新
2025-10-18 10:39:35 +08:00
Argo Zhang
1082672c9a fix(AutoComplete): support bind value clear value function (#6936)
* refactor: 增加 Clear 方法用于触发双向绑定

* doc: 更新示例

* test: 增加单元测试
2025-10-18 10:27:20 +08:00
Argo Zhang
21ace9f077 doc(Web): add video links (#6935)
* doc: 更新学习资料

* doc: 更新视频链接
2025-10-18 10:15:47 +08:00
Argo Zhang
5654794a06 feat(SelectCity): add ShowSearch parameter (#6933)
* feat: 增加 shownCallback 回调

* chore: 更新解决方案

* doc: 更新源代码片段

* doc: 增加示例

* doc: 更新多语言

* chore: bump version 9.0.4
2025-10-17 19:04:53 +08:00
Argo Zhang
33a6a01ab4 feat(Region): add SelectProvince component (#6930)
* doc: 增加省选择器示例

* chore: bump version 9.0.3

* doc: 增加省选择器菜单

* doc: 增加源码映射
2025-10-17 09:31:26 +08:00
Argo Zhang
1eca191424 feat(SelectRegion): support dark theme (#6928) 2025-10-17 08:05:19 +08:00
Argo Zhang
c4fe830762 fix(Cascader): hide arrow icon when hover (#6926) 2025-10-16 14:59:25 +08:00
Argo Zhang
a9bbd46bce fix(MultiSelect): keep last value when items is null (#6924)
* refactor: 优化性能

* fix: 支持首次渲染未给定 Items 情况

* refactor: 改用 Any 方法
2025-10-16 14:31:32 +08:00
Argo Zhang
b187f2b3b8 feat(Chart): bump version 9.0.4 (#6923)
bump chart.js 4.5.1
2025-10-16 13:26:10 +08:00
Argo Zhang
12e71d6fa3 fix(Input): prevent focus exception (#6920)
* refactor: 移除 FocusElement 定义

* feat: 改用 focus 自定义方法

* chore: bump version 9.11.3-beta02
2025-10-16 12:58:09 +08:00
Argo Zhang
26cc74a50a feat(AutoComplete): support update value by code (#6919)
* fix: 修复 Filter 未触发 Value 回调方法问题

* revert: 撤销录入触发双向绑定逻辑

* fix: 修复 Value 重新赋值导致未触发更新问题

* chore: bump version 9.11.3-beta01
2025-10-16 11:32:14 +08:00
Argo Zhang
8768786fd7 feat(Table): add RenderContentRow improve readability (#6917)
* refactor: 增加 TableContentColumn

* refactor: 使用 TableContentCell 组件渲染

* feat: 增加 CellClass 逻辑

* refactor: 移除 TableContentCell 组件

* doc: 移除过期注释

* doc: 更正单词拼写错误

* doc: 更正单词拼写错误

* refactor: 重构代码提高可读性

* refactor: 重构代码
2025-10-16 10:44:13 +08:00
Argo Zhang
605aca1386 feat(EditorForm): support null model (#6914) 2025-10-15 07:10:01 +00:00
Argo Zhang
ed838ba698 doc(AutoFill): throw exception when clear selected item (#6912) 2025-10-15 14:35:20 +08:00
Argo Zhang
453e98d1b5 feat(SelectCity): add SelectCity component (#6909)
* doc: 增加示例

* doc: 更正源码映射配置

* feat: 增加 Region 工程引用

* doc: 增加 SelectCity 菜单

* doc: 增加源码映射

* doc: 更新多语言

* revert: 移除项目依赖

* doc: 增加示例文档

* refactor: 增加多选变量

* refactor: 使用 null 代替空字符串
2025-10-15 12:22:50 +08:00
Argo Zhang
6b16966fbe fix(Drawer): missing position variable (#6906)
* refactor: 增加判断条件

* chore: bump version 9.11.2
2025-10-14 16:15:10 +08:00
Argo Zhang
1c91fa8748 doc(SelectRegion): add documentation (#6905)
* refactor: 更改路由

* doc: 更新资源文件
2025-10-14 16:03:37 +08:00
Argo Zhang
563ec59eb5 feat(SelectRegion): add SelectRegion component (#6903)
* doc: 增加 Region 组件菜单

* doc: 增加源码映射

* doc: 增加示例

* refactor: 增加行政区域服务

* chore: 更正单词拼写错误

* chore: 方便调试

* refactor: 增加 popover-region 自定义样式

* refactor: 增加禁用测试

* doc: 增加多语言

* chore: 增加新功能标签

* doc: 更新测试工程

* chore: 移除项目依赖

* doc: 更新示例
2025-10-14 15:51:24 +08:00
Argo Zhang
a9981ed5f9 fix(FilterButton): use Popover prevent blocked (#6900)
* chore: 更新清除 Filter 图标

* refactor: 更新 MD 图标

* feat: FilterButton 支持 Popover

* feat: 支持录入后自动过滤功能
2025-10-14 12:35:40 +08:00
Argo Zhang
ac482e09ef feat(StringFilter): support auto filter after input filter text (#6899) 2025-10-14 12:34:41 +08:00
Argo Zhang
bbee138408 feat(FilterIcon): clear filter button in header row use ban icon (#6897)
* chore: 更新清除 Filter 图标

* refactor: 更新 MD 图标
2025-10-14 12:32:44 +08:00
Argo Zhang
940c31e194 refactor(Table): improve performance use Contains (#6891)
* refactor: 更新代码

* refactor: 更新 GetColumnsListState 方法

* chore: bump version 9.11.2-beta07

* refactor: 使用 ToHashSet 提高性能
2025-10-13 12:52:36 +08:00
Argo Zhang
c579ce11ab fix(Upload): preview function suppor wasm mode (#6889)
* fix(Upload): preview function suppor wasm mode

* chore: bump version 9.11.2-beta06

* test: 更新单元测试
2025-10-13 11:15:53 +08:00
AApuci
5c0be2f43f fix(Table): adjust margin compare logic (#6885)
* Fix column width calculation in autoFitColumnWidth

调整参数 fitColumnWidthIncludeHeader 设置后,最大宽度的比较方式。

* Update Table.razor.js

Signed-off-by: AApuci <44996451+AApuci@users.noreply.github.com>

* chore: bump version 9.11.2-beta05

---------

Signed-off-by: AApuci <44996451+AApuci@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-10-13 10:42:40 +08:00
Diego
2f268c1263 feat(Table): improve performance for GetVisibleColumns function (#6886)
* feat(table): 减少linq迭代器对象的创建,避免Enumerable.Any处于嵌套循环中

* refactor: 重构代码

* refactor: 重构代码

* refactor: 移除变量

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-10-13 10:38:35 +08:00
Argo Zhang
21238eaa79 feat(MindMap): bump version 9.1.7 (#6883)
* refactor: 更新客户端脚本

* chore: bump version 9.1.7
2025-10-12 11:30:10 +08:00
Argo Zhang
c0990f73a2 chore(Chart): bump version 9.0.3 (#6881)
missing BootstrapBlazor object
2025-10-12 02:00:09 +00:00
ljmay168
27d65b3a07 fix(Table): column auto-fit width not working on detail mode (#6878)
* fix(Table):表格列适应列宽在表格明细行中有嵌套表格时不正常 #6877

* chore: bump version 9.11.2-beta04

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-10-12 09:34:24 +08:00
AApuci
a31fcaa0e2 fix(Table): include padding in auto-fit column width (#6876)
* Fix column width calculation to use header cell

Updated autoFitColumnWidth to calculate the header cell width using the <th> element directly instead of querying for a child span. This ensures more accurate column width fitting when including the header.

* refactor: 更改计算 theader 宽度逻辑

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-10-12 09:26:19 +08:00
Argo Zhang
96cc8745b4 feat(Localization): update localization json files (#6875)
* chore: 更新 es 资源文件

* chore: 更新 de 资源文件

* chore: 更新 pt 资源文件

* chore: 更新 ru-RU 资源文件

* chore: 更新 th-TH 资源文件

* chore: 更新 uk-UA 资源文件

* chore: 更新 zh-TW 资源文件
2025-10-11 15:43:48 +08:00
Argo Zhang
63b7964801 feat(Chart): bump version 9.0.2 (#6873)
chart.js bump version 4.5
2025-10-11 14:49:18 +08:00
Argo Zhang
6570642bfe feat(Table): add FitColumnWidthIncludeHeader parameter (#6871)
* Update auto-fit column width callback to include width

Modified the OnAutoFitContentAsync callback to accept the calculated column width as a parameter in both C# and JavaScript. This allows custom logic to consider the current width when determining the final column width, improving flexibility for auto-fit scenarios.

Co-Authored-By: ljmay168 <209402714+ljmay168@users.noreply.github.com>

* Update OnAutoFitContentAsync to accept calcWidth parameter

Modified the UnitTest

* Update TableTest.cs

修改 单元测试宽度计算

Signed-off-by: AApuci <44996451+AApuci@users.noreply.github.com>

* revert: 撤销与本 PR 无关改动

* revert: 撤销更改

* test: 代码格式化

* refactor: 弃用 OnAutoFitContentAsync 改用 OnAutoFitColumnWidthCallback 回调方法

* refactor: 更改方法名称

* feat: 增加 FitColumnWidthIncludeHeader 参数

* feat: 传递 FitColumnWidthIncludeHeader 参数到 js

* refactor: 增加逻辑

* chore: bump version 9.11.2-beta03

---------

Signed-off-by: AApuci <44996451+AApuci@users.noreply.github.com>
Co-authored-by: AApuci <xlcexo@sina.com>
Co-authored-by: ljmay168 <209402714+ljmay168@users.noreply.github.com>
Co-authored-by: AApuci <44996451+AApuci@users.noreply.github.com>
2025-10-11 13:33:50 +08:00
AApuci
b9a132b17d feat(Table): update auto-fit column width callback to include width (#6868)
* Update auto-fit column width callback to include width

Modified the OnAutoFitContentAsync callback to accept the calculated column width as a parameter in both C# and JavaScript. This allows custom logic to consider the current width when determining the final column width, improving flexibility for auto-fit scenarios.

Co-Authored-By: ljmay168 <209402714+ljmay168@users.noreply.github.com>

* Update OnAutoFitContentAsync to accept calcWidth parameter

Modified the UnitTest

* Update TableTest.cs

修改 单元测试宽度计算

Signed-off-by: AApuci <44996451+AApuci@users.noreply.github.com>

* revert: 撤销与本 PR 无关改动

* revert: 撤销更改

* test: 代码格式化

* refactor: 弃用 OnAutoFitContentAsync 改用 OnAutoFitColumnWidthCallback 回调方法

* refactor: 更改方法名称

---------

Signed-off-by: AApuci <44996451+AApuci@users.noreply.github.com>
Co-authored-by: AApuci <44996451+AApuci@users.noreply.github.com>
Co-authored-by: ljmay168 <209402714+ljmay168@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-10-11 12:39:07 +08:00
Argo Zhang
737e58ad61 feat(Html2Pdf): bump version 9.0.4 (#6870)
bump PuppeteerSharp 20.2.4
2025-10-11 03:02:06 +00:00
Argo Zhang
b98228f59f feat(OctIcons): bump version 9.0.6 (#6867)
* chore: 更新图标

* chore: 更新依赖包到最新
2025-10-11 10:20:26 +08:00
Argo Zhang
b79bf376ec feat(BootstrapBlazorOptions): add IsPopover parameter (#6862)
* feat: 增加 IsPopover 属性

* chore: 增加配置

* feat: 支持全局配置 IsPopover 参数

* doc: 更正单词拼写错误

* chore: 更新配置

* chore: bump version 9.11.2-beta02
2025-10-10 14:48:08 +08:00
Argo Zhang
b1ba61ffd1 feat(Asset): add fingerprint on components assets (#6860)
* chore: 更新框架为 10

* chore: bump version 9.11.2-beta01

* revert: remove chore-pack branch
2025-10-10 12:58:41 +08:00
Argo Zhang
4755d2d96d doc(GlobalSearch): simple seach style (#6859)
* chore: bump version 9.1.12

* refactor: 精简样式代码
2025-10-10 04:00:26 +00:00
Argo Zhang
951e97aa9a feat(Table): add FitAllColumnWidth instance method (#6857)
* feat(Table): add FitAllColumnWidth instance method

* refactor: 增加 border 宽度

* chore: bump version 9.11.1

* test: 增加单元测试
2025-10-10 10:22:09 +08:00
Argo Zhang
826819f481 feat(Table): make OnAutoFitContentAsync work (#6856)
* refactor: 增加条件提高性能

* feat: 增加 OnAutoFitContentAsync 回调
2025-10-10 09:04:23 +08:00
Argo Zhang
cbb85fbf6f doc(Localization): update ES localization documentation (#6854) 2025-10-10 08:43:21 +08:00
Argo Zhang
caecc42e42 doc(GlobalSearch): update component css (#6852)
* refactor: 移除 meilisearch 样式

* chore(CssBundler): bump version 1.0.1

* refactor: 更新 header 样式

* refactor: 更新依赖包版本

* refactor: 更新搜索栏样式
2025-10-09 18:05:36 +08:00
Argo Zhang
2e9dbafc09 chore(CssBundler): bump version 1.0.1 (#6850) 2025-10-09 16:28:38 +08:00
Argo Zhang
b83f1fd38f feat(DateTimePicker): support Tab/Esc keyboard event (#6848)
* fix(DatetimePicker): support tab/esc keyboard

* chore: bump version 9.11.1-beta06
2025-10-09 12:08:14 +08:00
Argo Zhang
46daf43324 fix(AutoComplete): support tab key (#6846) 2025-10-09 10:10:15 +08:00
Argo Zhang
ccc149c08b chore(Action): add cache nuget step (#6845)
* chore: add cache action

* chore: update pack/pull actions

* chore: update cache key

* chore: remove dev branch tag

* chore: update char

* chore: update char
2025-10-09 09:32:25 +08:00
Argo Zhang
217da3d6d6 chore(CssBundler): add css-bundler tools (#6841)
* chore: 增加 css-bundler 工具

* chore: 增加配置

* chore: 删除生成文件

* chore: 更新打包配置

* chore: 集成打包工具

* chore:  更新打包配置文件

* chore: 更新忽略文件

* chore: 更新样式配置文件

* doc: 增加本地化

* doc: 更新 ColorPicker 示例

* refactor: 更改为增量执行

* chore: 更改任务名称

* test: 更新单元测试

* chore: bump version 9.11.1-beta05

* refactor: 更新脚本

* chore: 更新脚本
2025-10-08 14:04:38 +08:00
Argo Zhang
04bec1702f doc(ColorPicker): add localization doc (#6843)
* doc: 增加本地化

* doc: 更新 ColorPicker 示例
2025-10-08 13:30:41 +08:00
Argo Zhang
60d56dc456 test(Table): add unit test for ResetVisibleColumns (#6839) 2025-10-08 03:40:25 +00:00
Argo Zhang
01d8ddc11f doc(Localization): update DE localization documentation (#6836) 2025-10-07 09:39:16 +08:00
Argo Zhang
d508e662a6 doc(Localization): update PT localization documentation (#6833) 2025-10-06 20:27:32 +08:00
Argo Zhang
647d485823 doc(Localization): update uk-UA localization documentation (#6831) 2025-10-06 20:23:27 +08:00
Argo Zhang
cd4fc414f9 fix(Table): should reset column after call ResetVisibleColumns (#6828)
* fix: 修复重置列后无法调整问题

* chore: bump version 9.11.1-beta04

Co-Authored-By: AApuci <44996451+AApuci@users.noreply.github.com>
2025-10-05 16:03:07 +09:00
Argo Zhang
59ec335d3c doc(Localization): update ru-RU localization documentation (#6827)
* chore: 更新俄语资源文件

* chore: 更新俄语资源文件
2025-10-05 15:37:06 +09:00
Argo Zhang
321eba2bfd doc(Localization): fix GenericTypeErrorMessage typo error (#6825)
* fix: 更正 GenericTypeErrorMessage 单词拼写错误

* fix: 更正单词拼写错误

* chore: bump version 9.11.1-beta03
2025-10-05 15:21:42 +09:00
Argo Zhang
03c56ce7be feat(Localization): update zh-TW.json localization (#6822)
* feat(Localization): update zh-TW.json localization

* chore: 更新文件格式

* chore: 更正单词拼写错误
2025-10-04 18:29:18 +09:00
Argo Zhang
4ec32d6057 feat(DropUpload): update link style under disabled mode (#6820)
* chore: 更新组件禁用状态下样式

* chore: 删除空行
2025-10-04 08:52:55 +00:00
Argo Zhang
4eae623398 feat(FontAwesome): bump version 9.1.2 (#6818) 2025-10-03 12:38:50 +00:00
Argo Zhang
d5be6f7bc5 test(Scss): fix variable check test (#6815) 2025-10-02 10:51:18 +09:00
Argo Zhang
b2b7191bfa feat(TableExport): bump version 9.2.7 (#6813) 2025-10-02 01:32:47 +00:00
Angelo Pirola
17d11d02f5 doc(Localizer): add italian localization (#6810)
* Add Italian localization file to project

Added `localization/it.json` to the project configuration file `BootstrapBlazor.slnx` to introduce support for the Italian language.

* Add Italian translations for BootstrapBlazor components

Added localized strings for labels, placeholders, tooltips, error messages, and other UI text in Italian across various  `BootstrapBlazor` components. This includes support for  features like form validation, table operations, date and  time pickers, modals, dropdowns, and more. These changes  enhance the user experience for Italian-speaking users by providing a fully localized interface.

* Update localization/it.json

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Angelo Pirola <angelo9871@gmail.com>

* Update localization/it.json

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Angelo Pirola <angelo9871@gmail.com>

* Update localization/it.json

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Angelo Pirola <angelo9871@gmail.com>

* chore: bump version 9.11.1-beta02

---------

Signed-off-by: Angelo Pirola <angelo9871@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-10-01 21:00:35 +09:00
Argo Zhang
51b9ca6c78 fix(Table): double click col trigger ResizeColumnCallback (#6809)
* fix(Table): double click col trigger ResizeColumnCallback

* chore: bump version 9.11.1-beta01
2025-09-30 11:04:45 +08:00
Argo Zhang
73f133af04 fix(Modal): support backdrop on multiple dialog mode (#6807)
* fix(Modal): support backdrop on multiple dialog mode

* chore: bump version 9.11.0
2025-09-29 12:31:37 +08:00
Argo Zhang
7f68e2e828 doc(Logout): add AvatarRadius documentation (#6806) 2025-09-29 02:41:54 +00:00
Argo Zhang
2f01d5a494 feat(Bundle): update css bundler (#6804)
* refactor: 增加样式文件

* refactor: 更新忽略文件

* refactor: 更新路径

* refactor: 减少拷贝脚本提高性能

* chore: 更新依赖

* refactor: 精简代码减少 rtl.css

* refator: 精简脚本

* refactor: 重构资产文件

* refactor: 精简脚本
2025-09-29 02:28:06 +00:00
ljmay168
06c5b30f2b fix(Table): filter out .is-detail rows when auto-fitting column widths (#6800)
* fix(Table): 双击表头自动调整列宽功能在表格有明细行时不能正常工作 #6797

* Initial plan

* Implemented fix for multiple dialog scrolling issue

Co-authored-by: ArgoZhang <22001478+ArgoZhang@users.noreply.github.com>

* fix: 多级弹窗窗体内滚动

* Revert "Implemented fix for multiple dialog scrolling issue"

This reverts commit 42c41361d0.

* chore: bump version 9.10.3

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ArgoZhang <22001478+ArgoZhang@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>

* chore: bump version 9.11.0-beta01

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ArgoZhang <22001478+ArgoZhang@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-09-28 16:28:43 +08:00
Argo Zhang
3d09b913fe feat(Console): remove console log in scripts (#6802)
* refactor: 移除调试信息

* refactor: log 更改为 error 平台不支持

* refactor: 移除调试信息

* refactor: 移除调试信息
2025-09-28 16:13:33 +08:00
Argo Zhang
8422a3f868 feat(Cssbuilder): improve performance use StringBuilder (#6799)
* wip: 临时提交

* refactor: use AddClass instead AddStyle

* refactor: 更新 Drawer 抽屉单元测试

* perf: 优化性能更新单元测试
2025-09-28 11:07:17 +08:00
Argo Zhang
7c9a31d422 fix(Affix): use culture-invariant for position (#6796) 2025-09-28 09:25:07 +08:00
Argo Zhang
c18331094e feat(Layout): compatible net10 when href is # (#6794)
* fix: 修复 net10 根路径高亮问题

* refactor: 精简代码
2025-09-28 09:12:09 +08:00
Copilot
d451a738f4 fix(Dialog): Fix scrolling issue in nested/multiple dialogs (#6786)
* Initial plan

* Implemented fix for multiple dialog scrolling issue

Co-authored-by: ArgoZhang <22001478+ArgoZhang@users.noreply.github.com>

* fix: 多级弹窗窗体内滚动

* Revert "Implemented fix for multiple dialog scrolling issue"

This reverts commit 42c41361d0.

* chore: bump version 9.10.3

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ArgoZhang <22001478+ArgoZhang@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-09-27 14:51:38 +08:00
Argo Zhang
7051bf1b5f fix(AutoComplete): support bind-Value/OnValueChanged callback (#6792)
* fix: 修复初始化值未赋值问题

* feat: 增加 change 事件支持双向绑定

* feat: 支持双向绑定

* feat: 增加 _clientValue 变量支持双向绑定逻辑

* refactor: 通过 GetChangedEventCallbackName 提高性能

* refactor: 使用服务器端传递的回调方法名称

* test: 增加双向绑定单元测试

* refactor: 参数展开

* refactor: 更新 _clientValue 参数位置

* refactor: 简化代码
2025-09-27 13:18:39 +08:00
Michel Oliveira
f5960e7d8e feat(actions): add nuget trusted publishing (#6788)
* feat(actions): add nuget trusted publishing

* chore: add actions sulotion folder

* chore: update nuget-login to login

---------

Co-Authored-By: Michel Oliveira <118028741+micheloliveira-com@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-09-27 12:01:47 +08:00
Copilot
d325482370 fix(TimePicker): Use culture-invariant formatting for CSS transform values (#6790)
* Initial plan

* Fix TimePicker culture-specific decimal separator in CSS transform

Co-authored-by: ArgoZhang <22001478+ArgoZhang@users.noreply.github.com>

* refactor: 使用 AddStyle 重构代码

* refactor: 改用 AddClass 方法

* test: 更新单元测试

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ArgoZhang <22001478+ArgoZhang@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-09-27 10:24:59 +08:00
Argo Zhang
d82d766f1a doc(Modbus): update Betchmark result (#6783)
* chore: 更新 TcpSocket 包

* doc: 更新基准测试数据
2025-09-25 13:19:32 +08:00
Argo Zhang
3e33f55ef5 doc(Modbus): update IModbusResponse Buffer doc (#6780)
* chore: 更新依赖包

* doc: 更新 IModbusResponse 参数

* chore: 更新依赖包

* doc: 更新参数 RawData 为 Buffer
2025-09-24 12:25:40 +08:00
Argo Zhang
a0dc0f0096 fix(Chart): support custom label formatter (#6778)
* doc: 更新示例

* chore: 更新依赖
2025-09-23 10:49:20 +08:00
Argo Zhang
a4748c4b28 feat(ListGroup): add OnDoubleClickItem callback (#6777)
* feat: 增加 OnDoubleClickItem 回调方法

* doc: 更新示例

* doc: 增加本地化

* revert: 撤销条件更改

* test: 增加单元测试

* doc: 格式化内容

* doc: 格式化
2025-09-23 10:05:01 +08:00
Argo Zhang
9c883de99b doc(SerialPort): add ISerialPortFactory documentation (#6775)
* doc: 更新 ModbusFactory 文档

* doc:  更新 SocketFactory 文档

* doc: 更新 SocketClient 文档

* doc: 增加菜单

* doc: 增加源码文件映射

* doc: 增加串口通信服务文档

* doc: 更新注意事项

* doc: 增加串口参数配置类文档
2025-09-22 14:23:07 +08:00
Argo Zhang
75a2d5e37d doc(Modbus): add IModbusResponse documentation (#6772)
* chore: 更新依赖

* doc: 更新 IModbusResponse 文档

* doc: 代码格式化

* doc: 代码格式化

* doc: 增加注意事项
2025-09-21 14:55:24 +08:00
Argo Zhang
cedd988b13 chore(Sass): bump AspNetCore.SassCompiler 1.92.1 (#6769)
* chore: 更新 sass 文件使用 use

* chore: 更新版本 1.92.1

* refactor: 精简代码

* test: 修复失败的单元测试
2025-09-20 15:01:15 +08:00
Argo Zhang
f3b5df9cc0 chore(Version): add Version.props doc (#6767) 2025-09-20 14:40:26 +08:00
Argo Zhang
631f9c2bc1 chore(Tools): add delete-bin tools (#6765) 2025-09-20 14:39:22 +08:00
Argo Zhang
13473b2303 feat(AutoFill): reuse AutoComplete clear-icon function (#6763)
* refactor: 清空按钮复用 AutoComplete 逻辑

* test: 更新单元测试

* chore: bump version 9.10.2
2025-09-19 10:35:09 +08:00
Argo Zhang
61e7c08843 feat(Search): remove OnClear callback reuse OnSearch (#6761)
* refactor: 精简代码

* refactor: 微调样式

* refactor: 移动 IsClearable/ClearIcon 到基类

* refactor: 微调右间距

* Revert "refactor: 微调右间距"

This reverts commit 584f6545f2.

* refactor: 调整 Clear 小图标样式

* refactor: 移除 OnClear 回调方法

* refactor: 调整 search-template 左间距

* refactor: 移除 is-clearable 样式

* refactor: 设置按钮样式

* test: 更新单元测试
2025-09-19 10:10:07 +08:00
Argo Zhang
ed2e900cea feat(AutoComplete): add IsClearable parameter (#6758)
* feat: 支持清空小按钮

* feat: 增加 ClearIcon 功能

* doc: 更新示例文档

* doc: 增加多语言

* doc: 更新文档

* test: 增加单元测试

* refactor: 移动到 Auto 组件中

* test: 增加单元测试
2025-09-18 15:46:48 +08:00
Argo Zhang
47d21d5c33 fix(SelectTable): should hidden append icon when hover (#6757) 2025-09-18 13:38:04 +08:00
Argo Zhang
8828aa86f8 fix(SelectObject): should hidden append icon when hover (#6755) 2025-09-18 13:37:01 +08:00
Argo Zhang
a8dd255e05 fix(MultiSelectGeneric): close button not work (#6754) 2025-09-18 12:47:48 +08:00
Argo Zhang
20fba89c2a doc(Modbus): add Benchmark result (#6753)
* doc: 更新 Socket 转实体类文档

* doc: 增加 Benchmark 结果

* doc: 更新基准测试文档

* doc: 更新错别字

* doc: 增加读写数据阈值文档
2025-09-18 12:08:50 +08:00
Argo Zhang
c198c04333 doc(TcpSocket): use extension method ReceiveAsync (#6750)
* refactor: 更新最新依赖包

* doc: 更改 ReceivedCallback 拼写问题

* chore: bump version 9.0.10
2025-09-17 16:01:58 +08:00
Argo Zhang
d00d3878a6 doc(Socket): remove DataTypeConverter attribute (#6745) 2025-09-15 18:08:30 +08:00
Argo Zhang
2aba6f867a doc(TcpSocket): remove DataTypeConverterAttribute class doc (#6743)
* chore: bump version 9.0.1

* doc: 移除 DataTypeConverter 标签文档
2025-09-14 17:45:01 +08:00
Argo Zhang
faec42fdb7 doc(Modbus): add not support wasm documentation (#6741)
* chore: 更新依赖包

* chore: 更新依赖包

* doc: 增加不支持 wasm 说明
2025-09-13 15:37:51 +00:00
Argo Zhang
02b014cbad fix(offline): Blazor offline mode is broken in 9.7.4 and up (#6734)
* chore: 更新脚本资源

* refactor: 移除压缩包脚本变化策略

* chore: bump version 9.10.1
2025-09-11 15:16:41 +08:00
Argo Zhang
aa7bc44a4a feat(Bootstrap): bump version 5.3.8 (#6736) 2025-09-11 15:13:29 +08:00
Argo Zhang
fa7a166f12 doc(TcpSocket): add thread-safe documentation (#6729) 2025-09-09 20:37:46 +08:00
Argo Zhang
55e2c6529d doc(Modbus): update IModbusClient documentation (#6725) 2025-09-08 21:33:49 +08:00
Argo Zhang
8ebcb45152 doc(Modbu): add ModbusFactory documentation (#6722)
* chore: 更新依赖

* doc: 更新文档

* doc: 更新文档

* doc: 更新说明文档

* chore: 更新路由配置文件
2025-09-07 19:09:49 +08:00
Argo Zhang
280fec1788 chore(Modbus): bump version 9.0.3 (#6720)
* chore: 更新字典

* doc: 调整菜单

* doc: 更新菜单

* doc: 更新字典

* chore: 更改注入服务位置

* doc: 增加 Modbus 服务文档

* chore: 增加 Modbus 包依赖

* doc: 更新文档

* chore: 更新依赖包
2025-09-06 11:33:23 +08:00
Argo Zhang
3ecc8425ec doc(Modbus): add IModbusFactory documentation (#6717)
* chore: 更新字典

* doc: 调整菜单

* doc: 更新菜单

* doc: 更新字典

* chore: 更改注入服务位置

* doc: 增加 Modbus 服务文档

* chore: 增加 Modbus 包依赖

* doc: 更新文档
2025-09-05 15:51:40 +08:00
Argo Zhang
9ec0c0b08b feat(Socket): use Longbow.TcpSocket package (#6715)
* refactor: 更改 ReceivedCallback 回调方法

* chore: 更新类库

* doc: 更新文档

* doc: 更新包命名空间

* refactor: 更新服务注入方法

* chore: 更新依赖包

* chore: 增加多语言
2025-09-04 21:03:21 +08:00
Argo Zhang
f3325b57c5 feat(FontAwesome): bump version 9.1.1 (#6711) 2025-09-03 09:41:13 +08:00
Argo Zhang
f9fda763cc feat(AutoComplete): use javascript update input value (#6709)
* refactor: 移除 dropdown-item 点击逻辑

* test: 更新单元测试

* feat: 增加无数据处理逻辑

* Revert "feat: 增加无数据处理逻辑"

This reverts commit b2cbd76690.

* Revert "test: 更新单元测试"

This reverts commit 057ad97a5e.

* Revert "refactor: 移除 dropdown-item 点击逻辑"

This reverts commit d62cbe5731.

* refactor: 增加客户端设置值逻辑

* refactor: 更新清空逻辑

* refactor: 更新赋值逻辑

* test: 更新单元测试

* refactor: 更新 Search 组件
2025-09-02 14:03:46 +08:00
Argo Zhang
e6d73bdc19 feat(DataConverter): add logger for Debugger attached (#6707)
support debugger
2025-09-02 11:59:51 +08:00
Argo Zhang
a5775719c7 fix(DockView): component disappearing when moving from floating to new grid group (#6705) 2025-09-02 09:14:40 +08:00
Argo Zhang
c0646523d7 doc(Socket): update DataPackageAdapter documentation (#6703)
* doc: 增加 IsAutoReceive 参数设置文档

* doc: 增加服务文档跳转连接

* doc: 增加内存泄漏说明文档

* doc: 更新类型检查文档

* refactor: 更新代码逻辑

* chore: 更新依赖包
2025-09-01 19:47:43 +08:00
Argo Zhang
24ad8e80c1 doc(Socket): add DataByteConverter documentation (#6701)
* doc: 更新文档

* doc: 代码格式化

* chore: 引用排序

* doc: 增加 DataByteConverter 数据转换类型

* chore: bump vesion 9.0.10
2025-08-31 09:32:53 +08:00
Argo Zhang
2b544a46d3 doc(Socket): add modbus crc-16 validate (#6699)
* doc: 更新文档

* doc: 代码格式化

* chore: 引用排序
2025-08-30 13:21:54 +08:00
Argo Zhang
09cb94f69c doc(Socket): update socket extension namespace (#6697) 2025-08-29 09:18:14 +08:00
Argo Zhang
c5606b1dc2 doc(Localization): add Ukrainian (uk-UA) localization file (#6695)
* doc: add Ukrainian locales

* chore: bump version 9.10.0

Co-Authored-By: Alexandr <SoftStar2004@gmail.com>

* doc: 文档格式化

* chore: 增加资源文件

---------

Co-authored-by: Alexandr <SoftStar2004@gmail.com>
2025-08-29 08:46:16 +08:00
Argo Zhang
058d93ddf7 fix(SvgEditor): update images path (#6693) 2025-08-28 12:01:16 +08:00
Argo Zhang
12ea8d8c4d feat(SelectTree): add auto active value function (#6691)
* refactor: 文档格式化

* feat: 增加选中节点逻辑

* doc: 更新可编辑文档

* refactor: 精简代码
2025-08-28 11:58:24 +08:00
Argo Zhang
c9860150d5 doc(BaiduOcr): add config documentation (#6690)
* doc: 文档格式化

* doc: 更新配置文档

* doc: 更新资源文件

* doc: 更新文档
2025-08-28 11:42:36 +08:00
Argo Zhang
6d3d2f9258 feat(Plyr): bump version 9.0.2 (#6688)
bump plyr version 3.8.3
2025-08-28 09:00:45 +08:00
Argo Zhang
69339a5f43 doc(ITcpSocketClient): update AddDataPackageAdapter documentation (#6686)
* doc: 增加配置示例文档

* doc: 增加本地化资源文件

* doc: 更新示例

* doc: 更新数据适配器文档

* chore: 更新依赖包

* doc: 更新文档
2025-08-27 17:26:14 +08:00
Argo Zhang
481b744cc2 doc(Table): update EditDialogIsDraggable documentation (#6683)
* doc(Table): 更新文档

* doc: 更新示例
2025-08-26 15:37:00 +08:00
Argo Zhang
21363123dc doc(ITcpSocketClient): update SetDataPackageAdapter documentation (#6681)
* doc: 更新扩展方法文档

* chore: bump version 9.0.1
2025-08-26 15:22:01 +08:00
Argo Zhang
3b2b55b19b doc(EditorForm): add IsDisplay parameter documentation (#6679) 2025-08-25 12:38:04 +08:00
Argo Zhang
7082fa7463 doc(FilterBase): update OnFilterAsync documentation (#6677)
* doc: 代码格式化

* refactor: 更新 OnFilterAsync 回调方法文档

* doc: update OnFilterAsync documentation
2025-08-24 10:07:18 +08:00
Argo Zhang
9314754df8 doc(MaskOption): update ZIndex documentation (#6675) 2025-08-23 20:22:35 +08:00
Argo Zhang
412e8ee552 feat(BreadcrumbItem): add CssClass property (#6673)
* refactor: 增加 IsFixed 关键字

* doc: 更新注释

* refactor: 精简代码

* test: 更新单元测试

* refactor: 精简代码

* refactor: 调整级联参数位置

* feat: 增加 CssClass 参数

支持自定义样式

* test: 更新单元测试

* doc: 更新注释
2025-08-23 17:05:12 +08:00
Argo Zhang
54f416c51e feat(DateTimePicker): add PickTimeMode parameter (#6670)
* refactor: 代码格式化

* style: 微调日历数字字体大小

* doc: 代码格式化

* refactor: 结束时间精确到毫秒

* refactor: 代码格式化

* refactor: 私有属性改为变量

* feat: 增加时间选择器

* style: 调整间隙

* feat: 增加选择时间方式枚举参数

* refactor: 增加切换视图时关闭时间选择器逻辑

* feat: 增加秒针控制

* doc: 更新示例

* chore: bump version 9.10.0-beta01

* feat: 增加 PickTimeMode 参数

* test: 增加单元测试
2025-08-22 19:26:28 +08:00
Argo Zhang
d54014ef30 test(Upload): add unit test for upload reset (#6667)
* refactor: 更改写法消除警告信息

* feat: 增加 Reset 方法

* doc: 代码格式化

* revert: 撤销新方法

* test: 增加单元测试
2025-08-22 09:19:40 +08:00
Argo Zhang
dd729e2714 feat(EnsureInitialized): add CanWrite filter (#6665)
* refactor: 增加 CanWrite 过滤

* test: 更新单元测试

* chore: bump version 9.9.3
2025-08-21 17:24:48 +08:00
Argo Zhang
7d225d9183 feat(Tooltip): support manual trigger (#6663)
* feat: 增加 show/hide 方法

* feat: 增加 toggle 方法

* doc: 更新 delay 参数说明文档

* feat: 增加 Show/Hide/Toggle 实例方法

* feat: 增加 IToggle 接口

* refactor: 调整 Popover 组件支持 Toggle 方法

* doc: 更新 Tooltip 示例

* revert: 撤销 IToggle 接口

* doc: 更新示例代码

* revert: 撤销更新

* doc: 更新文档

* feat: 增加状态切换逻辑

* doc: 更新 Popover 示例

* chore: bump version 9.9.3-beta03

* doc: 更正单词拼写错误

* test: 补充单元测试

* refactor: 精简代码

* doc: 更正单词拼写错误
2025-08-21 13:25:09 +08:00
Argo Zhang
24726c347e feat(IDom2ImageService): add IDom2ImageService interface (#6661)
* chore: 增加 Dom2Image 扩展服务

* feat: 增加示例页面

* chore: 增加依赖

* doc: 精简代码

* doc: 增加菜单

* doc: 增加菜单本地化

* doc: 增加源码映射文件

* refactor: 更新键值

* doc: 更新示例

* doc: 更新本地化资源文件

* doc: 增加功能示例

* chore: 更新依赖包
2025-08-20 06:21:31 +00:00
Argo Zhang
ee89734ed8 feat(Editor): update return type nullable (#6658)
bump version 9.0.7
2025-08-20 01:00:11 +00:00
Argo Zhang
fef83f682f doc(SelectTable): remove Items parameter doc (#6656) 2025-08-20 08:52:04 +08:00
Argo Zhang
dbb29142ed fix(SelectTree): optimize select item change event (#6654)
* fix(SelectTree): 修复页面刷新时触发 OnSelectedItemChanged 问题

* chore: bump version 9.9.3-beta02
2025-08-19 18:10:54 +08:00
Argo Zhang
8517b7b219 feat(IPRegion): use async increase load speed (#6652)
bump version 9.0.3
2025-08-19 13:24:05 +08:00
Argo Zhang
083ba71344 fix(hasCode): use index variable (#6650)
* refactor: update index variable

* chore: bump version 9.9.3-beta01
2025-08-19 10:04:44 +08:00
Argo Zhang
f13a950c5f doc(img): use GetAssetUrl make same path (#6649)
* doc: 使用 GetAssetUrl 获得地址

* refactor: 使用 WebsiteOption 配置值

* doc: 使用 GetAssetUrl 获得路径

* doc: 统一资产路径

* doc: 增加 lazy 懒加载

* doc: 使用统一资源路径

* doc: add alt attribute
2025-08-19 09:47:48 +08:00
j4587698
c866e93f3f feat(Editor): add OnFileUpload parameter (#6638)
* Editor增加Upload回调

* refactor: 精简代码

* doc: 增加 OnFileUpload 回调方法说明

* doc: 增加默认焦点设置

* feat: 更新说明文档

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-08-18 14:43:51 +08:00
Argo Zhang
7e351bd9e9 refactor(Upload): remove async keyword (#6644)
* refactor: 精简代码

* refactor: 移除 async 关键字
2025-08-18 14:43:33 +08:00
Argo Zhang
eb8cbcbac3 feat(CodeEditor): bump version 9.0.3 (#6642) 2025-08-17 18:49:43 +08:00
Argo Zhang
c9653f5d89 feat(Layout): add SkipAuthenticate parameter (#6640)
* refactor: 更改变量名

* feat: add SkipAuthenticate parmeter

* test: add unit test
2025-08-17 18:24:50 +08:00
Argo Zhang
302c23e610 feat(Task): add Dashboard component (#6634)
* chore: 增加 Task Dashboard 工程依赖

* chore: 增加依赖说明

* doc: 增加 TaskBoard 页面

* doc: 增加菜单

* doc: 增加源码文件映射

* refactor: 增加任务面板组件

* refactor: 直接接口

* chore: 更改命名空间

* chore: 更新依赖版本

* chore: 更新解决方案项目
2025-08-16 16:24:49 +08:00
Argo Zhang
b9971c4927 doc(SvgEditor): add reference documentation (#6636) 2025-08-16 16:23:20 +08:00
Argo Zhang
f394087321 feat(BootstrapLabel): support style html attribute (#6632) 2025-08-16 15:12:19 +08:00
Argo Zhang
0b469ba98f doc(CustomerFilter): update ShowFilterHeader sample code (#6627)
* refactor: 表头过滤更新示例

* doc: 更新自定义过滤组件示例

* refactor: 增加默认参数

* doc: 更新示例
2025-08-15 21:47:51 +08:00
Argo Zhang
ffaf7950a6 chore(TableColumnFilter): revert support case-sensitive (#6630)
* revert: 撤销 Contains 第二个参数

* test: 更新单元测试
2025-08-15 18:14:07 +08:00
Argo Zhang
716325ebd6 feat(TableColumnFilter): contains filter support case-sensitive (#6626)
* feat: support case-sensitive

* test: 更新单元测试
2025-08-15 12:57:30 +08:00
Argo Zhang
c7a839d4b4 doc(Home): update title meta (#6623)
* doc: 首页不使用资源文件

* doc: 移除不使用的命名空间
2025-08-15 09:10:06 +08:00
Argo Zhang
94ff90cc23 doc(Home): update logo effect (#6621) 2025-08-14 19:42:18 +08:00
Argo Zhang
f5b665b743 feat(Table): support interface TItem (#6619)
* refactor: 直接接口

* test: 更新单元测试
2025-08-14 19:39:55 +08:00
Argo Zhang
2040c955dd chore(Docker): add pupeteersharp support (#6615)
* chore: update expose port to 8080

* chore: 更新依赖保证发布时依赖可用

* chore: 更新依赖

* chore: 更新 Dockerfile

* chore: 更新自动化脚本分支

* chore: 更新 dockerfile  脚本

* chore: 增加 build 脚本

* doc: 更新 OnlineExcel 协作示例

* chore: 调整协作服务

* chore: 增加中文支持

* chore: 调整命令顺序

* chore: 调整软件安装顺序

* chore: 调整顺序

* chore: 增加删除包脚本

* chore: bump version 9.9.2
2025-08-13 09:19:59 +08:00
Argo Zhang
7504bbdc84 doc(DialButton): update dial button (#6613)
* refactor: 代码格式化

* doc: 重构更新日志按钮样式
2025-08-13 09:00:46 +08:00
Argo Zhang
7a6156eff9 chore(Deploy): update install font script (#6611) 2025-08-13 08:58:35 +08:00
j4587698
1b9c28ad29 feat(Mask): add OnCloseAsync cascade parameter (#6609)
* Mask增加OnCloseAsync回调

* doc: 支持多语言

* test: 增加单元测试

* Revert "test: 增加单元测试"

This reverts commit 1716203e01.

* test: 更新单元测试

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-08-13 08:56:33 +08:00
Argo Zhang
948a9b9485 doc(FooterCounter): improve performance for ssr mode (#6607)
* style: 调整计时器宽度

* perf: 更改为服务器端与客户端结合减少服务器压力

* refactor: 更改样式

* style: 更新圆角

* style: 调整滚动条位置

* refactor: 精简进度面板代码
2025-08-12 09:29:46 +08:00
Argo Zhang
6086ac38ad doc(OnlineSheet): improve performance (#6605)
* doc: 更新 OnlineExcel 协作示例

* chore: 调整协作服务
2025-08-12 09:26:16 +08:00
Argo Zhang
60d1be786f doc(Table): add DateTime edit sample code (#6603)
* style: 修复开启时间视图宽度溢出问题

* doc: 更新日期时间编辑示例
2025-08-12 09:15:34 +08:00
Argo Zhang
2c5f4ca3ec feat(Assets): use Assets on javascripts (#6602)
* doc: 增加 nosnippet 标签

* chore: 增加脚本指纹
2025-08-12 09:12:52 +08:00
Argo Zhang
275043adff feat(OpcDa): bump version 9.0.3 (#6600)
* chore: bump version 9.0.3

* doc: 更新示例兼容 widows 平台
2025-08-11 18:02:48 +08:00
Argo Zhang
e6afb4f133 doc(Layout): improve load theme logic (#6598)
* feat: 增加 GetPreferredThemeAsync 扩展方法

* doc: 更新主题加载逻辑防止抖动

* perf: 优化性能

* refactor: 移除 GetPreferredThemeAsync 扩展方法

* refactor: 删除 getPreferredTheme 方法
2025-08-11 15:31:06 +08:00
Argo Zhang
84d660ceff feat(MeiliSearch): add kbd style for dark mode (#6596) 2025-08-11 15:28:08 +08:00
Argo Zhang
77218141d0 feat(OpcDa/IPRegion): update publish task script (#6594)
* chore: 更新依赖保证发布时依赖可用

* chore: bump version 9.0.2
2025-08-11 15:26:24 +08:00
Argo Zhang
8e51e37189 feat(Navbar): add Navbar component (#6586)
* feat: 增加 Navbar 组件

* feat: 增加 NavBrand 组件

* doc: 增加菜单

* doc: 增加 Navbar 示例页面

* doc: 调整菜单顺序

* refactor: 增加子组件

* doc: 更新示例

* refactor: 更改 Color 默认值

* doc: 更新网站 header 样式

* feat: 增加 ToggleButton 组件

* feat: 增加 Group 组件

* feat: 增加 Collapse 组件

* feat: 增加 Item 组件

* feat: 增加 Brand 组件

* feat: 增加 Navbar 组件

* doc: 更新文档

* style: 增加响应式样式

* doc: 增加注释

* test: 增加单元测试

* doc: 更新注释文档

* refactor: 移除 sealed 关键字

* style: 更新阴影样式

* refactor: 增加 NavbarLink 组件

* test: 更新单元测试

* refactor: 复用 HandlerClick 方法

* doc: 更新示例

* test: 更新单元测试

* feat: 增加 NavbarDropdown 组件

* refactor: 更改 Size 默认值

* doc: 更新示例

* feat: 增加方向与对其方式参数

* doc: 更新示例

* test: 更新单元测试

* refactor: 精简代码

* doc: 更新文档

* refactor: 更新代码消除警告信息

* style: 更新 Dropdown 组件样式

* style: 更新样式

* feat: 增加 IsScrolling 参数

* refactor: 更新示例

* test: 更新单元测试

* feat: 增加高度参数

* style: 增加左右间隙

* doc: 更新文档说明

* refactor: 增加 Home 动画特效
2025-08-11 08:39:32 +08:00
Argo Zhang
e88f9f0269 feat(Dropdown): update Color default value (#6592) 2025-08-11 08:36:09 +08:00
Argo Zhang
a68d9bbf73 fix(DateTimePicker): width overflow when set ViewMode to DateTime (#6590) 2025-08-11 08:35:40 +08:00
Argo Zhang
7ca524e9ff feat(ToggleButton): reuse base type function (#6588)
* refactor: 更新代码消除警告信息

* doc: 更新注释文档
2025-08-11 08:35:05 +08:00
Argo Zhang
f896db799a doc(Home): add rotate effects (#6583) 2025-08-10 08:29:38 +08:00
Argo Zhang
0945757d6a feat(LinkButton): support IsAsync function (#6581)
* test: 更新单元测试

* refactor: 移动 HandlerClick 到基类

* feat(LinkButton): support IsAsync function

* refactor: 移除 sealed 关键字

* refactor: 复用 HandlerClick 方法

* test: 更新单元测试

* refactor: 精简代码
2025-08-10 08:15:27 +08:00
Argo Zhang
e618bf9ee5 feat(EditForm): update footer style (#6579)
* refactor: 增加原生标签支持

* style: 精简样式

* style: 统一间隙

* chore: bump version 9.9.2-beta05
2025-08-09 16:00:00 +08:00
Argo Zhang
53b67c3d0f fix(Table): update style for ScrollingDialogContent (#6577)
* refactor: 增加 form-body 节点

* style: 增加样式

* chore: bump version 9.9.2-beta04
2025-08-09 13:02:04 +08:00
Argo Zhang
299e14341e refactor(Toolbar): remove cascade value (#6575) 2025-08-08 11:49:30 +08:00
Argo Zhang
c37f5d1847 feat(Toolbar): support html attribute (#6573)
* feat: ButtonGroup 支持 html 标签

* feat: ToolbarItem 支持 html 标签

* feat(ToolbarSeparator): 支持 html 标签

* feat(ToolbarSpace): 支持 html 标签

* refactor: 删除不使用的代码

* Revert "refactor: 删除不使用的代码"

This reverts commit 51cb815e98.

* fix: 更正样式名称
2025-08-08 11:24:01 +08:00
Argo Zhang
db56431d0c feat(TableCellPopConfirmButton): support IsKeepDisabled parameter (#6571)
* chore: bump version 9.9.2-beta03

* refactor: 增加 IsKeepDisabled 参数支持

* feat: 增加 IsKeepDisabled 参数

* test: 更新单元测试

* test: 增加代码覆盖率
2025-08-07 15:55:46 +08:00
Argo Zhang
8fe72a5124 feat(TableCellPopConfirmButton): support IsAsync parameter (#6569)
* feat: support IsAsync parameter

* chore: bump version 9.9.2-beta01
2025-08-07 12:16:44 +08:00
Argo Zhang
b03565853b feat(Download): add FileName check (#6568) 2025-08-07 11:47:44 +08:00
Argo Zhang
3ddbf2736e feat(OpcDa): add Browse feature (#6565)
* wip: 增加浏览功能

* doc: 增加浏览功能示例
2025-08-07 11:09:53 +08:00
Argo Zhang
1ef4d91665 doc(OpcDa): add MockOpcDaServer sample code (#6563)
* chore: 更加 OpcDa 依赖包

* doc: 增加菜单

* doc: 增加 OpcDa 示例页面

* refactor: 增加模拟 OpcServer 实现类

* doc: 增加 OpcDa 源码映射

* doc: 更新示例

* chore: 增加 MockOpcDaServer 支持 Linux 演示

* chore: 更新依赖包

* feat: 完善模拟 OpcServer 服务实现类

* doc: 更新示例

* refactor: 更新依赖

* doc: 更新按钮可用逻辑

* refactor: 更新注入服务

* doc: 更新示例

* refactor: 删除 Mock 服务

* chore: 更新依赖包
2025-08-06 18:10:37 +08:00
Argo Zhang
22e67cf751 feat(DynamicElement): support html attribute (#6561)
* refactor: 使用代码生成组件支持 @onclick 写法

* refactor: 更新 LinkButton 移除 Razor 文件

* refactor: 精简代码

* refactor: 使用原生元素

* Revert "refactor: 使用代码生成组件支持 @onclick 写法"

This reverts commit c81d0a9f8c.

* Reapply "refactor: 使用代码生成组件支持 @onclick 写法"

This reverts commit bea469b1b6.

* feat: 增加 AdditionalAttributes 支持

* refactor: 调整序列

* refactor: 增加 AddImage 方法

* refactor: 调整顺序
2025-08-06 09:14:26 +08:00
Argo Zhang
278b990c8b fix(Card): missing style html attribute (#6559)
* refactor: 使用代码生成组件支持 @onclick 写法

* fix: 修复 style 丢失问题

* Revert "refactor: 使用代码生成组件支持 @onclick 写法"

This reverts commit c81d0a9f8c.
2025-08-06 08:41:21 +08:00
Argo Zhang
5529bd5d00 fix(Swal): add ZIndex style variable (#6557)
* fix(Swal): add style

* chore: bump version 9.9.1
2025-08-05 14:13:25 +08:00
Argo Zhang
33e2aeef64 feat(Toolbar): add Toolbar component (#6547)
* feat: 增加 Toolbar 组件

* refactor: 增加命名空间

* doc: 增加本地化

* doc: 增加源码映射

* doc: 增加工具栏菜单

* doc: 增加工具栏示例

* refactor: 更新内部实现逻辑

* doc: 更新示例

* doc: 增加注释

* refactor: 重构组件名称

* doc: 更新示例

* feat(CheckboxLIst): support ItemTemplate on Button mode

* refactor: 代码格式化

* feat(RadioLIst): support ItemTemplate on Button mode

* feat: 增加 IsWrap 参数

* doc: 更新示例

* doc: 更新示例

* feat(CheckboxList): add ShowButtonBorderColor parameter

* feat(RadioList): add ShowButtonBorderColor parameter

* refactor: 精简样式名称

* test: 更新示例

* test: 增加单元测试

* chore: bump version 9.9.1-beta06

* test: 更新单元测试

* test: 增加功能测试

* revert: 撤销更改

* test: 增加单元测试

* refactor: 增加 disposing 参数使用

* refactor: 更改代码消除异常

* doc: 更新样式

* test: 增加单元测试

* test: 增加单元测试

* test: 增加单元测试

* test: 增加单元测试
2025-08-05 12:58:19 +08:00
Argo Zhang
0b6c36e7d4 feat(ValidateForm): use IOptionsMonitor option (#6555) 2025-08-05 10:46:28 +08:00
Argo Zhang
096d3a7156 fix(INetworkMonitorService): support safari browser (#6553)
* fix(Net): check browser support connection

* chore: bump version 9.9.1-beta06
2025-08-05 10:39:44 +08:00
Argo Zhang
582eebd071 feat(IBrowserFingerService): add GetClientHubIdAsync method (#6551)
* feat(IBrowserFingerService): add GetClientHubIdAsync method

* feat: 增加 getClientHubId 导出方法

* doc: 更新示例

* doc: 调整间隙

* refactor: 更新脚本降低对浏览器的要求

* doc: 文本框更改为只读

* test: 增加单元测试
2025-08-05 10:33:17 +08:00
Argo Zhang
cc70a2c756 doc(Home): add responsive support for logo image (#6549)
* refactor: 精简样式

* refactor: 增加响应式支持

* refactor: 更新样式

* doc: 微调 OTP 样式
2025-08-05 10:26:48 +08:00
Argo Zhang
a65e2464c5 feat(ToggleButton): add ToggleButton component (#6545)
* feat: 增加 ToggleButton 组件

* doc: 增加示例

* chore: 更新 Sortable 依赖

* test: 更新 Table 单元测试

* test: 增加单元测试提高覆盖率

* chore: 更新项目依赖

* refactor: 重构代码

* test: 增加单元测试

* doc: 更新示例

* chore: bump version 9.9.1-beta05
2025-08-04 11:37:28 +08:00
Argo Zhang
69ce39edce fix(BootstrapBlazorDataAnnotationsValidator): add IDispose interface (#6543)
* refactor: 移除扩展方法

* refactor: 增加 IDisposable 接口

* chore: bump version 9.9.1-beta04

* refactor: 精简代码
2025-08-04 09:19:07 +08:00
Argo Zhang
1435764235 feat(ISortableList): add ISortableList interface (#6527)
* feat: 增加 Key 参数

* refactor: 使用回调方法 GetKeyByITem 获得行 Key 值

* chore: bump version 9.9.1-beta02

* doc: 调整示例

* refactor: 增加键值

* doc: 更新示例

* refactor: 内置可拖动行样式

* feat: 增加 ISortableList 接口

* chore: bump version 9.9.1-beta04

* chore: 更新 SortableList 组件

* refactor: 增加级联参数

* refactor: 内置 SortableList 行键值逻辑向下兼容

* revert: 撤销更改

* revert: 撤销 Key 参数

* revert: 撤销依赖

* revert: 临时移除 OnGetRowKey 回调方法
2025-08-04 09:14:07 +08:00
Argo Zhang
09e200c29d feat(RadioList): add outline style (#6540)
* refactor: 更改样式

* style: 微调样式

* style: 调整样式

* test: 更新单元测试
2025-08-03 10:29:44 +08:00
Argo Zhang
b008908e71 feat(CheckboxList): add outline style (#6538)
* chore: 更新 CheckboxList 实现逻辑

* refactor: 微调样式

* refactor: 开发模式不使用后台服务

* Revert "chore: 更新 CheckboxList 实现逻辑"

This reverts commit 312fad38e4.

# Conflicts:
#	src/BootstrapBlazor/Components/Checkbox/CheckboxList.razor.cs

* Revert "refactor: 微调样式"

This reverts commit 061ca856fd.

# Conflicts:
#	src/BootstrapBlazor/Components/Checkbox/CheckboxList.razor.cs

* feat: 同步 bs 实现

* doc: 更新示例

* style: 微调样式

* style: 调整样式
2025-08-03 10:25:05 +08:00
Argo Zhang
184b491a4c fix(Collapse): show Icon and Text both (#6536)
* refactor: 更新逻辑图标与文本可以一起显示

* chore: bump version 9.9.1-beta03
2025-08-03 10:19:48 +08:00
Argo Zhang
e12f5cd839 feat(Bootstrap): bump bootstrap 5.3.7 (#6534)
* chore: bump version 5.3.7

* chore: bump version 5.3.7
2025-08-03 09:46:31 +08:00
Mydashixiong
175fd46e35 feat(Table): support CssClass on CardView mode (#6525)
* feat(TableColumn):Table的RenderMode模式为CardView 时Column属性 CssClass

让Table的RenderMode模式为CardView 时,修改 Column属性 CssClass 可以生效

* refactor: 重构代码

* test: 增加单元测试

* chore: bump version 9.9.1-beta02

---------

Co-Authored-By: Mydashixiong <136679228+Mydashixiong@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-08-02 10:05:55 +08:00
Argo Zhang
db1fc338eb doc(TaskService): disable task service on dev mode (#6529) 2025-08-02 09:38:13 +08:00
Argo Zhang
ad7593c818 feat(Table): add IsPopover parameter on PageInfo (#6524)
* refactor: add IsPopover parameter

* chore: bump version 9.9.1-beta01
2025-08-01 15:52:41 +08:00
Argo Zhang
a37909573c fix(PdfViewer): no render when url is empty (#6522) 2025-08-01 10:13:36 +08:00
Argo Zhang
4a2b9a4a9e doc(Home): update link address (#6520)
* doc: 调整 Home 页面 Header 间隙

* doc: 更新加入我们地址链接

* doc: 更新贡献指南链接
2025-08-01 09:15:53 +08:00
Argo Zhang
22a2212592 feat(PdfViewer): add PageIndex parameter (#6515)
* feat: 增加 PageIndex

* chore: bump version 9.0.5

* chore: bump version 9.9.0
2025-07-31 13:12:17 +08:00
Argo Zhang
ccfb30f72c fix(Message): should clear when use same option (#6513)
* doc: 更新示例

* fix: 防止多次添加相同 Id

* doc: 更新示例

* refactor: 增加取消动画逻辑

* refactor: 更新变量名称

* chore: 增加 null 赋值
2025-07-31 13:03:29 +08:00
Argo Zhang
a296a6d230 feat(ImageViewer): support dynamic update Url parameter (#6510)
* refactor: 预览组件 Id 提前生成

* refactor: 更新时重构 img 引用
2025-07-30 11:24:07 +08:00
Argo Zhang
6fbacbcaf5 fix(MultiSelectGeneric): update value when bind-Value changed (#6505)
* feat: 增加 IModelEqualityComparer 接口

* chore: bump version 9.8.3-beta01
2025-07-29 11:25:09 +08:00
Argo Zhang
a36dd1361e doc(AutoGenerateColumn): update final value logic documentation (#6502)
* doc: 更新表格标签文档

* doc: 增加权重大小逻辑
2025-07-28 09:29:50 +08:00
Argo Zhang
c9269f2217 feat(Badge): use text-bg-color class (#6498)
* refactor: use text-bg-color class

* refactor: 更改样式名称

* refactor: 更新样式

* test: 更新单元测试
2025-07-27 18:15:25 +08:00
Argo Zhang
b02aca8817 refactor(NetworkMonitor): add try/finally keep release simaphore slim (#6496) 2025-07-27 09:07:18 +08:00
Argo Zhang
c3eba6bbc9 chore(Config): update configuration files (#6494)
* chore: 更改邮件地址

* chore: 更新配置文件
2025-07-26 21:48:08 +08:00
Argo Zhang
df25e04f9a doc(QQGroup): update the DOM layout (#6492) 2025-07-25 15:50:49 +08:00
Argo Zhang
8ced895635 doc(Template5): add auto focus function (#6490)
* doc(Template5): 更新脚本增加自动获得焦点功能

* chore: add null check
2025-07-25 14:17:40 +08:00
Argo Zhang
b6d1fee0c3 doc(CodeEditor): add sample cdoe for CodeEditor (#6488)
* doc: 更新 CodeEditor 示例文档

* chore: 增加 CodeEditor 依赖

* doc: 增加行号
2025-07-25 12:35:32 +08:00
Argo Zhang
6b73e28e8b feat(TableToolbarButton): add IsOutline parameter (#6486)
* refactor(TableToolbarButton): add missing parameter

* chore: bump version 9.8.2
2025-07-24 12:50:43 +08:00
Argo Zhang
967b5ca8b5 doc(IOptions): use IOptions improve performance (#6485)
* refactor: 改用 IOptions<WebsiteOptions> 节约性能

* refactor: 移除 IOptionsMonitor 使用

* doc: 更正单词拼写错误

* refactor: 重构方法
2025-07-24 12:34:29 +08:00
Argo Zhang
981fd03bda feat(FluentSystemIcons): add microsoft fluent free icon set (#6483)
* doc: 增加多语言资源文件

* feat: 增加样式加载

* doc: 增加示例

* doc: 更新示例

* chore: 更新依赖 9.0.1 版本

* doc: 增加微软图标菜单

* doc: 更新文档

* doc: 更新注释文档

* doc: 更新文档
2025-07-24 12:06:03 +08:00
Argo Zhang
29f1e950eb chore(FontAwesome): bump version 9.1.0 (#6480) 2025-07-24 10:11:47 +08:00
Argo Zhang
4ea6624209 doc(TcpSocket): update TcpSokcet sample code (#6477)
* feat: 移动 Socket 相关代码到扩展包

* test: 更新单元测试

* doc: 更新示例

* chore: 增加对 TcpSocket 项目依赖
2025-07-23 18:14:50 +08:00
Argo Zhang
ca862b015a refactor(ITcpSocketFactory): move socket to extension package (#6475)
* feat: 移动 Socket 相关代码到扩展包

* test: 更新单元测试
2025-07-23 16:15:36 +08:00
Argo Zhang
54342accf8 fix(FlipClock): update digit after switch visible (#6473)
* refactor: 修复缓存导致数字不更新问题

* chore: bump version 9.8.2-beta05
2025-07-23 12:09:18 +08:00
Argo Zhang
fc34c3c576 doc(TreeView): add auto expand after drag sample code (#6471)
* refactor: 更新示例

* feat: 增加节点回调方法

可设置展开复选等功能

* doc: 更新拖动到子节点时父节点自动展开功能

* refactor: 精简代码

* test: 更新单元测试
2025-07-23 11:40:47 +08:00
Argo Zhang
e0f10c09d5 doc(Template5): add transition animation (#6469)
* refactor: 移除广告位

* feat: 增加过渡动画

* doc: 增加打包文件
2025-07-23 09:59:19 +08:00
Argo Zhang
ddc61cd14e feat(Collapse): redesign HeaderTemplate function (#6467)
* refactor: 更改 HeaderTemplate 模板

* doc: 更新示例

* chore: bump version 9.8.2-beta04

Co-Authored-By: 逆流的鱼 <84623480+leilei-liu@users.noreply.github.com>

---------

Co-authored-by: 逆流的鱼 <84623480+leilei-liu@users.noreply.github.com>
2025-07-22 18:09:54 +08:00
Argo Zhang
e862e7574f feat(ISocketDataConverter): add ConfigureSocketDataConverters method (#6463)
* refactor: 更改文件目录结构

* refactor: 代码格式化

* refactor: 增加重构方法精简代码

* refactor: 精简方法名称

* doc: 更新配置转换器集合文档
2025-07-22 12:44:27 +08:00
Argo Zhang
bbae67e158 fix(TabItem): layout OnErrorHandleAsync callback not work on tab item (#6461)
* doc: 更新文档

* feat: TabItem 内容报错时支持自定义异常处理

* chore: bump version 9.8.2-beta03
2025-07-22 12:07:19 +08:00
Argo Zhang
373f5c789c chore(Topolopy): bump version 9.0.1 (#6459)
bump meta2d version 1.0.88
2025-07-22 11:40:42 +08:00
Argo Zhang
336bfe7fb1 feat(Localization): add ru-RU localization file (#6455)
* chore: 增加俄语支持

* chore: 增加俄语资源文件链接
2025-07-21 14:45:33 +08:00
Argo Zhang
476490250c chore(DockView): bump version 9.1.18 (#6453) 2025-07-21 13:16:38 +08:00
Argo Zhang
1008101234 doc(LoginTemplate): use ValidateForm in login form (#6451)
* refactor: 重构登录 UI 支持键盘

* doc: 更新模板内使用表单
2025-07-20 15:40:49 +08:00
Argo Zhang
a324fe469f feat(SocketDataConverterCollections): add global converter configuration function (#6449)
* feat: 增加 ISocketDataConverter 接口

* feat: 增加 SocketDataConverterCollections 配置类

* test: 增加单元测试

* test: 更新单元测试

* test: 增加单元测试

* doc: 更新文档

* feat: 增加 SocketDataConverterCollections 配置项自动获取属性标签逻辑
2025-07-20 11:17:17 +08:00
Argo Zhang
4bc092d681 feat(SocketDataConveter): remove abstract keyword (#6447)
* refactor: 更改 SocketDataConverter 虚类

* doc: 更新文档

* doc: 更新相关文档说明

* test: 提高代码覆盖率
2025-07-19 11:45:31 +08:00
Argo Zhang
f1ad7618dd doc(Html2Pdf): add QA documentation (#6445) 2025-07-19 11:33:30 +08:00
Argo Zhang
a8b3a46017 refactor(IntersectionObserver): add margin bottom stype (#6442)
* doc: 更新文档

* refactor: 增加样式修复手机或者整页面时不触发滚动问题
2025-07-19 01:54:11 +00:00
Argo Zhang
c8bc51a28a refactor(LoadMore): use UseElementViewport false value (#6440)
* refactor: 更新默认设置

* refactor: 增加 UseElementViewport 参数设置

* refactor: 更改默认值为 false

* doc: 更新注释

* refactor: 移除冗余参数

* doc: 格式化文档

* refactor: 更改默认值为 true

* refactor: 设置 UseElementViewport 值 false
2025-07-19 09:20:53 +08:00
nhren
5e3dab8d5f feat(LoadMore): add LoadMore component (#6436)
* 增加触底加载LoadMore

* refactor: 更新示例文档

* refactor: 更新使用元素视口逻辑

* chore: 撤销更改

* chore: 撤销更改

* chore: 移动组件目录

* doc: 增加多语言支持

* refactor: 调整结构精简样式

* refactor: 增加逻辑检查

* doc: 增加 LoadMore 示例

* refactor: 更改参数名称提高可读性

* doc: 更新示例文档

* feat: 增加阈值参数

* test: 补充 LoadMore 单元测试

* doc: 更新文档

* chore: bump version 9.8.2-beta02

Co-Authored-By: nhren <wj8511@qq.com>

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-07-18 15:58:47 +08:00
Argo Zhang
4dad565a02 feat(HtmlToPdf): add support to ARM browsers (#6438)
* feat: 增加 IWebProxy 接口可以设置网络代理

* wip: 增加 IWebProxy 接口

* chore: 更新 HTML PDF 依赖到 9.0.3
2025-07-18 01:52:20 +00:00
Argo Zhang
235f38a0e3 doc(LoginTemplate): add animation for temple5 (#6434)
* doc: 增加动画特效

* doc: 增加动画样式

* refactor: 样式格式化
2025-07-17 10:40:14 +08:00
Diego2098
2c0b1ff652 doc(readme): correct demo address (#6430)
Co-Authored-By: Diego2098 <82756760+kimdiego2098@users.noreply.github.com>
---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-07-17 08:38:00 +08:00
Argo Zhang
9328c8a7e2 fix(DateTimePicker): can't clear value when set MinValue (#6428)
* fix: 修复设置 MinValue 值导清空按钮不工作问题

* test: 更新单元测试

* chore: bump version 9.8.2-beta01
2025-07-16 16:29:49 +08:00
Argo Zhang
3570038dbb doc(readme): add TG ecosystem Partners (#6427) 2025-07-16 15:42:33 +08:00
Argo Zhang
ab6431b2ee doc(ISocketDataPropertyConverter): add ISocketDataPropertyConverter documentation (#6425)
* refactor: 增加数据保护

* doc: 增加通讯数据转实体类示例文档

* doc: 增加实体类文档
2025-07-16 14:27:38 +08:00
Argo Zhang
fdbe93594d feat(ISocketDataPropertyConverter): add ISocketDataPropertyConverter interface (#6422)
* feat(ISocketDataConverter): add ISocketDataConverter interface (#6420)

* feat: 增加数据转换器设计

* refactor: 数据处理器增加数据转化器适配

* test: 增加单元测试

* refactor: 更新判断转换成功逻辑

* test: 更新单元测试

* feat: 增加 SocketDataConverter 标签

* feat: 增加 Parse 转化器

* test: 增加单元测试

* feat: 增加无符号数据类型转换

* test: 增加单元测试

* refactor: 精简代码

* test: 更新单元测试

* feat: 增加防止死锁逻辑

* test: 增加单元测试

* refactor: 重构代码

* feat: 增加转换器

* feat: 增加 GetConverterByType 扩展方法

* test: 更新单元测试

* test: 增加单元测试
2025-07-16 11:19:29 +08:00
Argo Zhang
4fffebd10b feat(AvatarUpload): preview function may be required (#6418)
* chore: 更新 Logging 到最新版本

* doc: 更新单词拼写错误

* refactor: 增加预览功能

* feat: 增加预览实例方法

* test: 增加单元测试

* feat: bump version 9.8.1
2025-07-15 09:57:51 +08:00
Argo Zhang
c47c61beca refactor(INetworkMonitor): update return type nullable NetworkMonitorState (#6417)
* refactor: 更改返回值为可为空对象

* test: 更新单元测试
2025-07-14 04:20:36 +00:00
Argo Zhang
a1b8cbf08e feat(CherryMarkdown): add Language parameter (#6413)
* feat(CherryMarkdown): add Language parameter

* chore: bump version 9.0.3
2025-07-14 11:04:14 +08:00
Argo Zhang
9465cae520 feat(DockView): add shadow for float panel (#6415) 2025-07-14 10:44:47 +08:00
Argo Zhang
56f936e2a0 test(IThrottleDispatcherFactory): improve code coverage (#6411)
* test: 更新单元测试

* test: 更新单元测试
2025-07-13 20:08:38 +08:00
Argo Zhang
cd6c8fd1f5 refactor(INetworkMonitorService): add reuse state function (#6409)
* doc: 移除 SDK 文本

* doc: 增加网络状态菜单

* doc: 增加网络状态源码映射

* doc: 增加网络状态示例

* doc: 增加指示器示例文档

* feat: 增加 INetworkMonitorService 服务

* refactor: 实现 INetworkMonitorService 逻辑

* doc: 更新示例

* refactor: 支持离线状态

* doc: 更新文档

* refactor: 更新细节

* test: 更新单元测试

* doc: 更新文档

* feat: 增加状态复用逻辑

* refactor: 增加超时设置
2025-07-13 17:54:48 +08:00
Argo Zhang
8daec76686 feat(INetworkMonitorService): add INetworkMonitorService service (#6407)
* doc: 移除 SDK 文本

* doc: 增加网络状态菜单

* doc: 增加网络状态源码映射

* doc: 增加网络状态示例

* doc: 增加指示器示例文档

* feat: 增加 INetworkMonitorService 服务

* refactor: 实现 INetworkMonitorService 逻辑

* doc: 更新示例

* refactor: 支持离线状态

* doc: 更新文档

* refactor: 更新细节

* test: 更新单元测试
2025-07-13 17:38:55 +08:00
Argo Zhang
61ef8f7409 feat(NetworkMonitor): add NetworkMonitor component (#6405)
* refactor: 增加 NetworkMonitor 组件

* doc: 增加使用示例

* feat: 增加 Indicator 参数

* style: 增加样式

* feat: 增加网络状态指示器组件

* feat: 增加离线状态指示

* refactor: 撤销更改

* doc: 更新示例

* feat: 增加恢复 Online 状态后重置数据方法

* refactor: 减少一次网络请求

* style: 更新样式

* refactor: 调整参数顺序

* refactor: 复用代码

* doc: 增加资源文件

* test: 增加单元测试

* test: 更新单元测试

* doc: 更新资源文件

* test: 增加单元测试

* doc: 更新示例

* refactor: 重构代码
2025-07-13 09:34:29 +08:00
Argo Zhang
7441314758 doc(WebClientService): add IpLocator function documentation (#6403)
* doc: 增加内置定位器描述说明

* doc: 更新客户端连接信息服务文档
2025-07-12 11:17:17 +08:00
Argo Zhang
146778f0f0 doc(IIpLocatorProvider): update use locator documentation (#6401)
* refactor: 重构代码提高可读性

* doc: 更新定位器文档
2025-07-12 10:58:53 +08:00
Argo Zhang
2f59a8db16 feat(Table): disable editing in virtual scroll mode (#6399)
* refactor: 重构逻辑保证虚拟滚动模式下禁止编辑

* feat: 虚拟滚动模式下禁止编辑

* chore: bump version 9.8.1-beta06

Co-Authored-By: shakugans <81663852+shakugans@users.noreply.github.com>

---------

Co-authored-by: shakugans <81663852+shakugans@users.noreply.github.com>
2025-07-11 20:23:33 +08:00
Argo Zhang
c70eca956f fix(Table): UI not refreshed after save when set ScrollMode to Virtual (#6397)
* refactor: 改用 QueryAsync 方法

* chore: bump version 9.8.1-beta05

Co-Authored-By: shakugans <81663852+shakugans@users.noreply.github.com>

---------

Co-authored-by: shakugans <81663852+shakugans@users.noreply.github.com>
2025-07-11 19:24:42 +08:00
Argo Zhang
5d2ed311fb feat(ITcpSocketClient): add OnConnecting callback (#6392)
* doc: 增加数据处理器文档说明

* doc: 增加自动重连示例

* doc: 增加自动重连菜单

* feat: 增加 Connect 连接回调

* feat: 拆分自动重连逻辑

* feat: 远端关闭后销毁 TcpClient 实例

* doc: 增加重连示例

* test: 增加 OnConnect 回调单元测试

* refactor: 更新日志开启逻辑

* test: 增加服务器断开单元测试

* doc: 增加自动重连菜单

* doc: 增加文件映射

* doc: 更新自动重连文档

* refactor: 删除样式文件
2025-07-11 08:18:25 +00:00
Argo Zhang
39578edde6 refactor(Select): rename IsUseActiveWhenValueIsNull parameter (#6390)
* feat: 更改参数 IsUseActiveWhenValueIsNull 为 IsUseDefaultItemWhenValueIsNull

* test: 更新单元测试

* chore: bump version 9.8.1-beta04

---------

Co-Authored-By: Francisco Lima <36736375+franciscojml@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-07-11 13:02:16 +08:00
Argo Zhang
c8e95e9fa0 test(ITcpSocketFactory): improve code coverage (#6387)
* test: 增加连接延时

* refactor: 精简单元测试

* wip: 临时注移除单元测试

* refactor: 精简代码移除 ITcpSocketClient 实现类

* test: 更新单元测试

* test: 增加连接取消单元测试

* revert: 撤销单元测试

* test: 更新单元测试
2025-07-11 12:14:37 +08:00
Symin
b0245db885 feat(TreeView): scripts to implement drag and drop function (#6380)
* feat:DraggableTree

* fix:修正格式错误

* 添加TreeView拖拽功能测试

* Enhance TreeView drag-and-drop and add comprehensive tests

Improved TreeView drag-and-drop logic to handle moving nodes without parents and updated node removal accordingly. Added and expanded unit tests to cover moving nodes as last child, first child, and as siblings below, ensuring correct parent/child relationships and node ordering. Also added clarifying comments in TreeViewRow for drag-and-drop preview UI.

* Add draggable TreeView demo with drop restrictions

Introduced a new demo block showcasing draggable TreeView nodes, including logic to restrict certain drag-and-drop operations. Added localized strings for the new demo in both English and Chinese. Updated the backend to provide a sample data set and drop event handler enforcing the restrictions.

* Refactor TreeView drag-and-drop and improve tests

Refactored TreeView and TreeViewRow to require OnItemDrop and remove null checks, simplifying drag-and-drop logic. Updated tests to cover cases where OnItemDrop is not set and to verify drag-and-drop visual feedback.

* refactor: 代码格式化

* refactor: 代码规范化

* refactor: 提高可读性

* refactor: 代码格式化

* refactor: 代码重构调整位置

* refactor: 更改参数名称为 AllowDrag

* revert: 重构 Row 对拖动支持

* refactor: 移除预留占位节点

* revert: 撤销更改

* revert: 撤销更改

* revert: 撤销 TreeDropType 类型

* doc: 更新文档

* test: 撤销单元测试更改

* refactor: 移除命名空间

* revert: 撤销 AllowDrag 参数

* revert: 撤销 AllowDrag 参数

* style: 调整样式

* style: 整理样式

* feat: JS 实现客户端拖动动画样式

* style: 精简样式

* feat: 增加 TriggerDragEnd 逻辑

* feat: JavaScript 实现拖动逻辑

* feat: 实现 OnDragItemEndAsync 逻辑

* doc: 更新示例

* feat: 增加重置客户端 DOM 逻辑

* doc: 更新示例

* doc: 撤销示例注释

* doc: 增加注释

* test: 更新单元测试

* fix: 增加逻辑保护

* doc: 更新文档

* chore: bump version 9.8.1-beta03

---------

Co-Authored-By: Symin <syminomega@outlook.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-07-10 19:30:31 +08:00
Argo Zhang
694361509d doc(Table): remove SortList sample (#6384) 2025-07-10 12:07:26 +08:00
Argo Zhang
b84dd4cda9 doc(Uploader): add UseUploaderStaticFiles extension method (#6382)
* doc: 更新资源文件

* doc(Uploader): add UseUploaderStaticFiles extension method
2025-07-09 14:31:15 +08:00
Symin
b442af2a57 feat(TreeView): support Darg and Drop function (#6121)
* feat:DraggableTree

* fix:修正格式错误

* 添加TreeView拖拽功能测试

* Enhance TreeView drag-and-drop and add comprehensive tests

Improved TreeView drag-and-drop logic to handle moving nodes without parents and updated node removal accordingly. Added and expanded unit tests to cover moving nodes as last child, first child, and as siblings below, ensuring correct parent/child relationships and node ordering. Also added clarifying comments in TreeViewRow for drag-and-drop preview UI.

* Add draggable TreeView demo with drop restrictions

Introduced a new demo block showcasing draggable TreeView nodes, including logic to restrict certain drag-and-drop operations. Added localized strings for the new demo in both English and Chinese. Updated the backend to provide a sample data set and drop event handler enforcing the restrictions.

* Refactor TreeView drag-and-drop and improve tests

Refactored TreeView and TreeViewRow to require OnItemDrop and remove null checks, simplifying drag-and-drop logic. Updated tests to cover cases where OnItemDrop is not set and to verify drag-and-drop visual feedback.

* refactor: 代码格式化

* refactor: 代码规范化

* refactor: 提高可读性

* refactor: 代码格式化

* Revert "Enhance TreeView drag-and-drop and add comprehensive tests"

This reverts commit 3c8f5a153f.

* Revert "Merge branch 'main' into main"

This reverts commit 7ea39da6e7, reversing
changes made to 3c8f5a153f.

* Revert "Add draggable TreeView demo with drop restrictions"

This reverts commit 906f2aa5a6.

# Conflicts:
#	src/BootstrapBlazor.Server/Components/Samples/TreeViews.razor
#	src/BootstrapBlazor.Server/Components/Samples/TreeViews.razor.cs

* Revert "Refactor TreeView drag-and-drop and improve tests"

This reverts commit 81235e91b5.

# Conflicts:
#	src/BootstrapBlazor/Components/TreeView/TreeView.razor.cs

* Revert "添加TreeView拖拽功能测试"

This reverts commit de2be13a62.

* Revert "feat:DraggableTree"

This reverts commit 8ae88250d1.

# Conflicts:
#	src/BootstrapBlazor.Server/Components/Samples/TreeViews.razor.cs
#	src/BootstrapBlazor/Components/TreeView/TreeView.razor
#	src/BootstrapBlazor/Components/TreeView/TreeView.razor.cs

* revert: 撤销更改

* revert: 撤销更改

* revert: 撤销更改

* revert: 撤销更改

---------

Co-Authored-By: Symin <syminomega@outlook.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-07-09 10:02:07 +08:00
Argo Zhang
1ae85795a8 feat(ThrottleDispatcher): refine code improve readability (#6379)
* refactor: 精简代码逻辑

* test: 更新单元测试

* test: 精简命名空间
2025-07-08 16:01:40 +08:00
Argo Zhang
e3d081edd9 feat(ITcpSocketClient): add concurrency connect logic (#6377)
* feat: 增加锁控制并发

* refactor: 合并重连方法提高可读性

* feat: 使用 SemaphoreSlim 信号量控制重连并发逻辑

* test: 增加重连单元测试
2025-07-08 15:51:43 +08:00
Argo Zhang
84764e3a02 feat(ITcpSocketClient): add AutoConnect parameter (#6372)
* feat: 增加自动重连配置

* refactor: 使用取消令牌

* refactor: 更改参数为 IsAutoReconnect

* test: 更新单元测试

* feat: 断线时也需要触发 ReceivedCallBack 回调

* refactor: 提高性能避免线程切换

* feat: 连接方法增加保护

* refactor: 增加 Reconnect 方法

* test: 增加重连单元测试

* feat: 增加发送接收时断线重连机制

* test: 增加发送接收时断开重连单元测试
2025-07-07 19:11:15 +08:00
Argo Zhang
7e2f1f1567 feat(SocketClientOptions): add EnableLog parameter (#6371)
* feat(SocketClientOptions): add EnableLog parameter

* test: 增加单元测试
2025-07-07 14:25:11 +08:00
Argo Zhang
786b2c15aa fix(MultiselectGeneric): two-way binding not working (#6370)
* refactor: 移除 EditSubmitKeyString 字符串

* refactor: 格式化代码

* fix: 增加选中值与 Value 同步机制

* chore: bump version 9.8.1-beta02
2025-07-07 12:37:31 +08:00
Argo Zhang
20a64443f0 chore(DockView): bump version 9.1.16 (#6369) 2025-07-06 14:30:14 +08:00
Argo Zhang
fb36b0468a doc(DataPackageAdapter): update ReceiveAsync comment (#6361)
* refactor: 移除 ReceiveAsync 方法

* Revert "refactor: 移除 ReceiveAsync 方法"

This reverts commit 6cba73eca3.

* refactor: 调整目录结构

* test: 增加单元测试注释

* revert: 撤销接收方法

* refactor: 代码重构

* test: 更新单元测试

* doc: 增加手动接收数据示例

* doc: 更改关键字

* doc: 增加一发一收的模拟服务

* doc: 更新手动接收示例

* doc: 更新说明文档

* doc: 更新示例

* doc: 更新图标

* test: 更新单元测试

* test: 增加连接超时单元测试

* doc: 更新日志格式
2025-07-06 11:16:50 +08:00
Argo Zhang
c3caf7d7c7 fix(Progress): culture causes decimal points to be changed to commas (#6362)
* refactor: 格式化增加文化信息

* doc: 更新示例

* chore: bump version 9.8.1-beta01
2025-07-05 10:44:14 +08:00
Argo Zhang
48f8936027 feat(DirectoryInfoExtensions): add recursive parameter (#6358)
* refactor: 增加文件夹拷贝扩展方法

* test: 更新单元测试

* test: 更新单元测试
2025-07-04 14:09:59 +08:00
Argo Zhang
6aa2bd6e7b test(ITcpSocketClient): improve code coverage (#6356)
* test: 重构代码提高覆盖率

* refactor: 更改接口方法名称

* refactor: 增加 SetDataPackageAdapter 扩展方法

* refactor: 精简代码

* feat: 增加 SetDataPackageAdapter 方法

* test: 更新单元测试

* test: 增加单元测试

* doc: 增加移除的路由
2025-07-04 08:27:24 +08:00
yacper
1afd090438 fix(Search): DisplayText needs to be shown on first load (#6351)
* fix bug #6350

* refactor: 重构 OnSearch 参数更改为可为空

---------
Co-Authored-By: yacper <668255+yacper@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-07-03 15:15:46 +08:00
Argo Zhang
e755e92239 test(DataPackageAdapter): add unit test (#6353)
* test: 更新发送失败单元测试

* test: 更新单元测试

* test: 修复 FixLengthDataPackageHandler 单元测试

* test: 更新粘包通讯单元测试

* test: 更新终止符数据处理器单元测试

* refactor: 移除 SendAsync 方法

* test: 精简单元测试

* test: 补充单元测试提高覆盖率

* refactor: 更改代码提高代码覆盖率
2025-07-03 14:35:16 +08:00
Argo Zhang
ad6f782c58 doc(Coms): remove Coms page (#6349)
* doc: 移除组件总览页面

* doc: 移除相关组件图片

* refactor: 快速上手增加组件总数信息

* doc: 移除组件菜单

* doc: 全屏按钮 Tooltip 增加本地化

* doc: 更改布局模拟器返回链接
2025-07-03 12:29:26 +08:00
Argo Zhang
1dd1e19644 doc(IDataPackageAdapter): add DataPackageAdapter sample code (#6345)
* refactor: 移除数据处理

* refactor: 增加数据适配器接口

* refactor: 重构 ReceiveAsync 方法

* refactor: 更改为实类

* feat: 增加模拟分包逻辑

* doc: 实现接收逻辑

* doc: 更新示例

* doc: 更新示例代码
2025-07-02 19:40:43 +08:00
Mydashixiong
37db88ab9f feat(DateTimePicker): add Color parameter (#6342)
* feat(DateTimePicker):DateTimePicker增加Color样式属性

DateTimePicker增加Color样式属性,默认Color.None

* test: 增加单元测试

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-07-02 15:11:37 +08:00
Argo Zhang
889410f642 feat(FullScreenButton): adjust the gap (#6341)
* refactor: 调整 Tab 工具栏全屏按钮样式

* style: 增加等宽样式
2025-07-02 00:58:46 +00:00
Argo Zhang
a408e98676 fix(Dialog): not trigger OnCloseAsync multiple dialog (#6339)
* fix: 修复未触发 OnCloseAsync 回调问题

* chore: bump version 9.8.0
2025-07-01 05:20:58 +00:00
Argo Zhang
f8d6acccb7 fix(LookupFilter): use first item as default value when value is null (#6338)
* refactor: 调整参数位置

* Revert "fix(EnumFilter): incorrect selected value (#6334)"

This reverts commit daf9af9b38.

* Revert "fix(BoolFilter): set default value is empty"

This reverts commit 26e33c3876.

* Reapply "fix(BoolFilter): set default value is empty"

This reverts commit 4509634ed2.

* Reapply "fix(EnumFilter): incorrect selected value (#6334)"

This reverts commit 3f3e12513f.

* refactor: 增加中文注释

* refactor: 支持默认值

* test: 增加单元测试
2025-07-01 13:17:37 +08:00
Argo Zhang
1bcf624cc9 fix(BoolFilter): set default value is empty (#6336) 2025-07-01 02:15:34 +00:00
Argo Zhang
daf9af9b38 fix(EnumFilter): incorrect selected value (#6334) 2025-07-01 09:58:56 +08:00
Argo Zhang
8775218a3b doc(ITcpSocketClient): add DataHandler sample code (#6331)
* doc: 增加接收数据示例文档说明

* refactor: 重构代码

* doc: 更新配置类说明

* doc: 增加数据适配器文档

* refactor: 更新接收数据示例代码

* doc: 增加数据适配器菜单

* doc: 更新示例

* doc: 增加后台服务
2025-06-30 20:29:12 +08:00
jin momiji
ef8270975d feat(Step): add CurrentStepIndex property (#6316)
* feat(Step): add 'CurrentStepIndex' to obtain the real-time value of _currentStepIndex

* test: 增加单元测试

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-06-29 09:07:40 +08:00
Argo Zhang
618b956c9c feat(ISocketClientProvider): add ISocketClientProvider service (#6329)
* refactor: 重构实现逻辑增加 ISocketClientProvider 服务

* wip: 移除注释

* test: 增加单元测试

* refactor: 精简代码

* test: 测试连接超时
2025-06-28 23:32:54 +08:00
Argo Zhang
f43449cffb feat(TcpSocketClientBase): update generic class (#6327)
* feat: 增加 SocketClientOptions 配置类

* feat: TcpSocketClientBase 更改为泛型类提高复用能力

* test: 更新单元测试

* refactor: 增加 SocketClient 基类

* test: 增加 空 Logger 单元测试

* test: 增加 DefaultSocketClient 单元测试

* test: 增加 DefaultSocketClient 单元测试

* test: 移除命名空间

* test: 更新单元测试
2025-06-28 18:25:43 +08:00
Argo Zhang
5d1457b33f doc(ITcpSocketClient): add Receive documentation (#6322)
* refactor: 精简代码提高可读性

* refactor: 更新连接状态返回值

* feat: 更新读取数据长度

* feat: 更新远端节点数据

* refactor: 更新自动接收逻辑增加已连接逻辑判断

* chore: bump version 9.8.0-beta07

* doc: 更新文档

* feat: 增加模拟 Socket 服务端服务

* doc: 更新文档

* doc: 增加 Socket 实战

* refactor: 代码格式化

* refactor: 更改 Func 类型支持异步

* refactor: 更改为私有属性

* doc: 更新示例

* test: 更新单元测试

* refactor: 重构 Socket Server 模拟器

* test: 更新单元测试

* doc: 完善示例

* refactor: 微调日志逻辑

* refactor: 增加异常捕获

* doc: 更新示例

* doc: 增加接收数据示例文档
2025-06-28 11:02:38 +08:00
Argo Zhang
2abfb68a85 feat(Console): update OnClear support async (#6325)
* refactor: 代码格式化

* refactor: 更改 Func 类型支持异步

* refactor: 更改为私有属性

* doc: 更新示例

* test: 更新单元测试
2025-06-28 08:51:23 +08:00
Argo Zhang
a8c8dc7339 feat(TcpSocketClientBase): add TcpSocketClientBase class (#6320)
* refactor: 更改为异步销毁接口

* feat: 增加基类

* refactor: 更改 Close 为 CloseAsync

* test: 更新单元测试

* refactor: 代码重构精简逻辑

* refactor: 精简代码逻辑
2025-06-27 09:11:18 +08:00
Argo Zhang
45c99798c7 feat(ITcpSocketClient): add Timeout parameter (#6318)
* feat: 增加 ReceiveAsync 方法

* doc: 增加默认值说明

* feat: 增加是否自动接收参数

* feat: 增加超时设置

* feat: 根据接口增加新设置

* feat: 增加接收数据实现

* feat: 缓存更改为 64K

* feat: 增加连接超时功能

* test: 增加连接超时单元测试

* feat: 实现发送超时逻辑

* feat: 增加接收数据逻辑

* test: 增加单元测试

* test: 增加重连功能

* test: 更新单元测试

* feat: LocalEndPoint 更改未可为空
2025-06-27 08:33:35 +08:00
Argo Zhang
342ff517fc pef(Upload): add bufferSize parameter for improve save file performance (#6314)
* refactor: 精简代码

* feat: 增加 BufferSize 参数

* doc: 更新示例文档

* chore: bump version 9.8.0-beta06
2025-06-26 10:48:49 +08:00
Argo Zhang
5779d48485 doc(OfficeViewer): update nuget download link (#6312) 2025-06-26 10:35:47 +08:00
Argo Zhang
db3423995b refactor(Tab): remove tabs-body-content-wrap html node (#6310)
* refactor: 移除 tabs-body-content-wrap 恢复老版本结构

* revert: 恢复单元测试

* chore: bump version 9.8.0-beta05

Co-Authored-By: Kim Kokholm <kokholm@gmail.com>

---------

Co-authored-by: Kim Kokholm <kokholm@gmail.com>
2025-06-26 08:49:37 +08:00
Argo Zhang
560bb21327 feat(Table): add AutoSearchOnInput parameter (#6306)
* feat: add AutoSearchOnInput parameter

* feat: 更新代码

* test: 更新单元测试

* chore: bump version 9.8.0-beta04

Co-Authored-By: Jaders77 <jaders77@hotmail.fr>

---------

Co-authored-by: Jaders77 <jaders77@hotmail.fr>
2025-06-25 14:48:47 +08:00
Argo Zhang
29d02df022 feat(Select): add IsUseActiveWhenValueIsNull parameter (#6304)
* feat: 增加 IsUseActiveWhenValueIsNull 参数

* test: 增加单元测试
2025-06-25 14:08:31 +08:00
Argo Zhang
10fc77cce5 feat(Table): add NotSupportedColumnFilterMessage parameter (#6302)
* feat(Table): 增加  NotSupportedMessage 参数

* doc: 增加文档地址提示

* test: 更新单元测试

* refactor: 更改参数名称

* doc: 增加 html 支持

* refactor: 增加标签
2025-06-25 10:48:01 +08:00
Argo Zhang
2dc0cfffef fix(Table): unsupported filter data type cause filter icon misalignment (#6298)
* wip: 临时提交

* chore: bump version 9.8.0-beta03

Co-Authored-By: shakugans <81663852+shakugans@users.noreply.github.com>

* refactor: 重构 NotSupportFilter 组件

* refactor: 重构 TableColumnFilter 组件

* refactor: 增加搜索重置按钮样式

* test: 更新单元测试

* test: 更新单元测试

* refactor: 使用基类本地化服务

* test: 补充单元测试

* test: 更新单元测试

---------

Co-authored-by: shakugans <81663852+shakugans@users.noreply.github.com>
2025-06-25 10:11:46 +08:00
Argo Zhang
79b91d90a9 feat(Table): add default css for Reset/Search button (#6300)
* refactor: 增加搜索重置按钮样式

* test: 更新单元测试
2025-06-25 09:29:10 +08:00
Argo Zhang
de03bba9a0 feat(Table): update TableResetSearchButtonIcon icon (#6297)
* feat: 更改重置搜索按钮图标

* feat: 更改重置搜索条件图标
2025-06-25 08:40:52 +08:00
Argo Zhang
72186d342d fix(Tab): should not rerender tabitem after close (#6294)
* refactor: 更改 Key 为 Guid

* refactor: 增加 wrap 样式

* refactor: 使用 Find 方法

* fix: 修复关闭标签页导致后续标签页重绘问题

* chore: bump version 9.8.0-beta02

* chore: bump version 9.8.0-beta03

Co-Authored-By: Ockyd007 <71997133+ockyd007@users.noreply.github.com>

* Revert "chore: bump version 9.8.0-beta03"

This reverts commit 25b6158e8d.

---------

Co-authored-by: Ockyd007 <71997133+ockyd007@users.noreply.github.com>
2025-06-24 18:13:49 +08:00
Argo Zhang
efa9089f21 feat(Upload): support drag/drop upload function (#6290)
* doc: 代码格式化

* doc: 代码格式化

* refactor: 代码格式化

* feat: 增加拖动支持

* feat: 增加拖动支持

* refactor: 头像上传框精简代码

* refactor: 精简 dom 结构

* refactor: 精简 CardUpload 结构

* chore: bump version 9.8.0-beta01

Co-Authored-By: movieliang <16262928+movieliang@users.noreply.github.com>

---------

Co-authored-by: movieliang <16262928+movieliang@users.noreply.github.com>
2025-06-24 05:02:47 +00:00
Argo Zhang
3a3b8cc5ea feat(OfficeViewer): add OfficeViewer component (#6287)
* wip: 临时提交

* doc: 增加示例文件

* doc: 增加菜单

* doc: 增加 Office 文档预览组件资源文件

* doc: 增加源码映射

* doc: 更新示例文件减小文件体积

* doc: 更正预览文档链接

* doc: 依赖更改为包

* chore: bump version 9.7.4

* chore: 更改组件名称
2025-06-24 11:18:58 +08:00
Mydashixiong
547980d7a9 refactor(ImageViewer): image element is not closed (#6285)
* ImagePreviewer 修复html标签 img

修复img没有结束符

* chore: 代码格式化

Co-Authored-By: Mydashixiong <136679228+Mydashixiong@users.noreply.github.com>

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-06-24 11:17:49 +08:00
Argo Zhang
ed4a2a4043 feat(OtpInput ): support responsive layout (#6284)
* refactor: 移动变量节点位置方便覆盖

* refactor: 更改样式名称纠正单词拼写错误

* doc: 更新样式
2025-06-24 09:11:45 +08:00
Argo Zhang
d4d76e49ad feat(ITcpSocketClient): add TouchSocket extensions (#6268)
* chore: 更新解决方案增加扩展包

* feat: 增加 ReceivedCallBack 回调方法

* test: 增加单元测试

* doc: 更新示例文档

* test: 增加 TouchSocket 单元测试

实现功能后单元测试应该可以通过的

* doc: 更新粘包分包文档

* feat: 增加 SendAsync 扩展方法

* test: 增加单元测试

* feat(tcp): 替换同步关闭方法为异步方法

将 `Close` 方法替换为异步的 `CloseAsync` 方法,以支持异步关闭操作并释放资源。`CloseAsync` 方法接受一个消息和一个可选的取消令牌作为参数,并返回一个 `ValueTask<bool>`,指示关闭操作的结果。原有的 `Close` 方法被移除,相关的资源释放逻辑被整合到新的异步方法中。

* refactor(tests): 使用异步方法关闭连接

在 TcpSocketFactoryTest.cs 和 TouchSocketTest.cs 中,将连接关闭逻辑从 client.Close() 更改为 await client.CloseAsync(string.Empty),以支持异步关闭连接并提高性能

* doc: 更新数据处理器相关文档

* refactor: 增加 ConnectAsync 扩展方法

* refactor: 更改关闭方法为同步方法

* test: 更新单元测试

* doc: 增加数据适配器文档

* doc: 增加新服务标记

* refactor: 更新 ITcpSocketFactory 接口定义

* feat: 增加 GetOrCreate 扩展方法

* test: 更新单元测试

* test: 增加单元测试

* refactor: 更改 GetOrCreate 签名

* test: 更新单元测试

* refactor: 根据最新设计重构 TouchSocket 实现

* refactor: 整理项目文件

* wip: 临时移除稍后再开分支合并到另外分支上

* chore: bump version 9.7.4-beta08

Co-Authored-By: 若汝棋茗 <76547834+rrqm@users.noreply.github.com>

---------
Co-authored-by: 若汝棋茗 <76547834+rrqm@users.noreply.github.com>
2025-06-23 15:00:57 +08:00
Argo Zhang
0df17f52cf feat(ITcpSocketFactory): redesign GetOrCreate method (#6282)
* refactor: 更改 GetOrCreate 签名

* test: 更新单元测试
2025-06-23 14:07:03 +08:00
Argo Zhang
7826f2281d chore(TableExport): bump TableExport version 9.2.6 (#6280) 2025-06-23 13:36:50 +08:00
Argo Zhang
556fcf3abe refactor(ITcpSocketFactory): add GetOrCreate extension method (#6277)
* refactor: 更新 ITcpSocketFactory 接口定义

* feat: 增加 GetOrCreate 扩展方法

* test: 更新单元测试

# Conflicts:
#	test/UnitTest/Services/TcpSocketFactoryTest.cs

* test: 增加单元测试
2025-06-22 19:39:04 +08:00
Argo Zhang
0caed5aa3a doc(ITcpSocketFactory): add DataAdapter documentation (#6275)
* doc: 增加数据适配器文档

* doc: 增加新服务标记
2025-06-22 19:34:26 +08:00
Argo Zhang
4fdc480909 feat(ITcpSocketClient): add ConnectAsync extension method (#6273)
* doc: 更新数据处理器相关文档

* refactor: 增加 ConnectAsync 扩展方法

* feat: 增加 ConvertToIPAddress 扩展方法

* feat: 更改 DefaultTcpSocketClient 构造函数

* test: 纠正冗余代码

* test: 更新单元测试
2025-06-21 20:38:40 +08:00
Argo Zhang
ea1c142496 feat(ITcpSocketClient): add SendAsync extensions method (#6269)
* doc: 更新粘包分包文档

* feat: 增加 SendAsync 扩展方法

* test: 增加单元测试
2025-06-20 12:55:13 +08:00
Argo Zhang
4ce223e19b feat(ITcpSocketClient): add ReceivedCallback property (#6266)
* feat: 增加 ReceivedCallBack 回调方法

* test: 增加单元测试

* doc: 更新示例文档
2025-06-20 12:24:49 +08:00
Argo Zhang
31a2a958b6 feat(ITcpSocketClient): use ReadOnlyMemory improve performance (#6264)
* refactor: 使用 ReadOnlyMemory 只读类提供性能

* test: 更新单元测试
2025-06-20 11:15:15 +08:00
Argo Zhang
c2343f5e38 feat(FixLengthDataPackageHandler): support multiple sticky package (#6262)
* feat: 支持多次粘包处理功能

* test: 增加单元测试

* refactor: 代码重构提高可读性

* refactor: 精简代码提高可读性
2025-06-20 10:20:35 +08:00
Argo Zhang
62ed6e6ebc feat(DelimiterDataPackageHandler): add DelimiterDataPackageHandler class (#6260)
* feat: 增加分隔符数据处理器

* refactor: 更新分隔符数据处理器

* test: 更新单元测试

* test: 增加单元测试

* refactor: 支持多分隔符

* test: 更新单元测试
2025-06-19 19:12:44 +08:00
Argo Zhang
9bd5946050 perf(TreeView): use Remove method improve performance (#6258)
* perf: 优化性能

* chore: bump version 9.7.4-bta09

Co-Authored-By: Diego2098 <82756760+kimdiego2098@users.noreply.github.com>

---------

Co-authored-by: Diego2098 <82756760+kimdiego2098@users.noreply.github.com>
2025-06-19 16:26:53 +08:00
Argo Zhang
e3971e7af3 doc(ITcpSocketFactory): add ITcpSocketFactory documentation (#6256)
* doc: 增加 Socket 示例

* chore: 增加 Socket 服务菜单

* doc: 增加源码映射文件
2025-06-19 15:35:51 +08:00
Argo Zhang
07d63755b1 feat(ITcpSocketFactory): add ITcpSocketFactory service (#6254)
* feat: 增加扩展方法判断当前环境是否为 IsWasm

* feat: 增加 ITcpSocketFactory 服务

* refactor: 更新 ConnectAsync 接口

* test: 更新单元测试

* refactor: 增加 ITcpSocketClient 服务

* test: 增加单元测试

* refactor: 重构日志实例逻辑

* refactor: 精简代码

* refactor: 增加取消记录日志逻辑

* refactor: 增加 Close 方法

* test: 增加实例单元测试

* feat: 增加 IDataPackageAdapter 接口

* refactor: 增加设置本地节点逻辑

* refactor: 增加数据处理器功能

* refactor: 增加 virtual 关键字

* test: 增加单元测试

* test: 更新单元测试

* feat: 增加数据处理类

* refactor: 增加连接后自动接收逻辑

* test: 增加单元测试

* refactor: 增加接收任务取消逻辑

* refactor: 精简代码逻辑

* test: 更新单元测试

* refactor: 实现拆包粘包处理逻辑

* refactor: 优化代码 Logger 不为空

* test: 更新单元测试

* test: 增加 SendAsync 单元测试

* test: 增加 Factory 单元测试

* test: 精简单元测试

* test: 增加 IsWasm 单元测试

* refactor: 接收方法内异常改为日志

* refactor: 防止缓存区被释放

* refactor: 精简代码提高可读性

* Revert "refactor: 接收方法内异常改为日志"

This reverts commit 44e4bd3768.

* refactor: 更正方法名称为 HandleStickyPackage

* refactor: 更改申请缓存区代码

* refactor: 重构拆包方法名称
2025-06-19 14:43:34 +08:00
jin momiji
48a7777fd9 feat(Table): add ShowColorWhenToolbarButtonsCollapsed parameter (#6251)
* feat(Table): add 'ShowColorWhenToolbarButtonsCollapsed' attribute in 'table' component, add some css style

* chore: bump version 9.7.4-beta08

Co-Authored-By: jin momiji <105467851+momijijin@users.noreply.github.com>

* test: 增加单元测试

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-06-18 18:37:48 +08:00
yacper
1469626de4 fix(Table): update table column order in OnColumnCreating not work (#6242)
* bugfix: Table控件中,如果OnColumnCreating回调中修改了Column项的Order,并不会起作用

* revert: 撤销更改

* refactor: 代码格式化

* refactor: 私有变量内部化提高可读性

* refactor: 更改为结构体

* refactor: 使用中间变量传递列集合

* fix: 修复排序逻辑混乱问题

* chore: bump version 9.7.4-beta07

Co-Authored-By: yacper <668255+yacper@users.noreply.github.com>

---------

Co-authored-by: Argo Zhang <argo@live.ca>
Co-authored-by: yacper <668255+yacper@users.noreply.github.com>
2025-06-18 09:39:07 +08:00
jin momiji
e6c8012704 feat(IpAddress): support ArrowLeft/Right key (#6244)
* feat(IpAddress): add keydownEvent.code ['Space','ArrowLeft','ArrowRight','Backspace'] expansion operations

* fix(IpAddress): Fix the issue where pressing 'Backspace' would delete an extra character when switching to the previous cell.

* fix(IpAddress): Re-write the validation for cells that have content consisting solely of blank spaces.

* refactor: 撤销更改

* refactor: 清除空格

* refactor: 删除中文注释

* refactor: 更新选中部分数字逻辑

* feat: 增加获得焦点后全选逻辑

---------
Co-Authored-By: jin momiji <105467851+momijijin@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-06-17 16:19:44 +08:00
Argo Zhang
863a2089a3 doc(Select): update ShowSwal sample code (#6248)
* refactor: 更新示例

* doc: 更新文档
2025-06-17 15:23:14 +08:00
Argo Zhang
b7e67a8690 feat(ErrorLogger): add EnableILogger parameter (#6246)
* feat: 增加 EnableErrorLoggerILogger 配置项

* feat: 增加 EnableILogger 参数

* feat: 增加 EnableILogger 参数

* feat: 增加 EnableErrorLoggerILogger 参数

* test: 增加单元测试
2025-06-17 14:22:06 +08:00
Argo Zhang
d97672f33d feat(DockView): add overflow style for floating window (#6241) 2025-06-16 18:07:06 +08:00
Diego2098
bed5200193 perf(Table): use ReferenceEqualityComparer instance (#6238)
* 缓存字典设置引用比较器

* 添加比较器

* chore: bump version 9.7.4-beta06

Co-Authored-By: Diego2098 <82756760+kimdiego2098@users.noreply.github.com>

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-06-16 17:22:46 +08:00
Argo Zhang
21048883aa feat(cherry-markdown): add IsSupportMath parameter (#6237)
* doc: 增加 IsSupportMath 参数

* chore: bump version 9.0.1

Co-Authored-By: j4587698 <24642446+j4587698@users.noreply.github.com>

---------

Co-authored-by: j4587698 <24642446+j4587698@users.noreply.github.com>
2025-06-16 13:20:35 +08:00
Argo Zhang
9b51e50374 fix(Select): trigger OnSelectedItemsChanged after clear (#6234)
* feat: trigger OnSelectedItemChanged callback

* feat: 增加 OnSelectedItemsChanged 回调逻辑

* refactor: 触发 OnSelectedItemChanged 回调

* refactor: 增加 OnSelectedItemChanged 回调方法

* test: 更新单元测试

* chore: bump version 9.7.4-beta05
2025-06-15 09:56:57 +08:00
Argo Zhang
6850f1a89b feat(Light): rename class name light to bb-light (#6232)
* refactor: 更改样式类名为 bb-light 防止冲突

* chore: bump version 9.7.4-beta04

* test: 更新单元测试
2025-06-14 18:16:35 +08:00
Argo Zhang
c926f58725 feat(Vditor): add Vditor component (#6228)
* doc: 更新示例说明文档

* doc: 增加示例文档

* test: 增加单元测试

* doc: 增加菜单

* doc: 增加源码映射

* doc: 增加方法示例

* refactor: 更新 Pre 样式

* doc: 更新 Vditor 组件示例

* chore: 增加 Vditor 依赖
2025-06-14 17:26:46 +08:00
Argo Zhang
a3f422712e doc(Pre): update Pre style (#6230) 2025-06-14 17:25:45 +08:00
Argo Zhang
98384ca8de chore(meta): update keywork for google seo (#6226) 2025-06-13 14:13:17 +08:00
Argo Zhang
6f84d88f76 feat(FlipClock): add ShowYear parameter (#6224)
* feat: 增加 ShowYear 参数

* doc: 更新示例

* test: 更新单元测试

* refactor: 重构脚本

* doc: 更新示例

* refactor: 精简代码减少依赖项
2025-06-13 13:34:38 +08:00
Argo Zhang
48289a4f4e feat(FlipClock): add ShowMonth parameter (#6222)
* feat: 增加 ShowMonth 参数

* doc: 增加示例

* test: 增加单元测试

* refactor: 更新变量名称
2025-06-13 11:48:01 +08:00
Mydashixiong
1c0abc46ab feat(FlipClock): add ShowDay parameter (#6218)
* 修改FlipClock

增加ShowDay参数

* refactor: 代码格式化

* doc: 增加 ShowDay 示例

* refactor: 精简代码

* refactor: 增加 Day 逻辑

* feat: 增加容器 overflow 样式防止溢出

* doc: 增加 ShowDay 示例

* doc: 参数文档本地化

* test: 增加单元测试

* chore: bump version 9.7.4-beta03

Co-Authored-By: Mydashixiong <136679228+Mydashixiong@users.noreply.github.com>

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-06-13 11:22:33 +08:00
Ralf Baussenwein
280219afb9 doc(Localization): update german translations (#6217)
* Update german translations

* chore: bump version 9.7.4-beta02

Co-Authored-By: Ralf Baussenwein <14016098+rabauss@users.noreply.github.com>

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-06-13 09:43:46 +08:00
Argo Zhang
c0e88780bd fix(Tab): add OrdinalIgnoreCase parameter compatible locales (#6215)
* refactor: 移除 RouteTabFactory 老代码

* fix: 增加忽略文化信息代码

* chore: bump version 9.7.3-beta01

* refactor: 提升性能
2025-06-12 08:47:51 +08:00
Argo Zhang
f120ef67ad doc(Bootstrap): remove dynamic load bootstrap doc (#6214) 2025-06-12 08:18:18 +08:00
Argo Zhang
e4203dd7a2 fix(OtpInput): should show mask char in readonly/disabled status (#6212)
* refactor: 重构 DOM 使用 input 元素

* chore: 移除 console.log 语句

* refactor: 增加只读禁用逻辑

* style: 精简样式

* refactor: 格式化逻辑

* test: 更新单元测试
2025-06-11 19:19:45 +08:00
Argo Zhang
80ef545dce fix(ErrorLogger): throw exception on wasm mode (#6210)
* fix: 修复 Wasm 下无法使用 Host 问题

* chore: bump version 9.7.3

* refactor: 注入 MockHostEnvironment 实现类

* Revert "fix: 修复 Wasm 下无法使用 Host 问题"

This reverts commit a54d3d4a55.

* feat: 增加调试环境支持

* refactor: 增加排除标签
2025-06-11 17:42:16 +08:00
Argo Zhang
d5cd54c2ce doc(IpLocator): add WebClientOptions usage documentation (#6208) 2025-06-11 14:50:18 +08:00
Argo Zhang
f94e3c0491 revert(Bootstrap): revert dynamic load bootstrap module (#6205)
* chore: 更新自动化脚本

* chore: bump version 9.7.2

* Revert "chore: 更新自动化脚本"

This reverts commit 697b1d28e3.

* chore: 更新脚本

* Revert "feat(Bootstrap): support dynamic load bootstrap javascript (#6201)"

This reverts commit 5cdf89afeb.

* revert: 撤销更改
2025-06-11 13:06:20 +08:00
Argo Zhang
a828f38b7f feat(Print): support cavas html element (#6203)
* refactor: 移除 console.log 语句

* refactor: 兼容 canvas 元素

* chore: bump version 9.7.1
2025-06-11 10:36:09 +08:00
Argo Zhang
5cdf89afeb feat(Bootstrap): support dynamic load bootstrap javascript (#6201)
* chore: 增加模块动态导入

* refactor: 移除脚本显式加载
2025-06-11 09:25:22 +08:00
Argo Zhang
75553b846c feat(Select): redesign OnBeforeSelectedItemChange logic (#6199)
* refactor: 重构 ShowSwal 逻辑

* refactor: 更改 ShowSwal 默认值
2025-06-10 15:34:58 +08:00
Argo Zhang
7ba4e74ac7 feat(BootstrapServiceBase): update exception message (#6197)
* refactor: 更新变量名称

* refactor: 变量规范化消除警告信息

* doc: 更新提示信息
2025-06-10 14:44:19 +08:00
Argo Zhang
6549430f2e doc(BootstrapBlazorRoot): update usage documentation (#6195)
* doc(Download): update download component documentation

* refactor: 增加 RootTemplate 细化 Root 组件使用方法
2025-06-10 13:20:04 +08:00
Argo Zhang
684400448c doc(Upload): update drop upload component documetation (#6193) 2025-06-09 19:03:24 +08:00
Argo Zhang
d3a9ef4188 feat(Bootstrap): bump dependence 5.3.6 (#6191)
* chore: 更新样式

* chore: 更新脚本

* chore: 移除 bundle 脚本

* refactor: 使用模块化脚本

* Revert "refactor: 使用模块化脚本"

This reverts commit 71fc38c611.

* Revert "chore: 移除 bundle 脚本"

This reverts commit b7ebfa53d1.

* chore: 删除文件
2025-06-09 18:55:58 +08:00
Argo Zhang
015b93de24 feat(Stack): rename bb_stack to bb-stack (#6189)
* refactor(Stack): 更新样式名称

* test: 更新单元测试
2025-06-09 14:59:27 +08:00
MadLongTom
f201bff143 fix(Login): update Template5 login template return button style (#6186)
* fix(template5): fix return button css style

* chore: bump version 9.7.1-beta07

---------

Co-Authored-By: MadLongTom <36219016+MadLongTom@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-06-09 13:02:20 +08:00
Argo Zhang
8738cafff4 feat(PdfViewer): add embedded parameter (#6185) 2025-06-08 15:32:21 +08:00
Argo Zhang
0ad43d2884 feat(PdfViewer): use HTTPS protocal (#6183) 2025-06-08 14:51:52 +08:00
Argo Zhang
fdbfbc8cf9 chore(Docker): update ENV lang variable (#6181) 2025-06-07 20:17:42 +08:00
Argo Zhang
a6e1b04dad feat(ImageCropper): add OnCropChangedAsync parameter (#6179)
* chore: bump version 9.0.3

* feat(ImageCropper): add OnCropChangedAsync parameter
2025-06-07 20:02:56 +08:00
Argo Zhang
9a88fa62f3 feat(ImageCropper): add Preview parameter (#6177)
* refactor: bump version 9.0.2

* doc: 增加预览功能

* doc: 增加文档
2025-06-07 12:27:08 +08:00
Argo Zhang
2e6e63ceee feat(ImageCorpper): update AspectRatio type to float (#6175)
* refactor: 增加比率参数示例

* chore: bump version 9.0.1
2025-06-06 16:25:35 +08:00
Argo Zhang
4353628cb7 fix(Select): search icon not vertical center when use BI icon theme (#6173)
* doc: 更改默认值

* refactor: 修复 bi md 图标库搜索按钮不居中问题

* chore: bump version 9.7.1-beta06
2025-06-06 15:57:33 +08:00
Argo Zhang
c507f68b5c feat(PdfViewer): add UseGoogleDocs parameter (#6170)
* chore: bump version 9.0.1

* feat: 增加 UseGoogleDocs 参数
2025-06-06 14:59:37 +08:00
Argo Zhang
16b02fe94a test(Upload): improve code coverage (#6168)
* refactor: 获得文件扩展名方法

* test: 测试单元测试

* Revert "test: 测试单元测试"

This reverts commit 83be2fa166.

* chore: 更新 codecov action 版本

* refactor: 更改可为空检查

* test: 增加 Flags 参数

* chore: 更新 action 版本

* revert: 恢复代码

* test: 更新单元测试
2025-06-06 13:30:46 +08:00
Argo Zhang
d139e8cf9c doc(PdfViewer): add OnLoaded event callback sample code (#6166) 2025-06-06 11:14:38 +08:00
XEE LEE
c3330247b3 doc(Login): add microsoft login template (#6162)
* Add transitional login page and update navigation menu

* refactor: 重构模板名称

* refactor: 精简代码

* doc: 代码格式化

* refactor: 增加移动端适配

* doc: 更新打包内容

---------

Co-Authored-By: Ethan Lee <33386249+h2ls@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-06-06 08:52:17 +08:00
Argo Zhang
30110267d2 feat(PdfViewer): add PdfViewer component (#6164)
* chore: 增加 PdfViewer 包

* doc: 增加 PdfViewer 示例

* chore: 增加源码映射

* doc: 增加菜单
2025-06-06 08:19:49 +08:00
Argo Zhang
406eb19923 feat(IFrame): add attributes support (#6160) 2025-06-05 13:08:27 +08:00
Argo Zhang
16cc7d49a9 feat(Upload): use local preview instead of base64 format (#6157)
* feat: 增加 readFileToBlobAsync 方法

* chore: 方法重命名

* feat: 增加 getPreviewUrl 方法

* refactor: 改用客户端预览方法

* doc: 更新头像上传示例

* refactor: 增加 CanPreviewCallback 回调方法

* refactor: 增加图片预览功能

* refactor: 增加返回值注释

* test: 更新单元测试

* chore: bump version 9.7.1-beta05
2025-06-05 12:46:08 +08:00
Argo Zhang
7e580f94cb feat(Upload): redesign upload components (#6049) 2025-06-05 10:36:09 +08:00
Argo Zhang
e8d8aca4f0 doc(Icon): reorder icon category (#6155) 2025-06-05 09:49:31 +08:00
WilliamLiu1997
c234b76292 feat(SelectTree): add CanExpandWhenDisabled parameter (#6128)
* 获取或设置当SelectTree 节点处于禁用状态时,节点是否可以展开或折叠。默认值为 false。

* test: 增加单元测试

* chore: bump version beta02

Co-Authored-By: WilliamLiu1997 <55923229+williamliu1997@users.noreply.github.com>

* chore: bump version 9.7.1-beta03

---------

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
Co-authored-by: Admin <Admin>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-06-05 01:06:01 +00:00
Argo Zhang
8b477838ee feat(IErrorLogger): support Release mode only show exception message (#6152)
* chore: 增加 Hosting 依赖

* refactor: 增加开发模式检查

* test: 更新单元测试

* refactor: 重构代码
2025-06-04 18:31:35 +08:00
Argo Zhang
4640cae828 refactor(Tab): remove ShowErrorLoggerToast parameter (#6150)
* refactor: 关闭 TabItem 的 Toast 弹窗

* refactor: 更改变量

* refactor: ShowToast 默认值更改为 false

* refactor: 移除 ShowErrorLoggerToast 参数
2025-06-04 13:20:47 +08:00
Argo Zhang
3167b47a42 feat(TabItem): Implement IHandlerException interface (#6148)
* refactor: 更改参数值

* feat: 增加 HandlerException 实现逻辑

* test: 补充单元测试

* feat: 增加全局配置参数

* test: 更新单元测试

* test: 增加 TabItemContent 单元测试
2025-06-04 11:25:44 +08:00
XEE LEE
2df033c050 feat(ImageViewer): support change zoomSpeed (#6145)
* add zoomSpeed parameter

* Add ZoomSpeed parameter and remove zoomSpeed from viewer

* update demo

* refactor: 调整格式

* refactor: 移除注释

* refactor: 更改参数为可为空

* refactor: 移除预编译

* refactor: 增加缩放率检查逻辑

* fix: 修复 keydown 事件销毁导致其他钩子失效问题

---------

Co-Authored-By: Ethan Lee <33386249+h2ls@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-06-04 09:19:02 +08:00
Argo Zhang
5acba45e55 feat(TabItem): add ErrorLogger support on TabItem (#6143)
* refactor: 重构 IErrorLogger 数据类型

* refactor: 增加 Tab 组件异常捕获参数

* refactor: TabItem 增加独立捕获异常能力
2025-06-03 17:32:09 +08:00
Argo Zhang
7336b9ef9f revert(IErrorLogger): revert update bool to nullable bool (#6141) 2025-06-03 17:29:15 +08:00
Argo Zhang
b63ed8adb7 feat(TabItem): support ErrorLogger catch exception (#6139)
* refactor: 重构代码

* refactor: 更改 IErrorLogger 接口

* refactor: 改造 Layout 组件

* refactor: 增强 TabItemContent 支持生命周期异常捕获

* chore: bump version 9.7.1-beta03

* wip: 临时提交

* Revert "wip: 临时提交"

This reverts commit d841341604.

* refactor: 撤销更新

* refactor: 代码格式化

* test: 撤销单元测试更改

* test: 更新单元测试

* refactor: 更新 ErrorLogger 是否开启逻辑

* refactor: 移除 IHandlerException 接口

* test: 增加单元测试
2025-06-03 14:50:54 +08:00
Argo Zhang
1f5e494b14 chore(Bootstrap): load bootstrap unbundle javascript on debug mode (#6137)
* refactor: 删除打包脚本

* chore: 更新打包脚本

* chore: 忽略打包脚本

* chore: 更新忽略文件
2025-06-03 13:34:48 +08:00
Argo Zhang
450937c59f doc(SelectGeneric): update IsEditable paraemeter sample code (#6135)
* refactor: 精简代码

* doc: 增加注释

* doc: 更新示例

* chore: bump version 9.7.1-beta03

Co-Authored-By: yswCode <56284285+yswcode@users.noreply.github.com>

---------

Co-authored-by: yswCode <56284285+yswcode@users.noreply.github.com>
2025-06-03 13:00:54 +08:00
Argo Zhang
f81d4008a8 feat(IErrorLogger): redesign parameter data type (#6132)
* refactor: 更改 IErrorLogger 接口

* refactor: 改造 Layout 组件

* test: 更新单元测试
2025-06-02 16:58:30 +08:00
Argo Zhang
6f83053df3 refactor(DynamicElement): refactor code to improve readability (#6130)
* refactor: 重构代码提高可读性

* refactor: 更新逻辑

* Revert "refactor: 更新逻辑"

This reverts commit 042c3033fa.

* Revert "refactor: 重构代码提高可读性"

This reverts commit 92bc40ddd4.

* Reapply "refactor: 重构代码提高可读性"

This reverts commit c929fbe496.
2025-06-02 14:13:35 +08:00
Argo Zhang
16731b9e58 refactor(IdComponentBase): update Id generator (#6126) 2025-06-01 19:10:32 +08:00
Argo Zhang
5fdaee0d23 feat(TabItem): add Id parameter (#6124)
* chore: bump version 9.7.1-beta02

Co-Authored-By: MusaZ <6318180+musaz@users.noreply.github.com>

* feat-tab

---------

Co-authored-by: MusaZ <6318180+musaz@users.noreply.github.com>
2025-06-01 09:48:57 +08:00
Argo Zhang
0289df5047 feat(SelectGeneric): add reset logic when TextConvertToValueCallback return null (#6123)
* feat: 增加 resetValue 方法

* refactor: 移除 tabindex 参数

* refactor: 增加输入 TextConvertToValueCallback 返回空时重置逻辑

* test: 增加单元测试

* test: 更新单元测试

---------

Co-Authored-By: j4587698 <24642446+j4587698@users.noreply.github.com>
2025-05-31 20:08:21 +08:00
John
dae37ad10c fix(BootstrapBlazorErrorBoundary): improve BuildRenderTree logic to render error or fallback content (#6114)
* fix(BootstrapBlazorErrorBoundary): improve BuildRenderTree logic to render error or fallback content (#6113)

- Only renders ChildContent when there is no exception.
- Renders custom ErrorContent if provided, otherwise renders default error content.

* test: 更新单元测试

* doc: 更新全局异常示例

* feat: 增加基类重置方法

* refactor: 消除警告信息

* chore: bump version 9.7.1-beta01

Co-Authored-By: John <1931909+flyliononline@users.noreply.github.com>

* doc: 更新文档

* refactor: 恢复模板代码

---------

Co-authored-by: Argo Zhang <argo@live.ca>
Co-authored-by: John <1931909+flyliononline@users.noreply.github.com>
2025-05-30 13:04:56 +00:00
Argo Zhang
b80e875f0a feat(Layout): integrated ErrorLogger handler global exception (#6119)
* refactor: 代码格式化

* feat: Layout 内置 ErrorLogger

* Revert "feat: Layout 内置 ErrorLogger"

This reverts commit 945c9526e2.

* doc: 更新文档

* refactor: 更新逻辑

* Reapply "feat: Layout 内置 ErrorLogger"

This reverts commit 041f6c27d1.

* test: 增加单元测试

* refactor: 增加页面生命周期报错时自定义异常处理逻辑

* test: 更新单元测试

* refactor: 增加单元测试

* test: 移除单元测试

* doc: 移除命名空间
2025-05-30 12:27:40 +08:00
Argo Zhang
c06050cd3e feat(BootstrapBlazorOptions): add ShowErrorLoggerToast parameter (#6117)
* feat: 增加 ShowErrorLoggerToast 参数

* test: 增加单元测试
2025-05-30 09:10:28 +08:00
Argo Zhang
7065ff2df1 feat(IValidateComponent): update ToggleMessage return value as Task (#6112)
* chore: bump version 9.7.0

* refactor: ToggleMessage 方法更改为 Task

# Conflicts:
#	src/BootstrapBlazor/Components/Validate/IValidateComponent.cs
#	src/BootstrapBlazor/Components/Validate/ValidateBase.cs

* refactor: 增加 await 关键字

* refactor: 更改为异步方法
2025-05-29 10:15:01 +08:00
Argo Zhang
a6167cd7cb fix(SelectGeneric): add dropdown-menu-body class (#6110)
* fix(SelectGeneric): 修复 body 丢失高度问题

* chore: bump version 9.6.5-beta03

Co-Authored-By: j4587698 <24642446+j4587698@users.noreply.github.com>

---------

Co-authored-by: j4587698 <24642446+j4587698@users.noreply.github.com>
2025-05-29 09:54:51 +08:00
Argo Zhang
a0834cda42 refactor(Validate): update dispose method (#6108) 2025-05-28 10:50:06 +08:00
Argo Zhang
4ad4ea4969 feat(Card): add HeaderPaddingY parameter (#6106)
* feat: 增加 HeaderPaddingY 参数调整 header y 轴间隙

* refactor: 代码格式化

* doc: 增加文档

* test: 增加单元测试

* test: 更新单元测试
2025-05-28 09:15:48 +08:00
Argo Zhang
a7d575b8c1 feat(MultiSelectGeneric): add MultiSelectGeneric component (#6103)
* refactor: 删除冗余样式

* feat: 增加多选泛型组件

* doc: 更新示例

* doc: 增加文档
2025-05-27 16:27:08 +08:00
Argo Zhang
89d90772f2 refactor(BootstrapInputGroupLabel): use DynamicElement unified tag (#6101)
* refactor: 精简代码

* style: 代码格式化
2025-05-27 14:43:05 +08:00
Argo Zhang
2ba3fc8e08 refactor(Fork): update custom command to local (#6099)
* refactor: 增加 ValidateForm 判断条件

* refactor: 撤销更新

* refactor: 移除自定义脚本
2025-05-27 14:07:28 +08:00
Argo Zhang
b331fc3db0 feat(MultiSelectFilter): add MultiSelectFilter component (#6097)
* refactor: 移除 bind-value event 语句

* refactor: 增加 MultiSelectFilter 组件

* test: 增加单元测试

* test: 更新单元测试

* test: 更新单元测试

* test: 更新单元测试

* test: 更新单元测试
2025-05-26 20:46:38 +08:00
Argo Zhang
ac20831cd0 doc(FilterProvider): add documentation for FilterProvider (#6095) 2025-05-26 12:26:20 +08:00
Argo Zhang
5246cce79b feat(Meeting): add Meeting component (#6092)
* 添加Meet示例

* 例子中添加更多说明以及支持自定义服务器地址

* doc: 增加菜单

* chore: 增加源码映射关系

* doc: 更新示例

* chore: 更新依赖

* refactor: 精简代码

---------

Co-authored-by: jx <jx@jvxiang.com>
2025-05-25 09:51:03 +08:00
Argo Zhang
ea34fd6aec fix(Table): remove ShowExtendEditButton/ShowExtendDeleteButton check condition (#6090)
* fix: 移除 ShowExtendEditButton ShowExtendDeleteButton 判断条件

* test: 更新单元测试

* chore: bump version 9.6.5-beta02

Co-Authored-By: Mick Bao <78190214+bgycn@users.noreply.github.com>

---------

Co-authored-by: Mick Bao <78190214+bgycn@users.noreply.github.com>
2025-05-25 01:08:05 +00:00
Argo Zhang
de715633c0 chore(TableExport): bump version 9.2.5 (#6088) 2025-05-24 14:29:27 +08:00
Argo Zhang
a86514f247 fix(Layout): authorization failure in virtual directory mode (#6086)
* feat: 增加扩展方法

* fix: 修复二级虚拟目录 Layout 无法显示问题

* chore: bump version 9.6.5-beta01

Co-Authored-By: kid5791 <171754454+kid5791@users.noreply.github.com>

* chore: bump version 9.6.5-beta02

Co-Authored-By: dejan <huangyy98@outlook.com>

* test: 增加单元测试

* refactor: 更改方法名称

* test: 更新单元测试

---------

Co-authored-by: kid5791 <171754454+kid5791@users.noreply.github.com>
Co-authored-by: dejan <huangyy98@outlook.com>
2025-05-23 19:56:25 +08:00
Argo Zhang
2b7554a228 chore(UniverSheet): bump version 9.0.5 (#6085)
remove console log
2025-05-23 11:56:32 +08:00
Argo Zhang
c5be0c75cb doc(UniverSheet): update documentation remove UnSubscribe call (#6083) 2025-05-23 11:41:14 +08:00
Argo Zhang
863017cdc2 chore(Fork): update branch variable in script (#6081) 2025-05-23 10:46:54 +08:00
Argo Zhang
03e52bda1c fix(Splitting): bump version 9.0.3 (#6079) 2025-05-22 18:02:31 +08:00
Argo Zhang
36a0211e50 feat(Table): add IsAutoScrollTopWhenClickPage parameter (#6077)
* refactor: 更新键值

* feat: 增加 IsAutoScrollTopWhenClickPage 参数

* doc: 更新示例

* chore: bump vesion 9.6.4

* refactor: 更新单元测试

* refactor: 重构代码

* refactor: 合并脚本

* test: 更新单元测试
2025-05-22 14:01:58 +08:00
Argo Zhang
10a6739988 feat(ErrorLogger): do not show the exception info on DEBUG mode (#6075)
* refactor: 增加 Debug 模式逻辑

* refactor: 增加注释

* chore: bump version 9.6.4-beta06
2025-05-21 19:40:41 +08:00
Argo Zhang
04bb996cf0 doc(Select): add generic type documentation (#6072) 2025-05-21 15:48:50 +08:00
Argo Zhang
003b3ff2b4 chore(Fork): add Push All custom command (#6069) 2025-05-21 09:48:27 +08:00
Argo Zhang
de132b950c chore(Fork): add custom action script (#6065) 2025-05-20 09:14:02 +08:00
Argo Zhang
d570c8d3ab test(Localizer): update localizer test project folder path (#6062) 2025-05-20 08:57:21 +08:00
Argo Zhang
2518f86303 fix(CheckbxoList): resolve mvvm not work (#6060)
* refactor: 修复值不稳定问题

* chore: bump version 9.6.4-beta05

Co-Authored-By: coding doge <17444754+coddoge@users.noreply.github.com>

* test: 更新单元测试

---------

Co-authored-by: coding doge <17444754+coddoge@users.noreply.github.com>
2025-05-20 08:47:49 +08:00
Argo Zhang
49b1c06c29 fix(Textarea): set UseShiftEnter to true not work (#6059)
* fix(Textarea): update javascript for shift+enter key combination event

* chore: bump version 9.6.4-beta04
2025-05-19 21:00:41 +08:00
Argo Zhang
6d1860f53e fix(Watermark): multiple elements not displayed (#6058)
Co-Authored-By: BBFish <135418544+newwebfish@users.noreply.github.com>
2025-05-19 17:31:58 +08:00
Argo Zhang
97bd421323 feat(Select): add ShowSwal parameter (#6053)
* feat: 增加 ShowSwal 参数

* doc: 更新文档

* chore: bump version 9.6.4-beta03

Co-Authored-By: AApuci <44996451+AApuci@users.noreply.github.com>

* doc: 更新参数文档

* doc: 更新文档

---------

Co-authored-by: AApuci <44996451+AApuci@users.noreply.github.com>
2025-05-18 14:27:56 +08:00
Argo Zhang
521f95a814 fix(Select): shoulde keep selected item when OnBeforeSelectedItemChange return false (#6052)
* fix: 修复 OnBeforeSelectedItemChange 返回 false 后值仍改变问题

* chore: bump version 9.6.4-beta02

Co-Authored-By: AApuci <44996451+AApuci@users.noreply.github.com>

---------

Co-authored-by: AApuci <44996451+AApuci@users.noreply.github.com>
2025-05-18 13:09:16 +08:00
Argo Zhang
df129864ed doc(Reconnector): update support sdk version (#6051)
* doc: 更新重连组件文档

* refactor: 更新文档关键字
2025-05-18 12:24:12 +08:00
Argo Zhang
1b75d1cc6a chore(Action): remove stale action (#6048)
* chore: 更新 action

* chore: 更正配置

* refactor: 移除不使用的 action

* chore: 更新分支
2025-05-18 11:17:06 +08:00
Argo Zhang
cd681efd65 fix(Table): line no support SortableList (#6045)
* fix: 修复拖动导致不更新问题

* doc: 更新示例

* chore: bump version 9.6.4-beta02

* chore: bump version 9.6.4-beta02

Co-Authored-By: ChrisHsieh999 <206642680+chrishsieh999@users.noreply.github.com>

* chore: bump version 9.6.4-beta02

* chore: bump version 9.6.3-beta01

* test: 更新单元测试

---------

Co-authored-by: ChrisHsieh999 <206642680+chrishsieh999@users.noreply.github.com>
2025-05-17 20:13:24 +08:00
Argo Zhang
61769ed69e refactor(Toast): update javascript logic (#6042)
* refactor: 更新弹窗脚本

* chore: bump version 9.6.4-beta01

Co-Authored-By: Symin <syminomega@outlook.com>

---------

Co-authored-by: Symin <syminomega@outlook.com>
2025-05-17 09:50:44 +08:00
Argo Zhang
d5cbb732ec feat(Message): support async update content use same option (#6040)
* doc: 更新示例

* feat: 支持保持相同消息

* doc: 更新本地化

* refactor: 优化性能

* refactor: 完善逻辑
2025-05-16 22:13:08 +08:00
Argo Zhang
ab6c3c130e refactor(Toast): perfect AutoHide logic (#6039)
* refactor: 优化性能

* refactor: 完善逻辑
2025-05-16 22:09:32 +08:00
Argo Zhang
bd404f7f6e feat(Toast): support async update content use same option (#6037)
* doc: 重构代码

* doc: 更新参数说明文档

* refactor: 移除不使用的服务

* doc: 增加线程阻塞通知示例

* feat: 增加 Toast 更新脚本

* refactor: 代码优化

* refactor: 支持内容动态更新逻辑

* doc: 增加多语言支持

* refactor: 修复示例

* doc: 更新示例代码
2025-05-16 21:24:54 +08:00
Argo Zhang
2fec2d0037 feat(MultipleFilterBase): remove MultipleFilterBase use FilterBase (#6033)
* refactor(FilterProvider): refactoring to improve code readability

* refactor: 移除 MultipleFilterBase 基类
2025-05-16 09:02:35 +08:00
Argo Zhang
356f3b2e54 refactor(FilterProvider): refactoring to improve code readability (#6031) 2025-05-16 08:52:30 +08:00
Argo Zhang
a556aee055 feat(FilterProvider): add FilterProvider component (#6029)
* feat: 增加 FilterProvider 组件

* test: 增加单元测试

* refactor: 更改过滤器

* revert: 兼容老组件

* revert: 撤销更改结构

* doc: 更新示例

* doc: 代码格式化

* chore: bump version 9.6.3

* refactor: 重构组件

* refactor: 移除 Filter 组件
2025-05-15 12:22:11 +08:00
Argo Zhang
9abd34626c fix(NavigateToExtensions): not work NavigateTo extension method (#6026)
* fix: 修复 TabItemTextOptions 设置文本失败问题

* chore: bump version 9.6.2

Co-Authored-By: adminyr <105772658+adminyr@users.noreply.github.com>

---------

Co-authored-by: adminyr <105772658+adminyr@users.noreply.github.com>
2025-05-14 18:30:49 +08:00
Argo Zhang
44c3b45112 feat(Select): add IsAutoClearSearchTextWhenCollapsed parameter (#6024)
* refactor: 重构代码

* feat: 增加 IsAutoClearSearchTextWhenCollapsed 参数

* feat: 增加 OnCollapsed 回调方法

* test: 增加单元测试

* test: 增加单元测试

* doc: 更新文档

* doc: 更新注释文档

* doc: 增加注释

* chore: bump version 9.6.2-beta06
2025-05-14 17:20:11 +08:00
Argo Zhang
665d46f5a1 refactor(IgnoreWhenExport): update AutoGenerateColumnAttribute logic (#6023)
* refactor: 增加显示实现逻辑

* test: 增加单元测试

* test: 增加单元测试

* test: 更新单元测试
2025-05-14 14:48:16 +08:00
Argo Zhang
124f84b427 feat(TableFilter): redesign filter system (#6020)
* doc: 更新注释

* refactor: 重新设计 FilterTemplate 模板

* refactor: 移除预编译宏

* refactor: 重新设计过滤器

* refactor: 增加枚举类型过滤器

* refactor: 增加布尔类型过滤器

* refactor: 重构 Filter 结构

* refactor: 更新 TableColumnDateTimeFilter 组件

* feat: 增加 TableColumnStringFilter 组件

* feat: 增加 NumberFilter 组件

* refactor: 更新 NumberFilter 组件

* refactor: 增加 Lookup 过滤器

* chore: 移除老的过滤器

* refactor: 增加 TableColumnMultiFilter 过滤去

* refactor: 恢复组件名称

* doc: 根据最新组件设计重构自定义过滤组件

* refactor: 增加忽略检查设置

* refactor: 增加 HasFilter 扩展方法

* doc: 更新示例

* refactor: 精简代码

* refactor: 重构过滤器

* refactor: 更新扩展方法

* refactor: 精简代码

* test: 更新单元测试

* refactor: 重构代码

* refactor: 调整过滤器结构

* refactor: 重构代码

* refactor: 代码重构

* doc: 更新示例

* refactor: 增加 Count 参数

* refactor: 增加 IsHeaderRow 参数设置

* refactor: 重构 IsHeaderRow 逻辑

* refactor: 重构组件名称

* feat: 设计 Title 参数

* refactor: 重构方法名称

* revert: 撤销更改

* revert: 回复文档示例

* Revert "revert: 回复文档示例"

This reverts commit 38140b5bba.

* Revert "revert: 撤销更改"

This reverts commit bd7699de36.

* doc: 更新示例

* refactor: 移除 FieldKey 接口参数

* refactor: 更新过滤器类名

* refactor: 重构代码

* test: 增加单元测试

* test: 更新 EnumFilter 单元测试

* test: 增加 BoolFilter 单元测试

* test: 增加 EnumFilter 单元测试

* test: 增加 DateTimeFilter 单元测试

* test: 增加 NumberFilter 单元测试

* test: 增加 LookupFilter 单元测试

* test: 增加 MultiFilter 单元测试

* refactor: 精简代码

* refactor: 代码格式化

* refactor: 更改判断逻辑

* doc: 增加注释

* refactor: 增加 SearchFilterAction 单元测试

* refactor: 精简代码

* refactor: 使用 razor 文件

* refactor: 重构代码

* test: 补充单元测试

* refactor: 重构代码

* test: 增加单元测试

* refactor: 精简代码

* test: 更新单元测试

* test: 更新单元测试
2025-05-14 14:29:37 +08:00
Argo Zhang
051fdbae46 refactor(Table): update logic for IgnoreWhenExport parameter (#6018)
* revert: 撤销对可见列逻辑更改

* feat: 增加导出时过滤列逻辑

* chore: bump version 9.6.2-beta05

* refactor: 增加 GetExportColumns 扩展方法

* fix: 修复条件不正确问题

* test: 增加单元测试
2025-05-13 14:16:39 +08:00
Argo Zhang
e957946357 feat(Table): skip validate on Excel model (#6017)
* refactor: Table  Excel 模式禁止 Validate

* test: 更新单元测试

* chore: bump version 9.6.2-beta04
2025-05-12 20:07:09 +08:00
Argo Zhang
316eca5021 feat(Table): add EnableKeyboardNavigationCell parameter (#6015)
* refactor: 增加 EnableKeyboardNavigationCell 参数

* refactor: 更新脚本

* test: 更新单元测试

* chore: bump version 9.6.2-beta03

* doc: 增加导出配置文档
2025-05-11 10:22:02 +08:00
Argo Zhang
0a920d3940 feat(TableColumn): add IgnoreWhenExport parameter (#6011)
* feat: 增加 TableExportAttribute 标签类

* feat: 增加 IgnoreWhenExport 参数

* feat: 增加 IgnoreWhenExport 参数

* revert: 删除 TableExportAttribute

* refactor: 增加参数标签

* refactor: 增加参数继承逻辑

* test: 增加单元测试
2025-05-10 12:11:05 +08:00
Argo Zhang
f89a1fa933 feat(MultiFilter): add StringComparison parameter (#6010)
* feat: 增加比较参数

* doc: 更新注释

* test: 更新单元测试
2025-05-10 09:38:27 +08:00
Diego2098
d86aa37efa feat(Localizer): add GetStringFromBaseType logic support base type (#6006)
* 属性自动尝试从父类中获取json语言资源

* test: 更新单元测试

* refactor: 重构代码

* 增加单元测试

* revert: 撤销更改

* test: 更新单元测试

* refactor: 更新单元测试

* chore: bump version 9.6.2-beta02

Co-Authored-By: Diego2098 <82756760+kimdiego2098@users.noreply.github.com>

---------

Co-Authored-By: Argo Zhang <argo@live.ca>
2025-05-09 19:17:48 +08:00
Argo Zhang
cd0284c612 doc(FullScreenButton): add FullScreenOption documentation (#6005)
* refactor: 增加全屏按钮源码映射配置

* chore: 更新本地化文件

* chore: 增加全屏按钮菜单

* refactor: 更新全屏服务文档

* doc: 增加全屏按钮示例

* doc: 更新文档

* feat: 增加 Selector 支持

* doc: 增加 FullScreenOption 说明

* test: 增加单元测试
2025-05-09 15:49:12 +08:00
Argo Zhang
56b990761a fix(ErrorLogger): add custom OnErrorHandleAsync on Layout not work (#6004)
* refactor: 增加 OnErrorHandleAsync 处理逻辑

* chore: bump version 9.6.2-beta01

Co-Authored-By: Jayce Liu <129018443+kaishao628@users.noreply.github.com>

* Revert "refactor: 增加 OnErrorHandleAsync 处理逻辑"

This reverts commit 75d4f366eb.

* refactor: 增加自定义异常处理逻辑优先处理

* test: 更新单元测试

* refactor: 精简代码

---------

Co-authored-by: Jayce Liu <129018443+kaishao628@users.noreply.github.com>
2025-05-09 15:02:53 +08:00
Argo Zhang
7d3ac79855 feat(Tab): update FullScreen targetId (#5996)
* style: 更新样式

* feat: 移除全屏 Id 设置

* refactor: 更新扩展方法

* test: 更新单元测试

* test: 更新单元测试

* test: 更新单元测试

* chore: bump version 9.6.1

Co-Authored-By: UnicronOrigin <49175555+unicronorigin@users.noreply.github.com>

---------

Co-authored-by: UnicronOrigin <49175555+unicronorigin@users.noreply.github.com>
2025-05-08 00:26:46 -07:00
Argo Zhang
91d0f52e36 refactor(Table): rename ProhibitEdit/Delete method name (#5999)
* refactor: 更新方法名称

* test: 更新单元测试
2025-05-08 00:25:35 -07:00
AiZhen
417d198ddc feat(Table): enhances the validation logic for edit and delete operations (#5992)
* 增强编辑和删除操作的按钮状态检查

添加了对编辑按钮禁用状态的检查,确保在编辑时考虑行的可编辑性和按钮的可用性。同时,更新了删除操作的逻辑,增加了对删除按钮禁用状态的检查,以提高代码的健壮性。

* refactor: 重构代码

* test: 增加单元测试

* test: 更新单元测试

---------

Co-Authored-By: AiZhen <aizhen@aizhen.vip>
Co-Authored-By: AiZhen <53560110+AiYuZhen@users.noreply.github.com>
Co-Authored-By: Argo Zhang <argo@live.ca>
2025-05-07 22:32:23 -07:00
Argo Zhang
a92587e1bf doc(MFA): add enable 2FA sample code (#5994)
* chore: bump version 9.6.1-beta04

* test: bump version 9.6.1-beta05

* chore: test push auto

* style: 更新样式

* doc: 更新 MFA 示例

* chore: bump version 9.6.1-beta04

Co-Authored-By: ChenHan819 <58500809+chenhan819@users.noreply.github.com>

* chore: bump version 9.6.1-beta03

---------

Co-authored-by: ChenHan819 <58500809+chenhan819@users.noreply.github.com>
2025-05-08 09:55:33 +08:00
Argo Zhang
d456d8cd88 feat(DockView): bump version 9.1.13 (#5985)
* chore: bump version 9.1.13

* chore: bump version 9.6.1-beta03

Co-Authored-By: Brent-bai <71217629+brent-bai@users.noreply.github.com>

---------

Co-authored-by: Brent-bai <71217629+brent-bai@users.noreply.github.com>
2025-05-07 13:49:22 +08:00
Argo Zhang
8addd2b3a8 feat(Dialog): add Show<TComponent> extension method (#5983)
* feat: 增加 Show 泛型扩展方法

* test: 增加单元测试

* chore: bump version 9.6.1-beta03

Co-Authored-By: WarriorBlue <15247822+warriorblue@users.noreply.github.com>

* doc: 更新注释

* refactor: 更新文档

---------

Co-authored-by: WarriorBlue <15247822+warriorblue@users.noreply.github.com>
2025-05-07 11:04:29 +08:00
Argo Zhang
384fd9d0be doc(MFA): add MFA sample code (#5975)
* doc: 增加 MFA 示例

* doc: 增加菜单
2025-05-06 15:24:45 +08:00
Argo Zhang
496004b304 feat(ExportPdfButton): update AutoDownload default value to true (#5973)
* doc: 更新文档说明

* refactor: 更改 AutoDownload 参数默认值
2025-05-06 12:44:50 +08:00
Argo Zhang
e2ff294041 feat(Logout): add AvatarRadius parameter (#5969)
* feat: 增加 AvatarRadius 参数

* test: 增加单元测试

* chore: bump version 9.6.1-beta02
2025-05-05 20:26:41 +08:00
Argo Zhang
897d657256 feat(IVideoDevice): add GetData method (#5967)
* feat: 增加 GetData 方法

* refactor: 增加 getAudioData 方法

* doc: 增加下载按钮

* refactor: 更新实现逻辑

* test: 更新单元测试

* doc: 更新示例

* doc: 更新示例文档
2025-05-05 16:21:59 +08:00
Argo Zhang
b7e0afeefb feat(IVideoDevice): add GetPreviewData method (#5965)
* refactor: 代码重构消除警告信息

* feat: 增加 GetPreviewData 方法

* feat: 增加预览数据

* refactor: 增加异常保护

* doc: 增加下载示例

* refactor: 移除 async 关键字

* test: 增加单元测试

* chore: bump version 9.6.1-beta03

Co-Authored-By: pomeara <8163710+pomeara@users.noreply.github.com>

* test: 更新单元测试

* doc: 更新资源文件

---------

Co-authored-by: pomeara <8163710+pomeara@users.noreply.github.com>
2025-05-05 15:41:29 +08:00
Argo Zhang
6a3df544a3 fix(FullScreenService): sync fullscreen state with esc key event (#5961)
* style: 移除不使用的样式

* feat: 增加 fullscreenchange 状态监控

* refactor: 精简代码

* refactor: 重构样式

* doc: 更新文档

* chore: bump version 9.6.1-beta03

* chore: bump version 9.6.1-beta02

Co-Authored-By: WarriorBlue <15247822+warriorblue@users.noreply.github.com>

---------

Co-authored-by: WarriorBlue <15247822+warriorblue@users.noreply.github.com>
2025-05-04 15:31:08 +08:00
Argo Zhang
a48cdef337 feat(Tab): update css for fullscreen state (#5959)
* style: 更新样式防止溢出

* refactor: 增加全屏适配样式

* style: 增加约束

* style: 移除不使用的样式

* style: 移除不使用的样式

* style: 增加 Layout 下 Tab 全屏样式

* style: 增加 Tab 全屏样式
2025-05-04 14:48:47 +08:00
Argo Zhang
2f518f9ea5 feat(IAudioDevice): add IAudioDevice service (#5955)
* refactor: 重构代码

* feat: 增加 IAudioDevice 服务

* refactor: 增加注入服务代码

* refactor: 增加语音记录功能

* doc: 增加菜单

* doc: 增加示例代码

* refactor: 更新录音逻辑

* refactor: 更新样式

* doc: 增加源码映射文件

* refactor: 更新文档

* doc: 菜单本地化

* doc: 更新文档

* test: 增加单元测试

* refactor: 增加 type 区分音视频

* refactor: 增加资源销毁防止内存泄漏
2025-05-03 19:51:09 +08:00
Argo Zhang
9fccdadea6 feat(Table): add ToolbarTemplate parameter (#5951)
* feat: 增加 ToolbarTemplate 参数

* test: 增加单元测试

* test: 更新单元测试

* chore: bump version 9.6.1-beta01
2025-05-03 16:15:51 +08:00
Argo Zhang
f57315d69b refactor(IVideoDevice): add Apply method (#5949)
* chore: bump version 9.6.1-beta02

Co-Authored-By: SteelTeng <SteelTeng@users.noreply.github.com>

* doc: 微调样式

* feat: 增加 apply 实现方法

* doc: 更新示例

* test: 更新单元测试

---------

Co-authored-by: SteelTeng <SteelTeng@users.noreply.github.com>
2025-05-03 12:07:13 +08:00
Argo Zhang
94c27d8a27 feat(ModalDialog): add FooterContentTemplate parameter (#5947)
* feat: 增加 FooterContentTemplate 参数

* style: 增加 modal-footer-content 样式

* test: 增加单元测试

* chore: bump version 9.6.1-beta01

Co-Authored-By: FelixYe <131856535+hongfei-ye@users.noreply.github.com>

---------

Co-authored-by: FelixYe <131856535+hongfei-ye@users.noreply.github.com>
2025-05-03 10:17:32 +08:00
Argo Zhang
a6e14bd59f refactor(IVideoDevice): add bool result from open method (#5945)
* refactor: 防止重复添加

* doc: 更新示例

* doc: 更新示例

* refactor: 移除 Flip 方法

* doc: 更新示例

* test: 更新单元测试

* doc: 移除调试信息

* refactor: open 方法增加返回值

* doc: 增加打开设备逻辑

* test: 更新单元测试

* refactor: close 方法增加返回值

* doc: 更新文档

* test: 更新单元测试

* doc: 增加自动选择设备逻辑

* doc: 增加自动关闭视频逻辑

* refactor: 移除水平翻转样式

* chore: bump version 9.6.1-beta02

Co-Authored-By: ChenHan819 <58500809+chenhan819@users.noreply.github.com>

---------

Co-authored-by: ChenHan819 <58500809+chenhan819@users.noreply.github.com>
2025-05-02 18:41:05 +08:00
Argo Zhang
fde404c50a feat(IVideoDevice): add IVideoDevice service (#5940)
* refactor: 增加 IMediaDevices 服务

* doc: 更新示例

* feat: 增加 media 脚本

* feat: 增加 IMediaDeviceInfo 接口

* doc: 更新示例

* refactor: 增加 getUserMedia 方法

* feat: 增加视频功能

* doc: 增加示例

* feat: 增加 IMeidaVideo 接口服务

* doc: 更新示例

* refactor: 优化 registerBootstrapBlazorModule 方法

* feat: 增加 drawImage 方法

* refactor: 移除 GetDisplayMedia 方法

* feat: 精简代码

* doc: 更新示例

* refactor: 重构 IMediaVideo 接口

* refactor: 更新脚本

* refactor: 重构代码

* doc: 更新示例

* refactor: 更新接口

* refactor: 增加镜头翻转功能

* refactor: 更改服务名称

* feat: 更新 open close 方法实现逻辑

* doc: 更新示例

* feat: 实现 GetPreviewUrl 方法

* doc: 更新示例

* refactor: 精简代码

* refactor: 增加翻转功能

* doc: 更新示例代码

* chore: 增加源码映射文件

* doc: 增加菜单

* doc: 更改示例文档名称

* doc: 更新文档

* test: 增加单元测试

* chore: bump version 9.6.1-beta01

Co-Authored-By: Vincent <142959771+vincent8725@users.noreply.github.com>

* refactor: 撤销 Flip 方法

* doc: 撤销更改

---------

Co-authored-by: Vincent <142959771+vincent8725@users.noreply.github.com>
2025-05-02 15:36:35 +08:00
Argo Zhang
0e5d5d41b3 feat(Utility): add drawImage method (#5938)
* chore: bump version 9.6.1-beta02

Co-Authored-By: a0926019412 <4286244+a0926019412@users.noreply.github.com>

* feat: 增加 drawImage 方法

---------

Co-authored-by: a0926019412 <4286244+a0926019412@users.noreply.github.com>
2025-05-02 11:01:15 +08:00
Argo Zhang
9e542ab40b feat(Utility): improve registerBootstrapBlazorModule method (#5936)
* chore: bump version 9.6.1-beta01

Co-Authored-By: Chason <yuchen7701@foxmail.com>
Co-Authored-By: RongguoLiu <26689767+rongguoliu@users.noreply.github.com>

* refactor: 优化 registerBootstrapBlazorModule 方法

---------

Co-authored-by: Chason <yuchen7701@foxmail.com>
Co-authored-by: RongguoLiu <26689767+rongguoliu@users.noreply.github.com>
2025-05-02 10:52:59 +08:00
Argo Zhang
248f88d6e6 doc(ITotpService): update inject service document (#5934) 2025-05-01 15:10:59 +08:00
Argo Zhang
04b67ec5d3 doc(QRCode): add QRCode app sample (#5932)
* refactor: 增加二维码类型

* doc: 增加二维码生成示例

* refactor: 调整样式

* doc: 增加本地化
2025-05-01 14:58:21 +08:00
Argo Zhang
0d9f89f429 feat(Search): redesign OnClear parameter (#5929)
* refactor: 移除 RenderTemplate 提高性能

* refactor: 重构清空逻辑

* doc: 更新示例

* test: 更新单元测试

* chore: bump version 9.5.13

* chore: bump version 6.0

Co-Authored-By: zpmzuus <39509454+zpmzuus@users.noreply.github.com>

---------

Co-authored-by: zpmzuus <39509454+zpmzuus@users.noreply.github.com>
2025-04-30 15:33:59 +08:00
Argo Zhang
39d89de82d chore(DockView): bump version 9.1.12 (#5927) 2025-04-30 13:04:34 +08:00
Argo Zhang
e409080479 chore(UniverSheet): bump version 9.0.4 (#5925) 2025-04-30 08:25:46 +08:00
Argo Zhang
365ba0e92c feat(Player): add OnEvent callback (#5921) 2025-04-29 14:35:03 +08:00
Argo Zhang
f54ef5646f chore(PdfReader): support Watermark component (#5918)
* chore(PdfReader): support Watermark component

bump version 9.0.1

* chore: bump version 9.5.13-beta01

Co-Authored-By: FYY <64634852+yuban-yuban19090@users.noreply.github.com>

---------

Co-authored-by: FYY <64634852+yuban-yuban19090@users.noreply.github.com>
2025-04-29 11:38:24 +08:00
Argo Zhang
43cbd10c7c feat(LayoutSpitBar): rename LayoutSplitBar component name (#5915)
* refactor: 更正 ShowSplitBar 单词拼写错误

* refactor: 文档格式化

* refactor: 更正属性名称

* test: 更正单元测试

* refactor: 更改组件名称

* doc: 更新文档

* test: 更新单元测试

* chore: bump version 9.5.13-beta02

Co-Authored-By: top5five <10360277+top5five@users.noreply.github.com>

* doc: 更新注释文档

---------

Co-authored-by: top5five <10360277+top5five@users.noreply.github.com>
2025-04-29 10:33:50 +08:00
AiZhen
b7759e7d14 feat(ExpandableNodeCache): use RemoveWhere instead of Remove method (#5906)
* 优化节点缓存操作的比较逻辑。

* chore: bump version 9.5.13-beta01

Co-Authored-By: wzhq1997 <40653349+wzhq1997@users.noreply.github.com>

---------

Co-authored-by: AiZhen <aizhen@aizhen.vip>
Co-authored-by: Argo Zhang <argo@live.ca>
Co-authored-by: wzhq1997 <40653349+wzhq1997@users.noreply.github.com>
2025-04-28 19:01:03 +08:00
Argo Zhang
20da007573 doc(ITotpService): add sample code (#5912)
* chore: 更新解决方案依赖

* chore: 增加 Otp 服务

* chore: bump version 9.5.11

* refactor: 更新默认值

* doc: 更新示例

* chore: bump version 9.5.12

* doc: 增加本地化

* doc: 更改示例文档名称

* doc: 更新文档

* doc: 增加使用步骤

* doc: 更新文档

* refactor: 更新参数默认值
2025-04-27 16:21:32 +08:00
Argo Zhang
a5803ed8de feat(ITotpService): add ITotpService interface (#5900)
* refactor: 增加 IAuthenticatorService 接口

* doc: 增加示例

* refactor: 更改为 ITOTPService 服务

* refactor: 增加菜单

* doc: 增加源码映射

* feat: 增加 OtpInput 组件

* doc: 更新示例

* refactor: 增加空检查

* chore: 增加工程引用

* refactor: 代码格式化

* refactor: 增加模板

* refactor: 更新脚本错误

* doc: 更新样式

* Revert "refactor: 增加模板"

This reverts commit c83b2deebf.

* doc: 更新示例

* refactor: 增加样式文件扩展名

* feat: 增加 OtpInput 组件

* refactor: 增加样式文件扩展名

* refactor: 增加 Readonly 功能

* feat: 增加禁用只读功能

* doc: 增加示例

* chore: 更新字典

* feat: 增加 MaxLength 属性

* refactor: 增加脚本

* doc: 增加示例

* refactor: 更新示例

* refactor: 增加默认实现

* refactor: 增加默认服务逻辑

* chore: 更新字典

* test: 增加单元测试

* test: 增加单元测试

* chore: 更新字典

* refactor: 更新接口

* chore: bump version 9.5.11-beta04

* chore: bump version 9.5.11-beta02

Co-Authored-By: gudufy <117419+gudufy@users.noreply.github.com>

---------

Co-authored-by: gudufy <117419+gudufy@users.noreply.github.com>
2025-04-27 15:11:12 +08:00
Argo Zhang
27474e015c feat(OtpInput): add OtpInput component (#5902)
* feat: 增加 OtpInput 组件

* refactor: 增加样式文件扩展名

* refactor: 增加 Readonly 功能

* feat: 增加禁用只读功能

* feat: 增加 MaxLength 属性

* refactor: 增加脚本

* doc: 增加路由

* doc: 增加源码映射文件

* feat: 增加 OtpInput 示例

* refactor: 增加禁用样式

* doc: 更新示例

* feat: 增加 ChildContent 模板

* refactor: 增加占位符

* doc: 更新示例

* refactor: 样式变量化

* refactor: 增加脚本

* feat: 增加数字类型仅录入一个约束

* refactor: 重构组件结构

* test: 增加单元测试

* refactor: 重构组件提高性能

* test: 更新单元测试

* refactor: 增加样式

* refactor: 增加过滤条件

* refactor: 增加同步逻辑

* refactor: 支持拷贝粘贴

* refactor: 更新 selector 值

* feat: 支持粘贴自动填充功能

* feat: 增加数据双向绑定支持

* refactor: 复用代码

* chore: 更新字典

* test: 更新单元测试

* refactor: 支持表单

* doc: 增加表单示例

* test: 更新示例

* doc: 增加本地化

* doc: 增加 IsNew 标志

* refactor: 重构代码
2025-04-27 13:15:09 +08:00
Argo Zhang
6ca6d5a251 refactor(Timer): refactor prevent stuck thread (#5908)
* Revert "feat(Timer): remove Task.Run support wpf (#5896)"

This reverts commit eadd595cac.

* Reapply "feat(Timer): remove Task.Run support wpf (#5896)"

This reverts commit d93de98692.

* refactor: 优化性能

* chore: bump version 9.5.11-beta06

Co-Authored-By: wengy <8192504+wengy@users.noreply.github.com>

* test: 更新单元测试

* test: 增加单元测试

---------

Co-authored-by: wengy <8192504+wengy@users.noreply.github.com>
2025-04-27 13:03:27 +08:00
Argo Zhang
2fde567702 test(BootstrapInputGroupLabel): add ChildContent unit test (#5910) 2025-04-27 13:00:19 +08:00
Argo Zhang
df711109b9 feat(BootstrapInputGroupLabel): add ChildContent parameter (#5905)
* feat: 增加 ChildContent 模板

* test: 更新单元测试
2025-04-27 08:44:27 +08:00
Argo Zhang
54207210cb refactor(PopConfirmButton): add OnConfirm null check (#5898)
* refactor: 增加空检查

* chore: bump version 9.5.11-beta07

Co-Authored-By: lyt <wdmb123@outlook.com>

---------

Co-authored-by: lyt <wdmb123@outlook.com>
2025-04-26 13:36:35 +08:00
Argo Zhang
eadd595cac feat(Timer): remove Task.Run support wpf (#5896)
* refactor: 重构代码移除 Task.Run 代码

* chore: bump version 9.5.11-beta06

Co-Authored-By: SameulTian <48208085+samueltian666@users.noreply.github.com>

---------

Co-authored-by: SameulTian <48208085+samueltian666@users.noreply.github.com>
2025-04-26 11:38:47 +08:00
Argo Zhang
075a1c3c6c feat(SpeechWave): remove Task.Run support wpf (#5894)
* refactor: 代码重构

* test: 更新单元测试

* test: 更新单元测试

* test: 更新单元测试

* chore: bump version 9.5.11-beta06

Co-Authored-By: Symin <syminomega@outlook.com>

---------

Co-authored-by: Symin <syminomega@outlook.com>
2025-04-26 11:32:04 +08:00
Argo Zhang
6b39b6af38 chore(Button): remove Task.Run in event callback (#5891)
* fix(Button):修复WPF Blazor模式下Button组件IsAsync不工作

* chore: bump version beta03

Co-Authored-By: zglp <15925497+zglp@users.noreply.github.com>

---------

Co-authored-by: zglp <2499728776@qq.com>
Co-authored-by: Argo Zhang <argo@live.ca>
Co-authored-by: zglp <15925497+zglp@users.noreply.github.com>
# Conflicts:
#	src/BootstrapBlazor/BootstrapBlazor.csproj
#	src/BootstrapBlazor/Components/Button/PopConfirmButton.razor.cs
2025-04-25 13:23:02 +08:00
Argo Zhang
9f0d084b2f feat(PopConfirmButton): support trigger OnClose event callback when click document (#5889)
* refactor: 增加事件移除代码

* feat: 增加 TriggerCloseCallback 回调方法

* refactor: 增加异常保护

* 修复 Ajax 组件 body 内容错误问题 (#5874)

* refactor: 重构代码

* chore: bump version 9.5.11-beta02

---------

Co-Authored-By: AiZhen <aizhen@aizhen.vip>
Co-Authored-By: Argo Zhang <argo@live.ca>

* refactor: 增加空检查逻辑

* perf: 提高性能

* chore: bump version 9.5.11-beta04

* test: 更新单元测试

* test: 更新单元测试

* test: 更新单元测试

* refactor: 使用 data-bb-close 标签 提高性能

* test: 更新单元测试

* test: 增加 OnClose 单元测试

* test: 增加 TriggerCloseCallback 方法单元测试

* chore: bump version 9.5.11-beta05

* refactor: 移除默认值

* test: 消除警告信息

---------

Co-Authored-By: AiZhen <53560110+AiYuZhen@users.noreply.github.com>
Co-authored-by: AiZhen <aizhen@aizhen.vip>
2025-04-25 12:49:32 +08:00
Argo Zhang
5687352918 feat(DockView): bump version DockView 4.2.3 (#5887) 2025-04-25 10:45:49 +08:00
Argo Zhang
8a55986a9e feat(Markdown): support default Language (#5885) 2025-04-25 10:18:39 +08:00
Argo Zhang
f745059041 revert(Button): undo Button code changes (#5882)
* fix(Button): IsAsync parameter support wpf (#5878)

* fix(Button):修复WPF Blazor模式下Button组件IsAsync不工作

* chore: bump version beta03

Co-Authored-By: zglp <15925497+zglp@users.noreply.github.com>

---------

Co-authored-by: zglp <2499728776@qq.com>
Co-authored-by: Argo Zhang <argo@live.ca>
Co-authored-by: zglp <15925497+zglp@users.noreply.github.com>

* Revert "fix(Button): IsAsync parameter support wpf (#5878)"

This reverts commit e4cbd32892.

* doc: 代码格式化

---------

Co-authored-by: zglp <zglp1024@outlook.com>
Co-authored-by: zglp <2499728776@qq.com>
Co-authored-by: zglp <15925497+zglp@users.noreply.github.com>
2025-04-25 09:53:32 +08:00
Argo Zhang
1bf774b197 chore(Ajax): update ajax body according method (#5881)
* 修复 Ajax 组件 body 内容错误问题 (#5874)

* refactor: 重构代码

* chore: bump version 9.5.11-beta02

---------

Co-Authored-By: AiZhen <aizhen@aizhen.vip>
Co-Authored-By: Argo Zhang <argo@live.ca>

* chore: bump version 9.5.11-beta03

Co-Authored-By: AiZhen <53560110+AiYuZhen@users.noreply.github.com>

---------

Co-authored-by: AiZhen <53560110+AiYuZhen@users.noreply.github.com>
Co-authored-by: AiZhen <aizhen@aizhen.vip>
2025-04-25 09:10:03 +08:00
Argo Zhang
bb4c827fd3 feat(Table): support fixed column on ResizeColumnCallback (#5873) 2025-04-24 12:25:48 +08:00
Argo Zhang
12353f5be2 test(Dialog): improve code coverage (#5872)
* test(Dialog): improve code coverage

* test: 更新单元测试
2025-04-24 12:11:08 +08:00
Argo Zhang
80c2a0fefb feat(TableExport): bump MiniExcel version to 1.41.0 (#5870)
* refactor: 精简命名空间

* chore: bump version 9.2.4
2025-04-24 12:00:43 +08:00
Argo Zhang
7567909cde feat(Dialog): add IsHidePreviousDialog parameter (#5866)
* refactor: 增加 IsKeepPreviousDialog 配置项

* feat: 增加 modal-multiple 样式

* refactor: 更改参数名称

* refactor: 更新样式

* refactor: 增加 show 参数

* chore: bump version 9.5.11-beta01
2025-04-23 19:05:48 +08:00
Argo Zhang
ad7cafc230 feat(Ajax): support form post data (#5862)
* refactor: 支持表单提交功能

* chore: bump version 9.5.10
2025-04-23 13:25:10 +08:00
Symin
358e500645 feat(Scroll): add ScrollToBottom method (#5858)
* feat(Scroll): 添加平滑滚动到底部的功能,用于聊天框和动态条目展示等

* refactor: 精简代码

* doc: 精简代码

* refactor: 移除 init 调用

* test: 增加单元测试

* test: 更新单元测试

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-04-23 08:21:07 +08:00
MadLongTom
53c934a588 feat(QueryPageOptions): support serialization (#5840)
* chore(IFilterAction): add JsonDerivedTypeAttribute to support serialization

* refactor: 增加忽略设置

* doc: 更新注释

* feat: 增加 JsonQueryPageOptionsConverter 转换器

* test: 更新单元测试

* chore: bump version 9.5.9

* revert: 撤销忽略标签

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-04-22 15:03:36 +08:00
Argo Zhang
ad698e2e8d feat(Barcode): update dependence lib (#5855) 2025-04-21 18:15:03 +08:00
Argo Zhang
03f1bae083 feat(Table): add col-line-no style on Line column (#5851)
* refactor: 增加行号样式

* refactor: 增加 col-line-no 样式

* refactor: 增加间隙
2025-04-20 08:29:47 +08:00
Argo Zhang
dccf10f420 feat(DefaultTableExport): add EnableAutoFilter property (#5849)
* chore: bump version 9.2.3

add AutoFilter property

* chore: bump version 9.1.10
2025-04-19 08:25:14 +08:00
Alex chow
06214cf678 feat(DefaultTableExport): add EnableAutoFilter/EnableAutoWidth property (#5846)
* feat(DefaultTableExport): 添加是否启用 Excel 自动筛选,是否启用 Excel 自动宽度参数 #5845

* doc: 更新注释为英文

* chore: bump version 9.5.8

* refactor: 更改参数名称

* test: 更新单元测试

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-04-17 22:32:55 +00:00
Argo Zhang
d1579e12a3 feat(Tab): add IsLoopSwitchTabItem parameter controll switch tab item behavior (#5844)
* feat: 增加 IsAutoLoopTabItem 参数

* doc: 更新文档

* chore: bump version 9.5.8-beta01

* test: 增加单元测试
2025-04-17 13:23:30 +08:00
Argo Zhang
2cc46caf5b feat(AutoFill): always filter the dropdown items by input text (#5842)
* doc: 注释更新为英语

* refactor: 选择后更新下拉框

* refactor: 调整参数

* refactor: 移除代码
2025-04-17 12:09:33 +08:00
Argo Zhang
4fce242fed refactor(AutoComplete): update blur logic (#5838)
* refactor: update blur event callback

* refactor: 更新脚本

* test: 更新单元测试

* refactor: 增加 Blur 支持

* test: 增加单元测试
2025-04-17 11:00:59 +08:00
Argo Zhang
6e64c2214c refactor(AutoComplete): revert blur event callback (#5836)
* refactor: 移除 TriggerFilter 方法

* refactor: 精简代码

* refactor: 增加 OnBlur 支持

* test: 更新单元测试
2025-04-17 09:44:41 +08:00
Argo Zhang
a22b394046 fix(Select): cannot select value again after clear by code (#5834)
* fix: 修复清空后无法再次选中问题

* chore: bump version 9.5.7
2025-04-16 04:29:52 -07:00
Argo Zhang
dbb9b8db31 refactor(AutoComplete): auto close dropdown box after press tab (#5833) 2025-04-16 04:10:08 -07:00
Argo Zhang
daf5f104d6 feat(AutoFill): consistent with AutoComplete partial refresh of drop-down box (#5831)
* refactor: 增加防抖函数

* refactor: 增加双绑

* refactor: 增加双绑

* test: 更新单元测试

* test: 更新单元测试

* chore: bump version 9.5.7-beta01

* refactor: 重构代码

* refactor: 更新局部刷新逻辑
2025-04-16 03:44:31 -07:00
celadaris
e9fc549dcf fix(AutoComplete): studder on long running OnValueChanged function call (#5819)
* fix studder

* update

formatting

* Update AutoComplete.razor.js

studder fix will be applied immediately rather than after a second or two after the component loads

* Update AutoComplete.razor.cs

Added a fix for #5821

* rollback

undo fix for #5821

* Update AutoComplete.razor.cs

re-apply fix, but use main branch as reference

* Update AutoComplete.razor.cs

accidently added duplicate GetFilterItemsByValue, oops. now its removed

* refactor: 精简代码

* Revert "doc: 更新测试用例"

This reverts commit c15ac7438f.

* doc: 更新示例

* refactor: 精简 js 逻辑

* refactor: 使用 bind 防止卡顿

* refactor: 重构 show/closee 方法

* revert: 撤销 EnterCallback 参数

* doc: 更新测试用例

* refactor: 移除不使用的代码

* test: 更新单元测试

* refactor: 移除 TriggerChange 方法

---------

Signed-off-by: celadaris <amorales13r@gmail.com>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-04-16 01:03:53 -07:00
Argo Zhang
46b08a3dc1 fix(Table): stuck search form-control when press keyup/keydown when IsExcel mode (#5826)
* refactor: 增加调用函数保护

* refactor: 增加控件搜索范围

* refactor: 更正行搜索逻辑

* chore: bump version 9.5.6
2025-04-16 09:08:55 +08:00
Argo Zhang
698666c3ad feat(Watermark): add data-bb-watermark attribute (#5825)
* refactor: 增加全局水印时移动到文档根节点逻辑

* refactor: 增加变量保护

* refactor: 完善 dispose 逻辑防止 dom 残留
2025-04-15 18:41:16 +08:00
Argo Zhang
2e2e2b9195 fix(AutoComplete): auto filter the dropdown items when Value is not null (#5823)
* refactor: 增加 Value 初始化时过滤候选项功能

* chore: bump version 9.5.6-beta05

* test: 更新单元测试
2025-04-15 16:42:29 +08:00
Argo Zhang
1c6d6ae2c0 fix(AutoComplete): tabbing off AutoComplete field does not close its drop down (#5818)
* refactor: missing ac variable

* chore: bump version 9.5.6-beta04
2025-04-14 13:37:17 +08:00
Argo Zhang
7a5c8eacbb fix(AutoComplete): missing value when click delete item (#5817)
* refactor: 增加 keyup 事件回调

* chore: bump version 9.5.6-beta03
2025-04-14 11:17:36 +08:00
Argo Zhang
0bfdef3735 fix(AutoComplete): tabbing off AutoComplete field does not close its drop down (#5816)
* refactor: use keydown event

* chore: bump version 9.56-beta02
2025-04-13 19:20:30 +08:00
Argo Zhang
a213b8463f fix(AutoComplete): missing value when click delete item (#5814)
* refactor: 精简代码

* refactor: 移除不使用的样式

* refactor: 增加注释

* refactor: 增加 DeleteCallback 方法

* refactor: 更改回调名称

* test: 更新单元测试
2025-04-12 21:04:40 +08:00
Argo Zhang
b9e91119c3 fix(Table): should show the Toast when not set BootstrapBlazorOption ToastDelay (#5810)
* wip: 临时提交

* test: 更新单元测试

* refactor: 重构代码

* refactor: 移除参数

* refactor: 重构 ToastDelay 取值逻辑

* test: 更新单元测试
2025-04-11 03:06:05 +00:00
Argo Zhang
bb45f76bb7 fix(Waterfall): throw exception when click item (#5808) 2025-04-11 02:10:49 +00:00
Argo Zhang
d88b5a2770 fix(Select): make sure show the right display text (#5806)
* refactor: 重构 DefaultVirtualizeItemText 逻辑

* test: 更新单元测试

* chore: bump version 9.5.6-beta01
2025-04-10 18:04:24 +08:00
Argo Zhang
9f4c21d02c feat(ShieldBadge): add ShieldBadge component (#5804)
* doc: 文档注释英语化

* doc: 微调代码块宽度

* doc: 增加代码文件映射

* doc: 增加菜单资源文件

* doc: 增加徽章菜单

* doc: 增加示例

* refactor: 增加组件

* refactor: 增加样式 scss 文件

* doc: 增加示例

* refactor: 调整标签宽度

* test: 增加单元测试
2025-04-10 12:55:33 +08:00
Argo Zhang
4d688cbf5e feat(DateTimeRange): add AutoClose parameter (#5802)
* feat: 增加 AutoClose 参数

* doc: 更新文档

* test: 更新单元测试

* doc: 增加 AutoClose 说明文档

* chore: bump version 9.5.5
2025-04-09 13:02:41 +08:00
Argo Zhang
6bea102ed9 feat(DateTimeRange): add ShowSelectedValue parameter (#5800)
* refactor: 使用模式语法

* refactor: 精简代码

* refactor: 代码规范

* doc: 增加24节气变量开关多语言

* feat: 增加 OnDateClick 回调方法

* doc: 增加节气开关

* doc: 增加 OnDateClick 回调方法文档

* feat: 增加 ShowSelectedValue 参数

* doc: 更新示例

* doc: 增加 ShowSelectedValue 说明

* test: 更新单元测试
2025-04-09 04:28:22 +00:00
Argo Zhang
50bc52953c feat(Slider): update style compatible with row (#5797)
* refactor: 微调 silider 样式

* chore: bump version 9.5.4
2025-04-08 12:38:14 +08:00
Argo Zhang
57d8b4f878 fix(Layout): missing route handler when url has # (#5795)
* refactor: remove comment

* refactor: 增加激活标签页空保护

* refactor: 使用 ToAbsoluteUri 防止报错
2025-04-08 12:35:00 +08:00
Argo Zhang
30ab0b345d feat(Watermark): add IsPage parameter (#5793)
* refactor: support isPage option

* feat: 支持整页面水印

* refactor: 完善判断空逻辑

* feat: 怎加 is-page 样式

* feat: 增加 IsPage 参数

* doc: 增加文档

* refactor: 增加样式

* feat: 增加报错功能

* test: 更新单元测试
2025-04-08 09:31:42 +08:00
Argo Zhang
bda6a4f119 feat(Watermark): update logic to prevent errors (#5791)
* refactor: 修复报错

* refactor: 更新 z-index 值
2025-04-07 18:22:06 +08:00
Argo Zhang
b2d9dcb324 doc(Tab): update documentation (#5789)
* refactor: 重构 Tab 组件增加 TabHeader 参数代替 Layout

* refactor: 移除 _tab 变量

* test: 更新单元测试

* test: 更新单元测试

* doc: 更新注释

* refactor: 移除全屏按钮
2025-04-06 19:04:07 +08:00
Argo Zhang
bcb968fbda feat(Tab): add TabHeader parameter (#5787)
* refactor: 重构 Tab 组件增加 TabHeader 参数代替 Layout

* refactor: 移除 _tab 变量

* test: 更新单元测试

* test: 更新单元测试
2025-04-06 16:24:49 +08:00
Argo Zhang
5d96376420 doc(Tab): add ShowTabInHeader documentation (#5785)
* doc: 增肌 ShowTabInHeader 参数说明

* doc: 增加 Tips 说明
2025-04-05 20:59:21 +08:00
Argo Zhang
d4be7a8011 feat(Tab): reduce toolbar spacing (#5782)
* refactor: 调整间隙

* refactor: 调整拐角

* refactor: 调整左间隙

* refactor: 增加左侧偏移量

* refactor: 调整不同模式左侧偏移量

* chore: bump version 9.5.3

* refactor: 兼容阿拉伯兄弟

* refactor: 调整工具按钮防止被遮挡

* refactor: 左侧间隙支持响应式

* refactor: 更新工具按钮大小

* refactor: 更新 DevUI 样式
2025-04-04 20:47:37 +08:00
Argo Zhang
ae3029fed5 fix(Table): not restore scrollbar after close drawer edit form (#5780)
* wip: 临时提交

* refactor: 增加 RenderBackdrop 方法

* refactor: 增加返回值

* refactor: 支持动画逻辑

* refactor: 修复 Table 关闭抽屉后滚动条消失问题

* refactor: 代码重构

* chore: bump version 9.5.3-beta01

* test: 补充单元测试

* refactor: 移除样式
2025-04-03 16:21:55 +08:00
Argo Zhang
eeb045d2c7 feat(IEditor): add Cols parameter (#5778)
* doc: 更新 DemoTableEditTemplate 逻辑

* feat: 增加 Cols 参数

* test: 更新单元测试

* refactor: IsCheckBoxList 公开化

* refactor: 重构自动判定列宽逻辑

* refactor: 重构代码

* test: 更新单元测试
2025-04-03 12:20:13 +08:00
Amos
c2aee77e5c fix(RibbonTab): cannot automatically shrink in float mode (#5775)
* 修复无法自动收缩问题

* refactor: 代码规范化

* fix: 提高性能

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-04-02 19:07:39 +08:00
Argo Zhang
6f3e91705d feat(Layout): add style support ShowTabInHeader parameter (#5773)
* refactor: 恢复样式

* refactor: 调整火柴棍出现逻辑

* refactor: 更新 Tab 支持 ShowTabInHeader 切换逻辑

* refactor: 更新样式

* style: 增加兼容模板的顶栏标签页样式

* chore: bump version 9.5.2
2025-04-02 17:51:07 +08:00
Argo Zhang
208d440702 refactor(Layout): improve context menu instance (#5768)
* 更新demo

* refactor: 重构右键区域菜单

* test: 更新单元测试

* refactor: 优化性能

* refactor: 重构参数减少级联参数的使用

* refactor: 增加可为空标签减少警告信息

* refactor: 模块化

* refactor: 使用私有变量

* refactor: 重构参数减少级联参数的使用

* refactor: 减少级联参数

* refactor: 使用代码完成渲染

* refactor: 调整 fix 元素

* refactor: 增加右键支持

* refactor: 更新渲染逻辑

* refactor: 更新样式

* refactor: 更新 LayoutId 获得逻辑

* refactor: 撤销样式

* Revert "更新demo"

This reverts commit 860640a29a.

# Conflicts:
#	src/BootstrapBlazor.Server/Components/Samples/Tabs.razor.cs

---------

Co-authored-by: Diego <2248356998@qq.com>
2025-04-02 14:44:45 +08:00
Argo Zhang
b0c29a62f3 feat(Tab): reduce cascade parameters (#5771)
* refactor: 重构参数减少级联参数的使用

* refactor: 减少级联参数

* refactor: 使用代码完成渲染

* refactor: 调整 fix 元素

* refactor: 增加右键支持

* refactor: 更新渲染逻辑

* refactor: 更新样式

* refactor: 更新 LayoutId 获得逻辑

* refactor: 撤销样式

* test: 更新单元测试
2025-04-02 14:39:12 +08:00
Argo Zhang
14a1b197f5 perf(ContextMenu): improve performance (#5766)
* refactor: 精简代码

* perf(ContextMenu): 提高性能

* test: 更新单元测试
2025-04-02 09:22:06 +08:00
Argo Zhang
3334599752 perf(DispatchService): improve performance (#5764) 2025-04-02 08:57:54 +08:00
Argo Zhang
33cc7ce74b feat(Layout): add ShowTabInHeader parameter (#5762)
* feat: 增加 RenderTabHeader 方法

* chore: 增加 ShowTabInHeader 方法

* feat: 实现 TabHeader 再其他地方渲染逻辑

* refactor: 精简代码逻辑

* refactor: 增加 Layout 参数用于接管 RenderTabHeader 方法

* refactor: 脚本兼容

* test: 更新单元测试
2025-04-01 18:58:07 +08:00
Argo Zhang
721f6a0fb6 doc(Chat): update chat sample (#5759) 2025-04-01 11:40:37 +08:00
Argo Zhang
552dd1d868 feat(Tab): compatible with devui style (#5757)
* refactor: 更新 tabs-item 垂直布局样式

* refactor: tab 高度使用变量

* refactor: 更新 hr 样式

* refactor: 参数变量化

* style: 重新设计 Close 按钮样式

* refactor: 更新 HeaderTemplate 示例

* refactor: 防止 Close 折行

* style: 调整变量值

* refactor: 适配紧凑模式

* chore: bump version 9.5.1
2025-04-01 10:48:03 +08:00
Argo Zhang
db4c86843d feat(UniverSheet): support Lang parameter (#5755)
* chore: 更新依赖 9.0.2

* refactor: 增加 Lang 参数

* refactor: 增加 Lang 参数设置

* refactor: 更改 WorkbookData 参数设置

* refactor: 移除 Lang 参数显示设置

* chore: 更新依赖
2025-03-31 15:06:20 +08:00
MadLongTom
590742e9c2 feat(Chat): add deepseek support (#5653)
* feat(Chat): add deepseek support

* refactor: 微调样式

* Update src/BootstrapBlazor.Server/Components/Components/MarkdownContent.razor

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
Signed-off-by: MadLongTom <36219016+MadLongTom@users.noreply.github.com>

* chore(MarkdownContent): remove duplicated method calls

* refactor: 移动 MarkdownContent 到扩展组件库中

* chore: 更新依赖组件

---------

Signed-off-by: MadLongTom <36219016+MadLongTom@users.noreply.github.com>
Co-authored-by: Argo Zhang <argo@live.ca>
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
2025-03-31 14:27:46 +08:00
Argo Zhang
49a4da07a7 fix(ValidateForm): compatible with custom validation classes not end with Attribute (#5752)
* refactor: 重构代码提高代码可读性

* refactor: 兼容非 Attribute 结尾的验证规则

* test: 更新单元测试
2025-03-31 05:09:42 +00:00
Argo Zhang
35a751192b feat(DevUI): update btn-xs style (#5751) 2025-03-31 12:34:26 +08:00
Argo Zhang
563774db26 feat(Tab): update chrome tab style (#5749)
* refactor: 代码重构

* refactor: 微调 Tab 样式

* refactor: 更新样式

* refactor: bump version 9.5.0
2025-03-30 15:42:04 +08:00
Argo Zhang
34f1e9b372 feat(Mask): update opacity to 0.3 (#5747) 2025-03-29 17:27:46 +08:00
Argo Zhang
b0e63f8d8a chore(Action): update github action clean stale issue (#5744) 2025-03-29 10:25:31 +08:00
Argo Zhang
891895adae feat(DockView2): collapse panel to nearest edge (#5742)
bump version 9.1.9
2025-03-29 09:34:33 +08:00
Argo Zhang
10db77ba0d doc(Tab): update context menu documentation (#5741)
* doc: 更新 Tab 文档

* doc: Layout 文档更新
2025-03-28 17:28:10 +08:00
Argo Zhang
378e17b8a5 feat(Tab): add ShowContextFullScreenButton parameter (#5739)
* style: 微调 divider 间隙

* feat: 增加 ShowContextMenuFullScreen 参数

* feat: 增加 ContextMenuFullScreenIcon 参数

* feat: 增加全屏右键菜单

* revert: 更新文档

* test: 更新单元测试
2025-03-28 15:30:57 +08:00
Argo Zhang
97d9b30572 feat(Tab): add OnBeforeShowContextMenu parameter (#5737)
* refactor: 移动 Tab 右键菜单逻辑到内部

* doc: 更新示例

* refactor: 精简代码

* refactor: 代码格式化

* test: 更新单元测试

* refactor: 重构代码

* refactor: 整理代码顺序

* feat: 禁用标签页允许弹出右键菜单

* feat: 增加 OnBeforeShowContextMenu 回调方法

* doc: 更新示例

* doc: 更新说明文字

* test: 更新单元测试

* test: 更新单元测试

* test: 更新单元测试

* refactor: 重构代码

* test: 更新单元测试
2025-03-28 14:49:46 +08:00
Argo Zhang
3531e983a0 feat(Layout): add style for tab context menu (#5735) 2025-03-28 08:54:27 +08:00
Argo Zhang
32eb2b1bbe feat(Layout): add ShowTabContextMenu parameter (#5733)
* chore: 更新 header 描述信息

* refactor: Layout 组件增加 Tab 右键菜单

* refactor: 增加图标主题

* test: 更新单元测试
2025-03-27 19:25:30 +08:00
Argo Zhang
7ea1b4c1b3 feat(Table): add OverscanCount parameter (#5730)
* doc: 更新资源文件键值

* refactor: 更改变量可见性

* feat: 增加 OverscanCount 参数

* test: 更新单元测试

* test: 更新单元测试

* refactor: 代码格式化

* Revert "refactor: 代码格式化"

This reverts commit 35b74d6cd0.

* Revert "test: 更新单元测试"

This reverts commit f574004b7d.

* refactor: 代码格式化

* Revert "test: 更新单元测试"

This reverts commit 22d153fd49.

* Reapply "test: 更新单元测试"

This reverts commit 370c624fd3.

* Revert "refactor: 更改变量可见性"

This reverts commit 0c234b2bf2.

* refactor: 更新私有属性为私有变量
2025-03-27 17:39:37 +08:00
Argo Zhang
da29238a60 chore(editorconfig): add rule for scss (#5727) 2025-03-27 09:50:52 +08:00
Argo Zhang
e0e99e4dfb fix(Table): column list overflow when too many drop items are present (#5725)
* refactor: 代码格式化

* refactor: 增加滚动条
2025-03-27 09:49:04 +08:00
Argo Zhang
e8be200010 refactor(Table): throw exception when set IsTree to true in virtualize mode (#5723)
* refactor: 增加约束

* test: 更新单元测试
2025-03-26 18:55:20 +08:00
Argo Zhang
f99ad91b47 feat(Table): throw exception when set IsTree to true in virtualize mode (#5721)
* refactor: 更新变量名称

* refactor: 更新变量名称

* test: 更新单元测试
2025-03-26 18:31:12 +08:00
Argo Zhang
7af1d0e807 chore(Action): update action add any-of-labels config (#5720)
* refactor: 增加 any-of-labels 设置

* refactor: 更新标签
2025-03-26 12:57:15 +08:00
Argo Zhang
418263631e feat(Tab): add navigation hover style (#5718)
* chore: 更新依赖

* doc: 更新文档

* refactor: 更新服务

* chore: 移除 Baidu 语音服务

* revert: 撤销项目依赖更改

* Revert "refactor: 更新服务"

This reverts commit 5ceadcd308.

* Revert "chore: 移除 Baidu 语音服务"

This reverts commit 8fa835de4b.

* chore: 更新导出服务

* style: 调整 Chrome 模式下按钮样式

* doc: 增加等宽设置

* revert: 撤销样式更新

* refactor: 增加提示栏

* style: 更新样式

* style: 更新样式

* doc: 更新示例

* test: 更新单元测试

* refactor: 更正方法
2025-03-26 12:22:42 +08:00
Argo Zhang
4d5f9addf5 chore(Action): add auto close issue action (#5715)
* refactor: 移除不生效的 action

* chore: add new action

* chore: 更新执行周期
2025-03-25 16:27:17 +08:00
Argo Zhang
788723bf6b doc(DockView): add auto switch theme sample (#5713)
* refactor: 主题切换改为 JS 框架完成

* refactor: 重构代码

* refactor: 增加主题同步代码逻辑

* refactor: 异步支持

* refactor: 精简代码提高可读性

* refactor: 重构代码降低版本要求

* refactor: 增加 TriggerThemeChanged 事件响应

* revert: 撤销 ThemeMode 代码更改

* style: 更新 Dropdown 暗黑主题背景色

* revert: 撤销 Theme 设置

* chore: 更新依赖

* refactor: 重构代码
2025-03-25 13:24:12 +08:00
Argo Zhang
e1107ed1fc refactor(Dropdown): update dark style (#5711)
* style: 更新 Dropdown 暗黑主题背景色

* chore: bump version 9.4.12
2025-03-25 13:04:25 +08:00
Argo Zhang
2f7011ffee feat(Utility): add custom changed.bb.theme event (#5709)
* refactor: 主题切换改为 JS 框架完成

* refactor: 异步支持

* refactor: 精简代码提高可读性

* refactor: 重构代码降低版本要求
2025-03-25 12:52:03 +08:00
Argo Zhang
271311143e feat(IThemeProvider): add TriggerThemeChanged method (#5707)
* feat: 增加 TriggerThemeChanged 方法

* refactor: 实现 TriggerThemeChanged 逻辑

* test: 更新单元测试
2025-03-25 11:50:24 +08:00
Argo Zhang
8860c4bbe4 fix(DockView): theme parameter not work (#5705)
* feat: 增加 ThemeChangedAsync 回调方法

* doc: 增加样式切换逻辑

* refactor: 增加 IThemeProvider 联动

* doc: 增加描述

* refactor: 移除更新 Pre 组件主题代码提高可读性

* refactor: 增加主题联动功能

* doc: 更新 DockView 主题切换功能

* test: 更新单元测试
2025-03-24 20:19:40 +08:00
Argo Zhang
7d4606e311 feat(Layout): support TabStyle/ShowToolbar parameter (#5703)
* refactor: Layout 集成 Tab 新属性

* refactor: 微调 z-index 值

* test: 更新单元测试

* chore: bump version 9.5.0-beta15
2025-03-24 13:00:29 +08:00
Argo Zhang
ab863809ce feat(Tab): trim value/text (#5701)
* refactor: 移除空格

* doc: 更正示例
2025-03-23 15:36:13 +08:00
Argo Zhang
76d63c8b5d feat(Tab): add Refresh method (#5699)
* style: 更新样式

* refactor: 增加 Refresh 方法

* doc: 增加右键菜单刷新示例

* refactor: 重构代码

* test: 更新单元测试

* chore: bump version 9.5.0-beta13
2025-03-23 15:10:19 +08:00
Argo Zhang
d95dca4cc0 feat(Tab): support context menu (#5697)
* feat: 增加右键支持

* doc: 更新示例

* doc: 更新示例

* test: 更新单元测试

* test: 更新单元测试

* chore: bump version 9.5.0-beta12
2025-03-23 12:22:03 +08:00
Argo Zhang
b5fbcfd101 feat(Tab): add OnToolbarRefreshCallback parameter (#5696)
* feat: 增加 OnToolbarRefreshCallback 回调方法

* doc: 更新文档

* doc: 增加刷新按钮回调方法文档说明

* doc: 更新文档

* refactor: 更新  TooltipTrigger 值为 hover
2025-03-23 11:34:26 +08:00
Argo Zhang
cbcfba4611 feat(Tab): add ToolbarTemplate parameter (#5694)
* feat: 增加 ToolbarTempalte 参数

* test: 更新单元测试

* refactor: 增加 TabToolbarButton 组件

* style: 更新样式

* feat: 支持 Tooltip 功能

* doc: 更新示例

* feat: 支持 Placement 参数

* doc: 更新示例文档

* test: 更新单元测试
2025-03-23 01:08:35 +08:00
Argo Zhang
7253bc49a5 feat(Calendar): add FirstDayOfWeek parameter (#5692)
* refactor: 代码重构

* feat: 增加 FirstDayOfWeek 参数

* doc: 更新示例

* doc: 增加参数文档

* chore: bump version 9.4.11

* test: 增加单元测试
2025-03-22 20:29:13 +08:00
Argo Zhang
89e944c99c feat(Tab): add ShowToolbar parameter (#5691)
* refactor: 更新方法名称

* refactor: 更新方法名称提高可读性

* refactor: 增加样式防止溢出

* style: 更新样式

* refactor: 增加 Toolbar 功能

* doc: 更新示例

* feat: 增加刷新按钮

* doc: 更新示例

* chore: 更新 Icon 依赖包

* refactor: 更新刷新按钮图标

* feat: 实现刷新逻辑

* doc: 更新注释

* refactor: 代码重构

* refactor: 更新 TabItem Body 渲染逻辑

* refactor: 精简代码

* test: 更新单元测试

* style: 调整样式

* chore: bump version 9.5.0-beta11
2025-03-22 20:05:35 +08:00
Argo Zhang
b7ec338d38 chore(Action): add label check and auto close action (#5688) 2025-03-22 09:47:25 +08:00
Argo Zhang
593a41135f feat(Tab): improve AllowDrag function (#5684)
* refactor: 更新样式

* refactor: 精简代码统一 DOM 结构

* refactor: 更改 DOM 操作节点

* refactor: 精简代码

* refactor: 移除 active 冗余样式

* doc: 更新示例

* refactor: 更新拖动控制逻辑
2025-03-21 23:58:30 +08:00
Argo Zhang
5e0ea8f638 feat(MultiSelect): add DefaultVirtualizeItemText parameter (#5682)
* feat: 增加 DefaultVirtualizeItemText  方法

* doc: 更新示例

* test: 更新单元测试

* revert: 撤销文档更新

* doc: 更新参数注释文档

* chore: bump version 9.5.0-beta10
2025-03-21 20:22:44 +08:00
Argo Zhang
9c752c8f4f test(Select): update unit test (#5680) 2025-03-21 17:00:30 +08:00
Argo Zhang
629848264a revert(Select): add DefaultVirtualizeItemText parameter (#5678)
* 上传例子

* refactor: 增加 DefaultVirtualizeItemText 参数

* refactor: 代码重构提高可读性

* test: 增加单元测试

* test: 更新单元测试

* revert: 撤销更改

* test: 增加单元测试

* doc: 撤销更新

---------

Co-authored-by: Diego <2248356998@qq.com>
2025-03-21 16:37:35 +08:00
Argo Zhang
e90bfb6c5d test(AutoFill): update test improve code coverage (#5675)
* test: 更新单元测试

* feat(TreeView): 增加 OverscanCount 支持

* doc: 更新默认值

* chore: bump version 9.4.10

* refactor: 更新默认值判断逻辑

* refactor: 重构方法名称

* test: 更新单元测试

* doc: 文档格式化
2025-03-21 11:56:48 +08:00
Argo Zhang
e6d3a6a786 feat(TreeView): add OverscanCount parameter (#5673)
* test: 更新单元测试

* feat(TreeView): 增加 OverscanCount 支持

* doc: 更新默认值

* chore: bump version 9.4.10
2025-03-21 11:14:49 +08:00
Argo Zhang
acb3c9e2fd refactor(AutoFill): prevent jitter when mouse scrolling too fast (#5670)
* refactor: 更新示例

* refactor: 更新 dom 使用 div

* refactor: 修复 offset 失效问题

* refactor: 更新样式

* refactor: 更新样式

* refactor: 更新清空逻辑

* refactor: 增加占位符样式

* perf: 提高性能

* chore: bump version 9.5.0-beta09
2025-03-20 15:38:38 +08:00
Argo Zhang
1e1454ac2e fix(DateTimeRange): should close popup after click confirm button (#5668)
* refactor: 增加关窗逻辑

* refactor: 精简代码

* chore: bump version 9.5.0-beta08

* refactor: 修复清空按钮不关窗问题
2025-03-20 11:06:08 +08:00
Argo Zhang
4f9e787d33 feat(AutoFill): add IsVirtulize parameter (#5664)
* refactor: 重构代码消除警告信息

* doc: 文档更改为英文注释

* feat: 增加 IsVirtualize 参数

* style: 精简样式

* refactor: 增加阴影效果

* refactor: 移除 IsFixedSearch 参数

* test: 更新单元测试

* refactor: 移除 IsFixedSearch 参数

* test: 更新单元测试

* doc: 更新默认值

* refactor: 移除 IsFixedSearch 参数

* refactor: 标注已弃用

* test: 更新单元测试

* doc: 更新示例

* doc: 更新文档注释

* doc: 增加示例

* feat: 增加虚拟化功能

* refactor: 增加 CloseButtonIcon 图标参数

* refactor: 更新图标

* test: 更新单元测试

* refactor: 移除不使用的命名空间

* refactor: 微调搜索图标位置

* refactor: 增加虚拟化逻辑

* doc: 增加示例文档

* doc: 增加虚拟化参数文档

* doc: 增加参数注释文档

* feat: 增加 IsClearable 支持

* refactor: 增加样式

* doc: 更新示例

* test: 更新单元测试

* chore: bump version 9.5.0-beta06

* test: 更新单元测试

* doc: 移除 IsFixedSearch 相关文档

* test: 更新单元测试

* chore: bump version 9.5.0-beta07

* revert: 移除样式
2025-03-20 09:17:35 +08:00
Argo Zhang
c2a7708e3c doc(IsFixedSearch): remove IsFixedSearch documentation (#5666)
* refactor: 移除不使用的命名空间

* refactor: 微调搜索图标位置

* doc: 增加虚拟化参数文档

* doc: 增加参数注释文档

* refactor: 增加样式

* doc: 移除 IsFixedSearch 相关文档
2025-03-20 09:13:42 +08:00
Argo Zhang
eee71142aa feat(MultiSelect): add CloseButtonIcon parameter (#5662)
* refactor: 增加 CloseButtonIcon 图标参数

* refactor: 更新图标

* test: 更新单元测试

* chore: bump version 9.5.0-beta05
2025-03-19 16:10:56 +08:00
Argo Zhang
e71371946c refactor(Select): remove IsFixedSearch parameter (#5660)
* refactor: 移除 IsFixedSearch 参数

# Conflicts:
#	src/BootstrapBlazor/Components/Select/SelectBase.cs

* test: 更新单元测试

* doc: 更新默认值

* refactor: 移除 IsFixedSearch 参数

* refactor: 标注已弃用

* test: 更新单元测试

* doc: 更新示例

* doc: 更新文档注释
2025-03-19 15:46:49 +08:00
Argo Zhang
2c5f7e47a4 refactor(TreeView): remove IsFixedSearch parameter (#5658)
* refactor: 移除 IsFixedSearch 参数

* test: 更新单元测试
2025-03-19 15:08:50 +08:00
Argo Zhang
7921a8a112 fix(Textarea): should trigger keyboard event when set UseShiftEnter to false (#5656)
* fix(Textarea): should trigger enter keyboard event

* chore: bump version 9.5.0-beta04

Co-Authored-By: bob9307 <10083842+bob9307@users.noreply.github.com>

---------

Co-authored-by: bob9307 <10083842+bob9307@users.noreply.github.com>
2025-03-19 10:46:43 +08:00
Argo Zhang
08b8d60b0e refactor(MultiSelect): support ShowToolbar parameter when set ShowSearch to true (#5655)
* refactor: 增加检查是否显示搜索栏方法

* refactor: 工具栏调整到搜索栏下方

* style: 微调搜索栏工具栏样式

* doc: 更新默认值

* chore: 更新依赖

* chore: bump version 9.5.0-beta03

* doc: 增加参数文档注释

* test: 更新单元测试
2025-03-19 10:29:48 +08:00
Argo Zhang
366c830404 feat(MultiSelect): add IsVirtualize parameter (#5652)
* refactor: multi-select 支持虚拟滚动

* doc: 更新示例

* refactor: 增加固定搜索功能

* doc: 更新示例

* refactor: 清除缓存

* refactor: 更新数据初始化逻辑

* doc: 更新示例

* refactor: 增加 cls 样式

* style: 调整样式

* refactor: 移除重复参数

* test: 更新单元测试

* refactor: 更新 Clear 图标

* test: 更新单元测试

* test: 增加单元测试

* test: 增加单元测试

* test: 增加单元测试

* doc: 更新示例

* Revert "refactor: 更新 Clear 图标"

This reverts commit eebd3c4a76.

* feat: 增加 ClearableIcon 参数

* test: 增加单元测试

* doc: 更新文档

* doc: 更新文档注释

* style: 更新样式

* refactor: 移动方法到基类

* refactor: 重构 OnClearValue 方法

* test: 更新单元测试

* refactor: 移动到基类

* refactor: 移动 _virtualizeElement 到基类

* refactor: 移动方法到基类

* refactor: 更新虚拟滚动逻辑

* refactor: 移动 IsEditable 到基类

* doc: 增加注释

* refactor: 移动到基类

* refactor: 移动到基类

* refactor: 移动到基类

* refactor: 复用代码

* refactor: 更改为虚类

* refactor: 移除 DefaultVirtualizeItemText 参数

* test: 更新单元测试

* chore: bump version 9.5.0-beta02
2025-03-18 21:10:49 +08:00
Argo Zhang
9f1df2b11f feat(MultiSelect): redesign IsFixedSearch function (#5651)
* refactor: IsFixedSearch 移动到基类

* doc: 代码规范化

* fix: 重构固定搜索栏功能

* doc: 更新示例

* test: 更新单元测试

* refactor: 移动 DropdownMenuClassString 到基类

* refactor: 改造 SelectGeneric 组件适配 IsFixedSearch 功能

* test: 更新单元测试

* refactor: 精简代码

* doc: 更新示例
2025-03-18 12:17:21 +08:00
Argo Zhang
3a7ffe4c7c feat(TreeViewToolbarEditButton): add Icon parameter (#5647)
* feat(TreeViewToolbarEditButton): add Icon parameter

* chore: bump version 9.5.0-beta01
2025-03-17 10:35:19 +08:00
Argo Zhang
4d0f444b89 doc(Tab): update document as english (#5644)
* chore: 更新依赖包

* doc: 使用英文注释

* doc: 注释更改为英语

* doc: 注释更改为英语
2025-03-16 20:01:25 +08:00
Argo Zhang
d212ea657f feat(Tab): add Capsule style (#5642)
* feat: 增加 Capsule 模式

* doc: 更新文档

* doc: 更新示例描述文字

* test: 更新单元测试

* chore: bump version 9.4.9

* style: 精简样式
2025-03-16 19:41:30 +08:00
Argo Zhang
8518bf8fa1 feat(Tab): add TabStyle parameter (#5640)
* feat: 增加 IsChromeStyle 参数

* refactor: 调整禁用逻辑禁用后不允许 active 样式

* style: 重构样式

* refactor: 增加 tabs-chrome 样式

* refactor: 调整样式

* doc: 增加示例文档

* refactor: 增加 TabStyle 参数

* doc: 更新文档

* doc: 更新参数文档

* test: 更新单元测试

* refactor: 增加 Placement 参数限制

* doc: 更新文档

* test: 更新单元测试

* doc: 更新示例

* style: 调整样式

* style: 更新样式

* style: 更新样式

* style: 更新样式
2025-03-16 17:27:26 +08:00
Argo Zhang
ab74cb4be7 doc(Select): update documentation (#5638)
* refactor: 重构组件变量改用私有字段

* refactor: 文档注释更改英文

* chore: bump version 9.4.9-beta09

Co-Authored-By: trycatchfinnally <37445968+trycatchfinnally@users.noreply.github.com>

---------

Co-authored-by: trycatchfinnally <37445968+trycatchfinnally@users.noreply.github.com>
2025-03-16 11:17:42 +08:00
Argo Zhang
7ac44fbf69 feat(IEditorItem): add IsFixedSearchWhenSelect parameter (#5636)
* refactor: 增加 IsFixedSearchWhenSelect 参数

* doc: 文档翻译

* refactor: 增加 IsFixedSearchWhenSelect 参数支持

* test: 更新单元测试

* chore: bump version 9.4.9-beta08

Co-Authored-By: BBFish <135418544+newwebfish@users.noreply.github.com>

---------

Co-authored-by: BBFish <135418544+newwebfish@users.noreply.github.com>
2025-03-15 12:49:55 +08:00
Argo Zhang
d8336a6418 refactor(Select): redesign IsFixedSearch UI layout (#5635)
* doc: 更新参数文档

* doc: 更新文档注释

* doc: 更改为英语注释

* refactor: 重构固定搜索栏样式

* doc: 更新 IsFixedSearch 示例

* refactor: 增加 ShowSearch 条件

* test: 更新单元测试
2025-03-15 12:14:59 +08:00
trycatchfinnally
434f507f81 feat(Select): redesign IsClearable function (#5626)
* 对Select组件进行修改,设置IsClearable后,如果绑定类型可以为空,清除后清楚所有选中项而不是第一项

* 修复yige bug

* refactor: 更新可为空逻辑

* test: 更新单元测试

* doc: 更新示例

* refactor: 增加 readonly 关键字

* test: 更新单元测试

* test: 更新单元测试

* refactor: 重置 SelectedItem

* doc: 更新示例

* doc: 更新示例

* test: 增加不可为空整形设置 IsClearable 单元测试

---------

Co-authored-by: T1246 <T1246@XL>
Co-authored-by: Argo Zhang <argo@live.ca>
2025-03-15 11:07:44 +08:00
Alex chow
d32b60462f revert(Dialog): revert InvokeAsync StateHasChanged (#5632)
* 修复异步调用 StateHasChanged() 出错

* chore: bump version 9.4.9-beta07

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-03-15 10:11:53 +08:00
Argo Zhang
79fce04d91 feat(TreeView): add ShowToolbar parameter (#5628)
* doc: 文档注释更改为英文

* doc: 更新文档注释

* wip: 临时提交

* feat: 增加 TreeViewToolbar 组件

* refactor: 增加渲染逻辑

* refactor: 重构逻辑

* refactor: 增加 RenderToolbar 方法

* refactor: 代码重构

* refactor: 重构 TreeViewToolbar 组件

* fix(PopConfirmButton): 修复开启 Title 后弹窗 UI 不正常问题

* doc: 更新资源文件

* feat: 增加 TreeViewToolbar 组件

* feat: 增加 TreeViewRow 组件提高性能

* feat: 使用 TreeViewRow 组件重构

* refactor: 重构代码

* refactor: 更新逻辑

* style: 增加内置模板样式

* refactor: 更新 OnUpdateCallbackAsync 逻辑

* refactor: 更改为 ToolbarEditButton 组件

* doc: 更新示例文档

* refactor: 增加 NodeIcon ExpandNodeIcon 参数

* doc: 格式化

* refactor: 更改为属性

* refactor: 增加 OnCheckStateChanged 回调方法

* refactor: 更改逻辑判断条件

* test: 增加单元测试

* test: 增加 OnUpdateCallbackAsync 单元测试

* refactor: 判断空条件

* test: 增加单元测试

* refactor: 增加扩展方法提高代码复用

* refactor: 增加 LoadingIcon 参数设置

* doc: 更新文档

* doc: 移除不使用的参数

* doc: 代码格式化
2025-03-14 17:16:05 +08:00
Argo Zhang
ce8eecd9fd fix(PopConfirmButton): missing popup header when enable title (#5625) 2025-03-14 12:19:32 +08:00
Argo Zhang
9d9e8e1f72 doc(Introduction): update intro documentation (#5623)
* doc(Introduction): update document of Intro

* doc: 更新文档
2025-03-13 14:13:03 +08:00
Argo Zhang
2dbddb9af4 test(ModalSettings): addd unit test (#5621) 2025-03-13 14:11:41 +08:00
Argo Zhang
8178e81c71 feat(ModalSettings): add ModalSettings on BootstrapBlazorOptions (#5619)
* feat: 增加 ModalSetings 配置类

* doc: 更新文档注释

* feat: 增加 IsFade 取值逻辑

* refactor: 增加 IsFade 参数

* refactor: 更新 IsFade 逻辑

* chore: bump version 9.4.9-beta06
2025-03-13 12:53:46 +08:00
Argo Zhang
fd92ad9356 fix(Modal): add show style in multiple dialog mode (#5617)
* doc: 代码格式化

* refactor: 增加缺失样式
2025-03-13 12:21:52 +08:00
Argo Zhang
f8203158f8 feat(BootstrapLabel): add form-label-tooltip when enable ShowLabelTooltip (#5615)
* refactor: 表单内 Label 提示框增加样式 form-label-tooltip

* style: 增加自适应样式

* chore: bump version 9.4.9-beta05
2025-03-13 10:49:29 +08:00
Ethan Lee
0bab5a6b08 fix(Textarea): adding new functionality to handle Shift + Enter (#5611)
* fix(keyup): prevent modifier key combinations from triggering Enter callback

- Add `hasNoModifiers` helper to check for Ctrl/Shift/Alt/Meta keys
- Update Enter key handling in `handleKeyUp` to ignore modifier combinations
- Retain existing Escape key logic

* doc: 更改注释为英文

* doc: 更新注释为英语

* refactor: 更新逻辑

* revert: 重置代码

* refactor: 使用 js 解决问题保证效率

* doc: 移除不使用的命名空间

* chore: bump version 9.4.9-beta04

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-03-13 09:47:50 +08:00
Argo Zhang
2cf8af4856 doc(Readme): update component readme (#5608)
* doc: 更新组件 nuget readme 文档

* doc: 微调颜色
2025-03-12 11:25:08 +08:00
Argo Zhang
6b4b5ae07f doc(Readme): update content of readme (#5606)
* doc: 更新 readme 文档

* doc: 更正单词拼写错误
2025-03-12 10:30:38 +08:00
Argo Zhang
4cafa4e8fb doc(Translation): translate comments and documentation from Chinese to English (#5604)
* refactor: 文档注释更改为英语

* doc: 更新文档注释

* doc: 文档注释更改为英文

* doc: 文档注释更改为英文

* doc: 更新文档注释

* test: 更新单元测试
2025-03-12 10:28:10 +08:00
Argo Zhang
88e446f54c doc(SourceCodePath): add SourceCodePath configuration section (#5602) 2025-03-11 11:40:14 +00:00
Argo Zhang
c35a0a9573 perf(ErrorLog): improving the error handling logic (#5600)
* refactor: 优化逻辑接管后内部不再弹出 Toast

* test: 更新单元测试
2025-03-11 18:26:58 +08:00
Argo Zhang
58f8ea83d5 chore(Deploy): update deploy script (#5598) 2025-03-11 16:24:19 +08:00
Argo Zhang
809ede21b4 refactor(Modal): use BootstrapBlazorRootOutlet wrap Modal component (#5595)
* Revert "doc(Layout): remove man z-index attribute (#5540)"

This reverts commit 096dc3f7e8.

* refactor: 移除 InvokeAsync 包裹

* refactor: 支持多个 provider 逻辑

* refactor: 使用 BootstrapBlazorRootContent 更改位置

* refactor: 重构 Swal 组件

* refactor: 更新文档注释

* doc: 更新文档注释

* refactor: 增加扩展属性

* style: 增加样式防止多层弹窗导致背景色加深

* refactor(Swal): 增加 swal 样式

* test: 更新单元测试

* test: 更新单元测试

* test: 更新单元测试

* test: 更新单元测试
2025-03-10 19:39:22 +08:00
Argo Zhang
950d7b4615 doc(Template): remove vsix extension documetation (#5593) 2025-03-10 19:34:22 +08:00
Argo Zhang
9dc043178d feat(Tab): display error information in a dialog (#5590)
* refactor: 增加异常对话框扩展方法

* chore: 更改为弹窗显示异常信息

* test: 更新单元测试
2025-03-10 14:25:28 +08:00
Argo Zhang
745c99f3c6 feat(Memorial): add Memorial Mode (#5584)
* style: memorial mode

* refactor: 撤销格式化

* refactor: 撤销格式化

* doc: 更改注释为英文

* feat: 增加 IsMemorialMode 参数

* style: 增加追悼样式

* doc: 更新注释

* feat: 增加 setMemorialMode 方法

* doc: 增加追悼模式实战网页

* doc: 更新文档

* doc: 移除主题菜单

* test: 增加单元测试
2025-03-09 14:38:25 +08:00
Argo Zhang
b25e6fb015 chore(Template): update pull request template (#5586) 2025-03-09 14:38:07 +08:00
Argo Zhang
e837415d92 chore(Script): downgrade script syntax (#5582)
* feat: 增加 calcCenterPosition 工具方法

* refactor: 更新样式

* chore: 更新依赖包

* refactor: 脚本降级改用 || 符号

* chore: bump version 9.4.9-beta03
2025-03-09 09:55:02 +08:00
Argo Zhang
74afda14dc refactor(ThemeMode): update view-transition style (#5580)
* feat: 增加 calcCenterPosition 工具方法

* refactor: 更新样式
2025-03-09 09:52:15 +08:00
Argo Zhang
edfdbe1aad chore(Script): downgrade script syntax (#5578)
* refactor: update ??= to ||=

* refactor: 移除 ??= 表达式

* refactor: 移除 ?. 表达式

* refactor: 精简代码

* refactor: 重构代码
2025-03-08 13:08:44 +08:00
Argo Zhang
ba03facc9b fix(Search): network delay causes input lag (#5576)
* refactor: 提炼 BootstrapBlazorRender 组件

* refactor: 适配网络卡顿

* refactor: 移除 BootstrapBlazorRender 组件使用 RenderTemplate 代替

* refactor: 代码格式化

* doc: 增加 Clear 处理逻辑

* chore: bump version 9.4.9-beta02
2025-03-08 12:39:02 +08:00
celadaris
def8f94d6c fix(AutoComplete): network delay causes input lag (#5555)
* update

After testing live, i could still see problems, less when using OnBlurAsync but it was more noticeable in OnValueChanged.

These changes address the core issue where the input text was being overwritten by stale data from older asynchronous operations. The dual approach (both C# and JavaScript checks) provides protection against race conditions. Even if one side fails, the other will catch it.

* update

switched SpinLock to SemaphoreSlim

* re-design

This should work better under bad network conditions

* refactor: 增加 DropdownMenu 组件

* refactor: 更新下拉框组件

* refactor: 重构代码封装 AutoCompleteItem 组件

* chore: bump version 9.4.9-beta01

* revert: 移除更改

* revert: 重构代码

* revert: 撤销更改

* doc: 更新注释

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-03-08 08:44:10 +08:00
Argo Zhang
1ac25d9a6c revert(ListView): remove scroll class (#5573)
* revert: 撤销 scroll 样式

* chore: bump version 9.4.8
2025-03-07 22:33:57 +08:00
Argo Zhang
fd9920eb16 fix(DateTimePicker): confirm button not work when set mode to DateTime (#5572)
* refactor: 移除 dismiss 按钮事件处理

* chore: bump version 9.4.8

* Revert "chore: bump version 9.4.8"

This reverts commit cc4340203d.
2025-03-07 20:38:12 +08:00
Argo Zhang
d44c29f01a doc(DialButton): add custom style (#5570) 2025-03-07 16:47:31 +08:00
Argo Zhang
97e83a5b1b doc(BootstrapIcon): mssing add bi-rotate-315 style (#5568)
bump version 9.0.1
2025-03-07 15:27:48 +08:00
Argo Zhang
523dadad25 doc(Icons): add click to copy to clipboard function (#5566)
* refactor: 更新基类

* doc: 更新多语言资源文件

* refactor: 更改基类名称
2025-03-07 15:19:42 +08:00
Argo Zhang
6ece18bcba doc(Icons): a comprehensive list of Icons (#5564)
* doc: 更新 Oct 图标列表

* doc: 移除样式

* chore: 更新 OctIcon 包

* doc: 增加 ant 图标列表

* doc: 增加 Element 列表

* doc: 增加 IconPark 图标列表

* doc: 增加图标列表功能

* style: 字节跳动图标大小更改为 16px

* chore: 更新图标包

* doc: 移除打包样式引用代码

* refactor: 调整目录结构

* refactor: 增加鼠标选中脚本框架

* feat: 增加拷贝逻辑
2025-03-07 14:41:40 +08:00
Argo Zhang
815207c015 chore(Template): update PR template (#5559) 2025-03-07 10:28:13 +08:00
Argo Zhang
6d8ca20f79 feat(UniverIcon): add UniverIcon component (#5557)
* doc: 增加 UniverIcon 组件

* doc: 更新本地化资源文件

* chore: 增加 UniverIcon 依赖包

* doc: 增加 UniverIcon 菜单

* doc: 增加菜单多语言支持

* chore: 更新包

* refactor: 微调样式

* refactor: 增加 IconLayout 母版页

* doc: 更新样式表路径

* test: 更新单元测试
2025-03-07 10:25:57 +08:00
Argo Zhang
dbe0b7e332 doc(Search): add ShowClearButton parameter (#5554) 2025-03-06 19:22:54 +08:00
Argo Zhang
8c86ed9f8f refactor(BootstrapBlazorRoot): support nested usage (#5552)
* refactor: 兼容 Root 多层嵌套

* test: 更新单元测试

* doc: 更新注释

* chore: bump version 9.4.7
2025-03-06 19:22:25 +08:00
Argo Zhang
d7e68cd05a doc(Editor): update jQuery script vesion to 3.6.0 (#5550) 2025-03-06 09:34:32 +00:00
Argo Zhang
82c936c097 refactor(Modal): remove dialog variable (#5549)
* refactor: 更新脚本

* refactor: 删除冗余代码

* doc: 更新示例

* chore: bump version 9.4.7-beta04
2025-03-06 16:01:05 +08:00
Argo Zhang
f93cb6fd41 refactor(Modal): add back/restoreBodyStyle function (#5544)
* refactor(Modal): keep body original style

* chore: bumpversion 9.4.7-beta03

* refactor: 重构代码
2025-03-06 06:18:37 +00:00
Argo Zhang
1381afe91e refactor(Modal): keep document original style (#5542)
* refactor(Modal): keep body original style

* chore: bumpversion 9.4.7-beta03
2025-03-06 14:08:20 +08:00
Argo Zhang
096dc3f7e8 doc(Layout): remove man z-index attribute (#5540) 2025-03-06 05:35:39 +00:00
Argo Zhang
f5ce1d0853 fix(Modal): styles remain when modal are destroyed (#5538)
* refactor: 增加 Modal 销毁时关闭弹窗逻辑

* chore: bump version 9.4.7-beta02
2025-03-06 12:55:04 +08:00
Argo Zhang
247e186bed chore(Template): add release branch support (#5534)
* chore: 增加 release 分支支持

* doc: 脚本格式化

* doc: rename bug to issue
2025-03-06 11:21:36 +08:00
celadaris
e54e37bbf8 refactor(AutoComplete): improved the TriggerChange/TriggerFilter method to update CurrentValue (#5531)
* Update AutoComplete.razor.cs

fixes the same problem I was having in issue #5110

* chore: bump version 9.4.7-beta01

* doc: update comment to english

---------

Co-authored-by: Argo Zhang <argo@live.ca>
2025-03-06 08:41:35 +08:00
Argo Zhang
5ddb33daa6 fix(Table): add IsAutoInitializeModelProperty parameter control create instance logic (#5530)
* feat: 增加 IsAutoInitializeModelProperty 参数

* chore: bump version 9.4.6

* test: 增加单元测试

* refactor: 更新方法名

* test: 更新单元测试

* test: 更新单元测试

* refactor: 精简代码
2025-03-05 19:40:46 +08:00
Argo Zhang
ab8e2886b1 refactor(registerBootstrapBlazorModule): reset init field when items is empty (#5528)
* fix: 修复 id 为空后无法重新注册问题

* chore: bump version 9.4.5
2025-03-05 17:31:12 +08:00
Argo Zhang
486c0e5b86 doc(Layout): relayout z-index value (#5525) 2025-03-05 08:39:38 +00:00
Argo Zhang
858755a789 perf(IFrame): improve performance and reduce rendering time (#5522)
* feat: 优化性能减少因此数据推送

* refactor: 更改文档注释为英语

* refactor: 更新渲染逻辑

* chore: bump version 9.4.5

* chore: bump version 9.4.5-beta01
2025-03-05 14:21:00 +08:00
Argo Zhang
7223483a67 chore(Template): update pull request template (#5520) 2025-03-05 10:07:32 +08:00
Argo Zhang
39c42d403f feat(DialogOption): add IsFade parameter (#5518)
* doc: 文档注释更新为英语

* refactor: 增加 IsFade 参数

* refactor: 增加 IsFade 参数支持

* test: 更新单元测试

* test: 更新单元测试

* chore: bump version 9.4.4

* refactor: 重构代码
2025-03-05 10:05:46 +08:00
Argo Zhang
28a9d85548 refactor(UniverSheet): update version prevent throw exception when data is null (#5516) 2025-03-05 01:17:38 +00:00
Argo Zhang
9907228617 fix(Collapse): handle accordion mode by collapsing other items when one is expanded (#5514)
* refactor: Pageable 更改为 IsPagination

* feat: 支持 IsTriggerByPagination 参数

* test: 更新单元测试

* doc: 更新文档注释

* refactor: 更新 PageIndex 默认值

* test: 更新单元测试

* refactor: 更新变量名

* refactor: 代码格式化

* fix: 修复手风琴模式逻辑错误

* refactor: 精简代码提高性能

* test: 更新单元测试

* refactor: 重构代码
2025-03-04 19:37:25 +08:00
Argo Zhang
929214dd15 feat(ListView): support IsTriggerByPagination parameter (#5513)
* refactor: Pageable 更改为 IsPagination

* feat: 支持 IsTriggerByPagination 参数

* test: 更新单元测试

* doc: 更新文档注释

* refactor: 更新 PageIndex 默认值

* test: 更新单元测试
2025-03-04 15:58:03 +08:00
Argo Zhang
91eebc21c6 refactor(LayoutSplitebar): Enhanced javascript handle sidebar width is not set (#5512)
* refactor: 更新变量类型

* refactor: 删除重复组件

* refactor: 更新脚本逻辑

* refactor: 优化逻辑
2025-03-04 07:12:44 +00:00
Argo Zhang
27f8299197 doc(OnlineSheet): add OnlineSheet sample code (#5510)
* doc: 增加在线协作示例

* refactor: 增加协作者后台服务

* doc: 增加在线协作示例菜单

* chore: 更新依赖

* doc: 增加分隔栏
2025-03-04 06:48:26 +00:00
Argo Zhang
e7156e980e doc(UniverSheet): update sample code (#5502)
* doc: 增加保存按钮示例

* chore: 增加推送报表示例

* doc: 更新报表模板

* doc: 更新多语言文件

* feat: 增加保存文档示例

* refactor(Textarea): 重构代码

* refactor: 清空其他单元格

* refactor: 重构代码

* chore: 更新依赖包
2025-03-03 12:23:41 +00:00
Argo Zhang
b58502b899 refactor(Textarea): rename private property (#5504) 2025-03-03 12:17:09 +00:00
Argo Zhang
0c19d83d9e refactor(AutoComplete): redesign blur logic (#5499)
* refactor: 重构销毁方法位置

* refactor: 增加 triggerBlur 方法

* refactor: 增加 menu 点击事件
2025-03-03 13:14:10 +08:00
Argo Zhang
98115a97d7 refactor(BootstrapBlazorModule): use registerBootstrapBlazorModule refactor component (#5497)
* refactor: 重构全局脚本

* refactor: 增加销毁逻辑

* refactor: 重构脚本精简代码

* refactor: base-popover 重构代码

* refactor: registerBootstrapBlazorModule 重构精简外面代码

* refactor: 精简代码

* refactor: 精简代码

* refactor: 精简代码

* refactor: 精简代码

* refactor: 精简代码

* refactor: 精简代码

* refactor: 增加参数检查

* refactor: 精简代码
2025-03-03 12:13:59 +08:00
Argo Zhang
d3f3b378e4 refactor(DialButton): use registerBootstrapBlazorModule simplify code (#5495) 2025-03-02 06:48:15 +00:00
Argo Zhang
322a21ddaf chore(Template): insert blank line (#5493) 2025-03-02 06:36:32 +00:00
Argo Zhang
ea40445bd8 feat(ObjectExtensions): add CreateInstanceWithCascade extension method (#5491)
* refactor: 精简代码

* refactor: 使用模式重构代码

* doc: 更新注释文档

* feat: 增加 EnsureInitialized 扩展方法

* feat: 调用 EnsureInitialized 方法

* refactor: 增加扩展方法

* refactor: 兼容属性为类时未初始化问题

* refactor: 代码重构

* refactor: 更新代码

* chore: bump version 9.4.3-beta04

* refactor: 更正单词拼写
2025-03-02 14:24:29 +08:00
Argo Zhang
16eabff96b chore: upadate summary copilot position (#5489) 2025-03-02 10:45:43 +08:00
Argo Zhang
5b6fb3b81b feat(registerBootstrapBlazorModule ): add registerBootstrapBlazorModule in utility (#5487)
* refactor: 增强 deepMerge 功能

* refactor: 增加 registerBootstrapBlazorModule 方法

* refactor: 精简代码

* refactor: 增加返回值减少代码

* refactor: 精简代码

* refactor: 精简代码
2025-03-02 10:45:17 +08:00
Argo Zhang
291eb63518 fix(AutoComplete): trigger OnValueChanged when the Value changed (#5485)
* refactor: 移除不使用的变量

* refactor: 精简代码逻辑

* fix: 增加 change 销毁事件

* refactor: 增加 Value 更新逻辑

* chore: bump version 9.4.3-beta03
2025-03-02 09:49:41 +08:00
Argo Zhang
38dc157823 doc(ThemeChooser): update ThemeChooser component use BootstrapBlazorRootContent (#5484)
* doc: 使用 BootstrapBlazorRootContent 重构样式选择组件

* refactor: 更新样式选择弹窗脚本
2025-03-01 17:27:02 +00:00
Argo Zhang
90d11d3ffb feat(BootstrapBlazorOutlet): add BootstrapBlazorOutlet component (#5482)
* feat: 增加 RootOutlet/Content 组件

* feat: 增加 RootOutlet 组件

* refactor: Outlet/Content 组件

* feat: 增加 BootstrapBlazorRootRegisterService 服务

* test: 增加单元测试

* test: 增加单元测试
2025-03-02 01:21:40 +08:00
Argo Zhang
c543845cbb chore(Template): update summary title (#5478) 2025-03-01 03:16:59 +00:00
Argo Zhang
53e11b8a44 fix(AutoComplete): trigger onBlur when clicking outside (#5476)
* fix(AutoComplete): should trigger onBlur when click body

* chore: bump version 9.4.3-beta02

* perf: 优化性能

* refactor: Esc 优化性能

* refactor: 更新 blur 事件

* refactor: Search 组件更新

* refactor: 精简逻辑代码

* refactor: 移除 menu click 提高性能
2025-03-01 03:14:14 +00:00
Argo Zhang
88ca87b7e7 fix(AutoComplete): OnEnterAsync/OnEscAsync not work (#5474)
* refactor: 代码重构

* refactor: support Enter/Esc key event

* chore: bump version 9.4.3-beta01
2025-02-28 16:59:29 +00:00
Argo Zhang
51f0063b1b chore(PR): update Pull Request template (#5473)
* chore(PR): udpate pull request template

* refactor: 更新章节
2025-03-01 00:34:24 +08:00
Argo Zhang
b4c8c6872c feat(ModalDialog): add constraints between parameters (#5471)
* refactor: 增加文档注释

* feat: 增加参数约束逻辑

* test: 更新单元测试
2025-03-01 00:29:10 +08:00
Argo Zhang
8eb9f049e2 doc(WebSite): update gear button document (#5469)
* doc: update release note link

* doc: remove IsAutoClose parameter

* doc: 更新文档多语言键值

* doc: 代码格式化
2025-03-01 00:23:53 +08:00
Argo Zhang
a56d35832c feat(DialButtonItem): add ChildContent parameter (#5466)
* refactor: 更新注释文档

* feat: 增加 ChildContent 模板

* refactor: 使用拨号按钮

* test: DialButton 增加模板

* doc: 精简样式
2025-02-28 20:24:05 +08:00
Argo Zhang
8043e4e490 fix(SelectObject): should not override IsRequired method (#5464)
* fix(SelectObject): remove IsRequired override method

* chore: bump version 9.4.2
2025-02-28 07:41:27 +00:00
Argo Zhang
ac2ac31a0f feat(UniverSheet): add UniverSheet component (#5463)
* feat: 增加 UniverSheet 菜单

* doc: 增加示例组件

* doc: 增加多语言支持

* doc: 增加插件示例

* chore: 增加源码映射

* chore: 增加 UniverSheet 工程

* feat: 交互测试

* refactor: 增加测试逻辑

* refactor: 更改方法名

* refactor: 数据服务名称参数化

* refactor: 修改案例

* refactor: 更改 report 目录为 univer-sheet

* refactor: 精简代码

* refactor: 增加数据服务模块

* refactor: 更改方法名称

* chore: 更新示例

* refactor: 增加测试数据

* doc: 增加多语言资源文件

* doc: 更新推送数据示例

* doc: 更新示例

* doc: 增加多语言资源文件

* chore: 更新依赖

---------

Co-authored-by: zhaijunlei <276318515@qq.com>
2025-02-28 15:01:33 +08:00
Argo Zhang
82d4186905 test(Ajax): update ToJson default value to true (#5459)
* test: 增加单元测试

* chore: bump version 9.4.1
2025-02-27 05:45:38 +00:00
Argo Zhang
035e7ac641 fix(AjaxService): update ToJson default value to true (#5457)
* fix: 更正默认值

* chore: bump version 9.4.1-beta01
2025-02-27 11:47:48 +08:00
Argo Zhang
441532bf13 feat(PopConfirmButton): add CloseButtonIcon/ConfirmButtonIcon parameter (#5455)
* refactor: 精简代码

* refactor: 移除 dismiss 处理方法

* chore: 更新图标

* feat: 增加弹窗内按钮图标参数

* chore: 增加按钮图标参数

* test: 增加单元测试

* test: 更新单元测试

* chore: bump version 9.4.0

* chore: bump version 9.4.0
2025-02-27 00:48:48 +00:00
Argo Zhang
c174ff7df4 perf(PopConfirmButton): remove dismiss event handler to improve performance (#5453)
* refactor: 精简代码

* refactor: 移除 dismiss 处理方法

* chore: bump version 9.3.1-beta39

Co-Authored-By: 2881099 <2881099@qq.com>

---------

Co-authored-by: 2881099 <2881099@qq.com>
2025-02-27 08:24:52 +08:00
Argo Zhang
4a2f5bbd0d feat(Layout): add SidebarMinWidth/SidebarMaxWidth parameter (#5452)
* refactor: 更改参数名称

* doc: 代码格式化

* feat: 增加 SidebarMin/MaxValue 参数

* test: 更新单元测试

* doc: 更新文档

* chore: bump version 9.3.1-beta37

* refactor: 更改参数名称

* chore: bump version 9.3.1-beta38
2025-02-26 16:33:02 +08:00
Argo Zhang
32a4c0aa6c refactor(LayoutSplitebar): add min/max default value (#5448)
* style: 增加动画效果

* refactor: 更新代码

* chore: bump version 9.3.1-beta35

* feat: 支持默认值

* refactor: 支持主题样式

* refactor: 支持 Layout 收缩状态

* refactor: 增加异常保护逻辑
2025-02-26 11:56:53 +08:00
Argo Zhang
10f7564551 feat(Redirect): move redirect life cycle to init (#5446)
* refactor: 调整生命周期到 OnInitialized

* chore: bump version 9.3.1-beta36
2025-02-26 11:24:12 +08:00
Argo Zhang
6ee1243447 chore(Workflow): update feature template validation (#5450) 2025-02-26 02:49:36 +00:00
Argo Zhang
97eb165287 test(LayoutSplitebar): add unit test for LayoutSplitebar (#5443)
* refactor: 更改组件名称

* test: 增加单元测试

* refactor: 增加默认值

* doc: 更新文档示例
2025-02-25 21:09:02 +08:00
Argo Zhang
1333636005 feat(AjaxService): add ToJson parameter (#5441)
* refactor: 增加 toJson 参数

* refactor: 增加 ToJson 参数

* test: 增加单元测试

* test: 更新单元测试

* refactor: 更正单词拼写错误

* chore: bump version 9.3.1-beta34

* refactor: 精简代码
2025-02-25 19:54:31 +08:00
Argo Zhang
69179e7012 feat(LayoutSidebar): add LayoutSidebar component (#5438)
* feat: 增加 ShowSidebar 参数

控制是否显示 LayoutSidebar 组件

* feat: 增加 LayoutSidebar 组件

* doc: 更新拖动栏组件

* chore: 增加样式

* refactor: 更新参数

* refactor: 精简代码

* style: 更新样式
2025-02-24 20:58:43 +08:00
Argo Zhang
4759e19a1e doc(Select): add use enum int value as Items sample code (#5436)
* refactor: 精简代码

* feat: 兼容 Enum Value 数字情况

* chore: bump version 9.3.1-beta33

* refactor: 更正方法名称

* doc: 增加示例

* doc: 增加示例说明
2025-02-23 06:03:30 +00:00
Argo Zhang
d23c876f33 feat(Select): compatible enum value as Items (#5434)
* refactor: 精简代码

* feat: 兼容 Enum Value 数字情况

* chore: bump version 9.3.1-beta33
2025-02-23 11:30:07 +08:00
Argo Zhang
1e1ed9aff6 doc(CacheManagerOptions): add CacheManagerOptions config document (#5433)
* refactor: 重构代码

* doc: 增加 CacheManagerOptions 配置文档

* doc: 更新键值
2025-02-23 03:16:26 +00:00
Argo Zhang
81f99be781 refactor(CacheList): prevent null item cause exception (#5430)
* doc: 更正单词拼写错误

* refactor: 重构 cache-list 逻辑

* fix: 修复删除按钮

* refactor: 增加过滤条件防止空记录
2025-02-22 16:39:54 +00:00
Argo Zhang
cf9977e9c1 refactor(Html2Image): update Html2Image extension package (#5426)
* refactor: 更新配置类

* refactor: 移除 html2image 实现

* test: 更新单元测试

* test: 更新单元测试

* refactor: 更改为接口

* refactor: 更改为默认实现

* chore: 增加 Html2Image 服务

* refactor: 参数可为空

* test: 更新单元测试

* refactor: 移除 html2image 脚本

* refactor: 更新接口

* doc: 精简代码

* chore: bump version 9.3.1-beta32

Co-Authored-By: ElanCao <4487199+elancao@users.noreply.github.com>

* refactor: 更新示例代码

* chore: 更新包版本

* chore: 更新配置

* doc: 更新资源文件

* doc: 更新文档

---------

Co-authored-by: ElanCao <4487199+elancao@users.noreply.github.com>
2025-02-22 14:59:00 +00:00
Argo Zhang
0c035d2a26 revert(ListView): revert grid layout (#5424)
* Revert "feat(ListView): use grid layout instead of flex (#5409)"

This reverts commit e1a8f53677.

* refactor: 更改方法名称

* refactor: 代码复用

* refactor: 更新滚动条样式
2025-02-22 10:35:50 +00:00
Argo Zhang
f3463e560a feat(SelectTable): add QueryAsync instance method (#5422)
* feat: add QueryAsync instance method

* test: 更新单元测试

* chore: bump version 9.3.1-beta30

* chore: bump version

Co-Authored-By: NullJutsu <28599654+nulljutsu@users.noreply.github.com>

---------

Co-authored-by: NullJutsu <28599654+nulljutsu@users.noreply.github.com>
2025-02-22 11:15:56 +08:00
Argo Zhang
4065f44654 feat(IHtml2Image): add IHtml2Image service (#5421)
* feat: 增加 Html2Image 服务

* chore: 增加脚本

* chore: 增加 IHtml2Image 服务注册

* doc: 增加 Html2Image 菜单

* doc: 增加源码映射

* doc: 增加 Html2Image 示例

* doc: 更新示例

* doc: 更新资源文件

* doc: 更新标识

* doc: 增加一个友链

* doc: 增加排序
2025-02-22 10:25:48 +08:00
Argo Zhang
fabdb3f814 doc(Chart): update label of Pie chart (#5419)
* chore: bump version 9.3.1-beta28

Co-Authored-By: cervinkamichal0 <49551977+cervinkamichal0@users.noreply.github.com>

* fix: reorder color

* chore: bump version 9.3.1-beta29

---------

Co-authored-by: cervinkamichal0 <49551977+cervinkamichal0@users.noreply.github.com>
2025-02-21 06:54:29 +00:00
Argo Zhang
fd49fa0660 feat(DateTimePicker): add FirstDayOfWeek parameter (#5417)
* chore: bump version 9.3.1-beta28

Co-Authored-By: cervinkamichal0 <49551977+cervinkamichal0@users.noreply.github.com>

* feat: 增加 FirstDayOfWeek 设置

* test: 更新单元测试

---------

Co-authored-by: cervinkamichal0 <49551977+cervinkamichal0@users.noreply.github.com>
2025-02-21 14:21:19 +08:00
Argo Zhang
406eb5af68 feat(AutoGenerateColumnAttribute): remove Required parameter (#5416)
* refactor: 支持 Required 设置

* test: 更新单元测试

* refactor: 代码格式化

* refactor: 重构代码

* refactor: 屏蔽 IsRequiredWhenAdd/IsRequiredWhenEdit 设置

* test: 更新单元测试

* chore: bump version 9.3.1-beta27

Co-Authored-By: cqths <145242365+cqths@users.noreply.github.com>

---------

Co-authored-by: cqths <145242365+cqths@users.noreply.github.com>
2025-02-21 13:42:15 +08:00
Argo Zhang
1a219dc11e fix(DateTimeRange): should be reset Value after close pop-up (#5413)
* refactor: 增加 hideCallback 回调

* feat: 增加 TriggerHideCallback 回调

* test: 增加单元测试

* refactor: 移除日志输出

* refactor: 增加重置逻辑

* test: 增加单元测试

* chore: bump version 9.3.1-beta26

Co-Authored-By: Jiří Vokřínek <196328283+jvk-digres@users.noreply.github.com>

---------

Co-authored-by: Jiří Vokřínek <196328283+jvk-digres@users.noreply.github.com>
2025-02-21 10:54:56 +08:00
Argo Zhang
c45b44c9b6 refactor(WebClient): add catch exception logic (#5411)
* Revert "fix(EnableIpLocator): WebClientOptions parameter EnableIpLocator not work (#5400)"

This reverts commit e5e83f8dce.

# Conflicts:
#	src/BootstrapBlazor/BootstrapBlazor.csproj

* refactor: 增加异常处理逻辑

* refactor: 增加 JSModule 检查逻辑

* chore: bump version 9.3.1-beta25

* test: 更新单元测试
2025-02-21 08:58:21 +08:00
Argo Zhang
e1a8f53677 feat(ListView): use grid layout instead of flex (#5409)
* refactor: 复用代码

* refactor: 改用 grid 布局

* doc: 更新示例
2025-02-21 00:30:40 +00:00
Argo Zhang
02c2186349 feat(JuHeIpLocatorProvider): add JuHeIpLocatorProvider package (#5404)
* feat: 增加 enableIpLocator 参数控制

* feat: 增加禁止调用 ip.axd 逻辑

* refactor: 增加 EnableIpLocator 参数

* chore: bump version 9.3.1-beta23

* refactor: 代码重构

* refactor: 移除不使用的命名空间

* feat: 增加离线 IP 地理位置定位包

* chore: 增加 IP2Region 包引用

* doc: 更新文档

* refactor: 增加 JuHeIpLocatorOptions 配置类

* refactor: 重构逻辑

* chore: 移除 JuHeIpLocatorProvider

* test: 更新单元测试

* refactor: 移除注入服务代码

* chore: bump version 9.3.1-beta24

* chore: 增加 BootstrapBlazor.JuHeIpLocatorProvider 包依赖

* doc: 更新文档

* test: 更新单元测试

* feat: 增加 Keyed 服务

* test: 增加单元测试
2025-02-20 13:17:09 +08:00
Argo Zhang
75897ade4d feat(IP2Region): add IP2Region package (#5402)
* feat: 增加 enableIpLocator 参数控制

* feat: 增加禁止调用 ip.axd 逻辑

* refactor: 增加 EnableIpLocator 参数

* chore: bump version 9.3.1-beta23

* refactor: 代码重构

* refactor: 移除不使用的命名空间

* feat: 增加离线 IP 地理位置定位包

* chore: 增加 IP2Region 包引用

* doc: 更新文档
2025-02-20 12:54:07 +08:00
Argo Zhang
e5e83f8dce fix(EnableIpLocator): WebClientOptions parameter EnableIpLocator not work (#5400)
* feat: 增加 enableIpLocator 参数控制

* feat: 增加禁止调用 ip.axd 逻辑

* refactor: 增加 EnableIpLocator 参数

* chore: bump version 9.3.1-beta23
2025-02-19 18:44:05 +08:00
Argo Zhang
ce828de3ee doc(Drawer): add ZIndex parameter documentation (#5398)
* doc: 更新弹窗布局说明

* doc: 更新文档

* doc: 增加 ZIndex 参数说明

* doc: 增加 ZIndex 参数文档
2025-02-19 10:04:05 +00:00
Argo Zhang
2a050a15de feat(Drawer): add ZIndex parameter (#5396)
* chore: bump version 9.3.1-beta22

* test: 增加单元测试

* feat: 增加 ZIndex 参数

* refactor: 增加 ZIndex 参数传递逻辑

* feat: 增加 ZIndex 样式

* test: 增加单元测试
2025-02-19 13:52:33 +08:00
Argo Zhang
49adb87297 feat(Tab): add BeforeNavigatorTemplate/AfterNavigatorTemplate parameter (#5394)
* feat: 增加前后模板

* chore: bump version 9.3.1-beta21

* test: 增加单元测试
2025-02-19 10:16:10 +08:00
Argo Zhang
4706145cbd feat(Tab): update style compatible with new feature (#5392)
* feat: 增加 UseCache 参数

* refactor: 显示控制逻辑

* refactor: 重构代码

* test: 增加单元测试

* refactor: 更新样式使用 flex 布局

* refactor: 更新脚本
2025-02-18 16:07:21 +08:00
Argo Zhang
ce031e4b89 feat(DataTableDynamicContext): add UseCache parameter (#5389)
* feat: 增加 UseCache 参数

* refactor: 显示控制逻辑

* refactor: 重构代码

* test: 增加单元测试
2025-02-18 15:57:58 +08:00
Argo Zhang
2b1ab851a3 feat(Tab): add ShowActiveBar parameter (#5388)
* feat(Tab): add ShowActiveBar parameter

* test: 增加单元测试

* doc: 更新注释

* doc: 增加新参数说明文档
2025-02-18 11:56:59 +08:00
Argo Zhang
e339197197 feat(Tab): add ShowNavigatorButtons parameter (#5386)
* chore: 更新项目格式

* feat(Tab): add ShowNavigatorButtons parameter

* test: 增加单元测试
2025-02-18 11:41:20 +08:00
Argo Zhang
8417ac541d feat(TableExport): bump version 9.2.1 (#5382)
* chore: bump version 9.2.1

* doc: 更正文档
2025-02-17 13:49:56 +08:00
Argo Zhang
e9f89e8a8e doc(BootstrapLabel): add document for LabelWidth parameter (#5380)
* doc: 增加 LabelWidth 相关说明文档

* doc: 增加本地化资源文件
2025-02-17 05:20:56 +00:00
Argo Zhang
9f3214b9bd feat(ContextMenuDivider): add ContextMenuDivider component (#5379)
* feat: 增加 IContextMenuItem 接口用于规范化右键菜单组件

* refactor: ContextMenuItem 集成 IContextMenuItem 接口

* feat: 增加 ContextMenuDivider 组件

* refactor: 增加只读关键字消除提示信息

* refactor: 更改参数类型为接口

* refactor: 根据接口更新逻辑

* feat: 增加其他组件兼容逻辑

* refactor: 移除其他组件支持逻辑

* test: 增加单元测试

* chore: bump version 9.3.1-beta19
2025-02-17 10:30:27 +08:00
Argo Zhang
19f6dfe291 feat(Step): Prev Next function return step index (#5376)
* doc: 更新注释文档

* refactor: 向前一步方法返回当前步骤索引值

* feat: 向后一步方法返回当前步骤索引值
2025-02-16 10:47:11 +00:00
Argo Zhang
459ea17f40 doc(Dropdown): add sample code for ItemTemplate (#5374)
* refactor: 增强 ItemTemplate 模板

* style: 增加 tooltip 兼容样式

* doc: 增加 ItemTemplate 示例

* doc: 更新示例本地化资源文件

* chore: bump version 9.3.1-beta18

* refactor: 重构代码
2025-02-15 23:25:39 +08:00
Argo Zhang
8a5e79cdc2 feat(ButtonUpload): add FileCount parameter (#5371)
* doc: 更新注释

* feat: 增加 FileCount 参数

* feat: 增加 FileCount 参数逻辑

* test: 更新单元测试
2025-02-15 18:45:41 +08:00
Argo Zhang
9962e19e09 refactor(TreeView): redesign UI for ShowSearch function (#5369)
* refactor: 更改滚动条位置

* refactor: 更改布局

* doc: 更新示例代码

* refactor: 移除背景色设置

* chore: bump version 9.3.1-beta17

* test: 更新单元测试
2025-02-15 18:04:03 +08:00
Argo Zhang
8f92817025 doc(RadioList): add sample code for AutoSelectFirstWhenValueIsNull (#5367)
* doc: 更新 RadioList 示例

* doc: 更新资源文件
2025-02-15 05:40:55 +00:00
Argo Zhang
6616a6f342 feat(MaskService): add Selector parameter (#5361)
* feat: 增加 Selector 参数支持样式选择

* feat: 更新 JavaScript 交互

* feat: 支持 Selector 参数

* test: 更新单元测试
2025-02-14 16:40:28 +08:00
Argo Zhang
56e3600a2f feat(TextArea): support OnEnteryAsync/OnEscAsync parameter (#5357)
* feat: add javascript invoke function

* doc: 增加示例文档
2025-02-13 18:52:41 +08:00
Argo Zhang
07a3944a52 chore(Tools): update maintenance tools (#5355)
* chore: remove wasm tools

* chore: remove windows tools

* chore: remove git tools

* chore: update ba blazor service app desc

* chore: add pack watch delete tools

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-13 15:15:59 +08:00
Argo Zhang
a0fc459128 feat(TextArea): add UseShiftEnter parameter (#5351)
* feat: 增加 OnKeyUpAsync 参数

* refactor: 精简代码

* refactor: 重构代码

* doc: 更新示例

* refactor: 移除不需要的 OnKeyDownAsync 回调

* doc: 更新示例文档

* doc: 增加参数说明文档

* doc: 精简代码

* test: 更新单元测试

Co-Authored-By: ice6 <889040+ice6@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-13 14:20:38 +08:00
Argo Zhang
7b78b81961 feat(TreeView): add keep toggle/check state function (#5353)
* doc: 更新文档

* chore: bump version 9.3.1-beta12

* fix: 修复重置数据源导致 UI 不刷新问题

* feat: 更新有子集判断条件

* test: 更新单元测试

* refactor: 增加滚动逻辑

* feat: 实现客户端滚动支持

* chore: bump version 9.3.1-beta13

* chore: bump version 9.3.1-beta16

* feat: 增加渲染干预机制

* refactor: 撤销滚动逻辑

* revert: 撤销滚动参数更改
2025-02-13 12:29:11 +08:00
Argo Zhang
9ee6ea5b2a feat(IFrame): add OnReadyAsync callback (#5350)
* chore: bump version 9.3.1-beta11

* refactor: 更改回调函数名称

* feat: 增加 TriggerLoaded 回调方法

* feat: 更新加载逻辑
2025-02-12 09:14:57 +08:00
Argo Zhang
b2c410a7ae refactor(Array): remove prototype extension (#5348)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-Authored-By: ice6 <889040+ice6@users.noreply.github.com>
2025-02-12 00:49:33 +00:00
Argo Zhang
1b2f322cbc test(Table): add complex bind unit test (#5346) 2025-02-11 05:44:20 +00:00
Argo Zhang
97fb12c53d fix(Table): ScrollWidth parameter not work (#5344)
* refactor: 更新 GetScrollStyleString 方法

* doc: 更新示例
2025-02-11 13:02:04 +08:00
Argo Zhang
8341d810a3 fix(Scroll): hover scroll width variable not work (#5342)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-11 13:00:25 +08:00
Argo Zhang
92091df423 fix(Table): ToastDelay use global setting (#5340) 2025-02-11 12:20:07 +08:00
Argo Zhang
ddca0bf33b doc(Toast): update sample code show the delay time (#5338)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-11 11:58:10 +08:00
Argo Zhang
c86c885a44 chore(Editor): use addLink load asset (#5335)
bump version 9.0.3
2025-02-10 11:46:42 +00:00
Argo Zhang
c84b2a20e6 chore(Splitting): use addLink load asset (#5334)
bump version 9.0.2
2025-02-10 11:42:50 +00:00
Argo Zhang
74b18fe7c2 chore(VideoPlayer): use addLink load asset (#5333) 2025-02-10 19:16:38 +08:00
Argo Zhang
d0a4a2e829 refactor(Button): remove ButtonIcon property (#5328)
* refactor: 精简代码逻辑提高可读性

* refactor: 重构代码消除警告信息

* refactor: 重构代码精简代码
2025-02-09 14:16:26 +08:00
Argo Zhang
e3434f1c71 chore(SvgEditor): bump version 9.0.3 (#5326)
use addLink instead of HeadContent

---------

Co-Authored-By: caics <caics.china@gmail.com>
2025-02-09 02:35:18 +00:00
Argo Zhang
1c4bc582f2 feat(Dropdown): add IsAsync parameter (#5324)
* refactor: update html element tag name

* test: 更新单元测试

* doc: 更新参数注释

* feat(Dropdown): add IsAsync parameter

* refactor: 精简代码

提高代码可读性

* refactor: 代码重构

* feat: 实现 IsAsync 逻辑

* doc: 增加 IsAsync 文档

* feat: 分离按钮支持默认颜色

* feat: 异步图标显示逻辑

* refactor: 增加 span 包裹元素

* doc: 增加文档

* feat: 增加图标赋值逻辑

* refactor: 使用父类服务

* test: 增加单元测试

* chore: bump version 9.3.1-beta10

Co-Authored-By: ice6 <889040+ice6@users.noreply.github.com>
2025-02-09 01:42:23 +08:00
Argo Zhang
0f7be01500 test(Dropdown): add unit test improve code coverage (#5323)
* refactor: update html element tag name

* test: 更新单元测试

Co-Authored-By: ice6 <889040+ice6@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-02-09 00:18:24 +08:00
Argo Zhang
c19f3ab0d3 feat(Dropdown): add OnClick event callback (#5319)
* feat: 增加 OnClick 回调方法

* feat: 增加 OnClickWithoutRender 回调方法

* feat: 增加点击事件委托方法实现

* feat: 更改为 DynamicElement 组件

* doc: 更新文档示例

* doc: 更新文档
2025-02-08 23:59:28 +08:00
Argo Zhang
49454b1636 feat(Tooltip): add hackTooltip function prevent javascript exception (#5318)
* refactor: 重构代码

* fix: 修复报错问题

* feat: 增加 hackTooltip 防止 bs 脚本报错

* chore: bump version 9.3.1-beta09
2025-02-07 20:11:47 +08:00
Argo Zhang
c5beff04e1 doc(CacheList): rename CacheExpiration component (#5314)
* refactor: 组件重命名

* doc: 更新组件名称
2025-02-06 21:39:49 +08:00
Argo Zhang
0c204c4c8c feat(Drawer): add BodyScroll parameter (#5311)
* feat: 增加 BodyScroll 参数

* doc: 增加示例

* test: 增加单元测试

* doc: 增加示例代码资源文件

Co-Authored-By: ice6 <889040+ice6@users.noreply.github.com>
2025-02-06 06:16:49 +00:00
Argo Zhang
93817bcd72 feat(CacheManagerOptions): add CacheManagerOptions support configue cache expiration (#5310)
* feat: 增加 CacheManagerOptions 配置类

* feat: 增加 CacheManagerOptions 参数

* feat: 使用 CacheManagerOptions 值代替常量

* doc: 更新缓存时长计算方法

* test: 增加单元测试

* feat: 增加 SetDefaultSlidingExpiration 扩展方法精简代码
2025-02-06 11:15:53 +08:00
Argo Zhang
61eefd1193 feat(Search): support Debounce default value 200ms (#5308)
* feat: 增加客户端防抖

* feat: 增加防抖参数设置

* doc: 增加防抖 200 毫秒设置

* feat: 增加防抖默认值 200
2025-02-06 11:03:55 +08:00
Argo Zhang
528f80ac19 feat(Html2Pdf): bump PuppeteerSharp version 20.1.0 (#5306) 2025-02-06 11:01:12 +08:00
Argo Zhang
d4adda1237 revert(GetJsonStringFromAssembly): merge json from entry assembly (#5302)
* 增加例子,演示入口程序重写语言资源

* 修复入口程序重写语言资源

* refactor: 重构代码

* chore: bump version 9.3.1-beta08

Co-Authored-By: Diego2098 <82756760+kimdiego2098@users.noreply.github.com>

* Revert "增加例子,演示入口程序重写语言资源"

This reverts commit 42252be750.

---------

Co-authored-by: 2248356998 qq.com <2248356998@qq.com>
Co-authored-by: Diego2098 <82756760+kimdiego2098@users.noreply.github.com>
2025-02-05 17:20:22 +08:00
Argo Zhang
bc627f6aec feat(IconPark): add Color parameter (#5300)
* doc: 更新示例代码

* chore: 更新依赖包

增加 Color 参数
2025-02-05 16:11:20 +08:00
Argo Zhang
a7ddad009b feat(OctIcon): add squre-circle icon (#5298)
* chore: 更新 OctIcon 支持 Color 参数

* doc: 更新图标示例

* chore: 更新依赖包

* chore: 更新依赖包到 9.0.3

增加 square-circle 图标
2025-02-05 11:47:37 +08:00
Argo Zhang
fff6f0613f feat(Search): add IsClearable parameter (#5296)
* chore: 更新 OctIcon 支持 Color 参数

* doc: 更新图标示例

* chore: 更新依赖包

* feat: 增加 SearchContext 精简代码逻辑

减少级联参数

* style: 增加样式

* doc: 更新示例代码

* doc: 更新示例文档

* test: 增加单元测试

* test: 更新单元测试

* chore: bump version 9.3.1-beta07

* test: 更新单元测试

* feat: 增加 ButtonTemplate 参数

* feat: 增加 ShowClearIcon 参数

* refactor: 增加 form-control-group 节点

* style: 更新样式

* feat: 增加 PrefixButtonTemplate 参数

* refactor: 增加 PrefixButtonTemplate 逻辑

* style: 增加 bb-search-icon-input-padding-right 变量

* doc: 增加示例

* refactor: 更改 IsClearable 参数

* refactor: 调整 ButtonTemplate 位置

* doc: 增加示例代码

* doc: 更新示例

* doc: 增加文档注释

* doc: 增加注释文档多语言

* test: 更新单元测试

* refactor: 重构 DOM 结构精简样式
2025-02-05 02:34:31 +08:00
Argo Zhang
15fa69ea98 doc(SmileDrawer): update SmileDrawerOption sample code (#5295)
* doc: 更新示例代码

* doc: 更新 IsNew 标记

* chore: 更新版本号
2025-02-04 11:27:07 +08:00
Argo Zhang
95711bb1aa refactor(Typed): override Equals method (#5293)
* refactor: 重构代码

* test: 更新单元测试

* refactor: 更新代码
2025-02-04 02:24:29 +08:00
Argo Zhang
a2756ed8f7 feat(Typed): add Typed component (#5291)
* test: 更新单元测试

* doc: 更新示例文档

* feat: 增加 OnCompleteAsync 方法

* doc: 调整示例代码

* refactor: 完善逻辑

* test: 更新单元测试

* refactor: 精简代码

* feat: 增加 TypedJs 组件

* refactor: 更改组件名称

* doc: 增加文档映射

* doc: 增加菜单

* doc: 增加菜单多语言

* doc: 更新文档
2025-02-04 00:38:16 +08:00
Argo Zhang
9079726ab3 fix(DriverJs): the PrevBtnText NextBtnTetxt not working (#5288)
* refactor: 过滤掉超时异常

* refactor: 更新代码

* test: 更新单元测试

* refactor: 增加 LoadModuleByName 扩展方法

* refactor: 使用新的扩展方法减少代码

* refactor: 重构代码

* feat: 增加 EmptyTemplate 参数

* test: 增加单元测试

* doc: 增加包引用文档

* chore: bump version 9.0.1

* refactor: 设置方法为公开

---------

Co-authored-by: Alexander Mun <koreets61@gmail.com>
2025-02-03 11:50:16 +08:00
Argo Zhang
786e73cbba feat(ListView): add EmptyText parameter (#5287)
* refactor: 过滤掉超时异常

* refactor: 更新代码

* test: 更新单元测试

* refactor: 增加 LoadModuleByName 扩展方法

* refactor: 使用新的扩展方法减少代码

* feat: 增加 EmptyTemplate 参数

* test: 增加单元测试

* refactor: 删除合并导致的冗余代码

---------

Co-authored-by: caics <caics.china@gmail.com>
2025-02-03 11:43:44 +08:00
Argo Zhang
350b0e36ca feat(LoadModeByName): add LoadModuleByName extension method (#5286)
* refactor: 过滤掉超时异常

* refactor: 更新代码

* test: 更新单元测试

* refactor: 增加 LoadModuleByName 扩展方法

* refactor: 使用新的扩展方法减少代码

* refactor: 重构代码

* refactor: 设置方法为公开
2025-02-03 11:27:11 +08:00
Argo Zhang
c001d4f6fe feat(WebClientService): add TimeoutException catch (#5283)
* refactor: 过滤掉超时异常

* refactor: 更新代码

* test: 更新单元测试

* refactor: 重构代码

* refactor: 更新代码
2025-02-03 11:05:44 +08:00
Argo Zhang
73e6f95d19 doc(Icon): add Icon sample code (#5278)
* chore: 更新依赖包

* doc: 增加图标示例代码
2025-02-02 12:41:27 +08:00
Argo Zhang
e654d66cf3 feat(Toast): support DialogCloseButton component (#5276)
* feat: 增加 AddStyle 方法

* test: 增加单元测试

* refactor: use AddStyle method

* doc: 重构代码

* refactor: 重构代码

* Revert "refactor: 重构代码"

This reverts commit 37653dc4f1.

* feat: 增加 BootstrapLabelSetting 组件

* feat: 增加 LabelWidth 参数

* feat: 实现 LabelWidth 逻辑

* test: 增加单元测试

* doc: 移除 IsHtml 参数说明

* doc: 更新 Content 说明文档

* feat: 增加级联参数
2025-02-02 11:08:29 +08:00
Argo Zhang
c33eb02ace feat(BootstrapLabelSetting): add BootstrapLabelSetting component (#5274)
* feat: 增加 AddStyle 方法

* test: 增加单元测试

* refactor: use AddStyle method

* doc: 重构代码

* refactor: 重构代码

* Revert "refactor: 重构代码"

This reverts commit 37653dc4f1.

* feat: 增加 BootstrapLabelSetting 组件

* feat: 增加 LabelWidth 参数

* feat: 实现 LabelWidth 逻辑

* test: 增加单元测试
2025-02-02 11:05:54 +08:00
Argo Zhang
3c07dffc46 feat(CssBuilder): add AddStyle method (#5272)
* feat: 增加 AddStyle 方法

* test: 增加单元测试

* refactor: use AddStyle method

* doc: 重构代码

* refactor: 重构代码
2025-02-02 11:02:07 +08:00
Argo Zhang
b479cb1034 refactor(ValidateForm): use style instead of cascade parameter (#5269)
* refactor: 增加 style 标签

* refactor: 移除级联参数的使用

* test: 更新单元测试
2025-02-01 14:40:22 +08:00
Argo Zhang
5f1f7b9b42 feat(ValidateForm): add LabelWidth parameter (#5267)
* feat: 增加 LabelWidth 参数

* feat: EditorForm 支持级联参数

* doc: 增加资源文件

* doc: 增加 LabelWidth 参数描述

* test: 增加单元测试
2025-02-01 14:21:33 +08:00
Argo Zhang
342333018c feat(BootstrapLabel): add LabelWidth parameter (#5265)
* feat: 增加 LabelWidth 参数

* doc: 代码格式化

* test: 更新单元测试
2025-02-01 05:46:15 +00:00
Argo Zhang
12f5d72dbe feat(FileIcon): add Size parameter (#5263)
* feat: 增加 Size 参数

* doc: 增加文档

* doc: 增加本地化资源

* test: 增加单元测试
2025-02-01 11:58:39 +08:00
Argo Zhang
eaa9a8b4eb chore(ErroLogger): add navigation url info (#5262) 2025-02-01 03:02:06 +00:00
Argo Zhang
e1f1352fe7 doc(MultiSelect): update sample code support flags enum (#5257)
* chore: 更新脚本

* doc: 更新示例

* chore: bump version 9.3.1-beta06
2025-01-31 15:01:35 +08:00
Argo Zhang
34a6a8a2d0 feat(CheckboxListGeneric): add ItemTemplate parameter (#5255)
* chore: bump version 9.3.1-beta05

* feat: 增加 ItemTemplate 支持

* test: 增加单元测试
2025-01-31 14:14:37 +08:00
Argo Zhang
3a219b6f15 feat(MultiSelect): support Flags attribute (#5253)
* doc: 文档格式化

* feat: 支持 Flags 参数

* doc: 增加示例

* doc: 更新示例

* feat: 枚举类型支持 Flags 标签

* test: 增加单元测试
2025-01-31 13:14:33 +08:00
Argo Zhang
ae7a53c99f refactor(IDynamicObject): remove SupportComplexProperty parameter (#5252)
* refactor: 移除 supportComplexProperty 参数判断 Assembly 是否为动态

* chore: bump version 9.3.1-beta04
2025-01-31 03:12:44 +00:00
Argo Zhang
a8b3118c68 feat(IDynamicObject): disable support complex object (#5250)
* refactor: 移除 NET5 框架代码

* refactor: 精简代码

* doc: 更新注释文档

* refactor: 重构代码提供可读性

* doc: 增加注释

* refactor: 重命名测试类

* doc: 增加注释

* feat: 动态不支持复杂类

* feat: Lambda 扩展方法支持参数是否支持复杂类型

* feat: 增加 SupportComplexProperty 参数

* test: 增加单元测试

* chore: bump version 9.3.1-beta03
2025-01-30 21:49:04 +08:00
Argo Zhang
10fe3824ef feat(Icons): add OctIcon component (#5248)
* chore: 增加示例

* chore: 增加菜单

* chore: 增加资源文件

* chore: 增加 IsNew 标志

* chore: 增加依赖包

* chore: 更新键值

* chore: 更新示例
2025-01-30 01:20:16 +08:00
Argo Zhang
adc3e46e58 feat(MaterialDesignIcon): integrated MaterialDesign icon (#5247)
* refactor: 移动 fa 图标

* chore: 增加 bs 图标

* feat: 增加 bs 图标集

* refactor: 调整顺序

* refactor: 移除 bs 图标集配置

* chore: 移除包

* chore: 增加图标集

* chore: 移除配置代码

* chore: 移除包

* refactor: 重命名

* chore: 增加 MaterialDesign 图标
2025-01-29 23:20:09 +08:00
Argo Zhang
4e0bb2260e feat(BootstrapIcon): integrated Bootstrap icon (#5245)
* refactor: 移动 fa 图标

* chore: 增加 bs 图标

* feat: 增加 bs 图标集

* refactor: 调整顺序

* refactor: 移除 bs 图标集配置

* chore: 移除包
2025-01-29 22:52:25 +08:00
Argo Zhang
cfa0597d11 feat(Search): add ShowSearchButton parameter (#5243)
* doc: 增加异常捕获

* feat: add ShowSearchButton parameter

* style: 增加样式

* feat: 增加 ShowPrefixIcon 参数

* style: 更新样式

* feat: 增加 PrefixIcon 参数

* doc: 更新示例

* style: 更新样式

* doc: 更新示例

* doc: 更新示例

* doc: 增加文档说明

* test: 增加单元测试
2025-01-29 20:13:01 +08:00
Argo Zhang
78f2789b2c doc(Select): update ShowSearch sample code (#5241)
* refactor: 调整搜索图标上边距

* doc: 更新示例

* refactor: 移除多余配置

* doc: 更新示例
2025-01-29 17:43:47 +08:00
Argo Zhang
0099bd3535 feat(DropUpload): add DropUpload component (#5236)
* refactor: 更新注释

* feat: 增加 DropUpload 组件

* doc: 增加示例

* style: 更新样式

* feat: 增加 IconTemplate

* feat: 增加 BodyTemplate 参数

* feat: 增加点击上传功能

* feat: 增加 Template 参数

* style: 微调样式

* refactor: 调整脚本

* refactor: 精简代码

* doc: 精简提示信息

* doc: 更新 GlobalException 描述信息

* doc: 增加缓存键值列样式

* refactor: 重构代码

* doc: 增加异常捕获

* feat: 增加参数逻辑

* doc: 更新示例文档

* feat: 增加上传列表功能

* doc: 更新示例

* doc: 更新资源文件

* test: 更新单元测试
2025-01-29 12:20:09 +08:00
Argo Zhang
b6f47f096b doc(Exception): reduce exception records (#5235)
* refactor: 精简代码

* doc: 精简提示信息

* doc: 更新 GlobalException 描述信息

* doc: 增加缓存键值列样式

* refactor: 重构代码
2025-01-28 19:18:47 +08:00
Argo Zhang
cfcd5970b1 doc(Table): add IsPopover sample code (#5233) 2025-01-28 11:23:12 +08:00
Argo Zhang
239ed6822d feat(TableColumn): add ButtonTemplateHeaderText default value (#5231) 2025-01-28 11:18:50 +08:00
Argo Zhang
1d9f7847b9 doc(CacheList): update GetSlidingLeftTime logic (#5228)
* doc: 更新获取滑动时间剩余时间逻辑

* doc: add CacheCounter component
2025-01-28 00:53:48 +08:00
Argo Zhang
3e217f1544 feat(CheckboxList): add ItemTemplate parameter (#5226)
* feat: 增加 ItemTemplate 参数

* doc: 更新示例文档

* doc: 移除 div 元素

* test: 增加单元测试

* chore: bump version 9.3.1-beta02
2025-01-28 00:01:26 +08:00
Argo Zhang
175dac6dff feat(Table): can resize the fixed column (#5223)
* style: 增加 overflow: hidden 样式

* refactor: 固定列也可以调整列宽

* style: 微调 overflow 样式

* refactor: 增加固定列调整逻辑

* doc: 更新示例
2025-01-27 18:21:24 +08:00
Argo Zhang
2e132a9c33 fix(Modal): use TrySetResult prevent throw exception (#5222) 2025-01-27 15:58:13 +08:00
Argo Zhang
0d04f6f34b feat(ICacheEntry): add GetLastAccessed extension method (#5219)
* doc: 更改示例代码

* doc: 增加缓存时长描述

* refactor: 更改 OnGetDisplayText 增加可为空

* refactor: 重构 CacheManager 优化性能

* doc: 更新示例

* refactor: 增加扩展方法

* doc: 更新超时时长列内容

* doc: 实现过期时间实时更新

* refactor: 精简代码

* test: 更新单元测试

* test: 更新单元测试
2025-01-26 19:15:57 +08:00
Argo Zhang
f0fd5dc37b feat(SelectTable): add EmptyTemplate parameter (#5217)
* feat: 增加 EmptyTemplate 参数

* test: 增加单元测试
2025-01-26 12:38:06 +08:00
Argo Zhang
895170dc36 feat(ICacheManager): add TryGetCacheEntry method (#5216)
* doc: 增加到期时间列

* test: 增加 benmark 测试功能

* feat: 增加 TryGetCacheEntry 方法

* doc: 增加过期时间

* test: 更新单元测试

* test: 更新单元测试
2025-01-26 11:49:08 +08:00
Argo Zhang
01b3e1d17a feat(Drawer): auto focus when drawer shown (#5211)
* refactor: add auto focus logic

* refactor: 重构代码

* refactor: 精简代码

* chore: bump version 9.3.1-beta01
2025-01-26 00:45:43 +08:00
Argo Zhang
3a8f822339 feat(ICacheManager): add prefix cache key (#5210)
* doc: 更新示例

* refactor: 增加内部缓存策略

* refactor: 增加空文化判断

* test: 更新单元测试

* test: 更新单元测试

* refactor: 增加前缀
2025-01-26 00:41:15 +08:00
1576 changed files with 52364 additions and 20561 deletions

View File

@@ -1,4 +1,4 @@
.dockerignore
.dockerignore
.env
.git
.gitignore

View File

@@ -1,249 +1,22 @@
root = true
# To learn more about .editorconfig see https://aka.ms/editorconfigdocs
###############################
# Core EditorConfig Options #
###############################
# All files
[*]
indent_style = space
charset = utf-8
indent_style = space
trim_trailing_whitespace = true
insert_final_newline = true
spelling_exclusion_path = .\exclusion.dic
# Microsoft .NET properties
csharp_new_line_before_members_in_object_initializers = false
csharp_preferred_modifier_order = public, private, protected, internal, file, new, static, abstract, virtual, sealed, readonly, override, extern, unsafe, volatile, async, required:suggestion
csharp_style_prefer_utf8_string_literals = true:suggestion
csharp_style_var_elsewhere = true:suggestion
csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
dotnet_naming_rule.unity_serialized_field_rule.import_to_resharper = True
dotnet_naming_rule.unity_serialized_field_rule.resharper_description = Unity serialized field
dotnet_naming_rule.unity_serialized_field_rule.resharper_guid = 5f0fdb63-c892-4d2c-9324-15c80b22a7ef
dotnet_naming_rule.unity_serialized_field_rule.severity = warning
dotnet_naming_rule.unity_serialized_field_rule.style = lower_camel_case_style
dotnet_naming_rule.unity_serialized_field_rule.symbols = unity_serialized_field_symbols
dotnet_naming_style.lower_camel_case_style.capitalization = camel_case
dotnet_naming_symbols.unity_serialized_field_symbols.applicable_accessibilities = *
dotnet_naming_symbols.unity_serialized_field_symbols.applicable_kinds =
dotnet_naming_symbols.unity_serialized_field_symbols.resharper_applicable_kinds = unity_serialised_field
dotnet_naming_symbols.unity_serialized_field_symbols.resharper_required_modifiers = instance
dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:none
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:none
dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
dotnet_style_predefined_type_for_member_access = true:suggestion
dotnet_style_qualification_for_event = false:suggestion
dotnet_style_qualification_for_field = false:suggestion
dotnet_style_qualification_for_method = false:suggestion
dotnet_style_qualification_for_property = false:suggestion
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
# ReSharper properties
resharper_autodetect_indent_settings = true
resharper_formatter_off_tag = @formatter:off
resharper_formatter_on_tag = @formatter:on
resharper_formatter_tags_enabled = true
resharper_new_line_before_while = true
resharper_place_attribute_on_same_line = false
resharper_show_autodetect_configure_formatting_tip = false
resharper_use_indent_from_vs = false
# ReSharper inspection severities
resharper_arrange_redundant_parentheses_highlighting = hint
resharper_arrange_this_qualifier_highlighting = hint
resharper_arrange_type_member_modifiers_highlighting = hint
resharper_arrange_type_modifiers_highlighting = hint
resharper_built_in_type_reference_style_for_member_access_highlighting = hint
resharper_built_in_type_reference_style_highlighting = hint
resharper_redundant_base_qualifier_highlighting = warning
resharper_suggest_var_or_type_built_in_types_highlighting = hint
resharper_suggest_var_or_type_elsewhere_highlighting = hint
resharper_suggest_var_or_type_simple_types_highlighting = hint
resharper_web_config_module_not_resolved_highlighting = warning
resharper_web_config_type_not_resolved_highlighting = warning
resharper_web_config_wrong_module_highlighting = warning
# Code files
[*.{cs,csx,vb,vbx}]
indent_size = 4
[*.{cs,css,js,json,*html,razor,txt,log}]
charset = utf-8-bom
[*.{xml,config,*proj,nuspec,props,resx,targets,yml,tasks}]
[*.{xml,config,csproj,nuspec,props,resx,targets,yml,tasks,json}]
indent_size = 2
# Xml config files
[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}]
indent_size = 2
[*.json]
indent_size = 2
[*.{ps1,psm1}]
indent_size = 4
[*.sh]
indent_size = 4
end_of_line = lf
###############################
# .NET Coding Conventions #
###############################
[*.{cs,vb}]
# Organize usings
dotnet_sort_system_directives_first = false
# this. preferences
dotnet_style_qualification_for_field = false:silent
dotnet_style_qualification_for_property = false:silent
dotnet_style_qualification_for_method = false:silent
dotnet_style_qualification_for_event = false:silent
# Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members = true:silent
dotnet_style_predefined_type_for_member_access = true:silent
# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
# Modifier preferences
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
dotnet_style_readonly_field = true:suggestion
# Expression-level preferences
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
###############################
# Naming Conventions #
###############################
# Style Definitions
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
# Use PascalCase for constant fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style
dotnet_naming_symbols.constant_fields.applicable_kinds = field
dotnet_naming_symbols.constant_fields.applicable_accessibilities = *
dotnet_naming_symbols.constant_fields.required_modifiers = const
dotnet_style_operator_placement_when_wrapping = beginning_of_line
tab_width = 4
end_of_line = crlf
dotnet_style_prefer_collection_expression = when_types_exactly_match:suggestion
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
dotnet_style_prefer_compound_assignment = true:suggestion
dotnet_style_prefer_simplified_interpolation = true:suggestion
dotnet_style_namespace_match_folder = false:suggestion
dotnet_style_allow_multiple_blank_lines_experimental = true:silent
dotnet_style_allow_statement_immediately_after_block_experimental = true:silent
dotnet_code_quality_unused_parameters = all:suggestion
###############################
# C# Coding Conventions #
###############################
[*.cs]
# var preferences
csharp_style_var_for_built_in_types = true:silent
csharp_style_var_when_type_is_apparent = true:silent
csharp_style_var_elsewhere = true:silent
csharp_prefer_static_local_function = true:silent
# Expression-bodied members
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_accessors = true:silent
# Pattern matching preferences
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
# Null-checking preferences
csharp_style_throw_expression = true:suggestion
csharp_style_conditional_delegate_call = true:suggestion
# Modifier preferences
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
# Expression-level preferences
csharp_prefer_braces = true:silent
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_prefer_simple_default_expression = true:suggestion
csharp_style_pattern_local_over_anonymous_function = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
###############################
# C# Formatting Rules #
###############################
# New line preferences
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true
# Indentation preferences
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
csharp_indent_labels = one_less_than_current
# Space preferences
csharp_space_after_cast = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_around_binary_operators = before_and_after
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
# Wrapping preferences
csharp_preserve_single_line_statements = true
csharp_preserve_single_line_blocks = true
###############################
# VB Coding Conventions #
###############################
[*.vb]
# Modifier preferences
visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:suggestion
[*.cs]
dotnet_analyzer_diagnostic.category-Style.severity = none
csharp_style_namespace_declarations = file_scoped:silent
# Add file header
file_header_template = Licensed to the .NET Foundation under one or more agreements.\nThe .NET Foundation licenses this file to you under the Apache 2.0 License\nSee the LICENSE file in the project root for more information.\nMaintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
csharp_style_namespace_declarations = file_scoped:silent
csharp_style_expression_bodied_local_functions = false:silent
csharp_using_directive_placement = outside_namespace:silent
csharp_prefer_simple_using_statement = true:suggestion
csharp_style_prefer_method_group_conversion = true:silent
csharp_style_prefer_top_level_statements = true:silent
csharp_style_prefer_primary_constructors = true:suggestion
csharp_style_expression_bodied_lambdas = true:silent
csharp_style_prefer_null_check_over_type_check = true:suggestion
csharp_style_prefer_local_over_anonymous_function = true:suggestion
csharp_style_prefer_index_operator = true:suggestion
csharp_style_prefer_range_operator = true:suggestion
csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion
csharp_style_prefer_utf8_string_literals = true:suggestion
csharp_style_prefer_tuple_swap = true:suggestion
csharp_style_unused_value_expression_statement_preference = discard_variable:silent
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
csharp_style_prefer_readonly_struct_member = true:suggestion
csharp_style_prefer_readonly_struct = true:suggestion
csharp_style_allow_embedded_statements_on_same_line_experimental = true:silent
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent
csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true:silent
csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:silent
csharp_style_prefer_switch_expression = true:suggestion
csharp_style_prefer_pattern_matching = true:silent
csharp_style_prefer_not_pattern = true:suggestion
csharp_style_prefer_extended_property_pattern = true:suggestion
csharp_prefer_static_anonymous_function = true:suggestion
csharp_prefer_system_threading_lock = true:suggestion

View File

@@ -18,7 +18,6 @@
".iced",
".config",
".cs",
".vb",
".json"
]
}

View File

@@ -0,0 +1,47 @@
[
{
"version" : 2
},
{
"action" : {
"script" : "git push gitcode.com --delete refs/heads/${ref}\ngit push gitee.com --delete refs/heads/${ref}\ngit checkout main\ngit branch --delete --force ${ref}",
"showOutput" : false,
"type" : "sh",
"waitForExit" : true
},
"name" : "Delete All",
"refTargets" : [
"localbranch",
"remotebranch"
],
"target" : "ref"
},
{
"action" : {
"script" : "git fetch --all --prune",
"showOutput" : false,
"type" : "sh",
"waitForExit" : true
},
"name" : "Fetch All",
"refTargets" : [
"localbranch",
"remotebranch"
],
"target" : "ref"
},
{
"action" : {
"script" : "git push origin refs/heads/${ref} --verbose\ngit push gitcode.com refs/heads/${ref} --verbose\ngit push gitee.com refs/heads/${ref} --verbose",
"showOutput" : false,
"type" : "sh",
"waitForExit" : true
},
"name" : "Push All",
"refTargets" : [
"localbranch",
"remotebranch"
],
"target" : "ref"
}
]

6
.gitattributes vendored
View File

@@ -5,9 +5,9 @@
*.razor linguist-language=C#
*.cs linguist-detectable=true
*.js linguist-detectable=false
*.html linguist-detectable=false
*.scss linguist-detectable=false
*.js linguist-detectable=true
*.html linguist-detectable=true
*.scss linguist-detectable=C#
###############################################################################
# Set default behavior for command prompt diff.

View File

@@ -18,14 +18,14 @@ body:
description: A clear and concise description of what the problem is.
placeholder: I am trying to do [...] but [...]
validations:
required: false
required: true
- type: textarea
attributes:
label: Describe the solution you'd like
description: |
A clear and concise description of what you want to happen. Include any alternative solutions you've considered.
validations:
required: true
required: false
- type: textarea
attributes:
label: Additional context

View File

@@ -1,45 +1,37 @@
# {PR title}
## Link issues
fixes #{issue number}
Summary of the changes (Less than 80 chars)
<!--[Please fill in the relevant Issue number after the # above, such as #42]-->
<!--[请在上方 # 后面填写相关 Issue 编号,如 #42]-->
简单描述你更改了什么, 不超过80个字符如果有关联 Issue 请在下方填写相关编号
## Summary By Copilot
## Description
fixes #{bug number} (in this specific format)
## Regression?
- [ ] Yes
- [ ] No
[If yes, specify the version the behavior has regressed from]
[是否影响老版本]
<!--[If yes, specify the version the behavior has regressed from]-->
<!--[是否影响老版本]-->
## Risk
- [ ] High
- [ ] Medium
- [ ] Low
[Justify the selection above]
<!--[Justify the selection above]-->
## Verification
- [ ] Manual (required)
- [ ] Automated
## Packaging changes reviewed?
- [ ] Yes
- [ ] No
- [ ] N/A
## ☑️ Self Check before Merge
⚠️ Please check all items below before review. ⚠️
- [ ] Doc is updated/provided or not needed
- [ ] Demo is updated/provided or not needed
- [ ] Merge the latest code from the main branch

View File

@@ -5,7 +5,6 @@ on:
branches:
- master
- main
- dev
jobs:
run_test:
@@ -18,13 +17,25 @@ jobs:
- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{runner.os}}-nuget-bb-${{hashFiles('**/*.csproj')}}
restore-keys: |
${{runner.os}}-nuget-bb-
- name: Restore dependencies
run: dotnet restore src/BootstrapBlazor
- name: Test
run: |
dotnet test test/UnitTest --collect:"XPlat Code Coverage"
- name: Upload to Codecov
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: BB

View File

@@ -5,26 +5,35 @@ on:
branches:
- master
- main
- dev
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET Core SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{runner.os}}-nuget-bb-${{hashFiles('**/*.csproj')}}
restore-keys: |
${{runner.os}}-nuget-bb-
- name: Restore dependencies
run: dotnet restore src/BootstrapBlazor
- name: Build
env:
env:
NUGET_API_KEY: ${{secrets.NUGET_API_KEY}}
Bundle: True
run: |
dotnet restore src/BootstrapBlazor --no-cache
dotnet build src/BootstrapBlazor
- name: Test
@@ -32,6 +41,14 @@ jobs:
dotnet test test/UnitTest --collect:"XPlat Code Coverage"
- name: Upload to Codecov
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
- name: Check Router
run: |
dotnet test test/UnitTestDocs
- name: Check Localizer
run: |
dotnet test test/UnitTest.Localization

View File

@@ -4,6 +4,8 @@ on:
push:
branches:
- pack
- release
- docker
jobs:
docker:

View File

@@ -4,26 +4,50 @@ on:
push:
branches:
- pack
- release
- hotfix
jobs:
pack:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- name: Setup .NET Core SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{runner.os}}-nuget-bb-${{hashFiles('**/*.csproj')}}
restore-keys: |
${{runner.os}}-nuget-bb-
- name: Restore dependencies
run: dotnet restore src/BootstrapBlazor
- name: NuGet login
uses: NuGet/login@v1
id: login
with:
user: ${{ secrets.NUGET_USER }}
- name: Publish to Nuget
env:
NUGET_API_KEY: ${{secrets.NUGET_API_KEY}}
env:
NUGET_API_KEY: ${{steps.login.outputs.NUGET_API_KEY}}
Bundle: True
run: |
dotnet build src/BootstrapBlazor
dotnet pack src/BootstrapBlazor -c Release -o publish
dotnet pack src/BootstrapBlazor -c Release -o publish -p:VisualStudioVersion='17.0'
dotnet nuget push publish/BootstrapBlazor.*.nupkg -s https://api.nuget.org/v3/index.json -k $NUGET_API_KEY --skip-duplicate
rm -f publish/BootstrapBlazor.*.nupkg
dotnet pack src/BootstrapBlazor -c Release -o publish -p:VisualStudioVersion='18.0'
dotnet nuget push publish/BootstrapBlazor.*.nupkg -s https://api.nuget.org/v3/index.json -k $NUGET_API_KEY --skip-duplicate

View File

@@ -15,7 +15,7 @@ jobs:
- name: Setup .NET Core SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0.x
dotnet-version: 10.0.x
- name: Publish wasm
run: |

12
.gitignore vendored
View File

@@ -373,11 +373,9 @@ src/**/wwwroot/**/uploader
# npm
**/package-lock.json
# sass
**/BootstrapBlazor/wwwroot/css/animate.min.css
# Bootstrap
**/BootstrapBlazor/wwwroot/js/bootstrap.blazor.bundle.min.js
**/BootstrapBlazor/wwwroot/css/bootstrapblazor.min.css
**/BootstrapBlazor/wwwroot/css/bootstrap.min.css
**/BootstrapBlazor/wwwroot/css/bootstrap.rtl.min.css
**/BootstrapBlazor/wwwroot/css/sweetalert2.css
**/BootstrapBlazor/wwwroot/css/motronic.min.css
**/BootstrapBlazor/wwwroot/css/nano.min.css
# css
**/BootstrapBlazor/wwwroot/css/bootstrap.blazor.bundle.*.css

View File

@@ -12,8 +12,8 @@
[issuetracker "Gitee-Commit"]
regex = "[C|c]ommit:([^\\s]*)"
url = "https://gitee.com/Longbow/BootstrapBlazor/commit/$1"
url = "https://github.com/dotnetcore/BootstrapBlazor/commit/$1"
[issuetracker "Gitee-PR"]
regex = "!([\\d]+)"
url = "https://gitee.com/Longbow/BootstrapBlazor/pulls/$1"
url = "https://github.com/dotnetcore/BootstrapBlazor/pulls/$1"

View File

@@ -1 +0,0 @@
\.git

View File

@@ -1,126 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31912.275
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapBlazor", "src\BootstrapBlazor\BootstrapBlazor.csproj", "{D0AE3016-4878-4807-A04C-C33CBEC7B092}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{A2182155-43ED-44C1-BF6F-1B70EBD2DFFE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{7C1D79F1-87BC-42C1-BD5A-CDE4044AC1BD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{A627F6CC-94FC-4E48-B3CC-F0EA16700527}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "linux", "linux", "{EA765165-0542-41C8-93F2-85787FEDEDFF}"
ProjectSection(SolutionItems) = preProject
scripts\linux\ba.blazor.service = scripts\linux\ba.blazor.service
scripts\linux\deploy-blazor.sh = scripts\linux\deploy-blazor.sh
scripts\linux\deploy.sh = scripts\linux\deploy.sh
scripts\linux\nginx.conf = scripts\linux\nginx.conf
scripts\linux\remove.sh = scripts\linux\remove.sh
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "windows", "windows", "{4A5226E2-8EBD-4DEA-A1F5-2DF374655FA9}"
ProjectSection(SolutionItems) = preProject
scripts\windows\pack.cmd = scripts\windows\pack.cmd
scripts\windows\push.cmd = scripts\windows\push.cmd
scripts\windows\push.ps1 = scripts\windows\push.ps1
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wasm", "wasm", "{B84D315E-967D-4FBF-9B72-1F3128155CB0}"
ProjectSection(SolutionItems) = preProject
scripts\wasm\sync.cmd = scripts\wasm\sync.cmd
scripts\wasm\sync.sh = scripts\wasm\sync.sh
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTest", "test\UnitTest\UnitTest.csproj", "{190F25CF-C6F9-4964-97E9-F6A912D527AE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapBlazor.Server", "src\BootstrapBlazor.Server\BootstrapBlazor.Server.csproj", "{1ED371F3-2B28-4B2D-91B8-0C00DA42CB65}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTest.Localization", "test\UnitTest.Localization\UnitTest.Localization.csproj", "{99B55645-0E89-43F8-938F-2304B486AD2A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{1BA43FCA-FA64-449E-A1F1-9C2C4A1D2D3F}"
ProjectSection(SolutionItems) = preProject
localization\de.json = localization\de.json
localization\es.json = localization\es.json
localization\pt.json = localization\pt.json
localization\th-TH.json = localization\th-TH.json
localization\zh-TW.json = localization\zh-TW.json
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTestDocs", "test\UnitTestDocs\UnitTestDocs.csproj", "{6D73FED6-0086-460B-84FA-1FA78176BF59}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniTest.Sass", "test\UniTest.Sass\UniTest.Sass.csproj", "{D8AEAFE7-10AF-4A5B-BC67-FE740A2CA1DF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "configuration", "configuration", "{7037C6AF-5E54-40D4-AB44-69DB177C0C23}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
.gitignore = .gitignore
exclusion.dic = exclusion.dic
Framework.props = Framework.props
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
ProjectSection(SolutionItems) = preProject
README.md = README.md
README.zh-CN.md = README.zh-CN.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cert", "cert", "{C075C6C8-B9CB-4AC0-9BDF-B2002B4AB99C}"
ProjectSection(SolutionItems) = preProject
scripts\linux\cert\blazor.zone.cer = scripts\linux\cert\blazor.zone.cer
scripts\linux\cert\blazor.zone.key = scripts\linux\cert\blazor.zone.key
scripts\linux\cert\www.blazor.zone.cer = scripts\linux\cert\www.blazor.zone.cer
scripts\linux\cert\www.blazor.zone.key = scripts\linux\cert\www.blazor.zone.key
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D0AE3016-4878-4807-A04C-C33CBEC7B092}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D0AE3016-4878-4807-A04C-C33CBEC7B092}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D0AE3016-4878-4807-A04C-C33CBEC7B092}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D0AE3016-4878-4807-A04C-C33CBEC7B092}.Release|Any CPU.Build.0 = Release|Any CPU
{190F25CF-C6F9-4964-97E9-F6A912D527AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{190F25CF-C6F9-4964-97E9-F6A912D527AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{190F25CF-C6F9-4964-97E9-F6A912D527AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{190F25CF-C6F9-4964-97E9-F6A912D527AE}.Release|Any CPU.Build.0 = Release|Any CPU
{1ED371F3-2B28-4B2D-91B8-0C00DA42CB65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1ED371F3-2B28-4B2D-91B8-0C00DA42CB65}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1ED371F3-2B28-4B2D-91B8-0C00DA42CB65}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1ED371F3-2B28-4B2D-91B8-0C00DA42CB65}.Release|Any CPU.Build.0 = Release|Any CPU
{99B55645-0E89-43F8-938F-2304B486AD2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{99B55645-0E89-43F8-938F-2304B486AD2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{99B55645-0E89-43F8-938F-2304B486AD2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{99B55645-0E89-43F8-938F-2304B486AD2A}.Release|Any CPU.Build.0 = Release|Any CPU
{6D73FED6-0086-460B-84FA-1FA78176BF59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6D73FED6-0086-460B-84FA-1FA78176BF59}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6D73FED6-0086-460B-84FA-1FA78176BF59}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6D73FED6-0086-460B-84FA-1FA78176BF59}.Release|Any CPU.Build.0 = Release|Any CPU
{D8AEAFE7-10AF-4A5B-BC67-FE740A2CA1DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D8AEAFE7-10AF-4A5B-BC67-FE740A2CA1DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D8AEAFE7-10AF-4A5B-BC67-FE740A2CA1DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D8AEAFE7-10AF-4A5B-BC67-FE740A2CA1DF}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{D0AE3016-4878-4807-A04C-C33CBEC7B092} = {A2182155-43ED-44C1-BF6F-1B70EBD2DFFE}
{EA765165-0542-41C8-93F2-85787FEDEDFF} = {A627F6CC-94FC-4E48-B3CC-F0EA16700527}
{4A5226E2-8EBD-4DEA-A1F5-2DF374655FA9} = {A627F6CC-94FC-4E48-B3CC-F0EA16700527}
{B84D315E-967D-4FBF-9B72-1F3128155CB0} = {A627F6CC-94FC-4E48-B3CC-F0EA16700527}
{190F25CF-C6F9-4964-97E9-F6A912D527AE} = {7C1D79F1-87BC-42C1-BD5A-CDE4044AC1BD}
{1ED371F3-2B28-4B2D-91B8-0C00DA42CB65} = {A2182155-43ED-44C1-BF6F-1B70EBD2DFFE}
{99B55645-0E89-43F8-938F-2304B486AD2A} = {7C1D79F1-87BC-42C1-BD5A-CDE4044AC1BD}
{6D73FED6-0086-460B-84FA-1FA78176BF59} = {7C1D79F1-87BC-42C1-BD5A-CDE4044AC1BD}
{D8AEAFE7-10AF-4A5B-BC67-FE740A2CA1DF} = {7C1D79F1-87BC-42C1-BD5A-CDE4044AC1BD}
{C075C6C8-B9CB-4AC0-9BDF-B2002B4AB99C} = {EA765165-0542-41C8-93F2-85787FEDEDFF}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0DCB0756-34FA-4FD0-AE1D-D3F08B5B3A6B}
EndGlobalSection
EndGlobal

78
BootstrapBlazor.slnx Normal file
View File

@@ -0,0 +1,78 @@
<Solution>
<Folder Name="/actions/">
<File Path=".github/workflows/auto-pull-request-checks.yml" />
<File Path=".github/workflows/build.yml" />
<File Path=".github/workflows/docker.yml" />
<File Path=".github/workflows/pack.yml" />
<File Path=".github/workflows/publish.yml" />
</Folder>
<Folder Name="/configuration/">
<File Path=".editorconfig" />
<File Path=".gitattributes" />
<File Path=".gitignore" />
<File Path="exclusion.dic" />
</Folder>
<Folder Name="/docs/">
<File Path="README.md" />
<File Path="README.zh-CN.md" />
</Folder>
<Folder Name="/localization/">
<File Path="localization/de.json" />
<File Path="localization/es.json" />
<File Path="localization/it.json" />
<File Path="localization/pt.json" />
<File Path="localization/ru-RU.json" />
<File Path="localization/th-TH.json" />
<File Path="localization/uk-UA.json" />
<File Path="localization/zh-TW.json" />
</Folder>
<Folder Name="/props/">
<File Path="Directory.Build.props" />
<File Path="Framework.props" />
<File Path="Version.props" />
</Folder>
<Folder Name="/scripts/" />
<Folder Name="/scripts/linux/">
<File Path="scripts/linux/ba.blazor.service" />
<File Path="scripts/linux/deploy-blazor.sh" />
<File Path="scripts/linux/deploy.sh" />
<File Path="scripts/linux/nginx.conf" />
<File Path="scripts/linux/remove.sh" />
</Folder>
<Folder Name="/scripts/linux/cert/">
<File Path="scripts/linux/cert/blazor.zone.cer" />
<File Path="scripts/linux/cert/blazor.zone.key" />
<File Path="scripts/linux/cert/www.blazor.zone.cer" />
<File Path="scripts/linux/cert/www.blazor.zone.key" />
</Folder>
<Folder Name="/scripts/wasm/">
<File Path="scripts/wasm/sync.cmd" />
<File Path="scripts/wasm/sync.sh" />
</Folder>
<Folder Name="/scripts/windows/">
<File Path="scripts/windows/pack.cmd" />
<File Path="scripts/windows/push.cmd" />
<File Path="scripts/windows/push.ps1" />
</Folder>
<Folder Name="/src/">
<Project Path="src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj" />
<Project Path="src/BootstrapBlazor/BootstrapBlazor.csproj" />
</Folder>
<Folder Name="/src/props/">
<File Path="src/Directory.Build.props" />
<File Path="src/Logo.props" />
<File Path="src/SourceLink.targets" />
</Folder>
<Folder Name="/test/">
<Project Path="test/UniTest.Sass/UniTest.Sass.csproj" />
<Project Path="test/UnitTest.Localization/UnitTest.Localization.csproj" />
<Project Path="test/UnitTest/UnitTest.csproj" />
<Project Path="test/UnitTestDocs/UnitTestDocs.csproj" />
</Folder>
<Folder Name="/test/props/">
<File Path="test/Directory.Build.props" />
</Folder>
<Folder Name="/tools/">
<Project Path="tools/Benchmarks/UnitTest.Benchmarks.csproj" />
</Folder>
</Solution>

View File

@@ -189,7 +189,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [Argo Zhang] (argo@163.com)
Copyright [Argo Zhang] (argo@live.ca)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

183
README.md
View File

@@ -19,166 +19,85 @@ English | <a href="README.zh-CN.md">中文</a>
[<img align="right" src="https://github.com/dotnet-foundation/swag/blob/main/logo/dotnetfoundation_v4.png?raw=true" width="68px" />](https://dotnetfoundation.org/projects/project-detail/bootstrap-blazor)
<p>This project is part of the <a href="https://www.dotnetfoundation.org/">.NET Foundation</a> and operates under their <a href="https://www.dotnetfoundation.org/code-of-conduct">code of conduct</a>. </p>
## Features
- Enterprise-class UI designed for web applications.
- A set of high-quality Blazor components out of the box.
- Supports WebAssembly-based client-side and SignalR-based server-side UI event interaction.
- Supports Progressive Web Applications (PWA).
- Build with C#, a multi-paradigm static language for an efficient development experience.
- .NET Standard 2.1 based, with direct reference to the rich .NET ecosystem.
- Supports NET5. (Server-Side, WASM)
- Seamless integration with existing ASP.NET Core MVC and Razor Pages projects.
## Online Examples
[![website](https://img.shields.io/badge/China-https://www.blazor.zone-success.svg?color=red&logo=buzzfeed&logoColor=red)](https://www.blazor.zone)
[![website](https://img.shields.io/badge/Github-https://argozhang.github.io-success.svg?logo=buzzfeed&logoColor=green)](https://argozhang.github.io)
[![website](https://img.shields.io/badge/online-https://www.blazor.zone-success.svg?color=&logo=buzzfeed&logoColor=green)](https://www.blazor.zone)
## Installation Guide
## Environment
- Install .net core sdk [Offical website](https://dotnet.microsoft.com/download)
- Install Visual Studio 2022 lastest [Offical website](https://visualstudio.microsoft.com/vs/getting-started/)
- Install .net SDK [Official website](https://dotnet.microsoft.com/download)
- Install Visual Studio latest [Official website](https://visualstudio.microsoft.com/vs)
## Create a new project from the dotnet new template
## Quick Installation Guide
1. Install the template
`dotnet new install Bootstrap.Blazor.Templates::*`
2. Create the Boilerplate project with the template
`dotnet new bbapp`
## Install Bootstrap Blazor Project Template
1. Download Project Template
Microsoft Market [link](https://marketplace.visualstudio.com/items?itemName=Longbow.BootstrapBlazorUITemplate)
2. Double Click **BootstrapBlazor.UITemplate.vsix**
## Import Bootstrap Blazor into an existing project
1. Go to the project folder of the application and install the Nuget package reference
`dotnet add package BootstrapBlazor`
2. **Add** the `stylesheet` `javascripts` file to your main index file - `Pages/_Host.cshtml (Server)` or `wwwroot/index.html (WebAssembly)`
**HTML**
```HTML
<!DOCTYPE html>
<html lang="en">
<head>
. . .
<link rel="stylesheet" href="_content/BootstrapBlazor/css/bootstrap.blazor.bundle.min.css">
</head>
<body>
. . .
<script src="_framework/blazor.server.js"></script>
<script src="_content/BootstrapBlazor/js/bootstrap.blazor.bundle.min.js"></script>
</body>
</html>
### Install Package
```
dotnet add package BootstrapBlazor
```
3. Open the `~/Startup.cs` file in the and register the `Bootstrap Blazor` service:
### Add the following to `_Imports.razor`
```
@using BootstrapBlazor.Components
```
**C#**
### Add the following to the `MainLayout.razor`
```html
<BootstrapBlazorRoot>
@Body
</BootstrapBlazorRoot>
```
### Add the following to your HTML head section
it's either **index.html** or **_Layout.cshtml/_Host.cshtml/App.razor** depending on whether you're running WebAssembly or Server
```html
<link rel="stylesheet" href="_content/BootstrapBlazor/css/bootstrap.blazor.bundle.min.css" />
```
### Add the following script at the end of the body
```html
<script src="_content/BootstrapBlazor/js/bootstrap.blazor.bundle.min.js"></script>
```
### Add the following to the relevant sections of `Program.cs`
```csharp
namespace BootstrapBlazorAppName
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//more code may be present here
services.AddBootstrapBlazor();
}
builder.Services.AddBootstrapBlazor();
```
//more code may be present here
## Usage
```razor
<Display Value="@_text"></Display>
<Button Text="Button" OnClick="@ClickButton"></Button>
@code {
private string? _text;
private void ClickButton(MouseEventArgs e)
{
_text = DateTime.Now.ToString();
}
}
```
## Visual Studio Integration
## Install CLI Template
1. Install the template
```
dotnet new install Bootstrap.Blazor.Templates::*
```
To create a new `Bootstrap Blazor` UI for Blazor application, use the Create New Project Wizard. The wizard detects all installed versions of `Bootstrap Blazor` for Blazor and lists them in the Version combobox—this enables you to start your project with the desired version. You can also get the latest version to make sure you are up to date.
1. Get the Wizard
To use the Create New Project Wizard, install the `Bootstrap Blazor` UI for Blazor Visual Studio Extensions. You can get it from the:
- Visual Studio Marketplace (for Windows)
2. Start the Wizard
To start the wizard, use either of the following approaches
### Using the Project menu:
- Click File > New > Project.
- Find and click the C# Blazor Application option (you can use the search, or filter by Blazor templates).
- Follow the wizard.
## Supported browsers
![chrome](https://img.shields.io/badge/chrome->%3D57-success.svg?logo=google%20chrome&logoColor=red)
![firefox](https://img.shields.io/badge/firefox->522-success.svg?logo=firefox%20browser&logoColor=red)
![edge](https://img.shields.io/badge/edge->%3D16-success.svg?logo=microsoft%20edge&logoColor=blue)
![ie](https://img.shields.io/badge/ie->%3D11-success.svg?logo=internet%20explorer&logoColor=blue)
![Safari](https://img.shields.io/badge/safari->%3D14-success.svg?logo=safari&logoColor=blue)
![Andriod](https://img.shields.io/badge/andriod->%3D4.4-success.svg?logo=android)
![oper](https://img.shields.io/badge/opera->%3D4.4-success.svg?logo=opera&logoColor=red)
### Mobile devices
![ios](https://img.shields.io/badge/ios-supported-success.svg?logo=apple&logoColor=white)
![Andriod](https://img.shields.io/badge/andriod-suported-success.svg?logo=android)
![windows](https://img.shields.io/badge/windows-suported-success.svg?logo=windows&logoColor=blue)
| | **Chrome** | **Firefox** | **Safari** | **Android Browser & WebView** | **Microsoft Edge** |
| ------- | --------- | --------- | ------ | ------------------------- | -------------- |
| **iOS** | Supported | Supported | Supported | N/A | Supported |
| **Android** | Supported | Supported | N/A | Android v5.0+ supported | Supported |
| **Windows 10 Mobile** | N/A | N/A | N/A | N/A | Supported |
### Desktop browsers
![macOS](https://img.shields.io/badge/macOS-supported-success.svg?logo=apple&logoColor=white)
![linux](https://img.shields.io/badge/linux-suported-success.svg?logo=linux&logoColor=white)
![windows](https://img.shields.io/badge/windows-suported-success.svg?logo=windows)
| | Chrome | Firefox | Internet Explorer | Microsoft Edge | Opera | Safari |
| ------- | --------- | --------- | ----------------- | -------------- | --------- | ------------- |
| Mac | Supported | Supported | N/A | N/A | Supported | Supported |
| Linux | Supported | Supported | N/A | N/A | N/A | N/A |
| Windows | Supported | Supported | Supported, IE11+ | Supported | Supported | Not supported |
## Screenshots
![Toggle](https://raw.githubusercontent.com/ArgoZhang/Images/master/BootstrapBlazor/Toggle.png "Toggle.png")
![Toast](https://raw.githubusercontent.com/ArgoZhang/Images/master/BootstrapBlazor/Toast.png "Toast.png")
![Upload](https://raw.githubusercontent.com/ArgoZhang/Images/master/BootstrapBlazor/Upload.png "Upload.png")
![Upload2](https://raw.githubusercontent.com/ArgoZhang/Images/master/BootstrapBlazor/Upload2.png "Upload2.png")
![Bar](https://raw.githubusercontent.com/ArgoZhang/Images/master/BootstrapBlazor/Bar.png "Bar.png")
![Pei](https://raw.githubusercontent.com/ArgoZhang/Images/master/BootstrapBlazor/Pie.png "Pei.png")
![Doughnut](https://raw.githubusercontent.com/ArgoZhang/Images/master/BootstrapBlazor/Doughnut.png "Doughnut.png")
2. Create the Boilerplate project with the template
```
dotnet new bbapp
```
## Contribution
1. Fork
2. Create Feat_xxx branch
3. Commit
4. Create Pull Request
## Code of Conduct
This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community.
For more information see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct).
## Donate
If this project is helpful to you, please scan the QR code below for a cup of coffee.
<img src="https://raw.githubusercontent.com/ArgoZhang/Images/master/Donate/BarCode%402x.png" width="382px;" />

View File

@@ -20,27 +20,7 @@
[<img align="right" src="https://github.com/dotnet-foundation/swag/blob/main/logo/dotnetfoundation_v4.png?raw=true" width="68px" />](https://dotnetfoundation.org/projects/project-detail/bootstrap-blazor)
<p>该项目属于 <a href="https://www.dotnetfoundation.org/">.NET 基金会</a> ,并根据其 <a href="https://www.dotnetfoundation.org/code-of-conduct">行为准则</a> 运作。</p>
## 项目介绍
Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架:
- 使用 C# 代替 JavaScript 来创建丰富的交互式 UI。
- 共享使用 .NET 编写的服务器端和客户端应用逻辑。
- 将 UI 呈现为 HTML 和 CSS以支持众多浏览器其中包括移动浏览器。
使用 .NET 进行客户端 Web 开发可提供以下优势:
- 使用 C# 代替 JavaScript 来编写代码。
- 利用现有的 .NET 库生态系统。
- 在服务器和客户端之间共享应用逻辑。
- 受益于 .NET 的性能、可靠性和安全性。
- 始终高效支持 Windows、Linux 和 macOS 上的 Visual Studio。
- 支持 Net5
- 以一组稳定、功能丰富且易用的通用语言、框架和工具为基础来进行生成。
本项目是利用 Bootstrap 样式进行封装的 UI 组件库
## 社区与项目
目前 `BootstrapBlazor` 团队由六名热爱开源的技术达人组成,其中有四名 **微软最有价值专家(Microsoft MVP)** ;成立了大约 2000 人的 `Blazor 中文社区` 积极响应,只讨论 Blazor 相关技术
本组件库内置 **200** 多个组件,作者所在几家公司的项目均在重度使用,大多数组件都是在实际项目中提炼出来,非常适合国人操作习惯,大大节约开发时间,不像有些开源作品甚至作者本人都不使用,遇到问题从根本上无法解决,提交 Issue 也是让其自行解决并帮忙 PR 到其仓库
@@ -53,63 +33,102 @@ Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架:
- Argo Zhang [链接地址](https://mvp.microsoft.com/en-us/PublicProfile/5004174)
- Alex Chow [链接地址](https://mvp.microsoft.com/en-us/PublicProfile/5005078)
- Guohao Wang [链接地址](https://mvp.microsoft.com/en-us/PublicProfile/5005089)
- Xiang ju [链接地址](https://mvp.microsoft.com/en-us/PublicProfile/5005108)
## 生态伙伴
- Xiang Ju [链接地址](https://mvp.microsoft.com/en-us/PublicProfile/5005108)
- Guohao Wang [链接地址](https://mvp.microsoft.com/en-us/PublicProfile/5005089) (2023-2025)
## 生态伙伴 WTM
WTM 快速开发框架,设计的核心理念就是 "尽一切可能提高开发效率"。WTM框架把常规编码结构化重复编码自动化它不仅是一个框架它是强有力的生产力工具目前 WTM 快速开发框架已深度集成 Blazor 欢迎大家使用 [传送门](https://wtmdoc.walkingtec.cn)
<a href="https://wtmdoc.walkingtec.cn" target="_blank"><img src="http://images.gitee.com/uploads/images/2021/0718/194451_5b6cff04_554725.png" width="100px" /></a>
WTM 快速开发框架,设计的核心理念就是 "尽一切可能提高开发效率"。WTM框架把常规编码结构化重复编码自动化它不仅是一个框架它是强有力的生产力工具目前 WTM 快速开发框架已深度集成 Blazor 欢迎大家使用 [传送门](https://wtmdoc.walkingtec.cn)
## 开发环境搭建
## 生态伙伴 ThingsGateway
ThingsGateway 边缘网关,致力于打造“高性能、插件扩展、易集成”的工业物联网网关解决方案。
1. 安装 .net core sdk 最新版 [官方网址](http://www.microsoft.com/net/download)
2. 安装 Visual Studio 2022 最新版 [官方网址](https://visualstudio.microsoft.com/vs/getting-started/)
3. 获取本项目代码 [BootstrapBlazor](https://gitee.com/LongbowEnterprise/BootstrapBlazor)
<a href="https://thingsgateway.cn" target="_blank"><img src="https://foruda.gitee.com/images/1752651511062082157/c6a923f8_554725.png" width="100px" /></a>
ThingsGateway 将设备接入、数据上传等功能模块化,降低工业协议开发门槛,自动处理线程调度与数据缓存,极大提升开发效率与系统稳定性。
它不仅是一个网关框架,更是构建数字化工厂、边缘智能系统的核心工具!
ThingsGateway 已集成 Bootstrap Blazor 实现配置管理界面,轻松构建跨平台的边缘网关管理系统 [传送门](https://thingsgateway.cn)
## 生态伙伴 AtomUI
<a href="https://qinware.com/" target="_blank"><img src="https://gitee.com/Longbow/images/raw/master/atomui/atomui-red.svg" width="100px" /></a>
AtomUI 是基于 .NET 的 Ant Design 实现,致力于将优秀高效的设计语言和控件体验带到 Avalonia/.NET 跨平台桌面软件研发领域,最大限度释放研发工程师的开发效率, 设计支持平台Windows、macOS 和 Linux。
## 开发环境搭建
1. 安装 .net SDK 最新版 [官方网址](http://www.microsoft.com/net/download)
2. 安装 Visual Studio 最新版 [官方网址](https://visualstudio.microsoft.com/vs)
3. 获取本项目代码 [BootstrapBlazor](https://github.com/dotnetcore/BootstrapBlazor?wt.mc_id=DT-MVP-5004174)
### 克隆代码
```shell
git clone https://github.com/dotnetcore/BootstrapBlazor.git
cd BootstrapBlazor/src/BootstrapBlazor.Server
dotnet run
```
### CLI
**Install Template**
```c#
dotnet new install Bootstrap.Blazor.Templates
```
**Create Project**
## 快速安装指南
### 安装包
```shell
dotnet new bbapp
dotnet add package BootstrapBlazor
```
**Run**
```shell
dotnet run
### 添加默认命名空间到 `_Imports.razor`
```razor
@using BootstrapBlazor.Components
```
### 项目模板
### 添加 `BootstrapBlazorRoot` 到 `MainLayout.razor`
```razor
<BootstrapBlazorRoot>
@Body
</BootstrapBlazorRoot>
```
- [微软市场](https://marketplace.visualstudio.com/items?itemName=Longbow.BootstrapBlazorUITemplate)
- [码云镜像](https://gitee.com/LongbowEnterprise/BootstrapBlazorVsix/raw/master/dist/BootstrapBlazor.UITemplate.vsix)
### 添加样式到 HTML Head 中
具体是 **index.html** 或者 **_Layout.cshtml/_Host.cshtml/App.razor** 取决项目类型 `WebAssembly` 还是 `Server`
```razor
<link rel="stylesheet" href="_content/BootstrapBlazor/css/bootstrap.blazor.bundle.min.css" />
```
### 更多文档
### 增加脚本到 Html Body 结尾处
```razor
<script src="_content/BootstrapBlazor/js/bootstrap.blazor.bundle.min.js"></script>
```
### 增加服务 `Program.cs`
```csharp
builder.Services.AddBootstrapBlazor();
```
## 用法示例
```razor
<Display Value="@_text"></Display>
<Button Text="Button" OnClick="@ClickButton"></Button>
@code {
private string? _text;
private void ClickButton(MouseEventArgs e)
{
_text = DateTime.Now.ToString();
}
}
```
## 安装项目模板
```cscharp
dotnet new install Bootstrap.Blazor.Templates::*
```
## 更多文档
- [项目模板](https://www.blazor.zone/template)
- [快速上手](https://www.blazor.zone/install-server)
## 相关资源
- [Blazor 官方文档](https://docs.microsoft.com/zh-cn/aspnet/core/blazor/?WT.mc_id=DT-MVP-5004174)
- [生成 Blazor Web 应用](https://docs.microsoft.com/zh-cn/learn/modules/build-blazor-webassembly-visual-studio-code/?WT.mc_id=DT-MVP-5004174)
- [什么是 Blazor](https://docs.microsoft.com/zh-cn/learn/modules/build-blazor-webassembly-visual-studio-code/2-understand-blazor-webassembly?WT.mc_id=DT-MVP-5004174)
@@ -122,85 +141,20 @@ dotnet run
## QQ交流群
[![QQ](https://img.shields.io/badge/QQ-795206915-green.svg?logo=tencent%20qq&logoColor=red)](https://qm.qq.com/cgi-bin/qm/qr?k=1-jF9-5WA_3GFiJgXem2U_AQfqbdyOlV&jump_from=webapi) [![QQ](https://img.shields.io/badge/QQ-675147445-green.svg?logo=tencent%20qq&logoColor=red)](https://qm.qq.com/cgi-bin/qm/qr?k=Geker7hCXK0HC-J8_974645j_n6w0OE0&jump_from=webapi)
[![QQ](https://img.shields.io/badge/QQ-795206915-greenlight.svg?logo=tencent%20qq&logoColor=red)](https://qm.qq.com/cgi-bin/qm/qr?k=1-jF9-5WA_3GFiJgXem2U_AQfqbdyOlV&jump_from=webapi) [![QQ](https://img.shields.io/badge/QQ-675147445-greenlight.svg?logo=tencent%20qq&logoColor=red)](https://qm.qq.com/cgi-bin/qm/qr?k=Geker7hCXK0HC-J8_974645j_n6w0OE0&jump_from=webapi)
## 视频教程
B 站视频集锦 [传送门](https://space.bilibili.com/660853738/channel/index)
## 组件
Blazor 应用基于组件。 Blazor 中的组件是指 UI 元素,例如页面、对话框或数据输入窗体。
组件是内置到 .NET 程序集的 .NET 类,用来:
- 定义灵活的 UI 呈现逻辑。
- 处理用户事件。
- 可以嵌套和重用。
- 可以作为 Razor 类库或 NuGet 包共享和分发。
### 内置组件
内置组件 [传送门](https://www.blazor.zone/components)
## 分支说明
- master 稳定分支
- dev 开发功能分支
- 其他 均为临时分支
## 演示地址
[![website](https://img.shields.io/badge/Github-海外-success.svg?logo=buzzfeed&logoColor=red&color=red)](https://argozhang.github.io) [![website](https://img.shields.io/badge/linux-主站-success.svg?logo=buzzfeed&logoColor=green)](https://www.blazor.zone)
## 浏览器支持
![chrome](https://img.shields.io/badge/chrome->%3D57-success.svg?logo=google%20chrome&logoColor=red)
![firefox](https://img.shields.io/badge/firefox->522-success.svg?logo=firefox%20browser&logoColor=red)
![edge](https://img.shields.io/badge/edge->%3D16-success.svg?logo=microsoft%20edge&logoColor=blue)
![ie](https://img.shields.io/badge/ie->%3D11-success.svg?logo=internet%20explorer&logoColor=blue)
![Safari](https://img.shields.io/badge/safari->%3D14-success.svg?logo=safari&logoColor=blue)
![Andriod](https://img.shields.io/badge/andriod->%3D4.4-success.svg?logo=android)
![oper](https://img.shields.io/badge/opera->%3D4.4-success.svg?logo=opera&logoColor=red)
### 移动设备
![ios](https://img.shields.io/badge/ios-supported-success.svg?logo=apple&logoColor=white)
![Andriod](https://img.shields.io/badge/andriod-suported-success.svg?logo=android)
![windows](https://img.shields.io/badge/windows-suported-success.svg?logo=windows&logoColor=blue)
| | **Chrome** | **Firefox** | **Safari** | **Android Browser & WebView** | **Microsoft Edge** |
| ------- | --------- | --------- | ------ | ------------------------- | -------------- |
| **iOS** | Supported | Supported | Supported | N/A | Supported |
| **Android** | Supported | Supported | N/A | Android v5.0+ supported | Supported |
| **Windows 10 Mobile** | N/A | N/A | N/A | N/A | Supported |
### 桌面设备
![macOS](https://img.shields.io/badge/macOS-supported-success.svg?logo=apple&logoColor=white)
![linux](https://img.shields.io/badge/linux-suported-success.svg?logo=linux&logoColor=white)
![windows](https://img.shields.io/badge/windows-suported-success.svg?logo=windows)
| | Chrome | Firefox | Internet Explorer | Microsoft Edge | Opera | Safari |
| ------- | --------- | --------- | ----------------- | -------------- | --------- | ------------- |
| Mac | Supported | Supported | N/A | N/A | Supported | Supported |
| Linux | Supported | Supported | N/A | N/A | N/A | N/A |
| Windows | Supported | Supported | Supported, IE11+ | Supported | Supported | Not supported |
[![website](https://img.shields.io/badge/online-https://www.blazor.zone-success.svg?color=greenlight&logo=buzzfeed&logoColor=green)](https://www.blazor.zone)
## GVP 奖杯
![项目奖杯](https://images.gitee.com/uploads/images/2021/0112/120620_e596ac3c_554725.png "GVP.png")
## 项目截图
![登录可查看](https://gitee.com/Longbow/Pictures/raw/master/BootstrapBlazor/Toggle.png "Toggle.png")
![登录可查看](https://gitee.com/Longbow/Pictures/raw/master/BootstrapBlazor/Toast.png "Toast.png")
![登录可查看](https://gitee.com/Longbow/Pictures/raw/master/BootstrapBlazor/Upload.png "Upload.png")
![登录可查看](https://gitee.com/Longbow/Pictures/raw/master/BootstrapBlazor/Upload2.png "Upload2.png")
![登录可查看](https://gitee.com/Longbow/Pictures/raw/master/BootstrapBlazor/Bar.png "Bar.png")
![登录可查看](https://gitee.com/Longbow/Pictures/raw/master/BootstrapBlazor/Pie.png "Pei.png")
![登录可查看](https://gitee.com/Longbow/Pictures/raw/master/BootstrapBlazor/Doughnut.png "Doughnut.png")
## 开源协议
[![Gitee license](https://img.shields.io/github/license/dotnetcore/BootstrapBlazor.svg?logo=git&logoColor=red)](https://gitee.com/LongbowEnterprise/BootstrapBlazor/blob/master/LICENSE)
[![Gitee license](https://img.shields.io/github/license/dotnetcore/BootstrapBlazor.svg?logo=git&color=&logoColor=green)](https://gitee.com/LongbowEnterprise/BootstrapBlazor/blob/master/LICENSE)
## 特别鸣谢

View File

@@ -1,7 +1,8 @@
<Project>
<PropertyGroup>
<RunTargetFramework>net9.0</RunTargetFramework>
<RunTargetFramework>net10.0</RunTargetFramework>
<RunTargetFrameworks>net6.0;net7.0;net8.0;net9.0;net10.0</RunTargetFrameworks>
</PropertyGroup>
</Project>

20
delete-bin.cmd Normal file
View File

@@ -0,0 +1,20 @@
@ECHO off
cls
ECHO Deleting all BIN and OBJ folders...
ECHO.
FOR /d /r . %%d in (bin,obj) DO (
IF EXIST "%%d" (
ECHO %%d | FIND /I "\node_modules\" > Nul && (
ECHO.Skipping: %%d
) || (
ECHO.Deleting: %%d
rd /s/q "%%d"
)
)
)
ECHO.
ECHO.BIN and OBJ folders have been successfully deleted. Press any key to exit.
pause > nul

13
dotnet-tools.json Normal file
View File

@@ -0,0 +1,13 @@
{
"version": 1,
"isRoot": true,
"tools": {
"bootstrapblazor.cssbundler": {
"version": "10.0.0",
"commands": [
"css-bundler"
],
"rollForward": false
}
}
}

View File

@@ -109,3 +109,17 @@ Pharmacode
bluetooth
iframe
Sqlite
maxlength
inputmode
Totp
otpauth
Hotp
univer
rdkit
webkitdirectory
dotx
Modbus
Protocol
vditor
alertdialog
blazorbootstrap

View File

@@ -5,20 +5,9 @@
},
"BootstrapBlazor.Components.Captcha": {
"HeaderText": "Captcha",
"BarText": "Schieben Sie nach rechts und befüllen Sie das Puzzle",
"FailedText": "Laden fehlgeschlagen",
"LoadText": "Lade ...",
"TryText": "Erneut versuchen"
},
"BootstrapBlazor.Components.Camera": {
"DeviceLabel": "Kamera",
"InitDevicesString": "Initialisiere ...",
"PlayText": "Abspielen",
"StopText": "Stoppen",
"PhotoText": "Photo",
"FrontText": "Vor",
"BackText": "Zurück",
"NotFoundDevicesString": "Kein Videogerät gefunden"
"BarText": "Nach rechts schieben, um das Puzzle zu lösen",
"FailedText": "Fehler beim Laden",
"LoadText": "Wird geladen ..."
},
"BootstrapBlazor.Components.Calendar": {
"PreviousYear": "Vorheriges Jahr",
@@ -30,8 +19,8 @@
"WeekText": "Woche",
"NextWeek": "Nächste Woche",
"WeekHeaderText": "",
"WeekLists": "Son,Mon,Die,Mit,Don,Fre,Sam",
"WeekNumberText": "{0} Woche(n)",
"WeekLists": "So,Mo,Di,Mi,Do,Fr,Sa",
"WeekNumberText": "{0} Wochen",
"Months": "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember",
"Title": "{0} {1}"
},
@@ -40,52 +29,54 @@
},
"BootstrapBlazor.Components.Console": {
"HeaderText": "Monitor",
"LightTitle": "Light",
"LightTitle": "Indikator",
"ClearButtonText": "Leeren",
"AutoScrollText": "Automatisches Scrollen"
"AutoScrollText": "AutoScroll"
},
"BootstrapBlazor.Components.DateTimePicker": {
"PickerButtonText": "wählen",
"DatePlaceHolder": "Datum auswählen",
"TimePlaceHolder": "Zeit auswählen",
"TimePlaceHolder": "Uhrzeit auswählen",
"DateTimePlaceHolderText": "Bitte auswählen ...",
"DatePlaceHolderText": "Bitte auswählen ...",
"TimeFormat": "hh\\:mm\\:ss",
"DateFormat": "dd\\.MM\\.yyyy",
"DateTimeFormat": "dd\\.MM\\.yyyy HH\\:mm\\:ss",
"DateFormat": "d.M.yyyy",
"DateTimeFormat": "d.M.yyyy HH\\:mm\\:ss",
"AiraPrevYearLabel": "Vorheriges Jahr",
"AiraNextYearLabel": "Nächstes Jahr",
"AiraPrevMonthLabel": "Vorheriger Monat",
"AiraNextMonthLabel": "Nächster Monat",
"ClearButtonText": "Leeren",
"NowButtonText": "Jetzt",
"ConfirmButtonText": "Ok",
"ConfirmButtonText": "OK",
"CancelButtonText": "Abbrechen",
"YearText": "{0}",
"MonthText": "{0}",
"YearPeriodText": "{0} - {1}",
"Months": "Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember",
"MonthLists": "Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez",
"WeekLists": "Son,Mon,Die,Mit,Don,Fre,Sam",
"GenericTypeErroMessage": "DateTimePicker unterstützt nur DateTime oder Nullable<DateTime>",
"Months": "Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez",
"MonthLists": "Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez",
"WeekLists": "So,Mo,Di,Mi,Do,Fr,Sa",
"GenericTypeErrorMessage": "DateTimePicker unterstützt nur DateTime, DateTime?, DateTimeOffset, DateTimeOffset?",
"Today": "Heute",
"Yesterday": "Gestern",
"Week": "Eine Woche zuvor"
"Week": "Vor einer Woche"
},
"BootstrapBlazor.Components.DateTimeRange": {
"SeparateText": "Zu",
"SeparateText": "Bis",
"StartPlaceHolderText": "Startdatum",
"EndPlaceHolderText": "Enddatum",
"ClearButtonText": "Leeren",
"TodayButtonText": "Heute",
"ConfirmButtonText": "Ok",
"DateFormat": "dd\\.MM\\.yyyy",
"ConfirmButtonText": "OK",
"DateTimeFormat": "d.M.yyyy hh\\:mm\\:ss tt",
"DateFormat": "d.M.yyyy",
"Last7Days": "Letzte 7 Tage",
"Last30Days": "Letzte 30 Tage",
"ThisMonth": "Dieser Monat",
"LastMonth": "Letzter Monat"
},
"BootstrapBlazor.Components.BootstrapInputNumber": {
"ParsingErrorMessage": "Das {0} Feld muss eine Zahl sein."
"ParsingErrorMessage": "Das Feld {0} muss eine Zahl sein."
},
"BootstrapBlazor.Components.ResultDialogOption": {
"ButtonYesText": "Ja",
@@ -99,8 +90,8 @@
"PlaceHolder": "Klicken zum Bearbeiten"
},
"BootstrapBlazor.Components.EditorForm": {
"ModelInvalidOperationExceptionMessage": "Validationsform Model entspricht nicht {0} Model",
"PlaceHolderText": "Bitte auswählen ..."
"ModelInvalidOperationExceptionMessage": "ValidateForm MODEL stimmt nicht mit {0} MODEL überein",
"PlaceHolderText": "Bitte eingeben ..."
},
"BootstrapBlazor.Components.Empty": {
"Text": "Keine Daten"
@@ -109,156 +100,184 @@
"ErrorMessage": "Bitte geben Sie denselben Wert nochmals ein"
},
"BootstrapBlazor.Components.ErrorLogger": {
"ToastTitle": "Anwendungfehler"
"ToastTitle": "Anwendungsfehler"
},
"BootstrapBlazor.Components.GoTop": {
"TooltipText": "Nach oben"
},
"BootstrapBlazor.Components.Layout": {
"TooltipText": "Klicken, um Sidebar auf- bzw. zuzuklappen"
"TooltipText": "Klicken zum Auf-/Zuklappen der Seitenleiste"
},
"BootstrapBlazor.Components.Logout": {
"PrefixDisplayNameText": "Willkommen",
"PrefixUserNameText": "Account:"
"PrefixUserNameText": "Benutzer:"
},
"BootstrapBlazor.Components.LogoutLink": {
"Text": "Ausloggen"
"Text": "Abmelden"
},
"BootstrapBlazor.Components.Menu": {
"InvalidOperationExceptionMessage": "Sidemenu-Komponente kann nicht unabhängig verwendet werden. Bitte verwenden Sie die Menu Komponente, um IsVertical = true zu setzen"
"InvalidOperationExceptionMessage": "SideMenu-Komponente kann nicht unabhängig verwendet werden. Bitte verwenden Sie die Menu-Komponente mit IsVertical = true"
},
"BootstrapBlazor.Components.ModalDialog": {
"CloseButtonText": "Schließen",
"CloseButtonText": "Abbrechen",
"SaveButtonText": "Speichern",
"PrintButtonText": "Drucken"
"PrintButtonText": "Drucken",
"ExportPdfButtonText": "PDF exportieren"
},
"BootstrapBlazor.Components.MultiSelect": {
"PlaceHolder": "Klicken, um auszuwählen ...",
"PlaceHolder": "Elemente auswählen ...",
"SelectAllText": "Alle",
"ReverseSelectText": "Umkehren",
"ClearText": "Leeren",
"MinErrorMessage": "Wählen Sie wenigstens {0} Elemente",
"MaxErrorMessage": "Es können maximal {0} Elemente selektiert werden"
"MinErrorMessage": "Bitte wählen Sie mindestens {0} Elemente aus",
"MaxErrorMessage": "Maximal {0} Elemente können ausgewählt werden",
"NoSearchDataText": "Kein Ergebnis"
},
"BootstrapBlazor.Components.Pagination": {
"GotoNavigatorLabelText": "Zu"
"GotoNavigatorLabelText": "Gehe zu"
},
"BootstrapBlazor.Components.PopConfirmButton": {
"CloseButtonText": "Abbrechen",
"ConfirmButtonText": "Ok",
"Content": "Wollen Sie diese Aktion wirklich durchführen?"
"ConfirmButtonText": "OK",
"Content": "Sind Sie sicher, dass Sie diese Aktion durchführen möchten?"
},
"BootstrapBlazor.Components.PrintButton": {
"Text": "Drucken"
},
"BootstrapBlazor.Components.Repeater": {
"EmptyText": "Keine Daten"
},
"BootstrapBlazor.Components.Search": {
"SearchButtonText": "Suchen"
"SearchButtonText": "Suchen",
"NoDataTip": "Keine Einträge gefunden"
},
"BootstrapBlazor.Components.Select": {
"PlaceHolder": "Zum Auswählen klicken ..."
"PlaceHolder": "Bitte auswählen ...",
"NoSearchDataText": "Kein Ergebnis"
},
"BootstrapBlazor.Components.SelectTree": {
"PlaceHolder": "Zum Auswählen klicken ..."
},
"BootstrapBlazor.Components.SelectTreeView": {
"PlaceHolder": "Zum Auswählen klicken ..."
"PlaceHolder": "Bitte auswählen ..."
},
"BootstrapBlazor.Components.StringLengthValidator": {
"ErrorMessage": "Bitte geben Sie einen Wert kleiner oder gleich {{0}} ein"
},
"BootstrapBlazor.Components.SweetAlert": {
"CloseButtonText": "Schließen",
"CloseButtonText": "Abbrechen",
"CancelButtonText": "Abbrechen",
"ConfirmButtonText": "Bestätigen"
},
"BootstrapBlazor.Components.Switch": {
"OnInnerText": "An",
"OnInnerText": "Ein",
"OffInnerText": "Aus"
},
"BootstrapBlazor.Components.Tab": {
"CloseCurrentTabText": "Abbrechen",
"CloseCurrentTabText": "Schließen",
"CloseOtherTabsText": "Andere schließen",
"CloseAllTabsText": "Alle schließen",
"NotFoundTabText": "Nicht gefunden"
"NotFoundTabText": "Nicht gefunden",
"RefreshToolbarTooltipText": "Aktualisieren",
"FullscreenToolbarTooltipText": "Vollbild",
"PrevTabNavLinkTooltipText": "Vorheriger Tab",
"NextTabNavLinkTooltipText": "Nächster Tab",
"CloseTabNavLinkTooltipText": "Schließen",
"ContextRefresh": "Aktualisieren",
"ContextClose": "Schließen",
"ContextCloseOther": "Andere Tabs schließen",
"ContextCloseAll": "Alle Tabs schließen",
"ContextFullScreen": "Vollbild"
},
"BootstrapBlazor.Components.Table": {
"AddButtonText": "Hinzufügen",
"EditButtonText": "Bearbeiten",
"UpdateButtonText": "Ändern",
"UpdateButtonText": "Aktualisieren",
"DeleteButtonText": "Löschen",
"CancelButtonText": "Abbrechen",
"SaveButtonText": "Speichern",
"CloseButtonText": "Schließen",
"CloseButtonText": "Abbrechen",
"CancelDeleteButtonText": "Abbrechen",
"ConfirmDeleteButtonText": "Löschen",
"ConfirmDeleteContentText": "Sind Sie sicher, dass alle ausgwählten Zeilen gelöscht werden sollen?",
"ConfirmDeleteContentText": "Möchten Sie wirklich ALLE ausgewählten Zeilen LÖSCHEN?",
"RefreshButtonText": "Aktualisieren",
"CardViewButtonText": "Ansicht",
"ColumnButtonTitleText": "Spalten anzeigen/verbergen",
"ColumnButtonTitleText": "Spalten anzeigen/ausblenden",
"ColumnButtonText": "Spalten",
"ExportButtonText": "Export",
"ExportButtonText": "Exportieren",
"SearchPlaceholderText": "Suchen",
"SearchButtonText": "Suchen",
"ResetSearchButtonText": "Zurücksetzen",
"AdvanceButtonText": "Erweiterte Suche",
"AdvancedSortModalTitle": "Sortieren",
"AdvancedSortButtonText": "Erweiterte Sortierung",
"CheckboxDisplayText": "Alle",
"EditModalTitle": "Bearbeiten",
"AddModalTitle": "Neu",
"LineNoText": "Zeilen",
"ColumnButtonTemplateHeaderText": "",
"SearchTooltip": "<div class='search-input-tooltip'>Bitte eingeben ...</br><kbd>Enter</kbd> Suche <kbd>ESC</kbd> Leeren</div>",
"LineNoText": "Nr.",
"ColumnButtonTemplateHeaderText": "Aktionen",
"SearchTooltip": "<div class='search-input-tooltip'>Bitte eingeben ...</br><kbd>Enter</kbd> Suchen <kbd>ESC</kbd> Leeren</div>",
"SearchModalTitle": "Suche",
"AddButtonToastTitle": "Daten hinzufügen",
"AddButtonToastContent": "Daten konnten nicht hinzugefügt werden.",
"EditButtonToastTitle": "Daten bearbeiten",
"EditButtonToastNotSelectContent": "Daten konnten nicht gespeichert werden.",
"EditButtonToastReadonlyContent": "Die makierten Daten konnten nicht bearbeitet werden",
"AddButtonToastContent": "Fehler beim Hinzufügen von Daten. Bitte OnAddAsync-Methode bereitstellen",
"EditButtonToastTitle": "Daten hinzufügen",
"EditButtonToastNotSelectContent": "Fehler beim Speichern von Daten. Bitte OnSaveAsync-Methode bereitstellen",
"EditButtonToastReadonlyContent": "Die ausgewählten Daten können nicht bearbeitet werden",
"EditButtonToastMoreSelectContent": "Nur eine Zeile kann bearbeitet werden",
"EditButtonToastNoSaveMethodContent": "Daten konnten nicht bearbeitet werden",
"EditButtonToastNoSaveMethodContent": "Daten können nicht bearbeitet werden. Bitte OnSaveAsync-Methode bereitstellen",
"SaveButtonToastTitle": "Daten speichern",
"SaveButtonToastContent": "Speichern fehlgeschlagen",
"SaveButtonToastResultContent": "Daten {0} wurden gespeichert, Fenster schließt nach {1}s",
"SaveButtonToastContent": "Fehler beim Speichern von Daten. Bitte OnSaveAsync-Methode bereitstellen",
"SaveButtonToastResultContent": "Daten gespeichert {0}, automatisches Schließen nach {1}s",
"SuccessText": "Erfolgreich",
"FailText": "Fehlgeschlagen",
"DeleteButtonToastTitle": "Daten löschen",
"DeleteButtonToastContent": "Bitte markieren Sie die zu löschenden Zeilen, Fenster schließt nach {0}s",
"DeleteButtonToastResultContent": "Lösche Daten {0}, Fenster schließt nach {1}s",
"DeleteButtonToastCanNotDeleteContent": "Die makierten Daten sind nicht löschbar, Fenster schließt nach {0}s",
"DataServiceInvalidOperationText": "Wert für Eigenschaft 'DataService' in 'BootstrapBlazor.Components.Table`1[[{0}]]' kann nicht bereitgestellt werden. Es ist kein Service vom Typ 'BootstrapBlazor.Components.IDataService`1[{0}]' registriert.",
"NotSetOnTreeExpandErrorMessage": "OnTreeExpand-Parameter ist nicht gesetzt",
"DeleteButtonToastContent": "Bitte zu löschende Zeilen auswählen, automatisches Schließen nach {0}s",
"DeleteButtonToastResultContent": "Daten gelöscht {0}, automatisches Schließen nach {1}s",
"DeleteButtonToastCanNotDeleteContent": "Es gibt nicht löschbare Daten in der Auswahl, automatisches Schließen nach {0}s",
"DataServiceInvalidOperationText": "Es kann kein Wert für die Eigenschaft 'DataService' vom Typ 'BootstrapBlazor.Components.Table`1[[{0}]]' bereitgestellt werden. Es ist kein Dienst vom Typ 'BootstrapBlazor.Components.IDataService`1[{0}]' registriert.",
"NotSetOnTreeExpandErrorMessage": "OnTreeExpand-Parameter nicht gesetzt",
"UnsetText": "Aufsteigend",
"SortAscText": "Absteigend",
"SortDescText": "Keine",
"SortDescText": "Nicht gesetzt",
"EmptyText": "Keine Daten",
"ExportToastTitle": "Daten exportieren",
"ExportToastContent": "Daten exportieren {0}, automatisches Schließen in {1} Sekunden",
"ExportToastInProgressContent": "Daten exportieren, automatisches Schließen in {0} Sekunden",
"ExportToastTitle": "Exportieren",
"ExportToastContent": "Daten exportiert {0}, automatisches Schließen nach {1}s",
"ExportToastInProgressContent": "Daten werden exportiert, bitte warten, automatisches Schließen nach {0}s",
"ExportCsvDropdownItemText": "MS-Csv",
"ExportExcelDropdownItemText": "MS-Excel",
"ExportPdfDropdownItemText": "Pdf",
"PageInfoText": "{0} - {1} Total {2}",
"PageItemsText": "{0}/page"
"PageInfoText": "{0} - {1} Gesamt {2}",
"PageItemsText": "{0}/Seite",
"CopyColumnTooltipText": "Gesamte Spalte in die Zwischenablage kopieren",
"CopyColumnCopiedTooltipText": "Kopiert!",
"ColumnWidthTooltipPrefix": "Breite: ",
"ColumnToolboxTitle": "Werkzeuge",
"AlignLeftText": "Links",
"AlignLeftTooltipText": "Klicken zum linksbündigen Ausrichten des Textes in dieser Spalte",
"AlignCenterText": "Zentriert",
"AlignCenterTooltipText": "Klicken zum zentrierten Ausrichten des Textes in dieser Spalte",
"AlignRightText": "Rechts",
"AlignRightTooltipText": "Klicken zum rechtsbündigen Ausrichten des Textes in dieser Spalte"
},
"BootstrapBlazor.Components.EditDialog": {
"CloseButtonText": "Schließen",
"CloseButtonText": "Abbrechen",
"SaveButtonText": "Speichern"
},
"BootstrapBlazor.Components.TableFilter": {
"Title": "Filter",
"BootstrapBlazor.Components.TableColumnFilter": {
"ClearButtonText": "Leeren",
"FilterButtonText": "Übernehmen",
"FilterButtonText": "Filtern",
"BoolFilter.AllText": "Alle",
"BoolFilter.TrueText": "Wahr",
"BoolFilter.FalseText": "Unwahr",
"BoolFilter.FalseText": "Falsch",
"GreaterThanOrEqual": "Größer oder gleich",
"LessThanOrEqual": "Kleiner oder gleich",
"GreaterThan": "Größer",
"LessThan": "Kleiner",
"GreaterThan": "Größer als",
"LessThan": "Kleiner als",
"Equal": "Gleich",
"NotEqual": "Ungleich",
"Contains": "Beinhaltet",
"NotContains": "Beinhaltet nicht",
"EnumFilter.AllText": "Alle"
"Contains": "Enthält",
"NotContains": "Enthält nicht",
"EnumFilter.AllText": "Alle",
"NotSupportedColumnFilterMessage": "<p>Nicht unterstützter Filtertyp, bitte passen Sie den Filter mit <code>FilterTemplate</code> an</p><div>Siehe <a href=\"https://www.blazor.zone/table/filter#CustomFilter\" target=\"_blank\">CustomFilter</a></div>",
"MultiFilterSearchPlaceHolderText": "Bitte eingeben ...",
"MultiFilterSelectAllText": "Alle auswählen"
},
"BootstrapBlazor.Components.FilterLogicItem": {
"And": "Und",
@@ -266,25 +285,27 @@
},
"BootstrapBlazor.Components.SearchDialog": {
"ResetButtonText": "Zurücksetzen",
"QueryButtonText": "Anfrage"
"QueryButtonText": "Abfragen"
},
"BootstrapBlazor.Components.SwitchButton": {
"OnText": "An",
"OnText": "Ein",
"OffText": "Aus"
},
"BootstrapBlazor.Components.Timer": {
"PauseText": "Pause",
"ResumeText": "Fortsetzen",
"CancelText": "Abbrechen",
"StarText": "Star"
"StarText": "Start"
},
"BootstrapBlazor.Components.Toggle": {
"OnText": "Aufklappen",
"OnText": "Ausklappen",
"OffText": "Zuklappen"
},
"BootstrapBlazor.Components.Transfer": {
"LeftPanelText": "Alle",
"RightPanelText": "Markierte"
"RightPanelText": "Ausgewählt",
"MinErrorMessage": "Bitte wählen Sie mindestens {0} Elemente aus",
"MaxErrorMessage": "Bis zu {0} Elemente können ausgewählt werden"
},
"BootstrapBlazor.Components.TransferPanel": {
"SearchPlaceHolderString": "Bitte eingeben ...",
@@ -293,42 +314,90 @@
"BootstrapBlazor.Components.Tree": {
"NotSetOnTreeExpandErrorMessage": "OnExpandNodeAsync-Parameter nicht gesetzt"
},
"BootstrapBlazor.Components.TreeView": {
"NotSetOnTreeExpandErrorMessage": "OnExpandNodeAsync-Parameter nicht gesetzt",
"ToolbarEditTitle": "Baumknoten bearbeiten",
"ToolbarEditLabelText": "Umbenennen"
},
"BootstrapBlazor.Components.UploadBase": {
"DeleteButtonText": "Löschen",
"BrowserButtonText": "Browser",
"FileExtensions": "Datei muss folgende Endung haben: {0}",
"FileSizeValidation": "Dateigrößer muss kleiner sein als {0}"
"BrowserButtonText": "Durchsuchen",
"FileExtensions": "Die Datei muss eine der folgenden Erweiterungen haben: {0}",
"FileSizeValidation": "Dateigröße muss kleiner als {0} sein",
"DropUploadText": "Dateien hier ablegen oder <em>zum Hochladen klicken</em>"
},
"BootstrapBlazor.Components.Handwritten": {
"SaveButtonText": "Speichern",
"ClearButtonText": "Leeren"
},
"BootstrapBlazor.Components.SignaturePad": {
"SignAboveLabel": "In das Feld eintragen",
"ClearBtnTitle": "Löschen",
"SignatureAlertText": "Bitte geben Sie zuerst eine Unterschrift an",
"SignAboveLabel": "Im Feld unterschreiben",
"ClearBtnTitle": "Leeren",
"SignatureAlertText": "Bitte zuerst unterschreiben",
"ChangeColorBtnTitle": "Farbe ändern",
"UndoBtnTitle": "Rückgängig",
"CloseBtnTitle": "Schließen",
"CloseBtnTitle": "Abbrechen",
"SaveBase64BtnTitle": "OK",
"SavePNGBtnTitle": "PNG",
"SaveJPGBtnTitle": "JPG",
"SaveSVGBtnTitle": "SVG"
},
"BootstrapBlazor.Components.NullableBoolItemsAttribute": {
"NullValueDisplayText": "Bitte wählen",
"NullValueDisplayText": "Bitte auswählen ...",
"TrueValueDisplayText": "Wahr",
"FalseValueDisplayText": "Falsch"
},
"BootstrapBlazor.Components.InsertRowMode": {
"Last": "Letzte",
"First": "Zuerst"
"Last": "Letzter",
"First": "Erster"
},
"BootstrapBlazor.Components.IconDialog": {
"LabelText": "Symbol",
"LabelText": "Icon",
"LabelFullText": "Html",
"ButtonText": "Kopieren",
"DialogHeaderText": "Ausgewähltes Symbol",
"CopiedTooltipText": "Kopieren erfolgreich"
"DialogHeaderText": "Ausgewähltes Icon",
"CopiedTooltipText": "Kopiert"
},
"BootstrapBlazor.Components.Splitting": {
"Text": "Wird geladen ..."
},
"BootstrapBlazor.Components.QueryBuilder": {
"And": "und",
"Or": "oder",
"GreaterThanOrEqual": "Größer oder gleich",
"LessThanOrEqual": "Kleiner oder gleich",
"GreaterThan": "Größer als",
"LessThan": "Kleiner als",
"Equal": "Gleich",
"NotEqual": "Ungleich",
"Contains": "Enthält",
"NotContains": "Enthält nicht",
"GroupText": "Gruppe",
"ItemText": "Element"
},
"BootstrapBlazor.Components.TableAdvancedSortDialog": {
"AscText": "Aufsteigend",
"DescText": "Absteigend"
},
"BootstrapBlazor.Components.ClockPicker": {
"AMText": "AM",
"PMText": "PM"
},
"BootstrapBlazor.Components.ThemeProvider": {
"AutoModeText": "Auto",
"DarkModeText": "Dunkel",
"LightModeText": "Hell"
},
"BootstrapBlazor.Components.ValidateBase": {
"DefaultRequiredErrorMessage": "{0} ist erforderlich."
},
"BootstrapBlazor.Components.NetworkMonitorIndicator": {
"NTitle": "Netzwerk",
"NetworkType": "Netzwerktyp",
"Downlink": "Download",
"RTT": "RTT"
},
"BootstrapBlazor.Components.LoadMore": {
"NoMoreText": "Keine weiteren Daten"
}
}

View File

@@ -1,52 +1,42 @@
{
"BootstrapBlazor.Components.AutoComplete": {
"NoDataTip": "Sin datos",
"PlaceHolder": "Entrar"
"PlaceHolder": "Por favor ingrese"
},
"BootstrapBlazor.Components.Captcha": {
"HeaderText": "Captcha",
"BarText": "Arrastra a la derecha y completa",
"BarText": "Deslice a la derecha para resolver el rompecabezas",
"FailedText": "Error al cargar",
"LoadText": "Cargando...",
"TryText": "Intentar de nuevo"
},
"BootstrapBlazor.Components.Camera": {
"DeviceLabel": "Cámara",
"InitDevicesString": "Inicializar ...",
"PlayText": "Abrir",
"StopText": "Cerrar",
"PhotoText": "Foto",
"FrontText": "Frente",
"BackText": "Atrás",
"NotFoundDevicesString": "Ningún dispositivo encontrado"
"LoadText": "Cargando ..."
},
"BootstrapBlazor.Components.Calendar": {
"PreviousYear": "Año Anterior",
"PreviousMonth": "Mes Anterior",
"PreviousYear": "Año anterior",
"PreviousMonth": "Mes anterior",
"Today": "Hoy",
"NextMonth": "Próximo mes",
"NextYear": "El próximo año",
"PreviousWeek": "Semana Anterior",
"NextYear": "Próximo año",
"PreviousWeek": "Semana anterior",
"WeekText": "Semana",
"NextWeek": "La Próxima Semana",
"NextWeek": "Próxima semana",
"WeekHeaderText": "",
"WeekLists": "Dom,Lun,Mar,Mie,Jue,Vie,Sab",
"WeekLists": "Dom,Lun,Mar,Mié,Jue,Vie,Sáb",
"WeekNumberText": "{0} Semanas",
"Months": "Jan,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dec",
"Months": "Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre",
"Title": "{0} {1}"
},
"BootstrapBlazor.Components.Cascader": {
"PlaceHolder": "Seleccione ..."
},
"BootstrapBlazor.Components.Console": {
"HeaderText": "Supervisar",
"HeaderText": "Monitor",
"LightTitle": "Luz",
"ClearButtonText": "Limpiar",
"AutoScrollText": "Auto Desplazamiento"
"AutoScrollText": "AutoScroll"
},
"BootstrapBlazor.Components.DateTimePicker": {
"PickerButtonText": "Seleccione",
"DatePlaceHolder": "Seleccione fecha",
"TimePlaceHolder": "Seleccionar hora",
"TimePlaceHolder": "Seleccione hora",
"DateTimePlaceHolderText": "Por favor seleccione ...",
"DatePlaceHolderText": "Por favor seleccione ...",
"TimeFormat": "hh\\:mm\\:ss",
@@ -56,34 +46,34 @@
"AiraNextYearLabel": "Próximo año",
"AiraPrevMonthLabel": "Mes anterior",
"AiraNextMonthLabel": "Próximo mes",
"ClearButtonText": "Borrar",
"ClearButtonText": "Limpiar",
"NowButtonText": "Ahora",
"ConfirmButtonText": "Ok",
"CancelButtonText": "Cancelar",
"YearText": "{0}",
"MonthText": "{0}",
"YearPeriodText": "{0} - {1}",
"Months": "Jan,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dec",
"MonthLists": "Jan,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dec",
"WeekLists": "Dom,Lun,Mar,Mie,Jue,Vie,Sab",
"GenericTypeErroMessage": "El selector de fecha y hora solo admite DateTime DateTime? DateTimeOffset DateTimeOffset?",
"Months": "Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic",
"MonthLists": "Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic",
"WeekLists": "Dom,Lun,Mar,Mié,Jue,Vie,Sáb",
"GenericTypeErrorMessage": "DateTimePicker solo soporta DateTime, DateTime?, DateTimeOffset, DateTimeOffset?",
"Today": "Hoy",
"Yesterday": "Ayer",
"Week": "Hace una semana"
},
"BootstrapBlazor.Components.DateTimeRange": {
"SeparateText": "Para",
"SeparateText": "A",
"StartPlaceHolderText": "Fecha de inicio",
"EndPlaceHolderText": "Fecha de finalización",
"ClearButtonText": "Borrar",
"EndPlaceHolderText": "Fecha de fin",
"ClearButtonText": "Limpiar",
"TodayButtonText": "Hoy",
"ConfirmButtonText": "Aceptar",
"ConfirmButtonText": "Ok",
"DateTimeFormat": "d/M/yyyy hh\\:mm\\:ss tt",
"DateFormat": "d/M/yyyy",
"Last7Days": "Últimos 7 días",
"Last30Days": "Últimos 30 Días",
"ThisMonth": "Este Mes",
"LastMonth": "Último mes"
"Last30Days": "Últimos 30 días",
"ThisMonth": "Este mes",
"LastMonth": "Mes pasado"
},
"BootstrapBlazor.Components.BootstrapInputNumber": {
"ParsingErrorMessage": "El campo {0} debe ser un número."
@@ -100,23 +90,23 @@
"PlaceHolder": "Click para editar"
},
"BootstrapBlazor.Components.EditorForm": {
"ModelInvalidOperationExceptionMessage": "El modelo ValidateForm no coincide con {0} MODELO",
"PlaceHolderText": "Tipo ..."
"ModelInvalidOperationExceptionMessage": "El modelo ValidateForm no coincide con el modelo {0}",
"PlaceHolderText": "Por favor ingrese ..."
},
"BootstrapBlazor.Components.Empty": {
"Text": "Vacío"
"Text": "Sin datos"
},
"BootstrapBlazor.Components.EqualToValidator": {
"ErrorMessage": "Entrar con el mismo valor"
"ErrorMessage": "Por favor ingrese el mismo valor nuevamente"
},
"BootstrapBlazor.Components.ErrorLogger": {
"ToastTitle": "Error de la aplicación"
},
"BootstrapBlazor.Components.GoTop": {
"TooltipText": "Parte superior"
"TooltipText": "Ir arriba"
},
"BootstrapBlazor.Components.Layout": {
"TooltipText": "Expandir/Contraer Sidear"
"TooltipText": "Click para expandir/contraer la barra lateral"
},
"BootstrapBlazor.Components.Logout": {
"PrefixDisplayNameText": "Bienvenido",
@@ -126,43 +116,50 @@
"Text": "Cerrar sesión"
},
"BootstrapBlazor.Components.Menu": {
"InvalidOperationExceptionMessage": "El componente de menú lateral no se puede usar de forma aislada. Use el componente de menú para IsVertical = true"
"InvalidOperationExceptionMessage": "El componente SideMenu no puede usarse de forma independiente. Use el componente Menu para establecer IsVertical = true"
},
"BootstrapBlazor.Components.ModalDialog": {
"CloseButtonText": "Cerrar",
"SaveButtonText": "Guardar",
"PrintButtonText": "Imprimir"
"PrintButtonText": "Imprimir",
"ExportPdfButtonText": "Exportar Pdf"
},
"BootstrapBlazor.Components.MultiSelect": {
"PlaceHolder": "Haga clic para seleccionar ...",
"SelectAllText": "Todos",
"ReverseSelectText": "Reversa",
"ClearText": "Borrar",
"MinErrorMessage": "Seleccione al menos {0} elemento(s)",
"MaxErrorMessage": "Se puede seleccionar un máximo de {0} elementos"
"PlaceHolder": "Seleccione elementos ...",
"SelectAllText": "Todo",
"ReverseSelectText": "Invertir",
"ClearText": "Limpiar",
"MinErrorMessage": "Seleccione al menos {0} elementos",
"MaxErrorMessage": "Como máximo se pueden seleccionar {0} elementos",
"NoSearchDataText": "Sin resultados"
},
"BootstrapBlazor.Components.Pagination": {
"GotoNavigatorLabelText": "Goto"
"GotoNavigatorLabelText": "Ir a"
},
"BootstrapBlazor.Components.PopConfirmButton": {
"CloseButtonText": "Cancelar",
"ConfirmButtonText": "Ok",
"Content": "¿Confirmar la operación?"
"Content": "¿Está seguro de que desea realizar esta operación?"
},
"BootstrapBlazor.Components.PrintButton": {
"Text": "Imprimir"
},
"BootstrapBlazor.Components.Repeater": {
"EmptyText": "Sin datos"
},
"BootstrapBlazor.Components.Search": {
"SearchButtonText": "Búsqueda"
"SearchButtonText": "Buscar",
"NoDataTip": "No se encontraron registros"
},
"BootstrapBlazor.Components.Select": {
"PlaceHolder": "Seleccione ..."
"PlaceHolder": "Seleccione ...",
"NoSearchDataText": "Sin resultados"
},
"BootstrapBlazor.Components.SelectTree": {
"PlaceHolder": "Seleccione ..."
},
"BootstrapBlazor.Components.StringLengthValidator": {
"ErrorMessage": "Ingrese un valor menor o igual a {{0}}"
"ErrorMessage": "Por favor ingrese un valor menor o igual a {{0}}"
},
"BootstrapBlazor.Components.SweetAlert": {
"CloseButtonText": "Cerrar",
@@ -170,14 +167,24 @@
"ConfirmButtonText": "Confirmar"
},
"BootstrapBlazor.Components.Switch": {
"OnInnerText": "Act.",
"OffInnerText": "Des."
"OnInnerText": "Encendido",
"OffInnerText": "Apagado"
},
"BootstrapBlazor.Components.Tab": {
"CloseCurrentTabText": "Cerrar",
"CloseOtherTabsText": "Cerrar Otros",
"CloseAllTabsText": "Cerrar todo",
"NotFoundTabText": "No encontrado"
"CloseOtherTabsText": "Cerrar otras",
"CloseAllTabsText": "Cerrar todas",
"NotFoundTabText": "No encontrado",
"RefreshToolbarTooltipText": "Actualizar",
"FullscreenToolbarTooltipText": "Pantalla completa",
"PrevTabNavLinkTooltipText": "Pestaña anterior",
"NextTabNavLinkTooltipText": "Siguiente pestaña",
"CloseTabNavLinkTooltipText": "Cerrar",
"ContextRefresh": "Actualizar",
"ContextClose": "Cerrar",
"ContextCloseOther": "Cerrar otras pestañas",
"ContextCloseAll": "Cerrar todas las pestañas",
"ContextFullScreen": "Pantalla completa"
},
"BootstrapBlazor.Components.Table": {
"AddButtonText": "Agregar",
@@ -189,151 +196,208 @@
"CloseButtonText": "Cerrar",
"CancelDeleteButtonText": "Cancelar",
"ConfirmDeleteButtonText": "Eliminar",
"ConfirmDeleteContentText": "¿Está seguro de eliminar todas las filas seleccionadas?",
"ConfirmDeleteContentText": "¿Está seguro de que desea ELIMINAR todas las filas seleccionadas?",
"RefreshButtonText": "Actualizar",
"CardViewButtonText": "Ver",
"ColumnButtonTitleText": "Mostrar/Ocultar columnas",
"ColumnButtonTitleText": "Mostrar/Ocultar Columnas",
"ColumnButtonText": "Columnas",
"ExportButtonText": "Exportar",
"SearchPlaceholderText": "Buscar",
"SearchButtonText": "Buscar",
"ResetSearchButtonText": "Restablecer",
"AdvanceButtonText": "Búsqueda Avanzada",
"AdvanceButtonText": "Búsqueda avanzada",
"AdvancedSortModalTitle": "Ordenar",
"AdvancedSortButtonText": "Clasificación avanzada",
"CheckboxDisplayText": "Todos",
"AdvancedSortButtonText": "Orden avanzado",
"CheckboxDisplayText": "Todo",
"EditModalTitle": "Editar",
"AddModalTitle": "Nuevo",
"LineNoText": "No.",
"ColumnButtonTemplateHeaderText": "",
"SearchTooltip": "<div class='search-input-tooltip'>Por favor ingrese...</br><kbd>Entrar</kbd> Buscar <kbd>ESC</kbd> Borrar</div>",
"LineNoText": "N.º",
"ColumnButtonTemplateHeaderText": "Acciones",
"SearchTooltip": "<div class='search-input-tooltip'>Por favor ingrese ...</br><kbd>Enter</kbd> Buscar <kbd>ESC</kbd> Limpiar</div>",
"SearchModalTitle": "Buscando",
"AddButtonToastTitle": "Agregar datos",
"AddButtonToastContent": "Error al agregar datos. Proporcione el método OnAddAsync",
"EditButtonToastTitle": "Agregar datos",
"EditButtonToastNotSelectContent": "Error al guardar datos. Proporcione el método OnSaveAsync",
"EditButtonToastReadonlyContent": "Los datos seleccionados no se pueden editar",
"EditButtonToastMoreSelectContent": "Sólo se puede EDITAR una fila",
"EditButtonToastNoSaveMethodContent": "No se pueden EDITAR datos. Proporcione el método OnSaveAsync",
"EditButtonToastMoreSelectContent": "Solo se puede editar una fila",
"EditButtonToastNoSaveMethodContent": "No se pueden editar los datos. Proporcione el método OnSaveAsync",
"SaveButtonToastTitle": "Guardar datos",
"SaveButtonToastContent": "Error al guardar datos. Proporcione el método OnSaveAsync",
"SaveButtonToastResultContent": "Guardar datos {0}, cerrar automáticamente después de {1} s",
"SuccessText": "Exitoso",
"SaveButtonToastResultContent": "Datos guardados {0}, cierre automático en {1}s",
"SuccessText": "Éxito",
"FailText": "Error",
"DeleteButtonToastTitle": "Eliminar datos",
"DeleteButtonToastContent": "Por favor seleccione BORRAR filas, cierre automático después de {0}s",
"DeleteButtonToastResultContent": "Eliminar datos {0}, cerrar automáticamente después de {1} s",
"DeleteButtonToastCanNotDeleteContent": "Hay datos no eliminables en los datos seleccionados, se cierra automáticamente después de {0} s",
"DataServiceInvalidOperationText": "Servicio 'BootstrapBlazor.Components.IDataService`1[{0}]' no registrado",
"DeleteButtonToastContent": "Seleccione las filas a eliminar, cierre automático en {0}s",
"DeleteButtonToastResultContent": "Datos eliminados {0}, cierre automático en {1}s",
"DeleteButtonToastCanNotDeleteContent": "Hay datos no eliminables en la selección, cierre automático en {0}s",
"DataServiceInvalidOperationText": "No se puede proporcionar un valor para la propiedad 'DataService' en el tipo 'BootstrapBlazor.Components.Table`1[[{0}]]'. No hay un servicio registrado de tipo 'BootstrapBlazor.Components.IDataService`1[{0}]'.",
"NotSetOnTreeExpandErrorMessage": "parámetro OnTreeExpand no establecido",
"UnsetText": "Asc",
"SortAscText": "Desc",
"SortDescText": "Desarmar",
"SortDescText": "No establecido",
"EmptyText": "Sin datos",
"ExportToastTitle": "Exportar",
"ExportToastContent": "Exportar datos {0}, cerrar automáticamente después de {1} s",
"ExportToastInProgressContent": "Exportando datos, espere un momento, cierre automático después de {0} s",
"ExportToastContent": "Exportar datos {0}, cierre automático en {1}s",
"ExportToastInProgressContent": "Exportando datos, por favor espere, cierre automático en {0}s",
"ExportCsvDropdownItemText": "MS-Csv",
"ExportExcelDropdownItemText": "MS-Excel",
"ExportPdfDropdownItemText": "Pdf",
"PageInfoText": "{0} - {1} Total {2}",
"PageItemsText": "{0}/página",
"CopyColumnTooltipText": "Copiar datos completos de la columna al portapapeles",
"CopyColumnCopiedTooltipText": "¡Copiado!"
"CopyColumnTooltipText": "Copiar columna completa al portapapeles",
"CopyColumnCopiedTooltipText": "¡Copiado!",
"ColumnWidthTooltipPrefix": "ancho: ",
"ColumnToolboxTitle": "Herramientas",
"AlignLeftText": "Izquierda",
"AlignLeftTooltipText": "Click para alinear el texto en esta columna a la izquierda",
"AlignCenterText": "Centro",
"AlignCenterTooltipText": "Click para centrar el texto en esta columna",
"AlignRightText": "Derecha",
"AlignRightTooltipText": "Click para alinear el texto en esta columna a la derecha"
},
"BootstrapBlazor.Components.EditDialog": {
"CloseButtonText": "Cerrar",
"SaveButtonText": "Guardar"
},
"BootstrapBlazor.Components.TableFilter": {
"ClearButtonText": "Borrar",
"FilterButtonText": "Filtro",
"BoolFilter.AllText": "Todos",
"BootstrapBlazor.Components.TableColumnFilter": {
"ClearButtonText": "Limpiar",
"FilterButtonText": "Filtrar",
"BoolFilter.AllText": "Todo",
"BoolFilter.TrueText": "Verdadero",
"BoolFilter.FalseText": "Falso",
"GreaterThanOrEqual": "MayorThanOrEqual",
"LessThanOrEqual": "MenosThanOrEqual",
"GreaterThanOrEqual": "Mayor o igual",
"LessThanOrEqual": "Menor o igual",
"GreaterThan": "Mayor que",
"LessThan": "Menos que",
"LessThan": "Menor que",
"Equal": "Igual",
"NotEqual": "No Igual",
"NotEqual": "No igual",
"Contains": "Contiene",
"NotContains": "NoContiene",
"EnumFilter.AllText": "Todos",
"NotSupportedMessage": "Tipo de filtro no admitido. Personalice el filtro utilizando FilterTemplate"
"NotContains": "No contiene",
"EnumFilter.AllText": "Todo",
"NotSupportedColumnFilterMessage": "<p>Tipo de filtro no soportado, por favor personalice el filtro usando <code>FilterTemplate</code></p><div>Consulte <a href=\"https://www.blazor.zone/table/filter#CustomFilter\" target=\"_blank\">CustomFilter</a></div>",
"MultiFilterSearchPlaceHolderText": "Por favor ingrese ...",
"MultiFilterSelectAllText": "Seleccionar todo"
},
"BootstrapBlazor.Components.FilterLogicItem": {
"And": "Y",
"Or": "O"
},
"BootstrapBlazor.Components.SearchDialog": {
"ResetButtonText": "Reiniciar",
"QueryButtonText": "Consulta"
"ResetButtonText": "Restablecer",
"QueryButtonText": "Consultar"
},
"BootstrapBlazor.Components.SwitchButton": {
"OnText": "Encendido",
"OffText": "Desactivado"
"OffText": "Apagado"
},
"BootstrapBlazor.Components.Timer": {
"PauseText": "Pausa",
"ResumeText": "Continuar",
"CancelText": "Cancelar",
"StarText": "Estrella"
"StarText": "Iniciar"
},
"BootstrapBlazor.Components.Toggle": {
"OnText": "Expandir",
"OffText": "Contraer"
"OffText": "Colapsar"
},
"BootstrapBlazor.Components.Transfer": {
"LeftPanelText": "Todos",
"RightPanelText": "Seleccionado"
"LeftPanelText": "Todo",
"RightPanelText": "Seleccionado",
"MinErrorMessage": "Seleccione al menos {0} elementos",
"MaxErrorMessage": "Hasta {0} elementos pueden ser seleccionados"
},
"BootstrapBlazor.Components.TransferPanel": {
"SearchPlaceHolderString": "Introducir...",
"SearchPlaceHolderString": "Por favor ingrese ...",
"Text": "Lista"
},
"BootstrapBlazor.Components.Tree": {
"NotSetOnTreeExpandErrorMessage": "Parámetro OnExpandNodeAsync no asignado"
"NotSetOnTreeExpandErrorMessage": "parámetro OnExpandNodeAsync no establecido"
},
"BootstrapBlazor.Components.TreeView": {
"NotSetOnTreeExpandErrorMessage": "Parámetro OnExpandNodeAsync no asignado"
"NotSetOnTreeExpandErrorMessage": "parámetro OnExpandNodeAsync no establecido",
"ToolbarEditTitle": "Editar nodo del árbol",
"ToolbarEditLabelText": "Renombrar"
},
"BootstrapBlazor.Components.UploadBase": {
"DeleteButtonText": "Eliminar",
"BrowserButtonText": "Navegador",
"FileExtensions": "El archivo debe contener una de las extensiones: {0}",
"FileSizeValidation": "El tamaño del archivo debe ser inferior a {0}"
"BrowserButtonText": "Examinar",
"FileExtensions": "El archivo debe tener una de las siguientes extensiones: {0}",
"FileSizeValidation": "El tamaño del archivo debe ser menor que {0}",
"DropUploadText": "Suelte los archivos aquí o <em>haga clic para subir</em>"
},
"BootstrapBlazor.Components.Handwritten": {
"SaveButtonText": "Guardar",
"ClearButtonText": "Borrar"
"ClearButtonText": "Limpiar"
},
"BootstrapBlazor.Components.SignaturePad": {
"SignAboveLabel": "Iniciar sesión",
"ClearBtnTitle": "Borrar",
"SignatureAlertText": "Proporcione una firma primero",
"SignAboveLabel": "Firme en el recuadro",
"ClearBtnTitle": "Limpiar",
"SignatureAlertText": "Por favor proporcione una firma primero",
"ChangeColorBtnTitle": "Cambiar color",
"UndoBtnTitle": "Deshacer",
"CloseBtnTitle": "Cerrar",
"SaveBase64BtnTitle": "Aceptar",
"SaveBase64BtnTitle": "OK",
"SavePNGBtnTitle": "PNG",
"SaveJPGBtnTitle": "JPG",
"SaveSVGBtnTitle": "SVG"
},
"BootstrapBlazor.Components.NullableBoolItemsAttribute": {
"NullValueDisplayText": "Seleccione",
"NullValueDisplayText": "Por favor seleccione ...",
"TrueValueDisplayText": "Verdadero",
"FalseValueDisplayText": "Falso"
},
"BootstrapBlazor.Components.InsertRowMode": {
"Last": "Ultimo",
"Last": "Último",
"First": "Primero"
},
"BootstrapBlazor.Components.IconDialog": {
"LabelText": "Icono",
"LabelFullText": "HTML",
"LabelFullText": "Html",
"ButtonText": "Copiar",
"DialogHeaderText": "Icono Seleccionado",
"CopiedTooltipText": "La copia fue exitosa"
"DialogHeaderText": "Icono seleccionado",
"CopiedTooltipText": "Copiado"
},
"BootstrapBlazor.Components.Splitting": {
"Text": "Cargando ..."
},
"BootstrapBlazor.Components.QueryBuilder": {
"And": "y",
"Or": "o",
"GreaterThanOrEqual": "Mayor o igual",
"LessThanOrEqual": "Menor o igual",
"GreaterThan": "Mayor que",
"LessThan": "Menor que",
"Equal": "Igual",
"NotEqual": "No igual",
"Contains": "Contiene",
"NotContains": "No contiene",
"GroupText": "Grupo",
"ItemText": "Elemento"
},
"BootstrapBlazor.Components.TableAdvancedSortDialog": {
"AscText": "Ascendente",
"DescText": "Descendente"
},
"BootstrapBlazor.Components.ClockPicker": {
"AMText": "AM",
"PMText": "PM"
},
"BootstrapBlazor.Components.ThemeProvider": {
"AutoModeText": "Auto",
"DarkModeText": "Oscuro",
"LightModeText": "Claro"
},
"BootstrapBlazor.Components.ValidateBase": {
"DefaultRequiredErrorMessage": "{0} es requerido."
},
"BootstrapBlazor.Components.NetworkMonitorIndicator": {
"NTitle": "Red",
"NetworkType": "Tipo de red",
"Downlink": "Descarga",
"RTT": "RTT"
},
"BootstrapBlazor.Components.LoadMore": {
"NoMoreText": "No hay más datos"
}
}

409
localization/it.json Normal file
View File

@@ -0,0 +1,409 @@
{
"BootstrapBlazor.Components.AutoComplete": {
"NoDataTip": "Nessun dato",
"PlaceHolder": "Per favore inserisci"
},
"BootstrapBlazor.Components.Captcha": {
"HeaderText": "Captcha",
"BarText": "Scorri verso destra e riempi il puzzle",
"FailedText": "Caricamento non riuscito",
"LoadText": "Caricamento ...",
"TryText": "Riprova"
},
"BootstrapBlazor.Components.Camera": {
"DeviceLabel": "Camera",
"InitDevicesString": "Inizializzare ...",
"PlayText": "Riproduci",
"StopText": "Ferma",
"PhotoText": "Foto",
"FrontText": "Anteriore",
"BackText": "Posteriore",
"NotFoundDevicesString": "Nessun dispositivo video trovato"
},
"BootstrapBlazor.Components.Calendar": {
"PreviousYear": "Anno precedente",
"PreviousMonth": "Mese precedente",
"Today": "Oggi",
"NextMonth": "Prossimo mese",
"NextYear": "Prossimo anno",
"PreviousWeek": "Settimana precedente",
"WeekText": "Settimana",
"NextWeek": "Prossima settimana",
"WeekHeaderText": "",
"WeekLists": "Dom,Lun,Mar,Mer,Gio,Ven,Sab",
"WeekNumberText": "{0} settimana(e)",
"Months": "Gennaio,Febbraio,Marzo,Aprile,Maggio,Giugno,Luglio,Agosto,Settembre,Ottobre,Novembre,Dicembre",
"Title": "{0} {1}"
},
"BootstrapBlazor.Components.Cascader": {
"PlaceHolder": "Per favore seleziona ..."
},
"BootstrapBlazor.Components.Console": {
"HeaderText": "Monitor",
"LightTitle": "Luce",
"ClearButtonText": "Pulisci",
"AutoScrollText": "Scorrimento automatico"
},
"BootstrapBlazor.Components.DateTimePicker": {
"PickerButtonText": "Seleziona",
"DatePlaceHolder": "Seleziona la data",
"TimePlaceHolder": "Seleziona l'ora",
"DateTimePlaceHolderText": "Per favore seleziona ...",
"DatePlaceHolderText": "Per favore seleziona ...",
"TimeFormat": "hh\\:mm\\:ss",
"DateFormat": "dd\\.MM\\.yyyy",
"DateTimeFormat": "dd\\.MM\\.yyyy HH\\:mm\\:ss",
"AiraPrevYearLabel": "Anno precedente",
"AiraNextYearLabel": "Anno successivo",
"AiraPrevMonthLabel": "Mese precedente",
"AiraNextMonthLabel": "Mese successivo",
"ClearButtonText": "Pulisci",
"NowButtonText": "Adesso",
"ConfirmButtonText": "Ok",
"CancelButtonText": "Cancellare",
"YearText": "{0}",
"MonthText": "{0}",
"YearPeriodText": "{0} - {1}",
"Months": "Gennaio,Febbraio,Marzo,Aprile,Maggio,Giugno,Luglio,Agosto,Settembre,Ottobre,Novembre,Dicembre",
"MonthLists": "Gen,Feb,Mar,Apr,Mag,Giu,Lug,Ago,Set,Ott,Nov,Dic",
"WeekLists": "Dom,Lun,Mar,Mer,Gio,Ven,Sab",
"GenericTypeErroMessage": "DateTimePicker supporta solo DateTime o Nullable<DateTime>",
"Today": "Oggi",
"Yesterday": "Ieri",
"Week": "Una settimana fa"
},
"BootstrapBlazor.Components.DateTimeRange": {
"SeparateText": "A",
"StartPlaceHolderText": "Data di inizio",
"EndPlaceHolderText": "Data di fine",
"ClearButtonText": "Pulisci",
"TodayButtonText": "Oggi",
"ConfirmButtonText": "Ok",
"DateTimeFormat": "dd\\.MM\\.yyyy HH\\:mm\\:ss",
"DateFormat": "dd\\.MM\\.yyyy",
"Last7Days": "Ultimi 7 giorni",
"Last30Days": "Ultimi 30 giorni",
"ThisMonth": "Questo mese",
"LastMonth": "Mese scorso"
},
"BootstrapBlazor.Components.BootstrapInputNumber": {
"ParsingErrorMessage": "Il campo {0} deve essere un numero."
},
"BootstrapBlazor.Components.ResultDialogOption": {
"ButtonYesText": "Sì",
"ButtonNoText": "No",
"ButtonCloseText": "Chiudi"
},
"BootstrapBlazor.Components.DropdownList": {
"PlaceHolder": "Per favore seleziona ..."
},
"BootstrapBlazor.Components.Editor": {
"PlaceHolder": "Clicca per modificare"
},
"BootstrapBlazor.Components.EditorForm": {
"ModelInvalidOperationExceptionMessage": "Il modello di convalida non corrisponde al modello {0}",
"PlaceHolderText": "Per favore seleziona ..."
},
"BootstrapBlazor.Components.Empty": {
"Text": "Nessun dato"
},
"BootstrapBlazor.Components.EqualToValidator": {
"ErrorMessage": "Per favore inserisci lo stesso valore di nuovo"
},
"BootstrapBlazor.Components.ErrorLogger": {
"ToastTitle": "Errore dell'applicazione"
},
"BootstrapBlazor.Components.GoTop": {
"TooltipText": "Torna su"
},
"BootstrapBlazor.Components.Layout": {
"TooltipText": "Clicca per espandere o comprimere la barra laterale"
},
"BootstrapBlazor.Components.Logout": {
"PrefixDisplayNameText": "Benvenuto",
"PrefixUserNameText": "Nome utente:"
},
"BootstrapBlazor.Components.LogoutLink": {
"Text": "Disconnetti"
},
"BootstrapBlazor.Components.Menu": {
"InvalidOperationExceptionMessage": "Il componente Sidemenu non può essere utilizzato in modo indipendente. Si prega di utilizzare il componente Menu per impostare IsVertical = true"
},
"BootstrapBlazor.Components.ModalDialog": {
"CloseButtonText": "Chiudi",
"SaveButtonText": "Salva",
"PrintButtonText": "Stampa",
"ExportPdfButtonText": "Esporta PDF"
},
"BootstrapBlazor.Components.MultiSelect": {
"PlaceHolder": "Clicca per selezionare ...",
"SelectAllText": "Seleziona tutto",
"ReverseSelectText": "Inverti selezione",
"ClearText": "Pulisci",
"MinErrorMessage": "Seleziona almeno {0} elementi",
"MaxErrorMessage": "È possibile selezionare al massimo {0} elementi",
"NoSearchDataText": "Nessun risultato"
},
"BootstrapBlazor.Components.Pagination": {
"GotoNavigatorLabelText": "A"
},
"BootstrapBlazor.Components.PopConfirmButton": {
"CloseButtonText": "Annulla",
"ConfirmButtonText": "Ok",
"Content": "Vuoi davvero eseguire questa azione?"
},
"BootstrapBlazor.Components.PrintButton": {
"Text": "Stampa"
},
"BootstrapBlazor.Components.Repeater": {
"EmptyText": "Nessun dato"
},
"BootstrapBlazor.Components.Search": {
"SearchButtonText": "Cerca",
"NoDataTip": "Nessun risultato trovato"
},
"BootstrapBlazor.Components.Select": {
"PlaceHolder": "Clicca per selezionare ...",
"NoSearchDataText": "Nessun risultato"
},
"BootstrapBlazor.Components.SelectTree": {
"PlaceHolder": "Clicca per selezionare ..."
},
"BootstrapBlazor.Components.SelectTreeView": {
"PlaceHolder": "Clicca per selezionare ..."
},
"BootstrapBlazor.Components.StringLengthValidator": {
"ErrorMessage": "Per favore inserisci un valore minore o uguale a {0}"
},
"BootstrapBlazor.Components.SweetAlert": {
"CloseButtonText": "Chiudi",
"CancelButtonText": "Annulla",
"ConfirmButtonText": "Conferma"
},
"BootstrapBlazor.Components.Switch": {
"OnInnerText": "Acceso",
"OffInnerText": "Spento"
},
"BootstrapBlazor.Components.Tab": {
"CloseCurrentTabText": "Annulla",
"CloseOtherTabsText": "Chiudi altri",
"CloseAllTabsText": "Chiudi tutti",
"NotFoundTabText": "Non trovato",
"RefreshToolbarTooltipText": "Aggiorna",
"FullscreenToolbarTooltipText": "A schermo intero",
"PrevTabNavLinkTooltipText": "Scheda precedente",
"NextTabNavLinkTooltipText": "Scheda successiva",
"CloseTabNavLinkTooltipText": "Chiudi",
"ContextRefresh": "Aggiorna",
"ContextClose": "Chiudi",
"ContextCloseOther": "Chiudi altri",
"ContextCloseAll": "Chiudi tutti",
"ContextFullScreen": "A schermo intero"
},
"BootstrapBlazor.Components.Table": {
"AddButtonText": "Aggiungi",
"EditButtonText": "Modifica",
"UpdateButtonText": "Aggiorna",
"DeleteButtonText": "Elimina",
"CancelButtonText": "Annulla",
"SaveButtonText": "Salva",
"CloseButtonText": "Chiudi",
"CancelDeleteButtonText": "Annulla",
"ConfirmDeleteButtonText": "Elimina",
"ConfirmDeleteContentText": "Sei sicuro di voler eliminare tutte le righe selezionate?",
"RefreshButtonText": "Aggiorna",
"CardViewButtonText": "Visualizzazione a schede",
"ColumnButtonTitleText": "Mostra/Nascondi colonne",
"ColumnButtonText": "Colonne",
"ExportButtonText": "Esporta",
"SearchPlaceholderText": "Cerca",
"SearchButtonText": "Cerca",
"ResetSearchButtonText": "Ripristina",
"AdvanceButtonText": "Ricerca avanzata",
"AdvancedSortModalTitle": "Ordina",
"AdvancedSortButtonText": "Ordinamento avanzato",
"CheckboxDisplayText": "Tutti",
"EditModalTitle": "Modifica",
"AddModalTitle": "Nuovo",
"LineNoText": "Righe",
"ColumnButtonTemplateHeaderText": "Azioni",
"SearchTooltip": "<div class='search-input-tooltip'>Per favore inserisci ...</br><kbd>Enter</kbd> Cerca <kbd>ESC</kbd> Pulisci</div>",
"SearchModalTitle": "Cerca",
"AddButtonToastTitle": "Aggiungi dati",
"AddButtonToastContent": "I dati non possono essere aggiunti.",
"EditButtonToastTitle": "Modifica dati",
"EditButtonToastNotSelectContent": "I dati non possono essere salvati.",
"EditButtonToastReadonlyContent": "I dati selezionati non possono essere modificati",
"EditButtonToastMoreSelectContent": "Solo una riga può essere modificata",
"EditButtonToastNoSaveMethodContent": "I dati non possono essere modificati",
"SaveButtonToastTitle": "Salva dati",
"SaveButtonToastContent": "Salvataggio non riuscito",
"SaveButtonToastResultContent": "I dati {0} sono stati salvati, la finestra si chiude dopo {1}s",
"SuccessText": "Operazione riuscita",
"FailText": "Operazione non riuscita",
"DeleteButtonToastTitle": "Elimina dati",
"DeleteButtonToastContent": "Seleziona le righe da eliminare, la finestra si chiude dopo {0}s",
"DeleteButtonToastResultContent": "Elimina dati {0}, la finestra si chiude dopo {1}s",
"DeleteButtonToastCanNotDeleteContent": "I dati selezionati non possono essere eliminati, la finestra si chiude dopo {0}s",
"DataServiceInvalidOperationText": "Valore per la proprietà 'DataService' in 'BootstrapBlazor.Components.Table`1[[{0}]]' non può essere fornito. Non è registrato alcun servizio di tipo 'BootstrapBlazor.Components.IDataService`1[{0}]'.",
"NotSetOnTreeExpandErrorMessage": "Il parametro OnTreeExpand non è impostato",
"UnsetText": "Nessuno",
"SortAscText": "Ascendente",
"SortDescText": "Discendente",
"EmptyText": "Nessun dato",
"ExportToastTitle": "Esporta dati",
"ExportToastContent": "Esporta dati {0}, chiusura automatica in {1} secondi",
"ExportToastInProgressContent": "Esportazione dati, chiusura automatica in {0} secondi",
"ExportCsvDropdownItemText": "MS-Csv",
"ExportExcelDropdownItemText": "MS-Excel",
"ExportPdfDropdownItemText": "Pdf",
"PageInfoText": "{0} - {1} di {2}",
"PageItemsText": "{0}/Pagina",
"CopyColumnTooltipText": "Copia l'intera colonna negli appunti",
"CopyColumnCopiedTooltipText": "Copiato!",
"ColumnWidthTooltipPrefix": "Larghezza: ",
"ColumnToolboxTitle": "Strumenti",
"AlignLeftText": "Sinistra",
"AlignLeftTooltipText": "Clicca per allineare il testo a sinistra in questa colonna",
"AlignCenterText": "Centrato",
"AlignCenterTooltipText": "Clicca per allineare il testo al centro in questa colonna",
"AlignRightText": "Destra",
"AlignRightTooltipText": "Clicca per allineare il testo a destra in questa colonna"
},
"BootstrapBlazor.Components.EditDialog": {
"CloseButtonText": "Chiudi",
"SaveButtonText": "Salva"
},
"BootstrapBlazor.Components.TableColumnFilter": {
"Title": "Filtra",
"ClearButtonText": "Pulisci",
"FilterButtonText": "Filtra",
"BoolFilter.AllText": "Tutti",
"BoolFilter.TrueText": "Vero",
"BoolFilter.FalseText": "Falso",
"GreaterThanOrEqual": "Maggiore o uguale",
"LessThanOrEqual": "Minore o uguale",
"GreaterThan": "Maggiore",
"LessThan": "Minore",
"Equal": "Uguale",
"NotEqual": "Diverso",
"Contains": "Contiene",
"NotContains": "Non contiene",
"EnumFilter.AllText": "Tutti",
"NotSupportedMessage": "Tipo di filtro non supportato. Si prega di adattare il filtro con FilterTemplate",
"MultiFilterSearchPlaceHolderText": "Si prega di inserire ...",
"MultiFilterSelectAllText": "Seleziona tutto"
},
"BootstrapBlazor.Components.FilterLogicItem": {
"And": "E",
"Or": "O"
},
"BootstrapBlazor.Components.SearchDialog": {
"ResetButtonText": "Ripristina",
"QueryButtonText": "Cerca"
},
"BootstrapBlazor.Components.SwitchButton": {
"OnText": "Acceso",
"OffText": "Spento"
},
"BootstrapBlazor.Components.Timer": {
"PauseText": "Pausa",
"ResumeText": "Riprendi",
"CancelText": "Annulla",
"StarText": "Inizia"
},
"BootstrapBlazor.Components.Toggle": {
"OnText": "Espandi",
"OffText": "Contrai"
},
"BootstrapBlazor.Components.Transfer": {
"LeftPanelText": "A sinistra",
"RightPanelText": "Selezionati",
"MinErrorMessage": "Seleziona almeno {0} elementi",
"MaxErrorMessage": "È possibile selezionare fino a {0} elementi"
},
"BootstrapBlazor.Components.TransferPanel": {
"SearchPlaceHolderString": "Si prega di inserire ...",
"Text": "Elenco"
},
"BootstrapBlazor.Components.Tree": {
"NotSetOnTreeExpandErrorMessage": "OnExpandNodeAsync-Parameter non impostato"
},
"BootstrapBlazor.Components.TreeView": {
"NotSetOnTreeExpandErrorMessage": "OnExpandNodeAsync-Parameter non impostato",
"ToolbarEditTitle": "Modifica nodo",
"ToolbarEditLabelText": "Rinomina"
},
"BootstrapBlazor.Components.UploadBase": {
"DeleteButtonText": "Elimina",
"BrowserButtonText": "Browser",
"FileExtensions": "Il file deve avere la seguente estensione: {0}",
"FileSizeValidation": "La dimensione del file deve essere inferiore a {0}",
"DropUploadText": "Trascina i file qui o <em>clicca per caricare</em>"
},
"BootstrapBlazor.Components.Handwritten": {
"SaveButtonText": "Salva",
"ClearButtonText": "Pulisci"
},
"BootstrapBlazor.Components.SignaturePad": {
"SignAboveLabel": "Firma nel campo",
"ClearBtnTitle": "Elimina",
"SignatureAlertText": "Si prega di fornire prima una firma",
"ChangeColorBtnTitle": "Cambia colore",
"UndoBtnTitle": "Annulla",
"CloseBtnTitle": "Chiudi",
"SaveBase64BtnTitle": "OK",
"SavePNGBtnTitle": "PNG",
"SaveJPGBtnTitle": "JPG",
"SaveSVGBtnTitle": "SVG"
},
"BootstrapBlazor.Components.NullableBoolItemsAttribute": {
"NullValueDisplayText": "Si prega di selezionare ...",
"TrueValueDisplayText": "Vero",
"FalseValueDisplayText": "Falso"
},
"BootstrapBlazor.Components.InsertRowMode": {
"Last": "Ultimo",
"First": "Primo"
},
"BootstrapBlazor.Components.IconDialog": {
"LabelText": "Simbolo",
"LabelFullText": "Html",
"ButtonText": "Copia",
"DialogHeaderText": "Simbolo selezionato",
"CopiedTooltipText": "Copia riuscita"
},
"BootstrapBlazor.Components.Splitting": {
"Text": "Caricamento ..."
},
"BootstrapBlazor.Components.QueryBuilder": {
"And": "E",
"Or": "O",
"GreaterThanOrEqual": "Maggiore o uguale",
"LessThanOrEqual": "Minore o uguale",
"GreaterThan": "Maggiore",
"LessThan": "Minore",
"Equal": "Uguale",
"NotEqual": "Diverso",
"Contains": "Contiene",
"NotContains": "Non contiene",
"GroupText": "Gruppo",
"ItemText": "Elemento"
},
"BootstrapBlazor.Components.TableAdvancedSortDialog": {
"AscText": "Ascendente",
"DescText": "Discendente"
},
"BootstrapBlazor.Components.ClockPicker": {
"AMText": "Mattina",
"PMText": "Pomeriggio"
},
"BootstrapBlazor.Components.ThemeProvider": {
"AutoModeText": "Automatico",
"DarkModeText": "Scuro",
"LightModeText": "Chiaro"
},
"BootstrapBlazor.Components.ValidateBase": {
"DefaultRequiredErrorMessage": "{0} è obbligatorio."
}
}

View File

@@ -1,75 +1,65 @@
{
"BootstrapBlazor.Components.AutoComplete": {
"NoDataTip": "Sem dados",
"PlaceHolder": "Digite"
"PlaceHolder": "Por favor, digite"
},
"BootstrapBlazor.Components.Captcha": {
"HeaderText": "Captcha",
"BarText": "Arraste para a direita e complete",
"FailedText": "Falha de carregamento",
"LoadText": "Carregando ...",
"TryText": "Tente novamente"
},
"BootstrapBlazor.Components.Camera": {
"DeviceLabel": "Camera",
"InitDevicesString": "Inicializar ...",
"PlayText": "Abrir",
"StopText": "Fechar",
"PhotoText": "Foto",
"FrontText": "Frente",
"BackText": "Atrás",
"NotFoundDevicesString": "Nenhum dispositivo encontrado"
"BarText": "Deslize para a direita para resolver o quebra-cabeça",
"FailedText": "Falha ao carregar",
"LoadText": "Carregando ..."
},
"BootstrapBlazor.Components.Calendar": {
"PreviousYear": "Ano Anterior",
"PreviousMonth": "Mês Anterior",
"PreviousYear": "Ano anterior",
"PreviousMonth": "Mês anterior",
"Today": "Hoje",
"NextMonth": "Próx.Mês",
"NextYear": "Próx.Ano",
"PreviousWeek": "Semana Ant.",
"NextMonth": "Próximo mês",
"NextYear": "Próximo ano",
"PreviousWeek": "Semana anterior",
"WeekText": "Semana",
"NextWeek": "Próx.Semana",
"NextWeek": "Próxima semana",
"WeekHeaderText": "",
"WeekLists": "Dom,Seg,Ter,Qua,Qui,Sex,Sáb",
"WeekNumberText": "{0} Semanas",
"Months": "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outobro,Novembro,Dezembro",
"Months": "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro",
"Title": "{0} {1}"
},
"BootstrapBlazor.Components.Cascader": {
"PlaceHolder": "Selecione ..."
"PlaceHolder": "Por favor, selecione ..."
},
"BootstrapBlazor.Components.Console": {
"HeaderText": "Monitor",
"LightTitle": "Light",
"LightTitle": "Indicador",
"ClearButtonText": "Limpar",
"AutoScrollText": "AutoScroll"
"AutoScrollText": "Rolagem automática"
},
"BootstrapBlazor.Components.DateTimePicker": {
"DatePlaceHolder": "Sel. data",
"TimePlaceHolder": "Sel. Hora",
"DateTimePlaceHolderText": "Selecione ...",
"DatePlaceHolderText": "Selecione ...",
"PickerButtonText": "Selecione",
"DatePlaceHolder": "Selecione a data",
"TimePlaceHolder": "Selecione o horário",
"DateTimePlaceHolderText": "Por favor, selecione ...",
"DatePlaceHolderText": "Por favor, selecione ...",
"TimeFormat": "hh\\:mm\\:ss",
"DateFormat": "dd/MM/yyyy",
"DateTimeFormat": "dd/MM/yyyy HH\\:mm\\:ss",
"AiraPrevYearLabel": "Ano Anterior",
"AiraNextYearLabel": "Próx. Ano",
"AiraPrevMonthLabel": "Mês Anterior",
"AiraNextMonthLabel": "Próx. Mês",
"DateFormat": "d/M/yyyy",
"DateTimeFormat": "d/M/yyyy HH\\:mm\\:ss",
"AiraPrevYearLabel": "Ano anterior",
"AiraNextYearLabel": "Próximo ano",
"AiraPrevMonthLabel": "Mês anterior",
"AiraNextMonthLabel": "Próximo mês",
"ClearButtonText": "Limpar",
"NowButtonText": "Hoje",
"NowButtonText": "Agora",
"ConfirmButtonText": "Ok",
"CancelButtonText": "Cancelar",
"YearText": "{0}",
"MonthText": "{0}",
"YearPeriodText": "{0} - {1}",
"Months": "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro",
"Months": "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez",
"MonthLists": "Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez",
"WeekLists": "Dom,Seg,Ter,Qua,Qui,Sex,Sab",
"GenericTypeErroMessage": "DateTimePicker suporta somente DateTime ou Nullable<DateTime>",
"WeekLists": "Dom,Seg,Ter,Qua,Qui,Sex,Sáb",
"GenericTypeErrorMessage": "DateTimePicker suporta apenas DateTime, DateTime?, DateTimeOffset, DateTimeOffset?",
"Today": "Hoje",
"Yesterday": "Amanha",
"Week": "Semana passada"
"Yesterday": "Ontem",
"Week": "Uma semana atrás"
},
"BootstrapBlazor.Components.DateTimeRange": {
"SeparateText": "Até",
@@ -78,11 +68,12 @@
"ClearButtonText": "Limpar",
"TodayButtonText": "Hoje",
"ConfirmButtonText": "Ok",
"DateFormat": "dd/MM/yyyy",
"Last7Days": "Últ. 7 Dias",
"Last30Days": "Últ 30 Dias",
"ThisMonth": "Esse Mês",
"LastMonth": "Mês Passado"
"DateTimeFormat": "d/M/yyyy hh\\:mm\\:ss tt",
"DateFormat": "d/M/yyyy",
"Last7Days": "Últimos 7 dias",
"Last30Days": "Últimos 30 dias",
"ThisMonth": "Este mês",
"LastMonth": "Mês passado"
},
"BootstrapBlazor.Components.BootstrapInputNumber": {
"ParsingErrorMessage": "O campo {0} deve ser um número."
@@ -93,20 +84,20 @@
"ButtonCloseText": "Fechar"
},
"BootstrapBlazor.Components.DropdownList": {
"PlaceHolder": "Selecione ..."
"PlaceHolder": "Por favor, selecione ..."
},
"BootstrapBlazor.Components.Editor": {
"PlaceHolder": "Click para editar"
"PlaceHolder": "Clique para editar"
},
"BootstrapBlazor.Components.EditorForm": {
"ModelInvalidOperationExceptionMessage": "O modelo do ValidateForm não corresponde à {0} MODEL",
"PlaceHolderText": "Digite ..."
"ModelInvalidOperationExceptionMessage": "O modelo ValidateForm não corresponde ao modelo {0}",
"PlaceHolderText": "Por favor, digite ..."
},
"BootstrapBlazor.Components.Empty": {
"Text": "Vazio"
"Text": "Sem dados"
},
"BootstrapBlazor.Components.EqualToValidator": {
"ErrorMessage": "Entre com o mesmo valor"
"ErrorMessage": "Por favor, insira o mesmo valor novamente"
},
"BootstrapBlazor.Components.ErrorLogger": {
"ToastTitle": "Erro de aplicação"
@@ -115,53 +106,60 @@
"TooltipText": "Topo"
},
"BootstrapBlazor.Components.Layout": {
"TooltipText": "Expandir/Recolher Sidear"
"TooltipText": "Clique para expandir/recolher a barra lateral"
},
"BootstrapBlazor.Components.Logout": {
"PrefixDisplayNameText": "Bem-vindos.",
"PrefixUserNameText": "Nome do registo:"
"PrefixDisplayNameText": "Bem-vindo",
"PrefixUserNameText": "Conta:"
},
"BootstrapBlazor.Components.LogoutLink": {
"Text": "Logout"
"Text": "Sair"
},
"BootstrapBlazor.Components.Menu": {
"InvalidOperationExceptionMessage": "O componente sidemenu não pode ser usado isoladamente. Use o componente Menu para IsVertical = true"
"InvalidOperationExceptionMessage": "O componente SideMenu não pode ser usado de forma independente. Use o componente Menu para definir IsVertical = true"
},
"BootstrapBlazor.Components.ModalDialog": {
"CloseButtonText": "Fechar",
"SaveButtonText": "Salvar",
"PrintButtonText": "Imprimir"
"PrintButtonText": "Imprimir",
"ExportPdfButtonText": "Exportar Pdf"
},
"BootstrapBlazor.Components.MultiSelect": {
"PlaceHolder": "Clique para selecionar ...",
"SelectAllText": "Tudo",
"ReverseSelectText": "Reverso",
"PlaceHolder": "Selecione itens ...",
"SelectAllText": "Todos",
"ReverseSelectText": "Inverter",
"ClearText": "Limpar",
"MinErrorMessage": "Selecione pelo menos {0} item(s)",
"MaxErrorMessage": "No máximo {0} item(s) podem ser selecionados"
"MinErrorMessage": "Selecione pelo menos {0} itens",
"MaxErrorMessage": "No máximo {0} itens podem ser selecionados",
"NoSearchDataText": "Sem resultado"
},
"BootstrapBlazor.Components.Pagination": {
"GotoNavigatorLabelText": "Goto"
"GotoNavigatorLabelText": "Ir para"
},
"BootstrapBlazor.Components.PopConfirmButton": {
"CloseButtonText": "Cancelar",
"ConfirmButtonText": "Ok",
"Content": "Confirma a operação ?"
"Content": "Tem certeza de que deseja realizar esta operação?"
},
"BootstrapBlazor.Components.PrintButton": {
"Text": "Imprimir"
},
"BootstrapBlazor.Components.Repeater": {
"EmptyText": "Sem dados"
},
"BootstrapBlazor.Components.Search": {
"SearchButtonText": "Pocurar"
"SearchButtonText": "Pesquisar",
"NoDataTip": "Nenhum registro encontrado"
},
"BootstrapBlazor.Components.Select": {
"PlaceHolder": "Selecionar ..."
"PlaceHolder": "Por favor, selecione ...",
"NoSearchDataText": "Sem resultado"
},
"BootstrapBlazor.Components.SelectTree": {
"PlaceHolder": "Selecionar ..."
"PlaceHolder": "Por favor, selecione ..."
},
"BootstrapBlazor.Components.StringLengthValidator": {
"ErrorMessage": "Entre com um valor menor ou igual a {{0}}"
"ErrorMessage": "Por favor, insira um valor menor ou igual a {{0}}"
},
"BootstrapBlazor.Components.SweetAlert": {
"CloseButtonText": "Fechar",
@@ -169,18 +167,28 @@
"ConfirmButtonText": "Confirmar"
},
"BootstrapBlazor.Components.Switch": {
"OnInnerText": "Lig.",
"OffInnerText": "Desl."
"OnInnerText": "Ligado",
"OffInnerText": "Desligado"
},
"BootstrapBlazor.Components.Tab": {
"CloseCurrentTabText": "Fechar",
"CloseOtherTabsText": "Fechar as Outras",
"CloseAllTabsText": "Fechar todas",
"NotFoundTabText": "Não Encontrado"
"CloseOtherTabsText": "Fechar outros",
"CloseAllTabsText": "Fechar todos",
"NotFoundTabText": "Não encontrado",
"RefreshToolbarTooltipText": "Atualizar",
"FullscreenToolbarTooltipText": "Tela cheia",
"PrevTabNavLinkTooltipText": "Aba anterior",
"NextTabNavLinkTooltipText": "Próxima aba",
"CloseTabNavLinkTooltipText": "Fechar",
"ContextRefresh": "Atualizar",
"ContextClose": "Fechar",
"ContextCloseOther": "Fechar outras abas",
"ContextCloseAll": "Fechar todas as abas",
"ContextFullScreen": "Tela cheia"
},
"BootstrapBlazor.Components.Table": {
"AddButtonText": "Incluir",
"EditButtonText": "Alterar",
"AddButtonText": "Adicionar",
"EditButtonText": "Editar",
"UpdateButtonText": "Atualizar",
"DeleteButtonText": "Excluir",
"CancelButtonText": "Cancelar",
@@ -188,82 +196,96 @@
"CloseButtonText": "Fechar",
"CancelDeleteButtonText": "Cancelar",
"ConfirmDeleteButtonText": "Excluir",
"ConfirmDeleteContentText": "Confirma a exclusão dos registros selecionados ?",
"ConfirmDeleteContentText": "Tem certeza de que deseja EXCLUIR todas as linhas selecionadas?",
"RefreshButtonText": "Atualizar",
"CardViewButtonText": "Exibir",
"ColumnButtonTitleText": "Mostra/Esconder Colunas",
"CardViewButtonText": "Visualizar",
"ColumnButtonTitleText": "Mostrar/Ocultar Colunas",
"ColumnButtonText": "Colunas",
"ExportButtonText": "Exportar",
"SearchPlaceholderText": "Localizar",
"SearchButtonText": "Localizar",
"ResetSearchButtonText": "Resetar",
"AdvanceButtonText": "Busca Avançada",
"SearchPlaceholderText": "Pesquisar",
"SearchButtonText": "Pesquisar",
"ResetSearchButtonText": "Redefinir",
"AdvanceButtonText": "Pesquisa avançada",
"AdvancedSortModalTitle": "Ordenar",
"AdvancedSortButtonText": "Ordenação avançada",
"CheckboxDisplayText": "Todos",
"EditModalTitle": "Editar Registro",
"AddModalTitle": "Novo Registro",
"LineNoText": "Número",
"ColumnButtonTemplateHeaderText": "",
"SearchTooltip": "<div class='search-input-tooltip'>Tecle ...</br><kbd>Enter</kbd> Pesquisar <kbd>ESC</kbd> Limpar</div>",
"SearchModalTitle": "Procurando",
"AddButtonToastTitle": "Adicionar Registrro",
"AddButtonToastContent": "Falha ao Adicionar. Atribua o método OnAddAsync",
"EditButtonToastTitle": "Adicionar Registro",
"EditButtonToastNotSelectContent": "Falha ao Salvar. Atribua o método OnSaveAsync",
"EditButtonToastReadonlyContent": "Os dados seleccionados não podem ser editados",
"EditButtonToastMoreSelectContent": "Somente uma linha pode ser alterada",
"EditButtonToastNoSaveMethodContent": "Falha ao Editar. Atribua o método OnSaveAsync",
"SaveButtonToastTitle": "Salvar Registro",
"SaveButtonToastContent": "Falha ao Salvar. Atribua o método OnSaveAsync",
"SaveButtonToastResultContent": "Registro salvo {0}, fechando em {1}s",
"SuccessText": "Successo",
"EditModalTitle": "Editar",
"AddModalTitle": "Novo",
"LineNoText": "Nº",
"ColumnButtonTemplateHeaderText": "Ações",
"SearchTooltip": "<div class='search-input-tooltip'>Por favor, digite ...</br><kbd>Enter</kbd> Pesquisar <kbd>ESC</kbd> Limpar</div>",
"SearchModalTitle": "Pesquisando",
"AddButtonToastTitle": "Adicionar dados",
"AddButtonToastContent": "Falha ao adicionar dados. Implemente o método OnAddAsync",
"EditButtonToastTitle": "Adicionar dados",
"EditButtonToastNotSelectContent": "Falha ao salvar dados. Implemente o método OnSaveAsync",
"EditButtonToastReadonlyContent": "Os dados selecionados não podem ser editados",
"EditButtonToastMoreSelectContent": "Apenas uma linha pode ser editada",
"EditButtonToastNoSaveMethodContent": "Não é possível editar os dados. Implemente o método OnSaveAsync",
"SaveButtonToastTitle": "Salvar dados",
"SaveButtonToastContent": "Falha ao salvar dados. Implemente o método OnSaveAsync",
"SaveButtonToastResultContent": "Dados salvos {0}, fechamento automático em {1}s",
"SuccessText": "Sucesso",
"FailText": "Falha",
"DeleteButtonToastTitle": "Apagar Registro",
"DeleteButtonToastContent": "Selecione o registro a excluir, fechando em {0}s",
"DeleteButtonToastResultContent": "Registro excluido {0}, fechando em {1}s",
"DeleteButtonToastCanNotDeleteContent": "Não foi possível editar o X, fechando em {0}s",
"DataServiceInvalidOperationText": "Não foi possível fornecer um valor para 'DataService' do tipo 'BootstrapBlazor.Components.Table`1[[{0}]]'. Não existe serviço registrado do tipo 'BootstrapBlazor.Components.IDataService`1[{0}]'.",
"NotSetOnTreeExpandErrorMessage": "parâmetro OnTreeExpand não atribuído",
"DeleteButtonToastTitle": "Excluir dados",
"DeleteButtonToastContent": "Selecione as linhas para excluir, fechamento automático em {0}s",
"DeleteButtonToastResultContent": "Dados excluídos {0}, fechamento automático em {1}s",
"DeleteButtonToastCanNotDeleteContent": "Há dados não excluíveis na seleção, fechamento automático em {0}s",
"DataServiceInvalidOperationText": "Não é possível fornecer um valor para a propriedade 'DataService' no tipo 'BootstrapBlazor.Components.Table`1[[{0}]]'. Nenhum serviço registrado do tipo 'BootstrapBlazor.Components.IDataService`1[{0}]'.",
"NotSetOnTreeExpandErrorMessage": "parâmetro OnTreeExpand não definido",
"UnsetText": "Asc",
"SortAscText": "Desc",
"SortDescText": "Nenhum",
"EmptyText": "Vazio",
"ExportToastTitle": "Exportar dados",
"ExportToastContent": "Exportar dados {0}, Fechamento automático em {0} segundos",
"ExportToastInProgressContent": "Exportar dados, Fechamento automático em {0} segundos",
"SortDescText": "Não definido",
"EmptyText": "Sem dados",
"ExportToastTitle": "Exportar",
"ExportToastContent": "Exportar dados {0}, fechamento automático em {1}s",
"ExportToastInProgressContent": "Exportando dados, aguarde, fechamento automático em {0}s",
"ExportCsvDropdownItemText": "MS-Csv",
"ExportExcelDropdownItemText": "MS-Excel",
"ExportPdfDropdownItemText": "Pdf",
"PageInfoText": "{0} - {1} Total {2}",
"PageItemsText": "{0}/page"
"PageItemsText": "{0}/página",
"CopyColumnTooltipText": "Copiar toda a coluna para a área de transferência",
"CopyColumnCopiedTooltipText": "Copiado!",
"ColumnWidthTooltipPrefix": "largura: ",
"ColumnToolboxTitle": "Ferramentas",
"AlignLeftText": "Esquerda",
"AlignLeftTooltipText": "Clique para alinhar o texto à esquerda nesta coluna",
"AlignCenterText": "Centro",
"AlignCenterTooltipText": "Clique para centralizar o texto nesta coluna",
"AlignRightText": "Direita",
"AlignRightTooltipText": "Clique para alinhar o texto à direita nesta coluna"
},
"BootstrapBlazor.Components.EditDialog": {
"CloseButtonText": "Fechar",
"SaveButtonText": "Salvar"
},
"BootstrapBlazor.Components.TableFilter": {
"Title": "Filtrar",
"BootstrapBlazor.Components.TableColumnFilter": {
"ClearButtonText": "Limpar",
"FilterButtonText": "Filtrar",
"BoolFilter.AllText": "Todos",
"BoolFilter.TrueText": "Verdadeiro",
"BoolFilter.FalseText": "Falso",
"GreaterThanOrEqual": "Maior Ou Igual",
"LessThanOrEqual": "Menor Ou Igual",
"GreaterThan": "Maior Que",
"LessThan": "Mwnor Que",
"GreaterThanOrEqual": "Maior ou igual",
"LessThanOrEqual": "Menor ou igual",
"GreaterThan": "Maior que",
"LessThan": "Menor que",
"Equal": "Igual",
"NotEqual": "Diferente",
"Contains": "Contém",
"NotContains": "Não Contém",
"EnumFilter.AllText": "Todos"
"NotContains": "Não contém",
"EnumFilter.AllText": "Todos",
"NotSupportedColumnFilterMessage": "<p>Tipo de filtro não suportado, personalize o filtro usando <code>FilterTemplate</code></p><div>Consulte <a href=\"https://www.blazor.zone/table/filter#CustomFilter\" target=\"_blank\">CustomFilter</a></div>",
"MultiFilterSearchPlaceHolderText": "Por favor, digite ...",
"MultiFilterSelectAllText": "Selecionar todos"
},
"BootstrapBlazor.Components.FilterLogicItem": {
"And": "E",
"Or": "Ou"
},
"BootstrapBlazor.Components.SearchDialog": {
"ResetButtonText": "Resetar",
"QueryButtonText": "Pesquisar"
"ResetButtonText": "Redefinir",
"QueryButtonText": "Consultar"
},
"BootstrapBlazor.Components.SwitchButton": {
"OnText": "Ligado",
@@ -273,7 +295,7 @@
"PauseText": "Pausar",
"ResumeText": "Continuar",
"CancelText": "Cancelar",
"StarText": "Star"
"StarText": "Iniciar"
},
"BootstrapBlazor.Components.Toggle": {
"OnText": "Expandir",
@@ -281,33 +303,38 @@
},
"BootstrapBlazor.Components.Transfer": {
"LeftPanelText": "Todos",
"RightPanelText": "Selecionados"
"RightPanelText": "Selecionados",
"MinErrorMessage": "Selecione pelo menos {0} itens",
"MaxErrorMessage": "Até {0} itens podem ser selecionados"
},
"BootstrapBlazor.Components.TransferPanel": {
"SearchPlaceHolderString": "Digite ...",
"SearchPlaceHolderString": "Por favor, digite ...",
"Text": "Lista"
},
"BootstrapBlazor.Components.Tree": {
"NotSetOnTreeExpandErrorMessage": "parâmetro OnExpandNodeAsync não atribuído"
"NotSetOnTreeExpandErrorMessage": "parâmetro OnExpandNodeAsync não definido"
},
"BootstrapBlazor.Components.TreeView": {
"NotSetOnTreeExpandErrorMessage": "parâmetro OnExpandNodeAsync não atribuído"
"NotSetOnTreeExpandErrorMessage": "parâmetro OnExpandNodeAsync não definido",
"ToolbarEditTitle": "Editar nó da árvore",
"ToolbarEditLabelText": "Renomear"
},
"BootstrapBlazor.Components.UploadBase": {
"DeleteButtonText": "Excluir",
"BrowserButtonText": "Browser",
"FileExtensions": "O aquivo deve conter uma das extensões: {0}",
"FileSizeValidation": "O tamanho do arquivo deve ser inferior a {0}"
"BrowserButtonText": "Procurar",
"FileExtensions": "O arquivo deve ter uma das seguintes extensões: {0}",
"FileSizeValidation": "O tamanho do arquivo deve ser menor que {0}",
"DropUploadText": "Solte os arquivos aqui ou <em>clique para enviar</em>"
},
"BootstrapBlazor.Components.Handwritten": {
"SaveButtonText": "Salvar",
"ClearButtonText": "Limpar"
},
"BootstrapBlazor.Components.SignaturePad": {
"SignAboveLabel": "Assinar na caixa",
"SignAboveLabel": "Assine no quadro",
"ClearBtnTitle": "Limpar",
"SignatureAlertText": "Por favor, forneça uma assinatura primeiro",
"ChangeColorBtnTitle": "Mudar a cor",
"ChangeColorBtnTitle": "Mudar cor",
"UndoBtnTitle": "Desfazer",
"CloseBtnTitle": "Fechar",
"SaveBase64BtnTitle": "OK",
@@ -316,8 +343,8 @@
"SaveSVGBtnTitle": "SVG"
},
"BootstrapBlazor.Components.NullableBoolItemsAttribute": {
"NullValueDisplayText": "Seleccione por favor",
"TrueValueDisplayText": "Verdade",
"NullValueDisplayText": "Por favor, selecione ...",
"TrueValueDisplayText": "Verdadeiro",
"FalseValueDisplayText": "Falso"
},
"BootstrapBlazor.Components.InsertRowMode": {
@@ -328,7 +355,49 @@
"LabelText": "Ícone",
"LabelFullText": "Html",
"ButtonText": "Copiar",
"DialogHeaderText": "Ícone Seleccionado",
"CopiedTooltipText": "A cópia foi bem sucedida"
"DialogHeaderText": "Ícone selecionado",
"CopiedTooltipText": "Copiado"
},
"BootstrapBlazor.Components.Splitting": {
"Text": "Carregando ..."
},
"BootstrapBlazor.Components.QueryBuilder": {
"And": "e",
"Or": "ou",
"GreaterThanOrEqual": "Maior ou igual",
"LessThanOrEqual": "Menor ou igual",
"GreaterThan": "Maior que",
"LessThan": "Menor que",
"Equal": "Igual",
"NotEqual": "Diferente",
"Contains": "Contém",
"NotContains": "Não contém",
"GroupText": "Grupo",
"ItemText": "Item"
},
"BootstrapBlazor.Components.TableAdvancedSortDialog": {
"AscText": "Ascendente",
"DescText": "Descendente"
},
"BootstrapBlazor.Components.ClockPicker": {
"AMText": "AM",
"PMText": "PM"
},
"BootstrapBlazor.Components.ThemeProvider": {
"AutoModeText": "Auto",
"DarkModeText": "Escuro",
"LightModeText": "Claro"
},
"BootstrapBlazor.Components.ValidateBase": {
"DefaultRequiredErrorMessage": "{0} é obrigatório."
},
"BootstrapBlazor.Components.NetworkMonitorIndicator": {
"NTitle": "Rede",
"NetworkType": "Tipo de rede",
"Downlink": "Downlink",
"RTT": "RTT"
},
"BootstrapBlazor.Components.LoadMore": {
"NoMoreText": "Sem mais dados"
}
}

403
localization/ru-RU.json Normal file
View File

@@ -0,0 +1,403 @@
{
"BootstrapBlazor.Components.AutoComplete": {
"NoDataTip": "Нет данных",
"PlaceHolder": "Пожалуйста, введите"
},
"BootstrapBlazor.Components.Captcha": {
"HeaderText": "Капча",
"BarText": "Проведите вправо для решения головоломки",
"FailedText": "Ошибка загрузки",
"LoadText": "Загрузка ..."
},
"BootstrapBlazor.Components.Calendar": {
"PreviousYear": "Предыдущий год",
"PreviousMonth": "Предыдущий месяц",
"Today": "Сегодня",
"NextMonth": "Следующий месяц",
"NextYear": "Следующий год",
"PreviousWeek": "Предыдущая неделя",
"WeekText": "Неделя",
"NextWeek": "Следующая неделя",
"WeekHeaderText": "",
"WeekLists": "Вс,Пн,Вт,Ср,Чт,Пт,Сб",
"WeekNumberText": "{0} недель",
"Months": "Январь,Февраль,Март,Апрель,Май,Июнь,Июль,Август,Сентябрь,Октябрь,Ноябрь,Декабрь",
"Title": "{0} {1}"
},
"BootstrapBlazor.Components.Cascader": {
"PlaceHolder": "Пожалуйста, выберите ..."
},
"BootstrapBlazor.Components.Console": {
"HeaderText": "Монитор",
"LightTitle": "Индикатор",
"ClearButtonText": "Очистить",
"AutoScrollText": "Автопрокрутка"
},
"BootstrapBlazor.Components.DateTimePicker": {
"PickerButtonText": "Выберите",
"DatePlaceHolder": "Выберите дату",
"TimePlaceHolder": "Выберите время",
"DateTimePlaceHolderText": "Пожалуйста, выберите ...",
"DatePlaceHolderText": "Пожалуйста, выберите ...",
"TimeFormat": "hh\\:mm\\:ss",
"DateFormat": "d.M.yyyy",
"DateTimeFormat": "d.M.yyyy HH\\:mm\\:ss",
"AiraPrevYearLabel": "Предыдущий год",
"AiraNextYearLabel": "Следующий год",
"AiraPrevMonthLabel": "Предыдущий месяц",
"AiraNextMonthLabel": "Следующий месяц",
"ClearButtonText": "Очистить",
"NowButtonText": "Сейчас",
"ConfirmButtonText": "Ок",
"CancelButtonText": "Отмена",
"YearText": "{0}",
"MonthText": "{0}",
"YearPeriodText": "{0} - {1}",
"Months": "Янв,Фев,Мар,Апр,Май,Июн,Июл,Авг,Сен,Окт,Ноя,Дек",
"MonthLists": "Янв,Фев,Мар,Апр,Май,Июн,Июл,Авг,Сен,Окт,Ноя,Дек",
"WeekLists": "Вс,Пн,Вт,Ср,Чт,Пт,Сб",
"GenericTypeErrorMessage": "DateTimePicker поддерживает только DateTime, DateTime?, DateTimeOffset, DateTimeOffset?",
"Today": "Сегодня",
"Yesterday": "Вчера",
"Week": "Неделю назад"
},
"BootstrapBlazor.Components.DateTimeRange": {
"SeparateText": "До",
"StartPlaceHolderText": "Дата начала",
"EndPlaceHolderText": "Дата окончания",
"ClearButtonText": "Очистить",
"TodayButtonText": "Сегодня",
"ConfirmButtonText": "Ок",
"DateTimeFormat": "d.M.yyyy hh\\:mm\\:ss tt",
"DateFormat": "d.M.yyyy",
"Last7Days": "Последние 7 дней",
"Last30Days": "Последние 30 дней",
"ThisMonth": "Этот месяц",
"LastMonth": "Прошлый месяц"
},
"BootstrapBlazor.Components.BootstrapInputNumber": {
"ParsingErrorMessage": "Поле {0} должно быть числом."
},
"BootstrapBlazor.Components.ResultDialogOption": {
"ButtonYesText": "Да",
"ButtonNoText": "Нет",
"ButtonCloseText": "Закрыть"
},
"BootstrapBlazor.Components.DropdownList": {
"PlaceHolder": "Пожалуйста, выберите ..."
},
"BootstrapBlazor.Components.Editor": {
"PlaceHolder": "Нажмите для редактирования"
},
"BootstrapBlazor.Components.EditorForm": {
"ModelInvalidOperationExceptionMessage": "ValidateForm MODEL не соответствует {0} MODEL",
"PlaceHolderText": "Пожалуйста, введите ..."
},
"BootstrapBlazor.Components.Empty": {
"Text": "Нет данных"
},
"BootstrapBlazor.Components.EqualToValidator": {
"ErrorMessage": "Пожалуйста, введите то же значение еще раз"
},
"BootstrapBlazor.Components.ErrorLogger": {
"ToastTitle": "Ошибка приложения"
},
"BootstrapBlazor.Components.GoTop": {
"TooltipText": "Наверх"
},
"BootstrapBlazor.Components.Layout": {
"TooltipText": "Кликните для раскрытия/сворачивания боковой панели"
},
"BootstrapBlazor.Components.Logout": {
"PrefixDisplayNameText": "Добро пожаловать",
"PrefixUserNameText": "Аккаунт:"
},
"BootstrapBlazor.Components.LogoutLink": {
"Text": "Выйти"
},
"BootstrapBlazor.Components.Menu": {
"InvalidOperationExceptionMessage": "Компонент SideMenu нельзя использовать отдельно. Используйте Menu с IsVertical = true"
},
"BootstrapBlazor.Components.ModalDialog": {
"CloseButtonText": "Закрыть",
"SaveButtonText": "Сохранить",
"PrintButtonText": "Печать",
"ExportPdfButtonText": "Экспорт Pdf"
},
"BootstrapBlazor.Components.MultiSelect": {
"PlaceHolder": "Выберите элементы ...",
"SelectAllText": "Все",
"ReverseSelectText": "Обратить",
"ClearText": "Очистить",
"MinErrorMessage": "Выберите не менее {0} элементов",
"MaxErrorMessage": "Можно выбрать не более {0} элементов",
"NoSearchDataText": "Нет результатов"
},
"BootstrapBlazor.Components.Pagination": {
"GotoNavigatorLabelText": "Перейти"
},
"BootstrapBlazor.Components.PopConfirmButton": {
"CloseButtonText": "Отмена",
"ConfirmButtonText": "Ок",
"Content": "Вы уверены, что хотите выполнить эту операцию?"
},
"BootstrapBlazor.Components.PrintButton": {
"Text": "Печать"
},
"BootstrapBlazor.Components.Repeater": {
"EmptyText": "Нет данных"
},
"BootstrapBlazor.Components.Search": {
"SearchButtonText": "Поиск",
"NoDataTip": "Записи не найдены"
},
"BootstrapBlazor.Components.Select": {
"PlaceHolder": "Пожалуйста, выберите ...",
"NoSearchDataText": "Нет результатов"
},
"BootstrapBlazor.Components.SelectTree": {
"PlaceHolder": "Пожалуйста, выберите ..."
},
"BootstrapBlazor.Components.StringLengthValidator": {
"ErrorMessage": "Пожалуйста, введите значение не больше {{0}}"
},
"BootstrapBlazor.Components.SweetAlert": {
"CloseButtonText": "Закрыть",
"CancelButtonText": "Отмена",
"ConfirmButtonText": "Подтвердить"
},
"BootstrapBlazor.Components.Switch": {
"OnInnerText": "Вкл",
"OffInnerText": "Выкл"
},
"BootstrapBlazor.Components.Tab": {
"CloseCurrentTabText": "Закрыть",
"CloseOtherTabsText": "Закрыть другие",
"CloseAllTabsText": "Закрыть все",
"NotFoundTabText": "Не найдено",
"RefreshToolbarTooltipText": "Обновить",
"FullscreenToolbarTooltipText": "На весь экран",
"PrevTabNavLinkTooltipText": "Предыдущая вкладка",
"NextTabNavLinkTooltipText": "Следующая вкладка",
"CloseTabNavLinkTooltipText": "Закрыть",
"ContextRefresh": "Обновить",
"ContextClose": "Закрыть",
"ContextCloseOther": "Закрыть другие вкладки",
"ContextCloseAll": "Закрыть все вкладки",
"ContextFullScreen": "Полный экран"
},
"BootstrapBlazor.Components.Table": {
"AddButtonText": "Добавить",
"EditButtonText": "Редактировать",
"UpdateButtonText": "Обновить",
"DeleteButtonText": "Удалить",
"CancelButtonText": "Отмена",
"SaveButtonText": "Сохранить",
"CloseButtonText": "Закрыть",
"CancelDeleteButtonText": "Отмена",
"ConfirmDeleteButtonText": "Удалить",
"ConfirmDeleteContentText": "Вы уверены, что хотите УДАЛИТЬ все выбранные строки?",
"RefreshButtonText": "Обновить",
"CardViewButtonText": "Просмотр",
"ColumnButtonTitleText": "Показать/Скрыть столбцы",
"ColumnButtonText": "Столбцы",
"ExportButtonText": "Экспорт",
"SearchPlaceholderText": "Поиск",
"SearchButtonText": "Поиск",
"ResetSearchButtonText": "Сброс",
"AdvanceButtonText": "Расширенный поиск",
"AdvancedSortModalTitle": "Сортировка",
"AdvancedSortButtonText": "Расширенная сортировка",
"CheckboxDisplayText": "Все",
"EditModalTitle": "Редактировать",
"AddModalTitle": "Новый",
"LineNoText": "№",
"ColumnButtonTemplateHeaderText": "Действия",
"SearchTooltip": "<div class='search-input-tooltip'>Пожалуйста, введите ...</br><kbd>Enter</kbd> Поиск <kbd>ESC</kbd> Очистить</div>",
"SearchModalTitle": "Поиск",
"AddButtonToastTitle": "Добавить данные",
"AddButtonToastContent": "Ошибка добавления данных. Пожалуйста, реализуйте метод OnAddAsync",
"EditButtonToastTitle": "Добавить данные",
"EditButtonToastNotSelectContent": "Ошибка сохранения данных. Пожалуйста, реализуйте метод OnSaveAsync",
"EditButtonToastReadonlyContent": "Выбранные данные нельзя редактировать",
"EditButtonToastMoreSelectContent": "Можно редактировать только одну строку",
"EditButtonToastNoSaveMethodContent": "Невозможно редактировать данные. Пожалуйста, реализуйте метод OnSaveAsync",
"SaveButtonToastTitle": "Сохранить данные",
"SaveButtonToastContent": "Ошибка сохранения данных. Пожалуйста, реализуйте метод OnSaveAsync",
"SaveButtonToastResultContent": "Данные сохранены {0}, авто-закрытие через {1}с",
"SuccessText": "Успешно",
"FailText": "Ошибка",
"DeleteButtonToastTitle": "Удалить данные",
"DeleteButtonToastContent": "Пожалуйста, выберите строки для удаления, авто-закрытие через {0}с",
"DeleteButtonToastResultContent": "Данные удалены {0}, авто-закрытие через {1}с",
"DeleteButtonToastCanNotDeleteContent": "В выбранных данных есть неудаляемые, авто-закрытие через {0}с",
"DataServiceInvalidOperationText": "Невозможно предоставить значение для свойства 'DataService' типа 'BootstrapBlazor.Components.Table`1[[{0}]]'. Нет зарегистрированной службы типа 'BootstrapBlazor.Components.IDataService`1[{0}]'.",
"NotSetOnTreeExpandErrorMessage": "Параметр OnTreeExpand не установлен",
"UnsetText": "По возрастанию",
"SortAscText": "По убыванию",
"SortDescText": "Сбросить",
"EmptyText": "Нет данных",
"ExportToastTitle": "Экспорт",
"ExportToastContent": "Экспорт данных {0}, авто-закрытие через {1}с",
"ExportToastInProgressContent": "Экспорт данных, пожалуйста, подождите, авто-закрытие через {0}с",
"ExportCsvDropdownItemText": "MS-Csv",
"ExportExcelDropdownItemText": "MS-Excel",
"ExportPdfDropdownItemText": "Pdf",
"PageInfoText": "{0} - {1} Всего {2}",
"PageItemsText": "{0}/страница",
"CopyColumnTooltipText": "Скопировать весь столбец в буфер",
"CopyColumnCopiedTooltipText": "Скопировано!",
"ColumnWidthTooltipPrefix": "ширина: ",
"ColumnToolboxTitle": "Инструменты",
"AlignLeftText": "Влево",
"AlignLeftTooltipText": "Кликните для выравнивания текста влево",
"AlignCenterText": "По центру",
"AlignCenterTooltipText": "Кликните для выравнивания текста по центру",
"AlignRightText": "Вправо",
"AlignRightTooltipText": "Кликните для выравнивания текста вправо"
},
"BootstrapBlazor.Components.EditDialog": {
"CloseButtonText": "Закрыть",
"SaveButtonText": "Сохранить"
},
"BootstrapBlazor.Components.TableColumnFilter": {
"ClearButtonText": "Очистить",
"FilterButtonText": "Фильтр",
"BoolFilter.AllText": "Все",
"BoolFilter.TrueText": "Истина",
"BoolFilter.FalseText": "Ложь",
"GreaterThanOrEqual": "Больше или равно",
"LessThanOrEqual": "Меньше или равно",
"GreaterThan": "Больше",
"LessThan": "Меньше",
"Equal": "Равно",
"NotEqual": "Не равно",
"Contains": "Содержит",
"NotContains": "Не содержит",
"EnumFilter.AllText": "Все",
"NotSupportedColumnFilterMessage": "<p>Неподдерживаемый тип фильтра. Используйте <code>FilterTemplate</code> для настройки фильтра</p><div>См. <a href=\"https://www.blazor.zone/table/filter#CustomFilter\" target=\"_blank\">CustomFilter</a></div>",
"MultiFilterSearchPlaceHolderText": "Пожалуйста, введите ...",
"MultiFilterSelectAllText": "Выбрать все"
},
"BootstrapBlazor.Components.FilterLogicItem": {
"And": "И",
"Or": "Или"
},
"BootstrapBlazor.Components.SearchDialog": {
"ResetButtonText": "Сброс",
"QueryButtonText": "Запрос"
},
"BootstrapBlazor.Components.SwitchButton": {
"OnText": "Вкл",
"OffText": "Выкл"
},
"BootstrapBlazor.Components.Timer": {
"PauseText": "Пауза",
"ResumeText": "Продолжить",
"CancelText": "Отмена",
"StarText": "Старт"
},
"BootstrapBlazor.Components.Toggle": {
"OnText": "Развернуть",
"OffText": "Свернуть"
},
"BootstrapBlazor.Components.Transfer": {
"LeftPanelText": "Все",
"RightPanelText": "Выбрано",
"MinErrorMessage": "Пожалуйста, выберите не менее {0} элементов",
"MaxErrorMessage": "Можно выбрать до {0} элементов"
},
"BootstrapBlazor.Components.TransferPanel": {
"SearchPlaceHolderString": "Пожалуйста, введите ...",
"Text": "Список"
},
"BootstrapBlazor.Components.Tree": {
"NotSetOnTreeExpandErrorMessage": "Параметр OnExpandNodeAsync не установлен"
},
"BootstrapBlazor.Components.TreeView": {
"NotSetOnTreeExpandErrorMessage": "Параметр OnExpandNodeAsync не установлен",
"ToolbarEditTitle": "Редактировать узел",
"ToolbarEditLabelText": "Переименовать"
},
"BootstrapBlazor.Components.UploadBase": {
"DeleteButtonText": "Удалить",
"BrowserButtonText": "Обзор",
"FileExtensions": "Файл должен иметь одно из следующих расширений: {0}",
"FileSizeValidation": "Размер файла должен быть меньше {0}",
"DropUploadText": "Перетащите файлы сюда или <em>кликните для загрузки</em>"
},
"BootstrapBlazor.Components.Handwritten": {
"SaveButtonText": "Сохранить",
"ClearButtonText": "Очистить"
},
"BootstrapBlazor.Components.SignaturePad": {
"SignAboveLabel": "Подпишите в поле",
"ClearBtnTitle": "Очистить",
"SignatureAlertText": "Пожалуйста, сначала подпишитесь",
"ChangeColorBtnTitle": "Изменить цвет",
"UndoBtnTitle": "Отменить",
"CloseBtnTitle": "Закрыть",
"SaveBase64BtnTitle": "ОК",
"SavePNGBtnTitle": "PNG",
"SaveJPGBtnTitle": "JPG",
"SaveSVGBtnTitle": "SVG"
},
"BootstrapBlazor.Components.NullableBoolItemsAttribute": {
"NullValueDisplayText": "Пожалуйста, выберите ...",
"TrueValueDisplayText": "Истина",
"FalseValueDisplayText": "Ложь"
},
"BootstrapBlazor.Components.InsertRowMode": {
"Last": "Последний",
"First": "Первый"
},
"BootstrapBlazor.Components.IconDialog": {
"LabelText": "Иконка",
"LabelFullText": "Html",
"ButtonText": "Копировать",
"DialogHeaderText": "Выбранная иконка",
"CopiedTooltipText": "Скопировано"
},
"BootstrapBlazor.Components.Splitting": {
"Text": "Загрузка ..."
},
"BootstrapBlazor.Components.QueryBuilder": {
"And": "и",
"Or": "или",
"GreaterThanOrEqual": "Больше или равно",
"LessThanOrEqual": "Меньше или равно",
"GreaterThan": "Больше",
"LessThan": "Меньше",
"Equal": "Равно",
"NotEqual": "Не равно",
"Contains": "Содержит",
"NotContains": "Не содержит",
"GroupText": "Группа",
"ItemText": "Элемент"
},
"BootstrapBlazor.Components.TableAdvancedSortDialog": {
"AscText": "По возрастанию",
"DescText": "По убыванию"
},
"BootstrapBlazor.Components.ClockPicker": {
"AMText": "AM",
"PMText": "PM"
},
"BootstrapBlazor.Components.ThemeProvider": {
"AutoModeText": "Авто",
"DarkModeText": "Тёмная",
"LightModeText": "Светлая"
},
"BootstrapBlazor.Components.ValidateBase": {
"DefaultRequiredErrorMessage": "{0} обязательно для заполнения."
},
"BootstrapBlazor.Components.NetworkMonitorIndicator": {
"NTitle": "Сеть",
"NetworkType": "Тип сети",
"Downlink": "Скорость загрузки",
"RTT": "RTT"
},
"BootstrapBlazor.Components.LoadMore": {
"NoMoreText": "Больше данных нет"
}
}

View File

@@ -1,258 +1,283 @@
{
"BootstrapBlazor.Components.AutoComplete": {
"NoDataTip": "ไม่มีข้อมูลที่ตรงกัน",
"PlaceHolder": "กรุณากรอก"
"NoDataTip": "ไม่มีข้อมูล",
"PlaceHolder": "กรุณากรอกข้อมูล"
},
"BootstrapBlazor.Components.Captcha": {
"HeaderText": "กรุณาตรวจสอบความปลอดภัย",
"BarText": "เลื่อนไปทางขวาเติมปริศนา",
"FailedText": "โหลดล้มเหลว",
"HeaderText": "แคปช่า",
"BarText": "เลื่อนไปทางขวาเพื่อแก้ปริศนา",
"FailedText": "โหลดไม่สำเร็จ",
"LoadText": "กำลังโหลด ..."
},
"BootstrapBlazor.Components.Calendar": {
"PreviousYear": "ปีก่อนหน้า",
"PreviousMonth": "เดือนที่แล้ว",
"PreviousMonth": "เดือนก่อนหน้า",
"Today": "วันนี้",
"NextMonth": "เดือนหน้า",
"NextMonth": "เดือนถัดไป",
"NextYear": "ปีถัดไป",
"PreviousWeek": "สัปดาห์ที่แล้ว",
"WeekText": "สัปดาห์นี้",
"PreviousWeek": "สัปดาห์ก่อนหน้า",
"WeekText": "สัปดาห์",
"NextWeek": "สัปดาห์ถัดไป",
"WeekHeaderText": "สัปดาห์",
"WeekLists": "วันอาทิตย์ วันจันทร์ วันอังคาร วันพุธ วันพฤหัสบดี วันศุกร์ วันเสาร์",
"WeekNumberText": "ข้อที่ {0} สัปดาห์",
"Months": "1,2,3,4,5,6,7,8,9,10,11,12",
"Title": "{0} ปี {1} เดือน"
"WeekHeaderText": "",
"WeekLists": "อา,จ,อ,พ,พฤ,ศ,ส",
"WeekNumberText": "{0} สัปดาห์",
"Months": "มกราคม,กุมภาพันธ์,มีนาคม,เมษายน,พฤษภาคม,มิถุนายน,กรกฎาคม,สิงหาคม,กันยายน,ตุลาคม,พฤศจิกายน,ธันวาคม",
"Title": "{0} {1}"
},
"BootstrapBlazor.Components.Cascader": {
"PlaceHolder": "กรุณาเลือก ..."
},
"BootstrapBlazor.Components.Console": {
"HeaderText": "การตรวจสอบระบบ",
"LightTitle": "ไฟแสดงสถานะการสื่อสาร",
"ClearButtonText": "ล้างหน้าจอ",
"AutoScrollText": "หน้าจอม้วนอัตโนมัติ"
"HeaderText": "มอนิเตอร์",
"LightTitle": "ไฟ",
"ClearButtonText": "ล้าง",
"AutoScrollText": "เลื่อนอัตโนมัติ"
},
"BootstrapBlazor.Components.DateTimePicker": {
"PickerButtonText": "เลือก",
"DatePlaceHolder": "เลือกวันที่",
"TimePlaceHolder": "เลือกเวลา",
"DateTimePlaceHolderText": "โปรดเลือกวัน เวลา",
"DatePlaceHolderText": "กรุณาเลือกวันที่",
"DateTimePlaceHolderText": "กรุณาเลือก ...",
"DatePlaceHolderText": "กรุณาเลือก ...",
"TimeFormat": "hh\\:mm\\:ss",
"DateFormat": "yyyy-MM-dd",
"DateTimeFormat": "yyyy-MM-dd HH\\:mm\\:ss",
"DateFormat": "d/M/yyyy",
"DateTimeFormat": "d/M/yyyy HH\\:mm\\:ss",
"AiraPrevYearLabel": "ปีก่อนหน้า",
"AiraNextYearLabel": "ปีถัดไป",
"AiraPrevMonthLabel": "เดือนที่แล้ว",
"AiraNextMonthLabel": "เดือนหน้า",
"ClearButtonText": "ว่างเปล่า",
"NowButtonText": "ในขณะนี้",
"ConfirmButtonText": "การตัดสินใจ",
"CancelButtonText": "การยกเลิก",
"YearText": "{0} ปี",
"MonthText": "{0} เดือน",
"YearPeriodText": "{0} ปี - {1} ปี",
"Months": "1,2,3,4,5,6,7,8,9,10,11,12",
"MonthLists": "มกราคม, กุมภาพันธ์, มีนาคม, เมษายน, พฤษภาคม, มิถุนายน, กรกฎาคม, สิงหาคม, กันยายน, ตุลาคม, พฤศจิกายน, ธันวาคม",
"WeekLists": "วันอาทิตย์ วันจันทร์ วันอังคาร วันพุธ วันพฤหัสบดี วันศุกร์ วันเสาร์",
"GenericTypeErroMessage": "DateTimePicker ส่วนประกอบนี้สนับสนุนเฉพาะการผูกมัดทั่วไปเป็น DateTime หรือ DateTime?",
"AiraPrevMonthLabel": "เดือนก่อนหน้า",
"AiraNextMonthLabel": "เดือนถัดไป",
"ClearButtonText": "ล้าง",
"NowButtonText": "ขณะนี้",
"ConfirmButtonText": "ตกลง",
"CancelButtonText": "ยกเลิก",
"YearText": "{0}",
"MonthText": "{0}",
"YearPeriodText": "{0} - {1}",
"Months": "ม.ค.,ก.พ.,มี.ค.,เม.ย.,พ.ค.,มิ.ย.,ก.ค.,ส.ค.,ก.ย.,ต.ค.,พ.ย.,ธ.ค.",
"MonthLists": "ม.ค.,ก.พ.,มี.ค.,เม.ย.,พ.ค.,มิ.ย.,ก.ค.,ส.ค.,ก.ย.,ต.ค.,พ.ย.,ธ.ค.",
"WeekLists": "อา,จ,อ,พ,พฤ,ศ,ส",
"GenericTypeErrorMessage": "DateTimePicker รองรับเฉพาะ DateTime, DateTime?, DateTimeOffset, DateTimeOffset?",
"Today": "วันนี้",
"Yesterday": "เมื่อวานนี้",
"Week": "1 สัปดาห์ ก่อน"
"Yesterday": "เมื่อวาน",
"Week": "หนึ่งสัปดาห์ก่อน"
},
"BootstrapBlazor.Components.DateTimeRange": {
"SeparateText": "ถึง",
"StartPlaceHolderText": "วันที่เริ่มต้น",
"EndPlaceHolderText": "วันที่สิ้นสุด",
"ClearButtonText": "ว่างเปล่า",
"ClearButtonText": "ล้าง",
"TodayButtonText": "วันนี้",
"ConfirmButtonText": "การตัดสินใจ",
"DateFormat": "yyyy-MM-dd",
"ConfirmButtonText": "ตกลง",
"DateTimeFormat": "d/M/yyyy hh\\:mm\\:ss tt",
"DateFormat": "d/M/yyyy",
"Last7Days": "7 วันที่ผ่านมา",
"Last30Days": "30 วันที่ผ่านมา",
"ThisMonth": "เดือนนี้",
"LastMonth": "เดือนที่แล้ว"
},
"BootstrapBlazor.Components.BootstrapInputNumber": {
"ParsingErrorMessage": "{0}ค่าฟิลด์ต้องเป็น Number ประเภท"
"ParsingErrorMessage": "ฟิลด์ {0} ต้องเป็นตัวเลข"
},
"BootstrapBlazor.Components.ResultDialogOption": {
"ButtonYesText": "ยืนยัน",
"ButtonNoText": "การยกเลิก",
"ButtonYesText": "ใช่",
"ButtonNoText": "ไม่ใช่",
"ButtonCloseText": "ปิด"
},
"BootstrapBlazor.Components.DropdownList": {
"PlaceHolder": "กรุณาเลือก ..."
},
"BootstrapBlazor.Components.Editor": {
"PlaceHolder": "แก้ไขหลังจากคลิก"
"PlaceHolder": "คลิกเพื่อแก้ไข"
},
"BootstrapBlazor.Components.EditorForm": {
"ModelInvalidOperationExceptionMessage": "แบบฟอร์มการตรวจสอบกับ {0} รูปแบบที่ผูกไว้ไม่สอดคล้องกัน",
"PlaceHolderText": "กรุณากรอก ..."
"ModelInvalidOperationExceptionMessage": "ValidateForm MODEL ไม่ตรงกับ {0} MODEL",
"PlaceHolderText": "กรุณากรอกข้อมูล ..."
},
"BootstrapBlazor.Components.Empty": {
"Text": "ไม่มีคำอธิบายในปัจจุบัน"
"Text": "ไม่มีข้อมูล"
},
"BootstrapBlazor.Components.EqualToValidator": {
"ErrorMessage": "การป้อนข้อมูลของคุณไม่เหมือนกัน"
"ErrorMessage": "กรุณากรอกค่าเดิมอีกครั้ง"
},
"BootstrapBlazor.Components.ErrorLogger": {
"ToastTitle": "ข้อผิดพลาดของโปรแกรม"
"ToastTitle": "ข้อผิดพลาดของแอปพลิเคชัน"
},
"BootstrapBlazor.Components.GoTop": {
"TooltipText": "กลับสู่ด้านบน"
"TooltipText": "ไปด้านบน"
},
"BootstrapBlazor.Components.Layout": {
"TooltipText": "คลิกที่เมนูด้าน้ายมือ"
"TooltipText": "คลิกเพื่อขยาย/ยุบแถบด้าน้า"
},
"BootstrapBlazor.Components.Logout": {
"PrefixDisplayNameText": "ยินดีต้อนรับ",
"PrefixUserNameText": "หมายเลขบัญชีปัจจุบัน:"
"PrefixUserNameText": "บัญชีผู้ใช้:"
},
"BootstrapBlazor.Components.LogoutLink": {
"Text": "ออกจากระบบ"
},
"BootstrapBlazor.Components.Menu": {
"InvalidOperationExceptionMessage": "SideMenu ส่วนประกอบไม่สามารถใช้ได้อย่างอิสระกรุณาใช้ Menu การตั้งค่าส่วนประกอบ IsVertical=true"
"InvalidOperationExceptionMessage": "ไม่สามารถใช้คอมโพเนนต์ SideMenu ได้โดยอิสระ กรุณาใช้คอมโพเนนต์ Menu เพื่อกำหนดค่า IsVertical = true"
},
"BootstrapBlazor.Components.ModalDialog": {
"CloseButtonText": "ปิด",
"SaveButtonText": "บันทึก",
"PrintButtonText": "การพิมพ์"
"PrintButtonText": "พิมพ์",
"ExportPdfButtonText": "ส่งออก Pdf"
},
"BootstrapBlazor.Components.MultiSelect": {
"PlaceHolder": "คลิกเพื่อทำการเลือกหลายรายการ ...",
"SelectAllText": "เลือกทั้งหมด",
"ReverseSelectText": "ต่อต้านการเลือกตั้ง",
"PlaceHolder": "เลือกไอเท็ม ...",
"SelectAllText": "ทั้งหมด",
"ReverseSelectText": "ย้อนกลับ",
"ClearText": "ล้าง",
"MinErrorMessage": "ขั้นต่ำ กรุณาเลือก {0} รายการ",
"MaxErrorMessage": "เลือกได้มากที่สุด {0} รายการ"
"MinErrorMessage": "เลือกอย่างน้อย {0} รายการ",
"MaxErrorMessage": "เลือกได้สูงสุด {0} รายการ",
"NoSearchDataText": "ไม่มีผลลัพธ์"
},
"BootstrapBlazor.Components.Pagination": {
"GotoNavigatorLabelText": "นำทางไปยัง"
"GotoNavigatorLabelText": "ไปที่"
},
"BootstrapBlazor.Components.PopConfirmButton": {
"CloseButtonText": "การยกเลิก",
"ConfirmButtonText": "การตัดสินใจ",
"Content": "คุณแน่ใจนะว่าคุณต้องการทำ?"
"CloseButtonText": "ยกเลิก",
"ConfirmButtonText": "ตกลง",
"Content": "คุณแน่ใจหรือไม่ว่าต้องการดำเนินการนี้?"
},
"BootstrapBlazor.Components.PrintButton": {
"Text": "การพิมพ์"
"Text": "พิมพ์"
},
"BootstrapBlazor.Components.Repeater": {
"EmptyText": "ไม่มีข้อมูล"
},
"BootstrapBlazor.Components.Search": {
"SearchButtonText": "ค้นหา"
"SearchButtonText": "ค้นหา",
"NoDataTip": "ไม่พบข้อมูล"
},
"BootstrapBlazor.Components.Select": {
"PlaceHolder": "กรุณาเลือก ...",
"NoSearchDataText": "ไม่มีข้อมูล"
"NoSearchDataText": "ไม่มีผลลัพธ์"
},
"BootstrapBlazor.Components.SelectTree": {
"PlaceHolder": "กรุณาเลือก ..."
},
"BootstrapBlazor.Components.StringLengthValidator": {
"ErrorMessage": "สามารถป้อนข้อมูลได้มากที่สุด {{0}} ตัวละคร"
"ErrorMessage": "กรุณากรอกค่าที่น้อยกว่าหรือเท่ากับ {{0}}"
},
"BootstrapBlazor.Components.SweetAlert": {
"CloseButtonText": "ปิด",
"CancelButtonText": "การยกเลิก",
"CancelButtonText": "ยกเลิก",
"ConfirmButtonText": "ยืนยัน"
},
"BootstrapBlazor.Components.Switch": {
"OnInnerText": "เปิด",
"OffInnerText": "กวน"
"OffInnerText": "ปิด"
},
"BootstrapBlazor.Components.Tab": {
"CloseCurrentTabText": "ปิดป้ายกำกับปัจจุบัน",
"CloseOtherTabsText": "ปิดแท็กอื่น ๆ",
"CloseAllTabsText": "ปิดแท็กทั้งหมด",
"NotFoundTabText": "ไม่พบ"
"CloseCurrentTabText": "ปิด",
"CloseOtherTabsText": "ปิดอื่น ๆ",
"CloseAllTabsText": "ปิดทั้งหมด",
"NotFoundTabText": "ไม่พบ",
"RefreshToolbarTooltipText": "รีเฟรช",
"FullscreenToolbarTooltipText": "เต็มหน้าจอ",
"PrevTabNavLinkTooltipText": "แท็บก่อนหน้า",
"NextTabNavLinkTooltipText": "แท็บถัดไป",
"CloseTabNavLinkTooltipText": "ปิด",
"ContextRefresh": "รีเฟรช",
"ContextClose": "ปิด",
"ContextCloseOther": "ปิดแท็บอื่น",
"ContextCloseAll": "ปิดทุกแท็บ",
"ContextFullScreen": "เต็มหน้าจอ"
},
"BootstrapBlazor.Components.Table": {
"AddButtonText": "สร้างใหม่",
"EditButtonText": "บรรณาธิการ",
"UpdateButtonText": "อัเด",
"AddButtonText": "เพิ่ม",
"EditButtonText": "แก้ไข",
"UpdateButtonText": "อัเด",
"DeleteButtonText": "ลบ",
"CancelButtonText": "การยกเลิก",
"CancelButtonText": "ยกเลิก",
"SaveButtonText": "บันทึก",
"CloseButtonText": "ปิด",
"CancelDeleteButtonText": "การยกเลิก",
"CancelDeleteButtonText": "ยกเลิก",
"ConfirmDeleteButtonText": "ลบ",
"ConfirmDeleteContentText": "ยืนยันที่จะลบทุกบรรทัดที่เลือก?",
"ConfirmDeleteContentText": "คุณแน่ใจหรือไม่ว่าต้องการลบแถวที่เลือกทั้งหมด?",
"RefreshButtonText": "รีเฟรช",
"CardViewButtonText": "วิว",
"ColumnButtonTitleText": "คอลัมน์แสดงการควบคุมที่ซ่อนอยู่",
"CardViewButtonText": "ดู",
"ColumnButtonTitleText": "แสดง/ซ่อนคอลัมน์",
"ColumnButtonText": "คอลัมน์",
"ExportButtonText": "ส่งออกข้อมูล",
"ExportButtonText": "ส่งออก",
"SearchPlaceholderText": "ค้นหา",
"SearchButtonText": "ค้นหา",
"ResetSearchButtonText": "ล้างการค้นหา",
"ResetSearchButtonText": "รีเซ็ต",
"AdvanceButtonText": "ค้นหาขั้นสูง",
"AdvancedSortModalTitle": "การเรียงลำดับที่กำหนดเอง",
"AdvancedSortButtonText": "การเรียงลำดับขั้นสูง",
"CheckboxDisplayText": "เลือก",
"EditModalTitle": "แก้ไขหน้าต่าง",
"AddModalTitle": "หน้าต่างใหม่",
"LineNoText": "หมายเลขบรรทัด",
"ColumnButtonTemplateHeaderText": "การดำเนินงาน",
"SearchTooltip": "<div class='search-input-tooltip'>ป้อนสตริงใดก็ได้เพื่อค้นหาทั่วโลก</br><kbd>Enter</kbd> ค้นหา <kbd>ESC</kbd> ล้างการค้นหา</div>",
"SearchModalTitle": "เงื่อนไขการค้นหา",
"AddButtonToastTitle": "สร้างข้อมูลใหม่",
"AddButtonToastContent": "ไม่มีวิธีการสร้างข้อมูลใหม่และไม่สามารถสร้างข้อมูลใหม่ได้",
"EditButtonToastTitle": "แก้ไขข้อมูล",
"EditButtonToastNotSelectContent": "โปรดเลือกข้อมูลที่ต้องการแก้ไข",
"EditButtonToastReadonlyContent": "ตัวเลือกไม่สามารถแก้ไขได้",
"EditButtonToastMoreSelectContent": "สามารถเลือกข้อมูลที่ต้องการแก้ไขได้เพียงรายการเดียว",
"EditButtonToastNoSaveMethodContent": "ไม่มีวิธีการบันทึกข้อมูลและไม่สามารถแก้ไขข้อมูลได้",
"AdvancedSortModalTitle": "เรียงลำดับ",
"AdvancedSortButtonText": "เรียงลำดับขั้นสูง",
"CheckboxDisplayText": "ทั้งหมด",
"EditModalTitle": "แก้ไข",
"AddModalTitle": "ใหม่",
"LineNoText": "ลำดับที่",
"ColumnButtonTemplateHeaderText": "การดำเนินการ",
"SearchTooltip": "<div class='search-input-tooltip'>กรุณากรอกข้อมูล ...</br><kbd>Enter</kbd> ค้นหา <kbd>ESC</kbd> ล้าง</div>",
"SearchModalTitle": "กำลังค้นหา",
"AddButtonToastTitle": "เพิ่มข้อมูล",
"AddButtonToastContent": "เพิ่มข้อมูลไม่สำเร็จ กรุณาเพิ่มเมธอด OnAddAsync",
"EditButtonToastTitle": "เพิ่มข้อมูล",
"EditButtonToastNotSelectContent": "บันทึกข้อมูลไม่สำเร็จ กรุณาเพิ่มเมธอด OnSaveAsync",
"EditButtonToastReadonlyContent": "ข้อมูลที่เลือกไม่สามารถแก้ไขได้",
"EditButtonToastMoreSelectContent": "สามารถแก้ไขได้เพียงแถวเดียว",
"EditButtonToastNoSaveMethodContent": "ไม่สามารถแก้ไขข้อมูล กรุณาเพิ่มเมธอด OnSaveAsync",
"SaveButtonToastTitle": "บันทึกข้อมูล",
"SaveButtonToastContent": "ไม่มีวิธีการบันทึกข้อมูลและไม่สามารถบันทึกข้อมูลได้",
"SaveButtonToastResultContent": "บันทึกข้อมูล{0}, {1} ปิดอัตโนมัติหลังจากวินาที",
"SuccessText": "ความสำเร็จ",
"SaveButtonToastContent": "บันทึกข้อมูลไม่สำเร็จ กรุณาเพิ่มเมธอด OnSaveAsync",
"SaveButtonToastResultContent": "บันทึกข้อมูล {0}, ปิดอัตโนมัติใน {1} วินาที",
"SuccessText": "สำเร็จ",
"FailText": "ล้มเหลว",
"DeleteButtonToastTitle": "ลบข้อมูล",
"DeleteButtonToastContent": "โปรดเลือกข้อมูลที่คุณต้องการลบ, {0} ปิดอัตโนมัติหลังจากวินาที",
"DeleteButtonToastResultContent": "ลบข้อมูล{0}, {1} ปิดอัตโนมัติหลังจากวินาที",
"DeleteButtonToastCanNotDeleteContent": "ตรวจสอบว่ามีข้อมูลที่ไม่สามารถลบได้ในข้อมูล, {0} ปิดอัตโนมัติหลังจากวินาที",
"DataServiceInvalidOperationText": "ยังไม่ได้ลงทะเบียน 'BootstrapBlazor.Components.IDataService`1[{0}]' บริการ",
"NotSetOnTreeExpandErrorMessage": "ยังไม่ได้ตั้งค่า OnTreeExpand วิธีการมอบหมายการโทรกลับ",
"UnsetText": "คลิกจากน้อยไปมาก",
"SortAscText": "คลิกที่ลำดับจากมากไปน้อย",
"SortDescText": "ยกเลิกการเรียงลำดับ",
"DeleteButtonToastContent": "กรุณาเลือกแถวที่จะลบ, ปิดอัตโนมัติใน {0} วินาที",
"DeleteButtonToastResultContent": "ลบข้อมูล {0}, ปิดอัตโนมัติใน {1} วินาที",
"DeleteButtonToastCanNotDeleteContent": "มีข้อมูลที่ไม่สามารถลบได้ในข้อมูลที่เลือก, ปิดอัตโนมัติใน {0} วินาที",
"DataServiceInvalidOperationText": "ไม่สามารถกำหนดค่าให้กับ 'DataService' ใน 'BootstrapBlazor.Components.Table`1[[{0}]]' ไม่มีบริการที่ลงทะเบียนประเภท 'BootstrapBlazor.Components.IDataService`1[{0}]'",
"NotSetOnTreeExpandErrorMessage": "ไม่ได้ตั้งค่าพารามิเตอร์ OnTreeExpand",
"UnsetText": "น้อยไปมาก",
"SortAscText": "มากไปน้อย",
"SortDescText": "ยังไม่ได้ตั้งค่า",
"EmptyText": "ไม่มีข้อมูล",
"ExportToastTitle": "ส่งออกข้อมูล",
"ExportToastContent": "ส่งออกข้อมูล {0}{1} ปิดอัตโนมัติหลังจากวินาที",
"ExportToastInProgressContent": "กำลังส่งออกข้อมูล โปรดทราบภายหลัง, {0} ปิดอัตโนมัติหลังจากวินาที",
"ExportCsvDropdownItemText": "ไมโครซอฟท์ Csv รูปแบบ",
"ExportExcelDropdownItemText": "ไมโครซอฟท์ Excel รูปแบบ",
"ExportPdfDropdownItemText": "Pdf รูปแบบ",
"PageInfoText": "{0} - {1} ทั้งหมด {2} บทความ",
"PageItemsText": "{0} แถบ/หน้า",
"CopyColumnTooltipText": "คัดลอกเนื้อหาของคอลัมน์ไปยังแผ่นตัด",
"CopyColumnCopiedTooltipText": "คัดลอกแล้ว"
"ExportToastTitle": "ส่งออก",
"ExportToastContent": "ส่งออกข้อมูล {0}, ปิดอัตโนมัติใน {1} วินาที",
"ExportToastInProgressContent": "กำลังส่งออกข้อมูล กรุณารอสักครู่, ปิดอัตโนมัติใน {0} วินาที",
"ExportCsvDropdownItemText": "MS-Csv",
"ExportExcelDropdownItemText": "MS-Excel",
"ExportPdfDropdownItemText": "Pdf",
"PageInfoText": "{0} - {1} ทั้งหมด {2}",
"PageItemsText": "{0}/หน้า",
"CopyColumnTooltipText": "คัดลอกข้อมูลคอลัมน์ทั้งหมดไปยังคลิปบอร์ด",
"CopyColumnCopiedTooltipText": "คัดลอกแล้ว!",
"ColumnWidthTooltipPrefix": "ความกว้าง: ",
"ColumnToolboxTitle": "เครื่องมือ",
"AlignLeftText": "ชิดซ้าย",
"AlignLeftTooltipText": "คลิกเพื่อจัดข้อความในคอลัมน์นี้ไปทางซ้าย",
"AlignCenterText": "กึ่งกลาง",
"AlignCenterTooltipText": "คลิกเพื่อจัดข้อความในคอลัมน์นี้ให้อยู่ตรงกลาง",
"AlignRightText": "ชิดขวา",
"AlignRightTooltipText": "คลิกเพื่อจัดข้อความในคอลัมน์นี้ไปทางขวา"
},
"BootstrapBlazor.Components.EditDialog": {
"CloseButtonText": "ปิด",
"SaveButtonText": "บันทึก"
},
"BootstrapBlazor.Components.TableFilter": {
"ClearButtonText": "รีเซ็ต",
"FilterButtonText": "ยืนยัน",
"BootstrapBlazor.Components.TableColumnFilter": {
"ClearButtonText": "ล้าง",
"FilterButtonText": "กรอง",
"BoolFilter.AllText": "ทั้งหมด",
"BoolFilter.TrueText": "ตรวจสอบแล้ว",
"BoolFilter.FalseText": "ไม่ถูกเลือก",
"GreaterThanOrEqual": "มากกว่าเท่ากับ",
"LessThanOrEqual": "น้อยกว่าเท่ากับ",
"BoolFilter.TrueText": "จริง",
"BoolFilter.FalseText": "เท็จ",
"GreaterThanOrEqual": "มากกว่าหรือเท่ากับ",
"LessThanOrEqual": "น้อยกว่าหรือเท่ากับ",
"GreaterThan": "มากกว่า",
"LessThan": "น้อยกว่า",
"Equal": "เท่ากับ",
"NotEqual": "ไม่เท่ากับ",
"Contains": "ประกอบด้วย",
"NotContains": "ไม่รวม",
"EnumFilter.AllText": "เลือกทั้งหมด",
"NotSupportedMessage": "ประเภทที่ไม่สนับสนุน,กรุณาใช้ FilterTemplate ส่วนประกอบตัวกรองที่กำหนดเอง"
"Contains": "มี",
"NotContains": "ไม่ม",
"EnumFilter.AllText": "ทั้งหมด",
"NotSupportedColumnFilterMessage": "<p>ประเภทตัวกรองไม่รองรับ กรุณากำหนดเองโดยใช้ <code>FilterTemplate</code></p><div>ดูตัวอย่างที่ <a href=\"https://www.blazor.zone/table/filter#CustomFilter\" target=\"_blank\">CustomFilter</a></div>",
"MultiFilterSearchPlaceHolderText": "กรุณากรอกข้อมูล ...",
"MultiFilterSelectAllText": "เลือกทั้งหมด"
},
"BootstrapBlazor.Components.FilterLogicItem": {
"And": "และ",
@@ -260,75 +285,78 @@
},
"BootstrapBlazor.Components.SearchDialog": {
"ResetButtonText": "รีเซ็ต",
"QueryButtonText": "สอบถาม"
"QueryButtonText": "ค้นหา"
},
"BootstrapBlazor.Components.SwitchButton": {
"OnText": "เปิด",
"OffText": "กวน"
"OffText": "ปิด"
},
"BootstrapBlazor.Components.Timer": {
"PauseText": "หยุดชั่วคราว",
"ResumeText": "ดำเนินการต่อไป",
"CancelText": "การยกเลิก",
"StarText": "เริ่มเวลา"
"ResumeText": "ดำเนินการต่อ",
"CancelText": "ยกเลิก",
"StarText": "เริ่ม"
},
"BootstrapBlazor.Components.Toggle": {
"OnText": "ขยาย",
"OffText": "การหดตัว"
"OffText": "ยุบ"
},
"BootstrapBlazor.Components.Transfer": {
"LeftPanelText": "ทั้งหมด",
"RightPanelText": "เลือก",
"MinErrorMessage": "ขั้นต่ำ กรุณาเลือก {0} รายการ",
"MaxErrorMessage": "เลือกได้มากที่สุด {0} รายการ"
"RightPanelText": "ที่เลือก",
"MinErrorMessage": "กรุณาเลือกอย่างน้อย {0} รายการ",
"MaxErrorMessage": "เลือกได้สูงสุด {0} รายการ"
},
"BootstrapBlazor.Components.TransferPanel": {
"SearchPlaceHolderString": "กรุณากรอก ...",
"SearchPlaceHolderString": "กรุณากรอกข้อมูล ...",
"Text": "รายการ"
},
"BootstrapBlazor.Components.Tree": {
"NotSetOnTreeExpandErrorMessage": "ยังไม่ได้ตั้งค่า OnExpandNodeAsync วิธีการมอบหมายการโทรกลับ"
"NotSetOnTreeExpandErrorMessage": "ไม่ได้ตั้งค่าพารามิเตอร์ OnExpandNodeAsync"
},
"BootstrapBlazor.Components.TreeView": {
"NotSetOnTreeExpandErrorMessage": "ยังไม่ได้ตั้งค่า OnExpandNodeAsync วิธีการมอบหมายการโทรกลับ"
"NotSetOnTreeExpandErrorMessage": "ไม่ได้ตั้งค่าพารามิเตอร์ OnExpandNodeAsync",
"ToolbarEditTitle": "แก้ไขโหนดต้นไม้",
"ToolbarEditLabelText": "เปลี่ยนชื่อ"
},
"BootstrapBlazor.Components.UploadBase": {
"DeleteButtonText": "ลบ",
"BrowserButtonText": "เรียกดู",
"FileExtensions": "นามสกุลไฟล์ต้องเป็นหลายรูปแบบดังต่อไปนี้: {0}",
"FileSizeValidation": "ไฟล์รูปแบบต่างๆต่อไปนี้มีขนาดใหญ่เกินไปและขนาดไฟล์ จำกัด คือ {0}"
"BrowserButtonText": "เลือกไฟล์",
"FileExtensions": "ไฟล์ต้องมีนามสกุลดังต่อไปนี้: {0}",
"FileSizeValidation": "ขนาดไฟล์ต้องน้อยกว่า {0}",
"DropUploadText": "ลากไฟล์มาที่นี่หรือ <em>คลิกเพื่ออัปโหลด</em>"
},
"BootstrapBlazor.Components.Handwritten": {
"SaveButtonText": "บันทึก",
"ClearButtonText": "ล้าง"
},
"BootstrapBlazor.Components.SignaturePad": {
"SignAboveLabel": "เซ็นชื่อในกล่อง",
"SignAboveLabel": "เซ็นในช่อง",
"ClearBtnTitle": "ล้าง",
"SignatureAlertText": "กรุณาเซ็นชื่อก่อน",
"ChangeColorBtnTitle": "เปลี่ยนสี",
"UndoBtnTitle": "การยกเลิก",
"UndoBtnTitle": "ย้อนกลับ",
"CloseBtnTitle": "ปิด",
"SaveBase64BtnTitle": "การตัดสินใจ",
"SaveBase64BtnTitle": "ตกลง",
"SavePNGBtnTitle": "PNG",
"SaveJPGBtnTitle": "JPG",
"SaveSVGBtnTitle": "SVG"
},
"BootstrapBlazor.Components.NullableBoolItemsAttribute": {
"NullValueDisplayText": "กรุณาเลือก ...",
"TrueValueDisplayText": "True",
"FalseValueDisplayText": "False"
"TrueValueDisplayText": "จริง",
"FalseValueDisplayText": "เท็จ"
},
"BootstrapBlazor.Components.InsertRowMode": {
"Last": "สุดท้าย",
"First": "ด้านหน้าสุด"
"First": "แรก"
},
"BootstrapBlazor.Components.IconDialog": {
"LabelText": "เลือกไอคอน",
"LabelFullText": "ข้อความเต็ม",
"ButtonText": "คลิกเพื่อคัดลอก",
"DialogHeaderText": "โปรดเลือกไอคอน",
"CopiedTooltipText": "สำเนาสำเร็จ"
"LabelText": "ไอคอน",
"LabelFullText": "Html",
"ButtonText": "คัดลอก",
"DialogHeaderText": "ไอคอนที่เลือก",
"CopiedTooltipText": "คัดลอกแล้ว"
},
"BootstrapBlazor.Components.Splitting": {
"Text": "กำลังโหลด ..."
@@ -336,19 +364,40 @@
"BootstrapBlazor.Components.QueryBuilder": {
"And": "และ",
"Or": "หรือ",
"GreaterThanOrEqual": "มากกว่าเท่ากับ",
"LessThanOrEqual": "น้อยกว่าเท่ากับ",
"GreaterThanOrEqual": "มากกว่าหรือเท่ากับ",
"LessThanOrEqual": "น้อยกว่าหรือเท่ากับ",
"GreaterThan": "มากกว่า",
"LessThan": "น้อยกว่า",
"Equal": "เท่ากับ",
"NotEqual": "ไม่เท่ากับ",
"Contains": "ประกอบด้วย",
"NotContains": "ไม่รวม",
"GroupText": "เงื่อนไขการรวมกัน",
"ItemText": "เงื่อนไขแถวเดียว"
"Contains": "มี",
"NotContains": "ไม่ม",
"GroupText": "กลุ่ม",
"ItemText": "รายการ"
},
"BootstrapBlazor.Components.TableAdvancedSortDialog": {
"AscText": "ยกเลิกการเรียงลำดับจากน้อยไปมาก",
"DescText": "ลำดับจากมากไปน้อย"
"AscText": "น้อยไปมาก",
"DescText": "มากไปน้อย"
},
"BootstrapBlazor.Components.ClockPicker": {
"AMText": "AM",
"PMText": "PM"
},
"BootstrapBlazor.Components.ThemeProvider": {
"AutoModeText": "อัตโนมัติ",
"DarkModeText": "มืด",
"LightModeText": "สว่าง"
},
"BootstrapBlazor.Components.ValidateBase": {
"DefaultRequiredErrorMessage": "{0} จำเป็นต้องกรอก"
},
"BootstrapBlazor.Components.NetworkMonitorIndicator": {
"NTitle": "เครือข่าย",
"NetworkType": "ประเภทเครือข่าย",
"Downlink": "ดาวน์โหลด",
"RTT": "RTT"
},
"BootstrapBlazor.Components.LoadMore": {
"NoMoreText": "ไม่มีข้อมูลเพิ่มเติม"
}
}

403
localization/uk-UA.json Normal file
View File

@@ -0,0 +1,403 @@
{
"BootstrapBlazor.Components.AutoComplete": {
"NoDataTip": "Немає даних",
"PlaceHolder": "Введіть текст"
},
"BootstrapBlazor.Components.Captcha": {
"HeaderText": "Капча",
"BarText": "Перетягніть вправо, щоб розв'язати головоломку",
"FailedText": "Не вдалося завантажити",
"LoadText": "Завантаження ..."
},
"BootstrapBlazor.Components.Calendar": {
"PreviousYear": "Попередній рік",
"PreviousMonth": "Попередній місяць",
"Today": "Сьогодні",
"NextMonth": "Наступний місяць",
"NextYear": "Наступний рік",
"PreviousWeek": "Попередній тиждень",
"WeekText": "Тиждень",
"NextWeek": "Наступний тиждень",
"WeekHeaderText": "",
"WeekLists": "Нд,Пн,Вт,Ср,Чт,Пт,Сб",
"WeekNumberText": "{0} тижнів",
"Months": "Січень,Лютий,Березень,Квітень,Травень,Червень,Липень,Серпень,Вересень,Жовтень,Листопад,Грудень",
"Title": "{0} {1}"
},
"BootstrapBlazor.Components.Cascader": {
"PlaceHolder": "Будь ласка, виберіть ..."
},
"BootstrapBlazor.Components.Console": {
"HeaderText": "Монітор",
"LightTitle": "Індикатор",
"ClearButtonText": "Очистити",
"AutoScrollText": "Автопрокрутка"
},
"BootstrapBlazor.Components.DateTimePicker": {
"PickerButtonText": "Виберіть",
"DatePlaceHolder": "Виберіть дату",
"TimePlaceHolder": "Виберіть час",
"DateTimePlaceHolderText": "Будь ласка, виберіть ...",
"DatePlaceHolderText": "Будь ласка, виберіть ...",
"TimeFormat": "hh\\:mm\\:ss",
"DateFormat": "d.M.yyyy",
"DateTimeFormat": "d.M.yyyy HH\\:mm\\:ss",
"AiraPrevYearLabel": "Попередній рік",
"AiraNextYearLabel": "Наступний рік",
"AiraPrevMonthLabel": "Попередній місяць",
"AiraNextMonthLabel": "Наступний місяць",
"ClearButtonText": "Очистити",
"NowButtonText": "Зараз",
"ConfirmButtonText": "Ок",
"CancelButtonText": "Скасувати",
"YearText": "{0}",
"MonthText": "{0}",
"YearPeriodText": "{0} - {1}",
"Months": "Січ,Лют,Бер,Квіт,Трав,Черв,Лип,Серп,Вер,Жовт,Лист,Груд",
"MonthLists": "Січ,Лют,Бер,Квіт,Трав,Черв,Лип,Серп,Вер,Жовт,Лист,Груд",
"WeekLists": "Нд,Пн,Вт,Ср,Чт,Пт,Сб",
"GenericTypeErrorMessage": "DateTimePicker підтримує лише DateTime, DateTime?, DateTimeOffset, DateTimeOffset?",
"Today": "Сьогодні",
"Yesterday": "Вчора",
"Week": "Тиждень тому"
},
"BootstrapBlazor.Components.DateTimeRange": {
"SeparateText": "До",
"StartPlaceHolderText": "Дата початку",
"EndPlaceHolderText": "Дата завершення",
"ClearButtonText": "Очистити",
"TodayButtonText": "Сьогодні",
"ConfirmButtonText": "Ок",
"DateTimeFormat": "d.M.yyyy hh\\:mm\\:ss tt",
"DateFormat": "d.M.yyyy",
"Last7Days": "Останні 7 днів",
"Last30Days": "Останні 30 днів",
"ThisMonth": "Цей місяць",
"LastMonth": "Минулий місяць"
},
"BootstrapBlazor.Components.BootstrapInputNumber": {
"ParsingErrorMessage": "Поле {0} має бути числом."
},
"BootstrapBlazor.Components.ResultDialogOption": {
"ButtonYesText": "Так",
"ButtonNoText": "Ні",
"ButtonCloseText": "Закрити"
},
"BootstrapBlazor.Components.DropdownList": {
"PlaceHolder": "Будь ласка, виберіть ..."
},
"BootstrapBlazor.Components.Editor": {
"PlaceHolder": "Натисніть, щоб редагувати"
},
"BootstrapBlazor.Components.EditorForm": {
"ModelInvalidOperationExceptionMessage": "ValidateForm MODEL не збігається з {0} MODEL",
"PlaceHolderText": "Будь ласка, введіть ..."
},
"BootstrapBlazor.Components.Empty": {
"Text": "Немає даних"
},
"BootstrapBlazor.Components.EqualToValidator": {
"ErrorMessage": "Будь ласка, введіть те саме значення ще раз"
},
"BootstrapBlazor.Components.ErrorLogger": {
"ToastTitle": "Помилка застосунку"
},
"BootstrapBlazor.Components.GoTop": {
"TooltipText": "Нагору"
},
"BootstrapBlazor.Components.Layout": {
"TooltipText": "Клікніть, щоб розгорнути/згорнути бокову панель"
},
"BootstrapBlazor.Components.Logout": {
"PrefixDisplayNameText": "Вітаємо",
"PrefixUserNameText": "Обліковий запис:"
},
"BootstrapBlazor.Components.LogoutLink": {
"Text": "Вийти"
},
"BootstrapBlazor.Components.Menu": {
"InvalidOperationExceptionMessage": "Компонент SideMenu не можна використовувати окремо. Використовуйте компонент Menu для встановлення IsVertical = true"
},
"BootstrapBlazor.Components.ModalDialog": {
"CloseButtonText": "Закрити",
"SaveButtonText": "Зберегти",
"PrintButtonText": "Друк",
"ExportPdfButtonText": "Експорт Pdf"
},
"BootstrapBlazor.Components.MultiSelect": {
"PlaceHolder": "Виберіть елементи ...",
"SelectAllText": "Усі",
"ReverseSelectText": "Інвертувати",
"ClearText": "Очистити",
"MinErrorMessage": "Виберіть щонайменше {0} елементів",
"MaxErrorMessage": "Максимум {0} елементів можна вибрати",
"NoSearchDataText": "Немає результатів"
},
"BootstrapBlazor.Components.Pagination": {
"GotoNavigatorLabelText": "Перейти"
},
"BootstrapBlazor.Components.PopConfirmButton": {
"CloseButtonText": "Скасувати",
"ConfirmButtonText": "Ок",
"Content": "Ви впевнені, що хочете виконати цю операцію?"
},
"BootstrapBlazor.Components.PrintButton": {
"Text": "Друк"
},
"BootstrapBlazor.Components.Repeater": {
"EmptyText": "Немає даних"
},
"BootstrapBlazor.Components.Search": {
"SearchButtonText": "Пошук",
"NoDataTip": "Записи не знайдено"
},
"BootstrapBlazor.Components.Select": {
"PlaceHolder": "Будь ласка, виберіть ...",
"NoSearchDataText": "Немає результатів"
},
"BootstrapBlazor.Components.SelectTree": {
"PlaceHolder": "Будь ласка, виберіть ..."
},
"BootstrapBlazor.Components.StringLengthValidator": {
"ErrorMessage": "Будь ласка, введіть значення менше або дорівнює {{0}}"
},
"BootstrapBlazor.Components.SweetAlert": {
"CloseButtonText": "Закрити",
"CancelButtonText": "Скасувати",
"ConfirmButtonText": "Підтвердити"
},
"BootstrapBlazor.Components.Switch": {
"OnInnerText": "ВКЛ",
"OffInnerText": "ВИКЛ"
},
"BootstrapBlazor.Components.Tab": {
"CloseCurrentTabText": "Закрити",
"CloseOtherTabsText": "Закрити інші",
"CloseAllTabsText": "Закрити всі",
"NotFoundTabText": "Не знайдено",
"RefreshToolbarTooltipText": "Оновити",
"FullscreenToolbarTooltipText": "На весь екран",
"PrevTabNavLinkTooltipText": "Попередня вкладка",
"NextTabNavLinkTooltipText": "Наступна вкладка",
"CloseTabNavLinkTooltipText": "Закрити",
"ContextRefresh": "Оновити",
"ContextClose": "Закрити",
"ContextCloseOther": "Закрити інші вкладки",
"ContextCloseAll": "Закрити всі вкладки",
"ContextFullScreen": "Повний екран"
},
"BootstrapBlazor.Components.Table": {
"AddButtonText": "Додати",
"EditButtonText": "Редагувати",
"UpdateButtonText": "Оновити",
"DeleteButtonText": "Видалити",
"CancelButtonText": "Скасувати",
"SaveButtonText": "Зберегти",
"CloseButtonText": "Закрити",
"CancelDeleteButtonText": "Скасувати",
"ConfirmDeleteButtonText": "Видалити",
"ConfirmDeleteContentText": "Ви впевнені, що хочете ВИДАЛИТИ всі вибрані рядки?",
"RefreshButtonText": "Оновити",
"CardViewButtonText": "Перегляд",
"ColumnButtonTitleText": "Показати/Приховати стовпці",
"ColumnButtonText": "Стовпці",
"ExportButtonText": "Експорт",
"SearchPlaceholderText": "Пошук",
"SearchButtonText": "Пошук",
"ResetSearchButtonText": "Скинути",
"AdvanceButtonText": "Розширений пошук",
"AdvancedSortModalTitle": "Сортування",
"AdvancedSortButtonText": "Розширене сортування",
"CheckboxDisplayText": "Усі",
"EditModalTitle": "Редагувати",
"AddModalTitle": "Новий",
"LineNoText": "№",
"ColumnButtonTemplateHeaderText": "Дії",
"SearchTooltip": "<div class='search-input-tooltip'>Будь ласка, введіть ...</br><kbd>Enter</kbd> Пошук <kbd>ESC</kbd> Очистити</div>",
"SearchModalTitle": "Пошук",
"AddButtonToastTitle": "Додати дані",
"AddButtonToastContent": "Не вдалося додати дані. Будь ласка, реалізуйте метод OnAddAsync",
"EditButtonToastTitle": "Додати дані",
"EditButtonToastNotSelectContent": "Не вдалося зберегти дані. Будь ласка, реалізуйте метод OnSaveAsync",
"EditButtonToastReadonlyContent": "Вибрані дані неможливо редагувати",
"EditButtonToastMoreSelectContent": "Можна редагувати лише один рядок",
"EditButtonToastNoSaveMethodContent": "Неможливо редагувати дані. Будь ласка, реалізуйте метод OnSaveAsync",
"SaveButtonToastTitle": "Зберегти дані",
"SaveButtonToastContent": "Не вдалося зберегти дані. Будь ласка, реалізуйте метод OnSaveAsync",
"SaveButtonToastResultContent": "Дані збережено {0}, автоматичне закриття через {1}с",
"SuccessText": "Успішно",
"FailText": "Помилка",
"DeleteButtonToastTitle": "Видалити дані",
"DeleteButtonToastContent": "Будь ласка, виберіть рядки для видалення, автоматичне закриття через {0}с",
"DeleteButtonToastResultContent": "Дані видалено {0}, автоматичне закриття через {1}с",
"DeleteButtonToastCanNotDeleteContent": "Серед вибраних є дані, які неможливо видалити, автоматичне закриття через {0}с",
"DataServiceInvalidOperationText": "Неможливо надати значення для властивості 'DataService' у типі 'BootstrapBlazor.Components.Table`1[[{0}]]'. Немає зареєстрованого сервісу типу 'BootstrapBlazor.Components.IDataService`1[{0}]'.",
"NotSetOnTreeExpandErrorMessage": "не встановлено параметр OnTreeExpand",
"UnsetText": "Зрост.",
"SortAscText": "Спад.",
"SortDescText": "Не встановлено",
"EmptyText": "Немає даних",
"ExportToastTitle": "Експорт",
"ExportToastContent": "Експортовано дані {0}, автоматичне закриття через {1}с",
"ExportToastInProgressContent": "Експортування даних, зачекайте, автоматичне закриття через {0}с",
"ExportCsvDropdownItemText": "MS-Csv",
"ExportExcelDropdownItemText": "MS-Excel",
"ExportPdfDropdownItemText": "Pdf",
"PageInfoText": "{0} - {1} Всього {2}",
"PageItemsText": "{0}/стор.",
"CopyColumnTooltipText": "Скопіювати дані стовпця у буфер",
"CopyColumnCopiedTooltipText": "Скопійовано!",
"ColumnWidthTooltipPrefix": "ширина: ",
"ColumnToolboxTitle": "Інструменти",
"AlignLeftText": "Ліворуч",
"AlignLeftTooltipText": "Клікніть, щоб вирівняти текст у цьому стовпці ліворуч",
"AlignCenterText": "По центру",
"AlignCenterTooltipText": "Клікніть, щоб вирівняти текст у цьому стовпці по центру",
"AlignRightText": "Праворуч",
"AlignRightTooltipText": "Клікніть, щоб вирівняти текст у цьому стовпці праворуч"
},
"BootstrapBlazor.Components.EditDialog": {
"CloseButtonText": "Закрити",
"SaveButtonText": "Зберегти"
},
"BootstrapBlazor.Components.TableColumnFilter": {
"ClearButtonText": "Очистити",
"FilterButtonText": "Фільтр",
"BoolFilter.AllText": "Усі",
"BoolFilter.TrueText": "Істина",
"BoolFilter.FalseText": "Хибний",
"GreaterThanOrEqual": "Більше або дорівнює",
"LessThanOrEqual": "Менше або дорівнює",
"GreaterThan": "Більше",
"LessThan": "Менше",
"Equal": "Рівний",
"NotEqual": "Не рівний",
"Contains": "Містить",
"NotContains": "Не містить",
"EnumFilter.AllText": "Усі",
"NotSupportedColumnFilterMessage": "<p>Непідтримуваний тип фільтра. Налаштуйте фільтр через <code>FilterTemplate</code></p><div>Детальніше <a href=\"https://www.blazor.zone/table/filter#CustomFilter\" target=\"_blank\">CustomFilter</a></div>",
"MultiFilterSearchPlaceHolderText": "Будь ласка, введіть ...",
"MultiFilterSelectAllText": "Вибрати всі"
},
"BootstrapBlazor.Components.FilterLogicItem": {
"And": "І",
"Or": "Або"
},
"BootstrapBlazor.Components.SearchDialog": {
"ResetButtonText": "Скинути",
"QueryButtonText": "Запит"
},
"BootstrapBlazor.Components.SwitchButton": {
"OnText": "ВКЛ",
"OffText": "ВИКЛ"
},
"BootstrapBlazor.Components.Timer": {
"PauseText": "Пауза",
"ResumeText": "Продовжити",
"CancelText": "Скасувати",
"StarText": "Старт"
},
"BootstrapBlazor.Components.Toggle": {
"OnText": "Розгорнути",
"OffText": "Згорнути"
},
"BootstrapBlazor.Components.Transfer": {
"LeftPanelText": "Усі",
"RightPanelText": "Обраний",
"MinErrorMessage": "Будь ласка, виберіть щонайменше {0} елементів",
"MaxErrorMessage": "Можна вибрати до {0} елементів"
},
"BootstrapBlazor.Components.TransferPanel": {
"SearchPlaceHolderString": "Будь ласка, введіть ...",
"Text": "Список"
},
"BootstrapBlazor.Components.Tree": {
"NotSetOnTreeExpandErrorMessage": "не встановлено параметр OnExpandNodeAsync"
},
"BootstrapBlazor.Components.TreeView": {
"NotSetOnTreeExpandErrorMessage": "не встановлено параметр OnExpandNodeAsync",
"ToolbarEditTitle": "Редагувати вузол дерева",
"ToolbarEditLabelText": "Перейменувати"
},
"BootstrapBlazor.Components.UploadBase": {
"DeleteButtonText": "Видалити",
"BrowserButtonText": "Огляд",
"FileExtensions": "Файл має мати одне з таких розширень: {0}",
"FileSizeValidation": "Розмір файлу не повинен перевищувати {0}",
"DropUploadText": "Перетягніть файли сюди або <em>натисніть для завантаження</em>"
},
"BootstrapBlazor.Components.Handwritten": {
"SaveButtonText": "Зберегти",
"ClearButtonText": "Очистити"
},
"BootstrapBlazor.Components.SignaturePad": {
"SignAboveLabel": "Підпишіться у полі",
"ClearBtnTitle": "Очистити",
"SignatureAlertText": "Будь ласка, спочатку поставте підпис",
"ChangeColorBtnTitle": "Змінити колір",
"UndoBtnTitle": "Скасувати",
"CloseBtnTitle": "Закрити",
"SaveBase64BtnTitle": "ОК",
"SavePNGBtnTitle": "PNG",
"SaveJPGBtnTitle": "JPG",
"SaveSVGBtnTitle": "SVG"
},
"BootstrapBlazor.Components.NullableBoolItemsAttribute": {
"NullValueDisplayText": "Будь ласка, виберіть ...",
"TrueValueDisplayText": "Істина",
"FalseValueDisplayText": "Хибний"
},
"BootstrapBlazor.Components.InsertRowMode": {
"Last": "Останній",
"First": "Перший"
},
"BootstrapBlazor.Components.IconDialog": {
"LabelText": "Значок",
"LabelFullText": "Html",
"ButtonText": "Копіювати",
"DialogHeaderText": "Вибраний значок",
"CopiedTooltipText": "Скопійовано"
},
"BootstrapBlazor.Components.Splitting": {
"Text": "Завантаження ..."
},
"BootstrapBlazor.Components.QueryBuilder": {
"And": "і",
"Or": "або",
"GreaterThanOrEqual": "Більше або дорівнює",
"LessThanOrEqual": "Менше або дорівнює",
"GreaterThan": "Більше",
"LessThan": "Менше",
"Equal": "Рівний",
"NotEqual": "Не рівний",
"Contains": "Містить",
"NotContains": "Не містить",
"GroupText": "Група",
"ItemText": "Пункт"
},
"BootstrapBlazor.Components.TableAdvancedSortDialog": {
"AscText": "За зростанням",
"DescText": "За спаданням"
},
"BootstrapBlazor.Components.ClockPicker": {
"AMText": "AM",
"PMText": "PM"
},
"BootstrapBlazor.Components.ThemeProvider": {
"AutoModeText": "Авто",
"DarkModeText": "Темна",
"LightModeText": "Світла"
},
"BootstrapBlazor.Components.ValidateBase": {
"DefaultRequiredErrorMessage": "{0} є обов'язковим."
},
"BootstrapBlazor.Components.NetworkMonitorIndicator": {
"NTitle": "Мережа",
"NetworkType": "Тип мережі",
"Downlink": "Швидкість завантаження",
"RTT": "RTT"
},
"BootstrapBlazor.Components.LoadMore": {
"NoMoreText": "Більше даних немає"
}
}

View File

@@ -4,21 +4,10 @@
"PlaceHolder": "請輸入"
},
"BootstrapBlazor.Components.Captcha": {
"HeaderText": "請完成安全證",
"BarText": "向右滑動填滿拼圖",
"HeaderText": "請完成安全證",
"BarText": "向右滑動填拼圖",
"FailedText": "載入失敗",
"LoadText": "正在載入 ...",
"TryText": "再試一次"
},
"BootstrapBlazor.Components.Camera": {
"DeviceLabel": "攝影機",
"InitDevicesString": "正在識別攝影機",
"PlayText": "開啟",
"StopText": "關閉",
"PhotoText": "拍照",
"FrontText": "前面",
"BackText": "後面",
"NotFoundDevicesString": "未找到視訊相關設備"
"LoadText": "正在載入 ..."
},
"BootstrapBlazor.Components.Calendar": {
"PreviousYear": "上一年",
@@ -41,10 +30,11 @@
"BootstrapBlazor.Components.Console": {
"HeaderText": "系統監控",
"LightTitle": "通訊指示燈",
"ClearButtonText": "清",
"AutoScrollText": "自動捲動"
"ClearButtonText": "清",
"AutoScrollText": "自動滾屏"
},
"BootstrapBlazor.Components.DateTimePicker": {
"PickerButtonText": "選擇",
"DatePlaceHolder": "選擇日期",
"TimePlaceHolder": "選擇時間",
"DateTimePlaceHolderText": "請選擇日期時間",
@@ -66,10 +56,10 @@
"Months": "1,2,3,4,5,6,7,8,9,10,11,12",
"MonthLists": "一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月",
"WeekLists": "日,一,二,三,四,五,六",
"GenericTypeErroMessage": "DateTimePicker 元件僅支援綁定泛型為 DateTime 或者 DateTime?",
"GenericTypeErrorMessage": "DateTimePicker 元件僅支援綁定泛型為 DateTime DateTime? DateTimeOffset DateTimeOffset?",
"Today": "今天",
"Yesterday": "昨天",
"Weekago": "一週前"
"Week": "一週前"
},
"BootstrapBlazor.Components.DateTimeRange": {
"SeparateText": "至",
@@ -107,7 +97,7 @@
"Text": "暫無描述"
},
"BootstrapBlazor.Components.EqualToValidator": {
"ErrorMessage": "的輸入不相同"
"ErrorMessage": "的輸入不相同"
},
"BootstrapBlazor.Components.ErrorLogger": {
"ToastTitle": "應用程式錯誤"
@@ -116,17 +106,17 @@
"TooltipText": "返回頂端"
},
"BootstrapBlazor.Components.Layout": {
"TooltipText": "點擊展開收左側單"
"TooltipText": "點擊展開收左側單"
},
"BootstrapBlazor.Components.Logout": {
"PrefixDisplayNameText": "歡迎",
"PrefixUserNameText": "當前號:"
"PrefixUserNameText": "當前號:"
},
"BootstrapBlazor.Components.LogoutLink": {
"Text": "登出"
},
"BootstrapBlazor.Components.Menu": {
"InvalidOperationExceptionMessage": "SideMenu 元件不可獨立使用,請使用 Menu 元件設 IsVertical=true"
"InvalidOperationExceptionMessage": "SideMenu 元件不可獨立使用,請使用 Menu 元件設 IsVertical=true"
},
"BootstrapBlazor.Components.ModalDialog": {
"CloseButtonText": "關閉",
@@ -140,25 +130,16 @@
"ReverseSelectText": "反選",
"ClearText": "清除",
"MinErrorMessage": "最少請選擇 {0} 項",
"MaxErrorMessage": "最多可以選擇 {0} 項"
"MaxErrorMessage": "最多可以選擇 {0} 項",
"NoSearchDataText": "無資料"
},
"BootstrapBlazor.Components.Pagination": {
"GotoNavigatorLabelText": "切換到",
"AiraPageLabel": "分頁元件",
"AiraPrevPageText": "上一頁",
"AiraFirstPageText": "第一頁",
"AiraNextPageText": "下一頁",
"PageInfoText": "顯示第 {0} 到第 {1} 筆紀錄",
"TotalInfoText": ",總共 {0} 筆紀錄",
"PrePageInfoText": "每頁顯示",
"RowInfoText": "筆紀錄",
"LabelString": "第 {0} 頁",
"SelectItemsText": "{0}"
"GotoNavigatorLabelText": "導覽到"
},
"BootstrapBlazor.Components.PopConfirmButton": {
"CloseButtonText": "取消",
"ConfirmButtonText": "確定",
"Content": "確定要執行此操作嗎?"
"Content": "確定要執行此操作嗎?"
},
"BootstrapBlazor.Components.PrintButton": {
"Text": "列印"
@@ -167,7 +148,8 @@
"EmptyText": "無資料"
},
"BootstrapBlazor.Components.Search": {
"SearchButtonText": "搜尋"
"SearchButtonText": "搜尋",
"NoDataTip": "無資料"
},
"BootstrapBlazor.Components.Select": {
"PlaceHolder": "請選擇 ...",
@@ -177,7 +159,7 @@
"PlaceHolder": "請選擇 ..."
},
"BootstrapBlazor.Components.StringLengthValidator": {
"ErrorMessage": "最多可輸入 {{0}} 個字元"
"ErrorMessage": "最多可輸入 {{0}} 個字元"
},
"BootstrapBlazor.Components.SweetAlert": {
"CloseButtonText": "關閉",
@@ -189,14 +171,20 @@
"OffInnerText": "關"
},
"BootstrapBlazor.Components.Tab": {
"CloseCurrentTabText": "關閉前標籤",
"CloseCurrentTabText": "關閉前標籤",
"CloseOtherTabsText": "關閉其他標籤",
"CloseAllTabsText": "關閉所有標籤",
"NotFoundTabText": "未找到"
},
"BootstrapBlazor.Components.MultiFilter": {
"MultiFilterSearchPlaceHolderText": "請輸入 ...",
"MultiFilterSelectAllText": "全選"
"NotFoundTabText": "未找到",
"RefreshToolbarTooltipText": "重新整理",
"FullscreenToolbarTooltipText": "全螢幕",
"PrevTabNavLinkTooltipText": "上一個標籤",
"NextTabNavLinkTooltipText": "下一個標籤",
"CloseTabNavLinkTooltipText": "關閉",
"ContextRefresh": "重新整理",
"ContextClose": "關閉",
"ContextCloseOther": "關閉其他",
"ContextCloseAll": "關閉全部",
"ContextFullScreen": "全螢幕"
},
"BootstrapBlazor.Components.Table": {
"AddButtonText": "新增",
@@ -209,26 +197,26 @@
"CancelDeleteButtonText": "取消",
"ConfirmDeleteButtonText": "刪除",
"ConfirmDeleteContentText": "確認要刪除選中的所有列嗎?",
"RefreshButtonText": "重",
"CardViewButtonText": "視",
"RefreshButtonText": "重新整理",
"CardViewButtonText": "視",
"ColumnButtonTitleText": "欄位顯示隱藏控制",
"ColumnButtonText": "欄",
"ColumnButtonText": "欄",
"ExportButtonText": "匯出資料",
"SearchPlaceholderText": "搜尋",
"SearchButtonText": "搜尋",
"ResetSearchButtonText": "清空搜尋",
"AdvanceButtonText": "進階搜尋",
"AdvancedSortModalTitle": "自定義排序",
"AdvancedSortModalTitle": "自排序",
"AdvancedSortButtonText": "進階排序",
"CheckboxDisplayText": "選擇",
"EditModalTitle": "編輯視窗",
"AddModalTitle": "新視窗",
"LineNoText": "號",
"AddModalTitle": "新視窗",
"LineNoText": "號",
"ColumnButtonTemplateHeaderText": "操作",
"SearchTooltip": "<div class='search-input-tooltip'>輸入任意字串全域搜尋</br><kbd>Enter</kbd> 搜 <kbd>ESC</kbd> 清除搜</div>",
"SearchTooltip": "<div class='search-input-tooltip'>輸入任意字串全域搜尋</br><kbd>Enter</kbd> 搜 <kbd>ESC</kbd> 清除搜</div>",
"SearchModalTitle": "搜尋條件",
"AddButtonToastTitle": "新資料",
"AddButtonToastContent": "未提供新資料方法,無法新資料",
"AddButtonToastTitle": "新資料",
"AddButtonToastContent": "未提供新資料方法,無法新資料",
"EditButtonToastTitle": "編輯資料",
"EditButtonToastNotSelectContent": "請選擇要編輯的資料",
"EditButtonToastReadonlyContent": "選項不可編輯",
@@ -244,39 +232,40 @@
"DeleteButtonToastResultContent": "刪除資料{0}, {1} 秒後自動關閉",
"DeleteButtonToastCanNotDeleteContent": "選中資料中有不可刪除資料, {0} 秒後自動關閉",
"DataServiceInvalidOperationText": "未註冊 'BootstrapBlazor.Components.IDataService`1[{0}]' 服務",
"NotSetOnTreeExpandErrorMessage": "未設 OnTreeExpand 回調委託方法",
"UnsetText": "點擊升冪",
"SortAscText": "點擊降冪",
"NotSetOnTreeExpandErrorMessage": "未設 OnTreeExpand 回呼委派方法",
"UnsetText": "點擊升冪排序",
"SortAscText": "點擊降冪排序",
"SortDescText": "取消排序",
"EmptyText": "無資料",
"ExportToastTitle": "匯出資料",
"ExportToastContent": "匯出資料 {0}{1} 秒後自動關閉",
"ExportToastInProgressContent": "正在匯出資料,請稍, {0} 秒後自動關閉",
"ExportToastInProgressContent": "正在匯出資料,請稍, {0} 秒後自動關閉",
"ExportCsvDropdownItemText": "微軟 Csv 格式",
"ExportExcelDropdownItemText": "微軟 Excel 格式",
"ExportPdfDropdownItemText": "Pdf 格式",
"PageInfoText": "{0} - {1} 共 {2} 筆",
"PageItemsText": "{0} 筆/頁",
"CopyColumnTooltipText": "複製到剪貼簿",
"CopyColumnTooltipText": "複製欄位內容到剪貼簿",
"CopyColumnCopiedTooltipText": "已複製",
"ColumnWidthTooltipPrefix": "寬度:",
"ColumnToolboxTitle": "操作",
"AlignLeft": "左對齊",
"AlignLeftTooltip": "點擊後本左對齊",
"AlignCenter": "中",
"AlignRight": "右對齊"
"AlignLeftText": "左對齊",
"AlignLeftTooltipText": "點擊後本欄文字左對齊",
"AlignCenterText": "中",
"AlignCenterTooltipText": "點擊後本欄文字置中對齊",
"AlignRightText": "右對齊",
"AlignRightTooltipText": "點擊後本欄文字右對齊"
},
"BootstrapBlazor.Components.EditDialog": {
"CloseButtonText": "關閉",
"SaveButtonText": "儲存"
},
"BootstrapBlazor.Components.TableFilter": {
"Title": "篩選",
"ClearButtonText": "重置",
"BootstrapBlazor.Components.TableColumnFilter": {
"ClearButtonText": "重設",
"FilterButtonText": "確認",
"BoolFilter.AllText": "全部",
"BoolFilter.TrueText": "選",
"BoolFilter.FalseText": "未選",
"BoolFilter.TrueText": "選",
"BoolFilter.FalseText": "未選",
"GreaterThanOrEqual": "大於等於",
"LessThanOrEqual": "小於等於",
"GreaterThan": "大於",
@@ -286,14 +275,16 @@
"Contains": "包含",
"NotContains": "不包含",
"EnumFilter.AllText": "全選",
"NotSupportedMessage": "不支援的類型,請使用 FilterTemplate 自定義篩選組件"
"NotSupportedColumnFilterMessage": "<p>不支援的類型,請使用 <code>FilterTemplate</code> 自訂過濾元件</p><div>請參考文件 <a href=\"https://www.blazor.zone/table/filter#CustomFilter\" target=\"_blank\">CustomFilter</a></div>",
"MultiFilterSearchPlaceHolderText": "請輸入 ...",
"MultiFilterSelectAllText": "全選"
},
"BootstrapBlazor.Components.FilterLogicItem": {
"And": "且",
"Or": "或"
"And": "且",
"Or": "或"
},
"BootstrapBlazor.Components.SearchDialog": {
"ResetButtonText": "重",
"ResetButtonText": "重",
"QueryButtonText": "查詢"
},
"BootstrapBlazor.Components.SwitchButton": {
@@ -308,29 +299,32 @@
},
"BootstrapBlazor.Components.Toggle": {
"OnText": "展開",
"OffText": "收"
"OffText": "收"
},
"BootstrapBlazor.Components.Transfer": {
"LeftPanelText": "全部",
"RightPanelText": "已選",
"MinErrorMessage": "最少請選擇{0}項",
"MaxErrorMessage": "最多可選擇{0}項"
"MinErrorMessage": "最少請選擇 {0} 項",
"MaxErrorMessage": "最多可選擇 {0} 項"
},
"BootstrapBlazor.Components.TransferPanel": {
"SearchPlaceHolderString": "請輸入 ...",
"Text": "列表"
},
"BootstrapBlazor.Components.Tree": {
"NotSetOnTreeExpandErrorMessage": "未設 OnExpandNodeAsync 回調委託方法"
"NotSetOnTreeExpandErrorMessage": "未設 OnExpandNodeAsync 回呼委派方法"
},
"BootstrapBlazor.Components.TreeView": {
"NotSetOnTreeExpandErrorMessage": "未設 OnExpandNodeAsync 回調委託方法"
"NotSetOnTreeExpandErrorMessage": "未設 OnExpandNodeAsync 回呼委派方法",
"ToolbarEditTitle": "節點名稱編輯",
"ToolbarEditLabelText": "更改為"
},
"BootstrapBlazor.Components.UploadBase": {
"DeleteButtonText": "刪除",
"BrowserButtonText": "瀏覽",
"FileExtensions": "檔案類型必須為以下幾種格式: {0}",
"FileSizeValidation": "檔案太大,限制大小為 {0}"
"FileExtensions": "檔案副檔名必須為以下幾種格式: {0}",
"FileSizeValidation": "檔案太大,檔案限制大小為 {0}",
"DropUploadText": "拖曳檔案到此處或<em>點擊上傳</em>"
},
"BootstrapBlazor.Components.Handwritten": {
"SaveButtonText": "儲存",
@@ -359,7 +353,7 @@
},
"BootstrapBlazor.Components.IconDialog": {
"LabelText": "選擇圖示",
"LabelFullText": "完整內容",
"LabelFullText": "完整文字",
"ButtonText": "點擊複製",
"DialogHeaderText": "請選擇圖示",
"CopiedTooltipText": "複製成功"
@@ -368,8 +362,8 @@
"Text": "正在載入 ..."
},
"BootstrapBlazor.Components.QueryBuilder": {
"And": "且",
"Or": "或",
"And": "且",
"Or": "或",
"GreaterThanOrEqual": "大於等於",
"LessThanOrEqual": "小於等於",
"GreaterThan": "大於",
@@ -391,7 +385,19 @@
},
"BootstrapBlazor.Components.ThemeProvider": {
"AutoModeText": "自動",
"DarkModeText": "暗黑",
"DarkModeText": "深色",
"LightModeText": "明亮"
},
"BootstrapBlazor.Components.ValidateBase": {
"DefaultRequiredErrorMessage": "{0}為必填欄位"
},
"BootstrapBlazor.Components.NetworkMonitorIndicator": {
"Title": "網路狀態",
"NetworkType": "網路類型",
"Downlink": "下載速度",
"RTT": "回應時間"
},
"BootstrapBlazor.Components.LoadMore": {
"NoMoreText": "沒有更多資料了"
}
}

View File

@@ -1,3 +0,0 @@
@echo off
copy commit_msg_template.txt ../../.git/commit_msg_template1.txt /y

View File

@@ -1,3 +0,0 @@
#! /bin/bash
cp commit_msg_template.txt ../../.git/commit_msg_template1.txt

View File

@@ -7,7 +7,7 @@ Description=Bootstrap Blazor Application
Type=simple
WorkingDirectory=/usr/local/ba/blazor
Environment=ASPNETCORE_ENVIRONMENT=Production
ExecStart=/usr/bin/dotnet BootstrapBlazor.Server.dll --urls http://localhost:50853
ExecStart=dotnet BootstrapBlazor.Server.dll --urls http://localhost:50853
ExecStop=/bin/kill -2 $MAINPID
KillMode=process
Restart=on-failure

View File

@@ -10,6 +10,6 @@ curl https://www.blazor.zone/api/dispatch?token=BootstrapBlazor-Reboot
dotnet publish src/BootstrapBlazor.Server -c Release
systemctl stop ba.blazor
\cp -fr ~/BootstrapBlazor/src/BootstrapBlazor.Server/bin/Release/net9.0/publish/* /usr/local/ba/blazor
\cp -fr ~/BootstrapBlazor/src/BootstrapBlazor.Server/bin/Release/net10.0/publish/* /usr/local/ba/blazor
systemctl start ba.blazor
systemctl status ba.blazor -l --no-pager

View File

@@ -1,4 +1,5 @@
#! /bin/bash
# wget https://raw.githubusercontent.com/dotnetcore/BootstrapBlazor/refs/heads/main/scripts/linux/deploy.sh
echo "*********************** clean env ***********************"
sudo rm -fr BootstrapBlazor
@@ -8,7 +9,7 @@ echo "*********************** apt update ***********************"
sudo apt update
echo "*********************** install git ***********************"
echo yes|sudo apt install git
yes|sudo apt install git
echo "*********************** install BootstrapBlazor ***********************"
sudo git clone https://gitee.com/LongbowEnterprise/BootstrapBlazor.git
@@ -25,7 +26,8 @@ echo "*********************** install ba.blazor.service ***********************"
sudo systemctl enable ba.blazor
echo "*********************** install nginx ***********************"
echo yes|sudo apt install nginx
yes|sudo apt install nginx
mkdir /usr/share/nginx/logs
echo "*********************** copy nginx config ***********************"
sudo cp BootstrapBlazor/scripts/linux/nginx.conf /etc/nginx/
@@ -36,10 +38,10 @@ sudo cp BootstrapBlazor/scripts/linux/cert/* /etc/nginx/cert/
echo "*********************** install chrome ***********************"
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install ./google-chrome-stable_current_amd64.deb
yes|sudo apt install ./google-chrome-stable_current_amd64.deb
echo "*********************** install support font ***********************"
sudo apt install fonts-wqy-microhei
yes|sudo apt install fonts-wqy-microhei
echo "*********************** install DOTNET ***********************"
wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
@@ -47,4 +49,4 @@ sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-9.0
sudo apt-get install -y dotnet-sdk-10.0

View File

@@ -1,5 +1,5 @@
[Unit]
Description=Bootstrap Admin Blazor Application
Description=BootstrapBlazor Offical Web Application
[Service]
Type=simple

View File

@@ -1,22 +0,0 @@
@echo off
if "%1" == "" (
echo Please provider SolutionDir like: "$(MSBuildThisFileDirectory)"
exit /B
)
if "%2" == "" (
echo Please provider TargetDir like: "$(TargetDir)publish"
exit /B
)
set sourceDir=%2\wwwroot
set targetDir=%1..\..\dist
echo "Ready to copy files to dist
echo xcopy %sourceDir%\*.* %targetDir% /y
xcopy %sourceDir%\*.* %targetDir% /E /R /Y
xcopy %targetDir%\404.html %targetDir%\index.html /R /Y
echo Sync success!

View File

@@ -1,24 +0,0 @@
#!/bin/sh
if [ $1 = "" ]; then
echo Please provider SolutionDir like: "$(MSBuildThisFileDirectory)"
exit 1
fi
if [ $2 = "" ]; then
echo Please provider TargetDir like: "$(TargetDir)publish"
exit 1
fi
sourceDir=$2/wwwroot/
targetDir=$1../../dist/
echo "Ready to copy files to dist"
echo copy $sourceDir $targetDir
\cp -rf $sourceDir $targetDir
\cp -f $targetDir/404.html $targetDir/index.html
echo Sync success!

View File

@@ -1 +0,0 @@
setx Bundle=True

View File

@@ -1,27 +0,0 @@
@echo off
if "%1" == "" (
echo Please provider ProjectName like: "BootstrapBlazor Debug|Release"
exit /B
)
set config=%2
if "%ProjectFolder%" == "" (
set "ProjectFolder=%BB%"
)
if "%ProjectFolder%" == "" (
echo Please set ProjectFolder evniroment Variables
exit /B
)
if "%config%" == "" (
set "config=Debug"
)
cd %ProjectFolder%\%1
dotnet pack -c %config% %ProjectFolder%\%1\
copy %ProjectFolder%\%1\bin\%config%\%1*.nupkg %NugetLib% /y
del %ProjectFolder%\%1\bin\%config%\%1*.nupkg
cd %NugetLib%
set config=
echo Ready to DELETE %USERPROFILE%\.nuget\packages\%1 /S /F /Q
pause
del %USERPROFILE%\.nuget\packages\%1 /S /F /Q
dir %NugetLib%\%1*.nupkg

View File

@@ -1,4 +0,0 @@
@echo off
call pack %1 Release
dotnet nuget push -k %NugetKey% -s https://api.nuget.org/v3/index.json %NugetLib%\%1.*.nupkg --skip-duplicate --no-symbols %NugetLib%\%1.*.snupkg
del %NugetLib%\%1*.nupkg /F /Q

View File

@@ -1,49 +0,0 @@
# 判断是否设置 NugetKey
if ($env:NugetKey -eq $null)
{
echo "请设置环境变量 NugetKey 上传秘钥"
exit
}
# 判断是否设置 NugetSource
if ($env:NugetSource -eq $null)
{
echo "请设置环境变量 NugetSource 上传 Nuget 地址"
exit
}
# 获取当前 PM 中选中的项目
$currentProj = Get-Project
# 获取当前项目所在文件夹
$projectFolder = Split-Path -parent $currentProj.FullName
# 获取当前项目打包文件输出目录
$outFolder = -Join($projectFolder, "\bin\Release\")
# 删除 nupkg 文件防止有老文件干扰
Remove-Item $outFolder*.nupkg -recurse
# 获取打包文件不包含版本号的文件名
$pkgName = -Join($outFolder, $currentProj.Name)
# 带版本号的文件名
$pkgFileName = -Join($pkgName, "*.nupkg")
$spkgFileName = -Join($pkgName, "*.snupkg")
# 开始打包
dotnet pack -c Release $currentProj.FullName
# 判断是否打包成功
$done = Test-Path $pkgFileName
if ($done)
{
# 开始上传
dotnet nuget push -k $env:NugetKey -s $env:NugetSource $pkgFileName --skip-duplicate --no-symbols $spkgFileName
}
else
{
Write-Host "打包失败"
}

View File

@@ -20,56 +20,73 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="BootstrapBlazor.AntDesignIcon" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.AzureOpenAI" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.AzureTranslator" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.BaiduSpeech" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.BaiduOcr" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.BarCode" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.BarcodeGenerator" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.BootstrapIcon" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.BootstrapIcon.Extensions" Version="9.1.0" />
<PackageReference Include="BootstrapBlazor.Chart" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.CherryMarkdown" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.Dock" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.DockView" Version="9.0.3" />
<PackageReference Include="BootstrapBlazor.DriverJs" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.ElementIcon" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.FileViewer" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.FontAwesome" Version="9.0.2" />
<PackageReference Include="BootstrapBlazor.Gantt" Version="9.0.2" />
<PackageReference Include="BootstrapBlazor.Holiday" Version="9.0.1" />
<PackageReference Include="BootstrapBlazor.Html2Pdf" Version="9.0.1" />
<PackageReference Include="BootstrapBlazor.IconPark" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.ImageCropper" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.Live2DDisplay" Version="9.0.1" />
<PackageReference Include="BootstrapBlazor.Markdown" Version="9.0.1" />
<PackageReference Include="BootstrapBlazor.MaterialDesign" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.MaterialDesign.Extensions" Version="9.1.0" />
<PackageReference Include="BootstrapBlazor.MeiliSearch" Version="9.1.7" />
<PackageReference Include="BootstrapBlazor.Mermaid" Version="9.0.3" />
<PackageReference Include="BootstrapBlazor.MindMap" Version="9.1.3" />
<PackageReference Include="BootstrapBlazor.MouseFollower" Version="9.0.1" />
<PackageReference Include="BootstrapBlazor.OnScreenKeyboard" Version="9.0.1" />
<PackageReference Include="BootstrapBlazor.PdfReader" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.Player" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.RDKit" Version="9.0.2" />
<PackageReference Include="BootstrapBlazor.SignaturePad" Version="9.0.1" />
<PackageReference Include="BootstrapBlazor.SmilesDrawer" Version="9.0.1" />
<PackageReference Include="BootstrapBlazor.Sortable" Version="9.0.2" />
<PackageReference Include="BootstrapBlazor.Splitting" Version="9.0.1" />
<PackageReference Include="BootstrapBlazor.SvgEditor" Version="9.0.2" />
<PackageReference Include="BootstrapBlazor.SummerNote" Version="9.0.2" />
<PackageReference Include="BootstrapBlazor.TableExport" Version="9.1.1" />
<PackageReference Include="BootstrapBlazor.Topology" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.VideoPlayer" Version="9.0.2" />
<PackageReference Include="BootstrapBlazor.WinBox" Version="9.0.7" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="BootstrapBlazor.Middleware" Version="9.0.0" />
<PackageReference Include="Longbow.Logging" Version="9.0.0" />
<PackageReference Include="Longbow.Tasks" Version="9.0.0" />
<PackageReference Include="BootstrapBlazor.AntDesignIcon" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Authenticator" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.AzureOpenAI" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.AzureTranslator" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.BaiduSpeech" Version="10.0.1" />
<PackageReference Include="BootstrapBlazor.BaiduOcr" Version="10.0.1" />
<PackageReference Include="BootstrapBlazor.BarCode" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.BarcodeGenerator" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.BootstrapIcon" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Chart" Version="10.0.1" />
<PackageReference Include="BootstrapBlazor.ChatBot" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.CherryMarkdown" Version="10.0.1" />
<PackageReference Include="BootstrapBlazor.CodeEditor" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Dock" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.DockView" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Dom2Image" Version="10.0.1" />
<PackageReference Include="BootstrapBlazor.DriverJs" Version="10.0.1" />
<PackageReference Include="BootstrapBlazor.ElementIcon" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.FileViewer" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.FluentSystemIcon" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.FontAwesome" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Gantt" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.HikVision" Version="10.0.4" />
<PackageReference Include="BootstrapBlazor.Holiday" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Html2Image" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Html2Pdf" Version="10.0.1" />
<PackageReference Include="BootstrapBlazor.IconPark" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.ImageCropper" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.IP2Region" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.JitsiMeet" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.JuHeIpLocatorProvider" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Live2DDisplay" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Markdown" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.MaterialDesign" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.MeiliSearch" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Mermaid" Version="10.0.1" />
<PackageReference Include="BootstrapBlazor.Middleware" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.MindMap" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.MouseFollower" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.OctIcon" Version="10.0.1" />
<PackageReference Include="BootstrapBlazor.OfficeViewer" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.OnScreenKeyboard" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.OpcDa" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.PdfReader" Version="10.0.18" />
<PackageReference Include="BootstrapBlazor.PdfViewer" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Player" Version="10.0.1" />
<PackageReference Include="BootstrapBlazor.RDKit" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Region" Version="10.0.1" />
<PackageReference Include="BootstrapBlazor.SignaturePad" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.SmilesDrawer" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Sortable" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Splitting" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.SvgEditor" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.SummerNote" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.TableExport" Version="10.0.1" />
<PackageReference Include="BootstrapBlazor.Tasks.Dashboard" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.Topology" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.UniverIcon" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.UniverSheet" Version="10.0.1" />
<PackageReference Include="BootstrapBlazor.Vditor" Version="10.0.2" />
<PackageReference Include="BootstrapBlazor.VideoPlayer" Version="10.0.0" />
<PackageReference Include="BootstrapBlazor.WinBox" Version="10.0.0" />
<PackageReference Include="Longbow.Logging" Version="10.0.0" />
<PackageReference Include="Longbow.Modbus" Version="10.0.0" />
<PackageReference Include="Longbow.Sockets" Version="10.0.0" />
<PackageReference Include="Longbow.Tasks" Version="10.0.0" />
<PackageReference Include="Longbow.TcpSocket" Version="10.0.0" />
</ItemGroup>
<ItemGroup>
@@ -83,6 +100,10 @@
<Using Include="BootstrapBlazor.Server.Data" />
<Using Include="BootstrapBlazor.Server.Extensions" />
<Using Include="BootstrapBlazor.Server.Services" />
<Using Include="Longbow.Sockets.DataAdapters" />
<Using Include="Longbow.Sockets.DataConverters" />
<Using Include="Longbow.Sockets.DataHandlers" />
<Using Include="Longbow.TcpSocket" />
<Using Include="Microsoft.AspNetCore.Components" />
<Using Include="Microsoft.Extensions.Configuration" />
<Using Include="Microsoft.Extensions.DependencyInjection" />

View File

@@ -10,11 +10,11 @@
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="keywords" content="bootstrapblazor,bootstrap,blazor,wasm,webassembly,UI,netcore,web,assembly">
<meta name="keywords" content="bootstrapblazor,blazorbootstrap,bootstrap blazor,blazor bootstrap,bootstrap,blazor,wasm,webassembly,UI,netcore,web,assembly">
<meta name="description" content="基于 Bootstrap 风格的 Blazor UI 组件库,用于研发企业级中后台产品。">
<meta name="author" content="argo (argo@live.ca)">
<meta name="theme-color" content="#712cf9">
<title>@Localizer["SiteTitle"]</title>
<title>Bootstrap Blazor - </title>
<base href="/" />
<link rel="icon" href="favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
@@ -42,9 +42,9 @@
<BlazorReconnector @rendermode="new InteractiveServerRenderMode(false)" />
<script src="_content/BootstrapBlazor.SummerNote/js/jquery-3.6.0.min.js"></script>
<script src="_content/BootstrapBlazor/js/bootstrap.blazor.bundle.min.js"></script>
<script src="_framework/blazor.web.js"></script>
<script src="@Assets["_content/BootstrapBlazor.SummerNote/js/jquery-3.6.0.min.js"]"></script>
<script src="@Assets["_content/BootstrapBlazor/js/bootstrap.blazor.bundle.min.js"]"></script>
<script src="@Assets["_framework/blazor.web.js"]"></script>
@if (Env.IsProduction())
{
<script type="text/javascript" src="https://cdn.wwads.cn/js/makemoney.js"></script>

View File

@@ -1,3 +1,3 @@
@inject IOptionsMonitor<WebsiteOptions> WebsiteOption
@inject IOptions<WebsiteOptions> WebsiteOption
<img alt="logo" class="bb-icon" src="@WebsiteOption.CurrentValue.GetAssetUrl("images/logo.png")" />
<img alt="logo" class="bb-icon" src="@WebsiteOption.Value.GetAssetUrl("images/logo.png")" />

View File

@@ -1,4 +1,4 @@
@inject IOptionsMonitor<WebsiteOptions> WebsiteOption
@inject IOptions<WebsiteOptions> WebsiteOption
<Reconnector>
<ReconnectingTemplate>
@@ -59,7 +59,7 @@
</Reconnector>
@code {
private string TemplateUrl => $"{WebsiteOption.CurrentValue.GiteeRepositoryUrl}/wikis/%E9%A1%B9%E7%9B%AE%E6%A8%A1%E6%9D%BF%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B";
private string TemplateUrl => $"{WebsiteOption.Value.GiteeRepositoryUrl}/wikis/%E9%A1%B9%E7%9B%AE%E6%A8%A1%E6%9D%BF%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B";
RenderFragment RenderBootstrapBlazor =>
@<div class="col-12 col-sm-5">
@@ -67,11 +67,11 @@
<div class="d-flex">
<div class="flex-fill">
<p> <b>Bootstrap</b> <b>Blazor UI</b> Server WebAssembly</p>
<p> <b>ABP</b> <b>NET6/NET7/NET8</b></p>
<p> <b>ABP</b> <b>@WebsiteOption.Value.GetTargets()</b></p>
<p></p>
<div>便 <a class="connection-link" href="@TemplateUrl" target="_blank"></a></div>
</div>
<img altt="QQ" src="@WebsiteOption.CurrentValue.GetAssetUrl("images/QQGroup@2x.png")" alt="QQGroup" />
<img altt="QQ" src="@WebsiteOption.Value.GetAssetUrl("images/QQGroup@2x.png")" alt="QQGroup" />
<div class="connection-body-tail d-none d-sm-block"></div>
</div>
</div>;

View File

@@ -0,0 +1,4 @@
<div class="footer-cache ms-2">
<i class="fa-solid fa-microchip text-success"></i>
<a href="./cache-list" target="_blank" style="color: #ddd;">@CacheManager.Keys.Count()</a>
</div>

View File

@@ -0,0 +1,44 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the Apache 2.0 License
// See the LICENSE file in the project root for more information.
// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
namespace BootstrapBlazor.Server.Components.Components;
/// <summary>
/// 缓存数量组件
/// </summary>
public partial class CacheCounter : IDisposable
{
[Inject, NotNull]
private ICacheManager? CacheManager { get; set; }
private readonly CancellationTokenSource _cancellationTokenSource = new();
/// <summary>
/// <inheritdoc/>
/// </summary>
/// <param name="firstRender"></param>
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await base.OnAfterRenderAsync(firstRender);
try
{
await Task.Delay(5000, _cancellationTokenSource.Token);
StateHasChanged();
}
catch { }
}
/// <summary>
/// <inheritdoc/>
/// </summary>
/// <exception cref="NotImplementedException"></exception>
public void Dispose()
{
_cancellationTokenSource.Cancel();
_cancellationTokenSource.Dispose();
GC.SuppressFinalize(this);
}
}

View File

@@ -0,0 +1 @@
@ExpirationTime

View File

@@ -0,0 +1,41 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the Apache 2.0 License
// See the LICENSE file in the project root for more information.
// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
using Microsoft.Extensions.Caching.Memory;
namespace BootstrapBlazor.Server.Components.Components;
/// <summary>
/// CacheExpiration 组件
/// </summary>
public partial class CacheExpiration
{
/// <summary>
/// 获得/设置 <see cref="ICacheEntry"/> 实例
/// </summary>
[Parameter, NotNull]
public object? Context { get; set; }
private string? ExpirationTime { get; set; }
/// <summary>
/// <inheritdoc/>
/// </summary>
/// <returns></returns>
protected override async Task OnParametersSetAsync()
{
await base.OnParametersSetAsync();
await GetCacheEntryExpiration();
}
private async Task GetCacheEntryExpiration()
{
ExpirationTime = "loading ...";
await Task.Yield();
ExpirationTime = Context is ICacheEntry entry ? entry.GetExpiration() : "-";
}
}

View File

@@ -13,9 +13,9 @@ namespace BootstrapBlazor.Server.Components.Components;
public sealed partial class ComponentCard
{
[Inject, NotNull]
private IOptionsMonitor<WebsiteOptions>? WebsiteOption { get; set; }
private IOptions<WebsiteOptions>? WebsiteOption { get; set; }
private string ImageUrl => $"{WebsiteOption.CurrentValue.AssetRootPath}images/{Image}";
private string ImageUrl => $"{WebsiteOption.Value.AssetRootPath}images/{Image}";
private string? ClassString => CssBuilder.Default("col-12 col-sm-6 col-md-4 col-lg-3")
.AddClass("d-none", IsHide)

View File

@@ -4,7 +4,7 @@
<span>@Label</span>
<Select Value="@SelectedCulture" OnSelectedItemChanged="@SetCulture">
<Options>
@foreach (var kv in BootstrapOptions.CurrentValue.GetSupportedCultures())
@foreach (var kv in BootstrapOptions.Value.GetSupportedCultures())
{
<SelectOption Text="@GetDisplayName(kv)" Value="@kv.Name" />
}

View File

@@ -16,7 +16,7 @@ public partial class CultureChooser
{
[Inject]
[NotNull]
private IOptionsMonitor<BootstrapBlazorOptions>? BootstrapOptions { get; set; }
private IOptions<BootstrapBlazorOptions>? BootstrapOptions { get; set; }
[Inject]
[NotNull]
@@ -56,18 +56,22 @@ public partial class CultureChooser
var uri = new Uri(NavigationManager.Uri).GetComponents(UriComponents.PathAndQuery, UriFormat.SafeUnescaped);
var query = $"?culture={Uri.EscapeDataString(culture)}&redirectUri={Uri.EscapeDataString(uri)}";
// use a path that matches your culture redirect controller from the previous steps
NavigationManager.NavigateTo("/Culture/SetCulture" + query, forceLoad: true);
try
{
// use a path that matches your culture redirect controller from the previous steps
NavigationManager.NavigateTo("/Culture/SetCulture" + query, forceLoad: true);
}
catch { }
}
}
else
{
if (SelectedCulture != item.Value)
else
{
var culture = item.Value;
await JSRuntime.InvokeVoidAsync("bbCulture.set", culture);
if (SelectedCulture != item.Value)
{
var culture = item.Value;
await JSRuntime.InvokeVoidAsync("bbCulture.set", culture);
NavigationManager.NavigateTo(NavigationManager.Uri, forceLoad: true);
NavigationManager.NavigateTo(NavigationManager.Uri, forceLoad: true);
}
}
}
}

View File

@@ -1,4 +1,4 @@
@inject IOptionsMonitor<WebsiteOptions> WebsiteOption
@inject IOptions<WebsiteOptions> WebsiteOption
<div class="bb-winbox-body">
<h3>Custom WinBox Content Create @DateTime.Now</h3>

View File

@@ -3,8 +3,6 @@
// See the LICENSE file in the project root for more information.
// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
using Microsoft.Extensions.Options;
namespace BootstrapBlazor.Server.Components.Components;
/// <summary>
@@ -51,7 +49,7 @@ public partial class CustomWinBoxContent
{
if (Option != null)
{
Option.Icon = $"{WebsiteOption.CurrentValue.AssetRootPath}images/Argo-C.png";
Option.Icon = $"{WebsiteOption.Value.AssetRootPath}images/Argo-C.png";
await WinBoxService.SetIcon(Option);
}
}

View File

@@ -1,50 +1,11 @@
@inherits FilterBase
<Select Items="@Items" @bind-Value="@Value" OnSelectedItemChanged="_ => OnFilterValueChanged()"></Select>
@code {
private int Value = 10;
/// <summary>
/// OnInitialized 方法
/// </summary>
protected override void OnInitialized()
{
base.OnInitialized();
if (TableFilter != null) TableFilter.ShowMoreButton = false;
Items = new SelectedItem[]
{
new SelectedItem { Value = "10", Text = "大于 10" },
new SelectedItem { Value = "50", Text = "大于 50" },
new SelectedItem { Value = "100", Text = "大于 100" }
};
}
/// <summary>
/// 重置过滤条件方法
/// </summary>
public override void Reset()
{
Value = 10;
StateHasChanged();
}
/// <summary>
/// 生成过滤条件方法
/// </summary>
/// <returns></returns>
public override FilterKeyValueAction GetFilterConditions()
{
var filter = new FilterKeyValueAction() { Filters = new() };
filter.Filters.Add(new FilterKeyValueAction()
{
FieldKey = FieldKey,
FieldValue = Value,
FilterAction = FilterAction.GreaterThan
});
return filter;
}
@if (IsHeaderRow)
{
<Select Items="@_items" @bind-Value="@_value" IsUseDefaultItemWhenValueIsNull="true" IsPopover="true"
ShowLabel="false" SkipValidate="true" OnSelectedItemChanged="_ => OnFilterAsync()"></Select>
}
else
{
<Select Items="@_items" @bind-Value="@_value" IsUseDefaultItemWhenValueIsNull="true" IsPopover="true"></Select>
}

View File

@@ -0,0 +1,66 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the Apache 2.0 License
// See the LICENSE file in the project root for more information.
// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
using BootstrapBlazor.Server.Components.Samples.Table;
namespace BootstrapBlazor.Server.Components.Components;
/// <summary>
/// CustomerFilter 组件示例代码
/// </summary>
public partial class CustomerFilter
{
[Inject]
[NotNull]
private IStringLocalizer<TablesFilter>? TableFilterLocalizer { get; set; }
private int? _value;
private List<SelectedItem> _items = [];
/// <summary>
/// <inheritdoc />
/// </summary>
protected override void OnInitialized()
{
base.OnInitialized();
_items =
[
new SelectedItem { Value = "", Text = TableFilterLocalizer["CustomerFilterItem1"] },
new SelectedItem { Value = "10", Text = TableFilterLocalizer["CustomerFilterItem2"] },
new SelectedItem { Value = "50", Text = TableFilterLocalizer["CustomerFilterItem3"] },
new SelectedItem { Value = "80", Text = TableFilterLocalizer["CustomerFilterItem4"] }
];
}
/// <summary>
/// 重置过滤条件方法
/// </summary>
public override void Reset()
{
_value = null;
StateHasChanged();
}
/// <summary>
/// 生成过滤条件方法
/// </summary>
/// <returns></returns>
public override FilterKeyValueAction GetFilterConditions()
{
var filter = new FilterKeyValueAction();
if (_value != null)
{
filter.Filters.Add(new FilterKeyValueAction()
{
FieldKey = FieldKey,
FieldValue = _value.Value,
FilterAction = FilterAction.GreaterThan
});
}
return filter;
}
}

View File

@@ -45,6 +45,7 @@
.card-footer-code ::deep .pre-code {
margin: .5rem;
width: calc(100% - 1rem);
}
.card-footer-control {

View File

@@ -1,39 +0,0 @@
@using BootstrapBlazor.Server.Components.Samples.Table
@inject IStringLocalizer<Foo> LocalizerFoo
@inject IStringLocalizer<TablesEdit> Localizer
<div class="row form-inline g-3">
<div class="col-12 col-sm-6">
<BootstrapInput @bind-Value="Model.Name" />
</div>
<div class="col-12 col-sm-6">
<MultiSelect @bind-Value="@Model.Hobby" Items="Hobbies" />
</div>
<div class="col-12">
<Textarea @bind-Value="Model.Address" rows="3"/>
</div>
<div class="col-12 col-sm-6">
<Select @bind-Value="Model.Education" />
</div>
<div class="col-12 col-sm-6">
<Display Value="@EducationDesc" ShowLabel="true" DisplayText="@Localizer["TablesEditTemplateDisplayLabel"]" />
</div>
</div>
@code {
[Parameter]
[NotNull]
public Foo? Model { get; set; }
private IEnumerable<SelectedItem>? Hobbies { get; set; }
private string? EducationDesc => Model.Education == EnumEducation.Primary ? Localizer["TablesEditTemplateDisplayDetail1"] : Localizer["TablesEditTemplateDisplayDetail2"];
/// <summary>
/// <inheritdoc/>
/// </summary>
protected override void OnInitialized()
{
Hobbies = Foo.GenerateHobbies(LocalizerFoo);
}
}

View File

@@ -1,11 +1,13 @@
@inject ICacheManager Cache
@inject IConnectionService ConnectionService
@inherits WebSiteModuleComponentBase
@attribute [JSModuleAutoLoader("Components/FooterCounter.razor.js")]
<div class="d-none d-sm-block ms-2">Run @Runtime</div>
<div id="@Id" class="d-none d-sm-block ms-2" style="width: 110px;">Run @Runtime</div>
@if (_options.Enable)
{
<div class="footer-online ms-2">
<i class="fa-solid fa-people-group"></i>
<a href="./online" target="_blank">@ConnectionService.Count</a>
<i class="fa-solid fa-people-group text-success"></i>
<a href="./online" target="_blank" style="color: #ddd;">@ConnectionService.Count</a>
</div>
}

View File

@@ -10,11 +10,11 @@ namespace BootstrapBlazor.Server.Components.Components;
/// <summary>
/// FooterCounter 组件
/// </summary>
public partial class FooterCounter : IDisposable
public partial class FooterCounter
{
private string? Runtime { get; set; }
private CancellationTokenSource DisposeTokenSource { get; } = new();
private readonly CancellationTokenSource _disposeTokenSource = new();
private ConnectionHubOptions _options = default!;
@@ -30,60 +30,57 @@ public partial class FooterCounter : IDisposable
base.OnInitialized();
_options = BootstrapBlazorOptions.Value.ConnectionHubOptions;
UpdateRuntime();
var ts = DateTimeOffset.Now - Cache.GetStartTime();
Runtime = ts.ToString("dd\\.hh\\:mm\\:ss");
}
/// <summary>
/// <inheritdoc />
/// </summary>
/// <param name="firstRender"></param>
protected override void OnAfterRender(bool firstRender)
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await base.OnAfterRenderAsync(firstRender);
if (firstRender)
{
_ = Task.Run(async () =>
try
{
while (!DisposeTokenSource.IsCancellationRequested)
while (_disposeTokenSource is { IsCancellationRequested: false })
{
try
{
await Task.Delay(1000, DisposeTokenSource.Token);
}
catch (TaskCanceledException)
{
}
if (!DisposeTokenSource.IsCancellationRequested)
{
UpdateRuntime();
await InvokeAsync(StateHasChanged);
}
await Task.Delay(30000, _disposeTokenSource.Token);
var ts = DateTimeOffset.Now - Cache.GetStartTime();
await InvokeVoidAsync("updateFooterCounter", Id, ts.TotalSeconds);
}
});
}
}
private void UpdateRuntime()
{
var ts = DateTimeOffset.Now - Cache.GetStartTime();
Runtime = ts.ToString("dd\\.hh\\:mm\\:ss");
}
private void Dispose(bool disposing)
{
if (disposing)
{
DisposeTokenSource.Cancel();
DisposeTokenSource.Dispose();
}
catch { }
}
}
/// <summary>
/// <inheritdoc/>
/// </summary>
public void Dispose()
/// <returns></returns>
protected override Task InvokeInitAsync()
{
Dispose(true);
GC.SuppressFinalize(this);
var ts = DateTimeOffset.Now - Cache.GetStartTime();
return InvokeVoidAsync("init", Id, ts.TotalSeconds);
}
/// <summary>
/// <inheritdoc/>
/// </summary>
/// <param name="disposing"></param>
/// <returns></returns>
protected override async ValueTask DisposeAsync(bool disposing)
{
await base.DisposeAsync(true);
if (disposing)
{
_disposeTokenSource.Cancel();
_disposeTokenSource.Dispose();
}
}
}

View File

@@ -1,7 +0,0 @@
.footer-online i {
color: var(--bs-success)
}
.footer-online a {
color: #ddd;
}

View File

@@ -0,0 +1,45 @@
import Data from "../../_content/BootstrapBlazor/modules/data.js"
export function init(id, totalSeconds) {
const el = document.getElementById(id);
if (el === null) {
return;
}
const tick = () => {
const counter = Data.get(id);
counter.totalSeconds = (counter.totalSeconds || 0) + 1;
const now = Math.round(counter.totalSeconds, 0);
const days = Math.floor(now / (24 * 3600));
const hours = Math.floor((now % (24 * 3600)) / 3600);
const minutes = Math.floor((now % 3600) / 60);
const seconds = now % 60;
const pad = num => num.toString().padStart(2, '0');
el.innerHTML = `Run ${pad(days)}.${pad(hours)}:${pad(minutes)}:${pad(seconds)}`;
}
const handler = setInterval(tick, 1000);
Data.set(id, {
el,
handler,
totalSeconds
});
}
export function updateFooterCounter(id, totalSeconds) {
const counter = Data.get(id);
if (counter) {
counter.totalSeconds = totalSeconds;
}
}
export function dispose(id) {
const counter = Data.get(id);
if (counter) {
clearInterval(counter.handler);
Data.remove(id);
}
}

View File

@@ -14,18 +14,9 @@
<li class="nav-item">
<a class="nav-link" href="introduction">@IntroductionText</a>
</li>
<li class="nav-item">
<a class="nav-link" href="components">@ComponentsText</a>
</li>
<li class="nav-item">
<a class="nav-link" href="tutorials">@TutorialsText</a>
</li>
@if (CultureInfo.CurrentUICulture.Name == "zh-CN")
{
<li class="nav-item">
<a class="nav-link" href="https://theme.blazor.zone"></a>
</li>
}
</ul>
</div>
<div class="d-flex flex-fill"></div>
@@ -33,20 +24,20 @@
<CultureChooser class="flex-md" />
<ul class="navbar-nav nav-repo ms-3">
<li class="nav-item">
<a class="nav-link p-2" href="@WebsiteOption.CurrentValue.GithubRepositoryUrl" target="_blank">
<img alt="git" src="@WebsiteOption.CurrentValue.GetAssetUrl("images/git.svg")" />
<a class="nav-link p-2" href="@WebsiteOption.Value.GithubRepositoryUrl" target="_blank">
<img alt="git" src="@WebsiteOption.Value.GetAssetUrl("images/git.svg")" />
</a>
</li>
<li class="nav-item">
<a class="nav-link p-2" href="@WebsiteOption.CurrentValue.GiteeRepositoryUrl" target="_blank">
<img alt="gitee" src="@WebsiteOption.CurrentValue.GetAssetUrl("images/gitee.svg")" />
<a class="nav-link p-2" href="@WebsiteOption.Value.GiteeRepositoryUrl" target="_blank">
<img alt="gitee" src="@WebsiteOption.Value.GetAssetUrl("images/gitee.svg")" />
</a>
</li>
<li class="nav-item">
<FullScreenButton class="nav-link p-2" TooltipText="点击切换全屏模式" />
<FullScreenButton class="nav-link p-2" TooltipText="@Localizer["FullScreenTooltipText"]" />
</li>
</ul>
<a class="btn btn-bd-download d-none d-lg-block mb-3 mb-md-0 ms-md-3" target="_blank" href="@DownloadUrl">@DownloadText</a>
<a class="btn btn-bd-download d-none d-lg-block mb-3 mb-md-0 ms-md-3" target="_blank" href="@WebsiteOption.Value.WikiUrl">@DownloadText</a>
<div class="navbar-version ms-2">@_versionString</div>
<ThemeProvider class="ms-2 d-none d-lg-block" OnThemeChangedAsync="OnThemeChangedAsync"></ThemeProvider>
<ThemeProvider class="ms-2 d-none d-lg-block"></ThemeProvider>
</header>

View File

@@ -14,7 +14,7 @@ public partial class Header
{
[Inject]
[NotNull]
private IOptionsMonitor<WebsiteOptions>? WebsiteOption { get; set; }
private IOptions<WebsiteOptions>? WebsiteOption { get; set; }
[Inject]
[NotNull]
@@ -30,17 +30,12 @@ public partial class Header
[NotNull]
private string? IntroductionText { get; set; }
[NotNull]
private string? ComponentsText { get; set; }
[NotNull]
private string? DownloadText { get; set; }
[NotNull]
private string? TutorialsText { get; set; }
private const string DownloadUrl = "https://github.com/dotnetcore/BootstrapBlazor/releases?wt.mc_id=DT-MVP-5004174";
private string _versionString = "";
/// <summary>
@@ -53,10 +48,7 @@ public partial class Header
DownloadText ??= Localizer[nameof(DownloadText)];
HomeText ??= Localizer[nameof(HomeText)];
IntroductionText ??= Localizer[nameof(IntroductionText)];
ComponentsText ??= Localizer[nameof(ComponentsText)];
TutorialsText ??= Localizer[nameof(TutorialsText)];
_versionString = $"v{PackageVersionService.Version}";
}
private Task OnThemeChangedAsync(ThemeValue themeName) => InvokeVoidAsync("updateTheme", themeName, WebsiteOption.CurrentValue.AssetRootPath);
}

View File

@@ -64,24 +64,28 @@
}
::deep .bb-g-search {
--bs-border-color: var(--bb-header-dropdown-border-color);
--bb-border-hover-color: var(--bb-header-dropdown-border-hover-color);
--bb-global-search-input-color: var(--bb-header-dropdown-color);
width: var(--bb-header-select-width);
margin-bottom: var(--bb-header-search-margin-bottom);
margin-block-end: var(--bb-header-search-margin-bottom);
font-size: 0.875rem;
}
::deep .bb-g-search > input {
padding: 2px 0;
}
@media (min-width: 768px) {
.navbar-header {
position: sticky;
top: 0;
z-index: 1050;
z-index: 15;
height: var(--bs-header-height);
}
.modal-open .navbar-header {
z-index: 1040;
}
::deep .bb-g-search {
margin-bottom: 0;
margin-block-end: 0;
margin-inline-end: .5rem;
}
}

View File

@@ -1,5 +1,4 @@
import { switchTheme as syncTheme } from "./Pre.razor.js"
import EventHandler from "../../_content/BootstrapBlazor/modules/event-handler.js"
import EventHandler from "../../_content/BootstrapBlazor/modules/event-handler.js"
export function init(id) {
const scrollTop = () => (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop
@@ -17,10 +16,6 @@ export function init(id) {
});
}
export async function updateTheme(theme, assetPath) {
await syncTheme(theme, assetPath);
}
export function dispose(id) {
EventHandler.off(document, 'scroll');
}

View File

@@ -1,96 +0,0 @@
@using Microsoft.Extensions.DependencyInjection
@inject PackageVersionService VersionManager
@inject IStringLocalizer<InstallContent> Localizer
<h3>@Title</h3>
<h4>@Localizer["Heading"]</h4>
@inject IOptionsMonitor<WebsiteOptions> WebsiteOption
<p>@Localizer["P1"]</p>
<ul class="ul-demo">
<li><code>visual studio</code> @Localizer["P2"]</li>
<li><code>net5</code> @Localizer["P3"] <code>net6</code> <code>net7</code></li>
</ul>
<p><code>BootstrapBlazor</code> @Localizer["P4"] <code>NET6/NET7/NET8/NET9</code></p>
<h4>@Localizer["P5"]</h4>
<p>@Localizer["P6"] <a href="template">[@Localizer["P7"]]</a> @Localizer["P8"]</p>
<h4>@Localizer["P9"]</h4>
<h5>@Localizer["P10"]</h5>
<p class="code-label">1. @Localizer["P11"]</p>
<p class="code-label">2. @Localizer["P12"]</p>
<p class="code-label">3. @Localizer["P13"] <b>Blazor App</b> @Localizer["P14"] <b>@Localizer["P15"]</b>, @Localizer["P16"] <b>Create</b></p>
<img alt="install" src="@WebsiteOption.CurrentValue.GetAssetUrl("images/create-new-application.png")" style="border-radius: 6px;" class="d-none d-sm-block" />
@ChooseTemplate
<h5>@Localizer["P17"]</h5>
<p class="code-label">1. @Localizer["P18"] <b>nuget.org</b> @Localizer["P19"] <code>BootstrapBlazor</code></p>
<p>@Localizer["P20"] <b>Manage Nuget Packages</b></p>
<Pre @key="@Version" class="no-highlight">dotnet add package BootstrapBlazor --version @Version</Pre>
<img alt="install" src="@WebsiteOption.CurrentValue.GetAssetUrl("images/manage-nuget-packages-for-server-app.png")" style="border-radius: 6px;" class="d-none d-sm-block" />
<p class="code-label">2. @Localizer["P21"]</p>
<img alt="install" src="@WebsiteOption.CurrentValue.GetAssetUrl("images/nuget_install.png")" style="width: 1000px; border-radius: 6px;" class="d-none d-sm-block" />
<p class="code-label">3. @Localizer["P22"]</p>
<p>@Localizer["P23"]</p>
@SheetTemplate
<Tips>
<div>@((MarkupString)Localizer["Tips2"].Value)</div>
</Tips>
<Pre>&lt;head&gt;
...
<b>
&lt;!-- @Localizer["P24"] !--&gt;
&lt;link href="_content/BootstrapBlazor.FontAwesome/css/font-awesome.min.css" rel="stylesheet"&gt;
&lt;link href="_content/BootstrapBlazor/css/bootstrap.blazor.bundle.min.css" rel="stylesheet"&gt;
</b>
...
&lt;link href="css/site.css" rel="stylesheet"&gt;
&lt;link href="BlazorApp1.styles.css" rel="stylesheet"&gt;
&lt;/head&gt;</Pre>
<p class="code-label">4. @Localizer["P25"]</p>
@ScriptsTemplate
<Pre>&lt;body&gt;
...
&lt;!-- @Localizer["P26"] !--&gt;
<b>&lt;script src="_content/BootstrapBlazor/js/bootstrap.blazor.bundle.min.js"&gt;&lt;/script&gt;</b>
...
&lt;script src="_framework/blazor.server.js"&gt;&lt;/script&gt;
&lt;/body&gt;</Pre>
<p class="code-label">5. @Localizer["P27"]</p>
@ServicesTemplate
<p class="code-label">6. @Localizer["P28"]</p>
<p>@Localizer["P29"] <code>~/_Imports.razor</code> @Localizer["P30"] <code>Razor</code> @Localizer["P31"]</p>
<Pre><b>@@using BootstrapBlazor.Components</b></Pre>
<p class="code-label">7. @Localizer["P32"] <code>BootstrapBlazorRoot</code> @Localizer["P33"] <code>~/App.razor</code> @Localizer["P34"]</p>
<Pre>&lt;BootstrapBlazorRoot&gt;
&lt;Router AppAssembly="@@typeof(App).Assembly"&gt;
&lt;Found Context="routeData"&gt;
&lt;PageTitle&gt;Title&lt;/PageTitle&gt;
&lt;RouteView RouteData="@@routeData" DefaultLayout="@@typeof(MainLayout)" /&gt;
&lt;FocusOnNavigate RouteData="@@routeData" Selector="h1" /&gt;
&lt;/Found&gt;
&lt;NotFound&gt;
&lt;PageTitle&gt;Not found&lt;/PageTitle&gt;
&lt;LayoutView Layout="@@typeof(MainLayout)"&gt;
&lt;p&gt; @Localizer["P35"] ...&lt;/p&gt;
&lt;/LayoutView&gt;
&lt;/NotFound&gt;
&lt;/Router&gt;
&lt;/BootstrapBlazorRoot&gt;</Pre>
<h5>@Localizer["P36"]</h5>
<p>@Localizer["P37"] <code>BootstrapBlazor</code> @Localizer["P38"]</p>
<p class="code-label">1. @Localizer["P39"] <code>Button</code> @Localizer["P40"]</p>
<Pre>&lt;Button Color="Color.Primary" Icon="fa-solid fa-font-awesome" Text="@Localizer["P41"]" /&gt;</Pre>
<p class="code-label">2. @Localizer["P42"] <b>Visual studio</b> @Localizer["P43"] <kbd>F5</kbd> @Localizer["P44"]</p>
<img alt="install" src="@WebsiteOption.CurrentValue.GetAssetUrl("images/preview.png")" style="border-radius: 6px;" class="d-none d-sm-block" />

View File

@@ -1,68 +0,0 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the Apache 2.0 License
// See the LICENSE file in the project root for more information.
// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
namespace BootstrapBlazor.Server.Components.Components;
/// <summary>
///
/// </summary>
public sealed partial class InstallContent
{
/// <summary>
/// 获得/设置 版本号字符串
/// </summary>
private string Version { get; set; } = "latest";
/// <summary>
///
/// </summary>
[Parameter]
public string Title { get; set; } = "服务器端 Blazor 安装教程";
/// <summary>
///
/// </summary>
[Parameter]
public string HostFile { get; set; } = "Pages/_Host.cshtml";
/// <summary>
///
/// </summary>
[Parameter]
public RenderFragment? ChooseTemplate { get; set; }
/// <summary>
///
/// </summary>
[Parameter]
public RenderFragment? SheetTemplate { get; set; }
/// <summary>
///
/// </summary>
[Parameter]
public RenderFragment? ScriptsTemplate { get; set; }
/// <summary>
///
/// </summary>
[Parameter]
public RenderFragment? ServicesTemplate { get; set; }
/// <summary>
///
/// </summary>
[Parameter]
public RenderFragment? ChildContent { get; set; }
/// <summary>
/// OnInitializedAsync 方法
/// </summary>
/// <returns></returns>
protected override async Task OnInitializedAsync()
{
Version = await VersionManager.GetVersionAsync();
}
}

View File

@@ -0,0 +1,8 @@
<div class="mask-dialog-demo row">
<div class="col-12">
<h3>MaskDemo</h3>
</div>
<div class="col-12">
<DialogCloseButton></DialogCloseButton>
</div>
</div>

View File

@@ -0,0 +1,5 @@
.mask-dialog-demo {
background-color: var(--bs-body-bg);
border-radius: var(--bs-border-radius);
padding: 1rem;
}

View File

@@ -1,6 +1,6 @@
@inherits WebSiteModuleComponentBase
@attribute [JSModuleAutoLoader("Components/Pre.razor.js")]
@inject IOptionsMonitor<WebsiteOptions> WebsiteOption
@inject IOptions<WebsiteOptions> WebsiteOption
<div @attributes="@AdditionalAttributes" class="@ClassString" id="@Id" data-bb-title="@CopiedText">
<p class="loading">@LoadingText</p>

View File

@@ -114,7 +114,7 @@ public partial class Pre
/// <inheritdoc/>
/// </summary>
/// <returns></returns>
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, CopiedText, WebsiteOption.CurrentValue.AssetRootPath);
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, CopiedText, WebsiteOption.Value.AssetRootPath);
private async Task GetCodeAsync()
{

View File

@@ -19,6 +19,12 @@
display: none;
}
.pre-code > pre {
color: #e83e8c;
margin-bottom: 0;
max-height: 260px;
}
::deep .btn-group {
position: absolute;
top: 0;

View File

@@ -1,4 +1,4 @@
import { copy, getDescribedElement, addLink, removeLink, addScript, getHeight, getPreferredTheme } from "../../_content/BootstrapBlazor/modules/utility.js"
import { copy, getDescribedElement, addLink, removeLink, addScript, getHeight, getTheme, registerBootstrapBlazorModule } from "../../_content/BootstrapBlazor/modules/utility.js"
import EventHandler from "../../_content/BootstrapBlazor/modules/event-handler.js"
export async function init(id, title, assetRoot) {
@@ -9,7 +9,7 @@ export async function init(id, title, assetRoot) {
await addScript(`${assetRoot}lib/highlight/highlight.min.js`)
await addScript(`${assetRoot}lib/highlight/cshtml-razor.min.js`)
await switchTheme(getPreferredTheme(), assetRoot);
await switchTheme(getTheme(), assetRoot);
const preElement = el.querySelector('pre')
const code = el.querySelector('pre > code')
@@ -48,6 +48,15 @@ export async function init(id, title, assetRoot) {
preElement.style.maxHeight = `${preHeight}px`
})
}
registerBootstrapBlazorModule('Pre', id, () => {
EventHandler.on(document, 'changed.bb.theme', updateTheme);
});
}
const updateTheme = e => {
const theme = e.theme;
switchTheme(theme);
}
export async function highlight(id) {
@@ -78,14 +87,14 @@ export async function highlight(id) {
}
}
export async function switchTheme(theme, assetPath) {
export async function switchTheme(theme) {
if (theme === 'dark') {
removeLink(`${assetPath}lib/highlight/vs.min.css`);
await addLink(`${assetPath}lib/highlight/vs2015.min.css`);
removeLink(`./lib/highlight/vs.min.css`);
await addLink(`./lib/highlight/vs2015.min.css`);
}
else {
removeLink(`${assetPath}lib/highlight/vs2015.min.css`);
await addLink(`${assetPath}lib/highlight/vs.min.css`);
removeLink(`./lib/highlight/vs2015.min.css`);
await addLink(`./lib/highlight/vs.min.css`);
}
}
@@ -96,7 +105,14 @@ export function dispose(id) {
return
}
EventHandler.off(el, 'click', '.btn-copy')
EventHandler.off(el, 'click', '.btn-plus')
EventHandler.off(el, 'click', '.btn-minus')
EventHandler.off(el, 'click', '.btn-copy');
EventHandler.off(el, 'click', '.btn-plus');
EventHandler.off(el, 'click', '.btn-minus');
const { Pre } = window.BootstrapBlazor;
if (Pre) {
Pre.dispose(id, () => {
EventHandler.off(document, 'changed.bb.theme', updateTheme);
});
}
}

View File

@@ -1,17 +1,15 @@
@inject IOptionsMonitor<WebsiteOptions> WebsiteOption
@inject IOptions<WebsiteOptions> WebsiteOption
@inject IStringLocalizer<QQGroup> Localzier
<div>
@Localzier["Group"]BootstrapAdmin & Blazor
<a class="mx-1" target="_blank" href="@WebsiteOption.CurrentValue.QQGroup1Link">
<span class="text-success fa-brands fa-qq">
<span class="ms-1"><b>795206915</b></span>
</span>
<a class="mx-1" target="_blank" href="@WebsiteOption.Value.QQGroup1Link">
<span class="text-success fa-brands fa-qq"></span>
<span class="text-success"><b>795206915</b></span>
</a>
<a class="mx-1" target="_blank" href="@WebsiteOption.CurrentValue.QQGroup2Link">
<span class="text-success fa-brands fa-qq">
<span class="ms-1"><b>675147445</b></span>
</span>
<a class="mx-1" target="_blank" href="@WebsiteOption.Value.QQGroup2Link">
<span class="text-success fa-brands fa-qq"></span>
<span class="text-success"><b>675147445</b></span>
</a>
@Localzier["Welcome"]
</div>

View File

@@ -1,3 +1,3 @@
<div class="bb-reboot-clock">
<FlipClock ViewMode="FlipClockViewMode.CountDown" ShowHour="false" StartValue="TimeSpan.FromSeconds(140)"></FlipClock>
<div class="bb-reboot-clock">
<FlipClock ViewMode="FlipClockViewMode.CountDown" ShowHour="false" StartValue="TimeSpan.FromSeconds(240)"></FlipClock>
</div>

View File

@@ -0,0 +1,4 @@
@typeparam TValue
<Button Text="Clear1" OnClick="OnClickClear"></Button>
<Button Text="Search1" OnClick="OnClickSearch"></Button>

View File

@@ -0,0 +1,35 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the Apache 2.0 License
// See the LICENSE file in the project root for more information.
// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
namespace BootstrapBlazor.Server.Components.Components;
/// <summary>
/// SearchButtonTemplateDemo 示例组件
/// </summary>
public partial class SearchButtonTemplateDemo<TValue>
{
/// <summary>
/// 获得/设置 <see cref="SearchContext{TValue}"/> 实例"/>
/// </summary>
[Parameter, EditorRequired, NotNull]
public SearchContext<TValue>? Context { get; set; }
[Inject, NotNull]
private ToastService? ToastService { get; set; }
private async Task OnClickSearch()
{
await Context.OnSearchAsync();
await ToastService.Information("Search-ButtonTemplate", "Click Search1 Button");
}
private async Task OnClickClear()
{
await Context.OnClearAsync();
await ToastService.Information("Search-ButtonTemplate", "Click Clear1 Button");
}
}

View File

@@ -1,6 +1,6 @@
@inherits WebSiteModuleComponentBase
@attribute [JSModuleAutoLoader("Components/ThemeChooser.razor.js")]
@inject IOptionsMonitor<WebsiteOptions> WebsiteOption
@inject IOptions<WebsiteOptions> WebsiteOption
<HeadContent>
@foreach (var css in _currentTheme)
@@ -9,9 +9,12 @@
}
</HeadContent>
<div id="@Id" class="theme">
<PulseButton class="btn-fade btn-theme" Color="Color.None" ImageUrl="@WebsiteOption.CurrentValue.GetAssetUrl("images/m.svg")" TooltipText="@Title" TooltipPlacement="Placement.Left" />
<div class="theme-list">
<div id="@Id" class="theme" @onclick:stopPropagation>
<PulseButton TooltipPlacement="Placement.Left" TooltipText="@Title" Color="Color.None" ImageUrl="@WebsiteOption.Value.GetAssetUrl("images/m.svg")" class="btn-fade btn-theme" />
</div>
<BootstrapBlazorRootContent>
<div class="theme-list" @onclick:stopPropagation>
<div class="theme-header">
<div class="flex-fill">@HeaderText</div>
<button class="btn-close btn-close-white" type="button" aria-label="Close"></button>
@@ -23,4 +26,4 @@
</div>
}
</div>
</div>
</BootstrapBlazorRootContent>

View File

@@ -34,15 +34,15 @@ public partial class ThemeChooser
Title ??= Localizer[nameof(Title)];
HeaderText ??= Localizer[nameof(HeaderText)];
Themes = WebsiteOption.CurrentValue.Themes.Select(i => new SelectedItem { Text = i.Name, Value = i.Key });
WebsiteOption.CurrentValue.CurrentTheme = "bootstrap";
Themes = WebsiteOption.Value.Themes.Select(i => new SelectedItem { Text = i.Name, Value = i.Key });
WebsiteOption.Value.CurrentTheme = "bootstrap";
}
private void OnClickTheme(SelectedItem item)
{
_currentTheme.Clear();
WebsiteOption.CurrentValue.CurrentTheme = item.Value;
var theme = WebsiteOption.CurrentValue.Themes.FirstOrDefault(i => i.Key == item.Value);
WebsiteOption.Value.CurrentTheme = item.Value;
var theme = WebsiteOption.Value.Themes.FirstOrDefault(i => i.Key == item.Value);
if (theme is { Files: not null })
{
_currentTheme.AddRange(theme.Files);
@@ -50,6 +50,6 @@ public partial class ThemeChooser
}
private string? GetThemeItemClass(SelectedItem item) => CssBuilder.Default("theme-item")
.AddClass("active", WebsiteOption.CurrentValue.CurrentTheme == item.Value)
.AddClass("active", WebsiteOption.Value.CurrentTheme == item.Value)
.Build();
}

View File

@@ -59,8 +59,6 @@
--bs-btn-hover-bg: var(--bb-layout-button-hover-bg);
--bs-btn-active-bg: var(--bb-layout-button-active-bg);
box-shadow: var(--bb-layout-button-shadow);
right: 1rem;
bottom: 9rem;
}
::deep .btn-theme img {

View File

@@ -1,26 +1,29 @@
import { insertAfter } from "../../_content/BootstrapBlazor/modules/utility.js"
import Data from "../../_content/BootstrapBlazor/modules/data.js"
import EventHandler from "../../_content/BootstrapBlazor/modules/event-handler.js"
import EventHandler from "../../_content/BootstrapBlazor/modules/event-handler.js"
export function init(id) {
const el = document.getElementById(id)
const el = document.getElementById(id);
if (el === null) {
return
return;
}
const themeList = el.querySelector('.theme-list')
Data.set(id, { el });
const themeList = document.querySelector('.theme-list');
const close = document.querySelector('.theme-list .btn-close');
EventHandler.on(el, 'click', () => {
themeList.classList.toggle('is-open')
})
themeList.classList.toggle('is-open');
});
EventHandler.on(close, 'click', () => {
themeList.classList.remove('is-open');
});
}
export function dispose(id) {
const theme = Data.get(id)
Data.remove(id)
const el = document.getElementById(id);
if (el) {
EventHandler.off(el, 'click');
}
if (theme) {
EventHandler.off(theme.el, 'click')
const close = document.querySelector('.theme-list .btn-close');
if (close) {
EventHandler.off(close, 'click');
}
}

View File

@@ -1,7 +1,7 @@
@inherits WebSiteModuleComponentBase
@attribute [JSModuleAutoLoader("Components/ThemeMode.razor.js")]
<div id="@Id" class="btn btn-circle btn-fade btn-theme-mode icon-theme d-flex">
<div id="@Id" class="btn btn-circle btn-fade btn-theme-mode icon-theme d-flex" @onclick:stopPropagation>
<i class="@GetLightIconClassString"></i>
<i class="@GetDarkIconClassString"></i>
</div>

View File

@@ -1,4 +1,4 @@
import { getTheme, switchTheme } from "../../_content/BootstrapBlazor/modules/utility.js"
import { getTheme, switchTheme, calcCenterPosition } from "../../_content/BootstrapBlazor/modules/utility.js"
import EventHandler from "../../_content/BootstrapBlazor/modules/event-handler.js"
export function init(id) {
@@ -12,7 +12,9 @@ export function init(id) {
else {
theme = 'dark';
}
switchTheme(theme, window.innerWidth, window.innerHeight);
const rect = calcCenterPosition(el);
switchTheme(theme, rect.x, rect.y);
});
}
}

View File

@@ -0,0 +1 @@
<i class="fa-solid fa-flag" style="cursor: pointer;" @onclick="ToggleShow" />

View File

@@ -0,0 +1,25 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the Apache 2.0 License
// See the LICENSE file in the project root for more information.
// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
namespace BootstrapBlazor.Server.Components.Components;
/// <summary>
/// TooltipContent 组件用于显示 Tooltip 的内容
/// </summary>
public partial class TooltipContent
{
[CascadingParameter]
private Tooltip? Tooltip { get; set; }
private async Task ToggleShow()
{
if (Tooltip == null)
{
return;
}
await Tooltip.Toggle();
}
}

View File

@@ -6,19 +6,19 @@
<h5><b>Bootstrap Blazor</b> @Localizer["H1"] <span class="version">@PackageVersionService.Version</span></h5>
<div class="d-flex">
<div class="blazor-intro-body">
<p>@Localizer["B1"] <b>Bootstrap</b> <b>Blazor</b> @Localizer["B2"] <a href="@WebsiteOption.CurrentValue.AdminUrl" target="_blank"><b>@Localizer["B3"]</b></a> @Localizer["B4"]<b>Bootstrap Blazor</b> @((MarkupString)Localizer["B5"].Value)</p>
<p>@Localizer["B1"] <b>Bootstrap</b> <b>Blazor</b> @Localizer["B2"] <a href="@WebsiteOption.Value.AdminUrl" target="_blank"><b>@Localizer["B3"]</b></a> @Localizer["B4"]<b>Bootstrap Blazor</b> @((MarkupString)Localizer["B5"].Value)</p>
<p>
@Localizer["P1"] <span class="version">@PackageVersionService.Version</span> @Localizer["P2"] <a target="_blank" href="@UpdateLogUrl"><b>[@Localizer["P3"]]</b></a> @Localizer["P4"] <b>Star</b>
<a class="px-2" href="@WebsiteOption.CurrentValue.GithubRepositoryUrl" target="_blank">
<img src="@WebsiteOption.CurrentValue.GetAssetUrl("images/git.svg")" alt="github" />
<a class="px-2" href="@WebsiteOption.Value.GithubRepositoryUrl" target="_blank">
<img src="@WebsiteOption.Value.GetAssetUrl("images/git.svg")" alt="github" />
</a>
<a href="@WebsiteOption.CurrentValue.GiteeRepositoryUrl" target="_blank">
<img src="@WebsiteOption.CurrentValue.GetAssetUrl("images/gitee.svg")" alt="gitee" />
<a href="@WebsiteOption.Value.GiteeRepositoryUrl" target="_blank">
<img src="@WebsiteOption.Value.GetAssetUrl("images/gitee.svg")" alt="gitee" />
</a>
</p>
</div>
<div class="blazor-intro-barcode">
<img src="@WebsiteOption.CurrentValue.GetAssetUrl("images/QQGroup@2x.png")" alt="QQGroup" />
<img src="@WebsiteOption.Value.GetAssetUrl("images/QQGroup@2x.png")" alt="QQGroup" />
<div>QQ 795206915</div>
</div>
</div>

View File

@@ -14,13 +14,13 @@ public partial class UpdateIntro
{
[Inject]
[NotNull]
private IOptionsMonitor<WebsiteOptions>? WebsiteOption { get; set; }
private IOptions<WebsiteOptions>? WebsiteOption { get; set; }
[Inject]
[NotNull]
private PackageVersionService? PackageVersionService { get; set; }
private string UpdateLogUrl => $"{WebsiteOption.CurrentValue.GiteeRepositoryUrl}/wikis/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97?sort_id=4062034";
private string UpdateLogUrl => $"{WebsiteOption.Value.GiteeRepositoryUrl}/wikis/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97?sort_id=4062034";
/// <summary>
/// <inheritdoc/>

View File

@@ -1,14 +1,14 @@
@inject IOptionsMonitor<WebsiteOptions> WebsiteOption
@inject IOptions<WebsiteOptions> WebsiteOption
@inject IStringLocalizer<Video> Localizer
<p><b>@Localizer["H1"]</b></p>
@if (VideoUrl.Any())
@if (VideoUrl.Count > 0)
{
foreach (var url in VideoUrl)
{
<div class="mb-3">
<a class="fa-solid fa-video" href="@url" target="_blank"><span class="ms-2">@Localizer["L1"]</span></a>
<a href="@url" target="_blank"><i class="fa-solid fa-video"></i><span class="ms-2">@Localizer["L1"]</span></a>
</div>
}
}
@@ -44,11 +44,11 @@ else
Name = comNameWithHash.Split('?').First();
}
if (!string.IsNullOrEmpty(Name) && WebsiteOption.CurrentValue.Videos.TryGetValue(Name, out var url))
if (!string.IsNullOrEmpty(Name) && WebsiteOption.Value.Videos.TryGetValue(Name, out var url))
{
if (!string.IsNullOrEmpty(url))
{
VideoUrl.AddRange(url.Split(';').Select(a => $"{WebsiteOption.CurrentValue.VideoUrl}{a}"));
VideoUrl.AddRange(url.Split(';').Select(a => $"{WebsiteOption.Value.VideoUrl}{a}"));
}
}
}

View File

@@ -1,4 +1,4 @@
@inject IOptionsMonitor<WebsiteOptions> WebsiteOption
@inject IOptions<WebsiteOptions> WebsiteOption
<DropdownWidget class="px-3 d-none d-sm-block">
<DropdownWidgetItem Icon="fa-regular fa-envelope" BadgeNumber="4">
@@ -10,7 +10,7 @@
{
<a class="dropdown-item d-flex align-items-center" href="#" @onclick:preventDefault>
<div style="width: 40px; height: 40px;">
<Avatar Url="@WebsiteOption.CurrentValue.GetAssetUrl("images/Argo-C.png")" IsCircle="true" Size="Size.Small" />
<Avatar Url="@WebsiteOption.Value.GetAssetUrl("images/Argo-C.png")" IsCircle="true" Size="Size.Small" />
</div>
<div class="ms-2">
<div class="d-flex position-relative">

View File

@@ -1,9 +1,9 @@
@inherits WebSiteModuleComponentBase
@attribute [JSModuleAutoLoader("Components/Wwads.razor.js", AutoInvokeDispose = false)]
@inject IOptionsMonitor<WebsiteOptions> WebsiteOption
@inject IOptions<WebsiteOptions> WebsiteOption
<HeadContent>
<link rel="stylesheet" href="@Assets[$"{WebsiteOption.CurrentValue.AssetRootPath}css/wwads.css"]" />
<link rel="stylesheet" href="@Assets[$"{WebsiteOption.Value.AssetRootPath}css/wwads.css"]" />
</HeadContent>
<div @attributes="AdditionalAttributes" id="@Id" class="@ClassString"></div>

View File

@@ -1,10 +1,13 @@
@inherits LayoutComponentBase
@inherits LayoutComponentBase
<BootstrapBlazorRoot>
<Header></Header>
<main>
@Body
</main>
@if (_init)
{
<Header></Header>
<main>
@Body
</main>
}
</BootstrapBlazorRoot>
<div id="blazor-error-ui">
@@ -12,3 +15,16 @@
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>
@code {
RenderFragment RenderVote =>
@<div>
<div style="font-size: 48px; text-align: center;">🏆</div>
<p class="text-center mt-2"> <b>Gitee 2025 </b> </p>
<div class="my-3 text-center"></div>
<div style="display: flex; justify-content: space-around;" id="bb-gitee-vote">
<a href="https://gitee.com/activity/2025opensource?ident=I6MYBB" target="_blank" style="font-weight: bold; padding: 6px 12px; border-radius: var(--bs-border-radius); background: linear-gradient(135deg, #667eea, #764ba2); color: #fff;">🚀 </a>
<a href="https://gitee.com/activity/2025opensource?ident=I6MYBB" target="_blank" class="text-muted" style="padding: 6px 12px;" title="老六你居然不投票"></a>
</div>
</div>;
}

View File

@@ -1,15 +1,23 @@
// Licensed to the .NET Foundation under one or more agreements.
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the Apache 2.0 License
// See the LICENSE file in the project root for more information.
// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
using Microsoft.Extensions.Options;
using Microsoft.JSInterop;
using System.Globalization;
namespace BootstrapBlazor.Server.Components.Layout;
/// <summary>
/// 母版页基类
/// </summary>
public partial class BaseLayout : IDisposable
public partial class BaseLayout : IAsyncDisposable
{
[Inject]
[NotNull]
private IJSRuntime? JSRuntime { get; set; }
[Inject]
[NotNull]
private IStringLocalizer<BaseLayout>? Localizer { get; set; }
@@ -26,6 +34,10 @@ public partial class BaseLayout : IDisposable
[NotNull]
private IDispatchService<bool>? RebootDispatchService { get; set; }
[Inject]
[NotNull]
private IOptions<WebsiteOptions>? WebsiteOption { get; set; }
[NotNull]
private string? FlowText { get; set; }
@@ -38,6 +50,10 @@ public partial class BaseLayout : IDisposable
[NotNull]
private string? CancelText { get; set; }
private bool _init = false;
private JSModule? _module;
private DotNetObjectReference<BaseLayout>? _interop;
/// <summary>
/// <inheritdoc/>
/// </summary>
@@ -54,6 +70,24 @@ public partial class BaseLayout : IDisposable
RebootDispatchService.Subscribe(NotifyReboot);
}
/// <summary>
/// <inheritdoc/>
/// </summary>
/// <returns></returns>
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await base.OnAfterRenderAsync(firstRender);
if (firstRender)
{
_module = await JSRuntime.LoadModule($"{WebsiteOption.Value.JSModuleRootPath}Layout/BaseLayout.razor.js");
_interop = DotNetObjectReference.Create(this);
await _module.InvokeVoidAsync("doTask", _interop, WebsiteOption.Value.IsDevelopment);
_init = true;
StateHasChanged();
}
}
private async Task NotifyCommit(DispatchEntry<GiteePostBody> payload)
{
if (payload.CanDispatch())
@@ -95,25 +129,56 @@ public partial class BaseLayout : IDisposable
}
}
/// <summary>
/// 显示投票弹窗
/// </summary>
/// <returns></returns>
[JSInvokable]
public async Task ShowVoteToast()
{
// 英文环境不投票
if (CultureInfo.CurrentUICulture.Name == "en-US")
{
return;
}
_option = new ToastOption()
{
Category = ToastCategory.Information,
Title = "邀请您支持 BB 参与 Gitee 项目评选活动",
IsAutoHide = false,
ChildContent = RenderVote,
PreventDuplicates = true,
ClassString = "bb-vote-toast"
};
await Toast.Show(_option);
}
/// <summary>
/// 释放资源
/// </summary>
/// <param name="disposing"></param>
private void Dispose(bool disposing)
private async ValueTask DisposeAsync(bool disposing)
{
if (disposing)
{
CommitDispatchService.UnSubscribe(NotifyCommit);
RebootDispatchService.UnSubscribe(NotifyReboot);
if (_module != null)
{
await _module.InvokeVoidAsync("dispose");
await _module.DisposeAsync();
}
}
}
/// <summary>
/// 释放资源
/// </summary>
public void Dispose()
public async ValueTask DisposeAsync()
{
Dispose(true);
await DisposeAsync(true);
GC.SuppressFinalize(this);
}
}

View File

@@ -1,65 +1,5 @@
::deep .btn-fade {
opacity: 0.7;
box-shadow: var(--bb-layout-button-shadow);
transition: opacity .3s linear;
position: fixed;
z-index: 1001;
}
::deep .btn-fade:hover {
opacity: 1;
}
::deep .btn-update {
--bs-btn-bg: var(--bb-layout-button-update-bg);
--bs-btn-hover-bg: var(--bs-btn-bg);
--bs-btn-active-bg: var(--bs-btn-bg);
bottom: 5rem;
right: 1rem;
overflow: hidden;
display: flex;
justify-content: center;
align-items: center;
}
::deep .btn-update img {
width: 55%;
margin-inline-start: 2px;
}
::deep .btn-chat {
--bs-btn-bg: var(--bb-layout-button-bg);
--bs-btn-hover-bg: var(--bb-layout-button-hover-bg);
--bs-btn-active-bg: var(--bb-layout-button-active-bg);
box-shadow: var(--bb-layout-button-shadow);
right: 1rem;
bottom: 13rem;
display: flex;
align-items: center;
justify-content: center;
color: var(--bb-button-chat-color);
}
::deep .btn-theme-mode {
--bs-btn-bg: var(--bb-layout-button-bg);
--bs-btn-hover-bg: var(--bb-layout-button-hover-bg);
--bs-btn-active-bg: var(--bb-layout-button-active-bg);
box-shadow: var(--bb-layout-button-shadow);
bottom: 17rem;
right: 1rem;
overflow: hidden;
display: flex;
justify-content: center;
align-items: center;
color: var(--bb-button-chat-color);
}
::deep pre {
color: #e83e8c;
margin-bottom: 0;
max-height: 260px;
}
main {
main {
min-height: calc(100vh - var(--bs-header-height));
position: relative;
z-index: 10;
}

View File

@@ -0,0 +1,44 @@
import { getTheme, setTheme } from "../../_content/BootstrapBlazor/modules/utility.js"
import EventHandler from "../../_content/BootstrapBlazor/modules/event-handler.js"
function initTheme() {
const currentTheme = getTheme();
setTheme(currentTheme, false);
}
export function doTask(invoke, debug) {
initTheme();
const v = localStorage.getItem('bb-gitee-vote');
if (v) {
try {
const differ = new Date().getTime() - v;
if (differ < 86400000) {
return;
}
}
catch {
localStorage.removeItem('bb-gitee-vote');
}
}
if (debug !== true) {
const handler = setTimeout(async () => {
clearTimeout(handler);
await invoke.invokeMethodAsync("ShowVoteToast");
}, 10000);
}
EventHandler.on(document, 'click', '#bb-gitee-vote', e => {
const toast = e.delegateTarget.closest('.toast');
if (toast) {
toast.classList.remove('show');
localStorage.setItem('bb-gitee-vote', new Date().getTime());
}
});
}
export function dispose() {
EventHandler.off(document, 'click', '#bb-gitee-vote');
}

View File

@@ -1,6 +1,6 @@
@inherits LayoutComponentBase
@layout MainLayout
@inject IOptionsMonitor<WebsiteOptions> WebsiteOption
@inject IOptions<WebsiteOptions> WebsiteOption
<div class="tabs-coms-header">
<div class="bb-title">
@@ -30,7 +30,7 @@
</div>
<div class="tabs-coms">
<Tab IsBorderCard="true" IsLazyLoadTabItem="true" ShowFullScreen="true" @ref="Tab">
<Tab IsBorderCard="true" IsLazyLoadTabItem="true" TabStyle="TabStyle.Chrome" ShowToolbar="true" @ref="Tab">
<TabItem Text="Example" Icon="fa-solid fa-desktop">
<CascadingValue Value="@RazorFileName" Name="RazorFileName">
@Body
@@ -42,7 +42,7 @@
<TabItem Text="C#" Icon="fa-regular fa-file-code">
<Pre @key="@CSharpFileName" CodeFile="@CSharpFileName" class="code-cs"></Pre>
</TabItem>
<TabItem Text="@Video" Icon="fa-regular fa-file-video" ShowFullScreen="false">
<TabItem Text="@Video" Icon="fa-regular fa-file-video">
<Video @key="@VideoFileName" Name="@VideoFileName"></Video>
<p><b></b></p>
<QQGroup />

View File

@@ -52,7 +52,7 @@ public partial class ComponentLayout : IAsyncDisposable
[NotNull]
private IOptions<IconThemeOptions>? IconThemeOptions { get; set; }
private string GVPUrl => $"{WebsiteOption.CurrentValue.GiteeRepositoryUrl}/badge/star.svg?theme=gvp";
private string GVPUrl => $"{WebsiteOption.Value.GiteeRepositoryUrl}/badge/star.svg?theme=gvp";
private List<SelectedItem> IconThemes { get; } = [];
@@ -69,8 +69,8 @@ public partial class ComponentLayout : IAsyncDisposable
IconThemes.AddRange(new SelectedItem[]
{
new("fa", "Font Awesome"),
new("mdi", "Material Design"),
new("bootstrap", "Bootstrap")
new("bootstrap", "Bootstrap"),
new("mdi", "Material Design")
});
IconThemeKey = IconThemeOptions.Value.ThemeKey;
@@ -104,7 +104,7 @@ public partial class ComponentLayout : IAsyncDisposable
{
if (firstRender)
{
Module = await JSRuntime.LoadModule($"{WebsiteOption.CurrentValue.AssetRootPath}Components/Layout/ComponentLayout.razor.js");
Module = await JSRuntime.LoadModule($"{WebsiteOption.Value.AssetRootPath}Components/Layout/ComponentLayout.razor.js");
}
if (Module != null)
{

Some files were not shown because too many files have changed in this diff Show More