UNPKG

@tsparticles/plugin-hsl-color

Version:

tsParticles HSL color plugin

47 lines (46 loc) 1.79 kB
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; } }