diff --git a/.github/workflows/_.yaml b/.github/workflows/_.yaml index 495255b..9bce69b 100644 --- a/.github/workflows/_.yaml +++ b/.github/workflows/_.yaml @@ -45,9 +45,8 @@ jobs: - name: Publish if: inputs.publish working-directory: src/TabKeeper.UI.Wasm - shell: pwsh run: | - .\css.ps1 -publish + npm run css:publish dotnet publish - name: Push to Cloudflare Pages diff --git a/Directory.Packages.props b/Directory.Packages.props index 22b390d..32afad8 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -6,18 +6,16 @@ - - - + diff --git a/TabKeeper.sln b/TabKeeper.sln deleted file mode 100644 index d04a31b..0000000 --- a/TabKeeper.sln +++ /dev/null @@ -1,97 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{1FE5EE5F-70AA-4824-B306-304ADBF3A312}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "root", "root", "{689C1AA2-EEA6-4DC1-A090-CEDFAB39437E}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - .gitattributes = .gitattributes - .gitignore = .gitignore - .gitmodules = .gitmodules - Directory.Build.props = Directory.Build.props - Directory.Packages.props = Directory.Packages.props - global.json = global.json - LICENSE = LICENSE - publish.ps1 = publish.ps1 - README.md = README.md - version.json = version.json - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TabKeeper", "src\TabKeeper\TabKeeper.csproj", "{38E399A9-B31C-41A4-9594-B672760A7337}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TabKeeper.UI", "src\TabKeeper.UI\TabKeeper.UI.csproj", "{C00185F0-C727-481A-AA5F-23BEF39DAE80}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{6EEC0350-54B1-4E73-B6EA-3EFB831E01AD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TabKeeper.UI.UnitTests", "tests\TabKeeper.UI.UnitTests\TabKeeper.UI.UnitTests.csproj", "{F9012243-16F3-4CD8-9F86-4F7F6DAEABF8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TabKeeper.UI.Wasm", "src\TabKeeper.UI.Wasm\TabKeeper.UI.Wasm.csproj", "{1E09DF5D-BEB0-4555-8C5E-D68D32817844}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src-modules", "src-modules", "{0F8AC477-3BF8-411F-BC0B-767F820697EA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core", "src-modules\Core\src\Core\Core.csproj", "{569E0878-B758-42B0-8166-5935C584C03B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.App", "src-modules\Core\src\Core.App\Core.App.csproj", "{FA50AF51-FC1D-4259-BA00-03B5E7592484}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.Web", "src-modules\Core\src\Core.Web\Core.Web.csproj", "{6E21EE17-77BD-4072-BDDB-027D38C6D188}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core.Blazor", "src-modules\Core\src\Core.Blazor\Core.Blazor.csproj", "{F284A251-6C8E-4F53-8461-E6972204429E}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {38E399A9-B31C-41A4-9594-B672760A7337}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {38E399A9-B31C-41A4-9594-B672760A7337}.Debug|Any CPU.Build.0 = Debug|Any CPU - {38E399A9-B31C-41A4-9594-B672760A7337}.Release|Any CPU.ActiveCfg = Release|Any CPU - {38E399A9-B31C-41A4-9594-B672760A7337}.Release|Any CPU.Build.0 = Release|Any CPU - {C00185F0-C727-481A-AA5F-23BEF39DAE80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C00185F0-C727-481A-AA5F-23BEF39DAE80}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C00185F0-C727-481A-AA5F-23BEF39DAE80}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C00185F0-C727-481A-AA5F-23BEF39DAE80}.Release|Any CPU.Build.0 = Release|Any CPU - {F9012243-16F3-4CD8-9F86-4F7F6DAEABF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F9012243-16F3-4CD8-9F86-4F7F6DAEABF8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F9012243-16F3-4CD8-9F86-4F7F6DAEABF8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F9012243-16F3-4CD8-9F86-4F7F6DAEABF8}.Release|Any CPU.Build.0 = Release|Any CPU - {1E09DF5D-BEB0-4555-8C5E-D68D32817844}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E09DF5D-BEB0-4555-8C5E-D68D32817844}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E09DF5D-BEB0-4555-8C5E-D68D32817844}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E09DF5D-BEB0-4555-8C5E-D68D32817844}.Release|Any CPU.Build.0 = Release|Any CPU - {569E0878-B758-42B0-8166-5935C584C03B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {569E0878-B758-42B0-8166-5935C584C03B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {569E0878-B758-42B0-8166-5935C584C03B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {569E0878-B758-42B0-8166-5935C584C03B}.Release|Any CPU.Build.0 = Release|Any CPU - {FA50AF51-FC1D-4259-BA00-03B5E7592484}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FA50AF51-FC1D-4259-BA00-03B5E7592484}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FA50AF51-FC1D-4259-BA00-03B5E7592484}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FA50AF51-FC1D-4259-BA00-03B5E7592484}.Release|Any CPU.Build.0 = Release|Any CPU - {6E21EE17-77BD-4072-BDDB-027D38C6D188}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E21EE17-77BD-4072-BDDB-027D38C6D188}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E21EE17-77BD-4072-BDDB-027D38C6D188}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E21EE17-77BD-4072-BDDB-027D38C6D188}.Release|Any CPU.Build.0 = Release|Any CPU - {F284A251-6C8E-4F53-8461-E6972204429E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F284A251-6C8E-4F53-8461-E6972204429E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F284A251-6C8E-4F53-8461-E6972204429E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F284A251-6C8E-4F53-8461-E6972204429E}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {38E399A9-B31C-41A4-9594-B672760A7337} = {1FE5EE5F-70AA-4824-B306-304ADBF3A312} - {C00185F0-C727-481A-AA5F-23BEF39DAE80} = {1FE5EE5F-70AA-4824-B306-304ADBF3A312} - {F9012243-16F3-4CD8-9F86-4F7F6DAEABF8} = {6EEC0350-54B1-4E73-B6EA-3EFB831E01AD} - {1E09DF5D-BEB0-4555-8C5E-D68D32817844} = {1FE5EE5F-70AA-4824-B306-304ADBF3A312} - {569E0878-B758-42B0-8166-5935C584C03B} = {0F8AC477-3BF8-411F-BC0B-767F820697EA} - {FA50AF51-FC1D-4259-BA00-03B5E7592484} = {0F8AC477-3BF8-411F-BC0B-767F820697EA} - {6E21EE17-77BD-4072-BDDB-027D38C6D188} = {0F8AC477-3BF8-411F-BC0B-767F820697EA} - {F284A251-6C8E-4F53-8461-E6972204429E} = {0F8AC477-3BF8-411F-BC0B-767F820697EA} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {26EECD34-43C6-4F7A-A567-0F8AC7F82094} - EndGlobalSection -EndGlobal diff --git a/src-modules/Core b/src-modules/Core index ac13f6b..c2484db 160000 --- a/src-modules/Core +++ b/src-modules/Core @@ -1 +1 @@ -Subproject commit ac13f6b45cf53021dd55a57c28295e3b280d04b4 +Subproject commit c2484dbd85383558ce0d269e46b103ad2696bf2c diff --git a/src/TabKeeper.UI.Wasm/Common/Mixins/TranslateMixins.cs b/src/TabKeeper.UI.Wasm/Common/Mixins/TranslateMixins.cs index a5698cd..a1d46a0 100644 --- a/src/TabKeeper.UI.Wasm/Common/Mixins/TranslateMixins.cs +++ b/src/TabKeeper.UI.Wasm/Common/Mixins/TranslateMixins.cs @@ -8,7 +8,7 @@ public static class TranslateMixins public static IDisposable Update(this TranslateService translate, IComponent component) { if (component is not IHandleEvent handleEvent) - return Disposable.Empty; + return System.Reactive.Disposables.Disposable.Empty; var @ref = new WeakReference(handleEvent); diff --git a/src/TabKeeper.UI.Wasm/Common/ThemeModule.cs b/src/TabKeeper.UI.Wasm/Common/ThemeModule.cs index 8dfd5b6..72199f5 100644 --- a/src/TabKeeper.UI.Wasm/Common/ThemeModule.cs +++ b/src/TabKeeper.UI.Wasm/Common/ThemeModule.cs @@ -18,11 +18,20 @@ public static Task Import(string? url = null) return JSHost.ImportAsync(name, url ?? "../js/theme.js"); } + [JSImport("configure", name)] + public static partial void Configure([JSMarshalAs] object? options); + [JSImport("updateDom", name)] public static partial void UpdateDom(); - [JSImport("toggle", name)] - public static partial void Toggle(); + [JSImport("getTheme", name)] + public static partial string GetTheme(); + + [JSImport("setTheme", name)] + public static partial string SetTheme([JSMarshalAs] string theme); + + [JSImport("setAuto", name)] + public static partial void SetAuto(); [JSImport("setDark", name)] public static partial void SetDark(); @@ -30,9 +39,6 @@ public static Task Import(string? url = null) [JSImport("setLight", name)] public static partial void SetLight(); - [JSImport("setAuto", name)] - public static partial void SetAuto(); - - [JSImport("getTheme", name)] - public static partial string GetTheme(); + [JSImport("toggle", name)] + public static partial void Toggle(); } diff --git a/src/TabKeeper.UI.Wasm/Components/Button.razor b/src/TabKeeper.UI.Wasm/Components/Button.razor index 5e5baa8..e141e46 100644 --- a/src/TabKeeper.UI.Wasm/Components/Button.razor +++ b/src/TabKeeper.UI.Wasm/Components/Button.razor @@ -44,10 +44,9 @@ [Parameter] public bool PreventDefault { get; set; } - private string TypeAttribute => this.GetAttributeOrDefault("type", "button"); - - private bool DisabledAttribute => this.GetAttributeOrDefault("disabled", false) || IsLoading; + private string TypeAttribute => this.Type("button"); - private string? ClassAttribute - => Css.Class(this.TryGetAttribute("class"), ("cursor-not-allowed relative", IsLoading)); + private bool DisabledAttribute => this.Disabled() || IsLoading; + + private string? ClassAttribute => this.Class(("cursor-not-allowed relative", IsLoading)); } diff --git a/src/TabKeeper.UI.Wasm/Components/Dialog.razor b/src/TabKeeper.UI.Wasm/Components/Dialog.razor new file mode 100644 index 0000000..ddfa635 --- /dev/null +++ b/src/TabKeeper.UI.Wasm/Components/Dialog.razor @@ -0,0 +1,121 @@ +@using Ignis.Components +@using Ignis.Components.HeadlessUI + +@inherits CoreComponent +@implements IAsyncDisposable + + + @if (IsOpen) + { + @(ChildContent?.Invoke(this)) + } + + +@code { + private Lazy> dialog; + private IDisposable? currentAction; + + [Parameter] + public bool IsOpen { get; set; } + + [Parameter] + public EventCallback IsOpenChanged { get; set; } + + [Parameter] + public IObservable? IsOpenWhen { get; set; } + + [Parameter] + public IObservable? UpdateWhen { get; set; } + + [Parameter] + public RenderFragment? ChildContent { get; set; } + + [Parameter] + public EventCallback OnClick { get; set; } + + [Parameter] + public EventCallback OnDismiss { get; set; } + + [Parameter] + public EventCallback OnShow { get; set; } + + public Dialog(IJSRuntime jsRuntime) + { + dialog = new(() => jsRuntime.InvokeAsync("document.getElementById", Id)); + } + + public void Open() + { + if (IsOpen || dialog is null) return; + + currentAction?.Dispose(); + currentAction = R3.Observable + .FromAsync(async ct => await (await dialog.Value).InvokeVoidAsync("showModal", ct)) + .Subscribe(this, static (_, state) => + { + state.IsOpen = true; + state.IsOpenChanged.InvokeAsync(true); + state.StateHasChanged(); + state.OnShow.InvokeAsync(); + }); + } + + public void Close() + { + if (!IsOpen || dialog is null) return; + + currentAction?.Dispose(); + currentAction = R3.Observable + .FromAsync(async ct => await (await dialog.Value).InvokeVoidAsync("close", ct)) + .Subscribe(this, static (_, state) => + { + state.IsOpen = false; + state.IsOpenChanged.InvokeAsync(false); + state.StateHasChanged(); + }); + } + + public void Toggle() + { + if (IsOpen) Close(); + else Open(); + } + + protected void OnClose() + { + IsOpen = false; + IsOpenChanged.InvokeAsync(IsOpen); + OnDismiss.InvokeAsync(); + } + + protected override void OnInitialized() + { + if (IsOpenWhen is { }) + { + IsOpenWhen + .Subscribe(open => + { + if (open) + Open(); + else + Close(); + }) + .DisposeWith(this); + } + if (UpdateWhen is { }) + { + UpdateWhen + .Subscribe(_ => Update()) + .DisposeWith(this); + } + } + + public async ValueTask DisposeAsync() + { + if (dialog.IsValueCreated is false) + { + return; + } + await (await dialog.Value).DisposeAsync(); + } +} diff --git a/src/TabKeeper.UI.Wasm/Components/DropdownContent.razor b/src/TabKeeper.UI.Wasm/Components/DropdownContent.razor index faa5baf..953d348 100644 --- a/src/TabKeeper.UI.Wasm/Components/DropdownContent.razor +++ b/src/TabKeeper.UI.Wasm/Components/DropdownContent.razor @@ -1,4 +1,5 @@ -@inherits CoreComponent +@using Core.Common +@inherits CoreComponent - + @ChildContent @@ -20,7 +21,7 @@ [Parameter] public Anchor Anchor { get; set; } = Anchor.Bottom | Anchor.Left; - private static string GetPosition(Anchor anchor) => @Css.Class( + private static string GetPosition(Anchor anchor) => @Bl.Class( ("bottom-full mb-2", anchor.HasFlag(Anchor.Top)), ("top-full mt-2", anchor.HasFlag(Anchor.Bottom)), ("left-0", anchor.HasFlag(Anchor.Left)), diff --git a/src/TabKeeper.UI.Wasm/Components/FluentValidator.cs b/src/TabKeeper.UI.Wasm/Components/FluentValidator.cs index 33095b6..96e6cd2 100644 --- a/src/TabKeeper.UI.Wasm/Components/FluentValidator.cs +++ b/src/TabKeeper.UI.Wasm/Components/FluentValidator.cs @@ -1,11 +1,10 @@ -using Core; -using FluentValidation; +using FluentValidation; using FluentValidation.Results; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Forms; using System.Buffers; -using System.Reactive.Disposables; -using System.Reactive.Linq; +using CompositeDisposable = System.Reactive.Disposables.CompositeDisposable; +using Observable = System.Reactive.Linq.Observable; namespace TabKeeper.Components; diff --git a/src/TabKeeper.UI.Wasm/Components/Modal.razor b/src/TabKeeper.UI.Wasm/Components/Modal.razor index ffe120b..3cf588e 100644 --- a/src/TabKeeper.UI.Wasm/Components/Modal.razor +++ b/src/TabKeeper.UI.Wasm/Components/Modal.razor @@ -1,104 +1,36 @@ -@inherits CoreComponent -@implements IDisposable - - - - - -
- -
+@* + @if (IsOpen) + { +
+ @(ChildContent?.Invoke(this)) +
+ } +
*@ -
-
- +@inherits CoreComponent -
- @(ChildContent?.Invoke(this)) -
-
-
-
-
-
+ +
+ @ChildContent?.Invoke(dialog) +
+
@code { - [Parameter] - public bool IsOpen { get; set; } + Dialog dialog = null!; [Parameter] - public EventCallback IsOpenChanged { get; set; } + public RenderFragment? ChildContent { get; set; } [Parameter] public IObservable? IsOpenWhen { get; set; } - [Parameter] - public IObservable? UpdateWhen { get; set; } - - [Parameter] - public RenderFragment? ChildContent { get; set; } - - [Parameter] - public bool BackdropDismiss { get; set; } = true; - - [Parameter] - public EventCallback OnDismiss { get; set; } - - [Parameter] - public EventCallback OnShow { get; set; } - - protected override void OnInitialized() - { - if (IsOpenWhen is { }) - { - var sub = IsOpenWhen.Subscribe(open => - { - IsOpen = open; - base.Update(); - }); - DisposeWith(sub); - } - if (UpdateWhen is { }) - { - var updateSub = UpdateWhen.Subscribe(_ => Update()); - DisposeWith(updateSub); - } - } - - public None Show() - { - IsOpen = true; - OnShow.InvokeAsync(); - base.Update(); - return None.Value; - } - - public None Close() + public void Open() { - IsOpen = false; - OnDismiss.InvokeAsync(); - base.Update(); - return None.Value; + dialog.Open(); } - public None Toggle() + public void Close() { - return IsOpen ? Close() : Show(); + dialog.Close(); } } diff --git a/src/TabKeeper.UI.Wasm/Components/_imports.razor b/src/TabKeeper.UI.Wasm/Components/_imports.razor index 3252e45..af7388c 100644 --- a/src/TabKeeper.UI.Wasm/Components/_imports.razor +++ b/src/TabKeeper.UI.Wasm/Components/_imports.razor @@ -1,3 +1,2 @@ @using Ignis.Components @using Ignis.Components.HeadlessUI -@using Ignis.Utils \ No newline at end of file diff --git a/src/TabKeeper.UI.Wasm/Pages/HomePage.razor b/src/TabKeeper.UI.Wasm/Pages/HomePage.razor index 8b75ca9..ad56c0f 100644 --- a/src/TabKeeper.UI.Wasm/Pages/HomePage.razor +++ b/src/TabKeeper.UI.Wasm/Pages/HomePage.razor @@ -26,18 +26,18 @@ - - + - diff --git a/src/TabKeeper.UI.Wasm/Pages/People/Components/PersonForm.razor b/src/TabKeeper.UI.Wasm/Pages/People/Components/PersonForm.razor index 0d21587..f482cef 100644 --- a/src/TabKeeper.UI.Wasm/Pages/People/Components/PersonForm.razor +++ b/src/TabKeeper.UI.Wasm/Pages/People/Components/PersonForm.razor @@ -1,15 +1,14 @@ @inherits CoreComponent @inject TranslateService translate - + -
+
+
- - @code { diff --git a/src/TabKeeper.UI.Wasm/Pages/SettingsPage.razor b/src/TabKeeper.UI.Wasm/Pages/SettingsPage.razor index 10154d7..b7db390 100644 --- a/src/TabKeeper.UI.Wasm/Pages/SettingsPage.razor +++ b/src/TabKeeper.UI.Wasm/Pages/SettingsPage.razor @@ -11,8 +11,6 @@ @code { - public static ConfigurationManager Configuration { get; } = new(); - protected override void OnInitialized() { ShellLayout.Context = new() { Title = "settings.title" | translate }; @@ -23,9 +21,9 @@ Preferences.Screen .WhenValuePreferenceChanged(Preferences.Theme) .Throttle(TimeSpan.FromMilliseconds(100)) - .Subscribe(p => ThemeModule.UpdateDom()) + .Subscribe(p => ThemeModule.SetTheme(p.Value)) .DisposeWith(this); - Preferences.Screen.Initialize(Configuration); + Preferences.Screen.Initialize(manager); } } diff --git a/src/TabKeeper.UI.Wasm/Pages/Tabs/Components/ProductForm.razor b/src/TabKeeper.UI.Wasm/Pages/Tabs/Components/ProductForm.razor index 2f1c005..2b49a32 100644 --- a/src/TabKeeper.UI.Wasm/Pages/Tabs/Components/ProductForm.razor +++ b/src/TabKeeper.UI.Wasm/Pages/Tabs/Components/ProductForm.razor @@ -1,26 +1,26 @@ @inherits CoreComponent @inject TranslateService translate - + -
+
+
- -
- +
+ +
- -
- +
+ +
- @code { diff --git a/src/TabKeeper.UI.Wasm/Pages/Tabs/Components/TabForm.razor b/src/TabKeeper.UI.Wasm/Pages/Tabs/Components/TabForm.razor index dcb552e..012b7a0 100644 --- a/src/TabKeeper.UI.Wasm/Pages/Tabs/Components/TabForm.razor +++ b/src/TabKeeper.UI.Wasm/Pages/Tabs/Components/TabForm.razor @@ -4,17 +4,17 @@ -
+
- + +
- -
+
+
- @code { diff --git a/src/TabKeeper.UI.Wasm/Pages/Tabs/TabPage.razor b/src/TabKeeper.UI.Wasm/Pages/Tabs/TabPage.razor index 923f347..5e96769 100644 --- a/src/TabKeeper.UI.Wasm/Pages/Tabs/TabPage.razor +++ b/src/TabKeeper.UI.Wasm/Pages/Tabs/TabPage.razor @@ -1,4 +1,8 @@ -@page "/tab/{Id}" +@using Core.Common +@using Ignis.Components +@using Ignis.Components.HeadlessUI + +@page "/tab/{Id}" @inherits CoreRxComponent @inject StorageDb db @inject TranslateService translate @@ -69,26 +73,22 @@

@ViewModel.People.Items.Sum(x => x.Total).ToString("0.00")

- @* *@ - - -
- + @("products" | translate) - + @("people" | translate) @@ -98,7 +98,7 @@
@* Product Modal *@ - + @{ var product = SelectedProduct.Value!; } @@ -123,7 +123,7 @@ @* Add Product Modal *@ - +
@* Add Person Modal *@ - -
+ +
@@ -160,9 +160,6 @@ private Modal NewProductModal { get; set; } = null!; private Modal NewPersonModal { get; set; } = null!; - [Parameter] - public string Id { get; set; } = string.Empty; - private void OnValidProduct(TabProduct product) { ViewModel.AddProduct(new(product)); diff --git a/src/TabKeeper.UI.Wasm/Program.cs b/src/TabKeeper.UI.Wasm/Program.cs index 46f847e..54cca83 100644 --- a/src/TabKeeper.UI.Wasm/Program.cs +++ b/src/TabKeeper.UI.Wasm/Program.cs @@ -1,14 +1,11 @@ -using Annular.Translate; -using Annular.Translate.Abstract; -using Annular.Translate.HttpLoader; using Blazored.LocalStorage; using Core.Preferences; -using Ignis.Components.HeadlessUI; using Ignis.Components.WebAssembly; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.JSInterop; -using System.Diagnostics.CodeAnalysis; +using Noctilocus.Abstract; +using Noctilocus.HttpLoader; using TabKeeper.Common; using TabKeeper.Common.Migrations; @@ -18,7 +15,6 @@ builder.RootComponents.Add("#app"); builder.RootComponents.Add("head::after"); -builder.RootComponents.Add("#dialog-outlet"); services.AddIgnisWebAssembly(); services.AddBlazoredLocalStorage(c => c.JsonSerializerOptions = Options.Json); @@ -45,12 +41,7 @@ await Import(); await InitializeLang(app); - -var storage = app.Services.GetRequiredService(); -await storage.Initialize(); - -var migration = app.Services.GetRequiredService(); -await migration.Migrate(); +await InitializeDatabase(app); await app.RunAsync(); @@ -76,5 +67,14 @@ static Task InitializeLang(WebAssemblyHost app) lang = "en"; } localStorage.SetItemAsString("lang", lang); - return translate.SetCurrentLang(lang).ToTask(); + return translate.SetCurrentLang(lang).FirstAsync(); +} + +static async Task InitializeDatabase(WebAssemblyHost app) +{ + var storage = app.Services.GetRequiredService(); + await storage.Initialize(); + + var migration = app.Services.GetRequiredService(); + await migration.Migrate(); } diff --git a/src/TabKeeper.UI.Wasm/TabKeeper.UI.Wasm.csproj b/src/TabKeeper.UI.Wasm/TabKeeper.UI.Wasm.csproj index 8df53bc..9dcc2bd 100644 --- a/src/TabKeeper.UI.Wasm/TabKeeper.UI.Wasm.csproj +++ b/src/TabKeeper.UI.Wasm/TabKeeper.UI.Wasm.csproj @@ -13,11 +13,10 @@ - - + diff --git a/src/TabKeeper.UI.Wasm/_Imports.razor b/src/TabKeeper.UI.Wasm/_Imports.razor index dd590cf..c9a56fa 100644 --- a/src/TabKeeper.UI.Wasm/_Imports.razor +++ b/src/TabKeeper.UI.Wasm/_Imports.razor @@ -23,8 +23,4 @@ @using TabKeeper @using TabKeeper.Components @using TabKeeper.Common -@using Ignis.Components -@using Ignis.Components.HeadlessUI -@using Ignis.Components.Reactivity -@using Ignis.Utils @using P41.FontAwesome \ No newline at end of file diff --git a/src/TabKeeper.UI.Wasm/_usings.cs b/src/TabKeeper.UI.Wasm/_usings.cs index 1121634..cfe2bf8 100644 --- a/src/TabKeeper.UI.Wasm/_usings.cs +++ b/src/TabKeeper.UI.Wasm/_usings.cs @@ -3,9 +3,12 @@ global using DynamicData; global using DynamicData.Aggregation; global using Flurl; +global using Noctilocus; +global using R3; +global using System.Diagnostics.CodeAnalysis; global using System.Reactive; global using System.Reactive.Linq; global using System.Reactive.Threading; global using System.Reactive.Threading.Tasks; global using TabKeeper; -global using TabKeeper.Layout; +global using TabKeeper.Layout; \ No newline at end of file diff --git a/src/TabKeeper.UI.Wasm/assets/_buttons.scss b/src/TabKeeper.UI.Wasm/assets/_buttons.scss deleted file mode 100644 index 084b76b..0000000 --- a/src/TabKeeper.UI.Wasm/assets/_buttons.scss +++ /dev/null @@ -1,25 +0,0 @@ -@layer components { - .btn { - @apply px-3 py-1 flex items-center justify-center rounded-lg outline-none; - } - - .btn-primary { - @apply interactive-bg-primary; - } - - .btn-secondary { - @apply interactive-bg-secondary; - } - - .btn-tertiary { - @apply interactive-bg-tertiary; - } - - .btn-danger { - @apply interactive-bg-error; - } - - .btn-cancel { - @apply interactive-bg-error; - } -} diff --git a/src/TabKeeper.UI.Wasm/assets/_cards.scss b/src/TabKeeper.UI.Wasm/assets/_cards.scss deleted file mode 100644 index 3160c68..0000000 --- a/src/TabKeeper.UI.Wasm/assets/_cards.scss +++ /dev/null @@ -1,5 +0,0 @@ -@layer components { - .card { - @apply rounded-lg bg-surface-variant p-4; - } -} diff --git a/src/TabKeeper.UI.Wasm/assets/_details.scss b/src/TabKeeper.UI.Wasm/assets/_details.scss deleted file mode 100644 index 9920aad..0000000 --- a/src/TabKeeper.UI.Wasm/assets/_details.scss +++ /dev/null @@ -1,47 +0,0 @@ -@layer components { - details { - interpolate-size: allow-keywords; - overflow: clip; - margin-top: 0.125em; - border: 1px solid #dddddd; - background: #ffffff; - color: #333333; - border-radius: 3px; - - main { - padding: 4px; - } - - summary { - display: block; - cursor: pointer; - position: relative; - padding: 0.5em 0.5em 0.5em 0.7em; - background: #ededed; - color: #2b2b2b; - border-radius: 3px 3px 0 0; - } - } - - details:not([open]) summary:hover, - details:not([open]) summary:focus { - background: #f6f6f6; - color: #454545; - } - - details[open] summary { - outline: 1px solid #003eff; - background: #007fff; - color: #ffffff; - } - - details[open]::details-content { - height: auto; - } - - details::details-content { - height: 0; - overflow-y: clip; - transition: content-visibility 475ms allow-discrete, height 475ms; - } -} diff --git a/src/TabKeeper.UI.Wasm/assets/_icons.scss b/src/TabKeeper.UI.Wasm/assets/_icons.scss deleted file mode 100644 index 219fa37..0000000 --- a/src/TabKeeper.UI.Wasm/assets/_icons.scss +++ /dev/null @@ -1,26 +0,0 @@ -@layer base { - .icon-2xs { - @apply w-3 h-3; - } - .icon-xs { - @apply w-4 h-4; - } - .icon-sm { - @apply w-5 h-5; - } - .icon { - @apply w-6 h-6; - } - .icon-lg { - @apply w-7 h-7; - } - .icon-xl { - @apply w-8 h-8; - } - .icon-2xl { - @apply w-9 h-9; - } - .icon-3xl { - @apply w-10 h-10; - } -} diff --git a/src/TabKeeper.UI.Wasm/assets/_material-input.scss b/src/TabKeeper.UI.Wasm/assets/_material-input.scss deleted file mode 100644 index eaa1810..0000000 --- a/src/TabKeeper.UI.Wasm/assets/_material-input.scss +++ /dev/null @@ -1,43 +0,0 @@ -@layer base { - input, - textarea { - @apply w-full p-2 rounded focus:ring-0; - } - - .error, - .validation-message { - @apply text-sm text-error; - } - - .material-input { - @apply relative; - - input { - @apply rounded p-2 pt-5 border border-transparent placeholder-transparent bg-surface focus:border-on-surface focus:ring-0; - - } - - input.invalid { - @apply border-error; - } - - label { - /* Defaults */ - @apply pointer-events-none absolute top-0 translate-y-1/2 text-on-surface cursor-text text-opacity-70 transition-all duration-200; - /* Styling */ - @apply text-sm font-medium; - @apply next-input-placeholder-shown:text-base; - @apply next-input-focus:text-sm; - /* Placing */ - @apply bottom-full px-2; - @apply next-input-placeholder-shown:bottom-1/2; - @apply next-input-focus:bottom-full next-input-focus:top-0; - } - } - - .material-checkbox { - input[type='checkbox'] { - @apply appearance-none min-w-[18px] min-h-[18px] rounded-sm; - } - } -} diff --git a/src/TabKeeper.UI.Wasm/assets/_preferences.scss b/src/TabKeeper.UI.Wasm/assets/_preferences.scss deleted file mode 100644 index 1a76a70..0000000 --- a/src/TabKeeper.UI.Wasm/assets/_preferences.scss +++ /dev/null @@ -1,36 +0,0 @@ -@layer components { - .preference-screen { - h1 { - @apply text-2xl text-on-surface font-semibold m-0; - } - } - - .preference-category { - @apply pb-4; - } - .preference-category-title-container { - @apply pb-2; - } - .preference-category-title-icon { - } - .preference-category-title { - } - .preference-category-description { - } - .preference-category-items { - } - - .preference-control-container { - @apply pb-3 last:pb-0; - } - - .preference-label { - @apply text-base text-on-surface; - } - .preference-input, - .preference-select { - @apply w-full rounded bg-primary px-2 py-1; - } - .preference-option { - } -} diff --git a/src/TabKeeper.UI.Wasm/assets/_skeleton.scss b/src/TabKeeper.UI.Wasm/assets/_skeleton.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/TabKeeper.UI.Wasm/assets/app.scss b/src/TabKeeper.UI.Wasm/assets/app.scss index 704db04..28d8c49 100644 --- a/src/TabKeeper.UI.Wasm/assets/app.scss +++ b/src/TabKeeper.UI.Wasm/assets/app.scss @@ -1,51 +1,48 @@ -@import "./_buttons.scss"; -@import "./_cards.scss"; -@import "./_details.scss"; -@import "./_icons.scss"; -@import "./_material-input.scss"; -@import "./_preferences.scss"; -@import "./_skeleton.scss"; - -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer base { - html - body, - #app { - @apply w-screen h-dvh bg-surface; - } - - #app { - @apply grid grid-rows-[auto_minmax(0,1fr)]; - } - - h1 { - @apply text-2xl font-bold; - } - - h2 { - @apply text-xl font-medium; - } - - h3 { - @apply text-lg font-medium; - } - - h4 { - @apply text-base font-medium; - } - - p { - @apply text-base; - } - - small { - @apply text-xs; - } - - label { - @apply text-base; - } +@import "tailwindcss"; +@import "./custom-variants.css"; +@import "./material-theme.css"; +@import "./components/_buttons.css"; +@import "./components/_cards.css"; +@import "./components/_details.css"; +@import "./components/_dialog.css"; +@import "./components/_icons.css"; +@import "./components/_material.css"; +@import "./components/_preferences.css"; + +html +body, +#app { + @apply w-screen h-dvh bg-surface; +} + +#app { + @apply grid grid-rows-[auto_minmax(0,1fr)]; +} + +h1 { + @apply text-2xl font-bold; +} + +h2 { + @apply text-xl font-medium; +} + +h3 { + @apply text-lg font-medium; +} + +h4 { + @apply text-base font-medium; +} + +p { + @apply text-base; +} + +small { + @apply text-xs; +} + +label { + @apply text-base; } diff --git a/src/TabKeeper.UI.Wasm/assets/components/_buttons.css b/src/TabKeeper.UI.Wasm/assets/components/_buttons.css new file mode 100644 index 0000000..e937856 --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/components/_buttons.css @@ -0,0 +1,23 @@ +@utility btn { + @apply px-3 py-1 flex items-center justify-center rounded-lg outline-none; +} + +@utility btn-primary { + @apply interactive-bg-primary; +} + +@utility btn-secondary { + @apply interactive-bg-secondary; +} + +@utility btn-tertiary { + @apply interactive-bg-tertiary; +} + +@utility btn-danger { + @apply interactive-bg-error; +} + +@utility btn-cancel { + @apply interactive-bg-error; +} diff --git a/src/TabKeeper.UI.Wasm/assets/components/_cards.css b/src/TabKeeper.UI.Wasm/assets/components/_cards.css new file mode 100644 index 0000000..80d8e29 --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/components/_cards.css @@ -0,0 +1,3 @@ +@utility card { + @apply rounded-lg bg-surface-variant p-4; +} diff --git a/src/TabKeeper.UI.Wasm/assets/components/_details.css b/src/TabKeeper.UI.Wasm/assets/components/_details.css new file mode 100644 index 0000000..5648a5a --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/components/_details.css @@ -0,0 +1,45 @@ +details { + interpolate-size: allow-keywords; + overflow: clip; + margin-top: 0.125em; + border: 1px solid #dddddd; + background: #ffffff; + color: #333333; + border-radius: 3px; + + main { + padding: 4px; + } + + summary { + display: block; + cursor: pointer; + position: relative; + padding: 0.5em 0.5em 0.5em 0.7em; + background: #ededed; + color: #2b2b2b; + border-radius: 3px 3px 0 0; + } +} + +details:not([open]) summary:hover, +details:not([open]) summary:focus { + background: #f6f6f6; + color: #454545; +} + +details[open] summary { + outline: 1px solid #003eff; + background: #007fff; + color: #ffffff; +} + +details[open]::details-content { + height: auto; +} + +details::details-content { + height: 0; + overflow-y: clip; + transition: content-visibility 475ms allow-discrete, height 475ms; +} diff --git a/src/TabKeeper.UI.Wasm/assets/components/_dialog.css b/src/TabKeeper.UI.Wasm/assets/components/_dialog.css new file mode 100644 index 0000000..8460d0a --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/components/_dialog.css @@ -0,0 +1,35 @@ +/* Open state of the dialog */ +dialog[open] { + opacity: 1; +} + +/* Closed state of the dialog */ +dialog { + opacity: 0; + transition: opacity 0.2s ease-out, overlay 0.2s ease-out allow-discrete, display 0.2s ease-out allow-discrete; +} + +/* Before-open state */ +/* Needs to be after the previous dialog[open] rule to take effect, as the specificity is the same */ +@starting-style { + dialog[open] { + opacity: 0; + } +} + +/* Transition the :backdrop when the dialog modal is promoted to the top layer */ +dialog::backdrop { + background-color: rgb(0 0 0 / 0%); + transition: display 0.2s allow-discrete, overlay 0.2s allow-discrete, background-color 0.2s; +} + +dialog[open]::backdrop { + background-color: rgb(0 0 0 / 25%); +} + +/* This starting-style rule cannot be nested inside the above selector because the nesting selector cannot represent pseudo-elements. */ +@starting-style { + dialog[open]::backdrop { + background-color: rgb(0 0 0 / 0%); + } +} diff --git a/src/TabKeeper.UI.Wasm/assets/components/_icons.css b/src/TabKeeper.UI.Wasm/assets/components/_icons.css new file mode 100644 index 0000000..a88bd33 --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/components/_icons.css @@ -0,0 +1,31 @@ +@utility icon-2xs { + @apply w-3 h-3; +} + +@utility icon-xs { + @apply w-4 h-4; +} + +@utility icon-sm { + @apply w-5 h-5; +} + +@utility icon { + @apply w-6 h-6; +} + +@utility icon-lg { + @apply w-7 h-7; +} + +@utility icon-xl { + @apply w-8 h-8; +} + +@utility icon-2xl { + @apply w-9 h-9; +} + +@utility icon-3xl { + @apply w-10 h-10; +} \ No newline at end of file diff --git a/src/TabKeeper.UI.Wasm/assets/components/_material.css b/src/TabKeeper.UI.Wasm/assets/components/_material.css new file mode 100644 index 0000000..ff2e54e --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/components/_material.css @@ -0,0 +1,36 @@ +.material { + @apply relative; + + input, + textarea { + @apply w-full border rounded focus:ring-0 focus:ring-offset-0 focus:outline-none; + @apply p-1 ps-2 pt-4.5 placeholder-transparent; + @apply border-transparent bg-surface; + + &.invalid, + &:invalid { + @apply border-error; + } + + &:focus { + @apply border-on-surface; + } + } + + label { + /* Default */ + @apply pointer-events-none absolute cursor-text px-2 transition-transform duration-200; + @apply text-base text-on-surface/70; + + /* Focus and Placeholder */ + &:has(+ input:not(:focus)):has(+ input:placeholder-shown), + &:has(+ textarea:not(:focus)):has(+ textarea:placeholder-shown) { + @apply translate-y-1/2; + } + } + + .error, + .validation-message { + @apply text-sm text-error; + } +} diff --git a/src/TabKeeper.UI.Wasm/assets/components/_preferences.css b/src/TabKeeper.UI.Wasm/assets/components/_preferences.css new file mode 100644 index 0000000..26ec563 --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/components/_preferences.css @@ -0,0 +1,34 @@ +.preference-screen { + h1 { + @apply text-2xl text-on-surface font-semibold m-0; + } +} + +.preference-category { + @apply pb-4; +} +.preference-category-title-container { + @apply pb-2; +} +.preference-category-title-icon { +} +.preference-category-title { +} +.preference-category-description { +} +.preference-category-items { +} + +.preference-control-container { + @apply pb-3 last:pb-0; +} + +.preference-label { + @apply text-base text-on-surface; +} +.preference-input, +.preference-select { + @apply w-full rounded bg-primary px-2 py-1; +} +.preference-option { +} diff --git a/src/TabKeeper.UI.Wasm/assets/custom-variants.css b/src/TabKeeper.UI.Wasm/assets/custom-variants.css new file mode 100644 index 0000000..2cbdb05 --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/custom-variants.css @@ -0,0 +1,26 @@ +/* Parent variant */ +@custom-variant parent { + .parent > & { + @slot; + } +} + +@custom-variant ancestor { + .parent & { + @slot; + } +} + +/* Next input variant */ +@custom-variant next-input { + &:has(+ input) { + @slot; + } +} + +/* Peer input variant */ +@custom-variant peer-input { + input ~ & { + @slot; + } +} diff --git a/src/TabKeeper.UI.Wasm/assets/material-theme.css b/src/TabKeeper.UI.Wasm/assets/material-theme.css new file mode 100644 index 0000000..4107c20 --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/material-theme.css @@ -0,0 +1,215 @@ +/* depending on your strategy the order matters */ +@import "./theme/winter/light.css"; +@import "./theme/winter/dark.css"; +@import "./theme/fall/light.css"; +@import "./theme/fall/dark.css"; +@import "./theme/spring/light.css"; +@import "./theme/spring/dark.css"; +@import "./theme/summer/light.css"; +@import "./theme/summer/dark.css"; + +@theme { + --color-primary: var(--md-sys-color-primary); + --color-surface-tint: var(--md-sys-color-surface-tint); + --color-on-primary: var(--md-sys-color-on-primary); + --color-primary-container: var(--md-sys-color-primary-container); + --color-on-primary-container: var(--md-sys-color-on-primary-container); + --color-secondary: var(--md-sys-color-secondary); + --color-on-secondary: var(--md-sys-color-on-secondary); + --color-secondary-container: var(--md-sys-color-secondary-container); + --color-on-secondary-container: var(--md-sys-color-on-secondary-container); + --color-tertiary: var(--md-sys-color-tertiary); + --color-on-tertiary: var(--md-sys-color-on-tertiary); + --color-tertiary-container: var(--md-sys-color-tertiary-container); + --color-on-tertiary-container: var(--md-sys-color-on-tertiary-container); + --color-error: var(--md-sys-color-error); + --color-on-error: var(--md-sys-color-on-error); + --color-error-container: var(--md-sys-color-error-container); + --color-on-error-container: var(--md-sys-color-on-error-container); + --color-background: var(--md-sys-color-background); + --color-on-background: var(--md-sys-color-on-background); + --color-surface: var(--md-sys-color-surface); + --color-on-surface: var(--md-sys-color-on-surface); + --color-surface-variant: var(--md-sys-color-surface-variant); + --color-on-surface-variant: var(--md-sys-color-on-surface-variant); + --color-outline: var(--md-sys-color-outline); + --color-outline-variant: var(--md-sys-color-outline-variant); + --color-shadow: var(--md-sys-color-shadow); + --color-scrim: var(--md-sys-color-scrim); + --color-inverse-surface: var(--md-sys-color-inverse-surface); + --color-inverse-on-surface: var(--md-sys-color-inverse-on-surface); + --color-inverse-primary: var(--md-sys-color-inverse-primary); + --color-primary-fixed: var(--md-sys-color-primary-fixed); + --color-on-primary-fixed: var(--md-sys-color-on-primary-fixed); + --color-primary-fixed-dim: var(--md-sys-color-primary-fixed-dim); + --color-on-primary-fixed-variant: var(--md-sys-color-on-primary-fixed-variant); + --color-secondary-fixed: var(--md-sys-color-secondary-fixed); + --color-on-secondary-fixed: var(--md-sys-color-on-secondary-fixed); + --color-secondary-fixed-dim: var(--md-sys-color-secondary-fixed-dim); + --color-on-secondary-fixed-variant: var(--md-sys-color-on-secondary-fixed-variant); + --color-tertiary-fixed: var(--md-sys-color-tertiary-fixed); + --color-on-tertiary-fixed: var(--md-sys-color-on-tertiary-fixed); + --color-tertiary-fixed-dim: var(--md-sys-color-tertiary-fixed-dim); + --color-on-tertiary-fixed-variant: var(--md-sys-color-on-tertiary-fixed-variant); + --color-surface-dim: var(--md-sys-color-surface-dim); + --color-surface-bright: var(--md-sys-color-surface-bright); + --color-surface-container-lowest: var(--md-sys-color-surface-container-lowest); + --color-surface-container-low: var(--md-sys-color-surface-container-low); + --color-surface-container: var(--md-sys-color-surface-container); + --color-surface-container-high: var(--md-sys-color-surface-container-high); + --color-surface-container-highest: var(--md-sys-color-surface-container-highest); +} + +@utility bg-primary { + @apply text-on-primary; +} + +@utility bg-primary-container { + @apply text-on-primary-container; +} + +@utility bg-secondary { + @apply text-on-secondary; +} + +@utility bg-secondary-container { + @apply text-on-secondary-container; +} + +@utility bg-tertiary { + @apply text-on-tertiary; +} + +@utility bg-tertiary-container { + @apply text-on-tertiary-container; +} + +@utility bg-error { + @apply text-on-error; +} + +@utility bg-error-container { + @apply text-on-error-container; +} + +@utility bg-background { + @apply text-on-background; +} + +@utility bg-surface { + @apply text-on-surface; +} + +@utility bg-surface-variant { + @apply text-on-surface-variant; +} + +@utility bg-primary-fixed { + @apply text-on-primary-fixed; +} + +@utility bg-secondary-fixed { + @apply text-on-secondary-fixed; +} + +@utility bg-tertiary-fixed { + @apply text-on-tertiary-fixed; +} + +@utility interactive-bg-primary { + @apply bg-primary; + @apply hover:bg-primary/90; + @apply active:bg-primary/95 active:text-on-primary/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} + +@utility interactive-bg-primary-container { + @apply bg-primary-container; + @apply hover:bg-primary-container/90; + @apply active:bg-primary-container/95 active:text-on-primary-container/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} + +@utility interactive-bg-secondary { + @apply bg-secondary; + @apply hover:bg-secondary/90; + @apply active:bg-secondary/95 active:text-on-secondary/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} + +@utility interactive-bg-secondary-container { + @apply bg-secondary-container; + @apply hover:bg-secondary-container/90; + @apply active:bg-secondary-container/95 active:text-on-secondary-container/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} + +@utility interactive-bg-tertiary { + @apply bg-tertiary; + @apply hover:bg-tertiary/90; + @apply active:bg-tertiary/95 active:text-on-tertiary/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} + +@utility interactive-bg-tertiary-container { + @apply bg-tertiary-container; + @apply hover:bg-tertiary-container/90; + @apply active:bg-tertiary-container/95 active:text-on-tertiary-container/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} + +@utility interactive-bg-error { + @apply bg-error; + @apply hover:bg-error/90; + @apply active:bg-error/95 active:text-on-error/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} + +@utility interactive-bg-error-container { + @apply bg-error-container; + @apply hover:bg-error-container/90; + @apply active:bg-error-container/95 active:text-on-error-container/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} + +@utility interactive-bg-background { + @apply bg-background; + @apply hover:bg-background/90; + @apply active:bg-background/95 active:text-on-background/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} + +@utility interactive-bg-surface { + @apply bg-surface; + @apply hover:bg-surface/90; + @apply active:bg-surface/95 active:text-on-surface/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} + +@utility interactive-bg-surface-variant { + @apply bg-surface-variant; + @apply hover:bg-surface-variant/90; + @apply active:bg-surface-variant/95 active:text-on-surface-variant/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} + +@utility interactive-bg-primary-fixed { + @apply bg-primary-fixed; + @apply hover:bg-primary-fixed/90; + @apply active:bg-primary-fixed/95 active:text-on-primary-fixed/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} + +@utility interactive-bg-secondary-fixed { + @apply bg-secondary-fixed; + @apply hover:bg-secondary-fixed/90; + @apply active:bg-secondary-fixed/95 active:text-on-secondary-fixed/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} + +@utility interactive-bg-tertiary-fixed { + @apply bg-tertiary-fixed; + @apply hover:bg-tertiary-fixed/90; + @apply active:bg-tertiary-fixed/95 active:text-on-tertiary-fixed/80; + @apply disabled:bg-on-surface/20 disabled:text-on-surface/20; +} diff --git a/src/TabKeeper.UI.Wasm/assets/theme/fall/dark.css b/src/TabKeeper.UI.Wasm/assets/theme/fall/dark.css new file mode 100644 index 0000000..a08aab6 --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/theme/fall/dark.css @@ -0,0 +1,51 @@ +[theme="fall-dark"] { + --md-sys-color-primary: rgb(255 181 160); + --md-sys-color-surface-tint: rgb(255 181 160); + --md-sys-color-on-primary: rgb(86 31 15); + --md-sys-color-primary-container: rgb(114 53 35); + --md-sys-color-on-primary-container: rgb(255 219 209); + --md-sys-color-secondary: rgb(231 189 178); + --md-sys-color-on-secondary: rgb(68 42 34); + --md-sys-color-secondary-container: rgb(93 64 55); + --md-sys-color-on-secondary-container: rgb(255 219 209); + --md-sys-color-tertiary: rgb(216 197 141); + --md-sys-color-on-tertiary: rgb(59 47 5); + --md-sys-color-tertiary-container: rgb(83 70 25); + --md-sys-color-on-tertiary-container: rgb(245 225 167); + --md-sys-color-error: rgb(255 180 171); + --md-sys-color-on-error: rgb(105 0 5); + --md-sys-color-error-container: rgb(147 0 10); + --md-sys-color-on-error-container: rgb(255 218 214); + --md-sys-color-background: rgb(26 17 15); + --md-sys-color-on-background: rgb(241 223 218); + --md-sys-color-surface: rgb(26 17 15); + --md-sys-color-on-surface: rgb(241 223 218); + --md-sys-color-surface-variant: rgb(83 67 63); + --md-sys-color-on-surface-variant: rgb(216 194 188); + --md-sys-color-outline: rgb(160 140 135); + --md-sys-color-outline-variant: rgb(83 67 63); + --md-sys-color-shadow: rgb(0 0 0); + --md-sys-color-scrim: rgb(0 0 0); + --md-sys-color-inverse-surface: rgb(241 223 218); + --md-sys-color-inverse-on-surface: rgb(57 46 43); + --md-sys-color-inverse-primary: rgb(143 76 56); + --md-sys-color-primary-fixed: rgb(255 219 209); + --md-sys-color-on-primary-fixed: rgb(58 11 1); + --md-sys-color-primary-fixed-dim: rgb(255 181 160); + --md-sys-color-on-primary-fixed-variant: rgb(114 53 35); + --md-sys-color-secondary-fixed: rgb(255 219 209); + --md-sys-color-on-secondary-fixed: rgb(44 21 15); + --md-sys-color-secondary-fixed-dim: rgb(231 189 178); + --md-sys-color-on-secondary-fixed-variant: rgb(93 64 55); + --md-sys-color-tertiary-fixed: rgb(245 225 167); + --md-sys-color-on-tertiary-fixed: rgb(35 27 0); + --md-sys-color-tertiary-fixed-dim: rgb(216 197 141); + --md-sys-color-on-tertiary-fixed-variant: rgb(83 70 25); + --md-sys-color-surface-dim: rgb(26 17 15); + --md-sys-color-surface-bright: rgb(66 55 52); + --md-sys-color-surface-container-lowest: rgb(20 12 10); + --md-sys-color-surface-container-low: rgb(35 25 23); + --md-sys-color-surface-container: rgb(39 29 27); + --md-sys-color-surface-container-high: rgb(50 40 37); + --md-sys-color-surface-container-highest: rgb(61 50 47); +} diff --git a/src/TabKeeper.UI.Wasm/assets/theme/fall/light.css b/src/TabKeeper.UI.Wasm/assets/theme/fall/light.css new file mode 100644 index 0000000..73f7a12 --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/theme/fall/light.css @@ -0,0 +1,51 @@ +[theme="fall-light"] { + --md-sys-color-primary: rgb(143 76 56); + --md-sys-color-surface-tint: rgb(143 76 56); + --md-sys-color-on-primary: rgb(255 255 255); + --md-sys-color-primary-container: rgb(255 219 209); + --md-sys-color-on-primary-container: rgb(114 53 35); + --md-sys-color-secondary: rgb(119 87 78); + --md-sys-color-on-secondary: rgb(255 255 255); + --md-sys-color-secondary-container: rgb(255 219 209); + --md-sys-color-on-secondary-container: rgb(93 64 55); + --md-sys-color-tertiary: rgb(108 93 47); + --md-sys-color-on-tertiary: rgb(255 255 255); + --md-sys-color-tertiary-container: rgb(245 225 167); + --md-sys-color-on-tertiary-container: rgb(83 70 25); + --md-sys-color-error: rgb(186 26 26); + --md-sys-color-on-error: rgb(255 255 255); + --md-sys-color-error-container: rgb(255 218 214); + --md-sys-color-on-error-container: rgb(147 0 10); + --md-sys-color-background: rgb(255 248 246); + --md-sys-color-on-background: rgb(35 25 23); + --md-sys-color-surface: rgb(255 248 246); + --md-sys-color-on-surface: rgb(35 25 23); + --md-sys-color-surface-variant: rgb(245 222 216); + --md-sys-color-on-surface-variant: rgb(83 67 63); + --md-sys-color-outline: rgb(133 115 110); + --md-sys-color-outline-variant: rgb(216 194 188); + --md-sys-color-shadow: rgb(0 0 0); + --md-sys-color-scrim: rgb(0 0 0); + --md-sys-color-inverse-surface: rgb(57 46 43); + --md-sys-color-inverse-on-surface: rgb(255 237 232); + --md-sys-color-inverse-primary: rgb(255 181 160); + --md-sys-color-primary-fixed: rgb(255 219 209); + --md-sys-color-on-primary-fixed: rgb(58 11 1); + --md-sys-color-primary-fixed-dim: rgb(255 181 160); + --md-sys-color-on-primary-fixed-variant: rgb(114 53 35); + --md-sys-color-secondary-fixed: rgb(255 219 209); + --md-sys-color-on-secondary-fixed: rgb(44 21 15); + --md-sys-color-secondary-fixed-dim: rgb(231 189 178); + --md-sys-color-on-secondary-fixed-variant: rgb(93 64 55); + --md-sys-color-tertiary-fixed: rgb(245 225 167); + --md-sys-color-on-tertiary-fixed: rgb(35 27 0); + --md-sys-color-tertiary-fixed-dim: rgb(216 197 141); + --md-sys-color-on-tertiary-fixed-variant: rgb(83 70 25); + --md-sys-color-surface-dim: rgb(232 214 210); + --md-sys-color-surface-bright: rgb(255 248 246); + --md-sys-color-surface-container-lowest: rgb(255 255 255); + --md-sys-color-surface-container-low: rgb(255 241 237); + --md-sys-color-surface-container: rgb(252 234 229); + --md-sys-color-surface-container-high: rgb(247 228 224); + --md-sys-color-surface-container-highest: rgb(241 223 218); +} diff --git a/src/TabKeeper.UI.Wasm/assets/theme/spring/dark.css b/src/TabKeeper.UI.Wasm/assets/theme/spring/dark.css new file mode 100644 index 0000000..9b2f01d --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/theme/spring/dark.css @@ -0,0 +1,51 @@ +[theme="spring-dark"] { + --md-sys-color-primary: rgb(177 209 138); + --md-sys-color-surface-tint: rgb(177 209 138); + --md-sys-color-on-primary: rgb(31 55 1); + --md-sys-color-primary-container: rgb(53 78 22); + --md-sys-color-on-primary-container: rgb(205 237 163); + --md-sys-color-secondary: rgb(191 203 173); + --md-sys-color-on-secondary: rgb(42 51 30); + --md-sys-color-secondary-container: rgb(64 74 51); + --md-sys-color-on-secondary-container: rgb(220 231 200); + --md-sys-color-tertiary: rgb(160 208 203); + --md-sys-color-on-tertiary: rgb(0 55 53); + --md-sys-color-tertiary-container: rgb(31 78 75); + --md-sys-color-on-tertiary-container: rgb(188 236 231); + --md-sys-color-error: rgb(255 180 171); + --md-sys-color-on-error: rgb(105 0 5); + --md-sys-color-error-container: rgb(147 0 10); + --md-sys-color-on-error-container: rgb(255 218 214); + --md-sys-color-background: rgb(18 20 14); + --md-sys-color-on-background: rgb(226 227 216); + --md-sys-color-surface: rgb(18 20 14); + --md-sys-color-on-surface: rgb(226 227 216); + --md-sys-color-surface-variant: rgb(68 72 61); + --md-sys-color-on-surface-variant: rgb(197 200 186); + --md-sys-color-outline: rgb(143 146 133); + --md-sys-color-outline-variant: rgb(68 72 61); + --md-sys-color-shadow: rgb(0 0 0); + --md-sys-color-scrim: rgb(0 0 0); + --md-sys-color-inverse-surface: rgb(226 227 216); + --md-sys-color-inverse-on-surface: rgb(47 49 42); + --md-sys-color-inverse-primary: rgb(76 102 43); + --md-sys-color-primary-fixed: rgb(205 237 163); + --md-sys-color-on-primary-fixed: rgb(16 32 0); + --md-sys-color-primary-fixed-dim: rgb(177 209 138); + --md-sys-color-on-primary-fixed-variant: rgb(53 78 22); + --md-sys-color-secondary-fixed: rgb(220 231 200); + --md-sys-color-on-secondary-fixed: rgb(21 30 11); + --md-sys-color-secondary-fixed-dim: rgb(191 203 173); + --md-sys-color-on-secondary-fixed-variant: rgb(64 74 51); + --md-sys-color-tertiary-fixed: rgb(188 236 231); + --md-sys-color-on-tertiary-fixed: rgb(0 32 30); + --md-sys-color-tertiary-fixed-dim: rgb(160 208 203); + --md-sys-color-on-tertiary-fixed-variant: rgb(31 78 75); + --md-sys-color-surface-dim: rgb(18 20 14); + --md-sys-color-surface-bright: rgb(56 58 50); + --md-sys-color-surface-container-lowest: rgb(12 15 9); + --md-sys-color-surface-container-low: rgb(26 28 22); + --md-sys-color-surface-container: rgb(30 32 26); + --md-sys-color-surface-container-high: rgb(40 43 36); + --md-sys-color-surface-container-highest: rgb(51 54 46); +} diff --git a/src/TabKeeper.UI.Wasm/assets/theme/spring/light.css b/src/TabKeeper.UI.Wasm/assets/theme/spring/light.css new file mode 100644 index 0000000..cf3130d --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/theme/spring/light.css @@ -0,0 +1,51 @@ +[theme="spring-light"] { + --md-sys-color-primary: rgb(76 102 43); + --md-sys-color-surface-tint: rgb(76 102 43); + --md-sys-color-on-primary: rgb(255 255 255); + --md-sys-color-primary-container: rgb(205 237 163); + --md-sys-color-on-primary-container: rgb(53 78 22); + --md-sys-color-secondary: rgb(88 98 73); + --md-sys-color-on-secondary: rgb(255 255 255); + --md-sys-color-secondary-container: rgb(220 231 200); + --md-sys-color-on-secondary-container: rgb(64 74 51); + --md-sys-color-tertiary: rgb(56 102 99); + --md-sys-color-on-tertiary: rgb(255 255 255); + --md-sys-color-tertiary-container: rgb(188 236 231); + --md-sys-color-on-tertiary-container: rgb(31 78 75); + --md-sys-color-error: rgb(186 26 26); + --md-sys-color-on-error: rgb(255 255 255); + --md-sys-color-error-container: rgb(255 218 214); + --md-sys-color-on-error-container: rgb(147 0 10); + --md-sys-color-background: rgb(249 250 239); + --md-sys-color-on-background: rgb(26 28 22); + --md-sys-color-surface: rgb(249 250 239); + --md-sys-color-on-surface: rgb(26 28 22); + --md-sys-color-surface-variant: rgb(225 228 213); + --md-sys-color-on-surface-variant: rgb(68 72 61); + --md-sys-color-outline: rgb(117 121 108); + --md-sys-color-outline-variant: rgb(197 200 186); + --md-sys-color-shadow: rgb(0 0 0); + --md-sys-color-scrim: rgb(0 0 0); + --md-sys-color-inverse-surface: rgb(47 49 42); + --md-sys-color-inverse-on-surface: rgb(241 242 230); + --md-sys-color-inverse-primary: rgb(177 209 138); + --md-sys-color-primary-fixed: rgb(205 237 163); + --md-sys-color-on-primary-fixed: rgb(16 32 0); + --md-sys-color-primary-fixed-dim: rgb(177 209 138); + --md-sys-color-on-primary-fixed-variant: rgb(53 78 22); + --md-sys-color-secondary-fixed: rgb(220 231 200); + --md-sys-color-on-secondary-fixed: rgb(21 30 11); + --md-sys-color-secondary-fixed-dim: rgb(191 203 173); + --md-sys-color-on-secondary-fixed-variant: rgb(64 74 51); + --md-sys-color-tertiary-fixed: rgb(188 236 231); + --md-sys-color-on-tertiary-fixed: rgb(0 32 30); + --md-sys-color-tertiary-fixed-dim: rgb(160 208 203); + --md-sys-color-on-tertiary-fixed-variant: rgb(31 78 75); + --md-sys-color-surface-dim: rgb(218 219 208); + --md-sys-color-surface-bright: rgb(249 250 239); + --md-sys-color-surface-container-lowest: rgb(255 255 255); + --md-sys-color-surface-container-low: rgb(243 244 233); + --md-sys-color-surface-container: rgb(238 239 227); + --md-sys-color-surface-container-high: rgb(232 233 222); + --md-sys-color-surface-container-highest: rgb(226 227 216); +} diff --git a/src/TabKeeper.UI.Wasm/assets/theme/summer/dark.css b/src/TabKeeper.UI.Wasm/assets/theme/summer/dark.css new file mode 100644 index 0000000..cb8a8d7 --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/theme/summer/dark.css @@ -0,0 +1,51 @@ +[theme="summer-dark"] { + --md-sys-color-primary: rgb(219 198 110); + --md-sys-color-surface-tint: rgb(219 198 110); + --md-sys-color-on-primary: rgb(58 48 0); + --md-sys-color-primary-container: rgb(83 70 0); + --md-sys-color-on-primary-container: rgb(248 226 135); + --md-sys-color-secondary: rgb(209 198 161); + --md-sys-color-on-secondary: rgb(54 48 22); + --md-sys-color-secondary-container: rgb(78 71 42); + --md-sys-color-on-secondary-container: rgb(238 226 188); + --md-sys-color-tertiary: rgb(169 208 179); + --md-sys-color-on-tertiary: rgb(20 55 35); + --md-sys-color-tertiary-container: rgb(44 78 56); + --md-sys-color-on-tertiary-container: rgb(197 236 206); + --md-sys-color-error: rgb(255 180 171); + --md-sys-color-on-error: rgb(105 0 5); + --md-sys-color-error-container: rgb(147 0 10); + --md-sys-color-on-error-container: rgb(255 218 214); + --md-sys-color-background: rgb(21 19 11); + --md-sys-color-on-background: rgb(232 226 212); + --md-sys-color-surface: rgb(21 19 11); + --md-sys-color-on-surface: rgb(232 226 212); + --md-sys-color-surface-variant: rgb(75 71 57); + --md-sys-color-on-surface-variant: rgb(205 198 180); + --md-sys-color-outline: rgb(150 144 128); + --md-sys-color-outline-variant: rgb(75 71 57); + --md-sys-color-shadow: rgb(0 0 0); + --md-sys-color-scrim: rgb(0 0 0); + --md-sys-color-inverse-surface: rgb(232 226 212); + --md-sys-color-inverse-on-surface: rgb(51 48 39); + --md-sys-color-inverse-primary: rgb(109 94 15); + --md-sys-color-primary-fixed: rgb(248 226 135); + --md-sys-color-on-primary-fixed: rgb(34 27 0); + --md-sys-color-primary-fixed-dim: rgb(219 198 110); + --md-sys-color-on-primary-fixed-variant: rgb(83 70 0); + --md-sys-color-secondary-fixed: rgb(238 226 188); + --md-sys-color-on-secondary-fixed: rgb(33 27 4); + --md-sys-color-secondary-fixed-dim: rgb(209 198 161); + --md-sys-color-on-secondary-fixed-variant: rgb(78 71 42); + --md-sys-color-tertiary-fixed: rgb(197 236 206); + --md-sys-color-on-tertiary-fixed: rgb(0 33 15); + --md-sys-color-tertiary-fixed-dim: rgb(169 208 179); + --md-sys-color-on-tertiary-fixed-variant: rgb(44 78 56); + --md-sys-color-surface-dim: rgb(21 19 11); + --md-sys-color-surface-bright: rgb(60 57 48); + --md-sys-color-surface-container-lowest: rgb(16 14 7); + --md-sys-color-surface-container-low: rgb(30 27 19); + --md-sys-color-surface-container: rgb(34 32 23); + --md-sys-color-surface-container-high: rgb(45 42 33); + --md-sys-color-surface-container-highest: rgb(56 53 43); +} diff --git a/src/TabKeeper.UI.Wasm/assets/theme/summer/light.css b/src/TabKeeper.UI.Wasm/assets/theme/summer/light.css new file mode 100644 index 0000000..8077150 --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/theme/summer/light.css @@ -0,0 +1,51 @@ +[theme="summer-light"] { + --md-sys-color-primary: rgb(109 94 15); + --md-sys-color-surface-tint: rgb(109 94 15); + --md-sys-color-on-primary: rgb(255 255 255); + --md-sys-color-primary-container: rgb(248 226 135); + --md-sys-color-on-primary-container: rgb(83 70 0); + --md-sys-color-secondary: rgb(102 94 64); + --md-sys-color-on-secondary: rgb(255 255 255); + --md-sys-color-secondary-container: rgb(238 226 188); + --md-sys-color-on-secondary-container: rgb(78 71 42); + --md-sys-color-tertiary: rgb(67 102 78); + --md-sys-color-on-tertiary: rgb(255 255 255); + --md-sys-color-tertiary-container: rgb(197 236 206); + --md-sys-color-on-tertiary-container: rgb(44 78 56); + --md-sys-color-error: rgb(186 26 26); + --md-sys-color-on-error: rgb(255 255 255); + --md-sys-color-error-container: rgb(255 218 214); + --md-sys-color-on-error-container: rgb(147 0 10); + --md-sys-color-background: rgb(255 249 238); + --md-sys-color-on-background: rgb(30 27 19); + --md-sys-color-surface: rgb(255 249 238); + --md-sys-color-on-surface: rgb(30 27 19); + --md-sys-color-surface-variant: rgb(234 226 208); + --md-sys-color-on-surface-variant: rgb(75 71 57); + --md-sys-color-outline: rgb(124 119 103); + --md-sys-color-outline-variant: rgb(205 198 180); + --md-sys-color-shadow: rgb(0 0 0); + --md-sys-color-scrim: rgb(0 0 0); + --md-sys-color-inverse-surface: rgb(51 48 39); + --md-sys-color-inverse-on-surface: rgb(247 240 226); + --md-sys-color-inverse-primary: rgb(219 198 110); + --md-sys-color-primary-fixed: rgb(248 226 135); + --md-sys-color-on-primary-fixed: rgb(34 27 0); + --md-sys-color-primary-fixed-dim: rgb(219 198 110); + --md-sys-color-on-primary-fixed-variant: rgb(83 70 0); + --md-sys-color-secondary-fixed: rgb(238 226 188); + --md-sys-color-on-secondary-fixed: rgb(33 27 4); + --md-sys-color-secondary-fixed-dim: rgb(209 198 161); + --md-sys-color-on-secondary-fixed-variant: rgb(78 71 42); + --md-sys-color-tertiary-fixed: rgb(197 236 206); + --md-sys-color-on-tertiary-fixed: rgb(0 33 15); + --md-sys-color-tertiary-fixed-dim: rgb(169 208 179); + --md-sys-color-on-tertiary-fixed-variant: rgb(44 78 56); + --md-sys-color-surface-dim: rgb(224 217 204); + --md-sys-color-surface-bright: rgb(255 249 238); + --md-sys-color-surface-container-lowest: rgb(255 255 255); + --md-sys-color-surface-container-low: rgb(250 243 229); + --md-sys-color-surface-container: rgb(244 237 223); + --md-sys-color-surface-container-high: rgb(238 232 218); + --md-sys-color-surface-container-highest: rgb(232 226 212); +} diff --git a/src/TabKeeper.UI.Wasm/assets/theme/winter/dark.css b/src/TabKeeper.UI.Wasm/assets/theme/winter/dark.css new file mode 100644 index 0000000..e366632 --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/theme/winter/dark.css @@ -0,0 +1,52 @@ +[theme="dark"], +[theme="winter-dark"] { + --md-sys-color-primary: rgb(170 199 255); + --md-sys-color-surface-tint: rgb(170 199 255); + --md-sys-color-on-primary: rgb(10 48 95); + --md-sys-color-primary-container: rgb(40 71 119); + --md-sys-color-on-primary-container: rgb(214 227 255); + --md-sys-color-secondary: rgb(190 198 220); + --md-sys-color-on-secondary: rgb(40 49 65); + --md-sys-color-secondary-container: rgb(62 71 89); + --md-sys-color-on-secondary-container: rgb(218 226 249); + --md-sys-color-tertiary: rgb(221 188 224); + --md-sys-color-on-tertiary: rgb(63 40 68); + --md-sys-color-tertiary-container: rgb(87 62 92); + --md-sys-color-on-tertiary-container: rgb(250 216 253); + --md-sys-color-error: rgb(255 180 171); + --md-sys-color-on-error: rgb(105 0 5); + --md-sys-color-error-container: rgb(147 0 10); + --md-sys-color-on-error-container: rgb(255 218 214); + --md-sys-color-background: rgb(17 19 24); + --md-sys-color-on-background: rgb(226 226 233); + --md-sys-color-surface: rgb(17 19 24); + --md-sys-color-on-surface: rgb(226 226 233); + --md-sys-color-surface-variant: rgb(68 71 78); + --md-sys-color-on-surface-variant: rgb(196 198 208); + --md-sys-color-outline: rgb(142 144 153); + --md-sys-color-outline-variant: rgb(68 71 78); + --md-sys-color-shadow: rgb(0 0 0); + --md-sys-color-scrim: rgb(0 0 0); + --md-sys-color-inverse-surface: rgb(226 226 233); + --md-sys-color-inverse-on-surface: rgb(46 48 54); + --md-sys-color-inverse-primary: rgb(65 95 145); + --md-sys-color-primary-fixed: rgb(214 227 255); + --md-sys-color-on-primary-fixed: rgb(0 27 62); + --md-sys-color-primary-fixed-dim: rgb(170 199 255); + --md-sys-color-on-primary-fixed-variant: rgb(40 71 119); + --md-sys-color-secondary-fixed: rgb(218 226 249); + --md-sys-color-on-secondary-fixed: rgb(19 28 43); + --md-sys-color-secondary-fixed-dim: rgb(190 198 220); + --md-sys-color-on-secondary-fixed-variant: rgb(62 71 89); + --md-sys-color-tertiary-fixed: rgb(250 216 253); + --md-sys-color-on-tertiary-fixed: rgb(40 19 46); + --md-sys-color-tertiary-fixed-dim: rgb(221 188 224); + --md-sys-color-on-tertiary-fixed-variant: rgb(87 62 92); + --md-sys-color-surface-dim: rgb(17 19 24); + --md-sys-color-surface-bright: rgb(55 57 62); + --md-sys-color-surface-container-lowest: rgb(12 14 19); + --md-sys-color-surface-container-low: rgb(25 28 32); + --md-sys-color-surface-container: rgb(29 32 36); + --md-sys-color-surface-container-high: rgb(40 42 47); + --md-sys-color-surface-container-highest: rgb(51 53 58); +} diff --git a/src/TabKeeper.UI.Wasm/assets/theme/winter/light.css b/src/TabKeeper.UI.Wasm/assets/theme/winter/light.css new file mode 100644 index 0000000..004b688 --- /dev/null +++ b/src/TabKeeper.UI.Wasm/assets/theme/winter/light.css @@ -0,0 +1,52 @@ +[theme="light"], +[theme="winter-light"] { + --md-sys-color-primary: rgb(65 95 145); + --md-sys-color-surface-tint: rgb(65 95 145); + --md-sys-color-on-primary: rgb(255 255 255); + --md-sys-color-primary-container: rgb(214 227 255); + --md-sys-color-on-primary-container: rgb(40 71 119); + --md-sys-color-secondary: rgb(86 95 113); + --md-sys-color-on-secondary: rgb(255 255 255); + --md-sys-color-secondary-container: rgb(218 226 249); + --md-sys-color-on-secondary-container: rgb(62 71 89); + --md-sys-color-tertiary: rgb(112 85 117); + --md-sys-color-on-tertiary: rgb(255 255 255); + --md-sys-color-tertiary-container: rgb(250 216 253); + --md-sys-color-on-tertiary-container: rgb(87 62 92); + --md-sys-color-error: rgb(186 26 26); + --md-sys-color-on-error: rgb(255 255 255); + --md-sys-color-error-container: rgb(255 218 214); + --md-sys-color-on-error-container: rgb(147 0 10); + --md-sys-color-background: rgb(249 249 255); + --md-sys-color-on-background: rgb(25 28 32); + --md-sys-color-surface: rgb(249 249 255); + --md-sys-color-on-surface: rgb(25 28 32); + --md-sys-color-surface-variant: rgb(224 226 236); + --md-sys-color-on-surface-variant: rgb(68 71 78); + --md-sys-color-outline: rgb(116 119 127); + --md-sys-color-outline-variant: rgb(196 198 208); + --md-sys-color-shadow: rgb(0 0 0); + --md-sys-color-scrim: rgb(0 0 0); + --md-sys-color-inverse-surface: rgb(46 48 54); + --md-sys-color-inverse-on-surface: rgb(240 240 247); + --md-sys-color-inverse-primary: rgb(170 199 255); + --md-sys-color-primary-fixed: rgb(214 227 255); + --md-sys-color-on-primary-fixed: rgb(0 27 62); + --md-sys-color-primary-fixed-dim: rgb(170 199 255); + --md-sys-color-on-primary-fixed-variant: rgb(40 71 119); + --md-sys-color-secondary-fixed: rgb(218 226 249); + --md-sys-color-on-secondary-fixed: rgb(19 28 43); + --md-sys-color-secondary-fixed-dim: rgb(190 198 220); + --md-sys-color-on-secondary-fixed-variant: rgb(62 71 89); + --md-sys-color-tertiary-fixed: rgb(250 216 253); + --md-sys-color-on-tertiary-fixed: rgb(40 19 46); + --md-sys-color-tertiary-fixed-dim: rgb(221 188 224); + --md-sys-color-on-tertiary-fixed-variant: rgb(87 62 92); + --md-sys-color-surface-dim: rgb(217 217 224); + --md-sys-color-surface-bright: rgb(249 249 255); + --md-sys-color-surface-container-lowest: rgb(255 255 255); + --md-sys-color-surface-container-low: rgb(243 243 250); + --md-sys-color-surface-container: rgb(237 237 244); + --md-sys-color-surface-container-high: rgb(231 232 238); + --md-sys-color-surface-container-highest: rgb(226 226 233); +} \ No newline at end of file diff --git a/src/TabKeeper.UI.Wasm/css.ps1 b/src/TabKeeper.UI.Wasm/css.ps1 deleted file mode 100644 index fae4c0b..0000000 --- a/src/TabKeeper.UI.Wasm/css.ps1 +++ /dev/null @@ -1,20 +0,0 @@ -[CmdletBinding()] -param ( - [switch] $watch = $false, - [switch] $publish = $false, - [switch] $trace = $false -) - -$i = "./assets/app.scss" -$o = "./wwwroot/css/app.min.css" -$cmd = "npx tailwindcss", "-i $i", "-o $o" - -if ($watch) { $cmd += "--watch" } -elseif ($publish) { $cmd += "--minify" } - -if ($trace) {$cmd += "--trace-warnings"} - -$cmd = $cmd | Join-String -Separator ' ' - -Write-Host "$ $cmd" -Invoke-Expression -Command $cmd diff --git a/src/TabKeeper.UI.Wasm/package-lock.json b/src/TabKeeper.UI.Wasm/package-lock.json index 8ec7441..bfdc967 100644 --- a/src/TabKeeper.UI.Wasm/package-lock.json +++ b/src/TabKeeper.UI.Wasm/package-lock.json @@ -6,754 +6,620 @@ "": { "name": "tabkeeper", "devDependencies": { - "@tailwindcss/forms": "^0.5.7", - "@tailwindcss/nesting": "^0.0.0-insiders.565cd3e", - "@tailwindcss/typography": "^0.5.12", - "autoprefixer": "^10.4.19", - "postcss": "^8.4.38", - "postcss-import": "^16.1.0", - "tailwind-material-colors": "3.0.2", - "tailwindcss": "^3.4.17" + "@tailwindcss/cli": "^4.0.17", + "tailwindcss": "^4.0.17" } }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, "engines": { - "node": ">=10" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "type": "opencollective", + "url": "https://opencollective.com/parcel" }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "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==", + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@material/material-color-utilities": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@material/material-color-utilities/-/material-color-utilities-0.2.7.tgz", - "integrity": "sha512-0FCeqG6WvK4/Cc06F/xXMd/pv4FeisI0c1tUpBbfhA2n9Y8eZEv4Karjbmf2ZqQCPUWMrGp8A571tCjizxoTiQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tailwindcss/forms": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", - "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==", + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "mini-svg-data-uri": "^1.2.3" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tailwindcss/nesting": { - "version": "0.0.0-insiders.565cd3e", - "resolved": "https://registry.npmjs.org/@tailwindcss/nesting/-/nesting-0.0.0-insiders.565cd3e.tgz", - "integrity": "sha512-WhHoFBx19TnH/c+xLwT/sxei6+4RpdfiyG3MYXfmLaMsADmVqBkF7B6lDalgZD9YdM459MF7DtxVbWkOrV7IaQ==", + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "postcss-nested": "^5.0.5" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@tailwindcss/typography": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", - "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==", + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "postcss-selector-parser": "6.0.10" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@tailwindcss/cli": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/cli/-/cli-4.0.17.tgz", + "integrity": "sha512-Jygu5jjf64vzNXeTr00OhlMzRq+/KwNxJS6eZlgcBpEbXTEmmlr/PSjv1Q9Lk3aTnQc4yNlXkHdWPnlpF+ILUg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@parcel/watcher": "^2.5.1", + "@tailwindcss/node": "4.0.17", + "@tailwindcss/oxide": "4.0.17", + "enhanced-resolve": "^5.18.1", + "lightningcss": "1.29.2", + "mri": "^1.2.0", + "picocolors": "^1.1.1", + "tailwindcss": "4.0.17" }, - "engines": { - "node": ">= 8" + "bin": { + "tailwindcss": "dist/index.mjs" } }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "node_modules/@tailwindcss/node": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.17.tgz", + "integrity": "sha512-LIdNwcqyY7578VpofXyqjH6f+3fP4nrz7FBLki5HpzqjYfXdF2m/eW18ZfoKePtDGg90Bvvfpov9d2gy5XVCbg==", "dev": true, - "license": "MIT" - }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "tailwindcss": "4.0.17" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/@tailwindcss/oxide": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.17.tgz", + "integrity": "sha512-B4OaUIRD2uVrULpAD1Yksx2+wNarQr2rQh65nXqaqbLY1jCd8fO+3KLh/+TH4Hzh2NTHQvgxVbPdUDOtLk7vAw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.0.17", + "@tailwindcss/oxide-darwin-arm64": "4.0.17", + "@tailwindcss/oxide-darwin-x64": "4.0.17", + "@tailwindcss/oxide-freebsd-x64": "4.0.17", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.17", + "@tailwindcss/oxide-linux-arm64-gnu": "4.0.17", + "@tailwindcss/oxide-linux-arm64-musl": "4.0.17", + "@tailwindcss/oxide-linux-x64-gnu": "4.0.17", + "@tailwindcss/oxide-linux-x64-musl": "4.0.17", + "@tailwindcss/oxide-win32-arm64-msvc": "4.0.17", + "@tailwindcss/oxide-win32-x64-msvc": "4.0.17" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.17.tgz", + "integrity": "sha512-3RfO0ZK64WAhop+EbHeyxGThyDr/fYhxPzDbEQjD2+v7ZhKTb2svTWy+KK+J1PHATus2/CQGAGp7pHY/8M8ugg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.17.tgz", + "integrity": "sha512-e1uayxFQCCDuzTk9s8q7MC5jFN42IY7nzcr5n0Mw/AcUHwD6JaBkXnATkD924ZsHyPDvddnusIEvkgLd2CiREg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.17.tgz", + "integrity": "sha512-d6z7HSdOKfXQ0HPlVx1jduUf/YtBuCCtEDIEFeBCzgRRtDsUuRtofPqxIVaSCUTOk5+OfRLonje6n9dF6AH8wQ==", + "cpu": [ + "x64" ], + "dev": true, "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">= 10" } }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.17.tgz", + "integrity": "sha512-EjrVa6lx3wzXz3l5MsdOGtYIsRjgs5Mru6lDv4RuiXpguWeOb3UzGJ7vw7PEzcFadKNvNslEQqoAABeMezprxQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">= 6" + "node": ">= 10" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001701", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001701.tgz", - "integrity": "sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.17.tgz", + "integrity": "sha512-65zXfCOdi8wuaY0Ye6qMR5LAXokHYtrGvo9t/NmxvSZtCCitXV/gzJ/WP5ksXPhff1SV5rov0S+ZIZU+/4eyCQ==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">= 10" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.17.tgz", + "integrity": "sha512-+aaq6hJ8ioTdbJV5IA1WjWgLmun4T7eYLTvJIToiXLHy5JzUERRbIZjAcjgK9qXMwnvuu7rqpxzej+hGoEcG5g==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 6" + "node": ">= 10" } }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.17.tgz", + "integrity": "sha512-/FhWgZCdUGAeYHYnZKekiOC0aXFiBIoNCA0bwzkICiMYS5Rtx2KxFfMUXQVnl4uZRblG5ypt5vpPhVaXgGk80w==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12.5.0" + "node": ">= 10" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.17.tgz", + "integrity": "sha512-gELJzOHK6GDoIpm/539Golvk+QWZjxQcbkKq9eB2kzNkOvrP0xc5UPgO9bIMNt1M48mO8ZeNenCMGt6tfkvVBg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=7.0.0" + "node": ">= 10" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.17.tgz", + "integrity": "sha512-68NwxcJrZn94IOW4TysMIbYv5AlM6So1luTlbYUDIGnKma1yTFGBRNEJ+SacJ3PZE2rgcTBNRHX1TB4EQ/XEHw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.17.tgz", + "integrity": "sha512-AkBO8efP2/7wkEXkNlXzRD4f/7WerqKHlc6PWb5v0jGbbm22DFBLbIM19IJQ3b+tNewQZa+WnPOaGm0SmwMNjw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.17.tgz", + "integrity": "sha512-7/DTEvXcoWlqX0dAlcN0zlmcEu9xSermuo7VNGX9tJ3nYMdo735SHvbrHDln1+LYfF6NhJ3hjbpbjkMOAGmkDg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 6" + "node": ">= 10" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "fill-range": "^7.1.1" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "bin": { - "cssesc": "bin/cssesc" + "detect-libc": "bin/detect-libc.js" }, "engines": { - "node": ">=4" + "node": ">=0.10" } }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.109", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.109.tgz", - "integrity": "sha512-AidaH9JETVRr9DIPGfp1kAarm/W6hRJTPuCnkF+2MqhF4KaAgRIcBc8nvjk+YMXZhwfISof/7WG29eS4iGxQLQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", "dev": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, "engines": { - "node": ">=6" + "node": ">=10.13.0" } }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=8.6.0" + "node": ">=8" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "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==", "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "ISC" }, "node_modules/is-extglob": { "version": "2.1.1", @@ -765,16 +631,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -798,266 +654,296 @@ "node": ">=0.12.0" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", "dev": true, - "license": "ISC" + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "node_modules/lightningcss": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", + "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MPL-2.0", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "lightningcss-darwin-arm64": "1.29.2", + "lightningcss-darwin-x64": "1.29.2", + "lightningcss-freebsd-x64": "1.29.2", + "lightningcss-linux-arm-gnueabihf": "1.29.2", + "lightningcss-linux-arm64-gnu": "1.29.2", + "lightningcss-linux-arm64-musl": "1.29.2", + "lightningcss-linux-x64-gnu": "1.29.2", + "lightningcss-linux-x64-musl": "1.29.2", + "lightningcss-win32-arm64-msvc": "1.29.2", + "lightningcss-win32-x64-msvc": "1.29.2" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz", + "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=14" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/antonk52" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/lightningcss-darwin-x64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz", + "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 8" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/lightningcss-freebsd-x64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz", + "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8.6" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz", + "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT", - "bin": { - "mini-svg-data-uri": "cli.js" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz", + "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz", + "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz", + "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz", + "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz", + "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=0.10.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz", + "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=0.10.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/lightningcss/node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, "engines": { - "node": ">= 6" + "node": ">=8.6" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "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==", "dev": true, "license": "MIT" }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -1078,634 +964,21 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.1.0.tgz", - "integrity": "sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.6" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "node_modules/tailwindcss": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.17.tgz", + "integrity": "sha512-OErSiGzRa6rLiOvaipsDZvLMSpsBZ4ysB4f0VKGXUrjw2jfkJRd6kjRKV2+ZmTCNvwtvgdDam5D7w6WXsdLJZw==", "dev": true, "license": "MIT" }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "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==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tailwind-material-colors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tailwind-material-colors/-/tailwind-material-colors-3.0.2.tgz", - "integrity": "sha512-GAOfciMclkv9MdP2DY1JzLQwjBtTCltWZKK8NUuP0GT4Siy7LZ5TWL1cxvGwl/C1LC3XVcxpIZqcv98Je8I6hA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@material/material-color-utilities": "^0.2.7", - "tailwind-material-surfaces": "^3.0.2", - "tailwind-mode-aware-colors": "^2.0.2" - }, - "peerDependencies": { - "tailwindcss": "^3.0.0" - } - }, - "node_modules/tailwind-material-surfaces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tailwind-material-surfaces/-/tailwind-material-surfaces-3.0.2.tgz", - "integrity": "sha512-ZElG3IPbSrFr2nzxQ++JvNYtJ2ffDfCc/9idAezXYznHrf9vpO0rV9gH1dPUVmXVSkhHerL34Boz14FGZ2H8uw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tailwindcss-color-mix": "0.0.8" - }, - "peerDependencies": { - "tailwindcss": "^3.0.0" - } - }, - "node_modules/tailwind-mode-aware-colors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tailwind-mode-aware-colors/-/tailwind-mode-aware-colors-2.0.2.tgz", - "integrity": "sha512-ohgCFHWrGtT3PY3keun9LUDspt3+DFfaG4tA+MTjv8lCVLe0AxLSUrfAfr2eOcNP2c/V4KpB7qAmAsTJMHrfkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "color": "^4.2.3" - }, - "peerDependencies": { - "tailwindcss": "^3.4.1" - } - }, - "node_modules/tailwindcss": { - "version": "3.4.17", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", - "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.6.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.6", - "lilconfig": "^3.1.3", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.47", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2", - "postcss-nested": "^6.2.0", - "postcss-selector-parser": "^6.1.2", - "resolve": "^1.22.8", - "sucrase": "^3.35.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss-color-mix": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/tailwindcss-color-mix/-/tailwindcss-color-mix-0.0.8.tgz", - "integrity": "sha512-agTN7BAA9eny2WABRX6jpHciQoBoSYGkZfLM1PpHAyNBPErQKFWUm1o1HjwNsZkilJL3hhUi2+H9MoCg+HT89A==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "tailwindcss": "^3.0.0" - } - }, - "node_modules/tailwindcss/node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/tailwindcss/node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/tailwindcss/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" + "node": ">=6" } }, "node_modules/to-regex-range": { @@ -1720,178 +993,6 @@ "engines": { "node": ">=8.0" } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } } } } diff --git a/src/TabKeeper.UI.Wasm/package.json b/src/TabKeeper.UI.Wasm/package.json index 9771928..6660206 100644 --- a/src/TabKeeper.UI.Wasm/package.json +++ b/src/TabKeeper.UI.Wasm/package.json @@ -2,13 +2,12 @@ "name": "tabkeeper", "author": "Panagiotis Athanasiou", "devDependencies": { - "@tailwindcss/forms": "^0.5.7", - "@tailwindcss/nesting": "^0.0.0-insiders.565cd3e", - "@tailwindcss/typography": "^0.5.12", - "autoprefixer": "^10.4.19", - "postcss": "^8.4.38", - "postcss-import": "^16.1.0", - "tailwind-material-colors": "3.0.2", - "tailwindcss": "^3.4.17" + "@tailwindcss/cli": "^4.0.17", + "tailwindcss": "^4.0.17" + }, + "scripts": { + "css": "npx @tailwindcss/cli -i ./assets/app.scss -o ./wwwroot/css/app.min.css", + "css:watch": "npx @tailwindcss/cli -i ./assets/app.scss -o ./wwwroot/css/app.min.css -w", + "css:publish": "npx @tailwindcss/cli -i ./assets/app.scss -o ./wwwroot/css/app.min.css -m" } -} \ No newline at end of file +} diff --git a/src/TabKeeper.UI.Wasm/postcss.config.js b/src/TabKeeper.UI.Wasm/postcss.config.js deleted file mode 100644 index 24192dd..0000000 --- a/src/TabKeeper.UI.Wasm/postcss.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - plugins: { - "postcss-import": {}, - "@tailwindcss/nesting": {}, - "tailwindcss": {}, - "autoprefixer": {}, - }, -} diff --git a/src/TabKeeper.UI.Wasm/tailwind.config.js b/src/TabKeeper.UI.Wasm/tailwind.config.js deleted file mode 100644 index 4047b33..0000000 --- a/src/TabKeeper.UI.Wasm/tailwind.config.js +++ /dev/null @@ -1,38 +0,0 @@ -import { variants } from "./tailwind.config.variants" -import { withMaterialColors } from "./tailwind.config.tailwind-material-colors" - -module.exports = withMaterialColors( - { - darkMode: ["selector", "[dark]"], - content: [ - "./**/*.{razor,html,cshtml}" - ], - safelist: [ - { pattern: /preference-+/ } - ], - plugins: [ - require("@tailwindcss/typography"), - require("@tailwindcss/forms"), - variants, - ], - theme: { - extend: { - screens: {}, // "2xl": {"max": "1535px"} - } - } - }, - { - primary: "#E6E6FA", - //secondary: "#005A6F", - //tertiary: "#054C6C", - //error: "#D4352F", - //neutral: "#919094" - }, - { - /* one of 'content', 'expressive', 'fidelity', 'monochrome', 'neutral', 'tonalSpot' or 'vibrant' */ - scheme: "expressive", - // contrast is optional and ranges from -1 (less contrast) to 1 (more contrast). - contrast: 0, - extend: true - } -); diff --git a/src/TabKeeper.UI.Wasm/tailwind.config.tailwind-material-colors.js b/src/TabKeeper.UI.Wasm/tailwind.config.tailwind-material-colors.js deleted file mode 100644 index b0c7607..0000000 --- a/src/TabKeeper.UI.Wasm/tailwind.config.tailwind-material-colors.js +++ /dev/null @@ -1,440 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -function t(t){return t<0?-1:0===t?0:1}function e(t,e,r){return(1-r)*t+r*e}function r(t,e,r){return re?e:r}function n(t){return(t%=360)<0&&(t+=360),t}function a(t){return(t%=360)<0&&(t+=360),t}function o(t,e){return[t[0]*e[0][0]+t[1]*e[0][1]+t[2]*e[0][2],t[0]*e[1][0]+t[1]*e[1][1]+t[2]*e[1][2],t[0]*e[2][0]+t[1]*e[2][1]+t[2]*e[2][2]]} -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */const i=[[.41233895,.35762064,.18051042],[.2126,.7152,.0722],[.01932141,.11916382,.95034478]],s=[[3.2413774792388685,-1.5376652402851851,-.49885366846268053],[-.9691452513005321,1.8758853451067872,.04156585616912061],[.05562093689691305,-.20395524564742123,1.0571799111220335]],c=[95.047,100,108.883];function l(t,e,r){return(255<<24|(255&t)<<16|(255&e)<<8|255&r)>>>0}function u(t){return l(y(t[0]),y(t[1]),y(t[2]))}function h(t){return t>>16&255}function d(t){return t>>8&255}function m(t){return 255&t}function f(t){const e=function(t){return o([b(h(t)),b(d(t)),b(m(t))],i)}(t)[1];return 116*k(e/100)-16}function g(t){return 100*function(t){const e=24389/27,r=t*t*t;return r>216/24389?r:(116*t-16)/e} -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */((t+16)/116)}function p(t){return 116*k(t/100)-16}function b(t){const e=t/255;return e<=.040449936?e/12.92*100:100*Math.pow((e+.055)/1.055,2.4)}function y(t){const e=t/100;let r=0;return r=e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055,n=0,a=255,(o=Math.round(255*r))a?a:o;var n,a,o}function k(t){return t>216/24389?Math.pow(t,1/3):(903.2962962962963*t+16)/116}class w{static make(t=function(){return c}(),r=200/Math.PI*g(50)/100,n=50,a=2,o=!1){const i=t,s=.401288*i[0]+.650173*i[1]+-.051461*i[2],l=-.250268*i[0]+1.204414*i[1]+.045854*i[2],u=-.002079*i[0]+.048952*i[1]+.953127*i[2],h=.8+a/10,d=h>=.9?e(.59,.69,10*(h-.9)):e(.525,.59,10*(h-.8));let m=o?1:h*(1-1/3.6*Math.exp((-r-42)/92));m=m>1?1:m<0?0:m;const f=h,p=[m*(100/s)+1-m,m*(100/l)+1-m,m*(100/u)+1-m],b=1/(5*r+1),y=b*b*b*b,k=1-y,v=y*r+.1*k*k*Math.cbrt(5*r),M=g(n)/t[1],C=1.48+Math.sqrt(M),P=.725/Math.pow(M,.2),x=P,I=[Math.pow(v*p[0]*s/100,.42),Math.pow(v*p[1]*l/100,.42),Math.pow(v*p[2]*u/100,.42)],D=[400*I[0]/(I[0]+27.13),400*I[1]/(I[1]+27.13),400*I[2]/(I[2]+27.13)];return new w(M,(2*D[0]+D[1]+.05*D[2])*P,P,x,d,f,p,v,Math.pow(v,.25),C)}constructor(t,e,r,n,a,o,i,s,c,l){this.n=t,this.aw=e,this.nbb=r,this.ncb=n,this.c=a,this.nc=o,this.rgbD=i,this.fl=s,this.fLRoot=c,this.z=l}}w.DEFAULT=w.make(); -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -class v{constructor(t,e,r,n,a,o,i,s,c){this.hue=t,this.chroma=e,this.j=r,this.q=n,this.m=a,this.s=o,this.jstar=i,this.astar=s,this.bstar=c}distance(t){const e=this.jstar-t.jstar,r=this.astar-t.astar,n=this.bstar-t.bstar,a=Math.sqrt(e*e+r*r+n*n);return 1.41*Math.pow(a,.63)}static fromInt(t){return v.fromIntInViewingConditions(t,w.DEFAULT)}static fromIntInViewingConditions(e,r){const n=(65280&e)>>8,a=255&e,o=b((16711680&e)>>16),i=b(n),s=b(a),c=.41233895*o+.35762064*i+.18051042*s,l=.2126*o+.7152*i+.0722*s,u=.01932141*o+.11916382*i+.95034478*s,h=.401288*c+.650173*l-.051461*u,d=-.250268*c+1.204414*l+.045854*u,m=-.002079*c+.048952*l+.953127*u,f=r.rgbD[0]*h,g=r.rgbD[1]*d,p=r.rgbD[2]*m,y=Math.pow(r.fl*Math.abs(f)/100,.42),k=Math.pow(r.fl*Math.abs(g)/100,.42),w=Math.pow(r.fl*Math.abs(p)/100,.42),M=400*t(f)*y/(y+27.13),C=400*t(g)*k/(k+27.13),P=400*t(p)*w/(w+27.13),x=(11*M+-12*C+P)/11,I=(M+C-2*P)/9,D=(20*M+20*C+21*P)/20,A=(40*M+20*C+P)/20,_=180*Math.atan2(I,x)/Math.PI,O=_<0?_+360:_>=360?_-360:_,S=O*Math.PI/180,T=A*r.nbb,B=100*Math.pow(T/r.aw,r.c*r.z),H=4/r.c*Math.sqrt(B/100)*(r.aw+4)*r.fLRoot,$=O<20.14?O+360:O,F=5e4/13*(.25*(Math.cos($*Math.PI/180+2)+3.8))*r.nc*r.ncb*Math.sqrt(x*x+I*I)/(D+.305),j=Math.pow(F,.9)*Math.pow(1.64-Math.pow(.29,r.n),.73),L=j*Math.sqrt(B/100),R=L*r.fLRoot,E=50*Math.sqrt(j*r.c/(r.aw+4)),V=(1+100*.007)*B/(1+.007*B),N=1/.0228*Math.log(1+.0228*R),q=N*Math.cos(S),z=N*Math.sin(S);return new v(O,L,B,H,R,E,V,q,z)}static fromJch(t,e,r){return v.fromJchInViewingConditions(t,e,r,w.DEFAULT)}static fromJchInViewingConditions(t,e,r,n){const a=4/n.c*Math.sqrt(t/100)*(n.aw+4)*n.fLRoot,o=e*n.fLRoot,i=e/Math.sqrt(t/100),s=50*Math.sqrt(i*n.c/(n.aw+4)),c=r*Math.PI/180,l=(1+100*.007)*t/(1+.007*t),u=1/.0228*Math.log(1+.0228*o),h=u*Math.cos(c),d=u*Math.sin(c);return new v(r,e,t,a,o,s,l,h,d)}static fromUcs(t,e,r){return v.fromUcsInViewingConditions(t,e,r,w.DEFAULT)}static fromUcsInViewingConditions(t,e,r,n){const a=e,o=r,i=Math.sqrt(a*a+o*o),s=(Math.exp(.0228*i)-1)/.0228/n.fLRoot;let c=Math.atan2(o,a)*(180/Math.PI);c<0&&(c+=360);const l=t/(1-.007*(t-100));return v.fromJchInViewingConditions(l,s,c,n)}toInt(){return this.viewed(w.DEFAULT)}viewed(e){const r=0===this.chroma||0===this.j?0:this.chroma/Math.sqrt(this.j/100),n=Math.pow(r/Math.pow(1.64-Math.pow(.29,e.n),.73),1/.9),a=this.hue*Math.PI/180,o=.25*(Math.cos(a+2)+3.8),i=e.aw*Math.pow(this.j/100,1/e.c/e.z),c=o*(5e4/13)*e.nc*e.ncb,u=i/e.nbb,h=Math.sin(a),d=Math.cos(a),m=23*(u+.305)*n/(23*c+11*n*d+108*n*h),f=m*d,g=m*h,p=(460*u+451*f+288*g)/1403,b=(460*u-891*f-261*g)/1403,k=(460*u-220*f-6300*g)/1403,w=Math.max(0,27.13*Math.abs(p)/(400-Math.abs(p))),v=t(p)*(100/e.fl)*Math.pow(w,1/.42),M=Math.max(0,27.13*Math.abs(b)/(400-Math.abs(b))),C=t(b)*(100/e.fl)*Math.pow(M,1/.42),P=Math.max(0,27.13*Math.abs(k)/(400-Math.abs(k))),x=t(k)*(100/e.fl)*Math.pow(P,1/.42),I=v/e.rgbD[0],D=C/e.rgbD[1],A=x/e.rgbD[2],_=function(t,e,r){const n=s,a=n[0][0]*t+n[0][1]*e+n[0][2]*r,o=n[1][0]*t+n[1][1]*e+n[1][2]*r,i=n[2][0]*t+n[2][1]*e+n[2][2]*r;return l(y(a),y(o),y(i))}(1.86206786*I-1.01125463*D+.14918677*A,.38752654*I+.62144744*D-.00897398*A,-.0158415*I-.03412294*D+1.04996444*A);return _}static fromXyzInViewingConditions(e,r,n,a){const o=.401288*e+.650173*r-.051461*n,i=-.250268*e+1.204414*r+.045854*n,s=-.002079*e+.048952*r+.953127*n,c=a.rgbD[0]*o,l=a.rgbD[1]*i,u=a.rgbD[2]*s,h=Math.pow(a.fl*Math.abs(c)/100,.42),d=Math.pow(a.fl*Math.abs(l)/100,.42),m=Math.pow(a.fl*Math.abs(u)/100,.42),f=400*t(c)*h/(h+27.13),g=400*t(l)*d/(d+27.13),p=400*t(u)*m/(m+27.13),b=(11*f+-12*g+p)/11,y=(f+g-2*p)/9,k=(20*f+20*g+21*p)/20,w=(40*f+20*g+p)/20,M=180*Math.atan2(y,b)/Math.PI,C=M<0?M+360:M>=360?M-360:M,P=C*Math.PI/180,x=w*a.nbb,I=100*Math.pow(x/a.aw,a.c*a.z),D=4/a.c*Math.sqrt(I/100)*(a.aw+4)*a.fLRoot,A=C<20.14?C+360:C,_=5e4/13*(1/4*(Math.cos(A*Math.PI/180+2)+3.8))*a.nc*a.ncb*Math.sqrt(b*b+y*y)/(k+.305),O=Math.pow(_,.9)*Math.pow(1.64-Math.pow(.29,a.n),.73),S=O*Math.sqrt(I/100),T=S*a.fLRoot,B=50*Math.sqrt(O*a.c/(a.aw+4)),H=(1+100*.007)*I/(1+.007*I),$=Math.log(1+.0228*T)/.0228,F=$*Math.cos(P),j=$*Math.sin(P);return new v(C,S,I,D,T,B,H,F,j)}xyzInViewingConditions(e){const r=0===this.chroma||0===this.j?0:this.chroma/Math.sqrt(this.j/100),n=Math.pow(r/Math.pow(1.64-Math.pow(.29,e.n),.73),1/.9),a=this.hue*Math.PI/180,o=.25*(Math.cos(a+2)+3.8),i=e.aw*Math.pow(this.j/100,1/e.c/e.z),s=o*(5e4/13)*e.nc*e.ncb,c=i/e.nbb,l=Math.sin(a),u=Math.cos(a),h=23*(c+.305)*n/(23*s+11*n*u+108*n*l),d=h*u,m=h*l,f=(460*c+451*d+288*m)/1403,g=(460*c-891*d-261*m)/1403,p=(460*c-220*d-6300*m)/1403,b=Math.max(0,27.13*Math.abs(f)/(400-Math.abs(f))),y=t(f)*(100/e.fl)*Math.pow(b,1/.42),k=Math.max(0,27.13*Math.abs(g)/(400-Math.abs(g))),w=t(g)*(100/e.fl)*Math.pow(k,1/.42),v=Math.max(0,27.13*Math.abs(p)/(400-Math.abs(p))),M=t(p)*(100/e.fl)*Math.pow(v,1/.42),C=y/e.rgbD[0],P=w/e.rgbD[1],x=M/e.rgbD[2];return[1.86206786*C-1.01125463*P+.14918677*x,.38752654*C+.62144744*P-.00897398*x,-.0158415*C-.03412294*P+1.04996444*x]}} -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */class M{static sanitizeRadians(t){return(t+8*Math.PI)%(2*Math.PI)}static trueDelinearized(t){const e=t/100;let r=0;return r=e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055,255*r}static chromaticAdaptation(e){const r=Math.pow(Math.abs(e),.42);return 400*t(e)*r/(r+27.13)}static hueOf(t){const e=o(t,M.SCALED_DISCOUNT_FROM_LINRGB),r=M.chromaticAdaptation(e[0]),n=M.chromaticAdaptation(e[1]),a=M.chromaticAdaptation(e[2]),i=(11*r+-12*n+a)/11,s=(r+n-2*a)/9;return Math.atan2(s,i)}static areInCyclicOrder(t,e,r){return M.sanitizeRadians(e-t)100.01||v[1]>100.01||v[2]>100.01?0:u(v);n-=(I-r)*n/(2*I)}return 0}static solveToInt(t,e,r){if(e<1e-4||r<1e-4||r>99.9999)return function(t){const e=y(g(t));return l(e,e,e)}(r);const n=(t=a(t))/180*Math.PI,o=g(r),i=M.findResultByJ(n,e,o);if(0!==i)return i;return u(M.bisectToLimit(o,n))}static solveToCam(t,e,r){return v.fromInt(M.solveToInt(t,e,r))}}M.SCALED_DISCOUNT_FROM_LINRGB=[[.001200833568784504,.002389694492170889,.0002795742885861124],[.0005891086651375999,.0029785502573438758,.0003270666104008398],[.00010146692491640572,.0005364214359186694,.0032979401770712076]],M.LINRGB_FROM_SCALED_DISCOUNT=[[1373.2198709594231,-1100.4251190754821,-7.278681089101213],[-271.815969077903,559.6580465940733,-32.46047482791194],[1.9622899599665666,-57.173814538844006,308.7233197812385]],M.Y_FROM_LINRGB=[.2126,.7152,.0722],M.CRITICAL_PLANES=[.015176349177441876,.045529047532325624,.07588174588720938,.10623444424209313,.13658714259697685,.16693984095186062,.19729253930674434,.2276452376616281,.2579979360165119,.28835063437139563,.3188300904430532,.350925934958123,.3848314933096426,.42057480301049466,.458183274052838,.4976837250274023,.5391024159806381,.5824650784040898,.6277969426914107,.6751227633498623,.7244668422128921,.775853049866786,.829304845476233,.8848452951698498,.942497089126609,1.0022825574869039,1.0642236851973577,1.1283421258858297,1.1946592148522128,1.2631959812511864,1.3339731595349034,1.407011200216447,1.4823302800086415,1.5599503113873272,1.6398909516233677,1.7221716113234105,1.8068114625156377,1.8938294463134073,1.9832442801866852,2.075074464868551,2.1693382909216234,2.2660538449872063,2.36523901573795,2.4669114995532007,2.5710888059345764,2.6777882626779785,2.7870270208169257,2.898822059350997,3.0131901897720907,3.1301480604002863,3.2497121605402226,3.3718988244681087,3.4967242352587946,3.624204428461639,3.754355295633311,3.887192587735158,4.022731918402185,4.160988767090289,4.301978482107941,4.445716283538092,4.592217266055746,4.741496401646282,4.893568542229298,5.048448422192488,5.20615066083972,5.3666897647573375,5.5300801301023865,5.696336044816294,5.865471690767354,6.037501145825082,6.212438385869475,6.390297286737924,6.571091626112461,6.7548350853498045,6.941541251256611,7.131223617812143,7.323895587840543,7.5195704746346665,7.7182615035334345,7.919981813454504,8.124744458384042,8.332562408825165,8.543448553206703,8.757415699253682,8.974476575321063,9.194643831691977,9.417930041841839,9.644347703669503,9.873909240696694,10.106627003236781,10.342513269534024,10.58158024687427,10.8238400726681,11.069304815507364,11.317986476196008,11.569896988756009,11.825048221409341,12.083451977536606,12.345119996613247,12.610063955123938,12.878295467455942,13.149826086772048,13.42466730586372,13.702830557985108,13.984327217668513,14.269168601521828,14.55736596900856,14.848930523210871,15.143873411576273,15.44220572664832,15.743938506781891,16.04908273684337,16.35764934889634,16.66964922287304,16.985093187232053,17.30399201960269,17.62635644741625,17.95219714852476,18.281524751807332,18.614349837764564,18.95068293910138,19.290534541298456,19.633915083172692,19.98083495742689,20.331304511189067,20.685334046541502,21.042933821039977,21.404114048223256,21.76888489811322,22.137256497705877,22.50923893145328,22.884842241736916,23.264076429332462,23.6469514538663,24.033477234264016,24.42366364919083,24.817520537484558,25.21505769858089,25.61628489293138,26.021211842414342,26.429848230738664,26.842203703840827,27.258287870275353,27.678110301598522,28.10168053274597,28.529008062403893,28.96010235337422,29.39497283293396,29.83362889318845,30.276079891419332,30.722335150426627,31.172403958865512,31.62629557157785,32.08401920991837,32.54558406207592,33.010999283389665,33.4802739966603,33.953417292456834,34.430438229418264,34.911345834551085,35.39614910352207,35.88485700094671,36.37747846067349,36.87402238606382,37.37449765026789,37.87891309649659,38.38727753828926,38.89959975977785,39.41588851594697,39.93615253289054,40.460400508064545,40.98864111053629,41.520882981230194,42.05713473317016,42.597404951718396,43.141702194811224,43.6900349931913,44.24241185063697,44.798841244188324,45.35933162437017,45.92389141541209,46.49252901546552,47.065252796817916,47.64207110610409,48.22299226451468,48.808024568002054,49.3971762874833,49.9904556690408,50.587870934119984,51.189430279724725,51.79514187861014,52.40501387947288,53.0190544071392,53.637271562750364,54.259673423945976,54.88626804504493,55.517063457223934,56.15206766869424,56.79128866487574,57.43473440856916,58.08241284012621,58.734331877617365,59.39049941699807,60.05092333227251,60.715611475655585,61.38457167773311,62.057811747619894,62.7353394731159,63.417162620860914,64.10328893648692,64.79372614476921,65.48848194977529,66.18756403501224,66.89098006357258,67.59873767827808,68.31084450182222,69.02730813691093,69.74813616640164,70.47333615344107,71.20291564160104,71.93688215501312,72.67524319850172,73.41800625771542,74.16517879925733,74.9167682708136,75.67278210128072,76.43322770089146,77.1981124613393,77.96744375590167,78.74122893956174,79.51947534912904,80.30219030335869,81.08938110306934,81.88105503125999,82.67721935322541,83.4778813166706,84.28304815182372,85.09272707154808,85.90692527145302,86.72564993000343,87.54890820862819,88.3767072518277,89.2090541872801,90.04595612594655,90.88742016217518,91.73345337380438,92.58406282226491,93.43925555268066,94.29903859396902,95.16341895893969,96.03240364439274,96.9059996312159,97.78421388448044,98.6670533535366,99.55452497210776]; -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -class C{static from(t,e,r){return new C(M.solveToInt(t,e,r))}static fromInt(t){return new C(t)}toInt(){return this.argb}get hue(){return this.internalHue}set hue(t){this.setInternalState(M.solveToInt(t,this.internalChroma,this.internalTone))}get chroma(){return this.internalChroma}set chroma(t){this.setInternalState(M.solveToInt(this.internalHue,t,this.internalTone))}get tone(){return this.internalTone}set tone(t){this.setInternalState(M.solveToInt(this.internalHue,this.internalChroma,t))}constructor(t){this.argb=t;const e=v.fromInt(t);this.internalHue=e.hue,this.internalChroma=e.chroma,this.internalTone=f(t),this.argb=t}setInternalState(t){const e=v.fromInt(t);this.internalHue=e.hue,this.internalChroma=e.chroma,this.internalTone=f(t),this.argb=t}inViewingConditions(t){const e=v.fromInt(this.toInt()).xyzInViewingConditions(t),r=v.fromXyzInViewingConditions(e[0],e[1],e[2],w.make());return C.from(r.hue,r.chroma,p(e[1]))}} -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */class P{static harmonize(t,e){const r=C.fromInt(t),n=C.fromInt(e),o=(i=r.hue,s=n.hue,180-Math.abs(Math.abs(i-s)-180));var i,s;const c=Math.min(.5*o,15),l=a(r.hue+c*(u=r.hue,a(n.hue-u)<=180?1:-1));var u;return C.from(l,r.chroma,r.tone).toInt()}static hctHue(t,e,r){const n=P.cam16Ucs(t,e,r),a=v.fromInt(n),o=v.fromInt(t);return C.from(a.hue,o.chroma,f(t)).toInt()}static cam16Ucs(t,e,r){const n=v.fromInt(t),a=v.fromInt(e),o=n.jstar,i=n.astar,s=n.bstar,c=o+(a.jstar-o)*r,l=i+(a.astar-i)*r,u=s+(a.bstar-s)*r;return v.fromUcs(c,l,u).toInt()}} -/** - * @license - * Copyright 2022 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */class x{static ratioOfTones(t,e){return t=r(0,100,t),e=r(0,100,e),x.ratioOfYs(g(t),g(e))}static ratioOfYs(t,e){const r=t>e?t:e;return(r+5)/((r===e?t:e)+5)}static lighter(t,e){if(t<0||t>100)return-1;const r=g(t),n=e*(r+5)-5,a=x.ratioOfYs(n,r),o=Math.abs(a-e);if(a.04)return-1;const i=p(n)+.4;return i<0||i>100?-1:i}static darker(t,e){if(t<0||t>100)return-1;const r=g(t),n=(r+5)/e-5,a=x.ratioOfYs(r,n),o=Math.abs(a-e);if(a.04)return-1;const i=p(n)-.4;return i<0||i>100?-1:i}static lighterUnsafe(t,e){const r=x.lighter(t,e);return r<0?100:r}static darkerUnsafe(t,e){const r=x.darker(t,e);return r<0?0:r}} -/** - * @license - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */class I{static isDisliked(t){const e=Math.round(t.hue)>=90&&Math.round(t.hue)<=111,r=Math.round(t.chroma)>16,n=Math.round(t.tone)<65;return e&&r&&n}static fixIfDisliked(t){return I.isDisliked(t)?C.from(t.hue,t.chroma,70):t}} -/** - * @license - * Copyright 2022 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */class D{static fromPalette(t){return new D(t.name??"",t.palette,t.tone,t.isBackground??!1,t.background,t.secondBackground,t.contrastCurve,t.toneDeltaPair)}constructor(t,e,r,n,a,o,i,s){if(this.name=t,this.palette=e,this.tone=r,this.isBackground=n,this.background=a,this.secondBackground=o,this.contrastCurve=i,this.toneDeltaPair=s,this.hctCache=new Map,!a&&o)throw new Error(`Color ${t} has secondBackgrounddefined, but background is not defined.`);if(!a&&i)throw new Error(`Color ${t} has contrastCurvedefined, but background is not defined.`);if(a&&!i)throw new Error(`Color ${t} has backgrounddefined, but contrastCurve is not defined.`)}getArgb(t){return this.getHct(t).toInt()}getHct(t){const e=this.hctCache.get(t);if(null!=e)return e;const r=this.getTone(t),n=this.palette(t).getHct(r);return this.hctCache.size>4&&this.hctCache.clear(),this.hctCache.set(t,n),n}getTone(t){const e=t.contrastLevel<0;if(this.toneDeltaPair){const n=this.toneDeltaPair(t),a=n.roleA,o=n.roleB,i=n.delta,s=n.polarity,c=n.stayTogether,l=this.background(t).getTone(t),u="nearer"===s||"lighter"===s&&!t.isDark||"darker"===s&&t.isDark,h=u?a:o,d=u?o:a,m=this.name===h.name,f=t.isDark?1:-1,g=h.contrastCurve.getContrast(t.contrastLevel),p=d.contrastCurve.getContrast(t.contrastLevel),b=h.tone(t);let y=x.ratioOfTones(l,b)>=g?b:D.foregroundTone(l,g);const k=d.tone(t);let w=x.ratioOfTones(l,k)>=p?k:D.foregroundTone(l,p);return e&&(y=D.foregroundTone(l,g),w=D.foregroundTone(l,p)),(w-y)*f>=i||(w=r(0,100,y+i*f),(w-y)*f>=i||(y=r(0,100,w-i*f))),50<=y&&y<60?f>0?(y=60,w=Math.max(w,y+i*f)):(y=49,w=Math.min(w,y+i*f)):50<=w&&w<60&&(c?f>0?(y=60,w=Math.max(w,y+i*f)):(y=49,w=Math.min(w,y+i*f)):w=f>0?60:49),m?y:w}{let r=this.tone(t);if(null==this.background)return r;const n=this.background(t).getTone(t),a=this.contrastCurve.getContrast(t.contrastLevel);if(x.ratioOfTones(n,r)>=a||(r=D.foregroundTone(n,a)),e&&(r=D.foregroundTone(n,a)),this.isBackground&&50<=r&&r<60&&(r=x.ratioOfTones(49,n)>=a?49:60),this.secondBackground){const[e,n]=[this.background,this.secondBackground],[o,i]=[e(t).getTone(t),n(t).getTone(t)],[s,c]=[Math.max(o,i),Math.min(o,i)];if(x.ratioOfTones(s,r)>=a&&x.ratioOfTones(c,r)>=a)return r;const l=x.lighter(s,a),u=x.darker(c,a),h=[];-1!==l&&h.push(l),-1!==u&&h.push(u);return D.tonePrefersLightForeground(o)||D.tonePrefersLightForeground(i)?l<0?100:l:1===h.length?h[0]:u<0?0:u}return r}}static foregroundTone(t,e){const r=x.lighterUnsafe(t,e),n=x.darkerUnsafe(t,e),a=x.ratioOfTones(r,t),o=x.ratioOfTones(n,t);if(D.tonePrefersLightForeground(t)){const t=Math.abs(a-o)<.1&&a=e||a>=o||t?r:n}return o>=e||o>=a?n:r}static tonePrefersLightForeground(t){return Math.round(t)<60}static toneAllowsLightForeground(t){return Math.round(t)<=49}static enableLightForeground(t){return D.tonePrefersLightForeground(t)&&!D.toneAllowsLightForeground(t)?49:t}} -/** - * @license - * Copyright 2022 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */var A;!function(t){t[t.MONOCHROME=0]="MONOCHROME",t[t.NEUTRAL=1]="NEUTRAL",t[t.TONAL_SPOT=2]="TONAL_SPOT",t[t.VIBRANT=3]="VIBRANT",t[t.EXPRESSIVE=4]="EXPRESSIVE",t[t.FIDELITY=5]="FIDELITY",t[t.CONTENT=6]="CONTENT",t[t.RAINBOW=7]="RAINBOW",t[t.FRUIT_SALAD=8]="FRUIT_SALAD"}(A||(A={})); -/** - * @license - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -class _{constructor(t,e,r,n){this.low=t,this.normal=e,this.medium=r,this.high=n}getContrast(t){return t<=-1?this.low:t<0?e(this.low,this.normal,(t- -1)/1):t<.5?e(this.normal,this.medium,(t-0)/.5):t<1?e(this.medium,this.high,(t-.5)/.5):this.high}} -/** - * @license - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */class O{constructor(t,e,r,n,a){this.roleA=t,this.roleB=e,this.delta=r,this.polarity=n,this.stayTogether=a}} -/** - * @license - * Copyright 2022 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */function S(t){return t.variant===A.FIDELITY||t.variant===A.CONTENT}function T(t){return t.variant===A.MONOCHROME}function B(t,e){const r=t.inViewingConditions(function(t){return w.make(void 0,void 0,t.isDark?30:80,void 0,void 0)}(e));return D.tonePrefersLightForeground(t.tone)&&!D.toneAllowsLightForeground(r.tone)?D.enableLightForeground(t.tone):D.enableLightForeground(r.tone)}class H{static highestSurface(t){return t.isDark?H.surfaceBright:H.surfaceDim}}H.contentAccentToneDelta=15,H.primaryPaletteKeyColor=D.fromPalette({name:"primary_palette_key_color",palette:t=>t.primaryPalette,tone:t=>t.primaryPalette.keyColor.tone}),H.secondaryPaletteKeyColor=D.fromPalette({name:"secondary_palette_key_color",palette:t=>t.secondaryPalette,tone:t=>t.secondaryPalette.keyColor.tone}),H.tertiaryPaletteKeyColor=D.fromPalette({name:"tertiary_palette_key_color",palette:t=>t.tertiaryPalette,tone:t=>t.tertiaryPalette.keyColor.tone}),H.neutralPaletteKeyColor=D.fromPalette({name:"neutral_palette_key_color",palette:t=>t.neutralPalette,tone:t=>t.neutralPalette.keyColor.tone}),H.neutralVariantPaletteKeyColor=D.fromPalette({name:"neutral_variant_palette_key_color",palette:t=>t.neutralVariantPalette,tone:t=>t.neutralVariantPalette.keyColor.tone}),H.background=D.fromPalette({name:"background",palette:t=>t.neutralPalette,tone:t=>t.isDark?6:98,isBackground:!0}),H.onBackground=D.fromPalette({name:"on_background",palette:t=>t.neutralPalette,tone:t=>t.isDark?90:10,background:t=>H.background,contrastCurve:new _(3,3,4.5,7)}),H.surface=D.fromPalette({name:"surface",palette:t=>t.neutralPalette,tone:t=>t.isDark?6:98,isBackground:!0}),H.surfaceDim=D.fromPalette({name:"surface_dim",palette:t=>t.neutralPalette,tone:t=>t.isDark?6:87,isBackground:!0}),H.surfaceBright=D.fromPalette({name:"surface_bright",palette:t=>t.neutralPalette,tone:t=>t.isDark?24:98,isBackground:!0}),H.surfaceContainerLowest=D.fromPalette({name:"surface_container_lowest",palette:t=>t.neutralPalette,tone:t=>t.isDark?4:100,isBackground:!0}),H.surfaceContainerLow=D.fromPalette({name:"surface_container_low",palette:t=>t.neutralPalette,tone:t=>t.isDark?10:96,isBackground:!0}),H.surfaceContainer=D.fromPalette({name:"surface_container",palette:t=>t.neutralPalette,tone:t=>t.isDark?12:94,isBackground:!0}),H.surfaceContainerHigh=D.fromPalette({name:"surface_container_high",palette:t=>t.neutralPalette,tone:t=>t.isDark?17:92,isBackground:!0}),H.surfaceContainerHighest=D.fromPalette({name:"surface_container_highest",palette:t=>t.neutralPalette,tone:t=>t.isDark?22:90,isBackground:!0}),H.onSurface=D.fromPalette({name:"on_surface",palette:t=>t.neutralPalette,tone:t=>t.isDark?90:10,background:t=>H.highestSurface(t),contrastCurve:new _(4.5,7,11,21)}),H.surfaceVariant=D.fromPalette({name:"surface_variant",palette:t=>t.neutralVariantPalette,tone:t=>t.isDark?30:90,isBackground:!0}),H.onSurfaceVariant=D.fromPalette({name:"on_surface_variant",palette:t=>t.neutralVariantPalette,tone:t=>t.isDark?80:30,background:t=>H.highestSurface(t),contrastCurve:new _(3,4.5,7,11)}),H.inverseSurface=D.fromPalette({name:"inverse_surface",palette:t=>t.neutralPalette,tone:t=>t.isDark?90:20}),H.inverseOnSurface=D.fromPalette({name:"inverse_on_surface",palette:t=>t.neutralPalette,tone:t=>t.isDark?20:95,background:t=>H.inverseSurface,contrastCurve:new _(4.5,7,11,21)}),H.outline=D.fromPalette({name:"outline",palette:t=>t.neutralVariantPalette,tone:t=>t.isDark?60:50,background:t=>H.highestSurface(t),contrastCurve:new _(1.5,3,4.5,7)}),H.outlineVariant=D.fromPalette({name:"outline_variant",palette:t=>t.neutralVariantPalette,tone:t=>t.isDark?30:80,background:t=>H.highestSurface(t),contrastCurve:new _(1,1,3,7)}),H.shadow=D.fromPalette({name:"shadow",palette:t=>t.neutralPalette,tone:t=>0}),H.scrim=D.fromPalette({name:"scrim",palette:t=>t.neutralPalette,tone:t=>0}),H.surfaceTint=D.fromPalette({name:"surface_tint",palette:t=>t.primaryPalette,tone:t=>t.isDark?80:40,isBackground:!0}),H.primary=D.fromPalette({name:"primary",palette:t=>t.primaryPalette,tone:t=>T(t)?t.isDark?100:0:t.isDark?80:40,isBackground:!0,background:t=>H.highestSurface(t),contrastCurve:new _(3,4.5,7,11),toneDeltaPair:t=>new O(H.primaryContainer,H.primary,15,"nearer",!1)}),H.onPrimary=D.fromPalette({name:"on_primary",palette:t=>t.primaryPalette,tone:t=>T(t)?t.isDark?10:90:t.isDark?20:100,background:t=>H.primary,contrastCurve:new _(4.5,7,11,21)}),H.primaryContainer=D.fromPalette({name:"primary_container",palette:t=>t.primaryPalette,tone:t=>S(t)?B(t.sourceColorHct,t):T(t)?t.isDark?85:25:t.isDark?30:90,isBackground:!0,background:t=>H.highestSurface(t),contrastCurve:new _(1,1,3,7),toneDeltaPair:t=>new O(H.primaryContainer,H.primary,15,"nearer",!1)}),H.onPrimaryContainer=D.fromPalette({name:"on_primary_container",palette:t=>t.primaryPalette,tone:t=>S(t)?D.foregroundTone(H.primaryContainer.tone(t),4.5):T(t)?t.isDark?0:100:t.isDark?90:10,background:t=>H.primaryContainer,contrastCurve:new _(4.5,7,11,21)}),H.inversePrimary=D.fromPalette({name:"inverse_primary",palette:t=>t.primaryPalette,tone:t=>t.isDark?40:80,background:t=>H.inverseSurface,contrastCurve:new _(3,4.5,7,11)}),H.secondary=D.fromPalette({name:"secondary",palette:t=>t.secondaryPalette,tone:t=>t.isDark?80:40,isBackground:!0,background:t=>H.highestSurface(t),contrastCurve:new _(3,4.5,7,11),toneDeltaPair:t=>new O(H.secondaryContainer,H.secondary,15,"nearer",!1)}),H.onSecondary=D.fromPalette({name:"on_secondary",palette:t=>t.secondaryPalette,tone:t=>T(t)?t.isDark?10:100:t.isDark?20:100,background:t=>H.secondary,contrastCurve:new _(4.5,7,11,21)}),H.secondaryContainer=D.fromPalette({name:"secondary_container",palette:t=>t.secondaryPalette,tone:t=>{const e=t.isDark?30:90;if(T(t))return t.isDark?30:85;if(!S(t))return e;let r=function(t,e,r,n){let a=r,o=C.from(t,e,r);if(o.chromai.chroma)break;if(Math.abs(i.chroma-e)<.4)break;Math.abs(i.chroma-e)H.highestSurface(t),contrastCurve:new _(1,1,3,7),toneDeltaPair:t=>new O(H.secondaryContainer,H.secondary,15,"nearer",!1)}),H.onSecondaryContainer=D.fromPalette({name:"on_secondary_container",palette:t=>t.secondaryPalette,tone:t=>S(t)?D.foregroundTone(H.secondaryContainer.tone(t),4.5):t.isDark?90:10,background:t=>H.secondaryContainer,contrastCurve:new _(4.5,7,11,21)}),H.tertiary=D.fromPalette({name:"tertiary",palette:t=>t.tertiaryPalette,tone:t=>T(t)?t.isDark?90:25:t.isDark?80:40,isBackground:!0,background:t=>H.highestSurface(t),contrastCurve:new _(3,4.5,7,11),toneDeltaPair:t=>new O(H.tertiaryContainer,H.tertiary,15,"nearer",!1)}),H.onTertiary=D.fromPalette({name:"on_tertiary",palette:t=>t.tertiaryPalette,tone:t=>T(t)?t.isDark?10:90:t.isDark?20:100,background:t=>H.tertiary,contrastCurve:new _(4.5,7,11,21)}),H.tertiaryContainer=D.fromPalette({name:"tertiary_container",palette:t=>t.tertiaryPalette,tone:t=>{if(T(t))return t.isDark?60:49;if(!S(t))return t.isDark?30:90;const e=B(t.tertiaryPalette.getHct(t.sourceColorHct.tone),t),r=t.tertiaryPalette.getHct(e);return I.fixIfDisliked(r).tone},isBackground:!0,background:t=>H.highestSurface(t),contrastCurve:new _(1,1,3,7),toneDeltaPair:t=>new O(H.tertiaryContainer,H.tertiary,15,"nearer",!1)}),H.onTertiaryContainer=D.fromPalette({name:"on_tertiary_container",palette:t=>t.tertiaryPalette,tone:t=>T(t)?t.isDark?0:100:S(t)?D.foregroundTone(H.tertiaryContainer.tone(t),4.5):t.isDark?90:10,background:t=>H.tertiaryContainer,contrastCurve:new _(4.5,7,11,21)}),H.error=D.fromPalette({name:"error",palette:t=>t.errorPalette,tone:t=>t.isDark?80:40,isBackground:!0,background:t=>H.highestSurface(t),contrastCurve:new _(3,4.5,7,11),toneDeltaPair:t=>new O(H.errorContainer,H.error,15,"nearer",!1)}),H.onError=D.fromPalette({name:"on_error",palette:t=>t.errorPalette,tone:t=>t.isDark?20:100,background:t=>H.error,contrastCurve:new _(4.5,7,11,21)}),H.errorContainer=D.fromPalette({name:"error_container",palette:t=>t.errorPalette,tone:t=>t.isDark?30:90,isBackground:!0,background:t=>H.highestSurface(t),contrastCurve:new _(1,1,3,7),toneDeltaPair:t=>new O(H.errorContainer,H.error,15,"nearer",!1)}),H.onErrorContainer=D.fromPalette({name:"on_error_container",palette:t=>t.errorPalette,tone:t=>t.isDark?90:10,background:t=>H.errorContainer,contrastCurve:new _(4.5,7,11,21)}),H.primaryFixed=D.fromPalette({name:"primary_fixed",palette:t=>t.primaryPalette,tone:t=>T(t)?40:90,isBackground:!0,background:t=>H.highestSurface(t),contrastCurve:new _(1,1,3,7),toneDeltaPair:t=>new O(H.primaryFixed,H.primaryFixedDim,10,"lighter",!0)}),H.primaryFixedDim=D.fromPalette({name:"primary_fixed_dim",palette:t=>t.primaryPalette,tone:t=>T(t)?30:80,isBackground:!0,background:t=>H.highestSurface(t),contrastCurve:new _(1,1,3,7),toneDeltaPair:t=>new O(H.primaryFixed,H.primaryFixedDim,10,"lighter",!0)}),H.onPrimaryFixed=D.fromPalette({name:"on_primary_fixed",palette:t=>t.primaryPalette,tone:t=>T(t)?100:10,background:t=>H.primaryFixedDim,secondBackground:t=>H.primaryFixed,contrastCurve:new _(4.5,7,11,21)}),H.onPrimaryFixedVariant=D.fromPalette({name:"on_primary_fixed_variant",palette:t=>t.primaryPalette,tone:t=>T(t)?90:30,background:t=>H.primaryFixedDim,secondBackground:t=>H.primaryFixed,contrastCurve:new _(3,4.5,7,11)}),H.secondaryFixed=D.fromPalette({name:"secondary_fixed",palette:t=>t.secondaryPalette,tone:t=>T(t)?80:90,isBackground:!0,background:t=>H.highestSurface(t),contrastCurve:new _(1,1,3,7),toneDeltaPair:t=>new O(H.secondaryFixed,H.secondaryFixedDim,10,"lighter",!0)}),H.secondaryFixedDim=D.fromPalette({name:"secondary_fixed_dim",palette:t=>t.secondaryPalette,tone:t=>T(t)?70:80,isBackground:!0,background:t=>H.highestSurface(t),contrastCurve:new _(1,1,3,7),toneDeltaPair:t=>new O(H.secondaryFixed,H.secondaryFixedDim,10,"lighter",!0)}),H.onSecondaryFixed=D.fromPalette({name:"on_secondary_fixed",palette:t=>t.secondaryPalette,tone:t=>10,background:t=>H.secondaryFixedDim,secondBackground:t=>H.secondaryFixed,contrastCurve:new _(4.5,7,11,21)}),H.onSecondaryFixedVariant=D.fromPalette({name:"on_secondary_fixed_variant",palette:t=>t.secondaryPalette,tone:t=>T(t)?25:30,background:t=>H.secondaryFixedDim,secondBackground:t=>H.secondaryFixed,contrastCurve:new _(3,4.5,7,11)}),H.tertiaryFixed=D.fromPalette({name:"tertiary_fixed",palette:t=>t.tertiaryPalette,tone:t=>T(t)?40:90,isBackground:!0,background:t=>H.highestSurface(t),contrastCurve:new _(1,1,3,7),toneDeltaPair:t=>new O(H.tertiaryFixed,H.tertiaryFixedDim,10,"lighter",!0)}),H.tertiaryFixedDim=D.fromPalette({name:"tertiary_fixed_dim",palette:t=>t.tertiaryPalette,tone:t=>T(t)?30:80,isBackground:!0,background:t=>H.highestSurface(t),contrastCurve:new _(1,1,3,7),toneDeltaPair:t=>new O(H.tertiaryFixed,H.tertiaryFixedDim,10,"lighter",!0)}),H.onTertiaryFixed=D.fromPalette({name:"on_tertiary_fixed",palette:t=>t.tertiaryPalette,tone:t=>T(t)?100:10,background:t=>H.tertiaryFixedDim,secondBackground:t=>H.tertiaryFixed,contrastCurve:new _(4.5,7,11,21)}),H.onTertiaryFixedVariant=D.fromPalette({name:"on_tertiary_fixed_variant",palette:t=>t.tertiaryPalette,tone:t=>T(t)?90:30,background:t=>H.tertiaryFixedDim,secondBackground:t=>H.tertiaryFixed,contrastCurve:new _(3,4.5,7,11)}); -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -class ${static fromInt(t){const e=C.fromInt(t);return $.fromHct(e)}static fromHct(t){return new $(t.hue,t.chroma,t)}static fromHueAndChroma(t,e){return new $(t,e,$.createKeyColor(t,e))}constructor(t,e,r){this.hue=t,this.chroma=e,this.keyColor=r,this.cache=new Map}static createKeyColor(t,e){let r=C.from(t,e,50),n=Math.abs(r.chroma-e);for(let a=1;a<50;a+=1){if(Math.round(e)===Math.round(r.chroma))return r;const o=C.from(t,e,50+a),i=Math.abs(o.chroma-e);i0)return this.hctsByTempCache;const t=this.hctsByHue.concat([this.input]),e=this.tempsByHct;return t.sort(((t,r)=>e.get(t)-e.get(r))),this.hctsByTempCache=t,t}get warmest(){return this.hctsByTemp[this.hctsByTemp.length-1]}get coldest(){return this.hctsByTemp[0]}analogous(t=5,e=12){const r=Math.round(this.input.hue),a=this.hctsByHue[r];let o=this.relativeTemperature(a);const i=[a];let s=0;for(let t=0;t<360;t++){const e=n(r+t),a=this.hctsByHue[e],i=this.relativeTemperature(a),c=Math.abs(i-o);o=i,s+=c}let c=1;const l=s/e;let u=0;for(o=this.relativeTemperature(a);i.length=i.length*l,d=1;for(;h&&i.length=(i.length+d)*l,d++}if(o=s,c++,c>360){for(;i.length=i.length&&(e%=i.length),h.splice(0,0,i[e])}const m=t-d-1;for(let t=1;t=i.length&&(e%=i.length),h.push(i[e])}return h}get complement(){if(null!=this.complementCache)return this.complementCache;const t=this.coldest.hue,e=this.tempsByHct.get(this.coldest),r=this.warmest.hue,n=this.tempsByHct.get(this.warmest)-e,o=L.isBetween(this.input.hue,t,r),i=o?r:t,s=o?t:r;let c=1e3,l=this.hctsByHue[Math.round(this.input.hue)];const u=1-this.inputRelativeTemperature;for(let t=0;t<=360;t+=1){const r=a(i+1*t);if(!L.isBetween(r,i,s))continue;const o=this.hctsByHue[Math.round(r)],h=(this.tempsByHct.get(o)-e)/n,d=Math.abs(u-h);d=0||(this.inputRelativeTemperatureCache=this.relativeTemperature(this.input)),this.inputRelativeTemperatureCache}get tempsByHct(){if(this.tempsByHctCache.size>0)return this.tempsByHctCache;const t=this.hctsByHue.concat([this.input]),e=new Map;for(const r of t)e.set(r,L.rawTemperature(r));return this.tempsByHctCache=e,e}get hctsByHue(){if(this.hctsByHueCache.length>0)return this.hctsByHueCache;const t=[];for(let e=0;e<=360;e+=1){const r=C.from(e,this.input.chroma,this.input.tone);t.push(r)}return this.hctsByHueCache=t,this.hctsByHueCache}static isBetween(t,e,r){return e>>0}function J(t){return parseInt(t,16)} -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */U.hues=[0,41,61,101,131,181,251,301,360],U.secondaryRotations=[18,15,10,12,15,18,15,12,12],U.tertiaryRotations=[35,30,20,25,30,35,30,25,25];const K={background:H.background,"on-background":H.onBackground,surface:H.surface,"surface-dim":H.surfaceDim,"surface-bright":H.surfaceBright,"surface-container-lowest":H.surfaceContainerLowest,"surface-container-low":H.surfaceContainerLow,"surface-container":H.surfaceContainer,"surface-container-high":H.surfaceContainerHigh,"surface-container-highest":H.surfaceContainerHighest,"on-surface":H.onSurface,"on-surface-dim":H.onSurface,"on-surface-bright":H.onSurface,"on-surface-container-lowest":H.onSurface,"on-surface-container-low":H.onSurface,"on-surface-container":H.onSurface,"on-surface-container-high":H.onSurface,"on-surface-container-highest":H.onSurface,"surface-variant":H.surfaceVariant,"on-surface-variant":H.onSurfaceVariant,"inverse-surface":H.inverseSurface,"on-inverse-surface":H.inverseOnSurface,outline:H.outline,"outline-variant":H.outlineVariant,"surface-tint":H.surfaceTint,"on-surface-tint":H.onSurface,primary:H.primary,"on-primary":H.onPrimary,"primary-container":H.primaryContainer,"on-primary-container":H.onPrimaryContainer,"inverse-primary":H.inversePrimary,secondary:H.secondary,"on-secondary":H.onSecondary,"secondary-container":H.secondaryContainer,"on-secondary-container":H.onSecondaryContainer,tertiary:H.tertiary,"on-tertiary":H.onTertiary,"tertiary-container":H.tertiaryContainer,"on-tertiary-container":H.onTertiaryContainer,error:H.error,"on-error":H.onError,"error-container":H.errorContainer,"on-error-container":H.onErrorContainer},X=(t,e,r)=>{const{primary:n,...a}=t,o=G(n),i={content:R,expressive:E,fidelity:V,monochrome:N,neutral:q,tonalSpot:z,vibrant:U},s=i[e]||i.content,c=new s(C.fromInt(o),!1,r),l=new s(C.fromInt(o),!0,r),u={transparent:"transparent",current:"currentColor",black:"#000000",white:"#ffffff"};return Object.entries(K).forEach((([t,e])=>{const r=Y(e.getArgb(c)),n=Y(e.getArgb(l));u[`${t}-light`]=r,u[`${t}-dark`]=n})),Object.keys(a).forEach((t=>{const e=a[t],r="string"==typeof e?e:e.hex,n=e===r||e.harmonize,{light:i,dark:s}=function(t,e){let r=e.value;const n=r,a=t;e.blend&&(r=P.harmonize(n,a));const o=F.of(r).a1;return{color:e,value:r,light:{color:o.tone(40),onColor:o.tone(100),colorContainer:o.tone(90),onColorContainer:o.tone(10)},dark:{color:o.tone(80),onColor:o.tone(20),colorContainer:o.tone(30),onColorContainer:o.tone(90)}}}(o,{value:G(r),blend:n}),c=t.split("").map(((t,e)=>t.toUpperCase()===t?`${0!==e?"-":""}${t.toLowerCase()}`:t)).join("");u[`${c}-light`]=Y(i.color),u[`on-${c}-light`]=Y(i.onColor),u[`${c}-container-light`]=Y(i.colorContainer),u[`on-${c}-container-light`]=Y(i.onColorContainer),u[`${c}-dark`]=Y(s.color),u[`on-${c}-dark`]=Y(s.onColor),u[`${c}-container-dark`]=Y(s.colorContainer),u[`on-${c}-container-dark`]=Y(s.onColorContainer)})),u};var W={},Q={};!function(t){function e(t,e){return{handler:t,config:e}}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return r}}),e.withOptions=function(t,e=(()=>({}))){const r=function(r){return{__options:r,handler:t(r),config:e(r)}};return r.__isOptionsFunction=!0,r.__pluginFunction=t,r.__configFunction=e,r};const r=e}(Q),function(t){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return r}});function e(t){return t&&t.__esModule?t:{default:t}}const r=e(Q).default}(W);var Z=(W.__esModule?W:{default:W}).default,tt={};!function(t){function e(t){return"function"==typeof t?t({}):t}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return e}})}(tt);var et={};!function(t){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return r}});const e=t=>Object.assign({},...Object.entries(null!=t?t:{}).flatMap((([t,r])=>"object"==typeof r?Object.entries(e(r)).map((([e,r])=>({[t+("DEFAULT"===e?"":`-${e}`)]:r}))):[{[`${t}`]:r}]))),r=e}(et);var rt={},nt={},at={};!function(t){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return e}});const e={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}}(at),function(t){Object.defineProperty(t,"__esModule",{value:!0}),function(t,e){for(var r in e)Object.defineProperty(t,r,{enumerable:!0,get:e[r]})}(t,{parseColor:function(){return h},formatColor:function(){return d}});const e=r(at);function r(t){return t&&t.__esModule?t:{default:t}}let n=/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i,a=/^#([a-f\d])([a-f\d])([a-f\d])([a-f\d])?$/i,o=/(?:\d+|\d*\.\d+)%?/,i=/(?:\s*,\s*|\s+)/,s=/\s*[,/]\s*/,c=/var\(--(?:[^ )]*?)(?:,(?:[^ )]*?|var\(--[^ )]*?\)))?\)/,l=new RegExp(`^(rgba?)\\(\\s*(${o.source}|${c.source})(?:${i.source}(${o.source}|${c.source}))?(?:${i.source}(${o.source}|${c.source}))?(?:${s.source}(${o.source}|${c.source}))?\\s*\\)$`),u=new RegExp(`^(hsla?)\\(\\s*((?:${o.source})(?:deg|rad|grad|turn)?|${c.source})(?:${i.source}(${o.source}|${c.source}))?(?:${i.source}(${o.source}|${c.source}))?(?:${s.source}(${o.source}|${c.source}))?\\s*\\)$`);function h(t,{loose:r=!1}={}){var o,i;if("string"!=typeof t)return null;if("transparent"===(t=t.trim()))return{mode:"rgb",color:["0","0","0"],alpha:"0"};if(t in e.default)return{mode:"rgb",color:e.default[t].map((t=>t.toString()))};let s=t.replace(a,((t,e,r,n,a)=>["#",e,e,r,r,n,n,a?a+a:""].join(""))).match(n);if(null!==s)return{mode:"rgb",color:[parseInt(s[1],16),parseInt(s[2],16),parseInt(s[3],16)].map((t=>t.toString())),alpha:s[4]?(parseInt(s[4],16)/255).toString():void 0};var c;let h=null!==(c=t.match(l))&&void 0!==c?c:t.match(u);if(null===h)return null;let d=[h[2],h[3],h[4]].filter(Boolean).map((t=>t.toString()));return 2===d.length&&d[0].startsWith("var(")?{mode:h[1],color:[d[0]],alpha:d[1]}:r||3===d.length?d.length<3&&!d.some((t=>/^var\(.*?\)$/.test(t)))?null:{mode:h[1],color:d,alpha:null===(o=h[5])||void 0===o||null===(i=o.toString)||void 0===i?void 0:i.call(o)}:null}function d({mode:t,color:e,alpha:r}){let n=void 0!==r;return"rgba"===t||"hsla"===t?`${t}(${e.join(", ")}${n?`, ${r}`:""})`:`${t}(${e.join(" ")}${n?` / ${r}`:""})`}}(nt),function(t){Object.defineProperty(t,"__esModule",{value:!0}),function(t,e){for(var r in e)Object.defineProperty(t,r,{enumerable:!0,get:e[r]})}(t,{withAlphaValue:function(){return r},default:function(){return n}});const e=nt;function r(t,r,n){if("function"==typeof t)return t({opacityValue:r});let a=(0,e.parseColor)(t,{loose:!0});return null===a?n:(0,e.formatColor)({...a,alpha:r})}function n({color:t,property:r,variable:n}){let a=[].concat(r);if("function"==typeof t)return{[n]:"1",...Object.fromEntries(a.map((e=>[e,t({opacityVariable:n,opacityValue:`var(${n})`})])))};const o=(0,e.parseColor)(t);return null===o||void 0!==o.alpha?Object.fromEntries(a.map((e=>[e,t]))):{[n]:"1",...Object.fromEntries(a.map((t=>[t,(0,e.formatColor)({...o,alpha:`var(${n})`})])))}}}(rt);const ot=Z,{default:it}=tt,{default:st}=et,{default:ct}=rt,lt={bgMix:"bg-mix",bgMixAmount:"bg-mix-amount",bgMixMethod:"bg-mix-method"};const ut=(t={})=>ot((({matchUtilities:e,theme:r,corePlugins:n})=>{const{bgMix:a,bgMixAmount:o,bgMixMethod:i}={...lt,...t};e({[a]:t=>{const{mixColor:e,...r}=ct({color:t,property:"mixColor",variable:"--tw-bg-mix-opacity"});return{...r,"background-color":`color-mix(var(--tw-bg-mix-method, in srgb), ${e} calc(var(--tw-bg-mix-amount, 0) * 1%), var(--tw-bg-base))`}}},{values:st(r("backgroundColor")),type:["color","any"]}),e({[o]:t=>({"--tw-bg-mix-amount":t})},{values:Object.fromEntries(Object.entries(r("backgroundOpacity")).map((([t,e])=>[t,""+100*e])))}),e({[i]:t=>({"--tw-bg-mix-method":t})},{values:{srgb:"in srgb","shorter-hue":"in hsl shorter hue","longer-hue":"in hsl longer hue"}}),e({bg:t=>n("backgroundOpacity")?ct({color:t,property:"--tw-bg-base",variable:"--tw-bg-opacity"}):{"background-color":it(t)}},{values:st(r("backgroundColor")),type:["color","any"]})})),ht=Z,{default:dt}=et,mt={hoverAmount:"8",pressAmount:"12",focusAmount:"12",dragAmount:"16",surfacePrefix:"surface",interactiveSurfacePrefix:"interactive-surface",draggedSurfacePrefix:"dragged-surface",disabledStyles:{textOpacity:.38,backgroundOpacity:.12,colorName:"black"},transition:{duration:150}};var ft=(t={})=>{const{surfacePrefix:e,interactiveSurfacePrefix:r,draggedSurfacePrefix:n,disabledStyles:a,transition:o,...i}={...mt,...t};return[ut(),ht((({matchComponents:t,theme:s})=>{const c=dt(s("colors")),l=Object.keys(c).filter((t=>c[`on-${t}`])),u=Object.fromEntries(l.map((t=>[t,t])));t({[e]:t=>({..."bg"===e?{}:{[`@apply bg-${t}`]:{}},[`@apply text-on-${t}`]:{}}),[r]:t=>({[`@apply bg-${t}`]:{},[`@apply text-on-${t}`]:{},[`@apply bg-mix-on-${t}`]:{},...o?{"@apply transition-colors":{},[`@apply duration-${o.duration}`]:{}}:{},[`@apply hover:bg-mix-amount-[${i.hoverAmount}]`]:{},[`@apply active:bg-mix-amount-[${i.pressAmount}]`]:{},[`@apply focus-visible:bg-mix-amount-[${i.focusAmount}]`]:{},...a?{[`@apply disabled:text-${a.colorName}/[${a.textOpacity}]`]:{},[`@apply disabled:bg-${a.colorName}/[${a.backgroundOpacity}]`]:{}}:{}}),[n]:t=>({[`@apply bg-${t}`]:{},[`@apply text-on-${t}`]:{},[`@apply bg-mix-on-${t}`]:{},[`@apply bg-mix-amount-[${i.dragAmount}]`]:{},...o?{"@apply transition-colors":{},[`@apply duration-${o.duration}`]:{}}:{}})},{values:u})}),{})]},gt={exports:{}},pt={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},bt={exports:{}},yt=function(t){return!(!t||"string"==typeof t)&&(t instanceof Array||Array.isArray(t)||t.length>=0&&(t.splice instanceof Function||Object.getOwnPropertyDescriptor(t,t.length-1)&&"String"!==t.constructor.name))},kt=Array.prototype.concat,wt=Array.prototype.slice,vt=bt.exports=function(t){for(var e=[],r=0,n=t.length;r=4&&1!==t[3]&&(e=", "+t[3]),"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+e+")"},Dt.to.keyword=function(t){return xt[t.slice(0,3)]};const Ot=pt,St={};for(const t of Object.keys(Ot))St[Ot[t]]=t;const Tt={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};var Bt=Tt;for(const t of Object.keys(Tt)){if(!("channels"in Tt[t]))throw new Error("missing channels property: "+t);if(!("labels"in Tt[t]))throw new Error("missing channel labels property: "+t);if(Tt[t].labels.length!==Tt[t].channels)throw new Error("channel and label counts mismatch: "+t);const{channels:e,labels:r}=Tt[t];delete Tt[t].channels,delete Tt[t].labels,Object.defineProperty(Tt[t],"channels",{value:e}),Object.defineProperty(Tt[t],"labels",{value:r})}Tt.rgb.hsl=function(t){const e=t[0]/255,r=t[1]/255,n=t[2]/255,a=Math.min(e,r,n),o=Math.max(e,r,n),i=o-a;let s,c;o===a?s=0:e===o?s=(r-n)/i:r===o?s=2+(n-e)/i:n===o&&(s=4+(e-r)/i),s=Math.min(60*s,360),s<0&&(s+=360);const l=(a+o)/2;return c=o===a?0:l<=.5?i/(o+a):i/(2-o-a),[s,100*c,100*l]},Tt.rgb.hsv=function(t){let e,r,n,a,o;const i=t[0]/255,s=t[1]/255,c=t[2]/255,l=Math.max(i,s,c),u=l-Math.min(i,s,c),h=function(t){return(l-t)/6/u+.5};return 0===u?(a=0,o=0):(o=u/l,e=h(i),r=h(s),n=h(c),i===l?a=n-r:s===l?a=1/3+e-n:c===l&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*l]},Tt.rgb.hwb=function(t){const e=t[0],r=t[1];let n=t[2];const a=Tt.rgb.hsl(t)[0],o=1/255*Math.min(e,Math.min(r,n));return n=1-1/255*Math.max(e,Math.max(r,n)),[a,100*o,100*n]},Tt.rgb.cmyk=function(t){const e=t[0]/255,r=t[1]/255,n=t[2]/255,a=Math.min(1-e,1-r,1-n);return[100*((1-e-a)/(1-a)||0),100*((1-r-a)/(1-a)||0),100*((1-n-a)/(1-a)||0),100*a]},Tt.rgb.keyword=function(t){const e=St[t];if(e)return e;let r,n=1/0;for(const e of Object.keys(Ot)){const i=(o=Ot[e],((a=t)[0]-o[0])**2+(a[1]-o[1])**2+(a[2]-o[2])**2);i.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92;return[100*(.4124*e+.3576*r+.1805*n),100*(.2126*e+.7152*r+.0722*n),100*(.0193*e+.1192*r+.9505*n)]},Tt.rgb.lab=function(t){const e=Tt.rgb.xyz(t);let r=e[0],n=e[1],a=e[2];r/=95.047,n/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;return[116*n-16,500*(r-n),200*(n-a)]},Tt.hsl.rgb=function(t){const e=t[0]/360,r=t[1]/100,n=t[2]/100;let a,o,i;if(0===r)return i=255*n,[i,i,i];a=n<.5?n*(1+r):n+r-n*r;const s=2*n-a,c=[0,0,0];for(let t=0;t<3;t++)o=e+1/3*-(t-1),o<0&&o++,o>1&&o--,i=6*o<1?s+6*(a-s)*o:2*o<1?a:3*o<2?s+(a-s)*(2/3-o)*6:s,c[t]=255*i;return c},Tt.hsl.hsv=function(t){const e=t[0];let r=t[1]/100,n=t[2]/100,a=r;const o=Math.max(n,.01);n*=2,r*=n<=1?n:2-n,a*=o<=1?o:2-o;return[e,100*(0===n?2*a/(o+a):2*r/(n+r)),100*((n+r)/2)]},Tt.hsv.rgb=function(t){const e=t[0]/60,r=t[1]/100;let n=t[2]/100;const a=Math.floor(e)%6,o=e-Math.floor(e),i=255*n*(1-r),s=255*n*(1-r*o),c=255*n*(1-r*(1-o));switch(n*=255,a){case 0:return[n,c,i];case 1:return[s,n,i];case 2:return[i,n,c];case 3:return[i,s,n];case 4:return[c,i,n];case 5:return[n,i,s]}},Tt.hsv.hsl=function(t){const e=t[0],r=t[1]/100,n=t[2]/100,a=Math.max(n,.01);let o,i;i=(2-r)*n;const s=(2-r)*a;return o=r*a,o/=s<=1?s:2-s,o=o||0,i/=2,[e,100*o,100*i]},Tt.hwb.rgb=function(t){const e=t[0]/360;let r=t[1]/100,n=t[2]/100;const a=r+n;let o;a>1&&(r/=a,n/=a);const i=Math.floor(6*e),s=1-n;o=6*e-i,0!=(1&i)&&(o=1-o);const c=r+o*(s-r);let l,u,h;switch(i){default:case 6:case 0:l=s,u=c,h=r;break;case 1:l=c,u=s,h=r;break;case 2:l=r,u=s,h=c;break;case 3:l=r,u=c,h=s;break;case 4:l=c,u=r,h=s;break;case 5:l=s,u=r,h=c}return[255*l,255*u,255*h]},Tt.cmyk.rgb=function(t){const e=t[0]/100,r=t[1]/100,n=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a))]},Tt.xyz.rgb=function(t){const e=t[0]/100,r=t[1]/100,n=t[2]/100;let a,o,i;return a=3.2406*e+-1.5372*r+-.4986*n,o=-.9689*e+1.8758*r+.0415*n,i=.0557*e+-.204*r+1.057*n,a=a>.0031308?1.055*a**(1/2.4)-.055:12.92*a,o=o>.0031308?1.055*o**(1/2.4)-.055:12.92*o,i=i>.0031308?1.055*i**(1/2.4)-.055:12.92*i,a=Math.min(Math.max(0,a),1),o=Math.min(Math.max(0,o),1),i=Math.min(Math.max(0,i),1),[255*a,255*o,255*i]},Tt.xyz.lab=function(t){let e=t[0],r=t[1],n=t[2];e/=95.047,r/=100,n/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;return[116*r-16,500*(e-r),200*(r-n)]},Tt.lab.xyz=function(t){let e,r,n;r=(t[0]+16)/116,e=t[1]/500+r,n=r-t[2]/200;const a=r**3,o=e**3,i=n**3;return r=a>.008856?a:(r-16/116)/7.787,e=o>.008856?o:(e-16/116)/7.787,n=i>.008856?i:(n-16/116)/7.787,e*=95.047,r*=100,n*=108.883,[e,r,n]},Tt.lab.lch=function(t){const e=t[0],r=t[1],n=t[2];let a;a=360*Math.atan2(n,r)/2/Math.PI,a<0&&(a+=360);return[e,Math.sqrt(r*r+n*n),a]},Tt.lch.lab=function(t){const e=t[0],r=t[1],n=t[2]/360*2*Math.PI;return[e,r*Math.cos(n),r*Math.sin(n)]},Tt.rgb.ansi16=function(t,e=null){const[r,n,a]=t;let o=null===e?Tt.rgb.hsv(t)[2]:e;if(o=Math.round(o/50),0===o)return 30;let i=30+(Math.round(a/255)<<2|Math.round(n/255)<<1|Math.round(r/255));return 2===o&&(i+=60),i},Tt.hsv.ansi16=function(t){return Tt.rgb.ansi16(Tt.hsv.rgb(t),t[2])},Tt.rgb.ansi256=function(t){const e=t[0],r=t[1],n=t[2];if(e===r&&r===n)return e<8?16:e>248?231:Math.round((e-8)/247*24)+232;return 16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)},Tt.ansi16.rgb=function(t){let e=t%10;if(0===e||7===e)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];const r=.5*(1+~~(t>50));return[(1&e)*r*255,(e>>1&1)*r*255,(e>>2&1)*r*255]},Tt.ansi256.rgb=function(t){if(t>=232){const e=10*(t-232)+8;return[e,e,e]}let e;t-=16;return[Math.floor(t/36)/5*255,Math.floor((e=t%36)/6)/5*255,e%6/5*255]},Tt.rgb.hex=function(t){const e=(((255&Math.round(t[0]))<<16)+((255&Math.round(t[1]))<<8)+(255&Math.round(t[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},Tt.hex.rgb=function(t){const e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];3===e[0].length&&(r=r.split("").map((t=>t+t)).join(""));const n=parseInt(r,16);return[n>>16&255,n>>8&255,255&n]},Tt.rgb.hcg=function(t){const e=t[0]/255,r=t[1]/255,n=t[2]/255,a=Math.max(Math.max(e,r),n),o=Math.min(Math.min(e,r),n),i=a-o;let s,c;return s=i<1?o/(1-i):0,c=i<=0?0:a===e?(r-n)/i%6:a===r?2+(n-e)/i:4+(e-r)/i,c/=6,c%=1,[360*c,100*i,100*s]},Tt.hsl.hcg=function(t){const e=t[1]/100,r=t[2]/100,n=r<.5?2*e*r:2*e*(1-r);let a=0;return n<1&&(a=(r-.5*n)/(1-n)),[t[0],100*n,100*a]},Tt.hsv.hcg=function(t){const e=t[1]/100,r=t[2]/100,n=e*r;let a=0;return n<1&&(a=(r-n)/(1-n)),[t[0],100*n,100*a]},Tt.hcg.rgb=function(t){const e=t[0]/360,r=t[1]/100,n=t[2]/100;if(0===r)return[255*n,255*n,255*n];const a=[0,0,0],o=e%1*6,i=o%1,s=1-i;let c=0;switch(Math.floor(o)){case 0:a[0]=1,a[1]=i,a[2]=0;break;case 1:a[0]=s,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=i;break;case 3:a[0]=0,a[1]=s,a[2]=1;break;case 4:a[0]=i,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=s}return c=(1-r)*n,[255*(r*a[0]+c),255*(r*a[1]+c),255*(r*a[2]+c)]},Tt.hcg.hsv=function(t){const e=t[1]/100,r=e+t[2]/100*(1-e);let n=0;return r>0&&(n=e/r),[t[0],100*n,100*r]},Tt.hcg.hsl=function(t){const e=t[1]/100,r=t[2]/100*(1-e)+.5*e;let n=0;return r>0&&r<.5?n=e/(2*r):r>=.5&&r<1&&(n=e/(2*(1-r))),[t[0],100*n,100*r]},Tt.hcg.hwb=function(t){const e=t[1]/100,r=e+t[2]/100*(1-e);return[t[0],100*(r-e),100*(1-r)]},Tt.hwb.hcg=function(t){const e=t[1]/100,r=1-t[2]/100,n=r-e;let a=0;return n<1&&(a=(r-n)/(1-n)),[t[0],100*n,100*a]},Tt.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]},Tt.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]},Tt.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]},Tt.gray.hsl=function(t){return[0,0,t[0]]},Tt.gray.hsv=Tt.gray.hsl,Tt.gray.hwb=function(t){return[0,100,t[0]]},Tt.gray.cmyk=function(t){return[0,0,0,t[0]]},Tt.gray.lab=function(t){return[t[0],0,0]},Tt.gray.hex=function(t){const e=255&Math.round(t[0]/100*255),r=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(r.length)+r},Tt.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]};const Ht=Bt;function $t(t){const e=function(){const t={},e=Object.keys(Ht);for(let r=e.length,n=0;n{Et[t]={},Object.defineProperty(Et[t],"channels",{value:Lt[t].channels}),Object.defineProperty(Et[t],"labels",{value:Lt[t].labels});const e=Rt(t);Object.keys(e).forEach((r=>{const n=e[r];Et[t][r]=function(t){const e=function(...e){const r=e[0];if(null==r)return r;r.length>1&&(e=r);const n=t(e);if("object"==typeof n)for(let t=n.length,e=0;e1&&(e=r),t(e))};return"conversion"in t&&(e.conversion=t.conversion),e}(n)}))}));var Vt=Et;const Nt=gt.exports,qt=Vt,zt=["keyword","gray","hex"],Ut={};for(const t of Object.keys(qt))Ut[[...qt[t].labels].sort().join("")]=t;const Yt={};function Gt(t,e){if(!(this instanceof Gt))return new Gt(t,e);if(e&&e in zt&&(e=null),e&&!(e in qt))throw new Error("Unknown model: "+e);let r,n;if(null==t)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(t instanceof Gt)this.model=t.model,this.color=[...t.color],this.valpha=t.valpha;else if("string"==typeof t){const e=Nt.get(t);if(null===e)throw new Error("Unable to parse color from string: "+t);this.model=e.model,n=qt[this.model].channels,this.color=e.value.slice(0,n),this.valpha="number"==typeof e.value[n]?e.value[n]:1}else if(t.length>0){this.model=e||"rgb",n=qt[this.model].channels;const r=Array.prototype.slice.call(t,0,n);this.color=Wt(r,n),this.valpha="number"==typeof t[n]?t[n]:1}else if("number"==typeof t)this.model="rgb",this.color=[t>>16&255,t>>8&255,255&t],this.valpha=1;else{this.valpha=1;const e=Object.keys(t);"alpha"in t&&(e.splice(e.indexOf("alpha"),1),this.valpha="number"==typeof t.alpha?t.alpha:0);const n=e.sort().join("");if(!(n in Ut))throw new Error("Unable to parse color from object: "+JSON.stringify(t));this.model=Ut[n];const{labels:a}=qt[this.model],o=[];for(r=0;r(t%360+360)%360)),saturationl:Kt("hsl",1,Xt(100)),lightness:Kt("hsl",2,Xt(100)),saturationv:Kt("hsv",1,Xt(100)),value:Kt("hsv",2,Xt(100)),chroma:Kt("hcg",1,Xt(100)),gray:Kt("hcg",2,Xt(100)),white:Kt("hwb",1,Xt(100)),wblack:Kt("hwb",2,Xt(100)),cyan:Kt("cmyk",0,Xt(100)),magenta:Kt("cmyk",1,Xt(100)),yellow:Kt("cmyk",2,Xt(100)),black:Kt("cmyk",3,Xt(100)),x:Kt("xyz",0,Xt(95.047)),y:Kt("xyz",1,Xt(100)),z:Kt("xyz",2,Xt(108.833)),l:Kt("lab",0,Xt(100)),a:Kt("lab",1),b:Kt("lab",2),keyword(t){return void 0!==t?new Gt(t):qt[this.model].keyword(this.color)},hex(t){return void 0!==t?new Gt(t):Nt.to.hex(this.rgb().round().color)},hexa(t){if(void 0!==t)return new Gt(t);const e=this.rgb().round().color;let r=Math.round(255*this.valpha).toString(16).toUpperCase();return 1===r.length&&(r="0"+r),Nt.to.hex(e)+r},rgbNumber(){const t=this.rgb().color;return(255&t[0])<<16|(255&t[1])<<8|255&t[2]},luminosity(){const t=this.rgb().color,e=[];for(const[r,n]of t.entries()){const t=n/255;e[r]=t<=.04045?t/12.92:((t+.055)/1.055)**2.4}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast(t){const e=this.luminosity(),r=t.luminosity();return e>r?(e+.05)/(r+.05):(r+.05)/(e+.05)},level(t){const e=this.contrast(t);return e>=7?"AAA":e>=4.5?"AA":""},isDark(){const t=this.rgb().color;return(2126*t[0]+7152*t[1]+722*t[2])/1e4<128},isLight(){return!this.isDark()},negate(){const t=this.rgb();for(let e=0;e<3;e++)t.color[e]=255-t.color[e];return t},lighten(t){const e=this.hsl();return e.color[2]+=e.color[2]*t,e},darken(t){const e=this.hsl();return e.color[2]-=e.color[2]*t,e},saturate(t){const e=this.hsl();return e.color[1]+=e.color[1]*t,e},desaturate(t){const e=this.hsl();return e.color[1]-=e.color[1]*t,e},whiten(t){const e=this.hwb();return e.color[1]+=e.color[1]*t,e},blacken(t){const e=this.hwb();return e.color[2]+=e.color[2]*t,e},grayscale(){const t=this.rgb().color,e=.3*t[0]+.59*t[1]+.11*t[2];return Gt.rgb(e,e,e)},fade(t){return this.alpha(this.valpha-this.valpha*t)},opaquer(t){return this.alpha(this.valpha+this.valpha*t)},rotate(t){const e=this.hsl();let r=e.color[0];return r=(r+t)%360,r=r<0?360+r:r,e.color[0]=r,e},mix(t,e){if(!t||!t.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof t);const r=t.rgb(),n=this.rgb(),a=void 0===e?.5:e,o=2*a-1,i=r.alpha()-n.alpha(),s=((o*i==-1?o:(o+i)/(1+o*i))+1)/2,c=1-s;return Gt.rgb(s*r.red()+c*n.red(),s*r.green()+c*n.green(),s*r.blue()+c*n.blue(),r.alpha()*a+n.alpha()*(1-a))}};for(const t of Object.keys(qt)){if(zt.includes(t))continue;const{channels:e}=qt[t];Gt.prototype[t]=function(...e){return this.model===t?new Gt(this):e.length>0?new Gt(e,t):new Gt([...(r=qt[this.model][t].raw(this.color),Array.isArray(r)?r:[r]),this.valpha],t);var r},Gt[t]=function(...r){let n=r[0];return"number"==typeof n&&(n=Wt(r,e)),new Gt(n,t)}}function Jt(t){return function(e){return function(t,e){return Number(t.toFixed(e))}(e,t)}}function Kt(t,e,r){t=Array.isArray(t)?t:[t];for(const n of t)(Yt[n]||(Yt[n]=[]))[e]=r;return t=t[0],function(n){let a;return void 0!==n?(r&&(n=r(n)),a=this[t](),a.color[e]=n,a):(a=this[t]().color[e],r&&(a=r(a)),a)}}function Xt(t){return function(e){return Math.max(0,Math.min(t,e))}}function Wt(t,e){for(let r=0;rObject.assign({},...Object.entries(t??{}).flatMap((([t,e])=>"object"==typeof e?Object.entries(te(e)).map((([e,r])=>({[t+("DEFAULT"===e?"":`-${e}`)]:r}))):[{[`${t}`]:e}]))),ee=(t,e,{usesMediaStrategy:r,darkSelector:n,lightId:a,darkId:o,variablePrefix:i=""})=>{if(!t)return{colors:{},styles:e};const s=te(t);return Object.keys(s).forEach((t=>{const c=t.match(new RegExp(`^(?:(.+)-)?${a}(?:-(.+))?$`));if(c){const a=c[1],l=c[2],u=[a,l].filter((t=>t)).join("-"),h=s[t],d=s[[a,o,l].filter((t=>t)).join("-")];if(h&&d){if(s[u])throw`withModeAwareColors plugin error: adding the '${u}' mode-aware color would overwrite an existing color.`;{const t=Zt(h).rgb().array(),a=t.slice(0,3).join(" "),o=t.length>3?100*t[3]+"%":void 0,c=Zt(d).rgb().array(),l=c.slice(0,3).join(" "),m=c.length>3?100*c[3]+"%":void 0,f=`--color-${i?`${i}-`:""}${u}`,g=`--opacity-${i?`${i}-`:""}${u}`;s[u]=({opacityValue:t})=>`rgb(var(${f}) / ${t?"string"==typeof t&&t.startsWith("var(")?`var(${g}, ${t})`:t:`var(${g}, 1)`})`,e[":root"][f]=a,o&&(e[":root"][g]=o),r?(e["@media (prefers-color-scheme: dark)"][":root"][f]=l,m&&(e["@media (prefers-color-scheme: dark)"][":root"][g]=m)):(e[n][f]=l,m&&(e[n][g]=m))}}}})),{colors:s,styles:e}};const re=(t,e,r={scheme:"content",contrast:0,extend:!1})=>{if(e.primary){const n=X(e,r?.scheme||"content",r?.contrast||0);return((t,{lightId:e,darkId:r}={lightId:"light",darkId:"dark"})=>{const n=Array.isArray(t.darkMode)?"selector"!==t.darkMode[0]:"selector"!==t.darkMode,a=!n&&(Array.isArray(t.darkMode)&&t.darkMode[1]||".dark"),o={":root":{},...n?{"@media (prefers-color-scheme: dark)":{":root":{}}}:{[a]:{}}};if(t.theme?.colors){const{colors:i}=ee(t.theme.colors,o,{usesMediaStrategy:n,darkSelector:a,lightId:e,darkId:r});t.theme.colors=i}if(t.theme?.extend?.colors){const{colors:i}=ee(t.theme.extend.colors,o,{usesMediaStrategy:n,darkSelector:a,lightId:e,darkId:r});t.theme.extend.colors=i}if(t.theme?.textColor){const{colors:i}=ee(t.theme.textColor,o,{usesMediaStrategy:n,darkSelector:a,lightId:e,darkId:r,variablePrefix:"text"});t.theme.textColor=i}if(t.theme?.extend?.textColor){const{colors:i}=ee(t.theme.extend.textColor,o,{usesMediaStrategy:n,darkSelector:a,lightId:e,darkId:r,variablePrefix:"text"});t.theme.extend.textColor=i}if(t.theme?.backgroundColor){const{colors:i}=ee(t.theme.backgroundColor,o,{usesMediaStrategy:n,darkSelector:a,lightId:e,darkId:r,variablePrefix:"background"});t.theme.backgroundColor=i}if(t.theme?.extend?.backgroundColor){const{colors:i}=ee(t.theme.extend.backgroundColor,o,{usesMediaStrategy:n,darkSelector:a,lightId:e,darkId:r,variablePrefix:"background"});t.theme.extend.backgroundColor=i}if(t.theme?.borderColor){const{colors:i}=ee(t.theme.borderColor,o,{usesMediaStrategy:n,darkSelector:a,lightId:e,darkId:r,variablePrefix:"border"});t.theme.borderColor=i}if(t.theme?.extend?.borderColor){const{colors:i}=ee(t.theme.extend.borderColor,o,{usesMediaStrategy:n,darkSelector:a,lightId:e,darkId:r,variablePrefix:"border"});t.theme.extend.borderColor=i}if(t.theme?.outlineColor){const{colors:i}=ee(t.theme.outlineColor,o,{usesMediaStrategy:n,darkSelector:a,lightId:e,darkId:r,variablePrefix:"outline"});t.theme.outlineColor=i}if(t.theme?.extend?.outlineColor){const{colors:i}=ee(t.theme.extend.outlineColor,o,{usesMediaStrategy:n,darkSelector:a,lightId:e,darkId:r,variablePrefix:"outline"});t.theme.extend.outlineColor=i}return{...t,plugins:[...t.plugins||[],Qt((({addBase:t})=>t(o)))]}})({...t,theme:r.extend?{...t.theme||{},extend:{...t.theme?.extend||{},colors:{...t.theme?.extend?.colors||{},...n}}}:{...t.theme||{},colors:{...t.theme?.colors||{},...n}},plugins:[...t.plugins||[],...ft({surfacePrefix:"bg",interactiveSurfacePrefix:"interactive-bg",draggedSurfacePrefix:"dragged-bg",disabledStyles:{textOpacity:.38,backgroundOpacity:.12,colorName:"on-surface"}})]})}throw"A primary color must be specified"};export{re as withMaterialColors}; -//# sourceMappingURL=index.esm.js.map diff --git a/src/TabKeeper.UI.Wasm/tailwind.config.variants.js b/src/TabKeeper.UI.Wasm/tailwind.config.variants.js deleted file mode 100644 index 596cdff..0000000 --- a/src/TabKeeper.UI.Wasm/tailwind.config.variants.js +++ /dev/null @@ -1,41 +0,0 @@ -export function variants({ matchVariant }) { - const defaults = { - // Positional - first: ':first-child', - last: ':last-child', - only: ':only-child', - odd: ':nth-child(odd)', - even: ':nth-child(even)', - 'first-of-type': 'first-of-type', - 'last-of-type': 'last-of-type', - 'only-of-type': 'only-of-type', - // State - visited: 'visited', - target: 'target', - open: '[open]', - // Forms - default: 'default', - checked: 'checked', - indeterminate: 'indeterminate', - 'placeholder-shown': 'placeholder-shown', - autofill: 'autofill', - required: 'required', - valid: 'valid', - invalid: 'invalid', - 'in-range': 'in-range', - 'out-of-range': 'out-of-range', - 'read-only': 'read-only', - // Content - empty: 'empty', - // Interactive - 'focus-within': 'focus-within', - hover: 'hover', - focus: 'focus', - 'focus-visible': 'focus-visible', - active: 'active', - disabled: 'disabled', - } - matchVariant(`parent`, (value) => `:merge(.parent)${value} > &`, { values: defaults }) - matchVariant(`next-input`, (value) => `&:has(+ input:${value})`, { values: defaults }) - matchVariant(`peer-input`, (value) => `input:${value} ~ &`, { values: defaults }) -}; \ No newline at end of file diff --git a/src/TabKeeper.UI.Wasm/tailwind.extension.json b/src/TabKeeper.UI.Wasm/tailwind.extension.json deleted file mode 100644 index 2d5fd97..0000000 --- a/src/TabKeeper.UI.Wasm/tailwind.extension.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/theron-wang/VS2022-Editor-Support-for-Tailwind-CSS/refs/heads/main/tailwind.extension.schema.json", - "ConfigurationFiles": [ - { - "Path": "tailwind.config.js", - "IsDefault": true, - "ApplicableLocations": [] - } - ], - "BuildFiles": [], - "PackageConfigurationFile": null, - "CustomRegexes": { - "Razor": { - "Override": false, - "Values": [] - }, - "HTML": { - "Override": false, - "Values": [] - }, - "JavaScript": { - "Override": false, - "Values": [] - } - }, - "UseCli": false -} \ No newline at end of file diff --git a/src/TabKeeper.UI.Wasm/wwwroot/i18n/el.json b/src/TabKeeper.UI.Wasm/wwwroot/i18n/el.json index 75fcddb..7e6b9be 100644 --- a/src/TabKeeper.UI.Wasm/wwwroot/i18n/el.json +++ b/src/TabKeeper.UI.Wasm/wwwroot/i18n/el.json @@ -6,18 +6,34 @@ "description": "Συγγνώμη, δεν υπάρχει τίποτα σε αυτήν τη διεύθυνση." } }, + "add": "Προσθήκη", + "update": "Ενημέρωση", + "cancel": "Ακύρωση", + "close": "Κλείσιμο", + "products": "Προϊόντα", + "people": "Άνθρωποι", + "name": "Όνομα", + "place": "Τοποθεσία", + "price": "Τιμή", + "quantity": "Ποσότητα", "settings": { "title": "Ρυθμίσεις", "app.title": "Εφαρμογή", "theme": { "title": "Θέμα", "auto": "Αυτόματο", - "dark": "Σκοτεινό", - "light": "Φωτεινό" + "fall-light": "Φθινοπωρινό Φωτεινό", + "fall-dark": "Φθινοπωρινό Σκούρο", + "spring-light": "Ανοιξιάτικο Φωτεινό", + "spring-dark": "Ανοιξιάτικο Σκούρο", + "summer-light": "Καλοκαιρινό Φωτεινό", + "summer-dark": "Καλοκαιρινό Σκούρο", + "winter-light": "Χειμερινό Φωτεινό", + "winter-dark": "Χειμερινό Σκούρο" }, "lang": { "title": "Γλώσσα", - "en": "English", + "en": "Αγγλικά", "el": "Ελληνικά" } } diff --git a/src/TabKeeper.UI.Wasm/wwwroot/i18n/en.json b/src/TabKeeper.UI.Wasm/wwwroot/i18n/en.json index bd42f8a..c468232 100644 --- a/src/TabKeeper.UI.Wasm/wwwroot/i18n/en.json +++ b/src/TabKeeper.UI.Wasm/wwwroot/i18n/en.json @@ -6,14 +6,30 @@ "description": "Sorry, there is nothing at this address." } }, + "add": "Add", + "update": "Update", + "cancel": "Cancel", + "close": "Close", + "products": "Products", + "people": "People", + "name": "Name", + "place": "Place", + "price": "Price", + "quantity": "quantity", "settings": { "title": "Settings", "app.title": "Application", "theme": { "title": "Theme", "auto": "Auto", - "dark": "Dark", - "light": "Light" + "fall-light": "Fall Light", + "fall-dark": "Fall Dark", + "spring-light": "Spring Light", + "spring-dark": "Spring Dark", + "summer-light": "Summer Light", + "summer-dark": "Summer Dark", + "winter-light": "Winter Light", + "winter-dark": "Winter Dark" }, "lang": { "title": "Language", diff --git a/src/TabKeeper.UI.Wasm/wwwroot/index.html b/src/TabKeeper.UI.Wasm/wwwroot/index.html index 3bc00e0..f9f621c 100644 --- a/src/TabKeeper.UI.Wasm/wwwroot/index.html +++ b/src/TabKeeper.UI.Wasm/wwwroot/index.html @@ -13,7 +13,7 @@ - +
diff --git a/src/TabKeeper.UI.Wasm/wwwroot/js/index.js b/src/TabKeeper.UI.Wasm/wwwroot/js/index.js deleted file mode 100644 index 4a5611b..0000000 --- a/src/TabKeeper.UI.Wasm/wwwroot/js/index.js +++ /dev/null @@ -1,11 +0,0 @@ -(() => { - const dark = "dark"; - const light = "light"; - const key = "theme"; - - if (localStorage[key] === dark || (!(key in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) { - document.documentElement.setAttribute('dark', true) - } else { - document.documentElement.removeAttribute('dark') - } -})(); \ No newline at end of file diff --git a/src/TabKeeper.UI.Wasm/wwwroot/js/theme.js b/src/TabKeeper.UI.Wasm/wwwroot/js/theme.js index f7fdabf..1853836 100644 --- a/src/TabKeeper.UI.Wasm/wwwroot/js/theme.js +++ b/src/TabKeeper.UI.Wasm/wwwroot/js/theme.js @@ -1,44 +1,82 @@ -const dark = "dark"; -const light = "light"; -const auto = "auto"; -const key = "theme"; +let key = "theme"; +let auto = "auto"; +let dark = "dark"; +let light = "light"; -export function updateDom() { - if (localStorage[key] === dark || (!(key in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) { - document.documentElement.setAttribute('dark', true) - } else { - document.documentElement.removeAttribute('dark') +export function configure(options) { + if (options == null) { + return; + } + if (options.key) { + key = options.key; + } + if (options.auto) { + auto = options.auto; + } + if (options.dark) { + dark = options.dark; + } + if (options.light) { + light = options.light; } } -export function toggle() { - if (!(key in localStorage)) return; - - localStorage[key] === light ? setDark() : setLight(); - updateDom(); +export function updateDom() { + const theme = localStorage[key]; + if (theme != null && theme != auto) { + document.documentElement.setAttribute(key, theme) + } + else if (window.matchMedia('(prefers-color-scheme: light)').matches) { + document.documentElement.setAttribute(key, light) + } + else if (window.matchMedia('(prefers-color-scheme: dark)').matches) { + document.documentElement.setAttribute(key, dark) + } } -export function setDark() { - localStorage[key] = dark; - updateDom(); +export function getTheme() { + const theme = localStorage[key]; + if (theme != null) { + return theme; + } + else if (window.matchMedia('(prefers-color-scheme: light)').matches) { + return light; + } + else if (window.matchMedia('(prefers-color-scheme: dark)').matches) { + return dark; + } + return ""; } -export function setLight() { - localStorage[key] = light; +export function setTheme(theme) { + localStorage[key] = theme; + //document.documentElement.setAttribute(key, theme) updateDom(); } export function setAuto() { localStorage.removeItem(key); + document.documentElement.removeAttribute(key); updateDom(); } -export function getTheme() { - const theme = localStorage[key]; - - if ([dark, light, auto].some(v => v === theme)) - return theme; +export function setDark() { + setTheme(dark); +} - return auto; +export function setLight() { + setTheme(light); } +export function toggle() { + const theme = localStorage[key]; + if (theme != null) { + theme === light ? setDark() : setLight(); + } + else if (window.matchMedia('(prefers-color-scheme: light)').matches) { + setDark(); + } + else if (window.matchMedia('(prefers-color-scheme: dark)').matches) { + setLight(); + } +} diff --git a/src/TabKeeper.UI/Preferences.cs b/src/TabKeeper.UI/Preferences.cs index 40d2759..c052e1f 100644 --- a/src/TabKeeper.UI/Preferences.cs +++ b/src/TabKeeper.UI/Preferences.cs @@ -17,7 +17,17 @@ public static class Preferences { Key = Preferences.Theme, Title = "settings.theme.title", - AllowedValues = ["auto", "dark", "light"], + AllowedValues = [ + "auto", + "fall-light", + "fall-dark", + "spring-light", + "spring-dark", + "summer-light", + "summer-dark", + "winter-light", + "winter-dark", + ], DefaultValue = "auto", SummaryProvider = value => $"settings.theme.{value}", }) diff --git a/src/TabKeeper.UI/TabKeeper.UI.csproj b/src/TabKeeper.UI/TabKeeper.UI.csproj index e38cc2c..bfc5f26 100644 --- a/src/TabKeeper.UI/TabKeeper.UI.csproj +++ b/src/TabKeeper.UI/TabKeeper.UI.csproj @@ -6,7 +6,6 @@ -