Merge branch 'theme-color-scales' into zed2

Marshall Bowers created

Change summary

crates/storybook2/src/stories.rs        |    2 
crates/storybook2/src/stories/colors.rs |   28 
crates/storybook2/src/story_selector.rs |    2 
crates/theme2/src/default.rs            | 2118 +++++++++++++++++++++++++++
crates/theme2/src/scale.rs              |  164 ++
crates/theme2/src/theme2.rs             |   10 
6 files changed, 2,324 insertions(+)

Detailed changes

crates/storybook2/src/stories.rs 🔗

@@ -1,9 +1,11 @@
+mod colors;
 mod focus;
 mod kitchen_sink;
 mod scroll;
 mod text;
 mod z_index;
 
+pub use colors::*;
 pub use focus::*;
 pub use kitchen_sink::*;
 pub use scroll::*;

crates/storybook2/src/stories/colors.rs 🔗

@@ -0,0 +1,28 @@
+use ui::prelude::*;
+
+use crate::story::Story;
+
+#[derive(Component)]
+pub struct ColorsStory;
+
+impl ColorsStory {
+    fn render<V: 'static>(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
+        let color_scales = theme2::default_color_scales();
+
+        Story::container(cx)
+            .child(Story::title(cx, "Colors"))
+            .child(
+                div()
+                    .id("colors")
+                    .flex()
+                    .flex_col()
+                    .overflow_y_scroll()
+                    .text_color(gpui2::white())
+                    .children(color_scales.into_iter().map(|(name, scale)| {
+                        div().child(name.to_string()).child(div().flex().children(
+                            (1..=12).map(|step| div().flex().size_4().bg(scale.step(cx, step))),
+                        ))
+                    })),
+            )
+    }
+}

crates/storybook2/src/story_selector.rs 🔗

