diff --git a/src/AdvancedCalculator.Android/Styles/Android.axaml b/src/AdvancedCalculator.Android/Styles/Android.axaml
index 30f7e04..20622f7 100644
--- a/src/AdvancedCalculator.Android/Styles/Android.axaml
+++ b/src/AdvancedCalculator.Android/Styles/Android.axaml
@@ -1,10 +1,12 @@
-
-
- 16
- 18
- 24
- 1.35
+
+
+
+ 16
+ 18
+ 24
+ 1.35
+
-
-
+
diff --git a/src/AdvancedCalculator.Browser/Styles/Browser.axaml b/src/AdvancedCalculator.Browser/Styles/Browser.axaml
index 3842c71..ee701bb 100644
--- a/src/AdvancedCalculator.Browser/Styles/Browser.axaml
+++ b/src/AdvancedCalculator.Browser/Styles/Browser.axaml
@@ -1,9 +1,11 @@
-
-
- 15
- 22
- 1.3
+
+
+
+ 15
+ 22
+ 1.3
+
-
-
+
diff --git a/src/AdvancedCalculator.Desktop/Styles/Desktop.axaml b/src/AdvancedCalculator.Desktop/Styles/Desktop.axaml
index 7a951d8..c5ac0d9 100644
--- a/src/AdvancedCalculator.Desktop/Styles/Desktop.axaml
+++ b/src/AdvancedCalculator.Desktop/Styles/Desktop.axaml
@@ -1,9 +1,11 @@
-
-
- 13
- 1.2
- 20
+
+
+
+ 13
+ 1.2
+ 20
+
-
-
+
diff --git a/src/AdvancedCalculator/Converters/IsZeroConverter.cs b/src/AdvancedCalculator/Converters/IsZeroConverter.cs
new file mode 100644
index 0000000..c6d30f8
--- /dev/null
+++ b/src/AdvancedCalculator/Converters/IsZeroConverter.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Globalization;
+using Avalonia.Data.Converters;
+
+namespace AdvancedCalculator.Converters;
+
+public class IsZeroConverter : IValueConverter
+{
+ public static readonly IsZeroConverter Instance = new();
+
+ public object? Convert(object? value, Type targetType, object? parameter, CultureInfo? culture)
+ {
+ if (value is int i)
+ return i == 0;
+ if (value is long l)
+ return l == 0L;
+ if (value is double d)
+ return Math.Abs(d) < double.Epsilon;
+ return false;
+ }
+
+ public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo? culture)
+ => throw new NotSupportedException();
+}
+
diff --git a/src/AdvancedCalculator/Converters/WidthToPaneOpenConverter.cs b/src/AdvancedCalculator/Converters/WidthToPaneOpenConverter.cs
new file mode 100644
index 0000000..13ec666
--- /dev/null
+++ b/src/AdvancedCalculator/Converters/WidthToPaneOpenConverter.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Globalization;
+using Avalonia.Data.Converters;
+
+namespace AdvancedCalculator.Converters;
+
+public class WidthToPaneOpenConverter : IValueConverter
+{
+ public static readonly WidthToPaneOpenConverter Instance = new();
+
+ public object? Convert(object? value, Type targetType, object? parameter, CultureInfo? culture)
+ {
+ if (value is double width)
+ {
+ double threshold = 640;
+ if (parameter is double p)
+ threshold = p;
+ else if (parameter is string s && double.TryParse(s, NumberStyles.Number, CultureInfo.InvariantCulture, out var parsed))
+ threshold = parsed;
+
+ return width >= threshold;
+ }
+ return true;
+ }
+
+ public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo? culture)
+ => throw new NotSupportedException();
+}
+
diff --git a/src/AdvancedCalculator/Converters/WidthToSplitViewModeConverter.cs b/src/AdvancedCalculator/Converters/WidthToSplitViewModeConverter.cs
new file mode 100644
index 0000000..efb420a
--- /dev/null
+++ b/src/AdvancedCalculator/Converters/WidthToSplitViewModeConverter.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Globalization;
+using Avalonia.Controls;
+using Avalonia.Data.Converters;
+
+namespace AdvancedCalculator.Converters;
+
+public class WidthToSplitViewModeConverter : IValueConverter
+{
+ public static readonly WidthToSplitViewModeConverter Instance = new();
+
+ public object? Convert(object? value, Type targetType, object? parameter, CultureInfo? culture)
+ {
+ if (value is double width)
+ {
+ double threshold = 640;
+ if (parameter is double p)
+ threshold = p;
+ else if (parameter is string s && double.TryParse(s, NumberStyles.Number, CultureInfo.InvariantCulture, out var parsed))
+ threshold = parsed;
+
+ return width < threshold ? SplitViewDisplayMode.Overlay : SplitViewDisplayMode.Inline;
+ }
+ return SplitViewDisplayMode.Inline;
+ }
+
+ public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo? culture)
+ => throw new NotSupportedException();
+}
+
diff --git a/src/AdvancedCalculator/Styles/Scroll.axaml b/src/AdvancedCalculator/Styles/Scroll.axaml
index ea9284d..4f1e590 100644
--- a/src/AdvancedCalculator/Styles/Scroll.axaml
+++ b/src/AdvancedCalculator/Styles/Scroll.axaml
@@ -1,15 +1,11 @@
-
+
-
-
-
-
+
diff --git a/src/AdvancedCalculator/Styles/Typography.axaml b/src/AdvancedCalculator/Styles/Typography.axaml
index eb80272..e6d5f62 100644
--- a/src/AdvancedCalculator/Styles/Typography.axaml
+++ b/src/AdvancedCalculator/Styles/Typography.axaml
@@ -1,18 +1,20 @@
-
-
- 12
- 14
- 16
- 20
+
+
+
+ 12
+ 14
+ 16
+ 20
- 18
- 22
- 26
+ 18
+ 22
+ 26
- 1.1
- 1.25
- 1.4
+ 1.1
+ 1.25
+ 1.4
+
-
-
+
diff --git a/src/AdvancedCalculator/Views/MainView.axaml b/src/AdvancedCalculator/Views/MainView.axaml
index d5fc5e7..981363e 100644
--- a/src/AdvancedCalculator/Views/MainView.axaml
+++ b/src/AdvancedCalculator/Views/MainView.axaml
@@ -11,34 +11,16 @@
+
+
+
-
-
-
-
+ CompactPaneLength="0"
+ DisplayMode="{Binding $parent[Window].Bounds.Width, Converter={StaticResource WidthToSplitViewModeConverter}, ConverterParameter=640}"
+ IsPaneOpen="{Binding $parent[Window].Bounds.Width, Converter={StaticResource WidthToPaneOpenConverter}, ConverterParameter=640}">
@@ -50,11 +32,11 @@
-
-
-
-
-
-
+ HorizontalAlignment="Center" VerticalAlignment="Center" />
-
-
-
-
-
-
+ HorizontalAlignment="Center" VerticalAlignment="Center" />
-
+