From 27add127875353c94bdf1df0bc17eea11666e774 Mon Sep 17 00:00:00 2001 From: mahcodes Date: Sat, 18 May 2024 11:35:25 +0300 Subject: [PATCH] fix!: https://github.com/catppuccin/catppuccin/issues/2368 - Update the code generation to use a pinned version of the palette JSON by using a pinned commit hash - Update the LICENSE to be Catppuccin - update usages of `Flavour` to `Flavor` and `Colour` to `Color` --- LICENSE | 2 +- codegen/LICENSE | 2 +- codegen/src/catppuccin.gleam | 84 +++++++++++-------- gleam.toml | 2 +- src/catppuccin.gleam | 155 +++++++++++++++++++---------------- 5 files changed, 139 insertions(+), 106 deletions(-) diff --git a/LICENSE b/LICENSE index 3204236..306622e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 MAH +Copyright (c) 2024 Catppuccin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/codegen/LICENSE b/codegen/LICENSE index 3204236..306622e 100644 --- a/codegen/LICENSE +++ b/codegen/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 MAH +Copyright (c) 2024 Catppuccin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/codegen/src/catppuccin.gleam b/codegen/src/catppuccin.gleam index 85179a9..f71b123 100644 --- a/codegen/src/catppuccin.gleam +++ b/codegen/src/catppuccin.gleam @@ -56,17 +56,17 @@ pub type Colors { ) } -pub type Flavour { - Flavour(name: String, order: Int, dark: Bool, colors: Colors) +pub type Flavor { + Flavor(name: String, emoji: String, order: Int, dark: Bool, colors: Colors) } pub type Palette { - Palette(latte: Flavour, frappe: Flavour, macchiato: Flavour, mocha: Flavour) + Palette(latte: Flavor, frappe: Flavor, macchiato: Flavor, mocha: Flavor) } fn fetch_palette() -> String { let url = - "https://raw.githubusercontent.com/catppuccin/palette/main/palette.json" + "https://raw.githubusercontent.com/catppuccin/palette/d751858ffffbff1ed19064ceba69d2a5515ec2bb/palette.json" let assert Ok(req) = request.to(url) let assert Ok(resp) = httpc.send(req) resp.body @@ -128,10 +128,11 @@ fn parse_palette(palette_string: String) -> Palette { field("mantle", color_decoder), field("crust", color_decoder), ) - let flavour_decoder = - dynamic.decode4( - Flavour, + let flavor_decoder = + dynamic.decode5( + Flavor, field("name", string), + field("emoji", string), field("order", int), field("dark", bool), field("colors", colors_decoder), @@ -139,10 +140,10 @@ fn parse_palette(palette_string: String) -> Palette { let palette_decoder = dynamic.decode4( Palette, - field("latte", flavour_decoder), - field("frappe", flavour_decoder), - field("macchiato", flavour_decoder), - field("mocha", flavour_decoder), + field("latte", flavor_decoder), + field("frappe", flavor_decoder), + field("macchiato", flavor_decoder), + field("mocha", flavor_decoder), ) let assert Ok(palette) = json.decode(palette_string, palette_decoder) @@ -171,10 +172,10 @@ fn generate_catppuccin(palette: Palette) { [ template_header(), template_opaque_colors(), - template_flavour(palette.latte, "latte"), - template_flavour(palette.frappe, "frappe"), - template_flavour(palette.macchiato, "macchiato"), - template_flavour(palette.mocha, "mocha"), + template_flavor(palette.latte, "latte"), + template_flavor(palette.frappe, "frappe"), + template_flavor(palette.macchiato, "macchiato"), + template_flavor(palette.mocha, "mocha"), ] |> string.concat @@ -188,8 +189,8 @@ fn template_header() -> String { import gleam/result import gleam_community/colour -pub opaque type Flavour { - Flavour(name: String, order: Int, dark: Bool, colors: Colors) +pub opaque type Flavor { + Flavor(name: String, emoji: String, order: Int, dark: Bool, colors: Colors) } type Colors { @@ -224,19 +225,28 @@ type Colors { } pub opaque type Color { - Color(name: String, order: Int, accent: Bool, colour: Result(colour.Colour, Nil)) + Color( + name: String, + order: Int, + accent: Bool, + colour: Result(colour.Colour, Nil), + ) +} + +pub fn flavor_name(flavor: Flavor) -> String { + flavor.name } -pub fn flavour_name(flavour: Flavour) -> String { - flavour.name +pub fn emoji(flavor: Flavor) -> String { + flavor.emoji } -pub fn flavour_order(flavour: Flavour) -> Int { - flavour.order +pub fn flavor_order(flavor: Flavor) -> Int { + flavor.order } -pub fn dark(flavour: Flavour) -> Bool { - flavour.dark +pub fn dark(flavor: Flavor) -> Bool { + flavor.dark } pub fn color_name(color: Color) -> String { @@ -257,15 +267,20 @@ pub fn accent(color: Color) -> Bool { pub fn to_colour(color: Color) -> colour.Colour { color.colour |> result.unwrap(colour.black) -}" } -fn template_flavour(flavour: Flavour, key: String) -> String { +/// alias for `to_colour` +/// +pub const to_color: fn(Color) -> colour.Colour = to_colour" +} + +fn template_flavor(flavor: Flavor, key: String) -> String { let assert Ok(glormatted) = "\n -pub fn {key}() -> Flavour { - Flavour( +pub fn {key}() -> Flavor { + Flavor( name: \"{name}\", + emoji: \"{emoji}\", order: {order}, dark: {dark}, colors: Colors({colors} @@ -273,10 +288,11 @@ pub fn {key}() -> Flavour { ) }" |> replace("key", key) - |> then("name", flavour.name) - |> then("order", int.to_string(flavour.order)) - |> then("dark", to_string(flavour.dark)) - |> then("colors", template_colors(flavour.colors)) + |> then("name", flavor.name) + |> then("emoji", flavor.emoji) + |> then("order", int.to_string(flavor.order)) + |> then("dark", to_string(flavor.dark)) + |> then("colors", template_colors(flavor.colors)) glormatted } @@ -335,8 +351,8 @@ fn template_color(color: Color, key: String) -> String { fn template_opaque_color(key: String) -> String { let assert Ok(glormatted) = "\n -pub fn {key}(flavour: Flavour) -> Color { - flavour.colors.{key} +pub fn {key}(flavor: Flavor) -> Color { + flavor.colors.{key} }" |> replace("key", key) glormatted diff --git a/gleam.toml b/gleam.toml index d1177e9..8a03b26 100644 --- a/gleam.toml +++ b/gleam.toml @@ -1,5 +1,5 @@ name = "catppuccin" -version = "2.0.1" +version = "3.0.0" description = "⭐️ Soothing pastel library for Gleam" licences = ["MIT"] diff --git a/src/catppuccin.gleam b/src/catppuccin.gleam index 5ad42e4..ad88ac2 100644 --- a/src/catppuccin.gleam +++ b/src/catppuccin.gleam @@ -4,8 +4,8 @@ import gleam/result import gleam_community/colour -pub opaque type Flavour { - Flavour(name: String, order: Int, dark: Bool, colors: Colors) +pub opaque type Flavor { + Flavor(name: String, emoji: String, order: Int, dark: Bool, colors: Colors) } type Colors { @@ -40,19 +40,28 @@ type Colors { } pub opaque type Color { - Color(name: String, order: Int, accent: Bool, colour: Result(colour.Colour, Nil)) + Color( + name: String, + order: Int, + accent: Bool, + colour: Result(colour.Colour, Nil), + ) +} + +pub fn flavor_name(flavor: Flavor) -> String { + flavor.name } -pub fn flavour_name(flavour: Flavour) -> String { - flavour.name +pub fn emoji(flavor: Flavor) -> String { + flavor.emoji } -pub fn flavour_order(flavour: Flavour) -> Int { - flavour.order +pub fn flavor_order(flavor: Flavor) -> Int { + flavor.order } -pub fn dark(flavour: Flavour) -> Bool { - flavour.dark +pub fn dark(flavor: Flavor) -> Bool { + flavor.dark } pub fn color_name(color: Color) -> String { @@ -75,113 +84,118 @@ pub fn to_colour(color: Color) -> colour.Colour { |> result.unwrap(colour.black) } -pub fn rosewater(flavour: Flavour) -> Color { - flavour.colors.rosewater +/// alias for `to_colour` +/// +pub const to_color: fn(Color) -> colour.Colour = to_colour + +pub fn rosewater(flavor: Flavor) -> Color { + flavor.colors.rosewater } -pub fn flamingo(flavour: Flavour) -> Color { - flavour.colors.flamingo +pub fn flamingo(flavor: Flavor) -> Color { + flavor.colors.flamingo } -pub fn pink(flavour: Flavour) -> Color { - flavour.colors.pink +pub fn pink(flavor: Flavor) -> Color { + flavor.colors.pink } -pub fn mauve(flavour: Flavour) -> Color { - flavour.colors.mauve +pub fn mauve(flavor: Flavor) -> Color { + flavor.colors.mauve } -pub fn red(flavour: Flavour) -> Color { - flavour.colors.red +pub fn red(flavor: Flavor) -> Color { + flavor.colors.red } -pub fn maroon(flavour: Flavour) -> Color { - flavour.colors.maroon +pub fn maroon(flavor: Flavor) -> Color { + flavor.colors.maroon } -pub fn peach(flavour: Flavour) -> Color { - flavour.colors.peach +pub fn peach(flavor: Flavor) -> Color { + flavor.colors.peach } -pub fn yellow(flavour: Flavour) -> Color { - flavour.colors.yellow +pub fn yellow(flavor: Flavor) -> Color { + flavor.colors.yellow } -pub fn green(flavour: Flavour) -> Color { - flavour.colors.green +pub fn green(flavor: Flavor) -> Color { + flavor.colors.green } -pub fn teal(flavour: Flavour) -> Color { - flavour.colors.teal +pub fn teal(flavor: Flavor) -> Color { + flavor.colors.teal } -pub fn sky(flavour: Flavour) -> Color { - flavour.colors.sky +pub fn sky(flavor: Flavor) -> Color { + flavor.colors.sky } -pub fn sapphire(flavour: Flavour) -> Color { - flavour.colors.sapphire +pub fn sapphire(flavor: Flavor) -> Color { + flavor.colors.sapphire } -pub fn blue(flavour: Flavour) -> Color { - flavour.colors.blue +pub fn blue(flavor: Flavor) -> Color { + flavor.colors.blue } -pub fn lavender(flavour: Flavour) -> Color { - flavour.colors.lavender +pub fn lavender(flavor: Flavor) -> Color { + flavor.colors.lavender } -pub fn text(flavour: Flavour) -> Color { - flavour.colors.text +pub fn text(flavor: Flavor) -> Color { + flavor.colors.text } -pub fn subtext1(flavour: Flavour) -> Color { - flavour.colors.subtext1 +pub fn subtext1(flavor: Flavor) -> Color { + flavor.colors.subtext1 } -pub fn subtext0(flavour: Flavour) -> Color { - flavour.colors.subtext0 +pub fn subtext0(flavor: Flavor) -> Color { + flavor.colors.subtext0 } -pub fn overlay2(flavour: Flavour) -> Color { - flavour.colors.overlay2 +pub fn overlay2(flavor: Flavor) -> Color { + flavor.colors.overlay2 } -pub fn overlay1(flavour: Flavour) -> Color { - flavour.colors.overlay1 +pub fn overlay1(flavor: Flavor) -> Color { + flavor.colors.overlay1 } -pub fn overlay0(flavour: Flavour) -> Color { - flavour.colors.overlay0 +pub fn overlay0(flavor: Flavor) -> Color { + flavor.colors.overlay0 } -pub fn surface2(flavour: Flavour) -> Color { - flavour.colors.surface2 +pub fn surface2(flavor: Flavor) -> Color { + flavor.colors.surface2 } -pub fn surface1(flavour: Flavour) -> Color { - flavour.colors.surface1 +pub fn surface1(flavor: Flavor) -> Color { + flavor.colors.surface1 } -pub fn surface0(flavour: Flavour) -> Color { - flavour.colors.surface0 +pub fn surface0(flavor: Flavor) -> Color { + flavor.colors.surface0 } -pub fn base(flavour: Flavour) -> Color { - flavour.colors.base +pub fn base(flavor: Flavor) -> Color { + flavor.colors.base } -pub fn mantle(flavour: Flavour) -> Color { - flavour.colors.mantle +pub fn mantle(flavor: Flavor) -> Color { + flavor.colors.mantle } -pub fn crust(flavour: Flavour) -> Color { - flavour.colors.crust +pub fn crust(flavor: Flavor) -> Color { + flavor.colors.crust } -pub fn latte() -> Flavour { - Flavour( +pub fn latte() -> Flavor { + Flavor( name: "Latte", + emoji: "🌻", order: 0, dark: False, colors: Colors( @@ -345,9 +359,10 @@ pub fn latte() -> Flavour { ) } -pub fn frappe() -> Flavour { - Flavour( +pub fn frappe() -> Flavor { + Flavor( name: "Frappé", + emoji: "🪴", order: 1, dark: True, colors: Colors( @@ -511,9 +526,10 @@ pub fn frappe() -> Flavour { ) } -pub fn macchiato() -> Flavour { - Flavour( +pub fn macchiato() -> Flavor { + Flavor( name: "Macchiato", + emoji: "🌺", order: 2, dark: True, colors: Colors( @@ -677,9 +693,10 @@ pub fn macchiato() -> Flavour { ) } -pub fn mocha() -> Flavour { - Flavour( +pub fn mocha() -> Flavor { + Flavor( name: "Mocha", + emoji: "🌿", order: 3, dark: True, colors: Colors(