Spaces:
Configuration error
Configuration error
File size: 1,251 Bytes
bcce530 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
export function generateSlug(text: string): string {
const slug = text
.toString()
.toLowerCase()
.trim()
.replace(/\s+/g, '-') // Replace spaces with -
.replace(/[^\w\-]+/g, '') // Remove all non-word chars
.replace(/\-\-+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
.replace(/-+$/, '') // Trim - from end of text
// Add cryptographically random suffix for uniqueness (8 chars)
const array = new Uint8Array(6)
crypto.getRandomValues(array)
const random = Array.from(array, b => b.toString(36).padStart(2, '0')).join('').slice(0, 8)
return `${slug}-${random}`
}
export function fillTemplate(template: string, variables: Record<string, string>): string {
return template.replace(/\{\{([^}]+)\}\}/g, (match, key) => {
return variables[key.trim()] || match
})
}
export function extractVariables(template: string): string[] {
const matches = template.match(/\{\{([^}]+)\}\}/g) || []
return Array.from(new Set(matches.map(match => match.slice(2, -2).trim())))
}
|