From efcd44490c4091e5f7fcd2fc7f26c900a896e428 Mon Sep 17 00:00:00 2001 From: Adam Thompson-Sharpe Date: Tue, 11 Oct 2022 17:49:44 -0400 Subject: [PATCH] [types] Add types for space accessors --- types/src/color.d.ts | 35 +++++++++++++++++++++++++++++++++++ types/test/space-accessors.ts | 12 +++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/types/src/color.d.ts b/types/src/color.d.ts index 806f2c892..f64e552aa 100644 --- a/types/src/color.d.ts +++ b/types/src/color.d.ts @@ -59,6 +59,9 @@ export type ToColorPrototype any> = T extends ( ? (...args: A) => R : never; +/** Proxy used for space accessors */ +export type SpaceAccessor = Record & number[]; + declare namespace Color { export { getAll, @@ -131,6 +134,38 @@ declare class Color { toGamut: ToColorPrototype; distance: ToColorPrototype; toString: ToColorPrototype; + + // Space accessors + // A property should technically be added every time a new ColorSpace is initialized, + // but I don't know that there's any good way to do that with TypeScript + a98rgb: SpaceAccessor; + a98rgb_linear: SpaceAccessor; + acescc: SpaceAccessor; + acescg: SpaceAccessor; + hsl: SpaceAccessor; + hsv: SpaceAccessor; + hwb: SpaceAccessor; + ictcp: SpaceAccessor; + jzazbz: SpaceAccessor; + jzczhz: SpaceAccessor; + lab: SpaceAccessor; + lch: SpaceAccessor; + oklab: SpaceAccessor; + oklch: SpaceAccessor; + p3: SpaceAccessor; + p3_linear: SpaceAccessor; + prophoto: SpaceAccessor; + prophoto_linear: SpaceAccessor; + rec2020: SpaceAccessor; + rec2020_linear: SpaceAccessor; + rec2100hlg: SpaceAccessor; + rec2100pq: SpaceAccessor; + srgb: SpaceAccessor; + srgb_linear: SpaceAccessor; + xyz: SpaceAccessor; + xyz_abs_d65: SpaceAccessor; + xyz_d50: SpaceAccessor; + xyz_d65: SpaceAccessor; } export default Color; diff --git a/types/test/space-accessors.ts b/types/test/space-accessors.ts index e8b8f6d2b..8c5c4abbf 100644 --- a/types/test/space-accessors.ts +++ b/types/test/space-accessors.ts @@ -1,2 +1,12 @@ -// Doesn't export any values, so just check that it's a module +import Color from "colorjs.io/src/color"; +// The itself doesn't export any values, so just check that it's a module import "colorjs.io/src/space-accessors"; + +const color = new Color("red"); + +color.srgb[0] = 1; +color.srgb[1] = 1; +color.srgb[2] = 1; +color.srgb.r = 1; +color.srgb.g = 1; +color.srgb.b = 1;