@@ -14,6 +14,7 @@ use ui::prelude::*;
 pub enum ElementStory {
     Avatar,
     Button,
+    Colors,
     Details,
     Focus,
     Icon,
@@ -29,6 +30,7 @@ impl ElementStory {
         match self {
             Self::Avatar => { cx.build_view(|cx| (), |_, _| ui::AvatarStory.render()) }.into_any(),
             Self::Button => { cx.build_view(|cx| (), |_, _| ui::ButtonStory.render()) }.into_any(),
+            Self::Colors => { cx.build_view(|cx| (), |_, _| ColorsStory.render()) }.into_any(),
             Self::Details => {
                 { cx.build_view(|cx| (), |_, _| ui::DetailsStory.render()) }.into_any()
             }

crates/theme2/src/default.rs 🔗

@@ -0,0 +1,2118 @@
+use gpui2::Rgba;
+use indexmap::IndexMap;
+
+use crate::scale::{ColorScaleName, ColorScaleSet, ColorScales};
+
+struct DefaultColorScaleSet {
+    scale: ColorScaleName,
+    light: [&'static str; 12],
+    light_alpha: [&'static str; 12],
+    dark: [&'static str; 12],
+    dark_alpha: [&'static str; 12],
+}
+
+impl From<DefaultColorScaleSet> for ColorScaleSet {
+    fn from(default: DefaultColorScaleSet) -> Self {
+        Self::new(
+            default.scale,
+            default
+                .light
+                .map(|color| Rgba::try_from(color).unwrap().into()),
+            default
+                .light_alpha
+                .map(|color| Rgba::try_from(color).unwrap().into()),
+            default
+                .dark
+                .map(|color| Rgba::try_from(color).unwrap().into()),
+            default
+                .dark_alpha
+                .map(|color| Rgba::try_from(color).unwrap().into()),
+        )
+    }
+}
+
+pub fn default_color_scales() -> ColorScales {
+    use ColorScaleName::*;
+
+    IndexMap::from_iter([
+        (Gray, gray().into()),
+        (Mauve, mauve().into()),
+        (Slate, slate().into()),
+        (Sage, sage().into()),
+        (Olive, olive().into()),
+        (Sand, sand().into()),
+        (Gold, gold().into()),
+        (Bronze, bronze().into()),
+        (Brown, brown().into()),
+        (Yellow, yellow().into()),
+        (Amber, amber().into()),
+        (Orange, orange().into()),
+        (Tomato, tomato().into()),
+        (Red, red().into()),
+        (Ruby, ruby().into()),
+        (Crimson, crimson().into()),
+        (Pink, pink().into()),
+        (Plum, plum().into()),
+        (Purple, purple().into()),
+        (Violet, violet().into()),
+        (Iris, iris().into()),
+        (Indigo, indigo().into()),
+        (Blue, blue().into()),
+        (Cyan, cyan().into()),
+        (Teal, teal().into()),
+        (Jade, jade().into()),
+        (Green, green().into()),
+        (Grass, grass().into()),
+        (Lime, lime().into()),
+        (Mint, mint().into()),
+        (Sky, sky().into()),
+        (Black, black().into()),
+        (White, white().into()),
+    ])
+}
+
+fn gray() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Gray,
+        light: [
+            "#fcfcfcff",
+            "#f9f9f9ff",
+            "#f0f0f0ff",
+            "#e8e8e8ff",
+            "#e0e0e0ff",
+            "#d9d9d9ff",
+            "#cececeff",
+            "#bbbbbbff",
+            "#8d8d8dff",
+            "#838383ff",
+            "#646464ff",
+            "#202020ff",
+        ],
+        light_alpha: [
+            "#00000003",
+            "#00000006",
+            "#0000000f",
+            "#00000017",
+            "#0000001f",
+            "#00000026",
+            "#00000031",
+            "#00000044",
+            "#00000072",
+            "#0000007c",
+            "#0000009b",
+            "#000000df",
+        ],
+        dark: [
+            "#111111ff",
+            "#191919ff",
+            "#222222ff",
+            "#2a2a2aff",
+            "#313131ff",
+            "#3a3a3aff",
+            "#484848ff",
+            "#606060ff",
+            "#6e6e6eff",
+            "#7b7b7bff",
+            "#b4b4b4ff",
+            "#eeeeeeff",
+        ],
+        dark_alpha: [
+            "#00000000",
+            "#ffffff09",
+            "#ffffff12",
+            "#ffffff1b",
+            "#ffffff22",
+            "#ffffff2c",
+            "#ffffff3b",
+            "#ffffff55",
+            "#ffffff64",
+            "#ffffff72",
+            "#ffffffaf",
+            "#ffffffed",
+        ],
+    }
+}
+
+fn mauve() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Mauve,
+        light: [
+            "#fdfcfdff",
+            "#faf9fbff",
+            "#f2eff3ff",
+            "#eae7ecff",
+            "#e3dfe6ff",
+            "#dbd8e0ff",
+            "#d0cdd7ff",
+            "#bcbac7ff",
+            "#8e8c99ff",
+            "#84828eff",
+            "#65636dff",
+            "#211f26ff",
+        ],
+        light_alpha: [
+            "#55005503",
+            "#2b005506",
+            "#30004010",
+            "#20003618",
+            "#20003820",
+            "#14003527",
+            "#10003332",
+            "#08003145",
+            "#05001d73",
+            "#0500197d",
+            "#0400119c",
+            "#020008e0",
+        ],
+        dark: [
+            "#121113ff",
+            "#1a191bff",
+            "#232225ff",
+            "#2b292dff",
+            "#323035ff",
+            "#3c393fff",
+            "#49474eff",
+            "#625f69ff",
+            "#6f6d78ff",
+            "#7c7a85ff",
+            "#b5b2bcff",
+            "#eeeef0ff",
+        ],
+        dark_alpha: [
+            "#00000000",
+            "#f5f4f609",
+            "#ebeaf814",
+            "#eee5f81d",
+            "#efe6fe25",
+            "#f1e6fd30",
+            "#eee9ff40",
+            "#eee7ff5d",
+            "#eae6fd6e",
+            "#ece9fd7c",
+            "#f5f1ffb7",
+            "#fdfdffef",
+        ],
+    }
+}
+
+fn slate() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Slate,
+        light: [
+            "#fcfcfdff",
+            "#f9f9fbff",
+            "#f0f0f3ff",
+            "#e8e8ecff",
+            "#e0e1e6ff",
+            "#d9d9e0ff",
+            "#cdced6ff",
+            "#b9bbc6ff",
+            "#8b8d98ff",
+            "#80838dff",
+            "#60646cff",
+            "#1c2024ff",
+        ],
+        light_alpha: [
+            "#00005503",
+            "#00005506",
+            "#0000330f",
+            "#00002d17",
+            "#0009321f",
+            "#00002f26",
+            "#00062e32",
+            "#00083046",
+            "#00051d74",
+            "#00071b7f",
+            "#0007149f",
+            "#000509e3",
+        ],
+        dark: [
+            "#111113ff",
+            "#18191bff",
+            "#212225ff",
+            "#272a2dff",
+            "#2e3135ff",
+            "#363a3fff",
+            "#43484eff",
+            "#5a6169ff",
+            "#696e77ff",
+            "#777b84ff",
+            "#b0b4baff",
+            "#edeef0ff",
+        ],
+        dark_alpha: [
+            "#00000000",
+            "#d8f4f609",
+            "#ddeaf814",
+            "#d3edf81d",
+            "#d9edfe25",
+            "#d6ebfd30",
+            "#d9edff40",
+            "#d9edff5d",
+            "#dfebfd6d",
+            "#e5edfd7b",
+            "#f1f7feb5",
+            "#fcfdffef",
+        ],
+    }
+}
+
+fn sage() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Sage,
+        light: [
+            "#fbfdfcff",
+            "#f7f9f8ff",
+            "#eef1f0ff",
+            "#e6e9e8ff",
+            "#dfe2e0ff",
+            "#d7dad9ff",
+            "#cbcfcdff",
+            "#b8bcbaff",
+            "#868e8bff",
+            "#7c8481ff",
+            "#5f6563ff",
+            "#1a211eff",
+        ],
+        light_alpha: [
+            "#00804004",
+            "#00402008",
+            "#002d1e11",
+            "#001f1519",
+            "#00180820",
+            "#00140d28",
+            "#00140a34",
+            "#000f0847",
+            "#00110b79",
+            "#00100a83",
+            "#000a07a0",
+            "#000805e5",
+        ],
+        dark: [
+            "#101211ff",
+            "#171918ff",
+            "#202221ff",
+            "#272a29ff",
+            "#2e3130ff",
+            "#373b39ff",
+            "#444947ff",
+            "#5b625fff",
+            "#63706bff",
+            "#717d79ff",
+            "#adb5b2ff",
+            "#eceeedff",
+        ],
+        dark_alpha: [
+            "#00000000",
+            "#f0f2f108",
+            "#f3f5f412",
+            "#f2fefd1a",
+            "#f1fbfa22",
+            "#edfbf42d",
+            "#edfcf73c",
+            "#ebfdf657",
+            "#dffdf266",
+            "#e5fdf674",
+            "#f4fefbb0",
+            "#fdfffeed",
+        ],
+    }
+}
+
+fn olive() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Olive,
+        light: [
+            "#fcfdfcff",
+            "#f8faf8ff",
+            "#eff1efff",
+            "#e7e9e7ff",
+            "#dfe2dfff",
+            "#d7dad7ff",
+            "#cccfccff",
+            "#b9bcb8ff",
+            "#898e87ff",
+            "#7f847dff",
+            "#60655fff",
+            "#1d211cff",
+        ],
+        light_alpha: [
+            "#00550003",
+            "#00490007",
+            "#00200010",
+            "#00160018",
+            "#00180020",
+            "#00140028",
+            "#000f0033",
+            "#040f0047",
+            "#050f0078",
+            "#040e0082",
+            "#020a00a0",
+            "#010600e3",
+        ],
+        dark: [
+            "#111210ff",
+            "#181917ff",
+            "#212220ff",
+            "#282a27ff",
+            "#2f312eff",
+            "#383a36ff",
+            "#454843ff",
+            "#5c625bff",
+            "#687066ff",
+            "#767d74ff",
+            "#afb5adff",
+            "#eceeecff",
+        ],
+        dark_alpha: [
+            "#00000000",
+            "#f1f2f008",
+            "#f4f5f312",
+            "#f3fef21a",
+            "#f2fbf122",
+            "#f4faed2c",
+            "#f2fced3b",
+            "#edfdeb57",
+            "#ebfde766",
+            "#f0fdec74",
+            "#f6fef4b0",
+            "#fdfffded",
+        ],
+    }
+}
+
+fn sand() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Sand,
+        light: [
+            "#fdfdfcff",
+            "#f9f9f8ff",
+            "#f1f0efff",
+            "#e9e8e6ff",
+            "#e2e1deff",
+            "#dad9d6ff",
+            "#cfcecaff",
+            "#bcbbb5ff",
+            "#8d8d86ff",
+            "#82827cff",
+            "#63635eff",
+            "#21201cff",
+        ],
+        light_alpha: [
+            "#55550003",
+            "#25250007",
+            "#20100010",
+            "#1f150019",
+            "#1f180021",
+            "#19130029",
+            "#19140035",
+            "#1915014a",
+            "#0f0f0079",
+            "#0c0c0083",
+            "#080800a1",
+            "#060500e3",
+        ],
+        dark: [
+            "#111110ff",
+            "#191918ff",
+            "#222221ff",
+            "#2a2a28ff",
+            "#31312eff",
+            "#3b3a37ff",
+            "#494844ff",
+            "#62605bff",
+            "#6f6d66ff",
+            "#7c7b74ff",
+            "#b5b3adff",
+            "#eeeeecff",
+        ],
+        dark_alpha: [
+            "#00000000",
+            "#f4f4f309",
+            "#f6f6f513",
+            "#fefef31b",
+            "#fbfbeb23",
+            "#fffaed2d",
+            "#fffbed3c",
+            "#fff9eb57",
+            "#fffae965",
+            "#fffdee73",
+            "#fffcf4b0",
+            "#fffffded",
+        ],
+    }
+}
+
+fn gold() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Gold,
+        light: [
+            "#fdfdfcff",
+            "#faf9f2ff",
+            "#f2f0e7ff",
+            "#eae6dbff",
+            "#e1dccfff",
+            "#d8d0bfff",
+            "#cbc0aaff",
+            "#b9a88dff",
+            "#978365ff",
+            "#8c7a5eff",
+            "#71624bff",
+            "#3b352bff",
+        ],
+        light_alpha: [
+            "#55550003",
+            "#9d8a000d",
+            "#75600018",
+            "#6b4e0024",
+            "#60460030",
+            "#64440040",
+            "#63420055",
+            "#633d0072",
+            "#5332009a",
+            "#492d00a1",
+            "#362100b4",
+            "#130c00d4",
+        ],
+        dark: [
+            "#121211ff",
+            "#1b1a17ff",
+            "#24231fff",
+            "#2d2b26ff",
+            "#38352eff",
+            "#444039ff",
+            "#544f46ff",
+            "#696256ff",
+            "#978365ff",
+            "#a39073ff",
+            "#cbb99fff",
+            "#e8e2d9ff",
+        ],
+        dark_alpha: [
+            "#91911102",
+            "#f9e29d0b",
+            "#f8ecbb15",
+            "#ffeec41e",
+            "#feecc22a",
+            "#feebcb37",
+            "#ffedcd48",
+            "#fdeaca5f",
+            "#ffdba690",
+            "#fedfb09d",
+            "#fee7c6c8",
+            "#fef7ede7",
+        ],
+    }
+}
+
+fn bronze() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Bronze,
+        light: [
+            "#fdfcfcff",
+            "#fdf7f5ff",
+            "#f6edeaff",
+            "#efe4dfff",
+            "#e7d9d3ff",
+            "#dfcdc5ff",
+            "#d3bcb3ff",
+            "#c2a499ff",
+            "#a18072ff",
+            "#957468ff",
+            "#7d5e54ff",
+            "#43302bff",
+        ],
+        light_alpha: [
+            "#55000003",
+            "#cc33000a",
+            "#92250015",
+            "#80280020",
+            "#7423002c",
+            "#7324003a",
+            "#6c1f004c",
+            "#671c0066",
+            "#551a008d",
+            "#4c150097",
+            "#3d0f00ab",
+            "#1d0600d4",
+        ],
+        dark: [
+            "#141110ff",
+            "#1c1917ff",
+            "#262220ff",
+            "#302a27ff",
+            "#3b3330ff",
+            "#493e3aff",
+            "#5a4c47ff",
+            "#6f5f58ff",
+            "#a18072ff",
+            "#ae8c7eff",
+            "#d4b3a5ff",
+            "#ede0d9ff",
+        ],
+        dark_alpha: [
+            "#d1110004",
+            "#fbbc910c",
+            "#faceb817",
+            "#facdb622",
+            "#ffd2c12d",
+            "#ffd1c03c",
+            "#fdd0c04f",
+            "#ffd6c565",
+            "#fec7b09b",
+            "#fecab5a9",
+            "#ffd7c6d1",
+            "#fff1e9ec",
+        ],
+    }
+}
+
+fn brown() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Brown,
+        light: [
+            "#fefdfcff",
+            "#fcf9f6ff",
+            "#f6eee7ff",
+            "#f0e4d9ff",
+            "#ebdacaff",
+            "#e4cdb7ff",
+            "#dcbc9fff",
+            "#cea37eff",
+            "#ad7f58ff",
+            "#a07553ff",
+            "#815e46ff",
+            "#3e332eff",
+        ],
+        light_alpha: [
+            "#aa550003",
+            "#aa550009",
+            "#a04b0018",
+            "#9b4a0026",
+            "#9f4d0035",
+            "#a04e0048",
+            "#a34e0060",
+            "#9f4a0081",
+            "#823c00a7",
+            "#723300ac",
+            "#522100b9",
+            "#140600d1",
+        ],
+        dark: [
+            "#12110fff",
+            "#1c1816ff",
+            "#28211dff",
+            "#322922ff",
+            "#3e3128ff",
+            "#4d3c2fff",
+            "#614a39ff",
+            "#7c5f46ff",
+            "#ad7f58ff",
+            "#b88c67ff",
+            "#dbb594ff",
+            "#f2e1caff",
+        ],
+        dark_alpha: [
+            "#91110002",
+            "#fba67c0c",
+            "#fcb58c19",
+            "#fbbb8a24",
+            "#fcb88931",
+            "#fdba8741",
+            "#ffbb8856",
+            "#ffbe8773",
+            "#feb87da8",
+            "#ffc18cb3",
+            "#fed1aad9",
+            "#feecd4f2",
+        ],
+    }
+}
+
+fn yellow() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Yellow,
+        light: [
+            "#fdfdf9ff",
+            "#fefce9ff",
+            "#fffab8ff",
+            "#fff394ff",
+            "#ffe770ff",
+            "#f3d768ff",
+            "#e4c767ff",
+            "#d5ae39ff",
+            "#ffe629ff",
+            "#ffdc00ff",
+            "#9e6c00ff",
+            "#473b1fff",
+        ],
+        light_alpha: [
+            "#aaaa0006",
+            "#f4dd0016",
+            "#ffee0047",
+            "#ffe3016b",
+            "#ffd5008f",
+            "#ebbc0097",
+            "#d2a10098",
+            "#c99700c6",
+            "#ffe100d6",
+            "#ffdc00ff",
+            "#9e6c00ff",
+            "#2e2000e0",
+        ],
+        dark: [
+            "#14120bff",
+            "#1b180fff",
+            "#2d2305ff",
+            "#362b00ff",
+            "#433500ff",
+            "#524202ff",
+            "#665417ff",
+            "#836a21ff",
+            "#ffe629ff",
+            "#ffff57ff",
+            "#f5e147ff",
+            "#f6eeb4ff",
+        ],
+        dark_alpha: [
+            "#d1510004",
+            "#f9b4000b",
+            "#ffaa001e",
+            "#fdb70028",
+            "#febb0036",
+            "#fec40046",
+            "#fdcb225c",
+            "#fdca327b",
+            "#ffe629ff",
+            "#ffff57ff",
+            "#fee949f5",
+            "#fef6baf6",
+        ],
+    }
+}
+
+fn amber() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Amber,
+        light: [
+            "#fefdfbff",
+            "#fefbe9ff",
+            "#fff7c2ff",
+            "#ffee9cff",
+            "#fbe577ff",
+            "#f3d673ff",
+            "#e9c162ff",
+            "#e2a336ff",
+            "#ffc53dff",
+            "#ffba18ff",
+            "#ab6400ff",
+            "#4f3422ff",
+        ],
+        light_alpha: [
+            "#c0800004",
+            "#f4d10016",
+            "#ffde003d",
+            "#ffd40063",
+            "#f8cf0088",
+            "#eab5008c",
+            "#dc9b009d",
+            "#da8a00c9",
+            "#ffb300c2",
+            "#ffb300e7",
+            "#ab6400ff",
+            "#341500dd",
+        ],
+        dark: [
+            "#16120cff",
+            "#1d180fff",
+            "#302008ff",
+            "#3f2700ff",
+            "#4d3000ff",
+            "#5c3d05ff",
+            "#714f19ff",
+            "#8f6424ff",
+            "#ffc53dff",
+            "#ffd60aff",
+            "#ffca16ff",
+            "#ffe7b3ff",
+        ],
+        dark_alpha: [
+            "#e63c0006",
+            "#fd9b000d",
+            "#fa820022",
+            "#fc820032",
+            "#fd8b0041",
+            "#fd9b0051",
+            "#ffab2567",
+            "#ffae3587",
+            "#ffc53dff",
+            "#ffd60aff",
+            "#ffca16ff",
+            "#ffe7b3ff",
+        ],
+    }
+}
+
+fn orange() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Orange,
+        light: [
+            "#fefcfbff",
+            "#fff7edff",
+            "#ffefd6ff",
+            "#ffdfb5ff",
+            "#ffd19aff",
+            "#ffc182ff",
+            "#f5ae73ff",
+            "#ec9455ff",
+            "#f76b15ff",
+            "#ef5f00ff",
+            "#cc4e00ff",
+            "#582d1dff",
+        ],
+        light_alpha: [
+            "#c0400004",
+            "#ff8e0012",
+            "#ff9c0029",
+            "#ff91014a",
+            "#ff8b0065",
+            "#ff81007d",
+            "#ed6c008c",
+            "#e35f00aa",
+            "#f65e00ea",
+            "#ef5f00ff",
+            "#cc4e00ff",
+            "#431200e2",
+        ],
+        dark: [
+            "#17120eff",
+            "#1e160fff",
+            "#331e0bff",
+            "#462100ff",
+            "#562800ff",
+            "#66350cff",
+            "#7e451dff",
+            "#a35829ff",
+            "#f76b15ff",
+            "#ff801fff",
+            "#ffa057ff",
+            "#ffe0c2ff",
+        ],
+        dark_alpha: [
+            "#ec360007",
+            "#fe6d000e",
+            "#fb6a0025",
+            "#ff590039",
+            "#ff61004a",
+            "#fd75045c",
+            "#ff832c75",
+            "#fe84389d",
+            "#fe6d15f7",
+            "#ff801fff",
+            "#ffa057ff",
+            "#ffe0c2ff",
+        ],
+    }
+}
+
+fn tomato() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Tomato,
+        light: [
+            "#fffcfcff",
+            "#fff8f7ff",
+            "#feebe7ff",
+            "#ffdcd3ff",
+            "#ffcdc2ff",
+            "#fdbdafff",
+            "#f5a898ff",
+            "#ec8e7bff",
+            "#e54d2eff",
+            "#dd4425ff",
+            "#d13415ff",
+            "#5c271fff",
+        ],
+        light_alpha: [
+            "#ff000003",
+            "#ff200008",
+            "#f52b0018",
+            "#ff35002c",
+            "#ff2e003d",
+            "#f92d0050",
+            "#e7280067",
+            "#db250084",
+            "#df2600d1",
+            "#d72400da",
+            "#cd2200ea",
+            "#460900e0",
+        ],
+        dark: [
+            "#181111ff",
+            "#1f1513ff",
+            "#391714ff",
+            "#4e1511ff",
+            "#5e1c16ff",
+            "#6e2920ff",
+            "#853a2dff",
+            "#ac4d39ff",
+            "#e54d2eff",
+            "#ec6142ff",
+            "#ff977dff",
+            "#fbd3cbff",
+        ],
+        dark_alpha: [
+            "#f1121208",
+            "#ff55330f",
+            "#ff35232b",
+            "#fd201142",
+            "#fe332153",
+            "#ff4f3864",
+            "#fd644a7d",
+            "#fe6d4ea7",
+            "#fe5431e4",
+            "#ff6847eb",
+            "#ff977dff",
+            "#ffd6cefb",
+        ],
+    }
+}
+
+fn red() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Red,
+        light: [
+            "#fffcfcff",
+            "#fff7f7ff",
+            "#feebecff",
+            "#ffdbdcff",
+            "#ffcdceff",
+            "#fdbdbeff",
+            "#f4a9aaff",
+            "#eb8e90ff",
+            "#e5484dff",
+            "#dc3e42ff",
+            "#ce2c31ff",
+            "#641723ff",
+        ],
+        light_alpha: [
+            "#ff000003",
+            "#ff000008",
+            "#f3000d14",
+            "#ff000824",
+            "#ff000632",
+            "#f8000442",
+            "#df000356",
+            "#d2000571",
+            "#db0007b7",
+            "#d10005c1",
+            "#c40006d3",
+            "#55000de8",
+        ],
+        dark: [
+            "#191111ff",
+            "#201314ff",
+            "#3b1219ff",
+            "#500f1cff",
+            "#611623ff",
+            "#72232dff",
+            "#8c333aff",
+            "#b54548ff",
+            "#e5484dff",
+            "#ec5d5eff",
+            "#ff9592ff",
+            "#ffd1d9ff",
+        ],
+        dark_alpha: [
+            "#f4121209",
+            "#f22f3e11",
+            "#ff173f2d",
+            "#fe0a3b44",
+            "#ff204756",
+            "#ff3e5668",
+            "#ff536184",
+            "#ff5d61b0",
+            "#fe4e54e4",
+            "#ff6465eb",
+            "#ff9592ff",
+            "#ffd1d9ff",
+        ],
+    }
+}
+
+fn ruby() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Ruby,
+        light: [
+            "#fffcfdff",
+            "#fff7f8ff",
+            "#feeaedff",
+            "#ffdce1ff",
+            "#ffced6ff",
+            "#f8bfc8ff",
+            "#efacb8ff",
+            "#e592a3ff",
+            "#e54666ff",
+            "#dc3b5dff",
+            "#ca244dff",
+            "#64172bff",
+        ],
+        light_alpha: [
+            "#ff005503",
+            "#ff002008",
+            "#f3002515",
+            "#ff002523",
+            "#ff002a31",
+            "#e4002440",
+            "#ce002553",
+            "#c300286d",
+            "#db002cb9",
+            "#d2002cc4",
+            "#c10030db",
+            "#550016e8",
+        ],
+        dark: [
+            "#191113ff",
+            "#1e1517ff",
+            "#3a141eff",
+            "#4e1325ff",
+            "#5e1a2eff",
+            "#6f2539ff",
+            "#883447ff",
+            "#b3445aff",
+            "#e54666ff",
+            "#ec5a72ff",
+            "#ff949dff",
+            "#fed2e1ff",
+        ],
+        dark_alpha: [
+            "#f4124a09",
+            "#fe5a7f0e",
+            "#ff235d2c",
+            "#fd195e42",
+            "#fe2d6b53",
+            "#ff447665",
+            "#ff577d80",
+            "#ff5c7cae",
+            "#fe4c70e4",
+            "#ff617beb",
+            "#ff949dff",
+            "#ffd3e2fe",
+        ],
+    }
+}
+
+fn crimson() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Crimson,
+        light: [
+            "#fffcfdff",
+            "#fef7f9ff",
+            "#ffe9f0ff",
+            "#fedce7ff",
+            "#faceddff",
+            "#f3bed1ff",
+            "#eaacc3ff",
+            "#e093b2ff",
+            "#e93d82ff",
+            "#df3478ff",
+            "#cb1d63ff",
+            "#621639ff",
+        ],
+        light_alpha: [
+            "#ff005503",
+            "#e0004008",
+            "#ff005216",
+            "#f8005123",
+            "#e5004f31",
+            "#d0004b41",
+            "#bf004753",
+            "#b6004a6c",
+            "#e2005bc2",
+            "#d70056cb",
+            "#c4004fe2",
+            "#530026e9",
+        ],
+        dark: [
+            "#191114ff",
+            "#201318ff",
+            "#381525ff",
+            "#4d122fff",
+            "#5c1839ff",
+            "#6d2545ff",
+            "#873356ff",
+            "#b0436eff",
+            "#e93d82ff",
+            "#ee518aff",
+            "#ff92adff",
+            "#fdd3e8ff",
+        ],
+        dark_alpha: [
+            "#f4126709",
+            "#f22f7a11",
+            "#fe2a8b2a",
+            "#fd158741",
+            "#fd278f51",
+            "#fe459763",
+            "#fd559b7f",
+            "#fe5b9bab",
+            "#fe418de8",
+            "#ff5693ed",
+            "#ff92adff",
+            "#ffd5eafd",
+        ],
+    }
+}
+
+fn pink() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Pink,
+        light: [
+            "#fffcfeff",
+            "#fef7fbff",
+            "#fee9f5ff",
+            "#fbdcefff",
+            "#f6cee7ff",
+            "#efbfddff",
+            "#e7acd0ff",
+            "#dd93c2ff",
+            "#d6409fff",
+            "#cf3897ff",
+            "#c2298aff",
+            "#651249ff",
+        ],
+        light_alpha: [
+            "#ff00aa03",
+            "#e0008008",
+            "#f4008c16",
+            "#e2008b23",
+            "#d1008331",
+            "#c0007840",
+            "#b6006f53",
+            "#af006f6c",
+            "#c8007fbf",
+            "#c2007ac7",
+            "#b60074d6",
+            "#59003bed",
+        ],
+        dark: [
+            "#191117ff",
+            "#21121dff",
+            "#37172fff",
+            "#4b143dff",
+            "#591c47ff",
+            "#692955ff",
+            "#833869ff",
+            "#a84885ff",
+            "#d6409fff",
+            "#de51a8ff",
+            "#ff8dccff",
+            "#fdd1eaff",
+        ],
+        dark_alpha: [
+            "#f412bc09",
+            "#f420bb12",
+            "#fe37cc29",
+            "#fc1ec43f",
+            "#fd35c24e",
+            "#fd51c75f",
+            "#fd62c87b",
+            "#ff68c8a2",
+            "#fe49bcd4",
+            "#ff5cc0dc",
+            "#ff8dccff",
+            "#ffd3ecfd",
+        ],
+    }
+}
+
+fn plum() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Plum,
+        light: [
+            "#fefcffff",
+            "#fdf7fdff",
+            "#fbebfbff",
+            "#f7def8ff",
+            "#f2d1f3ff",
+            "#e9c2ecff",
+            "#deade3ff",
+            "#cf91d8ff",
+            "#ab4abaff",
+            "#a144afff",
+            "#953ea3ff",
+            "#53195dff",
+        ],
+        light_alpha: [
+            "#aa00ff03",
+            "#c000c008",
+            "#cc00cc14",
+            "#c200c921",
+            "#b700bd2e",
+            "#a400b03d",
+            "#9900a852",
+            "#9000a56e",
+            "#89009eb5",
+            "#7f0092bb",
+            "#730086c1",
+            "#40004be6",
+        ],
+        dark: [
+            "#181118ff",
+            "#201320ff",
+            "#351a35ff",
+            "#451d47ff",
+            "#512454ff",
+            "#5e3061ff",
+            "#734079ff",
+            "#92549cff",
+            "#ab4abaff",
+            "#b658c4ff",
+            "#e796f3ff",
+            "#f4d4f4ff",
+        ],
+        dark_alpha: [
+            "#f112f108",
+            "#f22ff211",
+            "#fd4cfd27",
+            "#f646ff3a",
+            "#f455ff48",
+            "#f66dff56",
+            "#f07cfd70",
+            "#ee84ff95",
+            "#e961feb6",
+            "#ed70ffc0",
+            "#f19cfef3",
+            "#feddfef4",
+        ],
+    }
+}
+
+fn purple() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Purple,
+        light: [
+            "#fefcfeff",
+            "#fbf7feff",
+            "#f7edfeff",
+            "#f2e2fcff",
+            "#ead5f9ff",
+            "#e0c4f4ff",
+            "#d1afecff",
+            "#be93e4ff",
+            "#8e4ec6ff",
+            "#8347b9ff",
+            "#8145b5ff",
+            "#402060ff",
+        ],
+        light_alpha: [
+            "#aa00aa03",
+            "#8000e008",
+            "#8e00f112",
+            "#8d00e51d",
+            "#8000db2a",
+            "#7a01d03b",
+            "#6d00c350",
+            "#6600c06c",
+            "#5c00adb1",
+            "#53009eb8",
+            "#52009aba",
+            "#250049df",
+        ],
+        dark: [
+            "#18111bff",
+            "#1e1523ff",
+            "#301c3bff",
+            "#3d224eff",
+            "#48295cff",
+            "#54346bff",
+            "#664282ff",
+            "#8457aaff",
+            "#8e4ec6ff",
+            "#9a5cd0ff",
+            "#d19dffff",
+            "#ecd9faff",
+        ],
+        dark_alpha: [
+            "#b412f90b",
+            "#b744f714",
+            "#c150ff2d",
+            "#bb53fd42",
+            "#be5cfd51",
+            "#c16dfd61",
+            "#c378fd7a",
+            "#c47effa4",
+            "#b661ffc2",
+            "#bc6fffcd",
+            "#d19dffff",
+            "#f1ddfffa",
+        ],
+    }
+}
+
+fn violet() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Violet,
+        light: [
+            "#fdfcfeff",
+            "#faf8ffff",
+            "#f4f0feff",
+            "#ebe4ffff",
+            "#e1d9ffff",
+            "#d4cafeff",
+            "#c2b5f5ff",
+            "#aa99ecff",
+            "#6e56cfff",
+            "#654dc4ff",
+            "#6550b9ff",
+            "#2f265fff",
+        ],
+        light_alpha: [
+            "#5500aa03",
+            "#4900ff07",
+            "#4400ee0f",
+            "#4300ff1b",
+            "#3600ff26",
+            "#3100fb35",
+            "#2d01dd4a",
+            "#2b00d066",
+            "#2400b7a9",
+            "#2300abb2",
+            "#1f0099af",
+            "#0b0043d9",
+        ],
+        dark: [
+            "#14121fff",
+            "#1b1525ff",
+            "#291f43ff",
+            "#33255bff",
+            "#3c2e69ff",
+            "#473876ff",
+            "#56468bff",
+            "#6958adff",
+            "#6e56cfff",
+            "#7d66d9ff",
+            "#baa7ffff",
+            "#e2ddfeff",
+        ],
+        dark_alpha: [
+            "#4422ff0f",
+            "#853ff916",
+            "#8354fe36",
+            "#7d51fd50",
+            "#845ffd5f",
+            "#8f6cfd6d",
+            "#9879ff83",
+            "#977dfea8",
+            "#8668ffcc",
+            "#9176fed7",
+            "#baa7ffff",
+            "#e3defffe",
+        ],
+    }
+}
+
+fn iris() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Iris,
+        light: [
+            "#fdfdffff",
+            "#f8f8ffff",
+            "#f0f1feff",
+            "#e6e7ffff",
+            "#dadcffff",
+            "#cbcdffff",
+            "#b8baf8ff",
+            "#9b9ef0ff",
+            "#5b5bd6ff",
+            "#5151cdff",
+            "#5753c6ff",
+            "#272962ff",
+        ],
+        light_alpha: [
+            "#0000ff02",
+            "#0000ff07",
+            "#0011ee0f",
+            "#000bff19",
+            "#000eff25",
+            "#000aff34",
+            "#0008e647",
+            "#0008d964",
+            "#0000c0a4",
+            "#0000b6ae",
+            "#0600abac",
+            "#000246d8",
+        ],
+        dark: [
+            "#13131eff",
+            "#171625ff",
+            "#202248ff",
+            "#262a65ff",
+            "#303374ff",
+            "#3d3e82ff",
+            "#4a4a95ff",
+            "#5958b1ff",
+            "#5b5bd6ff",
+            "#6e6adeff",
+            "#b1a9ffff",
+            "#e0dffeff",
+        ],
+        dark_alpha: [
+            "#3636fe0e",
+            "#564bf916",
+            "#525bff3b",
+            "#4d58ff5a",
+            "#5b62fd6b",
+            "#6d6ffd7a",
+            "#7777fe8e",
+            "#7b7afeac",
+            "#6a6afed4",
+            "#7d79ffdc",
+            "#b1a9ffff",
+            "#e1e0fffe",
+        ],
+    }
+}
+
+fn indigo() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Indigo,
+        light: [
+            "#fdfdfeff",
+            "#f7f9ffff",
+            "#edf2feff",
+            "#e1e9ffff",
+            "#d2deffff",
+            "#c1d0ffff",
+            "#abbdf9ff",
+            "#8da4efff",
+            "#3e63ddff",
+            "#3358d4ff",
+            "#3a5bc7ff",
+            "#1f2d5cff",
+        ],
+        light_alpha: [
+            "#00008002",
+            "#0040ff08",
+            "#0047f112",
+            "#0044ff1e",
+            "#0044ff2d",
+            "#003eff3e",
+            "#0037ed54",
+            "#0034dc72",
+            "#0031d2c1",
+            "#002ec9cc",
+            "#002bb7c5",
+            "#001046e0",
+        ],
+        dark: [
+            "#11131fff",
+            "#141726ff",
+            "#182449ff",
+            "#1d2e62ff",
+            "#253974ff",
+            "#304384ff",
+            "#3a4f97ff",
+            "#435db1ff",
+            "#3e63ddff",
+            "#5472e4ff",
+            "#9eb1ffff",
+            "#d6e1ffff",
+        ],
+        dark_alpha: [
+            "#1133ff0f",
+            "#3354fa17",
+            "#2f62ff3c",
+            "#3566ff57",
+            "#4171fd6b",
+            "#5178fd7c",
+            "#5a7fff90",
+            "#5b81feac",
+            "#4671ffdb",
+            "#5c7efee3",
+            "#9eb1ffff",
+            "#d6e1ffff",
+        ],
+    }
+}
+
+fn blue() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Blue,
+        light: [
+            "#fbfdffff",
+            "#f4faffff",
+            "#e6f4feff",
+            "#d5efffff",
+            "#c2e5ffff",
+            "#acd8fcff",
+            "#8ec8f6ff",
+            "#5eb1efff",
+            "#0090ffff",
+            "#0588f0ff",
+            "#0d74ceff",
+            "#113264ff",
+        ],
+        light_alpha: [
+            "#0080ff04",
+            "#008cff0b",
+            "#008ff519",
+            "#009eff2a",
+            "#0093ff3d",
+            "#0088f653",
+            "#0083eb71",
+            "#0084e6a1",
+            "#0090ffff",
+            "#0086f0fa",
+            "#006dcbf2",
+            "#002359ee",
+        ],
+        dark: [
+            "#0d1520ff",
+            "#111927ff",
+            "#0d2847ff",
+            "#003362ff",
+            "#004074ff",
+            "#104d87ff",
+            "#205d9eff",
+            "#2870bdff",
+            "#0090ffff",
+            "#3b9effff",
+            "#70b8ffff",
+            "#c2e6ffff",
+        ],
+        dark_alpha: [
+            "#004df211",
+            "#1166fb18",
+            "#0077ff3a",
+            "#0075ff57",
+            "#0081fd6b",
+            "#0f89fd7f",
+            "#2a91fe98",
+            "#3094feb9",
+            "#0090ffff",
+            "#3b9effff",
+            "#70b8ffff",
+            "#c2e6ffff",
+        ],
+    }
+}
+
+fn cyan() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Cyan,
+        light: [
+            "#fafdfeff",
+            "#f2fafbff",
+            "#def7f9ff",
+            "#caf1f6ff",
+            "#b5e9f0ff",
+            "#9ddde7ff",
+            "#7dcedcff",
+            "#3db9cfff",
+            "#00a2c7ff",
+            "#0797b9ff",
+            "#107d98ff",
+            "#0d3c48ff",
+        ],
+        light_alpha: [
+            "#0099cc05",
+            "#009db10d",
+            "#00c2d121",
+            "#00bcd435",
+            "#01b4cc4a",
+            "#00a7c162",
+            "#009fbb82",
+            "#00a3c0c2",
+            "#00a2c7ff",
+            "#0094b7f8",
+            "#007491ef",
+            "#00323ef2",
+        ],
+        dark: [
+            "#0b161aff",
+            "#101b20ff",
+            "#082c36ff",
+            "#003848ff",
+            "#004558ff",
+            "#045468ff",
+            "#12677eff",
+            "#11809cff",
+            "#00a2c7ff",
+            "#23afd0ff",
+            "#4ccce6ff",
+            "#b6ecf7ff",
+        ],
+        dark_alpha: [
+            "#0091f70a",
+            "#02a7f211",
+            "#00befd28",
+            "#00baff3b",
+            "#00befd4d",
+            "#00c7fd5e",
+            "#14cdff75",
+            "#11cfff95",
+            "#00cfffc3",
+            "#28d6ffcd",
+            "#52e1fee5",
+            "#bbf3fef7",
+        ],
+    }
+}
+
+fn teal() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Teal,
+        light: [
+            "#fafefdff",
+            "#f3fbf9ff",
+            "#e0f8f3ff",
+            "#ccf3eaff",
+            "#b8eae0ff",
+            "#a1ded2ff",
+            "#83cdc1ff",
+            "#53b9abff",
+            "#12a594ff",
+            "#0d9b8aff",
+            "#008573ff",
+            "#0d3d38ff",
+        ],
+        light_alpha: [
+            "#00cc9905",
+            "#00aa800c",
+            "#00c69d1f",
+            "#00c39633",
+            "#00b49047",
+            "#00a6855e",
+            "#0099807c",
+            "#009783ac",
+            "#009e8ced",
+            "#009684f2",
+            "#008573ff",
+            "#00332df2",
+        ],
+        dark: [
+            "#0d1514ff",
+            "#111c1bff",
+            "#0d2d2aff",
+            "#023b37ff",
+            "#084843ff",
+            "#145750ff",
+            "#1c6961ff",
+            "#207e73ff",
+            "#12a594ff",
+            "#0eb39eff",
+            "#0bd8b6ff",
+            "#adf0ddff",
+        ],
+        dark_alpha: [
+            "#00deab05",
+            "#12fbe60c",
+            "#00ffe61e",
+            "#00ffe92d",
+            "#00ffea3b",
+            "#1cffe84b",
+            "#2efde85f",
+            "#32ffe775",
+            "#13ffe49f",
+            "#0dffe0ae",
+            "#0afed5d6",
+            "#b8ffebef",
+        ],
+    }
+}
+
+fn jade() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Jade,
+        light: [
+            "#fbfefdff",
+            "#f4fbf7ff",
+            "#e6f7edff",
+            "#d6f1e3ff",
+            "#c3e9d7ff",
+            "#acdec8ff",
+            "#8bceb6ff",
+            "#56ba9fff",
+            "#29a383ff",
+            "#26997bff",
+            "#208368ff",
+            "#1d3b31ff",
+        ],
+        light_alpha: [
+            "#00c08004",
+            "#00a3460b",
+            "#00ae4819",
+            "#00a85129",
+            "#00a2553c",
+            "#009a5753",
+            "#00945f74",
+            "#00976ea9",
+            "#00916bd6",
+            "#008764d9",
+            "#007152df",
+            "#002217e2",
+        ],
+        dark: [
+            "#0d1512ff",
+            "#121c18ff",
+            "#0f2e22ff",
+            "#0b3b2cff",
+            "#114837ff",
+            "#1b5745ff",
+            "#246854ff",
+            "#2a7e68ff",
+            "#29a383ff",
+            "#27b08bff",
+            "#1fd8a4ff",
+            "#adf0d4ff",
+        ],
+        dark_alpha: [
+            "#00de4505",
+            "#27fba60c",
+            "#02f99920",
+            "#00ffaa2d",
+            "#11ffb63b",
+            "#34ffc24b",
+            "#45fdc75e",
+            "#48ffcf75",
+            "#38feca9d",
+            "#31fec7ab",
+            "#21fec0d6",
+            "#b8ffe1ef",
+        ],
+    }
+}
+
+fn green() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Green,
+        light: [
+            "#fbfefcff",
+            "#f4fbf6ff",
+            "#e6f6ebff",
+            "#d6f1dfff",
+            "#c4e8d1ff",
+            "#adddc0ff",
+            "#8eceaaff",
+            "#5bb98bff",
+            "#30a46cff",
+            "#2b9a66ff",
+            "#218358ff",
+            "#193b2dff",
+        ],
+        light_alpha: [
+            "#00c04004",
+            "#00a32f0b",
+            "#00a43319",
+            "#00a83829",
+            "#019c393b",
+            "#00963c52",
+            "#00914071",
+            "#00924ba4",
+            "#008f4acf",
+            "#008647d4",
+            "#00713fde",
+            "#002616e6",
+        ],
+        dark: [
+            "#0e1512ff",
+            "#121b17ff",
+            "#132d21ff",
+            "#113b29ff",
+            "#174933ff",
+            "#20573eff",
+            "#28684aff",
+            "#2f7c57ff",
+            "#30a46cff",
+            "#33b074ff",
+            "#3dd68cff",
+            "#b1f1cbff",
+        ],
+        dark_alpha: [
+            "#00de4505",
+            "#29f99d0b",
+            "#22ff991e",
+            "#11ff992d",
+            "#2bffa23c",
+            "#44ffaa4b",
+            "#50fdac5e",
+            "#54ffad73",
+            "#44ffa49e",
+            "#43fea4ab",
+            "#46fea5d4",
+            "#bbffd7f0",
+        ],
+    }
+}
+
+fn grass() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Grass,
+        light: [
+            "#fbfefbff",
+            "#f5fbf5ff",
+            "#e9f6e9ff",
+            "#daf1dbff",
+            "#c9e8caff",
+            "#b2ddb5ff",
+            "#94ce9aff",
+            "#65ba74ff",
+            "#46a758ff",
+            "#3e9b4fff",
+            "#2a7e3bff",
+            "#203c25ff",
+        ],
+        light_alpha: [
+            "#00c00004",
+            "#0099000a",
+            "#00970016",
+            "#009f0725",
+            "#00930536",
+            "#008f0a4d",
+            "#018b0f6b",
+            "#008d199a",
+            "#008619b9",
+            "#007b17c1",
+            "#006514d5",
+            "#002006df",
+        ],
+        dark: [
+            "#0e1511ff",
+            "#141a15ff",
+            "#1b2a1eff",
+            "#1d3a24ff",
+            "#25482dff",
+            "#2d5736ff",
+            "#366740ff",
+            "#3e7949ff",
+            "#46a758ff",
+            "#53b365ff",
+            "#71d083ff",
+            "#c2f0c2ff",
+        ],
+        dark_alpha: [
+            "#00de1205",
+            "#5ef7780a",
+            "#70fe8c1b",
+            "#57ff802c",
+            "#68ff8b3b",
+            "#71ff8f4b",
+            "#77fd925d",
+            "#77fd9070",
+            "#65ff82a1",
+            "#72ff8dae",
+            "#89ff9fcd",
+            "#ceffceef",
+        ],
+    }
+}
+
+fn lime() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Lime,
+        light: [
+            "#fcfdfaff",
+            "#f8faf3ff",
+            "#eef6d6ff",
+            "#e2f0bdff",
+            "#d3e7a6ff",
+            "#c2da91ff",
+            "#abc978ff",
+            "#8db654ff",
+            "#bdee63ff",
+            "#b0e64cff",
+            "#5c7c2fff",
+            "#37401cff",
+        ],
+        light_alpha: [
+            "#66990005",
+            "#6b95000c",
+            "#96c80029",
+            "#8fc60042",
+            "#81bb0059",
+            "#72aa006e",
+            "#61990087",
+            "#559200ab",
+            "#93e4009c",
+            "#8fdc00b3",
+            "#375f00d0",
+            "#1e2900e3",
+        ],
+        dark: [
+            "#11130cff",
+            "#151a10ff",
+            "#1f2917ff",
+            "#29371dff",
+            "#334423ff",
+            "#3d522aff",
+            "#496231ff",
+            "#577538ff",
+            "#bdee63ff",
+            "#d4ff70ff",
+            "#bde56cff",
+            "#e3f7baff",
+        ],
+        dark_alpha: [
+            "#11bb0003",
+            "#78f7000a",
+            "#9bfd4c1a",
+            "#a7fe5c29",
+            "#affe6537",
+            "#b2fe6d46",
+            "#b6ff6f57",
+            "#b6fd6d6c",
+            "#caff69ed",
+            "#d4ff70ff",
+            "#d1fe77e4",
+            "#e9febff7",
+        ],
+    }
+}
+
+fn mint() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Mint,
+        light: [
+            "#f9fefdff",
+            "#f2fbf9ff",
+            "#ddf9f2ff",
+            "#c8f4e9ff",
+            "#b3ecdeff",
+            "#9ce0d0ff",
+            "#7ecfbdff",
+            "#4cbba5ff",
+            "#86ead4ff",
+            "#7de0cbff",
+            "#027864ff",
+            "#16433cff",
+        ],
+        light_alpha: [
+            "#00d5aa06",
+            "#00b18a0d",
+            "#00d29e22",
+            "#00cc9937",
+            "#00c0914c",
+            "#00b08663",
+            "#00a17d81",
+            "#009e7fb3",
+            "#00d3a579",
+            "#00c39982",
+            "#007763fd",
+            "#00312ae9",
+        ],
+        dark: [
+            "#0e1515ff",
+            "#0f1b1bff",
+            "#092c2bff",
+            "#003a38ff",
+            "#004744ff",
+            "#105650ff",
+            "#1e685fff",
+            "#277f70ff",
+            "#86ead4ff",
+            "#a8f5e5ff",
+            "#58d5baff",
+            "#c4f5e1ff",
+        ],
+        dark_alpha: [
+            "#00dede05",
+            "#00f9f90b",
+            "#00fff61d",
+            "#00fff42c",
+            "#00fff23a",
+            "#0effeb4a",
+            "#34fde55e",
+            "#41ffdf76",
+            "#92ffe7e9",
+            "#aefeedf5",
+            "#67ffded2",
+            "#cbfee9f5",
+        ],
+    }
+}
+
+fn sky() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Sky,
+        light: [
+            "#f9feffff",
+            "#f1fafdff",
+            "#e1f6fdff",
+            "#d1f0faff",
+            "#bee7f5ff",
+            "#a9daedff",
+            "#8dcae3ff",
+            "#60b3d7ff",
+            "#7ce2feff",
+            "#74daf8ff",
+            "#00749eff",
+            "#1d3e56ff",
+        ],
+        light_alpha: [
+            "#00d5ff06",
+            "#00a4db0e",
+            "#00b3ee1e",
+            "#00ace42e",
+            "#00a1d841",
+            "#0092ca56",
+            "#0089c172",
+            "#0085bf9f",
+            "#00c7fe83",
+            "#00bcf38b",
+            "#00749eff",
+            "#002540e2",
+        ],
+        dark: [
+            "#0d141fff",
+            "#111a27ff",
+            "#112840ff",
+            "#113555ff",
+            "#154467ff",
+            "#1b537bff",
+            "#1f6692ff",
+            "#197caeff",
+            "#7ce2feff",
+            "#a8eeffff",
+            "#75c7f0ff",
+            "#c2f3ffff",
+        ],
+        dark_alpha: [
+            "#0044ff0f",
+            "#1171fb18",
+            "#1184fc33",
+            "#128fff49",
+            "#1c9dfd5d",
+            "#28a5ff72",
+            "#2badfe8b",
+            "#1db2fea9",
+            "#7ce3fffe",
+            "#a8eeffff",
+            "#7cd3ffef",
+            "#c2f3ffff",
+        ],
+    }
+}
+
+fn black() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::Black,
+        light: [
+            "#0000000d",
+            "#0000001a",
+            "#00000026",
+            "#00000033",
+            "#0000004d",
+            "#00000066",
+            "#00000080",
+            "#00000099",
+            "#000000b3",
+            "#000000cc",
+            "#000000e6",
+            "#000000f2",
+        ],
+        light_alpha: [
+            "#0000000d",
+            "#0000001a",
+            "#00000026",
+            "#00000033",
+            "#0000004d",
+            "#00000066",
+            "#00000080",
+            "#00000099",
+            "#000000b3",
+            "#000000cc",
+            "#000000e6",
+            "#000000f2",
+        ],
+        dark: [
+            "#0000000d",
+            "#0000001a",
+            "#00000026",
+            "#00000033",
+            "#0000004d",
+            "#00000066",
+            "#00000080",
+            "#00000099",
+            "#000000b3",
+            "#000000cc",
+            "#000000e6",
+            "#000000f2",
+        ],
+        dark_alpha: [
+            "#0000000d",
+            "#0000001a",
+            "#00000026",
+            "#00000033",
+            "#0000004d",
+            "#00000066",
+            "#00000080",
+            "#00000099",
+            "#000000b3",
+            "#000000cc",
+            "#000000e6",
+            "#000000f2",
+        ],
+    }
+}
+
+fn white() -> DefaultColorScaleSet {
+    DefaultColorScaleSet {
+        scale: ColorScaleName::White,
+        light: [
+            "#ffffff0d",
+            "#ffffff1a",
+            "#ffffff26",
+            "#ffffff33",
+            "#ffffff4d",
+            "#ffffff66",
+            "#ffffff80",
+            "#ffffff99",
+            "#ffffffb3",
+            "#ffffffcc",
+            "#ffffffe6",
+            "#fffffff2",
+        ],
+        light_alpha: [
+            "#ffffff0d",
+            "#ffffff1a",
+            "#ffffff26",
+            "#ffffff33",
+            "#ffffff4d",
+            "#ffffff66",
+            "#ffffff80",
+            "#ffffff99",
+            "#ffffffb3",
+            "#ffffffcc",
+            "#ffffffe6",
+            "#fffffff2",
+        ],
+        dark: [
+            "#ffffff0d",
+            "#ffffff1a",
+            "#ffffff26",
+            "#ffffff33",
+            "#ffffff4d",
+            "#ffffff66",
+            "#ffffff80",
+            "#ffffff99",
+            "#ffffffb3",
+            "#ffffffcc",
+            "#ffffffe6",
+            "#fffffff2",
+        ],
+        dark_alpha: [
+            "#ffffff0d",
+            "#ffffff1a",
+            "#ffffff26",
+            "#ffffff33",
+            "#ffffff4d",
+            "#ffffff66",
+            "#ffffff80",
+            "#ffffff99",
+            "#ffffffb3",
+            "#ffffffcc",
+            "#ffffffe6",
+            "#fffffff2",
+        ],
+    }
+}

