From 5c73469b07d512f6282a99987be29ba1d9b8ba0d Mon Sep 17 00:00:00 2001 From: Magnus Ahlberg Date: Tue, 27 Oct 2026 14:27:21 +0100 Subject: [PATCH] New logo and modernized documentation site Replace the logo with the lambda lattice mark (petrol and amber) across the README logo, NuGet package icon and site favicons. Rework the docs site on the same Blazor/TabBlazor stack: top bar with dark mode, grouped sidebar, on-page table of contents, previous/next links, copyable code blocks with GraphQL, JSON and shell highlighting, a new landing page and social sharing card. Also restore deep links on GitHub Pages, which the 404 redirect never decoded. --- Logo.svg | 45 +- docs/Linq2GraphQL.Docs/App.razor | 8 +- .../Components/GenerateClient.razor | 10 +- docs/Linq2GraphQL.Docs/Icons/Icons.cs | 20 + docs/Linq2GraphQL.Docs/Pages/Index.razor | 330 ++--- .../Pages/SelectingFields.razor | 8 +- docs/Linq2GraphQL.Docs/Shared/BrandMark.razor | 24 + docs/Linq2GraphQL.Docs/Shared/CodeBlock.razor | 48 +- .../Shared/CopyCommand.razor | 25 + docs/Linq2GraphQL.Docs/Shared/DocsNav.cs | 45 + .../Shared/DocsSidebar.razor | 24 + .../Linq2GraphQL.Docs/Shared/MainLayout.razor | 115 +- .../Shared/MainLayout.razor.cs | 111 ++ .../Shared/MainLayout.razor.css | 81 -- .../Shared/MainNavigation.razor | 52 - .../Shared/SyntaxHighlighter.cs | 56 + .../wwwroot/apple-touch-icon.png | Bin 4048 -> 28502 bytes docs/Linq2GraphQL.Docs/wwwroot/css/app.css | 1290 +++++++++++++++-- .../wwwroot/favicon-16x16.png | Bin 543 -> 1851 bytes .../wwwroot/favicon-32x32.png | Bin 875 -> 4870 bytes docs/Linq2GraphQL.Docs/wwwroot/favicon.ico | Bin 2683 -> 5430 bytes .../wwwroot/img/logo-tile.svg | 22 + docs/Linq2GraphQL.Docs/wwwroot/img/logo.svg | 45 +- .../wwwroot/img/og-image.png | Bin 0 -> 57788 bytes docs/Linq2GraphQL.Docs/wwwroot/index.html | 56 +- docs/Linq2GraphQL.Docs/wwwroot/js/docs.js | 76 + icon.png | Bin 3173 -> 23230 bytes 27 files changed, 2022 insertions(+), 469 deletions(-) create mode 100644 docs/Linq2GraphQL.Docs/Shared/BrandMark.razor create mode 100644 docs/Linq2GraphQL.Docs/Shared/CopyCommand.razor create mode 100644 docs/Linq2GraphQL.Docs/Shared/DocsNav.cs create mode 100644 docs/Linq2GraphQL.Docs/Shared/DocsSidebar.razor create mode 100644 docs/Linq2GraphQL.Docs/Shared/MainLayout.razor.cs delete mode 100644 docs/Linq2GraphQL.Docs/Shared/MainLayout.razor.css delete mode 100644 docs/Linq2GraphQL.Docs/Shared/MainNavigation.razor create mode 100644 docs/Linq2GraphQL.Docs/Shared/SyntaxHighlighter.cs create mode 100644 docs/Linq2GraphQL.Docs/wwwroot/img/logo-tile.svg create mode 100644 docs/Linq2GraphQL.Docs/wwwroot/img/og-image.png create mode 100644 docs/Linq2GraphQL.Docs/wwwroot/js/docs.js diff --git a/Logo.svg b/Logo.svg index 3a34881b..4386c2a2 100644 --- a/Logo.svg +++ b/Logo.svg @@ -1,22 +1,31 @@ - + Linq2GraphQL - - - + + + + + + - - - - - - - - - - - - - - + + + + + + + + + diff --git a/docs/Linq2GraphQL.Docs/App.razor b/docs/Linq2GraphQL.Docs/App.razor index 54e55066..b1aad030 100644 --- a/docs/Linq2GraphQL.Docs/App.razor +++ b/docs/Linq2GraphQL.Docs/App.razor @@ -4,9 +4,13 @@ - @* Not found *@ + Page not found - Linq2GraphQL -

Sorry, there's nothing at this address.

+

Page not found

+ diff --git a/docs/Linq2GraphQL.Docs/Components/GenerateClient.razor b/docs/Linq2GraphQL.Docs/Components/GenerateClient.razor index d8bb2537..b3bde0df 100644 --- a/docs/Linq2GraphQL.Docs/Components/GenerateClient.razor +++ b/docs/Linq2GraphQL.Docs/Components/GenerateClient.razor @@ -1,8 +1,14 @@ @page "/generate-client" -

Generate Client

+Online generator - Linq2GraphQL -
+

Online generator

+

+ Generate a client in the browser from a GraphQL endpoint or a schema, without installing anything. The + result is the same code the generator writes, downloaded as a zip file. +

+ +
diff --git a/docs/Linq2GraphQL.Docs/Icons/Icons.cs b/docs/Linq2GraphQL.Docs/Icons/Icons.cs index ab75396c..ce27d549 100644 --- a/docs/Linq2GraphQL.Docs/Icons/Icons.cs +++ b/docs/Linq2GraphQL.Docs/Icons/Icons.cs @@ -10,5 +10,25 @@ public static class Icons public static IIconType Terminal_2 => new TablerIcon(@""); public static IIconType Book => new TablerIcon(@""); public static IIconType Copy => new TablerIcon(@""); + public static IIconType Sun => new TablerIcon(@""); + public static IIconType Moon => new TablerIcon(@""); + public static IIconType BrandGithub => new TablerIcon(@""); + public static IIconType Menu => new TablerIcon(@""); + public static IIconType X => new TablerIcon(@""); + public static IIconType ArrowLeft => new TablerIcon(@""); + public static IIconType ArrowRight => new TablerIcon(@""); + public static IIconType Check => new TablerIcon(@""); + public static IIconType Pencil => new TablerIcon(@""); + public static IIconType Package => new TablerIcon(@""); + public static IIconType FileCode => new TablerIcon(@""); + public static IIconType Filter => new TablerIcon(@""); + public static IIconType Broadcast => new TablerIcon(@""); + public static IIconType ChevronsRight => new TablerIcon(@""); + public static IIconType AlertTriangle => new TablerIcon(@""); + public static IIconType Key => new TablerIcon(@""); + public static IIconType Hierarchy => new TablerIcon(@""); + public static IIconType CircleDashed => new TablerIcon(@""); + public static IIconType Robot => new TablerIcon(@""); + public static IIconType ExternalLink => new TablerIcon(@""); } } diff --git a/docs/Linq2GraphQL.Docs/Pages/Index.razor b/docs/Linq2GraphQL.Docs/Pages/Index.razor index 423d5283..85ac602e 100644 --- a/docs/Linq2GraphQL.Docs/Pages/Index.razor +++ b/docs/Linq2GraphQL.Docs/Pages/Index.razor @@ -2,61 +2,74 @@ Linq2GraphQL - typed GraphQL for .NET -
- -

Linq2GraphQL

-

- Query any GraphQL API from C# with LINQ. Generate a strongly-typed client from the schema, write - your queries as lambdas the compiler checks, and get typed objects back. -

-
- Get started - Generate a client online - GitHub +
+
+ Typed GraphQL client for .NET +

Query GraphQL
with LINQ.

+

+ Generate a strongly-typed client from any GraphQL schema, write your queries as lambdas the + compiler checks, and get typed objects back. +

+ +
+ +
+
-
- - Latest stable version on NuGet - - - Latest prerelease version on NuGet - +
+ +
-
-

What is Linq2GraphQL?

-

- GraphQL lets a client ask for exactly the fields it needs. From C# that usually means writing query - strings by hand, keeping them in sync with the schema, and mapping the JSON that comes back onto - classes that slowly drift from what the server actually returns. Mistakes show up at runtime, as - errors from the server or as properties that are silently null. -

-

- Linq2GraphQL removes that gap. A generator reads the schema and writes a C# client for it: a class - for every type, input and enum, and a method for every query, mutation and subscription, with the - arguments as parameters. You describe what to fetch with ordinary lambdas, the library turns them - into GraphQL, sends the request, and deserializes the response into the same generated types. If a - field is renamed or removed, regenerate the client and the compiler tells you everywhere it was used. -

+
+
+

What is Linq2GraphQL?

+
+
+

+ GraphQL lets a client ask for exactly the fields it needs. From C# that usually means writing query + strings by hand, keeping them in sync with the schema, and mapping the JSON that comes back onto + classes that slowly drift from what the server actually returns. Mistakes show up at runtime, as + errors from the server or as properties that are silently null. +

+

+ Linq2GraphQL removes that gap. A generator reads the schema and writes a C# client for it: a class + for every type, input and enum, and a method for every query, mutation and subscription, with the + arguments as parameters. You describe what to fetch with ordinary lambdas, the library turns them + into GraphQL, sends the request, and deserializes the response into the same generated types. If a + field is renamed or removed, regenerate the client and the compiler tells you everywhere it was used. +

+
-
-

A first look

-

- This query asks the public Star Wars API - for its first three films and the characters in each. The C# on the left becomes the GraphQL on the - right; you never write the GraphQL yourself. -

-
-
- -
-
- -
+
+
+

A first look

