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 ProgressSizeMetrics {
pub bar_height: DimensionValue,
pub bar_corner_radius: DimensionValue,
pub spinner_size: DimensionValue,
pub spoke_width: DimensionValue,
pub font_size: DimensionValue,
}
impl ProgressSizeMetrics {
fn new(bar_h: f32, bar_r: f32, spin_sz: f32, spoke_w: f32, font_sz: f32) -> Self {
Self {
bar_height: DimensionValue::from_pt(bar_h),
bar_corner_radius: DimensionValue::from_pt(bar_r),
spinner_size: DimensionValue::from_pt(spin_sz),
spoke_width: DimensionValue::from_pt(spoke_w),
font_size: DimensionValue::from_pt(font_sz),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ProgressIndicatorMetrics {
pub regular: ProgressSizeMetrics,
pub small: ProgressSizeMetrics,
pub mini: ProgressSizeMetrics,
pub default_bar_width: DimensionValue,
pub spoke_count: DimensionValue,
pub spoke_inner_ratio: DimensionValue,
pub indeterminate_pill_ratio: DimensionValue,
pub spin_speed_hz: DimensionValue,
pub bar_indeterminate_speed: DimensionValue,
pub label_spacing: DimensionValue,
#[serde(default = "default_border_width")]
pub border_width: DimensionValue,
pub tau_radians: DimensionValue,
pub min_spoke_alpha: DimensionValue,
pub percentage_scale: DimensionValue,
}
impl Default for ProgressIndicatorMetrics {
fn default() -> Self {
Self {
regular: ProgressSizeMetrics::new(6.0, 3.0, 32.0, 2.5, 12.0),
small: ProgressSizeMetrics::new(4.0, 2.0, 16.0, 1.6, 11.0),
mini: ProgressSizeMetrics::new(4.0, 2.0, 12.0, 1.2, 9.0),
default_bar_width: DimensionValue::from_pt(160.0),
spoke_count: DimensionValue::from_pt(12.0),
spoke_inner_ratio: DimensionValue::from_pt(0.52),
indeterminate_pill_ratio: DimensionValue::from_pt(0.35),
spin_speed_hz: DimensionValue::from_pt(1.0),
bar_indeterminate_speed: DimensionValue::from_pt(1.2),
label_spacing: DimensionValue::from_pt(6.0),
border_width: default_border_width(),
tau_radians: DimensionValue::from_pt(6.283_185_5),
min_spoke_alpha: DimensionValue::from_pt(0.18),
percentage_scale: DimensionValue::from_pt(100.0),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TableViewMetrics {
pub header_height: DimensionValue,
pub row_height: DimensionValue,
pub cell_padding_horizontal: DimensionValue,
pub cell_padding_vertical: DimensionValue,
pub header_font_size: DimensionValue,
pub cell_font_size: DimensionValue,
pub sort_chevron_size: DimensionValue,
pub sort_chevron_spacing: DimensionValue,
pub separator_width: DimensionValue,
pub header_divider_inset: DimensionValue,
pub corner_radius: DimensionValue,
pub row_corner_radius: DimensionValue,
}
impl Default for TableViewMetrics {
fn default() -> Self {
Self {
header_height: DimensionValue::from_pt(28.0),
row_height: DimensionValue::from_pt(24.0),
cell_padding_horizontal: DimensionValue::from_pt(8.0),
cell_padding_vertical: DimensionValue::from_pt(2.0),
header_font_size: DimensionValue::from_pt(11.0),
cell_font_size: DimensionValue::from_pt(12.0),
sort_chevron_size: DimensionValue::from_pt(8.0),
sort_chevron_spacing: DimensionValue::from_pt(6.0),
separator_width: DimensionValue::from_pt(1.0),
header_divider_inset: DimensionValue::from_pt(4.0),
corner_radius: DimensionValue::from_pt(6.0),
row_corner_radius: DimensionValue::from_pt(4.0),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TokenFieldMetrics {
pub min_height: DimensionValue,
pub corner_radius: DimensionValue,
pub border_width: DimensionValue,
pub padding_horizontal: DimensionValue,
pub padding_vertical: DimensionValue,
pub pill_height: DimensionValue,
pub pill_corner_radius: DimensionValue,
pub pill_padding_horizontal: DimensionValue,
pub pill_spacing: DimensionValue,
pub row_spacing: DimensionValue,
pub font_size: DimensionValue,
pub counter_font_size: DimensionValue,
pub remove_icon_size: DimensionValue,
pub remove_icon_stroke: DimensionValue,
pub remove_cross_span: DimensionValue,
pub min_input_width: DimensionValue,
pub default_width: DimensionValue,
pub counter_row_height: DimensionValue,
}
impl Default for TokenFieldMetrics {
fn default() -> Self {
Self {
min_height: DimensionValue::from_pt(22.0),
corner_radius: DimensionValue::from_pt(6.0),
border_width: DimensionValue::from_pt(1.0),
padding_horizontal: DimensionValue::from_pt(6.0),
padding_vertical: DimensionValue::from_pt(3.0),
pill_height: DimensionValue::from_pt(16.0),
pill_corner_radius: DimensionValue::from_pt(8.0),
pill_padding_horizontal: DimensionValue::from_pt(6.0),
pill_spacing: DimensionValue::from_pt(4.0),
row_spacing: DimensionValue::from_pt(4.0),
font_size: DimensionValue::from_pt(12.0),
counter_font_size: DimensionValue::from_pt(10.0),
remove_icon_size: DimensionValue::from_pt(12.0),
remove_icon_stroke: DimensionValue::from_pt(1.2),
remove_cross_span: DimensionValue::from_pt(2.5),
min_input_width: DimensionValue::from_pt(64.0),
default_width: DimensionValue::from_pt(240.0),
counter_row_height: DimensionValue::from_pt(14.0),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct LevelIndicatorMetrics {
pub default_length: DimensionValue,
pub thickness: DimensionValue,
pub corner_radius: DimensionValue,
pub segment_corner_radius: DimensionValue,
pub segment_spacing: DimensionValue,
pub default_segment_count: DimensionValue,
pub border_width: DimensionValue,
pub peak_line_width: DimensionValue,
pub track_inset: DimensionValue,
}
impl Default for LevelIndicatorMetrics {
fn default() -> Self {
Self {
default_length: DimensionValue::from_pt(160.0),
thickness: DimensionValue::from_pt(16.0),
corner_radius: DimensionValue::from_pt(3.0),
segment_corner_radius: DimensionValue::from_pt(1.5),
segment_spacing: DimensionValue::from_pt(2.0),
default_segment_count: DimensionValue::from_pt(12.0),
border_width: DimensionValue::from_pt(1.0),
peak_line_width: DimensionValue::from_pt(2.0),
track_inset: DimensionValue::from_pt(1.5),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TrimScrubberMetrics {
pub height: DimensionValue,
pub default_width: DimensionValue,
pub track_inset_vertical: DimensionValue,
pub corner_radius: DimensionValue,
pub handle_width: DimensionValue,
pub handle_slot_width: DimensionValue,
pub handle_slot_height: DimensionValue,
pub selection_border_width: DimensionValue,
pub playhead_width: DimensionValue,
pub playhead_hit_width: DimensionValue,
pub badge_height: DimensionValue,
pub badge_padding_horizontal: DimensionValue,
pub badge_corner_radius: DimensionValue,
pub badge_font_size: DimensionValue,
pub zone_font_size: DimensionValue,
pub zone_label_padding: DimensionValue,
pub waveform_bar_width: DimensionValue,
pub waveform_min_amplitude: DimensionValue,
pub seconds_per_minute: DimensionValue,
pub tenths_per_second: DimensionValue,
}
impl Default for TrimScrubberMetrics {
fn default() -> Self {
Self {
height: DimensionValue::from_pt(44.0),
default_width: DimensionValue::from_pt(320.0),
track_inset_vertical: DimensionValue::from_pt(8.0),
corner_radius: DimensionValue::from_pt(6.0),
handle_width: DimensionValue::from_pt(12.0),
handle_slot_width: DimensionValue::from_pt(1.0),
handle_slot_height: DimensionValue::from_pt(10.0),
selection_border_width: DimensionValue::from_pt(2.0),
playhead_width: DimensionValue::from_pt(2.0),
playhead_hit_width: DimensionValue::from_pt(12.0),
badge_height: DimensionValue::from_pt(14.0),
badge_padding_horizontal: DimensionValue::from_pt(6.0),
badge_corner_radius: DimensionValue::from_pt(7.0),
badge_font_size: DimensionValue::from_pt(11.0),
zone_font_size: DimensionValue::from_pt(9.0),
zone_label_padding: DimensionValue::from_pt(4.0),
waveform_bar_width: DimensionValue::from_pt(2.0),
waveform_min_amplitude: DimensionValue::from_pt(0.08),
seconds_per_minute: DimensionValue::from_pt(60.0),
tenths_per_second: DimensionValue::from_pt(10.0),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PathControlMetrics {
pub height: DimensionValue,
pub corner_radius: DimensionValue,
pub segment_corner_radius: DimensionValue,
pub padding_horizontal: DimensionValue,
pub segment_padding_horizontal: DimensionValue,
pub segment_spacing: DimensionValue,
pub icon_size: DimensionValue,
pub icon_spacing: DimensionValue,
pub chevron_size: DimensionValue,
pub font_size: DimensionValue,
pub border_width: DimensionValue,
pub choose_button_padding: DimensionValue,
pub choose_button_height: DimensionValue,
pub folder_tab_width: DimensionValue,
pub folder_tab_height: DimensionValue,
}
impl Default for PathControlMetrics {
fn default() -> Self {
Self {
height: DimensionValue::from_pt(22.0),
corner_radius: DimensionValue::from_pt(5.0),
segment_corner_radius: DimensionValue::from_pt(4.0),
padding_horizontal: DimensionValue::from_pt(6.0),
segment_padding_horizontal: DimensionValue::from_pt(5.0),
segment_spacing: DimensionValue::from_pt(2.0),
icon_size: DimensionValue::from_pt(16.0),
icon_spacing: DimensionValue::from_pt(4.0),
chevron_size: DimensionValue::from_pt(8.0),
font_size: DimensionValue::from_pt(11.0),
border_width: DimensionValue::from_pt(1.0),
choose_button_padding: DimensionValue::from_pt(8.0),
choose_button_height: DimensionValue::from_pt(18.0),
folder_tab_width: DimensionValue::from_pt(5.0),
folder_tab_height: DimensionValue::from_pt(2.0),
}
}
}