81 lines · 1.7 KB · TypeScript
RawDownload
import { Scale, Color } from "chroma-js"import { Syntax } from "./syntax" interface ThemeMeta {    /** The name of the theme */    name: string    /** The theme's appearance. Either `light` or `dark`. */    appearance: ThemeAppearance    /** The author of the theme     *     * Ideally formatted as `Full Name <email>`     *     * Example: `John Doe <john@doe.com>`     */    author: string    /** SPDX License string     *     * Example: `MIT`     */    license_type?: string | ThemeLicenseType    license_url?: string    license_file: string    theme_url?: string} export type ThemeFamilyMeta = Pick<    ThemeMeta,    "name" | "author" | "license_type" | "license_url"> export interface ThemeConfigInputColors {    neutral: Scale<Color>    red: Scale<Color>    orange: Scale<Color>    yellow: Scale<Color>    green: Scale<Color>    cyan: Scale<Color>    blue: Scale<Color>    violet: Scale<Color>    magenta: Scale<Color>} export type ThemeConfigInputColorsKeys = keyof ThemeConfigInputColors /** Allow any part of a syntax highlight style to be overriden by the theme * * Example: * ```ts * override: { *   syntax: { *     boolean: { *       underline: true, *     }, *   }, * } * ``` */export type ThemeConfigInputSyntax = Partial<Syntax> interface ThemeConfigOverrides {    syntax: ThemeConfigInputSyntax} type ThemeConfigProperties = ThemeMeta & {    input_color: ThemeConfigInputColors    override: ThemeConfigOverrides} export type ThemeConfig = {    [K in keyof ThemeConfigProperties]: ThemeConfigProperties[K]} export enum ThemeAppearance {    Light = "light",    Dark = "dark",} export enum ThemeLicenseType {    MIT = "MIT",    Apache2 = "Apache License 2.0",}