code-moniker 0.4.0

Standalone CLI / linter for the code-moniker symbol graph: file and directory probes, project-wide architecture rules.
Documentation
use ratatui::style::Color;

use super::kinds::KindGroup;

#[derive(Clone, Copy, Debug)]
pub(in crate::ui) struct UiTheme {
	pub(in crate::ui) brand: Color,
	pub(in crate::ui) section: Color,
	pub(in crate::ui) status_label: Color,
	pub(in crate::ui) component_marker: Color,
	pub(in crate::ui) danger: Color,
	pub(in crate::ui) change_added: Color,
	pub(in crate::ui) change_modified: Color,
	pub(in crate::ui) focus: FocusTheme,
	pub(in crate::ui) kind: KindTheme,
	pub(in crate::ui) nav: NavTheme,
	pub(in crate::ui) panel: PanelTheme,
	pub(in crate::ui) scrollbar: ScrollbarTheme,
	pub(in crate::ui) search: SearchTheme,
	pub(in crate::ui) source: SourceTheme,
}

#[derive(Clone, Copy, Debug)]
pub(in crate::ui) struct FocusTheme {
	pub(in crate::ui) title: Color,
	pub(in crate::ui) border: Color,
}

#[derive(Clone, Copy, Debug)]
pub(in crate::ui) struct NavTheme {
	pub(in crate::ui) selected_bg: Color,
	pub(in crate::ui) marker: Color,
	pub(in crate::ui) twisty: Color,
	pub(in crate::ui) language: Color,
	pub(in crate::ui) directory: Color,
	pub(in crate::ui) file: Color,
	pub(in crate::ui) symbol: Color,
	pub(in crate::ui) visibility: Color,
	pub(in crate::ui) meta: Color,
}

#[derive(Clone, Copy, Debug)]
pub(in crate::ui) struct KindTheme {
	pub(in crate::ui) callable: Color,
	pub(in crate::ui) type_like: Color,
	pub(in crate::ui) value: Color,
	pub(in crate::ui) module: Color,
	pub(in crate::ui) reference: Color,
	pub(in crate::ui) meta: Color,
	pub(in crate::ui) fallback: Color,
}

impl KindTheme {
	pub(in crate::ui) fn color_for_group(self, group: KindGroup) -> Color {
		match group {
			KindGroup::Callable => self.callable,
			KindGroup::Type => self.type_like,
			KindGroup::Value => self.value,
			KindGroup::Namespace => self.module,
			KindGroup::Reference => self.reference,
			KindGroup::Meta => self.meta,
			KindGroup::Unknown => self.fallback,
		}
	}
}

#[derive(Clone, Copy, Debug)]
pub(in crate::ui) struct PanelTheme {
	pub(in crate::ui) section: Color,
	pub(in crate::ui) label: Color,
	pub(in crate::ui) value: Color,
	pub(in crate::ui) header: Color,
	pub(in crate::ui) muted: Color,
	pub(in crate::ui) separator: Color,
	pub(in crate::ui) selected_bg: Color,
	pub(in crate::ui) selected_focus_bg: Color,
}

#[derive(Clone, Copy, Debug)]
pub(in crate::ui) struct ScrollbarTheme {
	pub(in crate::ui) thumb: Color,
	pub(in crate::ui) track: Color,
}

#[derive(Clone, Copy, Debug)]
pub(in crate::ui) struct SearchTheme {
	pub(in crate::ui) background: Color,
	pub(in crate::ui) focus_bg: Color,
	pub(in crate::ui) label: Color,
	pub(in crate::ui) value: Color,
	pub(in crate::ui) muted: Color,
	pub(in crate::ui) active: Color,
}

#[derive(Clone, Copy, Debug)]
pub(in crate::ui) struct SourceTheme {
	pub(in crate::ui) active_fg: Color,
	pub(in crate::ui) active_bg: Color,
	pub(in crate::ui) active_indent_bg: Color,
	pub(in crate::ui) context_fg: Color,
	pub(in crate::ui) context_bg: Color,
	pub(in crate::ui) context_indent_bg: Color,
	pub(in crate::ui) active_number_fg: Color,
	pub(in crate::ui) context_number_fg: Color,
	pub(in crate::ui) gutter_fg: Color,
}

pub(in crate::ui) const THEME: UiTheme = UiTheme {
	brand: Color::Cyan,
	section: Color::Cyan,
	status_label: Color::Yellow,
	component_marker: Color::Rgb(107, 114, 128),
	danger: Color::Red,
	change_added: Color::Rgb(5, 150, 105),
	change_modified: Color::Rgb(217, 119, 6),
	focus: FocusTheme {
		title: Color::Rgb(37, 99, 235),
		border: Color::Rgb(37, 99, 235),
	},
	kind: KindTheme {
		callable: Color::Rgb(37, 99, 235),
		type_like: Color::Rgb(126, 34, 206),
		value: Color::Rgb(4, 120, 87),
		module: Color::Rgb(2, 132, 199),
		reference: Color::Rgb(194, 65, 12),
		meta: Color::Rgb(107, 114, 128),
		fallback: Color::Rgb(147, 51, 234),
	},
	nav: NavTheme {
		selected_bg: Color::Rgb(229, 231, 235),
		marker: Color::Yellow,
		twisty: Color::Rgb(107, 114, 128),
		language: Color::Cyan,
		directory: Color::Blue,
		file: Color::Rgb(17, 24, 39),
		symbol: Color::Rgb(17, 24, 39),
		visibility: Color::Rgb(180, 83, 9),
		meta: Color::Rgb(107, 114, 128),
	},
	panel: PanelTheme {
		section: Color::Rgb(8, 145, 178),
		label: Color::Rgb(107, 114, 128),
		value: Color::Rgb(17, 24, 39),
		header: Color::Rgb(55, 65, 81),
		muted: Color::Rgb(107, 114, 128),
		separator: Color::Rgb(209, 213, 219),
		selected_bg: Color::Rgb(243, 244, 246),
		selected_focus_bg: Color::Rgb(219, 234, 254),
	},
	scrollbar: ScrollbarTheme {
		thumb: Color::Rgb(156, 163, 175),
		track: Color::Rgb(229, 231, 235),
	},
	search: SearchTheme {
		background: Color::Rgb(243, 244, 246),
		focus_bg: Color::Rgb(219, 234, 254),
		label: Color::Rgb(75, 85, 99),
		value: Color::Rgb(17, 24, 39),
		muted: Color::Rgb(107, 114, 128),
		active: Color::Rgb(37, 99, 235),
	},
	source: SourceTheme {
		active_fg: Color::Rgb(31, 41, 55),
		active_bg: Color::Rgb(232, 240, 254),
		active_indent_bg: Color::Rgb(219, 234, 254),
		context_fg: Color::Rgb(75, 85, 99),
		context_bg: Color::Rgb(249, 250, 251),
		context_indent_bg: Color::Rgb(243, 244, 246),
		active_number_fg: Color::Rgb(37, 99, 235),
		context_number_fg: Color::Rgb(156, 163, 175),
		gutter_fg: Color::Rgb(209, 213, 219),
	},
};