Mood
Mood gives you a designer-friendly layer over OKLab. Instead of asking users to pick exact colors, you can let them browse by terms like warm, earthy, serene, or luxe.
Reds, oranges, yellows - inviting and cozy
Generated preview paletteWarm
#aa7659
#b88a71
#976548
Center point
0.613, 0.050, 0.060
L range
0.46 -> 0.76
a / b range
0.01 -> 0.09 / 0.01 -> 0.11
import {
computeMoodTarget,
MOOD_PRESETS,
regionToCenterPoint,
slidersToOklabRegion,
} from "colorscope/mood";Functions
slidersToOklabRegion
function slidersToOklabRegion(
temperature: number,
lightness: number
): OklabRegionMap UI slider values into an OKLab region. Temperature spans cool to warm, while lightness spans dark to light.
regionToCenterPoint
function regionToCenterPoint(region: OklabRegion): {
L: number;
a: number;
b: number;
}Collapse a region into one representative search point for backends that expect a single anchor color.
computeMoodTarget
function computeMoodTarget(
state: SearchTargetState
): PaletteTarget | NoSelectionTargetGenerate a small preview palette around the current mood settings. This is useful for browse UIs, chips, and server payload previews.
const target = computeMoodTarget({
mode: "mood",
moodPreset: "earthy",
searchName: null,
colorHex: null,
paletteColors: [],
paletteLogic: "all",
gradientStart: null,
gradientEnd: null,
temperature: 0.7,
lightness: 0.35,
});Constants
MOOD_PRESETS
const MOOD_PRESETS: MoodPreset[]Built-in presets include:
warmcoolearthymoodyboldlight-airynaturalneutralromanticcoastalindustrialluxevintageserene
Types
MoodPreset
interface MoodPreset {
id: string;
label: string;
description: string;
lightness: number;
temperature: number;
region: OklabRegion;
}OklabRegion
interface OklabRegion {
L: [number, number];
a: [number, number];
b: [number, number];
chroma?: [number, number];
}