diff --git a/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsCommon.html b/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsCommon.html
index 403c8521..82a11cf9 100644
--- a/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsCommon.html
+++ b/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsCommon.html
@@ -1,2 +1,2 @@
-var blue = Colors.Blue["500"]; // #3b82f6
+var blue = Colors.Blue["500"]; // oklch(0.623 0.214 259.815)
diff --git a/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsCommonScale.html b/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsCommonScale.html
index 399096ed..ae91b3e3 100644
--- a/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsCommonScale.html
+++ b/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsCommonScale.html
@@ -3,16 +3,16 @@
/// </summary>
public readonly static Dictionary<string, string> Blue = new()
{
- ["50"] = "#eff6ff",
- ["100"] = "#dbeafe",
- ["200"] = "#bfdbfe",
- ["300"] = "#93c5fd",
- ["400"] = "#60a5fa",
- ["500"] = "#3b82f6",
- ["600"] = "#2563eb",
- ["700"] = "#1d4ed8",
- ["800"] = "#1e40af",
- ["900"] = "#1e3a8a",
- ["950"] = "#172554"
+ ["50"] = "oklch(0.97 0.014 254.604)",
+ ["100"] = "oklch(0.932 0.032 255.585)",
+ ["200"] = "oklch(0.882 0.059 254.128)",
+ ["300"] = "oklch(0.809 0.105 251.813)",
+ ["400"] = "oklch(0.707 0.165 254.624)",
+ ["500"] = "oklch(0.623 0.214 259.815)",
+ ["600"] = "oklch(0.546 0.245 262.881)",
+ ["700"] = "oklch(0.488 0.243 264.376)",
+ ["800"] = "oklch(0.424 0.199 265.638)",
+ ["900"] = "oklch(0.379 0.146 265.522)",
+ ["950"] = "oklch(0.282 0.091 267.935)"
};
diff --git a/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsSemantic.html b/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsSemantic.html
index 4ebb6e08..75b3233c 100644
--- a/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsSemantic.html
+++ b/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsSemantic.html
@@ -1,2 +1,2 @@
-var primary = SemanticColors.Light.Primary["500"]; // #3b82f6
+var primary = SemanticColors.Light.Primary["500"]; // oklch(0.623 0.214 259.815)
diff --git a/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsSemanticCustom.html b/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsSemanticCustom.html
deleted file mode 100644
index cb4ba4cc..00000000
--- a/docs/LumexUI.Docs.Client/Samples/Customization/Colors/colorsSemanticCustom.html
+++ /dev/null
@@ -1,49 +0,0 @@
-public record MyTheme : LumexTheme
-{
- public MyTheme()
- {
- Light = new ThemeConfigLight()
- {
- Colors = new ThemeColorsLight()
- {
- // ["default"] = "#ffffff"
- Background = new ColorScale( defaultColor: Colors.White ),
-
- /*
- * ["50...950"] => The slate color scale
- * ["default"] => The slate color '700'
- * ["foreground"] => A readable color against the "default"
- */
- Foreground = new ColorScale( colors: Colors.Slate, defaultKey: "700" ),
-
- /*
- * ["50...950"] => The orange color scale
- * ["default"] => The orange color '600'
- * ["foreground"] => The black color
- */
- Primary = [
- .. Colors.Orange,
- new("default", Colors.Orange["600"]), // KeyValuePair<string, string>
- new("foreground", Colors.Black),
- ],
- // ... rest of the colors
- }
- };
-
- Dark = new ThemeConfigDark()
- {
- Colors = new ThemeColorsDark()
- {
- Background = new ColorScale( defaultColor: Colors.Slate["900"] ),
- Foreground = new ColorScale( colors: Colors.Slate, defaultKey: "200" ),
- Primary = [
- .. Colors.Orange,
- new("default", Colors.Orange["400"]),
- new("foreground", Colors.White),
- ],
- // ... rest of the colors
- }
- };
- }
-}
-
diff --git a/docs/LumexUI.Docs.Client/Samples/Customization/Customize Theme/customizeThemeColors.html b/docs/LumexUI.Docs.Client/Samples/Customization/Customize Theme/customizeThemeColors.html
index ffd4063c..a00c8a2d 100644
--- a/docs/LumexUI.Docs.Client/Samples/Customization/Customize Theme/customizeThemeColors.html
+++ b/docs/LumexUI.Docs.Client/Samples/Customization/Customize Theme/customizeThemeColors.html
@@ -7,7 +7,7 @@
Colors = new ThemeColorsLight()
{
Primary = new ColorScale( Colors.Orange ),
- Focus = new ColorScale( Colors.Orange["500"] ) // #f97316
+ Focus = new ColorScale( Colors.Orange["500"] ) // oklch(0.705 0.213 47.604)
}
};
}
diff --git a/docs/LumexUI.Docs.Client/Samples/Installation/installationConfig.html b/docs/LumexUI.Docs.Client/Samples/Installation/installationConfig.html
index f84a8d30..ffe01102 100644
--- a/docs/LumexUI.Docs.Client/Samples/Installation/installationConfig.html
+++ b/docs/LumexUI.Docs.Client/Samples/Installation/installationConfig.html
@@ -1,14 +1,5 @@
-const lumexui = require("{PATH_TO_NUGET}/theme/plugin");
+@import "tailwindcss";
+@import "../bin/lumexui/theme"; /* theme file */
-/** @type {import("tailwindcss").Config} */
-module.exports = {
- content: [
- // ...
- "{PATH_TO_NUGET}/theme/components/*.cs"
- ],
- theme: {
- extend: {},
- },
- plugins: [lumexui],
-};
+@source "../bin/lumexui/*.cs"; /* components styles */
diff --git a/docs/LumexUI.Docs.Client/Samples/Installation/installationFiles.html b/docs/LumexUI.Docs.Client/Samples/Installation/installationFiles.html
index f17521e3..0143f296 100644
--- a/docs/LumexUI.Docs.Client/Samples/Installation/installationFiles.html
+++ b/docs/LumexUI.Docs.Client/Samples/Installation/installationFiles.html
@@ -1,13 +1,12 @@
<!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <link href="output.css" rel="stylesheet" />
- </head>
- <body>
- <script src="_content/LumexUI/js/LumexUI.js" type="module"></script>
- <!-- Blazor framework assets -->
- </body>
- </html>
+<html>
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <link href="app.css" rel="stylesheet" />
+</head>
+<body>
+ <script src="_content/LumexUI/js/LumexUI.js" type="module"></script>
+</body>
+</html>
diff --git a/docs/LumexUI.Docs.Client/Samples/Installation/installationServices.html b/docs/LumexUI.Docs.Client/Samples/Installation/installationServices.html
index 9282197b..947a9b74 100644
--- a/docs/LumexUI.Docs.Client/Samples/Installation/installationServices.html
+++ b/docs/LumexUI.Docs.Client/Samples/Installation/installationServices.html
@@ -1,4 +1,5 @@
using LumexUI.Extensions;
+// ...
builder.Services.AddLumexServices();
diff --git a/docs/LumexUI.Docs/Components/App.razor b/docs/LumexUI.Docs/Components/App.razor
index 8651661e..274956bf 100644
--- a/docs/LumexUI.Docs/Components/App.razor
+++ b/docs/LumexUI.Docs/Components/App.razor
@@ -5,14 +5,15 @@
-
+ @* *@
+
LumexUI - A versatile Blazor UI library built using Tailwind CSS
-
+
diff --git a/docs/LumexUI.Docs/Directory.Build.props b/docs/LumexUI.Docs/Directory.Build.props
new file mode 100644
index 00000000..84c46c99
--- /dev/null
+++ b/docs/LumexUI.Docs/Directory.Build.props
@@ -0,0 +1,5 @@
+
+
+ $(MSBuildThisFileDirectory)../../
+
+
\ No newline at end of file
diff --git a/docs/LumexUI.Docs/Directory.Build.targets b/docs/LumexUI.Docs/Directory.Build.targets
new file mode 100644
index 00000000..0c53f3ab
--- /dev/null
+++ b/docs/LumexUI.Docs/Directory.Build.targets
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/LumexUI.Docs/LumexUI.Docs.csproj b/docs/LumexUI.Docs/LumexUI.Docs.csproj
index 66d96593..205b191d 100644
--- a/docs/LumexUI.Docs/LumexUI.Docs.csproj
+++ b/docs/LumexUI.Docs/LumexUI.Docs.csproj
@@ -6,10 +6,6 @@
enable
-
- $(MSBuildThisFileDirectory)../../
-
-
dotnet run -c Release --project "$(SolutionDir)docs/LumexUI.Docs.Generator/LumexUI.Docs.Generator.csproj"
@@ -27,29 +23,33 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-windows-x64.exe
+ tailwindcss-windows-x64.exe
+
+
+ https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-linux-x64
+ tailwindcss-linux-x64
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
-
-
-
-
-
-
diff --git a/docs/LumexUI.Docs/Styles/fonts.css b/docs/LumexUI.Docs/Styles/fonts.css
index 981b1fc3..3fdc7e73 100644
--- a/docs/LumexUI.Docs/Styles/fonts.css
+++ b/docs/LumexUI.Docs/Styles/fonts.css
@@ -1,6 +1,6 @@
@font-face {
font-family: 'Inter var';
- font-weight: 100 900;
+ font-weight: 300 900;
font-display: block;
font-style: normal;
src: url(/assets/fonts/Inter-VariableFont_slnt,wght.ttf) format("truetype") tech(variations),
diff --git a/docs/LumexUI.Docs/Styles/globals.css b/docs/LumexUI.Docs/Styles/globals.css
index 3b5d44e8..e6c8c65f 100644
--- a/docs/LumexUI.Docs/Styles/globals.css
+++ b/docs/LumexUI.Docs/Styles/globals.css
@@ -1,29 +1,49 @@
-@import 'tailwindcss/base';
-@import 'tailwindcss/components';
-@import 'tailwindcss/utilities';
+@import "tailwindcss" theme(static);
+@import "../bin/lumexui/_theme";
+@import "./prism" layer(components);
+@import "./blazor" layer(components);
+@import "./typography" layer(utilities);
+@import "./fonts";
-@import 'blazor.css';
-@import 'prism.css';
-@import 'fonts.css';
+@source "../../LumexUI.Docs.Client/{Pages,Components}/**/*.{razor,razor.cs}"; /* docs */
+@source "../bin/lumexui/*.cs"; /* components */
+
+@plugin "@tailwindcss/typography";
+
+@theme {
+ --font-sans: Inter var, system-ui;
+ --font-sans--font-feature-settings: "cv02", "cv03", "cv04", "cv11";
+ --font-mono: Fira Code var, ui-monospace;
+}
+
+@custom-variant scrollbar (&::-webkit-scrollbar);
+@custom-variant scrollbar-track (&::-webkit-scrollbar-track);
+@custom-variant scrollbar-thumb (&::-webkit-scrollbar-thumb);
.dark {
color-scheme: dark;
}
-html {
- height: 100%;
+.light {
+ color-scheme: light;
}
-body {
- min-height: 100%;
+.scrollbar {
+ @apply
+ scrollbar:h-2
+ scrollbar:w-2
+ scrollbar-thumb:rounded-sm
+ scrollbar-thumb:bg-foreground-200
+ scrollbar-track:rounded-sm
+ scrollbar-track:bg-foreground-100;
}
-@layer utilities {
- .bordered-link {
- @apply font-semibold leading-tight text-current border-b border-current hover:border-b-2;
- }
-
- .scrollbar {
- @apply scrollbar:h-2 scrollbar:w-2 scrollbar-thumb:rounded scrollbar-thumb:bg-foreground-200 scrollbar-track:rounded scrollbar-track:bg-foreground-100;
- }
-}
\ No newline at end of file
+.bordered-link {
+ @apply
+ font-semibold
+ leading-tight
+ text-current
+ border-b
+ border-current
+ hover:border-b-2;
+}
diff --git a/docs/LumexUI.Docs/Styles/typography.css b/docs/LumexUI.Docs/Styles/typography.css
new file mode 100644
index 00000000..e2400236
--- /dev/null
+++ b/docs/LumexUI.Docs/Styles/typography.css
@@ -0,0 +1,37 @@
+/* Visual Studio does not support modern CSS nesting yet. */
+
+.prose {
+ max-width: none;
+}
+
+ .prose :is(h2, h3, h4):where(:not(.not-prose, .not-prose *)) {
+ scroll-margin-top: var(--scroll-mt);
+ }
+
+ .prose :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ font-weight: var(--font-weight-semibold);
+ }
+
+ .prose a:not(:where(:is(h2, h3, h4) *)):where(:not(.not-prose, .not-prose *)) {
+ color: var(--tw-prose-links);
+ font-weight: var(--font-weight-semibold);
+ text-decoration: underline;
+ text-underline-offset: 3px;
+ text-decoration-color: var(--color-orange-400);
+ text-decoration-thickness: 1px;
+ }
+
+ .prose a:hover:where(:not(.not-prose, .not-prose *)) {
+ text-decoration-thickness: 2px;
+ }
+
+ .prose pre:where(:not(.not-prose, .not-prose *)) {
+ display: flex;
+ padding: --spacing(5);
+ color: var(--color-zinc-100);
+ }
+
+ .prose :where(code[class]):not(:where([class~=not-prose],[class~=not-prose] *)):before,
+ .prose :where(code[class]):not(:where([class~=not-prose],[class~=not-prose] *)):after {
+ content: none;
+ }
diff --git a/docs/LumexUI.Docs/package-lock.json b/docs/LumexUI.Docs/package-lock.json
deleted file mode 100644
index 0bebb68e..00000000
--- a/docs/LumexUI.Docs/package-lock.json
+++ /dev/null
@@ -1,1434 +0,0 @@
-{
- "name": "lumexui.docs",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "lumexui.docs",
- "devDependencies": {
- "@tailwindcss/typography": "^0.5.15",
- "tailwindcss": "^3.4.10"
- }
- },
- "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==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "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,
- "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"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
- "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
- "dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "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==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "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==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "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
- },
- "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==",
- "dev": true,
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "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==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "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==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "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==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "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==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@tailwindcss/typography": {
- "version": "0.5.15",
- "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.15.tgz",
- "integrity": "sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==",
- "dev": true,
- "dependencies": {
- "lodash.castarray": "^4.4.0",
- "lodash.isplainobject": "^4.0.6",
- "lodash.merge": "^4.6.2",
- "postcss-selector-parser": "6.0.10"
- },
- "peerDependencies": {
- "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20"
- }
- },
- "node_modules/@tailwindcss/typography/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,
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "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==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "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
- },
- "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==",
- "dev": true,
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "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==",
- "dev": true
- },
- "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
- },
- "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==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "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==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "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,
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "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==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "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"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "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==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "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==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "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==",
- "dev": true
- },
- "node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "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==",
- "dev": true,
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "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
- },
- "node_modules/dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
- "dev": true
- },
- "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
- },
- "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
- },
- "node_modules/fast-glob": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
- "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
- "dev": true,
- "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.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "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==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fastq": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
- "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
- "dev": true,
- "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,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/foreground-child": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
- "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "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,
- "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,
- "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,
- "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,
- "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,
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "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,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
- "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
- "dev": true,
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "engines": {
- "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,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "engines": {
- "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==",
- "dev": true
- },
- "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==",
- "dev": true,
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/jiti": {
- "version": "1.21.6",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
- "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
- "dev": true,
- "bin": {
- "jiti": "bin/jiti.js"
- }
- },
- "node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "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
- },
- "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
- },
- "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
- },
- "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
- },
- "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
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "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,
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/mz": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
- "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "dev": true,
- "dependencies": {
- "any-promise": "^1.0.0",
- "object-assign": "^4.0.1",
- "thenify-all": "^1.0.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "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==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "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==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/package-json-from-dist": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
- "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
- "dev": true
- },
- "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==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "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==",
- "dev": true
- },
- "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,
- "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.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
- "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
- "dev": true
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "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,
- "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,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.45",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz",
- "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==",
- "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"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.0.1",
- "source-map-js": "^1.2.0"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "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,
- "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/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,
- "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"
- }
- ],
- "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-load-config/node_modules/lilconfig": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
- "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
- "dev": true,
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antonk52"
- }
- },
- "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"
- }
- ],
- "dependencies": {
- "postcss-selector-parser": "^6.1.1"
- },
- "engines": {
- "node": ">=12.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.14"
- }
- },
- "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,
- "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==",
- "dev": true
- },
- "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"
- }
- ]
- },
- "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,
- "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,
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
- "dev": true,
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "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"
- }
- ],
- "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,
- "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,
- "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,
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "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,
- "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,
- "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,
- "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,
- "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
- },
- "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,
- "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,
- "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,
- "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,
- "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,
- "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,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/tailwindcss": {
- "version": "3.4.10",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz",
- "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==",
- "dev": true,
- "dependencies": {
- "@alloc/quick-lru": "^5.2.0",
- "arg": "^5.0.2",
- "chokidar": "^3.5.3",
- "didyoumean": "^1.2.2",
- "dlv": "^1.1.3",
- "fast-glob": "^3.3.0",
- "glob-parent": "^6.0.2",
- "is-glob": "^4.0.3",
- "jiti": "^1.21.0",
- "lilconfig": "^2.1.0",
- "micromatch": "^4.0.5",
- "normalize-path": "^3.0.0",
- "object-hash": "^3.0.0",
- "picocolors": "^1.0.0",
- "postcss": "^8.4.23",
- "postcss-import": "^15.1.0",
- "postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.1",
- "postcss-nested": "^6.0.1",
- "postcss-selector-parser": "^6.0.11",
- "resolve": "^1.22.2",
- "sucrase": "^3.32.0"
- },
- "bin": {
- "tailwind": "lib/cli.js",
- "tailwindcss": "lib/cli.js"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "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,
- "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,
- "dependencies": {
- "thenify": ">= 3.1.0 < 4"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "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
- },
- "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
- },
- "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,
- "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,
- "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,
- "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,
- "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,
- "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
- },
- "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,
- "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,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yaml": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz",
- "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==",
- "dev": true,
- "bin": {
- "yaml": "bin.mjs"
- },
- "engines": {
- "node": ">= 14"
- }
- }
- }
-}
diff --git a/docs/LumexUI.Docs/package.json b/docs/LumexUI.Docs/package.json
deleted file mode 100644
index 47dc5367..00000000
--- a/docs/LumexUI.Docs/package.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "name": "lumexui.docs",
- "private": "true",
- "scripts": {
- "build": "tailwindcss -i ./Styles/globals.css -o ./wwwroot/css/docs.css",
- "build:prod": "tailwindcss -i ./Styles/globals.css -o ./wwwroot/css/docs.css --minify"
- },
- "devDependencies": {
- "@tailwindcss/typography": "^0.5.15",
- "tailwindcss": "^3.4.10"
- }
-}
diff --git a/docs/LumexUI.Docs/tailwind.config.js b/docs/LumexUI.Docs/tailwind.config.js
deleted file mode 100644
index 3442fed7..00000000
--- a/docs/LumexUI.Docs/tailwind.config.js
+++ /dev/null
@@ -1,71 +0,0 @@
-const defaultTheme = require('tailwindcss/defaultTheme');
-const lumexui = '../../src/LumexUI';
-
-/** @type {import('tailwindcss').Config} */
-module.exports = {
- content: [
- './Components/**/*.razor',
- '../LumexUI.Docs.Client/{Pages,Components}/**/*.{razor,razor.cs}',
- `${lumexui}/Styles/*.cs`
- ],
- darkMode: 'class',
- theme: {
- extend: {
- fontFamily: {
- sans: ['Inter var', ...defaultTheme.fontFamily.sans],
- mono: ['Fira Code var', ...defaultTheme.fontFamily.mono]
- },
- typography: (theme) => ({
- DEFAULT: {
- css: {
- maxWidth: 'none',
- 'h2, h3, h4': {
- 'scroll-margin-top': 'var(--scroll-mt)',
- },
- a: {
- color: 'var(--tw-prose-links) !important',
- lineHeight: theme('lineHeight.tight'),
- fontWeight: theme('fontWeight.semibold'),
- textDecoration: 'none',
- borderBottom: `1px solid ${theme('colors.orange.400')}`,
- },
- 'a:hover': {
- borderBottomWidth: '2px',
- },
- pre: {
- color: theme('colors.zinc.100'),
- padding: theme('padding.5'),
- display: 'flex'
- },
- 'code[class]::before': {
- content: '""'
- },
- 'code[class]::after': {
- content: '""'
- }
- }
- }
- }),
- },
- },
- plugins: [
- require(`${lumexui}/Scripts/Plugin/dist/plugin`),
- require('@tailwindcss/typography'),
- function ({ addVariant }) {
- addVariant('children', '& > *')
- addVariant('scrollbar', '&::-webkit-scrollbar')
- addVariant('scrollbar-track', '&::-webkit-scrollbar-track')
- addVariant('scrollbar-thumb', '&::-webkit-scrollbar-thumb')
- },
- function ({ addUtilities, theme }) {
- let color = theme('colors.indigo.200').replace('#', '%23');
- let backgroundImage = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='1' fill='${color}' /%3E%3C/svg%3E")`;
-
- addUtilities({
- '.bg-dots': {
- backgroundImage
- },
- })
- }
- ],
-};
diff --git a/src/LumexUI/Components/Navbar/LumexNavbarMenuToggle.razor b/src/LumexUI/Components/Navbar/LumexNavbarMenuToggle.razor
index 8d695e53..e82d409c 100644
--- a/src/LumexUI/Components/Navbar/LumexNavbarMenuToggle.razor
+++ b/src/LumexUI/Components/Navbar/LumexNavbarMenuToggle.razor
@@ -5,9 +5,9 @@
Class="@RootClass"
Style="@RootStyle"
type="button"
- data-slot="toggle-icon"
+ data-slot="toggle"
data-expanded="@Context.Menu?.Expanded"
@attributes="@AdditionalAttributes"
@onclick="@Toggle">
-
+
diff --git a/src/LumexUI/Components/Providers/LumexThemeProvider.razor.cs b/src/LumexUI/Components/Providers/LumexThemeProvider.razor.cs
index 8114f76f..2f9bc3d8 100644
--- a/src/LumexUI/Components/Providers/LumexThemeProvider.razor.cs
+++ b/src/LumexUI/Components/Providers/LumexThemeProvider.razor.cs
@@ -52,10 +52,11 @@ public LumexThemeProvider()
{
foreach( var scale in color.Value )
{
- var scaleKey = scale.Key == "default" ? "" : $"-{scale.Key}";
- var scaleValue = ColorUtils.HexToHsl( scale.Value );
+ var scaleKey = scale.Key != "default"
+ ? $"{color.Key}-{scale.Key}"
+ : $"{color.Key}";
- sb.AppendLine( $"--{Prefix}-{color.Key}{scaleKey}: {scaleValue};" );
+ sb.AppendLine( $"--{Prefix}-{scaleKey}: {scale.Value};" );
}
}
@@ -73,13 +74,13 @@ public LumexThemeProvider()
sb.AppendLine( $"--{Prefix}-radius-small: {theme.Layout.Radius.Sm};" );
sb.AppendLine( $"--{Prefix}-radius-medium: {theme.Layout.Radius.Md};" );
sb.AppendLine( $"--{Prefix}-radius-large: {theme.Layout.Radius.Lg};" );
- sb.AppendLine( $"--{Prefix}-box-shadow-small: {theme.Layout.Shadow.Sm};" );
- sb.AppendLine( $"--{Prefix}-box-shadow-medium: {theme.Layout.Shadow.Md};" );
- sb.AppendLine( $"--{Prefix}-box-shadow-large: {theme.Layout.Shadow.Lg};" );
- sb.AppendLine( CultureInfo.InvariantCulture, $"--{Prefix}-divider-opacity: {theme.Layout.DividerOpacity};" );
- sb.AppendLine( CultureInfo.InvariantCulture, $"--{Prefix}-disabled-opacity: {theme.Layout.DisabledOpacity};" );
- sb.AppendLine( CultureInfo.InvariantCulture, $"--{Prefix}-focus-opacity: {theme.Layout.FocusOpacity};" );
- sb.AppendLine( CultureInfo.InvariantCulture, $"--{Prefix}-hover-opacity: {theme.Layout.HoverOpacity};" );
+ sb.AppendLine( $"--{Prefix}-shadow-small: {theme.Layout.Shadow.Sm};" );
+ sb.AppendLine( $"--{Prefix}-shadow-medium: {theme.Layout.Shadow.Md};" );
+ sb.AppendLine( $"--{Prefix}-shadow-large: {theme.Layout.Shadow.Lg};" );
+ sb.AppendLine( $"--{Prefix}-opacity-divider: {theme.Layout.DividerOpacity * 100}%;" );
+ sb.AppendLine( $"--{Prefix}-opacity-disabled: {theme.Layout.DisabledOpacity * 100}%;" );
+ sb.AppendLine( $"--{Prefix}-opacity-focus: {theme.Layout.FocusOpacity * 100}%;" );
+ sb.AppendLine( $"--{Prefix}-opacity-hover: {theme.Layout.HoverOpacity * 100}%;" );
sb.AppendLine( "}" );
return sb.ToString();
diff --git a/src/LumexUI/LumexUI.csproj b/src/LumexUI/LumexUI.csproj
index dd612d99..6178413c 100644
--- a/src/LumexUI/LumexUI.csproj
+++ b/src/LumexUI/LumexUI.csproj
@@ -31,8 +31,9 @@
-
-
+
+
+
@@ -49,11 +50,11 @@
-
+
-
+
-
+
diff --git a/src/LumexUI/LumexUI.targets b/src/LumexUI/LumexUI.targets
new file mode 100644
index 00000000..087c4fc8
--- /dev/null
+++ b/src/LumexUI/LumexUI.targets
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+ $(MSBuildProjectDirectory)\bin\lumexui
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/LumexUI/Scripts/Plugin/animations.js b/src/LumexUI/Scripts/Plugin/animations.js
deleted file mode 100644
index 110c65f2..00000000
--- a/src/LumexUI/Scripts/Plugin/animations.js
+++ /dev/null
@@ -1,28 +0,0 @@
-export default {
- animation: {
- "appearance-in": "appearance-in 200ms ease-out normal both",
- "appearance-out": "appearance-out 60ms ease-in normal both",
- },
- keyframes: {
- "appearance-in": {
- "0%": {
- opacity: "0",
- transform: "translateZ(0) scale(0.85)",
- },
- "100%": {
- opacity: "1",
- transform: "translateZ(0) scale(1)",
- },
- },
- "appearance-out": {
- "0%": {
- opacity: "1",
- transform: "scale(1)",
- },
- "100%": {
- opacity: "0",
- transform: "scale(0.85)",
- },
- }
- },
-};
\ No newline at end of file
diff --git a/src/LumexUI/Scripts/Plugin/plugin.js b/src/LumexUI/Scripts/Plugin/plugin.js
deleted file mode 100644
index ea476a65..00000000
--- a/src/LumexUI/Scripts/Plugin/plugin.js
+++ /dev/null
@@ -1,211 +0,0 @@
-import plugin from 'tailwindcss/plugin';
-import animations from './animations';
-import scrollbarHide from './scrollbar-hide';
-import transitions, { DEFAULT_TRANSITION_DURATION } from './transitions';
-
-const lumexui = plugin(
- ({ addUtilities }) => {
- addUtilities({ ...transitions });
- addUtilities({ ...scrollbarHide });
- },
- {
- theme: {
- extend: {
- colors: {
- // Base
- background: {
- DEFAULT: 'hsl(var(--lumex-background) / )'
- },
- foreground: {
- 50: 'hsl(var(--lumex-foreground-50) / )',
- 100: 'hsl(var(--lumex-foreground-100) / )',
- 200: 'hsl(var(--lumex-foreground-200) / )',
- 300: 'hsl(var(--lumex-foreground-300) / )',
- 400: 'hsl(var(--lumex-foreground-400) / )',
- 500: 'hsl(var(--lumex-foreground-500) / )',
- 600: 'hsl(var(--lumex-foreground-600) / )',
- 700: 'hsl(var(--lumex-foreground-700) / )',
- 800: 'hsl(var(--lumex-foreground-800) / )',
- 900: 'hsl(var(--lumex-foreground-900) / )',
- 950: 'hsl(var(--lumex-foreground-950) / )',
- DEFAULT: 'hsl(var(--lumex-foreground) / )'
- },
- focus: {
- DEFAULT: 'hsl(var(--lumex-focus) / )'
- },
- overlay: {
- DEFAULT: 'hsl(var(--lumex-overlay) / )'
- },
- divider: {
- DEFAULT: 'hsl(var(--lumex-divider) / var(--lumex-divider-opacity, ))'
- },
- surface1: {
- DEFAULT: 'hsl(var(--lumex-surface1) / )',
- foreground: 'hsl(var(--lumex-surface1-foreground) / )'
- },
- surface2: {
- DEFAULT: 'hsl(var(--lumex-surface2) / )',
- foreground: 'hsl(var(--lumex-surface2-foreground) / )'
- },
- surface3: {
- DEFAULT: 'hsl(var(--lumex-surface3) / )',
- foreground: 'hsl(var(--lumex-surface3-foreground) / )'
- },
-
- // Default
- default: {
- 50: 'hsl(var(--lumex-default-50) / )',
- 100: 'hsl(var(--lumex-default-100) / )',
- 200: 'hsl(var(--lumex-default-200) / )',
- 300: 'hsl(var(--lumex-default-300) / )',
- 400: 'hsl(var(--lumex-default-400) / )',
- 500: 'hsl(var(--lumex-default-500) / )',
- 600: 'hsl(var(--lumex-default-600) / )',
- 700: 'hsl(var(--lumex-default-700) / )',
- 800: 'hsl(var(--lumex-default-800) / )',
- 900: 'hsl(var(--lumex-default-900) / )',
- 950: 'hsl(var(--lumex-default-950) / )',
- DEFAULT: 'hsl(var(--lumex-default) / )',
- foreground: 'hsl(var(--lumex-default-foreground) / )'
- },
-
- // Primary
- primary: {
- 50: 'hsl(var(--lumex-primary-50) / )',
- 100: 'hsl(var(--lumex-primary-100) / )',
- 200: 'hsl(var(--lumex-primary-200) / )',
- 300: 'hsl(var(--lumex-primary-300) / )',
- 400: 'hsl(var(--lumex-primary-400) / )',
- 500: 'hsl(var(--lumex-primary-500) / )',
- 600: 'hsl(var(--lumex-primary-600) / )',
- 700: 'hsl(var(--lumex-primary-700) / )',
- 800: 'hsl(var(--lumex-primary-800) / )',
- 900: 'hsl(var(--lumex-primary-900) / )',
- 950: 'hsl(var(--lumex-primary-950) / )',
- DEFAULT: 'hsl(var(--lumex-primary) / )',
- foreground: 'hsl(var(--lumex-primary-foreground) / )'
- },
-
- // Secondary
- secondary: {
- 50: 'hsl(var(--lumex-secondary-50) / )',
- 100: 'hsl(var(--lumex-secondary-100) / )',
- 200: 'hsl(var(--lumex-secondary-200) / )',
- 300: 'hsl(var(--lumex-secondary-300) / )',
- 400: 'hsl(var(--lumex-secondary-400) / )',
- 500: 'hsl(var(--lumex-secondary-500) / )',
- 600: 'hsl(var(--lumex-secondary-600) / )',
- 700: 'hsl(var(--lumex-secondary-700) / )',
- 800: 'hsl(var(--lumex-secondary-800) / )',
- 900: 'hsl(var(--lumex-secondary-900) / )',
- 950: 'hsl(var(--lumex-secondary-950) / )',
- DEFAULT: 'hsl(var(--lumex-secondary) / )',
- foreground: 'hsl(var(--lumex-secondary-foreground) / )'
- },
-
- // Success
- success: {
- 50: 'hsl(var(--lumex-success-50) / )',
- 100: 'hsl(var(--lumex-success-100) / )',
- 200: 'hsl(var(--lumex-success-200) / )',
- 300: 'hsl(var(--lumex-success-300) / )',
- 400: 'hsl(var(--lumex-success-400) / )',
- 500: 'hsl(var(--lumex-success-500) / )',
- 600: 'hsl(var(--lumex-success-600) / )',
- 700: 'hsl(var(--lumex-success-700) / )',
- 800: 'hsl(var(--lumex-success-800) / )',
- 900: 'hsl(var(--lumex-success-900) / )',
- 950: 'hsl(var(--lumex-success-950) / )',
- DEFAULT: 'hsl(var(--lumex-success) / )',
- foreground: 'hsl(var(--lumex-success-foreground) / )'
- },
-
- // Warning
- warning: {
- 50: 'hsl(var(--lumex-warning-50) / )',
- 100: 'hsl(var(--lumex-warning-100) / )',
- 200: 'hsl(var(--lumex-warning-200) / )',
- 300: 'hsl(var(--lumex-warning-300) / )',
- 400: 'hsl(var(--lumex-warning-400) / )',
- 500: 'hsl(var(--lumex-warning-500) / )',
- 600: 'hsl(var(--lumex-warning-600) / )',
- 700: 'hsl(var(--lumex-warning-700) / )',
- 800: 'hsl(var(--lumex-warning-800) / )',
- 900: 'hsl(var(--lumex-warning-900) / )',
- 950: 'hsl(var(--lumex-warning-950) / )',
- DEFAULT: 'hsl(var(--lumex-warning) / )',
- foreground: 'hsl(var(--lumex-warning-foreground) / )'
- },
-
- // Danger
- danger: {
- 50: 'hsl(var(--lumex-danger-50) / )',
- 100: 'hsl(var(--lumex-danger-100) / )',
- 200: 'hsl(var(--lumex-danger-200) / )',
- 300: 'hsl(var(--lumex-danger-300) / )',
- 400: 'hsl(var(--lumex-danger-400) / )',
- 500: 'hsl(var(--lumex-danger-500) / )',
- 600: 'hsl(var(--lumex-danger-600) / )',
- 700: 'hsl(var(--lumex-danger-700) / )',
- 800: 'hsl(var(--lumex-danger-800) / )',
- 900: 'hsl(var(--lumex-danger-900) / )',
- 950: 'hsl(var(--lumex-danger-950) / )',
- DEFAULT: 'hsl(var(--lumex-danger) / )',
- foreground: 'hsl(var(--lumex-danger-foreground) / )'
- },
-
- // Info
- info: {
- 50: 'hsl(var(--lumex-info-50) / )',
- 100: 'hsl(var(--lumex-info-100) / )',
- 200: 'hsl(var(--lumex-info-200) / )',
- 300: 'hsl(var(--lumex-info-300) / )',
- 400: 'hsl(var(--lumex-info-400) / )',
- 500: 'hsl(var(--lumex-info-500) / )',
- 600: 'hsl(var(--lumex-info-600) / )',
- 700: 'hsl(var(--lumex-info-700) / )',
- 800: 'hsl(var(--lumex-info-800) / )',
- 900: 'hsl(var(--lumex-info-900) / )',
- 950: 'hsl(var(--lumex-info-950) / )',
- DEFAULT: 'hsl(var(--lumex-info) / )',
- foreground: 'hsl(var(--lumex-info-foreground) / )'
- }
- },
- fontSize: {
- tiny: ['var(--lumex-font-size-tiny)', 'var(--lumex-line-height-tiny)'],
- small: ['var(--lumex-font-size-small)', 'var(--lumex-line-height-small)'],
- medium: ['var(--lumex-font-size-medium)', 'var(--lumex-line-height-medium)'],
- large: ['var(--lumex-font-size-large)', 'var(--lumex-line-height-large)']
- },
- lineHeight: {
- tiny: 'var(--lumex-line-height-tiny)',
- small: 'var(--lumex-line-height-small)',
- medium: 'var(--lumex-line-height-medium)',
- large: 'var(--lumex-line-height-large)'
- },
- borderRadius: {
- small: 'var(--lumex-radius-small)',
- medium: 'var(--lumex-radius-medium)',
- large: 'var(--lumex-radius-large)'
- },
- boxShadow: {
- small: 'var(--lumex-box-shadow-small)',
- medium: 'var(--lumex-box-shadow-medium)',
- large: 'var(--lumex-box-shadow-large)'
- },
- opacity: {
- divider: 'var(--lumex-divider-opacity)',
- disabled: 'var(--lumex-disabled-opacity)',
- focus: 'var(--lumex-focus-opacity)',
- hover: 'var(--lumex-hover-opacity)'
- },
- transitionDuration: {
- DEFAULT: DEFAULT_TRANSITION_DURATION
- },
- ...animations
- }
- }
- }
-);
-
-export default lumexui;
\ No newline at end of file
diff --git a/src/LumexUI/Scripts/Plugin/scrollbar-hide.js b/src/LumexUI/Scripts/Plugin/scrollbar-hide.js
deleted file mode 100644
index ab49c021..00000000
--- a/src/LumexUI/Scripts/Plugin/scrollbar-hide.js
+++ /dev/null
@@ -1,22 +0,0 @@
-export default {
- ".scrollbar-hide": {
- /* IE and Edge */
- "-ms-overflow-style": "none",
- /* Firefox */
- "scrollbar-width": "none",
- /* Safari and Chrome */
- "&::-webkit-scrollbar": {
- display: "none",
- },
- },
- ".scrollbar-default": {
- /* IE and Edge */
- "-ms-overflow-style": "auto",
- /* Firefox */
- "scrollbar-width": "auto",
- /* Safari and Chrome */
- "&::-webkit-scrollbar": {
- display: "block",
- },
- },
-};
\ No newline at end of file
diff --git a/src/LumexUI/Scripts/Plugin/transitions.js b/src/LumexUI/Scripts/Plugin/transitions.js
deleted file mode 100644
index 22639223..00000000
--- a/src/LumexUI/Scripts/Plugin/transitions.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import defaultTheme from 'tailwindcss/defaultTheme';
-
-const defaultTransitionFunction = defaultTheme.transitionTimingFunction.DEFAULT;
-
-export const DEFAULT_TRANSITION_DURATION = '250ms';
-
-export default {
- '.transition-colors-shadow': {
- 'transition-property':
- 'color, background-color, border-color, text-decoration-color, fill, stroke, box-shadow',
- 'transition-timing-function': defaultTransitionFunction,
- 'transition-duration': DEFAULT_TRANSITION_DURATION,
- },
- '.transition-colors-opacity': {
- 'transition-property':
- 'color, background-color, border-color, text-decoration-color, fill, stroke, opacity',
- 'transition-timing-function': defaultTransitionFunction,
- 'transition-duration': DEFAULT_TRANSITION_DURATION,
- },
- '.transition-transform-colors': {
- 'transition-property':
- 'transform, color, background, background-color, border-color, text-decoration-color, fill, stroke',
- 'transition-timing-function': defaultTransitionFunction,
- 'transition-duration': DEFAULT_TRANSITION_DURATION,
- },
- '.transition-transform-colors-opacity': {
- 'transition-property':
- 'transform, color, background, background-color, border-color, text-decoration-color, fill, stroke, opacity',
- 'transition-timing-function': defaultTransitionFunction,
- 'transition-duration': DEFAULT_TRANSITION_DURATION,
- },
- '.transition-transform-opacity': {
- 'transition-property': 'transform, opacity',
- 'transition-timing-function': defaultTransitionFunction,
- 'transition-duration': DEFAULT_TRANSITION_DURATION
- }
-};
\ No newline at end of file
diff --git a/src/LumexUI/Styles/Accordion.cs b/src/LumexUI/Styles/Accordion.cs
index ad450f5f..90696a4d 100644
--- a/src/LumexUI/Styles/Accordion.cs
+++ b/src/LumexUI/Styles/Accordion.cs
@@ -51,7 +51,8 @@ internal readonly record struct AccordionItem
.Add( "gap-3" )
.Add( "w-full" )
.Add( "items-center" )
- .Add( "outline-none" )
+ .Add( "outline-hidden" )
+ .Add( "cursor-pointer" )
.ToString();
private readonly static string _startContent = ElementClass.Empty()
diff --git a/src/LumexUI/Styles/Button.cs b/src/LumexUI/Styles/Button.cs
index 38bdb218..a8d7524b 100644
--- a/src/LumexUI/Styles/Button.cs
+++ b/src/LumexUI/Styles/Button.cs
@@ -17,17 +17,16 @@ internal class Button
.Add( "items-center" )
.Add( "justify-center" )
.Add( "min-w-max" )
- .Add( "text-medium" )
.Add( "font-normal" )
.Add( "appearance-none" )
- .Add( "outline-none" )
.Add( "select-none" )
.Add( "whitespace-nowrap" )
.Add( "subpixel-antialiased" )
.Add( "overflow-hidden" )
+ .Add( "cursor-pointer" )
.Add( "active:scale-[0.97]" )
// transition
- .Add( "transition-transform-colors-opacity" )
+ .Add( "transition-colors-transform-opacity" )
.Add( "motion-reduce:transition-none" )
// focus ring
.Add( Utils.FocusVisible )
@@ -45,9 +44,9 @@ internal class Button
private static ElementClass GetSizeStyles( Size size )
{
return ElementClass.Empty()
- .Add( "min-w-16 h-8 px-3 gap-2 text-small rounded-small", when: size is Size.Small )
- .Add( "min-w-20 h-10 px-4 gap-2 text-medium rounded-medium", when: size is Size.Medium )
- .Add( "min-w-24 h-12 px-6 gap-2 text-large rounded-large", when: size is Size.Large );
+ .Add( "min-w-16 h-8 px-3 gap-2 text-tiny rounded-small", when: size is Size.Small )
+ .Add( "min-w-20 h-10 px-4 gap-2 text-small rounded-medium", when: size is Size.Medium )
+ .Add( "min-w-24 h-12 px-6 gap-2 text-medium rounded-large", when: size is Size.Large );
}
private static ElementClass GetRadiusStyles( Radius radius )
diff --git a/src/LumexUI/Styles/Checkbox.cs b/src/LumexUI/Styles/Checkbox.cs
index d426d4a3..d5c0388c 100644
--- a/src/LumexUI/Styles/Checkbox.cs
+++ b/src/LumexUI/Styles/Checkbox.cs
@@ -20,7 +20,7 @@ internal readonly record struct Checkbox
.Add( "inline-flex" )
.Add( "items-center" )
.Add( "justify-start" )
- .Add( "outline-none" )
+ .Add( "outline-hidden" )
.Add( "cursor-pointer" )
.ToString();
@@ -48,7 +48,7 @@ internal readonly record struct Checkbox
.Add( "after:scale-50" )
.Add( "after:opacity-0" )
.Add( "after:origin-center" )
- .Add( "after:transition-transform-opacity" )
+ .Add( "after:transition[transform,opacity]" )
.Add( "after:!duration-200" )
.Add( "group-data-[checked=true]:after:scale-100" )
.Add( "group-data-[checked=true]:after:opacity-100" )
@@ -79,21 +79,21 @@ internal readonly record struct Checkbox
.ToString();
private readonly static string _radiusSmall = ElementClass.Empty()
- .Add( "rounded-[calc(theme(borderRadius.small)*0.5)]" )
- .Add( "before:rounded-[calc(theme(borderRadius.small)*0.5)]" )
- .Add( "after:rounded-[calc(theme(borderRadius.small)*0.5)]" )
+ .Add( "rounded-[calc(var(--radius-small)*0.5)]" )
+ .Add( "before:rounded-[calc(var(--radius-small)*0.5)]" )
+ .Add( "after:rounded-[calc(var(--radius-small)*0.5)]" )
.ToString();
private readonly static string _radiusMedium = ElementClass.Empty()
- .Add( "rounded-[calc(theme(borderRadius.medium)*0.5)]" )
- .Add( "before:rounded-[calc(theme(borderRadius.medium)*0.5)]" )
- .Add( "after:rounded-[calc(theme(borderRadius.medium)*0.5)]" )
+ .Add( "rounded-[calc(var(--radius-medium)*0.5)]" )
+ .Add( "before:rounded-[calc(var(--radius-medium)*0.5)]" )
+ .Add( "after:rounded-[calc(var(--radius-medium)*0.5)]" )
.ToString();
private readonly static string _radiusLarge = ElementClass.Empty()
- .Add( "rounded-[calc(theme(borderRadius.large)*0.5)]" )
- .Add( "before:rounded-[calc(theme(borderRadius.large)*0.5)]" )
- .Add( "after:rounded-[calc(theme(borderRadius.large)*0.5)]" )
+ .Add( "rounded-[calc(var(--radius-large)*0.5)]" )
+ .Add( "before:rounded-[calc(var(--radius-large)*0.5)]" )
+ .Add( "after:rounded-[calc(var(--radius-large)*0.5)]" )
.ToString();
private static ElementClass GetColorStyles( ThemeColor color )
diff --git a/src/LumexUI/Styles/DataGrid.cs b/src/LumexUI/Styles/DataGrid.cs
index e7b0bcc2..b34f9683 100644
--- a/src/LumexUI/Styles/DataGrid.cs
+++ b/src/LumexUI/Styles/DataGrid.cs
@@ -58,7 +58,6 @@ internal class DataGrid
private readonly static string _tr = ElementClass.Empty()
.Add( "group" )
- .Add( "outline-none" )
// focus
.Add( Utils.FocusVisible )
.ToString();
@@ -73,7 +72,6 @@ internal class DataGrid
.Add( "text-tiny" )
.Add( "font-semibold" )
.Add( "whitespace-nowrap" )
- .Add( "outline-none" )
.Add( "first:rounded-s-lg" )
.Add( "last:rounded-e-lg" )
.Add( "hover:text-foreground-400" )
@@ -88,8 +86,6 @@ internal class DataGrid
.Add( "px-3" )
.Add( "align-middle" )
.Add( "text-small" )
- .Add( "outline-none" )
- .Add( "data-[selected=false]:bg-transparent" )
// disabled
.Add( "group-data-[disabled=true]:text-foreground-300" )
.Add( "group-data-[disabled=true]:cursor-not-allowed" )
@@ -110,7 +106,7 @@ internal class DataGrid
.Add( "ms-2" )
.Add( "opacity-0" )
.Add( "-rotate-90" )
- .Add( "transition-[transform,opacity]" )
+ .Add( "transition-transform-opacity" )
.Add( "data-[visible=true]:opacity-100" )
.Add( "group-hover/th:opacity-100" )
.Add( "group-aria-[sort=ascending]/th:rotate-90" )
@@ -267,25 +263,25 @@ private static ElementClass GetColorStyles( ThemeColor color, string slot )
return color switch
{
ThemeColor.Default => ElementClass.Empty()
- .Add( "bg-default-100 data-[selected=true]:text-default-foreground", when: slot is nameof( _td ) ),
+ .Add( "data-[selected=true]:bg-default-100 data-[selected=true]:text-default-foreground", when: slot is nameof( _td ) ),
ThemeColor.Primary => ElementClass.Empty()
- .Add( "bg-primary-100 data-[selected=true]:text-primary-700", when: slot is nameof( _td ) ),
+ .Add( "data-[selected=true]:bg-primary-100 data-[selected=true]:text-primary-700", when: slot is nameof( _td ) ),
ThemeColor.Secondary => ElementClass.Empty()
- .Add( "bg-secondary-100 data-[selected=true]:text-secondary-700", when: slot is nameof( _td ) ),
+ .Add( "data-[selected=true]:bg-secondary-100 data-[selected=true]:text-secondary-700", when: slot is nameof( _td ) ),
ThemeColor.Success => ElementClass.Empty()
- .Add( "bg-success-100 data-[selected=true]:text-success-700", when: slot is nameof( _td ) ),
+ .Add( "data-[selected=true]:bg-success-100 data-[selected=true]:text-success-700", when: slot is nameof( _td ) ),
ThemeColor.Warning => ElementClass.Empty()
- .Add( "bg-warning-100 data-[selected=true]:text-warning-700", when: slot is nameof( _td ) ),
+ .Add( "data-[selected=true]:bg-warning-100 data-[selected=true]:text-warning-700", when: slot is nameof( _td ) ),
ThemeColor.Danger => ElementClass.Empty()
- .Add( "bg-danger-100 data-[selected=true]:text-danger-700", when: slot is nameof( _td ) ),
+ .Add( "data-[selected=true]:bg-danger-100 data-[selected=true]:text-danger-700", when: slot is nameof( _td ) ),
ThemeColor.Info => ElementClass.Empty()
- .Add( "bg-info-100 data-[selected=true]:text-info-700", when: slot is nameof( _td ) ),
+ .Add( "data-[selected=true]:bg-info-100 data-[selected=true]:text-info-700", when: slot is nameof( _td ) ),
_ => ElementClass.Empty()
};
diff --git a/src/LumexUI/Styles/InputField.cs b/src/LumexUI/Styles/InputField.cs
index efd9ea1e..46790b0d 100644
--- a/src/LumexUI/Styles/InputField.cs
+++ b/src/LumexUI/Styles/InputField.cs
@@ -36,7 +36,7 @@ internal static class InputField
.Add( "group-data-[filled-focused=true]:pointer-events-auto" )
// transition
.Add( "will-change-auto" )
- .Add( "transition-[transform,color,left,opacity]" )
+ .Add( "transition-[transform,color,left,opacity,translate,scale]" )
.Add( "motion-reduce:transition-none" )
.ToString();
@@ -51,7 +51,7 @@ internal static class InputField
.Add( "px-3" )
.Add( "gap-3" )
.Add( "w-full" )
- .Add( "shadow-sm" )
+ .Add( "shadow-xs" )
.Add( "cursor-text" )
// transition
.Add( "transition-[background]" )
@@ -70,7 +70,7 @@ internal static class InputField
.Add( "w-full" )
.Add( "font-normal" )
.Add( "bg-transparent" )
- .Add( "focus-visible:outline-none" )
+ .Add( "focus-visible:outline-hidden" )
.Add( "placeholder:text-foreground-500" )
.Add( "autofill:bg-transparent" )
.Add( "data-[has-start-content=true]:ps-1.5" )
@@ -79,7 +79,6 @@ internal static class InputField
private readonly static string _clearButton = ElementClass.Empty()
.Add( "p-0.5" )
- //.Add( "-m-2" )
.Add( "z-10" )
.Add( "absolute" )
.Add( "end-1.5" )
@@ -87,6 +86,7 @@ internal static class InputField
.Add( "hover:!opacity-100" )
.Add( "active:!opacity-focus" )
.Add( "rounded-full" )
+ .Add( "cursor-pointer" )
// transition
.Add( "transition-opacity" )
.Add( "motion-reduce:transition-none" )
@@ -191,8 +191,8 @@ private static ElementClass GetVariantStyles( InputVariant variant, string slot
InputVariant.Flat => ElementClass.Empty()
.Add( ElementClass.Empty()
.Add( "bg-default-100" )
- .Add( "hover:bg-default-200" )
- .Add( "group-data-[focus=true]:bg-default-100" ), when: slot is nameof( _inputWrapper ) ),
+ .Add( "group-data-[focus=true]:bg-default-100" )
+ .Add( "group-data-[focus=false]:hover:bg-default-200" ), when: slot is nameof( _inputWrapper ) ),
// focus ring
// TODO: Seems like we need a JavaScript call similar to React Aria `useFocusVisible` hook
//.Add( Utils.GroupDataFocusVisible ) )
@@ -201,9 +201,9 @@ private static ElementClass GetVariantStyles( InputVariant variant, string slot
.Add( ElementClass.Empty()
.Add( "border-2" )
.Add( "border-default-200" )
- .Add( "hover:border-default-300" )
- .Add( "transition-colors" )
- .Add( "group-data-[focus=true]:border-default-foreground" ), when: slot is nameof( _inputWrapper ) ),
+ .Add( "group-data-[focus=true]:border-default-foreground" )
+ .Add( "group-data-[focus=false]:hover:border-default-300" )
+ .Add( "transition-colors" ), when: slot is nameof( _inputWrapper ) ),
InputVariant.Underlined => ElementClass.Empty()
.Add( ElementClass.Empty()
@@ -237,13 +237,13 @@ private static ElementClass GetVariantInvalidStyles( InputVariant variant, strin
InputVariant.Flat => ElementClass.Empty()
.Add( ElementClass.Empty()
.Add( "!bg-danger-50" )
- .Add( "hover:!bg-danger-100" )
- .Add( "group-data-[focus=true]:!bg-danger-50" ), when: slot is nameof( _inputWrapper ) ),
+ .Add( "hover:bg-danger-100!" )
+ .Add( "group-data-[focus=true]:bg-danger-50!" ), when: slot is nameof( _inputWrapper ) ),
InputVariant.Outlined => ElementClass.Empty()
.Add( ElementClass.Empty()
- .Add( "!border-danger" )
- .Add( "group-data-[focus=true]:!border-danger" ), when: slot is nameof( _inputWrapper ) ),
+ .Add( "border-danger!" )
+ .Add( "group-data-[focus=true]:border-danger!" ), when: slot is nameof( _inputWrapper ) ),
InputVariant.Underlined => ElementClass.Empty()
.Add( "after:!bg-danger", when: slot is nameof( _inputWrapper ) ),
@@ -263,7 +263,7 @@ private static ElementClass GetVariantFlatByColorStyles( ThemeColor color, strin
.Add( ElementClass.Empty()
.Add( "text-primary" )
.Add( "bg-primary-50" )
- .Add( "hover:bg-primary-100" )
+ .Add( "group-data-[focus=false]:hover:bg-primary-100" )
.Add( "placeholder:text-primary" )
.Add( "group-data-[focus=true]:bg-primary-50" ), when: slot is nameof( _inputWrapper ) )
.Add( "placeholder:text-primary", when: slot is nameof( _input ) )
@@ -273,7 +273,7 @@ private static ElementClass GetVariantFlatByColorStyles( ThemeColor color, strin
.Add( ElementClass.Empty()
.Add( "text-secondary" )
.Add( "bg-secondary-50" )
- .Add( "hover:bg-secondary-100" )
+ .Add( "group-data-[focus=false]:hover:bg-secondary-100" )
.Add( "placeholder:text-secondary" )
.Add( "group-data-[focus=true]:bg-secondary-50" ), when: slot is nameof( _inputWrapper ) )
.Add( "placeholder:text-secondary", when: slot is nameof( _input ) )
@@ -284,7 +284,7 @@ private static ElementClass GetVariantFlatByColorStyles( ThemeColor color, strin
.Add( "text-success-600" )
.Add( "dark:text-success" )
.Add( "bg-success-50" )
- .Add( "hover:bg-success-100" )
+ .Add( "group-data-[focus=false]:hover:bg-success-100" )
.Add( "placeholder:text-success-600" )
.Add( "group-data-[focus=true]:bg-success-50" ), when: slot is nameof( _inputWrapper ) )
.Add( "placeholder:text-success-600 dark:placeholder:text-success", when: slot is nameof( _input ) )
@@ -295,7 +295,7 @@ private static ElementClass GetVariantFlatByColorStyles( ThemeColor color, strin
.Add( "text-warning-600" )
.Add( "dark:text-warning" )
.Add( "bg-warning-50" )
- .Add( "hover:bg-warning-100" )
+ .Add( "group-data-[focus=false]:hover:bg-warning-100" )
.Add( "placeholder:text-warning-600" )
.Add( "group-data-[focus=true]:bg-warning-50" ), when: slot is nameof( _inputWrapper ) )
.Add( "placeholder:text-warning-600 dark:placeholder:text-warning", when: slot is nameof( _input ) )
@@ -306,7 +306,7 @@ private static ElementClass GetVariantFlatByColorStyles( ThemeColor color, strin
.Add( "text-danger-600" )
.Add( "dark:text-danger" )
.Add( "bg-danger-50" )
- .Add( "hover:bg-danger-100" )
+ .Add( "group-data-[focus=false]:hover:bg-danger-100" )
.Add( "placeholder:text-danger-600" )
.Add( "group-data-[focus=true]:bg-danger-50" ), when: slot is nameof( _inputWrapper ) )
.Add( "placeholder:text-danger-600 dark:placeholder:text-danger", when: slot is nameof( _input ) )
@@ -316,7 +316,7 @@ private static ElementClass GetVariantFlatByColorStyles( ThemeColor color, strin
.Add( ElementClass.Empty()
.Add( "text-info" )
.Add( "bg-info-50" )
- .Add( "hover:bg-info-100" )
+ .Add( "group-data-[focus=false]:hover:bg-info-100" )
.Add( "placeholder:text-info" )
.Add( "group-data-[focus=true]:bg-info-50" ), when: slot is nameof( _inputWrapper ) )
.Add( "placeholder:text-info", when: slot is nameof( _input ) )
@@ -423,19 +423,19 @@ private static ElementClass GetLabelPlacementInsideBySizeStyles( Size size, stri
.Add( "h-12 py-1.5", when: slot is nameof( _inputWrapper ) )
.Add( ElementClass.Empty()
.Add( "text-small" )
- .Add( "group-data-[filled-focused=true]:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_8px)]" ), when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled-focused=true]:-translate-y-[calc(50%_+_var(--text-tiny)/2_-_8px)]" ), when: slot is nameof( _label ) ),
Size.Medium => ElementClass.Empty()
.Add( "h-14 py-2", when: slot is nameof( _inputWrapper ) )
.Add( ElementClass.Empty()
.Add( "text-small" )
- .Add( "group-data-[filled-focused=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_6px)]" ), when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled-focused=true]:-translate-y-[calc(50%_+_var(--text-small)/2_-_6px)]" ), when: slot is nameof( _label ) ),
Size.Large => ElementClass.Empty()
.Add( "h-16 py-2.5", when: slot is nameof( _inputWrapper ) )
.Add( ElementClass.Empty()
.Add( "text-medium" )
- .Add( "group-data-[filled-focused=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_8px)]" ), when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled-focused=true]:-translate-y-[calc(50%_+_var(--text-small)/2_-_8px)]" ), when: slot is nameof( _label ) ),
_ => ElementClass.Empty()
};
@@ -446,25 +446,25 @@ private static ElementClass GetLabelPlacementOutsideBySizeStyles( Size size, str
return size switch
{
Size.Small => ElementClass.Empty()
- .Add( "has-[label]:mt-[calc(theme(fontSize.small)_+_8px)]", when: slot is nameof( _base ) )
+ .Add( "has-[label]:mt-[calc(var(--text-small))_+_8px)]", when: slot is nameof( _base ) )
.Add( ElementClass.Empty()
.Add( "text-tiny" )
.Add( "left-2" )
- .Add( "group-data-[filled-focused=true]:-translate-y-[calc(100%_+_theme(fontSize.tiny)/2_+_16px)]" ), when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled-focused=true]:-translate-y-[calc(100%_+_var(--text-tiny)/2_+_16px)]" ), when: slot is nameof( _label ) ),
Size.Medium => ElementClass.Empty()
- .Add( "has-[label]:mt-[calc(theme(fontSize.small)_+_10px)]", when: slot is nameof( _base ) )
+ .Add( "has-[label]:mt-[calc(var(--text-small)_+_10px)]", when: slot is nameof( _base ) )
.Add( ElementClass.Empty()
.Add( "text-small" )
.Add( "left-3" )
- .Add( "group-data-[filled-focused=true]:-translate-y-[calc(100%_+_theme(fontSize.small)/2_+_20px)]" ), when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled-focused=true]:-translate-y-[calc(100%_+_var(--text-small)/2_+_20px)]" ), when: slot is nameof( _label ) ),
Size.Large => ElementClass.Empty()
- .Add( "has-[label]:mt-[calc(theme(fontSize.small)_+_12px)]", when: slot is nameof( _base ) )
+ .Add( "has-[label]:mt-[calc(var(--text-small)_+_12px)]", when: slot is nameof( _base ) )
.Add( ElementClass.Empty()
.Add( "text-medium" )
.Add( "left-3" )
- .Add( "group-data-[filled-focused=true]:-translate-y-[calc(100%_+_theme(fontSize.small)/2_+_24px)]" ), when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled-focused=true]:-translate-y-[calc(100%_+_var(--text-small)/2_+_24px)]" ), when: slot is nameof( _label ) ),
_ => ElementClass.Empty()
};
diff --git a/src/LumexUI/Styles/Menu.cs b/src/LumexUI/Styles/Menu.cs
index d0e98744..151f14b3 100644
--- a/src/LumexUI/Styles/Menu.cs
+++ b/src/LumexUI/Styles/Menu.cs
@@ -41,7 +41,7 @@ public static ComponentVariant Style( TwMerge twMerge )
.Add( "flex" )
.Add( "flex-col" )
.Add( "gap-0.5" )
- .Add( "outline-none" )
+ .Add( "outline-hidden" )
.ToString(),
[nameof( MenuSlots.EmptyContent )] = new ElementClass()
@@ -82,7 +82,6 @@ public static ComponentVariant Style( TwMerge twMerge )
.Add( "items-center" )
.Add( "justify-between" )
.Add( "rounded-small" )
- .Add( "outline-none" )
.Add( "cursor-pointer" )
// transition
.Add( "hover:transition-colors-shadow" )
diff --git a/src/LumexUI/Styles/Navbar.cs b/src/LumexUI/Styles/Navbar.cs
index bda0b79e..55aedd47 100644
--- a/src/LumexUI/Styles/Navbar.cs
+++ b/src/LumexUI/Styles/Navbar.cs
@@ -35,10 +35,10 @@ internal readonly record struct Navbar
.Add( "group" )
.Add( "w-6" )
.Add( "h-full" )
- .Add( "outline-none" )
.Add( "rounded-small" )
- // focus
- .Add( Utils.FocusVisible )
+ .Add( "cursor-pointer" )
+ // focus
+ .Add( Utils.FocusVisible )
.ToString();
private readonly static string _toggleIcon = ElementClass.Empty()
diff --git a/src/LumexUI/Styles/Popover.cs b/src/LumexUI/Styles/Popover.cs
index 464b016a..aab799c1 100644
--- a/src/LumexUI/Styles/Popover.cs
+++ b/src/LumexUI/Styles/Popover.cs
@@ -31,7 +31,7 @@ public static ComponentVariant Style( TwMerge twMerge )
.ToString(),
["Wrapper"] = new ElementClass()
- .Add( "animate-appearance-in" )
+ .Add( "animate-enter" )
.ToString(),
[nameof( PopoverSlots.Content )] = new ElementClass()
@@ -55,7 +55,7 @@ public static ComponentVariant Style( TwMerge twMerge )
.Add( "h-2.5" )
.Add( "absolute" )
.Add( "rotate-45" )
- .Add( "rounded-sm" )
+ .Add( "rounded-xs" )
.ToString(),
},
diff --git a/src/LumexUI/Styles/Radio.cs b/src/LumexUI/Styles/Radio.cs
index 241819ec..4b4580b5 100644
--- a/src/LumexUI/Styles/Radio.cs
+++ b/src/LumexUI/Styles/Radio.cs
@@ -53,7 +53,7 @@ internal static class Radio
.Add( "group-hover:bg-default-100" )
.Add( "group-active:scale-95" )
// transition
- .Add( "transition-transform-colors" )
+ .Add( "transition-colors-transform" )
.Add( Utils.ReduceMotion )
// focus ring
.Add( Utils.GroupFocusVisible )
diff --git a/src/LumexUI/Styles/Select.cs b/src/LumexUI/Styles/Select.cs
index 458608e0..0784f2b6 100644
--- a/src/LumexUI/Styles/Select.cs
+++ b/src/LumexUI/Styles/Select.cs
@@ -28,7 +28,7 @@ internal class Select
// transition
.Add( "will-change-auto" )
.Add( "origin-top-left" )
- .Add( "transition-[transform,color,left,opacity]" )
+ .Add( "transition-[transform,color,left,opacity,translate,scale]" )
.Add( "motion-reduce:transition-none" )
.ToString();
@@ -45,8 +45,9 @@ internal class Select
.Add( "items-center" )
.Add( "gap-3" )
.Add( "px-3" )
- .Add( "shadow-sm" )
- .Add( "outline-none" )
+ .Add( "shadow-xs" )
+ .Add( "outline-hidden" )
+ .Add( "cursor-pointer" )
// transition
.Add( "transition-[background]" )
.Add( "motion-reduce:transition-none" )
@@ -55,7 +56,7 @@ internal class Select
private readonly static string _innerWrapper = ElementClass.Empty()
.Add( "h-full" )
.Add( "min-h-4" )
- .Add( "w-[calc(100%_-_theme(spacing.6))]" )
+ .Add( "w-[calc(100%_-_--spacing(6))]" )
.Add( "gap-1.5" )
.Add( "inline-flex" )
.Add( "items-center" )
@@ -63,14 +64,14 @@ internal class Select
private readonly static string _selectorIcon = ElementClass.Empty()
.Add( "absolute" )
- .Add( "w-4" )
- .Add( "h-4" )
+ .Add( "w-5" )
+ .Add( "h-5" )
.Add( "end-3" )
.Add( "data-[open=true]:rotate-180" )
// transition
- .Add( "transition-[transform,color]" )
- .Add( "duration-150" )
- .Add( "ease" )
+ .Add( "duration-200" )
+ .Add( "ease-out" )
+ .Add( "transition-colors-transform-opacity" )
.Add( "motion-reduce:transition-none" )
.ToString();
@@ -229,8 +230,8 @@ private static ElementClass GetVariantStyles( InputVariant variant, string slot
InputVariant.Flat => ElementClass.Empty()
.Add( ElementClass.Empty()
.Add( "bg-default-100" )
- .Add( "hover:bg-default-50" )
.Add( "group-data-[focus=true]:bg-default-100" )
+ .Add( "group-data-[focus=false]:hover:bg-default-50" )
// focus ring
.Add( Utils.FocusVisible ), when: slot is nameof( _trigger ) ),
@@ -238,9 +239,9 @@ private static ElementClass GetVariantStyles( InputVariant variant, string slot
.Add( ElementClass.Empty()
.Add( "border-2" )
.Add( "border-default-200" )
- .Add( "hover:border-default-300" )
.Add( "data-[open=true]:border-default-foreground" )
.Add( "group-data-[focus=true]:border-default-foreground" )
+ .Add( "group-data-[focus=false]:hover:border-default-300" )
.Add( "transition-colors" )
.Add( "motion-reduce:transition-none" ), when: slot is nameof( _trigger ) )
.Add( "group-data-[has-value=true]:text-default-foreground", when: slot is nameof( _value ) ),
@@ -360,14 +361,14 @@ private static ElementClass GetCompoundStyles( InputVariant variant, ThemeColor
(InputVariant.Flat, ThemeColor.Default ) => ElementClass.Empty()
.Add( ElementClass.Empty()
.Add( "bg-default-100" )
- .Add( "hover:bg-default-50" ), when: slot is nameof( _trigger ) )
+ .Add( "group-data-[focus=false]:hover:bg-default-50" ), when: slot is nameof( _trigger ) )
.Add( "group-data-[has-value=true]:text-default-foreground", when: slot is nameof( _value ) ),
(InputVariant.Flat, ThemeColor.Primary ) => ElementClass.Empty()
.Add( ElementClass.Empty()
.Add( "bg-primary-50" )
.Add( "text-primary" )
- .Add( "hover:bg-primary-100" )
+ .Add( "group-data-[focus=false]:hover:bg-primary-100" )
.Add( "group-data-[focus=true]:bg-primary-50" ), when: slot is nameof( _trigger ) )
.Add( "text-primary", when: slot is nameof( _value ) )
.Add( "text-primary", when: slot is nameof( _label ) ),
@@ -376,7 +377,7 @@ private static ElementClass GetCompoundStyles( InputVariant variant, ThemeColor
.Add( ElementClass.Empty()
.Add( "bg-secondary-50" )
.Add( "text-secondary" )
- .Add( "hover:bg-secondary-100" )
+ .Add( "group-data-[focus=false]:hover:bg-secondary-100" )
.Add( "group-data-[focus=true]:bg-secondary-50" ), when: slot is nameof( _trigger ) )
.Add( "text-secondary", when: slot is nameof( _value ) )
.Add( "text-secondary", when: slot is nameof( _label ) ),
@@ -385,7 +386,7 @@ private static ElementClass GetCompoundStyles( InputVariant variant, ThemeColor
.Add( ElementClass.Empty()
.Add( "bg-success-50" )
.Add( "text-success-600" )
- .Add( "hover:bg-success-100" )
+ .Add( "group-data-[focus=false]:hover:bg-success-100" )
.Add( "group-data-[focus=true]:bg-success-50" ), when: slot is nameof( _trigger ) )
.Add( "text-success-600", when: slot is nameof( _value ) )
.Add( "text-success-600", when: slot is nameof( _label ) ),
@@ -394,7 +395,7 @@ private static ElementClass GetCompoundStyles( InputVariant variant, ThemeColor
.Add( ElementClass.Empty()
.Add( "bg-warning-50" )
.Add( "text-warning-600" )
- .Add( "hover:bg-warning-100" )
+ .Add( "group-data-[focus=false]:hover:bg-warning-100" )
.Add( "group-data-[focus=true]:bg-warning-50" ), when: slot is nameof( _trigger ) )
.Add( "text-warning", when: slot is nameof( _value ) )
.Add( "text-warning", when: slot is nameof( _label ) ),
@@ -403,7 +404,7 @@ private static ElementClass GetCompoundStyles( InputVariant variant, ThemeColor
.Add( ElementClass.Empty()
.Add( "bg-danger-50" )
.Add( "text-danger-600" )
- .Add( "hover:bg-danger-100" )
+ .Add( "group-data-[focus=false]:hover:bg-danger-100" )
.Add( "group-data-[focus=true]:bg-danger-50" ), when: slot is nameof( _trigger ) )
.Add( "text-danger", when: slot is nameof( _value ) )
.Add( "text-danger", when: slot is nameof( _label ) ),
@@ -412,7 +413,7 @@ private static ElementClass GetCompoundStyles( InputVariant variant, ThemeColor
.Add( ElementClass.Empty()
.Add( "bg-info-50" )
.Add( "text-info-600" )
- .Add( "hover:bg-info-100" )
+ .Add( "group-data-[focus=false]:hover:bg-info-100" )
.Add( "group-data-[focus=true]:bg-info-50" ), when: slot is nameof( _trigger ) )
.Add( "text-info", when: slot is nameof( _value ) )
.Add( "text-info", when: slot is nameof( _label ) ),
@@ -515,7 +516,7 @@ private static ElementClass GetCompoundStyles( LabelPlacement labelPLacement, Si
// outside / size
(LabelPlacement.Outside, Size.Small ) => ElementClass.Empty()
- .Add( "justify-end has-[label]:mt-[calc(theme(fontSize.small)_+_8px)]", when: slot is nameof( _base ) )
+ .Add( "justify-end has-[label]:mt-[calc(var(--text-small)_+_8px)]", when: slot is nameof( _base ) )
.Add( ElementClass.Empty()
.Add( "text-tiny" )
.Add( "z-20" )
@@ -523,10 +524,10 @@ private static ElementClass GetCompoundStyles( LabelPlacement labelPLacement, Si
.Add( "start-2" )
.Add( "-translate-y-1/2" )
.Add( "group-data-[filled=true]:start-0" )
- .Add( "group-data-[filled=true]:-translate-y-[calc(100%_+_theme(fontSize.tiny)/2_+_16px)]" ), when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled=true]:-translate-y-[calc(100%_+_var(--text-tiny)/2_+_16px)]" ), when: slot is nameof( _label ) ),
(LabelPlacement.Outside, Size.Medium ) => ElementClass.Empty()
- .Add( "justify-end has-[label]:mt-[calc(theme(fontSize.small)_+_10px)]", when: slot is nameof( _base ) )
+ .Add( "justify-end has-[label]:mt-[calc(var(--text-small)_+_10px)]", when: slot is nameof( _base ) )
.Add( ElementClass.Empty()
.Add( "text-small" )
.Add( "z-20" )
@@ -534,10 +535,10 @@ private static ElementClass GetCompoundStyles( LabelPlacement labelPLacement, Si
.Add( "start-3" )
.Add( "-translate-y-1/2" )
.Add( "group-data-[filled=true]:start-0" )
- .Add( "group-data-[filled=true]:-translate-y-[calc(100%_+_theme(fontSize.small)/2_+_20px)]" ), when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled=true]:-translate-y-[calc(100%_+_var(--text-small)/2_+_20px)]" ), when: slot is nameof( _label ) ),
(LabelPlacement.Outside, Size.Large ) => ElementClass.Empty()
- .Add( "justify-end has-[label]:mt-[calc(theme(fontSize.small)_+_12px)]", when: slot is nameof( _base ) )
+ .Add( "justify-end has-[label]:mt-[calc(var(--text-small)_+_12px)]", when: slot is nameof( _base ) )
.Add( ElementClass.Empty()
.Add( "text-medium" )
.Add( "z-20" )
@@ -545,7 +546,7 @@ private static ElementClass GetCompoundStyles( LabelPlacement labelPLacement, Si
.Add( "start-3" )
.Add( "-translate-y-1/2" )
.Add( "group-data-[filled=true]:start-0" )
- .Add( "group-data-[filled=true]:-translate-y-[calc(100%_+_theme(fontSize.small)/2_+_24px)]" ), when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled=true]:-translate-y-[calc(100%_+_var(--text-small)/2_+_24px)]" ), when: slot is nameof( _label ) ),
_ => ElementClass.Empty()
};
@@ -559,35 +560,35 @@ private static ElementClass GetCompoundStyles( Size size, InputVariant variant,
// size / flat
(Size.Small, InputVariant.Flat ) => ElementClass.Empty()
- .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_8px)]", when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_var(--text-tiny)/2_-_8px)]", when: slot is nameof( _label ) ),
(Size.Medium, InputVariant.Flat ) => ElementClass.Empty()
- .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_6px)]", when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_var(--text-small)/2_-_6px)]", when: slot is nameof( _label ) ),
(Size.Large, InputVariant.Flat ) => ElementClass.Empty()
- .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_8px)]", when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_var(--text-small)/2_-_8px)]", when: slot is nameof( _label ) ),
// size / outlined
(Size.Small, InputVariant.Outlined ) => ElementClass.Empty()
- .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_8px_-_theme(borderWidth.2))]", when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_var(--text-tiny)/2_-_8px_-_--spacing(0.5))]", when: slot is nameof( _label ) ),
(Size.Medium, InputVariant.Outlined ) => ElementClass.Empty()
- .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_6px_-_theme(borderWidth.2))]", when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_var(--text-small)/2_-_6px_-_--spacing(0.5))]", when: slot is nameof( _label ) ),
(Size.Large, InputVariant.Outlined ) => ElementClass.Empty()
- .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_8px_-_theme(borderWidth.2))]", when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_var(--text-small)/2_-_8px_-_--spacing(0.5))]", when: slot is nameof( _label ) ),
// size / underlined
(Size.Small, InputVariant.Underlined ) => ElementClass.Empty()
- .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.tiny)/2_-_5px)]", when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_var(--text-tiny)/2_-_5px)]", when: slot is nameof( _label ) ),
(Size.Medium, InputVariant.Underlined ) => ElementClass.Empty()
- .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_3.5px)]", when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_var(--text-small)/2_-_3.5px)]", when: slot is nameof( _label ) ),
(Size.Large, InputVariant.Underlined ) => ElementClass.Empty()
- .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_theme(fontSize.small)/2_-_4px)]", when: slot is nameof( _label ) ),
+ .Add( "group-data-[filled=true]:-translate-y-[calc(50%_+_var(--text-small)/2_-_4px)]", when: slot is nameof( _label ) ),
_ => ElementClass.Empty()
};
@@ -602,7 +603,7 @@ private static ElementClass GetCompoundStyles( InputVariant variant, string slot
.Add( "bg-danger-50 hover:bg-danger-100 group-data-[focus=true]:bg-danger-50", when: slot is nameof( _trigger ) ),
InputVariant.Outlined => ElementClass.Empty()
- .Add( "!border-danger group-data-[focus=true]:border-danger", when: slot is nameof( _trigger ) ),
+ .Add( "border-danger! group-data-[focus=true]:border-danger", when: slot is nameof( _trigger ) ),
InputVariant.Underlined => ElementClass.Empty()
.Add( "after:bg-danger", when: slot is nameof( _trigger ) ),
diff --git a/src/LumexUI/Styles/Switch.cs b/src/LumexUI/Styles/Switch.cs
index 5d970115..be51ecd3 100644
--- a/src/LumexUI/Styles/Switch.cs
+++ b/src/LumexUI/Styles/Switch.cs
@@ -19,7 +19,7 @@ internal readonly record struct Switch
.Add( "inline-flex" )
.Add( "items-center" )
.Add( "justify-start" )
- .Add( "outline-none" )
+ .Add( "outline-hidden" )
.Add( "cursor-pointer" )
.Add( "touch-none" )
.ToString();
@@ -67,7 +67,7 @@ internal readonly record struct Switch
// transition
.Add( "opacity-0" )
.Add( "scale-50" )
- .Add( "transition-[transform,opacity]" )
+ .Add( "transition-transform-opacity" )
.Add( "group-data-[checked=true]:scale-100" )
.Add( "group-data-[checked=true]:opacity-100" )
.ToString();
@@ -79,7 +79,7 @@ internal readonly record struct Switch
.Add( "text-default-600" )
// transition
.Add( "opacity-100" )
- .Add( "transition-[transform,opacity]" )
+ .Add( "transition-transform-opacity" )
.Add( "group-data-[checked=true]:translate-x-3" )
.Add( "group-data-[checked=true]:opacity-0" )
.ToString();
diff --git a/src/LumexUI/Styles/Tabs.cs b/src/LumexUI/Styles/Tabs.cs
index ac082e3b..d8261548 100644
--- a/src/LumexUI/Styles/Tabs.cs
+++ b/src/LumexUI/Styles/Tabs.cs
@@ -40,7 +40,6 @@ internal class Tabs
.Add( "py-1" )
.Add( "justify-center" )
.Add( "items-center" )
- .Add( "outline-none" )
.Add( "cursor-pointer" )
.Add( "data-[disabled=true]:!opacity-disabled" )
.Add( "data-[disabled=true]:cursor-not-allowed" )
@@ -65,7 +64,6 @@ internal class Tabs
private static readonly string _tabPanel = ElementClass.Empty()
.Add( "px-1" )
.Add( "py-3" )
- .Add( "outline-none" )
// focus ring
.Add( Utils.FocusVisible )
.ToString();
@@ -140,7 +138,7 @@ private static ElementClass GetVariantStyles( TabVariant variant, string slot )
.Add( "inset-0", when: slot is nameof( _cursor ) ),
TabVariant.Outlined => ElementClass.Empty()
- .Add( "bg-transparent border-2 border-default-200 shadow-sm", when: slot is nameof( _tabList ) )
+ .Add( "bg-transparent border-2 border-default-200 shadow-xs", when: slot is nameof( _tabList ) )
.Add( "inset-0", when: slot is nameof( _cursor ) ),
TabVariant.Underlined => ElementClass.Empty()
diff --git a/src/LumexUI/Styles/Utils.cs b/src/LumexUI/Styles/Utils.cs
index dad84ef5..e8d91362 100644
--- a/src/LumexUI/Styles/Utils.cs
+++ b/src/LumexUI/Styles/Utils.cs
@@ -9,7 +9,7 @@ internal class Utils
.ToString();
public readonly static string FocusVisible = ElementClass.Empty()
- .Add( "outline-none" )
+ .Add( "outline-hidden" )
.Add( "focus-visible:z-10" )
.Add( "focus-visible:outline-2" )
.Add( "focus-visible:outline-focus" )
@@ -17,7 +17,7 @@ internal class Utils
.ToString();
public readonly static string GroupFocusVisible = ElementClass.Empty()
- .Add( "outline-none" )
+ .Add( "outline-hidden" )
.Add( "group-focus-visible:z-10" )
.Add( "group-focus-visible:ring-2" )
.Add( "group-focus-visible:ring-focus" )
@@ -30,7 +30,7 @@ internal class Utils
.ToString();
//public readonly static string GroupDataFocusVisible = ElementClass.Empty()
- // .Add( "outline-none" )
+ // .Add( "outline-hidden" )
// .Add( "group-data-[focus-visible=true]:z-10" )
// .Add( "group-data-[focus-visible=true]:ring-2" )
// .Add( "group-data-[focus-visible=true]:ring-focus" )
diff --git a/src/LumexUI/Styles/_theme.css b/src/LumexUI/Styles/_theme.css
new file mode 100644
index 00000000..7b4d5121
--- /dev/null
+++ b/src/LumexUI/Styles/_theme.css
@@ -0,0 +1,212 @@
+/* https://tailwindcss.com/docs/theme#theme-variable-namespaces */
+@theme static inline {
+ /* Colors */
+ --color-background: var(--lumex-background);
+
+ --color-foreground-50: var(--lumex-foreground-50);
+ --color-foreground-100: var(--lumex-foreground-100);
+ --color-foreground-200: var(--lumex-foreground-200);
+ --color-foreground-300: var(--lumex-foreground-300);
+ --color-foreground-400: var(--lumex-foreground-400);
+ --color-foreground-500: var(--lumex-foreground-500);
+ --color-foreground-600: var(--lumex-foreground-600);
+ --color-foreground-700: var(--lumex-foreground-700);
+ --color-foreground-800: var(--lumex-foreground-800);
+ --color-foreground-900: var(--lumex-foreground-900);
+ --color-foreground-950: var(--lumex-foreground-950);
+ --color-foreground: var(--lumex-foreground);
+
+ --color-focus: var(--lumex-focus);
+ --color-overlay: var(--lumex-overlay);
+ --color-divider: --alpha(var(--lumex-divider) / var(--lumex-opacity-divider));
+ --color-surface1: var(--lumex-surface1);
+ --color-surface1-foreground: var(--lumex-surface1-foreground);
+ --color-surface2: var(--lumex-surface2);
+ --color-surface2-foreground: var(--lumex-surface2-foreground);
+ --color-surface3: var(--lumex-surface3);
+ --color-surface3-foreground: var(--lumex-surface3-foreground);
+
+ --color-default-50: var(--lumex-default-50);
+ --color-default-100: var(--lumex-default-100);
+ --color-default-200: var(--lumex-default-200);
+ --color-default-300: var(--lumex-default-300);
+ --color-default-400: var(--lumex-default-400);
+ --color-default-500: var(--lumex-default-500);
+ --color-default-600: var(--lumex-default-600);
+ --color-default-700: var(--lumex-default-700);
+ --color-default-800: var(--lumex-default-800);
+ --color-default-900: var(--lumex-default-900);
+ --color-default-950: var(--lumex-default-950);
+ --color-default: var(--lumex-default);
+ --color-default-foreground: var(--lumex-default-foreground);
+
+ --color-primary-50: var(--lumex-primary-50);
+ --color-primary-100: var(--lumex-primary-100);
+ --color-primary-200: var(--lumex-primary-200);
+ --color-primary-300: var(--lumex-primary-300);
+ --color-primary-400: var(--lumex-primary-400);
+ --color-primary-500: var(--lumex-primary-500);
+ --color-primary-600: var(--lumex-primary-600);
+ --color-primary-700: var(--lumex-primary-700);
+ --color-primary-800: var(--lumex-primary-800);
+ --color-primary-900: var(--lumex-primary-900);
+ --color-primary-950: var(--lumex-primary-950);
+ --color-primary: var(--lumex-primary);
+ --color-primary-foreground: var(--lumex-primary-foreground);
+
+ --color-secondary-50: var(--lumex-secondary-50);
+ --color-secondary-100: var(--lumex-secondary-100);
+ --color-secondary-200: var(--lumex-secondary-200);
+ --color-secondary-300: var(--lumex-secondary-300);
+ --color-secondary-400: var(--lumex-secondary-400);
+ --color-secondary-500: var(--lumex-secondary-500);
+ --color-secondary-600: var(--lumex-secondary-600);
+ --color-secondary-700: var(--lumex-secondary-700);
+ --color-secondary-800: var(--lumex-secondary-800);
+ --color-secondary-900: var(--lumex-secondary-900);
+ --color-secondary-950: var(--lumex-secondary-950);
+ --color-secondary: var(--lumex-secondary);
+ --color-secondary-foreground: var(--lumex-secondary-foreground);
+
+ --color-success-50: var(--lumex-success-50);
+ --color-success-100: var(--lumex-success-100);
+ --color-success-200: var(--lumex-success-200);
+ --color-success-300: var(--lumex-success-300);
+ --color-success-400: var(--lumex-success-400);
+ --color-success-500: var(--lumex-success-500);
+ --color-success-600: var(--lumex-success-600);
+ --color-success-700: var(--lumex-success-700);
+ --color-success-800: var(--lumex-success-800);
+ --color-success-900: var(--lumex-success-900);
+ --color-success-950: var(--lumex-success-950);
+ --color-success: var(--lumex-success);
+ --color-success-foreground: var(--lumex-success-foreground);
+
+ --color-warning-50: var(--lumex-warning-50);
+ --color-warning-100: var(--lumex-warning-100);
+ --color-warning-200: var(--lumex-warning-200);
+ --color-warning-300: var(--lumex-warning-300);
+ --color-warning-400: var(--lumex-warning-400);
+ --color-warning-500: var(--lumex-warning-500);
+ --color-warning-600: var(--lumex-warning-600);
+ --color-warning-700: var(--lumex-warning-700);
+ --color-warning-800: var(--lumex-warning-800);
+ --color-warning-900: var(--lumex-warning-900);
+ --color-warning-950: var(--lumex-warning-950);
+ --color-warning: var(--lumex-warning);
+ --color-warning-foreground: var(--lumex-warning-foreground);
+
+ --color-danger-50: var(--lumex-danger-50);
+ --color-danger-100: var(--lumex-danger-100);
+ --color-danger-200: var(--lumex-danger-200);
+ --color-danger-300: var(--lumex-danger-300);
+ --color-danger-400: var(--lumex-danger-400);
+ --color-danger-500: var(--lumex-danger-500);
+ --color-danger-600: var(--lumex-danger-600);
+ --color-danger-700: var(--lumex-danger-700);
+ --color-danger-800: var(--lumex-danger-800);
+ --color-danger-900: var(--lumex-danger-900);
+ --color-danger-950: var(--lumex-danger-950);
+ --color-danger: var(--lumex-danger);
+ --color-danger-foreground: var(--lumex-danger-foreground);
+
+ --color-info-50: var(--lumex-info-50);
+ --color-info-100: var(--lumex-info-100);
+ --color-info-200: var(--lumex-info-200);
+ --color-info-300: var(--lumex-info-300);
+ --color-info-400: var(--lumex-info-400);
+ --color-info-500: var(--lumex-info-500);
+ --color-info-600: var(--lumex-info-600);
+ --color-info-700: var(--lumex-info-700);
+ --color-info-800: var(--lumex-info-800);
+ --color-info-900: var(--lumex-info-900);
+ --color-info-950: var(--lumex-info-950);
+ --color-info: var(--lumex-info);
+ --color-info-foreground: var(--lumex-info-foreground);
+
+ /* Typography */
+ --text-tiny: var(--lumex-font-size-tiny);
+ --text-small: var(--lumex-font-size-small);
+ --text-medium: var(--lumex-font-size-medium);
+ --text-large: var(--lumex-font-size-large);
+
+ --text-tiny--line-height: var(--lumex-line-height-tiny);
+ --text-small--line-height: var(--lumex-line-height-small);
+ --text-medium--line-height: var(--lumex-line-height-medium);
+ --text-large--line-height: var(--lumex-line-height-large);
+
+ --leading-tiny: var(--lumex-line-height-tiny);
+ --leading-small: var(--lumex-line-height-small);
+ --leading-medium: var(--lumex-line-height-medium);
+ --leading-large: var(--lumex-line-height-large);
+
+ /* Border Radii */
+ --radius-small: var(--lumex-radius-small);
+ --radius-medium: var(--lumex-radius-medium);
+ --radius-large: var(--lumex-radius-large);
+
+ /* Box Shadows */
+ --shadow-small: var(--lumex-shadow-small);
+ --shadow-medium: var(--lumex-shadow-medium);
+ --shadow-large: var(--lumex-shadow-large);
+
+ /* Opacities */
+ --opacity-divider: var(--lumex-opacity-divider);
+ --opacity-disabled: var(--lumex-opacity-disabled);
+ --opacity-focus: var(--lumex-opacity-focus);
+ --opacity-hover: var(--lumex-opacity-hover);
+
+ /*
+ Transitions
+ See https://github.com/tailwindlabs/tailwindcss/issues/16639#issuecomment-2668151481
+ */
+ /*
+ `--transition-colors` and `transition-transform` are reusable variables.
+ They not defined as `--transition-property-colors` and `--transition-property-transform` due to a bug in the Tailwind compiler.
+ See https://github.com/tailwindlabs/tailwindcss/issues/16639#issuecomment-2668844455
+ */
+ --transition-colors: color, background-color, border-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
+ --transition-transforms: transform, translate, scale, rotate;
+ --transition-property-colors-shadow: var(--transition-colors), box-shadow;
+ --transition-property-colors-opacity: var(--transition-colors), opacity;
+ --transition-property-colors-transform: var(--transition-colors), var(--transition-transforms);
+ --transition-property-colors-transform-opacity: var(--transition-property-colors-transform), opacity;
+ --transition-property-transform-opacity: var(--transition-transforms), opacity;
+
+ /* Animations */
+ --animate-enter: enter 200ms ease-out normal both;
+
+ @keyframes enter {
+ 0% {
+ opacity: 0;
+ transform: translateZ(0) scale(0.85);
+ }
+
+ 100% {
+ opacity: 1;
+ transform: translateZ(0) scale(1);
+ }
+ }
+
+ /* Override Defaults */
+ --default-transition-duration: 250ms;
+}
+
+/*
+ The `opacity-*` utilities are generated from the `--opacity-*` theme values.
+ See https://tailwindcss.com/docs/adding-custom-styles#matching-theme-values
+*/
+@utility opacity-* {
+ opacity: --value(--opacity-*);
+}
+
+@utility scrollbar-hide {
+ /* Hide scrollbar for IE, Edge and Firefox */
+ scrollbar-width: none;
+ -ms-overflow-style: none;
+
+ /* Hide scrollbar for Chrome, Safari and Opera */
+ &::-webkit-scrollbar {
+ display: none;
+ }
+}
diff --git a/src/LumexUI/Theme/Colors/Colors.cs b/src/LumexUI/Theme/Colors/Colors.cs
index 6440f447..2bdaf9fa 100644
--- a/src/LumexUI/Theme/Colors/Colors.cs
+++ b/src/LumexUI/Theme/Colors/Colors.cs
@@ -5,494 +5,494 @@
namespace LumexUI.Theme;
///
-/// Provides predefined colors and color scales for themes.
-///
-/// See
-///
+/// Provides a set of predefined color scales.
///
+///
+/// See
+///
public static class Colors
{
- ///
- /// The white color.
- ///
- public const string White = "#FFFFFF";
+ ///
+ /// The black color.
+ ///
+ public const string Black = "#000";
- ///
- /// The black color.
- ///
- public const string Black = "#000000";
+ ///
+ /// The white color.
+ ///
+ public const string White = "#fff";
- ///
- /// The scale of slate colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Slate = new Dictionary()
- {
- ["50"] = "#f8fafc",
- ["100"] = "#f1f5f9",
- ["200"] = "#e2e8f0",
- ["300"] = "#cbd5e1",
- ["400"] = "#94a3b8",
- ["500"] = "#64748b",
- ["600"] = "#475569",
- ["700"] = "#334155",
- ["800"] = "#1e293b",
- ["900"] = "#0f172a",
- ["950"] = "#020617"
- }.AsReadOnly();
+ ///
+ /// The scale of slate colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Slate = new Dictionary()
+ {
+ ["50"] = "oklch(0.984 0.003 247.858)",
+ ["100"] = "oklch(0.968 0.007 247.896)",
+ ["200"] = "oklch(0.929 0.013 255.508)",
+ ["300"] = "oklch(0.869 0.022 252.894)",
+ ["400"] = "oklch(0.704 0.04 256.788)",
+ ["500"] = "oklch(0.554 0.046 257.417)",
+ ["600"] = "oklch(0.446 0.043 257.281)",
+ ["700"] = "oklch(0.372 0.044 257.287)",
+ ["800"] = "oklch(0.279 0.041 260.031)",
+ ["900"] = "oklch(0.208 0.042 265.755)",
+ ["950"] = "oklch(0.129 0.042 264.695)"
+ }.AsReadOnly();
- ///
- /// The scale of gray colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Gray = new Dictionary()
- {
- ["50"] = "#f9fafb",
- ["100"] = "#f3f4f6",
- ["200"] = "#e5e7eb",
- ["300"] = "#d1d5db",
- ["400"] = "#9ca3af",
- ["500"] = "#6b7280",
- ["600"] = "#4b5563",
- ["700"] = "#374151",
- ["800"] = "#1f2937",
- ["900"] = "#111827",
- ["950"] = "#030712"
- }.AsReadOnly();
+ ///
+ /// The scale of gray colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Gray = new Dictionary()
+ {
+ ["50"] = "oklch(0.985 0.002 247.839)",
+ ["100"] = "oklch(0.967 0.003 264.542)",
+ ["200"] = "oklch(0.928 0.006 264.531)",
+ ["300"] = "oklch(0.872 0.01 258.338)",
+ ["400"] = "oklch(0.707 0.022 261.325)",
+ ["500"] = "oklch(0.551 0.027 264.364)",
+ ["600"] = "oklch(0.446 0.03 256.802)",
+ ["700"] = "oklch(0.373 0.034 259.733)",
+ ["800"] = "oklch(0.278 0.033 256.848)",
+ ["900"] = "oklch(0.21 0.034 264.665)",
+ ["950"] = "oklch(0.13 0.028 261.692)"
+ }.AsReadOnly();
- ///
- /// The scale of zinc colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Zinc = new Dictionary()
- {
- ["50"] = "#fafafa",
- ["100"] = "#f4f4f5",
- ["200"] = "#e4e4e7",
- ["300"] = "#d4d4d8",
- ["400"] = "#a1a1aa",
- ["500"] = "#71717a",
- ["600"] = "#52525b",
- ["700"] = "#3f3f46",
- ["800"] = "#27272a",
- ["900"] = "#18181b",
- ["950"] = "#09090b"
- }.AsReadOnly();
+ ///
+ /// The scale of zinc colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Zinc = new Dictionary()
+ {
+ ["50"] = "oklch(0.985 0 0)",
+ ["100"] = "oklch(0.967 0.001 286.375)",
+ ["200"] = "oklch(0.92 0.004 286.32)",
+ ["300"] = "oklch(0.871 0.006 286.286)",
+ ["400"] = "oklch(0.705 0.015 286.067)",
+ ["500"] = "oklch(0.552 0.016 285.938)",
+ ["600"] = "oklch(0.442 0.017 285.786)",
+ ["700"] = "oklch(0.37 0.013 285.805)",
+ ["800"] = "oklch(0.274 0.006 286.033)",
+ ["900"] = "oklch(0.21 0.006 285.885)",
+ ["950"] = "oklch(0.141 0.005 285.823)"
+ }.AsReadOnly();
- ///
- /// The scale of neutral colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Neutral = new Dictionary()
- {
- ["50"] = "#fafafa",
- ["100"] = "#f5f5f5",
- ["200"] = "#e5e5e5",
- ["300"] = "#d4d4d4",
- ["400"] = "#a3a3a3",
- ["500"] = "#737373",
- ["600"] = "#525252",
- ["700"] = "#404040",
- ["800"] = "#262626",
- ["900"] = "#171717",
- ["950"] = "#0a0a0a"
- }.AsReadOnly();
+ ///
+ /// The scale of neutral colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Neutral = new Dictionary()
+ {
+ ["50"] = "oklch(0.985 0 0)",
+ ["100"] = "oklch(0.97 0 0)",
+ ["200"] = "oklch(0.922 0 0)",
+ ["300"] = "oklch(0.87 0 0)",
+ ["400"] = "oklch(0.708 0 0)",
+ ["500"] = "oklch(0.556 0 0)",
+ ["600"] = "oklch(0.439 0 0)",
+ ["700"] = "oklch(0.371 0 0)",
+ ["800"] = "oklch(0.269 0 0)",
+ ["900"] = "oklch(0.205 0 0)",
+ ["950"] = "oklch(0.145 0 0)"
+ }.AsReadOnly();
- ///
- /// The scale of stone colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Stone = new Dictionary()
- {
- ["50"] = "#fafaf9",
- ["100"] = "#f5f5f4",
- ["200"] = "#e7e5e4",
- ["300"] = "#d6d3d1",
- ["400"] = "#a8a29e",
- ["500"] = "#78716c",
- ["600"] = "#57534e",
- ["700"] = "#44403c",
- ["800"] = "#292524",
- ["900"] = "#1c1917",
- ["950"] = "#0c0a09"
- }.AsReadOnly();
+ ///
+ /// The scale of stone colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Stone = new Dictionary()
+ {
+ ["50"] = "oklch(0.985 0.001 106.423)",
+ ["100"] = "oklch(0.97 0.001 106.424)",
+ ["200"] = "oklch(0.923 0.003 48.717)",
+ ["300"] = "oklch(0.869 0.005 56.366)",
+ ["400"] = "oklch(0.709 0.01 56.259)",
+ ["500"] = "oklch(0.553 0.013 58.071)",
+ ["600"] = "oklch(0.444 0.011 73.639)",
+ ["700"] = "oklch(0.374 0.01 67.558)",
+ ["800"] = "oklch(0.268 0.007 34.298)",
+ ["900"] = "oklch(0.216 0.006 56.043)",
+ ["950"] = "oklch(0.147 0.004 49.25)"
+ }.AsReadOnly();
- ///
- /// The scale of red colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Red = new Dictionary()
- {
- ["50"] = "#fef2f2",
- ["100"] = "#fee2e2",
- ["200"] = "#fecaca",
- ["300"] = "#fca5a5",
- ["400"] = "#f87171",
- ["500"] = "#ef4444",
- ["600"] = "#dc2626",
- ["700"] = "#b91c1c",
- ["800"] = "#991b1b",
- ["900"] = "#7f1d1d",
- ["950"] = "#450a0a"
- }.AsReadOnly();
+ ///
+ /// The scale of red colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Red = new Dictionary()
+ {
+ ["50"] = "oklch(0.971 0.013 17.38)",
+ ["100"] = "oklch(0.936 0.032 17.717)",
+ ["200"] = "oklch(0.885 0.062 18.334)",
+ ["300"] = "oklch(0.808 0.114 19.571)",
+ ["400"] = "oklch(0.704 0.191 22.216)",
+ ["500"] = "oklch(0.637 0.237 25.331)",
+ ["600"] = "oklch(0.577 0.245 27.325)",
+ ["700"] = "oklch(0.505 0.213 27.518)",
+ ["800"] = "oklch(0.444 0.177 26.899)",
+ ["900"] = "oklch(0.396 0.141 25.723)",
+ ["950"] = "oklch(0.258 0.092 26.042)"
+ }.AsReadOnly();
- ///
- /// The scale of orange colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Orange = new Dictionary()
- {
- ["50"] = "#fff7ed",
- ["100"] = "#ffedd5",
- ["200"] = "#fed7aa",
- ["300"] = "#fdba74",
- ["400"] = "#fb923c",
- ["500"] = "#f97316",
- ["600"] = "#ea580c",
- ["700"] = "#c2410c",
- ["800"] = "#9a3412",
- ["900"] = "#7c2d12",
- ["950"] = "#431407"
- }.AsReadOnly();
+ ///
+ /// The scale of orange colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Orange = new Dictionary()
+ {
+ ["50"] = "oklch(0.98 0.016 73.684)",
+ ["100"] = "oklch(0.954 0.038 75.164)",
+ ["200"] = "oklch(0.901 0.076 70.697)",
+ ["300"] = "oklch(0.837 0.128 66.29)",
+ ["400"] = "oklch(0.75 0.183 55.934)",
+ ["500"] = "oklch(0.705 0.213 47.604)",
+ ["600"] = "oklch(0.646 0.222 41.116)",
+ ["700"] = "oklch(0.553 0.195 38.402)",
+ ["800"] = "oklch(0.47 0.157 37.304)",
+ ["900"] = "oklch(0.408 0.123 38.172)",
+ ["950"] = "oklch(0.266 0.079 36.259)"
+ }.AsReadOnly();
- ///
- /// The scale of amber colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Amber = new Dictionary()
- {
- ["50"] = "#fffbeb",
- ["100"] = "#fef3c7",
- ["200"] = "#fde68a",
- ["300"] = "#fcd34d",
- ["400"] = "#fbbf24",
- ["500"] = "#f59e0b",
- ["600"] = "#d97706",
- ["700"] = "#b45309",
- ["800"] = "#92400e",
- ["900"] = "#78350f",
- ["950"] = "#451a03"
- }.AsReadOnly();
+ ///
+ /// The scale of amber colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Amber = new Dictionary()
+ {
+ ["50"] = "oklch(0.987 0.022 95.277)",
+ ["100"] = "oklch(0.962 0.059 95.617)",
+ ["200"] = "oklch(0.924 0.12 95.746)",
+ ["300"] = "oklch(0.879 0.169 91.605)",
+ ["400"] = "oklch(0.828 0.189 84.429)",
+ ["500"] = "oklch(0.769 0.188 70.08)",
+ ["600"] = "oklch(0.666 0.179 58.318)",
+ ["700"] = "oklch(0.555 0.163 48.998)",
+ ["800"] = "oklch(0.473 0.137 46.201)",
+ ["900"] = "oklch(0.414 0.112 45.904)",
+ ["950"] = "oklch(0.279 0.077 45.635)"
+ }.AsReadOnly();
- ///
- /// The scale of yellow colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Yellow = new Dictionary()
- {
- ["50"] = "#fefce8",
- ["100"] = "#fef9c3",
- ["200"] = "#fef08a",
- ["300"] = "#fde047",
- ["400"] = "#facc15",
- ["500"] = "#eab308",
- ["600"] = "#ca8a04",
- ["700"] = "#a16207",
- ["800"] = "#854d0e",
- ["900"] = "#713f12",
- ["950"] = "#422006"
- }.AsReadOnly();
+ ///
+ /// The scale of yellow colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Yellow = new Dictionary()
+ {
+ ["50"] = "oklch(0.987 0.026 102.212)",
+ ["100"] = "oklch(0.973 0.071 103.193)",
+ ["200"] = "oklch(0.945 0.129 101.54)",
+ ["300"] = "oklch(0.905 0.182 98.111)",
+ ["400"] = "oklch(0.852 0.199 91.936)",
+ ["500"] = "oklch(0.795 0.184 86.047)",
+ ["600"] = "oklch(0.681 0.162 75.834)",
+ ["700"] = "oklch(0.554 0.135 66.442)",
+ ["800"] = "oklch(0.476 0.114 61.907)",
+ ["900"] = "oklch(0.421 0.095 57.708)",
+ ["950"] = "oklch(0.286 0.066 53.813)"
+ }.AsReadOnly();
- ///
- /// The scale of lime colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Lime = new Dictionary()
- {
- ["50"] = "#f7fee7",
- ["100"] = "#ecfccb",
- ["200"] = "#d9f99d",
- ["300"] = "#bef264",
- ["400"] = "#a3e635",
- ["500"] = "#84cc16",
- ["600"] = "#65a30d",
- ["700"] = "#4d7c0f",
- ["800"] = "#3f6212",
- ["900"] = "#365314",
- ["950"] = "#1a2e05"
- }.AsReadOnly();
+ ///
+ /// The scale of lime colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Lime = new Dictionary()
+ {
+ ["50"] = "oklch(0.986 0.031 120.757)",
+ ["100"] = "oklch(0.967 0.067 122.328)",
+ ["200"] = "oklch(0.938 0.127 124.321)",
+ ["300"] = "oklch(0.897 0.196 126.665)",
+ ["400"] = "oklch(0.841 0.238 128.85)",
+ ["500"] = "oklch(0.768 0.233 130.85)",
+ ["600"] = "oklch(0.648 0.2 131.684)",
+ ["700"] = "oklch(0.532 0.157 131.589)",
+ ["800"] = "oklch(0.453 0.124 130.933)",
+ ["900"] = "oklch(0.405 0.101 131.063)",
+ ["950"] = "oklch(0.274 0.072 132.109)"
+ }.AsReadOnly();
- ///
- /// The scale of green colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Green = new Dictionary()
- {
- ["50"] = "#f0fdf4",
- ["100"] = "#dcfce7",
- ["200"] = "#bbf7d0",
- ["300"] = "#86efac",
- ["400"] = "#4ade80",
- ["500"] = "#22c55e",
- ["600"] = "#16a34a",
- ["700"] = "#15803d",
- ["800"] = "#166534",
- ["900"] = "#14532d",
- ["950"] = "#052e16"
- }.AsReadOnly();
+ ///
+ /// The scale of green colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Green = new Dictionary()
+ {
+ ["50"] = "oklch(0.982 0.018 155.826)",
+ ["100"] = "oklch(0.962 0.044 156.743)",
+ ["200"] = "oklch(0.925 0.084 155.995)",
+ ["300"] = "oklch(0.871 0.15 154.449)",
+ ["400"] = "oklch(0.792 0.209 151.711)",
+ ["500"] = "oklch(0.723 0.219 149.579)",
+ ["600"] = "oklch(0.627 0.194 149.214)",
+ ["700"] = "oklch(0.527 0.154 150.069)",
+ ["800"] = "oklch(0.448 0.119 151.328)",
+ ["900"] = "oklch(0.393 0.095 152.535)",
+ ["950"] = "oklch(0.266 0.065 152.934)"
+ }.AsReadOnly();
- ///
- /// The scale of emerald colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Emerald = new Dictionary()
- {
- ["50"] = "#ecfdf5",
- ["100"] = "#d1fae5",
- ["200"] = "#a7f3d0",
- ["300"] = "#6ee7b7",
- ["400"] = "#34d399",
- ["500"] = "#10b981",
- ["600"] = "#059669",
- ["700"] = "#047857",
- ["800"] = "#065f46",
- ["900"] = "#064e3b",
- ["950"] = "#022c22"
- }.AsReadOnly();
+ ///
+ /// The scale of emerald colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Emerald = new Dictionary()
+ {
+ ["50"] = "oklch(0.979 0.021 166.113)",
+ ["100"] = "oklch(0.95 0.052 163.051)",
+ ["200"] = "oklch(0.905 0.093 164.15)",
+ ["300"] = "oklch(0.845 0.143 164.978)",
+ ["400"] = "oklch(0.765 0.177 163.223)",
+ ["500"] = "oklch(0.696 0.17 162.48)",
+ ["600"] = "oklch(0.596 0.145 163.225)",
+ ["700"] = "oklch(0.508 0.118 165.612)",
+ ["800"] = "oklch(0.432 0.095 166.913)",
+ ["900"] = "oklch(0.378 0.077 168.94)",
+ ["950"] = "oklch(0.262 0.051 172.552)"
+ }.AsReadOnly();
- ///
- /// The scale of teal colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Teal = new Dictionary()
- {
- ["50"] = "#f0fdfa",
- ["100"] = "#ccfbf1",
- ["200"] = "#99f6e4",
- ["300"] = "#5eead4",
- ["400"] = "#2dd4bf",
- ["500"] = "#14b8a6",
- ["600"] = "#0d9488",
- ["700"] = "#0f766e",
- ["800"] = "#115e59",
- ["900"] = "#134e4a",
- ["950"] = "#042f2e"
- }.AsReadOnly();
+ ///
+ /// The scale of teal colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Teal = new Dictionary()
+ {
+ ["50"] = "oklch(0.984 0.014 180.72)",
+ ["100"] = "oklch(0.953 0.051 180.801)",
+ ["200"] = "oklch(0.91 0.096 180.426)",
+ ["300"] = "oklch(0.855 0.138 181.071)",
+ ["400"] = "oklch(0.777 0.152 181.912)",
+ ["500"] = "oklch(0.704 0.14 182.503)",
+ ["600"] = "oklch(0.6 0.118 184.704)",
+ ["700"] = "oklch(0.511 0.096 186.391)",
+ ["800"] = "oklch(0.437 0.078 188.216)",
+ ["900"] = "oklch(0.386 0.063 188.416)",
+ ["950"] = "oklch(0.277 0.046 192.524)"
+ }.AsReadOnly();
- ///
- /// The scale of cyan colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Cyan = new Dictionary()
- {
- ["50"] = "#ecfeff",
- ["100"] = "#cffafe",
- ["200"] = "#a5f3fc",
- ["300"] = "#67e8f9",
- ["400"] = "#22d3ee",
- ["500"] = "#06b6d4",
- ["600"] = "#0891b2",
- ["700"] = "#0e7490",
- ["800"] = "#155e75",
- ["900"] = "#164e63",
- ["950"] = "#083344"
- }.AsReadOnly();
+ ///
+ /// The scale of cyan colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Cyan = new Dictionary()
+ {
+ ["50"] = "oklch(0.984 0.019 200.873)",
+ ["100"] = "oklch(0.956 0.045 203.388)",
+ ["200"] = "oklch(0.917 0.08 205.041)",
+ ["300"] = "oklch(0.865 0.127 207.078)",
+ ["400"] = "oklch(0.789 0.154 211.53)",
+ ["500"] = "oklch(0.715 0.143 215.221)",
+ ["600"] = "oklch(0.609 0.126 221.723)",
+ ["700"] = "oklch(0.52 0.105 223.128)",
+ ["800"] = "oklch(0.45 0.085 224.283)",
+ ["900"] = "oklch(0.398 0.07 227.392)",
+ ["950"] = "oklch(0.302 0.056 229.695)"
+ }.AsReadOnly();
- ///
- /// The scale of sky colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Sky = new Dictionary()
- {
- ["50"] = "#f0f9ff",
- ["100"] = "#e0f2fe",
- ["200"] = "#bae6fd",
- ["300"] = "#7dd3fc",
- ["400"] = "#38bdf8",
- ["500"] = "#0ea5e9",
- ["600"] = "#0284c7",
- ["700"] = "#0369a1",
- ["800"] = "#075985",
- ["900"] = "#0c4a6e",
- ["950"] = "#082f49"
- }.AsReadOnly();
+ ///
+ /// The scale of sky colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Sky = new Dictionary()
+ {
+ ["50"] = "oklch(0.977 0.013 236.62)",
+ ["100"] = "oklch(0.951 0.026 236.824)",
+ ["200"] = "oklch(0.901 0.058 230.902)",
+ ["300"] = "oklch(0.828 0.111 230.318)",
+ ["400"] = "oklch(0.746 0.16 232.661)",
+ ["500"] = "oklch(0.685 0.169 237.323)",
+ ["600"] = "oklch(0.588 0.158 241.966)",
+ ["700"] = "oklch(0.5 0.134 242.749)",
+ ["800"] = "oklch(0.443 0.11 240.79)",
+ ["900"] = "oklch(0.391 0.09 240.876)",
+ ["950"] = "oklch(0.293 0.066 243.157)"
+ }.AsReadOnly();
- ///
- /// The scale of blue colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Blue = new Dictionary()
- {
- ["50"] = "#eff6ff",
- ["100"] = "#dbeafe",
- ["200"] = "#bfdbfe",
- ["300"] = "#93c5fd",
- ["400"] = "#60a5fa",
- ["500"] = "#3b82f6",
- ["600"] = "#2563eb",
- ["700"] = "#1d4ed8",
- ["800"] = "#1e40af",
- ["900"] = "#1e3a8a",
- ["950"] = "#172554"
- }.AsReadOnly();
+ ///
+ /// The scale of blue colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Blue = new Dictionary()
+ {
+ ["50"] = "oklch(0.97 0.014 254.604)",
+ ["100"] = "oklch(0.932 0.032 255.585)",
+ ["200"] = "oklch(0.882 0.059 254.128)",
+ ["300"] = "oklch(0.809 0.105 251.813)",
+ ["400"] = "oklch(0.707 0.165 254.624)",
+ ["500"] = "oklch(0.623 0.214 259.815)",
+ ["600"] = "oklch(0.546 0.245 262.881)",
+ ["700"] = "oklch(0.488 0.243 264.376)",
+ ["800"] = "oklch(0.424 0.199 265.638)",
+ ["900"] = "oklch(0.379 0.146 265.522)",
+ ["950"] = "oklch(0.282 0.091 267.935)"
+ }.AsReadOnly();
- ///
- /// The scale of indigo colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Indigo = new Dictionary()
- {
- ["50"] = "#eef2ff",
- ["100"] = "#e0e7ff",
- ["200"] = "#c7d2fe",
- ["300"] = "#a5b4fc",
- ["400"] = "#818cf8",
- ["500"] = "#6366f1",
- ["600"] = "#4f46e5",
- ["700"] = "#4338ca",
- ["800"] = "#3730a3",
- ["900"] = "#312e81",
- ["950"] = "#1e1b4b"
- }.AsReadOnly();
+ ///
+ /// The scale of indigo colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Indigo = new Dictionary()
+ {
+ ["50"] = "oklch(0.962 0.018 272.314)",
+ ["100"] = "oklch(0.93 0.034 272.788)",
+ ["200"] = "oklch(0.87 0.065 274.039)",
+ ["300"] = "oklch(0.785 0.115 274.713)",
+ ["400"] = "oklch(0.673 0.182 276.935)",
+ ["500"] = "oklch(0.585 0.233 277.117)",
+ ["600"] = "oklch(0.511 0.262 276.966)",
+ ["700"] = "oklch(0.457 0.24 277.023)",
+ ["800"] = "oklch(0.398 0.195 277.366)",
+ ["900"] = "oklch(0.359 0.144 278.697)",
+ ["950"] = "oklch(0.257 0.09 281.288)"
+ }.AsReadOnly();
- ///
- /// The scale of violet colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Violet = new Dictionary()
- {
- ["50"] = "#f5f3ff",
- ["100"] = "#ede9fe",
- ["200"] = "#ddd6fe",
- ["300"] = "#c4b5fd",
- ["400"] = "#a78bfa",
- ["500"] = "#8b5cf6",
- ["600"] = "#7c3aed",
- ["700"] = "#6d28d9",
- ["800"] = "#5b21b6",
- ["900"] = "#4c1d95",
- ["950"] = "#2e1065"
- }.AsReadOnly();
+ ///
+ /// The scale of violet colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Violet = new Dictionary()
+ {
+ ["50"] = "oklch(0.969 0.016 293.756)",
+ ["100"] = "oklch(0.943 0.029 294.588)",
+ ["200"] = "oklch(0.894 0.057 293.283)",
+ ["300"] = "oklch(0.811 0.111 293.571)",
+ ["400"] = "oklch(0.702 0.183 293.541)",
+ ["500"] = "oklch(0.606 0.25 292.717)",
+ ["600"] = "oklch(0.541 0.281 293.009)",
+ ["700"] = "oklch(0.491 0.27 292.581)",
+ ["800"] = "oklch(0.432 0.232 292.759)",
+ ["900"] = "oklch(0.38 0.189 293.745)",
+ ["950"] = "oklch(0.283 0.141 291.089)"
+ }.AsReadOnly();
- ///
- /// The scale of purple colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Purple = new Dictionary()
- {
- ["50"] = "#faf5ff",
- ["100"] = "#f3e8ff",
- ["200"] = "#e9d5ff",
- ["300"] = "#d8b4fe",
- ["400"] = "#c084fc",
- ["500"] = "#a855f7",
- ["600"] = "#9333ea",
- ["700"] = "#7e22ce",
- ["800"] = "#6b21a8",
- ["900"] = "#581c87",
- ["950"] = "#3b0764"
- }.AsReadOnly();
+ ///
+ /// The scale of purple colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Purple = new Dictionary()
+ {
+ ["50"] = "oklch(0.977 0.014 308.299)",
+ ["100"] = "oklch(0.946 0.033 307.174)",
+ ["200"] = "oklch(0.902 0.063 306.703)",
+ ["300"] = "oklch(0.827 0.119 306.383)",
+ ["400"] = "oklch(0.714 0.203 305.504)",
+ ["500"] = "oklch(0.627 0.265 303.9)",
+ ["600"] = "oklch(0.558 0.288 302.321)",
+ ["700"] = "oklch(0.496 0.265 301.924)",
+ ["800"] = "oklch(0.438 0.218 303.724)",
+ ["900"] = "oklch(0.381 0.176 304.987)",
+ ["950"] = "oklch(0.291 0.149 302.717)"
+ }.AsReadOnly();
- ///
- /// The scale of fuchsia colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Fuchsia = new Dictionary()
- {
- ["50"] = "#fdf4ff",
- ["100"] = "#fae8ff",
- ["200"] = "#f5d0fe",
- ["300"] = "#f0abfc",
- ["400"] = "#e879f9",
- ["500"] = "#d946ef",
- ["600"] = "#c026d3",
- ["700"] = "#a21caf",
- ["800"] = "#86198f",
- ["900"] = "#701a75",
- ["950"] = "#4a044e"
- }.AsReadOnly();
+ ///
+ /// The scale of fuchsia colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Fuchsia = new Dictionary()
+ {
+ ["50"] = "oklch(0.977 0.017 320.058)",
+ ["100"] = "oklch(0.952 0.037 318.852)",
+ ["200"] = "oklch(0.903 0.076 319.62)",
+ ["300"] = "oklch(0.833 0.145 321.434)",
+ ["400"] = "oklch(0.74 0.238 322.16)",
+ ["500"] = "oklch(0.667 0.295 322.15)",
+ ["600"] = "oklch(0.591 0.293 322.896)",
+ ["700"] = "oklch(0.518 0.253 323.949)",
+ ["800"] = "oklch(0.452 0.211 324.591)",
+ ["900"] = "oklch(0.401 0.17 325.612)",
+ ["950"] = "oklch(0.293 0.136 325.661)"
+ }.AsReadOnly();
- ///
- /// The scale of pink colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Pink = new Dictionary()
- {
- ["50"] = "#fdf2f8",
- ["100"] = "#fce7f3",
- ["200"] = "#fbcfe8",
- ["300"] = "#f9a8d4",
- ["400"] = "#f472b6",
- ["500"] = "#ec4899",
- ["600"] = "#db2777",
- ["700"] = "#be185d",
- ["800"] = "#9d174d",
- ["900"] = "#831843",
- ["950"] = "#500724"
- }.AsReadOnly();
+ ///
+ /// The scale of pink colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Pink = new Dictionary()
+ {
+ ["50"] = "oklch(0.971 0.014 343.198)",
+ ["100"] = "oklch(0.948 0.028 342.258)",
+ ["200"] = "oklch(0.899 0.061 343.231)",
+ ["300"] = "oklch(0.823 0.12 346.018)",
+ ["400"] = "oklch(0.718 0.202 349.761)",
+ ["500"] = "oklch(0.656 0.241 354.308)",
+ ["600"] = "oklch(0.592 0.249 0.584)",
+ ["700"] = "oklch(0.525 0.223 3.958)",
+ ["800"] = "oklch(0.459 0.187 3.815)",
+ ["900"] = "oklch(0.408 0.153 2.432)",
+ ["950"] = "oklch(0.284 0.109 3.907)"
+ }.AsReadOnly();
- ///
- /// The scale of rose colors.
- ///
- /// See
- ///
- ///
- public readonly static IReadOnlyDictionary Rose = new Dictionary()
- {
- ["50"] = "#fff1f2",
- ["100"] = "#ffe4e6",
- ["200"] = "#fecdd3",
- ["300"] = "#fda4af",
- ["400"] = "#fb7185",
- ["500"] = "#f43f5e",
- ["600"] = "#e11d48",
- ["700"] = "#be123c",
- ["800"] = "#9f1239",
- ["900"] = "#881337",
- ["950"] = "#4c0519"
- }.AsReadOnly();
+ ///
+ /// The scale of rose colors.
+ ///
+ ///
+ /// See
+ ///
+ public readonly static IReadOnlyDictionary Rose = new Dictionary()
+ {
+ ["50"] = "oklch(0.969 0.015 12.422)",
+ ["100"] = "oklch(0.941 0.03 12.58)",
+ ["200"] = "oklch(0.892 0.058 10.001)",
+ ["300"] = "oklch(0.81 0.117 11.638)",
+ ["400"] = "oklch(0.712 0.194 13.428)",
+ ["500"] = "oklch(0.645 0.246 16.439)",
+ ["600"] = "oklch(0.586 0.253 17.585)",
+ ["700"] = "oklch(0.514 0.222 16.935)",
+ ["800"] = "oklch(0.455 0.188 13.697)",
+ ["900"] = "oklch(0.41 0.159 10.272)",
+ ["950"] = "oklch(0.271 0.105 12.094)"
+ }.AsReadOnly();
- ///
- /// Reverses the order of color values in a given color scale.
- ///
- /// The color scale to reverse.
- /// A with the color scale reversed.
- internal static Dictionary ReverseColorValues( IReadOnlyDictionary colorScale )
- {
- return colorScale.Keys
- .Zip( colorScale.Values.Reverse(), ( key, reversedValue ) => new { Key = key, Value = reversedValue } )
- .ToDictionary( x => x.Key, x => x.Value );
- }
+ ///
+ /// Reverses the order of color values in a given color scale.
+ ///
+ /// The color scale to reverse.
+ /// A with the color scale reversed.
+ internal static Dictionary ReverseColorValues( IReadOnlyDictionary colorScale )
+ {
+ return colorScale.Keys
+ .Zip( colorScale.Values.Reverse(), ( key, reversedValue ) => new { Key = key, Value = reversedValue } )
+ .ToDictionary( x => x.Key, x => x.Value );
+ }
}
diff --git a/src/LumexUI/Utilities/ColorUtils.cs b/src/LumexUI/Utilities/ColorUtils.cs
index e7cbe07e..9e9e4b4e 100644
--- a/src/LumexUI/Utilities/ColorUtils.cs
+++ b/src/LumexUI/Utilities/ColorUtils.cs
@@ -4,107 +4,57 @@
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
+using System.Text.RegularExpressions;
using LumexUI.Theme;
namespace LumexUI.Utilities;
[ExcludeFromCodeCoverage]
-internal static class ColorUtils
+internal static partial class ColorUtils
{
- internal static string HexToHsl( string color )
- {
- HexToHsl( color, out var H, out var S, out var L );
-
- var _H = H.ToString( "0.##", CultureInfo.InvariantCulture );
- var _S = S.ToString( "0.##", CultureInfo.InvariantCulture );
- var _L = L.ToString( "0.##", CultureInfo.InvariantCulture );
-
- return $"{_H} {_S}% {_L}%";
- }
-
- internal static string GetReadableColor( string color )
- {
- return Luminance( color ) < .3 ? Colors.White : Colors.Black;
- }
-
- private static void HexToRgb( string color, out byte R, out byte G, out byte B )
- {
- color = color[1..];
-
- if( color == null || !uint.TryParse( color, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var decimalValue ) )
- {
- throw new ArgumentException( $"Color hexadecimal value '{color}' is not in the correct format.", nameof( color ) );
- }
-
- R = (byte)( decimalValue >> 16 );
- G = (byte)( decimalValue >> 8 );
- B = (byte)( decimalValue >> 0 );
- }
-
- private static void HexToHsl( string color, out double H, out double S, out double L )
- {
- HexToRgb( color, out var R, out var G, out var B );
-
- var _R = R / 255d;
- var _G = G / 255d;
- var _B = B / 255d;
-
- var max = Math.Max( _R, Math.Max( _G, _B ) );
- var min = Math.Min( _R, Math.Min( _G, _B ) );
- var delta = max - min;
-
- H = 0;
- S = 0;
- L = ( max + min ) / 2d;
-
- if( delta != 0 )
- {
- S = L < 0.5
- ? delta / ( max + min )
- : delta / ( 2d - max - min );
-
- if( _R == max )
- {
- H = ( _G - _B ) / delta;
- }
- else if( _G == max )
- {
- H = 2d + ( ( _B - _R ) / delta );
- }
- else if( _B == max )
- {
- H = 4d + ( ( _R - _G ) / delta );
- }
- }
-
- H = Math.Round( H *= 60d, 2 );
- S = Math.Round( S *= 100d, 2 );
- L = Math.Round( L *= 100d, 2 );
-
- if( H < 0 )
- {
- H += 360;
- }
- }
-
- private static double Luminance( string color )
- {
- if( color == "transparent" )
- {
- return 0;
- }
-
- HexToRgb( color, out var R, out var G, out var B );
- return 0.2126 * Linear( R ) + 0.7152 * Linear( G ) + 0.0722 * Linear( B );
-
- static double Linear( double x )
- {
- var channel = x / 255;
-
- return channel <= 0.04045
- ? channel / 12.92
- : Math.Pow( ( channel + 0.055 ) / 1.055, 2.4 );
- }
- }
+ internal static string GetReadableColor( string color )
+ {
+ ArgumentNullException.ThrowIfNull( color, nameof( color ) );
+
+ if( color is Colors.White )
+ {
+ return Colors.Black;
+ }
+ else if( color is Colors.Black )
+ {
+ return Colors.White;
+ }
+
+ return Luminance( color.Trim() ) < .65 ? Colors.White : Colors.Black;
+ }
+
+ private static double Luminance( string color )
+ {
+ if( color == "transparent" )
+ {
+ return 0;
+ }
+
+ if( color.StartsWith( "oklch" ) )
+ {
+ return GetOklchLuminance( color );
+ }
+
+ return 0;
+ }
+
+ private static double GetOklchLuminance( string color )
+ {
+ var match = Oklch().Match( color );
+ if( match.Success )
+ {
+ return double.Parse( match.Groups[1].Value, CultureInfo.InvariantCulture );
+ }
+
+ throw new ArgumentException( $"Color '{color}' is not in the correct format.", nameof( color ) );
+ }
+
+ [GeneratedRegex( @"oklch\(([\d.]+)\s([\d.]+)\s([\d.]+)\)" )]
+ private static partial Regex Oklch();
}
diff --git a/src/LumexUI/package.json b/src/LumexUI/package.json
index b823745f..8618abed 100644
--- a/src/LumexUI/package.json
+++ b/src/LumexUI/package.json
@@ -6,9 +6,7 @@
"@floating-ui/dom": "^1.6.10"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^26.0.1",
"@rollup/plugin-node-resolve": "^15.2.3",
- "rollup": "^4.24.0",
- "tailwindcss": "^3.4.10"
+ "rollup": "^4.24.0"
}
}
diff --git a/src/LumexUI/rollup.config.mjs b/src/LumexUI/rollup.config.mjs
index cac08166..d6a99730 100644
--- a/src/LumexUI/rollup.config.mjs
+++ b/src/LumexUI/rollup.config.mjs
@@ -1,5 +1,4 @@
import { defineConfig } from 'rollup';
-import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
export default defineConfig([
@@ -10,16 +9,5 @@ export default defineConfig([
format: 'esm',
},
plugins: [resolve()],
- },
- {
- input: 'Scripts/Plugin/plugin.js',
- output: {
- file: 'Scripts/Plugin/dist/plugin.js',
- format: 'cjs',
- },
- plugins: [
- resolve(),
- commonjs()
- ],
- }
+ }
]);
diff --git a/tests/LumexUI.Tests/Components/Providers/ThemeProviderTests.cs b/tests/LumexUI.Tests/Components/Providers/ThemeProviderTests.cs
index 0a060604..35a7e086 100644
--- a/tests/LumexUI.Tests/Components/Providers/ThemeProviderTests.cs
+++ b/tests/LumexUI.Tests/Components/Providers/ThemeProviderTests.cs
@@ -4,6 +4,7 @@
using System.Globalization;
using System.Text;
+using System.Threading;
using AngleSharp.Html.Dom;
@@ -36,140 +37,140 @@ public void ThemeProvider_DifferentCultures_ShouldRenderCorrectly( string cultur
var expectedCssVars = new StringBuilder().AppendJoin( "\n",
":root, [data-theme=light] {",
- "--lumex-background: 0 0% 100%;",
- "--lumex-foreground-50: 0 0% 98.04%;",
- "--lumex-foreground-100: 240 4.76% 95.88%;",
- "--lumex-foreground-200: 240 5.88% 90%;",
- "--lumex-foreground-300: 240 4.88% 83.92%;",
- "--lumex-foreground-400: 240 5.03% 64.9%;",
- "--lumex-foreground-500: 240 3.83% 46.08%;",
- "--lumex-foreground-600: 240 5.2% 33.92%;",
- "--lumex-foreground-700: 240 5.26% 26.08%;",
- "--lumex-foreground-800: 240 3.7% 15.88%;",
- "--lumex-foreground-900: 240 5.88% 10%;",
- "--lumex-foreground-950: 240 10% 3.92%;",
- "--lumex-foreground: 240 5.26% 26.08%;",
- "--lumex-overlay: 0 0% 0%;",
- "--lumex-focus: 217.22 91.22% 59.8%;",
- "--lumex-divider: 240 5.88% 10%;",
- "--lumex-surface1: 0 0% 100%;",
- "--lumex-surface1-foreground: 240 5.88% 10%;",
- "--lumex-surface2: 240 4.76% 95.88%;",
- "--lumex-surface2-foreground: 240 3.7% 15.88%;",
- "--lumex-surface3: 240 5.88% 90%;",
- "--lumex-surface3-foreground: 240 5.26% 26.08%;",
- "--lumex-default-50: 0 0% 98.04%;",
- "--lumex-default-100: 240 4.76% 95.88%;",
- "--lumex-default-200: 240 5.88% 90%;",
- "--lumex-default-300: 240 4.88% 83.92%;",
- "--lumex-default-400: 240 5.03% 64.9%;",
- "--lumex-default-500: 240 3.83% 46.08%;",
- "--lumex-default-600: 240 5.2% 33.92%;",
- "--lumex-default-700: 240 5.26% 26.08%;",
- "--lumex-default-800: 240 3.7% 15.88%;",
- "--lumex-default-900: 240 5.88% 10%;",
- "--lumex-default-950: 240 10% 3.92%;",
- "--lumex-default: 240 4.88% 83.92%;",
- "--lumex-default-foreground: 0 0% 0%;",
- "--lumex-primary-50: 213.75 100% 96.86%;",
- "--lumex-primary-100: 214.29 94.59% 92.75%;",
- "--lumex-primary-200: 213.33 96.92% 87.25%;",
- "--lumex-primary-300: 211.7 96.36% 78.43%;",
- "--lumex-primary-400: 213.12 93.9% 67.84%;",
- "--lumex-primary-500: 217.22 91.22% 59.8%;",
- "--lumex-primary-600: 221.21 83.19% 53.33%;",
- "--lumex-primary-700: 224.28 76.33% 48.04%;",
- "--lumex-primary-800: 225.93 70.73% 40.2%;",
- "--lumex-primary-900: 224.44 64.29% 32.94%;",
- "--lumex-primary-950: 226.23 57.01% 20.98%;",
- "--lumex-primary: 217.22 91.22% 59.8%;",
- "--lumex-primary-foreground: 0 0% 100%;",
- "--lumex-secondary-50: 250 100% 97.65%;",
- "--lumex-secondary-100: 251.43 91.3% 95.49%;",
- "--lumex-secondary-200: 250.5 95.24% 91.76%;",
- "--lumex-secondary-300: 252.5 94.74% 85.1%;",
- "--lumex-secondary-400: 255.14 91.74% 76.27%;",
- "--lumex-secondary-500: 258.31 89.53% 66.27%;",
- "--lumex-secondary-600: 262.12 83.26% 57.84%;",
- "--lumex-secondary-700: 263.39 69.96% 50.39%;",
- "--lumex-secondary-800: 263.36 69.3% 42.16%;",
- "--lumex-secondary-900: 263.5 67.42% 34.9%;",
- "--lumex-secondary-950: 261.18 72.65% 22.94%;",
- "--lumex-secondary: 258.31 89.53% 66.27%;",
- "--lumex-secondary-foreground: 0 0% 100%;",
- "--lumex-success-50: 138.46 76.47% 96.67%;",
- "--lumex-success-100: 140.62 84.21% 92.55%;",
- "--lumex-success-200: 141 78.95% 85.1%;",
- "--lumex-success-300: 141.71 76.64% 73.14%;",
- "--lumex-success-400: 141.89 69.16% 58.04%;",
- "--lumex-success-500: 142.09 70.56% 45.29%;",
- "--lumex-success-600: 142.13 76.22% 36.27%;",
- "--lumex-success-700: 142.43 71.81% 29.22%;",
- "--lumex-success-800: 142.78 64.23% 24.12%;",
- "--lumex-success-900: 143.81 61.17% 20.2%;",
- "--lumex-success-950: 144.88 80.39% 10%;",
- "--lumex-success: 142.09 70.56% 45.29%;",
- "--lumex-success-foreground: 0 0% 0%;",
- "--lumex-warning-50: 48 100% 96.08%;",
- "--lumex-warning-100: 48 96.49% 88.82%;",
- "--lumex-warning-200: 48 96.64% 76.67%;",
- "--lumex-warning-300: 45.94 96.69% 64.51%;",
- "--lumex-warning-400: 43.26 96.41% 56.27%;",
- "--lumex-warning-500: 37.69 92.13% 50.2%;",
- "--lumex-warning-600: 32.13 94.62% 43.73%;",
- "--lumex-warning-700: 25.96 90.48% 37.06%;",
- "--lumex-warning-800: 22.73 82.5% 31.37%;",
- "--lumex-warning-900: 21.71 77.78% 26.47%;",
- "--lumex-warning-950: 20.91 91.67% 14.12%;",
- "--lumex-warning: 37.69 92.13% 50.2%;",
- "--lumex-warning-foreground: 0 0% 0%;",
- "--lumex-danger-50: 355.71 100% 97.25%;",
- "--lumex-danger-100: 355.56 100% 94.71%;",
- "--lumex-danger-200: 352.65 96.08% 90%;",
- "--lumex-danger-300: 352.58 95.7% 81.76%;",
- "--lumex-danger-400: 351.3 94.52% 71.37%;",
- "--lumex-danger-500: 349.72 89.16% 60.2%;",
- "--lumex-danger-600: 346.84 77.17% 49.8%;",
- "--lumex-danger-700: 345.35 82.69% 40.78%;",
- "--lumex-danger-800: 343.4 79.66% 34.71%;",
- "--lumex-danger-900: 341.54 75.48% 30.39%;",
- "--lumex-danger-950: 343.1 87.65% 15.88%;",
- "--lumex-danger: 349.72 89.16% 60.2%;",
- "--lumex-danger-foreground: 0 0% 100%;",
- "--lumex-info-50: 204 100% 97.06%;",
- "--lumex-info-100: 204 93.75% 93.73%;",
- "--lumex-info-200: 200.6 94.37% 86.08%;",
- "--lumex-info-300: 199.37 95.49% 73.92%;",
- "--lumex-info-400: 198.44 93.2% 59.61%;",
- "--lumex-info-500: 198.63 88.66% 48.43%;",
- "--lumex-info-600: 200.41 98.01% 39.41%;",
- "--lumex-info-700: 201.27 96.34% 32.16%;",
- "--lumex-info-800: 200.95 90% 27.45%;",
- "--lumex-info-900: 202.04 80.33% 23.92%;",
- "--lumex-info-950: 204 80.25% 15.88%;",
- "--lumex-info: 198.63 88.66% 48.43%;",
- "--lumex-info-foreground: 0 0% 0%;",
- "--lumex-font-sans: ;",
- "--lumex-font-mono: ;",
- "--lumex-font-size-tiny: .75rem;",
- "--lumex-font-size-small: .875rem;",
- "--lumex-font-size-medium: 1rem;",
- "--lumex-font-size-large: 1.125rem;",
- "--lumex-line-height-tiny: 1rem;",
- "--lumex-line-height-small: 1.25rem;",
- "--lumex-line-height-medium: 1.5rem;",
- "--lumex-line-height-large: 1.75rem;",
- "--lumex-radius-small: .375rem;",
- "--lumex-radius-medium: .625rem;",
- "--lumex-radius-large: .875rem;",
- "--lumex-box-shadow-small: 0px 0px 5px 0px rgba(0,0,0,.02),0px 2px 10px 0px rgba(0,0,0,.06),0px 0px 1px 0px rgba(0,0,0,.15);",
- "--lumex-box-shadow-medium: 0px 0px 15px 0px rgba(0,0,0,.03),0px 2px 30px 0px rgba(0,0,0,.08),0px 0px 1px 0px rgba(0,0,0,.15);",
- "--lumex-box-shadow-large: 0px 0px 20px 0px rgba(0,0,0,.04),0px 2px 50px 0px rgba(0,0,0,.1),0px 0px 1px 0px rgba(0,0,0,.15);",
- "--lumex-divider-opacity: 0.15;",
- "--lumex-disabled-opacity: 0.6;",
- "--lumex-focus-opacity: 0.7;",
- "--lumex-hover-opacity: 0.8;",
- "}"
+ "--lumex-background: #fff;",
+ "--lumex-foreground-50: oklch(0.985 0 0);",
+ "--lumex-foreground-100: oklch(0.967 0.001 286.375);",
+ "--lumex-foreground-200: oklch(0.92 0.004 286.32);",
+ "--lumex-foreground-300: oklch(0.871 0.006 286.286);",
+ "--lumex-foreground-400: oklch(0.705 0.015 286.067);",
+ "--lumex-foreground-500: oklch(0.552 0.016 285.938);",
+ "--lumex-foreground-600: oklch(0.442 0.017 285.786);",
+ "--lumex-foreground-700: oklch(0.37 0.013 285.805);",
+ "--lumex-foreground-800: oklch(0.274 0.006 286.033);",
+ "--lumex-foreground-900: oklch(0.21 0.006 285.885);",
+ "--lumex-foreground-950: oklch(0.141 0.005 285.823);",
+ "--lumex-foreground: oklch(0.37 0.013 285.805);",
+ "--lumex-overlay: #000;",
+ "--lumex-focus: oklch(0.623 0.214 259.815);",
+ "--lumex-divider: oklch(0.21 0.006 285.885);",
+ "--lumex-surface1: #fff;",
+ "--lumex-surface1-foreground: oklch(0.21 0.006 285.885);",
+ "--lumex-surface2: oklch(0.967 0.001 286.375);",
+ "--lumex-surface2-foreground: oklch(0.274 0.006 286.033);",
+ "--lumex-surface3: oklch(0.92 0.004 286.32);",
+ "--lumex-surface3-foreground: oklch(0.37 0.013 285.805);",
+ "--lumex-default-50: oklch(0.985 0 0);",
+ "--lumex-default-100: oklch(0.967 0.001 286.375);",
+ "--lumex-default-200: oklch(0.92 0.004 286.32);",
+ "--lumex-default-300: oklch(0.871 0.006 286.286);",
+ "--lumex-default-400: oklch(0.705 0.015 286.067);",
+ "--lumex-default-500: oklch(0.552 0.016 285.938);",
+ "--lumex-default-600: oklch(0.442 0.017 285.786);",
+ "--lumex-default-700: oklch(0.37 0.013 285.805);",
+ "--lumex-default-800: oklch(0.274 0.006 286.033);",
+ "--lumex-default-900: oklch(0.21 0.006 285.885);",
+ "--lumex-default-950: oklch(0.141 0.005 285.823);",
+ "--lumex-default: oklch(0.871 0.006 286.286);",
+ "--lumex-default-foreground: #000;",
+ "--lumex-primary-50: oklch(0.97 0.014 254.604);",
+ "--lumex-primary-100: oklch(0.932 0.032 255.585);",
+ "--lumex-primary-200: oklch(0.882 0.059 254.128);",
+ "--lumex-primary-300: oklch(0.809 0.105 251.813);",
+ "--lumex-primary-400: oklch(0.707 0.165 254.624);",
+ "--lumex-primary-500: oklch(0.623 0.214 259.815);",
+ "--lumex-primary-600: oklch(0.546 0.245 262.881);",
+ "--lumex-primary-700: oklch(0.488 0.243 264.376);",
+ "--lumex-primary-800: oklch(0.424 0.199 265.638);",
+ "--lumex-primary-900: oklch(0.379 0.146 265.522);",
+ "--lumex-primary-950: oklch(0.282 0.091 267.935);",
+ "--lumex-primary: oklch(0.623 0.214 259.815);",
+ "--lumex-primary-foreground: #fff;",
+ "--lumex-secondary-50: oklch(0.969 0.016 293.756);",
+ "--lumex-secondary-100: oklch(0.943 0.029 294.588);",
+ "--lumex-secondary-200: oklch(0.894 0.057 293.283);",
+ "--lumex-secondary-300: oklch(0.811 0.111 293.571);",
+ "--lumex-secondary-400: oklch(0.702 0.183 293.541);",
+ "--lumex-secondary-500: oklch(0.606 0.25 292.717);",
+ "--lumex-secondary-600: oklch(0.541 0.281 293.009);",
+ "--lumex-secondary-700: oklch(0.491 0.27 292.581);",
+ "--lumex-secondary-800: oklch(0.432 0.232 292.759);",
+ "--lumex-secondary-900: oklch(0.38 0.189 293.745);",
+ "--lumex-secondary-950: oklch(0.283 0.141 291.089);",
+ "--lumex-secondary: oklch(0.606 0.25 292.717);",
+ "--lumex-secondary-foreground: #fff;",
+ "--lumex-success-50: oklch(0.982 0.018 155.826);",
+ "--lumex-success-100: oklch(0.962 0.044 156.743);",
+ "--lumex-success-200: oklch(0.925 0.084 155.995);",
+ "--lumex-success-300: oklch(0.871 0.15 154.449);",
+ "--lumex-success-400: oklch(0.792 0.209 151.711);",
+ "--lumex-success-500: oklch(0.723 0.219 149.579);",
+ "--lumex-success-600: oklch(0.627 0.194 149.214);",
+ "--lumex-success-700: oklch(0.527 0.154 150.069);",
+ "--lumex-success-800: oklch(0.448 0.119 151.328);",
+ "--lumex-success-900: oklch(0.393 0.095 152.535);",
+ "--lumex-success-950: oklch(0.266 0.065 152.934);",
+ "--lumex-success: oklch(0.723 0.219 149.579);",
+ "--lumex-success-foreground: #000;",
+ "--lumex-warning-50: oklch(0.987 0.022 95.277);",
+ "--lumex-warning-100: oklch(0.962 0.059 95.617);",
+ "--lumex-warning-200: oklch(0.924 0.12 95.746);",
+ "--lumex-warning-300: oklch(0.879 0.169 91.605);",
+ "--lumex-warning-400: oklch(0.828 0.189 84.429);",
+ "--lumex-warning-500: oklch(0.769 0.188 70.08);",
+ "--lumex-warning-600: oklch(0.666 0.179 58.318);",
+ "--lumex-warning-700: oklch(0.555 0.163 48.998);",
+ "--lumex-warning-800: oklch(0.473 0.137 46.201);",
+ "--lumex-warning-900: oklch(0.414 0.112 45.904);",
+ "--lumex-warning-950: oklch(0.279 0.077 45.635);",
+ "--lumex-warning: oklch(0.769 0.188 70.08);",
+ "--lumex-warning-foreground: #000;",
+ "--lumex-danger-50: oklch(0.969 0.015 12.422);",
+ "--lumex-danger-100: oklch(0.941 0.03 12.58);",
+ "--lumex-danger-200: oklch(0.892 0.058 10.001);",
+ "--lumex-danger-300: oklch(0.81 0.117 11.638);",
+ "--lumex-danger-400: oklch(0.712 0.194 13.428);",
+ "--lumex-danger-500: oklch(0.645 0.246 16.439);",
+ "--lumex-danger-600: oklch(0.586 0.253 17.585);",
+ "--lumex-danger-700: oklch(0.514 0.222 16.935);",
+ "--lumex-danger-800: oklch(0.455 0.188 13.697);",
+ "--lumex-danger-900: oklch(0.41 0.159 10.272);",
+ "--lumex-danger-950: oklch(0.271 0.105 12.094);",
+ "--lumex-danger: oklch(0.645 0.246 16.439);",
+ "--lumex-danger-foreground: #fff;",
+ "--lumex-info-50: oklch(0.977 0.013 236.62);",
+ "--lumex-info-100: oklch(0.951 0.026 236.824);",
+ "--lumex-info-200: oklch(0.901 0.058 230.902);",
+ "--lumex-info-300: oklch(0.828 0.111 230.318);",
+ "--lumex-info-400: oklch(0.746 0.16 232.661);",
+ "--lumex-info-500: oklch(0.685 0.169 237.323);",
+ "--lumex-info-600: oklch(0.588 0.158 241.966);",
+ "--lumex-info-700: oklch(0.5 0.134 242.749);",
+ "--lumex-info-800: oklch(0.443 0.11 240.79);",
+ "--lumex-info-900: oklch(0.391 0.09 240.876);",
+ "--lumex-info-950: oklch(0.293 0.066 243.157);",
+ "--lumex-info: oklch(0.685 0.169 237.323);",
+ "--lumex-info-foreground: #000;",
+ "--lumex-font-sans: ;",
+ "--lumex-font-mono: ;",
+ "--lumex-font-size-tiny: .75rem;",
+ "--lumex-font-size-small: .875rem;",
+ "--lumex-font-size-medium: 1rem;",
+ "--lumex-font-size-large: 1.125rem;",
+ "--lumex-line-height-tiny: 1rem;",
+ "--lumex-line-height-small: 1.25rem;",
+ "--lumex-line-height-medium: 1.5rem;",
+ "--lumex-line-height-large: 1.75rem;",
+ "--lumex-radius-small: .375rem;",
+ "--lumex-radius-medium: .625rem;",
+ "--lumex-radius-large: .875rem;",
+ "--lumex-shadow-small: 0px 0px 5px 0px rgba(0,0,0,.02),0px 2px 10px 0px rgba(0,0,0,.06),0px 0px 1px 0px rgba(0,0,0,.15);",
+ "--lumex-shadow-medium: 0px 0px 15px 0px rgba(0,0,0,.03),0px 2px 30px 0px rgba(0,0,0,.08),0px 0px 1px 0px rgba(0,0,0,.15);",
+ "--lumex-shadow-large: 0px 0px 20px 0px rgba(0,0,0,.04),0px 2px 50px 0px rgba(0,0,0,.1),0px 0px 1px 0px rgba(0,0,0,.15);",
+ "--lumex-opacity-divider: 15%;",
+ "--lumex-opacity-disabled: 60%;",
+ "--lumex-opacity-focus: 70%;",
+ "--lumex-opacity-hover: 80%;",
+ "}"
).ToString();
styleNodes[0].InnerHtml.Trim().Should().BeEquivalentTo( expectedCssVars );