import { clsx, type ClassValue } from 'clsx' import { twMerge } from 'tailwind-merge' export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) } export function slugify(text: string): string { return text .toLowerCase() .replace(/\s+/g, '-') .replace(/[^\w-]+/g, '') .replace(/--+/g, '-') .trim() } export function maskSecret(value: string): string { if (!value) return '••••••••' if (value.length <= 8) return '••••••••••••' return value.slice(0, 4) + '•'.repeat(Math.min(value.length - 8, 16)) + value.slice(-4) } export function envBadgeStyles(env: string) { switch (env) { case 'production': return { bg: 'bg-emerald-500/10 text-emerald-400 border-emerald-500/20 hover:border-emerald-500/40', active: 'bg-emerald-500 text-slate-950 font-semibold shadow-lg shadow-emerald-500/25 border-emerald-400', dot: 'bg-emerald-400', } case 'staging': return { bg: 'bg-amber-500/10 text-amber-400 border-amber-500/20 hover:border-amber-500/40', active: 'bg-amber-500 text-slate-950 font-semibold shadow-lg shadow-amber-500/25 border-amber-400', dot: 'bg-amber-400', } case 'development': return { bg: 'bg-cyan-500/10 text-cyan-400 border-cyan-500/20 hover:border-cyan-500/40', active: 'bg-cyan-500 text-slate-950 font-semibold shadow-lg shadow-cyan-500/25 border-cyan-400', dot: 'bg-cyan-400', } default: return { bg: 'bg-slate-500/10 text-slate-400 border-slate-500/20 hover:border-slate-500/40', active: 'bg-slate-500 text-slate-950 font-semibold shadow-lg shadow-slate-500/25 border-slate-400', dot: 'bg-slate-400', } } } export function envColor(env: string) { switch (env) { case 'production': return 'bg-emerald-500/10 text-emerald-400 border-emerald-500/20' case 'staging': return 'bg-amber-500/10 text-amber-400 border-amber-500/20' case 'development': return 'bg-cyan-500/10 text-cyan-400 border-cyan-500/20' default: return 'bg-slate-500/10 text-slate-400 border-slate-500/20' } } export function typeColor(type: string) { switch (type) { case 'secret': return 'bg-rose-500/10 text-rose-400 border-rose-500/20' case 'url': return 'bg-sky-500/10 text-sky-400 border-sky-500/20' case 'json': return 'bg-purple-500/10 text-purple-400 border-purple-500/20' case 'boolean': return 'bg-emerald-500/10 text-emerald-400 border-emerald-500/20' case 'number': return 'bg-amber-500/10 text-amber-400 border-amber-500/20' default: return 'bg-slate-500/10 text-slate-300 border-slate-500/20' } }