28 lines
952 B
TypeScript
28 lines
952 B
TypeScript
import { clsx, type ClassValue } from 'clsx'
|
|
import { twMerge } from 'tailwind-merge'
|
|
|
|
export function cn(...inputs: ClassValue[]) {
|
|
return twMerge(clsx(inputs))
|
|
}
|
|
|
|
export function slugify(str: string) {
|
|
if (!str) return ""
|
|
return str
|
|
.toLowerCase()
|
|
.replace(/a|á|à|ả|ã|ạ|ă|ắ|ằ|ẳ|ẵ|ặ|â|ấ|ầ|ẩ|ẫ|ậ/gi, 'a')
|
|
.replace(/e|é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ/gi, 'e')
|
|
.replace(/i|í|ì|ỉ|ĩ|ị/gi, 'i')
|
|
.replace(/o|ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ/gi, 'o')
|
|
.replace(/u|ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự/gi, 'u')
|
|
.replace(/y|ý|ỳ|ỷ|ỹ|ỵ/gi, 'y')
|
|
.replace(/đ/gi, 'd')
|
|
.replace(/[^a-z0-9]+/g, '-')
|
|
.replace(/^-+|-+$/g, '');
|
|
}
|
|
|
|
export function formatViews(views: number): string {
|
|
if (views >= 1000000) return (views / 1000000).toFixed(1) + "M"
|
|
if (views >= 1000) return (views / 1000).toFixed(1) + "K"
|
|
return views.toString()
|
|
}
|