Home

tailwind-ctp-intellisense @master - refs - log -
-
https://git.jolheiser.com/tailwind-ctp-intellisense.git
Tailwind intellisense + Catppuccin
tree log patch
Merge pull request #630 from tailwindlabs/next Theme helper improvements, support `@config`, adopt `getVariants`, bump bundled modules
Signature
-----BEGIN PGP SIGNATURE----- wsBcBAABCAAQBQJjTv1oCRBK7hj4Ov3rIwAAcyoIAGgOuFkvRyLLq7PMNEdsBA8J K4PgLS/ih0eMZNXJE90I/bhRPnw+rN1AOIfJ6fLNLnATNqbkdmCTTgH+VVNjuBoL AffDI0Ysw7gRqhz5jOXLj40VupokVPTW3mHbVz2FjJSi6OtRX/Ryhu59l7xoi2kb SvuZauKOGv4jE3zPlAI6SeXKS2x8yZjcVTrRTz9Men04fHZEDmLbeC1KB4LozSJV Uz8qYlwzfBppllgN3endZVkapo2IqGikacl6lCEzRicN2kujhhXIC4UN4RzoCJT6 bSijGoy5x2rbTYCL+MvueRwbPMuHOLpgv4U3EVzglftWYmFRHjRBDzGG9A1QSTM= =P1tM -----END PGP SIGNATURE-----
Brad Cornes <hello@bradley.dev>
2 years ago
15 changed files, 1209 additions(+), 869 deletions(-)
M package-lock.jsonpackage-lock.json
diff --git a/package-lock.json b/package-lock.json
index 214efe53dbd66817a49c34285543a4f169244a78..36411470311d5a4d384703b0c88c62698fee2a6b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,10 +7,10 @@ 		"": {
 			"name": "root",
 			"dependencies": {
 				"@parcel/watcher": "2.0.3",
-				"@tailwindcss/aspect-ratio": "0.4.0",
-				"@tailwindcss/forms": "0.4.0",
-				"@tailwindcss/line-clamp": "0.3.0",
-				"@tailwindcss/typography": "0.5.0",
+				"@tailwindcss/aspect-ratio": "0.4.2",
+				"@tailwindcss/forms": "0.5.3",
+				"@tailwindcss/line-clamp": "0.4.2",
+				"@tailwindcss/typography": "0.5.7",
 				"@types/debounce": "1.2.0",
 				"@types/moo": "0.5.3",
 				"@types/node": "14.14.34",
@@ -49,7 +49,7 @@ 				"semver": "7.3.7",
 				"sift-string": "0.0.2",
 				"stack-trace": "0.0.10",
 				"stringify-object": "3.3.0",
-				"tailwindcss": "3.0.11",
+				"tailwindcss": "3.1.8",
 				"tmp-cache": "1.1.0",
 				"tsdx": "0.14.1",
 				"tslib": "2.2.0",
@@ -92,28 +92,28 @@ 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/compat-data": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz",
-			"integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz",
+			"integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==",
 			"engines": {
 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/core": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz",
-			"integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==",
+			"version": "7.19.3",
+			"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz",
+			"integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==",
 			"dependencies": {
 				"@ampproject/remapping": "^2.1.0",
 				"@babel/code-frame": "^7.18.6",
-				"@babel/generator": "^7.19.0",
-				"@babel/helper-compilation-targets": "^7.19.0",
+				"@babel/generator": "^7.19.3",
+				"@babel/helper-compilation-targets": "^7.19.3",
 				"@babel/helper-module-transforms": "^7.19.0",
 				"@babel/helpers": "^7.19.0",
-				"@babel/parser": "^7.19.0",
+				"@babel/parser": "^7.19.3",
 				"@babel/template": "^7.18.10",
-				"@babel/traverse": "^7.19.0",
-				"@babel/types": "^7.19.0",
+				"@babel/traverse": "^7.19.3",
+				"@babel/types": "^7.19.3",
 				"convert-source-map": "^1.7.0",
 				"debug": "^4.1.0",
 				"gensync": "^1.0.0-beta.2",
@@ -137,11 +137,11 @@ 				"semver": "bin/semver.js"
 			}
 		},
 		"node_modules/@babel/generator": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz",
-			"integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==",
+			"version": "7.19.5",
+			"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz",
+			"integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==",
 			"dependencies": {
-				"@babel/types": "^7.19.0",
+				"@babel/types": "^7.19.4",
 				"@jridgewell/gen-mapping": "^0.3.2",
 				"jsesc": "^2.5.1"
 			},
@@ -186,13 +186,13 @@ 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/helper-compilation-targets": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz",
-			"integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==",
+			"version": "7.19.3",
+			"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz",
+			"integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==",
 			"dependencies": {
-				"@babel/compat-data": "^7.19.0",
+				"@babel/compat-data": "^7.19.3",
 				"@babel/helper-validator-option": "^7.18.6",
-				"browserslist": "^4.20.2",
+				"browserslist": "^4.21.3",
 				"semver": "^6.3.0"
 			},
 			"engines": {
@@ -388,26 +388,26 @@ 				"@babel/core": "^7.0.0"
 			}
 		},
 		"node_modules/@babel/helper-replace-supers": {
-			"version": "7.18.9",
-			"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
-			"integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
+			"version": "7.19.1",
+			"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz",
+			"integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==",
 			"dependencies": {
 				"@babel/helper-environment-visitor": "^7.18.9",
 				"@babel/helper-member-expression-to-functions": "^7.18.9",
 				"@babel/helper-optimise-call-expression": "^7.18.6",
-				"@babel/traverse": "^7.18.9",
-				"@babel/types": "^7.18.9"
+				"@babel/traverse": "^7.19.1",
+				"@babel/types": "^7.19.0"
 			},
 			"engines": {
 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/helper-simple-access": {
-			"version": "7.18.6",
-			"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
-			"integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz",
+			"integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==",
 			"dependencies": {
-				"@babel/types": "^7.18.6"
+				"@babel/types": "^7.19.4"
 			},
 			"engines": {
 				"node": ">=6.9.0"
@@ -436,17 +436,17 @@ 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/helper-string-parser": {
-			"version": "7.18.10",
-			"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
-			"integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
+			"integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
 			"engines": {
 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/helper-validator-identifier": {
-			"version": "7.18.6",
-			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
-			"integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
+			"version": "7.19.1",
+			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+			"integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
 			"engines": {
 				"node": ">=6.9.0"
 			}
@@ -474,13 +474,13 @@ 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/helpers": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz",
-			"integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz",
+			"integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==",
 			"dependencies": {
 				"@babel/template": "^7.18.10",
-				"@babel/traverse": "^7.19.0",
-				"@babel/types": "^7.19.0"
+				"@babel/traverse": "^7.19.4",
+				"@babel/types": "^7.19.4"
 			},
 			"engines": {
 				"node": ">=6.9.0"
@@ -556,9 +556,9 @@ 				"node": ">=4"
 			}
 		},
 		"node_modules/@babel/parser": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz",
-			"integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz",
+			"integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==",
 			"bin": {
 				"parser": "bin/babel-parser.js"
 			},
@@ -597,9 +597,9 @@ 				"@babel/core": "^7.13.0"
 			}
 		},
 		"node_modules/@babel/plugin-proposal-async-generator-functions": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.0.tgz",
-			"integrity": "sha512-nhEByMUTx3uZueJ/QkJuSlCfN4FGg+xy+vRsfGQGzSauq5ks2Deid2+05Q3KhfaUjvec1IGhw/Zm3cFm8JigTQ==",
+			"version": "7.19.1",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz",
+			"integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==",
 			"dependencies": {
 				"@babel/helper-environment-visitor": "^7.18.9",
 				"@babel/helper-plugin-utils": "^7.19.0",
@@ -735,13 +735,13 @@ 				"@babel/core": "^7.0.0-0"
 			}
 		},
 		"node_modules/@babel/plugin-proposal-object-rest-spread": {
-			"version": "7.18.9",
-			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz",
-			"integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz",
+			"integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==",
 			"dependencies": {
-				"@babel/compat-data": "^7.18.8",
-				"@babel/helper-compilation-targets": "^7.18.9",
-				"@babel/helper-plugin-utils": "^7.18.9",
+				"@babel/compat-data": "^7.19.4",
+				"@babel/helper-compilation-targets": "^7.19.3",
+				"@babel/helper-plugin-utils": "^7.19.0",
 				"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
 				"@babel/plugin-transform-parameters": "^7.18.8"
 			},
@@ -1074,11 +1074,11 @@ 				"@babel/core": "^7.0.0-0"
 			}
 		},
 		"node_modules/@babel/plugin-transform-block-scoping": {
-			"version": "7.18.9",
-			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
-			"integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz",
+			"integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==",
 			"dependencies": {
-				"@babel/helper-plugin-utils": "^7.18.9"
+				"@babel/helper-plugin-utils": "^7.19.0"
 			},
 			"engines": {
 				"node": ">=6.9.0"
@@ -1124,11 +1124,11 @@ 				"@babel/core": "^7.0.0-0"
 			}
 		},
 		"node_modules/@babel/plugin-transform-destructuring": {
-			"version": "7.18.13",
-			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz",
-			"integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz",
+			"integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==",
 			"dependencies": {
-				"@babel/helper-plugin-utils": "^7.18.9"
+				"@babel/helper-plugin-utils": "^7.19.0"
 			},
 			"engines": {
 				"node": ">=6.9.0"
@@ -1306,9 +1306,9 @@ 				"@babel/core": "^7.0.0-0"
 			}
 		},
 		"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.0.tgz",
-			"integrity": "sha512-HDSuqOQzkU//kfGdiHBt71/hkDTApw4U/cMVgKgX7PqfB3LOaK+2GtCEsBu1dL9CkswDm0Gwehht1dCr421ULQ==",
+			"version": "7.19.1",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz",
+			"integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==",
 			"dependencies": {
 				"@babel/helper-create-regexp-features-plugin": "^7.19.0",
 				"@babel/helper-plugin-utils": "^7.19.0"
@@ -1507,17 +1507,17 @@ 				"@babel/core": "^7.0.0-0"
 			}
 		},
 		"node_modules/@babel/preset-env": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.0.tgz",
-			"integrity": "sha512-1YUju1TAFuzjIQqNM9WsF4U6VbD/8t3wEAlw3LFYuuEr+ywqLRcSXxFKz4DCEj+sN94l/XTDiUXYRrsvMpz9WQ==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz",
+			"integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==",
 			"dependencies": {
-				"@babel/compat-data": "^7.19.0",
-				"@babel/helper-compilation-targets": "^7.19.0",
+				"@babel/compat-data": "^7.19.4",
+				"@babel/helper-compilation-targets": "^7.19.3",
 				"@babel/helper-plugin-utils": "^7.19.0",
 				"@babel/helper-validator-option": "^7.18.6",
 				"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
 				"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9",
-				"@babel/plugin-proposal-async-generator-functions": "^7.19.0",
+				"@babel/plugin-proposal-async-generator-functions": "^7.19.1",
 				"@babel/plugin-proposal-class-properties": "^7.18.6",
 				"@babel/plugin-proposal-class-static-block": "^7.18.6",
 				"@babel/plugin-proposal-dynamic-import": "^7.18.6",
@@ -1526,7 +1526,7 @@ 				"@babel/plugin-proposal-json-strings": "^7.18.6",
 				"@babel/plugin-proposal-logical-assignment-operators": "^7.18.9",
 				"@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
 				"@babel/plugin-proposal-numeric-separator": "^7.18.6",
-				"@babel/plugin-proposal-object-rest-spread": "^7.18.9",
+				"@babel/plugin-proposal-object-rest-spread": "^7.19.4",
 				"@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
 				"@babel/plugin-proposal-optional-chaining": "^7.18.9",
 				"@babel/plugin-proposal-private-methods": "^7.18.6",
@@ -1550,10 +1550,10 @@ 				"@babel/plugin-syntax-top-level-await": "^7.14.5",
 				"@babel/plugin-transform-arrow-functions": "^7.18.6",
 				"@babel/plugin-transform-async-to-generator": "^7.18.6",
 				"@babel/plugin-transform-block-scoped-functions": "^7.18.6",
-				"@babel/plugin-transform-block-scoping": "^7.18.9",
+				"@babel/plugin-transform-block-scoping": "^7.19.4",
 				"@babel/plugin-transform-classes": "^7.19.0",
 				"@babel/plugin-transform-computed-properties": "^7.18.9",
-				"@babel/plugin-transform-destructuring": "^7.18.13",
+				"@babel/plugin-transform-destructuring": "^7.19.4",
 				"@babel/plugin-transform-dotall-regex": "^7.18.6",
 				"@babel/plugin-transform-duplicate-keys": "^7.18.9",
 				"@babel/plugin-transform-exponentiation-operator": "^7.18.6",
@@ -1565,7 +1565,7 @@ 				"@babel/plugin-transform-modules-amd": "^7.18.6",
 				"@babel/plugin-transform-modules-commonjs": "^7.18.6",
 				"@babel/plugin-transform-modules-systemjs": "^7.19.0",
 				"@babel/plugin-transform-modules-umd": "^7.18.6",
-				"@babel/plugin-transform-named-capturing-groups-regex": "^7.19.0",
+				"@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1",
 				"@babel/plugin-transform-new-target": "^7.18.6",
 				"@babel/plugin-transform-object-super": "^7.18.6",
 				"@babel/plugin-transform-parameters": "^7.18.8",
@@ -1580,11 +1580,11 @@ 				"@babel/plugin-transform-typeof-symbol": "^7.18.9",
 				"@babel/plugin-transform-unicode-escapes": "^7.18.10",
 				"@babel/plugin-transform-unicode-regex": "^7.18.6",
 				"@babel/preset-modules": "^0.1.5",
-				"@babel/types": "^7.19.0",
-				"babel-plugin-polyfill-corejs2": "^0.3.2",
-				"babel-plugin-polyfill-corejs3": "^0.5.3",
-				"babel-plugin-polyfill-regenerator": "^0.4.0",
-				"core-js-compat": "^3.22.1",
+				"@babel/types": "^7.19.4",
+				"babel-plugin-polyfill-corejs2": "^0.3.3",
+				"babel-plugin-polyfill-corejs3": "^0.6.0",
+				"babel-plugin-polyfill-regenerator": "^0.4.1",
+				"core-js-compat": "^3.25.1",
 				"semver": "^6.3.0"
 			},
 			"engines": {
@@ -1629,9 +1629,9 @@ 				"@babel/core": "^7.0.0-0"
 			}
 		},
 		"node_modules/@babel/runtime": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
-			"integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz",
+			"integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==",
 			"dependencies": {
 				"regenerator-runtime": "^0.13.4"
 			},
@@ -1640,11 +1640,11 @@ 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/runtime-corejs3": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.0.tgz",
-			"integrity": "sha512-JyXXoCu1N8GLuKc2ii8y5RGma5FMpFeO2nAQIe0Yzrbq+rQnN+sFj47auLblR5ka6aHNGPDgv8G/iI2Grb0ldQ==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.4.tgz",
+			"integrity": "sha512-HzjQ8+dzdx7dmZy4DQ8KV8aHi/74AjEbBGTFutBmg/pd3dY5/q1sfuOGPTFGEytlQhWoeVXqcK5BwMgIkRkNDQ==",
 			"dependencies": {
-				"core-js-pure": "^3.20.2",
+				"core-js-pure": "^3.25.1",
 				"regenerator-runtime": "^0.13.4"
 			},
 			"engines": {
@@ -1665,18 +1665,18 @@ 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/traverse": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz",
-			"integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz",
+			"integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==",
 			"dependencies": {
 				"@babel/code-frame": "^7.18.6",
-				"@babel/generator": "^7.19.0",
+				"@babel/generator": "^7.19.4",
 				"@babel/helper-environment-visitor": "^7.18.9",
 				"@babel/helper-function-name": "^7.19.0",
 				"@babel/helper-hoist-variables": "^7.18.6",
 				"@babel/helper-split-export-declaration": "^7.18.6",
-				"@babel/parser": "^7.19.0",
-				"@babel/types": "^7.19.0",
+				"@babel/parser": "^7.19.4",
+				"@babel/types": "^7.19.4",
 				"debug": "^4.1.0",
 				"globals": "^11.1.0"
 			},
@@ -1685,12 +1685,12 @@ 				"node": ">=6.9.0"
 			}
 		},
 		"node_modules/@babel/types": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz",
