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
Files changed (1) hide show
  1. app.py +7 -25
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
- # Segment colours: violet, cyan, emerald, gold - each covers 25% of circumference
1330
- # We layer 4 coloured arcs masked by dasharray to fake a gradient
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 color, idx in segs:
1340
  seg_start = idx * seg
1341
- seg_end = (idx + 1) * seg
1342
  if filled <= seg_start:
1343
- break # nothing to draw for this segment
1344
  seg_filled = min(filled - seg_start, seg)
1345
- # offset = circ - seg_filled, rotated so this segment starts at the right angle
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'stroke-dashoffset="0" '
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>