Color spaces! RGB, HSL, Cubehelix, Lab and HCL (Lch).
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
HSL (Hue, Saturation, Lightness) color space operations providing intuitive color adjustments based on human perception of color properties.
HSL color representation with intuitive channel access for hue-based manipulation.
class Hsl {
/** Hue angle in degrees (0-360, values outside range are valid) */
h: number;
/** Saturation level (0-1, values outside range are valid) */
s: number;
/** Lightness level (0-1, values outside range are valid) */
l: number;
/** Opacity/alpha channel (0-1) */
opacity: number;
constructor(h: number, s: number, l: number, opacity: number);
}Adjust color brightness by modifying the lightness channel directly.
/**
* Returns a brighter copy by increasing lightness
* @param k - Brightening factor, defaults to 1/0.7 ≈ 1.43
* @returns New HSL color instance
*/
brighter(k?: number): Hsl;
/**
* Returns a darker copy by decreasing lightness
* @param k - Darkening factor, defaults to 0.7
* @returns New HSL color instance
*/
darker(k?: number): Hsl;Usage Examples:
import { hsl } from "d3-color";
const blue = hsl(240, 1, 0.5); // Pure blue
// Brightness adjustments affect lightness channel
const lighterBlue = blue.brighter(); // Increases lightness
const darkerBlue = blue.darker(); // Decreases lightness
// Custom brightness factors
const veryBright = blue.brighter(2); // Much lighter
const subtle = blue.darker(0.9); // Slightly darker
console.log(blue.l); // 0.5 (original)
console.log(lighterBlue.l); // ~0.71 (brighter)
console.log(darkerBlue.l); // ~0.35 (darker)Convert HSL colors to RGB for rendering and display.
/**
* Converts HSL color to RGB color space
* @returns New RGB color instance
*/
rgb(): Rgb;Usage Examples:
import { hsl } from "d3-color";
const hslRed = hsl(0, 1, 0.5); // Pure red in HSL
const rgbRed = hslRed.rgb(); // Convert to RGB
console.log(rgbRed.r, rgbRed.g, rgbRed.b); // 255, 0, 0Validate and constrain HSL values to standard ranges.
/**
* Clamps HSL values to standard ranges
* @returns New HSL color with clamped values
*/
clamp(): Hsl;
/**
* Checks if color is displayable when converted to RGB
* @returns True if RGB equivalent is displayable
*/
displayable(): boolean;Clamping Behavior:
Usage Examples:
import { hsl } from "d3-color";
// Create HSL with out-of-range values
const invalidHsl = hsl(450, 1.5, -0.2, 2);
// Check displayability (checks RGB conversion)
console.log(invalidHsl.displayable()); // false
// Clamp to valid ranges
const validHsl = invalidHsl.clamp();
console.log(validHsl.h, validHsl.s, validHsl.l, validHsl.opacity);
// 90, 1, 0, 1 (hue wrapped, others clamped)Convert HSL colors to CSS string representations.
/**
* Returns CSS hsl() or hsla() string representation
* @returns HSL string like "hsl(240, 100%, 50%)" or "hsla(240, 100%, 50%, 0.8)"
*/
formatHsl(): string;Usage Examples:
import { hsl } from "d3-color";
const blue = hsl(240, 1, 0.5);
const blueAlpha = hsl(240, 1, 0.5, 0.8);
console.log(blue.formatHsl()); // "hsl(240, 100%, 50%)"
console.log(blueAlpha.formatHsl()); // "hsla(240, 100%, 50%, 0.8)"
// Also available via toString()
console.log(blue.toString()); // "rgb(0, 0, 255)" (via RGB conversion)Create modified copies for color variations and adjustments.
/**
* Creates a copy of this color with optional property overrides
* @param values - Object with properties to override
* @returns New HSL color instance
*/
copy(values?: {h?: number, s?: number, l?: number, opacity?: number}): Hsl;Usage Examples:
import { hsl } from "d3-color";
const blue = hsl(240, 1, 0.5);
// Hue variations (color wheel rotation)
const red = blue.copy({h: 0}); // Rotate to red
const green = blue.copy({h: 120}); // Rotate to green
const cyan = blue.copy({h: 180}); // Rotate to cyan
// Saturation variations (intensity)
const grayBlue = blue.copy({s: 0.3}); // Desaturated
const vibrant = blue.copy({s: 1}); // Fully saturated
// Lightness variations (brightness)
const darkBlue = blue.copy({l: 0.2}); // Darker
const lightBlue = blue.copy({l: 0.8}); // Lighter
// Opacity variations
const transparent = blue.copy({opacity: 0.5});HSL colors inherit all base Color formatting methods for various output formats.
/**
* Returns 6-digit hexadecimal string (via RGB conversion)
* @returns Hex string like "#0000ff"
*/
formatHex(): string;
/**
* Returns CSS rgb() string (via RGB conversion)
* @returns RGB string like "rgb(0, 0, 255)"
*/
formatRgb(): string;
/**
* Alias for formatRgb()
* @returns RGB string representation
*/
toString(): string;Usage Examples:
import { hsl } from "d3-color";
const purple = hsl(270, 1, 0.5);
// Multiple output formats available
console.log(purple.formatHsl()); // "hsl(270, 100%, 50%)"
console.log(purple.formatHex()); // "#8000ff"
console.log(purple.formatRgb()); // "rgb(128, 0, 255)"
console.log(purple.toString()); // "rgb(128, 0, 255)"Common patterns for HSL-based color manipulation.
Usage Examples:
import { hsl } from "d3-color";
const baseColor = hsl(200, 0.8, 0.5); // Bright blue
// Create color scheme variations
const complementary = baseColor.copy({h: baseColor.h + 180}); // Opposite hue
const analogous1 = baseColor.copy({h: baseColor.h + 30}); // Adjacent hue
const analogous2 = baseColor.copy({h: baseColor.h - 30}); // Adjacent hue
// Create tonal variations
const tint = baseColor.copy({l: 0.7}); // Lighter (add white)
const shade = baseColor.copy({l: 0.3}); // Darker (add black)
const tone = baseColor.copy({s: 0.4}); // Less saturated (add gray)
// Create transparency variations
const colors = [0.2, 0.4, 0.6, 0.8, 1.0].map(opacity =>
baseColor.copy({opacity})
);