diff --git a/Htmx.ApiDemo/Htmx.ApiDemo.sln b/Htmx.ApiDemo/Htmx.ApiDemo.sln deleted file mode 100644 index 9f398a0..0000000 --- a/Htmx.ApiDemo/Htmx.ApiDemo.sln +++ /dev/null @@ -1,24 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.5.2.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Htmx.ApiDemo", "Htmx.ApiDemo.csproj", "{38A5EDEF-D21B-8D4E-D1F2-DDFE0335BD22}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {38A5EDEF-D21B-8D4E-D1F2-DDFE0335BD22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {38A5EDEF-D21B-8D4E-D1F2-DDFE0335BD22}.Debug|Any CPU.Build.0 = Debug|Any CPU - {38A5EDEF-D21B-8D4E-D1F2-DDFE0335BD22}.Release|Any CPU.ActiveCfg = Release|Any CPU - {38A5EDEF-D21B-8D4E-D1F2-DDFE0335BD22}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B66FEAA2-59A2-4489-9AEB-ED875EEE5D3E} - EndGlobalSection -EndGlobal diff --git a/Htmx.ApiDemo/Program.cs b/Htmx.ApiDemo/Program.cs index 452e41e..63d9d09 100644 --- a/Htmx.ApiDemo/Program.cs +++ b/Htmx.ApiDemo/Program.cs @@ -1,8 +1,8 @@ using Htmx.ApiDemo; using Htmx.ApiDemo.Data; -using Immediate.Apis; -using Immediate.Apis.Shared; +using Immediate.Handlers; using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; using MongoDB.Bson; using MongoDB.Bson.Serialization; @@ -102,45 +102,46 @@ app.Use(async (context, next) => await next(); }); -// Explicit MapGet/MapPost so RequestDelegateGenerator can intercept and emit -// NativeAOT-safe endpoint code. Handlers return ValueTask which the -// generator knows how to handle: it emits `await result.ExecuteAsync(httpContext)`. -app.MapGet("/", static ( +// Explicit MapGet/MapPost with explicit lambda return type ValueTask. +// The explicit return type annotation lets RequestDelegateGenerator see IResult +// directly (without needing to resolve the generated Handler.HandleAsync type), +// so it emits `await result.ExecuteAsync(httpContext)` instead of JSON serialization. +app.MapGet("/", static ValueTask ( [AsParameters] Htmx.ApiDemo.Templates.GetIndexHandler.Command cmd, Htmx.ApiDemo.Templates.GetIndexHandler.Handler handler, CancellationToken token) => handler.HandleAsync(cmd, token)); -app.MapGet("/greet/{username}/{count?}/{id?}", static ( +app.MapGet("/greet/{username}/{count?}/{id?}", static ValueTask ( [AsParameters] Htmx.ApiDemo.Templates.GetGreetingHandler.Query query, Htmx.ApiDemo.Templates.GetGreetingHandler.Handler handler, CancellationToken token) => handler.HandleAsync(query, token)); -app.MapGet("/login", static ( +app.MapGet("/login", static ValueTask ( [AsParameters] Htmx.ApiDemo.Templates.GetLoginHandler.Query query, Htmx.ApiDemo.Templates.GetLoginHandler.Handler handler, CancellationToken token) => handler.HandleAsync(query, token)); -app.MapPost("/login", static ( +app.MapPost("/login", static ValueTask ( [AsParameters] Htmx.ApiDemo.Templates.PostLoginHandler.Command cmd, Htmx.ApiDemo.Templates.PostLoginHandler.Handler handler, CancellationToken token) => handler.HandleAsync(cmd, token)); -app.MapGet("/register", static ( +app.MapGet("/register", static ValueTask ( [AsParameters] Htmx.ApiDemo.Templates.GetRegisterHandler.Query query, Htmx.ApiDemo.Templates.GetRegisterHandler.Handler handler, CancellationToken token) => handler.HandleAsync(query, token)); -app.MapPost("/register", static ( +app.MapPost("/register", static ValueTask ( [AsParameters] Htmx.ApiDemo.Templates.PostRegisterHandler.Command cmd, Htmx.ApiDemo.Templates.PostRegisterHandler.Handler handler, CancellationToken token) => handler.HandleAsync(cmd, token)); -app.MapPost("/logout", static ( +app.MapPost("/logout", static ValueTask ( [AsParameters] Htmx.ApiDemo.Templates.PostLogoutHandler.Command cmd, Htmx.ApiDemo.Templates.PostLogoutHandler.Handler handler, CancellationToken token) => handler.HandleAsync(cmd, token)); -app.MapGet("/ui-demo", static ( +app.MapGet("/ui-demo", static ValueTask ( [AsParameters] Htmx.ApiDemo.Templates.GetUiDemoHandler.Query query, Htmx.ApiDemo.Templates.GetUiDemoHandler.Handler handler, CancellationToken token) => handler.HandleAsync(query, token)); diff --git a/Htmx.ApiDemo/Templates/Logout.cs b/Htmx.ApiDemo/Templates/Logout.cs index 5333284..0b91947 100644 --- a/Htmx.ApiDemo/Templates/Logout.cs +++ b/Htmx.ApiDemo/Templates/Logout.cs @@ -1,6 +1,8 @@ +using Htmx.ApiDemo; using Htmx.ApiDemo.Data; using Immediate.Apis.Shared; using Immediate.Handlers.Shared; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace Htmx.ApiDemo.Templates; @@ -13,16 +15,13 @@ public static partial class PostLogoutHandler // and antiforgery token in the form is validated by the middleware. public class Command; - private static async ValueTask HandleAsync( + private static async ValueTask HandleAsync( [AsParameters] Command _, AuthService authService, IHttpContextAccessor httpContextAccessor, CancellationToken token) { await authService.SignOutAsync(); - - var ctx = httpContextAccessor.HttpContext - ?? throw new InvalidOperationException("HttpContext is not available."); - ctx.Response.Redirect("/login"); + return new HtmxResult("/login"); } } diff --git a/Htmx.ApiDemo/publish-test/Htmx.ApiDemo.exe b/Htmx.ApiDemo/publish-test/Htmx.ApiDemo.exe deleted file mode 100644 index 031a505..0000000 Binary files a/Htmx.ApiDemo/publish-test/Htmx.ApiDemo.exe and /dev/null differ diff --git a/Htmx.ApiDemo/publish-test/Htmx.ApiDemo.pdb b/Htmx.ApiDemo/publish-test/Htmx.ApiDemo.pdb deleted file mode 100644 index c4a1ba1..0000000 Binary files a/Htmx.ApiDemo/publish-test/Htmx.ApiDemo.pdb and /dev/null differ diff --git a/Htmx.ApiDemo/publish-test/Htmx.ApiDemo.staticwebassets.endpoints.json b/Htmx.ApiDemo/publish-test/Htmx.ApiDemo.staticwebassets.endpoints.json deleted file mode 100644 index 47d8530..0000000 --- a/Htmx.ApiDemo/publish-test/Htmx.ApiDemo.staticwebassets.endpoints.json +++ /dev/null @@ -1 +0,0 @@ -{"Version":1,"ManifestType":"Publish","Endpoints":[{"Route":"css/input.css","AssetFile":"css/input.css.gz","Selectors":[{"Name":"Content-Encoding","Value":"gzip","Quality":"0.000645994832"}],"ResponseHeaders":[{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Encoding","Value":"gzip"},{"Name":"Content-Length","Value":"1547"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"0+mT/Ad8qaow4rAWhrbCLq9foj7b+G3ebJzjzXaBJF4=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:25:18 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-N0nMYSS4pmiFdvrvQwgB7WykLbHYk+Ogf7FWT8ytzV8="},{"Name":"original-resource","Value":"\"N0nMYSS4pmiFdvrvQwgB7WykLbHYk+Ogf7FWT8ytzV8=\""}]},{"Route":"css/input.css","AssetFile":"css/input.css.br","Selectors":[{"Name":"Content-Encoding","Value":"br","Quality":"0.000763358779"}],"ResponseHeaders":[{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Encoding","Value":"br"},{"Name":"Content-Length","Value":"1309"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"d6sXBUm+kSep/03gA8d8OUT8aEPFoHlpCkcBE6fh47k=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:26:15 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-N0nMYSS4pmiFdvrvQwgB7WykLbHYk+Ogf7FWT8ytzV8="},{"Name":"original-resource","Value":"\"N0nMYSS4pmiFdvrvQwgB7WykLbHYk+Ogf7FWT8ytzV8=\""}]},{"Route":"css/input.css","AssetFile":"css/input.css","Selectors":[],"ResponseHeaders":[{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"6607"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"N0nMYSS4pmiFdvrvQwgB7WykLbHYk+Ogf7FWT8ytzV8=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 04:20:23 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-N0nMYSS4pmiFdvrvQwgB7WykLbHYk+Ogf7FWT8ytzV8="}]},{"Route":"css/input.css.br","AssetFile":"css/input.css.br","Selectors":[],"ResponseHeaders":[{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Encoding","Value":"br"},{"Name":"Content-Length","Value":"1309"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"d6sXBUm+kSep/03gA8d8OUT8aEPFoHlpCkcBE6fh47k=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:26:15 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-d6sXBUm+kSep/03gA8d8OUT8aEPFoHlpCkcBE6fh47k="}]},{"Route":"css/input.css.gz","AssetFile":"css/input.css.gz","Selectors":[],"ResponseHeaders":[{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Encoding","Value":"gzip"},{"Name":"Content-Length","Value":"1547"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"0+mT/Ad8qaow4rAWhrbCLq9foj7b+G3ebJzjzXaBJF4=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:25:18 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-0+mT/Ad8qaow4rAWhrbCLq9foj7b+G3ebJzjzXaBJF4="}]},{"Route":"css/input.h27ol6zlme.css","AssetFile":"css/input.css.gz","Selectors":[{"Name":"Content-Encoding","Value":"gzip","Quality":"0.000645994832"}],"ResponseHeaders":[{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Encoding","Value":"gzip"},{"Name":"Content-Length","Value":"1547"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"0+mT/Ad8qaow4rAWhrbCLq9foj7b+G3ebJzjzXaBJF4=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:25:18 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"fingerprint","Value":"h27ol6zlme"},{"Name":"integrity","Value":"sha256-N0nMYSS4pmiFdvrvQwgB7WykLbHYk+Ogf7FWT8ytzV8="},{"Name":"label","Value":"css/input.css"},{"Name":"original-resource","Value":"\"N0nMYSS4pmiFdvrvQwgB7WykLbHYk+Ogf7FWT8ytzV8=\""}]},{"Route":"css/input.h27ol6zlme.css","AssetFile":"css/input.css.br","Selectors":[{"Name":"Content-Encoding","Value":"br","Quality":"0.000763358779"}],"ResponseHeaders":[{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Encoding","Value":"br"},{"Name":"Content-Length","Value":"1309"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"d6sXBUm+kSep/03gA8d8OUT8aEPFoHlpCkcBE6fh47k=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:26:15 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"fingerprint","Value":"h27ol6zlme"},{"Name":"integrity","Value":"sha256-N0nMYSS4pmiFdvrvQwgB7WykLbHYk+Ogf7FWT8ytzV8="},{"Name":"label","Value":"css/input.css"},{"Name":"original-resource","Value":"\"N0nMYSS4pmiFdvrvQwgB7WykLbHYk+Ogf7FWT8ytzV8=\""}]},{"Route":"css/input.h27ol6zlme.css","AssetFile":"css/input.css","Selectors":[],"ResponseHeaders":[{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"6607"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"N0nMYSS4pmiFdvrvQwgB7WykLbHYk+Ogf7FWT8ytzV8=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 04:20:23 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"fingerprint","Value":"h27ol6zlme"},{"Name":"integrity","Value":"sha256-N0nMYSS4pmiFdvrvQwgB7WykLbHYk+Ogf7FWT8ytzV8="},{"Name":"label","Value":"css/input.css"}]},{"Route":"css/input.h27ol6zlme.css.br","AssetFile":"css/input.css.br","Selectors":[],"ResponseHeaders":[{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Encoding","Value":"br"},{"Name":"Content-Length","Value":"1309"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"d6sXBUm+kSep/03gA8d8OUT8aEPFoHlpCkcBE6fh47k=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:26:15 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"fingerprint","Value":"h27ol6zlme"},{"Name":"integrity","Value":"sha256-d6sXBUm+kSep/03gA8d8OUT8aEPFoHlpCkcBE6fh47k="},{"Name":"label","Value":"css/input.css.br"}]},{"Route":"css/input.h27ol6zlme.css.gz","AssetFile":"css/input.css.gz","Selectors":[],"ResponseHeaders":[{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Encoding","Value":"gzip"},{"Name":"Content-Length","Value":"1547"},{"Name":"Content-Type","Value":"text/css"},{"Name":"ETag","Value":"\"0+mT/Ad8qaow4rAWhrbCLq9foj7b+G3ebJzjzXaBJF4=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:25:18 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"fingerprint","Value":"h27ol6zlme"},{"Name":"integrity","Value":"sha256-0+mT/Ad8qaow4rAWhrbCLq9foj7b+G3ebJzjzXaBJF4="},{"Name":"label","Value":"css/input.css.gz"}]},{"Route":"js/components.hmq69r0ajz.js","AssetFile":"js/components.js.br","Selectors":[{"Name":"Content-Encoding","Value":"br","Quality":"0.000227479527"}],"ResponseHeaders":[{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Encoding","Value":"br"},{"Name":"Content-Length","Value":"4395"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"cWP2S7DWtOeIn+Z65609pw+tufBZwA1tlMSyGPNxlrU=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:26:15 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"fingerprint","Value":"hmq69r0ajz"},{"Name":"integrity","Value":"sha256-t773+Y1ANXaVQNi8gLm/y+0hp7yKC+Ax4Cez34VIC0I="},{"Name":"label","Value":"js/components.js"},{"Name":"original-resource","Value":"\"t773+Y1ANXaVQNi8gLm/y+0hp7yKC+Ax4Cez34VIC0I=\""}]},{"Route":"js/components.hmq69r0ajz.js","AssetFile":"js/components.js.gz","Selectors":[{"Name":"Content-Encoding","Value":"gzip","Quality":"0.000195121951"}],"ResponseHeaders":[{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Encoding","Value":"gzip"},{"Name":"Content-Length","Value":"5124"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"RBv4hBoKQ3ISMLjG+zMGFqw7Y+SJ6sE5mI+q8JksMzw=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:25:18 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"fingerprint","Value":"hmq69r0ajz"},{"Name":"integrity","Value":"sha256-t773+Y1ANXaVQNi8gLm/y+0hp7yKC+Ax4Cez34VIC0I="},{"Name":"label","Value":"js/components.js"},{"Name":"original-resource","Value":"\"t773+Y1ANXaVQNi8gLm/y+0hp7yKC+Ax4Cez34VIC0I=\""}]},{"Route":"js/components.hmq69r0ajz.js","AssetFile":"js/components.js","Selectors":[],"ResponseHeaders":[{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Length","Value":"27006"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"t773+Y1ANXaVQNi8gLm/y+0hp7yKC+Ax4Cez34VIC0I=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 04:20:23 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"fingerprint","Value":"hmq69r0ajz"},{"Name":"integrity","Value":"sha256-t773+Y1ANXaVQNi8gLm/y+0hp7yKC+Ax4Cez34VIC0I="},{"Name":"label","Value":"js/components.js"}]},{"Route":"js/components.hmq69r0ajz.js.br","AssetFile":"js/components.js.br","Selectors":[],"ResponseHeaders":[{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Encoding","Value":"br"},{"Name":"Content-Length","Value":"4395"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"cWP2S7DWtOeIn+Z65609pw+tufBZwA1tlMSyGPNxlrU=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:26:15 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"fingerprint","Value":"hmq69r0ajz"},{"Name":"integrity","Value":"sha256-cWP2S7DWtOeIn+Z65609pw+tufBZwA1tlMSyGPNxlrU="},{"Name":"label","Value":"js/components.js.br"}]},{"Route":"js/components.hmq69r0ajz.js.gz","AssetFile":"js/components.js.gz","Selectors":[],"ResponseHeaders":[{"Name":"Cache-Control","Value":"max-age=31536000, immutable"},{"Name":"Content-Encoding","Value":"gzip"},{"Name":"Content-Length","Value":"5124"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"RBv4hBoKQ3ISMLjG+zMGFqw7Y+SJ6sE5mI+q8JksMzw=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:25:18 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"fingerprint","Value":"hmq69r0ajz"},{"Name":"integrity","Value":"sha256-RBv4hBoKQ3ISMLjG+zMGFqw7Y+SJ6sE5mI+q8JksMzw="},{"Name":"label","Value":"js/components.js.gz"}]},{"Route":"js/components.js","AssetFile":"js/components.js.br","Selectors":[{"Name":"Content-Encoding","Value":"br","Quality":"0.000227479527"}],"ResponseHeaders":[{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Encoding","Value":"br"},{"Name":"Content-Length","Value":"4395"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"cWP2S7DWtOeIn+Z65609pw+tufBZwA1tlMSyGPNxlrU=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:26:15 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-t773+Y1ANXaVQNi8gLm/y+0hp7yKC+Ax4Cez34VIC0I="},{"Name":"original-resource","Value":"\"t773+Y1ANXaVQNi8gLm/y+0hp7yKC+Ax4Cez34VIC0I=\""}]},{"Route":"js/components.js","AssetFile":"js/components.js.gz","Selectors":[{"Name":"Content-Encoding","Value":"gzip","Quality":"0.000195121951"}],"ResponseHeaders":[{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Encoding","Value":"gzip"},{"Name":"Content-Length","Value":"5124"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"RBv4hBoKQ3ISMLjG+zMGFqw7Y+SJ6sE5mI+q8JksMzw=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:25:18 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-t773+Y1ANXaVQNi8gLm/y+0hp7yKC+Ax4Cez34VIC0I="},{"Name":"original-resource","Value":"\"t773+Y1ANXaVQNi8gLm/y+0hp7yKC+Ax4Cez34VIC0I=\""}]},{"Route":"js/components.js","AssetFile":"js/components.js","Selectors":[],"ResponseHeaders":[{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Length","Value":"27006"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"t773+Y1ANXaVQNi8gLm/y+0hp7yKC+Ax4Cez34VIC0I=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 04:20:23 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-t773+Y1ANXaVQNi8gLm/y+0hp7yKC+Ax4Cez34VIC0I="}]},{"Route":"js/components.js.br","AssetFile":"js/components.js.br","Selectors":[],"ResponseHeaders":[{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Encoding","Value":"br"},{"Name":"Content-Length","Value":"4395"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"cWP2S7DWtOeIn+Z65609pw+tufBZwA1tlMSyGPNxlrU=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:26:15 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-cWP2S7DWtOeIn+Z65609pw+tufBZwA1tlMSyGPNxlrU="}]},{"Route":"js/components.js.gz","AssetFile":"js/components.js.gz","Selectors":[],"ResponseHeaders":[{"Name":"Cache-Control","Value":"no-cache"},{"Name":"Content-Encoding","Value":"gzip"},{"Name":"Content-Length","Value":"5124"},{"Name":"Content-Type","Value":"text/javascript"},{"Name":"ETag","Value":"\"RBv4hBoKQ3ISMLjG+zMGFqw7Y+SJ6sE5mI+q8JksMzw=\""},{"Name":"Last-Modified","Value":"Tue, 05 May 2026 08:25:18 GMT"},{"Name":"Vary","Value":"Accept-Encoding"}],"EndpointProperties":[{"Name":"integrity","Value":"sha256-RBv4hBoKQ3ISMLjG+zMGFqw7Y+SJ6sE5mI+q8JksMzw="}]}]} \ No newline at end of file diff --git a/Htmx.ApiDemo/publish-test/appsettings.Development.json b/Htmx.ApiDemo/publish-test/appsettings.Development.json deleted file mode 100644 index 0c208ae..0000000 --- a/Htmx.ApiDemo/publish-test/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/Htmx.ApiDemo/publish-test/appsettings.json b/Htmx.ApiDemo/publish-test/appsettings.json deleted file mode 100644 index 8b0c5b8..0000000 --- a/Htmx.ApiDemo/publish-test/appsettings.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "ConnectionStrings": { - "DefaultConnection": "mongodb://localhost:27017" - }, - "MongoDbName": "HtmxAppDb", - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} diff --git a/Htmx.ApiDemo/publish-test/package-lock.json b/Htmx.ApiDemo/publish-test/package-lock.json deleted file mode 100644 index eb32a88..0000000 --- a/Htmx.ApiDemo/publish-test/package-lock.json +++ /dev/null @@ -1,1033 +0,0 @@ -{ - "name": "Htmx.ApiDemo", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "@tailwindcss/cli": "^4.2.4", - "tailwindcss": "^4.2.4" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", - "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.3", - "is-glob": "^4.0.3", - "node-addon-api": "^7.0.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.6", - "@parcel/watcher-darwin-arm64": "2.5.6", - "@parcel/watcher-darwin-x64": "2.5.6", - "@parcel/watcher-freebsd-x64": "2.5.6", - "@parcel/watcher-linux-arm-glibc": "2.5.6", - "@parcel/watcher-linux-arm-musl": "2.5.6", - "@parcel/watcher-linux-arm64-glibc": "2.5.6", - "@parcel/watcher-linux-arm64-musl": "2.5.6", - "@parcel/watcher-linux-x64-glibc": "2.5.6", - "@parcel/watcher-linux-x64-musl": "2.5.6", - "@parcel/watcher-win32-arm64": "2.5.6", - "@parcel/watcher-win32-ia32": "2.5.6", - "@parcel/watcher-win32-x64": "2.5.6" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", - "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", - "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", - "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", - "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", - "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", - "cpu": [ - "arm" - ], - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", - "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", - "cpu": [ - "arm" - ], - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", - "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", - "cpu": [ - "arm64" - ], - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", - "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", - "cpu": [ - "arm64" - ], - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", - "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", - "cpu": [ - "x64" - ], - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", - "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", - "cpu": [ - "x64" - ], - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", - "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", - "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", - "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/cli": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/cli/-/cli-4.2.4.tgz", - "integrity": "sha512-e87GGhuXxnyQPyA0TS8an/3wNpj+OUmx8u0F4BicYr48TF72032AIu5917rRYaWm7HorXi3GSZ/uG+ohqP6AKA==", - "license": "MIT", - "dependencies": { - "@parcel/watcher": "^2.5.1", - "@tailwindcss/node": "4.2.4", - "@tailwindcss/oxide": "4.2.4", - "enhanced-resolve": "^5.19.0", - "mri": "^1.2.0", - "picocolors": "^1.1.1", - "tailwindcss": "4.2.4" - }, - "bin": { - "tailwindcss": "dist/index.mjs" - } - }, - "node_modules/@tailwindcss/node": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.4.tgz", - "integrity": "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==", - "license": "MIT", - "dependencies": { - "@jridgewell/remapping": "^2.3.5", - "enhanced-resolve": "^5.19.0", - "jiti": "^2.6.1", - "lightningcss": "1.32.0", - "magic-string": "^0.30.21", - "source-map-js": "^1.2.1", - "tailwindcss": "4.2.4" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.4.tgz", - "integrity": "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==", - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.2.4", - "@tailwindcss/oxide-darwin-arm64": "4.2.4", - "@tailwindcss/oxide-darwin-x64": "4.2.4", - "@tailwindcss/oxide-freebsd-x64": "4.2.4", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4", - "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4", - "@tailwindcss/oxide-linux-arm64-musl": "4.2.4", - "@tailwindcss/oxide-linux-x64-gnu": "4.2.4", - "@tailwindcss/oxide-linux-x64-musl": "4.2.4", - "@tailwindcss/oxide-wasm32-wasi": "4.2.4", - "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4", - "@tailwindcss/oxide-win32-x64-msvc": "4.2.4" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.4.tgz", - "integrity": "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.4.tgz", - "integrity": "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.4.tgz", - "integrity": "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.4.tgz", - "integrity": "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.4.tgz", - "integrity": "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.4.tgz", - "integrity": "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==", - "cpu": [ - "arm64" - ], - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.4.tgz", - "integrity": "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==", - "cpu": [ - "arm64" - ], - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.4.tgz", - "integrity": "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==", - "cpu": [ - "x64" - ], - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.4.tgz", - "integrity": "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==", - "cpu": [ - "x64" - ], - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.4.tgz", - "integrity": "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.8.1", - "@emnapi/runtime": "^1.8.1", - "@emnapi/wasi-threads": "^1.1.0", - "@napi-rs/wasm-runtime": "^1.1.1", - "@tybys/wasm-util": "^0.10.1", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.4.tgz", - "integrity": "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.4.tgz", - "integrity": "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", - "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jiti": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/lightningcss": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", - "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.32.0", - "lightningcss-darwin-arm64": "1.32.0", - "lightningcss-darwin-x64": "1.32.0", - "lightningcss-freebsd-x64": "1.32.0", - "lightningcss-linux-arm-gnueabihf": "1.32.0", - "lightningcss-linux-arm64-gnu": "1.32.0", - "lightningcss-linux-arm64-musl": "1.32.0", - "lightningcss-linux-x64-gnu": "1.32.0", - "lightningcss-linux-x64-musl": "1.32.0", - "lightningcss-win32-arm64-msvc": "1.32.0", - "lightningcss-win32-x64-msvc": "1.32.0" - } - }, - "node_modules/lightningcss-android-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", - "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", - "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", - "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", - "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", - "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", - "cpu": [ - "arm" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", - "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", - "cpu": [ - "arm64" - ], - "libc": [ - "glibc" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", - "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", - "cpu": [ - "arm64" - ], - "libc": [ - "musl" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", - "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", - "cpu": [ - "x64" - ], - "libc": [ - "glibc" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", - "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", - "cpu": [ - "x64" - ], - "libc": [ - "musl" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", - "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", - "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tailwindcss": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz", - "integrity": "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==", - "license": "MIT" - }, - "node_modules/tapable": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", - "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - } - } -} diff --git a/Htmx.ApiDemo/publish-test/package.json b/Htmx.ApiDemo/publish-test/package.json deleted file mode 100644 index 13622c0..0000000 --- a/Htmx.ApiDemo/publish-test/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "dependencies": { - "@tailwindcss/cli": "^4.2.4", - "tailwindcss": "^4.2.4" - } -} diff --git a/Htmx.ApiDemo/publish-test/wwwroot/css/input.css b/Htmx.ApiDemo/publish-test/wwwroot/css/input.css deleted file mode 100644 index 518e0aa..0000000 --- a/Htmx.ApiDemo/publish-test/wwwroot/css/input.css +++ /dev/null @@ -1,190 +0,0 @@ -@import "tailwindcss"; - -@source "../../**/*.{html,htmx,cs}"; -@source "../../src/**/!(*.g).cs"; - -@theme { - --color-background: hsl(var(--background)); - --color-foreground: hsl(var(--foreground)); - - --color-card: hsl(var(--card)); - --color-card-foreground: hsl(var(--card-foreground)); - - --color-popover: hsl(var(--popover)); - --color-popover-foreground: hsl(var(--popover-foreground)); - - --color-primary: hsl(var(--primary)); - --color-primary-foreground: hsl(var(--primary-foreground)); - - --color-secondary: hsl(var(--secondary)); - --color-secondary-foreground: hsl(var(--secondary-foreground)); - - --color-muted: hsl(var(--muted)); - --color-muted-foreground: hsl(var(--muted-foreground)); - - --color-accent: hsl(var(--accent)); - --color-accent-foreground: hsl(var(--accent-foreground)); - - --color-destructive: hsl(var(--destructive)); - --color-destructive-foreground: hsl(var(--destructive-foreground)); - - --color-border: hsl(var(--border)); - --color-input: hsl(var(--input)); - --color-ring: hsl(var(--ring)); - - --radius-lg: var(--radius); - --radius-md: calc(var(--radius) - 2px); - --radius-sm: calc(var(--radius) - 4px); -} - -@layer base { - :root { - --background: 0 0% 100%; - --foreground: 222.2 84% 4.9%; - --card: 0 0% 100%; - --card-foreground: 222.2 84% 4.9%; - --popover: 0 0% 100%; - --popover-foreground: 222.2 84% 4.9%; - --primary: 222.2 47.4% 11.2%; - --primary-foreground: 210 40% 98%; - --secondary: 210 40% 96.1%; - --secondary-foreground: 222.2 47.4% 11.2%; - --muted: 210 40% 96.1%; - --muted-foreground: 215.4 16.3% 46.9%; - --accent: 210 40% 96.1%; - --accent-foreground: 222.2 47.4% 11.2%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 210 40% 98%; - --border: 214.3 31.8% 91.4%; - --input: 214.3 31.8% 91.4%; - --ring: 222.2 84% 4.9%; - --radius: 0.5rem; - } - - .dark { - --background: 222.2 84% 4.9%; - --foreground: 210 40% 98%; - --card: 222.2 84% 4.9%; - --card-foreground: 210 40% 98%; - --popover: 222.2 84% 4.9%; - --popover-foreground: 210 40% 98%; - --primary: 210 40% 98%; - --primary-foreground: 222.2 47.4% 11.2%; - --secondary: 217.2 32.6% 17.5%; - --secondary-foreground: 210 40% 98%; - --muted: 217.2 32.6% 17.5%; - --muted-foreground: 215 20.2% 65.1%; - --accent: 217.2 32.6% 17.5%; - --accent-foreground: 210 40% 98%; - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 210 40% 98%; - --border: 217.2 32.6% 17.5%; - --input: 217.2 32.6% 17.5%; - --ring: 212.7 26.8% 83.9%; - } -} - -@layer base { - * { - @apply border-border; - } - - body { - @apply bg-background text-foreground; - } -} - -/* ── Calendar component ───────────────────────────────────────────────── */ -@layer components { - .cal-dow { - @apply text-xs font-medium text-muted-foreground py-1; - } - - .cal-day { - @apply h-9 w-full rounded-md text-sm text-center - text-foreground bg-transparent - hover:bg-accent hover:text-accent-foreground - focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring - transition-colors cursor-pointer; - } - - .cal-day-selected { - @apply bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground; - } - - .cal-day-today { - @apply font-semibold underline underline-offset-2; - } - - .cal-nav { - @apply text-lg leading-none; - } - - /* ── Month / year quick-pick grid ── */ - .cal-view-btn { - @apply h-9 w-full rounded-md text-sm text-center - text-foreground bg-transparent - hover:bg-accent hover:text-accent-foreground - focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring - transition-colors cursor-pointer; - } - - .cal-view-btn-selected { - @apply bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground; - } - - /* ── CalendarRange day states ── */ - .calr-day { - @apply h-9 w-full text-sm text-center text-foreground - transition-colors cursor-pointer focus-visible:outline-none - focus-visible:ring-2 focus-visible:ring-ring; - } - - /* Plain days (no range involvement) */ - .calr-day-plain { - @apply rounded-md hover:bg-accent hover:text-accent-foreground; - } - - /* Start cap — primary, rounded left only */ - .calr-day-start { - @apply rounded-l-md bg-primary text-primary-foreground - hover:bg-primary; - } - - /* End cap — primary, rounded right only */ - .calr-day-end { - @apply rounded-r-md bg-primary text-primary-foreground - hover:bg-primary; - } - - /* Days strictly between start and end */ - .calr-day-mid { - @apply rounded-none bg-accent text-accent-foreground - hover:bg-accent; - } -} - -/* ── Select – custom caret via background SVG ─────────────────────────── */ -@layer components { - select.appearance-none { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E"); - background-repeat: no-repeat; - background-position: right 0.75rem center; - padding-right: 2.25rem; - } -} - -/* ── TimePicker – hide number spinner arrows ──────────────────────────── */ -@layer utilities { - input[type=number].timepicker-hour, - input[type=number].timepicker-minute { - -moz-appearance: textfield; - } - input[type=number].timepicker-hour::-webkit-outer-spin-button, - input[type=number].timepicker-hour::-webkit-inner-spin-button, - input[type=number].timepicker-minute::-webkit-outer-spin-button, - input[type=number].timepicker-minute::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; - } -} diff --git a/Htmx.ApiDemo/publish-test/wwwroot/css/input.css.br b/Htmx.ApiDemo/publish-test/wwwroot/css/input.css.br deleted file mode 100644 index f80bd68..0000000 Binary files a/Htmx.ApiDemo/publish-test/wwwroot/css/input.css.br and /dev/null differ diff --git a/Htmx.ApiDemo/publish-test/wwwroot/css/input.css.gz b/Htmx.ApiDemo/publish-test/wwwroot/css/input.css.gz deleted file mode 100644 index 99172d6..0000000 Binary files a/Htmx.ApiDemo/publish-test/wwwroot/css/input.css.gz and /dev/null differ diff --git a/Htmx.ApiDemo/publish-test/wwwroot/js/components.js b/Htmx.ApiDemo/publish-test/wwwroot/js/components.js deleted file mode 100644 index e8db1f0..0000000 --- a/Htmx.ApiDemo/publish-test/wwwroot/js/components.js +++ /dev/null @@ -1,717 +0,0 @@ -/* ───────────────────────────────────────────────────────────────────────── - * components.js – client-side logic for htmx server-rendered components - * ───────────────────────────────────────────────────────────────────────── */ - -// ── Calendar ────────────────────────────────────────────────────────────── - -(function () { - var MONTHS = [ - 'January', 'February', 'March', 'April', 'May', 'June', - 'July', 'August', 'September', 'October', 'November', 'December' - ]; - - function renderCalendar(root) { - var view = root.dataset.view || 'days'; - var year = parseInt(root.dataset.year, 10); - var month = parseInt(root.dataset.month, 10); - var selD = parseInt(root.dataset.selDay, 10); - var selM = parseInt(root.dataset.selMonth, 10); - var selY = parseInt(root.dataset.selYear, 10); - - var labelBtn = root.querySelector('.cal-month-label'); - var grid = root.querySelector('.cal-grid'); - var dowRow = root.querySelector('.cal-dow-row'); - - // ── Update header label based on view ── - if (view === 'days') { - labelBtn.textContent = MONTHS[month] + ' ' + year; - } else if (view === 'months') { - labelBtn.textContent = year; - } else { // years - var ds = Math.floor(year / 12) * 12; - labelBtn.textContent = ds + ' – ' + (ds + 11); - } - - // Show DOW row only in day view - if (dowRow) dowRow.style.display = view === 'days' ? '' : 'none'; - - grid.innerHTML = ''; - - if (view === 'days') { - grid.style.gridTemplateColumns = ''; // let CSS class (grid-cols-7) take over - - var firstDay = new Date(year, month, 1).getDay(); - var daysInMonth = new Date(year, month + 1, 0).getDate(); - - for (var i = 0; i < firstDay; i++) { - grid.appendChild(document.createElement('div')); - } - - for (var d = 1; d <= daysInMonth; d++) { - var btn = document.createElement('button'); - btn.type = 'button'; - btn.textContent = d; - btn.className = 'cal-day'; - - if (d === selD && month === selM && year === selY) { - btn.classList.add('cal-day-selected'); - } - - btn.dataset.date = year + '-' - + String(month + 1).padStart(2, '0') + '-' - + String(d).padStart(2, '0'); - - btn.addEventListener('click', (function (b, r) { - return function () { - var parts = b.dataset.date.split('-'); - r.dataset.selYear = parts[0]; - r.dataset.selMonth = parseInt(parts[1], 10) - 1; - r.dataset.selDay = parseInt(parts[2], 10); - r.querySelectorAll('.cal-day').forEach(function (el) { - el.classList.remove('cal-day-selected'); - }); - b.classList.add('cal-day-selected'); - r.querySelector('.cal-hidden-input').value = b.dataset.date; - r.dispatchEvent(new CustomEvent('calendarChange', { - detail: { date: b.dataset.date }, - bubbles: true - })); - }; - })(btn, root)); - - grid.appendChild(btn); - } - - } else if (view === 'months') { - grid.style.gridTemplateColumns = 'repeat(3, minmax(0, 1fr))'; - - MONTHS.forEach(function (name, i) { - var btn = document.createElement('button'); - btn.type = 'button'; - btn.textContent = name.slice(0, 3); - btn.className = 'cal-view-btn' + (i === month ? ' cal-view-btn-selected' : ''); - btn.addEventListener('click', function () { - root.dataset.month = i; - root.dataset.view = 'days'; - renderCalendar(root); - }); - grid.appendChild(btn); - }); - - } else { // years - var decadeStart = Math.floor(year / 12) * 12; - grid.style.gridTemplateColumns = 'repeat(3, minmax(0, 1fr))'; - - for (var yi = 0; yi < 12; yi++) { - (function (y) { - var btn = document.createElement('button'); - btn.type = 'button'; - btn.textContent = y; - btn.className = 'cal-view-btn' + (y === year ? ' cal-view-btn-selected' : ''); - btn.addEventListener('click', function () { - root.dataset.year = y; - root.dataset.view = 'months'; - renderCalendar(root); - }); - grid.appendChild(btn); - })(decadeStart + yi); - } - } - } - - function initCalendar(root) { - root.querySelector('.cal-prev').addEventListener('click', function () { - var view = root.dataset.view || 'days'; - var m = parseInt(root.dataset.month, 10); - var y = parseInt(root.dataset.year, 10); - if (view === 'days') { - if (m === 0) { m = 11; y--; } else { m--; } - root.dataset.month = m; - root.dataset.year = y; - } else if (view === 'months') { - root.dataset.year = y - 1; - } else { // years - root.dataset.year = Math.floor(y / 12) * 12 - 12; - } - renderCalendar(root); - }); - - root.querySelector('.cal-next').addEventListener('click', function () { - var view = root.dataset.view || 'days'; - var m = parseInt(root.dataset.month, 10); - var y = parseInt(root.dataset.year, 10); - if (view === 'days') { - if (m === 11) { m = 0; y++; } else { m++; } - root.dataset.month = m; - root.dataset.year = y; - } else if (view === 'months') { - root.dataset.year = y + 1; - } else { // years - root.dataset.year = Math.floor(y / 12) * 12 + 12; - } - renderCalendar(root); - }); - - root.querySelector('.cal-month-label').addEventListener('click', function () { - var view = root.dataset.view || 'days'; - if (view === 'days') root.dataset.view = 'months'; - else if (view === 'months') root.dataset.view = 'years'; - // already at years — nothing deeper - renderCalendar(root); - }); - - renderCalendar(root); - } - - // Initialise all calendars on page load, and again after any htmx swap - function initAll() { - document.querySelectorAll('.calendar-root').forEach(initCalendar); - } - - document.addEventListener('DOMContentLoaded', initAll); - document.addEventListener('htmx:afterSwap', initAll); -})(); - - -// ── CalendarRange ───────────────────────────────────────────────────────── - -(function () { - var MONTHS = [ - 'January', 'February', 'March', 'April', 'May', 'June', - 'July', 'August', 'September', 'October', 'November', 'December' - ]; - - function cmpDate(a, b) { return a < b ? -1 : a > b ? 1 : 0; } - - function isBetween(d, start, end) { - return cmpDate(d, start) > 0 && cmpDate(d, end) < 0; - } - - function toDateStr(year, month, day) { - return year + '-' - + String(month + 1).padStart(2, '0') + '-' - + String(day).padStart(2, '0'); - } - - function updateLabel(root) { - var lbl = root.querySelector('.calr-label'); - if (!lbl) return; - var start = root.dataset.start; - var end = root.dataset.end; - if (start && end) { lbl.textContent = start + ' → ' + end; return; } - if (start) { lbl.textContent = start + ' → pick end date'; return; } - lbl.textContent = ''; - } - - // Only updates CSS classes on already-rendered buttons — no DOM destruction. - function updateHoverClasses(root, hoverDate) { - var start = root.dataset.start; - var end = root.dataset.end; - var rangeEnd = (start && !end && hoverDate && cmpDate(hoverDate, start) >= 0) - ? hoverDate : end; - - root.querySelectorAll('.calr-day').forEach(function (btn) { - var ds = btn.dataset.date; - var isStart = !!(start && ds === start); - var isEnd = !!(end && ds === end); - var isHoverEnd = !!(!end && start && hoverDate && ds === hoverDate - && cmpDate(hoverDate, start) > 0); - var isMid = !!(start && rangeEnd && isBetween(ds, start, rangeEnd)); - - btn.classList.remove('calr-day-start', 'calr-day-end', 'calr-day-mid', 'calr-day-plain'); - if (isStart) btn.classList.add('calr-day-start'); - if (isEnd || isHoverEnd) btn.classList.add('calr-day-end'); - if (isMid) btn.classList.add('calr-day-mid'); - if (!isStart && !isEnd && !isHoverEnd && !isMid) btn.classList.add('calr-day-plain'); - }); - } - - // Full re-render of the grid. Called on mount, click, and view changes. - function renderRange(root) { - var view = root.dataset.view || 'days'; - var year = parseInt(root.dataset.year, 10); - var month = parseInt(root.dataset.month, 10); - var start = root.dataset.start || ''; - var end = root.dataset.end || ''; - - var labelBtn = root.querySelector('.calr-month-label'); - var grid = root.querySelector('.calr-grid'); - var dowRow = root.querySelector('.cal-dow-row'); - - // ── Update header label ── - if (view === 'days') { - labelBtn.textContent = MONTHS[month] + ' ' + year; - } else if (view === 'months') { - labelBtn.textContent = year; - } else { // years - var ds = Math.floor(year / 12) * 12; - labelBtn.textContent = ds + ' – ' + (ds + 11); - } - - if (dowRow) dowRow.style.display = view === 'days' ? '' : 'none'; - - grid.innerHTML = ''; - - // ── Clear event handlers (will be reassigned per view below) ── - grid.onmouseover = null; - grid.onmouseleave = null; - - if (view === 'days') { - grid.style.gridTemplateColumns = ''; - - var firstDay = new Date(year, month, 1).getDay(); - var daysInMonth = new Date(year, month + 1, 0).getDate(); - - for (var i = 0; i < firstDay; i++) { - grid.appendChild(document.createElement('div')); - } - - for (var d = 1; d <= daysInMonth; d++) { - var dateStr = toDateStr(year, month, d); - var btn = document.createElement('button'); - btn.type = 'button'; - btn.textContent = d; - btn.dataset.date = dateStr; - - var isStart = start && dateStr === start; - var isEnd = end && dateStr === end; - var isMid = start && end && isBetween(dateStr, start, end); - var cls = 'calr-day'; - if (isStart) cls += ' calr-day-start'; - else if (isEnd) cls += ' calr-day-end'; - else if (isMid) cls += ' calr-day-mid'; - else cls += ' calr-day-plain'; - btn.className = cls; - - grid.appendChild(btn); - } - - // Click: update state → full re-render - grid.onclick = function (e) { - var btn = e.target.closest('.calr-day'); - if (!btn) return; - var ds = btn.dataset.date; - var s = root.dataset.start; - var en = root.dataset.end; - - if (!s || (s && en)) { - root.dataset.start = ds; - root.dataset.end = ''; - } else { - if (cmpDate(ds, s) > 0) { - root.dataset.end = ds; - } else if (cmpDate(ds, s) < 0) { - root.dataset.start = ds; - root.dataset.end = ''; - } else { - root.dataset.start = ''; - root.dataset.end = ''; - } - } - - root.querySelector('.calr-hidden-start').value = root.dataset.start; - root.querySelector('.calr-hidden-end').value = root.dataset.end; - root.dispatchEvent(new CustomEvent('rangeChange', { - detail: { start: root.dataset.start, end: root.dataset.end }, - bubbles: true - })); - - renderRange(root); - updateLabel(root); - }; - - grid.onmouseover = function (e) { - var btn = e.target.closest('.calr-day'); - if (!btn) return; - updateHoverClasses(root, btn.dataset.date); - }; - - grid.onmouseleave = function () { - updateHoverClasses(root, null); - }; - - } else if (view === 'months') { - grid.style.gridTemplateColumns = 'repeat(3, minmax(0, 1fr))'; - - MONTHS.forEach(function (name, i) { - var btn = document.createElement('button'); - btn.type = 'button'; - btn.textContent = name.slice(0, 3); - btn.className = 'cal-view-btn' + (i === month ? ' cal-view-btn-selected' : ''); - btn.addEventListener('click', function () { - root.dataset.month = i; - root.dataset.view = 'days'; - renderRange(root); - }); - grid.appendChild(btn); - }); - - } else { // years - var decadeStart = Math.floor(year / 12) * 12; - grid.style.gridTemplateColumns = 'repeat(3, minmax(0, 1fr))'; - - for (var yi = 0; yi < 12; yi++) { - (function (y) { - var btn = document.createElement('button'); - btn.type = 'button'; - btn.textContent = y; - btn.className = 'cal-view-btn' + (y === year ? ' cal-view-btn-selected' : ''); - btn.addEventListener('click', function () { - root.dataset.year = y; - root.dataset.view = 'months'; - renderRange(root); - }); - grid.appendChild(btn); - })(decadeStart + yi); - } - } - } - - function initCalendarRange(root) { - root.querySelector('.calr-prev').addEventListener('click', function () { - var view = root.dataset.view || 'days'; - var m = parseInt(root.dataset.month, 10); - var y = parseInt(root.dataset.year, 10); - if (view === 'days') { - if (m === 0) { m = 11; y--; } else { m--; } - root.dataset.month = m; - root.dataset.year = y; - } else if (view === 'months') { - root.dataset.year = y - 1; - } else { // years - root.dataset.year = Math.floor(y / 12) * 12 - 12; - } - renderRange(root); - }); - - root.querySelector('.calr-next').addEventListener('click', function () { - var view = root.dataset.view || 'days'; - var m = parseInt(root.dataset.month, 10); - var y = parseInt(root.dataset.year, 10); - if (view === 'days') { - if (m === 11) { m = 0; y++; } else { m++; } - root.dataset.month = m; - root.dataset.year = y; - } else if (view === 'months') { - root.dataset.year = y + 1; - } else { // years - root.dataset.year = Math.floor(y / 12) * 12 + 12; - } - renderRange(root); - }); - - root.querySelector('.calr-month-label').addEventListener('click', function () { - var view = root.dataset.view || 'days'; - if (view === 'days') root.dataset.view = 'months'; - else if (view === 'months') root.dataset.view = 'years'; - renderRange(root); - }); - - renderRange(root); - updateLabel(root); - } - - function initAll() { - document.querySelectorAll('.calr-root').forEach(initCalendarRange); - } - - document.addEventListener('DOMContentLoaded', initAll); - document.addEventListener('htmx:afterSwap', initAll); -})(); - - -// ── TimePicker ──────────────────────────────────────────────────────────── - -(function () { - function syncTime(root) { - var h = parseInt(root.querySelector('.timepicker-hour').value, 10) || 0; - var m = parseInt(root.querySelector('.timepicker-minute').value, 10) || 0; - var use12h = root.dataset.use12h === 'true'; - var h24 = h; - - if (use12h) { - var ampmEl = root.querySelector('.timepicker-ampm'); - var ampm = ampmEl ? ampmEl.value : 'AM'; - if (ampm === 'PM') { h24 = h === 12 ? 12 : h + 12; } - else { h24 = h === 12 ? 0 : h; } - } - - root.querySelector('.timepicker-hidden').value = - String(h24).padStart(2, '0') + ':' + String(m).padStart(2, '0'); - } - - function initTimePicker(root) { - var sync = syncTime.bind(null, root); - root.querySelector('.timepicker-hour').addEventListener('input', sync); - root.querySelector('.timepicker-minute').addEventListener('input', sync); - var ampmEl = root.querySelector('.timepicker-ampm'); - if (ampmEl) ampmEl.addEventListener('change', sync); - sync(); - } - - function initAll() { - document.querySelectorAll('.timepicker-root').forEach(initTimePicker); - } - - document.addEventListener('DOMContentLoaded', initAll); - document.addEventListener('htmx:afterSwap', initAll); -})(); - - -// ── Switch ──────────────────────────────────────────────────────────────── - -(function () { - function updateSwitch(input) { - var track = input.parentElement && input.parentElement.querySelector('.switch-track'); - if (!track) return; - var thumb = track.querySelector('.switch-thumb'); - if (input.checked) { - track.classList.add('bg-primary'); - track.classList.remove('bg-input'); - if (thumb) thumb.style.transform = 'translateX(1.375rem)'; - } else { - track.classList.remove('bg-primary'); - track.classList.add('bg-input'); - if (thumb) thumb.style.transform = ''; - } - } - - function initAll() { - document.querySelectorAll('.switch-checkbox').forEach(function (input) { - updateSwitch(input); - if (!input._switchBound) { - input._switchBound = true; - input.addEventListener('change', function () { updateSwitch(input); }); - } - }); - } - - document.addEventListener('DOMContentLoaded', initAll); - document.addEventListener('htmx:afterSwap', initAll); -})(); - - -// ── Tabs ────────────────────────────────────────────────────────────────── - -(function () { - var ACTIVE = 'bg-background text-foreground shadow-sm'; - var INACTIVE = 'text-muted-foreground'; - - function initTabs(root) { - if (root._tabsInitialised) return; - root._tabsInitialised = true; - - var triggers = Array.from(root.querySelectorAll('.tabs-trigger')); - var panels = Array.from(root.querySelectorAll('.tabs-panel')); - - function activate(idx) { - triggers.forEach(function (t, i) { - var active = i === idx; - t.setAttribute('aria-selected', String(active)); - ACTIVE.split(' ').forEach(function (c) { t.classList.toggle(c, active); }); - INACTIVE.split(' ').forEach(function (c) { t.classList.toggle(c, !active); }); - }); - panels.forEach(function (p, i) { p.hidden = i !== idx; }); - } - - triggers.forEach(function (trigger, idx) { - trigger.addEventListener('click', function () { activate(idx); }); - }); - activate(0); - } - - function initAll() { - document.querySelectorAll('.tabs-root').forEach(initTabs); - } - - document.addEventListener('DOMContentLoaded', initAll); - document.addEventListener('htmx:afterSwap', initAll); -})(); - - -// ── Accordion ───────────────────────────────────────────────────────────── - -(function () { - function initAccordion(root) { - if (root._accInitialised) return; - root._accInitialised = true; - - root.querySelectorAll('.accordion-trigger').forEach(function (trigger) { - trigger.addEventListener('click', function () { - var expanded = trigger.getAttribute('aria-expanded') === 'true'; - var panel = trigger.closest('.accordion-item').querySelector('.accordion-panel'); - if (expanded) { - trigger.setAttribute('aria-expanded', 'false'); - panel.style.height = '0'; - panel.style.opacity = '0'; - } else { - trigger.setAttribute('aria-expanded', 'true'); - panel.style.height = panel.scrollHeight + 'px'; - panel.style.opacity = '1'; - } - var chevron = trigger.querySelector('.accordion-chevron'); - if (chevron) chevron.style.transform = expanded ? '' : 'rotate(180deg)'; - }); - }); - } - - function initAll() { - document.querySelectorAll('.accordion-root').forEach(initAccordion); - } - - document.addEventListener('DOMContentLoaded', initAll); - document.addEventListener('htmx:afterSwap', initAll); -})(); - - -// ── Toast ───────────────────────────────────────────────────────────────── - -(function () { - function dismissToast(toast) { - toast.style.opacity = '0'; - toast.style.transform = 'translateY(0.5rem)'; - setTimeout(function () { if (toast.parentNode) toast.parentNode.removeChild(toast); }, 300); - } - - window.showToast = function (options) { - var viewport = document.querySelector('.toast-viewport'); - if (!viewport) return; - - var title = options.title || ''; - var description = options.description || ''; - var variant = options.variant || 'default'; - var duration = typeof options.duration === 'number' ? options.duration : 5000; - - var variantCls = variant === 'destructive' ? ' border-destructive text-destructive' : ''; - - var toast = document.createElement('div'); - toast.setAttribute('role', 'alert'); - toast.className = 'toast-item pointer-events-auto relative flex w-full items-center justify-between' + - ' space-x-4 overflow-hidden rounded-md border border-border bg-background p-4' + - ' shadow-lg transition-all duration-300 opacity-0 translate-y-2' + variantCls; - - toast.innerHTML = - '
' + - (title ? '
' + title + '
' : '') + - (description ? '
' + description + '
' : '') + - '
' + - ''; - - viewport.appendChild(toast); - - requestAnimationFrame(function () { - toast.classList.remove('opacity-0', 'translate-y-2'); - }); - - var timer = duration > 0 ? setTimeout(function () { dismissToast(toast); }, duration) : null; - - toast.querySelector('.toast-close').addEventListener('click', function () { - if (timer) clearTimeout(timer); - dismissToast(toast); - }); - }; - - // Delegate clicks on server-rendered toast close buttons - document.addEventListener('click', function (e) { - var btn = e.target.closest('.toast-close'); - if (btn) { - var item = btn.closest('.toast-item'); - if (item) dismissToast(item); - } - }); - - document.addEventListener('keydown', function (e) { - var trigger = e.target.closest('.dropdown-trigger'); - if (!trigger) return; - if (e.key !== 'Enter' && e.key !== ' ') return; - - e.preventDefault(); - var root = trigger.closest('.dropdown-root'); - var content = root && root.querySelector('.dropdown-content'); - var isOpen = content && !content.classList.contains('hidden'); - - document.querySelectorAll('.dropdown-root').forEach(closeDropdown); - if (!isOpen && root) openDropdown(root); - }); -})(); - - -// ── Dialog ──────────────────────────────────────────────────────────────── - -(function () { - document.addEventListener('click', function (e) { - // Open - var openBtn = e.target.closest('[data-dialog-open]'); - if (openBtn) { - var dlg = document.getElementById('dlg-' + openBtn.dataset.dialogOpen); - if (dlg && dlg.showModal) dlg.showModal(); - } - // Close via button - var closeBtn = e.target.closest('[data-dialog-close], .dialog-close'); - if (closeBtn) { - var dlg = closeBtn.closest('dialog'); - if (dlg) dlg.close(); - } - }); - - // Close on backdrop click - document.addEventListener('click', function (e) { - if (e.target && e.target.tagName === 'DIALOG') { - e.target.close(); - } - }); -})(); - - -// ── DropdownMenu ────────────────────────────────────────────────────────── - -(function () { - function closeDropdown(root) { - var trigger = root.querySelector('.dropdown-trigger'); - var content = root.querySelector('.dropdown-content'); - if (!trigger || !content) return; - content.classList.add('hidden'); - trigger.setAttribute('aria-expanded', 'false'); - } - - function openDropdown(root) { - var trigger = root.querySelector('.dropdown-trigger'); - var content = root.querySelector('.dropdown-content'); - if (!trigger || !content) return; - content.classList.remove('hidden'); - trigger.setAttribute('aria-expanded', 'true'); - } - - document.addEventListener('click', function (e) { - var trigger = e.target.closest('.dropdown-trigger'); - if (trigger) { - var root = trigger.closest('.dropdown-root'); - var content = root && root.querySelector('.dropdown-content'); - var isOpen = content && !content.classList.contains('hidden'); - - document.querySelectorAll('.dropdown-root').forEach(closeDropdown); - if (!isOpen && root) openDropdown(root); - return; - } - - var insideMenu = e.target.closest('.dropdown-content'); - if (insideMenu) { - var rootInMenu = insideMenu.closest('.dropdown-root'); - if (e.target.closest('a, button') && rootInMenu) { - closeDropdown(rootInMenu); - } - return; - } - - document.querySelectorAll('.dropdown-root').forEach(function (root) { - if (!root.contains(e.target)) closeDropdown(root); - }); - }); -})(); - diff --git a/Htmx.ApiDemo/publish-test/wwwroot/js/components.js.br b/Htmx.ApiDemo/publish-test/wwwroot/js/components.js.br deleted file mode 100644 index 3790dd4..0000000 Binary files a/Htmx.ApiDemo/publish-test/wwwroot/js/components.js.br and /dev/null differ diff --git a/Htmx.ApiDemo/publish-test/wwwroot/js/components.js.gz b/Htmx.ApiDemo/publish-test/wwwroot/js/components.js.gz deleted file mode 100644 index b0a9ce8..0000000 Binary files a/Htmx.ApiDemo/publish-test/wwwroot/js/components.js.gz and /dev/null differ diff --git a/debug-secrets.ps1 b/debug-secrets.ps1 deleted file mode 100644 index e69de29..0000000