Add color_family to theme

This commit is contained in:
Sergey Onufrienko
2023-07-10 20:41:39 +01:00
parent 6739c31594
commit fbf1552be9
+23 -1
View File
@@ -1,4 +1,4 @@
import { Scale, Color } from "chroma-js"
import chroma, { Scale, Color } from "chroma-js"
import { Syntax, ThemeSyntax, SyntaxHighlightStyle } from "./syntax"
export { Syntax, ThemeSyntax, SyntaxHighlightStyle }
import {
@@ -32,6 +32,7 @@ export interface Theme {
players: Players
syntax?: Partial<ThemeSyntax>
color_family: ColorFamily
}
export interface Meta {
@@ -69,6 +70,12 @@ export interface Players {
"7": Player
}
export interface ColorFamily {
range: ColorFamilyRange
}
export type ColorFamilyRange = Partial<{ [K in keyof RampSet]: number }>
export interface Shadow {
blur: number
color: string
@@ -162,6 +169,10 @@ export function create_theme(theme: ThemeConfig): Theme {
"7": player(ramps.yellow),
}
const color_family = {
range: build_color_family(ramps)
}
return {
name,
is_light,
@@ -177,6 +188,7 @@ export function create_theme(theme: ThemeConfig): Theme {
players,
syntax,
color_family,
}
}
@@ -187,6 +199,16 @@ function player(ramp: Scale): Player {
}
}
function build_color_family(ramps: RampSet): ColorFamilyRange {
const color_family: ColorFamilyRange = {}
for (const ramp in ramps) {
color_family[ramp as keyof RampSet] = chroma(ramps[ramp as keyof RampSet](0.5)).luminance()
}
return color_family
}
function lowest_layer(ramps: RampSet): Layer {
return {
base: build_style_set(ramps.neutral, 0.2, 1),