diff --git a/package-lock.json b/package-lock.json
index 31a3d8b4..b120a6ca 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,6 +13,7 @@
"axios": "^1.6.2",
"compression": "^1.7.4",
"cors": "^2.8.5",
+ "dayjs": "^1.11.20",
"dotenv": "^16.3.1",
"express": "^4.21.2",
"express-rate-limit": "^7.5.0",
@@ -3901,6 +3902,12 @@
"node": ">=18"
}
},
+ "node_modules/dayjs": {
+ "version": "1.11.20",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz",
+ "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==",
+ "license": "MIT"
+ },
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
diff --git a/package.json b/package.json
index fd230181..777d7f44 100644
--- a/package.json
+++ b/package.json
@@ -25,6 +25,7 @@
"axios": "^1.6.2",
"compression": "^1.7.4",
"cors": "^2.8.5",
+ "dayjs": "^1.11.20",
"dotenv": "^16.3.1",
"express": "^4.21.2",
"express-rate-limit": "^7.5.0",
diff --git a/src/App.jsx b/src/App.jsx
index 6e23e5f3..07bd54f3 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -320,7 +320,7 @@ const App = () => {
const propagation = usePropagation(config.location, dxLocation, config.propagation);
const mySpots = useMySpots(config.callsign);
- const satellites = useSatellites(config.location);
+ const satellites = useSatellites(config.location, config.satellite);
const localWeather = useWeather(config.location, config.allUnits);
const dxWeather = useWeather(dxLocation, config.allUnits);
const localAlerts = useWeatherAlerts(config.location);
diff --git a/src/components/SettingsPanel.jsx b/src/components/SettingsPanel.jsx
index ef63adb3..34b58588 100644
--- a/src/components/SettingsPanel.jsx
+++ b/src/components/SettingsPanel.jsx
@@ -49,6 +49,8 @@ export const SettingsPanel = ({
const [gridSquare, setGridSquare] = useState(config?.locator || '');
const [lat, setLat] = useState(config?.location?.lat ?? 0);
const [lon, setLon] = useState(config?.location?.lon ?? 0);
+ const [stationAlt, setStationAlt] = useState(config?.location?.stationAlt ?? 100);
+ const [minElev, setMinElev] = useState(config?.satellite?.minElev ?? 5.0);
const [layout, setLayout] = useState(config?.layout || 'modern');
const [mouseZoom, setMouseZoom] = useState(config?.mouseZoom || 50);
const [timezone, setTimezone] = useState(config?.timezone || '');
@@ -179,6 +181,8 @@ export const SettingsPanel = ({
setheaderSize(config.headerSize || 1.0);
setLat(config.location?.lat ?? 0);
setLon(config.location?.lon ?? 0);
+ setStationAlt(config.location?.stationAlt ?? 100);
+ setMinElev(config.satellite?.minElev ?? 5.0);
setLayout(config.layout || 'modern');
setMouseZoom(config.mouseZoom || 50);
setTimezone(config.timezone || '');
@@ -419,7 +423,8 @@ export const SettingsPanel = ({
headerSize: headerSize,
swapHeaderClocks,
showMutualReception,
- location: { lat: parseFloat(lat), lon: parseFloat(lon) },
+ location: { lat: parseFloat(lat) || 0, lon: parseFloat(lon) || 0, stationAlt: parseInt(stationAlt) || 100 },
+ satellite: { minElev: parseFloat(minElev) || 5.0 },
theme,
customTheme,
layout,
@@ -3360,6 +3365,75 @@ export const SettingsPanel = ({
Footprints
+
+ {/* station altitude and minimum elevation inputs */}
+
+
+
+ setStationAlt(e.target.valueAsNumber ?? 100)}
+ style={{
+ width: '100%',
+ padding: '10px',
+ background: 'var(--bg-tertiary)',
+ border: '1px solid var(--border-color)',
+ borderRadius: '6px',
+ color: 'var(--text-primary)',
+ fontSize: '14px',
+ fontFamily: 'JetBrains Mono, monospace',
+ boxSizing: 'border-box',
+ }}
+ />
+
+
+
+ setMinElev(e.target.valueAsNumber ?? 5.0)}
+ style={{
+ width: '100%',
+ padding: '10px',
+ background: 'var(--bg-tertiary)',
+ border: '1px solid var(--border-color)',
+ borderRadius: '6px',
+ color: 'var(--text-primary)',
+ fontSize: '14px',
+ fontFamily: 'JetBrains Mono, monospace',
+ boxSizing: 'border-box',
+ }}
+ />
+
+
+
{/* Lead Time Slider WIP