use crate::tokens::dtcg::DimensionValue;
use crate::tokens::metrics::controls::MacControlMetrics;
use crate::tokens::metrics::navigation::NavigationMetrics;
use crate::tokens::MacDesignTokens;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ToolbarMetrics {
pub traffic_lights_inset: DimensionValue,
pub height_unified: DimensionValue,
pub height_compact: DimensionValue,
pub icon_size: DimensionValue,
pub hit_target_width: DimensionValue,
pub hit_target_height: DimensionValue,
pub hit_target_min: DimensionValue,
pub item_spacing: DimensionValue,
pub item_spacing_compact: DimensionValue,
pub edge_padding: DimensionValue,
pub caption_button_width: DimensionValue,
pub caption_button_height: DimensionValue,
pub caption_icon_size: DimensionValue,
pub traffic_light_radius: DimensionValue,
pub traffic_light_spacing: DimensionValue,
pub window_corner_radius: DimensionValue,
pub traffic_light_hit_size: DimensionValue,
pub traffic_light_leading_inset: DimensionValue,
pub traffic_light_glyph_half: DimensionValue,
pub min_title_width: DimensionValue,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PopoverMetrics {
pub arrow_base_width: DimensionValue,
pub arrow_height: DimensionValue,
pub arrow_tip_radius: DimensionValue,
pub arrow_base_radius: DimensionValue,
pub corner_radius: DimensionValue,
pub border_width: DimensionValue,
pub compact_panel_width: DimensionValue,
pub compact_panel_height: DimensionValue,
pub wing_width: DimensionValue,
pub wing_height: DimensionValue,
pub full_popover_width: DimensionValue,
pub full_popover_height: DimensionValue,
pub shadow_blur: DimensionValue,
pub shadow_y_offset: DimensionValue,
pub header_height: DimensionValue,
pub header_font_size: DimensionValue,
pub inner_padding: DimensionValue,
pub surface_corner_radius: DimensionValue,
pub surface_border_width: DimensionValue,
pub hud_corner_radius: DimensionValue,
pub hud_row_height: DimensionValue,
pub hud_row_gap: DimensionValue,
pub hud_padding_x: DimensionValue,
pub hud_padding_top: DimensionValue,
pub hud_dot_radius: DimensionValue,
pub hud_dot_offset_x: DimensionValue,
pub hud_title_offset_x: DimensionValue,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SplitViewMetrics {
pub divider_thickness: DimensionValue,
pub hit_thickness: DimensionValue,
pub min_pane_size: DimensionValue,
pub handle_length: DimensionValue,
pub handle_thickness: DimensionValue,
pub default_ratio: DimensionValue,
}
impl Default for SplitViewMetrics {
fn default() -> Self {
MacDesignTokens::default_shared().split_view_metrics().clone()
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ScrollViewMetrics {
pub scrollbar_thickness: DimensionValue,
pub thumb_min_length: DimensionValue,
pub corner_radius: DimensionValue,
pub fade_timeout: DimensionValue,
pub edge_inset: DimensionValue,
pub hit_zone_padding: DimensionValue,
pub min_visible_thumb_length: DimensionValue,
pub scrollbar_hover_thickness: DimensionValue,
}
impl Default for ScrollViewMetrics {
fn default() -> Self {
MacDesignTokens::default_shared().scroll_view_metrics().clone()
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct StackViewMetrics {
pub default_spacing: DimensionValue,
pub edge_padding: DimensionValue,
pub separator_thickness: DimensionValue,
pub section_header_font_size: DimensionValue,
pub default_item_height: DimensionValue,
}
impl Default for StackViewMetrics {
fn default() -> Self {
MacDesignTokens::default_shared().stack_view_metrics().clone()
}
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
pub struct LayoutMetrics {
pub scroll_view: ScrollViewMetrics,
pub stack_view: StackViewMetrics,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MacMetricsTokens {
pub control: MacControlMetrics,
pub toolbar: ToolbarMetrics,
pub popover: PopoverMetrics,
pub split_view: SplitViewMetrics,
pub layout: LayoutMetrics,
pub navigation: NavigationMetrics,
}