pub mod color;
pub mod dtcg;
pub mod metrics;
pub mod motion;
pub mod typography;
pub use color::{MacAppearanceColors, MacColorTokens};
pub use dtcg::{ColorValue, DimensionValue};
pub use metrics::{
ButtonMetrics, ButtonSizeMetrics, ColorWellMetrics, ContextMenuMetrics, FocusRingMetrics,
FooterMetrics, LayoutMetrics, LevelIndicatorMetrics, MacControlMetrics, MacMetricsTokens,
MenuBarMetrics, NavigationMetrics, OutlineViewMetrics, PaletteMetrics, PathControlMetrics,
PopUpButtonMetrics, PopoverMetrics, ProgressIndicatorMetrics, ProgressSizeMetrics,
ScrollViewMetrics, SearchFieldMetrics, SegmentedMetrics, SegmentedSizeMetrics, SliderMetrics,
SplitViewMetrics, StackViewMetrics, StepperMetrics, TableViewMetrics, TextFieldMetrics,
TextFieldSizeMetrics, ThumbnailCellMetrics, ToastMetrics, ToggleMetrics, TokenFieldMetrics,
ToolbarMetrics, TrimScrubberMetrics, CANVAS_FOOTER_HEIGHT, COMMAND_PALETTE_HEIGHT,
COMMAND_PALETTE_WIDTH, DEFAULT_TOAST_DURATION,
};
pub use motion::{MacMotionTokens, MotionPresetToken};
pub use typography::{
sf_pro_tracking, CubicCoefficients, CubicFit, MacTypographyTokens, PolynomialSpec001,
QuadraticCoefficients, QuadraticFit, TrackingPoint, TrackingTableEntry,
};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MacViewTokens {
pub metrics: MacMetricsTokens,
pub color: MacColorTokens,
pub typography: MacTypographyTokens,
pub motion: MacMotionTokens,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct MacDesignTokens {
#[serde(rename = "$name", default)]
pub name: String,
#[serde(rename = "$version", default)]
pub version: String,
#[serde(rename = "$description", default)]
pub description: String,
pub macview: MacViewTokens,
}
impl MacDesignTokens {
pub fn load_default() -> Self {
std::thread::Builder::new()
.name("mac_token_loader".into())
.stack_size(4 * 1024 * 1024)
.spawn(|| {
Self::from_json(include_str!("../../tokens/design_tokens.json"))
.expect("Failed to parse embedded tokens/design_tokens.json")
})
.expect("Failed to spawn token loader thread")
.join()
.expect("Token loader panicked")
}
pub fn from_json(json: &str) -> Result<Self, serde_json::Error> {
serde_json::from_str(json)
}
#[inline]
pub fn control_metrics(&self) -> &MacControlMetrics {
&self.macview.metrics.control
}
#[inline]
pub fn toolbar_metrics(&self) -> &ToolbarMetrics {
&self.macview.metrics.toolbar
}
#[inline]
pub fn popover_metrics(&self) -> &PopoverMetrics {
&self.macview.metrics.popover
}
#[inline]
pub fn split_view_metrics(&self) -> &SplitViewMetrics {
&self.macview.metrics.split_view
}
#[inline]
pub fn layout_metrics(&self) -> &LayoutMetrics {
&self.macview.metrics.layout
}
#[inline]
pub fn scroll_view_metrics(&self) -> &ScrollViewMetrics {
&self.macview.metrics.layout.scroll_view
}
#[inline]
pub fn stack_view_metrics(&self) -> &StackViewMetrics {
&self.macview.metrics.layout.stack_view
}
#[inline]
pub fn outline_view_metrics(&self) -> &OutlineViewMetrics {
&self.macview.metrics.control.outline_view
}
#[inline]
pub fn slider_metrics(&self) -> &SliderMetrics {
&self.macview.metrics.control.slider
}
#[inline]
pub fn thumbnail_metrics(&self) -> &ThumbnailCellMetrics {
&self.macview.metrics.control.thumbnail
}
#[inline]
pub fn popup_button_metrics(&self) -> &PopUpButtonMetrics {
&self.macview.metrics.control.popup_button
}
#[inline]
pub fn search_field_metrics(&self) -> &SearchFieldMetrics {
&self.macview.metrics.control.search_field
}
#[inline]
pub fn stepper_metrics(&self) -> &StepperMetrics {
&self.macview.metrics.control.stepper
}
#[inline]
pub fn color_well_metrics(&self) -> &ColorWellMetrics {
&self.macview.metrics.control.color_well
}
#[inline]
pub fn toggle_metrics(&self) -> &ToggleMetrics {
&self.macview.metrics.control.toggle
}
#[inline]
pub fn navigation_metrics(&self) -> &NavigationMetrics {
&self.macview.metrics.navigation
}
#[inline]
pub fn menu_bar_metrics(&self) -> &MenuBarMetrics {
&self.macview.metrics.navigation.menu_bar
}
#[inline]
pub fn footer_metrics(&self) -> &FooterMetrics {
&self.macview.metrics.navigation.footer
}
#[inline]
pub fn palette_metrics(&self) -> &PaletteMetrics {
&self.macview.metrics.navigation.palette
}
#[inline]
pub fn context_menu_metrics(&self) -> &ContextMenuMetrics {
&self.macview.metrics.navigation.context_menu
}
#[inline]
pub fn toast_metrics(&self) -> &ToastMetrics {
&self.macview.metrics.navigation.toast
}
#[inline]
pub fn progress_indicator_metrics(&self) -> &ProgressIndicatorMetrics {
&self.macview.metrics.control.progress_indicator
}
#[inline]
pub fn table_view_metrics(&self) -> &TableViewMetrics {
&self.macview.metrics.control.table_view
}
#[inline]
pub fn token_field_metrics(&self) -> &TokenFieldMetrics {
&self.macview.metrics.control.token_field
}
#[inline]
pub fn level_indicator_metrics(&self) -> &LevelIndicatorMetrics {
&self.macview.metrics.control.level_indicator
}
#[inline]
pub fn trim_scrubber_metrics(&self) -> &TrimScrubberMetrics {
&self.macview.metrics.control.trim_scrubber
}
#[inline]
pub fn path_control_metrics(&self) -> &PathControlMetrics {
&self.macview.metrics.control.path_control
}
#[inline]
pub fn colors(&self) -> &MacColorTokens {
&self.macview.color
}
#[inline]
pub fn typography(&self) -> &MacTypographyTokens {
&self.macview.typography
}
#[inline]
pub fn motion(&self) -> &MacMotionTokens {
&self.macview.motion
}
}