From b732d33e1aa5f269c2c4db1eef81b8bd88ed7313 Mon Sep 17 00:00:00 2001 From: Jonny Gerig Meyer Date: Wed, 14 Feb 2024 14:44:38 -0500 Subject: [PATCH 01/10] Parse both dashed-ident and ident versions, and add missing dashed-idents to color spaces. --- src/parse.js | 9 ++-- src/space.js | 8 ++-- src/spaces/a98rgb-linear.js | 1 + src/spaces/a98rgb.js | 8 +--- src/spaces/acescc.js | 6 +-- src/spaces/acescg.js | 7 +-- src/spaces/cam16.js | 8 +--- src/spaces/ictcp.js | 6 +-- src/spaces/jzazbz.js | 1 + src/spaces/jzczhz.js | 6 +-- src/spaces/p3-linear.js | 1 + src/spaces/p3.js | 8 +--- src/spaces/prophoto-linear.js | 1 + src/spaces/prophoto.js | 8 +--- src/spaces/rec2020-linear.js | 6 +-- src/spaces/rec2020.js | 3 -- src/spaces/rec2100-hlg.js | 9 +--- src/spaces/rec2100-pq.js | 8 +--- src/spaces/srgb-linear.js | 5 +-- src/spaces/xyz-abs-d65.js | 1 + src/spaces/xyz-d50.js | 5 +-- test/parse.js | 80 ++++++++++++++++++++++++++++++++++- 22 files changed, 116 insertions(+), 79 deletions(-) diff --git a/src/parse.js b/src/parse.js index 88a37d9cf..1c0573107 100644 --- a/src/parse.js +++ b/src/parse.js @@ -78,8 +78,9 @@ export default function parse (str, {meta} = {}) { if (name === "color") { // color() function let id = env.parsed.args.shift(); - let undashedId = id.startsWith("--") ? id.substring(2) : id; - let ids = [id, undashedId]; + // Check against both and versions + let alternateId = id.startsWith("--") ? id.substring(2) : `--${id}`; + let ids = [id, alternateId]; let alpha = env.parsed.rawArgs.indexOf("/") > 0 ? env.parsed.args.pop() : 1; for (let space of ColorSpace.all) { @@ -109,10 +110,10 @@ export default function parse (str, {meta} = {}) { // Not found let didYouMean = ""; - let registryId = id in ColorSpace.registry ? id : undashedId; + let registryId = id in ColorSpace.registry ? id : alternateId; if (registryId in ColorSpace.registry) { // Used color space id instead of color() id, these are often different - let cssId = ColorSpace.registry[registryId].formats?.functions?.color?.id; + let cssId = ColorSpace.registry[registryId].formats?.color?.id; if (cssId) { didYouMean = `Did you mean color(${cssId})?`; diff --git a/src/space.js b/src/space.js index ec23db59f..24497577a 100644 --- a/src/space.js +++ b/src/space.js @@ -45,12 +45,12 @@ export default class ColorSpace { format.name ||= name; } - if (options.cssId && !this.formats.functions?.color) { + if (options.cssId && !this.formats.color) { this.formats.color = { id: options.cssId }; Object.defineProperty(this, "cssId", {value: options.cssId}); } - else if (this.formats?.color && !this.formats?.color.id) { - this.formats.color.id = this.id; + else if (!this.formats.color?.id) { + this.formats.color = { ...this.formats.color ?? {}, id: this.id }; } // Gamut space @@ -122,7 +122,7 @@ export default class ColorSpace { } get cssId () { - return this.formats.functions?.color?.id || this.id; + return this.formats?.color?.id || this.id; } get isPolar () { diff --git a/src/spaces/a98rgb-linear.js b/src/spaces/a98rgb-linear.js index 8eacd51dc..79b08a7cf 100644 --- a/src/spaces/a98rgb-linear.js +++ b/src/spaces/a98rgb-linear.js @@ -20,6 +20,7 @@ const fromXYZ_M = [ export default new RGBColorSpace({ id: "a98rgb-linear", + cssId: "--a98-rgb-linear", name: "Linear Adobe® 98 RGB compatible", white: "D65", toXYZ_M, diff --git a/src/spaces/a98rgb.js b/src/spaces/a98rgb.js index b742619ce..bb3be180d 100644 --- a/src/spaces/a98rgb.js +++ b/src/spaces/a98rgb.js @@ -3,13 +3,9 @@ import A98Linear from "./a98rgb-linear.js"; export default new RGBColorSpace({ id: "a98rgb", + cssId: "a98-rgb", name: "Adobe® 98 RGB compatible", base: A98Linear, toBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 563 / 256) * Math.sign(val)), - fromBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 256 / 563) * Math.sign(val)), - formats: { - color: { - id: "a98-rgb" - } - }, + fromBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 256 / 563) * Math.sign(val)) }); diff --git a/src/spaces/acescc.js b/src/spaces/acescc.js index 07dd0b8dc..e9cff0281 100644 --- a/src/spaces/acescc.js +++ b/src/spaces/acescc.js @@ -13,6 +13,7 @@ const ACES_cc_max = (Math.log2(65504) + 9.72) / 17.52; // 1.468 export default new RGBColorSpace({ id: "acescc", + cssId: "--acescc", name: "ACEScc", // see S-2014-003 ACEScc – A Logarithmic Encoding of ACES Data // https://docs.acescentral.com/specifications/acescc/ @@ -69,10 +70,7 @@ export default new RGBColorSpace({ return (Math.log2(val) + 9.72) / 17.52; } }); - }, + } // encoded media white (rgb 1,1,1) => linear [ 222.861, 222.861, 222.861 ] // encoded media black (rgb 0,0,0) => linear [ 0.0011857, 0.0011857, 0.0011857] - formats: { - color: {} - } }); diff --git a/src/spaces/acescg.js b/src/spaces/acescg.js index 6d2d39702..4c84af8dd 100644 --- a/src/spaces/acescg.js +++ b/src/spaces/acescg.js @@ -22,6 +22,7 @@ const fromXYZ_M = [ export default new RGBColorSpace({ id: "acescg", + cssId: "--acescg", name: "ACEScg", // ACEScg – A scene-referred, linear-light encoding of ACES Data @@ -47,11 +48,7 @@ export default new RGBColorSpace({ white: WHITES.ACES, toXYZ_M, - fromXYZ_M, - - formats: { - color: {} - }, + fromXYZ_M }); // export default Color; diff --git a/src/spaces/cam16.js b/src/spaces/cam16.js index 2eb461db0..723d5a06e 100644 --- a/src/spaces/cam16.js +++ b/src/spaces/cam16.js @@ -329,6 +329,7 @@ export function toCam16 (xyzd65, env) { // Results compared against: https://github.com/colour-science/colour export default new ColorSpace({ id: "cam16-jmh", + cssId: "--cam16-jmh", name: "CAM16-JMh", coords: { j: { @@ -357,10 +358,5 @@ export default new ColorSpace({ {J: cam16[0], M: cam16[1], h: cam16[2]}, viewingConditions ); - }, - formats: { - color: { - id: "--cam16-jmh" - }, - }, + } }); diff --git a/src/spaces/ictcp.js b/src/spaces/ictcp.js index 0a98528c3..f49472b8b 100644 --- a/src/spaces/ictcp.js +++ b/src/spaces/ictcp.js @@ -66,6 +66,7 @@ const LMStoXYZ_M = [ // https://professional.dolby.com/siteassets/pdfs/dolby-vision-measuring-perceptual-color-volume-v7.1.pdf export default new ColorSpace({ id: "ictcp", + cssId: "--ictcp", name: "ICTCP", // From BT.2100-2 page 7: // During production, signal values are expected to exceed the @@ -102,10 +103,7 @@ export default new ColorSpace({ let LMS = ICtCptoLMS(ICtCp); return multiplyMatrices(LMStoXYZ_M, LMS); - }, - formats: { - color: {} - }, + } }); function LMStoICtCp (LMS) { diff --git a/src/spaces/jzazbz.js b/src/spaces/jzazbz.js index dcb908fa9..41b7c400f 100644 --- a/src/spaces/jzazbz.js +++ b/src/spaces/jzazbz.js @@ -112,6 +112,7 @@ export default new ColorSpace({ formats: { // https://drafts.csswg.org/css-color-hdr/#Jzazbz "color": { + id: "--jzazbz", coords: [" | ", " | [-1,1]", " | [-1,1]"], } } diff --git a/src/spaces/jzczhz.js b/src/spaces/jzczhz.js index 942971bc7..85c439087 100644 --- a/src/spaces/jzczhz.js +++ b/src/spaces/jzczhz.js @@ -4,6 +4,7 @@ import {constrain as constrainAngle} from "../angles.js"; export default new ColorSpace({ id: "jzczhz", + cssId: "--jzczhz", name: "JzCzHz", coords: { jz: { @@ -49,8 +50,5 @@ export default new ColorSpace({ jzczhz[1] * Math.cos(jzczhz[2] * Math.PI / 180), // az jzczhz[1] * Math.sin(jzczhz[2] * Math.PI / 180) // bz ]; - }, - formats: { - color: {} - }, + } }); diff --git a/src/spaces/p3-linear.js b/src/spaces/p3-linear.js index da3667e60..dce2c67cf 100644 --- a/src/spaces/p3-linear.js +++ b/src/spaces/p3-linear.js @@ -14,6 +14,7 @@ const fromXYZ_M = [ export default new RGBColorSpace({ id: "p3-linear", + cssId: "--display-p3-linear", name: "Linear P3", white: "D65", toXYZ_M, diff --git a/src/spaces/p3.js b/src/spaces/p3.js index c6adea5f3..d664b7ff4 100644 --- a/src/spaces/p3.js +++ b/src/spaces/p3.js @@ -4,14 +4,10 @@ import sRGB from "./srgb.js"; export default new RGBColorSpace({ id: "p3", + cssId: "display-p3", name: "P3", base: P3Linear, // Gamma encoding/decoding is the same as sRGB fromBase: sRGB.fromBase, - toBase: sRGB.toBase, - formats: { - color: { - id: "display-p3", - } - }, + toBase: sRGB.toBase }); diff --git a/src/spaces/prophoto-linear.js b/src/spaces/prophoto-linear.js index 35db73ba2..cee826ed5 100644 --- a/src/spaces/prophoto-linear.js +++ b/src/spaces/prophoto-linear.js @@ -19,6 +19,7 @@ const fromXYZ_M = [ export default new RGBColorSpace({ id: "prophoto-linear", + cssId: "--prophoto-rgb-linear", name: "Linear ProPhoto", white: "D50", base: XYZ_D50, diff --git a/src/spaces/prophoto.js b/src/spaces/prophoto.js index 41e0669da..2ccd36bd3 100644 --- a/src/spaces/prophoto.js +++ b/src/spaces/prophoto.js @@ -6,6 +6,7 @@ const Et2 = 16 / 512; export default new RGBColorSpace({ id: "prophoto", + cssId: "prophoto-rgb", name: "ProPhoto", base: ProPhotoLinear, toBase (RGB) { @@ -14,10 +15,5 @@ export default new RGBColorSpace({ }, fromBase (RGB) { return RGB.map(v => v >= Et ? v ** (1 / 1.8) : 16 * v); - }, - formats: { - color: { - id: "prophoto-rgb" - } - }, + } }); diff --git a/src/spaces/rec2020-linear.js b/src/spaces/rec2020-linear.js index fc2b20de9..9a83fd372 100644 --- a/src/spaces/rec2020-linear.js +++ b/src/spaces/rec2020-linear.js @@ -19,11 +19,9 @@ const fromXYZ_M = [ export default new RGBColorSpace({ id: "rec2020-linear", + cssId: "--rec2020-linear", name: "Linear REC.2020", white: "D65", toXYZ_M, - fromXYZ_M, - formats: { - color: {}, - } + fromXYZ_M }); diff --git a/src/spaces/rec2020.js b/src/spaces/rec2020.js index 77e03aaae..48951e42d 100644 --- a/src/spaces/rec2020.js +++ b/src/spaces/rec2020.js @@ -27,8 +27,5 @@ export default new RGBColorSpace({ return 4.5 * val; }); - }, - formats: { - color: {}, } }); diff --git a/src/spaces/rec2100-hlg.js b/src/spaces/rec2100-hlg.js index a094f38cb..4f015f0c5 100644 --- a/src/spaces/rec2100-hlg.js +++ b/src/spaces/rec2100-hlg.js @@ -11,7 +11,7 @@ const scale = 3.7743; // Place 18% grey at HLG 0.38, so media white at 0.75 export default new RGBColorSpace({ id: "rec2100hlg", - cssId: "rec2100-hlg", + cssId: "--rec2100-hlg", name: "REC.2100-HLG", referred: "scene", @@ -45,10 +45,5 @@ export default new RGBColorSpace({ } return a * Math.log(12 * val - b) + c; }); - }, - formats: { - color: { - id: "rec2100-hlg" - }, - }, + } }); diff --git a/src/spaces/rec2100-pq.js b/src/spaces/rec2100-pq.js index f960e3bc4..76e8a809d 100644 --- a/src/spaces/rec2100-pq.js +++ b/src/spaces/rec2100-pq.js @@ -12,6 +12,7 @@ const c3 = 2392 / (2 ** 7); export default new RGBColorSpace({ id: "rec2100pq", + cssId: "--rec2100-pq", name: "REC.2100-PQ", base: REC2020Linear, toBase (RGB) { @@ -32,10 +33,5 @@ export default new RGBColorSpace({ return ((num / denom) ** m); }); - }, - formats: { - color: { - id: "rec2100-pq" - }, - }, + } }); diff --git a/src/spaces/srgb-linear.js b/src/spaces/srgb-linear.js index d2d2b8a71..5616ea075 100644 --- a/src/spaces/srgb-linear.js +++ b/src/spaces/srgb-linear.js @@ -26,8 +26,5 @@ export default new RGBColorSpace({ name: "Linear sRGB", white: "D65", toXYZ_M, - fromXYZ_M, - formats: { - color: {} - }, + fromXYZ_M }); diff --git a/src/spaces/xyz-abs-d65.js b/src/spaces/xyz-abs-d65.js index 73c93c867..66ef0dc42 100644 --- a/src/spaces/xyz-abs-d65.js +++ b/src/spaces/xyz-abs-d65.js @@ -9,6 +9,7 @@ export default new ColorSpace({ // SDR spaces are converted per BT.2048 // so that diffuse, media white is 203 cd/m² id: "xyz-abs-d65", + cssId: "--xyz-abs-d65", name: "Absolute XYZ D65", coords: { x: { diff --git a/src/spaces/xyz-d50.js b/src/spaces/xyz-d50.js index 2051c38ea..94c9fdef5 100644 --- a/src/spaces/xyz-d50.js +++ b/src/spaces/xyz-d50.js @@ -8,8 +8,5 @@ export default new ColorSpace({ white: "D50", base: XYZ_D65, fromBase: coords => adapt(XYZ_D65.white, "D50", coords), - toBase: coords => adapt("D50", XYZ_D65.white, coords), - formats: { - color: {} - }, + toBase: coords => adapt("D50", XYZ_D65.white, coords) }); diff --git a/test/parse.js b/test/parse.js index 84310ee02..30c88b1f0 100644 --- a/test/parse.js +++ b/test/parse.js @@ -244,6 +244,14 @@ const tests = { args: "color(display-p3 0% 100% 50%)", expect: '{"spaceId":"p3","coords":[0,1,0.5],"alpha":1}' }, + { + args: "color(display-p3-linear 0 1 .5)", + expect: '{"spaceId":"p3-linear","coords":[0,1,0.5],"alpha":1}' + }, + { + args: "color(--display-p3-linear 0% 100% 50%)", + expect: '{"spaceId":"p3-linear","coords":[0,1,0.5],"alpha":1}' + }, { args: "color(rec2020 0 1 .5)", expect: '{"spaceId":"rec2020","coords":[0,1,0.5],"alpha":1}' @@ -252,6 +260,22 @@ const tests = { args: "color(rec2020 0 100% 50%)", expect: '{"spaceId":"rec2020","coords":[0,1,0.5],"alpha":1}' }, + { + args: "color(rec2020-linear 0 1 .5)", + expect: '{"spaceId":"rec2020-linear","coords":[0,1,0.5],"alpha":1}' + }, + { + args: "color(--rec2020-linear 0 100% 50%)", + expect: '{"spaceId":"rec2020-linear","coords":[0,1,0.5],"alpha":1}' + }, + { + args: "color(--rec2100-hlg 0 100% 50%)", + expect: '{"spaceId":"rec2100hlg","coords":[0,1,0.5],"alpha":1}' + }, + { + args: "color(--rec2100-pq 0 100% 50%)", + expect: '{"spaceId":"rec2100pq","coords":[0,1,0.5],"alpha":1}' + }, { args: "color(a98-rgb 0 1 .5)", expect: '{"spaceId":"a98rgb","coords":[0,1,0.5],"alpha":1}' @@ -260,6 +284,14 @@ const tests = { args: "color(a98-rgb 0 100% 50%)", expect: '{"spaceId":"a98rgb","coords":[0,1,0.5],"alpha":1}' }, + { + args: "color(a98-rgb-linear 0 1 .5)", + expect: '{"spaceId":"a98rgb-linear","coords":[0,1,0.5],"alpha":1}' + }, + { + args: "color(--a98-rgb-linear 0 100% 50%)", + expect: '{"spaceId":"a98rgb-linear","coords":[0,1,0.5],"alpha":1}' + }, { args: "color(prophoto-rgb 0 1 .5)", expect: '{"spaceId":"prophoto","coords":[0,1,0.5],"alpha":1}' @@ -268,12 +300,20 @@ const tests = { args: "color(prophoto-rgb 0 100% 50%)", expect: '{"spaceId":"prophoto","coords":[0,1,0.5],"alpha":1}' }, + { + args: "color(prophoto-rgb-linear 0 1 .5)", + expect: '{"spaceId":"prophoto-linear","coords":[0,1,0.5],"alpha":1}' + }, + { + args: "color(--prophoto-rgb-linear 0 100% 50%)", + expect: '{"spaceId":"prophoto-linear","coords":[0,1,0.5],"alpha":1}' + }, { args: "color(acescc 0 1 .5)", expect: '{"spaceId":"acescc","coords":[0,1,0.5],"alpha":1}' }, { - args: "color(acescc 0 100% 50%)", + args: "color(--acescc 0 100% 50%)", expect: '{"spaceId":"acescc","coords":[0,1,0.5],"alpha":1}' }, { @@ -281,7 +321,7 @@ const tests = { expect: '{"spaceId":"acescg","coords":[0,1,0.5],"alpha":1}' }, { - args: "color(acescg 0 100% 50%)", + args: "color(--acescg 0 100% 50%)", expect: '{"spaceId":"acescg","coords":[0,1,0.5],"alpha":1}' }, { @@ -308,6 +348,10 @@ const tests = { args: "color(xyz-d50 0 100% 50%)", expect: '{"spaceId":"xyz-d50","coords":[0,1,0.5],"alpha":1}' }, + { + args: "color(--xyz-abs-d65 0 100% 50%)", + expect: '{"spaceId":"xyz-abs-d65","coords":[0,1,0.5],"alpha":1}' + }, { args: "color(jzazbz 0 25% -50%)", expect: '{"spaceId":"jzazbz","coords":[0,0.125,-0.25],"alpha":1}' @@ -316,6 +360,14 @@ const tests = { args: "color(--jzazbz 0 25% -50%)", expect: '{"spaceId":"jzazbz","coords":[0,0.125,-0.25],"alpha":1}' }, + { + args: "color(jzczhz 0 0.5 75%)", + expect: '{"spaceId":"jzczhz","coords":[0,0.5,0.75],"alpha":1}' + }, + { + args: "color(--jzczhz 0 0.5 75%)", + expect: '{"spaceId":"jzczhz","coords":[0,0.5,0.75],"alpha":1}' + }, { args: "color(--hct 0.25turn 50% 25)", expect: '{"spaceId":"hct","coords":[90,72.5,25],"alpha":1}' @@ -324,6 +376,30 @@ const tests = { args: "color(--hsv 25deg 50% 75)", expect: '{"spaceId":"hsv","coords":[25,50,75],"alpha":1}' }, + { + args: "color(--cam16-jmh 25 50 75)", + expect: '{"spaceId":"cam16-jmh","coords":[25,50,75],"alpha":1}' + }, + { + args: "color(--hpluv 25deg 50% 75)", + expect: '{"spaceId":"hpluv","coords":[25,50,75],"alpha":1}' + }, + { + args: "color(--hsluv 25deg 50% 75)", + expect: '{"spaceId":"hsluv","coords":[25,50,75],"alpha":1}' + }, + { + args: "color(--ictcp 0.5 0 0.25)", + expect: '{"spaceId":"ictcp","coords":[0.5,0,0.25],"alpha":1}' + }, + { + args: "color(--lchuv 50% 0 25deg)", + expect: '{"spaceId":"lchuv","coords":[50,0,25],"alpha":1}' + }, + { + args: "color(--luv 50% 1 -1)", + expect: '{"spaceId":"luv","coords":[50,1,-1],"alpha":1}' + }, { name: "With transparency", args: "color(display-p3 0 1 0 / .5)", From 4921123e3ca1d292f4a8a5d71c54a887dd0f4d6b Mon Sep 17 00:00:00 2001 From: Jonny Gerig Meyer Date: Wed, 14 Feb 2024 15:01:06 -0500 Subject: [PATCH 02/10] Warn when using incorrect dashed-ident/ident --- src/parse.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/parse.js b/src/parse.js index 1c0573107..9022d0e9a 100644 --- a/src/parse.js +++ b/src/parse.js @@ -103,6 +103,13 @@ export default function parse (str, {meta} = {}) { Object.assign(meta, {formatId: "color", types}); } + if (colorSpec.id.startsWith("--") && !id.startsWith("--")) { + console.warn(`color(${id}) used instead of prefixed color(${colorSpec.id}).`); + } + if (id.startsWith("--") && !colorSpec.id.startsWith("--")) { + console.warn(`color(${id}) used instead of unprefixed color(${colorSpec.id}).`); + } + return {spaceId: space.id, coords, alpha}; } } From 01d9953200b2b48d50e7ec4d08fce5cdc3da5c6a Mon Sep 17 00:00:00 2001 From: Jonny Gerig Meyer Date: Wed, 14 Feb 2024 15:16:06 -0500 Subject: [PATCH 03/10] refactor --- src/space.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/space.js b/src/space.js index 24497577a..6d9f0dfd6 100644 --- a/src/space.js +++ b/src/space.js @@ -45,12 +45,11 @@ export default class ColorSpace { format.name ||= name; } - if (options.cssId && !this.formats.color) { - this.formats.color = { id: options.cssId }; - Object.defineProperty(this, "cssId", {value: options.cssId}); - } - else if (!this.formats.color?.id) { - this.formats.color = { ...this.formats.color ?? {}, id: this.id }; + if (!this.formats.color?.id) { + this.formats.color = { + ...this.formats.color ?? {}, + id: options.cssId || this.id + }; } // Gamut space From 43f01f82c0ce7120c3f5f251477753a30edbbaf6 Mon Sep 17 00:00:00 2001 From: Jonny Gerig Meyer Date: Thu, 15 Feb 2024 11:45:22 -0500 Subject: [PATCH 04/10] Update warnings --- src/parse.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/parse.js b/src/parse.js index 9022d0e9a..fc081078a 100644 --- a/src/parse.js +++ b/src/parse.js @@ -104,10 +104,10 @@ export default function parse (str, {meta} = {}) { } if (colorSpec.id.startsWith("--") && !id.startsWith("--")) { - console.warn(`color(${id}) used instead of prefixed color(${colorSpec.id}).`); + console.warn(`Use prefixed color(${colorSpec.id}) instead of color(${id}).`); } if (id.startsWith("--") && !colorSpec.id.startsWith("--")) { - console.warn(`color(${id}) used instead of unprefixed color(${colorSpec.id}).`); + console.warn(`Use color(${colorSpec.id}) instead of prefixed color(${id}).`); } return {spaceId: space.id, coords, alpha}; From b1cf95a4a68dd7c54f0a6e62609318be780e9d92 Mon Sep 17 00:00:00 2001 From: Jonny Gerig Meyer Date: Fri, 16 Feb 2024 11:47:28 -0500 Subject: [PATCH 05/10] Add trailing commas and make warning more descriptive. --- src/parse.js | 6 ++++-- src/spaces/a98rgb.js | 2 +- src/spaces/acescc.js | 2 +- src/spaces/acescg.js | 2 +- src/spaces/cam16.js | 2 +- src/spaces/ictcp.js | 2 +- src/spaces/jzczhz.js | 2 +- src/spaces/p3.js | 2 +- src/spaces/prophoto.js | 2 +- src/spaces/rec2020-linear.js | 2 +- src/spaces/rec2020.js | 2 +- src/spaces/rec2100-hlg.js | 2 +- src/spaces/rec2100-pq.js | 2 +- src/spaces/srgb-linear.js | 2 +- src/spaces/xyz-d50.js | 2 +- 15 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/parse.js b/src/parse.js index fc081078a..094b019fd 100644 --- a/src/parse.js +++ b/src/parse.js @@ -104,10 +104,12 @@ export default function parse (str, {meta} = {}) { } if (colorSpec.id.startsWith("--") && !id.startsWith("--")) { - console.warn(`Use prefixed color(${colorSpec.id}) instead of color(${id}).`); + console.warn(`${space.name} is a non-standard space and not currently supported in the CSS spec. ` + + `Use prefixed color(${colorSpec.id}) instead of color(${id}).`); } if (id.startsWith("--") && !colorSpec.id.startsWith("--")) { - console.warn(`Use color(${colorSpec.id}) instead of prefixed color(${id}).`); + console.warn(`${space.name} is a standard space and supported in the CSS spec. ` + + `Use color(${colorSpec.id}) instead of prefixed color(${id}).`); } return {spaceId: space.id, coords, alpha}; diff --git a/src/spaces/a98rgb.js b/src/spaces/a98rgb.js index bb3be180d..bda57d6c9 100644 --- a/src/spaces/a98rgb.js +++ b/src/spaces/a98rgb.js @@ -7,5 +7,5 @@ export default new RGBColorSpace({ name: "Adobe® 98 RGB compatible", base: A98Linear, toBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 563 / 256) * Math.sign(val)), - fromBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 256 / 563) * Math.sign(val)) + fromBase: RGB => RGB.map(val => Math.pow(Math.abs(val), 256 / 563) * Math.sign(val)), }); diff --git a/src/spaces/acescc.js b/src/spaces/acescc.js index e9cff0281..9b3a519c7 100644 --- a/src/spaces/acescc.js +++ b/src/spaces/acescc.js @@ -70,7 +70,7 @@ export default new RGBColorSpace({ return (Math.log2(val) + 9.72) / 17.52; } }); - } + }, // encoded media white (rgb 1,1,1) => linear [ 222.861, 222.861, 222.861 ] // encoded media black (rgb 0,0,0) => linear [ 0.0011857, 0.0011857, 0.0011857] }); diff --git a/src/spaces/acescg.js b/src/spaces/acescg.js index 4c84af8dd..91f162ede 100644 --- a/src/spaces/acescg.js +++ b/src/spaces/acescg.js @@ -48,7 +48,7 @@ export default new RGBColorSpace({ white: WHITES.ACES, toXYZ_M, - fromXYZ_M + fromXYZ_M, }); // export default Color; diff --git a/src/spaces/cam16.js b/src/spaces/cam16.js index 723d5a06e..5161cc816 100644 --- a/src/spaces/cam16.js +++ b/src/spaces/cam16.js @@ -358,5 +358,5 @@ export default new ColorSpace({ {J: cam16[0], M: cam16[1], h: cam16[2]}, viewingConditions ); - } + }, }); diff --git a/src/spaces/ictcp.js b/src/spaces/ictcp.js index f49472b8b..b3c612608 100644 --- a/src/spaces/ictcp.js +++ b/src/spaces/ictcp.js @@ -103,7 +103,7 @@ export default new ColorSpace({ let LMS = ICtCptoLMS(ICtCp); return multiplyMatrices(LMStoXYZ_M, LMS); - } + }, }); function LMStoICtCp (LMS) { diff --git a/src/spaces/jzczhz.js b/src/spaces/jzczhz.js index 85c439087..254dbc6b3 100644 --- a/src/spaces/jzczhz.js +++ b/src/spaces/jzczhz.js @@ -50,5 +50,5 @@ export default new ColorSpace({ jzczhz[1] * Math.cos(jzczhz[2] * Math.PI / 180), // az jzczhz[1] * Math.sin(jzczhz[2] * Math.PI / 180) // bz ]; - } + }, }); diff --git a/src/spaces/p3.js b/src/spaces/p3.js index d664b7ff4..d7e293105 100644 --- a/src/spaces/p3.js +++ b/src/spaces/p3.js @@ -9,5 +9,5 @@ export default new RGBColorSpace({ base: P3Linear, // Gamma encoding/decoding is the same as sRGB fromBase: sRGB.fromBase, - toBase: sRGB.toBase + toBase: sRGB.toBase, }); diff --git a/src/spaces/prophoto.js b/src/spaces/prophoto.js index 2ccd36bd3..a4123ef4f 100644 --- a/src/spaces/prophoto.js +++ b/src/spaces/prophoto.js @@ -15,5 +15,5 @@ export default new RGBColorSpace({ }, fromBase (RGB) { return RGB.map(v => v >= Et ? v ** (1 / 1.8) : 16 * v); - } + }, }); diff --git a/src/spaces/rec2020-linear.js b/src/spaces/rec2020-linear.js index 9a83fd372..ca7a0d5e1 100644 --- a/src/spaces/rec2020-linear.js +++ b/src/spaces/rec2020-linear.js @@ -23,5 +23,5 @@ export default new RGBColorSpace({ name: "Linear REC.2020", white: "D65", toXYZ_M, - fromXYZ_M + fromXYZ_M, }); diff --git a/src/spaces/rec2020.js b/src/spaces/rec2020.js index 48951e42d..b7a3e30f3 100644 --- a/src/spaces/rec2020.js +++ b/src/spaces/rec2020.js @@ -27,5 +27,5 @@ export default new RGBColorSpace({ return 4.5 * val; }); - } + }, }); diff --git a/src/spaces/rec2100-hlg.js b/src/spaces/rec2100-hlg.js index 4f015f0c5..1d702336f 100644 --- a/src/spaces/rec2100-hlg.js +++ b/src/spaces/rec2100-hlg.js @@ -45,5 +45,5 @@ export default new RGBColorSpace({ } return a * Math.log(12 * val - b) + c; }); - } + }, }); diff --git a/src/spaces/rec2100-pq.js b/src/spaces/rec2100-pq.js index 76e8a809d..ef87d794b 100644 --- a/src/spaces/rec2100-pq.js +++ b/src/spaces/rec2100-pq.js @@ -33,5 +33,5 @@ export default new RGBColorSpace({ return ((num / denom) ** m); }); - } + }, }); diff --git a/src/spaces/srgb-linear.js b/src/spaces/srgb-linear.js index 5616ea075..e8aeb6fb4 100644 --- a/src/spaces/srgb-linear.js +++ b/src/spaces/srgb-linear.js @@ -26,5 +26,5 @@ export default new RGBColorSpace({ name: "Linear sRGB", white: "D65", toXYZ_M, - fromXYZ_M + fromXYZ_M, }); diff --git a/src/spaces/xyz-d50.js b/src/spaces/xyz-d50.js index 94c9fdef5..252ac2e1b 100644 --- a/src/spaces/xyz-d50.js +++ b/src/spaces/xyz-d50.js @@ -8,5 +8,5 @@ export default new ColorSpace({ white: "D50", base: XYZ_D65, fromBase: coords => adapt(XYZ_D65.white, "D50", coords), - toBase: coords => adapt("D50", XYZ_D65.white, coords) + toBase: coords => adapt("D50", XYZ_D65.white, coords), }); From 56fa6d4a6f030d0b7176d4568030d489c3e688ff Mon Sep 17 00:00:00 2001 From: Jonny Gerig Meyer Date: Fri, 16 Feb 2024 12:11:43 -0500 Subject: [PATCH 06/10] Skip warnings in test contexts --- package.json | 2 +- src/parse.js | 16 +++++++++------- tests/adapt.html | 3 +++ tests/angles.html | 4 ++++ tests/construct.html | 4 ++++ tests/contrast.html | 4 ++++ tests/conversions.html | 4 ++++ tests/delta.html | 4 ++++ tests/gamut.html | 4 ++++ tests/hooks.html | 3 +++ tests/index.html | 4 ++++ tests/modifications.html | 4 ++++ tests/multiply-matrices.html | 4 ++++ tests/parse.html | 4 ++-- 14 files changed, 54 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index df75366c0..8dd4c04b1 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "test": "tests" }, "scripts": { - "test": "npx htest ./test", + "test": "NODE_ENV=test npx htest ./test", "dtslint": "dtslint --expectOnly types", "eslint": "eslint . --ext .js --ext .ts --ext .cjs", "lint": "run-s build:space-accessors \"eslint -- --fix\" dtslint", diff --git a/src/parse.js b/src/parse.js index 094b019fd..a576969d3 100644 --- a/src/parse.js +++ b/src/parse.js @@ -103,13 +103,15 @@ export default function parse (str, {meta} = {}) { Object.assign(meta, {formatId: "color", types}); } - if (colorSpec.id.startsWith("--") && !id.startsWith("--")) { - console.warn(`${space.name} is a non-standard space and not currently supported in the CSS spec. ` + - `Use prefixed color(${colorSpec.id}) instead of color(${id}).`); - } - if (id.startsWith("--") && !colorSpec.id.startsWith("--")) { - console.warn(`${space.name} is a standard space and supported in the CSS spec. ` + - `Use color(${colorSpec.id}) instead of prefixed color(${id}).`); + if (globalThis?.process?.env?.NODE_ENV?.toLocaleLowerCase() !== "test") { + if (colorSpec.id.startsWith("--") && !id.startsWith("--")) { + console.warn(`${space.name} is a non-standard space and not currently supported in the CSS spec. ` + + `Use prefixed color(${colorSpec.id}) instead of color(${id}).`); + } + if (id.startsWith("--") && !colorSpec.id.startsWith("--")) { + console.warn(`${space.name} is a standard space and supported in the CSS spec. ` + + `Use color(${colorSpec.id}) instead of prefixed color(${id}).`); + } } return {spaceId: space.id, coords, alpha}; diff --git a/tests/adapt.html b/tests/adapt.html index b2da51999..439ec9eca 100644 --- a/tests/adapt.html +++ b/tests/adapt.html @@ -9,6 +9,9 @@ + diff --git a/tests/angles.html b/tests/angles.html index 4ce4a31e6..6e1c014ab 100644 --- a/tests/angles.html +++ b/tests/angles.html @@ -8,6 +8,10 @@ + + diff --git a/tests/construct.html b/tests/construct.html index 986b05d8c..a8673ad44 100644 --- a/tests/construct.html +++ b/tests/construct.html @@ -8,6 +8,10 @@ + + diff --git a/tests/contrast.html b/tests/contrast.html index 29ef83e6e..0908c8053 100644 --- a/tests/contrast.html +++ b/tests/contrast.html @@ -9,6 +9,10 @@ + + + + + + diff --git a/tests/gamut.html b/tests/gamut.html index 39c56ba0a..2ae05a669 100644 --- a/tests/gamut.html +++ b/tests/gamut.html @@ -9,6 +9,10 @@ + + + + + diff --git a/tests/modifications.html b/tests/modifications.html index ecac9a6a0..31cfa561e 100644 --- a/tests/modifications.html +++ b/tests/modifications.html @@ -9,6 +9,10 @@ + + + +