export function absolutifyLink(rel: string): string { const anchor = document.createElement("a"); anchor.setAttribute("href", rel); return anchor.href; } export function getSystemColorScheme() { if (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches) { return "dark"; } else { return "light"; } } export function convertFileToBase64(file: File): Promise { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = () => resolve(reader.result?.toString() || ""); reader.onerror = (error) => reject(error); }); } export const isValidUrl = (url: string): boolean => { try { new URL(url); return true; } catch (err) { return false; } }; export const downloadFileFromUrl = (url: string, filename: string) => { const a = document.createElement("a"); a.href = url; a.download = filename; a.click(); a.remove(); };