/**
* Generic attribute chip used in the issue-detail header. Each chip pairs
* an icon node (any RN element — StatusIcon, PriorityIcon, ActorAvatar,
* emoji, etc) with a textual label. Filled = the property has a value;
* dimmed = empty placeholder ("Label", "Cycle", ...).
*
* The chip becomes a Pressable when `onPress` is provided. Without onPress
* it renders as a plain View — used for read-only chips (e.g. project
* chip while picker is deferred).
*/
import { Pressable, View } from "react-native";
import type { ReactNode } from "react";
import { Text } from "@/components/ui/text";
import { cn } from "@/lib/utils";
interface Props {
icon: ReactNode;
label: string;
variant?: "filled" | "dimmed";
onPress?: () => void;
className?: string;
}
export function AttributeChip({
icon,
label,
variant = "filled",
onPress,
className,
}: Props) {
const containerClass = cn(
"flex-row items-center gap-1.5 rounded-full border px-2.5 py-1",
variant === "filled"
? "border-border bg-secondary/60"
: "border-dashed border-muted-foreground/30 bg-transparent",
className,
);
const labelClass = cn(
"text-xs",
variant === "filled"
? "text-foreground"
: "text-muted-foreground/70",
);
const inner = (
<>
{icon}
{label}
>
);
if (onPress) {
return (
{inner}
);
}
return {inner};
}