-module(etui@theme).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/etui/theme.gleam").
-export([normal/1, selection/1, accent_style/1, border_style/1, title_style/1, muted_style/1, error_style/1, warning_style/1, success_style/1, info_style/1, statusbar_style/1, dark/0, light/0, dracula/0, nord/0, catppuccin_mocha/0, catppuccin_latte/0, monokai/0, solarized_dark/0, gruvbox_dark/0, tokyo_night/0, with_accent/2, with_selection/3, with_statusbar/3, with_base/3]).
-export_type([theme/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type theme() :: {theme,
etui@style:color(),
etui@style:color(),
etui@style:color(),
etui@style:color(),
etui@style:color(),
etui@style:color(),
etui@style:color(),
etui@style:color(),
etui@style:color(),
etui@style:color(),
etui@style:color(),
etui@style:color(),
etui@style:color(),
etui@style:color()}.
-file("src/etui/theme.gleam", 102).
?DOC(" Normal text: fg on bg.\n").
-spec normal(theme()) -> etui@style:style().
normal(T) ->
{style, erlang:element(3, T), erlang:element(2, T), etui@style:none()}.
-file("src/etui/theme.gleam", 107).
?DOC(" Selected item: selection_fg on selection_bg.\n").
-spec selection(theme()) -> etui@style:style().
selection(T) ->
{style, erlang:element(7, T), erlang:element(6, T), etui@style:none()}.
-file("src/etui/theme.gleam", 112).
?DOC(" Accent text: accent on bg.\n").
-spec accent_style(theme()) -> etui@style:style().
accent_style(T) ->
{style, erlang:element(8, T), erlang:element(2, T), etui@style:none()}.
-file("src/etui/theme.gleam", 117).
?DOC(" Border color: border on bg.\n").
-spec border_style(theme()) -> etui@style:style().
border_style(T) ->
{style, erlang:element(4, T), erlang:element(2, T), etui@style:none()}.
-file("src/etui/theme.gleam", 122).
?DOC(" Title color: title on bg.\n").
-spec title_style(theme()) -> etui@style:style().
title_style(T) ->
{style, erlang:element(5, T), erlang:element(2, T), etui@style:none()}.
-file("src/etui/theme.gleam", 127).
?DOC(" Muted/secondary text: muted on bg.\n").
-spec muted_style(theme()) -> etui@style:style().
muted_style(T) ->
{style, erlang:element(9, T), erlang:element(2, T), etui@style:none()}.
-file("src/etui/theme.gleam", 132).
?DOC(" Error text: error color on bg, bold.\n").
-spec error_style(theme()) -> etui@style:style().
error_style(T) ->
{style, erlang:element(10, T), erlang:element(2, T), etui@style:bold()}.
-file("src/etui/theme.gleam", 137).
?DOC(" Warning text: warning color on bg.\n").
-spec warning_style(theme()) -> etui@style:style().
warning_style(T) ->
{style, erlang:element(11, T), erlang:element(2, T), etui@style:none()}.
-file("src/etui/theme.gleam", 142).
?DOC(" Success text: success color on bg.\n").
-spec success_style(theme()) -> etui@style:style().
success_style(T) ->
{style, erlang:element(12, T), erlang:element(2, T), etui@style:none()}.
-file("src/etui/theme.gleam", 147).
?DOC(" Info text: info color on bg.\n").
-spec info_style(theme()) -> etui@style:style().
info_style(T) ->
{style, erlang:element(13, T), erlang:element(2, T), etui@style:none()}.
-file("src/etui/theme.gleam", 152).
?DOC(" Status bar: statusbar_fg on statusbar_bg.\n").
-spec statusbar_style(theme()) -> etui@style:style().
statusbar_style(T) ->
{style, erlang:element(15, T), erlang:element(14, T), etui@style:none()}.
-file("src/etui/theme.gleam", 161).
?DOC(
" Generic dark theme using ANSI 16-color palette.\n"
" Works on every terminal, even without true-color support.\n"
).
-spec dark() -> theme().
dark() ->
{theme,
default,
default,
{indexed, 8},
{indexed, 15},
{indexed, 4},
{indexed, 15},
{indexed, 12},
{indexed, 8},
{indexed, 9},
{indexed, 11},
{indexed, 10},
{indexed, 14},
{indexed, 0},
{indexed, 15}}.
-file("src/etui/theme.gleam", 181).
?DOC(" Generic light theme using ANSI 16-color palette.\n").
-spec light() -> theme().
light() ->
{theme,
default,
default,
{indexed, 7},
{indexed, 0},
{indexed, 12},
{indexed, 15},
{indexed, 4},
{indexed, 7},
{indexed, 1},
{indexed, 3},
{indexed, 2},
{indexed, 6},
{indexed, 7},
{indexed, 0}}.
-file("src/etui/theme.gleam", 202).
?DOC(
" Dracula, dark purple palette.\n"
" Original palette: https://draculatheme.com\n"
).
-spec dracula() -> theme().
dracula() ->
{theme,
{rgb, 40, 42, 54},
{rgb, 248, 248, 242},
{rgb, 98, 114, 164},
{rgb, 139, 233, 253},
{rgb, 68, 71, 90},
{rgb, 248, 248, 242},
{rgb, 189, 147, 249},
{rgb, 98, 114, 164},
{rgb, 255, 85, 85},
{rgb, 255, 184, 108},
{rgb, 80, 250, 123},
{rgb, 139, 233, 253},
{rgb, 33, 34, 44},
{rgb, 248, 248, 242}}.
-file("src/etui/theme.gleam", 223).
?DOC(
" Nord, arctic, north-bluish dark palette.\n"
" Original palette: https://www.nordtheme.com\n"
).
-spec nord() -> theme().
nord() ->
{theme,
{rgb, 46, 52, 64},
{rgb, 216, 222, 233},
{rgb, 76, 86, 106},
{rgb, 136, 192, 208},
{rgb, 67, 76, 94},
{rgb, 236, 239, 244},
{rgb, 129, 161, 193},
{rgb, 76, 86, 106},
{rgb, 191, 97, 106},
{rgb, 235, 203, 139},
{rgb, 163, 190, 140},
{rgb, 143, 188, 187},
{rgb, 36, 41, 51},
{rgb, 216, 222, 233}}.
-file("src/etui/theme.gleam", 244).
?DOC(
" Catppuccin Mocha, warm pastel dark palette.\n"
" Original palette: https://catppuccin.com\n"
).
-spec catppuccin_mocha() -> theme().
catppuccin_mocha() ->
{theme,
{rgb, 30, 30, 46},
{rgb, 205, 214, 244},
{rgb, 88, 91, 112},
{rgb, 166, 227, 161},
{rgb, 69, 71, 90},
{rgb, 205, 214, 244},
{rgb, 137, 180, 250},
{rgb, 108, 112, 134},
{rgb, 243, 139, 168},
{rgb, 249, 226, 175},
{rgb, 166, 227, 161},
{rgb, 137, 220, 235},
{rgb, 24, 24, 37},
{rgb, 205, 214, 244}}.
-file("src/etui/theme.gleam", 265).
?DOC(
" Catppuccin Latte, warm pastel light palette.\n"
" Original palette: https://catppuccin.com\n"
).
-spec catppuccin_latte() -> theme().
catppuccin_latte() ->
{theme,
{rgb, 239, 241, 245},
{rgb, 76, 79, 105},
{rgb, 172, 176, 190},
{rgb, 64, 160, 43},
{rgb, 188, 192, 204},
{rgb, 76, 79, 105},
{rgb, 30, 102, 245},
{rgb, 172, 176, 190},
{rgb, 210, 15, 57},
{rgb, 223, 142, 29},
{rgb, 64, 160, 43},
{rgb, 4, 165, 229},
{rgb, 204, 208, 218},
{rgb, 76, 79, 105}}.
-file("src/etui/theme.gleam", 286).
?DOC(
" Monokai, vibrant dark palette.\n"
" Inspired by the Monokai color scheme.\n"
).
-spec monokai() -> theme().
monokai() ->
{theme,
{rgb, 39, 40, 34},
{rgb, 248, 248, 242},
{rgb, 117, 113, 94},
{rgb, 166, 226, 46},
{rgb, 73, 72, 62},
{rgb, 248, 248, 242},
{rgb, 102, 217, 239},
{rgb, 117, 113, 94},
{rgb, 249, 38, 114},
{rgb, 253, 151, 31},
{rgb, 166, 226, 46},
{rgb, 102, 217, 239},
{rgb, 30, 30, 27},
{rgb, 248, 248, 242}}.
-file("src/etui/theme.gleam", 307).
?DOC(
" Solarized Dark, precision dark palette.\n"
" Original palette by Ethan Schoonover.\n"
).
-spec solarized_dark() -> theme().
solarized_dark() ->
{theme,
{rgb, 0, 43, 54},
{rgb, 131, 148, 150},
{rgb, 88, 110, 117},
{rgb, 38, 139, 210},
{rgb, 7, 54, 66},
{rgb, 147, 161, 161},
{rgb, 38, 139, 210},
{rgb, 88, 110, 117},
{rgb, 220, 50, 47},
{rgb, 181, 137, 0},
{rgb, 133, 153, 0},
{rgb, 42, 161, 152},
{rgb, 0, 26, 33},
{rgb, 131, 148, 150}}.
-file("src/etui/theme.gleam", 328).
?DOC(
" Gruvbox Dark, retro groove dark palette.\n"
" Inspired by the Gruvbox color scheme.\n"
).
-spec gruvbox_dark() -> theme().
gruvbox_dark() ->
{theme,
{rgb, 29, 32, 33},
{rgb, 235, 219, 178},
{rgb, 80, 73, 69},
{rgb, 184, 187, 38},
{rgb, 60, 56, 54},
{rgb, 235, 219, 178},
{rgb, 215, 153, 33},
{rgb, 102, 92, 84},
{rgb, 251, 73, 52},
{rgb, 250, 189, 47},
{rgb, 184, 187, 38},
{rgb, 131, 165, 152},
{rgb, 20, 22, 23},
{rgb, 235, 219, 178}}.
-file("src/etui/theme.gleam", 349).
?DOC(
" Tokyo Night, dark cool-blue palette.\n"
" Inspired by the Tokyo Night color scheme.\n"
).
-spec tokyo_night() -> theme().
tokyo_night() ->
{theme,
{rgb, 26, 27, 38},
{rgb, 169, 177, 214},
{rgb, 65, 72, 104},
{rgb, 122, 162, 247},
{rgb, 41, 46, 66},
{rgb, 192, 202, 245},
{rgb, 187, 154, 247},
{rgb, 86, 95, 137},
{rgb, 247, 118, 142},
{rgb, 224, 175, 104},
{rgb, 158, 206, 106},
{rgb, 125, 207, 255},
{rgb, 22, 22, 30},
{rgb, 169, 177, 214}}.
-file("src/etui/theme.gleam", 378).
?DOC(
" Override individual fields on an existing theme.\n"
" Use Gleam's record update syntax directly:\n"
" ```gleam\n"
" let my = Theme(..theme.nord(), accent: style.Rgb(255, 165, 0))\n"
" ```\n"
" These helpers cover common single-field tweaks.\n"
" Replace the accent color.\n"
).
-spec with_accent(theme(), etui@style:color()) -> theme().
with_accent(T, Color) ->
{theme,
erlang:element(2, T),
erlang:element(3, T),
erlang:element(4, T),
erlang:element(5, T),
erlang:element(6, T),
erlang:element(7, T),
Color,
erlang:element(9, T),
erlang:element(10, T),
erlang:element(11, T),
erlang:element(12, T),
erlang:element(13, T),
erlang:element(14, T),
erlang:element(15, T)}.
-file("src/etui/theme.gleam", 383).
?DOC(" Replace the selection colors.\n").
-spec with_selection(theme(), etui@style:color(), etui@style:color()) -> theme().
with_selection(T, Bg, Fg) ->
{theme,
erlang:element(2, T),
erlang:element(3, T),
erlang:element(4, T),
erlang:element(5, T),
Bg,
Fg,
erlang:element(8, T),
erlang:element(9, T),
erlang:element(10, T),
erlang:element(11, T),
erlang:element(12, T),
erlang:element(13, T),
erlang:element(14, T),
erlang:element(15, T)}.
-file("src/etui/theme.gleam", 388).
?DOC(" Replace the status bar colors.\n").
-spec with_statusbar(theme(), etui@style:color(), etui@style:color()) -> theme().
with_statusbar(T, Bg, Fg) ->
{theme,
erlang:element(2, T),
erlang:element(3, T),
erlang:element(4, T),
erlang:element(5, T),
erlang:element(6, T),
erlang:element(7, T),
erlang:element(8, T),
erlang:element(9, T),
erlang:element(10, T),
erlang:element(11, T),
erlang:element(12, T),
erlang:element(13, T),
Bg,
Fg}.
-file("src/etui/theme.gleam", 393).
?DOC(" Replace main bg/fg.\n").
-spec with_base(theme(), etui@style:color(), etui@style:color()) -> theme().
with_base(T, Bg, Fg) ->
{theme,
Bg,
Fg,
erlang:element(4, T),
erlang:element(5, T),
erlang:element(6, T),
erlang:element(7, T),
erlang:element(8, T),
erlang:element(9, T),
erlang:element(10, T),
erlang:element(11, T),
erlang:element(12, T),
erlang:element(13, T),
erlang:element(14, T),
erlang:element(15, T)}.