@vimeo/iris
Version:
Vimeo Design System
59 lines (56 loc) • 2.06 kB
JavaScript
import { c as __assign } from '../../../tslib.es6-7f0e734f.js';
import { parseToHsl, rgb } from 'polished';
import { colorSpaces } from '../../../color/colorUtils.esm.js';
function reducer(state, _a) {
var type = _a.type, _b = _a.payload, payload = _b === void 0 ? null : _b;
switch (type) {
case 'TOGGLE':
return __assign(__assign({}, state), { open: !state.open });
case 'CLOSE':
return __assign(__assign({}, state), { open: false });
case 'SET_COLORSPACE':
return __assign(__assign({}, state), { colorSpace: payload });
case 'SET_ERROR':
return __assign(__assign({}, state), { error: payload });
case 'SET_EDITING':
return __assign(__assign({}, state), { editing: payload });
case 'SET_LAST':
return state;
case 'SET_HEX':
try {
var colorMeta = reduceColorMeta(payload);
return __assign(__assign({}, state), { colorMeta: colorMeta });
}
catch (_c) {
return state;
}
case 'SET_RGB':
try {
var colorMeta = reduceColorMeta(payload);
return __assign(__assign({}, state), { colorMeta: colorMeta });
}
catch (_d) {
return state;
}
case 'SET_HSL':
try {
var colorMeta = reduceColorMeta(payload);
return __assign(__assign({}, state), { colorMeta: colorMeta });
}
catch (_e) {
return state;
}
default:
throw new Error();
}
}
function reduceColorMeta(payload) {
if (typeof payload === 'string')
payload = parseToHsl(payload);
if (payload.red)
payload = parseToHsl(rgb(payload));
var _a = colorSpaces(payload), HSL = _a.HSL, HSV = _a.HSV, HEX = _a.HEX, RGB = _a.RGB;
var colorMeta = { HSL: HSL, HSV: HSV, HEX: HEX, RGB: RGB };
return colorMeta;
}
export { reducer };