-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathindex.js
93 lines (83 loc) · 2.56 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/**
* Color space data and conversions
*
* @module color-space
*
*/
import rgb from './rgb.js'
import hsl from './hsl.js'
import hsv from './hsv.js'
import hsi from './hsi.js'
import hwb from './hwb.js'
import cmyk from './cmyk.js'
import cmy from './cmy.js'
import xyz from './xyz.js'
import xyy from './xyy.js'
import yiq from './yiq.js'
import yuv from './yuv.js'
import ydbdr from './ydbdr.js'
import ycgco from './ycgco.js'
import ypbpr from './ypbpr.js'
import ycbcr from './ycbcr.js'
import xvycc from './xvycc.js'
import yccbccrc from './yccbccrc.js'
import ucs from './ucs.js'
import uvw from './uvw.js'
import jpeg from './jpeg.js'
import lab from './lab.js'
import labh from './labh.js'
import lms from './lms.js'
import lchab from './lchab.js'
import luv from './luv.js'
import lchuv from './lchuv.js'
import hsluv from './hsluv.js'
import hpluv from './hpluv.js'
import cubehelix from './cubehelix.js'
import coloroid from './coloroid.js'
import hcg from './hcg.js'
import hcy from './hcy.js'
import tsl from './tsl.js'
import yes from './yes.js'
import osaucs from './osaucs.js'
import hsp from './hsp.js'
/**
* Dict with all color spaces
*
* @type {{[key in SpaceId]: ColorSpace}}
*/
const spaces = {};
export default spaces;
/**
* Register new color space and conversions with all existing spaces
*
* @param {ColorSpace} newSpace
*/
export function register (newSpace) {
const newSpaceName = newSpace.name;
for (const existingSpaceName in spaces) {
if (!newSpace[existingSpaceName]) newSpace[existingSpaceName] = createConverter(newSpace, existingSpaceName);
const existingSpace = spaces[existingSpaceName]
if (!existingSpace[newSpaceName]) existingSpace[newSpaceName] = createConverter(existingSpace, newSpaceName);
}
spaces[newSpaceName] = newSpace
}
/**
* Creates a color space converter function.
*
* @param {ColorSpace} fromSpace
* @param {SpaceId} toSpaceName
* @returns {Transform}
*/
function createConverter (fromSpace, toSpaceName) {
//create xyz converter, if available
if (fromSpace.xyz && spaces.xyz[toSpaceName])
return (arg) => spaces.xyz[toSpaceName](fromSpace.xyz(arg));
//create rgb converter
if (fromSpace.rgb && spaces.rgb[toSpaceName])
return (arg) => spaces.rgb[toSpaceName](fromSpace.rgb(arg));
return () => {
throw new Error('Conversion not available');
}
}
// register all spaces by default
[rgb, xyz, hsl, hsv, hsi, hwb, cmyk, cmy, xyy, yiq, yuv, ydbdr, ycgco, ypbpr, ycbcr, xvycc, yccbccrc, ucs, uvw, jpeg, lab, labh, lms, lchab, luv, lchuv, hsluv, hpluv, cubehelix, coloroid, hcg, hcy, tsl, yes, osaucs, hsp].map(register)