{"version":3,"sources":["components/information-pane/style.module.scss","components/section/style.module.css","components/boxart/index.js","components/header/index.js","components/section/index.js","components/information-pane/index.js","App.js","NotFound.js","components/articles/index.js","serviceWorker.js","index.js","components/boxart/style.module.css","components/articles/style.module.scss","components/header/style.module.css"],"names":["module","exports","Boxart","props","info","img","name","id","className","styles","boxart","onClick","handleChangeSelectedBoxId","src","alt","Header","content","title","desc","linksContent","links","map","link","href","url","class","key","profile","headerImg","contentWrapper","Section","cssTheme","theme","darkTheme","lightTheme","section","header","InformationPane","state","article","articleFile","prevProps","selectedBox","this","markdown","setState","fetch","result","text","desc2","e","index","descItem","projects","boxes","find","box","informationPane","source","escapeHtml","closeButton","React","Component","changeSelectedBoxId","boxId","analytics","send","selectedBoxId","App","then","init","sections","Content","tags","tag","tagIndex","filter","includes","boxartValue","boxartIndex","call","boxArtWrapperClass","about","NotFound","Users","params","match","Boolean","window","location","hostname","routing","exact","path","component","Article","ReactDOM","render","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.da32a11a.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"informationPane\":\"style_informationPane__1QSsk\",\"originOgdSlideLeftIntoPlace\":\"style_originOgdSlideLeftIntoPlace__2jYL2\",\"headerImg\":\"style_headerImg__30mUh\",\"contentWrapper\":\"style_contentWrapper__aHNhh\",\"projects\":\"style_projects__BCweG\",\"content\":\"style_content__27oU6\",\"air-p\":\"style_air-p__2gGvY\",\"air-h1\":\"style_air-h1__3Dgt-\",\"air-h2\":\"style_air-h2__aEJQt\",\"air-h3\":\"style_air-h3__2sfgW\",\"air-h4\":\"style_air-h4__MSEbl\",\"air-h5\":\"style_air-h5__biuTg\",\"air-h6\":\"style_air-h6__3tFwi\",\"air-small\":\"style_air-small__MVkDe\",\"descItem\":\"style_descItem__2CLGD\",\"closeButton\":\"style_closeButton__10Tg9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"darkTheme\":\"style_darkTheme__35XZQ\",\"lightTheme\":\"style_lightTheme__13F4T\",\"section\":\"style_section__2npWS\",\"header\":\"style_header__1vCzd\",\"title\":\"style_title__15kK_\",\"contentWrapper\":\"style_contentWrapper__3EKFQ\"};","import React from 'react';\r\nimport styles from './style.module.css'\r\n\r\nfunction Boxart(props) {\r\n  const { img, name, id, } = props.info\r\n  return (\r\n    <div\r\n      className={styles.boxart}\r\n      onClick={() => props.handleChangeSelectedBoxId(id)}\r\n    >\r\n      <img src={img} alt={name} />\r\n      <div className={styles.info}>{name}</div>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default Boxart\r\n","import React from 'react'\r\nimport styles from './style.module.css'\r\n\r\nexport default function Header(props) {\r\n  const { title, name, desc, img, links } = props.content\r\n\r\n  const linksContent = links.map(link =>\r\n    <a\r\n      href={link.url}\r\n      className={`icon ${link.class}`}\r\n      key={`link_${link.id}`}>\r\n        <span className=\"label\">{link.name}</span>\r\n    </a>\r\n  )\r\n\r\n  return (\r\n    <div className={styles.profile}>\r\n      <img className={styles.headerImg} alt={name} src={img} />\r\n      <div className={styles.contentWrapper}>\r\n        <div className={styles.content}>\r\n          <h6 className={styles.title}>{title}</h6>\r\n          <h4 className={styles.name}>{name}</h4>\r\n          <div className={styles.desc}>{desc}</div>\r\n          <ul className={styles.links}>\r\n            {linksContent}\r\n          </ul>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import React from 'react';\r\nimport styles from './style.module.css'\r\n\r\nexport default function Section (props) {\r\n  const { boxart, name, theme } = props\r\n  const cssTheme = theme === 'darkTheme' ? styles.darkTheme : styles.lightTheme \r\n  return (\r\n    <div className={`${styles.section} ${cssTheme}`}>\r\n      <header className={styles.header}>\r\n        <h1 className={styles.title}>{name}</h1>\r\n      </header>\r\n      <div className={styles.contentWrapper}>\r\n        {boxart}\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n","import React from 'react';\r\nimport styles from './style.module.scss'\r\nimport Boxart from '../boxart';\r\nimport ReactMarkdown from 'react-markdown/with-html'\r\n\r\nexport default class InformationPane extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n    this.state = {\r\n      article: null,\r\n      articleFile: null\r\n    }\r\n  }\r\n\r\n  async componentDidUpdate(prevProps) {\r\n    const { selectedBox } = this.props\r\n\r\n    if (!selectedBox || !selectedBox.markdown) {\r\n      this.state.article && this.setState({ article: null, articleFile: null })\r\n      return\r\n    }\r\n\r\n    if (selectedBox.markdown === this.state.articleFile) {\r\n      return\r\n    }\r\n\r\n    try {\r\n      const result = await fetch(selectedBox.markdown)\r\n      this.setState({ article: await result.text(), articleFile: selectedBox.markdown})\r\n    } catch (err) {\r\n      this.setState({ article: err, articleFile: err })\r\n    }\r\n  }\r\n\r\n  render () {\r\n    const { selectedBox } = this.props\r\n    if (!selectedBox) return null\r\n    const desc2 = !selectedBox.desc2 ? null : selectedBox.desc2.map((e, index) => (\r\n      <li\r\n        className={styles.descItem}\r\n        key={selectedBox.id + index}>\r\n        {e}\r\n      </li>\r\n    ))\r\n  \r\n    const projects = !selectedBox.projects ? null : selectedBox.projects.map((e, index) => {\r\n      return (\r\n        <Boxart key={`${selectedBox.id}_boxart_${index}`}\r\n          info={this.props.boxes.find(box => box.id === e)}\r\n          handleChangeSelectedBoxId={this.props.handleChangeSelectedBoxId}\r\n        />\r\n      )\r\n    })\r\n  \r\n    return (\r\n      <div className={styles.informationPane}>\r\n        <div className={styles.contentWrapper}>\r\n          <div className={styles.content}>\r\n            {selectedBox.img && <img className={styles.headerImg} alt={selectedBox.name} src={selectedBox.img} />}\r\n            {selectedBox.name && <h1>{selectedBox.name}</h1>}\r\n            {selectedBox.title && <h2>{selectedBox.title}</h2>}\r\n            {selectedBox.desc &&<div>{selectedBox.desc}</div>}\r\n            {desc2 && <ul>{desc2}</ul>}\r\n            {this.state.article && <ReactMarkdown\r\n              source={this.state.article}\r\n              escapeHtml={false}\r\n            />}\r\n            <div className={styles.projects}>{projects}</div>\r\n          </div>\r\n        </div>\r\n        <button\r\n          className={styles.closeButton}\r\n          onClick={() => this.props.handleChangeSelectedBoxId(null)}>\r\n          X\r\n        </button>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import React from 'react';\nimport './App.css';\nimport Content from './data/kw_content.json'\nimport Boxart from './components/boxart'\nimport Header from './components/header'\nimport Section from './components/section'\nimport InformationPane from './components/information-pane'\n\nfunction changeSelectedBoxId (boxId) {\n  if (this.analytics) this.analytics.send('Box art', 'click', boxId)\n  this.setState({ selectedBoxId: boxId })\n}\n\nexport default class App extends React.Component {\n  constructor(props) {\n    super(props)\n    this.analytics = null\n    this.state = {\n      selectedBoxId: null,\n      theme: 'lightTheme'\n    }\n\n    import('./modules/analytics.js').then((analytics) => {\n      this.analytics = analytics\n      this.analytics.init()\n    });\n  }\n\n  render () {\n    const sections = Content.tags.map((tag, tagIndex) => {\n      const boxes = Content.boxes.filter(box => box.tags.includes(tag.id))\n      const boxart = boxes.map((boxartValue, boxartIndex) =>\n        <Boxart key={`boxart_${boxartIndex}`}\n          info={boxartValue}\n          handleChangeSelectedBoxId={boxId => changeSelectedBoxId.call(this, boxId)}\n        />\n      )\n  \n      return (\n        <Section\n          key={`tag_${tagIndex}`}\n          name={tag.name}\n          boxart={boxart}\n          theme={this.state.theme}\n        />\n      )\n    })\n\n    const boxArtWrapperClass = this.state.selectedBoxId ? 'overlay' : ''\n  \n    return (\n      <div className={`App ${this.state.theme}`}>\n        <div className={`boxart-pane ${boxArtWrapperClass}`}>\n        <Header\n          content={Content.about}/>\n          {sections}\n        </div>\n        <InformationPane\n          selectedBox={Content.boxes.find(box => box.id === this.state.selectedBoxId)}\n          boxes={Content.boxes}\n          handleChangeSelectedBoxId={boxId => changeSelectedBoxId.call(this, boxId)}\n        />\n      </div>\n    );\n  }\n}\n","import React from 'react';\n\nexport default class NotFound extends React.Component {\n  render () {\n    return (\n      <div>Not found</div>\n    )\n  }\n}\n","import React from 'react';\r\nimport styles from './style.module.scss'\r\nimport ReactMarkdown from 'react-markdown/with-html'\r\n\r\nexport default class Users extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n    this.state = {\r\n      article: null\r\n    }\r\n  }\r\n\r\n  async componentDidMount() {\r\n    const { params } = this.props.match\r\n\r\n    try {\r\n      const result = await fetch(`${params.article}.md`)\r\n      this.setState({ article: await result.text()})\r\n    } catch (err) {\r\n      this.setState({ article: err })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    return (\r\n      <div\r\n        className={styles.article}>\r\n        <ReactMarkdown\r\n          source={this.state.article}\r\n          escapeHtml={false}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n}\r\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.1/8 is considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\nexport function register(config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit https://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl)\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    });\n  }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n  Route,\n  BrowserRouter as Router,\n  Switch,\n} from 'react-router-dom'\nimport './index.css';\nimport App from './App';\nimport NotFound from './NotFound';\nimport Article from './components/articles';\nimport * as serviceWorker from './serviceWorker';\n\nconst routing = (\n  <Router>\n    <div>\n      <Switch>\n        <Route exact path=\"/\" component={App} />\n        <Route path=\"/articles/:topic/:article\" component={Article} />\n        <Route component={NotFound} />\n      </Switch>\n    </div>\n  </Router>\n)\nReactDOM.render(routing, document.getElementById('root'))\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"boxart\":\"style_boxart__1xGFU\",\"info\":\"style_info__3Hxqv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"article\":\"style_article__2bqRY\",\"splendor-p\":\"style_splendor-p__3r0Y9\",\"splendor-h1\":\"style_splendor-h1__1vD83\",\"splendor-h2\":\"style_splendor-h2__17QOr\",\"splendor-h3\":\"style_splendor-h3__2ZqJs\",\"splendor-h4\":\"style_splendor-h4__3bu3y\",\"splendor-h5\":\"style_splendor-h5__ShTUV\",\"splendor-h6\":\"style_splendor-h6__1WWlI\",\"splendor-small\":\"style_splendor-small__wQRTN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"profile\":\"style_profile__XIEE-\",\"headerImg\":\"style_headerImg__2t7yQ\",\"contentWrapper\":\"style_contentWrapper__23KBg\",\"content\":\"style_content__1iPUc\",\"links\":\"style_links__3IVKK\",\"link\":\"style_link__srn-U\",\"title\":\"style_title__dgHSz\",\"name\":\"style_name__2LX0m\",\"desc\":\"style_desc__3_eXl\"};"],"sourceRoot":""}