import { useState } from "react"; import { ErrorBoundary } from "react-error-boundary"; import XMarkSvg from "@images/cancel.svg?react"; import CopySvg from "@images/copy.svg?react"; import CheckMarkSvg from "@images/check_mark.svg?react"; import { ContactsContainer } from "./contacts_container/ContactsContainer"; import { useWindow } from "@logics_common"; import styles from "./AppErrorBoundary.module.scss"; export const AppErrorBoundary = ({children}) => { return ( ( ) }> {children} ); }; const ErrorContainer = ({error}) => { const [is_copied, setIsCopied] = useState(false); const formatted_stack = error ? formatStackTrace(error.stack) : "Unknown error"; const copyToClipboard = async () => { if (is_copied) return; await navigator.clipboard.writeText(formatted_stack); setIsCopied(true); setTimeout(() => { setIsCopied(false); }, 1000); }; return (

An error occurred. Please restart VRCT or contact the developers.

{error ?

{formatted_stack}

: null}
); }; const CloseButtonContainer = () => { const { asyncCloseApp } = useWindow(); return ( ); }; const formatStackTrace = (stack) => { if (!stack) return ""; // フルパスの除去(例として window.location.origin や絶対パス部分を削除) // ※必要に応じて正規表現を調整してください const formatted = stack.replace(new RegExp(window.location.origin, "g"), ""); return formatted; };