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