Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
565af7f
feat(templates): improve README.md of Boilerplate #11993 (#11994)
Copilot Jan 20, 2026
ed55609
feat(deps): update project dependencies #11995 (#11996)
yasmoradi Jan 22, 2026
ac74bb6
feat(templates): improve distributed lock factory #11997 (#11998)
yasmoradi Jan 22, 2026
ff4a2c3
feat(templates): use long instead of byte[] for row version #11999 (#…
yasmoradi Jan 24, 2026
48ed386
feat(websites): improve bit Boilerplate project template README #1200…
Copilot Jan 25, 2026
201f5f9
feat(templates): use uuidV7 in bit Boilerplate #12003 (#12004)
yasmoradi Jan 25, 2026
4125f70
feat(templates): use UUIDv7 compatible with SQL Server sorting mechan…
yasmoradi Jan 25, 2026
47ee252
feat(deps): update project dependencies #12007 (#12008)
yasmoradi Jan 26, 2026
12f5842
feat(templates): Check origin in window.addEventListener('message') #…
yasmoradi Jan 28, 2026
897581a
feat(templates): improve bit Boilerplate response security headers #1…
yasmoradi Jan 28, 2026
e52d48e
feat(templates): unify diagnostic and diagnostics namespaces #12016 (…
yasmoradi Jan 28, 2026
a27312c
fix(templates): cross-origin-resource-policy issue with Blazor Hybrid…
yasmoradi Jan 28, 2026
e512b00
feat(blazorui): add Icon parameter to BitButton #11962 (#11964)
msynk Jan 29, 2026
d48fa8f
feat(blazorui): add BitFileInput component #11925 (#11957)
msynk Jan 29, 2026
150c291
feat(blazorui): add new Icon parameter to BitButtonGroup component #1…
msynk Jan 30, 2026
95b56b2
fix(blazorui): correct inline padding of BitPersona texts #12025 (#12…
msynk Jan 31, 2026
3c46394
feat(blazorui): add new Icon parameter to BitMenuButton #12021 (#12024)
msynk Feb 2, 2026
760282e
feat(prerelease): v-10.4.1-pre-01 #12027 (#12028)
msynk Feb 2, 2026
aec9c11
feat(templates): add global csrf attack protection filter #12030 (#12…
yasmoradi Feb 3, 2026
9c3b05b
feat(infra): update outdated 2025 values to 2026 across projects #120…
yasmoradi Feb 3, 2026
1e8081e
feat(deps): update project dependencies #12032 (#12035)
yasmoradi Feb 3, 2026
31e31db
fix(blazorui): resolve issues of BitMenuButton demo page #12036 (#12037)
msynk Feb 4, 2026
504548c
feat(blazorui): add new Icon parameter to BitToggleButton #12022 (#12…
msynk Feb 4, 2026
3197b20
feat(release): v-10.4.1 #12039 (#12041)
msynk Feb 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2025 bit platform
Copyright (c) 2026 bit platform

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion src/Besql/Bit.Besql/wwwroot/bit-besql.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var BitBesql = window.BitBesql || {};
BitBesql.version = window['bit-besql version'] = '10.4.0';
BitBesql.version = window['bit-besql version'] = '10.4.1';

