diff --git a/.vscode/settings.json b/.vscode/settings.json
index 66b252e97..64b9bd6f0 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -4,5 +4,12 @@
"source.organizeImports.biome": "explicit",
"quickfix.biome": "explicit"
},
- "editor.defaultFormatter": "biomejs.biome"
+ "editor.defaultFormatter": "biomejs.biome",
+ "[typescript]": {
+ "editor.defaultFormatter": "biomejs.biome"
+ },
+ "tailwindCSS.experimental.classRegex": [
+ ["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"],
+ ["cx\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"]
+ ]
}
diff --git a/package.json b/package.json
index c7c7f7e21..5d5b94403 100644
--- a/package.json
+++ b/package.json
@@ -103,6 +103,7 @@
"@electron/remote": "2.1.2",
"@primer/octicons-react": "19.10.0",
"axios": "1.7.2",
+ "class-variance-authority": "^0.7.0",
"clsx": "2.1.1",
"date-fns": "3.6.0",
"electron-updater": "6.2.1",
@@ -113,6 +114,7 @@
"react-dom": "18.3.1",
"react-final-form": "6.5.9",
"react-router-dom": "6.24.1",
+ "tailwind-merge": "^2.3.0",
"ts-loader": "9.5.1",
"typescript": "5.5.3"
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8b018a947..cce9ceed9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -17,6 +17,9 @@ importers:
axios:
specifier: 1.7.2
version: 1.7.2
+ class-variance-authority:
+ specifier: ^0.7.0
+ version: 0.7.0
clsx:
specifier: 2.1.1
version: 2.1.1
@@ -47,6 +50,9 @@ importers:
react-router-dom:
specifier: 6.24.1
version: 6.24.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ tailwind-merge:
+ specifier: ^2.3.0
+ version: 2.3.0
ts-loader:
specifier: 9.5.1
version: 9.5.1(typescript@5.5.3)(webpack@5.92.1(webpack-cli@5.1.4))
@@ -1082,6 +1088,9 @@ packages:
cjs-module-lexer@1.2.3:
resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==}
+ class-variance-authority@0.7.0:
+ resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==}
+
cli-truncate@2.1.0:
resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
engines: {node: '>=8'}
@@ -1097,6 +1106,10 @@ packages:
clone-response@1.0.3:
resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
+ clsx@2.0.0:
+ resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
+ engines: {node: '>=6'}
+
clsx@2.1.1:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
@@ -2815,6 +2828,9 @@ packages:
symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
+ tailwind-merge@2.3.0:
+ resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==}
+
tailwindcss@3.4.4:
resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==}
engines: {node: '>=14.0.0'}
@@ -4389,6 +4405,10 @@ snapshots:
cjs-module-lexer@1.2.3: {}
+ class-variance-authority@0.7.0:
+ dependencies:
+ clsx: 2.0.0
+
cli-truncate@2.1.0:
dependencies:
slice-ansi: 3.0.0
@@ -4411,6 +4431,8 @@ snapshots:
dependencies:
mimic-response: 1.0.1
+ clsx@2.0.0: {}
+
clsx@2.1.1: {}
co@4.6.0: {}
@@ -6272,6 +6294,10 @@ snapshots:
symbol-tree@3.2.4: {}
+ tailwind-merge@2.3.0:
+ dependencies:
+ '@babel/runtime': 7.24.1
+
tailwindcss@3.4.4(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.5.3)):
dependencies:
'@alloc/quick-lru': 5.2.0
diff --git a/src/components/__snapshots__/Sidebar.test.tsx.snap b/src/components/__snapshots__/Sidebar.test.tsx.snap
index e16d94651..0af5dada7 100644
--- a/src/components/__snapshots__/Sidebar.test.tsx.snap
+++ b/src/components/__snapshots__/Sidebar.test.tsx.snap
@@ -63,7 +63,7 @@ exports[`components/Sidebar.tsx should render itself & its children (logged in)