+ {/* DX NEWS label */}
+
+ 📰 DX NEWS
+
+
+ {/* Scrolling content */}
+
+
+ {tickerItems.map((item, i) => (
+
+
+ {item.title}
+
+
+ {item.desc}
+
+
+ ◆
+
+
+ ))}
+ {/* Duplicate for seamless loop */}
+ {tickerItems.map((item, i) => (
+
+
+ {item.title}
+
+
+ {item.desc}
+
+
+ ◆
+
+
+ ))}
+
+
+
+ );
+};
+
+export default DXNewsTicker;
diff --git a/src/components/WorldMap.jsx b/src/components/WorldMap.jsx
index 4bfb23f..8b1caa8 100644
--- a/src/components/WorldMap.jsx
+++ b/src/components/WorldMap.jsx
@@ -14,6 +14,7 @@ import { filterDXPaths, getBandColor } from '../utils/callsign.js';
import { getAllLayers } from '../plugins/layerRegistry.js';
import PluginLayer from './PluginLayer.jsx';
+import { DXNewsTicker } from './DXNewsTicker.jsx';
export const WorldMap = ({
@@ -732,22 +733,26 @@ export const WorldMap = ({
)}
- {/* Legend */}
+ {/* DX News Ticker - left side of bottom bar */}
+
{showDXPaths && (
diff --git a/src/components/index.js b/src/components/index.js
index 3093e72..e0294c4 100644
--- a/src/components/index.js
+++ b/src/components/index.js
@@ -18,3 +18,4 @@ export { SolarPanel } from './SolarPanel.jsx';
export { PropagationPanel } from './PropagationPanel.jsx';
export { DXpeditionPanel } from './DXpeditionPanel.jsx';
export { PSKReporterPanel } from './PSKReporterPanel.jsx';
+export { DXNewsTicker } from './DXNewsTicker.jsx';
diff --git a/src/styles/main.css b/src/styles/main.css
index cec6b54..ef225f9 100644
--- a/src/styles/main.css
+++ b/src/styles/main.css
@@ -323,6 +323,7 @@ body::before {
@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
@keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } }
+@keyframes dxnews-scroll { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } }
.loading-spinner {
width: 14px; height: 14px;