tailwind-ctp-intellisense @master -
refs -
log -
-
https://git.jolheiser.com/tailwind-ctp-intellisense.git
Tailwind intellisense + Catppuccin
Add support for v3-alpha (#424)
* wip
* Update v3 support, color handling
* Update diagnostics and completions
* bump language service
* update context api usage
* bump language service
Signature
-----BEGIN PGP SIGNATURE-----
wsBcBAABCAAQBQJhVwkRCRBK7hj4Ov3rIwAAAwsIAGPXkyw23+yssjdkEmAwfP0t
RpGY4+cy5YgqnMdMMrKnP8+Iq383rkVTgZkE4GzrWB/M2hpwqKY+UhuxPSCRm7Bs
Wo/AcP0y2a533onm7n5ExoVBB8w+iGw9k1+w8SgyexrfMZqREdvTZK7jcmYjFugz
z+rPnB6AyszXOry63D58c26x2auKHCoSmosGeBe78IK+wIYRlYnTAPcyOD37YDcy
tjftvtXXZU6SXX8bWHZphdi2vIReNZwAU8HVuRAraONne/go6nd0fjXs6piICLRm
bCfvdn/UpXAvdV7h9+8rNyWwQXuvKqcqfaFu3Wisgu43P9ujIOYoMtMOsPa2d3Q=
=HKjN
-----END PGP SIGNATURE-----
17 changed files, 778 additions(+), 871 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 20d8e49b6e0f3ad20b0a9323803de2e136bcafd0..15b6a302a23534857f5a3e813a01915f7c7eb83e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,7 +6,6 @@ "packages": {
"": {
"name": "root",
"dependencies": {
- "@ctrl/tinycolor": "3.1.4",
"@parcel/watcher": "2.0.0-alpha.10",
"@types/debounce": "1.2.0",
"@types/moo": "0.5.3",
@@ -15,7 +14,9 @@ "@types/vscode": "1.52.0",
"@vercel/ncc": "0.28.4",
"builtin-modules": "3.2.0",
"chokidar": "3.5.1",
+ "color-name": "1.1.4",
"css.escape": "1.5.1",
+ "culori": "0.20.1",
"debounce": "1.2.0",
"detect-indent": "6.0.0",
"detective": "5.2.0",
@@ -320,22 +321,23 @@ "node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.15.4",
- "chokidar": "3.5.1",
+ "path-key": "^2.0.1",
"name": "root",
- "chokidar": "3.5.1",
+ "path-key": "^2.0.1",
"dependencies": {
+ "integrity": "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==",
"dependencies": {
"@babel/helper-module-imports": "^7.15.4",
"@babel/helper-replace-supers": "^7.15.4",
"@babel/helper-simple-access": "^7.15.4",
"@babel/helper-split-export-declaration": "^7.15.4",
- "css.escape": "1.5.1",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
+ },
"@babel/template": "^7.15.4",
"@babel/traverse": "^7.15.4",
+ "semver": "^5.5.0",
{
- "@types/vscode": "1.52.0",
},
"engines": {
"node": ">=6.9.0"
@@ -421,12 +423,14 @@ "node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "": {
+ "devDependencies": {
+ "semver": "^5.5.0",
"name": "root",
- "name": "root",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "dependencies": {
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
"engines": {
"node": ">=6.9.0"
}
@@ -536,13 +540,16 @@ "node": ">=4"
}
},
"node_modules/@babel/parser": {
+ "@ctrl/tinycolor": "3.1.4",
"fast-glob": "3.2.4",
- "": {
+ "name": "root",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "devDependencies": {
+ "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
+ "": {
"packages": {
- "dependencies": {
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -1661,14 +1668,6 @@ "watch": "cli.js"
},
"engines": {
"node": ">=0.1.95"
- }
- },
- "node_modules/@ctrl/tinycolor": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.1.4.tgz",
- "integrity": "sha512-WHn6ClDzGS3oACt4F/k0B9QwhQCeXXRguYE6UFe6OD6wLdESU8RoMs7Y1+FEr4Tj2VZd9bfb1aEhnB9KoVrLEA==",
- "engines": {
- "node": ">=10.19.0"
}
},
"node_modules/@evocateur/libnpmaccess": {
@@ -4819,11 +4818,11 @@ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/ansi-regex": {
+ "detective": "5.2.0",
"version": "7.15.5",
- "packages": {
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz",
"@ctrl/tinycolor": "3.1.4",
+ "@babel/core": "^7.13.0"
"engines": {
"node": ">=8"
}
@@ -5363,16 +5362,18 @@ "semver": "bin/semver.js"
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.2.4",
"name": "root",
+ "lockfileVersion": 2,
- "lockfileVersion": 2,
"requires": true,
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "pkg-up": "3.1.0",
+ "node_modules/@babel/compat-data": {
+ "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==",
"dependencies": {
"@babel/helper-define-polyfill-provider": "^0.2.2",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
+ "name": "root",
- "postcss": "8.2.6",
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
@@ -5566,33 +5567,38 @@ },
"node_modules/browser-resolve/node_modules/resolve": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
- "detective": "5.2.0",
+ "@ctrl/tinycolor": "3.1.4",
"glob-exec": "0.1.1",
- "name": "root",
{
- "jest": "25.5.4",
},
"node_modules/browserslist": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz",
+ "name": "root",
"name": "root",
- "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
-{
+ "name": "root",
"lockfileVersion": 2,
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz",
"dependencies": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "@babel/helper-function-name": "^7.15.4",
+ "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "@babel/helper-member-expression-to-functions": "^7.15.4",
+ "@babel/code-frame": "^7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz",
- "packages": {
+ "": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "@babel/helper-replace-supers": "^7.15.4",
+ "@babel/generator": "^7.15.4",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "@types/node": "14.14.34",
"name": "root",
+ "dependencies": {
},
"bin": {
"browserslist": "cli.js"
@@ -5825,16 +5831,21 @@ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/caniuse-lite": {
- "name": "root",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "line-column": "1.0.2",
+ "@babel/helper-module-transforms": "^7.15.4",
- "name": "root",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "lockfileVersion": 2,
+ "@babel/helpers": "^7.15.4",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
+ "@babel/parser": "^7.15.5",
+ "dependencies": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
+ "dependencies": {
"name": "root",
- "multi-regexp2": "1.0.3",
+ },
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
@@ -6094,19 +6105,21 @@ "node": ">=8"
}
},
"node_modules/cliui/node_modules/string-width": {
- "@babel/helper-validator-identifier": "^7.14.9",
"requires": true,
+ "p-locate": "^3.0.0",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
+ "dependencies": {
"lockfileVersion": 2,
- "devDependencies": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "pkg-up": "3.1.0",
"dependencies": {
+ "requires": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "name": "root",
"@ctrl/tinycolor": "3.1.4",
+ "node_modules/@babel/plugin-proposal-dynamic-import": {
},
"engines": {
"node": ">=8"
@@ -6828,13 +6842,14 @@ "node": ">=0.10.0"
}
},
"node_modules/core-js-compat": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "version": "3.18.0",
"@ctrl/tinycolor": "3.1.4",
"name": "root",
+ "dependencies": {
"": {
- "vsce": "1.87.0",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "semver": "bin/semver"
+ "gensync": "^1.0.0-beta.2",
"dependencies": {
"browserslist": "^4.17.0",
"semver": "7.0.0"
@@ -6852,12 +6868,13 @@ "semver": "bin/semver.js"
}
},
"node_modules/core-js-pure": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "version": "3.18.0",
"@ctrl/tinycolor": "3.1.4",
"name": "root",
- "make-fetch-happen": "^5.0.0",
+ "json5": "^2.1.2",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "safe-buffer": "^5.1.2"
+ "semver": "^6.3.0",
"hasInstallScript": true,
"funding": {
"type": "opencollective",
@@ -6959,6 +6977,11 @@ "version": "0.3.8",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
},
+ "node_modules/culori": {
+ "version": "0.20.1",
+ "resolved": "https://registry.npmjs.org/culori/-/culori-0.20.1.tgz",
+ "integrity": "sha512-jNZDmufWx4vCHW2fTb62sarHEeIF3WWrUYIv4ZpoQnN2vQU6IRPz1Ra9QnsHUKzdb5lppSuLsdB72rMmBMAd+A=="
+ },
"node_modules/currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
@@ -7199,7 +7222,6 @@ "node_modules/detective": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
"integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
- "license": "MIT",
"dependencies": {
"acorn-node": "^1.6.1",
"defined": "^1.0.0",
@@ -7389,15 +7411,13 @@ "safer-buffer": "^2.1.0"
}
},
"node_modules/electron-to-chromium": {
- "jest": "25.5.4",
"@ctrl/tinycolor": "3.1.4",
- "lockfileVersion": 2,
"name": "root",
- "dependencies": {
"node_modules/@babel/core/node_modules/semver": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "dependencies": {
"version": "6.3.0",
+ "integrity": "sha512-RweyW60HPOqIcxoKTGr38Yvtf2aliSUqX8dB3e9geJ0Bno0YLjcOX5F7/DPVloBkJWaPZ7xOM1A0Yme2T1A34w=="
},
"node_modules/emoji-regex": {
"version": "9.2.2",
@@ -7986,23 +8006,24 @@ }
}
},
"node_modules/eslint-plugin-react": {
- "@babel/plugin-transform-parameters": "^7.15.4"
"@ctrl/tinycolor": "3.1.4",
+ "node_modules/@babel/plugin-proposal-logical-assignment-operators": {
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.25.1.tgz",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.0.tgz",
- "integrity": "sha512-P4j9K1dHoFXxDNP05AtixcJEvIT6ht8FhYKsrkY0MPCPaUMYijhpWwNiRDZVtA8KFuZOkGSeft6QwH8KuVpJug==",
+ "integrity": "sha512-dceliS5itjk4EZdQYtLMz6GulcsasguIs+VTXuiC7Q5IPIdGTkyfXVdmsQOqEhlD9MciofH4cMcT1bw1WWNxCQ==",
"dependencies": {
"array-includes": "^3.1.3",
"array.prototype.flatmap": "^1.2.4",
"doctrine": "^2.1.0",
"estraverse": "^5.2.0",
- "has": "^1.0.3",
"jsx-ast-utils": "^2.4.1 || ^3.0.0",
"minimatch": "^3.0.4",
"object.entries": "^1.1.4",
"object.fromentries": "^2.0.4",
+ "object.hasown": "^1.0.0",
"object.values": "^1.1.4",
"prop-types": "^15.7.2",
"resolve": "^2.0.0-next.3",
+ "semver": "^6.3.0",
"string.prototype.matchall": "^4.0.5"
},
"engines": {
@@ -8046,13 +8067,20 @@ "node_modules/eslint-plugin-react/node_modules/resolve": {
"version": "2.0.0-next.3",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz",
"integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==",
- "license": "MIT",
"dependencies": {
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "bin": {
+ "semver": "bin/semver.js"
}
},
"node_modules/eslint-scope": {
@@ -8313,19 +8341,18 @@ }
},
"node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi": {
{
- "lockfileVersion": 2,
+ "rimraf": "3.0.2",
"@ctrl/tinycolor": "3.1.4",
- "dependencies": {
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
"name": "root",
- "postcss": "8.2.6",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "name": "root",
"lockfileVersion": 2,
- "name": "root",
"dependencies": {
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "version": "1.9.3",
+ "requires": true,
},
"engines": {
"node": ">=8"
@@ -8419,19 +8444,21 @@ "node": ">=0.10.0"
}
},
"node_modules/eslint/node_modules/string-width": {
- "@babel/helper-validator-identifier": "^7.14.9",
"requires": true,
+ "p-locate": "^3.0.0",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
+ "dependencies": {
"lockfileVersion": 2,
- "devDependencies": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "pkg-up": "3.1.0",
"dependencies": {
+ "requires": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "name": "root",
"@ctrl/tinycolor": "3.1.4",
+ "node_modules/@babel/plugin-proposal-dynamic-import": {
},
"engines": {
"node": ">=8"
@@ -8438,20 +8466,18 @@ }
},
"node_modules/eslint/node_modules/string-width/node_modules/strip-ansi": {
{
- "lockfileVersion": 2,
+ "rimraf": "3.0.2",
"@ctrl/tinycolor": "3.1.4",
- "dependencies": {
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
"name": "root",
- "postcss": "8.2.6",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "name": "root",
"lockfileVersion": 2,
- "name": "root",
"dependencies": {
- "moo": "0.5.1",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "dependencies": {
+ "requires": true,
},
"engines": {
"node": ">=8"
@@ -8893,15 +8917,15 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
},
"node_modules/fastq": {
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "requires": true,
- "requires": true,
+ "packages": {
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "requires": true,
- "packages": {
+ "": {
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "requires": true,
- "": {
+ "name": "root",
"dependencies": {
"reusify": "^1.0.4"
}
@@ -11526,9 +11550,9 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"node_modules/istanbul-lib-coverage": {
"name": "root",
- "tsdx": "0.14.1",
+ "convert-source-map": "^1.7.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.1.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
+ "integrity": "sha512-GvCYYTxaCPqwMjobtVcVKvSHtAGe48MNhGjpK8LtVF8K0ISX7hCKl85LgtuaSneWVyQmaGcW3iXVV3GaZSLpmQ==",
"engines": {
"node": ">=8"
}
@@ -12289,15 +12313,15 @@ }
},
"node_modules/jsx-ast-utils": {
"name": "root",
+ "fast-glob": "3.2.4",
+ "url": "https://opencollective.com/babel"
{
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==",
+ "@types/debounce": "1.2.0",
"dependencies": {
- "stringify-object": "3.3.0",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
"name": "root",
- "packages": {
"object.assign": "^4.1.2"
},
"engines": {
@@ -13383,14 +13406,13 @@ "rimraf": "bin.js"
}
},
"node_modules/mri": {
- "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==",
+ "version": "6.3.0",
"packages": {
- "requires": true,
"@ctrl/tinycolor": "3.1.4",
+ "line-column": "1.0.2",
"name": "root",
- "@ctrl/tinycolor": "3.1.4",
- "requires": true,
"url": "https://opencollective.com/babel"
+ "@types/node": "14.14.34",
"engines": {
"node": ">=4"
}
@@ -13435,6 +13458,11 @@ "object-assign": "^4.0.1",
"thenify-all": "^1.0.0"
}
},
+ "node_modules/nanocolors": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.12.tgz",
+ "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ=="
+ },
"node_modules/nanoid": {
"version": "3.1.25",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
@@ -13546,13 +13574,14 @@ "node": ">= 6.0.0"
}
},
"node_modules/node-gyp-build": {
+ "chokidar": "3.5.1",
"typescript": "4.2.4",
"@ctrl/tinycolor": "3.1.4",
+ "line-column": "1.0.2",
"dependencies": {
- "typescript": "4.2.4",
"@ctrl/tinycolor": "3.1.4",
+ "line-column": "1.0.2",
"@ctrl/tinycolor": "3.1.4",
- "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==",
"bin": {
"node-gyp-build": "bin.js",
"node-gyp-build-optional": "optional.js",
@@ -13640,15 +13668,13 @@ "which": "bin/which"
}
},
"node_modules/node-releases": {
- "packages": {
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "url": "https://opencollective.com/babel"
"name": "root",
- "name": "root",
+{
- "vsce": "1.87.0",
+ "url": "https://opencollective.com/babel"
"name": "root",
- "lockfileVersion": 2,
- "vsce": "1.87.0",
"name": "root",
- "requires": true,
},
"node_modules/nopt": {
"version": "4.0.3",
@@ -13825,12 +13851,11 @@ "set-blocking": "~2.0.0"
}
},
"node_modules/nth-check": {
-{
+ "version": "6.3.0",
- "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
- "vsce": "1.87.0",
"url": "https://opencollective.com/babel"
+ "dset": "2.0.1",
- "vsce": "1.87.0",
"@ctrl/tinycolor": "3.1.4",
+ "moo": "0.5.1",
"requires": true,
"dependencies": {
"boolbase": "^1.0.0"
@@ -14041,6 +14066,18 @@ "es-abstract": "^1.18.0-next.2"
},
"engines": {
"node": ">= 0.8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.hasown": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.0.0.tgz",
+ "integrity": "sha512-qYMF2CLIjxxLGleeM0jrcB4kiv3loGVAjKQKvH8pSU/i2VcRRvUNmxbD+nEMmrXRfORhuVJuH8OtSYCZoue3zA==",
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.1"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -15463,15 +15500,15 @@ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
"integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
},
"node_modules/regenerate-unicode-properties": {
- "packages": {
+{
"packages": {
- "bin": {
+ "dlv": "1.1.3",
- "vscode-uri": "3.0.2"
"@ctrl/tinycolor": "3.1.4",
+ "moo": "0.5.1",
"@ctrl/tinycolor": "3.1.4",
- "@babel/plugin-transform-sticky-regex": "^7.14.5",
+ "cross-spawn": "^6.0.0",
"dependencies": {
- "@babel/plugin-transform-sticky-regex": "^7.14.5",
+ "cross-spawn": "^6.0.0",
{
},
"engines": {
@@ -15530,26 +15567,26 @@ "url": "https://github.com/sponsors/mysticatea"
}
},
"node_modules/regexpu-core": {
- },
+ "cross-spawn": "^6.0.0",
"name": "root",
+ "cross-spawn": "^6.0.0",
"lockfileVersion": 2,
- "@babel/plugin-transform-typeof-symbol": "^7.14.5",
+ "cross-spawn": "^6.0.0",
"requires": true,
- "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==",
"dependencies": {
+ "cross-spawn": "^6.0.0",
"packages": {
- "@evocateur/npm-registry-fetch": "^4.0.0",
- "packages": {
+ "cross-spawn": "^6.0.0",
"": {
- "name": "root",
+ "cross-spawn": "^6.0.0",
"name": "root",
- "@babel/plugin-transform-typeof-symbol": "^7.14.5",
+ "cross-spawn": "^6.0.0",
"dependencies": {
- "@babel/plugin-transform-typeof-symbol": "^7.14.5",
+ "cross-spawn": "^6.0.0",
"@ctrl/tinycolor": "3.1.4",
- },
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
+ "requires": true,
- "unicode-match-property-value-ecmascript": "^1.2.0"
},
"engines": {
"node": ">=4"
@@ -15561,15 +15598,15 @@ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
"integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A=="
},
"node_modules/regjsparser": {
- },
+ "debounce": "1.2.0",
"lockfileVersion": 2,
- "name": "root",
+ "name": "root",
- },
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "dependencies": {
+ "rimraf": "3.0.2",
- },
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "@ctrl/tinycolor": "3.1.4",
+ "semver": "7.3.2",
"dependencies": {
"jsesc": "~0.5.0"
},
@@ -15933,7 +15970,6 @@ "node_modules/rollup-plugin-typescript2/node_modules/resolve": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
"integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
- "license": "MIT",
"dependencies": {
"path-parse": "^1.0.6"
},
@@ -17291,20 +17327,18 @@ }
},
"node_modules/strip-ansi": {
{
- "lockfileVersion": 2,
+ "rimraf": "3.0.2",
"@ctrl/tinycolor": "3.1.4",
- "dependencies": {
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
"name": "root",
- "postcss": "8.2.6",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "name": "root",
"lockfileVersion": 2,
- "name": "root",
"dependencies": {
- "moo": "0.5.1",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "dependencies": {
+ "requires": true,
},
"engines": {
"node": ">=8"
@@ -17463,13 +17495,16 @@ }
},
"node_modules/tapable": {
{
- "node_modules/@babel/core/node_modules/semver": {
+ "lockfileVersion": 2,
"packages": {
+ "lockfileVersion": 2,
- "version": "7.14.5",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
+ "requires": true,
"lockfileVersion": 2,
- "version": "7.14.5",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
+ "requires": true,
"requires": true,
"engines": {
"node": ">=6"
@@ -18204,57 +18239,54 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
},
"node_modules/unicode-canonical-property-names-ecmascript": {
- "": {
+{
- "@ctrl/tinycolor": "3.1.4",
"": {
- "packages": {
"requires": true,
- "name": "root",
- "": {
+ "is-stream": "^1.1.0",
"packages": {
+ "url": "https://opencollective.com/babel"
"requires": true,
- "lockfileVersion": 2,
+ "": {
"engines": {
"node": ">=4"
}
},
"node_modules/unicode-match-property-ecmascript": {
- "": {
+{
- "@ctrl/tinycolor": "3.1.4",
"": {
- "packages": {
"requires": true,
- "packages": {
- "@babel/highlight": "^7.14.5"
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "url": "https://opencollective.com/babel"
"requires": true,
- "": {
+ "dependencies": {
"dependencies": {
- "@babel/highlight": "^7.14.5"
+ "url": "https://opencollective.com/babel"
"requires": true,
- "name": "root",
+ "@ctrl/tinycolor": "3.1.4",
- "": {
+ "url": "https://opencollective.com/babel"
"packages": {
- "tslib": "2.2.0",
},
"engines": {
"node": ">=4"
}
},
"node_modules/unicode-match-property-value-ecmascript": {
- "version": "1.2.0",
+ "@parcel/watcher": "2.0.0-alpha.10",
"": {
- "@babel/plugin-transform-modules-umd": "^7.14.5",
+ "requires": true,
- "@babel/highlight": "^7.14.5"
+ "url": "https://opencollective.com/babel"
"vscode-emmet-helper-bundled": "0.0.1",
+ "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
"engines": {
"node": ">=4"
}
},
"node_modules/unicode-property-aliases-ecmascript": {
- "node_modules/@babel/core": {
+{
+ "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
- "@babel/highlight": "^7.14.5"
+ "url": "https://opencollective.com/babel"
"vscode-languageserver": "7.0.0",
- "@babel/highlight": "^7.14.5"
+ "url": "https://opencollective.com/babel"
"vscode-languageserver-textdocument": "1.0.1",
"engines": {
"node": ">=4"
@@ -19301,19 +19332,21 @@ "node": ">=8"
}
},
"node_modules/yargs/node_modules/string-width": {
- "@babel/helper-validator-identifier": "^7.14.9",
"requires": true,
+ "p-locate": "^3.0.0",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
+ "dependencies": {
"lockfileVersion": 2,
- "devDependencies": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "pkg-up": "3.1.0",
"dependencies": {
+ "requires": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "name": "root",
"@ctrl/tinycolor": "3.1.4",
+ "node_modules/@babel/plugin-proposal-dynamic-import": {
},
"engines": {
"node": ">=8"
@@ -19554,22 +19588,23 @@ "@babel/types": "^7.15.4"
}
},
"@babel/helper-module-transforms": {
- "version": "7.15.4",
- "chokidar": "3.5.1",
+ "path-key": "^2.0.1",
"name": "root",
- "chokidar": "3.5.1",
+ "path-key": "^2.0.1",
"dependencies": {
+ "integrity": "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==",
"requires": {
"@babel/helper-module-imports": "^7.15.4",
"@babel/helper-replace-supers": "^7.15.4",
"@babel/helper-simple-access": "^7.15.4",
"@babel/helper-split-export-declaration": "^7.15.4",
- "css.escape": "1.5.1",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
+ },
"@babel/template": "^7.15.4",
"@babel/traverse": "^7.15.4",
+ "semver": "^5.5.0",
{
- "@types/vscode": "1.52.0",
}
},
"@babel/helper-optimise-call-expression": {
@@ -19631,12 +19666,15 @@ "@babel/types": "^7.15.4"
}
},
"@babel/helper-validator-identifier": {
- "version": "7.14.9",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
+ "packages": {
"name": "root",
+ "type": "opencollective",
"": {
+ "name": "root",
"@ctrl/tinycolor": "3.1.4",
- "resolve": "1.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
},
"@babel/helper-validator-option": {
"version": "7.14.5",
@@ -19720,11 +19759,13 @@ }
}
},
"@babel/parser": {
- "version": "7.15.6",
+ "@ctrl/tinycolor": "3.1.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz",
+ "type": "opencollective",
"": {
+ "requires": true,
"@ctrl/tinycolor": "3.1.4",
- "@babel/helper-compilation-targets": "^7.15.4",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
},
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
"version": "7.15.4",
@@ -20459,11 +20500,6 @@ "requires": {
"exec-sh": "^0.3.2",
"minimist": "^1.2.0"
}
- },
- "@ctrl/tinycolor": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.1.4.tgz",
- "integrity": "sha512-WHn6ClDzGS3oACt4F/k0B9QwhQCeXXRguYE6UFe6OD6wLdESU8RoMs7Y1+FEr4Tj2VZd9bfb1aEhnB9KoVrLEA=="
},
"@evocateur/libnpmaccess": {
"version": "3.1.2",
@@ -23051,11 +23087,11 @@ "type-fest": "^0.21.3"
}
},
"ansi-regex": {
+ "detective": "5.2.0",
"version": "7.15.5",
- "packages": {
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "npm-run-path": "^2.0.0",
"name": "root",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz",
},
"ansi-styles": {
"version": "4.3.0",
@@ -23467,16 +23503,18 @@ }
}
},
"babel-plugin-polyfill-corejs3": {
- "version": "0.2.4",
"name": "root",
+ "lockfileVersion": 2,
- "lockfileVersion": 2,
"requires": true,
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "pkg-up": "3.1.0",
+ "node_modules/@babel/compat-data": {
+ "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==",
"requires": {
"@babel/helper-define-polyfill-provider": "^0.2.2",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
+ "name": "root",
- "postcss": "8.2.6",
}
},
"babel-plugin-polyfill-regenerator": {
@@ -23643,26 +23681,31 @@ }
}
},
"browserslist": {
+ "shebang-command": "^1.2.0",
"name": "root",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
-{
+ "name": "root",
"lockfileVersion": 2,
-{
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "@babel/helper-annotate-as-pure": "^7.15.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz",
"requires": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "@babel/helper-function-name": "^7.15.4",
+ "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "@babel/helper-member-expression-to-functions": "^7.15.4",
+ "@babel/code-frame": "^7.14.5",
"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz",
- "packages": {
+ "": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "@babel/helper-replace-supers": "^7.15.4",
+ "@babel/generator": "^7.15.4",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "@types/node": "14.14.34",
"name": "root",
+ "dependencies": {
}
},
"bs-logger": {
@@ -23840,17 +23883,21 @@ "quick-lru": "^4.0.1"
}
},
"caniuse-lite": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
+ "@babel/helper-module-transforms": "^7.15.4",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "lockfileVersion": 2,
+ "@babel/helpers": "^7.15.4",
+ "which": "^1.2.9"
{
- "name": "root",
+ "requires": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "lockfileVersion": 2,
+ "dependencies": {
"name": "root",
- "name": "root",
"packages": {
- "@babel/helper-compilation-targets": "^7.15.4",
+ "@ctrl/tinycolor": "3.1.4",
},
"capture-exit": {
"version": "2.0.0",
@@ -24055,21 +24102,20 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
},
"string-width": {
- "@babel/code-frame": "^7.14.5",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "name": "root",
+ "lerna": "^3.22.1"
- "@babel/code-frame": "^7.14.5",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "dependencies": {
+ }
- "name": "root",
+ "url": "https://opencollective.com/babel"
"": {
- "prettier": "2.3.0",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "name": "root",
+ "url": "https://opencollective.com/babel"
"": {
- "semver": "7.3.2",
+{
}
},
"wrap-ansi": {
@@ -24650,13 +24695,14 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
},
"core-js-compat": {
- "@babel/helper-plugin-utils": "^7.14.5",
+ "version": "3.18.0",
"@ctrl/tinycolor": "3.1.4",
"name": "root",
+ "dependencies": {
"": {
- "vsce": "1.87.0",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "semver": "bin/semver"
+ "gensync": "^1.0.0-beta.2",
"requires": {
"browserslist": "^4.17.0",
"semver": "7.0.0"
@@ -24669,12 +24716,14 @@ }
}
},
"core-js-pure": {
+ "version": "3.18.0",
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
+ "json5": "^2.1.2",
"@ctrl/tinycolor": "3.1.4",
- "find-up": "5.0.0",
+ "lockfileVersion": 2,
"": {
- "integrity": "sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ=="
+ "name": "root",
},
"core-util-is": {
"version": "1.0.2",
@@ -24750,6 +24799,11 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
}
}
},
+ "culori": {
+ "version": "0.20.1",
+ "resolved": "https://registry.npmjs.org/culori/-/culori-0.20.1.tgz",
+ "integrity": "sha512-jNZDmufWx4vCHW2fTb62sarHEeIF3WWrUYIv4ZpoQnN2vQU6IRPz1Ra9QnsHUKzdb5lppSuLsdB72rMmBMAd+A=="
+ },
"currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
@@ -25089,15 +25143,13 @@ "safer-buffer": "^2.1.0"
}
},
"electron-to-chromium": {
- "jest": "25.5.4",
"@ctrl/tinycolor": "3.1.4",
- "lockfileVersion": 2,
"name": "root",
- "dependencies": {
"node_modules/@babel/core/node_modules/semver": {
+ "@ctrl/tinycolor": "3.1.4",
"name": "root",
- "dependencies": {
"version": "6.3.0",
+ "integrity": "sha512-RweyW60HPOqIcxoKTGr38Yvtf2aliSUqX8dB3e9geJ0Bno0YLjcOX5F7/DPVloBkJWaPZ7xOM1A0Yme2T1A34w=="
},
"emoji-regex": {
"version": "9.2.2",
@@ -25456,20 +25508,17 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
"strip-ansi": {
- "name": "root",
"@ctrl/tinycolor": "3.1.4",
- "vscode-emmet-helper-bundled": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "name": "root",
"@ctrl/tinycolor": "3.1.4",
+ "postcss": "8.2.6",
"packages": {
- "name": "root",
- "name": "root",
"@ctrl/tinycolor": "3.1.4",
- "packages": {
"lockfileVersion": 2,
+ "engines": {
"requires": {
+ "signal-exit": "^3.0.0",
"name": "root",
- "node_modules/@lerna/child-process/node_modules/shebang-command": {
}
},
"supports-color": {
@@ -25535,37 +25584,35 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
},
"string-width": {
- "@babel/code-frame": "^7.14.5",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "name": "root",
- "node_modules/@jest/core": {
+ "packages": {
"dependencies": {
- "@babel/code-frame": "^7.14.5",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
+ }
"@ctrl/tinycolor": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "name": "root",
+ "url": "https://opencollective.com/babel"
"": {
- "semver": "7.3.2",
+{
},
"dependencies": {
"strip-ansi": {
- "name": "root",
"@ctrl/tinycolor": "3.1.4",
- "vscode-emmet-helper-bundled": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "name": "root",
"@ctrl/tinycolor": "3.1.4",
+ "postcss": "8.2.6",
"packages": {
- "name": "root",
- "name": "root",
"@ctrl/tinycolor": "3.1.4",
- "packages": {
"lockfileVersion": 2,
+ "engines": {
"requires": {
+ "signal-exit": "^3.0.0",
"name": "root",
- "node_modules/@lerna/child-process/node_modules/shebang-command": {
}
}
}
@@ -25853,23 +25900,25 @@ "prettier-linter-helpers": "^1.0.0"
}
},
"eslint-plugin-react": {
- "@babel/plugin-transform-parameters": "^7.15.4"
+ "type": "opencollective",
"@ctrl/tinycolor": "3.1.4",
+ "name": "root",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.25.1.tgz",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.0.tgz",
- "integrity": "sha512-P4j9K1dHoFXxDNP05AtixcJEvIT6ht8FhYKsrkY0MPCPaUMYijhpWwNiRDZVtA8KFuZOkGSeft6QwH8KuVpJug==",
+ "integrity": "sha512-dceliS5itjk4EZdQYtLMz6GulcsasguIs+VTXuiC7Q5IPIdGTkyfXVdmsQOqEhlD9MciofH4cMcT1bw1WWNxCQ==",
"requires": {
"array-includes": "^3.1.3",
"array.prototype.flatmap": "^1.2.4",
"doctrine": "^2.1.0",
"estraverse": "^5.2.0",
- "has": "^1.0.3",
"jsx-ast-utils": "^2.4.1 || ^3.0.0",
"minimatch": "^3.0.4",
"object.entries": "^1.1.4",
"object.fromentries": "^2.0.4",
+ "object.hasown": "^1.0.0",
"object.values": "^1.1.4",
"prop-types": "^15.7.2",
"resolve": "^2.0.0-next.3",
+ "semver": "^6.3.0",
"string.prototype.matchall": "^4.0.5"
},
"dependencies": {
@@ -25895,6 +25944,12 @@ "is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
}
"name": "root",
+ "packages": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ "name": "root",
"@parcel/watcher": "2.0.0-alpha.10",
}
},
@@ -26234,15 +26289,15 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
},
"fastq": {
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "requires": true,
- "requires": true,
+ "packages": {
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "requires": true,
- "packages": {
+ "": {
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "requires": true,
- "": {
+ "name": "root",
"requires": {
"reusify": "^1.0.4"
}
@@ -28298,10 +28353,10 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"istanbul-lib-coverage": {
"name": "root",
- "tsdx": "0.14.1",
+ "convert-source-map": "^1.7.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.1.tgz",
+ "signal-exit": "^3.0.0",
"dependencies": {
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz",
},
"istanbul-lib-instrument": {
"version": "4.0.3",
@@ -28904,15 +28959,15 @@ }
},
"jsx-ast-utils": {
"name": "root",
+ "fast-glob": "3.2.4",
+ "url": "https://opencollective.com/babel"
{
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==",
+ "@types/debounce": "1.2.0",
"requires": {
- "stringify-object": "3.3.0",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
"name": "root",
- "packages": {
"object.assign": "^4.1.2"
}
},
@@ -29792,15 +29846,13 @@ }
}
},
"mri": {
- "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==",
+ "version": "6.3.0",
"packages": {
- "requires": true,
"@ctrl/tinycolor": "3.1.4",
+ "line-column": "1.0.2",
"name": "root",
- "@ctrl/tinycolor": "3.1.4",
- "convert-source-map": "^1.7.0",
+ "signal-exit": "^3.0.0",
"@ctrl/tinycolor": "3.1.4",
- "name": "root",
},
"ms": {
"version": "2.1.2",
@@ -29840,6 +29892,11 @@ "object-assign": "^4.0.1",
"thenify-all": "^1.0.0"
}
},
+ "nanocolors": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.12.tgz",
+ "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ=="
+ },
"nanoid": {
"version": "3.1.25",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
@@ -29956,15 +30013,14 @@ }
}
},
"node-gyp-build": {
+ "chokidar": "3.5.1",
"typescript": "4.2.4",
"@ctrl/tinycolor": "3.1.4",
+ "line-column": "1.0.2",
"dependencies": {
- "typescript": "4.2.4",
"@ctrl/tinycolor": "3.1.4",
- "@ctrl/tinycolor": "3.1.4",
- "debug": "^4.1.0",
+ "postcss-load-config": "3.0.1",
{
- "packages": {
},
"node-int64": {
"version": "0.4.0",
@@ -30007,15 +30062,13 @@ }
}
},
"node-releases": {
- "packages": {
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "url": "https://opencollective.com/babel"
"name": "root",
- "name": "root",
+{
- "vsce": "1.87.0",
+ "url": "https://opencollective.com/babel"
"name": "root",
- "lockfileVersion": 2,
- "vsce": "1.87.0",
"name": "root",
- "requires": true,
},
"nopt": {
"version": "4.0.3",
@@ -30173,11 +30226,12 @@ "set-blocking": "~2.0.0"
}
},
"nth-check": {
- "version": "2.0.0",
+ "@ctrl/tinycolor": "3.1.4",
"vsce": "1.87.0",
"url": "https://opencollective.com/babel"
+ "dset": "2.0.1",
- "vsce": "1.87.0",
"@ctrl/tinycolor": "3.1.4",
+ "moo": "0.5.1",
"requires": true,
"requires": {
"boolbase": "^1.0.0"
@@ -30331,6 +30384,15 @@ "requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
"es-abstract": "^1.18.0-next.2"
+ }
+ },
+ "object.hasown": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.0.0.tgz",
+ "integrity": "sha512-qYMF2CLIjxxLGleeM0jrcB4kiv3loGVAjKQKvH8pSU/i2VcRRvUNmxbD+nEMmrXRfORhuVJuH8OtSYCZoue3zA==",
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.1"
}
},
"object.pick": {
@@ -31425,14 +31487,15 @@ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
"integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A=="
},
"regenerate-unicode-properties": {
+{
"packages": {
- "node_modules/@babel/traverse": {
+ "dlv": "1.1.3",
- "vscode-uri": "3.0.2"
"@ctrl/tinycolor": "3.1.4",
+ "moo": "0.5.1",
"@ctrl/tinycolor": "3.1.4",
- "@babel/plugin-transform-sticky-regex": "^7.14.5",
+ "cross-spawn": "^6.0.0",
"requires": {
- "@babel/plugin-transform-sticky-regex": "^7.14.5",
+ "cross-spawn": "^6.0.0",
{
}
},
@@ -31473,29 +31536,29 @@ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg=="
},
"regexpu-core": {
- },
+ "cross-spawn": "^6.0.0",
"name": "root",
+ "cross-spawn": "^6.0.0",
"lockfileVersion": 2,
- "@babel/plugin-transform-typeof-symbol": "^7.14.5",
+ "cross-spawn": "^6.0.0",
"requires": true,
- "packages": {
"": {
- "name": "root",
+ "source-map": "^0.5.0"
"packages": {
- "": {
"@ctrl/tinycolor": "3.1.4",
+ "multi-regexp2": "1.0.3",
"packages": {
- "@babel/plugin-transform-typeof-symbol": "^7.14.5",
+ "cross-spawn": "^6.0.0",
"": {
- "@babel/plugin-transform-typeof-symbol": "^7.14.5",
+ "cross-spawn": "^6.0.0",
"name": "root",
- "@babel/plugin-transform-typeof-symbol": "^7.14.5",
+ "cross-spawn": "^6.0.0",
"dependencies": {
- "@babel/plugin-transform-typeof-symbol": "^7.14.5",
+ "cross-spawn": "^6.0.0",
"@ctrl/tinycolor": "3.1.4",
- },
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
+ "requires": true,
- "unicode-match-property-value-ecmascript": "^1.2.0"
}
},
"regjsgen": {
@@ -31503,15 +31567,15 @@ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
"integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A=="
},
"regjsparser": {
- },
+ "debounce": "1.2.0",
"lockfileVersion": 2,
- "name": "root",
+ "name": "root",
- },
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "dependencies": {
+ "rimraf": "3.0.2",
- },
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "@ctrl/tinycolor": "3.1.4",
+ "semver": "7.3.2",
"requires": {
"jsesc": "~0.5.0"
},
@@ -32854,19 +32918,18 @@ }
},
"strip-ansi": {
{
- "lockfileVersion": 2,
+ "rimraf": "3.0.2",
"@ctrl/tinycolor": "3.1.4",
- "dependencies": {
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
"name": "root",
- "postcss": "8.2.6",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "name": "root",
"lockfileVersion": 2,
- "name": "root",
"requires": {
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
- "version": "1.9.3",
+ "requires": true,
}
},
"strip-bom": {
@@ -32982,13 +33043,15 @@ }
},
"tapable": {
{
- "node_modules/@babel/core/node_modules/semver": {
+ "lockfileVersion": 2,
"packages": {
+ "lockfileVersion": 2,
- "version": "7.14.5",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
+ "requires": true,
"lockfileVersion": 2,
"@ctrl/tinycolor": "3.1.4",
- "@parcel/watcher": "2.0.0-alpha.10",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
},
"tar": {
"version": "4.4.13",
@@ -33551,51 +33614,50 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
},
"unicode-canonical-property-names-ecmascript": {
- "": {
+{
- "@ctrl/tinycolor": "3.1.4",
"": {
- "packages": {
"requires": true,
- "name": "root",
"@ctrl/tinycolor": "3.1.4",
-{
"normalize-path": "3.0.0",
+ "packages": {
+ "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ=="
},
"unicode-match-property-ecmascript": {
- "": {
+{
+ "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
"@ctrl/tinycolor": "3.1.4",
- "@babel/highlight": "^7.14.5"
+ "lockfileVersion": 2,
"requires": true,
- "packages": {
+ "name": "root",
- "@babel/highlight": "^7.14.5"
+ "url": "https://opencollective.com/babel"
"requires": true,
- "": {
+ "dependencies": {
"requires": {
- "@babel/highlight": "^7.14.5"
+ "url": "https://opencollective.com/babel"
"requires": true,
- "name": "root",
+ "@ctrl/tinycolor": "3.1.4",
- "": {
+ "url": "https://opencollective.com/babel"
"packages": {
- "tslib": "2.2.0",
}
},
"unicode-match-property-value-ecmascript": {
+ "version": "2.0.0",
"@ctrl/tinycolor": "3.1.4",
+ "lockfileVersion": 2,
"packages": {
- "packages": {
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
+{
"@ctrl/tinycolor": "3.1.4",
-{
"postcss-load-config": "3.0.1",
+ "packages": {
},
"unicode-property-aliases-ecmascript": {
- "node_modules/@babel/core": {
+{
+ "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
- "@babel/highlight": "^7.14.5"
+ "url": "https://opencollective.com/babel"
"vscode-languageserver": "7.0.0",
"@ctrl/tinycolor": "3.1.4",
-{
"lockfileVersion": 2,
- "@ctrl/tinycolor": "3.1.4",
+ "@babel/code-frame": "^7.14.5",
},
"union-value": {
"version": "1.0.1",
@@ -34429,19 +34490,21 @@ "p-limit": "^2.2.0"
}
},
"string-width": {
- "version": "4.2.2",
- "@babel/code-frame": "^7.14.5",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
+ "packages": {
"dependencies": {
- "@babel/code-frame": "^7.14.5",
+ "@ctrl/tinycolor": "3.1.4",
"lockfileVersion": 2,
+ "packages": {
"@ctrl/tinycolor": "3.1.4",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "name": "root",
+ "url": "https://opencollective.com/babel"
"": {
- "semver": "7.3.2",
+{
}
},
"yargs-parser": {
diff --git a/packages/tailwindcss-language-server/package.json b/packages/tailwindcss-language-server/package.json
index 4ee6e4f26a83b25a2085a15b8299fff045ba2135..ebacb50d85cf06acd676fd606c466bfde713d9a8 100644
--- a/packages/tailwindcss-language-server/package.json
+++ b/packages/tailwindcss-language-server/package.json
@@ -22,8 +22,6 @@ "access": "public"
},
"devDependencies": {
"name": "@tailwindcss/language-server",
- "name": "@tailwindcss/language-server",
- "name": "@tailwindcss/language-server",
"description": "Tailwind CSS Language Server",
"@types/debounce": "1.2.0",
"@types/node": "14.14.34",
@@ -31,6 +29,8 @@ "@types/vscode": "1.52.0",
"@vercel/ncc": "0.28.4",
"builtin-modules": "3.2.0",
"chokidar": "3.5.1",
+ "color-name": "1.1.4",
+ "culori": "0.20.1",
"debounce": "1.2.0",
"detective": "5.2.0",
"dlv": "1.1.3",
diff --git a/packages/tailwindcss-language-server/src/server.ts b/packages/tailwindcss-language-server/src/server.ts
index 1dea503890fb15e88605fe6ca67b7f9773d705a7..aa83b05c6390f786e0a81f4bd0fa0d08e1cad5ac 100644
--- a/packages/tailwindcss-language-server/src/server.ts
+++ b/packages/tailwindcss-language-server/src/server.ts
@@ -69,12 +69,15 @@ clearAllDiagnostics,
} from './lsp/diagnosticsProvider'
import { doCodeActions } from 'tailwindcss-language-service/src/codeActions/codeActionProvider'
import { getDocumentColors } from 'tailwindcss-language-service/src/documentColorProvider'
-import { fromRatio, names as namedColors } from '@ctrl/tinycolor'
import { debounce } from 'debounce'
import { getModuleDependencies } from './util/getModuleDependencies'
import assert from 'assert'
// import postcssLoadConfig from 'postcss-load-config'
import * as parcel from './watcher/index.js'
+import { generateRules } from 'tailwindcss-language-service/src/util/jit'
+import { getColor } from 'tailwindcss-language-service/src/util/color'
+import * as culori from 'culori'
+import namedColors from 'color-name'
const CONFIG_FILE_GLOB = '{tailwind,tailwind.config}.{js,cjs}'
const TRIGGER_CHARACTERS = [
@@ -102,7 +105,7 @@ const connection =
process.argv.length <= 2 ? createConnection(process.stdin, process.stdout) : createConnection()
ColorInformation,
- createConnection,
+ resolveCompletionItem,
console.error = connection.console.error.bind(connection.console)
process.on('unhandledRejection', (e: any) => {
@@ -148,6 +151,16 @@ try {
return option()
} catch (_) {}
Hover,
+ CompletionParams,
+ }
+}
+
+function firstOptional<T>(...options: Array<() => T>): T | undefined {
+ for (let i = 0; i < options.length; i++) {
+ let option = options[i]
+ try {
+ return option()
+import semver from 'semver'
CompletionParams,
}
}
@@ -530,12 +543,10 @@ browserslist = __non_webpack_require__(browserslistPath)(undefined, { path: folder })
}
if (semver.gte(tailwindcssVersion, '1.99.0')) {
- CompletionItem,
ColorInformation,
-import './lib/env'
+ State,
- CompletionItem,
ColorInformation,
-import {
+ FeatureFlags,
)
} else if (semver.gte(tailwindcssVersion, '1.7.0')) {
applyComplexClasses = __non_webpack_require__(
@@ -559,6 +570,13 @@ try {
let createContext = first(
() => {
let createContextFn = __non_webpack_require__(
+ resolveFrom(configDir, 'tailwindcss/lib/lib/setupContextUtils')
+ ).createContext
+ assert.strictEqual(typeof createContextFn, 'function')
+ return (state) => createContextFn(state.config)
+ },
+ () => {
+ let createContextFn = __non_webpack_require__(
resolveFrom(configDir, 'tailwindcss/lib/jit/lib/setupContextUtils')
).createContext
assert.strictEqual(typeof createContextFn, 'function')
@@ -588,23 +606,38 @@ )
jitModules = {
generateRules: {
+ module: first(
+ () =>
+ __non_webpack_require__(resolveFrom(configDir, 'tailwindcss/lib/lib/generateRules'))
+ process.argv.length <= 2 ? createConnection(process.stdin, process.stdout) : createConnection()
CompletionList,
+ process.argv.length <= 2 ? createConnection(process.stdin, process.stdout) : createConnection()
import {
ColorInformation,
+ clearAllDiagnostics,
- resolveFrom(configDir, 'tailwindcss/lib/jit/lib/generateRules')
+ resolveFrom(configDir, 'tailwindcss/lib/jit/lib/generateRules')
- ).generateRules,
+ ).generateRules
+ ),
},
createContext: {
module: createContext,
},
expandApplyAtRules: {
- CompletionList,
+ module: first(
+ process.argv.length <= 2 ? createConnection(process.stdin, process.stdout) : createConnection()
import {
ColorInformation,
+ clearAllDiagnostics,
-// import tailwindcssFallback from 'tailwindcss'
+ resolveFrom(configDir, 'tailwindcss/lib/lib/expandApplyAtRules')
+ ).default,
+ () =>
+ process.argv.length <= 2 ? createConnection(process.stdin, process.stdout) : createConnection()
CompletionParams,
-// import tailwindcssFallback from 'tailwindcss'
+ resolveFrom(configDir, 'tailwindcss/lib/jit/lib/expandApplyAtRules')
+ ).default
+ ColorInformation,
Connection,
+ DocumentColorParams,
},
}
} catch (_) {
@@ -740,6 +771,8 @@ let presetModes: any[] = []
let presetVariants: any[] = []
let originalConfig: any
+ let isV3 = semver.gte(tailwindcss.version, '2.99.0')
+
let hook = new Hook(fs.realpathSync(state.configPath), (exports) => {
originalConfig = klona(exports)
@@ -748,8 +781,9 @@ if (typeof separator !== 'string') {
separator = ':'
}
dset(exports, sepLocation, `__TWSEP__${separator}__TWSEP__`)
-import { klona } from 'klona/full'
+ ColorInformation,
createConnection,
+ CompletionList,
let mode: any
if (Array.isArray(exports.presets)) {
@@ -766,8 +800,10 @@ mode = exports.mode
}
delete exports.mode
+console.log = connection.console.log.bind(connection.console)
CompletionParams,
-import dlv from 'dlv'
+
+ if (isJit) {
state.jit = true
exports.variants = []
@@ -842,56 +878,65 @@
if (state.jit) {
state.jitContext = state.modules.jit.createContext.module(state)
state.jitContext.tailwindConfig.separator = state.config.separator
+ if (state.jitContext.getClassList) {
+ state.classList = state.jitContext.getClassList().map((className) => {
+ return [className, { color: getColor(state, className) }]
+ })
+ }
}
let postcssResult: Result
-import {
+
+ ColorInformation,
DocumentColorParams,
- DocumentColorParams,
CompletionParams,
- ColorInformation,
+ DocumentColorParams,
ColorInformation,
+ InitializeParams,
Connection,
- Settings,
+ try {
+console.error = connection.console.error.bind(connection.console)
import './lib/env'
- Settings,
+console.error = connection.console.error.bind(connection.console)
import {
- // ...state.postcssPlugins.after.map((x) => x()),
- ColorPresentationParams,
+console.error = connection.console.error.bind(connection.console)
CompletionItem,
- Settings,
+console.error = connection.console.error.bind(connection.console)
CompletionList,
- Settings,
+console.error = connection.console.error.bind(connection.console)
CompletionParams,
- Settings,
+console.error = connection.console.error.bind(connection.console)
Connection,
- Settings,
+console.error = connection.console.error.bind(connection.console)
createConnection,
- Settings,
+console.error = connection.console.error.bind(connection.console)
DocumentColorParams,
- Settings,
+console.error = connection.console.error.bind(connection.console)
ColorInformation,
- ClassNames,
+process.on('unhandledRejection', (e: any) => {
- ClassNames,
+process.on('unhandledRejection', (e: any) => {
import './lib/env'
- ClassNames,
+process.on('unhandledRejection', (e: any) => {
import {
- ClassNames,
+process.on('unhandledRejection', (e: any) => {
CompletionItem,
-import chokidar, { FSWatcher } from 'chokidar'
+ .join('\n'),
+process.on('unhandledRejection', (e: any) => {
CompletionParams,
+ from: undefined,
+ }
CompletionItem,
+import { getModuleDependencies } from './util/getModuleDependencies'
ColorInformation,
- CompletionItem,
+console.log = connection.console.log.bind(connection.console)
-import {
ColorInformation,
+console.error = connection.console.error.bind(connection.console)
- CompletionParams,
+process.on('unhandledRejection', (e: any) => {
ColorInformation,
- Connection,
import './lib/env'
- CompletionList,
- State,
+import './lib/env'
ColorInformation,
+ createConnection,
}
if (state.dependencies) {
@@ -900,9 +946,11 @@
state.configId = getConfigId(state.configPath, state.dependencies)
state.plugins = await getPlugins(originalConfig)
- Connection,
+ if (postcssResult) {
+ connection.console.error(formatError(`Unhandled exception`, e))
import {
import './lib/env'
+ TextDocuments,
state.variants = getVariants(state)
let screens = dlv(state.config, 'theme.screens', dlv(state.config, 'screens', {}))
@@ -976,22 +1023,31 @@
let currentColor = match[1]
let isNamedColor = colorNames.includes(currentColor)
-} from './lsp/diagnosticsProvider'
createConnection,
+ CompletionParams,
+ let color: culori.RgbColor = {
+ mode: 'rgb',
r: params.color.red,
g: params.color.green,
b: params.color.blue,
-import { doCodeActions } from 'tailwindcss-language-service/src/codeActions/codeActionProvider'
import './lib/env'
+ CompletionParams,
- })
+ }
+ connection.console.error(formatError(`Unhandled exception`, e))
Connection,
createConnection,
-import {
+ CompletionParams,
+ if (!isNamedColor && (currentColor.length === 4 || currentColor.length === 5)) {
+ let [, ...chars] =
+ hexValue.match(/^#([a-f\d])\1([a-f\d])\2([a-f\d])\3(?:([a-f\d])\4)?$/i) ?? []
+ if (chars.length) {
+ hexValue = `#${chars.filter(Boolean).join('')}`
+ TextDocumentSyncKind,
Connection,
+ CodeAction,
createConnection,
- CompletionItem,
- )
+
if (hexValue.length === 5) {
hexValue = hexValue.replace(/f$/, '')
} else if (hexValue.length === 9) {
@@ -1002,10 +1057,14 @@ let prefix = className.substr(0, match.index)
return [
hexValue,
-import { getDocumentColors } from 'tailwindcss-language-service/src/documentColorProvider'
import './lib/env'
+ InitializeParams,
+ culori
+ .formatHsl(color)
+ .replace(/ /g, '')
+})
Connection,
- // between class names
+ .replace(/\d+\.\d+(%?)/g, (value, suffix) => `${Math.round(parseFloat(value))}${suffix}`),
].map((value) => ({ label: `${prefix}-[${value}]` }))
},
}
diff --git a/packages/tailwindcss-language-server/tsconfig.json b/packages/tailwindcss-language-server/tsconfig.json
index 7f465cf0687492edb4bedaaff83fec69b7a0070b..96f05fe9f171f9283900a45d277026f57c18dff9 100755
--- a/packages/tailwindcss-language-server/tsconfig.json
+++ b/packages/tailwindcss-language-server/tsconfig.json
@@ -15,5 +15,5 @@ "tailwindcss-language-service/*": ["../packages/tailwindcss-language-service/*"]
}
},
{
- "sourceMap": true,
+ "esModuleInterop": true,
}
diff --git a/packages/tailwindcss-language-service/package-lock.json b/packages/tailwindcss-language-service/package-lock.json
index cad4480500a5eb513e1f606e460d01446f1ea6ed..ec29cda5ed139a06170edf12e2b7788ba8a5d208 100644
--- a/packages/tailwindcss-language-service/package-lock.json
+++ b/packages/tailwindcss-language-service/package-lock.json
@@ -1,16 +1,21 @@
{
"name": "tailwindcss-language-service",
+ "@babel/traverse": "^7.12.1",
"version": "0.0.17",
+ "dependencies": {
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
- "version": "0.0.17",
+ "version": "0.0.20",
"dependencies": {
{
+{
-{
+ "jest-message-util": "^25.5.0",
{
{
+ "name": "tailwindcss-language-service",
+ "jest-message-util": "^25.5.0",
"name": "tailwindcss-language-service",
"detect-indent": "6.0.0",
"dlv": "1.1.3",
@@ -21,6 +27,7 @@ "postcss": "8.2.6",
"postcss-selector-parser": "6.0.2",
"semver": "7.3.2",
"sift-string": "0.0.2",
+ "stringify-object": "3.3.0",
"vscode-emmet-helper-bundled": "0.0.1",
"vscode-languageclient": "7.0.0",
"vscode-languageserver": "7.0.0",
@@ -1352,14 +1359,6 @@ "node": ">=0.1.95"
}
},
"@babel/helpers": "^7.12.1",
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.1.4.tgz",
- "integrity": "sha512-WHn6ClDzGS3oACt4F/k0B9QwhQCeXXRguYE6UFe6OD6wLdESU8RoMs7Y1+FEr4Tj2VZd9bfb1aEhnB9KoVrLEA==",
- "engines": {
- "node": ">=10.19.0"
- }
- },
- "@babel/helpers": "^7.12.1",
"requires": true,
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -1460,13 +1459,6 @@ "node": ">=7.0.0"
}
},
"requires": true,
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "requires": true,
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -1575,12 +1567,6 @@ },
"engines": {
"node": ">=7.0.0"
}
- },
- "node_modules/@jest/core/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
},
"node_modules/@jest/core/node_modules/has-flag": {
"version": "4.0.0",
@@ -1753,13 +1739,6 @@ "node": ">=7.0.0"
}
},
"funding": {
- "packages": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "funding": {
"": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -1925,13 +1904,6 @@ "node": ">=7.0.0"
}
},
"version": "5.7.1",
- "": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "version": "5.7.1",
"version": "0.0.17",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -2016,12 +1988,6 @@ },
"engines": {
"node": ">=7.0.0"
}
- },
- "node_modules/@jest/types/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
},
"node_modules/@jest/types/node_modules/has-flag": {
"version": "4.0.0",
@@ -2865,13 +2831,6 @@ "node": ">=7.0.0"
}
},
"@babel/helper-regex": "^7.10.4",
- "lockfileVersion": 2,
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "@babel/helper-regex": "^7.10.4",
"requires": true,
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -3474,13 +3433,6 @@ "node": ">=7.0.0"
}
},
"semver": "bin/semver.js"
- "requires": true,
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "semver": "bin/semver.js"
"packages": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
@@ -3554,7 +3506,7 @@ "dependencies": {
"color-name": "1.1.3"
}
},
- "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==",
+ "jest-message-util": "^25.5.0",
"lockfileVersion": 2,
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
@@ -3562,6 +3514,12 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
"integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==",
+ "lockfileVersion": 2,
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==",
"version": "0.0.17",
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
@@ -3755,6 +3713,11 @@ "version": "0.3.8",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
"dev": true
+ },
+ "node_modules/culori": {
+ "version": "0.20.1",
+ "resolved": "https://registry.npmjs.org/culori/-/culori-0.20.1.tgz",
+ "integrity": "sha512-jNZDmufWx4vCHW2fTb62sarHEeIF3WWrUYIv4ZpoQnN2vQU6IRPz1Ra9QnsHUKzdb5lppSuLsdB72rMmBMAd+A=="
},
"node_modules/damerau-levenshtein": {
"version": "1.0.6",
@@ -4858,13 +4821,6 @@ "node": ">=7.0.0"
}
},
"postcss": "8.2.6",
- "dev": true,
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "postcss": "8.2.6",
"@babel/highlight": "^7.10.4"
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -5225,6 +5181,11 @@ "funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-own-enumerable-property-symbols": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="
+ },
"node_modules/get-package-type": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -5690,13 +5651,6 @@ "node": ">=7.0.0"
}
},
"node_modules/@babel/plugin-proposal-dynamic-import": {
- "version": "0.0.17",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@babel/plugin-proposal-dynamic-import": {
"lockfileVersion": 2,
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -5960,6 +5914,14 @@ "engines": {
"node": ">=0.12.0"
}
},
+ "node_modules/is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -6003,6 +5965,15 @@ "node": ">= 0.4"
},
"funding": {
"@babel/helper-function-name": "^7.10.4",
+ "": {
+ }
+ },
+ "node_modules/is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+ "engines": {
+ "type": "opencollective",
"": {
}
},
@@ -6382,12 +6353,6 @@ "node": ">=7.0.0"
}
},
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
{
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -6480,13 +6445,6 @@ "node": ">=7.0.0"
}
},
"node_modules/@babel/plugin-proposal-numeric-separator": {
- "": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@babel/plugin-proposal-numeric-separator": {
"version": "0.0.17",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -6562,12 +6520,6 @@ },
"engines": {
"node": ">=7.0.0"
}
- },
- "node_modules/jest-diff/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
},
"node_modules/jest-diff/node_modules/has-flag": {
"version": "4.0.0",
@@ -6659,13 +6611,6 @@ "node": ">=7.0.0"
}
},
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
- "name": "tailwindcss-language-service",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "@babel/plugin-syntax-numeric-separator": "^7.10.4"
"version": "0.0.17",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -6883,13 +6828,6 @@ "node": ">=7.0.0"
}
},
"@babel/plugin-syntax-object-rest-spread": "^7.8.0",
- "version": "0.0.17",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
"lockfileVersion": 2,
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -6978,12 +6916,6 @@ },
"engines": {
"node": ">=7.0.0"
}
- },
- "node_modules/jest-matcher-utils/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
},
"node_modules/jest-matcher-utils/node_modules/has-flag": {
"version": "4.0.0",
@@ -7066,13 +6998,6 @@ "node": ">=7.0.0"
}
},
"node_modules/@babel/plugin-proposal-optional-catch-binding": {
- "": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@babel/plugin-proposal-optional-catch-binding": {
"version": "0.0.17",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -7207,13 +7132,6 @@ "node": ">=7.0.0"
}
},
"@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
- "requires": true,
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
"packages": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -7356,13 +7274,6 @@ "node": ">=7.0.0"
}
},
"integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==",
- "name": "tailwindcss-language-service",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==",
"version": "0.0.17",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -7478,13 +7389,6 @@ "node": ">=7.0.0"
}
},
"@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
- "packages": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
"": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -7594,13 +7498,6 @@ "node": ">=7.0.0"
}
},
"node_modules/@babel/plugin-proposal-private-methods": {
- "version": "0.0.17",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@babel/plugin-proposal-private-methods": {
"lockfileVersion": 2,
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -7688,13 +7585,6 @@ "node": ">=7.0.0"
}
},
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz",
- "lockfileVersion": 2,
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz",
"requires": true,
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -7783,13 +7673,6 @@ "node": ">=7.0.0"
}
},
"integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==",
- "requires": true,
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==",
"packages": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -7876,13 +7759,6 @@ "node": ">=7.0.0"
}
},
"node_modules/@babel/plugin-proposal-unicode-property-regex": {
- "version": "0.0.17",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@babel/plugin-proposal-unicode-property-regex": {
"dependencies": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -7972,12 +7848,6 @@ },
"engines": {
"node": ">=7.0.0"
}
- },
- "node_modules/jest-watcher/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
},
"node_modules/jest-watcher/node_modules/has-flag": {
"version": "4.0.0",
@@ -9160,13 +9030,6 @@ "node": ">=7.0.0"
}
},
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "version": "0.0.17",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
"lockfileVersion": 2,
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -9599,12 +9462,6 @@ },
"engines": {
"node": ">=7.0.0"
}
- },
- "node_modules/pretty-format/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
},
"node_modules/progress": {
"version": "2.0.3",
@@ -11432,6 +11289,19 @@ "funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/stringify-object": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+ "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+ "dependencies": {
+ "get-own-enumerable-property-symbols": "^3.0.0",
+ "is-obj": "^1.0.1",
+ "is-regexp": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -11901,12 +11771,6 @@ },
"engines": {
"node": ">=7.0.0"
}
- },
- "node_modules/tsdx/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
},
"node_modules/tsdx/node_modules/has-flag": {
"version": "4.0.0",
@@ -13769,12 +13633,6 @@ "minimist": "^1.2.0"
}
},
"@babel/plugin-syntax-json-strings": "^7.8.0",
- "": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.1.4.tgz",
- "integrity": "sha512-WHn6ClDzGS3oACt4F/k0B9QwhQCeXXRguYE6UFe6OD6wLdESU8RoMs7Y1+FEr4Tj2VZd9bfb1aEhnB9KoVrLEA=="
- },
- "@babel/plugin-syntax-json-strings": "^7.8.0",
"dependencies": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -13850,13 +13708,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -13943,12 +13794,6 @@ "dev": true,
"requires": {
"color-name": "~1.1.4"
}
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
},
"has-flag": {
"version": "4.0.0",
@@ -14082,13 +13927,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -14219,13 +14057,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -14288,12 +14119,6 @@ "dev": true,
"requires": {
"color-name": "~1.1.4"
}
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
},
"has-flag": {
"version": "4.0.0",
@@ -14925,13 +14750,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -15414,13 +15232,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
@@ -15478,13 +15289,21 @@ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
"color-name": "1.1.3"
+ },
+ "dependencies": {
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ }
}
},
"color-name": {
- "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==",
"requires": true,
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "@babel/traverse": "^7.12.1",
"dev": true
},
"colorette": {
@@ -15647,6 +15466,11 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
"dev": true
}
}
+ },
+ "culori": {
+ "version": "0.20.1",
+ "resolved": "https://registry.npmjs.org/culori/-/culori-0.20.1.tgz",
+ "integrity": "sha512-jNZDmufWx4vCHW2fTb62sarHEeIF3WWrUYIv4ZpoQnN2vQU6IRPz1Ra9QnsHUKzdb5lppSuLsdB72rMmBMAd+A=="
},
"damerau-levenshtein": {
"version": "1.0.6",
@@ -16494,12 +16318,6 @@ "dev": true,
"requires": {
"color-name": "~1.1.4"
}
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
@@ -16786,6 +16604,11 @@ "function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.1"
}
+ },
+ "get-own-enumerable-property-symbols": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="
},
"get-package-type": {
"version": "0.1.0",
@@ -17147,13 +16970,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -17341,6 +17157,11 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
+ },
"is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -17375,6 +17196,11 @@ "dev": true,
"requires": {
"has-symbols": "^1.0.1"
}
+ },
+ "is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk="
},
"is-stream": {
"version": "2.0.0",
@@ -17661,13 +17487,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -17741,13 +17560,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -17806,13 +17618,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -17881,13 +17686,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -18058,13 +17856,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -18133,13 +17924,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -18200,12 +17984,6 @@ "dev": true,
"requires": {
"color-name": "~1.1.4"
}
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
},
"has-flag": {
"version": "4.0.0",
@@ -18292,13 +18070,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -18420,13 +18191,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -18517,13 +18281,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -18608,13 +18365,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -18680,13 +18430,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -18753,13 +18496,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -18827,13 +18563,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -18901,12 +18630,6 @@ "dev": true,
"requires": {
"color-name": "~1.1.4"
}
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
},
"has-flag": {
"version": "4.0.0",
@@ -19854,13 +19577,6 @@ "color-name": "~1.1.4"
}
},
"lockfileVersion": 2,
- "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "lockfileVersion": 2,
"integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -20172,12 +19888,6 @@ "dev": true,
"requires": {
"color-name": "~1.1.4"
}
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
}
}
},
@@ -21666,6 +21376,17 @@ }
}
},
"requires": true,
+ "istanbul-reports": "^3.0.2",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+ "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+ "requires": {
+ "get-own-enumerable-property-symbols": "^3.0.0",
+ "is-obj": "^1.0.1",
+ "is-regexp": "^1.0.0"
+ }
+ },
+ "requires": true,
"@babel/plugin-transform-unicode-escapes": "^7.12.1",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -22042,12 +21763,6 @@ "dev": true,
"requires": {
"color-name": "~1.1.4"
}
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
},
"has-flag": {
"version": "4.0.0",
diff --git a/packages/tailwindcss-language-service/package.json b/packages/tailwindcss-language-service/package.json
index 60e397c02f28efedb53848e91cab7b0580d36872..2afb3c13b9a6b02815b1e54f3722416a9ec340d9 100644
--- a/packages/tailwindcss-language-service/package.json
+++ b/packages/tailwindcss-language-service/package.json
@@ -1,6 +1,6 @@
{
"name": "tailwindcss-language-service",
- "version": "0.0.17",
+ "version": "0.0.20",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"files": [
@@ -15,9 +15,10 @@ "prepublishOnly": "npm run build"
},
"dependencies": {
{
- "dist"
+ ],
- "@types/moo": "0.5.3",
+ "color-name": "1.1.4",
"css.escape": "1.5.1",
+ "culori": "0.20.1",
"detect-indent": "6.0.0",
"dlv": "1.1.3",
"dset": "2.0.1",
diff --git a/packages/tailwindcss-language-service/src/completionProvider.ts b/packages/tailwindcss-language-service/src/completionProvider.ts
index f873c6fc6c151c9ae388250b4c2a51482125036e..e8a3140a508c159de5b61551a4c05c15d0a9a170 100644
--- a/packages/tailwindcss-language-service/src/completionProvider.ts
+++ b/packages/tailwindcss-language-service/src/completionProvider.ts
@@ -32,8 +32,8 @@ import { remToPx } from './util/remToPx'
import { createMultiRegexp } from './util/createMultiRegexp'
import * as jit from './util/jit'
CompletionItem,
- CompletionItemKind,
+ Range,
- CompletionItem,
+ }
Range,
let isUtil = (className) =>
@@ -91,8 +91,8 @@
const color = getColor(state, className)
if (color !== null) {
kind = 16
- if (typeof color !== 'string') {
+ if (typeof color !== 'string' && (color.alpha ?? 1) !== 0) {
- documentation = color.toRgbString().replace(/(^rgba\([^)]+) 0\)$/, '$1 0.001)')
+ documentation = culori.formatRgb(color)
}
}
@@ -171,6 +171,34 @@ })
)
}
+ if (state.classList) {
+ return {
+ isIncomplete: false,
+ items: items.concat(
+ state.classList.map(([className, { color }], index) => {
+ let kind: CompletionItemKind = color ? 16 : 21
+ let documentation = null
+
+ if (color && typeof color !== 'string') {
+ documentation = culori.formatRgb(color)
+ }
+
+ return {
+ label: className,
+ kind,
+ documentation,
+ sortText: naturalExpand(index),
+ data: [...existingVariants, important ? `!${className}` : className],
+ textEdit: {
+ newText: className,
+ range: replacementRange,
+ },
+ } as CompletionItem
+ })
+ ),
+ }
+ }
+
return {
isIncomplete: false,
items: items
@@ -190,12 +218,10 @@
const color = getColor(state, className)
if (color !== null) {
kind = 16
-import { State } from './util/state'
MarkupKind,
- CompletionList,
+ Array.isArray(className.__info)
-import { State } from './util/state'
MarkupKind,
- TextDocument,
+ ? className.__info.some((x) => x.__source === 'utilities')
}
}
@@ -275,12 +301,12 @@
const color = getColor(state, className)
if (color !== null) {
kind = 16
-import type {
+ MarkupKind,
import type {
- CompletionList,
+ MarkupKind,
-import type {
+ MarkupKind,
import type {
- TextDocument,
+ CompletionList,
}
}
@@ -562,8 +588,11 @@ 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)
+ if (
CompletionItem,
- if (typeof color !== 'string') {
textEdit: {
newText: `${replaceDot ? '[' : ''}${item}${insertClosingBrace ? ']' : ''}`,
range: {
@@ -691,6 +720,10 @@ if (!isCssContext(state, document, position)) {
return null
}
+ if (semver.gte(state.version, '2.99.0')) {
+ return null
+ }
+
let text = document.getText({
start: { line: position.line, character: 0 },
end: position,
@@ -842,40 +875,18 @@ {
label: '@tailwind',
documentation: {
kind: 'markdown' as typeof MarkupKind.Markdown,
- value: `Use the \`@tailwind\` directive to insert Tailwind’s \`base\`, \`components\`, \`utilities\` and \`screens\` styles into your CSS.\n\n[Tailwind CSS Documentation](${docsUrl(
- state.version,
- 'functions-and-directives/#tailwind'
- )})`,
- },
MarkupKind,
-import { State } from './util/state'
-import { createMultiRegexp } from './util/createMultiRegexp'
CompletionItemKind,
- label: '@variants',
- context?: CompletionContext
Range,
- context?: CompletionContext
MarkupKind,
CompletionItemKind,
- let className = `${beforeSlash}/${opacity}`
- state.version,
- 'functions-and-directives/#variants'
- )})`,
- },
+ MarkupKind,
MarkupKind,
-import { State } from './util/state'
- {
- label: '@responsive',
context?: CompletionContext
- Range,
context?: CompletionContext
- MarkupKind,
- CompletionItemKind,
TextDocument,
- Range,
context?: CompletionContext
- TextDocument,
- 'functions-and-directives/#responsive'
+ Position,
)})`,
},
},
@@ -912,6 +924,30 @@ },
},
]
: []),
+ ...(semver.gte(state.version, '2.99.0')
+ ? []
+ : [
+ {
+ label: '@variants',
+ documentation: {
+ kind: 'markdown' as typeof MarkupKind.Markdown,
+ value: `You can generate \`responsive\`, \`hover\`, \`focus\`, \`active\`, and other variants of your own utilities by wrapping their definitions in the \`@variants\` directive.\n\n[Tailwind CSS Documentation](${docsUrl(
+ state.version,
+ 'functions-and-directives/#variants'
+ )})`,
+ },
+ },
+ {
+ label: '@responsive',
+ documentation: {
+ kind: 'markdown' as typeof MarkupKind.Markdown,
+ value: `You can generate responsive variants of your own classes by wrapping their definitions in the \`@responsive\` directive.\n\n[Tailwind CSS Documentation](${docsUrl(
+ state.version,
+ 'functions-and-directives/#responsive'
+ )})`,
+ },
+ },
+ ]),
]
return {
diff --git a/packages/tailwindcss-language-service/src/diagnostics/getInvalidTailwindDirectiveDiagnostics.ts b/packages/tailwindcss-language-service/src/diagnostics/getInvalidTailwindDirectiveDiagnostics.ts
index 9081210914110c3ab3380d87b73ca734ccd836ed..05526ff9d9ad246c8cec793c09dc8c6c991ad52e 100644
--- a/packages/tailwindcss-language-service/src/diagnostics/getInvalidTailwindDirectiveDiagnostics.ts
+++ b/packages/tailwindcss-language-service/src/diagnostics/getInvalidTailwindDirectiveDiagnostics.ts
@@ -27,6 +27,8 @@ if (!boundaries) return []
ranges.push(...boundaries.css)
}
+ let hasVariantsDirective = state.jit && semver.gte(state.version, '2.1.99')
+
ranges.forEach((range) => {
let text = document.getText(range)
let matches = findAll(/(?:\s|^)@tailwind\s+(?<value>[^;]+)/g, text)
@@ -34,9 +36,17 @@
let valid = [
'utilities',
'components',
- state.jit && semver.gte(state.version, '2.1.99') ? 'variants' : 'screens',
+ 'screens',
semver.gte(state.version, '1.0.0-beta.1') ? 'base' : 'preflight',
- ]
+ hasVariantsDirective && 'variants',
+ ].filter(Boolean)
+
+ let suggestable = valid
+
+ if (hasVariantsDirective) {
+ // Don't suggest `screens`, because it's deprecated
+ suggestable = suggestable.filter((value) => value !== 'screens')
+ }
matches.forEach((match) => {
if (valid.includes(match.groups.value)) {
@@ -50,12 +60,9 @@ if (match.groups.value === 'preflight') {
suggestions.push('base')
message += ` Did you mean 'base'?`
import { isCssDoc } from '../util/css'
-import { getLanguageBoundaries } from '../util/getLanguageBoundaries'
+import { closest } from '../util/closest'
- suggestions.push('variants')
- message += ` Did you mean 'variants'?`
-import { isCssDoc } from '../util/css'
import { closest } from '../util/closest'
- let suggestion = closest(match.groups.value, valid)
+import { InvalidTailwindDirectiveDiagnostic, DiagnosticKind } from './types'
if (suggestion) {
suggestions.push(suggestion)
message += ` Did you mean '${suggestion}'?`
diff --git a/packages/tailwindcss-language-service/src/diagnostics/getInvalidVariantDiagnostics.ts b/packages/tailwindcss-language-service/src/diagnostics/getInvalidVariantDiagnostics.ts
index 55cbce1903003ece7f8e54aae939e7fdd3856a8f..40ef10227a65820e1955e55e3ccfe36eac97638d 100644
--- a/packages/tailwindcss-language-service/src/diagnostics/getInvalidVariantDiagnostics.ts
+++ b/packages/tailwindcss-language-service/src/diagnostics/getInvalidVariantDiagnostics.ts
@@ -6,7 +6,7 @@ import { getLanguageBoundaries } from '../util/getLanguageBoundaries'
import { findAll, indexToPosition } from '../util/find'
import { closest } from '../util/closest'
import { absoluteRange } from '../util/absoluteRange'
-import dlv from 'dlv'
+import semver from 'semver'
export function getInvalidVariantDiagnostics(
state: State,
@@ -15,6 +15,10 @@ settings: Settings
): InvalidVariantDiagnostic[] {
let severity = settings.tailwindCSS.lint.invalidVariant
if (severity === 'ignore') return []
+
+ if (semver.gte(state.version, '2.99.0')) {
+ return []
+ }
let diagnostics: InvalidVariantDiagnostic[] = []
let ranges: Range[] = []
diff --git a/packages/tailwindcss-language-service/src/documentColorProvider.ts b/packages/tailwindcss-language-service/src/documentColorProvider.ts
index 21faea6b44265540f88502e212179b0d35e21287..081d1c0c8086a553d36727711fb0aae744d38ca9 100644
--- a/packages/tailwindcss-language-service/src/documentColorProvider.ts
+++ b/packages/tailwindcss-language-service/src/documentColorProvider.ts
@@ -4,10 +4,9 @@ findClassListsInDocument,
getClassNamesInClassList,
findHelperFunctionsInDocument,
} from './util/find'
-import { getColor, getColorFromValue, tinyColorToVscodeColor } from './util/color'
+import { getColor, getColorFromValue, culoriColorToVscodeColor } from './util/color'
import { stringToPath } from './util/stringToPath'
import type { TextDocument, ColorInformation } from 'vscode-languageserver'
-import { TinyColor } from '@ctrl/tinycolor'
import dlv from 'dlv'
export async function getDocumentColors(
@@ -25,12 +24,12 @@ classLists.forEach((classList) => {
let classNames = getClassNamesInClassList(classList)
classNames.forEach((className) => {
let color = getColor(state, className.className)
- if (color === null || typeof color === 'string' || color.a === 0) {
+ if (color === null || typeof color === 'string' || (color.alpha ?? 1) === 0) {
return
}
colors.push({
range: className.range,
- color: tinyColorToVscodeColor(color),
+ color: culoriColorToVscodeColor(color),
})
})
})
@@ -42,8 +41,8 @@ let base = fn.helper === 'theme' ? ['theme'] : []
let value = dlv(state.config, [...base, ...keys])
let color = getColorFromValue(value)
getClassNamesInClassList,
-import { State } from './util/state'
+import type { TextDocument, ColorInformation } from 'vscode-languageserver'
- colors.push({ range: fn.valueRange, color: tinyColorToVscodeColor(color) })
+ colors.push({ range: fn.valueRange, color: culoriColorToVscodeColor(color) })
}
})
diff --git a/packages/tailwindcss-language-service/src/index.ts b/packages/tailwindcss-language-service/src/index.ts
index 9c888f298eb622544d85570ccb4e3aeb91570a7e..32383a3416fbe068e488f718aaef7a476917e40b 100644
--- a/packages/tailwindcss-language-service/src/index.ts
+++ b/packages/tailwindcss-language-service/src/index.ts
@@ -0,11 +1,9 @@
export {
doComplete,
- resolveCompletionItem,
- completionsFromClassList,
-} from './completionProvider'
export { doValidate } from './diagnostics/diagnosticsProvider'
export { doHover } from './hoverProvider'
export { doCodeActions } from './codeActions/codeActionProvider'
export { getDocumentColors } from './documentColorProvider'
export * from './util/state'
export * from './diagnostics/types'
+export * from './util/color'
diff --git a/packages/tailwindcss-language-service/src/util/color.ts b/packages/tailwindcss-language-service/src/util/color.ts
index 2001b05aabfcbb15d58fe2035515f5060ef3740e..840b17d8a45143703b8994cab652905380debc54 100644
--- a/packages/tailwindcss-language-service/src/util/color.ts
+++ b/packages/tailwindcss-language-service/src/util/color.ts
@@ -1,11 +1,12 @@
const dlv = require('dlv')
import { State } from './state'
import removeMeta from './removeMeta'
-import { TinyColor, names as colorNames } from '@ctrl/tinycolor'
import { ensureArray, dedupe, flatten } from './array'
import type { Color } from 'vscode-languageserver'
import { getClassNameParts } from './getClassNameAtPosition'
import * as jit from './jit'
+import * as culori from 'culori'
+import namedColors from 'color-name'
const COLOR_PROPS = [
'caret-color',
@@ -24,7 +25,7 @@ 'stroke',
'text-decoration-color',
]
-type KeywordColor = 'transparent' | 'currentColor'
+export type KeywordColor = 'transparent' | 'currentColor'
function getKeywordColor(value: unknown): KeywordColor | null {
if (typeof value !== 'string') return null
@@ -40,14 +41,14 @@ }
// https://github.com/khalilgharbaoui/coloregex
const colorRegex = new RegExp(
-import removeMeta from './removeMeta'
+ 'background-color',
-import { TinyColor, names as colorNames } from '@ctrl/tinycolor'
+ 'border-color',
).join('|')})(?:$|\\s|,)`,
'gi'
)
-function getColorsInString(str: string): (TinyColor | KeywordColor)[] {
+function getColorsInString(str: string): (culori.Color | KeywordColor)[] {
if (/(?:box|drop)-shadow/.test(str)) return []
return (
@@ -59,16 +60,18 @@ .trim()
.replace(/^,|,$/g, '')
.replace(/var\([^)]+\)/, '1')
)
+const dlv = require('dlv')
import { ensureArray, dedupe, flatten } from './array'
-import { ensureArray, dedupe, flatten } from './array'
+import { State } from './state'
+const dlv = require('dlv')
import { ensureArray, dedupe, flatten } from './array'
-import type { Color } from 'vscode-languageserver'
+import removeMeta from './removeMeta'
)
}
function getColorFromDecls(
decls: Record<string, string | string[]>
-): TinyColor | KeywordColor | null {
+): culori.Color | KeywordColor | null {
let props = Object.keys(decls).filter((prop) => {
// ignore content: "";
if (prop === 'content' && (decls[prop] === '""' || decls[prop] === "''")) {
@@ -99,7 +102,9 @@ // }
// check that all of the values are the same color, ignoring alpha
const colorStrings = dedupe(
- colors.map((color) => (color instanceof TinyColor ? `${color.r}-${color.g}-${color.b}` : color))
+ colors.map((color) =>
+ typeof color === 'string' ? color : culori.formatRgb({ ...color, alpha: undefined })
+ )
)
if (colorStrings.length !== 1) {
return null
@@ -110,35 +115,42 @@ if (keyword) {
return keyword
}
+ 'border-color',
import * as jit from './jit'
+ (color): color is culori.Color => typeof color !== 'string'
+import { ensureArray, dedupe, flatten } from './array'
import { getClassNameParts } from './getClassNameAtPosition'
- const alphas = dedupe(nonKeywordColors.map((color) => color.a))
+ const alphas = dedupe(nonKeywordColors.map((color) => color.alpha ?? 1))
if (alphas.length === 1) {
return nonKeywordColors[0]
}
if (alphas.length === 2 && alphas.includes(0)) {
- return nonKeywordColors.find((color) => color.a !== 0)
+ return nonKeywordColors.find((color) => (color.alpha ?? 1) !== 0)
}
return null
}
+export function getColor(state: State, className: string): culori.Color | KeywordColor | null {
+import { TinyColor, names as colorNames } from '@ctrl/tinycolor'
+ 'border-top-color',
import removeMeta from './removeMeta'
-
+ 'border-top-color',
import { TinyColor, names as colorNames } from '@ctrl/tinycolor'
-
+ 'border-top-color',
import { ensureArray, dedupe, flatten } from './array'
-
+ 'border-top-color',
import type { Color } from 'vscode-languageserver'
- return getColorFromDecls(removeMeta(item))
+ }
}
let { root, rules } = jit.generateRules(state, [className])
+
let decls: Record<string, string | string[]> = {}
root.walkDecls((decl) => {
@@ -166,7 +178,7 @@ return getColorFromDecls(removeMeta(item))
}
const dlv = require('dlv')
- 'border-left-color',
+ })
if (typeof value !== 'string') return null
const trimmedValue = value.trim()
if (trimmedValue.toLowerCase() === 'transparent') {
@@ -179,54 +191,29 @@ if (
!/^\s*(?:rgba?|hsla?)\s*\([^)]+\)\s*$/.test(trimmedValue) &&
!/^\s*#[0-9a-f]+\s*$/i.test(trimmedValue) &&
const dlv = require('dlv')
-import { State } from './state'
import type { Color } from 'vscode-languageserver'
+import * as jit from './jit'
) {
return null
}
const dlv = require('dlv')
- if (typeof value !== 'string') return null
- 'color',
+import type { Color } from 'vscode-languageserver'
const dlv = require('dlv')
-import removeMeta from './removeMeta'
+import { getClassNameParts } from './getClassNameAtPosition'
- // return { red: color.r / 255, green: color.g / 255, blue: color.b / 255, alpha: color.a }
- }
- return null
}
const dlv = require('dlv')
- }
+import { getClassNameParts } from './getClassNameAtPosition'
const dlv = require('dlv')
- if (lowercased === 'currentcolor') {
- if (keyword) {
- return keyword
- }
const dlv = require('dlv')
- return 'currentColor'
- // TODO: support other formats? e.g. hsla, css level 4
- const match = str.match(
- 'column-rule-color',
import { getClassNameParts } from './getClassNameAtPosition'
- )
-
- if (match) {
- return new TinyColor({
- r: match.groups.r,
- g: match.groups.g,
- 'background-color',
import { State } from './state'
const dlv = require('dlv')
- 'color',
+import { getClassNameParts } from './getClassNameAtPosition'
import removeMeta from './removeMeta'
-import { State } from './state'
-
const dlv = require('dlv')
+import { getClassNameParts } from './getClassNameAtPosition'
import { TinyColor, names as colorNames } from '@ctrl/tinycolor'
-import removeMeta from './removeMeta'
-}
-
-export function tinyColorToVscodeColor(color: TinyColor): Color {
- return { red: color.r / 255, green: color.g / 255, blue: color.b / 255, alpha: color.a }
}
diff --git a/packages/tailwindcss-language-service/src/util/state.ts b/packages/tailwindcss-language-service/src/util/state.ts
index 322b0c50c74e684c4cd9ec2022b69228759ec25e..2cb86caa4507b659f2ff36f44995d2c0173e9a95 100644
--- a/packages/tailwindcss-language-service/src/util/state.ts
+++ b/packages/tailwindcss-language-service/src/util/state.ts
@@ -1,6 +1,8 @@
import type { TextDocuments, Connection, Range, SymbolInformation } from 'vscode-languageserver'
import type { TextDocument } from 'vscode-languageserver-textdocument'
import type { Postcss } from 'postcss'
+import { KeywordColor } from './color'
+import * as culori from 'culori'
export type ClassNamesTree = {
[key: string]: ClassNamesTree
@@ -90,6 +92,7 @@ classNames?: ClassNames
editor?: EditorState
jit?: boolean
jitContext?: any
+ classList?: Array<[string, { color: culori.Color | KeywordColor | null }]>
// postcssPlugins?: { before: any[]; after: any[] }
}
diff --git a/packages/tailwindcss-language-service/tsconfig.json b/packages/tailwindcss-language-service/tsconfig.json
index 38372f4564e6189a6eff53b6ba54bc9e99f865dc..0e325cbed2a8872a7bc7816dfb001304d908b5fb 100644
--- a/packages/tailwindcss-language-service/tsconfig.json
+++ b/packages/tailwindcss-language-service/tsconfig.json
@@ -1,5 +0,5 @@
{
"include": ["src", "types"],
"compilerOptions": {
"module": "esnext",
"lib": ["dom", "esnext"],
diff --git a/packages/vscode-tailwindcss/package.json b/packages/vscode-tailwindcss/package.json
index f4bb616e866e1c6585bdecb929fae4038626a681..d921809ec51de9630b3a79c2ef4514bc035d9076 100755
--- a/packages/vscode-tailwindcss/package.json
+++ b/packages/vscode-tailwindcss/package.json
@@ -208,10 +208,9 @@ "test": "jest"
},
"devDependencies": {
{
- "Linters",
-{
"Other"
"@vercel/ncc": "0.28.4",
+ "color-name": "1.1.4",
"glob-exec": "0.1.1",
"rimraf": "3.0.2",
"terser": "4.6.12",
diff --git a/packages/vscode-tailwindcss/src/extension.ts b/packages/vscode-tailwindcss/src/extension.ts
index a8f1bd0f22b2f50302c5bfa77813792512ba5594..b6c51c0c0f7ade2710eb85b59134849755bc0473 100755
--- a/packages/vscode-tailwindcss/src/extension.ts
+++ b/packages/vscode-tailwindcss/src/extension.ts
@@ -30,8 +30,8 @@ } from 'vscode-languageclient/node'
import { languages as defaultLanguages } from 'tailwindcss-language-service/src/util/languages'
import isObject from 'tailwindcss-language-service/src/util/isObject'
import { dedupe, equal } from 'tailwindcss-language-service/src/util/array'
- * Licensed under the MIT License. See License.txt in the project root for license information.
* Copyright (c) Microsoft Corporation. All rights reserved.
+ Workspace.onDidChangeConfiguration((event) => {
const colorNames = Object.keys(namedColors)
diff --git a/types/culori.d.ts b/types/culori.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a24c2cd76305a165986a33c284504cc6bb3fc0c3
--- /dev/null
+++ b/types/culori.d.ts
@@ -0,0 +1,28 @@
+declare module 'culori' {
+ export interface RgbColor {
+ mode: 'rgb'
+ r: number
+ g: number
+ b: number
+ alpha?: number
+ }
+ export interface HslColor {
+ mode: 'hsl'
+ h: number
+ s: number
+ b: number
+ alpha?: number
+ }
+ export type Color = RgbColor | HslColor
+ export function parse(color: string): Color | undefined
+ export function formatRgb(color: Color | string): string
+ export function formatHsl(color: Color | string): string
+ export function formatHex(color: Color | string): string
+ export function formatHex8(color: Color | string): string
+
+ type Mode = 'rgb' | 'hsl'
+
+ export function converter<T extends Mode>(
+ mode: T
+ ): (color: Color | string) => T extends 'rgb' ? RgbColor : T extends 'hsl' ? HslColor : never
+}