Skip to content

Commit

Permalink
[types] Remove module augmentation (#566)
Browse files Browse the repository at this point in the history
Removes the module augmentation from `index.d.ts`, instead putting the
relevant properties directly into `color.d.ts`.
  • Loading branch information
MysteryBlokHed committed Jun 26, 2024
1 parent a59ba36 commit c3dce07
Show file tree
Hide file tree
Showing 2 changed files with 127 additions and 126 deletions.
123 changes: 123 additions & 0 deletions types/src/color.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,29 @@ import {
display,
} from "./index-fn.js";

import { uv, xy } from "./chromaticity.js";
import contrast from "./contrast.js";
import {
contrastWCAG21,
contrastAPCA,
contrastMichelson,
contrastWeber,
contrastLstar,
contrastDeltaPhi,
} from "./contrast/index.js";
import deltaE from "./deltaE.js";
import deltaEMethods, {
deltaE76,
deltaECMC,
deltaE2000,
deltaEJz,
deltaEITP,
deltaEOK,
} from "./deltaE/index.js";
import { range, Range, MixOptions, StepsOptions } from "./interpolation.js";
import { getLuminance } from "./luminance.js";
import { lighten, darken } from "./variations.js";

export type { SpaceAccessor } from "./space-coord-accessors.js";

export type Coords = [number, number, number];
Expand Down Expand Up @@ -155,6 +178,106 @@ declare class Color extends SpaceAccessors implements PlainColorObject {
// These should always match the signature of the original function
set (prop: Ref, value: number | ((coord: number) => number)): Color;
set (props: Record<string, number | ((coord: number) => number)>): Color;

/*
* ==========================================
* Types for properties defined in `index.js`
* ==========================================
*/
// chromaticity
uv: ToColorPrototype<typeof uv>;
xy: ToColorPrototype<typeof xy>;

// contrast
contrast: ToColorPrototype<typeof contrast>;
static contrast: typeof contrast;

// contrastMethods
contrastWCAG21: ToColorPrototype<typeof contrastWCAG21>;
contrastAPCA: ToColorPrototype<typeof contrastAPCA>;
contrastMichelson: ToColorPrototype<typeof contrastMichelson>;
contrastWeber: ToColorPrototype<typeof contrastWeber>;
contrastLstar: ToColorPrototype<typeof contrastLstar>;
contrastDeltaPhi: ToColorPrototype<typeof contrastDeltaPhi>;

static contrastWCAG21: typeof contrastWCAG21;
static contrastAPCA: typeof contrastAPCA;
static contrastMichelson: typeof contrastMichelson;
static contrastWeber: typeof contrastWeber;
static contrastLstar: typeof contrastLstar;
static contrastDeltaPhi: typeof contrastDeltaPhi;

// deltaE
deltaE: ToColorPrototype<typeof deltaE>;
deltaE76: ToColorPrototype<typeof deltaE76>;
deltaECMC: ToColorPrototype<typeof deltaECMC>;
deltaE2000: ToColorPrototype<typeof deltaE2000>;
deltaEJz: ToColorPrototype<typeof deltaEJz>;
deltaEITP: ToColorPrototype<typeof deltaEITP>;
deltaEOK: ToColorPrototype<typeof deltaEOK>;

static deltaE: typeof deltaE;
static deltaE76: typeof deltaE76;
static deltaECMC: typeof deltaECMC;
static deltaE2000: typeof deltaE2000;
static deltaEJz: typeof deltaEJz;
static deltaEITP: typeof deltaEITP;
static deltaEOK: typeof deltaEOK;
static deltaEMethods: typeof deltaEMethods;

// interpolation
// These signatures should always match those in interpolation.d.ts,
// including the static versions
/** Create color mixtures in any desired proportion between two colors */
mix (color2: ColorTypes, options?: MixOptions): Color;
mix (color2: ColorTypes, p: number, options?: MixOptions): Color;
/**
* Creates a function that accepts a number and returns a color.
* For numbers in the range 0 to 1, the function interpolates;
* for numbers outside that range, the function extrapolates
* (and thus may not return the results you expect)
*/
range: ToColorPrototype<typeof range>;
/** Get an array of discrete steps */
steps (color2: ColorTypes, options?: StepsOptions): Color[];

/** Create color mixtures in any desired proportion between two colors */
static mix (
color1: ColorTypes,
color2: ColorTypes,
options?: MixOptions
): Color;
static mix (
color1: ColorTypes,
color2: ColorTypes,
p: number,
options?: MixOptions
): Color;
/**
* Creates a function that accepts a number and returns a color.
* For numbers in the range 0 to 1, the function interpolates;
* for numbers outside that range, the function extrapolates
* (and thus may not return the results you expect)
*/
static range: typeof range;
/** Get an array of discrete steps */
static steps (
color1: ColorTypes,
color2: ColorTypes,
options?: StepsOptions
): Color[];
static steps (range: Range, options?: StepsOptions): Color[];

// luminance
get luminance (): ReturnType<typeof getLuminance>;
// the definition for this set in the orignial code like it doesn't actually use the parameter?
set luminance (_: number);

// variations
lighten: ToColorPrototype<typeof lighten>;
darken: ToColorPrototype<typeof darken>;
static lighten: typeof lighten;
static darken: typeof darken;
}

export default Color;
130 changes: 4 additions & 126 deletions types/src/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,127 +1,5 @@
import { uv, xy } from "./chromaticity.js";
import BaseColor, { ColorTypes, ToColorPrototype } from "./color.js";
import contrast from "./contrast.js";
import {
contrastWCAG21,
contrastAPCA,
contrastMichelson,
contrastWeber,
contrastLstar,
contrastDeltaPhi,
} from "./contrast/index.js";
import deltaE from "./deltaE.js";
import deltaEMethods, {
deltaE76,
deltaECMC,
deltaE2000,
deltaEJz,
deltaEITP,
deltaEOK,
} from "./deltaE/index.js";
import { range, Range, MixOptions, StepsOptions } from "./interpolation.js";
import { getLuminance } from "./luminance.js";
import { lighten, darken } from "./variations.js";

// Augment existing Color object
declare module "./color" {
// https://github.com/color-js/color.js/issues/560
// Seems to cause problems if the original class is not expicitly extended?
export default class Color extends BaseColor {
// chromaticity
uv: ToColorPrototype<typeof uv>;
xy: ToColorPrototype<typeof xy>;

// contrast
contrast: ToColorPrototype<typeof contrast>;
static contrast: typeof contrast;

// contrastMethods
contrastWCAG21: ToColorPrototype<typeof contrastWCAG21>;
contrastAPCA: ToColorPrototype<typeof contrastAPCA>;
contrastMichelson: ToColorPrototype<typeof contrastMichelson>;
contrastWeber: ToColorPrototype<typeof contrastWeber>;
contrastLstar: ToColorPrototype<typeof contrastLstar>;
contrastDeltaPhi: ToColorPrototype<typeof contrastDeltaPhi>;

static contrastWCAG21: typeof contrastWCAG21;
static contrastAPCA: typeof contrastAPCA;
static contrastMichelson: typeof contrastMichelson;
static contrastWeber: typeof contrastWeber;
static contrastLstar: typeof contrastLstar;
static contrastDeltaPhi: typeof contrastDeltaPhi;

// deltaE
deltaE: ToColorPrototype<typeof deltaE>;
deltaE76: ToColorPrototype<typeof deltaE76>;
deltaECMC: ToColorPrototype<typeof deltaECMC>;
deltaE2000: ToColorPrototype<typeof deltaE2000>;
deltaEJz: ToColorPrototype<typeof deltaEJz>;
deltaEITP: ToColorPrototype<typeof deltaEITP>;
deltaEOK: ToColorPrototype<typeof deltaEOK>;

static deltaE: typeof deltaE;
static deltaE76: typeof deltaE76;
static deltaECMC: typeof deltaECMC;
static deltaE2000: typeof deltaE2000;
static deltaEJz: typeof deltaEJz;
static deltaEITP: typeof deltaEITP;
static deltaEOK: typeof deltaEOK;
static deltaEMethods: typeof deltaEMethods;

// interpolation
// These signatures should always match those in interpolation.d.ts,
// including the static versions
/** Create color mixtures in any desired proportion between two colors */
mix (color2: ColorTypes, options?: MixOptions): this;
mix (color2: ColorTypes, p: number, options?: MixOptions): this;
/**
* Creates a function that accepts a number and returns a color.
* For numbers in the range 0 to 1, the function interpolates;
* for numbers outside that range, the function extrapolates
* (and thus may not return the results you expect)
*/
range: ToColorPrototype<typeof range>;
/** Get an array of discrete steps */
steps (color2: ColorTypes, options?: StepsOptions): this[];

/** Create color mixtures in any desired proportion between two colors */
static mix (
color1: ColorTypes,
color2: ColorTypes,
options?: MixOptions
): BaseColor;
static mix (
color1: ColorTypes,
color2: ColorTypes,
p: number,
options?: MixOptions
): BaseColor;
/**
* Creates a function that accepts a number and returns a color.
* For numbers in the range 0 to 1, the function interpolates;
* for numbers outside that range, the function extrapolates
* (and thus may not return the results you expect)
*/
static range: typeof range;
/** Get an array of discrete steps */
static steps (
color1: ColorTypes,
color2: ColorTypes,
options?: StepsOptions
): BaseColor[];
static steps (range: Range, options?: StepsOptions): BaseColor[];

// luminance
get luminance (): ReturnType<typeof getLuminance>;
// the definition for this set in the orignial code like it doesn't actually use the parameter?
set luminance (_: number);

// variations
lighten: ToColorPrototype<typeof lighten>;
darken: ToColorPrototype<typeof darken>;
static lighten: typeof lighten;
static darken: typeof darken;
}
}

export default BaseColor;
import Color from "./color.js";
// Module augmentation has instead been merged with the definition in `color.d.ts`.
// If any new properties are added to the JS source, place them in `color.d.ts`
export default Color;

0 comments on commit c3dce07

Please sign in to comment.