import { ReadonlyURLSearchParams } from "next/navigation" import { clsx, type ClassValue } from "clsx" import { twMerge } from "tailwind-merge" export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) } export function uniq(arr: any[], removeEmpty = true) { const uniqArray = Array.from(new Set(arr)) return removeEmpty ? uniqArray.filter(Boolean) : uniqArray } export function queryStringToObject( searchParams: ReadonlyURLSearchParams ): Record { const obj = Object.fromEntries(searchParams.entries()) const object: Record = {} Object.keys(obj).forEach((key) => { object[key] = obj[key]?.split(",") }) return object } export function shuffleArray(array: T[]) { return array.sort(() => 0.5 - Math.random()) } export function convertDirtyStringToHtml(string: string) { const urlPattern = /\b(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|]/gim const pseudoUrlPattern = /(^|[^\/])(www\.[\S]+(\b|$))/gim if (!string) return "" return string .replace(/\n/g, "
") .replace(urlPattern, '$&') .replace(pseudoUrlPattern, '$1$2') .toLowerCase() }