import { type ClassValue, clsx } from "clsx"; import { twMerge } from "tailwind-merge"; /** Conditional merge of class names */ export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } /** * Converts an arbitrary string into a URL-safe slug: * - lowercase * - trims whitespace * - replaces non-alphanumeric runs with "-" * - collapses multiple hyphens * - trims leading/trailing hyphens */ /** * Live slugify for UI: lowercases, normalizes dashes, replaces invalid runs with "-", * collapses repeats, but DOES NOT trim leading/trailing hyphens so the user can type * spaces/dashes progressively while editing. */ export function slugify(input: string): string { return input .toLowerCase() .replace(/[ ]/g, "-") .replace(/[^a-z0-9_-]+/g, "") .replace(/[-]{2,}/g, "-") .replace(/[_]{2,}/g, "_") .trim(); }