Skip to content

Commit b45b467

Browse files
committed
feat: add dense barcode mode to balance history
1 parent c891f00 commit b45b467

2 files changed

Lines changed: 63 additions & 22 deletions

File tree

web/style.css

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1348,6 +1348,10 @@ body {
13481348
min-height: 0;
13491349
}
13501350

1351+
.activity-balance-history--dense .activity-balance-history__stack {
1352+
gap: 1px;
1353+
}
1354+
13511355
.activity-balance-history__stack[hidden] {
13521356
display: none;
13531357
}
@@ -1360,6 +1364,11 @@ body {
13601364
min-height: 8px;
13611365
}
13621366

1367+
.activity-balance-history--dense .activity-balance-history__row {
1368+
gap: 0;
1369+
min-height: 2px;
1370+
}
1371+
13631372
.activity-balance-history__run-wrapper {
13641373
display: flex;
13651374
flex-direction: column;
@@ -1396,6 +1405,10 @@ body {
13961405
min-height: 0;
13971406
}
13981407

1408+
.activity-balance-history--dense .activity-balance-history__bar {
1409+
border-radius: 6px;
1410+
}
1411+
13991412
.activity-balance-history__segment {
14001413
padding: 0;
14011414
align-items: center;
@@ -1416,6 +1429,10 @@ body {
14161429
text-shadow: 0 1px 2px rgba(15, 23, 42, 0.35);
14171430
}
14181431

1432+
.activity-balance-history--dense .activity-balance-history__segment-label {
1433+
display: none;
1434+
}
1435+
14191436
.activity-balance-history__empty {
14201437
margin: 0;
14211438
padding: 12px;

web/ui/visuals/ActivityBalanceHistory.js

Lines changed: 46 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { formatDuration } from './useUrchinLayout.js';
22
import { computeSegmentTextColor } from './ActivityShareBar.js';
33

4+
const DENSE_BARCODE_THRESHOLD = 19;
5+
46
export class ActivityBalanceHistory {
57
constructor(container) {
68
this.root = document.createElement('div');
@@ -72,37 +74,33 @@ export class ActivityBalanceHistory {
7274

7375
const fragment = document.createDocumentFragment();
7476
const displayEntries = this.entries.slice().reverse();
77+
const isDenseBarcode = displayEntries.length > DENSE_BARCODE_THRESHOLD;
78+
this.root.classList.toggle('activity-balance-history--dense', isDenseBarcode);
79+
7580
displayEntries.forEach((entry, index) => {
7681
const runNumber = Number.isFinite(entry?.runNumber)
7782
? entry.runNumber
7883
: this.entries.length - index;
79-
const badge = document.createElement('span');
80-
badge.className = 'activity-balance-history__run';
81-
badge.textContent = entry.label || `Run #${runNumber}`;
82-
if (entry.timestampLabel) {
83-
badge.title = entry.timestampLabel;
84-
}
85-
86-
const meta = document.createElement('span');
87-
meta.className = 'activity-balance-history__run-meta';
88-
meta.textContent = entry.timestampLabel || '';
89-
if (!meta.textContent) {
90-
meta.hidden = true;
91-
}
92-
93-
const labelWrapper = document.createElement('div');
94-
labelWrapper.className = 'activity-balance-history__run-wrapper';
95-
labelWrapper.append(badge);
96-
if (!meta.hidden) {
97-
labelWrapper.append(meta);
98-
}
99-
10084
const bar = document.createElement('div');
10185
bar.className = 'activity-balance-history__bar';
10286
bar.setAttribute('role', 'list');
10387
bar.dataset.index = String(runNumber);
10488
bar.addEventListener('mouseleave', this.boundHideTooltip);
10589

90+
if (isDenseBarcode) {
91+
const tooltipParts = [];
92+
const labelText = entry.label || `Run #${runNumber}`;
93+
if (labelText) {
94+
tooltipParts.push(labelText);
95+
}
96+
if (entry.timestampLabel) {
97+
tooltipParts.push(entry.timestampLabel);
98+
}
99+
if (tooltipParts.length > 0) {
100+
bar.title = tooltipParts.join(' · ');
101+
}
102+
}
103+
106104
entry.segments.forEach((segment, segmentIndex) => {
107105
const element = document.createElement('div');
108106
element.className = 'activity-share__segment activity-balance-history__segment';
@@ -136,7 +134,33 @@ export class ActivityBalanceHistory {
136134
const row = document.createElement('div');
137135
row.className = 'activity-balance-history__row';
138136
row.dataset.index = String(runNumber);
139-
row.append(labelWrapper, bar);
137+
138+
if (!isDenseBarcode) {
139+
const badge = document.createElement('span');
140+
badge.className = 'activity-balance-history__run';
141+
badge.textContent = entry.label || `Run #${runNumber}`;
142+
if (entry.timestampLabel) {
143+
badge.title = entry.timestampLabel;
144+
}
145+
146+
const meta = document.createElement('span');
147+
meta.className = 'activity-balance-history__run-meta';
148+
meta.textContent = entry.timestampLabel || '';
149+
if (!meta.textContent) {
150+
meta.hidden = true;
151+
}
152+
153+
const labelWrapper = document.createElement('div');
154+
labelWrapper.className = 'activity-balance-history__run-wrapper';
155+
labelWrapper.append(badge);
156+
if (!meta.hidden) {
157+
labelWrapper.append(meta);
158+
}
159+
160+
row.append(labelWrapper);
161+
}
162+
163+
row.append(bar);
140164

141165
fragment.append(row);
142166
});

0 commit comments

Comments
 (0)