-			"integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz",
+			"integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==",
 			"dependencies": {
-				"@babel/helper-string-parser": "^7.18.10",
-				"@babel/helper-validator-identifier": "^7.18.6",
+				"@babel/helper-string-parser": "^7.19.4",
+				"@babel/helper-validator-identifier": "^7.19.1",
 				"to-fast-properties": "^2.0.0"
 			},
 			"engines": {
@@ -2330,12 +2330,12 @@ 			"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
 			"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
 		},
 		"node_modules/@jridgewell/trace-mapping": {
-			"version": "0.3.15",
-			"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
-			"integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+			"version": "0.3.17",
+			"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+			"integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
 			"dependencies": {
-				"@jridgewell/resolve-uri": "^3.0.3",
-				"@jridgewell/sourcemap-codec": "^1.4.10"
+				"@jridgewell/resolve-uri": "3.1.0",
+				"@jridgewell/sourcemap-codec": "1.4.14"
 			}
 		},
 		"node_modules/@lerna/add": {
@@ -4585,17 +4585,17 @@ 				"type-detect": "4.0.8"
 			}
 		},
 		"node_modules/@tailwindcss/aspect-ratio": {
-			"version": "0.4.0",
-			"resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.0.tgz",
-			"integrity": "sha512-WJu0I4PpqNPuutpaA9zDUq2JXR+lorZ7PbLcKNLmb6GL9/HLfC7w3CRsMhJF4BbYd/lkY6CfXOvkYpuGnZfkpQ==",
+			"version": "0.4.2",
+			"resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz",
+			"integrity": "sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==",
 			"peerDependencies": {
 				"tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1"
 			}
 		},
 		"node_modules/@tailwindcss/forms": {
-			"version": "0.4.0",
-			"resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.4.0.tgz",
-			"integrity": "sha512-DeaQBx6EgEeuZPQACvC+mKneJsD8am1uiJugjgQK1+/Vt+Ai0GpFBC2T2fqnUad71WgOxyrZPE6BG1VaI6YqfQ==",
+			"version": "0.5.3",
+			"resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz",
+			"integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==",
 			"dependencies": {
 				"mini-svg-data-uri": "^1.2.3"
 			},
@@ -4604,25 +4604,37 @@ 				"tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1"
 			}
 		},
 		"node_modules/@tailwindcss/line-clamp": {
-			"version": "0.3.0",
-			"resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.3.0.tgz",
-			"integrity": "sha512-ffDDclrqr3sy8cpChCozedDUAN8enxqAiWeH8d4dGQ2hcXlxf51+7KleveFi/n/TxEuRVApoL7hICeDOdYPKpg==",
+			"version": "0.4.2",
+			"resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.2.tgz",
+			"integrity": "sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==",
 			"peerDependencies": {
 				"tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1"
 			}
 		},
 		"node_modules/@tailwindcss/typography": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.0.tgz",
-			"integrity": "sha512-1p/3C6C+JJziS/ghtG8ACYalbA2SyLJY27Pm33cVTlAoY6VQ7zfm2H64cPxUMBkVIlWXTtWHhZcZJPobMRmQAA==",
+			"version": "0.5.7",
+			"resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.7.tgz",
+			"integrity": "sha512-JTTSTrgZfp6Ki4svhPA4mkd9nmQ/j9EfE7SbHJ1cLtthKkpW2OxsFXzSmxbhYbEkfNIyAyhle5p4SYyKRbz/jg==",
 			"dependencies": {
 				"lodash.castarray": "^4.4.0",
 				"lodash.isplainobject": "^4.0.6",
 				"lodash.merge": "^4.6.2",
-				"lodash.uniq": "^4.5.0"
+				"postcss-selector-parser": "6.0.10"
 			},
 			"peerDependencies": {
-				"tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || insiders"
+				"tailwindcss": ">=3.0.0 || insiders"
+			}
+		},
+		"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==",
+			"dependencies": {
+				"cssesc": "^3.0.0",
+				"util-deprecate": "^1.0.2"
+			},
+			"engines": {
+				"node": ">=4"
 			}
 		},
 		"node_modules/@types/babel__core": {
@@ -4655,9 +4667,9 @@ 				"@babel/types": "^7.0.0"
 			}
 		},
 		"node_modules/@types/babel__traverse": {
-			"version": "7.18.1",
-			"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz",
-			"integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==",
+			"version": "7.18.2",
+			"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz",
+			"integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==",
 			"dependencies": {
 				"@babel/types": "^7.3.0"
 			}
@@ -5383,39 +5395,6 @@ 			"resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz",
 			"integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=",
 			"dev": true
 		},
-		"node_modules/autoprefixer": {
-			"version": "10.4.10",
-			"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.10.tgz",
-			"integrity": "sha512-nMaiDARyp1e74c8IeAXkr+BmFKa8By4Zak7tyaNPF09Iu39WFpNXOWrVirmXjKr+5cOyERwvtbMOLYz6iBJYgQ==",
-			"funding": [
-				{
-					"type": "opencollective",
-					"url": "https://opencollective.com/postcss/"
-				},
-				{
-					"type": "tidelift",
-					"url": "https://tidelift.com/funding/github/npm/autoprefixer"
-				}
-			],
-			"peer": true,
-			"dependencies": {
-				"browserslist": "^4.21.3",
-				"caniuse-lite": "^1.0.30001399",
-				"fraction.js": "^4.2.0",
-				"normalize-range": "^0.1.2",
-				"picocolors": "^1.0.0",
-				"postcss-value-parser": "^4.2.0"
-			},
-			"bin": {
-				"autoprefixer": "bin/autoprefixer"
-			},
-			"engines": {
-				"node": "^10 || ^12 || >=14"
-			},
-			"peerDependencies": {
-				"postcss": "^8.1.0"
-			}
-		},
 		"node_modules/aws-sign2": {
 			"version": "0.7.0",
 			"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -5557,9 +5536,9 @@ 				"node": ">=8"
 			}
 		},
 		"node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": {
-			"version": "5.2.0",
-			"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz",
-			"integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==",
+			"version": "5.2.1",
+			"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+			"integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
 			"dependencies": {
 				"@babel/core": "^7.12.3",
 				"@babel/parser": "^7.14.7",
@@ -5687,12 +5666,12 @@ 				"semver": "bin/semver.js"
 			}
 		},
 		"node_modules/babel-plugin-polyfill-corejs3": {
-			"version": "0.5.3",
-			"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz",
-			"integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==",
+			"version": "0.6.0",
+			"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz",
+			"integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==",
 			"dependencies": {
-				"@babel/helper-define-polyfill-provider": "^0.3.2",
-				"core-js-compat": "^3.21.0"
+				"@babel/helper-define-polyfill-provider": "^0.3.3",
+				"core-js-compat": "^3.25.1"
 			},
 			"peerDependencies": {
 				"@babel/core": "^7.0.0-0"
@@ -5894,9 +5873,9 @@ 			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
 			"integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg=="
 		},
 		"node_modules/browserslist": {
-			"version": "4.21.3",
-			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
-			"integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
+			"version": "4.21.4",
+			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+			"integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
 			"funding": [
 				{
 					"type": "opencollective",
@@ -5908,10 +5887,10 @@ 					"url": "https://tidelift.com/funding/github/npm/browserslist"
 				}
 			],
 			"dependencies": {
-				"caniuse-lite": "^1.0.30001370",
-				"electron-to-chromium": "^1.4.202",
+				"caniuse-lite": "^1.0.30001400",
+				"electron-to-chromium": "^1.4.251",
 				"node-releases": "^2.0.6",
-				"update-browserslist-db": "^1.0.5"
+				"update-browserslist-db": "^1.0.9"
 			},
 			"bin": {
 				"browserslist": "cli.js"
@@ -6148,9 +6127,9 @@ 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
 		"node_modules/caniuse-lite": {
-			"version": "1.0.30001399",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001399.tgz",
-			"integrity": "sha512-4vQ90tMKS+FkvuVWS5/QY1+d805ODxZiKFzsU8o/RsVJz49ZSRR8EjykLJbqhzdPgadbX6wB538wOzle3JniRA==",
+			"version": "1.0.30001421",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001421.tgz",
+			"integrity": "sha512-Sw4eLbgUJAEhjLs1Fa+mk45sidp1wRn5y6GtDpHGBaNJ9OCDJaVh2tIaWWUnGfuXfKf1JCBaIarak3FkVAvEeA==",
 			"funding": [
 				{
 					"type": "opencollective",
@@ -7137,12 +7116,9 @@ 				"node": ">=4"
 			}
 		},
 		"node_modules/convert-source-map": {
-			"version": "1.8.0",
-			"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
-			"integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
-			"dependencies": {
-				"safe-buffer": "~5.1.1"
-			}
+			"version": "1.9.0",
+			"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+			"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
 		},
 		"node_modules/copy-concurrently": {
 			"version": "1.0.5",
@@ -7185,11 +7161,11 @@ 				"node": ">=0.10.0"
 			}
 		},
 		"node_modules/core-js-compat": {
-			"version": "3.25.1",
-			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.1.tgz",
-			"integrity": "sha512-pOHS7O0i8Qt4zlPW/eIFjwp+NrTPx+wTL0ctgI2fHn31sZOq89rDsmtc/A2vAX7r6shl+bmVI+678He46jgBlw==",
+			"version": "3.25.5",
+			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz",
+			"integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==",
 			"dependencies": {
-				"browserslist": "^4.21.3"
+				"browserslist": "^4.21.4"
 			},
 			"funding": {
 				"type": "opencollective",
@@ -7197,9 +7173,9 @@ 				"url": "https://opencollective.com/core-js"
 			}
 		},
 		"node_modules/core-js-pure": {
-			"version": "3.25.1",
-			"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.1.tgz",
-			"integrity": "sha512-7Fr74bliUDdeJCBMxkkIuQ4xfxn/SwrVg+HkJUAoNEXVqYLv55l6Af0dJ5Lq2YBUW9yKqSkLXaS5SYPK6MGa/A==",
+			"version": "3.25.5",
+			"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.5.tgz",
+			"integrity": "sha512-oml3M22pHM+igfWHDfdLVq2ShWmjM2V4L+dQEBs0DWVIqEm9WHCwGAlZ6BmyBQGy5sFrJmcx+856D9lVKyGWYg==",
 			"hasInstallScript": true,
 			"funding": {
 				"type": "opencollective",
@@ -7514,9 +7490,12 @@ 				"node": ">=0.10.0"
 			}
 		},
 		"node_modules/defined": {
-			"version": "1.0.0",
-			"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
-			"integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ=="
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
+			"integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==",
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
 		},
 		"node_modules/delayed-stream": {
 			"version": "1.0.0",
@@ -7756,9 +7735,9 @@ 				"safer-buffer": "^2.1.0"
 			}
 		},
 		"node_modules/electron-to-chromium": {
-			"version": "1.4.248",
-			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.248.tgz",
-			"integrity": "sha512-qShjzEYpa57NnhbW2K+g+Fl+eNoDvQ7I+2MRwWnU6Z6F0HhXekzsECCLv+y2OJUsRodjqoSfwHkIX42VUFtUzg=="
+			"version": "1.4.284",
+			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+			"integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
 		},
 		"node_modules/emoji-regex": {
 			"version": "9.2.2",
@@ -8501,9 +8480,9 @@ 				}
 			}
 		},
 		"node_modules/eslint-plugin-react": {
-			"version": "7.31.8",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz",
-			"integrity": "sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==",
+			"version": "7.31.10",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz",
+			"integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==",
 			"dependencies": {
 				"array-includes": "^3.1.5",
 				"array.prototype.flatmap": "^1.3.0",
@@ -9403,9 +9382,9 @@ 				"reusify": "^1.0.4"
 			}
 		},
 		"node_modules/fb-watchman": {
-			"version": "2.0.1",
-			"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
-			"integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+			"integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
 			"dependencies": {
 				"bser": "2.1.1"
 			}
@@ -9588,19 +9567,6 @@ 				"mime-types": "^2.1.12"
 			},
 			"engines": {
 				"node": ">= 0.12"
-			}
-		},
-		"node_modules/fraction.js": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
-			"integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
-			"peer": true,
-			"engines": {
-				"node": "*"
-			},
-			"funding": {
-				"type": "patreon",
-				"url": "https://www.patreon.com/infusion"
 			}
 		},
 		"node_modules/fragment-cache": {
@@ -13976,7 +13942,8 @@ 		},
 		"node_modules/lodash.uniq": {
 			"version": "4.5.0",
 			"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
-			"integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
+			"integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+			"dev": true
 		},
 		"node_modules/log-symbols": {
 			"version": "3.0.0",
@@ -14921,15 +14888,6 @@ 			"engines": {
 				"node": ">=0.10.0"
 			}
 		},
-		"node_modules/normalize-range": {
-			"version": "0.1.2",
-			"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-			"integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
-			"peer": true,
-			"engines": {
-				"node": ">=0.10.0"
-			}
-		},
 		"node_modules/normalize-url": {
 			"version": "3.3.0",
 			"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
@@ -15185,9 +15143,9 @@ 				"node": ">=0.10.0"
 			}
 		},
 		"node_modules/object-hash": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
-			"integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+			"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
 			"engines": {
 				"node": ">= 6"
 			}
@@ -16040,6 +15998,22 @@ 				"type": "opencollective",
 				"url": "https://opencollective.com/postcss/"
 			}
 		},
+		"node_modules/postcss-import": {
+			"version": "14.1.0",
+			"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
+			"integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
+			"dependencies": {
+				"postcss-value-parser": "^4.0.0",
+				"read-cache": "^1.0.0",
+				"resolve": "^1.1.7"
+			},
+			"engines": {
+				"node": ">=10.0.0"
+			},
+			"peerDependencies": {
+				"postcss": "^8.0.0"
+			}
+		},
 		"node_modules/postcss-js": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
@@ -16532,6 +16506,22 @@ 			"engines": {
 				"node": ">=0.8"
 			}
 		},
