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}