import React, { useState, useEffect } from 'react'; import { Route, Routes } from 'react-router-dom'; import { Helmet } from 'react-helmet-async'; import Home from './components/Home'; import Board from './components/Board'; import Thread from './components/Thread'; import Catalog from './components/Catalog'; import NotFound from './components/NotFound'; import { createGlobalStyle } from 'styled-components'; import 'react-tooltip/dist/react-tooltip.css'; import preloadImages from './utils/preloadImages'; export const BoardContext = React.createContext(); const GlobalStyle = createGlobalStyle` body { margin: 0; padding: 0; background: ${props => props.background}; color: ${props => props.color}; font-family: ${props => props.fontFamily}; } .tooltip { border-radius: 0; max-width: 40%; font-size: 11px; padding: 3px; opacity: 100%; } `; export default function App() { const [selectedTitle, setSelectedTitle] = useState(''); const [selectedAddress, setSelectedAddress] = useState(''); const [selectedThread, setSelectedThread] = useState(''); const [selectedStyle, setSelectedStyle] = useState(localStorage.getItem('selectedStyle') || 'Yotsuba'); const [bodyStyle, setBodyStyle] = useState(JSON.parse(localStorage.getItem('bodyStyle')) || { background: "#ffe url(/assets/fade.png) top repeat-x", color: "maroon", fontFamily: "Helvetica, Arial, sans-serif" }); const [captchaResponse, setCaptchaResponse] = useState(''); const imageUrls = Array.from({ length: 14 }, (_, index) => `/assets/banners/banner-${index + 1}.jpg`); useEffect(() => { preloadImages([...imageUrls]); }, []); return (
} /> }> } /> }> } /> }> } /> } />
)}