+		"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==",
+			"dependencies": {
+				"pify": "^2.3.0"
+			}
+		},
+		"node_modules/read-cache/node_modules/pify": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+			"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
 		"node_modules/read-cmd-shim": {
 			"version": "1.0.5",
 			"resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz",
@@ -16819,9 +16809,9 @@ 			"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
 			"integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
 		},
 		"node_modules/regenerate-unicode-properties": {
-			"version": "10.0.1",
-			"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
-			"integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
+			"version": "10.1.0",
+			"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+			"integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
 			"dependencies": {
 				"regenerate": "^1.4.2"
 			},
@@ -16830,9 +16820,9 @@ 				"node": ">=4"
 			}
 		},
 		"node_modules/regenerator-runtime": {
-			"version": "0.13.9",
-			"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
-			"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
+			"version": "0.13.10",
+			"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz",
+			"integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw=="
 		},
 		"node_modules/regenerator-transform": {
 			"version": "0.15.0",
@@ -16882,14 +16872,14 @@ 				"url": "https://github.com/sponsors/mysticatea"
 			}
 		},
 		"node_modules/regexpu-core": {
-			"version": "5.1.0",
-			"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
-			"integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
+			"version": "5.2.1",
+			"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz",
+			"integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==",
 			"dependencies": {
 				"regenerate": "^1.4.2",
-				"regenerate-unicode-properties": "^10.0.1",
-				"regjsgen": "^0.6.0",
-				"regjsparser": "^0.8.2",
+				"regenerate-unicode-properties": "^10.1.0",
+				"regjsgen": "^0.7.1",
+				"regjsparser": "^0.9.1",
 				"unicode-match-property-ecmascript": "^2.0.0",
 				"unicode-match-property-value-ecmascript": "^2.0.0"
 			},
@@ -16898,14 +16888,14 @@ 				"node": ">=4"
 			}
 		},
 		"node_modules/regjsgen": {
-			"version": "0.6.0",
-			"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
-			"integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA=="
+			"version": "0.7.1",
+			"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
+			"integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA=="
 		},
 		"node_modules/regjsparser": {
-			"version": "0.8.4",
-			"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
-			"integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
+			"version": "0.9.1",
+			"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+			"integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
 			"dependencies": {
 				"jsesc": "~0.5.0"
 			},
@@ -18839,30 +18829,32 @@ 				"node": ">=6"
 			}
 		},
 		"node_modules/tailwindcss": {
-			"version": "3.0.11",
-			"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.11.tgz",
-			"integrity": "sha512-JyMsQ2kPqpOvG8ow535XpauXj3wz3nQqcy2tVlXj4FQ0eNlsdzvlAqpRA3q5rPLboWirNG6r2DqKczwjW2uc8Q==",
+			"version": "3.1.8",
+			"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz",
+			"integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==",
 			"dependencies": {
-				"arg": "^5.0.1",
-				"chalk": "^4.1.2",
-				"chokidar": "^3.5.2",
+				"arg": "^5.0.2",
+				"chokidar": "^3.5.3",
 				"color-name": "^1.1.4",
-				"cosmiconfig": "^7.0.1",
-				"detective": "^5.2.0",
+				"detective": "^5.2.1",
 				"didyoumean": "^1.2.2",
 				"dlv": "^1.1.3",
-				"fast-glob": "^3.2.7",
+				"fast-glob": "^3.2.11",
 				"glob-parent": "^6.0.2",
 				"is-glob": "^4.0.3",
+				"lilconfig": "^2.0.6",
 				"normalize-path": "^3.0.0",
-				"object-hash": "^2.2.0",
+				"object-hash": "^3.0.0",
+				"picocolors": "^1.0.0",
+				"postcss": "^8.4.14",
+				"postcss-import": "^14.1.0",
 				"postcss-js": "^4.0.0",
-				"postcss-load-config": "^3.1.0",
+				"postcss-load-config": "^3.1.4",
 				"postcss-nested": "5.0.6",
-				"postcss-selector-parser": "^6.0.7",
+				"postcss-selector-parser": "^6.0.10",
 				"postcss-value-parser": "^4.2.0",
 				"quick-lru": "^5.1.1",
-				"resolve": "^1.20.0"
+				"resolve": "^1.22.1"
 			},
 			"bin": {
 				"tailwind": "lib/cli.js",
@@ -18872,7 +18864,6 @@ 			"engines": {
 				"node": ">=12.13.0"
 			},
 			"peerDependencies": {
-				"autoprefixer": "^10.0.2",
 				"postcss": "^8.0.9"
 			}
 		},
@@ -18913,19 +18904,20 @@ 			"engines": {
 				"node": ">= 6"
 			}
 		},
-		"node_modules/tailwindcss/node_modules/cosmiconfig": {
-			"version": "7.0.1",
-			"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
-			"integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+		"node_modules/tailwindcss/node_modules/detective": {
+			"version": "5.2.1",
+			"resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
+			"integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
 			"dependencies": {
-				"@types/parse-json": "^4.0.0",
-				"import-fresh": "^3.2.1",
-				"parse-json": "^5.0.0",
-				"path-type": "^4.0.0",
-				"yaml": "^1.10.0"
+				"acorn-node": "^1.8.2",
+				"defined": "^1.0.0",
+				"minimist": "^1.2.6"
+			},
+			"bin": {
+				"detective": "bin/detective.js"
 			},
 			"engines": {
-				"node": ">=10"
+				"node": ">=0.8.0"
 			}
 		},
 		"node_modules/tailwindcss/node_modules/fast-glob": {
@@ -18965,44 +18957,27 @@ 			"engines": {
 				"node": ">=10.13.0"
 			}
 		},
-		"node_modules/tailwindcss/node_modules/import-fresh": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-			"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+		"node_modules/tailwindcss/node_modules/postcss": {
+			"version": "8.4.18",
+			"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz",
+			"integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==",
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/postcss/"
+				},
+				{
+					"type": "tidelift",
+					"url": "https://tidelift.com/funding/github/npm/postcss"
+				}
+			],
 			"dependencies": {
-				"parent-module": "^1.0.0",
-				"resolve-from": "^4.0.0"
+				"nanoid": "^3.3.4",
+				"picocolors": "^1.0.0",
+				"source-map-js": "^1.0.2"
 			},
 			"engines": {
-				"node": ">=6"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/sindresorhus"
-			}
-		},
-		"node_modules/tailwindcss/node_modules/parse-json": {
-			"version": "5.2.0",
-			"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
-			"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
-			"dependencies": {
-				"@babel/code-frame": "^7.0.0",
-				"error-ex": "^1.3.1",
-				"json-parse-even-better-errors": "^2.3.0",
-				"lines-and-columns": "^1.1.6"
-			},
-			"engines": {
-				"node": ">=8"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/sindresorhus"
-			}
-		},
-		"node_modules/tailwindcss/node_modules/path-type": {
-			"version": "4.0.0",
-			"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-			"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-			"engines": {
-				"node": ">=8"
+				"node": "^10 || ^12 || >=14"
 			}
 		},
 		"node_modules/tailwindcss/node_modules/postcss-load-config": {
@@ -19067,12 +19042,28 @@ 			"engines": {
 				"node": ">=8.10.0"
 			}
 		},
-		"node_modules/tailwindcss/node_modules/resolve-from": {
-			"version": "4.0.0",
-			"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-			"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+		"node_modules/tailwindcss/node_modules/resolve": {
+			"version": "1.22.1",
+			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+			"integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+			"dependencies": {
+				"is-core-module": "^2.9.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/tailwindcss/node_modules/source-map-js": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+			"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
 			"engines": {
-				"node": ">=4"
+				"node": ">=0.10.0"
 			}
 		},
 		"node_modules/tapable": {
@@ -19841,9 +19832,9 @@ 				"node": ">=4"
 			}
 		},
 		"node_modules/unicode-property-aliases-ecmascript": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
-			"integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+			"integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
 			"engines": {
 				"node": ">=4"
 			}
@@ -19973,9 +19964,9 @@ 				"yarn": "*"
 			}
 		},
 		"node_modules/update-browserslist-db": {
-			"version": "1.0.9",
-			"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz",
-			"integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==",
+			"version": "1.0.10",
+			"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+			"integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
 			"funding": [
 				{
 					"type": "opencollective",
@@ -20236,9 +20227,9 @@ 				"vscode-uri": "^3.0.3"
 			}
 		},
 		"node_modules/vscode-css-languageservice/node_modules/vscode-uri": {
-			"version": "3.0.3",
-			"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz",
-			"integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA=="
+			"version": "3.0.6",
+			"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.6.tgz",
+			"integrity": "sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ=="
 		},
 		"node_modules/vscode-emmet-helper-bundled": {
 			"version": "0.0.1",
@@ -20310,6 +20301,7 @@ 		"node_modules/w3c-hr-time": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
 			"integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+			"deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
 			"dependencies": {
 				"browser-process-hrtime": "^1.0.0"
 			}
@@ -20919,25 +20911,25 @@ 				"@babel/highlight": "^7.18.6"
 			}
 		},
 		"@babel/compat-data": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz",
-			"integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw=="
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz",
+			"integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw=="
 		},
 		"@babel/core": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz",
-			"integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==",
+			"version": "7.19.3",
+			"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz",
+			"integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==",
 			"requires": {
 				"@ampproject/remapping": "^2.1.0",
 				"@babel/code-frame": "^7.18.6",
-				"@babel/generator": "^7.19.0",
-				"@babel/helper-compilation-targets": "^7.19.0",
+				"@babel/generator": "^7.19.3",
+				"@babel/helper-compilation-targets": "^7.19.3",
 				"@babel/helper-module-transforms": "^7.19.0",
 				"@babel/helpers": "^7.19.0",
-				"@babel/parser": "^7.19.0",
+				"@babel/parser": "^7.19.3",
 				"@babel/template": "^7.18.10",
-				"@babel/traverse": "^7.19.0",
-				"@babel/types": "^7.19.0",
+				"@babel/traverse": "^7.19.3",
+				"@babel/types": "^7.19.3",
 				"convert-source-map": "^1.7.0",
 				"debug": "^4.1.0",
 				"gensync": "^1.0.0-beta.2",
@@ -20953,11 +20945,11 @@ 				}
 			}
 		},
 		"@babel/generator": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz",
-			"integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==",
+			"version": "7.19.5",
+			"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz",
+			"integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==",
 			"requires": {
-				"@babel/types": "^7.19.0",
+				"@babel/types": "^7.19.4",
 				"@jridgewell/gen-mapping": "^0.3.2",
 				"jsesc": "^2.5.1"
 			},
@@ -20992,13 +20984,13 @@ 				"@babel/types": "^7.18.9"
 			}
 		},
 		"@babel/helper-compilation-targets": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz",
-			"integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==",
+			"version": "7.19.3",
+			"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz",
+			"integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==",
 			"requires": {
-				"@babel/compat-data": "^7.19.0",
+				"@babel/compat-data": "^7.19.3",
 				"@babel/helper-validator-option": "^7.18.6",
-				"browserslist": "^4.20.2",
+				"browserslist": "^4.21.3",
 				"semver": "^6.3.0"
 			},
 			"dependencies": {
@@ -21138,23 +21130,23 @@ 				"@babel/types": "^7.18.9"
 			}
 		},
 		"@babel/helper-replace-supers": {
-			"version": "7.18.9",
-			"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
-			"integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
+			"version": "7.19.1",
+			"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz",
+			"integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==",
 			"requires": {
 				"@babel/helper-environment-visitor": "^7.18.9",
 				"@babel/helper-member-expression-to-functions": "^7.18.9",
 				"@babel/helper-optimise-call-expression": "^7.18.6",
-				"@babel/traverse": "^7.18.9",
-				"@babel/types": "^7.18.9"
+				"@babel/traverse": "^7.19.1",
+				"@babel/types": "^7.19.0"
 			}
 		},
 		"@babel/helper-simple-access": {
-			"version": "7.18.6",
-			"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
-			"integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz",
+			"integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==",
 			"requires": {
-				"@babel/types": "^7.18.6"
+				"@babel/types": "^7.19.4"
 			}
 		},
 		"@babel/helper-skip-transparent-expression-wrappers": {
@@ -21174,14 +21166,14 @@ 				"@babel/types": "^7.18.6"
 			}
 		},
 		"@babel/helper-string-parser": {
-			"version": "7.18.10",
-			"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
-			"integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw=="
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
+			"integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw=="
 		},
 		"@babel/helper-validator-identifier": {
-			"version": "7.18.6",
-			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
-			"integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
+			"version": "7.19.1",
+			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+			"integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w=="
 		},
 		"@babel/helper-validator-option": {
 			"version": "7.18.6",
@@ -21200,13 +21192,13 @@ 				"@babel/types": "^7.19.0"
 			}
 		},
 		"@babel/helpers": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz",
-			"integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz",
+			"integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==",
 			"requires": {
 				"@babel/template": "^7.18.10",
-				"@babel/traverse": "^7.19.0",
-				"@babel/types": "^7.19.0"
+				"@babel/traverse": "^7.19.4",
+				"@babel/types": "^7.19.4"
 			}
 		},
 		"@babel/highlight": {
@@ -21266,9 +21258,9 @@ 				}
 			}
 		},
 		"@babel/parser": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz",
-			"integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw=="
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz",
+			"integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA=="
 		},
 		"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
 			"version": "7.18.6",
@@ -21289,9 +21281,9 @@ 				"@babel/plugin-proposal-optional-chaining": "^7.18.9"
 			}
 		},
 		"@babel/plugin-proposal-async-generator-functions": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.0.tgz",
-			"integrity": "sha512-nhEByMUTx3uZueJ/QkJuSlCfN4FGg+xy+vRsfGQGzSauq5ks2Deid2+05Q3KhfaUjvec1IGhw/Zm3cFm8JigTQ==",
+			"version": "7.19.1",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz",
+			"integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==",
 			"requires": {
 				"@babel/helper-environment-visitor": "^7.18.9",
 				"@babel/helper-plugin-utils": "^7.19.0",
@@ -21373,13 +21365,13 @@ 				"@babel/plugin-syntax-numeric-separator": "^7.10.4"
 			}
 		},
 		"@babel/plugin-proposal-object-rest-spread": {
-			"version": "7.18.9",
-			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz",
-			"integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz",
+			"integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==",
 			"requires": {
-				"@babel/compat-data": "^7.18.8",
-				"@babel/helper-compilation-targets": "^7.18.9",
-				"@babel/helper-plugin-utils": "^7.18.9",
+				"@babel/compat-data": "^7.19.4",
+				"@babel/helper-compilation-targets": "^7.19.3",
+				"@babel/helper-plugin-utils": "^7.19.0",
 				"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
 				"@babel/plugin-transform-parameters": "^7.18.8"
 			}
@@ -21595,11 +21587,11 @@ 				"@babel/helper-plugin-utils": "^7.18.6"
 			}
 		},
 		"@babel/plugin-transform-block-scoping": {
-			"version": "7.18.9",
-			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
-			"integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz",
+			"integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==",
 			"requires": {
-				"@babel/helper-plugin-utils": "^7.18.9"
+				"@babel/helper-plugin-utils": "^7.19.0"
 			}
 		},
 		"@babel/plugin-transform-classes": {
@@ -21627,11 +21619,11 @@ 				"@babel/helper-plugin-utils": "^7.18.9"
 			}
 		},
 		"@babel/plugin-transform-destructuring": {
-			"version": "7.18.13",
-			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz",
-			"integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz",
+			"integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==",
 			"requires": {
-				"@babel/helper-plugin-utils": "^7.18.9"
+				"@babel/helper-plugin-utils": "^7.19.0"
 			}
 		},
 		"@babel/plugin-transform-dotall-regex": {
@@ -21737,9 +21729,9 @@ 				"@babel/helper-plugin-utils": "^7.18.6"
 			}
 		},
 		"@babel/plugin-transform-named-capturing-groups-regex": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.0.tgz",
-			"integrity": "sha512-HDSuqOQzkU//kfGdiHBt71/hkDTApw4U/cMVgKgX7PqfB3LOaK+2GtCEsBu1dL9CkswDm0Gwehht1dCr421ULQ==",
+			"version": "7.19.1",
+			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz",
+			"integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==",
 			"requires": {
 				"@babel/helper-create-regexp-features-plugin": "^7.19.0",
 				"@babel/helper-plugin-utils": "^7.19.0"
@@ -21854,17 +21846,17 @@ 				"@babel/helper-plugin-utils": "^7.18.6"
 			}
 		},
 		"@babel/preset-env": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.0.tgz",
