diff --git a/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs.Client/HeadManipulationService.cs b/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs.Client/HeadManipulationService.cs
deleted file mode 100644
index 13f3933..0000000
--- a/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs.Client/HeadManipulationService.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using Microsoft.JSInterop;
-
-namespace HeadlessBlazor.Docs.Client;
-
-public class HeadManipulationService(IJSRuntime jsRuntime)
-{
- private readonly IJSRuntime _jsRuntime = jsRuntime;
-
- public ValueTask SetTheme(string theme)
- {
- return _jsRuntime.InvokeVoidAsync("headManipulation.setTheme", theme);
- }
-
- public ValueTask AddLinkAsync(string href, string rel)
- {
- return _jsRuntime.InvokeVoidAsync("headManipulation.addLink", href, rel);
- }
-
- public ValueTask RemoveLinkAsync(string href)
- {
- return _jsRuntime.InvokeVoidAsync("headManipulation.removeLink", href);
- }
-
- public ValueTask AddScriptAsync(string src)
- {
- return _jsRuntime.InvokeVoidAsync("headManipulation.addScript", src);
- }
-
- public ValueTask RemoveScriptAsync(string src)
- {
- return _jsRuntime.InvokeVoidAsync("headManipulation.removeScript", src);
- }
-
- public ValueTask RemoveStyleAsync()
- {
- return _jsRuntime.InvokeVoidAsync("headManipulation.removeStyle");
- }
-}
diff --git a/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs.Client/Home.razor b/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs.Client/Home.razor
index 7725dbb..3b61a03 100644
--- a/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs.Client/Home.razor
+++ b/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs.Client/Home.razor
@@ -7,20 +7,20 @@
-
-
- Click Me
-
- Default
- Button
- Disabled Button
- Button (Stop Propagation)
- Link
- Link (Prevent Default)
- Link (Stop Propagation)
- Link (Prevent Default and Stop Propagation)
-
-
+
+
+ Click Me
+
+ Default
+ Button
+ Disabled Button
+ Button (Stop Propagation)
+ Link
+ Link (Prevent Default)
+ Link (Stop Propagation)
+ Link (Prevent Default and Stop Propagation)
+
+
@Example1CodeBlock
diff --git a/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs.Client/Program.cs b/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs.Client/Program.cs
index dd072f0..e8f4ae7 100644
--- a/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs.Client/Program.cs
+++ b/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs.Client/Program.cs
@@ -1,13 +1,10 @@
using HeadlessBlazor;
-using HeadlessBlazor.Docs.Client;
using HeadlessBlazor.Themes.Bootstrap;
using HeadlessBlazor.Themes.Tailwind;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
var builder = WebAssemblyHostBuilder.CreateDefault(args);
-builder.Services.AddScoped
();
-
builder.Services
.AddHeadlessBlazor()
.AddBootstrapTheme()
diff --git a/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs/Components/App.razor b/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs/Components/App.razor
index abe6a92..db7feed 100644
--- a/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs/Components/App.razor
+++ b/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs/Components/App.razor
@@ -1,9 +1,5 @@
-@using HeadlessBlazor.Core.Themes
-@inject HBThemeFactory ThemeFactory
-@implements IDisposable
-
-
-
+
+
@@ -19,7 +15,6 @@
- @Theme
@@ -27,27 +22,3 @@
-@code {
- private string Theme { get; set; } = "Bootstrap";
-
- private ElementReference Root;
-
- public void Dispose()
- {
- ThemeFactory.ThemeChanged -= HandleThemeChanged;
- }
-
- protected override void OnInitialized()
- {
- ThemeFactory.ThemeChanged += HandleThemeChanged;
- }
-
- private void HandleThemeChanged(string theme)
- {
- InvokeAsync(() =>
- {
- Theme = theme;
- StateHasChanged();
- });
- }
-}
diff --git a/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs/Program.cs b/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs/Program.cs
index 1cbd57b..82c3150 100644
--- a/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs/Program.cs
+++ b/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs/Program.cs
@@ -1,13 +1,10 @@
using HeadlessBlazor;
-using HeadlessBlazor.Docs.Client;
using HeadlessBlazor.Docs.Components;
using HeadlessBlazor.Themes.Bootstrap;
using HeadlessBlazor.Themes.Tailwind;
var builder = WebApplication.CreateBuilder(args);
-builder.Services.AddScoped();
-
builder.Services
.AddHeadlessBlazor()
.AddBootstrapTheme()
diff --git a/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs/wwwroot/js/headManipulation.js b/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs/wwwroot/js/headManipulation.js
deleted file mode 100644
index 9ad2e77..0000000
--- a/docs/HeadlessBlazor.Docs/HeadlessBlazor.Docs/wwwroot/js/headManipulation.js
+++ /dev/null
@@ -1,46 +0,0 @@
-window.headManipulation = {
- setTheme: function (theme) {
- document.documentElement.setAttribute('hb-theme', theme);
- },
- addLink: function (href, rel) {
- var link = document.createElement('link');
- link.href = href;
- link.rel = rel;
- document.head.appendChild(link);
- },
- removeLink: function (href) {
- console.log('removing link: ' + href);
- var links = document.head.getElementsByTagName('link');
- for (var i = 0; i < links.length; i++) {
- if (links[i].href === href) {
- document.head.removeChild(links[i]);
- break;
- }
- }
- },
- addScript: function (src) {
- var script = document.createElement('script');
- script.src = src;
- script.async = true;
- document.head.appendChild(script);
- },
- removeScript: function (src) {
- console.log('removing script: ' + src);
- var scripts = document.head.getElementsByTagName('script');
- for (var i = 0; i < scripts.length; i++) {
- if (scripts[i].src === src) {
- document.head.removeChild(scripts[i]);
- break;
- }
- }
- },
- removeStyle: function () {
- console.log('removing style');
- var s = document.head.getElementsByTagName('style');
- if (s) {
- for (var i = 0; i < s.length; i++) {
- document.head.removeChild(s[i]);
- }
- }
- }
-};
diff --git a/src/HeadlessBlazor.Dropdown/Dropdown.cs b/src/HeadlessBlazor.Dropdown/HBDropdown.cs
similarity index 79%
rename from src/HeadlessBlazor.Dropdown/Dropdown.cs
rename to src/HeadlessBlazor.Dropdown/HBDropdown.cs
index 3d2340b..4ae713f 100644
--- a/src/HeadlessBlazor.Dropdown/Dropdown.cs
+++ b/src/HeadlessBlazor.Dropdown/HBDropdown.cs
@@ -4,12 +4,12 @@
namespace HeadlessBlazor;
-public class Dropdown : HBElement
+public class HBDropdown : HBElement
{
public bool IsOpen { get; private set; }
[Parameter]
- public EventCallback OnClickItem { get; set; }
+ public EventCallback OnClickItem { get; set; }
public async Task Toggle() => await SetIsOpen(!IsOpen);
public async Task Open() => await SetIsOpen(true);
@@ -17,16 +17,16 @@ public class Dropdown : HBElement
protected override void OnInitialized()
{
- if (!OnClickItem.HasDelegate)
- OnClickItem = new EventCallback(this, Close);
-
base.OnInitialized();
+
+ if (!OnClickItem.HasDelegate)
+ OnClickItem = new EventCallback(this, Close);
}
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
var seq = 0;
- builder.OpenComponent>(seq++);
+ builder.OpenComponent>(seq++);
builder.AddAttribute(seq, "Value", this);
builder.AddAttribute(seq++, "ChildContent", (RenderFragment)((b) => BuildRenderTree(b, ref seq)));
builder.CloseComponent();
diff --git a/src/HeadlessBlazor.Dropdown/DropdownItem.cs b/src/HeadlessBlazor.Dropdown/HBDropdownItem.cs
similarity index 78%
rename from src/HeadlessBlazor.Dropdown/DropdownItem.cs
rename to src/HeadlessBlazor.Dropdown/HBDropdownItem.cs
index c71441a..4355b04 100644
--- a/src/HeadlessBlazor.Dropdown/DropdownItem.cs
+++ b/src/HeadlessBlazor.Dropdown/HBDropdownItem.cs
@@ -4,10 +4,10 @@
namespace HeadlessBlazor;
-public class DropdownItem : HBElement
+public class HBDropdownItem : HBElement
{
[CascadingParameter]
- public Dropdown Dropdown { get; set; } = default!;
+ public HBDropdown Dropdown { get; set; } = default!;
protected override void OnParametersSet()
{
@@ -15,7 +15,7 @@ protected override void OnParametersSet()
if (Dropdown == null)
{
- throw new InvalidOperationException($"{GetType().Name} requires a cascading parameter of type {typeof(Dropdown).Name}.");
+ throw new InvalidOperationException($"{GetType().Name} requires a cascading parameter of type {typeof(HBDropdown).Name}.");
}
UserAttributes.TryAdd("onclick", new EventCallback(this, HandleClick));
diff --git a/src/HeadlessBlazor.Dropdown/DropdownItemButton.cs b/src/HeadlessBlazor.Dropdown/HBDropdownItemButton.cs
similarity index 66%
rename from src/HeadlessBlazor.Dropdown/DropdownItemButton.cs
rename to src/HeadlessBlazor.Dropdown/HBDropdownItemButton.cs
index d146673..9773579 100644
--- a/src/HeadlessBlazor.Dropdown/DropdownItemButton.cs
+++ b/src/HeadlessBlazor.Dropdown/HBDropdownItemButton.cs
@@ -1,6 +1,6 @@
namespace HeadlessBlazor;
-public class DropdownItemButton : DropdownItem
+public class HBDropdownItemButton : HBDropdownItem
{
public override string ElementName { get; set; } = "button";
}
diff --git a/src/HeadlessBlazor.Dropdown/DropdownItemLink.cs b/src/HeadlessBlazor.Dropdown/HBDropdownItemLink.cs
similarity index 65%
rename from src/HeadlessBlazor.Dropdown/DropdownItemLink.cs
rename to src/HeadlessBlazor.Dropdown/HBDropdownItemLink.cs
index 2cd57c9..a647522 100644
--- a/src/HeadlessBlazor.Dropdown/DropdownItemLink.cs
+++ b/src/HeadlessBlazor.Dropdown/HBDropdownItemLink.cs
@@ -1,6 +1,6 @@
namespace HeadlessBlazor;
-public class DropdownItemLink : DropdownItem
+public class HBDropdownItemLink : HBDropdownItem
{
public override string ElementName { get; set; } = "a";
}
diff --git a/src/HeadlessBlazor.Dropdown/DropdownItems.cs b/src/HeadlessBlazor.Dropdown/HBDropdownItems.cs
similarity index 75%
rename from src/HeadlessBlazor.Dropdown/DropdownItems.cs
rename to src/HeadlessBlazor.Dropdown/HBDropdownItems.cs
index 5d7d1ac..767e305 100644
--- a/src/HeadlessBlazor.Dropdown/DropdownItems.cs
+++ b/src/HeadlessBlazor.Dropdown/HBDropdownItems.cs
@@ -4,10 +4,10 @@
namespace HeadlessBlazor;
-public class DropdownItems : HBElement
+public class HBDropdownItems : HBElement
{
[CascadingParameter]
- public Dropdown Dropdown { get; set; } = default!;
+ public HBDropdown Dropdown { get; set; } = default!;
protected override void OnParametersSet()
{
@@ -15,7 +15,7 @@ protected override void OnParametersSet()
if (Dropdown == null)
{
- throw new InvalidOperationException($"{GetType().Name} requires a cascading parameter of type {typeof(Dropdown).Name}.");
+ throw new InvalidOperationException($"{GetType().Name} requires a cascading parameter of type {typeof(HBDropdown).Name}.");
}
}
diff --git a/src/HeadlessBlazor.Dropdown/DropdownOutsideClickBehavior.cs b/src/HeadlessBlazor.Dropdown/HBDropdownOutsideClickBehavior.cs
similarity index 73%
rename from src/HeadlessBlazor.Dropdown/DropdownOutsideClickBehavior.cs
rename to src/HeadlessBlazor.Dropdown/HBDropdownOutsideClickBehavior.cs
index b514d59..597adf6 100644
--- a/src/HeadlessBlazor.Dropdown/DropdownOutsideClickBehavior.cs
+++ b/src/HeadlessBlazor.Dropdown/HBDropdownOutsideClickBehavior.cs
@@ -1,14 +1,13 @@
using HeadlessBlazor.Core.Behaviors;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Rendering;
-using Microsoft.AspNetCore.Components.Web.Virtualization;
namespace HeadlessBlazor;
-public class DropdownOutsideClickBehavior : HBOutsideClickBehavior
+public class HBDropdownOutsideClickBehavior : HBOutsideClickBehavior
{
[CascadingParameter]
- public Dropdown Dropdown { get; set; } = default!;
+ public HBDropdown Dropdown { get; set; } = default!;
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
@@ -22,7 +21,7 @@ protected override void OnParametersSet()
if (Dropdown == null)
{
- throw new InvalidOperationException($"{GetType().Name} requires a cascading parameter of type {typeof(Dropdown).Name}.");
+ throw new InvalidOperationException($"{GetType().Name} requires a cascading parameter of type {typeof(HBDropdown).Name}.");
}
UserAttributes.TryAdd("onclick", new EventCallback(this, HandleClick));
diff --git a/src/HeadlessBlazor.Dropdown/DropdownTrigger.cs b/src/HeadlessBlazor.Dropdown/HBDropdownTrigger.cs
similarity index 85%
rename from src/HeadlessBlazor.Dropdown/DropdownTrigger.cs
rename to src/HeadlessBlazor.Dropdown/HBDropdownTrigger.cs
index 1cb4109..7151789 100644
--- a/src/HeadlessBlazor.Dropdown/DropdownTrigger.cs
+++ b/src/HeadlessBlazor.Dropdown/HBDropdownTrigger.cs
@@ -4,10 +4,10 @@
namespace HeadlessBlazor;
-public class DropdownTrigger : HBElement
+public class HBDropdownTrigger : HBElement
{
[CascadingParameter]
- public Dropdown Dropdown { get; set; } = default!;
+ public HBDropdown Dropdown { get; set; } = default!;
[Parameter]
public override string ElementName { get; set; } = "button";
@@ -24,7 +24,7 @@ protected override void OnParametersSet()
if (Dropdown == null)
{
- throw new InvalidOperationException($"{GetType().Name} requires a cascading parameter of type {typeof(Dropdown).Name}.");
+ throw new InvalidOperationException($"{GetType().Name} requires a cascading parameter of type {typeof(HBDropdown).Name}.");
}
UserAttributes.TryAdd("onclick", new EventCallback(this, HandleClick));
diff --git a/themes/HeadlessBlazor.Themes.Bootstrap/HBBootstrapThemeConfiguration.cs b/themes/HeadlessBlazor.Themes.Bootstrap/HBBootstrapThemeConfiguration.cs
index 1853428..f0fedfa 100644
--- a/themes/HeadlessBlazor.Themes.Bootstrap/HBBootstrapThemeConfiguration.cs
+++ b/themes/HeadlessBlazor.Themes.Bootstrap/HBBootstrapThemeConfiguration.cs
@@ -16,16 +16,16 @@ public static IServiceCollection AddBootstrapTheme(this IServiceCollection servi
public static HBTheme UseBootstrap(this HBThemeBuilder t)
{
- t.AddComponentDefaults(c => c.AddDefaultClassNames("dropdown", "d-inline-block"));
- t.AddComponentDefaults(c => c.AddDefaultClassNames("btn", "btn-primary", "dropdown-toggle"));
- t.AddComponentDefaults(c => c.AddDefaultClassNames("dropdown-menu", "show"));
- t.AddComponentDefaults(c => c.AddDefaultClassNames("dropdown-item"));
- t.AddComponentDefaults(c =>
+ t.AddComponentDefaults(c => c.AddDefaultClassNames("dropdown", "d-inline-block"));
+ t.AddComponentDefaults(c => c.AddDefaultClassNames("btn", "btn-primary", "dropdown-toggle"));
+ t.AddComponentDefaults(c => c.AddDefaultClassNames("dropdown-menu", "show"));
+ t.AddComponentDefaults(c => c.AddDefaultClassNames("dropdown-item"));
+ t.AddComponentDefaults(c =>
{
c.AddDefaultClassNames("dropdown-item");
c.AddAttributeDefaults("type", "button");
});
- t.AddComponentDefaults(c =>
+ t.AddComponentDefaults(c =>
{
c.AddDefaultClassNames("dropdown-item");
c.AddAttributeDefaults("href", "#");
diff --git a/themes/HeadlessBlazor.Themes.Tailwind/HBTailwindThemeConfiguration.cs b/themes/HeadlessBlazor.Themes.Tailwind/HBTailwindThemeConfiguration.cs
index 5f76dc2..d7c57c0 100644
--- a/themes/HeadlessBlazor.Themes.Tailwind/HBTailwindThemeConfiguration.cs
+++ b/themes/HeadlessBlazor.Themes.Tailwind/HBTailwindThemeConfiguration.cs
@@ -16,23 +16,23 @@ public static IServiceCollection AddTailwindTheme(this IServiceCollection servic
public static HBTheme UseTailwind(this HBThemeBuilder t)
{
- t.AddComponentDefaults(c => c.AddDefaultClassNames("relative", "inline-block", "text-left"));
- t.AddComponentDefaults(c =>
+ t.AddComponentDefaults(c => c.AddDefaultClassNames("relative", "inline-block", "text-left"));
+ t.AddComponentDefaults(c =>
{
c.AddDefaultClassNames("inline-flex w-full justify-center gap-x-1.5 rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 [&:not(:disabled)]:hover:bg-gray-50");
c.AddAttributeDefaults("type", "button");
});
- t.AddComponentDefaults(c =>
+ t.AddComponentDefaults(c =>
{
c.AddDefaultClassNames("absolute left-0 z-10 mt-2 w-56 origin-top-right rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none");
});
- t.AddComponentDefaults(c => c.AddDefaultClassNames("text-gray-700 block px-4 py-2 text-sm text-left w-full hover:text-gray-900 hover:bg-gray-100"));
- t.AddComponentDefaults(c =>
+ t.AddComponentDefaults(c => c.AddDefaultClassNames("text-gray-700 block px-4 py-2 text-sm text-left w-full hover:text-gray-900 hover:bg-gray-100"));
+ t.AddComponentDefaults(c =>
{
c.AddDefaultClassNames("text-gray-700 block px-4 py-2 text-sm text-left w-full [&:not(:disabled)]:hover:text-gray-900 [&:not(:disabled)]:hover:bg-gray-100 disabled:opacity-50");
c.AddAttributeDefaults("type", "button");
});
- t.AddComponentDefaults(c =>
+ t.AddComponentDefaults(c =>
{
c.AddDefaultClassNames("text-gray-700 block px-4 py-2 text-sm text-left w-full hover:text-gray-900 hover:bg-gray-100");
c.AddAttributeDefaults("href", "#");