diff --git a/src/js/util.ts b/src/js/util.ts index 008e584..93c1fa3 100644 --- a/src/js/util.ts +++ b/src/js/util.ts @@ -31,6 +31,8 @@ const DEG_HALF = 180; /* regexp */ const REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`); +const REG_FN_COLOR = + /^(?:(?:ok)?l(?:ab|ch)|color(?:-mix)?|hsla?|hwb|rgba?|var)\(/; const REG_MIX = new RegExp(SYN_MIX); /** @@ -175,7 +177,7 @@ export const isColor = (value: unknown, opt: Options = {}): boolean => { } } else if (REG_COLOR.test(value) || REG_MIX.test(value)) { return true; - } else { + } else if (REG_FN_COLOR.test(value)) { opt.nullable = true; if (!opt.format) { opt.format = VAL_SPEC; diff --git a/test/css-gradient.test.ts b/test/css-gradient.test.ts index 3933eb3..cc3fa49 100644 --- a/test/css-gradient.test.ts +++ b/test/css-gradient.test.ts @@ -411,4 +411,21 @@ describe('is CSS gradient', () => { const res = func('linear-gradient(red, blue)'); assert.strictEqual(res, true, 'result'); }); + + it('should get true', () => { + const res = func('radial-gradient(transparent, var(--custom-color))'); + assert.strictEqual(res, true, 'result'); + }); + + it('should get true', () => { + const res = func('radial-gradient(transparent, var(--custom-color))'); + assert.strictEqual(res, true, 'result'); + }); + + it('should get true', () => { + const res = func( + 'radial-gradient(transparent, /* comment */ var(--custom-color))' + ); + assert.strictEqual(res, true, 'result'); + }); }); diff --git a/test/util.test.ts b/test/util.test.ts index 283c7f5..364e464 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -190,6 +190,16 @@ describe('is color', () => { ); assert.strictEqual(res, true, 'result'); }); + + it('should get false', () => { + const res = func('url(var(--foo))'); + assert.strictEqual(res, false, 'result'); + }); + + it('should get false', () => { + const res = func('radial-gradient(transparent, var(--custom-color))'); + assert.strictEqual(res, false, 'result'); + }); }); describe('value to JSON string', () => {