Skip to content

Commit 515e429

Browse files
bartvenemanBart Veneman
andauthored
feat: Expose color names, keywords and KeywordSet class (#473)
closes #311 --------- Co-authored-by: Bart Veneman <[email protected]>
1 parent 7e2adb0 commit 515e429

File tree

4 files changed

+60
-1
lines changed

4 files changed

+60
-1
lines changed

src/index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,4 +1083,15 @@ export {
10831083
isValuePrefixed
10841084
} from './values/vendor-prefix.js'
10851085

1086+
export {
1087+
colorFunctions,
1088+
colorKeywords,
1089+
namedColors,
1090+
systemColors,
1091+
} from './values/colors.js'
1092+
1093+
export { keywords as cssKeywords } from './values/values.js'
1094+
10861095
export { hasVendorPrefix } from './vendor-prefix.js'
1096+
1097+
export { KeywordSet } from './keyword-set.js'

src/index.test.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ import {
1111
isPropertyHack,
1212
isValuePrefixed,
1313
hasVendorPrefix,
14+
cssKeywords,
15+
KeywordSet,
16+
// Color exports
17+
namedColors,
18+
systemColors,
19+
colorFunctions,
20+
colorKeywords,
1421
} from "./index.js"
1522

1623
const Api = suite("Public API")
@@ -55,6 +62,32 @@ Api('exposes the "hasVendorPrefix" method', () => {
5562
assert.is(typeof hasVendorPrefix, "function")
5663
})
5764

65+
Api('exposes the namedColors KeywordSet', () => {
66+
assert.ok(namedColors.has('Red'))
67+
})
68+
69+
Api('exposes the systemColors KeywordSet', () => {
70+
assert.ok(systemColors.has('LinkText'))
71+
})
72+
73+
Api('exposes the colorFunctions KeywordSet', () => {
74+
assert.ok(colorFunctions.has('okLAB'))
75+
})
76+
77+
Api('exposes the colorKeywords KeywordSet', () => {
78+
assert.ok(colorKeywords.has('TRANSPARENT'))
79+
})
80+
81+
Api('exposes CSS keywords KeywordSet', () => {
82+
assert.ok(cssKeywords.has('Auto'))
83+
assert.ok(cssKeywords.has('inherit'))
84+
})
85+
86+
Api('exposes the KeywordSet class', () => {
87+
assert.is(typeof KeywordSet, 'function')
88+
assert.is((new KeywordSet()).constructor.name, 'KeywordSet')
89+
})
90+
5891
Api("does not break on CSS Syntax Errors", () => {
5992
assert.not.throws(() => analyze("test, {}"))
6093
assert.not.throws(() => analyze("test { color red }"))

src/keyword-set.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*/
44
export class KeywordSet {
55

6-
/** @param {string[]} items */
6+
/** @param {Lowercase<string>[]} items */
77
constructor(items) {
88
/** @type {Set<string>} */
99
this.set = new Set(items)

src/keyword-set.test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { KeywordSet } from './keyword-set.js'
2+
import { test } from 'uvu'
3+
import * as assert from "uvu/assert"
4+
5+
test('happy path', () => {
6+
assert.not.ok(new KeywordSet([]).has('a'))
7+
expect.not.ok(new KeywordSet([]).has(''))
8+
expect.ok(new KeywordSet(['a', 'b']).has('a'))
9+
expect.ok(new KeywordSet(['a', 'b']).has('A'))
10+
expect.not.ok(new KeywordSet(['a', 'b']).has('aa'))
11+
12+
expect.ok(new KeywordSet(['currentcolor']).has('currentColor'))
13+
expect.ok(new KeywordSet(['marktext']).has('MarkText'))
14+
expect.ok(new KeywordSet(['revert-layer']).has('Revert-Layer'))
15+
})

0 commit comments

Comments
 (0)