crates/theme2/src/scale.rs 🔗

@@ -0,0 +1,164 @@
+use gpui2::{AppContext, Hsla};
+use indexmap::IndexMap;
+
+use crate::{theme, Appearance};
+
+#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
+pub enum ColorScaleName {
+    Gray,
+    Mauve,
+    Slate,
+    Sage,
+    Olive,
+    Sand,
+    Gold,
+    Bronze,
+    Brown,
+    Yellow,
+    Amber,
+    Orange,
+    Tomato,
+    Red,
+    Ruby,
+    Crimson,
+    Pink,
+    Plum,
+    Purple,
+    Violet,
+    Iris,
+    Indigo,
+    Blue,
+    Cyan,
+    Teal,
+    Jade,
+    Green,
+    Grass,
+    Lime,
+    Mint,
+    Sky,
+    Black,
+    White,
+}
+
+impl std::fmt::Display for ColorScaleName {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        write!(
+            f,
+            "{}",
+            match self {
+                Self::Gray => "Gray",
+                Self::Mauve => "Mauve",
+                Self::Slate => "Slate",
+                Self::Sage => "Sage",
+                Self::Olive => "Olive",
+                Self::Sand => "Sand",
+                Self::Gold => "Gold",
+                Self::Bronze => "Bronze",
+                Self::Brown => "Brown",
+                Self::Yellow => "Yellow",
+                Self::Amber => "Amber",
+                Self::Orange => "Orange",
+                Self::Tomato => "Tomato",
+                Self::Red => "Red",
+                Self::Ruby => "Ruby",
+                Self::Crimson => "Crimson",
+                Self::Pink => "Pink",
+                Self::Plum => "Plum",
+                Self::Purple => "Purple",
+                Self::Violet => "Violet",
+                Self::Iris => "Iris",
+                Self::Indigo => "Indigo",
+                Self::Blue => "Blue",
+                Self::Cyan => "Cyan",
+                Self::Teal => "Teal",
+                Self::Jade => "Jade",
+                Self::Green => "Green",
+                Self::Grass => "Grass",
+                Self::Lime => "Lime",
+                Self::Mint => "Mint",
+                Self::Sky => "Sky",
+                Self::Black => "Black",
+                Self::White => "White",
+            }
+        )
+    }
+}
+
+pub type ColorScale = [Hsla; 12];
+
+pub type ColorScales = IndexMap<ColorScaleName, ColorScaleSet>;
+
+/// A one-based step in a [`ColorScale`].
+pub type ColorScaleStep = usize;
+
+pub struct ColorScaleSet {
+    name: ColorScaleName,
+    light: ColorScale,
+    dark: ColorScale,
+    light_alpha: ColorScale,
+    dark_alpha: ColorScale,
+}
+
+impl ColorScaleSet {
+    pub fn new(
+        name: ColorScaleName,
+        light: ColorScale,
+        light_alpha: ColorScale,
+        dark: ColorScale,
+        dark_alpha: ColorScale,
+    ) -> Self {
+        Self {
+            name,
+            light,
+            light_alpha,
+            dark,
+            dark_alpha,
+        }
+    }
+
+    pub fn name(&self) -> String {
+        self.name.to_string()
+    }
+
+    pub fn light(&self, step: ColorScaleStep) -> Hsla {
+        self.light[step - 1]
+    }
+
+    pub fn light_alpha(&self, step: ColorScaleStep) -> Hsla {
+        self.light_alpha[step - 1]
+    }
+
+    pub fn dark(&self, step: ColorScaleStep) -> Hsla {
+        self.dark[step - 1]
+    }
+
+    pub fn dark_alpha(&self, step: ColorScaleStep) -> Hsla {
+        self.dark[step - 1]
+    }
+
+    fn current_appearance(cx: &AppContext) -> Appearance {
+        let theme = theme(cx);
+        if theme.metadata.is_light {
+            Appearance::Light
+        } else {
+            Appearance::Dark
+        }
+    }
+
+    pub fn step(&self, cx: &AppContext, step: ColorScaleStep) -> Hsla {
+        let appearance = Self::current_appearance(cx);
+
+        match appearance {
+            Appearance::Light => self.light(step),
+            Appearance::Dark => self.dark(step),
+        }
+    }
+
+    pub fn step_alpha(&self, cx: &AppContext, step: ColorScaleStep) -> Hsla {
+        let appearance = Self::current_appearance(cx);
+        match appearance {
+            Appearance::Light => self.light_alpha(step),
+            Appearance::Dark => self.dark_alpha(step),
+        }
+    }
+}

crates/theme2/src/theme2.rs 🔗

@@ -1,14 +1,24 @@
+mod default;
 mod registry;
+mod scale;
 mod settings;
 mod themes;
 
+pub use default::*;
 pub use registry::*;
+pub use scale::*;
 pub use settings::*;
 
 use gpui2::{AppContext, HighlightStyle, Hsla, SharedString};
 use settings2::Settings;
 use std::sync::Arc;
 
+#[derive(Debug, Clone, PartialEq)]
+pub enum Appearance {
+    Light,
+    Dark,
+}
+
 pub fn init(cx: &mut AppContext) {
     cx.set_global(ThemeRegistry::default());
     ThemeSettings::register(cx);