diff --git a/examples/EmergencyManagement/webui/src/index.css b/examples/EmergencyManagement/webui/src/index.css
index 4ad9c69..38ac022 100644
--- a/examples/EmergencyManagement/webui/src/index.css
+++ b/examples/EmergencyManagement/webui/src/index.css
@@ -404,9 +404,15 @@ a {
.page-definition-list {
display: grid;
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1.25rem;
margin: 0;
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
+}
+
+@media (min-width: 1200px) {
+ .page-definition-list {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
}
.page-definition-list div {
@@ -425,6 +431,19 @@ a {
.page-definition-list dd {
margin: 0;
color: var(--text-primary);
+ word-break: break-word;
+ overflow-wrap: anywhere;
+ hyphens: auto;
+}
+
+.page-grid--dashboard {
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
+}
+
+@media (min-width: 1200px) {
+ .page-grid--dashboard {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
}
.page-grid {
diff --git a/examples/EmergencyManagement/webui/src/pages/DashboardPage.tsx b/examples/EmergencyManagement/webui/src/pages/DashboardPage.tsx
index 61c6ab2..ed63330 100644
--- a/examples/EmergencyManagement/webui/src/pages/DashboardPage.tsx
+++ b/examples/EmergencyManagement/webui/src/pages/DashboardPage.tsx
@@ -123,120 +123,122 @@ export function DashboardPage(): JSX.Element {
Dashboard
High-level overview of the Emergency Management gateway.
-
-
Gateway Status
- {error &&
{error}
}
- {!error && !gatewayInfo &&
Loading gateway information…
}
+
+
+
Gateway Status
+ {error &&
{error}
}
+ {!error && !gatewayInfo &&
Loading gateway information…
}
+ {gatewayInfo && (
+
+
+
- Version
+ - {gatewayInfo.version}
+
+
+
- Uptime
+ - {gatewayInfo.uptime}
+
+
+
- Link State
+ - {resolvedLinkState}
+
+
+
- Link Status
+ - {resolvedLinkMessage}
+
+
+
- Last Successful Link
+ - {resolvedLastSuccess}
+
+
+
- Last Link Attempt
+ - {resolvedLastAttempt}
+
+ {resolvedLastError && (
+
+
- Last Link Error
+ - {resolvedLastError}
+
+ )}
+
+
- Active Interfaces
+ -
+ {activeInterfaces.length > 0
+ ? activeInterfaces.map((item) => formatInterface(item)).join(', ')
+ : 'No active interfaces reported'}
+
+
+
+
- Configured Interfaces
+ -
+ {reticulumInterfaces.length > 0
+ ? reticulumInterfaces
+ .map((item) =>
+ `${formatInterface(item)} (${item.online ? 'online' : 'offline'})`,
+ )
+ .join(', ')
+ : 'No interfaces reported'}
+
+
+
+ )}
+
{gatewayInfo && (
-
-
-
- Version
- - {gatewayInfo.version}
-
-
-
- Uptime
- - {gatewayInfo.uptime}
-
-
-
- Link State
- - {resolvedLinkState}
-
-
-
- Link Status
- - {resolvedLinkMessage}
-
-
-
- Last Successful Link
- - {resolvedLastSuccess}
-
-
-
- Last Link Attempt
- - {resolvedLastAttempt}
-
- {resolvedLastError && (
+
+
Gateway Configuration
+
-
- Last Link Error
- - {resolvedLastError}
+ - Server Identity
+ - {gatewayInfo.serverIdentity ?? 'Not configured'}
- )}
-
-
- Active Interfaces
- -
- {activeInterfaces.length > 0
- ? activeInterfaces.map((item) => formatInterface(item)).join(', ')
- : 'No active interfaces reported'}
-
-
-
-
- Configured Interfaces
- -
- {reticulumInterfaces.length > 0
- ? reticulumInterfaces
- .map((item) =>
- `${formatInterface(item)} (${item.online ? 'online' : 'offline'})`,
- )
- .join(', ')
- : 'No interfaces reported'}
-
-
-
+
+
- Client Display Name
+ - {gatewayInfo.clientDisplayName}
+
+
+
- Request Timeout
+ -
+ {Number.isInteger(gatewayInfo.requestTimeoutSeconds)
+ ? `${gatewayInfo.requestTimeoutSeconds} seconds`
+ : `${gatewayInfo.requestTimeoutSeconds.toFixed(1)} seconds`}
+
+
+
+
- LXMF Config Path
+ - {gatewayInfo.lxmfConfigPath ?? 'Not configured'}
+
+
+
- LXMF Storage Path
+ - {gatewayInfo.lxmfStoragePath ?? 'Not configured'}
+
+
+
- Allowed Origins
+ -
+ {allowedOrigins.length > 0
+ ? allowedOrigins.join(', ')
+ : 'Not configured'}
+
+
+
+
)}
-
- {gatewayInfo && (
-
Gateway Configuration
+
Web UI API Configuration
-
- Server Identity
- - {gatewayInfo.serverIdentity ?? 'Not configured'}
-
-
-
- Client Display Name
- - {gatewayInfo.clientDisplayName}
+ - API Base URL
+ - {webUiConfig.apiBaseUrl}
-
- Request Timeout
- -
- {Number.isInteger(gatewayInfo.requestTimeoutSeconds)
- ? `${gatewayInfo.requestTimeoutSeconds} seconds`
- : `${gatewayInfo.requestTimeoutSeconds.toFixed(1)} seconds`}
-
+ - Live Updates URL
+ - {webUiConfig.liveUpdatesUrl}
-
- LXMF Config Path
- - {gatewayInfo.lxmfConfigPath ?? 'Not configured'}
-
-
-
- LXMF Storage Path
- - {gatewayInfo.lxmfStoragePath ?? 'Not configured'}
-
-
-
- Allowed Origins
- -
- {allowedOrigins.length > 0
- ? allowedOrigins.join(', ')
- : 'Not configured'}
-
+ - Server Identity Header
+ - {webUiConfig.serverIdentityHeader ?? 'Not configured'}
- )}
-
-
Web UI API Configuration
-
-
-
- API Base URL
- - {webUiConfig.apiBaseUrl}
-
-
-
- Live Updates URL
- - {webUiConfig.liveUpdatesUrl}
-
-
-
- Server Identity Header
- - {webUiConfig.serverIdentityHeader ?? 'Not configured'}
-
-
);