| 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 | |
| } | |