main.jsx
1 import './index.css'; 2 3 import './cloak-mode.css'; 4 5 import { render } from 'preact'; 6 import { HashRouter } from 'react-router-dom'; 7 8 import { App } from './app'; 9 import { Analytics } from '@vercel/analytics/react'; 10 import "@storedotapp/pwa-install-dialog"; 11 12 13 if (import.meta.env.DEV) { 14 import('preact/debug'); 15 } 16 17 // AbortSignal.timeout polyfill 18 // Temporary fix from https://github.com/mo/abortcontroller-polyfill/issues/73#issuecomment-1541180943 19 // Incorrect implementation, but should be good enough for now 20 if ('AbortSignal' in window) { 21 AbortSignal.timeout = 22 AbortSignal.timeout || 23 ((duration) => { 24 const controller = new AbortController(); 25 setTimeout(() => controller.abort(), duration); 26 return controller.signal; 27 }); 28 } 29 30 render( 31 <HashRouter> 32 <App /> 33 <Analytics /> 34 </HashRouter>, 35 document.getElementById('app'), 36 ); 37 38 // Storage cleanup 39 setTimeout(() => { 40 try { 41 // Clean up iconify localStorage 42 Object.keys(localStorage).forEach((key) => { 43 if (key.startsWith('iconify')) { 44 localStorage.removeItem(key); 45 } 46 }); 47 Object.keys(sessionStorage).forEach((key) => { 48 if (key.startsWith('iconify')) { 49 sessionStorage.removeItem(key); 50 } 51 }); 52 53 // Clean up old settings key 54 localStorage.removeItem('settings:boostsCarousel'); 55 } catch (e) {} 56 }, 5000); 57 58 window.__CLOAK__ = () => { 59 document.body.classList.toggle('cloak'); 60 };