Skip to main content

dioxus_maplibre/options/
navigation.rs

1//! Navigation and animation option models.
2
3use serde::{Deserialize, Serialize};
4
5use crate::types::LatLng;
6
7use super::controls::Padding;
8/// Options for `fly_to` animation
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
10#[serde(rename_all = "camelCase")]
11pub struct FlyToOptions {
12    /// Target center
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub center: Option<LatLng>,
15
16    /// Target zoom level
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub zoom: Option<f64>,
19
20    /// Target bearing in degrees
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub bearing: Option<f64>,
23
24    /// Target pitch in degrees
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub pitch: Option<f64>,
27
28    /// Animation duration in milliseconds
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub duration: Option<u32>,
31
32    /// If true, animation is considered essential (not affected by prefers-reduced-motion)
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub essential: Option<bool>,
35
36    /// Viewport padding
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub padding: Option<Padding>,
39}
40
41/// Options for `ease_to` animation
42#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
43#[serde(rename_all = "camelCase")]
44pub struct EaseToOptions {
45    /// Target center
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub center: Option<LatLng>,
48
49    /// Target zoom level
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub zoom: Option<f64>,
52
53    /// Target bearing in degrees
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub bearing: Option<f64>,
56
57    /// Target pitch in degrees
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub pitch: Option<f64>,
60
61    /// Animation duration in milliseconds
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub duration: Option<u32>,
64
65    /// Viewport padding
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub padding: Option<Padding>,
68}
69
70/// Options for `jump_to` (instant, no animation)
71#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
72#[serde(rename_all = "camelCase")]
73pub struct JumpToOptions {
74    /// Target center
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub center: Option<LatLng>,
77
78    /// Target zoom level
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub zoom: Option<f64>,
81
82    /// Target bearing in degrees
83    #[serde(skip_serializing_if = "Option::is_none")]
84    pub bearing: Option<f64>,
85
86    /// Target pitch in degrees
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub pitch: Option<f64>,
89
90    /// Viewport padding
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub padding: Option<Padding>,
93}
94
95/// Options for `fit_bounds`
96#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
97#[serde(rename_all = "camelCase")]
98pub struct FitBoundsOptions {
99    /// Viewport padding
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub padding: Option<Padding>,
102
103    /// Maximum zoom level
104    #[serde(skip_serializing_if = "Option::is_none")]
105    pub max_zoom: Option<f64>,
106
107    /// Animation duration in milliseconds
108    #[serde(skip_serializing_if = "Option::is_none")]
109    pub duration: Option<u32>,
110
111    /// If true, use linear easing (no curve)
112    #[serde(skip_serializing_if = "Option::is_none")]
113    pub linear: Option<bool>,
114}