{!isGateway && (
@@ -1486,6 +1467,25 @@ export function ClientOverviewPage({
)}
+ {isGateway &&
+
+ Учтено Harbor
+ {formatByteString(globalTraffic?.totalBytes || '0')}
+
+
+
+
+
+ {trafficSourceError
+ ? `Трафик не обновляется · последние данные ${trafficFreshness}`
+ : globalTraffic?.observedAt ? `Обновлено ${trafficFreshness}` : 'Ожидаем первые данные трафика'}
+
+ }
+
{
+ const powerStart = overview.indexOf('= 0 && trafficStart > powerStart, 'traffic summary follows the power section');
+ assert.equal((powerPrefix.match(//g) || []).length, 'power section is closed before traffic summary');
+ assert.equal((overview.match(/className="client-gateway-summary"/g) || []).length, 1);
assert.doesNotMatch(overview, /
assert.match(styles, /\.client-panel\.has-subscription \{[\s\S]*transform:\s*translateY\(-9vh\)/);
assert.match(styles, /\.client-panel\.has-subscription \.client-power-section \{[\s\S]*height:\s*var\(--client-work-height\);[\s\S]*padding-top:\s*var\(--client-power-top\)/);
assert.match(styles, /\.client-panel\.has-subscription \.client-form-content \{[\s\S]*padding-top:\s*var\(--client-power-top\)/);
- assert.match(rule('.client-gateway-summary'), /width:\s*min\(300px, 100%\)/);
- assert.doesNotMatch(rule('.client-gateway-summary'), /grid-column|justify-self|padding-right/);
+ assert.match(rule('.client-panel.is-gateway-home'), /grid-template-rows:\s*minmax\(0, 1fr\) auto[\s\S]*row-gap:\s*28px/);
+ assert.match(rule('.client-gateway-summary'), /grid-column:\s*1 \/ -1[\s\S]*grid-row:\s*2[\s\S]*justify-self:\s*center[\s\S]*width:\s*min\(480px, calc\(100% - 24px\)\)/);
+ assert.doesNotMatch(rule('.client-gateway-summary'), /background|border|box-shadow/);
assert.match(rule('.client-gateway-route-slot'), /min-height:\s*16px[\s\S]*overflow:\s*hidden[\s\S]*text-overflow:\s*ellipsis[\s\S]*white-space:\s*nowrap/);
assert.match(component, /client-panel\$\{showPower \? '' : ' is-setup'\}[\s\S]*is-gateway-home/);
assert.match(component, /const showPower = isGateway \|\| \(hasSubscription && Boolean\(selectedServerId\)\)/);
@@ -74,7 +75,7 @@ test('tablet and mobile regions use normal flow with viewport-safe widths', () =
assert.match(responsive, /grid-template-columns:\s*minmax\(0, 1fr\)/);
assert.match(responsive, /\.client-power-section,[\s\S]*\.client-form,[\s\S]*grid-column:\s*1/);
assert.match(responsive, /\.client-power-section \{[\s\S]*order:\s*1/);
- assert.doesNotMatch(responsive, /\.client-gateway-summary/);
+ assert.match(responsive, /\.client-gateway-summary \{[\s\S]*grid-row:\s*auto;[\s\S]*order:\s*2/);
assert.match(responsive, /width:\s*min\(100%, 380px\)/);
assert.match(responsive, /max-height:\s*none/);
assert.match(responsive, /overflow-y:\s*visible/);