1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
5#[serde(rename_all = "camelCase")]
6pub struct TabItem {
7 pub id: String,
9 pub title: String,
11 #[serde(default, skip_serializing_if = "Option::is_none")]
14 pub sf_symbol: Option<String>,
15 #[serde(default, skip_serializing_if = "Option::is_none")]
18 pub image: Option<String>,
19 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub circular: Option<bool>,
22 #[serde(default, skip_serializing_if = "Option::is_none")]
24 pub badge: Option<String>,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
30#[serde(rename_all = "camelCase")]
31pub struct AccessoryItem {
32 pub id: String,
34 #[serde(default, skip_serializing_if = "Option::is_none")]
35 pub sf_symbol: Option<String>,
36 #[serde(default, skip_serializing_if = "Option::is_none")]
37 pub image: Option<String>,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
41#[serde(rename_all = "camelCase")]
42pub struct ConfigureTabBarOptions {
43 pub items: Vec<TabItem>,
44 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub selected_id: Option<String>,
47 #[serde(default, skip_serializing_if = "Option::is_none")]
50 pub tint: Option<String>,
51 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub accessory: Option<AccessoryItem>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
58#[serde(rename_all = "camelCase")]
59pub struct SelectTabOptions {
60 pub id: String,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
65#[serde(rename_all = "camelCase")]
66pub struct SheetOption {
67 pub value: String,
68 pub label: String,
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize)]
74#[serde(rename_all = "camelCase")]
75pub struct SheetRow {
76 pub id: String,
77 #[serde(default, skip_serializing_if = "Option::is_none")]
80 pub kind: Option<String>,
81 pub label: String,
82 #[serde(default, skip_serializing_if = "Option::is_none")]
83 pub detail: Option<String>,
84 #[serde(default, skip_serializing_if = "Option::is_none")]
86 pub image: Option<String>,
87 #[serde(default, skip_serializing_if = "Option::is_none")]
88 pub sf_symbol: Option<String>,
89 #[serde(default, skip_serializing_if = "Option::is_none")]
90 pub badge: Option<String>,
91 #[serde(default, skip_serializing_if = "Option::is_none")]
92 pub destructive: Option<bool>,
93 #[serde(default, skip_serializing_if = "Option::is_none")]
95 pub header: Option<bool>,
96 #[serde(default, skip_serializing_if = "Option::is_none")]
98 pub value: Option<String>,
99 #[serde(default, skip_serializing_if = "Option::is_none")]
101 pub on: Option<bool>,
102 #[serde(default, skip_serializing_if = "Option::is_none")]
103 pub placeholder: Option<String>,
104 #[serde(default, skip_serializing_if = "Option::is_none")]
106 pub options: Option<Vec<SheetOption>>,
107}
108
109#[derive(Debug, Clone, Serialize, Deserialize)]
111#[serde(rename_all = "camelCase")]
112pub struct PresentSheetOptions {
113 pub id: String,
115 #[serde(default, skip_serializing_if = "Option::is_none")]
117 pub tint: Option<String>,
118 pub rows: Vec<SheetRow>,
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize)]
122#[serde(rename_all = "camelCase")]
123pub struct DismissSheetOptions {
124 pub id: String,
125}
126
127#[derive(Debug, Clone, Serialize, Deserialize)]
128#[serde(rename_all = "camelCase")]
129pub struct SetBadgeOptions {
130 pub id: String,
131 #[serde(default, skip_serializing_if = "Option::is_none")]
133 pub value: Option<String>,
134}
135
136#[derive(Debug, Clone, Serialize, Deserialize)]
138#[serde(rename_all = "camelCase")]
139pub struct TabBarInsets {
140 pub bottom: f64,
142}
143
144#[derive(Debug, Clone, Default, Serialize, Deserialize)]
145#[serde(rename_all = "camelCase")]
146pub struct WindowGlassOptions {
147 #[serde(default, skip_serializing_if = "Option::is_none")]
148 pub corner_radius: Option<f64>,
149 #[serde(default, skip_serializing_if = "Option::is_none")]
151 pub tint_color: Option<String>,
152}
153
154#[derive(Debug, Clone, Serialize, Deserialize)]
157#[serde(rename_all = "camelCase")]
158pub struct TabSelectedPayload {
159 pub id: String,
160}
161
162#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
164#[serde(rename_all = "camelCase")]
165pub enum ComponentKind {
166 Switch,
168 Button,
170 Slider,
172 Progress,
174 Image,
176 Glass,
180 Container,
184 TabBar,
188}
189
190#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
192#[serde(rename_all = "camelCase")]
193pub enum ComponentAnchor {
194 TopLeading,
195 #[default]
196 TopTrailing,
197 BottomLeading,
198 BottomTrailing,
199 Center,
200 Bottom,
204 Top,
205 Leading,
206 Trailing,
207 Absolute,
210 Fill,
212}
213
214#[derive(Debug, Clone, Default, Serialize, Deserialize)]
216#[serde(rename_all = "camelCase", default)]
217pub struct ComponentProps {
218 pub label: Option<String>,
220 pub on: Option<bool>,
222 pub value: Option<f64>,
224 pub min: Option<f64>,
225 pub max: Option<f64>,
226 pub sf_symbol: Option<String>,
228 pub image: Option<String>,
230 pub circular: Option<bool>,
232 pub glass: Option<bool>,
234 pub prominent: Option<bool>,
236 pub tint: Option<String>,
238 pub width: Option<f64>,
240 pub height: Option<f64>,
241 pub x: Option<f64>,
244 pub y: Option<f64>,
245 pub corner_radius: Option<f64>,
247
248 pub axis: Option<String>,
251 pub align: Option<String>,
254 pub spacing: Option<f64>,
256 pub inset: Option<f64>,
258
259 pub items: Option<Vec<TabItem>>,
262 pub selected_id: Option<String>,
264}
265
266#[derive(Debug, Clone, Serialize, Deserialize)]
267#[serde(rename_all = "camelCase")]
268pub struct CreateComponentOptions {
269 pub id: String,
271 pub kind: ComponentKind,
272 #[serde(default)]
273 pub props: ComponentProps,
274 #[serde(default)]
275 pub anchor: ComponentAnchor,
276 #[serde(default)]
278 pub dx: f64,
279 #[serde(default)]
280 pub dy: f64,
281 #[serde(default)]
286 pub below: bool,
287 #[serde(default, skip_serializing_if = "Option::is_none")]
291 pub children: Option<Vec<CreateComponentOptions>>,
292}
293
294#[derive(Debug, Clone, Serialize, Deserialize)]
295#[serde(rename_all = "camelCase")]
296pub struct UpdateComponentOptions {
297 pub id: String,
298 pub props: ComponentProps,
299}
300
301#[derive(Debug, Clone, Serialize, Deserialize)]
305#[serde(rename_all = "camelCase")]
306pub struct UpdateComponentsOptions {
307 pub components: Vec<UpdateComponentOptions>,
308}
309
310#[derive(Debug, Clone, Serialize, Deserialize)]
311#[serde(rename_all = "camelCase")]
312pub struct RemoveComponentOptions {
313 pub id: String,
314}
315
316#[derive(Debug, Clone, Serialize, Deserialize)]
319#[serde(rename_all = "camelCase")]
320pub struct ComponentEventPayload {
321 pub id: String,
322 pub event: String,
324 #[serde(default, skip_serializing_if = "Option::is_none")]
325 pub on: Option<bool>,
326 #[serde(default, skip_serializing_if = "Option::is_none")]
327 pub value: Option<f64>,
328 #[serde(default, skip_serializing_if = "Option::is_none")]
330 pub detail: Option<String>,
331}
332
333#[derive(Debug, Clone, Serialize, Deserialize)]
334#[serde(rename_all = "camelCase")]
335pub struct GlassSupport {
336 pub supported: bool,
338 pub fallback: bool,
341}