1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const tslib_1 = require("tslib");
|
4 | const hsluv_1 = require("hsluv");
|
5 | const base_1 = require("./configs/base");
|
6 | function colorFactory(theme, scheme, config = base_1.config) {
|
7 | return Object.assign({}, ...Object.entries(theme).map(([role, hex]) => {
|
8 | if (typeof hex !== 'string') {
|
9 | return null;
|
10 | }
|
11 | const base = hsluv_1.hexToHsluv(hex);
|
12 | const variants = config[role] || [];
|
13 | return Object.assign({}, variants.reduce((accumulator, _a) => {
|
14 | var { name } = _a, settings = tslib_1.__rest(_a, ["name"]);
|
15 | const { hue = base[0], saturation = base[1], lightness = base[2], alpha = 1, } = settings[scheme];
|
16 | const resolve = (value, baseToResolve) => {
|
17 | return typeof value === 'number' ? value : value(baseToResolve);
|
18 | };
|
19 | const [red, green, blue] = hsluv_1.hsluvToRgb([
|
20 | resolve(hue, base[0]),
|
21 | resolve(saturation, base[1]),
|
22 | resolve(lightness, base[2]),
|
23 | ]).map((channel) => Math.round(channel * 255));
|
24 | return Object.assign(Object.assign({}, accumulator), { [name]: `rgba(${red}, ${green}, ${blue}, ${alpha})` });
|
25 | }, {}));
|
26 | }));
|
27 | }
|
28 | exports.colorFactory = colorFactory;
|