colorScheme.ts

  1import { Scale } from "chroma-js"
  2import { Syntax, ThemeSyntax, SyntaxHighlightStyle } from "./syntax"
  3export { Syntax, ThemeSyntax, SyntaxHighlightStyle }
  4
  5export interface ColorScheme {
  6    name: string
  7    isLight: boolean
  8
  9    lowest: Layer
 10    middle: Layer
 11    highest: Layer
 12
 13    ramps: RampSet
 14
 15    popoverShadow: Shadow
 16    modalShadow: Shadow
 17
 18    players: Players
 19    syntax?: Partial<ThemeSyntax>
 20}
 21
 22export interface MetaAndLicense {
 23    meta: Meta
 24    licenseFile: string
 25}
 26
 27export interface Meta {
 28    name: string
 29    author: string
 30    url: string
 31    license: License
 32}
 33
 34export interface License {
 35    SPDX: SPDXExpression
 36}
 37
 38// License name -> License text
 39export interface Licenses {
 40    [key: string]: string
 41}
 42
 43// FIXME: Add support for the SPDX expression syntax
 44export type SPDXExpression = "MIT"
 45
 46export interface Player {
 47    cursor: string
 48    selection: string
 49}
 50
 51export interface Players {
 52    "0": Player
 53    "1": Player
 54    "2": Player
 55    "3": Player
 56    "4": Player
 57    "5": Player
 58    "6": Player
 59    "7": Player
 60}
 61
 62export interface Shadow {
 63    blur: number
 64    color: string
 65    offset: number[]
 66}
 67
 68export type StyleSets = keyof Layer
 69export interface Layer {
 70    base: StyleSet
 71    variant: StyleSet
 72    on: StyleSet
 73    accent: StyleSet
 74    positive: StyleSet
 75    warning: StyleSet
 76    negative: StyleSet
 77}
 78
 79export interface RampSet {
 80    neutral: Scale
 81    red: Scale
 82    orange: Scale
 83    yellow: Scale
 84    green: Scale
 85    cyan: Scale
 86    blue: Scale
 87    violet: Scale
 88    magenta: Scale
 89}
 90
 91export type Styles = keyof StyleSet
 92export interface StyleSet {
 93    default: Style
 94    active: Style
 95    disabled: Style
 96    hovered: Style
 97    pressed: Style
 98    inverted: Style
 99}
100
101export interface Style {
102    background: string
103    border: string
104    foreground: string
105}