import { type ClassValue, clsx } from "clsx"; import { twMerge } from "tailwind-merge"; import copyToClipboard from "copy-to-clipboard"; import { toast } from "sonner"; import { BASE_URL } from "./consts"; import type { ProjectSchema } from "~/server/db/schema/project"; import type { FileSchema } from "~/server/db/schema/file"; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } export function getFileExt(filename: string) { return filename.substring(filename.lastIndexOf(".") + 1); } export function getUrl(...path: string[]) { return BASE_URL + ("/" + path.join("/")).replace(/\/\/+/g, "/"); } export function getPreviewUrl( project: Pick, file: string | Pick, opt?: Partial<{ raw: boolean }> ) { const url = getUrl( `api/preview/${project.slug}`, typeof file === "string" ? file : file.path ); return opt?.raw ? url + "?raw=true" : url; } export const ucfirst = (str: string) => { return str.charAt(0).toUpperCase() + str.substring(1); }; export const ucwords = (str: string) => { return str.split(" ").map(ucfirst).join(" "); }; export const copy = (text: string) => { copyToClipboard(text, { onCopy: (data) => { toast.success("Copied to clipboard!"); return data; }, }); }; export { toast };