{"version":3,"sources":["config/Configs.js","components/ProductList/index.js","config/map/tdm.js","config/map/nero.js","config/map/brun.js","config/map/red.js","components/Magnify/index.js","components/Form/index.js","Helpers/Spin/index.js","pages/Product.js","App.js","serviceWorker.js","index.js"],"names":["ProductList","imageURL","threekit","stageId","name","config","Patina","Rotation","bg","brand","magnify","productIds","i","push","Products","id","grid","xs","sm","md","lg","xl","xxl","dataSource","renderItem","item","to","Item","cover","style","maxHeight","width","isMobile","marginLeft","marginRight","src","Meta","title","description","React","Component","tdmMap","neroMap","brunMap","redMap","getImg","patina","Magnify","props","size","color","backgroundColor","margin","onClick","window","open","configurator","getConfiguration","SearchOutlined","Form","menu","Object","values","map","attr","setConfiguration","product","overlay","apply2DSpin","attrName","direction","maxWidth","player","a","getConfigurator","add2DSpin","curPct","attrCount","getAttributes","find","length","threshold","tools","addTool","key","active","enabled","handlers","drag","handle","ev","deltaT","deltaX","Math","max","rect","newPct","abs","curIndex","getOptionIndex","newOption","getOptionByIndex","newIndex","momentum","index","option","findIndex","val","isEqual","hideHand","undefined","document","getElementById","location","reload","Product","state","img","loaded","productId","this","match","params","ReactGA","initialize","set","dimension1","pageview","addEventListener","threekitPlayer","authToken","display","el","assetId","showConfigurator","initialConfiguration","cache","maxAge","scope","then","api","when","prefetchAttributes","setState","console","log","border","onBack","assign","className","height","background","href","Header","Layout","Content","Footer","App","padding","path","exact","component","textAlign","Boolean","hostname","ReactDOM","render","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.c1f6eb39.chunk.js","sourcesContent":["const ProductList = {\n // \"1\": {\n // imageURL: \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/thumbs/Equilibre_Clay_01.jpg\",\n // threekit: \"47ff51a8-3104-4d3a-8f01-8b00b5ee5ff8\",\n // stageId: \"812236d6-21a0-432d-82b7-1d6aa94c6897\",\n // name: \"Equilibre\",\n // config: { Patina: [\"Clay\", \"Red\"], Rotation: \"2\" },\n // brand: \"Luxury\",\n // },\n \"1\": {\n imageURL:\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/4/Chevron_01.jpg\",\n threekit: \"59b4f7fa-c5fb-4567-b6b8-358d07f80e06\",\n stageId: \"812236d6-21a0-432d-82b7-1d6aa94c6897\",\n name: \"Chevron\",\n config: { Patina: [\"TDM Intenso\", \"Nero Grigo\", \"Brun\", \"Simila Red\"], Rotation: \"1\" },\n bg: [\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/form_icon/TDM_swatch.png\",\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/form_icon/nero_swatch.png\",\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/form_icon/brun_swatch.png\",\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/form_icon/red_swatch.png\"\n\n ],\n brand: \"4 Styles\",\n magnify: true\n },\n};\nexport { ProductList };\n","import React from \"react\";\nimport \"./Product.css\";\nimport \"antd/dist/antd.css\";\nimport { Icon, Card, List, Layout } from \"antd\";\nimport { isBrowser, isMobile } from \"react-device-detect\";\nimport { Link } from \"react-router-dom\";\nimport { ProductList } from \"../../config/Configs.js\";\n// import ReactGA from 'react-ga';\n\nconst productIds = [];\nfor (var i in ProductList) {\n productIds.push(i);\n}\n\nclass Products extends React.Component {\n render() {\n // ReactGA.initialize('UA-63905846-8');\n // ReactGA.pageview(\"Landing Page\");\n return (\n
\n (\n \n \n \n }\n >\n \n \n \n \n )}\n >\n
\n );\n }\n}\n\nexport default Products;\n","const tdmMap = [\n {\n \"0\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/4/Chevron_00.jpg\",\n },\n {\n \"1\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/4/Chevron_01.jpg\",\n },\n {\n \"2\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/4/Chevron_02.jpg\",\n },\n {\n \"3\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/4/Chevron_03.jpg\",\n },\n {\n \"4\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/4/Chevron_04.jpg\",\n },\n {\n \"5\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/4/Chevron_05.jpg\",\n },\n {\n \"6\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/4/Chevron_06.jpg\",\n },\n {\n \"7\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/4/Chevron_07.jpg\",\n },\n {\n \"8\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/4/Chevron_08.jpg\",\n },\n {\n \"9\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/4/Chevron_09.jpg\",\n },\n {\n \"10\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/4/Chevron_10.jpg\",\n },\n {\n \"11\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/4/Chevron_11.jpg\",\n },\n ];\n \n export { tdmMap };\n ","const neroMap = [\n {\n \"0\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/nero-grigo/Chevron_Nero-Grigo_00.jpg\",\n },\n {\n \"1\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/nero-grigo/Chevron_Nero-Grigo_01.jpg\",\n },\n {\n \"2\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/nero-grigo/Chevron_Nero-Grigo_02.jpg\",\n },\n {\n \"3\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/nero-grigo/Chevron_Nero-Grigo_03.jpg\",\n },\n {\n \"4\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/nero-grigo/Chevron_Nero-Grigo_04.jpg\",\n },\n {\n \"5\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/nero-grigo/Chevron_Nero-Grigo_05.jpg\",\n },\n {\n \"6\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/nero-grigo/Chevron_Nero-Grigo_06.jpg\",\n },\n {\n \"7\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/nero-grigo/Chevron_Nero-Grigo_07.jpg\",\n },\n {\n \"8\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/nero-grigo/Chevron_Nero-Grigo_08.jpg\",\n },\n {\n \"9\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/nero-grigo/Chevron_Nero-Grigo_09.jpg\",\n },\n {\n \"10\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/nero-grigo/Chevron_Nero-Grigo_10.jpg\",\n },\n {\n \"11\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/nero-grigo/Chevron_Nero-Grigo_11.jpg\",\n },\n ];\n \n export { neroMap };\n ","const brunMap = [\n {\n \"0\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/brun/Chevron_Brun_00.jpg\",\n },\n {\n \"1\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/brun/Chevron_Brun_01.jpg\",\n },\n {\n \"2\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/brun/Chevron_Brun_02.jpg\",\n },\n {\n \"3\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/brun/Chevron_Brun_03.jpg\",\n },\n {\n \"4\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/brun/Chevron_Brun_04.jpg\",\n },\n {\n \"5\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/brun/Chevron_Brun_05.jpg\",\n },\n {\n \"6\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/brun/Chevron_Brun_06.jpg\",\n },\n {\n \"7\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/brun/Chevron_Brun_07.jpg\",\n },\n {\n \"8\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/brun/Chevron_Brun_08.jpg\",\n },\n {\n \"9\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/brun/Chevron_Brun_09.jpg\",\n },\n {\n \"10\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/brun/Chevron_Brun_10.jpg\",\n },\n {\n \"11\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/brun/Chevron_Brun_11.jpg\",\n },\n ];\n \n export { brunMap };\n ","const redMap = [\n {\n \"0\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/red/Chevron_Simila-Red_00.jpg\",\n },\n {\n \"1\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/red/Chevron_Simila-Red_01.jpg\",\n },\n {\n \"2\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/red/Chevron_Simila-Red_02.jpg\",\n },\n {\n \"3\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/red/Chevron_Simila-Red_03.jpg\",\n },\n {\n \"4\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/red/Chevron_Simila-Red_04.jpg\",\n },\n {\n \"5\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/red/Chevron_Simila-Red_05.jpg\",\n },\n {\n \"6\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/red/Chevron_Simila-Red_06.jpg\",\n },\n {\n \"7\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/red/Chevron_Simila-Red_07.jpg\",\n },\n {\n \"8\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/red/Chevron_Simila-Red_08.jpg\",\n },\n {\n \"9\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/red/Chevron_Simila-Red_09.jpg\",\n },\n {\n \"10\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/red/Chevron_Simila-Red_10.jpg\",\n },\n {\n \"11\":\n \"https://solutions-engineering.s3.amazonaws.com/berluti-demo/chevron/red/Chevron_Simila-Red_11.jpg\",\n },\n ];\n \n export { redMap };\n ","import React from \"react\";\nimport { Avatar, Button, Badge, Tag } from \"antd\";\nimport { tdmMap } from \"../../config/map/tdm\";\nimport { neroMap } from \"../../config/map/nero\";\nimport { brunMap } from \"../../config/map/brun\";\nimport { redMap } from \"../../config/map/red\";\n\n\nimport { SearchOutlined } from \"@ant-design/icons\";\nlet newPatina = \"\";\n\nconst getImg = function (patina, config) {\n if (patina == 'TDM Intenso'){\n return `${tdmMap[config][config]}`;\n } else if (patina == 'Nero Grigo'){\n return `${neroMap[config][config]}`;\n } else if (patina == 'Brun'){\n return `${brunMap[config][config]}`;\n }else if (patina == 'Simila Red'){\n return `${redMap[config][config]}`;\n }\n};\n\nfunction Magnify(props) {\n return (\n (\n window.open(\n getImg(window.configurator.getConfiguration().Patina, window.configurator.getConfiguration().Rotation),\n \"_blank\"\n ))\n }\n >\n \n \n );\n}\n\nexport default Magnify;\n","import React from \"react\";\nimport { Avatar, Button, Badge, Tag, Dropdown, Menu } from \"antd\";\nimport { SearchOutlined } from \"@ant-design/icons\";\nimport Magnify from \"../Magnify\";\n\nimport { tdmMap } from \"../../config/map/tdm\";\n\nlet newPatina = \"\";\n\nconst getImg = function (config, map) {\n return `${map[config][config]}`;\n};\n\nconst getMap = function () {\n if (window.configurator.getConfiguration()[\"Patina\"] == \"TDM Intenso\") {\n return tdmMap;\n }\n};\n\nfunction Form(props) {\n newPatina = props.config.Patina;\n\n const menu = (\n \n {Object.values(props.config.Patina).map((attr, i) => (\n \n window.configurator.setConfiguration({ Patina: `${attr}` })\n }\n // key={props.config}\n >\n \n\n {/* {attr == \"Chevron\" ? \"Nero Grigio\" : attr} */}\n {attr}\n \n ))}\n \n );\n\n return props.config ? (\n
\n {props.product.magnify ? :

}\n \n \n \n
\n ) : (\n
\n );\n}\n\nexport default Form;\n","import isEqual from \"lodash/isEqual\";\nexport function apply2DSpin({\n attrName = \"Rotation\",\n direction = 1,\n maxWidth = 500,\n}) {\n return async (player) => {\n const configurator = await window.player.getConfigurator();\n add2DSpin({ attrName, configurator, direction, maxWidth, player });\n return player;\n };\n}\n/****************************************************\n Handler\n****************************************************/\nexport function add2DSpin({\n attrName = \"Angle\",\n configurator,\n direction = 1,\n maxWidth = 100,\n player,\n}, getImg) {\n let curPct = 0;\n const attrCount = window.configurator\n .getAttributes()\n .find((attr) => attr.name === attrName).values.length;\n const threshold = 1 / attrCount;\n return window.player.tools.addTool({\n key: \"2dspin\",\n active: true,\n enabled: true,\n handlers: {\n drag: () => ({\n handle: async (ev) => {\n const config = configurator.getConfiguration();\n const deltaT = ev.deltaX / Math.max(ev.rect.width, maxWidth);\n const newPct = curPct + deltaT;\n if (Math.abs(newPct) > threshold) {\n const curIndex = getOptionIndex(\n configurator,\n attrName,\n config[attrName]\n );\n const increment = (newPct > 0 ? 1 : -1) * (direction < 0 ? -1 : 1);\n const newIndex = (curIndex + increment) % attrCount;\n const newOption = getOptionByIndex(\n configurator,\n attrName,\n newIndex < 0 ? attrCount + newIndex : newIndex\n );\n configurator.setConfiguration({ [attrName]: newOption })\n }\n curPct = newPct % threshold;\n },\n momentum: true,\n }),\n },\n });\n}\nfunction getOptionByIndex(configurator, attrName, index) {\n if (!configurator) return null;\n const attrs = configurator.getAttributes();\n const attribute = attrs.find((attr) => attr.name === attrName);\n return attribute.values[index];\n}\nfunction getOptionIndex(configurator, attrName, option) {\n if (!configurator) return null;\n const attrs = configurator.getAttributes();\n const attribute = attrs.find((attr) => attr.name === attrName);\n return attribute.values.findIndex((val) => isEqual(val, option));\n}\n","import React from \"react\";\nimport \"./Products.css\";\nimport \"antd/dist/antd.css\";\nimport { PageHeader } from \"antd\";\nimport { ProductList } from \"../config/Configs.js\";\nimport { BrowserRouter as Link } from \"react-router-dom\";\nimport ReactGA from \"react-ga\";\n\n\nimport Form from \"../components/Form\";\n\nimport { apply2DSpin } from \"../Helpers/Spin\";\n\nimport { tdmMap } from \"../config/map/tdm.js\";\n\nimport isEqual from \"lodash/isEqual\";\n\nlet link = \"\";\n\nlet clicked = false;\n\nlet loaded = false;\n\nconst hideHand = () => {\n // document.getElementById(\"hand-indicator\").classList.remove(\"hand\");\n // document.getElementById(\"hand-indicator\").classList.remove(\"bounce-2\");\n document.getElementById(\"hand-indicator\") == undefined\n ? window.location.reload()\n : (document.getElementById(\"hand-indicator\").style = \"display: none\");\n};\n\nclass Product extends React.Component {\n \n constructor(props) {\n super(props);\n this.state = {\n img: \"\",\n loaded: false,\n };\n }\n\n componentDidMount() {\n const productId = this.props.match.params.productId;\n const product = ProductList[productId];\n\n ReactGA.initialize(\"UA-63905846-9\");\n ReactGA.set({ dimension1: \"Berluti x Threekit\" });\n ReactGA.pageview(\"Berluti Demo | Chevron\");\n\n if (clicked == false) {\n document\n .getElementById(\"threekit-container\")\n .addEventListener(\"mousedown\", function () {\n // document.getElementById(\"hand-container\").remove();\n hideHand();\n });\n\n document\n .getElementById(\"threekit-container\")\n .addEventListener(\"touchstart\", function () {\n // document.getElementById(\"hand-container\").remove();\n hideHand();\n });\n }\n\n !product\n ? console.log(\"no product\")\n : // Put player here\n window\n .threekitPlayer({\n authToken: \"38f25736-7d60-4ae7-832a-f0d36cd80802\",\n display: \"image\",\n el: document.getElementById(\"player\"),\n assetId: `${product.threekit}`,\n stageId: `${product.stageId}`,\n\n showConfigurator: false,\n initialConfiguration: product.config,\n cache: {\n maxAge: 500,\n scope: \"6-28-2021\"\n }\n })\n .then(async (api) => {\n window.player = api;\n window.configurator = await api.getConfigurator();\n await api.when('loaded')\n await window.configurator.prefetchAttributes([\"Rotation\"]);\n apply2DSpin({ attrName: \"Rotation\", direction: -1 })(api)\n\n this.setState({ loaded: true })\n \n });\n }\n render() {\n const productId = this.props.match.params.productId;\n const product = ProductList[productId];\n return (\n
\n {!product ? (\n
\n Invalid product URL. Please navigate home\n
\n ) : (\n
\n window.location.assign(\"/\")}\n title={product.name}\n />\n\n
\n {this.state.loaded ? (\n
\n
\n \n
\n
\n ) : (\n

\n )}\n\n
\n
\n\n
\n
\n )}\n \n );\n }\n}\n\nexport default Product;\n","import React from \"react\";\nimport { Layout, Menu } from \"antd\";\nimport Products from \"./components/ProductList\";\nimport \"./App.css\";\nimport { BrowserRouter as Router, Route, Switch } from \"react-router-dom\";\nimport Product from \"./pages/Product\";\nimport ReactGA from \"react-ga\";\n\n\nconst { Header, Content, Footer } = Layout;\nfunction App(props) {\n\n ReactGA.initialize(\"UA-63905846-9\");\n ReactGA.set({ dimension1: \"Berluti x Threekit\" });\n ReactGA.pageview(\"Berluti Demo | Landing\");\n return (\n
\n \n
\n \n \n \n \n\n \n \n \n \n \n
Berluti ©2020
\n
\n
\n );\n}\n\nexport default App;\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 './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, 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"],"sourceRoot":""}