Spaces:
Sleeping
Sleeping
TOTEM Studio commited on
Commit ·
b773732
1
Parent(s): c7d94b0
fix gauge: SVG transform attr instead of CSS style (Gradio strips style transforms)
Browse files
app.py
CHANGED
|
@@ -468,14 +468,11 @@ TOTEM_CSS = """
|
|
| 468 |
}
|
| 469 |
|
| 470 |
.totem-signal-label {
|
| 471 |
-
position: absolute;
|
| 472 |
-
left: 0;
|
| 473 |
-
right: 0;
|
| 474 |
-
bottom: -18px;
|
| 475 |
text-align: center;
|
| 476 |
font-family: var(--font-ui);
|
| 477 |
font-size: 12px;
|
| 478 |
color: rgba(174, 183, 204, 0.98);
|
|
|
|
| 479 |
}
|
| 480 |
|
| 481 |
.totem-status-row {
|
|
@@ -1326,46 +1323,31 @@ def render_signal_gauge(value: int) -> str:
|
|
| 1326 |
clamped = max(0, min(100, int(value or 0)))
|
| 1327 |
circ = 427.26
|
| 1328 |
filled = circ * (clamped / 100.0)
|
| 1329 |
-
|
| 1330 |
-
|
| 1331 |
-
seg = circ / 4 # 106.815 per segment
|
| 1332 |
-
segs = [
|
| 1333 |
-
("#8A4DFF", 0),
|
| 1334 |
-
("#39C9FF", 1),
|
| 1335 |
-
("#22B573", 2),
|
| 1336 |
-
("#F2C14E", 3),
|
| 1337 |
-
]
|
| 1338 |
arc_elements = []
|
| 1339 |
-
for
|
| 1340 |
seg_start = idx * seg
|
| 1341 |
-
seg_end = (idx + 1) * seg
|
| 1342 |
if filled <= seg_start:
|
| 1343 |
-
break
|
| 1344 |
seg_filled = min(filled - seg_start, seg)
|
| 1345 |
-
#
|
| 1346 |
rotate_deg = -90 + (seg_start / circ) * 360
|
| 1347 |
arc_elements.append(
|
| 1348 |
f'<circle cx="80" cy="80" r="68" fill="none" stroke="{color}" '
|
| 1349 |
f'stroke-width="7" stroke-linecap="round" '
|
| 1350 |
f'stroke-dasharray="{seg_filled:.2f} {circ:.2f}" '
|
| 1351 |
-
f'
|
| 1352 |
-
f'style="transform:rotate({rotate_deg:.1f}deg);transform-origin:80px 80px;'
|
| 1353 |
-
f'filter:drop-shadow(0 0 4px {color}88);" />'
|
| 1354 |
)
|
| 1355 |
arcs_html = "\n ".join(arc_elements)
|
| 1356 |
return f"""
|
| 1357 |
<div class="totem-signal-wrap">
|
| 1358 |
<svg class="totem-signal" viewBox="0 0 160 160" role="img" aria-label="TOTEM Signal {clamped} percent">
|
| 1359 |
-
<!-- Outer decorative ring -->
|
| 1360 |
<circle class="signal-outer-ring" cx="80" cy="80" r="76"></circle>
|
| 1361 |
-
<!-- Track -->
|
| 1362 |
<circle class="signal-track" cx="80" cy="80" r="68"></circle>
|
| 1363 |
-
<!-- Gradient arc segments -->
|
| 1364 |
{arcs_html}
|
| 1365 |
-
<!-- Inner radar rings -->
|
| 1366 |
<circle class="signal-inner-ring" cx="80" cy="80" r="52"></circle>
|
| 1367 |
<circle class="signal-inner-ring" cx="80" cy="80" r="40"></circle>
|
| 1368 |
-
<!-- Center star compass -->
|
| 1369 |
<path class="signal-star" d="M80 58 L84.7 73.5 L100.9 73.5 L87.8 82.9 L92.6 98.4 L80 89.1 L67.4 98.4 L72.2 82.9 L59.1 73.5 L75.3 73.5 Z"></path>
|
| 1370 |
</svg>
|
| 1371 |
<div class="totem-signal-label">TOTEM Signal {clamped}%</div>
|
|
|
|
| 468 |
}
|
| 469 |
|
| 470 |
.totem-signal-label {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 471 |
text-align: center;
|
| 472 |
font-family: var(--font-ui);
|
| 473 |
font-size: 12px;
|
| 474 |
color: rgba(174, 183, 204, 0.98);
|
| 475 |
+
margin-top: 6px;
|
| 476 |
}
|
| 477 |
|
| 478 |
.totem-status-row {
|
|
|
|
| 1323 |
clamped = max(0, min(100, int(value or 0)))
|
| 1324 |
circ = 427.26
|
| 1325 |
filled = circ * (clamped / 100.0)
|
| 1326 |
+
seg = circ / 4 # ~106.8 per quarter
|
| 1327 |
+
seg_colors = ["#8A4DFF", "#39C9FF", "#22B573", "#F2C14E"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1328 |
arc_elements = []
|
| 1329 |
+
for idx, color in enumerate(seg_colors):
|
| 1330 |
seg_start = idx * seg
|
|
|
|
| 1331 |
if filled <= seg_start:
|
| 1332 |
+
break
|
| 1333 |
seg_filled = min(filled - seg_start, seg)
|
| 1334 |
+
# rotate_deg: start at top (-90deg) then add segment offset
|
| 1335 |
rotate_deg = -90 + (seg_start / circ) * 360
|
| 1336 |
arc_elements.append(
|
| 1337 |
f'<circle cx="80" cy="80" r="68" fill="none" stroke="{color}" '
|
| 1338 |
f'stroke-width="7" stroke-linecap="round" '
|
| 1339 |
f'stroke-dasharray="{seg_filled:.2f} {circ:.2f}" '
|
| 1340 |
+
f'transform="rotate({rotate_deg:.1f} 80 80)" />'
|
|
|
|
|
|
|
| 1341 |
)
|
| 1342 |
arcs_html = "\n ".join(arc_elements)
|
| 1343 |
return f"""
|
| 1344 |
<div class="totem-signal-wrap">
|
| 1345 |
<svg class="totem-signal" viewBox="0 0 160 160" role="img" aria-label="TOTEM Signal {clamped} percent">
|
|
|
|
| 1346 |
<circle class="signal-outer-ring" cx="80" cy="80" r="76"></circle>
|
|
|
|
| 1347 |
<circle class="signal-track" cx="80" cy="80" r="68"></circle>
|
|
|
|
| 1348 |
{arcs_html}
|
|
|
|
| 1349 |
<circle class="signal-inner-ring" cx="80" cy="80" r="52"></circle>
|
| 1350 |
<circle class="signal-inner-ring" cx="80" cy="80" r="40"></circle>
|
|
|
|
| 1351 |
<path class="signal-star" d="M80 58 L84.7 73.5 L100.9 73.5 L87.8 82.9 L92.6 98.4 L80 89.1 L67.4 98.4 L72.2 82.9 L59.1 73.5 L75.3 73.5 Z"></path>
|
| 1352 |
</svg>
|
| 1353 |
<div class="totem-signal-label">TOTEM Signal {clamped}%</div>
|