=== NEW === - studio/ — MCPEngine Studio scaffold (Next.js monorepo, build plan) - docs/FACTORY-V2.md — Factory v2 architecture doc - docs/CALENDLY_MCP_BUILD_SUMMARY.md — Calendly MCP build report === UPDATED SERVERS === - fieldedge: Added jobs-tools, UI build script, main entry update - lightspeed: Updated main + server entry points - squarespace: Added collection-browser + page-manager apps - toast: Added main + server entry points === INFRA === - infra/command-center/state.json — Updated pipeline state - infra/command-center/FACTORY-V2.md — Factory v2 operator playbook
42 lines
956 B
TypeScript
42 lines
956 B
TypeScript
import React from 'react';
|
|
import { clsx } from 'clsx';
|
|
import { twMerge } from 'tailwind-merge';
|
|
|
|
export type BadgeVariant = 'default' | 'success' | 'warning' | 'error' | 'info';
|
|
|
|
export interface BadgeProps {
|
|
variant?: BadgeVariant;
|
|
children: React.ReactNode;
|
|
className?: string;
|
|
}
|
|
|
|
const variantStyles: Record<BadgeVariant, string> = {
|
|
default: 'bg-gray-700 text-gray-300',
|
|
success: 'bg-emerald-500/15 text-emerald-400',
|
|
warning: 'bg-amber-500/15 text-amber-400',
|
|
error: 'bg-red-500/15 text-red-400',
|
|
info: 'bg-blue-500/15 text-blue-400',
|
|
};
|
|
|
|
export const Badge: React.FC<BadgeProps> = ({
|
|
variant = 'default',
|
|
children,
|
|
className,
|
|
}) => {
|
|
return (
|
|
<span
|
|
className={twMerge(
|
|
clsx(
|
|
'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',
|
|
variantStyles[variant],
|
|
),
|
|
className,
|
|
)}
|
|
>
|
|
{children}
|
|
</span>
|
|
);
|
|
};
|
|
|
|
Badge.displayName = 'Badge';
|