use crate::tree::Color;
pub const BACKGROUND: Color = Color::token("background", 9, 9, 11, 255);
pub const FOREGROUND: Color = Color::token("foreground", 250, 250, 250, 255);
pub const CARD: Color = Color::token("card", 9, 9, 11, 255);
pub const CARD_FOREGROUND: Color = Color::token("card-foreground", 250, 250, 250, 255);
pub const POPOVER: Color = Color::token("popover", 9, 9, 11, 255);
pub const POPOVER_FOREGROUND: Color = Color::token("popover-foreground", 250, 250, 250, 255);
pub const PRIMARY: Color = Color::token("primary", 250, 250, 250, 255);
pub const PRIMARY_FOREGROUND: Color = Color::token("primary-foreground", 24, 24, 27, 255);
pub const SECONDARY: Color = Color::token("secondary", 39, 39, 42, 255);
pub const SECONDARY_FOREGROUND: Color = Color::token("secondary-foreground", 250, 250, 250, 255);
pub const MUTED: Color = Color::token("muted", 39, 39, 42, 255);
pub const MUTED_FOREGROUND: Color = Color::token("muted-foreground", 161, 161, 170, 255);
pub const ACCENT: Color = Color::token("accent", 39, 39, 42, 255);
pub const ACCENT_FOREGROUND: Color = Color::token("accent-foreground", 250, 250, 250, 255);
pub const DESTRUCTIVE: Color = Color::token("destructive", 127, 29, 29, 255);
pub const DESTRUCTIVE_FOREGROUND: Color =
Color::token("destructive-foreground", 250, 250, 250, 255);
pub const BORDER: Color = Color::token("border", 39, 39, 42, 255);
pub const INPUT: Color = Color::token("input", 39, 39, 42, 255);
pub const RING: Color = Color::token("ring", 212, 212, 216, 255);
pub const SUCCESS: Color = Color::token("success", 16, 185, 129, 255);
pub const SUCCESS_FOREGROUND: Color = Color::token("success-foreground", 5, 46, 22, 255);
pub const WARNING: Color = Color::token("warning", 245, 158, 11, 255);
pub const WARNING_FOREGROUND: Color = Color::token("warning-foreground", 69, 26, 3, 255);
pub const INFO: Color = Color::token("info", 59, 130, 246, 255);
pub const INFO_FOREGROUND: Color = Color::token("info-foreground", 239, 246, 255, 255);
pub const OVERLAY_SCRIM: Color = Color::token("overlay-scrim", 0, 0, 0, 204);
pub const LINK_FOREGROUND: Color = Color::token("link-foreground", 96, 165, 250, 255);
pub const SPACE_0: f32 = 0.0;
pub const SPACE_1: f32 = 4.0;
pub const SPACE_2: f32 = 8.0;
pub const SPACE_3: f32 = 12.0;
pub const SPACE_4: f32 = 16.0;
pub const SPACE_5: f32 = 20.0;
pub const SPACE_6: f32 = 24.0;
pub const SPACE_7: f32 = 28.0;
pub const SPACE_8: f32 = 32.0;
pub const SPACE_10: f32 = 40.0;
pub const SPACE_12: f32 = 48.0;
pub const SPACE_XS: f32 = SPACE_1;
pub const SPACE_SM: f32 = SPACE_2;
pub const SPACE_MD: f32 = SPACE_3;
pub const SPACE_LG: f32 = SPACE_4;
pub const SPACE_XL: f32 = SPACE_7;
pub const SIDEBAR_WIDTH: f32 = 256.0;
pub const SIDEBAR_WIDTH_MIN: f32 = 180.0;
pub const SIDEBAR_WIDTH_MAX: f32 = 480.0;
pub const RADIUS_SM: f32 = 4.0;
pub const RADIUS_MD: f32 = 8.0;
pub const RADIUS_LG: f32 = 12.0;
pub const RADIUS_PILL: f32 = 999.0;
pub const SCROLLBAR_THUMB_WIDTH: f32 = 6.0;
pub const SCROLLBAR_THUMB_WIDTH_ACTIVE: f32 = 10.0;
pub const SCROLLBAR_HITBOX_WIDTH: f32 = 14.0;
pub const SCROLLBAR_TRACK_INSET: f32 = 2.0;
pub const SCROLLBAR_THUMB_MIN_H: f32 = 24.0;
pub const SCROLLBAR_THUMB_FILL: Color = Color::token("scrollbar-thumb", 113, 113, 122, 120);
pub const SCROLLBAR_THUMB_FILL_ACTIVE: Color =
Color::token("scrollbar-thumb-active", 161, 161, 170, 220);
pub const SHADOW_SM: f32 = 4.0;
pub const SHADOW_MD: f32 = 12.0;
pub const SHADOW_LG: f32 = 24.0;
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct TypeToken {
pub size: f32,
pub line_height: f32,
}
pub const TEXT_XS: TypeToken = TypeToken {
size: 12.0,
line_height: 16.0,
};
pub const TEXT_SM: TypeToken = TypeToken {
size: 14.0,
line_height: 20.0,
};
pub const TEXT_BASE: TypeToken = TypeToken {
size: 16.0,
line_height: 24.0,
};
pub const TEXT_LG: TypeToken = TypeToken {
size: 18.0,
line_height: 28.0,
};
pub const TEXT_XL: TypeToken = TypeToken {
size: 20.0,
line_height: 28.0,
};
pub const TEXT_2XL: TypeToken = TypeToken {
size: 24.0,
line_height: 32.0,
};
pub const TEXT_3XL: TypeToken = TypeToken {
size: 30.0,
line_height: 36.0,
};
pub fn type_token_for_size(size: f32) -> Option<TypeToken> {
[
TEXT_XS, TEXT_SM, TEXT_BASE, TEXT_LG, TEXT_XL, TEXT_2XL, TEXT_3XL,
]
.into_iter()
.find(|token| (token.size - size).abs() < f32::EPSILON)
}
pub fn line_height_for_size(size: f32) -> f32 {
type_token_for_size(size)
.map(|token| token.line_height)
.unwrap_or((size * 1.3).ceil())
}
pub const ICON_XS: f32 = 14.0;
pub const ICON_SM: f32 = 16.0;
pub const ICON_MD: f32 = 20.0;
pub const PRESS_DARKEN: f32 = 0.12;
pub const HOVER_LIGHTEN: f32 = 0.06;
pub const STATE_FILL_HOVER_ALPHA: f32 = 0.40;
pub const STATE_FILL_PRESS_ALPHA: f32 = 0.25;
pub const DISABLED_ALPHA: f32 = 0.5;
pub const RING_WIDTH: f32 = 2.0;
pub const SELECTION_BG: Color = Color::token("selection-bg", 96, 165, 250, 96);
pub const SELECTION_BG_UNFOCUSED: Color = Color::token("selection-bg-unfocused", 113, 113, 122, 64);