Skip to content

Commit c48762f

Browse files
Visible trash icons on merge queue, gold completion bars, help reply thread
- Merge queue trash icons now visible at 40% opacity (was hidden until hover) - Completion bars in streak chart changed from teal to gold for better contrast - Help requests: added Reply button and threaded responses (appends with username and separator). formatResponseThread renders thread with <hr> dividers. - Deleted test "Brain" badge from Supabase Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 99cd1b1 commit c48762f

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

src/components/CellLibraryPanel.vue

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,8 +436,14 @@ function getAnnotationLayers(): string[] {
436436
437437
async function submitResponse(req: HelpRequest, andResolve = false) {
438438
if (!responseNote.value.trim()) return;
439+
// If there's an existing response, append as a thread entry
440+
const userName = backend.userName || 'Unknown';
441+
let note = responseNote.value.trim();
442+
if (req.responseNote) {
443+
note = `${req.responseNote}\n---\n${userName}: ${note}`;
444+
}
439445
const payload = {
440-
note: responseNote.value.trim(),
446+
note,
441447
url: responseUrl.value.trim() || undefined,
442448
annotationLayer: responseAnnotationLayer.value.trim() || undefined,
443449
};
@@ -450,6 +456,14 @@ async function submitResponse(req: HelpRequest, andResolve = false) {
450456
helpStore.refreshPending();
451457
}
452458
459+
/** Format a threaded response note into HTML with line breaks */
460+
function formatResponseThread(note: string): string {
461+
return note
462+
.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
463+
.replace(/\n---\n/g, '<hr style="border:0;border-top:1px solid rgba(255,255,255,0.1);margin:6px 0">')
464+
.replace(/\n/g, '<br>');
465+
}
466+
453467
function relativeTime(iso: string): string {
454468
const diff = Date.now() - new Date(iso).getTime();
455469
const mins = Math.floor(diff / 60000);
@@ -639,9 +653,10 @@ const panelStyle = computed(() => ({
639653
<!-- Show existing response thread -->
640654
<div v-if="req.responseNote" class="nge-cl-response-display">
641655
<div class="nge-cl-response-label">💬 {{ req.resolvedByName || 'Response' }}:</div>
642-
<div class="nge-cl-response-text">{{ req.responseNote }}</div>
656+
<div class="nge-cl-response-text" v-html="formatResponseThread(req.responseNote)"></div>
643657
<a v-if="req.responseUrl" class="nge-cl-response-link" @click.prevent="openResponseUrl(req.responseUrl)" href="#">↗ View linked state</a>
644658
<span v-if="req.responseAnnotationLayer" class="nge-cl-response-layer">📐 Layer: {{ req.responseAnnotationLayer }}</span>
659+
<button v-if="respondingTo !== req.id" class="nge-cl-btn nge-cl-btn--reply" @click="toggleResponseForm(req.id)">↩ Reply</button>
645660
</div>
646661
</div>
647662

@@ -1230,4 +1245,18 @@ const panelStyle = computed(() => ({
12301245
.nge-cl-response-layer {
12311246
color: #889;
12321247
}
1248+
.nge-cl-btn--reply {
1249+
display: inline-block;
1250+
margin-top: 4px;
1251+
font-size: 0.7em;
1252+
padding: 2px 8px;
1253+
color: #8cf;
1254+
background: rgba(100, 180, 255, 0.1);
1255+
border: 1px solid rgba(100, 180, 255, 0.2);
1256+
border-radius: 4px;
1257+
cursor: pointer;
1258+
}
1259+
.nge-cl-btn--reply:hover {
1260+
background: rgba(100, 180, 255, 0.2);
1261+
}
12331262
</style>

src/components/SplitMergeOverlay.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,7 @@ function cancelTool() {
557557
cursor: pointer;
558558
font-size: 12px;
559559
padding: 2px 4px;
560-
opacity: 0;
560+
opacity: 0.4;
561561
transition: opacity 0.15s ease;
562562
pointer-events: auto;
563563
}

src/components/UserProfilePanel.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,7 +1229,7 @@ const emit = defineEmits({hide: null, 'open-settings': null});
12291229
}
12301230
12311231
.nge-profile-chart-bar--completion {
1232-
background: linear-gradient(to top, rgba(0, 210, 160, 0.5), rgba(0, 210, 160, 0.8));
1232+
background: linear-gradient(to top, rgba(255, 180, 50, 0.5), rgba(255, 180, 50, 0.85));
12331233
border-radius: 2px;
12341234
}
12351235
@@ -1266,7 +1266,7 @@ const emit = defineEmits({hide: null, 'open-settings': null});
12661266
}
12671267
12681268
.nge-profile-chart-legend-dot--completion {
1269-
background: rgba(0, 210, 160, 0.7);
1269+
background: rgba(255, 180, 50, 0.7);
12701270
}
12711271
12721272
/* ── Badges ── */

0 commit comments

Comments
 (0)