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 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,
#[serde(default = "default_stepper_auto_repeat_delay")]
pub auto_repeat_delay: DimensionValue,
#[serde(default = "default_stepper_auto_repeat_interval")]
pub auto_repeat_interval: DimensionValue,
#[serde(default = "default_stepper_shift_multiplier")]
pub shift_multiplier: DimensionValue,
#[serde(default = "default_stepper_cmd_multiplier")]
pub cmd_multiplier: DimensionValue,
}
fn default_stepper_auto_repeat_delay() -> DimensionValue {
DimensionValue::from_pt(0.4)
}
fn default_stepper_auto_repeat_interval() -> DimensionValue {
DimensionValue::from_pt(0.075)
}
fn default_stepper_shift_multiplier() -> DimensionValue {
DimensionValue::from_pt(10.0)
}
fn default_stepper_cmd_multiplier() -> DimensionValue {
DimensionValue::from_pt(100.0)
}
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(),
auto_repeat_delay: default_stepper_auto_repeat_delay(),
auto_repeat_interval: default_stepper_auto_repeat_interval(),
shift_multiplier: default_stepper_shift_multiplier(),
cmd_multiplier: default_stepper_cmd_multiplier(),
}
}
}
#[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(),
}
}
}