@spellix/magic-color
Version:
Magic color creator.
43 lines (38 loc) • 1.49 kB
text/typescript
/* eslint-disable -- allow for magic-color */
import type { Colors, ColorType, Opacity } from '@spellix/magic-color-core';
import { guessType, Magicolor, SupportTypes } from '@spellix/magic-color-core';
import { deltaE, getColorName, random, theme } from '@spellix/magic-color-theme';
import { calcAPCA, calcWCAG, getReadableTextColor, isWarmColor, reverseAPCA } from '../contrast';
import { hash } from './hash';
export interface MagicolorInstance {
<T extends ColorType>(value: Colors[T] | Record<string, number>, type?: T, alpha?: Opacity): Magicolor<T>;
<T extends ColorType = 'rgb'>(v1: number, v2: number, v3: number, type?: T, alpha?: Opacity): Magicolor<T>;
valid: typeof guessType;
random: typeof random;
hash: typeof hash;
theme: typeof theme;
wcag: typeof calcWCAG;
apca: typeof calcAPCA;
apcaReverse: typeof reverseAPCA;
readable: typeof getReadableTextColor;
warm: typeof isWarmColor;
supports: typeof SupportTypes;
deltaE: typeof deltaE;
nameOf: typeof getColorName;
}
export const mc: MagicolorInstance = <T extends ColorType>(...args: any[]): Magicolor<T> => {
// @ts-expect-error allow the type to be inferred
return new Magicolor(...args) as Magicolor<T>;
};
mc.valid = guessType;
mc.random = random;
mc.hash = hash;
mc.theme = theme;
mc.wcag = calcWCAG;
mc.apca = calcAPCA;
mc.apcaReverse = reverseAPCA;
mc.readable = getReadableTextColor;
mc.warm = isWarmColor;
mc.supports = SupportTypes;
mc.deltaE = deltaE;
mc.nameOf = getColorName;