import { useEffect, useState } from "react"; import { hide_coco } from "@/commands"; import platformAdapter from "./platformAdapter"; // 1 export async function copyToClipboard(text: string) { try { if (window.__TAURI__) { window.__TAURI__.writeText(text); } else { await navigator.clipboard.writeText(text); } console.info("Copy Success"); } catch (error) { const textArea = document.createElement("textarea"); textArea.value = text; document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { document.execCommand("copy"); console.info("Copy Success"); } catch (error) { console.info("Copy Failed"); } document.body.removeChild(textArea); } } // 2 export function useWindowSize() { const [size, setSize] = useState({ width: window.innerWidth, height: window.innerHeight, }); useEffect(() => { const onResize = () => { setSize({ width: window.innerWidth, height: window.innerHeight, }); }; window.addEventListener("resize", onResize); return () => { window.removeEventListener("resize", onResize); }; }, []); return size; } export const IsTauri = () => { return Boolean( typeof window !== "undefined" && window !== undefined && (window as any).__TAURI_INTERNALS__ !== undefined ); }; export const OpenURLWithBrowser = async (url: string) => { if (!url) return; if (IsTauri()) { try { await platformAdapter.openExternal(url); await hide_coco(); console.log("URL opened in default browser"); } catch (error) { console.error("Failed to open URL:", error); } } else { window.open(url); } }; const unitArr = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"] as const; export const formatter = { bytes: (value: number): string => { if (!Number.isFinite(value) || value <= 0) { return "0B"; } const index = Math.floor(Math.log(value) / Math.log(1024)); const size = (value / Math.pow(1024, index)).toFixed(1); return size + (unitArr[index] ?? "B"); }, }; export const isImage = (value: string) => { const regex = /\.(jpe?g|png|webp|avif|gif|svg|bmp|ico|tiff?|heic|apng)$/i; return regex.test(value); };