refactor(nip34): Use theme semantic colors for issue status

Replace hardcoded colors with theme semantic colors:
- Resolved/merged: accent (positive)
- Closed: destructive (negative)
- Draft: muted
- Open: neutral foreground

Also fixes import placement in nip34-helpers.ts.

https://claude.ai/code/session_01C6Lty4k9pKxdwnYUCcpzV2
This commit is contained in:
Claude
2026-01-23 11:03:23 +00:00
parent b0f62da8f2
commit 82d3a20d19
5 changed files with 39 additions and 38 deletions

View File

@@ -46,19 +46,20 @@ function getStatusIcon(kind: number) {
/**
* Get the color classes for a status badge
* Uses theme semantic colors
*/
function getStatusBadgeClasses(kind: number): string {
switch (kind) {
case 1630: // Open
return "bg-green-500/20 text-green-500 border-green-500/30";
case 1631: // Resolved/Merged
return "bg-purple-500/20 text-purple-500 border-purple-500/30";
case 1632: // Closed
return "bg-red-500/20 text-red-500 border-red-500/30";
case 1633: // Draft
case 1630: // Open - neutral
return "bg-muted/50 text-foreground border-border";
case 1631: // Resolved/Merged - positive
return "bg-accent/20 text-accent border-accent/30";
case 1632: // Closed - negative
return "bg-destructive/20 text-destructive border-destructive/30";
case 1633: // Draft - muted
return "bg-muted text-muted-foreground border-muted-foreground/30";
default:
return "bg-muted text-muted-foreground border-muted-foreground/30";
return "bg-muted/50 text-foreground border-border";
}
}
@@ -128,7 +129,7 @@ export function IssueDetailRenderer({ event }: { event: NostrEvent }) {
: CircleDot;
const statusBadgeClasses = currentStatus
? getStatusBadgeClasses(currentStatus.kind)
: "bg-green-500/20 text-green-500 border-green-500/30";
: "bg-muted/50 text-foreground border-border";
return (
<div className="flex flex-col gap-4 p-4 max-w-3xl mx-auto">

View File

@@ -40,19 +40,20 @@ function getStatusIcon(kind: number) {
/**
* Get the color class for a status kind
* Uses theme semantic colors
*/
function getStatusColorClass(kind: number): string {
switch (kind) {
case 1630: // Open
return "text-green-500";
case 1631: // Resolved/Merged
return "text-purple-500";
case 1632: // Closed
return "text-red-500";
case 1633: // Draft
case 1630: // Open - neutral
return "text-foreground";
case 1631: // Resolved/Merged - positive
return "text-accent";
case 1632: // Closed - negative
return "text-destructive";
case 1633: // Draft - muted
return "text-muted-foreground";
default:
return "text-green-500";
return "text-foreground";
}
}
@@ -118,7 +119,7 @@ export function IssueRenderer({ event }: BaseEventProps) {
: CircleDot;
const statusColorClass = currentStatus
? getStatusColorClass(currentStatus.kind)
: "text-green-500";
: "text-foreground";
return (
<BaseEventContainer event={event}>

View File

@@ -35,19 +35,20 @@ function getStatusIcon(kind: number) {
/**
* Get the color classes for a status badge
* Uses theme semantic colors
*/
function getStatusBadgeClasses(kind: number): string {
switch (kind) {
case 1630: // Open
return "bg-green-500/20 text-green-500 border-green-500/30";
case 1631: // Resolved/Merged
return "bg-purple-500/20 text-purple-500 border-purple-500/30";
case 1632: // Closed
return "bg-red-500/20 text-red-500 border-red-500/30";
case 1633: // Draft
case 1630: // Open - neutral
return "bg-muted/50 text-foreground border-border";
case 1631: // Resolved/Merged - positive
return "bg-accent/20 text-accent border-accent/30";
case 1632: // Closed - negative
return "bg-destructive/20 text-destructive border-destructive/30";
case 1633: // Draft - muted
return "bg-muted text-muted-foreground border-muted-foreground/30";
default:
return "bg-muted text-muted-foreground border-muted-foreground/30";
return "bg-muted/50 text-foreground border-border";
}
}

View File

@@ -33,19 +33,20 @@ function getStatusIcon(kind: number) {
/**
* Get the color classes for a status kind
* Uses theme semantic colors
*/
function getStatusColorClass(kind: number): string {
switch (kind) {
case 1630: // Open
return "text-green-500";
case 1631: // Resolved/Merged
return "text-purple-500";
case 1632: // Closed
return "text-red-500";
case 1633: // Draft
case 1630: // Open - neutral
return "text-foreground";
case 1631: // Resolved/Merged - positive
return "text-accent";
case 1632: // Closed - negative
return "text-destructive";
case 1633: // Draft - muted
return "text-muted-foreground";
default:
return "text-muted-foreground";
return "text-foreground";
}
}

View File

@@ -1,5 +1,6 @@
import type { NostrEvent } from "@/types/nostr";
import { getTagValue } from "applesauce-core/helpers";
import { parseReplaceableAddress } from "applesauce-core/helpers/pointers";
/**
* NIP-34 Helper Functions
@@ -469,10 +470,6 @@ export function getStatusLabel(kind: number, forIssue = true): string {
}
}
// Import parseReplaceableAddress from applesauce-core for address parsing
// This parses "kind:pubkey:identifier" format strings into AddressPointer objects
import { parseReplaceableAddress } from "applesauce-core/helpers/pointers";
/**
* Get all valid pubkeys that can set status for an issue/patch/PR
* Valid authors: event author, repository owner (from p tag), and all maintainers