+

+ This query asks the public Star Wars API + for its first three films and the characters in each. The C# on the left becomes the GraphQL on the + right; you never write the GraphQL yourself. +

+
+
+ +
-

+

films is a List<Film>. The scalar fields of a type, like title and releaseDate, are included automatically. Related objects, like the characters here, and lists of scalars are fetched only when you Include them, so a query @@ -64,140 +77,113 @@ because the field takes arguments of its own. Arguments are always sent as variables, never pasted into the query text.

-
- -
-

Only the fields you ask for

-

- Returning whole objects, as above, is just the default. Project the result in Select and the - query asks for the fields your projection reads and nothing else, however deep they are: -

-
-
- -
-
- -
-
-

- Project into an anonymous type, a class of your own or a single value. +

+ Returning whole objects is just the default. Project the result in Select, as in the query + at the top of this page, and the query asks for the fields your projection reads and nothing else, + however deep they are. Project into an anonymous type, a class of your own or a single value; Selecting fields shows each of them with the GraphQL it sends.

-
-

How it works

-
-
-
-
-
1
-

Generate

-

- Point the Linq2GraphQL generator at a GraphQL endpoint or an SDL - schema file, or use the online generator. You get plain C# - source files to add to your project. -

-
-
+
+
+

How it works

+
+
+
+
1
+

Generate

+

+ Point the Linq2GraphQL generator at a GraphQL endpoint or an SDL + schema file, or use the online generator. You get plain C# + source files to add to your project. +

-
-
-
-
2
-

Query

-

- Pick an operation on Query, Mutation or Subscription, - then shape the result with Include and Select. Arguments are - method parameters and are sent as GraphQL variables. -

-
-
+
+
2
+

Query

+

+ Pick an operation on Query, Mutation or Subscription, + then shape the result with Include and Select. Arguments are + method parameters and are sent as GraphQL variables. +

-
-
-
-
3
-

Execute

-

- ExecuteAsync sends the request through an HttpClient you configure - in dependency injection, and returns typed objects, or a result with the errors if you - would rather not handle exceptions. -

-
-
+
+
3
+

Execute

+

+ ExecuteAsync sends the request through an HttpClient you configure + in dependency injection, and returns typed objects, or a result with the errors if you + would rather not handle exceptions. +

-
-

Features

-
+
+
+

Features

+
+
@foreach (var feature in features) { -
-
-
-

@feature.Title

-

@feature.Text

- @if (feature.Href != null) - { - Read more - } -
+ @if (feature.Href != null) + { + + +

@feature.Title

+

@feature.Text

+ Read more +
+ } + else + { +
+ +

@feature.Title

+

@feature.Text

-
+ } }
-
-

Packages

-

- Linq2GraphQL is split into a generator you run at design time and runtime packages your generated - client depends on. All of them target .NET 10. -

-
- - - - - - - - - @foreach (var package in packages) - { - - - - - } - -
PackageWhat it is for
- @package.Id - @package.Text
+
+
+

Packages

+

+ Linq2GraphQL is split into a generator you run at design time and runtime packages your generated + client depends on. All of them target .NET 10. +

+
+
+ @foreach (var package in packages) + { + + + + @package.Id +

@package.Text

+
+
+ }
-
-

Where to next

- +
+
+
+

Ready to try it?

+

Generate a client, register it and run a first query in four steps.

+
+ Get started +
+

+ Found a bug or missing a feature? Open an issue. + Linq2GraphQL is open source under the MIT license and inspired by + GraphQLinq, thank you + Giorgi. +