-			"integrity": "sha512-1YUju1TAFuzjIQqNM9WsF4U6VbD/8t3wEAlw3LFYuuEr+ywqLRcSXxFKz4DCEj+sN94l/XTDiUXYRrsvMpz9WQ==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz",
+			"integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==",
 			"requires": {
-				"@babel/compat-data": "^7.19.0",
-				"@babel/helper-compilation-targets": "^7.19.0",
+				"@babel/compat-data": "^7.19.4",
+				"@babel/helper-compilation-targets": "^7.19.3",
 				"@babel/helper-plugin-utils": "^7.19.0",
 				"@babel/helper-validator-option": "^7.18.6",
 				"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
 				"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9",
-				"@babel/plugin-proposal-async-generator-functions": "^7.19.0",
+				"@babel/plugin-proposal-async-generator-functions": "^7.19.1",
 				"@babel/plugin-proposal-class-properties": "^7.18.6",
 				"@babel/plugin-proposal-class-static-block": "^7.18.6",
 				"@babel/plugin-proposal-dynamic-import": "^7.18.6",
@@ -21873,7 +21865,7 @@ 				"@babel/plugin-proposal-json-strings": "^7.18.6",
 				"@babel/plugin-proposal-logical-assignment-operators": "^7.18.9",
 				"@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
 				"@babel/plugin-proposal-numeric-separator": "^7.18.6",
-				"@babel/plugin-proposal-object-rest-spread": "^7.18.9",
+				"@babel/plugin-proposal-object-rest-spread": "^7.19.4",
 				"@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
 				"@babel/plugin-proposal-optional-chaining": "^7.18.9",
 				"@babel/plugin-proposal-private-methods": "^7.18.6",
@@ -21897,10 +21889,10 @@ 				"@babel/plugin-syntax-top-level-await": "^7.14.5",
 				"@babel/plugin-transform-arrow-functions": "^7.18.6",
 				"@babel/plugin-transform-async-to-generator": "^7.18.6",
 				"@babel/plugin-transform-block-scoped-functions": "^7.18.6",
-				"@babel/plugin-transform-block-scoping": "^7.18.9",
+				"@babel/plugin-transform-block-scoping": "^7.19.4",
 				"@babel/plugin-transform-classes": "^7.19.0",
 				"@babel/plugin-transform-computed-properties": "^7.18.9",
-				"@babel/plugin-transform-destructuring": "^7.18.13",
+				"@babel/plugin-transform-destructuring": "^7.19.4",
 				"@babel/plugin-transform-dotall-regex": "^7.18.6",
 				"@babel/plugin-transform-duplicate-keys": "^7.18.9",
 				"@babel/plugin-transform-exponentiation-operator": "^7.18.6",
@@ -21912,7 +21904,7 @@ 				"@babel/plugin-transform-modules-amd": "^7.18.6",
 				"@babel/plugin-transform-modules-commonjs": "^7.18.6",
 				"@babel/plugin-transform-modules-systemjs": "^7.19.0",
 				"@babel/plugin-transform-modules-umd": "^7.18.6",
-				"@babel/plugin-transform-named-capturing-groups-regex": "^7.19.0",
+				"@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1",
 				"@babel/plugin-transform-new-target": "^7.18.6",
 				"@babel/plugin-transform-object-super": "^7.18.6",
 				"@babel/plugin-transform-parameters": "^7.18.8",
@@ -21927,11 +21919,11 @@ 				"@babel/plugin-transform-typeof-symbol": "^7.18.9",
 				"@babel/plugin-transform-unicode-escapes": "^7.18.10",
 				"@babel/plugin-transform-unicode-regex": "^7.18.6",
 				"@babel/preset-modules": "^0.1.5",
-				"@babel/types": "^7.19.0",
-				"babel-plugin-polyfill-corejs2": "^0.3.2",
-				"babel-plugin-polyfill-corejs3": "^0.5.3",
-				"babel-plugin-polyfill-regenerator": "^0.4.0",
-				"core-js-compat": "^3.22.1",
+				"@babel/types": "^7.19.4",
+				"babel-plugin-polyfill-corejs2": "^0.3.3",
+				"babel-plugin-polyfill-corejs3": "^0.6.0",
+				"babel-plugin-polyfill-regenerator": "^0.4.1",
+				"core-js-compat": "^3.25.1",
 				"semver": "^6.3.0"
 			},
 			"dependencies": {
@@ -21963,19 +21955,19 @@ 				"esutils": "^2.0.2"
 			}
 		},
 		"@babel/runtime": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
-			"integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz",
+			"integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==",
 			"requires": {
 				"regenerator-runtime": "^0.13.4"
 			}
 		},
 		"@babel/runtime-corejs3": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.0.tgz",
-			"integrity": "sha512-JyXXoCu1N8GLuKc2ii8y5RGma5FMpFeO2nAQIe0Yzrbq+rQnN+sFj47auLblR5ka6aHNGPDgv8G/iI2Grb0ldQ==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.4.tgz",
+			"integrity": "sha512-HzjQ8+dzdx7dmZy4DQ8KV8aHi/74AjEbBGTFutBmg/pd3dY5/q1sfuOGPTFGEytlQhWoeVXqcK5BwMgIkRkNDQ==",
 			"requires": {
-				"core-js-pure": "^3.20.2",
+				"core-js-pure": "^3.25.1",
 				"regenerator-runtime": "^0.13.4"
 			}
 		},
@@ -21990,29 +21982,29 @@ 				"@babel/types": "^7.18.10"
 			}
 		},
 		"@babel/traverse": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz",
-			"integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz",
+			"integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==",
 			"requires": {
 				"@babel/code-frame": "^7.18.6",
-				"@babel/generator": "^7.19.0",
+				"@babel/generator": "^7.19.4",
 				"@babel/helper-environment-visitor": "^7.18.9",
 				"@babel/helper-function-name": "^7.19.0",
 				"@babel/helper-hoist-variables": "^7.18.6",
 				"@babel/helper-split-export-declaration": "^7.18.6",
-				"@babel/parser": "^7.19.0",
-				"@babel/types": "^7.19.0",
+				"@babel/parser": "^7.19.4",
+				"@babel/types": "^7.19.4",
 				"debug": "^4.1.0",
 				"globals": "^11.1.0"
 			}
 		},
 		"@babel/types": {
-			"version": "7.19.0",
-			"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz",
-			"integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==",
+			"version": "7.19.4",
+			"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz",
+			"integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==",
 			"requires": {
-				"@babel/helper-string-parser": "^7.18.10",
-				"@babel/helper-validator-identifier": "^7.18.6",
+				"@babel/helper-string-parser": "^7.19.4",
+				"@babel/helper-validator-identifier": "^7.19.1",
 				"to-fast-properties": "^2.0.0"
 			}
 		},
@@ -22531,12 +22523,12 @@ 			"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
 			"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
 		},
 		"@jridgewell/trace-mapping": {
-			"version": "0.3.15",
-			"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
-			"integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+			"version": "0.3.17",
+			"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+			"integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
 			"requires": {
-				"@jridgewell/resolve-uri": "^3.0.3",
-				"@jridgewell/sourcemap-codec": "^1.4.10"
+				"@jridgewell/resolve-uri": "3.1.0",
+				"@jridgewell/sourcemap-codec": "1.4.14"
 			}
 		},
 		"@lerna/add": {
@@ -24403,34 +24395,45 @@ 				"type-detect": "4.0.8"
 			}
 		},
 		"@tailwindcss/aspect-ratio": {
-			"version": "0.4.0",
-			"resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.0.tgz",
-			"integrity": "sha512-WJu0I4PpqNPuutpaA9zDUq2JXR+lorZ7PbLcKNLmb6GL9/HLfC7w3CRsMhJF4BbYd/lkY6CfXOvkYpuGnZfkpQ==",
+			"version": "0.4.2",
+			"resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz",
+			"integrity": "sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==",
 			"requires": {}
 		},
 		"@tailwindcss/forms": {
-			"version": "0.4.0",
-			"resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.4.0.tgz",
-			"integrity": "sha512-DeaQBx6EgEeuZPQACvC+mKneJsD8am1uiJugjgQK1+/Vt+Ai0GpFBC2T2fqnUad71WgOxyrZPE6BG1VaI6YqfQ==",
+			"version": "0.5.3",
+			"resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz",
+			"integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==",
 			"requires": {
 				"mini-svg-data-uri": "^1.2.3"
 			}
 		},
 		"@tailwindcss/line-clamp": {
-			"version": "0.3.0",
-			"resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.3.0.tgz",
-			"integrity": "sha512-ffDDclrqr3sy8cpChCozedDUAN8enxqAiWeH8d4dGQ2hcXlxf51+7KleveFi/n/TxEuRVApoL7hICeDOdYPKpg==",
+			"version": "0.4.2",
+			"resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.2.tgz",
+			"integrity": "sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==",
 			"requires": {}
 		},
 		"@tailwindcss/typography": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.0.tgz",
-			"integrity": "sha512-1p/3C6C+JJziS/ghtG8ACYalbA2SyLJY27Pm33cVTlAoY6VQ7zfm2H64cPxUMBkVIlWXTtWHhZcZJPobMRmQAA==",
+			"version": "0.5.7",
+			"resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.7.tgz",
+			"integrity": "sha512-JTTSTrgZfp6Ki4svhPA4mkd9nmQ/j9EfE7SbHJ1cLtthKkpW2OxsFXzSmxbhYbEkfNIyAyhle5p4SYyKRbz/jg==",
 			"requires": {
 				"lodash.castarray": "^4.4.0",
 				"lodash.isplainobject": "^4.0.6",
 				"lodash.merge": "^4.6.2",
-				"lodash.uniq": "^4.5.0"
+				"postcss-selector-parser": "6.0.10"
+			},
+			"dependencies": {
+				"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==",
+					"requires": {
+						"cssesc": "^3.0.0",
+						"util-deprecate": "^1.0.2"
+					}
+				}
 			}
 		},
 		"@types/babel__core": {
@@ -24463,9 +24466,9 @@ 				"@babel/types": "^7.0.0"
 			}
 		},
 		"@types/babel__traverse": {
-			"version": "7.18.1",
-			"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz",
-			"integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==",
+			"version": "7.18.2",
+			"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz",
+			"integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==",
 			"requires": {
 				"@babel/types": "^7.3.0"
 			}
@@ -25022,20 +25025,6 @@ 			"resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz",
 			"integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=",
 			"dev": true
 		},
-		"autoprefixer": {
-			"version": "10.4.10",
-			"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.10.tgz",
-			"integrity": "sha512-nMaiDARyp1e74c8IeAXkr+BmFKa8By4Zak7tyaNPF09Iu39WFpNXOWrVirmXjKr+5cOyERwvtbMOLYz6iBJYgQ==",
-			"peer": true,
-			"requires": {
-				"browserslist": "^4.21.3",
-				"caniuse-lite": "^1.0.30001399",
-				"fraction.js": "^4.2.0",
-				"normalize-range": "^0.1.2",
-				"picocolors": "^1.0.0",
-				"postcss-value-parser": "^4.2.0"
-			}
-		},
 		"aws-sign2": {
 			"version": "0.7.0",
 			"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -25147,9 +25136,9 @@ 				"test-exclude": "^6.0.0"
 			},
 			"dependencies": {
 				"istanbul-lib-instrument": {
-					"version": "5.2.0",
-					"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz",
-					"integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==",
+					"version": "5.2.1",
+					"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+					"integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
 					"requires": {
 						"@babel/core": "^7.12.3",
 						"@babel/parser": "^7.14.7",
@@ -25247,12 +25236,12 @@ 				}
 			}
 		},
 		"babel-plugin-polyfill-corejs3": {
-			"version": "0.5.3",
-			"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz",
-			"integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==",
+			"version": "0.6.0",
+			"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz",
+			"integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==",
 			"requires": {
-				"@babel/helper-define-polyfill-provider": "^0.3.2",
-				"core-js-compat": "^3.21.0"
+				"@babel/helper-define-polyfill-provider": "^0.3.3",
+				"core-js-compat": "^3.25.1"
 			}
 		},
 		"babel-plugin-polyfill-regenerator": {
@@ -25424,14 +25413,14 @@ 				}
 			}
 		},
 		"browserslist": {
-			"version": "4.21.3",
-			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
-			"integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
+			"version": "4.21.4",
+			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+			"integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
 			"requires": {
-				"caniuse-lite": "^1.0.30001370",
-				"electron-to-chromium": "^1.4.202",
+				"caniuse-lite": "^1.0.30001400",
+				"electron-to-chromium": "^1.4.251",
 				"node-releases": "^2.0.6",
-				"update-browserslist-db": "^1.0.5"
+				"update-browserslist-db": "^1.0.9"
 			}
 		},
 		"bs-logger": {
@@ -25614,9 +25603,9 @@ 				"quick-lru": "^4.0.1"
 			}
 		},
 		"caniuse-lite": {
-			"version": "1.0.30001399",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001399.tgz",
-			"integrity": "sha512-4vQ90tMKS+FkvuVWS5/QY1+d805ODxZiKFzsU8o/RsVJz49ZSRR8EjykLJbqhzdPgadbX6wB538wOzle3JniRA=="
+			"version": "1.0.30001421",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001421.tgz",
+			"integrity": "sha512-Sw4eLbgUJAEhjLs1Fa+mk45sidp1wRn5y6GtDpHGBaNJ9OCDJaVh2tIaWWUnGfuXfKf1JCBaIarak3FkVAvEeA=="
 		},
 		"capture-exit": {
 			"version": "2.0.0",
@@ -26388,12 +26377,9 @@ 				}
 			}
 		},
 		"convert-source-map": {
-			"version": "1.8.0",
-			"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
-			"integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
-			"requires": {
-				"safe-buffer": "~5.1.1"
-			}
+			"version": "1.9.0",
+			"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+			"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
 		},
 		"copy-concurrently": {
 			"version": "1.0.5",
@@ -26432,17 +26418,17 @@ 			"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
 			"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
 		},
 		"core-js-compat": {
-			"version": "3.25.1",
-			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.1.tgz",
-			"integrity": "sha512-pOHS7O0i8Qt4zlPW/eIFjwp+NrTPx+wTL0ctgI2fHn31sZOq89rDsmtc/A2vAX7r6shl+bmVI+678He46jgBlw==",
+			"version": "3.25.5",
+			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz",
+			"integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==",
 			"requires": {
-				"browserslist": "^4.21.3"
+				"browserslist": "^4.21.4"
 			}
 		},
 		"core-js-pure": {
-			"version": "3.25.1",
-			"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.1.tgz",
-			"integrity": "sha512-7Fr74bliUDdeJCBMxkkIuQ4xfxn/SwrVg+HkJUAoNEXVqYLv55l6Af0dJ5Lq2YBUW9yKqSkLXaS5SYPK6MGa/A=="
+			"version": "3.25.5",
+			"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.5.tgz",
+			"integrity": "sha512-oml3M22pHM+igfWHDfdLVq2ShWmjM2V4L+dQEBs0DWVIqEm9WHCwGAlZ6BmyBQGy5sFrJmcx+856D9lVKyGWYg=="
 		},
 		"core-util-is": {
 			"version": "1.0.2",
@@ -26677,9 +26663,9 @@ 				}
 			}
 		},
 		"defined": {
-			"version": "1.0.0",
-			"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
-			"integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ=="
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
+			"integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q=="
 		},
 		"delayed-stream": {
 			"version": "1.0.0",
@@ -26873,9 +26859,9 @@ 				"safer-buffer": "^2.1.0"
 			}
 		},
 		"electron-to-chromium": {
-			"version": "1.4.248",
-			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.248.tgz",
-			"integrity": "sha512-qShjzEYpa57NnhbW2K+g+Fl+eNoDvQ7I+2MRwWnU6Z6F0HhXekzsECCLv+y2OJUsRodjqoSfwHkIX42VUFtUzg=="
+			"version": "1.4.284",
+			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+			"integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
 		},
 		"emoji-regex": {
 			"version": "9.2.2",
@@ -27678,9 +27664,9 @@ 				"prettier-linter-helpers": "^1.0.0"
 			}
 		},
 		"eslint-plugin-react": {
-			"version": "7.31.8",
-			"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz",
-			"integrity": "sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==",
+			"version": "7.31.10",
+			"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz",
+			"integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==",
 			"requires": {
 				"array-includes": "^3.1.5",
 				"array.prototype.flatmap": "^1.3.0",
@@ -28072,9 +28058,9 @@ 				"reusify": "^1.0.4"
 			}
 		},
 		"fb-watchman": {
-			"version": "2.0.1",
-			"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
-			"integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+			"integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
 			"requires": {
 				"bser": "2.1.1"
 			}
@@ -28223,12 +28209,6 @@ 				"asynckit": "^0.4.0",
 				"combined-stream": "^1.0.6",
 				"mime-types": "^2.1.12"
 			}
