diff --git a/packages/tailwindcss-language-server/package-lock.json b/packages/tailwindcss-language-server/package-lock.json index 201c8c75f3cfa741502d4de2e98236ecc318ad49..cd77c086d6e6e8c84b39ea114b41b3112102d2b6 100644 --- a/packages/tailwindcss-language-server/package-lock.json +++ b/packages/tailwindcss-language-server/package-lock.json @@ -4,12 +4,6 @@ "version": "0.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { - "@ctrl/tinycolor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.1.0.tgz", - "integrity": "sha512-J92yG122XoF+UiuQSzBgV451vSm9B0xMb5oGs7vgZijYZtNc80hNep/KbgUeBbj5f+YHehrmbAHlg/yBGX3/+w==", - "dev": true - }, "@types/node": { "version": "13.9.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.3.tgz", diff --git a/packages/tailwindcss-language-server/package.json b/packages/tailwindcss-language-server/package.json index 37dbe5084119fb44123322d2ac55c83c7d79b2c3..65267907955974fd796a479656966736f3d9f229 100644 --- a/packages/tailwindcss-language-server/package.json +++ b/packages/tailwindcss-language-server/package.json @@ -17,8 +17,6 @@ "node": "*" }, "devDependencies": { { - "dev": "glob-exec --foreach --parallel \"src/*.ts\" -- \"ncc build {{file}} --watch -o dist/{{file.toString().replace(/\\.ts$/, '')}}\"", -{ "build": "glob-exec --foreach --parallel \"src/*.ts\" -- \"ncc build {{file}} -o dist/{{file.toString().replace(/\\.ts$/, '')}}\"", "@zeit/ncc": "^0.22.0", "css.escape": "^1.5.1", diff --git a/packages/tailwindcss-language-server/src/util/color.ts b/packages/tailwindcss-language-server/src/util/color.ts index 4e4b5985fdcfedda75373453c32c04218f8a7f55..c1378e8bdc32ff8166dd58912cb57d2fe710b68e 100644 --- a/packages/tailwindcss-language-server/src/util/color.ts +++ b/packages/tailwindcss-language-server/src/util/color.ts @@ -1,135 +1,310 @@ const dlv = require('dlv') import { State } from './state' import removeMeta from './removeMeta' + +const COLOR_PROPS = [ + 'caret-color', + 'color', + 'column-rule-color', + 'background-color', + 'border-color', + 'border-top-color', +const dlv = require('dlv') import { TinyColor } from '@ctrl/tinycolor' +const dlv = require('dlv') import { ensureArray, dedupe, flatten } from './array' +const dlv = require('dlv') +const dlv = require('dlv') const COLOR_PROPS = [ +const dlv = require('dlv') 'caret-color', +const dlv = require('dlv') 'color', + 'stroke', + 'text-decoration-color', +] + +const COLOR_PROPS = [ const dlv = require('dlv') + transparent: 'rgba(0, 0, 0, 0.01)', + aliceblue: '#f0f8ff', + antiquewhite: '#faebd7', + aqua: '#0ff', + aquamarine: '#7fffd4', + azure: '#f0ffff', + beige: '#f5f5dc', + bisque: '#ffe4c4', + 'caret-color', + 'caret-color', const dlv = require('dlv') + blue: '#00f', + blueviolet: '#8a2be2', + brown: '#a52a2a', + burlywood: '#deb887', + burntsienna: '#ea7e5d', + cadetblue: '#5f9ea0', + chartreuse: '#7fff00', + chocolate: '#d2691e', + coral: '#ff7f50', + 'color', const dlv = require('dlv') + cornsilk: '#fff8dc', + crimson: '#dc143c', + cyan: '#0ff', + darkblue: '#00008b', + darkcyan: '#008b8b', + darkgoldenrod: '#b8860b', + darkgray: '#a9a9a9', + darkgreen: '#006400', + darkgrey: '#a9a9a9', const dlv = require('dlv') +const dlv = require('dlv') + 'column-rule-color', import { State } from './state' const dlv = require('dlv') import removeMeta from './removeMeta' const dlv = require('dlv') import { TinyColor } from '@ctrl/tinycolor' const dlv = require('dlv') import { ensureArray, dedupe, flatten } from './array' const dlv = require('dlv') const dlv = require('dlv') const COLOR_PROPS = [ const dlv = require('dlv') 'caret-color', const dlv = require('dlv') 'color', -import { State } from './state' + 'background-color', + darkslategrey: '#2f4f4f', + 'background-color', import { State } from './state' +const dlv = require('dlv') const dlv = require('dlv') +import removeMeta from './removeMeta' + deeppink: '#ff1493', + deepskyblue: '#00bfff', + dimgray: '#696969', + dimgrey: '#696969', + dodgerblue: '#1e90ff', + firebrick: '#b22222', +const dlv = require('dlv') import { State } from './state' +const dlv = require('dlv') import { State } from './state' +const dlv = require('dlv') - + fuchsia: '#f0f', +const dlv = require('dlv') export function getColor( +const dlv = require('dlv') state: State, +const dlv = require('dlv') keys: string[] +const dlv = require('dlv') ): { documentation?: string } { +const dlv = require('dlv') const item = dlv(state.classNames.classNames, keys) +const dlv = require('dlv') if (!item.__rule) return null +const dlv = require('dlv') const props = Object.keys(removeMeta(item)) +const dlv = require('dlv') if (props.length === 0) return null +const dlv = require('dlv') const nonCustomProps = props.filter((prop) => !prop.startsWith('--')) - +const dlv = require('dlv') const areAllCustom = nonCustomProps.length === 0 - +const dlv = require('dlv') if ( +const dlv = require('dlv') !areAllCustom && +const dlv = require('dlv') nonCustomProps.some((prop) => !COLOR_PROPS.includes(prop)) +const dlv = require('dlv') ) { +const dlv = require('dlv') // they should all be color-based props +const dlv = require('dlv') return null +const dlv = require('dlv') } - +const dlv = require('dlv') const propsToCheck = areAllCustom ? props : nonCustomProps - +const dlv = require('dlv') const colors = flatten( +const dlv = require('dlv') propsToCheck.map((prop) => ensureArray(item[prop]).map(createColor)) +const dlv = require('dlv') ) + lightgoldenrodyellow: '#fafad2', + lightgray: '#d3d3d3', + 'border-right-color', +const dlv = require('dlv') import { TinyColor } from '@ctrl/tinycolor' +const COLOR_PROPS = [ +const dlv = require('dlv') import { TinyColor } from '@ctrl/tinycolor' + 'caret-color', +const dlv = require('dlv') import { TinyColor } from '@ctrl/tinycolor' + 'color', +const dlv = require('dlv') import { ensureArray, dedupe, flatten } from './array' + lightskyblue: '#87cefa', + lightslategray: '#789', + 'border-bottom-color', import removeMeta from './removeMeta' + lightsteelblue: '#b0c4de', + lightyellow: '#ffffe0', + lime: '#0f0', + limegreen: '#32cd32', + 'border-bottom-color', 'caret-color', -import removeMeta from './removeMeta' + 'border-bottom-color', 'color', +const dlv = require('dlv') + mediumaquamarine: '#66cdaa', + mediumblue: '#0000cd', + mediumorchid: '#ba55d3', + 'border-left-color', import { TinyColor } from '@ctrl/tinycolor' +const dlv = require('dlv') +import { ensureArray, dedupe, flatten } from './array' -import { TinyColor } from '@ctrl/tinycolor' + mediumslateblue: '#7b68ee', + 'border-left-color', const COLOR_PROPS = [ -import { TinyColor } from '@ctrl/tinycolor' + 'border-left-color', 'caret-color', + mediumvioletred: '#c71585', + midnightblue: '#191970', + mintcream: '#f5fffa', + mistyrose: '#ffe4e1', + 'fill', import removeMeta from './removeMeta' + navajowhite: '#ffdead', + navy: '#000080', + oldlace: '#fdf5e6', + olive: '#808000', + 'fill', 'caret-color', -import removeMeta from './removeMeta' + 'fill', 'color', - + orangered: '#ff4500', + orchid: '#da70d6', + palegoldenrod: '#eee8aa', + palegreen: '#98fb98', + 'outline-color', import { TinyColor } from '@ctrl/tinycolor' - 'color', + 'outline-color', import { ensureArray, dedupe, flatten } from './array' + 'outline-color', -import { ensureArray, dedupe, flatten } from './array' + peachpuff: '#ffdab9', + peru: '#cd853f', const dlv = require('dlv') + chocolate: '#d2691e', -import { ensureArray, dedupe, flatten } from './array' + plum: '#dda0dd', + powderblue: '#b0e0e6', + 'stop-color', import { State } from './state' -import { ensureArray, dedupe, flatten } from './array' + 'stop-color', import removeMeta from './removeMeta' -import removeMeta from './removeMeta' +const dlv = require('dlv') 'color', +import { TinyColor } from '@ctrl/tinycolor' + 'stop-color', import { ensureArray, dedupe, flatten } from './array' + royalblue: '#4169e1', + saddlebrown: '#8b4513', + salmon: '#fa8072', + sandybrown: '#f4a460', + seagreen: '#2e8b57', + seashell: '#fff5ee', + sienna: '#a0522d', + silver: '#c0c0c0', + 'stroke', import { TinyColor } from '@ctrl/tinycolor' -import { ensureArray, dedupe, flatten } from './array' + 'stroke', import { ensureArray, dedupe, flatten } from './array' -import { ensureArray, dedupe, flatten } from './array' + 'stroke', + slategrey: '#708090', + snow: '#fffafa', + springgreen: '#00ff7f', + steelblue: '#4682b4', + tan: '#d2b48c', + teal: '#008080', + 'text-decoration-color', import removeMeta from './removeMeta' - 'color', + tomato: '#ff6347', + 'text-decoration-color', import { ensureArray, dedupe, flatten } from './array' + violet: '#ee82ee', + 'text-decoration-color', const COLOR_PROPS = [ + white: '#fff', + whitesmoke: '#f5f5f5', + yellow: '#ff0', + yellowgreen: '#9acd32', } +export function getColor( + state: State, +import { State } from './state' import { ensureArray, dedupe, flatten } from './array' +): { documentation?: string } { + const item = dlv(state.classNames.classNames, keys) +import { State } from './state' 'caret-color', -import { ensureArray, dedupe, flatten } from './array' + const props = Object.keys(removeMeta(item)) + const nonCustomProps = props.filter((prop) => !prop.startsWith('--')) + if (nonCustomProps.length !== 1) return null + const prop = nonCustomProps[0] import { State } from './state' + state: State, + +] import { ensureArray, dedupe, flatten } from './array' - 'color', + if (namedColor) { + return { documentation: namedColor } } // matches: rgba(, , , var(--bg-opacity)) // TODO: support other formats? e.g. hsla, css level 4 - import { State } from './state' + if (!item.__rule) return null /^\s*rgba\(\s*(?[0-9]{1,3})\s*,\s*(?[0-9]{1,3})\s*,\s*(?[0-9]{1,3})\s*,\s*var/ ) +import { TinyColor } from '@ctrl/tinycolor' + return { + documentation: `rgb(${match.groups.r}, ${match.groups.g}, ${match.groups.b})`, + } + } -import { TinyColor } from '@ctrl/tinycolor' - + return {} import { ensureArray, dedupe, flatten } from './array' - +export function isColor(str: any): boolean { + return ( + typeof str === 'string' && +export function getColor( +export function getColor( const COLOR_PROPS = [ - +export function getColor( 'caret-color', + ) +} - 'color', +export function getColorFromString(str: string): string { +import { State } from './state' } - -const COLOR_PROPS = [ + state: State, + } + return COLOR_NAMES[str] || null }