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'}
-
-
);