type ColorSpace = "rgb" | "hsl" | "hsv" | "hwb" | "cmyk" | "xyz" | "lab" | "lch" | "hex" | "keyword"; type Format = "object" | "array" | "string" | "css"; type FormatResult = { [key in Format]: key extends "object" ? ColorObject : key extends "array" ? ColorArray : key extends "string" ? ColorString : key extends "css" ? ColorCSS : never; }; type ColorObject = T extends "rgb" ? ColorRGB : never; type ColorArray = T extends "rgb" ? TColorRGB : never; type ColorString = T extends "rgb" ? StringColorRGB : never; type ColorCSS = T extends "rgb" ? CssColorRGB : never; type RGB_R = number; type RGB_G = number; type RGB_B = number; type Alpha = number; type TColorRGB = [RGB_R, RGB_G, RGB_B, Alpha]; type ColorRGB = { r: RGB_R; g: RGB_G; b: RGB_B; a: Alpha; }; type StringColorRGB = string; type CssColorRGB = string; declare const IS_MYCOLOR: unique symbol; declare const mycolor: { (...args: unknown[]): RGBColor; extend(plugin: ColorPluginFn, option?: T): void; }; type OptionalTupleLast = T extends [...infer U, infer L] ? [...U, L?] : never; type InputColor = CS extends "rgb" ? OptionalTupleLast : never; interface Option { cs?: ColorSpace; } interface Cfg { color: InputColor; args?: [...Cfg["color"], Option]; } declare abstract class Color { abstract [IS_MYCOLOR]: boolean; abstract parse(cfg: Cfg): void; abstract clone(): Color; abstract format(f: T): FormatResult[T]; } interface RGB = "rgb"> { /** @description Get rgba array by standard methods */ rgba(): TColorRGB; red(): RGB_R; red(r: RGB_R): Color; green(): RGB_G; green(g: RGB_G): Color; blue(): RGB_B; blue(b: RGB_B): Color; alpha(): Alpha; alpha(a: Alpha): Color; } declare class RGBColor = "rgb"> extends Color implements RGB { private r; private g; private b; private a; [IS_MYCOLOR]: boolean; constructor(cfg: Cfg); /** @internal */ parse(cfg: Cfg): void; clone(): RGBColor; rgba(): TColorRGB; red(): RGB_R; red(r: RGB_R): RGBColor; green(): RGB_G; green(g: RGB_G): RGBColor; blue(): RGB_B; blue(b: RGB_B): RGBColor; alpha(): Alpha; alpha(a: Alpha): RGBColor; } interface ColorPlugin { (option: T | undefined, mycolorClass: typeof RGBColor, mycolorFactory: typeof mycolor): void; } interface ColorPluginFn extends ColorPlugin { $i?: boolean; } type MyColorFn = typeof mycolor; export { type Cfg, type ColorPlugin, type InputColor, RGBColor as MyColor, type MyColorFn, mycolor as default, mycolor };