UNPKG

@compositive/foundation

Version:

Compositive framework foundation package.

61 lines (58 loc) 2.36 kB
import { __decorate } from 'tslib'; import { Memoized } from '@compositive/commons-memoize'; import { hexToHsluv, hsluvToHex } from 'hsluv'; import { linear } from '../easing/index.js'; import { Color } from './Color.js'; import { ColorScale } from './ColorScale.js'; import { Shade } from './Shade.js'; // FIXME: Support serializing the easing class UniformLightnessColorScale extends ColorScale { constructor(base, steps = 10, options = {}) { var _a, _b, _c; super(); this.steps = steps; this.baseColor = new Color(base); this.lightnessMin = (_a = options === null || options === void 0 ? void 0 : options.lightnessMin) !== null && _a !== void 0 ? _a : 1; this.lightnessMax = (_b = options === null || options === void 0 ? void 0 : options.lightnessMax) !== null && _b !== void 0 ? _b : 99; this.easing = (_c = options === null || options === void 0 ? void 0 : options.easing) !== null && _c !== void 0 ? _c : linear; } static async fromJson(json) { return new UniformLightnessColorScale(json.baseColor, json.steps, { lightnessMax: json.lightnessMax, lightnessMin: json.lightnessMin, }); } get length() { return this.steps; } get shades() { const [hue, saturation] = hexToHsluv(this.baseColor.hex); const step = 1 / (this.steps - 1); const lightnesses = []; for (let i = 0; i < this.steps; ++i) lightnesses[i] = this.lightnessMax + (this.lightnessMin - this.lightnessMax) * this.easing(i * step); return lightnesses.map((lightness, i) => new Shade(this, i, hsluvToHex([hue, saturation, lightness]))); } reversed() { return new UniformLightnessColorScale(this.baseColor, this.steps, { lightnessMax: this.lightnessMin, lightnessMin: this.lightnessMax, easing: this.easing, }); } async toJson() { return { baseColor: this.baseColor, lightnessMin: this.lightnessMin, lightnessMax: this.lightnessMax, steps: this.steps, }; } } __decorate([ Memoized() ], UniformLightnessColorScale.prototype, "shades", null); export { UniformLightnessColorScale }; //# sourceMappingURL=UniformLightnessColorScale.js.map