use crate::tokens::dtcg::DimensionValue;
use crate::tokens::metrics::controls::basic::default_border_width;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SliderMetrics {
pub track_height: DimensionValue,
pub thumb_size: DimensionValue,
#[serde(default = "default_slider_thumb_stroke_width")]
pub thumb_stroke_width: DimensionValue,
pub tick_height: DimensionValue,
pub tick_width: DimensionValue,
pub tick_offset: DimensionValue,
#[serde(default = "default_slider_default_width")]
pub default_width: DimensionValue,
#[serde(default = "default_slider_key_step_fraction")]
pub key_step_fraction: DimensionValue,
#[serde(default = "default_slider_shadow_offset_y")]
pub shadow_offset_y: DimensionValue,
}
fn default_slider_thumb_stroke_width() -> DimensionValue {
DimensionValue::from_pt(1.0)
}
fn default_slider_shadow_offset_y() -> DimensionValue {
DimensionValue::from_pt(1.5)
}
fn default_slider_default_width() -> DimensionValue {
DimensionValue::from_pt(120.0)
}
fn default_slider_key_step_fraction() -> DimensionValue {
DimensionValue::from_pt(0.05)
}
impl Default for SliderMetrics {
fn default() -> Self {
Self {
track_height: DimensionValue::from_pt(3.0),
thumb_size: DimensionValue::from_pt(16.0),
thumb_stroke_width: default_slider_thumb_stroke_width(),
tick_height: DimensionValue::from_pt(4.0),
tick_width: DimensionValue::from_pt(1.0),
tick_offset: DimensionValue::from_pt(3.0),
default_width: default_slider_default_width(),
key_step_fraction: default_slider_key_step_fraction(),
shadow_offset_y: default_slider_shadow_offset_y(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ThumbnailCellMetrics {
pub size: DimensionValue,
pub corner_radius: DimensionValue,
pub border_width: DimensionValue,
}
impl Default for ThumbnailCellMetrics {
fn default() -> Self {
Self {
size: DimensionValue::from_pt(24.0),
corner_radius: DimensionValue::from_pt(4.0),
border_width: DimensionValue::from_pt(1.0),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OutlineViewMetrics {
pub row_height: DimensionValue,
pub indent_step: DimensionValue,
pub disclosure_size: DimensionValue,
pub disclosure_margin: DimensionValue,
pub content_spacing: DimensionValue,
pub accessory_size: DimensionValue,
pub accessory_spacing: DimensionValue,
pub corner_radius: DimensionValue,
pub font_size: DimensionValue,
#[serde(default = "default_outline_chevron_stroke_width")]
pub chevron_stroke_width: DimensionValue,
#[serde(default = "default_outline_chevron_size")]
pub chevron_size: DimensionValue,
#[serde(default = "default_outline_chevron_depth")]
pub chevron_depth: DimensionValue,
#[serde(default = "default_outline_item_spacing")]
pub item_spacing: DimensionValue,
#[serde(default = "default_outline_edge_padding")]
pub edge_padding: DimensionValue,
#[serde(default = "default_outline_header_font_size")]
pub header_font_size: DimensionValue,
}
fn default_outline_header_font_size() -> DimensionValue {
DimensionValue::from_pt(11.0)
}
fn default_outline_chevron_stroke_width() -> DimensionValue {
DimensionValue::from_pt(1.2)
}
fn default_outline_chevron_size() -> DimensionValue {
DimensionValue::from_pt(7.0)
}
fn default_outline_chevron_depth() -> DimensionValue {
DimensionValue::from_pt(1.75)
}
fn default_outline_item_spacing() -> DimensionValue {
DimensionValue::from_pt(6.0)
}
fn default_outline_edge_padding() -> DimensionValue {
DimensionValue::from_pt(4.0)
}
impl Default for OutlineViewMetrics {
fn default() -> Self {
Self {
row_height: DimensionValue::from_pt(24.0),
indent_step: DimensionValue::from_pt(16.0),
disclosure_size: DimensionValue::from_pt(10.0),
disclosure_margin: DimensionValue::from_pt(4.0),
content_spacing: DimensionValue::from_pt(6.0),
accessory_size: DimensionValue::from_pt(16.0),
accessory_spacing: DimensionValue::from_pt(4.0),
corner_radius: DimensionValue::from_pt(4.0),
font_size: DimensionValue::from_pt(12.0),
chevron_stroke_width: default_outline_chevron_stroke_width(),
chevron_size: default_outline_chevron_size(),
chevron_depth: default_outline_chevron_depth(),
item_spacing: default_outline_item_spacing(),
edge_padding: default_outline_edge_padding(),
header_font_size: default_outline_header_font_size(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PopUpButtonMetrics {
pub height: DimensionValue,
pub corner_radius: DimensionValue,
pub padding_horizontal: DimensionValue,
pub chevron_size: DimensionValue,
#[serde(default = "default_popup_chevron_stroke_width")]
pub chevron_stroke_width: DimensionValue,
#[serde(default = "default_popup_chevron_spacing")]
pub chevron_spacing: DimensionValue,
#[serde(default = "default_popup_font_size")]
pub font_size: DimensionValue,
#[serde(default = "default_border_width")]
pub border_width: DimensionValue,
#[serde(default = "default_popup_chevron_offset_y")]
pub chevron_offset_y: DimensionValue,
#[serde(default = "default_popup_menu_item_height")]
pub menu_item_height: DimensionValue,
#[serde(default = "default_popup_menu_item_padding")]
pub menu_item_padding: DimensionValue,
#[serde(default = "default_popup_menu_min_width")]
pub menu_min_width: DimensionValue,
#[serde(default = "default_popup_gap")]
pub popup_gap: DimensionValue,
}
fn default_popup_chevron_stroke_width() -> DimensionValue {
DimensionValue::from_pt(1.2)
}
fn default_popup_chevron_spacing() -> DimensionValue {
DimensionValue::from_pt(6.0)
}
fn default_popup_font_size() -> DimensionValue {
DimensionValue::from_pt(13.0)
}
fn default_popup_chevron_offset_y() -> DimensionValue {
DimensionValue::from_pt(2.0)
}
fn default_popup_menu_item_height() -> DimensionValue {
DimensionValue::from_pt(20.0)
}
fn default_popup_menu_item_padding() -> DimensionValue {
DimensionValue::from_pt(6.0)
}
fn default_popup_menu_min_width() -> DimensionValue {
DimensionValue::from_pt(120.0)
}
fn default_popup_gap() -> DimensionValue {
DimensionValue::from_pt(2.0)
}
impl Default for PopUpButtonMetrics {
fn default() -> Self {
Self {
height: DimensionValue::from_pt(22.0),
corner_radius: DimensionValue::from_pt(5.0),
padding_horizontal: DimensionValue::from_pt(8.0),
chevron_size: DimensionValue::from_pt(8.0),
chevron_stroke_width: default_popup_chevron_stroke_width(),
chevron_spacing: default_popup_chevron_spacing(),
font_size: default_popup_font_size(),
border_width: default_border_width(),
chevron_offset_y: default_popup_chevron_offset_y(),
menu_item_height: default_popup_menu_item_height(),
menu_item_padding: default_popup_menu_item_padding(),
menu_min_width: default_popup_menu_min_width(),
popup_gap: default_popup_gap(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SearchFieldMetrics {
pub height: DimensionValue,
pub corner_radius: DimensionValue,
pub icon_size: DimensionValue,
#[serde(default = "default_search_icon_stroke_width")]
pub icon_stroke_width: DimensionValue,
pub padding_horizontal: DimensionValue,
pub clear_button_size: DimensionValue,
#[serde(default = "default_search_field_default_width")]
pub default_width: DimensionValue,
#[serde(default = "default_search_clear_icon_padding")]
pub clear_button_icon_padding: DimensionValue,
#[serde(default = "default_search_content_spacing")]
pub content_spacing: DimensionValue,
#[serde(default = "default_search_padding_vertical")]
pub padding_vertical: DimensionValue,
#[serde(default = "default_border_width")]
pub border_width: DimensionValue,
#[serde(default = "default_search_glass_radius")]
pub glass_radius: DimensionValue,
#[serde(default = "default_search_font_size")]
pub font_size: DimensionValue,
}
fn default_search_icon_stroke_width() -> DimensionValue {
DimensionValue::from_pt(1.2)
}
fn default_search_field_default_width() -> DimensionValue {
DimensionValue::from_pt(160.0)
}
fn default_search_clear_icon_padding() -> DimensionValue {
DimensionValue::from_pt(3.5)
}
fn default_search_content_spacing() -> DimensionValue {
DimensionValue::from_pt(4.0)
}
fn default_search_padding_vertical() -> DimensionValue {
DimensionValue::from_pt(2.0)
}
fn default_search_glass_radius() -> DimensionValue {
DimensionValue::from_pt(3.0)
}
fn default_search_font_size() -> DimensionValue {
DimensionValue::from_pt(12.0)
}
impl Default for SearchFieldMetrics {
fn default() -> Self {
Self {
height: DimensionValue::from_pt(22.0),
corner_radius: DimensionValue::from_pt(6.0),
icon_size: DimensionValue::from_pt(12.0),
icon_stroke_width: default_search_icon_stroke_width(),
padding_horizontal: DimensionValue::from_pt(8.0),
clear_button_size: DimensionValue::from_pt(14.0),
default_width: default_search_field_default_width(),
clear_button_icon_padding: default_search_clear_icon_padding(),
content_spacing: default_search_content_spacing(),
padding_vertical: default_search_padding_vertical(),
border_width: default_border_width(),
glass_radius: default_search_glass_radius(),
font_size: default_search_font_size(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct StepperMetrics {
pub width: DimensionValue,
pub height: DimensionValue,
pub corner_radius: DimensionValue,
#[serde(default = "default_stepper_divider_thickness")]
pub divider_thickness: DimensionValue,
pub arrow_size: DimensionValue,
#[serde(default = "default_stepper_arrow_stroke_width")]
pub arrow_stroke_width: DimensionValue,
#[serde(default = "default_stepper_arrow_delta")]
pub arrow_delta: DimensionValue,
#[serde(default = "default_border_width")]
pub border_width: DimensionValue,
}
fn default_stepper_divider_thickness() -> DimensionValue {
DimensionValue::from_pt(1.0)
}
fn default_stepper_arrow_stroke_width() -> DimensionValue {
DimensionValue::from_pt(1.2)
}
fn default_stepper_arrow_delta() -> DimensionValue {
DimensionValue::from_pt(1.5)
}
impl Default for StepperMetrics {
fn default() -> Self {
Self {
width: DimensionValue::from_pt(14.0),
height: DimensionValue::from_pt(22.0),
corner_radius: DimensionValue::from_pt(4.0),
divider_thickness: default_stepper_divider_thickness(),
arrow_size: DimensionValue::from_pt(6.0),
arrow_stroke_width: default_stepper_arrow_stroke_width(),
arrow_delta: default_stepper_arrow_delta(),
border_width: default_border_width(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ColorWellMetrics {
pub width: DimensionValue,
pub height: DimensionValue,
pub corner_radius: DimensionValue,
pub border_width: DimensionValue,
pub swatch_inset: DimensionValue,
pub swatch_radius: DimensionValue,
#[serde(default = "default_color_well_checker_grid_size")]
pub checker_grid_size: DimensionValue,
#[serde(default = "default_color_picker_size")]
pub picker_size: DimensionValue,
#[serde(default = "default_color_well_popup_gap")]
pub popup_gap: DimensionValue,
#[serde(default = "default_color_well_popup_corner_radius")]
pub popup_corner_radius: DimensionValue,
}
fn default_color_well_checker_grid_size() -> DimensionValue {
DimensionValue::from_pt(4.0)
}
fn default_color_picker_size() -> DimensionValue {
DimensionValue::from_pt(220.0)
}
fn default_color_well_popup_gap() -> DimensionValue {
DimensionValue::from_pt(4.0)
}
fn default_color_well_popup_corner_radius() -> DimensionValue {
DimensionValue::from_pt(8.0)
}
impl Default for ColorWellMetrics {
fn default() -> Self {
Self {
width: DimensionValue::from_pt(44.0),
height: DimensionValue::from_pt(23.0),
corner_radius: DimensionValue::from_pt(5.0),
border_width: DimensionValue::from_pt(1.0),
swatch_inset: DimensionValue::from_pt(3.0),
swatch_radius: DimensionValue::from_pt(3.0),
checker_grid_size: default_color_well_checker_grid_size(),
picker_size: default_color_picker_size(),
popup_gap: default_color_well_popup_gap(),
popup_corner_radius: default_color_well_popup_corner_radius(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ToggleMetrics {
pub width: DimensionValue,
pub height: DimensionValue,
pub corner_radius: DimensionValue,
pub knob_size: DimensionValue,
pub knob_offset_off: DimensionValue,
pub knob_offset_on: DimensionValue,
#[serde(default = "default_border_width")]
pub border_width: DimensionValue,
#[serde(default = "default_toggle_animation_duration")]
pub animation_duration: DimensionValue,
}
fn default_toggle_animation_duration() -> DimensionValue {
DimensionValue::from_pt(0.20)
}
impl Default for ToggleMetrics {
fn default() -> Self {
Self {
width: DimensionValue::from_pt(26.0),
height: DimensionValue::from_pt(15.0),
corner_radius: DimensionValue::from_pt(7.5),
knob_size: DimensionValue::from_pt(13.0),
knob_offset_off: DimensionValue::from_pt(1.0),
knob_offset_on: DimensionValue::from_pt(12.0),
border_width: default_border_width(),
animation_duration: default_toggle_animation_duration(),
}
}
}