mirror of
https://github.com/nicotsx/ironmount.git
synced 2025-12-10 12:10:51 +01:00
* refactor: unify backend and frontend servers * refactor: correct paths for openapi & drizzle * refactor: move api-client to client * fix: drizzle paths * chore: fix linting issues * fix: form reset issue
31 lines
853 B
TypeScript
31 lines
853 B
TypeScript
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();
|
|
}
|