From 2ebff16423fd2f81ffa4ab4ba9251f0ba9f21260 Mon Sep 17 00:00:00 2001 From: Erin McLaughlin Date: Mon, 20 May 2024 09:25:37 -0400 Subject: [PATCH] cleanup --- HeadlessBlazor.sln | 2 +- package-lock.json | 38 ----------------- package.json | 18 -------- src/HeadlessBlazor.Core/HBElement.cs | 4 +- src/HeadlessBlazor.Core/HBElementBase.cs | 41 +++++++++---------- ...Core.csproj => HeadlessBlazor.Base.csproj} | 0 .../Utilities/ClientRect.cs | 3 -- src/HeadlessBlazor.Core/Utilities/DOM.cs | 34 --------------- .../Utilities/Dimensions.cs | 3 -- src/HeadlessBlazor.Core/wwwroot/utils.js | 37 ----------------- src/HeadlessBlazor.Dropdown/HBDropdown.cs | 10 ++--- src/HeadlessBlazor.Dropdown/HBDropdownMenu.cs | 16 ++++---- .../HeadlessBlazor.Dropdown.csproj | 2 +- src/HeadlessBlazor/HeadlessBlazor.csproj | 2 + .../ServiceCollectionExtensions.cs | 13 ++++-- 15 files changed, 48 insertions(+), 175 deletions(-) delete mode 100644 package-lock.json delete mode 100644 package.json rename src/HeadlessBlazor.Core/{HeadlessBlazor.Core.csproj => HeadlessBlazor.Base.csproj} (100%) delete mode 100644 src/HeadlessBlazor.Core/Utilities/ClientRect.cs delete mode 100644 src/HeadlessBlazor.Core/Utilities/DOM.cs delete mode 100644 src/HeadlessBlazor.Core/Utilities/Dimensions.cs delete mode 100644 src/HeadlessBlazor.Core/wwwroot/utils.js 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; } }