37 lines
787 B
JavaScript
37 lines
787 B
JavaScript
import { getMode } from './modes.js';
|
|
|
|
/*
|
|
Generate a random number between `min` and `max`
|
|
*/
|
|
const rand = ([min, max]) => min + Math.random() * (max - min);
|
|
|
|
/*
|
|
Convert a constraints object to intervals.
|
|
*/
|
|
const to_intervals = constraints =>
|
|
Object.keys(constraints).reduce((o, k) => {
|
|
let v = constraints[k];
|
|
o[k] = Array.isArray(v) ? v : [v, v];
|
|
return o;
|
|
}, {});
|
|
|
|
/*
|
|
Generate a random color.
|
|
*/
|
|
const random = (mode = 'rgb', constraints = {}) => {
|
|
let def = getMode(mode);
|
|
let limits = to_intervals(constraints);
|
|
return def.channels.reduce(
|
|
(res, ch) => {
|
|
// ignore alpha if not present in constraints
|
|
if (limits.alpha || ch !== 'alpha') {
|
|
res[ch] = rand(limits[ch] || def.ranges[ch]);
|
|
}
|
|
return res;
|
|
},
|
|
{ mode }
|
|
);
|
|
};
|
|
|
|
export default random;
|