1. import React, {Component, Suspense, startTransition} from 'react';
    
  2. 
    
  3. import Theme, {ThemeToggleButton} from './Theme';
    
  4. 
    
  5. import './Chrome.css';
    
  6. 
    
  7. export default class Chrome extends Component {
    
  8.   state = {theme: 'light'};
    
  9.   render() {
    
  10.     const assets = this.props.assets;
    
  11.     return (
    
  12.       <html lang="en">
    
  13.         <head>
    
  14.           <meta charSet="utf-8" />
    
  15.           <meta name="viewport" content="width=device-width, initial-scale=1" />
    
  16.           <link rel="shortcut icon" href="favicon.ico" />
    
  17.           <link rel="stylesheet" href={assets['main.css']} />
    
  18.           <title>{this.props.title}</title>
    
  19.         </head>
    
  20.         <body className={this.state.theme}>
    
  21.           <noscript
    
  22.             dangerouslySetInnerHTML={{
    
  23.               __html: `<b>Enable JavaScript to run this app.</b>`,
    
  24.             }}
    
  25.           />
    
  26.           <Suspense fallback="Loading...">
    
  27.             <Theme.Provider value={this.state.theme}>
    
  28.               {this.props.children}
    
  29.               <div>
    
  30.                 <ThemeToggleButton
    
  31.                   onChange={theme => {
    
  32.                     startTransition(() => {
    
  33.                       this.setState({theme});
    
  34.                     });
    
  35.                   }}
    
  36.                 />
    
  37.               </div>
    
  38.             </Theme.Provider>
    
  39.           </Suspense>
    
  40.           <script
    
  41.             dangerouslySetInnerHTML={{
    
  42.               __html: `assetManifest = ${JSON.stringify(assets)};`,
    
  43.             }}
    
  44.           />
    
  45.         </body>
    
  46.       </html>
    
  47.     );
    
  48.   }
    
  49. }