diff --git a/HeadlessBlazor.sln b/HeadlessBlazor.sln
index e5d55d2..372311a 100644
--- a/HeadlessBlazor.sln
+++ b/HeadlessBlazor.sln
@@ -9,7 +9,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeadlessBlazor.Dropdown", "
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{45E6AD2B-E550-4375-A452-63A8FE7787E4}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeadlessBlazor.Core", "src\HeadlessBlazor.Core\HeadlessBlazor.Core.csproj", "{E3A1957A-9803-4B81-B1F0-EB66F8E7DE12}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeadlessBlazor.Base", "src\HeadlessBlazor.Core\HeadlessBlazor.Base.csproj", "{E3A1957A-9803-4B81-B1F0-EB66F8E7DE12}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeadlessBlazor.Docs.Client", "docs\HeadlessBlazor.Docs.Client\HeadlessBlazor.Docs.Client.csproj", "{802E5B41-3FE0-49D3-B6F6-B43F98DD294A}"
EndProject
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index b5ceff5..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "headlessblazor",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "headlessblazor",
- "version": "1.0.0",
- "license": "ISC",
- "dependencies": {
- "@floating-ui/dom": "^1.6.5"
- }
- },
- "node_modules/@floating-ui/core": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz",
- "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==",
- "dependencies": {
- "@floating-ui/utils": "^0.2.0"
- }
- },
- "node_modules/@floating-ui/dom": {
- "version": "1.6.5",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz",
- "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==",
- "dependencies": {
- "@floating-ui/core": "^1.0.0",
- "@floating-ui/utils": "^0.2.0"
- }
- },
- "node_modules/@floating-ui/utils": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz",
- "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw=="
- }
- }
-}
diff --git a/package.json b/package.json
deleted file mode 100644
index f9f64bd..0000000
--- a/package.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "name": "headlessblazor",
- "version": "1.0.0",
- "description": "
\r
Headless Blazor\r
",
- "main": "index.js",
- "directories": {
- "doc": "docs"
- },
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "keywords": [],
- "author": "",
- "license": "ISC",
- "dependencies": {
- "@floating-ui/dom": "^1.6.5"
- }
-}
diff --git a/src/HeadlessBlazor.Core/HBElement.cs b/src/HeadlessBlazor.Core/HBElement.cs
index 1986c1f..8db04c0 100644
--- a/src/HeadlessBlazor.Core/HBElement.cs
+++ b/src/HeadlessBlazor.Core/HBElement.cs
@@ -8,7 +8,7 @@ public class HBElement : HBElementBase
[Parameter]
public RenderFragment? ChildContent { get; set; }
- protected override void AddChildContent(RenderTreeBuilder builder, ref int sequence)
+ protected override void AddChildContent(ref int sequence, RenderTreeBuilder builder)
{
if (ChildContent != null)
builder.AddContent(sequence, ChildContent);
@@ -20,7 +20,7 @@ public class HBElement : HBElementBase where T : HBElement
[Parameter]
public RenderFragment? ChildContent { get; set; }
- protected override void AddChildContent(RenderTreeBuilder builder, ref int sequence)
+ protected override void AddChildContent(ref int sequence, RenderTreeBuilder builder)
{
if (ChildContent != null)
builder.AddContent(sequence, ChildContent, (T)this);
diff --git a/src/HeadlessBlazor.Core/HBElementBase.cs b/src/HeadlessBlazor.Core/HBElementBase.cs
index 6b35058..5dbc9d2 100644
--- a/src/HeadlessBlazor.Core/HBElementBase.cs
+++ b/src/HeadlessBlazor.Core/HBElementBase.cs
@@ -32,56 +32,53 @@ protected sealed override void OnInitialized()
OnAfterInitialized();
}
- protected void BuildRenderTree(RenderTreeBuilder builder, ref int sequenceNumber)
+ protected override void BuildRenderTree(RenderTreeBuilder builder)
+ {
+ var seq = 0;
+ BuildRenderTree(ref seq, builder);
+ }
+
+ protected void BuildRenderTree(ref int sequence, RenderTreeBuilder builder)
{
var createElement = !string.IsNullOrWhiteSpace(ElementName);
if (createElement)
{
- builder.OpenElement(sequenceNumber++, ElementName);
+ builder.OpenElement(sequence++, ElementName);
foreach (var attr in UserAttributes)
{
if (attr.Value != null)
- builder.AddAttribute(sequenceNumber, attr.Key, attr.Value);
+ builder.AddAttribute(sequence, attr.Key, attr.Value);
}
- builder.AddAttribute(sequenceNumber, "data-hb-tag", GetType().Name);
-
- AddEventHandlers(builder, ref sequenceNumber);
- builder.AddEventStopPropagationAttribute(sequenceNumber, "onclick", OnClickStopPropagation);
- builder.AddEventPreventDefaultAttribute(sequenceNumber, "onclick", OnClickPreventDefault);
+ AddEventHandlers(ref sequence, builder);
+ builder.AddEventStopPropagationAttribute(sequence, "onclick", OnClickStopPropagation);
+ builder.AddEventPreventDefaultAttribute(sequence, "onclick", OnClickPreventDefault);
- AddElementReference(builder, ref sequenceNumber);
+ AddElementReference(ref sequence, builder);
}
- AddBehaviors(builder, ref sequenceNumber);
-
- AddChildContent(builder, ref sequenceNumber);
+ AddBehaviors(ref sequence, builder);
+ AddChildContent(ref sequence, builder);
if (createElement)
builder.CloseElement();
}
- protected override void BuildRenderTree(RenderTreeBuilder builder)
- {
- var seq = 0;
- BuildRenderTree(builder, ref seq);
- }
-
- protected virtual void AddChildContent(RenderTreeBuilder builder, ref int sequence)
+ protected virtual void AddChildContent(ref int sequence, RenderTreeBuilder builder)
{
}
- protected virtual void AddBehaviors(RenderTreeBuilder builder, ref int sequenceNumber)
+ protected virtual void AddBehaviors(ref int sequence, RenderTreeBuilder builder)
{
}
- protected virtual void AddElementReference(RenderTreeBuilder builder, ref int sequenceNumber)
+ protected virtual void AddElementReference(ref int sequence, RenderTreeBuilder builder)
{
}
- protected virtual void AddEventHandlers(RenderTreeBuilder builder, ref int sequenceNumber)
+ protected virtual void AddEventHandlers(ref int sequence, RenderTreeBuilder builder)
{
}
}
diff --git a/src/HeadlessBlazor.Core/HeadlessBlazor.Core.csproj b/src/HeadlessBlazor.Core/HeadlessBlazor.Base.csproj
similarity index 100%
rename from src/HeadlessBlazor.Core/HeadlessBlazor.Core.csproj
rename to src/HeadlessBlazor.Core/HeadlessBlazor.Base.csproj
diff --git a/src/HeadlessBlazor.Core/Utilities/ClientRect.cs b/src/HeadlessBlazor.Core/Utilities/ClientRect.cs
deleted file mode 100644
index 9cec590..0000000
--- a/src/HeadlessBlazor.Core/Utilities/ClientRect.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-namespace HeadlessBlazor.Utilities;
-
-public sealed record ClientRect(double Top, double Left, double Bottom, double Right);
diff --git a/src/HeadlessBlazor.Core/Utilities/DOM.cs b/src/HeadlessBlazor.Core/Utilities/DOM.cs
deleted file mode 100644
index ddce8f8..0000000
--- a/src/HeadlessBlazor.Core/Utilities/DOM.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using Microsoft.AspNetCore.Components;
-using Microsoft.JSInterop;
-
-namespace HeadlessBlazor.Utilities;
-
-public sealed class DOM(IJSRuntime js) : IAsyncDisposable
-{
- private readonly Lazy> _module = new(() => js.InvokeAsync("import", "./_content/HeadlessBlazor.Core/utils.js"));
-
- public async ValueTask GetWindowDimensionsAsync()
- {
- return await InvokeAsync("getWindowDimensions");
- }
-
- public async ValueTask GetBoundingClientRect(ElementReference element)
- {
- return await InvokeAsync("getBoundingClientRect", element);
- }
-
- public async ValueTask DisposeAsync()
- {
- if (_module.IsValueCreated)
- {
- var module = await _module.Value;
- await module.DisposeAsync();
- }
- }
-
- private async ValueTask InvokeAsync(string identifier, params object?[]? args)
- {
- var module = await _module.Value;
- return await module.InvokeAsync(identifier, args);
- }
-}
diff --git a/src/HeadlessBlazor.Core/Utilities/Dimensions.cs b/src/HeadlessBlazor.Core/Utilities/Dimensions.cs
deleted file mode 100644
index 73d2e6c..0000000
--- a/src/HeadlessBlazor.Core/Utilities/Dimensions.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-namespace HeadlessBlazor.Utilities;
-
-public sealed record Dimensions(double Height, double Width);
\ No newline at end of file
diff --git a/src/HeadlessBlazor.Core/wwwroot/utils.js b/src/HeadlessBlazor.Core/wwwroot/utils.js
deleted file mode 100644
index 2eba34f..0000000
--- a/src/HeadlessBlazor.Core/wwwroot/utils.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Gets the dimensions of the window.
- */
-export function getWindowDimensions() {
- return new WindowDimensions();
-}
-
-/**
- * Gets the bounding client rectangle of the provided element.
- * @param {Element} element
- * @returns {ClientRect}
- */
-export function getBoundingClientRect(element) {
- return new ClientRect(element);
-}
-
-export class WindowDimensions {
- constructor() {
- const html = document.documentElement;
- this.Height = html.clientHeight;
- this.Width = html.clientWidth;
- }
-}
-
-export class ClientRect {
-
- /**
- * @param {Element} element
- */
- constructor(element) {
- const rect = element.getBoundingClientRect();
- this.Top = rect.top;
- this.Left = rect.left;
- this.Bottom = rect.bottom;
- this.Right = rect.right;
- }
-}
\ No newline at end of file
diff --git a/src/HeadlessBlazor.Dropdown/HBDropdown.cs b/src/HeadlessBlazor.Dropdown/HBDropdown.cs
index f26a53e..c2246e3 100644
--- a/src/HeadlessBlazor.Dropdown/HBDropdown.cs
+++ b/src/HeadlessBlazor.Dropdown/HBDropdown.cs
@@ -49,7 +49,7 @@ protected override void BuildRenderTree(RenderTreeBuilder builder)
builder.AddAttribute(seq++, "Value", this);
builder.AddAttribute(seq++, "ChildContent", (RenderFragment)((b) =>
{
- BuildRenderTree(b, ref seq);
+ BuildRenderTree(ref seq, b);
if (IsOpen && CloseOnOutsideClick)
{
@@ -63,11 +63,11 @@ protected override void BuildRenderTree(RenderTreeBuilder builder)
builder.CloseComponent();
}
- protected override void AddEventHandlers(RenderTreeBuilder builder, ref int sequenceNumber)
+ protected override void AddEventHandlers(ref int sequence, RenderTreeBuilder builder)
{
if (CloseOnEscape)
{
- builder.AddAttribute(sequenceNumber++, "onkeydown", EventCallback.Factory.Create(this, async (args) =>
+ builder.AddAttribute(sequence++, "onkeydown", EventCallback.Factory.Create(this, async (args) =>
{
if (args.Key == "Escape")
await CloseAsync();
@@ -75,9 +75,9 @@ protected override void AddEventHandlers(RenderTreeBuilder builder, ref int sequ
}
}
- protected override void AddElementReference(RenderTreeBuilder builder, ref int sequenceNumber)
+ protected override void AddElementReference(ref int sequence, RenderTreeBuilder builder)
{
- builder.AddElementReferenceCapture(sequenceNumber++, async capturedRef =>
+ builder.AddElementReferenceCapture(sequence++, async capturedRef =>
{
ElementReference = capturedRef;
await InvokeAsync(StateHasChanged);
diff --git a/src/HeadlessBlazor.Dropdown/HBDropdownMenu.cs b/src/HeadlessBlazor.Dropdown/HBDropdownMenu.cs
index 196cf17..ed984d6 100644
--- a/src/HeadlessBlazor.Dropdown/HBDropdownMenu.cs
+++ b/src/HeadlessBlazor.Dropdown/HBDropdownMenu.cs
@@ -19,22 +19,22 @@ public class HBDropdownMenu : HBElement
[Parameter]
public HBFloatSide? Side { get; set; }
- protected override void AddBehaviors(RenderTreeBuilder builder, ref int sequenceNumber)
+ protected override void AddBehaviors(ref int sequence, RenderTreeBuilder builder)
{
if (AutoPosition)
{
- builder.OpenComponent(sequenceNumber++);
- builder.AddAttribute(sequenceNumber++, nameof(HBFloatBehavior.Alignment), Alignment);
- builder.AddAttribute(sequenceNumber++, nameof(HBFloatBehavior.Anchor), Dropdown.ElementReference);
- builder.AddAttribute(sequenceNumber++, nameof(HBFloatBehavior.Content), ElementReference);
- builder.AddAttribute(sequenceNumber++, nameof(HBFloatBehavior.Side), Side);
+ builder.OpenComponent(sequence++);
+ builder.AddAttribute(sequence, nameof(HBFloatBehavior.Alignment), Alignment);
+ builder.AddAttribute(sequence, nameof(HBFloatBehavior.Anchor), Dropdown.ElementReference);
+ builder.AddAttribute(sequence, nameof(HBFloatBehavior.Content), ElementReference);
+ builder.AddAttribute(sequence, nameof(HBFloatBehavior.Side), Side);
builder.CloseComponent();
}
}
- protected override void AddElementReference(RenderTreeBuilder builder, ref int sequenceNumber)
+ protected override void AddElementReference(ref int sequence, RenderTreeBuilder builder)
{
- builder.AddElementReferenceCapture(sequenceNumber, async (elementRef) =>
+ builder.AddElementReferenceCapture(sequence, async (elementRef) =>
{
ElementReference = elementRef;
await InvokeAsync(StateHasChanged);
diff --git a/src/HeadlessBlazor.Dropdown/HeadlessBlazor.Dropdown.csproj b/src/HeadlessBlazor.Dropdown/HeadlessBlazor.Dropdown.csproj
index 2fc05ff..52ff0e4 100644
--- a/src/HeadlessBlazor.Dropdown/HeadlessBlazor.Dropdown.csproj
+++ b/src/HeadlessBlazor.Dropdown/HeadlessBlazor.Dropdown.csproj
@@ -41,7 +41,7 @@
-
+
diff --git a/src/HeadlessBlazor/HeadlessBlazor.csproj b/src/HeadlessBlazor/HeadlessBlazor.csproj
index 767a9db..5d0563e 100644
--- a/src/HeadlessBlazor/HeadlessBlazor.csproj
+++ b/src/HeadlessBlazor/HeadlessBlazor.csproj
@@ -43,6 +43,8 @@
+
+
diff --git a/src/HeadlessBlazor/ServiceCollectionExtensions.cs b/src/HeadlessBlazor/ServiceCollectionExtensions.cs
index 989ec3b..b3a8448 100644
--- a/src/HeadlessBlazor/ServiceCollectionExtensions.cs
+++ b/src/HeadlessBlazor/ServiceCollectionExtensions.cs
@@ -1,13 +1,20 @@
-using HeadlessBlazor.Utilities;
-using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection;
namespace HeadlessBlazor;
+///
+/// Extension methods for configuring HeadlessBlazor services.
+///
public static class ServiceCollectionExtensions
{
+ ///
+ /// Adds the required HeadlessBlazor services.
+ ///
+ /// The to add the services to.
+ /// A reference to this instance after the operation has completed.
public static IServiceCollection AddHeadlessBlazor(this IServiceCollection services)
{
- services.AddTransient();
+ // made ya look. there will be stuff here eventually
return services;
}
}