import { clsx, type ClassValue } from 'clsx' | |
import { twMerge } from 'tailwind-merge' | |
export function cn(...inputs: ClassValue[]) { | |
return twMerge(clsx(inputs)) | |
} | |
export const truncateText = (text: string, limit: number) => { | |
if (text) { | |
return text.length > limit ? `${text.slice(0, limit)}..` : text | |
} | |
return '' | |
} | |
export const isValidUrl = (url: string): boolean => { | |
try { | |
const pattern = new RegExp( | |
'^https?:\\/\\/' + | |
'((([a-zA-Z\\d]([a-zA-Z\\d-]*[a-zA-Z\\d])*)\\.)+[a-zA-Z]{2,}|' + | |
'localhost|' + | |
'\\d{1,3}(\\.\\d{1,3}){3})' + | |
'(\\:\\d+)?' + | |
'(\\/[-a-zA-Z\\d%@_.~+&:]*)*' + | |
'(\\?[;&a-zA-Z\\d%@_.,~+&:=-]*)?' + | |
'(\\#[-a-zA-Z\\d_]*)?$', | |
'i' | |
) | |
return pattern.test(url.trim()) | |
} catch { | |
return false | |
} | |
} | |
export const getJsonMarkdown = (content: object = {}) => { | |
let jsonBlock = '' | |
try { | |
jsonBlock = `\`\`\`json\n${JSON.stringify(content, null, 2)}\n\`\`\`` | |
} catch { | |
jsonBlock = `\`\`\`\n${String(content)}\n\`\`\`` | |
} | |
return jsonBlock | |
} | |