-		},
-		"fraction.js": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
-			"integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
-			"peer": true
 		},
 		"fragment-cache": {
 			"version": "0.2.1",
@@ -31670,7 +31650,8 @@ 		},
 		"lodash.uniq": {
 			"version": "4.5.0",
 			"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
-			"integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
+			"integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+			"dev": true
 		},
 		"log-symbols": {
 			"version": "3.0.0",
@@ -32440,12 +32421,6 @@ 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
 			"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
 		},
-		"normalize-range": {
-			"version": "0.1.2",
-			"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-			"integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
-			"peer": true
-		},
 		"normalize-url": {
 			"version": "3.3.0",
 			"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
@@ -32660,9 +32635,9 @@ 				}
 			}
 		},
 		"object-hash": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
-			"integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+			"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="
 		},
 		"object-inspect": {
 			"version": "1.12.0",
@@ -33311,6 +33286,16 @@ 					"integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA=="
 				}
 			}
 		},
+		"postcss-import": {
+			"version": "14.1.0",
+			"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
+			"integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
+			"requires": {
+				"postcss-value-parser": "^4.0.0",
+				"read-cache": "^1.0.0",
+				"resolve": "^1.1.7"
+			}
+		},
 		"postcss-js": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
@@ -33674,6 +33659,21 @@ 			"requires": {
 				"mute-stream": "~0.0.4"
 			}
 		},
+		"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==",
+			"requires": {
+				"pify": "^2.3.0"
+			},
+			"dependencies": {
+				"pify": {
+					"version": "2.3.0",
+					"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+					"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="
+				}
+			}
+		},
 		"read-cmd-shim": {
 			"version": "1.0.5",
 			"resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz",
@@ -33901,17 +33901,17 @@ 			"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
 			"integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
 		},
 		"regenerate-unicode-properties": {
-			"version": "10.0.1",
-			"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
-			"integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
+			"version": "10.1.0",
+			"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+			"integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
 			"requires": {
 				"regenerate": "^1.4.2"
 			}
 		},
 		"regenerator-runtime": {
-			"version": "0.13.9",
-			"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
-			"integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
+			"version": "0.13.10",
+			"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz",
+			"integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw=="
 		},
 		"regenerator-transform": {
 			"version": "0.15.0",
@@ -33946,27 +33946,27 @@ 			"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
 			"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg=="
 		},
 		"regexpu-core": {
-			"version": "5.1.0",
-			"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
-			"integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
+			"version": "5.2.1",
+			"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz",
+			"integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==",
 			"requires": {
 				"regenerate": "^1.4.2",
-				"regenerate-unicode-properties": "^10.0.1",
-				"regjsgen": "^0.6.0",
-				"regjsparser": "^0.8.2",
+				"regenerate-unicode-properties": "^10.1.0",
+				"regjsgen": "^0.7.1",
+				"regjsparser": "^0.9.1",
 				"unicode-match-property-ecmascript": "^2.0.0",
 				"unicode-match-property-value-ecmascript": "^2.0.0"
 			}
 		},
 		"regjsgen": {
-			"version": "0.6.0",
-			"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
-			"integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA=="
+			"version": "0.7.1",
+			"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
+			"integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA=="
 		},
 		"regjsparser": {
-			"version": "0.8.4",
-			"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
-			"integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
+			"version": "0.9.1",
+			"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+			"integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
 			"requires": {
 				"jsesc": "~0.5.0"
 			},
@@ -35464,30 +35464,32 @@ 				}
 			}
 		},
 		"tailwindcss": {
-			"version": "3.0.11",
-			"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.11.tgz",
-			"integrity": "sha512-JyMsQ2kPqpOvG8ow535XpauXj3wz3nQqcy2tVlXj4FQ0eNlsdzvlAqpRA3q5rPLboWirNG6r2DqKczwjW2uc8Q==",
+			"version": "3.1.8",
+			"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz",
+			"integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==",
 			"requires": {
-				"arg": "^5.0.1",
-				"chalk": "^4.1.2",
-				"chokidar": "^3.5.2",
+				"arg": "^5.0.2",
+				"chokidar": "^3.5.3",
 				"color-name": "^1.1.4",
-				"cosmiconfig": "^7.0.1",
-				"detective": "^5.2.0",
+				"detective": "^5.2.1",
 				"didyoumean": "^1.2.2",
 				"dlv": "^1.1.3",
-				"fast-glob": "^3.2.7",
+				"fast-glob": "^3.2.11",
 				"glob-parent": "^6.0.2",
 				"is-glob": "^4.0.3",
+				"lilconfig": "^2.0.6",
 				"normalize-path": "^3.0.0",
-				"object-hash": "^2.2.0",
+				"object-hash": "^3.0.0",
+				"picocolors": "^1.0.0",
+				"postcss": "^8.4.14",
+				"postcss-import": "^14.1.0",
 				"postcss-js": "^4.0.0",
-				"postcss-load-config": "^3.1.0",
+				"postcss-load-config": "^3.1.4",
 				"postcss-nested": "5.0.6",
-				"postcss-selector-parser": "^6.0.7",
+				"postcss-selector-parser": "^6.0.10",
 				"postcss-value-parser": "^4.2.0",
 				"quick-lru": "^5.1.1",
-				"resolve": "^1.20.0"
+				"resolve": "^1.22.1"
 			},
 			"dependencies": {
 				"chokidar": {
@@ -35515,16 +35517,14 @@ 							}
 						}
 					}
 				},
-				"cosmiconfig": {
-					"version": "7.0.1",
-					"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
-					"integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+				"detective": {
+					"version": "5.2.1",
+					"resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
+					"integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
 					"requires": {
-						"@types/parse-json": "^4.0.0",
-						"import-fresh": "^3.2.1",
-						"parse-json": "^5.0.0",
-						"path-type": "^4.0.0",
-						"yaml": "^1.10.0"
+						"acorn-node": "^1.8.2",
+						"defined": "^1.0.0",
+						"minimist": "^1.2.6"
 					}
 				},
 				"fast-glob": {
@@ -35557,30 +35557,15 @@ 					"requires": {
 						"is-glob": "^4.0.3"
 					}
 				},
-				"import-fresh": {
-					"version": "3.3.0",
-					"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-					"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+				"postcss": {
+					"version": "8.4.18",
+					"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz",
+					"integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==",
 					"requires": {
-						"parent-module": "^1.0.0",
-						"resolve-from": "^4.0.0"
+						"nanoid": "^3.3.4",
+						"picocolors": "^1.0.0",
+						"source-map-js": "^1.0.2"
 					}
-				},
-				"parse-json": {
-					"version": "5.2.0",
-					"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
-					"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
-					"requires": {
-						"@babel/code-frame": "^7.0.0",
-						"error-ex": "^1.3.1",
-						"json-parse-even-better-errors": "^2.3.0",
-						"lines-and-columns": "^1.1.6"
-					}
-				},
-				"path-type": {
-					"version": "4.0.0",
-					"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-					"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
 				},
 				"postcss-load-config": {
 					"version": "3.1.4",
@@ -35613,10 +35598,20 @@ 					"requires": {
 						"picomatch": "^2.2.1"
 					}
 				},
-				"resolve-from": {
-					"version": "4.0.0",
-					"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-					"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+				"resolve": {
+					"version": "1.22.1",
+					"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+					"integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+					"requires": {
+						"is-core-module": "^2.9.0",
+						"path-parse": "^1.0.7",
+						"supports-preserve-symlinks-flag": "^1.0.0"
+					}
+				},
+				"source-map-js": {
+					"version": "1.0.2",
+					"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+					"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
 				}
 			}
 		},
@@ -36206,9 +36201,9 @@ 			"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
 			"integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw=="
 		},
 		"unicode-property-aliases-ecmascript": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
-			"integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ=="
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+			"integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w=="
 		},
 		"union-value": {
 			"version": "1.0.1",
@@ -36313,9 +36308,9 @@ 			"integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
 			"dev": true
 		},
 		"update-browserslist-db": {
-			"version": "1.0.9",
-			"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz",
-			"integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==",
+			"version": "1.0.10",
+			"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+			"integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
 			"requires": {
 				"escalade": "^3.1.1",
 				"picocolors": "^1.0.0"
@@ -36521,9 +36516,9 @@ 				"vscode-uri": "^3.0.3"
 			},
 			"dependencies": {
 				"vscode-uri": {
-					"version": "3.0.3",
-					"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz",
-					"integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA=="
+					"version": "3.0.6",
+					"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.6.tgz",
+					"integrity": "sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ=="
 				}
 			}
 		},
M packages/tailwindcss-language-server/package.jsonpackages/tailwindcss-language-server/package.json
diff --git a/packages/tailwindcss-language-server/package.json b/packages/tailwindcss-language-server/package.json
index 310162a4e821bacf0b64d6f114beac3429665b4f..79661756457cf9715063a010d164a148ac8a6bf4 100644
--- a/packages/tailwindcss-language-server/package.json
+++ b/packages/tailwindcss-language-server/package.json
@@ -32,10 +32,10 @@     "access": "public"
   },
   "devDependencies": {
     "@parcel/watcher": "2.0.3",
-    "@tailwindcss/aspect-ratio": "0.4.0",
-    "@tailwindcss/forms": "0.4.0",
-    "@tailwindcss/line-clamp": "0.3.0",
-    "@tailwindcss/typography": "0.5.0",
+    "@tailwindcss/aspect-ratio": "0.4.2",
+    "@tailwindcss/forms": "0.5.3",
+    "@tailwindcss/line-clamp": "0.4.2",
+    "@tailwindcss/typography": "0.5.7",
     "@types/debounce": "1.2.0",
     "@types/node": "14.14.34",
     "@types/vscode": "1.65.0",
@@ -63,7 +63,7 @@     "prettier": "2.3.0",
     "resolve": "1.20.0",
     "rimraf": "3.0.2",
     "stack-trace": "0.0.10",
-    "tailwindcss": "3.0.11",
+    "tailwindcss": "3.1.8",
     "typescript": "4.6.4",
     "vscode-css-languageservice": "5.4.1",
     "vscode-languageserver": "8.0.2",
M packages/tailwindcss-language-server/src/language/cssServer.tspackages/tailwindcss-language-server/src/language/cssServer.ts
diff --git a/packages/tailwindcss-language-server/src/language/cssServer.ts b/packages/tailwindcss-language-server/src/language/cssServer.ts
index 496a2511de903323408179797d7b4afe763eb72d..587ea2c01e2b89bb3cd345e1246f262f57e3bc89 100644
--- a/packages/tailwindcss-language-server/src/language/cssServer.ts
+++ b/packages/tailwindcss-language-server/src/language/cssServer.ts
@@ -162,10 +162,15 @@             item,
             {
               ...item,
               label: 'theme()',
+              filterText: 'theme',
               documentation: {
                 kind: 'markdown',
                 value:
                   'Use the `theme()` function to access your Tailwind config values using dot notation.',
+              },
+              command: {
+                title: '',
+                command: 'editor.action.triggerSuggest',
               },
               textEdit: {
                 ...item.textEdit,
@@ -357,6 +362,7 @@       .replace(
         /@media(\s+screen\s*\([^)]+\))/g,
         (_match, screen) => `@media (${MEDIA_MARKER})${' '.repeat(screen.length - 4)}`
       )
+      .replace(/(?<=\b(?:theme|config)\([^)]*)[.[\]]/g, '_')
   )
 }
 
@@ -387,7 +393,7 @@     .doValidation(textDocument, cssLanguageService.parseStylesheet(textDocument), settings)
     .filter((diagnostic) => {
       if (
         diagnostic.code === 'unknownAtRules' &&
-        /Unknown at rule @(tailwind|apply)/.test(diagnostic.message)
+        /Unknown at rule @(tailwind|apply|config)/.test(diagnostic.message)
       ) {
         return false
       }
M packages/tailwindcss-language-server/src/server.tspackages/tailwindcss-language-server/src/server.ts
diff --git a/packages/tailwindcss-language-server/src/server.ts b/packages/tailwindcss-language-server/src/server.ts
index dbc1f0b787c0cbfa4ba6d9efbc3381aef201070f..008c221a7744fb579ca9a8887c75c87a9916755c 100644
--- a/packages/tailwindcss-language-server/src/server.ts
+++ b/packages/tailwindcss-language-server/src/server.ts
@@ -27,6 +27,9 @@   DidChangeWatchedFilesNotification,
   FileChangeType,
   Disposable,
   TextDocumentIdentifier,
+  DocumentLinkRequest,
+  DocumentLinkParams,
+  DocumentLink,
 } from 'vscode-languageserver/node'
 import { TextDocument } from 'vscode-languageserver-textdocument'
 import { URI } from 'vscode-uri'
@@ -60,6 +63,7 @@   State,
   FeatureFlags,
   Settings,
   ClassNames,
+  Variant,
 } from 'tailwindcss-language-service/src/util/state'
 import {
   provideDiagnostics,
@@ -68,6 +72,7 @@   clearAllDiagnostics,
 } from './lsp/diagnosticsProvider'
 import { doCodeActions } from 'tailwindcss-language-service/src/codeActions/codeActionProvider'
 import { getDocumentColors } from 'tailwindcss-language-service/src/documentColorProvider'
+import { getDocumentLinks } from 'tailwindcss-language-service/src/documentLinksProvider'
 import { debounce } from 'debounce'
 import { getModuleDependencies } from './util/getModuleDependencies'
 import assert from 'assert'
@@ -112,6 +117,7 @@   ' ',
   // @apply and emmet-style
   '.',
   // config/theme helper
+  '(',
   '[',
   // JIT "important" prefix
   '!',
@@ -187,6 +193,7 @@   provideDiagnostics(document: TextDocument): void
   onDocumentColor(params: DocumentColorParams): Promise<ColorInformation[]>
   onColorPresentation(params: ColorPresentationParams): Promise<ColorPresentation[]>
   onCodeAction(params: CodeActionParams): Promise<CodeAction[]>
+  onDocumentLinks(params: DocumentLinkParams): DocumentLink[]
 }
 
 type ProjectConfig = { folder: string; configPath?: string; documentSelector?: string[] }
