use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TabItem {
pub id: String,
pub title: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sf_symbol: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub image: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub circular: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub badge: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AccessoryItem {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sf_symbol: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub image: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ConfigureTabBarOptions {
pub items: Vec<TabItem>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub selected_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tint: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub accessory: Option<AccessoryItem>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SelectTabOptions {
pub id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SheetOption {
pub value: String,
pub label: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SheetRow {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
pub label: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub detail: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub image: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sf_symbol: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub badge: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub destructive: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub header: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub value: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub on: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub placeholder: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub options: Option<Vec<SheetOption>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PresentSheetOptions {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tint: Option<String>,
pub rows: Vec<SheetRow>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DismissSheetOptions {
pub id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SetBadgeOptions {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub value: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TabBarInsets {
pub bottom: f64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WindowGlassOptions {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub corner_radius: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tint_color: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TabSelectedPayload {
pub id: String,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum ComponentKind {
Switch,
Button,
Slider,
Progress,
Image,
Glass,
Container,
TabBar,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum ComponentAnchor {
TopLeading,
#[default]
TopTrailing,
BottomLeading,
BottomTrailing,
Center,
Bottom,
Top,
Leading,
Trailing,
Absolute,
Fill,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", default)]
pub struct ComponentProps {
pub label: Option<String>,
pub on: Option<bool>,
pub value: Option<f64>,
pub min: Option<f64>,
pub max: Option<f64>,
pub sf_symbol: Option<String>,
pub image: Option<String>,
pub circular: Option<bool>,
pub glass: Option<bool>,
pub prominent: Option<bool>,
pub tint: Option<String>,
pub width: Option<f64>,
pub height: Option<f64>,
pub x: Option<f64>,
pub y: Option<f64>,
pub corner_radius: Option<f64>,
pub axis: Option<String>,
pub align: Option<String>,
pub spacing: Option<f64>,
pub inset: Option<f64>,
pub items: Option<Vec<TabItem>>,
pub selected_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateComponentOptions {
pub id: String,
pub kind: ComponentKind,
#[serde(default)]
pub props: ComponentProps,
#[serde(default)]
pub anchor: ComponentAnchor,
#[serde(default)]
pub dx: f64,
#[serde(default)]
pub dy: f64,
#[serde(default)]
pub below: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub children: Option<Vec<CreateComponentOptions>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateComponentOptions {
pub id: String,
pub props: ComponentProps,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateComponentsOptions {
pub components: Vec<UpdateComponentOptions>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RemoveComponentOptions {
pub id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ComponentEventPayload {
pub id: String,
pub event: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub on: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub value: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub detail: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GlassSupport {
pub supported: bool,
pub fallback: bool,
}