@code { @@ -284,31 +270,31 @@ } """; - private record Feature(string Title, string Text, string Href = null); + private record Feature(IIconType Icon, string Title, string Text, string Href = null); private readonly Feature[] features = [ - new("Generated from your schema", + new(Icons.FileCode, "Generated from your schema", "Generate from a live endpoint (with a bearer token if it needs one), an SDL file such as one exported from HotChocolate, or an introspection result. Types, inputs, enums, interfaces and the client itself are generated, and the client and its operations come with interfaces you can mock in tests."), - new("Include and Select", + new(Icons.Filter, "Include and Select", "Fetch whole objects, with scalar fields included automatically and related objects added with Include, or project into an anonymous type or a class of your own and fetch only the fields the projection reads.", "selecting-fields"), - new("Queries, mutations and subscriptions", + new(Icons.Broadcast, "Queries, mutations and subscriptions", "Mutations take generated input classes. Subscriptions are IObservable streams over graphql-ws WebSockets or server-sent events.", "subscriptions"), - new("Cursor paging", + new(Icons.ChevronsRight, "Cursor paging", "AsPager turns a Relay style connection into next and previous page calls, and GetAllPagesAsync streams every page as an IAsyncEnumerable.", "paging"), - new("Errors your way", + new(Icons.AlertTriangle, "Errors your way", "ExecuteAsync throws a GraphQueryExecutionException with the server's errors, classified into codes like Authentication or Validation. ExecuteWithResultAsync returns the data and the errors side by side instead.", "error-handling"), - new("Headers and access tokens", + new(Icons.Key, "Headers and access tokens", "Set headers for every request in the options, or derive a client per user with WithAccessToken for on-behalf-of tokens. Derived clients share the connection and are cheap to create."), - new("Interfaces and unions", + new(Icons.Hierarchy, "Interfaces and unions", "Results are deserialized into the concrete generated type, and the fields of a specific implementation can be included on demand."), - new("Nullable clients", + new(Icons.CircleDashed, "Nullable clients", "Generate a client annotated for nullable reference types, so the compiler knows which fields the schema allows to be null, or a classic one without annotations."), - new("Agent mode (preview)", + new(Icons.Robot, "Agent mode (preview)", "Linq2GraphQL.Client.AI turns a client into tools for Microsoft.Extensions.AI, so an AI agent can query your API in GraphQL, limited to the operations you allow and validated before anything is sent.", "agent-mode") ]; diff --git a/docs/Linq2GraphQL.Docs/Pages/SelectingFields.razor b/docs/Linq2GraphQL.Docs/Pages/SelectingFields.razor index 3ea8c399..e6bb26fa 100644 --- a/docs/Linq2GraphQL.Docs/Pages/SelectingFields.razor +++ b/docs/Linq2GraphQL.Docs/Pages/SelectingFields.razor @@ -83,7 +83,7 @@

Pick a few fields

Project into an anonymous type with the fields you want:

-
+
@@ -101,7 +101,7 @@ CharacterConnection(null, 3) asks for the first three characters of each film.

-
+
@@ -116,7 +116,7 @@

Select a single value

A projection doesn't have to be an object. Select one field and you get a sequence of its values:

-
+
@@ -129,7 +129,7 @@ items in it:

-
+
diff --git a/docs/Linq2GraphQL.Docs/Shared/BrandMark.razor b/docs/Linq2GraphQL.Docs/Shared/BrandMark.razor new file mode 100644 index 00000000..75cd79b4 --- /dev/null +++ b/docs/Linq2GraphQL.Docs/Shared/BrandMark.razor @@ -0,0 +1,24 @@ + + +@code { + [Parameter] public int Size { get; set; } = 32; + + [Parameter] public string Class { get; set; } +} diff --git a/docs/Linq2GraphQL.Docs/Shared/CodeBlock.razor b/docs/Linq2GraphQL.Docs/Shared/CodeBlock.razor index 29cf01eb..512e1dbe 100644 --- a/docs/Linq2GraphQL.Docs/Shared/CodeBlock.razor +++ b/docs/Linq2GraphQL.Docs/Shared/CodeBlock.razor @@ -1,29 +1,43 @@ -@using ColorCode +@using TabBlazor.Services +@inject TablerService TablerService -@* A code sample. C# is syntax highlighted with ColorCode, anything else is shown as plain text. *@ -
- @if (!string.IsNullOrEmpty(Title)) - { -
@Title
- } - @if (Language == "csharp") - { - @((MarkupString)new HtmlClassFormatter().GetHtmlString(Text, Languages.CSharp)) - } - else - { -
@Text
- } -
+
+
+ @SyntaxHighlighter.Label(Language) + @if (!string.IsNullOrEmpty(Title)) + { + @Title + } + +
+
+ @((MarkupString)SyntaxHighlighter.ToHtml(Text, Language)) +
+
@code { + private bool copied; + private string Text => Code.Trim('\r', '\n').ReplaceLineEndings("\n"); - /// "csharp" for highlighting; any other value renders plain text. + /// csharp, graphql, json, shell or xml are highlighted; any other value renders plain text. [Parameter] public string Language { get; set; } = "csharp"; [Parameter] public string Title { get; set; } /// The code. Pass a raw string literal, Razor would otherwise parse the braces and at signs. [Parameter, EditorRequired] public string Code { get; set; } + + private async Task CopyAsync() + { + await TablerService.CopyToClipboard(Text); + copied = true; + StateHasChanged(); + await Task.Delay(TimeSpan.FromSeconds(2)); + copied = false; + } } diff --git a/docs/Linq2GraphQL.Docs/Shared/CopyCommand.razor b/docs/Linq2GraphQL.Docs/Shared/CopyCommand.razor new file mode 100644 index 00000000..58003fe6 --- /dev/null +++ b/docs/Linq2GraphQL.Docs/Shared/CopyCommand.razor @@ -0,0 +1,25 @@ +@using TabBlazor.Services +@inject TablerService TablerService + +
+ $ + @Command + +
+ +@code { + private bool copied; + + [Parameter, EditorRequired] public string Command { get; set; } + + private async Task CopyAsync() + { + await TablerService.CopyToClipboard(Command); + copied = true; + StateHasChanged(); + await Task.Delay(TimeSpan.FromSeconds(2)); + copied = false; + } +} diff --git a/docs/Linq2GraphQL.Docs/Shared/DocsNav.cs b/docs/Linq2GraphQL.Docs/Shared/DocsNav.cs new file mode 100644 index 00000000..74f6393c --- /dev/null +++ b/docs/Linq2GraphQL.Docs/Shared/DocsNav.cs @@ -0,0 +1,45 @@ +namespace Linq2GraphQL.Docs.Shared; + +public record DocPage(string Href, string Title, string SourceFile); + +public record DocSection(string Title, IReadOnlyList Pages); + +public static class DocsNav +{ + public const string RepositoryUrl = "https://github.com/Linq2GraphQL/Linq2GraphQL.Client"; + public const string NuGetUrl = "https://www.nuget.org/packages/Linq2GraphQL.Client"; + + public static readonly IReadOnlyList Sections = + [ + new("Overview", + [ + new("", "Introduction", "Pages/Index.razor"), + new("getting-started", "Getting started", "Pages/GettingStarted.razor") + ]), + new("Guides", + [ + new("selecting-fields", "Selecting fields", "Pages/SelectingFields.razor"), + new("error-handling", "Error handling", "Pages/ErrorHandling.razor"), + new("paging", "Paging", "Pages/Paging.razor"), + new("batching", "Batching", "Pages/Batching.razor"), + new("subscriptions", "Subscriptions", "Pages/Subscriptions.razor"), + new("agent-mode", "Agent mode", "Pages/AgentMode.razor") + ]), + new("Tools", + [ + new("generator", "Generator reference", "Pages/Generator.razor"), + new("generate-client", "Online generator", "Components/GenerateClient.razor") + ]) + ]; + + public static readonly DocPage[] Pages = Sections.SelectMany(section => section.Pages).ToArray(); + + public static int IndexOf(string relativePath) => + Array.FindIndex(Pages, page => page.Href == NormalizePath(relativePath)); + + public static string NormalizePath(string relativePath) => + relativePath.Split('?', '#')[0].Trim('/'); + + public static string SourceUrl(DocPage page) => + $"{RepositoryUrl}/blob/main/docs/Linq2GraphQL.Docs/{page.SourceFile}"; +} diff --git a/docs/Linq2GraphQL.Docs/Shared/DocsSidebar.razor b/docs/Linq2GraphQL.Docs/Shared/DocsSidebar.razor new file mode 100644 index 00000000..9ff59ae6 --- /dev/null +++ b/docs/Linq2GraphQL.Docs/Shared/DocsSidebar.razor @@ -0,0 +1,24 @@ + + +@code { + [Parameter] public bool Open { get; set; } + + [Parameter] public bool MobileOnly { get; set; } +} diff --git a/docs/Linq2GraphQL.Docs/Shared/MainLayout.razor b/docs/Linq2GraphQL.Docs/Shared/MainLayout.razor index af1844b1..b4a420e5 100644 --- a/docs/Linq2GraphQL.Docs/Shared/MainLayout.razor +++ b/docs/Linq2GraphQL.Docs/Shared/MainLayout.razor @@ -4,14 +4,117 @@ +Skip to content -
- +
+
+ -
-
- @Body + + + Linq2GraphQL + + v@(Version) + + + +
+ + + + + + +
-
+
+ +@if (IsLanding) +{ +
+ +
+ @Body +
+} +else +{ +
+
+ + + +
+
+ @Body +
+ + @if (CurrentPage is not null) + { + + + + } +
+ + +
+} +
+ +
diff --git a/docs/Linq2GraphQL.Docs/Shared/MainLayout.razor.cs b/docs/Linq2GraphQL.Docs/Shared/MainLayout.razor.cs new file mode 100644 index 00000000..5be9fa0f --- /dev/null +++ b/docs/Linq2GraphQL.Docs/Shared/MainLayout.razor.cs @@ -0,0 +1,111 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Routing; +using Microsoft.JSInterop; + +namespace Linq2GraphQL.Docs.Shared; + +public partial class MainLayout : IDisposable +{ + private List headings = []; + private bool menuOpen; + private bool observeHeadingsAfterRender; + private string pendingFragment; + private bool refreshHeadings = true; + private string theme = "light"; + + [Inject] private NavigationManager Navigation { get; set; } + [Inject] private IJSRuntime JS { get; set; } + + private static string Version => ThisAssembly.AssemblyInformationalVersion.Split('+')[0]; + + private string CurrentPath => DocsNav.NormalizePath(Navigation.ToBaseRelativePath(Navigation.Uri)); + + private bool IsLanding => CurrentPath == ""; + + private bool IsGuidePage => !IsLanding && CurrentPath != "generate-client"; + + private DocPage CurrentPage => PageAt(DocsNav.IndexOf(CurrentPath)); + + private DocPage PreviousPage => PageAt(DocsNav.IndexOf(CurrentPath) - 1); + + private DocPage NextPage => PageAt(DocsNav.IndexOf(CurrentPath) is var index and >= 0 ? index + 1 : -1); + + public void Dispose() => Navigation.LocationChanged -= OnLocationChanged; + + protected override void OnInitialized() + { + pendingFragment = FragmentOf(Navigation.Uri); + Navigation.LocationChanged += OnLocationChanged; + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + theme = await JS.InvokeAsync("l2gDocs.getTheme"); + } + + if (refreshHeadings) + { + refreshHeadings = false; + headings = await JS.InvokeAsync>("l2gDocs.readHeadings"); + observeHeadingsAfterRender = true; + StateHasChanged(); + return; + } + + if (observeHeadingsAfterRender) + { + observeHeadingsAfterRender = false; + await JS.InvokeVoidAsync("l2gDocs.observeHeadings"); + if (pendingFragment is not null) + { + await JS.InvokeVoidAsync("l2gDocs.scrollToHeading", pendingFragment); + pendingFragment = null; + } + } + } + + private void OnLocationChanged(object sender, LocationChangedEventArgs e) => + _ = InvokeAsync(async () => + { + menuOpen = false; + pendingFragment = FragmentOf(e.Location); + refreshHeadings = true; + StateHasChanged(); + if (pendingFragment is null) + { + try + { + await JS.InvokeVoidAsync("l2gDocs.scrollToTop"); + } + catch (JSException) + { + } + } + }); + + private async Task ToggleThemeAsync() + { + theme = theme == "dark" ? "light" : "dark"; + await JS.InvokeVoidAsync("l2gDocs.setTheme", theme); + } + + private void ToggleMenu() => menuOpen = !menuOpen; + + private void CloseMenu() => menuOpen = false; + + private async Task ScrollToHeadingAsync(string id) => + await JS.InvokeVoidAsync("l2gDocs.scrollToHeading", id); + + private static DocPage PageAt(int index) => + index >= 0 && index < DocsNav.Pages.Length ? DocsNav.Pages[index] : null; + + private static string FragmentOf(string uri) + { + var hashIndex = uri.IndexOf('#'); + return hashIndex >= 0 && hashIndex < uri.Length - 1 ? uri[(hashIndex + 1)..] : null; + } + + private record Heading(string Id, string Text); +} diff --git a/docs/Linq2GraphQL.Docs/Shared/MainLayout.razor.css b/docs/Linq2GraphQL.Docs/Shared/MainLayout.razor.css deleted file mode 100644 index 01a5066c..00000000 --- a/docs/Linq2GraphQL.Docs/Shared/MainLayout.razor.css +++ /dev/null @@ -1,81 +0,0 @@ -.page { - position: relative; - display: flex; - flex-direction: column; -} - -main { - flex: 1; -} - -.sidebar { - background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); -} - -.top-row { - background-color: #f7f7f7; - border-bottom: 1px solid #d6d5d5; - justify-content: flex-end; - height: 3.5rem; - display: flex; - align-items: center; -} - -.top-row ::deep a, .top-row ::deep .btn-link { - white-space: nowrap; - margin-left: 1.5rem; - text-decoration: none; -} - -.top-row ::deep a:hover, .top-row ::deep .btn-link:hover { - text-decoration: underline; -} - -.top-row ::deep a:first-child { - overflow: hidden; - text-overflow: ellipsis; -} - -@media (max-width: 640.98px) { - .top-row:not(.auth) { - display: none; - } - - .top-row.auth { - justify-content: space-between; - } - - .top-row ::deep a, .top-row ::deep .btn-link { - margin-left: 0; - } -} - -@media (min-width: 641px) { - .page { - flex-direction: row; - } - - .sidebar { - width: 250px; - height: 100vh; - position: sticky; - top: 0; - } - - .top-row { - position: sticky; - top: 0; - z-index: 1; - } - - .top-row.auth ::deep a:first-child { - flex: 1; - text-align: right; - width: 0; - } - - .top-row, article { - padding-left: 2rem !important; - padding-right: 1.5rem !important; - } -} diff --git a/docs/Linq2GraphQL.Docs/Shared/MainNavigation.razor b/docs/Linq2GraphQL.Docs/Shared/MainNavigation.razor deleted file mode 100644 index a0c49111..00000000 --- a/docs/Linq2GraphQL.Docs/Shared/MainNavigation.razor +++ /dev/null @@ -1,52 +0,0 @@ - - - - Linq2GraphQL -

- Linq2GraphQL -
Version: @ThisAssembly.AssemblyFileVersion
-

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\ No newline at end of file diff --git a/docs/Linq2GraphQL.Docs/Shared/SyntaxHighlighter.cs b/docs/Linq2GraphQL.Docs/Shared/SyntaxHighlighter.cs new file mode 100644 index 00000000..5de32779 --- /dev/null +++ b/docs/Linq2GraphQL.Docs/Shared/SyntaxHighlighter.cs @@ -0,0 +1,56 @@ +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using ColorCode; + +namespace Linq2GraphQL.Docs.Shared; + +public static partial class SyntaxHighlighter +{ + public static string ToHtml(string code, string language) => language switch + { + "csharp" => new HtmlClassFormatter().GetHtmlString(code, Languages.CSharp), + "xml" => new HtmlClassFormatter().GetHtmlString(code, Languages.Xml), + "graphql" => Wrap(Tokenize(code, GraphQLToken())), + "json" => Wrap(Tokenize(code, JsonToken())), + "shell" => Wrap(Tokenize(code, ShellToken())), + _ => Wrap(WebUtility.HtmlEncode(code)) + }; + + public static string Label(string language) => language switch + { + "csharp" => "C#", + "graphql" => "GraphQL", + "json" => "JSON", + "shell" => "Shell", + "xml" => "XML", + _ => "Text" + }; + + private static string Wrap(string html) => $"
{html}
"; + + private static string Tokenize(string code, Regex tokens) + { + var html = new StringBuilder(); + var position = 0; + foreach (Match match in tokens.Matches(code)) + { + html.Append(WebUtility.HtmlEncode(code[position..match.Index])); + var group = match.Groups.Cast().Skip(1).First(candidate => candidate.Success); + html.Append($"{WebUtility.HtmlEncode(match.Value)}"); + position = match.Index + match.Length; + } + + html.Append(WebUtility.HtmlEncode(code[position..])); + return html.ToString(); + } + + [GeneratedRegex("""(?#[^\n]*)|(?"(?:[^"\\]|\\.)*")|(?\$\w+)|(?\b(?:query|mutation|subscription|fragment|on|true|false|null)\b)|(?\b[A-Z]\w*\b)|(?-?\b\d+(?:\.\d+)?\b)""")] + private static partial Regex GraphQLToken(); + + [GeneratedRegex("""(?"(?:[^"\\]|\\.)*"(?=\s*:))|(?"(?:[^"\\]|\\.)*")|(?\b(?:true|false|null)\b)|(?-?\b\d+(?:\.\d+)?\b)""")] + private static partial Regex JsonToken(); + + [GeneratedRegex("""(?(?:^|(?<=\s))#[^\n]*)|(?"[^"\n]*"|'[^'\n]*')|(?^(?:dotnet|Linq2GraphQL|cd)\b)|(?(?<=\s)--?[\w-]+=?)""", RegexOptions.Multiline)] + private static partial Regex ShellToken(); +} diff --git a/docs/Linq2GraphQL.Docs/wwwroot/apple-touch-icon.png b/docs/Linq2GraphQL.Docs/wwwroot/apple-touch-icon.png index c11958b4da4522f5e48547c5178cc7a7b5792803..5041fbc0b211e90738e1b1b11d71b84a1af29905 100644 GIT binary patch literal 28502 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

ug2-FOK}4u>_DpPuCnu;{Hw#(fi*F|>;S*0J z@_cr`Z!G=ziaTn*Wnlp?mhyqNMyW`)Ws1d5<78gX<^oyLh#PBNhgCgvtc{wdbHWsr zPGRt|M+Mn=4^dv0-D7(ZQ70tEBL^3HXU$du4K$yXMf^0)J`Y@F(3&Rb!w+q<2Tc9w zqECwJ2|*Jdx2}(xCXz&c`8ss|kJjsZSpOT)g)Hd;s)xVNpr!kvxn52v8IGL0l%K-} zD|}gwV+nWgw`;FFi1g{b5&PXzY(tU+bQR-^IKCtUIj+MnJa78pFZv0=AZ>Qh1D=+7 zOV|ilXhnkXW_?oC1*pk<5giARxC9uLn^+tr2qNS?c@obQ!q+8h*J~{`WCv(y8S31% zKB+KSDCy|<;eFU&ffD~6vbVj^@* zapDrv)>}JsCQ$LY21asy0R=J5DK#f1m$6K(VHV=`eZr0f?+Dq>aq}SBinm zw>@Tr9Pn^;*Zeu_?ZUoZKCf*(bQDG%G!CrlnQ6lXX{WSqPxK-JK2HJihdcoxKT25u zC09(mIwD6g*R%xO8ekNmWFrVnL7wBF*6ymRs z2F6y8zmh^zQjGf)HU2h!5>~ui)UT35m?{Tl zHCm-(P)YESd<>X&%&uJfR+G_%DL&A%tg2eFpqs?uO6JxLO)Icf2wqjT!b$zp@y3Y5 zv!NMZ{y!^*TmstjC?~ih`+#{JxbjEURZ8s`QT>Ee0Pn#=D(o_CUV!g`=8EMNlYN5xzc+tEvC4% z78ml>(3``OCd{BNX-$(mwSah@PP4KRm;sLq>sJ4W4D9UlE4;a*BT>H3Es3&p&IA=KYi%L4CJ#~DZqgPtpu(9o2!mn-d5 zQ$=zF1M0LN9IqdinIOw+smMSphU-iOEtya#|;O7mi=%zTZ(D;{v-QKW#_e$1f9N>yd zj((K%boze%Hf;cUuydYtrR?RJ6L`)Ho_wp>ZKoJawd%lPBbTg7&dY=k*JoXo?Vv{?2BBZRK3=L9UMD-2o)xtoY9194&YYPApzzj4b|X>tL3KM zz-~QI&Y;B)<(4p_(x&$`04(EbACl(~*>&;Y7T}avmKsCp9A0DG&_Wj4_0Y;Z@rye- z*M0;Q*foo&CKZ~)bSF_Qv_qCr{q6l2FJG+U`1!Zn|MnZJ8$cwqppfc4b#~lP>Gdzk zPnH3?K3dVV0w}4s#aJ3}v@i8~O#3O`!F$c_aeX>7s-8XN!n5^dX z0Ol8;##t@bawh`(h<{fWwOWLN*p-^12BCKH8i){l?5bdQ)u$xjpm&=>;Xmh&ULC+9 z@<=M==uq$+toC|mlThnm^^%k%@nyHt-$hVmFRE!c0ILb`#RFs6)afAsJJ%9o2mdB$ z=F9)py7&zbJ5-e30bJG{7ghkeu2=w}DN~${s1$^aBlXPES4Xqx;bMlck%>-+u&#L( zc;SCnaw+rHla9Vos_qN`ffQ-asDc+5{LsIjc?Jb861;m7+aaANo(oC;)bVG(>8N(V zZ>1A-$z^{D(?R-GyRG*bH8{$%=ifSdu)B^-ONJjj{W=P*t}iEw$4T|^w-p=?+&7c3CaLswx z`H6ePPB60~Hoftbk&&jSmHpUU(SwJf2@!Ldie?ErC7PoqKoXEuXIyC3D4bo=k@mFf zXBk1r_cik9^-H~EZH%>C)|y*-A@ zQN8s~Ux+1~cgBx^XFS^IeX@_{OP6YG|0A#Z8h$bxRA%+H0P>%uYvoF|B2@w=Gc%La zv9XU3#wQE!eK%I_z`E!Ze;tvaub9VuTHd}h0l~ZLQs_kL&~9jQT)RZ(qeDaq?Rb0b zklmZWHP)*QbjA5o(8JGJxWlX+%p(Q)Mr3bW3=GntYC~>BxC|o@uLlq!)@8e|J5YCT=y2jsv=E zTWu4swQ181?I!_)+yjCg6UZf$hT_+MDxO&Hmi zqw9>h%o7K|o-pk)e6I)^I4WP%pTIr4-N=((UAI}qS%K#rb9q6S9bwmQU;#}r5IqJ_ zPqOf`XMUR&!%L`SM>5n|o^1DltNX55Z@+}(&EhN9Tx)mY^whuB=OK*p{#MY>WctY~ z#L@no$=D$~_YUxO&28>eh_6zp#v!2e~QK{ z3`{IKUG{PD$UH{2NxwC_UA*#|a~wep)&4Z0TO?;CcF4Rnvk85_aPKzvFx; zMtu&v9Xx;v^2lOr1OACySf;f_U4cZOxrym|)tH{N82fWh1t`dUn@!U>{F44zlCrCA zWB)s6swgCT5QlvbrdjfA1Ewv%jHkth!>{GlSO4$Rln8BaAR24#L)pNwEHAyhs)Q)Zc!dS4Q7D%Z{lE)uH1$Pw}i9d z%3%SFmb0##rs%3khh?iUO;B^f({Ggi$4*6{PFrWLf4x}r+=3n60 zf3n+slGq3MIL%@$gQ**phl5CZ9M@RB~)p zuoxengwEGwCr|e2{Vn7JOG`O+hD4P1t;Z%9l_Dw$k&pdi)&w9V;}wWP-sh5;$jCPQ zD)K^6?E2==Zpe0=6+Za1B!?bL&6I=o(+2Zn=i)Xy_#Y1XuH8Uirh4Sn41XlVh>t}8 zg^TyJaNnN1-x9DKX6r14v%WDmAcQ6S+P0oBu1HZO|BEW~SZqwiYH%BbwtDVU-e*;g zg4?jg-K(U?pLoUncPYT>o{(ygk3C8a)@$mt+NZ*+6Y|HAeHN8=ncDbs@%=2D%ffr- zls?f!@ca%7!4>a9Giqq#t*0APPW_Ktq+OOEdlLy&ziZ!{CE>lu;x^iBt!l*!%f5z8 z)UoWS83Xkv(8>g?c%~D?&*5V=?9^vNYe3;^-k;`cYB*YJf>*!N*HVeCs+ny)g%8!b z+0Ic+AVM8Bf|U?@RW%qAtRRcVM^el-V%}KW_j<_eLnB?dfyOquBvS=*Qe)2OeP7|@3IJjo zLgS5-Pa8H+_#%wFg5IJZq}9*WW*~&)78UJrVM5-=iSBy?;VMoj;* z1Ia%i-f&vy9^GqwVP3)ZvQw>$$~g<9?@}o(I0tu=gM5rgX*@-`C>vI2G^387nv4!M z3-Z~kIBk_TBG$5{hb~PIO>EKa26kD2lE%%tW!HIC<1%i*O%CNk1dX!wBd^eR5*QBsbDcht_B%8k^|A}U`xEeOq!`|F%q^qCtrvpuq#@0(X2UObK_ZgQF z*xlTURTyV|5y|aG27RC&LQMe)l@-`5*dX~-YomJXFtsQ2g?Uc>B3Zdba;95dP)RJS zc5LQY60|0ZU-pc#gEsE8i+Hbhrs2R)i4?%gy>&FVys+VwaC~RN^AV<#9wfRKDjCjg zNHK^WQw{4ucE6Tmh*;o0@{(4;oRGN7A$4py)Ow?-$3L!I-5>u*`C>6QGa%r6LC6X` zhU&+(y59-sosO*BG~uH*_`|J`&b*$}-`E$m!GQPnaCgsG*R-SJjvg?@5CEDHYxT58 z2A?waP`ol4Q_3$TuNO=|H2x=2Hmll3nI`=zM%Cp4$MAjdUu_=^ii;>{l-I0bb2}6k z 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 literal 4048 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 pSu6ruRZ0+*g2*R={ h2:first-child { + margin-top: 0; +} + +.doc-content h3 { + margin: 28px 0 10px; + font-size: 17px; + font-weight: 600; + color: var(--l2g-text); } -.doc-section .table-responsive { - margin-bottom: 1rem; +.doc-content p, +.doc-content li { + color: var(--l2g-text); +} + +.doc-content p { + margin-bottom: 16px; +} + +.doc-content a:not(.btn):not(.docs-pager-link) { + color: var(--l2g-link); + text-decoration: underline; + text-decoration-color: color-mix(in srgb, var(--l2g-link) 35%, transparent); + text-underline-offset: 3px; +} + +.doc-content a:not(.btn):not(.docs-pager-link):hover { + text-decoration-color: currentColor; +} + +.doc-content :not(pre) > code, +.docs-landing :not(pre) > code:not(.copy-command-text) { + padding: .12em .4em; + border: 1px solid var(--l2g-border); + border-radius: 6px; + background: var(--l2g-subtle); + color: var(--l2g-inline-code); + font-family: var(--tblr-font-monospace); + font-size: .86em; + white-space: nowrap; +} + +.doc-content td code { + white-space: normal; } .step-number { @@ -113,56 +683,596 @@ h1:focus { align-items: center; justify-content: center; flex: none; - width: 1.75rem; - height: 1.75rem; + width: 30px; + height: 30px; border-radius: 50%; - background: var(--tblr-primary); - color: #fff; - font-size: .875rem; + background: var(--l2g-primary); + color: var(--l2g-primary-fg); + font-family: var(--tblr-font-sans-serif); + font-size: 14px; font-weight: 600; - margin-bottom: .5rem; + margin-bottom: 10px; } -.doc-section h2 .step-number { +.doc-content h2 .step-number { margin-bottom: 0; } +.doc-content .table-responsive { + margin-bottom: 20px; + border: 1px solid var(--l2g-border); + border-radius: 12px; +} + +.doc-content .table-responsive .table { + margin: 0; + border: 0 !important; + font-size: 14.5px; +} + +.doc-content .table th { + background: var(--l2g-subtle); + color: var(--l2g-muted); + font-size: 12px; + font-weight: 600; + letter-spacing: .06em; + text-transform: uppercase; +} + +.doc-content .table td, +.doc-content .table th { + padding: 10px 14px; + border-color: var(--l2g-border); +} + +.doc-content .table tr:last-child td { + border-bottom: 0; +} + +.card { + border-color: var(--l2g-border); + border-radius: 12px; + box-shadow: none; +} + +/* Code blocks */ .code-block { - margin-bottom: 1rem; - border-radius: 4px; + margin: 0 0 20px; + border: 1px solid var(--l2g-code-border); + border-radius: 12px; overflow: hidden; - background: #182433; + background: var(--l2g-code-bg); } -.code-block-title { - padding: .375rem .75rem; - font-size: .75rem; - font-weight: 600; +.code-block-header { + display: flex; + align-items: center; + gap: 10px; + min-height: 40px; + padding: 6px 8px 6px 16px; + background: var(--l2g-code-header); + border-bottom: 1px solid rgba(255, 255, 255, .06); +} + +.code-block-language { + font-family: var(--tblr-font-monospace); + font-size: 11px; + font-weight: 500; + letter-spacing: .06em; text-transform: uppercase; - letter-spacing: .04em; - color: #9ba9be; - border-bottom: 1px solid #2c3b4f; + color: #ffb938; +} + +.code-block-title { + font-size: 12.5px; + color: #9aabb8; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.code-block-copy { + margin-left: auto; + display: inline-flex; + align-items: center; + gap: 5px; + padding: 4px 9px; + border: 1px solid rgba(255, 255, 255, .1); + border-radius: 7px; + background: transparent; + color: #c5d2db; + font-size: 12px; + cursor: pointer; +} + +.code-block-copy:hover { + background: rgba(255, 255, 255, .06); + color: #ffffff; +} + +.code-block-copy.copied { + color: #8be0a4; + border-color: rgba(139, 224, 164, .35); +} + +.code-block-copy .icon { + width: 14px; + height: 14px; +} + +.code-block-body > div { + background: transparent !important; + color: inherit !important; } .code-block pre { margin: 0; - padding: .75rem; + padding: 16px 18px; + border: 0; border-radius: 0; - background: transparent; - color: #e6e9ee; - font-size: .8125rem; - line-height: 1.5; + background: transparent !important; + color: #e3eaf0 !important; + font-family: var(--tblr-font-monospace); + font-size: 13.5px; + line-height: 1.65; overflow-x: auto; + white-space: pre; +} + +.code-block .keyword, +.code-block .xmlName { + color: #7dd3f0 !important; +} + +.code-block .string, +.code-block .xmlAttributeValue { + color: #b9e28c !important; +} + +.code-block .comment, +.code-block .xmlComment, +.code-block .xmlDelimiter, +.code-block .xmlAttributeQuotes { + color: #71879a !important; } .code-block .comment { - color: #8b9bb0; + font-style: italic; } -.code-block .string { - color: #a5d6a7; +.code-block .number { + color: #f7a072 !important; } .code-block .className { - color: #ffe484; + color: #ffb938 !important; +} + +.code-block .variable { + color: #f0a6ca !important; +} + +.code-block .property, +.code-block .xmlAttribute { + color: #9cdcfe !important; +} + +/* Landing page */ +.landing-hero { + position: relative; + max-width: 1240px; + margin: 0 auto; + padding: 80px 24px 64px; + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); + gap: 56px; + align-items: center; +} + +.landing-eyebrow { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 4px 12px; + border: 1px solid var(--l2g-border); + border-radius: 999px; + background: var(--l2g-subtle); + color: var(--l2g-muted); + font-size: 13px; + font-weight: 500; +} + +.landing-eyebrow-dot { + width: 7px; + height: 7px; + border-radius: 50%; + background: var(--l2g-accent); +} + +.landing-title { + margin: 20px 0 18px; + font-family: "Space Grotesk", var(--tblr-font-sans-serif); + font-size: clamp(2.5rem, 5.2vw, 3.9rem); + font-weight: 700; + line-height: 1.04; + letter-spacing: -.035em; + color: var(--l2g-text); +} + +.landing-title-accent { + color: var(--l2g-accent-text); +} + +.landing-lead { + max-width: 560px; + margin-bottom: 28px; + font-size: 18.5px; + line-height: 1.6; + color: var(--l2g-muted); +} + +.landing-actions { + display: flex; + flex-wrap: wrap; + gap: 12px; +} + +.landing-actions .btn { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 10px 18px; + border-radius: 10px; + font-size: 15px; + font-weight: 600; +} + +.landing-actions .btn .icon { + width: 18px; + height: 18px; +} + +.landing-install { + margin-top: 28px; + max-width: 480px; +} + +.copy-command { + display: flex; + align-items: center; + gap: 10px; + padding: 6px 6px 6px 14px; + border: 1px solid var(--l2g-border); + border-radius: 10px; + background: var(--l2g-subtle); + font-family: var(--tblr-font-monospace); + font-size: 13.5px; +} + +.copy-command-prompt { + color: var(--l2g-accent-text); + user-select: none; +} + +.copy-command-text { + flex: 1; + min-width: 0; + overflow-x: auto; + scrollbar-width: none; + white-space: nowrap; + color: var(--l2g-text); +} + +.copy-command .docs-icon-button { + width: 32px; + height: 32px; + flex: none; +} + +.copy-command .docs-icon-button .icon { + width: 16px; + height: 16px; +} + +.landing-badges { + display: flex; + flex-wrap: wrap; + gap: 8px; + margin-top: 16px; +} + +.landing-visual { + position: relative; + min-width: 0; +} + +.landing-visual .code-block { + position: relative; + margin: 0; + box-shadow: 0 24px 48px -24px rgba(6, 18, 26, .45); +} + +.landing-visual .code-block + .code-block { + margin: -28px 0 0 48px; +} + +.landing-section { + max-width: 1240px; + margin: 0 auto; + padding: 56px 24px; +} + +.landing-section + .landing-section { + border-top: 1px solid var(--l2g-border); +} + +.landing-section-header { + max-width: 720px; + margin-bottom: 32px; +} + +.landing-section-header h2 { + margin: 0 0 12px; + font-family: "Space Grotesk", var(--tblr-font-sans-serif); + font-size: clamp(1.75rem, 3vw, 2.25rem); + font-weight: 700; + letter-spacing: -.025em; + color: var(--l2g-text); +} + +.landing-section-header p { + margin: 0; + font-size: 17px; + color: var(--l2g-muted); +} + +.landing-prose { + max-width: 780px; + font-size: 16px; +} + +.landing-prose p { + color: var(--l2g-text); +} + +.landing-section a:not(.btn):not(.feature-card) { + color: var(--l2g-link); +} + +.landing-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 20px; +} + +.landing-code-pair { + display: grid; + grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); + gap: 20px; + align-items: start; +} + +.landing-code-pair .code-block { + margin: 0; +} + +.landing-note { + max-width: 780px; + margin-top: 20px; + color: var(--l2g-muted); +} + +.feature-card { + display: flex; + flex-direction: column; + gap: 10px; + padding: 24px; + border: 1px solid var(--l2g-border); + border-radius: 14px; + background: var(--l2g-surface); + color: var(--l2g-text); + text-decoration: none; +} + +a.feature-card:hover { + border-color: var(--l2g-primary); + color: var(--l2g-text); + text-decoration: none; +} + +.feature-card h3 { + margin: 0; + font-size: 17px; + font-weight: 600; +} + +.feature-card p { + margin: 0; + color: var(--l2g-muted); + font-size: 14.5px; + line-height: 1.6; +} + +.feature-icon { + width: 40px; + height: 40px; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 10px; + background: var(--l2g-primary-soft); + color: var(--l2g-primary); +} + +.feature-icon .icon { + width: 22px; + height: 22px; +} + +.feature-link { + margin-top: auto; + display: inline-flex; + align-items: center; + gap: 4px; + color: var(--l2g-link); + font-size: 14px; + font-weight: 500; +} + +.feature-link .icon { + width: 15px; + height: 15px; +} + +.package-list { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16px; +} + +.package-card { + display: flex; + gap: 14px; + padding: 18px 20px; + border: 1px solid var(--l2g-border); + border-radius: 14px; + color: var(--l2g-text); + text-decoration: none; +} + +.package-card:hover { + border-color: var(--l2g-primary); + color: var(--l2g-text); + text-decoration: none; +} + +.package-card-name { + font-family: var(--tblr-font-monospace); + font-size: 14px; + font-weight: 500; + color: var(--l2g-link); +} + +.package-card p { + margin: 4px 0 0; + font-size: 14.5px; + color: var(--l2g-muted); +} + +.landing-cta { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + gap: 24px; + padding: 36px 40px; + border-radius: 18px; + background: #0b4f6c; + color: #ffffff; +} + +:root[data-bs-theme=dark] .landing-cta { + background: #0f2a38; + border: 1px solid #1f3f50; +} + +.landing-cta h2 { + margin: 0 0 6px; + font-family: "Space Grotesk", var(--tblr-font-sans-serif); + font-size: 26px; + font-weight: 700; + color: #ffffff; +} + +.landing-cta p { + margin: 0; + color: #c7dde6; +} + +.landing-cta .btn { + background: #ffb938; + border-color: #ffb938; + color: #0e1a24; +} + +.landing-cta .btn:hover { + background: #ffc75e; + border-color: #ffc75e; + color: #0e1a24; +} + +.landing-credits { + margin-top: 28px; + font-size: 14px; + color: var(--l2g-muted); +} + +@media (max-width: 991.98px) { + .landing-hero { + grid-template-columns: minmax(0, 1fr); + padding-top: 48px; + gap: 40px; + } + + .landing-grid, + .landing-code-pair { + grid-template-columns: minmax(0, 1fr); + } + + .landing-visual .code-block + .code-block { + margin: 16px 0 0; + } + +} + +@media (min-width: 768px) and (max-width: 991.98px) { + .landing-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} + +@media (max-width: 767.98px) { + .landing-hero, + .landing-section { + padding-left: 16px; + padding-right: 16px; + } + + .package-list { + grid-template-columns: minmax(0, 1fr); + } + + .landing-cta { + padding: 28px 24px; + } +} + +/* Blazor */ +#blazor-error-ui { + background: lightyellow; + bottom: 0; + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); + display: none; + left: 0; + padding: 0.6rem 1.25rem 0.7rem 1.25rem; + position: fixed; + width: 100%; + z-index: 1000; +} + +#blazor-error-ui .dismiss { + cursor: pointer; + position: absolute; + right: 0.75rem; + top: 0.5rem; +} + +.blazor-error-boundary { + background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; + padding: 1rem 1rem 1rem 3.7rem; + color: white; +} + +.blazor-error-boundary::after { + content: "An error has occurred." } diff --git a/docs/Linq2GraphQL.Docs/wwwroot/favicon-16x16.png b/docs/Linq2GraphQL.Docs/wwwroot/favicon-16x16.png index fe0cab2b2841e2b88c7987e5aecf65dde3dcfdad..9ec5e8f8845c5e4dab8c15aa044da61052b32781 100644 GIT binary patch literal 1851 zcmZ{lX*k=76UTpoAa!4Ll~mGHopDuN)uEipL5rOMs{r=0 zFg0P3Wd~PV2`up7%$&jifQ|S+ms@)CPfISmxfPmg6(Y^Yql;|&5x`2F!=oMXKAw1A zJ?~Io761*T#zhr%q>6@)y}G6zQddt~M+u44Ln6H$4`lx(2*&yZ_(lDM0aLI4i2a4 zVD+3y(fcXsd4ARJI5ex^R)LT5MmS*PQF!6CsRrAc502)%NsYHPyvWzJxIsZY9~Dlc zf2K{lPH>9n_}a)#Xm+zurY#E8i>eEeIqWB8vFEyjuvgAlzVJ6hy#h2=BSj>&lm zg0Jho=t+}~22B#Zq0q#gTX<62(ht69iY)y zZ5BMi8C$i7>Fe3!I5PfybyI4_me(WCLEV%O%7dCGVm+UWsCP$5_3t`*E<-Gl1Kj&@ z7TEXwR|!r-wy*eG5P8+AUwbwaJBm6uq0$EAqUI)(_7tI=EmVT=7aVQGRNV-%IByud z&5t<%H9RBPqg?C;hujyOSBd4vzGvSUflmUDRC~o&F4QxeragFQZlTdS45=xHjb-4H zlIC1@+LjFhjd!rF!6N2-oip3D7hX*5h>xcNAR@Z!YChr}CR}ZC?psknjv|YoL{JmNH z5ID|;(ZHY)X-PEb8e+44g+C|^8VIk7o&O8Ew6pR@vr%&QRQp$H7YdEXzi>w^>H0T{ zm@3GCF}n?a5ljOYZiIbF(Uo?Et{fmr8l65Yz-^tRTK zr%I^wScH#~>lHgqPZ){N(8pqk2U(i~b@BTfYLhL!UY^y%yEF}1ue4-~o4-+_;adI+ z?35`<;b!+QpO+(>A;%aiO%jMAvmoKf?1z1nF3}8H`re^enX$%fr3tR4Pdocg2soPj zstiKlPUPs7ZJO@}VQp^235!|-{+ulKlWlkYapT}yvv(8-&yUWR1`9@_ves_1=Ld?f z%S`eTwD5ON=>nN@0i!gM$DeX3dp3Y4w-oh!$3XkgR;WW$$UNxn3*R#->;+{YJQL*2 z2OBQEcZ-g>QnwoG>;p47ye4f}&vyMt<0LjlCUN%r%opnin0s2XsajV;`VOozhk9#T ztxE-xUi-5@;oX2XhGoPMACvBar#~)&vL{qj$#0O&vC1RwiFhr3e*w2EuiG*e#e+FI zU49%TkC*P!e}5$Y#0ea{N{a1hDliqGq;)lm5ASu2Jqu6O3*9{*aD@RJJOO3T6Bm8X{+H_jABU5tF#;U~6S z=_iMdLO?_n8f!$B@0-J`GX@lIJe2}#>txI{z)asp?0hS_X5vad(L(W5w9`#Bia-pG zEC^=da(Ll$P!Ps{SzF1nxUjk)6_t9S?-ts?cwH<+URF*ta?|nzx2K<@Cc@Uz)>c+b z@BEnyciKNPe0qH}WP>mo!d7x^akQ>?>v9VCWjcmXla7fAFJONQ{a&yyU`-`2sjBJP QvAzgkj&7=H)`0000V^Z#K000HJnL_t(|oUM}0OH^SL#-HS~Qy+ zF^oWnilU%s8?|VzV1iU66paH$rMqyZW|+|y)da%G3USdAR4?LnxB7GYC3duQi5R|9{hn$P;Py@m)o@744x; zk$HpQGj3E0ma_0GoTi+lj%6On#Db?h()Zx;8)$5ZNn75)$L&z~8T&^wA`4hXM|l=p zOY)e|PNF(sViO-@8G3)J!7Ng7DSA$zZ$L?p7jKs&jbJrjJ7n^fJh!p?^PbLl0D-VOow5tl{fM7Ox^13Q^4A(k%nuD-FDSlunlBpz7q#1fVZ@ zvC=^Z>p8SvB^b3D_+&%h%lHF}i>v6eFQU;k$P#|sF!ADkI@K-3j(k?X7l9}8eh3+2 zljP&!8n$>7U35+iB#$pXZZ%E(uIo-dWT+Mf2G2t^cz^J2MUD%IN(;FhUdvx-b`6dW zaTqD{GVp=HlLpkn75K*_y-&dqj~eVThvc|~$}$ApdwUcb$Rd$~ZCHpOT%>uVs-&Hp zWvGvcbZL9a_L_|*W~@sK`9<0#!o%72^@9q>jMD6A^-q38UQ%Gq_C?1fFA+?ShoWJkU0PVr+0p%@$Jh5g~L5auFgUKUBCiGm0Su$|L+Ej ztH-0K7<&)z|E|$wvI_$Mn1^&VP^K=^ExAD$Q?tEpmE*&#SHITW@%Us330*2Cs#tvv zYRDB3L?a8x%Yll)3M2~BfT9vX>pijzqSvWVOi;}<`CTT$cEbNDA=54PRs3F%) zB|!3ce?ImE3mKh<^|;Ali+TqQH%Xwp((dn)j@T4g%oV0WwD6e9X@6U5#xs&+aPMbhX zeqwE8>t|xbr1YHeHyAc?RtWWc>pN#(qNIK+`95ciRt7C$hqh0eSE%E!p8jLC2|$&}sMj&vqD?k&Bvl8|SNp_j zd|@+sI%5AM0&o6Z=*wI4{id`zU&fT+^5Kug^$wc4WZjpe+FIQzM}u|{_=~oH)b2w@ zTG#ce`?RtT_|izK2S(pS#fYO?DCv;d!5;LR;@7=~vuOd{~;FM1P3-)VN0bq(%5FEhloNnLv-k7G}L;GDF{^2S@z z)~1>58Lp7C**|i*vG!x_dBKVvRQXO=liEvN{b?5@gLTp!ia>d2-~N(hA8W_mnvg?# zJE5>OdWX~=j)s9rp9q!~o@@wAGf6|BUussOX=l2e-oWAM(B zR<*t{yI>z!HHl%8ciJ$p4$xqglJNzbwr4Xi_+D zb`%iCrT2KZi8;-uR7Ue!%Gt;*DA&r*vD{PNf( zDd?zfqD8(>6UJVRtSU!g$9`nr2*5pv3a(kR0Tfqu4LnN*sV8jQufyOsP_5MSy3=f4 zsHON%TCdR^C&!F*%DZg&;f{kFO|%4SHg--1&{3b+CZ(l-!cXvZ$9sOG&Z@=>_xL#5 zBFFj6W*(5~pK0F_Y^JlbSp41nPpZe%-4}VKv@yk>1mP}?Ensw`Q1+ror8$C-^xPsx z7|TERs`u96kftL_w!n{8PDxi)zv32-TKC=~xG5R*bkph-xf}FS(hQ?e3I+e=Yo z$Om0VY9)Ll^s~Z-*fC!+or1Opv>w(OObH2~3dG8M0U6g$^lSkp+C_9lJN(VM`K>mx z(V@)0UN3ngqPb0yh2eR9TYHpDB+ck}iV#{Wm=$C(ckn=Iidr^vswJQT`tC{4;BzX6 zl7H6kTgBc=&YZxcMLYm)syJwHlt4sm~0Dcs!7X7wxoSwcgK z9ra!=m|Z}N)J7k#AAv6KHxPs{hVLmeA@xa_`oUQluW=!FP zLw#0;+Z=pFAHzWFVIDtYhgzHR%C! zU1Sd6!1K&>_e>R#qNosGSNHt$9^8w>Jg6e0YDeZ%=Eo-OWX`-YNuI^W4rwg3AM!|2 zXmRLSBI?lSc` zQ__ub*k@UqpV|`^;#tiH<91TpgzI|sD6cbV2pPkByOe~Xixvm-Cc8SsI)Br4EA0u= zvK2q_TZm3F$C1zyy^JI-su)_n1_%w7*gvEgZ2u#E>om>_*B|@3Y;q46-ImWV{4tpd zpn$T*a$LApeMW+v@65E;x6|?Q9uB4C!Mh3UeW;9t$C+&Kc+rxbPwCpC1XvoDcTxG>{~!W)qT*lCzaPU$({#Elf$gblE_srT`WF9l zsbb$wx9hEQxWBi%X<3pdHpQi4r0nG>$UMy4JqnUNOH3>xY}B-O_OcR=vU4R`-ys%` z4kMncsHwJ?8plzvc^UV_5nJquW4*AKF}QVxOozS>M^Z+nZ32 zi-~Gi&<-)CkCsgSY;(t|qu4-`a%vxt!RISs_jT^QQXMmp;#e$4hZYAsVxRVKk& zxzVv3mZ_qL)q4pMT-Ca+z9>w^>+sN(7lftenT_ONuj*Sr6)J0mlWFf%P?9Dmsrlzb zA|~#OCVU9juH#S^Gf>$a<$lk(F>Q(jQJi{n5sQ_g#=zpy28a)}43H`BCEXzE#gDQh5toJU@^+b~$7}d#zB1oet*v`*w*h_=8{!^oGhP@mha}`J9epvigs4vai z&V%fdeoZ1#iEmZ~>@GPxs$q_(BPs^`nOlbE#g$$mE5H|c+nnCe)Gj}921?CqGJw5V z!Pb`6C+1&7-rO^5V`qlXd$OLbuwZW?uM(#5K)skdK|#i)l^qW)k8@;M5VYnuX%h=8 zt`E;($7e;9JeZ!pJ2oR!(_?>vJZ&R(L#LUXi@>CBOE3lc7}yP`g8jP? zrh-LC6~{=;1Feq2z2+;wf{i3)bF#Pp{C&&oa8+C_q9TVPi`Y2b3%4Na zFL%aXBa}4WP=6OSrN93zO+c~Moq6(!oA zR-X5>u@(vXo^g5P+F#tP{Wn7bL+$wFbGF9^TOm@sQYy2b*bnj);)c<)uOE0^PgIWH z21g+u_=B{>+!hgm_8NWZUsXD7_nzoqD?TWDF*S~=3b3$M{54}wj&r@Bw*V>{j)nj1 z!tKGvd#T|qOJz?$cx~Avpd7c__9s$A3fAgJkHu+XIQFxySXqzACz*PKL#l&7c2KRx zvgQ)@D2IIQoSkW5QG8ujspcJ~+6wqeZ^GnHAa^xvwenpsU8~M2d)^W-{j`=`t#nn@ zRp5*<!?y689?qvRr z5;cY40-GaqHP_g+ztSK03H4(G%N+Ifr@PhI99k(onLGo(p zlBH3G`bJSk)cUDk(Ocf&Guvbft~9z{fi1c%fB3|hpRH(72Dsg`D$M23Xa1B7oI58j zRDJpP{4Zs^SnxcWnit-~5%ykF#3kt9U7g0!a14k86bqleZg3h|wWIHE88&5p>o*uXORL9* zmfc*=jVsH7o77)2=GA&0QM+WVKUf`)3QVJR096_DW!TJ}hBWXz^}y#gx*eye);rz# zdD??69+=`bx<%b3K7Z@)moR$fV!u;DoSf@sX9~M`{Ad@WgSZmISkXsCY;(YXvfr|p z=y~@@thpS&lUCo&4+HA|Ue~|fg4C<5v`moX@EeaZL&182&9q_KsJ@Xqk_nnjRX0C* zEZ(kHTDzQVbB)ddvvwY_zsVRC1+`7aOXo>Omx?c>Bjv%c$T&(K)Xi7&!)L6E!KHn< z@Ip?WE>5GvI@vJGt4@B%R>2R<)>B2>I)m8pC61Zva`7y4m2cq4M9KLT(nE*NlQsCW zZ7``!Pf7)+fqLN>lry=`JdmF7iPAeK`8}n{wVANiDY%2#B)Quf{?C*)I|oiQ46s_r zqWzR`X6Xs?v94w>DE7=(=y}KxGb%0BSjEzlrTvIop2n^A&B+X^ZVXQM0acr(y#!>+ z)_|qa)n<-Vngv8ocFB=*J-vgxA5OfCF={9tuETH*f->Z z^_@&ZNrl^od0K%b`-4^rV<)iC_>tSNxZx3#1d>;&Ei+JJDyH52;7n(#< z2tAjU61Opova%X1DC8%cy?-TcNr-+@;kG$@(t^%M8zMOWZ5`hN-o=U-nn33t`#j8t zDt!N&BS@EcPa4)>O1B2vtUoC7!%r;*?#ZC5TAjumbb%jj{v|Lmg=nVqkfzecd97KX zKRQNhsH&?DUEp3xKB8nYMtiR!>;P%}$Rr3JC~FoD6y_h>arVIS*vD)` zpYrb}ExQ_T5Og1eI-L0;?zK^nNmzPc2DuIM43^a|Nv~8JYDMdJZR$30Ma9?wu6kHrK8N#c129cp;0Y?`&5FBR$2O0q`a* z2$&GIw-kps-lZPestz7>d0*Eovfr-oqj_9{e{=26oX1QYelzRc!>vX)`7C^c&^dh% z`CnJ$<<4DdtV!B?ntGd?bSHJjqYmunqeR1S7yW}nD-|brzZ8gkl2%w`k_0B@mjQ8C z73-(9zx`k|-fg4P=FyRhS18d^YTtUaPh)skF}JEcFt^H-P#tL@R*}>@A#)tEcgx?R z@NHYg?U+dL)cXb<>o?+t99rp5Z&!50;$+L;el^)qO~QRb_2H@3zg;|wOmsiCK37{l z8OUT*{v=I)_E!m0F={6B<0hZVW!Dp@xO_)n>Cx)YtY^)jfysGc;#0mml5t@Nw5#;p|gq*qz#1_>KIdGRLoCz(=~V-v8ZsRYd+j{_Zg*sR<4 zXe)A@0$$Qw;|VY_cUbu&%!*VJ5JSNHQ3Q~jS8sYLw0|FT&+{y>?-9aTg!mNQ9KN#T z1#}`HNw-8myLD%Du#$lM@tVgp^;CJ`j2BqfWH+_oGwfn~=hfMx_!uFz~yXqscM+gzzW5(N zK;T=`q)*Bbl~8)CRSN>#78L&vf@F@pMdTV@5bfb|r*eo41pU{_5bpllJw_8-G_ zO~_-q75o@_U*zFsmxb3n+UG_X*gGtAC3fWm8O;rx1H^{V_EOaQrSXxikNa z=5k2h#6|Tj<2#g^1r*?@y|vO+Oh=kG(nxzK$0mT=FiF$F6L3bhrS!NR#GwL82P^SW zlhKS!k^tw}hB+>qZXE(Sf|FL7gWu=ilPUK}CZ+gf8sd{_8M`8`9=_>k_$d2N{0Q;K zF7~-Z%VAc$A<5od(7q^GFv&ut%Hz*D7NRc|;1S-?GYKE8% q#EcSinV738VV{71&8dJB7w`+Q3!^aJ*IiQp0000lvF3E4&gNVB z5;+mgnX^D6O_!l&q0O|K`Jt6rT2>!ieJES=*ZG~xb9a$T+%BYS$NzJm=bZCxXl$$w1=eS0m z3w1V?p)Aj|TK2_x>Mohp3$CIBILh-eY0noJf8ZLNWx2@ApNf*C5al5+WhiUpe>mmD zt`)=KP9KWsy_b;k!UAN>OM<K?Wj^022;eMOI!6 z3X=O_+LnWed>^_-p0?$0A@cAoJ%g(x1!L>~5S{W{bpM;YXaB?G++QO3r3%cMJrYxP zoWPi4z{GuD>)FWT58u~*>BUKyxvCOV-e^G7;lEWjt;8v|?b*V9t@o{4c4$o(~WAlNVSOt?_A5c84# zN#gO7XP9e9U4&AFjtSimx+UbjkN(EAEy>^7ZFAH`ozzVXVi{b1!-Uog{Vvp|K7+Y* zc3+SvW99;oC&mULVw!XFcbmB6q5qzDJ%G2?j>e@Uvy?bqB6C~|RFCix)7ZStb5r+1 zdv9!8I#_e!PoKDOy)nZ>GG^}EzHG4a1h@}k8h^LCZ`!puu_xBf3&+Wt$+#-{pSZ;T z`AmkA*$ZpKsoj&6mofqP#Kc+){K9yTPnWy<;n3!>T04kmaKAt4z_F@{N>^m;yT+PA zndR<>bPv?kieLQ3Iqg^G3`5Pzk@!k#oyX1|d;j=xI?n8yh7F~UW4_cB632})$2DJG z%GRtJsk&P6NwYh~eX>q%DtiKF_fHpn#>bxT#ri~4uNZ+vj<9C2M%{~2!?07<$m6>Q z+Urx%MV%!{y~G~=ZNd36=_`(G8?SZ1*Ph=VPtp8dk<|}{wr(i0bwLsD{>_{`JI@OKUfK4%SqSCtFt(*dKxlcp1XHx$7Zg9IJrT(qP zGn@A#s{SS-jzWnw{ORpSr6*X7ob1tJn{JB1-ikV?%j|&|t>M4kgipJjef*66~m!^iQ zpXahy+4`>bD(riT#n<_%{V}!bxb^{QrCBJB>x}GYqcN`T2ATPN$UT=>oUvh#`eUr{Qid_vZhWyLMti zjscQWx@#Xtdt?^bFz(=Q9vRR_E*gXj00klXmg&M*umyszx79INVEDQc6H6SH`Sj*dN;NH z$Q*4RZ2h_0^_Tq-_iz{bk7hj(_rdzqasAh*w)!vjfGzq%+Jdov2l`L;z%B62oZi3x zxBuoFpo88YLxOpK@C|e~-(Tka$vw1b2l|CR;kSd{pXMEG-h$>$)Z$(c)0empvlria dKV#qbw?o#w@9${K>hvQ2i{K9b5i?q_{{e(L%_9H+ literal 2683 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 Lu-26N->>U$GnmbP diff --git a/docs/Linq2GraphQL.Docs/wwwroot/img/logo-tile.svg b/docs/Linq2GraphQL.Docs/wwwroot/img/logo-tile.svg new file mode 100644 index 00000000..9d3186ca --- /dev/null +++ b/docs/Linq2GraphQL.Docs/wwwroot/img/logo-tile.svg @@ -0,0 +1,22 @@ + + Linq2GraphQL + + + + + + + + + + + + + + + + + + + + diff --git a/docs/Linq2GraphQL.Docs/wwwroot/img/logo.svg b/docs/Linq2GraphQL.Docs/wwwroot/img/logo.svg index 3a34881b..4386c2a2 100644 --- a/docs/Linq2GraphQL.Docs/wwwroot/img/logo.svg +++ b/docs/Linq2GraphQL.Docs/wwwroot/img/logo.svg @@ -1,22 +1,31 @@ - + Linq2GraphQL - - - + + + + + + - - - - - - - - - - - - - - + + + + + + + + + diff --git a/docs/Linq2GraphQL.Docs/wwwroot/img/og-image.png b/docs/Linq2GraphQL.Docs/wwwroot/img/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..2d72334a9914489b0385abda45c7ed93a9c8a9d7 GIT binary patch literal 57788 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 literal 0 HcmV?d00001 diff --git a/docs/Linq2GraphQL.Docs/wwwroot/index.html b/docs/Linq2GraphQL.Docs/wwwroot/index.html index b70330b8..0777444d 100644 --- a/docs/Linq2GraphQL.Docs/wwwroot/index.html +++ b/docs/Linq2GraphQL.Docs/wwwroot/index.html @@ -3,10 +3,51 @@ - + Linq2GraphQL Documentation + + + + + + + + + + + + + + + + + + + @@ -15,19 +56,19 @@ - + +

+ diff --git a/docs/Linq2GraphQL.Docs/wwwroot/js/docs.js b/docs/Linq2GraphQL.Docs/wwwroot/js/docs.js new file mode 100644 index 00000000..dd037af4 --- /dev/null +++ b/docs/Linq2GraphQL.Docs/wwwroot/js/docs.js @@ -0,0 +1,76 @@ +window.l2gDocs = (() => { + const themeKey = "l2g-theme"; + let updateScheduled = false; + + function getTheme() { + return document.documentElement.getAttribute("data-bs-theme") === "dark" ? "dark" : "light"; + } + + function setTheme(theme) { + document.documentElement.setAttribute("data-bs-theme", theme); + try { + localStorage.setItem(themeKey, theme); + } catch { + } + } + + function readHeadings() { + return Array.from(document.querySelectorAll(".doc-content h2[id]")) + .map(heading => ({ id: heading.id, text: headingText(heading) })); + } + + function headingText(heading) { + const copy = heading.cloneNode(true); + copy.querySelectorAll(".step-number, .badge").forEach(element => element.remove()); + return copy.textContent.trim(); + } + + function markActiveHeading(id) { + document.querySelectorAll(".docs-toc a[data-heading]").forEach(link => { + link.classList.toggle("active", link.dataset.heading === id); + }); + } + + function updateActiveHeading() { + const headings = Array.from(document.querySelectorAll(".doc-content h2[id]")); + if (headings.length === 0) { + return; + } + + const atBottom = window.innerHeight + window.scrollY >= document.documentElement.scrollHeight - 2; + const passed = headings.filter(heading => heading.getBoundingClientRect().top <= 120); + const current = atBottom ? headings[headings.length - 1] : passed[passed.length - 1] ?? headings[0]; + markActiveHeading(current.id); + } + + function onScroll() { + if (!updateScheduled) { + updateScheduled = true; + requestAnimationFrame(() => { + updateScheduled = false; + updateActiveHeading(); + }); + } + } + + function observeHeadings() { + window.removeEventListener("scroll", onScroll); + window.addEventListener("scroll", onScroll, { passive: true }); + updateActiveHeading(); + } + + function scrollToHeading(id) { + const heading = document.getElementById(id); + if (heading) { + heading.scrollIntoView({ behavior: "smooth", block: "start" }); + history.replaceState(null, "", `${location.pathname}#${id}`); + markActiveHeading(id); + } + } + + function scrollToTop() { + window.scrollTo({ top: 0 }); + } + + return { getTheme, setTheme, readHeadings, observeHeadings, scrollToHeading, scrollToTop }; +})(); diff --git a/icon.png b/icon.png index 07ee3269d284c653003187ff70b704e18567b079..7c7d27f6786cf0416eeefcdb8da6f59ebe969553 100644 GIT binary patch literal 23230 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 Wc}>vvxcU5j0GJwC-gsk(jr}jJEYx%W