import React, { useEffect } from "react"; import { Box, Container, CssBaseline } from "@mui/material"; import { HashRouter as Router, Routes, Route, Navigate, } from "react-router-dom"; import getTheme from "./config/theme"; import { useThemeMode } from "./hooks/useThemeMode"; import { ThemeProvider } from "@mui/material/styles"; import ExternalLinks from "./components/ExternalLinks"; import KeyboardShortcuts from "./components/KeyboardShortcuts"; import HomePage from "./pages/HomePage"; import BenchmarkGenerationPage from "./pages/BenchmarkGenerationPage"; import BenchmarkDisplayPage from "./pages/BenchmarkDisplayPage"; import BenchmarkEvaluationPage from "./pages/BenchmarkEvaluationPage"; import EvaluationDisplayPage from "./pages/EvaluationDisplayPage"; // Function to synchronize URL hash with parent Hugging Face page const syncURLWithParent = () => { // This function is only necessary in a Hugging Face Spaces environment if (window.parent !== window) { try { // Send the current hash to the parent page (Hugging Face) window.parent.postMessage( { hash: window.location.hash, }, "https://huggingface.co" ); // Log for debugging console.log("Synced hash with parent:", window.location.hash); } catch (error) { console.error("Error syncing URL with parent:", error); } } }; function App() { const { mode } = useThemeMode(); const theme = getTheme(mode); // Effect to monitor hash changes and synchronize them useEffect(() => { // Event handler function for hash changes const handleHashChange = () => { syncURLWithParent(); }; // Function to handle messages received from the parent page const handleParentMessage = (event) => { // Verify that the message comes from Hugging Face if (event.origin === "https://huggingface.co") { // If the message contains a hash and it's different from the current hash if (event.data.hash && event.data.hash !== window.location.hash) { console.log("Received hash from parent:", event.data.hash); // Update the URL hash without reloading the page window.location.hash = event.data.hash; } } }; // Synchronize on initial load syncURLWithParent(); // Listen for hash changes window.addEventListener("hashchange", handleHashChange); // Listen for messages from the parent page window.addEventListener("message", handleParentMessage); // Cleanup return () => { window.removeEventListener("hashchange", handleHashChange); window.removeEventListener("message", handleParentMessage); }; }, []); return ( } /> } /> } /> } /> } /> } /> We may retain processed documents processed in this space for safety purposes for up to 30 days. For maximum privacy with zero data retention, you are encouraged to duplicate the space to your own huggingface organization. ); } export default App;