@@ -297,6 +304,27 @@       documents: documentService.documents,
       getConfiguration,
       getDocumentSymbols: (uri: string) => {
         return connection.sendRequest('@/tailwindCSS/getDocumentSymbols', { uri })
+      },
+      async readDirectory(document, directory) {
+        try {
+          directory = path.resolve(path.dirname(getFileFsPath(document.uri)), directory)
+          let dirents = await fs.promises.readdir(directory, { withFileTypes: true })
+          let result: Array<[string, { isDirectory: boolean }] | null> = await Promise.all(
+            dirents.map(async (dirent) => {
+              let isDirectory = dirent.isDirectory()
+              return (await isExcluded(
+                state,
+                document,
+                path.join(directory, dirent.name, isDirectory ? '/' : '')
+              ))
+                ? null
+                : [dirent.name, { isDirectory }]
+            })
+          )
+          return result.filter((item) => item !== null)
+        } catch {
+          return []
+        }
       },
     },
   }
@@ -1027,6 +1055,14 @@       let settings = await state.editor.getConfiguration(document.uri)
       if (!settings.tailwindCSS.codeActions) return null
       return doCodeActions(state, params)
     },
+    onDocumentLinks(params: DocumentLinkParams): DocumentLink[] {
+      if (!state.enabled) return null
+      let document = documentService.getDocument(params.textDocument.uri)
+      if (!document) return null
+      return getDocumentLinks(state, document, (linkPath) =>
+        URI.file(path.resolve(path.dirname(URI.parse(document.uri).fsPath), linkPath)).toString()
+      )
+    },
     provideDiagnostics: debounce((document: TextDocument) => {
       if (!state.enabled) return
       provideDiagnostics(state, document)
@@ -1146,105 +1182,117 @@ function isAtRule(node: Node): node is AtRule {
   return node.type === 'atrule'
 }
 
-function getVariants(state: State): Record<string, string> {
+function getVariants(state: State): Array<Variant> {
+  if (state.jitContext?.getVariants) {
+    return state.jitContext.getVariants()
+  }
+
   if (state.jit) {
-    function escape(className: string): string {
-      let node = state.modules.postcssSelectorParser.module.className()
-      node.value = className
-      return dlv(node, 'raws.value', node.value)
-    }
-
-    let result = {}
+    let result: Array<Variant> = []
     // [name, [sort, fn]]
     // [name, [[sort, fn]]]
     Array.from(state.jitContext.variantMap as Map<string, [any, any]>).forEach(
       ([variantName, variantFnOrFns]) => {
-        let fns = (Array.isArray(variantFnOrFns[0]) ? variantFnOrFns : [variantFnOrFns]).map(
-          ([_sort, fn]) => fn
-        )
+        result.push({
+          name: variantName,
+          values: [],
+          isArbitrary: false,
+          hasDash: true,
+          selectors: () => {
+            function escape(className: string): string {
+              let node = state.modules.postcssSelectorParser.module.className()
+              node.value = className
+              return dlv(node, 'raws.value', node.value)
+            }
 
-        let placeholder = '__variant_placeholder__'
+            let fns = (Array.isArray(variantFnOrFns[0]) ? variantFnOrFns : [variantFnOrFns]).map(
+              ([_sort, fn]) => fn
+            )
 
-        let root = state.modules.postcss.module.root({
-          nodes: [
-            state.modules.postcss.module.rule({
-              selector: `.${escape(placeholder)}`,
-              nodes: [],
-            }),
-          ],
-        })
+            let placeholder = '__variant_placeholder__'
 
-        let classNameParser = state.modules.postcssSelectorParser.module((selectors) => {
-          return selectors.first.filter(({ type }) => type === 'class').pop().value
-        })
+            let root = state.modules.postcss.module.root({
+              nodes: [
+                state.modules.postcss.module.rule({
+                  selector: `.${escape(placeholder)}`,
+                  nodes: [],
+                }),
+              ],
+            })
 
-        function getClassNameFromSelector(selector) {
-          return classNameParser.transformSync(selector)
-        }
+            let classNameParser = state.modules.postcssSelectorParser.module((selectors) => {
+              return selectors.first.filter(({ type }) => type === 'class').pop().value
+            })
 
-        function modifySelectors(modifierFunction) {
-          root.each((rule) => {
-            if (rule.type !== 'rule') {
-              return
+            function getClassNameFromSelector(selector) {
+              return classNameParser.transformSync(selector)
             }
 
-            rule.selectors = rule.selectors.map((selector) => {
-              return modifierFunction({
-                get className() {
-                  return getClassNameFromSelector(selector)
-                },
-                selector,
+            function modifySelectors(modifierFunction) {
+              root.each((rule) => {
+                if (rule.type !== 'rule') {
+                  return
+                }
+
+                rule.selectors = rule.selectors.map((selector) => {
+                  return modifierFunction({
+                    get className() {
+                      return getClassNameFromSelector(selector)
+                    },
+                    selector,
+                  })
+                })
               })
-            })
-          })
-          return root
-        }
+              return root
+            }
 
-        let definitions = []
+            let definitions = []
 
-        for (let fn of fns) {
-          let definition: string
-          let container = root.clone()
-          let returnValue = fn({
-            container,
-            separator: state.separator,
-            modifySelectors,
-            format: (def: string) => {
-              definition = def.replace(/:merge\(([^)]+)\)/g, '$1')
-            },
-            wrap: (rule: Container) => {
-              if (isAtRule(rule)) {
-                definition = `@${rule.name} ${rule.params}`
+            for (let fn of fns) {
+              let definition: string
+              let container = root.clone()
+              let returnValue = fn({
+                container,
+                separator: state.separator,
+                modifySelectors,
+                format: (def: string) => {
+                  definition = def.replace(/:merge\(([^)]+)\)/g, '$1')
+                },
+                wrap: (rule: Container) => {
+                  if (isAtRule(rule)) {
+                    definition = `@${rule.name} ${rule.params}`
+                  }
+                },
+              })
+
+              if (!definition) {
+                definition = returnValue
               }
-            },
-          })
 
-          if (!definition) {
-            definition = returnValue
-          }
+              if (definition) {
+                definitions.push(definition)
+                continue
+              }
 
-          if (definition) {
-            definitions.push(definition)
-            continue
-          }
+              container.walkDecls((decl) => {
+                decl.remove()
+              })
 
-          container.walkDecls((decl) => {
-            decl.remove()
-          })
+              definition = container
+                .toString()
+                .replace(`.${escape(`${variantName}:${placeholder}`)}`, '&')
+                .replace(/(?<!\\)[{}]/g, '')
+                .replace(/\s*\n\s*/g, ' ')
+                .trim()
 
-          definition = container
-            .toString()
-            .replace(`.${escape(`${variantName}:${placeholder}`)}`, '&')
-            .replace(/(?<!\\)[{}]/g, '')
-            .replace(/\s*\n\s*/g, ' ')
-            .trim()
+              if (!definition.includes(placeholder)) {
+                definitions.push(definition)
+              }
+            }
 
-          if (!definition.includes(placeholder)) {
-            definitions.push(definition)
-          }
-        }
-
-        result[variantName] = definitions.join(', ') || null
+            return definitions
+          },
+        })
       }
     )
 
@@ -1276,7 +1324,13 @@       },
     })
   })
 
-  return variants.reduce((obj, variant) => ({ ...obj, [variant]: null }), {})
+  return variants.map((variant) => ({
+    name: variant,
+    values: [],
+    isArbitrary: false,
+    hasDash: true,
+    selectors: () => [],
+  }))
 }
 
 async function getPlugins(config: any) {
@@ -1484,6 +1538,7 @@     this.connection.onCompletionResolve(this.onCompletionResolve.bind(this))
     this.connection.onDocumentColor(this.onDocumentColor.bind(this))
     this.connection.onColorPresentation(this.onColorPresentation.bind(this))
     this.connection.onCodeAction(this.onCodeAction.bind(this))
+    this.connection.onDocumentLinks(this.onDocumentLinks.bind(this))
   }
 
   private updateCapabilities() {
@@ -1498,6 +1553,7 @@
     capabilities.add(HoverRequest.type, { documentSelector: null })
     capabilities.add(DocumentColorRequest.type, { documentSelector: null })
     capabilities.add(CodeActionRequest.type, { documentSelector: null })
+    capabilities.add(DocumentLinkRequest.type, { documentSelector: null })
 
     capabilities.add(CompletionRequest.type, {
       documentSelector: null,
@@ -1563,6 +1619,10 @@   onCodeAction(params: CodeActionParams): Promise<CodeAction[]> {
     return this.getProject(params.textDocument)?.onCodeAction(params) ?? null
   }
 
+  onDocumentLinks(params: DocumentLinkParams): DocumentLink[] {
+    return this.getProject(params.textDocument)?.onDocumentLinks(params) ?? null
+  }
+
   listen() {
     this.connection.listen()
   }
@@ -1604,7 +1664,8 @@     connection.onInitialized &&
     params.capabilities.textDocument.hover?.dynamicRegistration &&
     params.capabilities.textDocument.colorProvider?.dynamicRegistration &&
     params.capabilities.textDocument.codeAction?.dynamicRegistration &&
-    params.capabilities.textDocument.completion?.dynamicRegistration
+    params.capabilities.textDocument.completion?.dynamicRegistration &&
+    params.capabilities.textDocument.documentLink?.dynamicRegistration
   )
 }
 
@@ -1629,6 +1690,7 @@       textDocumentSync: TextDocumentSyncKind.Full,
       hoverProvider: true,
       colorProvider: true,
       codeActionProvider: true,
+      documentLinkProvider: {},
       completionProvider: {
         resolveProvider: true,
         triggerCharacters: [...TRIGGER_CHARACTERS, ':'],
M packages/tailwindcss-language-server/src/util/isExcluded.tspackages/tailwindcss-language-server/src/util/isExcluded.ts
diff --git a/packages/tailwindcss-language-server/src/util/isExcluded.ts b/packages/tailwindcss-language-server/src/util/isExcluded.ts
index 9f48b83e570325e0d3b6ef24f76eed441742145f..80ce605ca9383a944ff495149079d65d5557ab40 100644
--- a/packages/tailwindcss-language-server/src/util/isExcluded.ts
+++ b/packages/tailwindcss-language-server/src/util/isExcluded.ts
@@ -4,9 +4,12 @@ import { State } from 'tailwindcss-language-service/src/util/state'
 import { TextDocument } from 'vscode-languageserver-textdocument'
 import { getFileFsPath } from './uri'
 
-export default async function isExcluded(state: State, document: TextDocument): Promise<boolean> {
+export default async function isExcluded(
+  state: State,
+  document: TextDocument,
+  file: string = getFileFsPath(document.uri)
+): Promise<boolean> {
   let settings = await state.editor.getConfiguration(document.uri)
-  let file = getFileFsPath(document.uri)
 
   for (let pattern of settings.tailwindCSS.files.exclude) {
     if (minimatch(file, path.join(state.editor.folder, pattern))) {
M packages/tailwindcss-language-service/src/completionProvider.tspackages/tailwindcss-language-service/src/completionProvider.ts
diff --git a/packages/tailwindcss-language-service/src/completionProvider.ts b/packages/tailwindcss-language-service/src/completionProvider.ts
index 8ac58761c1f1eb7c0b6f2cf6f38cf0eddaef183d..4b1ca1db2c06eeca8e7891a06069d20433a17ac0 100644
--- a/packages/tailwindcss-language-service/src/completionProvider.ts
+++ b/packages/tailwindcss-language-service/src/completionProvider.ts
@@ -110,7 +110,6 @@         }
       }
     }
 
-    let allVariants = Object.keys(state.variants)
     let { variants: existingVariants, offset } = getVariantsFromClassName(state, partialClassName)
 
     replacementRange.start.character += offset
@@ -123,55 +122,109 @@
     let items: CompletionItem[] = []
 
     if (!important) {
-      let shouldSortVariants = !semver.gte(state.version, '2.99.0')
+      let variantOrder = 0
+
+      function variantItem(
+        item: Omit<CompletionItem, 'kind' | 'data' | 'sortText' | 'textEdit'> & {
+          textEdit?: { newText: string; range?: Range }
+        }
+      ): CompletionItem {
+        return {
+          kind: 9,
+          data: 'variant',
+          command:
+            item.insertTextFormat === 2 // Snippet
+              ? undefined
+              : {
+                  title: '',
+                  command: 'editor.action.triggerSuggest',
+                },
+          sortText: '-' + naturalExpand(variantOrder++),
+          ...item,
+          textEdit: {
+            newText: item.label,
+            range: replacementRange,
+            ...item.textEdit,
+          },
+        }
+      }
 
       items.push(
-        ...Object.entries(state.variants)
-          .filter(([variant]) => !existingVariants.includes(variant))
-          .map(([variant, definition], index) => {
-            let resultingVariants = [...existingVariants, variant]
+        ...state.variants.flatMap((variant) => {
+          let items: CompletionItem[] = []
+
+          if (variant.isArbitrary) {
+            items.push(
+              variantItem({
+                label: `${variant.name}${variant.hasDash ? '-' : ''}[]${sep}`,
+                insertTextFormat: 2,
+                textEdit: {
+                  newText: `${variant.name}${variant.hasDash ? '-' : ''}[\${1}]${sep}\${0}`,
+                },
+                // command: {
+                //   title: '',
+                //   command: 'tailwindCSS.onInsertArbitraryVariantSnippet',
+                //   arguments: [variant.name, replacementRange],
+                // },
+              })
+            )
+          } else if (!existingVariants.includes(variant.name)) {
+            let shouldSortVariants = !semver.gte(state.version, '2.99.0')
+            let resultingVariants = [...existingVariants, variant.name]
 
             if (shouldSortVariants) {
+              let allVariants = state.variants.map(({ name }) => name)
               resultingVariants = resultingVariants.sort(
                 (a, b) => allVariants.indexOf(b) - allVariants.indexOf(a)
               )
             }
 
-            return {
-              label: variant + sep,
-              kind: 9,
-              detail: definition,
-              data: 'variant',
-              command: {
-                title: '',
-                command: 'editor.action.triggerSuggest',
-              },
-              sortText: '-' + naturalExpand(index),
-              textEdit: {
-                newText: resultingVariants[resultingVariants.length - 1] + sep,
-                range: replacementRange,
-              },
-              additionalTextEdits:
-                shouldSortVariants && resultingVariants.length > 1
-                  ? [
-                      {
-                        newText:
-                          resultingVariants.slice(0, resultingVariants.length - 1).join(sep) + sep,
-                        range: {
-                          start: {
-                            ...classListRange.start,
-                            character: classListRange.end.character - partialClassName.length,
-                          },
-                          end: {
-                            ...replacementRange.start,
-                            character: replacementRange.start.character,
+            items.push(
+              variantItem({
+                label: `${variant.name}${sep}`,
+                detail: variant.selectors().join(', '),
+                textEdit: {
+                  newText: resultingVariants[resultingVariants.length - 1] + sep,
+                },
+                additionalTextEdits:
+                  shouldSortVariants && resultingVariants.length > 1
+                    ? [
+                        {
+                          newText:
+                            resultingVariants.slice(0, resultingVariants.length - 1).join(sep) +
+                            sep,
+                          range: {
+                            start: {
+                              ...classListRange.start,
+                              character: classListRange.end.character - partialClassName.length,
+                            },
+                            end: {
+                              ...replacementRange.start,
+                              character: replacementRange.start.character,
+                            },
                           },
                         },
-                      },
-                    ]
-                  : [],
-            } as CompletionItem
-          })
+                      ]
+                    : [],
+              })
+            )
+          }
+
+          if (variant.values.length) {
+            items.push(
+              ...variant.values
+                .filter((value) => !existingVariants.includes(`${variant.name}-${value}`))
+                .map((value) =>
+                  variantItem({
+                    label: `${variant.name}${variant.hasDash ? '-' : ''}${value}${sep}`,
+                    detail: variant.selectors({ value }).join(', '),
+                  })
+                )
+            )
+          }
+
+          return items
+        })
       )
     }
 
@@ -503,6 +556,11 @@     }
   )
 }
 
+const NUMBER_REGEX = /^(\d+\.?|\d*\.\d+)$/
+function isNumber(str: string): boolean {
+  return NUMBER_REGEX.test(str)
+}
+
 async function provideClassNameCompletions(
   state: State,
   document: TextDocument,
@@ -537,14 +595,26 @@   })
 
   const match = text
     .substr(0, text.length - 1) // don't include that extra character from earlier
-    .match(/\b(?<helper>config|theme)\(['"](?<keys>[^'"]*)$/)
+    .match(/\b(?<helper>config|theme)\(\s*['"]?(?<path>[^)'"]*)$/)
 
   if (match === null) {
     return null
   }
 
+  let alpha: string
+  let path = match.groups.path.replace(/^['"]+/g, '')
+  let matches = path.match(/^([^\s]+)(?![^\[]*\])(?:\s*\/\s*([^\/\s]*))$/)
+  if (matches) {
+    path = matches[1]
+    alpha = matches[2]
+  }
+
+  if (alpha !== undefined) {
+    return null
+  }
+
   let base = match.groups.helper === 'config' ? state.config : dlv(state.config, 'theme', {})
-  let parts = match.groups.keys.split(/([\[\].]+)/)
+  let parts = path.split(/([\[\].]+)/)
   let keys = parts.filter((_, i) => i % 2 === 0)
   let separators = parts.filter((_, i) => i % 2 !== 0)
   // let obj =
@@ -557,7 +627,7 @@     return arr.reduce((acc, cur) => acc + cur.length, 0)
   }
 
   let obj: any
-  let offset: number = 0
+  let offset: number = keys[keys.length - 1].length
   let separator: string = separators.length ? separators[separators.length - 1] : null
 
   if (keys.length === 1) {
@@ -576,41 +646,73 @@   }
 
   if (!obj) return null
 
+  let editRange = {
+    start: {
+      line: position.line,
+      character: position.character - offset,
+    },
+    end: position,
+  }
+
   return {
     isIncomplete: false,
-    items: Object.keys(obj).map((item, index) => {
-      let color = getColorFromValue(obj[item])
-      const replaceDot: boolean = item.indexOf('.') !== -1 && separator && separator.endsWith('.')
-      const insertClosingBrace: boolean =
-        text.charAt(text.length - 1) !== ']' &&
-        (replaceDot || (separator && separator.endsWith('[')))
-      const detail = stringifyConfigValue(obj[item])
+    items: Object.keys(obj)
+      .sort((a, z) => {
+        let aIsNumber = isNumber(a)
+        let zIsNumber = isNumber(z)
+        if (aIsNumber && !zIsNumber) {
+          return -1
+        }
+        if (!aIsNumber && zIsNumber) {
+          return 1
+        }
+        if (aIsNumber && zIsNumber) {
+          return parseFloat(a) - parseFloat(z)
+        }
+        return 0
+      })
+      .map((item, index) => {
+        let color = getColorFromValue(obj[item])
+        const replaceDot: boolean = item.indexOf('.') !== -1 && separator && separator.endsWith('.')
+        const insertClosingBrace: boolean =
+          text.charAt(text.length - 1) !== ']' &&
+          (replaceDot || (separator && separator.endsWith('[')))
+        const detail = stringifyConfigValue(obj[item])
 
-      return {
-        label: item,
-        filterText: `${replaceDot ? '.' : ''}${item}`,
-        sortText: naturalExpand(index),
-        kind: color ? 16 : isObject(obj[item]) ? 9 : 10,
-        // VS Code bug causes some values to not display in some cases
-        detail: detail === '0' || detail === 'transparent' ? `${detail} ` : detail,
-        documentation:
-          color && typeof color !== 'string' && (color.alpha ?? 1) !== 0
-            ? culori.formatRgb(color)
-            : null,
-        textEdit: {
-          newText: `${replaceDot ? '[' : ''}${item}${insertClosingBrace ? ']' : ''}`,
-          range: {
-            start: {
-              line: position.line,
-              character:
-                position.character - keys[keys.length - 1].length - (replaceDot ? 1 : 0) - offset,
-            },
-            end: position,
+        return {
+          label: item,
+          sortText: naturalExpand(index),
+          commitCharacters: [!item.includes('.') && '.', !item.includes('[') && '['].filter(
+            Boolean
+          ),
+          kind: color ? 16 : isObject(obj[item]) ? 9 : 10,
+          // VS Code bug causes some values to not display in some cases
+          detail: detail === '0' || detail === 'transparent' ? `${detail} ` : detail,
+          documentation:
+            color && typeof color !== 'string' && (color.alpha ?? 1) !== 0
+              ? culori.formatRgb(color)
+              : null,
+          textEdit: {
+            newText: `${item}${insertClosingBrace ? ']' : ''}`,
+            range: editRange,
           },
-        },
-        data: 'helper',
-      }
-    }),
+          additionalTextEdits: replaceDot
+            ? [
+                {
+                  newText: '[',
+                  range: {
+                    start: {
+                      ...editRange.start,
+                      character: editRange.start.character - 1,
+                    },
+                    end: editRange.start,
+                  },
+                },
+              ]
+            : [],
+          data: 'helper',
+        }
+      }),
   }
 }
 
@@ -741,7 +843,12 @@   const parts = match.groups.partial.split(/\s*,\s*/)
 
   if (/\s+/.test(parts[parts.length - 1])) return null
 
-  let possibleVariants = Object.keys(state.variants)
+  let possibleVariants = state.variants.flatMap((variant) => {
+    if (variant.values.length) {
+      return variant.values.map((value) => `${variant.name}${variant.hasDash ? '-' : ''}${value}`)
+    }
+    return [variant.name]
+  })
   const existingVariants = parts.slice(0, parts.length - 1)
 
   if (state.jit) {
@@ -945,6 +1052,20 @@               )})`,
             },
           },
         ]),
+    ...(semver.gte(state.version, '3.2.0')
+      ? [
+          {
+            label: '@config',
+            documentation: {
+              kind: 'markdown' as typeof MarkupKind.Markdown,
+              value: `[Tailwind CSS Documentation](${docsUrl(
+                state.version,
+                'functions-and-directives/#config'
+              )})`,
+            },
+          },
+        ]
+      : []),
   ]
 
   return {
@@ -967,6 +1088,52 @@     })),
   }
 }
 
+async function provideConfigDirectiveCompletions(
+  state: State,
+  document: TextDocument,
+  position: Position
+): Promise<CompletionList> {
+  if (!isCssContext(state, document, position)) {
+    return null
+  }
+
+  if (!semver.gte(state.version, '3.2.0')) {
+    return null
+  }
+
+  let text = document.getText({ start: { line: position.line, character: 0 }, end: position })
+  let match = text.match(/@config\s*(?<partial>'[^']*|"[^"]*)$/)
+  if (!match) {
+    return null
+  }
+  let partial = match.groups.partial.slice(1) // remove quote
+  let valueBeforeLastSlash = partial.substring(0, partial.lastIndexOf('/'))
+  let valueAfterLastSlash = partial.substring(partial.lastIndexOf('/') + 1)
+
+  return {
+    isIncomplete: false,
+    items: (await state.editor.readDirectory(document, valueBeforeLastSlash || '.'))
+      .filter(([name, type]) => type.isDirectory || /\.c?js$/.test(name))
+      .map(([name, type]) => ({
+        label: type.isDirectory ? name + '/' : name,
+        kind: type.isDirectory ? 19 : 17,
+        textEdit: {
+          newText: type.isDirectory ? name + '/' : name,
+          range: {
+            start: {
+              line: position.line,
+              character: position.character - valueAfterLastSlash.length,
+            },
+            end: position,
+          },
+        },
+        command: type.isDirectory
+          ? { command: 'editor.action.triggerSuggest', title: '' }
+          : undefined,
+      })),
+  }
+}
+
 async function provideEmmetCompletions(
   state: State,
   document: TextDocument,
@@ -1055,6 +1222,7 @@     provideScreenDirectiveCompletions(state, document, position) ||
     provideVariantsDirectiveCompletions(state, document, position) ||
     provideTailwindDirectiveCompletions(state, document, position) ||
     provideLayerDirectiveCompletions(state, document, position) ||
+    (await provideConfigDirectiveCompletions(state, document, position)) ||
     (await provideCustomClassNameCompletions(state, document, position))
 
   if (result) return result
M packages/tailwindcss-language-service/src/diagnostics/getInvalidConfigPathDiagnostics.tspackages/tailwindcss-language-service/src/diagnostics/getInvalidConfigPathDiagnostics.ts
diff --git a/packages/tailwindcss-language-service/src/diagnostics/getInvalidConfigPathDiagnostics.ts b/packages/tailwindcss-language-service/src/diagnostics/getInvalidConfigPathDiagnostics.ts
index 716ce2c8a05086bd55fc13265b0e9284f2591666..0af368315ee8d9cb145467251a9cd2e403707383 100644
--- a/packages/tailwindcss-language-service/src/diagnostics/getInvalidConfigPathDiagnostics.ts
+++ b/packages/tailwindcss-language-service/src/diagnostics/getInvalidConfigPathDiagnostics.ts
@@ -1,16 +1,12 @@
 import { State, Settings } from '../util/state'
-import type { TextDocument, Range, DiagnosticSeverity } from 'vscode-languageserver'
+import type { TextDocument } from 'vscode-languageserver'
 import { InvalidConfigPathDiagnostic, DiagnosticKind } from './types'
-import { isCssDoc } from '../util/css'
-import { getLanguageBoundaries } from '../util/getLanguageBoundaries'
-import { findAll, indexToPosition } from '../util/find'
+import { findHelperFunctionsInDocument } from '../util/find'
 import { stringToPath } from '../util/stringToPath'
 import isObject from '../util/isObject'
 import { closest } from '../util/closest'
-import { absoluteRange } from '../util/absoluteRange'
 import { combinations } from '../util/combinations'
 import dlv from 'dlv'
-import { getTextWithoutComments } from '../util/doc'
 
 function pathToString(path: string | string[]): string {
   if (typeof path === 'string') return path
@@ -167,54 +163,24 @@   let severity = settings.tailwindCSS.lint.invalidConfigPath
   if (severity === 'ignore') return []
 
   let diagnostics: InvalidConfigPathDiagnostic[] = []
-  let ranges: Range[] = []
 
-  if (isCssDoc(state, document)) {
-    ranges.push(undefined)
-  } else {
-    let boundaries = getLanguageBoundaries(state, document)
-    if (!boundaries) return []
-    ranges.push(...boundaries.filter((b) => b.type === 'css').map(({ range }) => range))
-  }
-
-  ranges.forEach((range) => {
-    let text = getTextWithoutComments(document, 'css', range)
-    let matches = findAll(
-      /(?<prefix>\s|^)(?<helper>config|theme)\((?<quote>['"])(?<key>[^)]+)\k<quote>[^)]*\)/g,
-      text
-    )
-
-    matches.forEach((match) => {
-      let base = match.groups.helper === 'theme' ? ['theme'] : []
-      let result = validateConfigPath(state, match.groups.key, base)
+  findHelperFunctionsInDocument(state, document).forEach((helperFn) => {
+    let base = helperFn.helper === 'theme' ? ['theme'] : []
+    let result = validateConfigPath(state, helperFn.path, base)
 
-      if (result.isValid === true) {
-        return null
-      }
-
-      let startIndex =
-        match.index +
-        match.groups.prefix.length +
-        match.groups.helper.length +
-        1 + // open paren
-        match.groups.quote.length
+    if (result.isValid === true) {
+      return
+    }
 
-      diagnostics.push({
-        code: DiagnosticKind.InvalidConfigPath,
-        range: absoluteRange(
-          {
-            start: indexToPosition(text, startIndex),
-            end: indexToPosition(text, startIndex + match.groups.key.length),
-          },
-          range
-        ),
-        severity:
-          severity === 'error'
-            ? 1 /* DiagnosticSeverity.Error */
-            : 2 /* DiagnosticSeverity.Warning */,
-        message: result.reason,
-        suggestions: result.suggestions,
-      })
+    diagnostics.push({
+      code: DiagnosticKind.InvalidConfigPath,
+      range: helperFn.ranges.path,
+      severity:
+        severity === 'error'
+          ? 1 /* DiagnosticSeverity.Error */
+          : 2 /* DiagnosticSeverity.Warning */,
+      message: result.reason,
+      suggestions: result.suggestions,
     })
   })
 
M packages/tailwindcss-language-service/src/diagnostics/getInvalidVariantDiagnostics.tspackages/tailwindcss-language-service/src/diagnostics/getInvalidVariantDiagnostics.ts
diff --git a/packages/tailwindcss-language-service/src/diagnostics/getInvalidVariantDiagnostics.ts b/packages/tailwindcss-language-service/src/diagnostics/getInvalidVariantDiagnostics.ts
index 1b6c997abe4119d48fd73b428837f673c1fd08e1..454e0f59cafae735251e5b97a10af6329a9f8d8c 100644
--- a/packages/tailwindcss-language-service/src/diagnostics/getInvalidVariantDiagnostics.ts
+++ b/packages/tailwindcss-language-service/src/diagnostics/getInvalidVariantDiagnostics.ts
@@ -32,7 +32,12 @@     if (!boundaries) return []
     ranges.push(...boundaries.filter((b) => b.type === 'css').map(({ range }) => range))
   }
 
-  let possibleVariants = Object.keys(state.variants)
+  let possibleVariants = state.variants.flatMap((variant) => {
+    if (variant.values.length) {
+      return variant.values.map((value) => `${variant.name}${variant.hasDash ? '-' : ''}${value}`)
+    }
+    return [variant.name]
+  })
   if (state.jit) {
     possibleVariants.unshift('responsive')
     possibleVariants = possibleVariants.filter((v) => !state.screens.includes(v))
M packages/tailwindcss-language-service/src/documentColorProvider.tspackages/tailwindcss-language-service/src/documentColorProvider.ts
diff --git a/packages/tailwindcss-language-service/src/documentColorProvider.ts b/packages/tailwindcss-language-service/src/documentColorProvider.ts
index 081d1c0c8086a553d36727711fb0aae744d38ca9..dac832f646da92365e4ef4edc5844bc0e52f45a7 100644
--- a/packages/tailwindcss-language-service/src/documentColorProvider.ts
+++ b/packages/tailwindcss-language-service/src/documentColorProvider.ts
@@ -36,12 +36,12 @@   })
 
   let helperFns = findHelperFunctionsInDocument(state, document)
   helperFns.forEach((fn) => {
-    let keys = stringToPath(fn.value)
+    let keys = stringToPath(fn.path)
     let base = fn.helper === 'theme' ? ['theme'] : []
     let value = dlv(state.config, [...base, ...keys])
     let color = getColorFromValue(value)
     if (color && typeof color !== 'string' && (color.alpha ?? 1) !== 0) {
-      colors.push({ range: fn.valueRange, color: culoriColorToVscodeColor(color) })
+      colors.push({ range: fn.ranges.path, color: culoriColorToVscodeColor(color) })
     }
   })
 
Ipackages/tailwindcss-language-service/src/documentLinksProvider.ts
diff --git a/packages/tailwindcss-language-service/src/documentLinksProvider.ts b/packages/tailwindcss-language-service/src/documentLinksProvider.ts
new file mode 100644
index 0000000000000000000000000000000000000000..987acbf6745a641e510683cb194acfdb0a6dd62c
--- /dev/null
+++ b/packages/tailwindcss-language-service/src/documentLinksProvider.ts
@@ -0,0 +1,57 @@
+import { State } from './util/state'
+import type { DocumentLink, Range, TextDocument } from 'vscode-languageserver'
+import { isCssDoc } from './util/css'
+import { getLanguageBoundaries } from './util/getLanguageBoundaries'
+import { findAll, indexToPosition } from './util/find'
+import { getTextWithoutComments } from './util/doc'
+import { absoluteRange } from './util/absoluteRange'
+import * as semver from './util/semver'
+
+export function getDocumentLinks(
+  state: State,
+  document: TextDocument,
+  resolveTarget: (linkPath: string) => string
+): DocumentLink[] {
+  return getConfigDirectiveLinks(state, document, resolveTarget)
+}
+
+function getConfigDirectiveLinks(
+  state: State,
+  document: TextDocument,
+  resolveTarget: (linkPath: string) => string
+): DocumentLink[] {
+  if (!semver.gte(state.version, '3.2.0')) {
+    return []
+  }
+
+  let links: DocumentLink[] = []
+  let ranges: Range[] = []
+
+  if (isCssDoc(state, document)) {
+    ranges.push(undefined)
+  } else {
+    let boundaries = getLanguageBoundaries(state, document)
+    if (!boundaries) return []
+    ranges.push(...boundaries.filter((b) => b.type === 'css').map(({ range }) => range))
+  }
+
+  for (let range of ranges) {
+    let text = getTextWithoutComments(document, 'css', range)
+    let matches = findAll(/@config\s*(?<path>'[^']+'|"[^"]+")/g, text)
+
+    for (let match of matches) {
+      links.push({
+        target: resolveTarget(match.groups.path.slice(1, -1)),
+        range: absoluteRange(
+          {
+            start: indexToPosition(text, match.index + match[0].length - match.groups.path.length),
+            end: indexToPosition(text, match.index + match[0].length),
+          },
+          range
+        ),
+      })
+    }
+  }
+
+  return links
+}
M packages/tailwindcss-language-service/src/hoverProvider.tspackages/tailwindcss-language-service/src/hoverProvider.ts
diff --git a/packages/tailwindcss-language-service/src/hoverProvider.ts b/packages/tailwindcss-language-service/src/hoverProvider.ts
index 090482ecbc7d765411296a9e4cbfbfe8e8c41ad3..f506bb27415453404d2b078e434866ebb9f47016 100644
--- a/packages/tailwindcss-language-service/src/hoverProvider.ts
+++ b/packages/tailwindcss-language-service/src/hoverProvider.ts
@@ -3,12 +3,12 @@ import type { Hover, TextDocument, Position } from 'vscode-languageserver'
 import { stringifyCss, stringifyConfigValue } from './util/stringify'
 import dlv from 'dlv'
 import { isCssContext } from './util/css'
-import { findClassNameAtPosition } from './util/find'
+import { findClassNameAtPosition, findHelperFunctionsInRange } from './util/find'
 import { validateApply } from './util/validateApply'
 import { getClassNameParts } from './util/getClassNameAtPosition'
 import * as jit from './util/jit'
 import { validateConfigPath } from './diagnostics/getInvalidConfigPathDiagnostics'
-import { getTextWithoutComments } from './util/doc'
+import { isWithinRange } from './util/isWithinRange'
 
 export async function doHover(
   state: State,
@@ -22,49 +22,34 @@   )
 }
 
 function provideCssHelperHover(state: State, document: TextDocument, position: Position): Hover {
-  if (!isCssContext(state, document, position)) return null
-
-  const line = getTextWithoutComments(document, 'css').split('\n')[position.line]
-
-  const match = line.match(/(?<helper>theme|config)\((?<quote>['"])(?<key>[^)]+)\k<quote>[^)]*\)/)
-
-  if (match === null) return null
-
-  const startChar = match.index + match.groups.helper.length + 2
-  const endChar = startChar + match.groups.key.length
-
-  if (position.character < startChar || position.character >= endChar) {
+  if (!isCssContext(state, document, position)) {
     return null
   }
 
-  let key = match.groups.key
-    .split(/(\[[^\]]+\]|\.)/)
-    .filter(Boolean)
-    .filter((x) => x !== '.')
-    .map((x) => x.replace(/^\[([^\]]+)\]$/, '$1'))
+  let helperFns = findHelperFunctionsInRange(document, {
+    start: { line: position.line, character: 0 },
+    end: { line: position.line + 1, character: 0 },
+  })
 
-  if (key.length === 0) return null
-
-  if (match.groups.helper === 'theme') {
-    key = ['theme', ...key]
+  for (let helperFn of helperFns) {
+    if (isWithinRange(position, helperFn.ranges.path)) {
+      let validated = validateConfigPath(
+        state,
+        helperFn.path,
+        helperFn.helper === 'theme' ? ['theme'] : []
+      )
+      let value = validated.isValid ? stringifyConfigValue(validated.value) : null
+      if (value === null) {
+        return null
+      }
+      return {
+        contents: { kind: 'markdown', value: ['```plaintext', value, '```'].join('\n') },
+        range: helperFn.ranges.path,
+      }
+    }
   }
 
-  const value = validateConfigPath(state, key).isValid
-    ? stringifyConfigValue(dlv(state.config, key))
-    : null
-
-  if (value === null) return null
-
-  return {
-    contents: { kind: 'markdown', value: ['```plaintext', value, '```'].join('\n') },
-    range: {
-      start: { line: position.line, character: startChar },
-      end: {
-        line: position.line,
-        character: endChar,
-      },
-    },
-  }
+  return null
 }
 
 async function provideClassNameHover(
M packages/tailwindcss-language-service/src/util/find.tspackages/tailwindcss-language-service/src/util/find.ts
diff --git a/packages/tailwindcss-language-service/src/util/find.ts b/packages/tailwindcss-language-service/src/util/find.ts
index 4e851158c1020139e6cc73d0214cc21127e1fe02..edcb59529869ed0bbdcf4f559a5fb160300f3e71 100644
--- a/packages/tailwindcss-language-service/src/util/find.ts
+++ b/packages/tailwindcss-language-service/src/util/find.ts
@@ -359,36 +359,48 @@   doc: TextDocument,
   range?: Range
 ): DocumentHelperFunction[] {
   const text = getTextWithoutComments(doc, 'css', range)
-  const matches = findAll(
-    /(?<before>^|\s)(?<helper>theme|config)\((?:(?<single>')([^']+)'|(?<double>")([^"]+)")[^)]*\)/gm,
+  let matches = findAll(
+    /(?<prefix>\s|^)(?<helper>config|theme)(?<innerPrefix>\(\s*)(?<path>[^)]*?)\s*\)/g,
     text
   )
 
   return matches.map((match) => {
-    let value = match[4] || match[6]
-    let startIndex = match.index + match.groups.before.length
+    let quotesBefore = ''
+    let path = match.groups.path.replace(/['"]+$/, '').replace(/^['"]+/, (m) => {
+      quotesBefore = m
+      return ''
+    })
+    let matches = path.match(/^([^\s]+)(?![^\[]*\])(?:\s*\/\s*([^\/\s]+))$/)
+    if (matches) {
+      path = matches[1]
+    }
+    path = path.replace(/['"]*\s*$/, '')
+
+    let startIndex =
+      match.index +
+      match.groups.prefix.length +
+      match.groups.helper.length +
+      match.groups.innerPrefix.length
+
     return {
-      full: match[0].substr(match.groups.before.length),
-      value,
       helper: match.groups.helper === 'theme' ? 'theme' : 'config',
-      quotes: match.groups.single ? "'" : '"',
-      range: resolveRange(
-        {
-          start: indexToPosition(text, startIndex),
-          end: indexToPosition(text, match.index + match[0].length),
-        },
-        range
-      ),
-      valueRange: resolveRange(
-        {
-          start: indexToPosition(text, startIndex + match.groups.helper.length + 1),
-          end: indexToPosition(
-            text,
-            startIndex + match.groups.helper.length + 1 + 1 + value.length + 1
-          ),
-        },
-        range
-      ),
+      path,
+      ranges: {
+        full: resolveRange(
+          {
+            start: indexToPosition(text, startIndex),
+            end: indexToPosition(text, startIndex + match.groups.path.length),
+          },
+          range
+        ),
+        path: resolveRange(
+          {
+            start: indexToPosition(text, startIndex + quotesBefore.length),
+            end: indexToPosition(text, startIndex + quotesBefore.length + path.length),
+          },
+          range
+        ),
+      },
     }
   })
 }
M packages/tailwindcss-language-service/src/util/getVariantsFromClassName.tspackages/tailwindcss-language-service/src/util/getVariantsFromClassName.ts
diff --git a/packages/tailwindcss-language-service/src/util/getVariantsFromClassName.ts b/packages/tailwindcss-language-service/src/util/getVariantsFromClassName.ts
index 10dfe90c7cf4d353d820a43f32ed880f5fc490c8..b1709e12c482168bcb00cd38cc5a581eb24ec0eb 100644
--- a/packages/tailwindcss-language-service/src/util/getVariantsFromClassName.ts
+++ b/packages/tailwindcss-language-service/src/util/getVariantsFromClassName.ts
@@ -5,17 +5,25 @@ export function getVariantsFromClassName(
   state: State,
   className: string
 ): { variants: string[]; offset: number } {
-  let allVariants = Object.keys(state.variants)
-  let parts = splitAtTopLevelOnly(className, state.separator).filter(Boolean)
+  let allVariants = state.variants.flatMap((variant) => {
+    if (variant.values.length) {
+      return variant.values.map((value) => `${variant.name}${variant.hasDash ? '-' : ''}${value}`)
+    }
+    return [variant.name]
+  })
   let variants = new Set<string>()
   let offset = 0
+  let parts = splitAtTopLevelOnly(className, state.separator)
+  if (parts.length < 2) {
+    return { variants: Array.from(variants), offset }
+  }
+  parts = parts.filter(Boolean)
 
   for (let part of parts) {
     if (
       allVariants.includes(part) ||
       (state.jit &&
-        ((part.includes('[') && part.endsWith(']')) ||
-          (part.includes('<') && part.includes('>'))) &&
+        ((part.includes('[') && part.endsWith(']')) || part.includes('/')) &&
         jit.generateRules(state, [`${part}${state.separator}[color:red]`]).rules.length > 0)
     ) {
       variants.add(part)
M packages/tailwindcss-language-service/src/util/state.tspackages/tailwindcss-language-service/src/util/state.ts
diff --git a/packages/tailwindcss-language-service/src/util/state.ts b/packages/tailwindcss-language-service/src/util/state.ts
index d699ffb6c83f4b694966ceb8444c872c383a283e..c958d2b1aeb517b609b701fb1524e202b2719882 100644
--- a/packages/tailwindcss-language-service/src/util/state.ts
+++ b/packages/tailwindcss-language-service/src/util/state.ts
@@ -29,6 +29,10 @@     diagnosticRelatedInformation: boolean
   }
   getConfiguration: (uri?: string) => Promise<Settings>
   getDocumentSymbols: (uri: string) => Promise<SymbolInformation[]>
+  readDirectory: (
+    document: TextDocument,
+    directory: string
+  ) => Promise<Array<[string, { isDirectory: boolean }]>>
 }
 
 type DiagnosticSeveritySetting = 'ignore' | 'warning' | 'error'
@@ -74,6 +78,14 @@
 export interface FeatureFlags {
   future: string[]
   experimental: string[]
+}
+
+export interface Variant {
+  name: string
+  values: string[]
+  isArbitrary: boolean
+  hasDash: boolean
+  selectors: (params?: { value?: string; label?: string }) => string[]
 }
 
 export interface State {
@@ -86,7 +98,7 @@   separator?: string
   dependencies?: string[]
   plugins?: any
   screens?: string[]
-  variants?: Record<string, string | null>
+  variants?: Variant[]
   corePlugins?: string[]
   modules?: {
     tailwindcss?: { version: string; module: any }
@@ -124,12 +136,12 @@   classList: DocumentClassList
 }
 
 export type DocumentHelperFunction = {
-  full: string
   helper: 'theme' | 'config'
-  value: string
-  quotes: '"' | "'"
-  range: Range
-  valueRange: Range
+  path: string
+  ranges: {
+    full: Range
+    path: Range
+  }
 }
 
 export type ClassNameMeta = {
M packages/vscode-tailwindcss/src/extension.tspackages/vscode-tailwindcss/src/extension.ts
diff --git a/packages/vscode-tailwindcss/src/extension.ts b/packages/vscode-tailwindcss/src/extension.ts
index 1677c1b2b19f8fd9b951516f3ccc2acf9042cd1d..d1cb232a15727263b29110a09d58a70b75da31fe 100755
--- a/packages/vscode-tailwindcss/src/extension.ts
+++ b/packages/vscode-tailwindcss/src/extension.ts
@@ -26,6 +26,7 @@   CompletionList,
   ProviderResult,
   SnippetString,
   TextEdit,
+  TextEditorSelectionChangeKind,
 } from 'vscode'
 import {
   LanguageClient,
@@ -148,6 +149,62 @@         outputChannel.show()
       }
     })
   )
+
+  // context.subscriptions.push(
+  //   commands.registerCommand(
+  //     'tailwindCSS.onInsertArbitraryVariantSnippet',
+  //     (
+  //       variantName: string,
+  //       range: {
+  //         start: { line: number; character: number }
+  //         end: { line: number; character: number }
+  //       }
+  //     ) => {
+  //       let listener = Window.onDidChangeTextEditorSelection((event) => {
+  //         if (event.selections.length !== 1) {
+  //           listener.dispose()
+  //           return
+  //         }
+
+  //         let document = event.textEditor.document
+  //         let selection = event.selections[0]
+
+  //         let line = document.lineAt(range.start.line)
+  //         let lineRangeFromCompletion = new Range(
+  //           range.start.line,
+  //           range.start.character,
+  //           line.range.end.line,
+  //           line.range.end.character
+  //         )
+  //         let lineText = document.getText(lineRangeFromCompletion)
+  //         let match = lineText.match(/^(\S+)]:/)
+
+  //         if (!match) {
+  //           listener.dispose()
+  //           return
+  //         }
+
+  //         let arbitraryValueRange = new Range(
+  //           lineRangeFromCompletion.start.translate(0, variantName.length + 2),
+  //           lineRangeFromCompletion.start.translate(0, match[1].length)
+  //         )
+
+  //         if (!arbitraryValueRange.contains(selection)) {
+  //           listener.dispose()
+  //         }
+
+  //         if (
+  //           event.kind === TextEditorSelectionChangeKind.Command &&
+  //           selection.isEmpty &&
+  //           selection.start.isEqual(arbitraryValueRange.end.translate(0, 2))
+  //         ) {
+  //           commands.executeCommand('editor.action.triggerSuggest')
+  //         }
+  //       })
+  //       context.subscriptions.push(listener)
+  //     }
+  //   )
+  // )
 
   let watcher = Workspace.createFileSystemWatcher(`**/${CONFIG_FILE_GLOB}`, false, true, true)
 
@@ -378,7 +435,11 @@       middleware: {
         async resolveCompletionItem(item, token, next) {
           let result = await next(item, token)
           let selections = Window.activeTextEditor.selections
-          if (selections.length > 1 && result.additionalTextEdits?.length > 0) {
+          if (
+            result['data'] === 'variant' &&
+            selections.length > 1 &&
+            result.additionalTextEdits?.length > 0
+          ) {
             let length =
               selections[0].start.character - result.additionalTextEdits[0].range.start.character
             let prefixLength =