@tsparticles/plugin-hsl-color
Version:
tsParticles HSL color plugin
47 lines (46 loc) • 1.79 kB
JavaScript
import { getRangeValue, hslToRgb, hslaToRgba, parseAlpha, } from "@tsparticles/engine";
var HslIndexes;
(function (HslIndexes) {
HslIndexes[HslIndexes["h"] = 1] = "h";
HslIndexes[HslIndexes["s"] = 2] = "s";
HslIndexes[HslIndexes["l"] = 3] = "l";
HslIndexes[HslIndexes["a"] = 5] = "a";
})(HslIndexes || (HslIndexes = {}));
const hslRegex = /hsla?\(\s*(\d+)\s*[\s,]\s*(\d+)%\s*[\s,]\s*(\d+)%\s*([\s,]\s*(0|1|0?\.\d+|(\d{1,3})%)\s*)?\)/i;
export class HslColorManager {
accepts(input) {
return input.startsWith("hsl");
}
handleColor(color) {
const colorValue = color.value, hslColor = colorValue.hsl ?? color.value;
if (!("h" in hslColor) || !("s" in hslColor) || !("l" in hslColor)) {
return;
}
return hslToRgb(hslColor);
}
handleRangeColor(color) {
const colorValue = color.value, hslColor = colorValue.hsl ?? color.value;
if (!("h" in hslColor) || !("s" in hslColor) || !("l" in hslColor)) {
return;
}
return hslToRgb({
h: getRangeValue(hslColor.h),
l: getRangeValue(hslColor.l),
s: getRangeValue(hslColor.s),
});
}
parseString(input) {
if (!this.accepts(input)) {
return;
}
const result = hslRegex.exec(input), minLength = 4, defaultAlpha = 1, radix = 10;
return result
? hslaToRgba({
a: result.length > minLength ? parseAlpha(result[HslIndexes.a]) : defaultAlpha,
h: Number.parseInt(result[HslIndexes.h] ?? "0", radix),
l: Number.parseInt(result[HslIndexes.l] ?? "0", radix),
s: Number.parseInt(result[HslIndexes.s] ?? "0", radix),
})
: undefined;
}
}