1+ using System ;
2+ using System . Collections . Generic ;
3+ using System . Linq ;
4+ using System . Text ;
5+ using System . Threading . Tasks ;
6+
7+ namespace BlazorBootstrap ;
8+
9+ public enum ZoomMode
10+ {
11+ None ,
12+ X ,
13+ Y ,
14+ XY
15+ }
16+
17+ public enum ModifierKey
18+ {
19+ None ,
20+ Ctrl ,
21+ Alt ,
22+ Shift ,
23+ Meta
24+ }
25+
26+ public class ZoomLimitAxisOptions
27+ {
28+ /// <summary>
29+ /// Minimum allowed value for scale.min
30+ /// </summary>
31+ [ JsonIgnore ]
32+ public double ? Min { get ; set ; }
33+
34+ [ JsonIgnore ]
35+ public bool ? MinimumIsOriginal { get ; set ; }
36+
37+ [ JsonInclude ]
38+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
39+ [ JsonPropertyName ( "min" ) ]
40+ private string ? minText => MinimumIsOriginal . GetValueOrDefault ( ) ? "original" : Min ? . ToString ( ) ;
41+
42+ /// <summary>
43+ /// Maximum allowed value for scale.max
44+ /// </summary>
45+ [ JsonIgnore ]
46+ public double ? Max { get ; set ; }
47+
48+ [ JsonIgnore ]
49+ public bool ? MaximumIsOriginal { get ; set ; }
50+
51+ [ JsonInclude ]
52+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
53+ [ JsonPropertyName ( "max" ) ]
54+ private string ? maxText => MaximumIsOriginal . GetValueOrDefault ( ) ? "original" : Max ? . ToString ( ) ;
55+
56+ /// <summary>
57+ /// Minimum allowed range (max - min). This defines the max zoom level.
58+ /// </summary>
59+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
60+ [ JsonPropertyName ( "minRange" ) ]
61+ public double ? MinRange { get ; set ; }
62+ }
63+
64+ public class DragOptions
65+ {
66+ ///<summary>
67+ /// Enable drag-to-zoom
68+ /// <summary>
69+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
70+ public bool ? Enabled { get ; set ; }
71+
72+ ///<summary>
73+ /// Fill color
74+ /// <summary>
75+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
76+ public string ? BackgroundColor { get ; set ; }
77+
78+ ///<summary>
79+ /// Stroke color
80+ /// <summary>
81+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
82+ public string ? BorderColor { get ; set ; }
83+
84+ ///<summary>
85+ /// Stroke width
86+ /// <summary>
87+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
88+ public double ? BorderWidth { get ; set ; }
89+
90+ ///<summary>
91+ /// When the dragging box is dran on the chart
92+ /// <summary>
93+ [ JsonIgnore ]
94+ public DrawTime ? DrawTime { get ; set ; }
95+
96+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
97+ [ JsonInclude ]
98+ [ JsonPropertyName ( "drawTime" ) ]
99+ private string ? DrawTimeText => DrawTime ? . ToString ( ) . ToLower ( ) ;
100+
101+ ///<summary>
102+ /// Minimal zoom distance required before actually applying zoom
103+ /// <summary>
104+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
105+ public double ? Threshold { get ; set ; }
106+
107+ ///<summary>
108+ /// Modifier key required for drag-to-zoom
109+ /// <summary>
110+ [ JsonIgnore ]
111+ public ModifierKey ? ModifierKey { get ; set ; }
112+
113+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
114+ [ JsonInclude ]
115+ [ JsonPropertyName ( "modifierKey" ) ]
116+ private string ? ModifierKeyText => ( ModifierKey == BlazorBootstrap . ModifierKey . None ) ? string . Empty : ModifierKey ? . ToString ( ) . ToLower ( ) ;
117+ }
118+
119+ public class PinchOptions
120+ {
121+ ///<summary>
122+ /// /// Enable zooming via pinch gesture
123+ /// /// <summary>
124+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
125+ public bool ? Enabled { get ; set ; }
126+ }
127+
128+ public class PanOptions
129+ { ///<summary>
130+ /// Enable panning
131+ /// <summary>
132+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
133+ public bool ? Enabled { get ; set ; }
134+
135+ ///<summary>
136+ /// Allowed panning directions
137+ /// <summary>
138+ [ JsonIgnore ]
139+ public ZoomMode ? Mode { get ; set ; }
140+
141+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
142+ [ JsonInclude ]
143+ [ JsonPropertyName ( "mode" ) ]
144+ private string ? ModeText => ( Mode == ZoomMode . None ) ? string . Empty : Mode ? . ToString ( ) . ToLower ( ) ;
145+
146+ ///<summary>
147+ /// Modifier key required for panning with mouse
148+ /// <summary>
149+ [ JsonIgnore ]
150+ public ModifierKey ? ModifierKey { get ; set ; }
151+
152+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
153+ [ JsonInclude ]
154+ [ JsonPropertyName ( "modifierKey" ) ]
155+ private string ? ModifierKeyText => ( ModifierKey == BlazorBootstrap . ModifierKey . None ) ? string . Empty : ModifierKey ? . ToString ( ) . ToLower ( ) ;
156+
157+ ///<summary>
158+ /// Enable panning over a scale for that axis (regardless of mode)
159+ /// <summary>
160+ [ JsonIgnore ]
161+ public ZoomMode ? ScaleMode { get ; set ; }
162+
163+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
164+ [ JsonInclude ]
165+ [ JsonPropertyName ( "scaleMode" ) ]
166+ private string ? ScaleModeText => ( ScaleMode == ZoomMode . None ) ? string . Empty : ScaleMode ? . ToString ( ) . ToLower ( ) ;
167+
168+ ///<summary>
169+ /// Enable panning over a scale for that axis (but only if mode is also enabled), and disables panning along that axis otherwise. Deprecated.
170+ /// <summary>
171+ [ JsonIgnore ]
172+ public ZoomMode ? OverScaleMode { get ; set ; }
173+
174+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
175+ [ JsonInclude ]
176+ [ JsonPropertyName ( "overScaleMode" ) ]
177+ private string ? OverScaleModeText => ( OverScaleMode == ZoomMode . None ) ? string . Empty : OverScaleMode ? . ToString ( ) . ToLower ( ) ;
178+
179+ ///<summary>
180+ /// Minimal pan distance required before actually applying pan
181+ /// <summary>
182+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
183+ public double ? Threshold { get ; set ; }
184+ }
185+
186+ public class ZoomLimitOptions
187+ {
188+ public ZoomLimitAxisOptions X { get ; set ; } = new ( ) ;
189+ public ZoomLimitAxisOptions Y { get ; set ; } = new ( ) ;
190+
191+ }
192+
193+ public class ZoomOptions
194+ {
195+ ///<summary>
196+ /// Options of the mouse wheel behavior
197+ /// <summary>
198+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
199+ public WheelOptions ? Wheel { get ; set ; }
200+
201+ ///<summary>
202+ /// Options of the drag-to-zoom behavior
203+ /// <summary>
204+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
205+ public DragOptions ? Drag { get ; set ; }
206+
207+ ///<summary>
208+ /// Options of the pinch behavior
209+ /// <summary>
210+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
211+ public PinchOptions ? Pinch { get ; set ; }
212+
213+ ///<summary>
214+ /// Allowed zoom directions
215+ /// <summary>
216+ [ JsonIgnore ]
217+ public ZoomMode ? Mode { get ; set ; }
218+
219+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
220+ [ JsonInclude ]
221+ [ JsonPropertyName ( "mode" ) ]
222+ private string ? ModeText => ( Mode == ZoomMode . None ) ? string . Empty : Mode ? . ToString ( ) . ToLower ( ) ;
223+
224+ ///<summary>
225+ /// Which of the enabled zooming directions should only be available when the mouse cursor is over a scale for that axis
226+ /// <summary>
227+ [ JsonIgnore ]
228+ public ZoomMode ? ScaleMode { get ; set ; }
229+
230+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
231+ [ JsonInclude ]
232+ [ JsonPropertyName ( "scaleMode" ) ]
233+ private string ? ScaleModeText => ( ScaleMode == ZoomMode . None ) ? string . Empty : ScaleMode ? . ToString ( ) . ToLower ( ) ;
234+
235+ ///<summary>
236+ /// Allowed zoom directions when the mouse cursor is over a scale for that axis (but only if mode is also enabled), and disables zooming along that axis otherwise. Deprecated; use scaleMode instead.
237+ /// <summary>
238+ [ JsonIgnore ]
239+ public ZoomMode ? OverScaleMode { get ; set ; }
240+
241+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
242+ [ JsonInclude ]
243+ [ JsonPropertyName ( "overScaleMode" ) ]
244+ private string ? OverScaleModeText => ( OverScaleMode == ZoomMode . None ) ? string . Empty : OverScaleMode ? . ToString ( ) . ToLower ( ) ;
245+
246+ }
247+
248+ public class WheelOptions
249+ {
250+ ///<summary>
251+ /// Enable zooming via mouse wheel
252+ /// <summary>
253+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
254+ public bool ? Enabled { get ; set ; }
255+
256+ ///<summary>
257+ /// Factor of zoom speed via mouse wheel
258+ /// <summary>
259+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
260+ public double ? Speed { get ; set ; }
261+
262+ ///<summary>
263+ /// Modifier key required for zooming via mouse wheel
264+ /// <summary>
265+ [ JsonIgnore ]
266+ public ModifierKey ? ModifierKey { get ; set ; }
267+
268+ [ JsonIgnore ( Condition = JsonIgnoreCondition . WhenWritingNull ) ]
269+ [ JsonInclude ]
270+ [ JsonPropertyName ( "modifierKey" ) ]
271+ private string ? ModifierKeyText => ( ModifierKey == BlazorBootstrap . ModifierKey . None ) ? string . Empty : ModifierKey ? . ToString ( ) . ToLower ( ) ;
272+ }
0 commit comments