use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LayoutAnimationConfig {
pub duration: f64,
pub easing: String,
pub delay: f64,
pub stagger: f64,
pub use_flip: bool,
pub shared_elements: SharedElementConfig,
pub performance: PerformanceConfig,
pub preset: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SharedElementConfig {
pub enabled: bool,
pub duration: f64,
pub easing: String,
pub maintain_aspect_ratio: bool,
pub z_index_strategy: ZIndexStrategy,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceConfig {
pub hardware_acceleration: bool,
pub frame_budget_ms: f64,
pub batch_updates: bool,
pub memory_pool_size: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ZIndexStrategy {
Maintain,
Elevate,
Custom(i32),
}
impl Default for LayoutAnimationConfig {
fn default() -> Self {
Self {
duration: 300.0,
easing: "ease-in-out".to_string(),
delay: 0.0,
stagger: 0.0,
use_flip: true,
shared_elements: SharedElementConfig::default(),
performance: PerformanceConfig::default(),
preset: None,
}
}
}
impl Default for SharedElementConfig {
fn default() -> Self {
Self {
enabled: true,
duration: 400.0,
easing: "cubic-bezier(0.4, 0.0, 0.2, 1)".to_string(),
maintain_aspect_ratio: true,
z_index_strategy: ZIndexStrategy::Elevate,
}
}
}
impl Default for PerformanceConfig {
fn default() -> Self {
Self {
hardware_acceleration: true,
frame_budget_ms: 16.67, batch_updates: true,
memory_pool_size: 100,
}
}
}
impl Default for ZIndexStrategy {
fn default() -> Self {
Self::Maintain
}
}