BitBesql.persist = async function besqlPersist(fileName) {

Expand Down
4 changes: 2 additions & 2 deletions src/Bit.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<Product>bit platform</Product>
<Title>$(MSBuildProjectName)</Title>
<Description>$(MSBuildProjectName)</Description>
<Copyright>Copyright © bit platform 2025</Copyright>
<Copyright>Copyright © bit platform 2026</Copyright>

<!-- Repo -->
<RepositoryUrl>https://github.com/bitfoundation/bitplatform</RepositoryUrl>
Expand All @@ -27,7 +27,7 @@
<PackageProjectUrl>https://github.com/bitfoundation/bitplatform</PackageProjectUrl>

<!-- Version -->
<ReleaseVersion>10.4.0</ReleaseVersion>
<ReleaseVersion>10.4.1</ReleaseVersion>
<PackageVersion>$(ReleaseVersion)</PackageVersion>
<PackageReleaseNotes>https://github.com/bitfoundation/bitplatform/releases/tag/v-$(ReleaseVersion)</PackageReleaseNotes>
<Version Condition=" '$(Configuration)' == 'Release' ">$([System.String]::Copy($(ReleaseVersion)).Replace('-pre-', '.'))</Version>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<Project>
<ItemGroup>
<Content Remove="$(NuGetPackageRoot)/bit.blazores2019/10.4.0/contentFiles/any/net9.0/wwwroot/_framework/*.js" Condition="$(TargetFramework.Contains('net9.0'))" />
<Content Include="$(NuGetPackageRoot)/bit.blazores2019/10.4.0/contentFiles/any/net9.0/wwwroot/_framework/*.js" Condition="$(TargetFramework.Contains('net9.0'))">
<Content Remove="$(NuGetPackageRoot)/bit.blazores2019/10.4.1/contentFiles/any/net9.0/wwwroot/_framework/*.js" Condition="$(TargetFramework.Contains('net9.0'))" />
<Content Include="$(NuGetPackageRoot)/bit.blazores2019/10.4.1/contentFiles/any/net9.0/wwwroot/_framework/*.js" Condition="$(TargetFramework.Contains('net9.0'))">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<Link>wwwroot\_framework\%(Filename)%(Extension)</Link>
</Content>
<Content Remove="$(NuGetPackageRoot)/bit.blazores2019/10.4.0/contentFiles/any/net10.0/wwwroot/_framework/*.js" Condition="$(TargetFramework.Contains('net10.0'))" />
<Content Include="$(NuGetPackageRoot)/bit.blazores2019/10.4.0/contentFiles/any/net10.0/wwwroot/_framework/*.js" Condition="$(TargetFramework.Contains('net10.0'))">
<Content Remove="$(NuGetPackageRoot)/bit.blazores2019/10.4.1/contentFiles/any/net10.0/wwwroot/_framework/*.js" Condition="$(TargetFramework.Contains('net10.0'))" />
<Content Include="$(NuGetPackageRoot)/bit.blazores2019/10.4.1/contentFiles/any/net10.0/wwwroot/_framework/*.js" Condition="$(TargetFramework.Contains('net10.0'))">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<Link>wwwroot\_framework\%(Filename)%(Extension)</Link>
Expand Down
8 changes: 4 additions & 4 deletions src/BlazorUI/Bit.BlazorUI.Assets/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/BlazorUI/Bit.BlazorUI.Assets/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"devDependencies": {
"sass": "1.97.2"
"sass": "1.97.3"
}
}
8 changes: 4 additions & 4 deletions src/BlazorUI/Bit.BlazorUI.Extras/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/BlazorUI/Bit.BlazorUI.Extras/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"devDependencies": {
"esbuild": "0.27.2",
"sass": "1.97.2",
"sass": "1.97.3",
"typescript": "5.9.3"
}
}
8 changes: 4 additions & 4 deletions src/BlazorUI/Bit.BlazorUI.Icons/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/BlazorUI/Bit.BlazorUI.Icons/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"devDependencies": {
"sass": "1.97.2"
"sass": "1.97.3"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
@{
var hasPrimary = (PrimaryTemplate ?? ChildContent) is not null;
var hasSecondary = SecondaryText.HasValue() || SecondaryTemplate is not null;
var icon = BitIconInfo.From(Icon, IconName);
}

@if (Href.HasNoValue())
Expand All @@ -22,9 +23,9 @@
aria-describedby="@AriaDescription">
@if (IsLoading is false)
{
@if (IconName.HasValue())
@if (icon is not null)
{
<i style="@Styles?.Icon" class="bit-btn-icn bit-icon bit-icon--@IconName @Classes?.Icon" />
<i style="@Styles?.Icon" class="bit-btn-icn @icon.GetCssClasses() @Classes?.Icon" />
}
else if (IconUrl.HasValue())
{
Expand Down Expand Up @@ -94,9 +95,9 @@ else
aria-label="@AriaLabel"
aria-hidden="@AriaHidden"
aria-describedby="@AriaDescription">
@if (IconName.HasValue())
@if (icon is not null)
{
<i style="@Styles?.Icon" class="bit-btn-icn bit-icon bit-icon--@IconName @Classes?.Icon" />
<i style="@Styles?.Icon" class="bit-btn-icn @icon.GetCssClasses() @Classes?.Icon" />
}
else if (IconUrl.HasValue())
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,21 @@ public partial class BitButton : BitComponentBase
[CallOnSet(nameof(OnSetHrefAndRel))]
public string? Href { get; set; }

/// <summary>
/// Gets or sets the icon to display using custom CSS classes for external icon libraries.
/// Takes precedence over <see cref="IconName"/> when both are set.
/// </summary>
/// <remarks>
/// Use this property to render icons from external libraries like FontAwesome, Material Icons, or Bootstrap Icons.
/// For built-in Fluent UI icons, use <see cref="IconName"/> instead.
/// </remarks>
/// <example>
/// FontAwesome: Icon="BitIconInfo.Fa("solid house")"
/// Material: Icon="BitIconInfo.Material("home")"
/// Custom CSS: Icon="BitIconInfo.Css("my-icon-class")"
/// </example>
[Parameter] public BitIconInfo? Icon { get; set; }

/// <summary>
/// The name of the icon to render inside the button.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@
}
else
{
var iconName = GetItemIconName(item);
@if (iconName.HasValue())
var icon = GetItemIcon(item);
@if (icon is not null)
{
<i style="@Styles?.Icon" class="bit-icon bit-icon--@iconName @Classes?.Icon" />
<i style="@Styles?.Icon" class="@icon.GetCssClasses() @Classes?.Icon" />
}

var text = GetItemText(item);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -419,29 +419,29 @@ private async Task HandleOnItemClick(TItem item)
return GetTitle(item);
}

private string? GetItemIconName(TItem item)
private BitIconInfo? GetItemIcon(TItem item)
{
if (Toggle)
{
if (IsItemToggled(item))
{
var onIcon = GetOnIcon(item);
if (onIcon is not null) return onIcon;

var onIconName = GetOnIconName(item);
if (onIconName.HasValue())
{
return onIconName;
}
if (onIconName.HasValue()) return new BitIconInfo(onIconName!);
}
else
{
var offIcon = GetOffIcon(item);
if (offIcon is not null) return offIcon;

var offIconName = GetOffIconName(item);
if (offIconName.HasValue())
{
return offIconName;
}
if (offIconName.HasValue()) return new BitIconInfo(offIconName!);
}
}

return GetIconName(item);
return BitIconInfo.From(GetIcon(item), GetIconName(item));
}

private async Task UpdateItemToggle(TItem? item, bool isToggled = true)
Expand Down Expand Up @@ -564,6 +564,30 @@ private void SetItemKey(TItem item, string value)
return item.GetValueFromProperty<string?>(NameSelectors.Class.Name);
}

private BitIconInfo? GetIcon(TItem? item)
{
if (item is null) return null;

if (item is BitButtonGroupItem buttonGroupItem)
{
return buttonGroupItem.Icon;
}

if (item is BitButtonGroupOption buttonGroupOption)
{
return buttonGroupOption.Icon;
}

if (NameSelectors is null) return null;

if (NameSelectors.Icon.Selector is not null)
{
return NameSelectors.Icon.Selector!(item);
}

return item.GetValueFromProperty<BitIconInfo?>(NameSelectors.Icon.Name);
}

private string? GetIconName(TItem? item)
{
if (item is null) return null;
Expand All @@ -588,6 +612,30 @@ private void SetItemKey(TItem item, string value)
return item.GetValueFromProperty<string?>(NameSelectors.IconName.Name);
}

private BitIconInfo? GetOnIcon(TItem? item)
{
if (item is null) return null;

if (item is BitButtonGroupItem buttonGroupItem)
{
return buttonGroupItem.OnIcon;
}

if (item is BitButtonGroupOption buttonGroupOption)
{
return buttonGroupOption.OnIcon;
}

if (NameSelectors is null) return null;

if (NameSelectors.OnIcon.Selector is not null)
{
return NameSelectors.OnIcon.Selector!(item);
}

return item.GetValueFromProperty<BitIconInfo?>(NameSelectors.OnIcon.Name);
}

private string? GetOnIconName(TItem? item)
{
if (item is null) return null;
Expand All @@ -612,6 +660,30 @@ private void SetItemKey(TItem item, string value)
return item.GetValueFromProperty<string?>(NameSelectors.OnIconName.Name);
}

private BitIconInfo? GetOffIcon(TItem? item)
{
if (item is null) return null;

if (item is BitButtonGroupItem buttonGroupItem)
{
return buttonGroupItem.OffIcon;
}

if (item is BitButtonGroupOption buttonGroupOption)
{
return buttonGroupOption.OffIcon;
}

if (NameSelectors is null) return null;

if (NameSelectors.OffIcon.Selector is not null)
{
return NameSelectors.OffIcon.Selector!(item);
}

return item.GetValueFromProperty<BitIconInfo?>(NameSelectors.OffIcon.Name);
}

private string? GetOffIconName(TItem? item)
{
if (item is null) return null;
Expand Down
Loading
Loading