├── .gitignore ├── public ├── logo.png ├── favicon.ico ├── favicon_orig.ico ├── manifest.json ├── precache-manifest.14b50cd8579427a6747e0908264e5fe4.js ├── precache-manifest.9f4f4bc5630d8c7bd194427ec41f6a11.js ├── precache-manifest.e40c7ea4a9514db19a042dd43e3d076a.js ├── precache-manifest.ec6694cce764334a12679517aff71d01.js ├── precache-manifest.efc27919907ebda28be94301739be979.js ├── asset-manifest.json ├── service-worker.js ├── static │ ├── js │ │ ├── runtime~main.a8a9905a.js │ │ ├── runtime~main.a8a9905a.js.map │ │ ├── main.acdff859.chunk.js │ │ └── main.acdff859.chunk.js.map │ └── css │ │ ├── main.84adf97d.chunk.css │ │ └── main.84adf97d.chunk.css.map └── index.html ├── client ├── public │ ├── logo.png │ ├── favicon.ico │ ├── favicon_orig.ico │ ├── manifest.json │ └── index.html ├── src │ ├── App.test.js │ ├── components │ │ ├── Home.js │ │ ├── Footer.js │ │ ├── Hero.js │ │ ├── create │ │ │ ├── ComponentDialogMaker.js │ │ │ ├── StandalonePromptDialogMaker.js │ │ │ ├── WaterfallDialogMaker.js │ │ │ ├── DialogStep.js │ │ │ └── DialogStepItem.js │ │ ├── Navbar.js │ │ ├── HomeContent.js │ │ └── DialogMaker.js │ ├── index.css │ ├── index.js │ ├── App.js │ ├── App.css │ ├── logo.svg │ └── serviceWorker.js ├── .gitignore ├── package.json └── README.md ├── README.md ├── index.js └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | 3 | -------------------------------------------------------------------------------- /public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jspruance/DialogMaker/master/public/logo.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jspruance/DialogMaker/master/public/favicon.ico -------------------------------------------------------------------------------- /client/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jspruance/DialogMaker/master/client/public/logo.png -------------------------------------------------------------------------------- /public/favicon_orig.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jspruance/DialogMaker/master/public/favicon_orig.ico -------------------------------------------------------------------------------- /client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jspruance/DialogMaker/master/client/public/favicon.ico -------------------------------------------------------------------------------- /client/public/favicon_orig.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jspruance/DialogMaker/master/client/public/favicon_orig.ico -------------------------------------------------------------------------------- /client/src/App.test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import App from './App'; 4 | 5 | it('renders without crashing', () => { 6 | const div = document.createElement('div'); 7 | ReactDOM.render(, div); 8 | ReactDOM.unmountComponentAtNode(div); 9 | }); 10 | -------------------------------------------------------------------------------- /client/src/components/Home.js: -------------------------------------------------------------------------------- 1 | import React, { Fragment } from 'react'; 2 | import Hero from './Hero'; 3 | import HomeContent from './HomeContent'; 4 | 5 | export default function Home() { 6 | return ( 7 | 8 | 9 | 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DialogMaker 2 | Easy dialog creation & integration for Bot Framework bots 3 | 4 | Setup instructions: 5 | 6 | 1) cd into 'client' folder and run 'npm install' 7 | 2) run 'npm run build' 8 | 3) 'cd ../' back into root folder 9 | 4) run 'npm install' 10 | 5) run 'npm run start' 11 | 6) view site at 'http://localhost:3000' 12 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /client/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /client/src/components/Footer.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default function Footer() { 4 | return ( 5 | 12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /client/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | padding: 0; 4 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", 5 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 6 | sans-serif; 7 | -webkit-font-smoothing: antialiased; 8 | -moz-osx-font-smoothing: grayscale; 9 | } 10 | 11 | code { 12 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 13 | monospace; 14 | } 15 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const path = require('path'); 3 | 4 | const app = express(); 5 | const port = process.env.PORT || 3001; 6 | 7 | app.use(express.static('public')); 8 | 9 | // Index route 10 | app.get('*', (req, res) => { 11 | res.sendFile(path.join(__dirname, 'client/build/index.html')); 12 | }); 13 | 14 | // start server 15 | const server = app.listen(port, () => { 16 | console.log("Server started on port " + port); 17 | }); 18 | 19 | module.exports = server; -------------------------------------------------------------------------------- /client/src/components/Hero.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default function Hero() { 4 | return ( 5 |
6 |
7 |
8 |

Easy dialog creation & integration for Bot Framework bots

9 | Get started > 10 |
11 |
12 |
13 | ) 14 | } 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dialogmaker", 3 | "version": "1.0.0", 4 | "description": "An easy-to-use tool for generating declarative bot dialogs.", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "nodemon app.js", 9 | "start-dev": "nodemon app.js" 10 | }, 11 | "author": "Jonathan Spruance", 12 | "license": "ISC", 13 | "dependencies": { 14 | "express": "^4.16.4", 15 | "winston": "^3.2.1" 16 | }, 17 | "devDependencies": { 18 | "nodemon": "^1.18.11" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /client/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import 'bulma/css/bulma.min.css'; 4 | import 'bulma-steps/dist/css/bulma-steps.min.css'; 5 | import 'nes.css/css/nes.min.css'; 6 | import './index.css'; 7 | import App from './App'; 8 | import * as serviceWorker from './serviceWorker'; 9 | 10 | ReactDOM.render(, document.getElementById('root')); 11 | 12 | // If you want your app to work offline and load faster, you can change 13 | // unregister() to register() below. Note this comes with some pitfalls. 14 | // Learn more about service workers: https://bit.ly/CRA-PWA 15 | serviceWorker.unregister(); 16 | -------------------------------------------------------------------------------- /client/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Dialog Maker 11 | 12 | 13 | 14 |
15 | 16 | 17 | -------------------------------------------------------------------------------- /client/src/components/create/ComponentDialogMaker.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | 3 | export default class ComponentDialogMaker extends Component { 4 | 5 | render() { 6 | return ( 7 |
8 |
9 | 20 |
21 |
22 | ) 23 | } 24 | } -------------------------------------------------------------------------------- /client/src/components/create/StandalonePromptDialogMaker.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | 3 | export default class StandalonePromptDialogMaker extends Component { 4 | 5 | render() { 6 | return ( 7 |
8 |
9 | 20 |
21 |
22 | ) 23 | } 24 | } -------------------------------------------------------------------------------- /client/src/App.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'; 3 | import Navbar from './components/Navbar'; 4 | import Home from './components/Home'; 5 | import DialogMaker from './components/DialogMaker'; 6 | import Footer from './components/Footer'; 7 | import './App.css'; 8 | 9 | function App() { 10 | return ( 11 |
12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 |
20 |
21 |
22 |
23 | ); 24 | } 25 | 26 | export default App; 27 | -------------------------------------------------------------------------------- /public/precache-manifest.14b50cd8579427a6747e0908264e5fe4.js: -------------------------------------------------------------------------------- 1 | self.__precacheManifest = (self.__precacheManifest || []).concat([ 2 | { 3 | "revision": "b41d525a2ffdfe9a5f552ca1357e5a38", 4 | "url": "/index.html" 5 | }, 6 | { 7 | "revision": "8fdb202f3fd39903ce5c", 8 | "url": "/static/css/2.9e4b045f.chunk.css" 9 | }, 10 | { 11 | "revision": "f33dc6d83d5e8ad46eb3", 12 | "url": "/static/css/main.584f321a.chunk.css" 13 | }, 14 | { 15 | "revision": "8fdb202f3fd39903ce5c", 16 | "url": "/static/js/2.b3175a2f.chunk.js" 17 | }, 18 | { 19 | "revision": "f33dc6d83d5e8ad46eb3", 20 | "url": "/static/js/main.63b27687.chunk.js" 21 | }, 22 | { 23 | "revision": "42ac5946195a7306e2a5", 24 | "url": "/static/js/runtime~main.a8a9905a.js" 25 | } 26 | ]); -------------------------------------------------------------------------------- /public/precache-manifest.9f4f4bc5630d8c7bd194427ec41f6a11.js: -------------------------------------------------------------------------------- 1 | self.__precacheManifest = (self.__precacheManifest || []).concat([ 2 | { 3 | "revision": "a8b026dc083f1ae1b7f3050964edd92c", 4 | "url": "/index.html" 5 | }, 6 | { 7 | "revision": "8fdb202f3fd39903ce5c", 8 | "url": "/static/css/2.9e4b045f.chunk.css" 9 | }, 10 | { 11 | "revision": "2335ce72c4fd6d21ebf1", 12 | "url": "/static/css/main.584f321a.chunk.css" 13 | }, 14 | { 15 | "revision": "8fdb202f3fd39903ce5c", 16 | "url": "/static/js/2.b3175a2f.chunk.js" 17 | }, 18 | { 19 | "revision": "2335ce72c4fd6d21ebf1", 20 | "url": "/static/js/main.7df38e1a.chunk.js" 21 | }, 22 | { 23 | "revision": "42ac5946195a7306e2a5", 24 | "url": "/static/js/runtime~main.a8a9905a.js" 25 | } 26 | ]); -------------------------------------------------------------------------------- /public/precache-manifest.e40c7ea4a9514db19a042dd43e3d076a.js: -------------------------------------------------------------------------------- 1 | self.__precacheManifest = (self.__precacheManifest || []).concat([ 2 | { 3 | "revision": "4d270eefd9c1a76977fbbc47de3280c1", 4 | "url": "/index.html" 5 | }, 6 | { 7 | "revision": "8fdb202f3fd39903ce5c", 8 | "url": "/static/css/2.9e4b045f.chunk.css" 9 | }, 10 | { 11 | "revision": "990796efdfbd895835f7", 12 | "url": "/static/css/main.584f321a.chunk.css" 13 | }, 14 | { 15 | "revision": "8fdb202f3fd39903ce5c", 16 | "url": "/static/js/2.b3175a2f.chunk.js" 17 | }, 18 | { 19 | "revision": "990796efdfbd895835f7", 20 | "url": "/static/js/main.83f11242.chunk.js" 21 | }, 22 | { 23 | "revision": "42ac5946195a7306e2a5", 24 | "url": "/static/js/runtime~main.a8a9905a.js" 25 | } 26 | ]); -------------------------------------------------------------------------------- /public/precache-manifest.ec6694cce764334a12679517aff71d01.js: -------------------------------------------------------------------------------- 1 | self.__precacheManifest = (self.__precacheManifest || []).concat([ 2 | { 3 | "revision": "2914c8dfba27f1217087adee1759d88e", 4 | "url": "/index.html" 5 | }, 6 | { 7 | "revision": "8fdb202f3fd39903ce5c", 8 | "url": "/static/css/2.9e4b045f.chunk.css" 9 | }, 10 | { 11 | "revision": "5a81de42a152057c8db6", 12 | "url": "/static/css/main.584f321a.chunk.css" 13 | }, 14 | { 15 | "revision": "8fdb202f3fd39903ce5c", 16 | "url": "/static/js/2.b3175a2f.chunk.js" 17 | }, 18 | { 19 | "revision": "5a81de42a152057c8db6", 20 | "url": "/static/js/main.6216fe6f.chunk.js" 21 | }, 22 | { 23 | "revision": "42ac5946195a7306e2a5", 24 | "url": "/static/js/runtime~main.a8a9905a.js" 25 | } 26 | ]); -------------------------------------------------------------------------------- /public/precache-manifest.efc27919907ebda28be94301739be979.js: -------------------------------------------------------------------------------- 1 | self.__precacheManifest = (self.__precacheManifest || []).concat([ 2 | { 3 | "revision": "6c378763218b23169c6699efafbcc7ac", 4 | "url": "/index.html" 5 | }, 6 | { 7 | "revision": "3c84745f3f1299cc73c1", 8 | "url": "/static/css/2.efb48301.chunk.css" 9 | }, 10 | { 11 | "revision": "f1ec39061accd08d4934", 12 | "url": "/static/css/main.84adf97d.chunk.css" 13 | }, 14 | { 15 | "revision": "3c84745f3f1299cc73c1", 16 | "url": "/static/js/2.b99db172.chunk.js" 17 | }, 18 | { 19 | "revision": "f1ec39061accd08d4934", 20 | "url": "/static/js/main.acdff859.chunk.js" 21 | }, 22 | { 23 | "revision": "42ac5946195a7306e2a5", 24 | "url": "/static/js/runtime~main.a8a9905a.js" 25 | } 26 | ]); -------------------------------------------------------------------------------- /public/asset-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": { 3 | "main.css": "/static/css/main.84adf97d.chunk.css", 4 | "main.js": "/static/js/main.acdff859.chunk.js", 5 | "main.js.map": "/static/js/main.acdff859.chunk.js.map", 6 | "runtime~main.js": "/static/js/runtime~main.a8a9905a.js", 7 | "runtime~main.js.map": "/static/js/runtime~main.a8a9905a.js.map", 8 | "static/css/2.efb48301.chunk.css": "/static/css/2.efb48301.chunk.css", 9 | "static/js/2.b99db172.chunk.js": "/static/js/2.b99db172.chunk.js", 10 | "static/js/2.b99db172.chunk.js.map": "/static/js/2.b99db172.chunk.js.map", 11 | "index.html": "/index.html", 12 | "precache-manifest.efc27919907ebda28be94301739be979.js": "/precache-manifest.efc27919907ebda28be94301739be979.js", 13 | "service-worker.js": "/service-worker.js", 14 | "static/css/2.efb48301.chunk.css.map": "/static/css/2.efb48301.chunk.css.map", 15 | "static/css/main.84adf97d.chunk.css.map": "/static/css/main.84adf97d.chunk.css.map" 16 | } 17 | } -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dialogmaker", 3 | "version": "0.1.0", 4 | "private": true, 5 | "proxy": "http://localhost:3001/", 6 | "dependencies": { 7 | "bulma": "^0.7.4", 8 | "bulma-checkradio": "^1.1.0", 9 | "bulma-steps": "^2.2.1", 10 | "nes.css": "^2.1.1", 11 | "react": "^16.8.6", 12 | "react-dom": "^16.8.6", 13 | "react-router-dom": "^4.3.1", 14 | "react-scripts": "3.0.0", 15 | "uuid": "^3.3.2" 16 | }, 17 | "scripts": { 18 | "start": "react-scripts start", 19 | "build": "react-scripts build", 20 | "postbuild": "rm -rf ../public/static && mv build/* ../public", 21 | "test": "react-scripts test", 22 | "eject": "react-scripts eject" 23 | }, 24 | "eslintConfig": { 25 | "extends": "react-app" 26 | }, 27 | "browserslist": { 28 | "production": [ 29 | ">0.2%", 30 | "not dead", 31 | "not op_mini all" 32 | ], 33 | "development": [ 34 | "last 1 chrome version", 35 | "last 1 firefox version", 36 | "last 1 safari version" 37 | ] 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /client/src/components/Navbar.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | 3 | export default class Navbar extends Component { 4 | render() { 5 | return ( 6 | 31 | ) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /public/service-worker.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Welcome to your Workbox-powered service worker! 3 | * 4 | * You'll need to register this file in your web app and you should 5 | * disable HTTP caching for this file too. 6 | * See https://goo.gl/nhQhGp 7 | * 8 | * The rest of the code is auto-generated. Please don't update this file 9 | * directly; instead, make changes to your Workbox build configuration 10 | * and re-run your build process. 11 | * See https://goo.gl/2aRDsh 12 | */ 13 | 14 | importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); 15 | 16 | importScripts( 17 | "/precache-manifest.efc27919907ebda28be94301739be979.js" 18 | ); 19 | 20 | self.addEventListener('message', (event) => { 21 | if (event.data && event.data.type === 'SKIP_WAITING') { 22 | self.skipWaiting(); 23 | } 24 | }); 25 | 26 | workbox.core.clientsClaim(); 27 | 28 | /** 29 | * The workboxSW.precacheAndRoute() method efficiently caches and responds to 30 | * requests for URLs in the manifest. 31 | * See https://goo.gl/S9QRab 32 | */ 33 | self.__precacheManifest = [].concat(self.__precacheManifest || []); 34 | workbox.precaching.precacheAndRoute(self.__precacheManifest, {}); 35 | 36 | workbox.routing.registerNavigationRoute(workbox.precaching.getCacheKeyForURL("/index.html"), { 37 | 38 | blacklist: [/^\/_/,/\/[^\/]+\.[^\/]+$/], 39 | }); 40 | -------------------------------------------------------------------------------- /public/static/js/runtime~main.a8a9905a.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(r){for(var n,f,i=r[0],l=r[1],a=r[2],c=0,s=[];c 9 |
10 |
11 |
12 |
13 |

14 | Waterfall dialog 15 |

16 |
17 |
18 |
19 | 20 | 21 | 22 |
23 |
24 | { 25 | this.props.dialog.steps.map((step, i) => { 26 | return ( 27 |
28 |
29 | 38 |
39 |
40 | ) 41 | }) 42 | } 43 |
44 | 45 | ) 46 | } 47 | } -------------------------------------------------------------------------------- /client/src/components/create/DialogStep.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import DialogStepItem from './DialogStepItem'; 3 | 4 | export default class DialogStep extends Component { 5 | 6 | state = { 7 | isEditMode: true, 8 | itemtype: "message", 9 | edititems: this.props.items 10 | } 11 | 12 | handleEdit = () => { 13 | this.setState({isEditMode: true}); 14 | } 15 | 16 | handleSaveChanges = () => { 17 | this.setState({isEditMode: false}); 18 | console.log('check start'); 19 | console.log(this.props.id); 20 | console.log(this.state.edititems); 21 | console.log('check end'); 22 | this.props.handleSaveStepEdits(this.props.id, this.state.edititems); 23 | } 24 | 25 | render() { 26 | return ( 27 |
28 |
29 |
30 |
31 |

32 | Dialog step 33 |

34 |
35 |
36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
47 |
48 | { 49 | this.props.items.map((item, i) => ) 50 | } 51 |
52 | ) 53 | } 54 | } -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | Dialog Maker
-------------------------------------------------------------------------------- /client/src/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | text-align: center; 3 | } 4 | 5 | .App-logo { 6 | animation: App-logo-spin infinite 20s linear; 7 | height: 40vmin; 8 | pointer-events: none; 9 | } 10 | 11 | .App-header { 12 | background-color: #282c34; 13 | min-height: 100vh; 14 | display: flex; 15 | flex-direction: column; 16 | align-items: center; 17 | justify-content: center; 18 | font-size: calc(10px + 2vmin); 19 | color: white; 20 | } 21 | 22 | .App-link { 23 | color: #61dafb; 24 | } 25 | 26 | /* layout */ 27 | 28 | /* Dialogs component */ 29 | .dialogs-wrapper { 30 | text-align: left; 31 | border-top: 2px solid #00D1B2; 32 | } 33 | 34 | /* Waterfall dialog [create] */ 35 | .waterfall-step { 36 | width: 100%; 37 | } 38 | 39 | .dialogs-wrapper .dialogs-steps { 40 | padding: 2.3em; 41 | } 42 | 43 | .dialog-item-value input { 44 | min-width: 500px; 45 | } 46 | 47 | .item-input-label { 48 | text-align: left; 49 | min-width: 105px; 50 | } 51 | 52 | /* Home content component */ 53 | .home-content { 54 | padding: 2em; 55 | } 56 | 57 | /* nes.css overrides */ 58 | body { 59 | cursor: default; 60 | } 61 | 62 | .nes-btn, .nes-select select { 63 | font-family: 'Press Start 2P'; 64 | font-weight: normal; 65 | font-style: normal; 66 | } 67 | 68 | .nes-select select option { 69 | padding: .5em; 70 | } 71 | 72 | .is-base { 73 | color: #fff; 74 | background-color: #32CCFE; 75 | } 76 | 77 | /* Bulma overrides */ 78 | 79 | h1 { 80 | font-size: 1.8em; 81 | } 82 | 83 | .navbar-item img { 84 | max-height: 3.3rem; 85 | } 86 | 87 | .steps .steps-content { 88 | margin: 3em 0em !important; 89 | } 90 | 91 | /* utility classes */ 92 | .is-half { 93 | width: 50%; 94 | } 95 | 96 | .has-margin-05 { 97 | margin: .5em; 98 | } 99 | 100 | .has-margin-1 { 101 | margin: 1em; 102 | } 103 | 104 | .has-margin-left-05 { 105 | margin: .5em; 106 | } 107 | 108 | .has-margin-left-1 { 109 | margin-left: 1em; 110 | } 111 | 112 | .has-margin-right-1 { 113 | margin-right: 1em; 114 | } 115 | 116 | .has-padding-1 { 117 | padding: 1em; 118 | } 119 | 120 | .text-align-left { 121 | text-align: left; 122 | } 123 | 124 | @keyframes App-logo-spin { 125 | from { 126 | transform: rotate(0deg); 127 | } 128 | to { 129 | transform: rotate(360deg); 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /client/src/components/HomeContent.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default function HomeContent() { 4 | return ( 5 |
6 |
7 |
8 |
9 |
10 | 11 |
12 |
13 |
14 |

Create dialogs

15 |

Use the Dialog Maker's UI to easily and conveniently compose dialogs for your bots.

16 |

Learn more

17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | 25 |
26 |
27 |
28 |

Easy integration

29 |

Export your dialog and drop it into your bot project's 'dialogs' folder.

30 |

Learn more

31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | 39 |
40 |
41 |
42 |

Save your dialogs

43 |

Create an account and save your dialogs to your own personal dialogs library.

44 |

Learn more

45 |
46 |
47 |
48 |
49 |
50 |
51 | ) 52 | } 53 | -------------------------------------------------------------------------------- /public/static/css/main.84adf97d.chunk.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["index.css","App.css"],"names":[],"mappings":"AAAA,KACE,QAAS,CACT,SAAU,CACV,mIAEY,CACZ,kCAAmC,CACnC,iCACF,CAEA,KACE,uEAEF,CCbA,KACE,iBACF,CAEA,UACE,mDAA4C,CAA5C,2CAA4C,CAC5C,aAAc,CACd,mBACF,CAEA,YACE,wBAAyB,CACzB,gBAAiB,CACjB,YAAa,CACb,qBAAsB,CACtB,kBAAmB,CACnB,sBAAuB,CACvB,4BAA6B,CAC7B,UACF,CAEA,UACE,aACF,CAKA,iBACE,eAAgB,CAChB,4BACF,CAEA,gCACE,aACF,CAGA,cACE,WACF,CAGA,KACE,cACF,CAEA,SACE,UAAW,CACX,wBACF,CAIA,GACE,eACF,CAEA,iBACE,iBACF,CAEA,sBACE,sBACF,CAIA,YACE,oBACF,CAEA,eACE,WACF,CAEA,cACE,UACF,CAEA,mBACE,eACF,CAEA,oBACE,gBACF,CAEA,eACE,WACF,CAEA,iBACE,eACF,CAEA,iCACE,GACE,8BAAuB,CAAvB,sBACF,CACA,GACE,+BAAyB,CAAzB,uBACF,CACF,CAPA,yBACE,GACE,8BAAuB,CAAvB,sBACF,CACA,GACE,+BAAyB,CAAzB,uBACF,CACF","file":"main.84adf97d.chunk.css","sourcesContent":["body {\n margin: 0;\n padding: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n monospace;\n}\n",".App {\n text-align: center;\n}\n\n.App-logo {\n animation: App-logo-spin infinite 20s linear;\n height: 40vmin;\n pointer-events: none;\n}\n\n.App-header {\n background-color: #282c34;\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(10px + 2vmin);\n color: white;\n}\n\n.App-link {\n color: #61dafb;\n}\n\n/* layout */\n\n/* Dialogs component */\n.dialogs-wrapper {\n text-align: left;\n border-top: 2px solid #00D1B2;\n}\n\n.dialogs-wrapper .dialogs-steps {\n padding: 2.3em;\n}\n\n/* Home ontent component */\n.home-content {\n padding: 2em;\n}\n\n/* nes.css overrides */\nbody {\n cursor: default;\n}\n\n.is-base {\n color: #fff;\n background-color: #32CCFE;\n}\n\n/* Bulma overrides */\n\nh1 {\n font-size: 1.8em;\n}\n\n.navbar-item img {\n max-height: 3.3rem;\n}\n\n.steps .steps-content {\n margin: 3em 0em !important;\n}\n\n/* utility classes */\n\n.white-text {\n color: #fff !important;\n}\n\n.has-margin-05 {\n margin: .5em;\n}\n\n.has-margin-1 {\n margin: 1em;\n}\n\n.has-margin-left-1 {\n margin-left: 1em;\n}\n\n.has-margin-right-1 {\n margin-right: 1em;\n}\n\n.has-padding-1 {\n padding: 1em;\n}\n\n.text-align-left {\n text-align: left;\n}\n\n@keyframes App-logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n"]} -------------------------------------------------------------------------------- /client/src/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /client/README.md: -------------------------------------------------------------------------------- 1 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). 2 | 3 | ## Available Scripts 4 | 5 | In the project directory, you can run: 6 | 7 | ### `npm start` 8 | 9 | Runs the app in the development mode.
10 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser. 11 | 12 | The page will reload if you make edits.
13 | You will also see any lint errors in the console. 14 | 15 | ### `npm test` 16 | 17 | Launches the test runner in the interactive watch mode.
18 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. 19 | 20 | ### `npm run build` 21 | 22 | Builds the app for production to the `build` folder.
23 | It correctly bundles React in production mode and optimizes the build for the best performance. 24 | 25 | The build is minified and the filenames include the hashes.
26 | Your app is ready to be deployed! 27 | 28 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. 29 | 30 | ### `npm run eject` 31 | 32 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!** 33 | 34 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. 35 | 36 | Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. 37 | 38 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. 39 | 40 | ## Learn More 41 | 42 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). 43 | 44 | To learn React, check out the [React documentation](https://reactjs.org/). 45 | 46 | ### Code Splitting 47 | 48 | This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting 49 | 50 | ### Analyzing the Bundle Size 51 | 52 | This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size 53 | 54 | ### Making a Progressive Web App 55 | 56 | This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app 57 | 58 | ### Advanced Configuration 59 | 60 | This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration 61 | 62 | ### Deployment 63 | 64 | This section has moved here: https://facebook.github.io/create-react-app/docs/deployment 65 | 66 | ### `npm run build` fails to minify 67 | 68 | This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify 69 | -------------------------------------------------------------------------------- /client/src/components/create/DialogStepItem.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | 3 | export default class DialogStepItem extends Component { 4 | 5 | state = { 6 | itemtype: this.props.item.type || "message", 7 | itemvalue: this.props.item.value || "" 8 | } 9 | 10 | handleChangeItemType = (e) => { 11 | this.setState({itemtype: e.target.value}); 12 | } 13 | 14 | handleChangeItemValue = (e) => { 15 | this.setState({itemvalue: e.target.value}); 16 | } 17 | 18 | render() { 19 | return ( 20 |
21 |
22 |
23 | item type: 24 |
25 |
26 | 32 |
33 |
34 |
35 | { 36 | this.state.itemtype === "message" && 37 |
38 | message text: 39 |
40 |
41 | 48 |
49 |
50 |
51 | } 52 | { 53 | this.state.itemtype === "prompt" && 54 |
55 | prompt text: 56 |
57 |
58 | 65 |
66 |
67 |
68 | } 69 | { 70 | this.state.itemtype === "replycaputre" && 71 |
72 | variable name: 73 |
74 |
75 | 82 |
83 |
84 |
85 | } 86 | { 87 | this.state.itemtype === "custom" && 88 |
89 | custom code: 90 |
91 |
92 | 99 |
100 |
101 |
102 | } 103 |
104 |
105 | 106 | 107 | 108 |
109 |
110 | ) 111 | } 112 | } -------------------------------------------------------------------------------- /client/src/serviceWorker.js: -------------------------------------------------------------------------------- 1 | // This optional code is used to register a service worker. 2 | // register() is not called by default. 3 | 4 | // This lets the app load faster on subsequent visits in production, and gives 5 | // it offline capabilities. However, it also means that developers (and users) 6 | // will only see deployed updates on subsequent visits to a page, after all the 7 | // existing tabs open on the page have been closed, since previously cached 8 | // resources are updated in the background. 9 | 10 | // To learn more about the benefits of this model and instructions on how to 11 | // opt-in, read https://bit.ly/CRA-PWA 12 | 13 | const isLocalhost = Boolean( 14 | window.location.hostname === 'localhost' || 15 | // [::1] is the IPv6 localhost address. 16 | window.location.hostname === '[::1]' || 17 | // 127.0.0.1/8 is considered localhost for IPv4. 18 | window.location.hostname.match( 19 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ 20 | ) 21 | ); 22 | 23 | export function register(config) { 24 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { 25 | // The URL constructor is available in all browsers that support SW. 26 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); 27 | if (publicUrl.origin !== window.location.origin) { 28 | // Our service worker won't work if PUBLIC_URL is on a different origin 29 | // from what our page is served on. This might happen if a CDN is used to 30 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374 31 | return; 32 | } 33 | 34 | window.addEventListener('load', () => { 35 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; 36 | 37 | if (isLocalhost) { 38 | // This is running on localhost. Let's check if a service worker still exists or not. 39 | checkValidServiceWorker(swUrl, config); 40 | 41 | // Add some additional logging to localhost, pointing developers to the 42 | // service worker/PWA documentation. 43 | navigator.serviceWorker.ready.then(() => { 44 | console.log( 45 | 'This web app is being served cache-first by a service ' + 46 | 'worker. To learn more, visit https://bit.ly/CRA-PWA' 47 | ); 48 | }); 49 | } else { 50 | // Is not localhost. Just register service worker 51 | registerValidSW(swUrl, config); 52 | } 53 | }); 54 | } 55 | } 56 | 57 | function registerValidSW(swUrl, config) { 58 | navigator.serviceWorker 59 | .register(swUrl) 60 | .then(registration => { 61 | registration.onupdatefound = () => { 62 | const installingWorker = registration.installing; 63 | if (installingWorker == null) { 64 | return; 65 | } 66 | installingWorker.onstatechange = () => { 67 | if (installingWorker.state === 'installed') { 68 | if (navigator.serviceWorker.controller) { 69 | // At this point, the updated precached content has been fetched, 70 | // but the previous service worker will still serve the older 71 | // content until all client tabs are closed. 72 | console.log( 73 | 'New content is available and will be used when all ' + 74 | 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' 75 | ); 76 | 77 | // Execute callback 78 | if (config && config.onUpdate) { 79 | config.onUpdate(registration); 80 | } 81 | } else { 82 | // At this point, everything has been precached. 83 | // It's the perfect time to display a 84 | // "Content is cached for offline use." message. 85 | console.log('Content is cached for offline use.'); 86 | 87 | // Execute callback 88 | if (config && config.onSuccess) { 89 | config.onSuccess(registration); 90 | } 91 | } 92 | } 93 | }; 94 | }; 95 | }) 96 | .catch(error => { 97 | console.error('Error during service worker registration:', error); 98 | }); 99 | } 100 | 101 | function checkValidServiceWorker(swUrl, config) { 102 | // Check if the service worker can be found. If it can't reload the page. 103 | fetch(swUrl) 104 | .then(response => { 105 | // Ensure service worker exists, and that we really are getting a JS file. 106 | const contentType = response.headers.get('content-type'); 107 | if ( 108 | response.status === 404 || 109 | (contentType != null && contentType.indexOf('javascript') === -1) 110 | ) { 111 | // No service worker found. Probably a different app. Reload the page. 112 | navigator.serviceWorker.ready.then(registration => { 113 | registration.unregister().then(() => { 114 | window.location.reload(); 115 | }); 116 | }); 117 | } else { 118 | // Service worker found. Proceed as normal. 119 | registerValidSW(swUrl, config); 120 | } 121 | }) 122 | .catch(() => { 123 | console.log( 124 | 'No internet connection found. App is running in offline mode.' 125 | ); 126 | }); 127 | } 128 | 129 | export function unregister() { 130 | if ('serviceWorker' in navigator) { 131 | navigator.serviceWorker.ready.then(registration => { 132 | registration.unregister(); 133 | }); 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /public/static/js/runtime~main.a8a9905a.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice"],"mappings":"aACA,SAAAA,EAAAC,GAQA,IAPA,IAMAC,EAAAC,EANAC,EAAAH,EAAA,GACAI,EAAAJ,EAAA,GACAK,EAAAL,EAAA,GAIAM,EAAA,EAAAC,EAAA,GACQD,EAAAH,EAAAK,OAAoBF,IAC5BJ,EAAAC,EAAAG,GACAG,EAAAP,IACAK,EAAAG,KAAAD,EAAAP,GAAA,IAEAO,EAAAP,GAAA,EAEA,IAAAD,KAAAG,EACAO,OAAAC,UAAAC,eAAAC,KAAAV,EAAAH,KACAc,EAAAd,GAAAG,EAAAH,IAKA,IAFAe,KAAAhB,GAEAO,EAAAC,QACAD,EAAAU,OAAAV,GAOA,OAHAW,EAAAR,KAAAS,MAAAD,EAAAb,GAAA,IAGAe,IAEA,SAAAA,IAEA,IADA,IAAAC,EACAf,EAAA,EAAiBA,EAAAY,EAAAV,OAA4BF,IAAA,CAG7C,IAFA,IAAAgB,EAAAJ,EAAAZ,GACAiB,GAAA,EACAC,EAAA,EAAkBA,EAAAF,EAAAd,OAA2BgB,IAAA,CAC7C,IAAAC,EAAAH,EAAAE,GACA,IAAAf,EAAAgB,KAAAF,GAAA,GAEAA,IACAL,EAAAQ,OAAApB,IAAA,GACAe,EAAAM,IAAAC,EAAAN,EAAA,KAGA,OAAAD,EAIA,IAAAQ,EAAA,GAKApB,EAAA,CACAqB,EAAA,GAGAZ,EAAA,GAGA,SAAAS,EAAA1B,GAGA,GAAA4B,EAAA5B,GACA,OAAA4B,EAAA5B,GAAA8B,QAGA,IAAAC,EAAAH,EAAA5B,GAAA,CACAK,EAAAL,EACAgC,GAAA,EACAF,QAAA,IAUA,OANAhB,EAAAd,GAAAa,KAAAkB,EAAAD,QAAAC,IAAAD,QAAAJ,GAGAK,EAAAC,GAAA,EAGAD,EAAAD,QAKAJ,EAAAO,EAAAnB,EAGAY,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAL,EAAAM,EAAAC,GACAX,EAAAY,EAAAR,EAAAM,IACA1B,OAAA6B,eAAAT,EAAAM,EAAA,CAA0CI,YAAA,EAAAC,IAAAJ,KAK1CX,EAAAgB,EAAA,SAAAZ,GACA,qBAAAa,eAAAC,aACAlC,OAAA6B,eAAAT,EAAAa,OAAAC,YAAA,CAAwDC,MAAA,WAExDnC,OAAA6B,eAAAT,EAAA,cAAiDe,OAAA,KAQjDnB,EAAAoB,EAAA,SAAAD,EAAAE,GAEA,GADA,EAAAA,IAAAF,EAAAnB,EAAAmB,IACA,EAAAE,EAAA,OAAAF,EACA,KAAAE,GAAA,kBAAAF,QAAAG,WAAA,OAAAH,EACA,IAAAI,EAAAvC,OAAAwC,OAAA,MAGA,GAFAxB,EAAAgB,EAAAO,GACAvC,OAAA6B,eAAAU,EAAA,WAAyCT,YAAA,EAAAK,UACzC,EAAAE,GAAA,iBAAAF,EAAA,QAAAM,KAAAN,EAAAnB,EAAAS,EAAAc,EAAAE,EAAA,SAAAA,GAAgH,OAAAN,EAAAM,IAAqBC,KAAA,KAAAD,IACrI,OAAAF,GAIAvB,EAAA2B,EAAA,SAAAtB,GACA,IAAAM,EAAAN,KAAAiB,WACA,WAA2B,OAAAjB,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAL,EAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAgB,EAAAC,GAAsD,OAAA7C,OAAAC,UAAAC,eAAAC,KAAAyC,EAAAC,IAGtD7B,EAAA8B,EAAA,IAEA,IAAAC,EAAAC,OAAA,aAAAA,OAAA,iBACAC,EAAAF,EAAAhD,KAAA2C,KAAAK,GACAA,EAAAhD,KAAAX,EACA2D,IAAAG,QACA,QAAAvD,EAAA,EAAgBA,EAAAoD,EAAAlD,OAAuBF,IAAAP,EAAA2D,EAAApD,IACvC,IAAAU,EAAA4C,EAIAxC","file":"static/js/runtime~main.a8a9905a.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""} -------------------------------------------------------------------------------- /client/src/components/DialogMaker.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import bulmaSteps from 'bulma-steps/dist/js/bulma-steps.min.js'; 3 | import WaterfallDialogMaker from './create/WaterfallDialogMaker'; 4 | import StandalonePromptDialogMaker from './create/StandalonePromptDialogMaker'; 5 | import ComponentDialogMaker from './create/ComponentDialogMaker'; 6 | const uuidv4 = require('uuid/v4'); 7 | 8 | export default class DialogMaker extends Component { 9 | 10 | state = { 11 | step: 1, 12 | dialog: { 13 | name: "my dialog", 14 | type: "waterfalldialog", 15 | steps: [ 16 | { 17 | "id": uuidv4(), 18 | "items": [ 19 | { 20 | "type": "message", 21 | "value": "hello world" 22 | } 23 | ] 24 | } 25 | ] 26 | } 27 | } 28 | 29 | componentDidMount() { 30 | bulmaSteps.attach(); 31 | console.log(this.state); 32 | } 33 | 34 | onNextStep = (event) => { 35 | event.preventDefault(); 36 | this.setState((state) => ({ 37 | step: state.step + 1 38 | })); 39 | console.log(`Dialog type: ${this.state.dialog.type}`); 40 | } 41 | 42 | onPreviousStep = (event) => { 43 | event.preventDefault(); 44 | this.setState((state) => ({ 45 | step: this.state.step - 1 46 | })); 47 | console.log(`Dialog type: ${this.state.dialog.type}`); 48 | } 49 | 50 | onDialogTypeChange = (event) => { 51 | this.setState({dialog: { type: event.target.value }}); 52 | } 53 | 54 | handleAddStep = async(e) => { 55 | e.preventDefault(); 56 | const newStep = { 57 | "id": uuidv4(), 58 | "items": [ 59 | { 60 | "id": uuidv4(), 61 | "type": "message", 62 | "value": "" 63 | } 64 | ] 65 | }; 66 | this.setState((state) => ({ 67 | dialog: { 68 | ...state.dialog, 69 | steps: [...state.dialog.steps, newStep] 70 | } 71 | })); 72 | await console.log(this.state); 73 | } 74 | 75 | handleAddItem = async(stepid, e) => { 76 | console.log('hello'); 77 | e.preventDefault(); 78 | const newItem = { 79 | "id": uuidv4(), 80 | type: "message", 81 | value: "" 82 | }; 83 | this.setState((state) => ({ 84 | dialog: { 85 | ...state.dialog, 86 | steps: state.dialog.steps.map(step => (step.id === stepid ? {...step, items: [...step.items, newItem]} : step)) 87 | } 88 | })); 89 | await console.log(this.state); 90 | } 91 | 92 | handleSaveStepEdits = async(stepid, stepitems) => { 93 | this.setState((state) => ({ 94 | dialog: { 95 | ...state.dialog, 96 | steps: state.dialog.steps.map(step => (step.id === stepid ? {...step, items: stepitems} : step)) 97 | } 98 | })); 99 | await console.log('Changes saved. Here is your dialog:'); 100 | await console.log(this.state.dialog); 101 | } 102 | 103 | handleDeleteStep = (stepid, e) => { 104 | e.preventDefault(); 105 | this.setState((state, props) => ({ 106 | dialog: { 107 | ...state.dialog, 108 | steps: state.dialog.steps.filter((step) => step.id !== stepid) 109 | } 110 | })); 111 | } 112 | 113 | render() { 114 | return ( 115 |
116 |
117 |

Create a dialog

118 |

Create a dialog for your bot using the form below. 119 | Then export the json file and drop it into your bot's 'dialogs' folder. 120 |

121 |
122 |
123 |
124 |
1
125 |
126 |

Choose dialog type

127 |
128 |
129 |
130 |
2
131 |
132 |

Create dialog steps

133 |
134 |
135 |
136 |
3
137 |
138 |

Review dialog

139 |
140 |
141 |
142 |
4
143 |
144 |

Export dialog

145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 | 154 |
155 |
156 |
157 |
158 | {/*
*/} 159 | 166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 | { 175 | this.state.dialog.type === 'waterfalldialog' && 176 | 183 | } 184 | { 185 | this.state.dialog.type === 'standaloneprompt' && 186 | 187 | } 188 | { 189 | this.state.dialog.type === 'componentdialog' && 190 | 191 | } 192 |
193 |
194 |

Please review your dialog

195 |
196 |
197 | 198 | 199 |
200 |
201 |
202 |
203 | Previous 204 |
205 |
206 | Next 207 |
208 |
209 |
210 |
211 |
212 |
213 | ) 214 | } 215 | } -------------------------------------------------------------------------------- /public/static/js/main.acdff859.chunk.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[0],{16:function(e,a,t){e.exports=t(31)},25:function(e,a,t){},27:function(e,a,t){},31:function(e,a,t){"use strict";t.r(a);var n=t(0),l=t.n(n),s=t(13),c=t.n(s),r=(t(22),t(23),t(24),t(25),t(34)),i=t(36),m=t(35),o=t(3),u=t(4),d=t(6),p=t(5),E=t(7),v=function(e){function a(){return Object(o.a)(this,a),Object(d.a)(this,Object(p.a)(a).apply(this,arguments))}return Object(E.a)(a,e),Object(u.a)(a,[{key:"render",value:function(){return l.a.createElement("nav",{className:"navbar",role:"navigation","aria-label":"main navigation"},l.a.createElement("div",{className:"navbar-brand"},l.a.createElement("a",{className:"navbar-item",href:"/"},l.a.createElement("img",{src:"logo.png",width:"219px",height:"50px",alt:"logo"}))),l.a.createElement("div",{id:"navbarBasicExample",className:"navbar-menu"},l.a.createElement("div",{className:"navbar-start"}),l.a.createElement("div",{className:"navbar-end"},l.a.createElement("div",{className:"navbar-item"},l.a.createElement("div",{className:"buttons"},l.a.createElement("a",{href:"/register",className:"button is-primary"},l.a.createElement("strong",null,"Sign up")),l.a.createElement("a",{href:"/login",className:"button is-light"},"Log in"))))))}}]),a}(n.Component);function h(){return l.a.createElement("section",{className:"hero is-primary"},l.a.createElement("div",{className:"hero-body"},l.a.createElement("div",{className:"container"},l.a.createElement("h1",{class:"is-size-3"},"Easy dialog creation & integration for Bot Framework bots"),l.a.createElement("a",{href:"/dialogs",class:"nes-btn has-text-primary has-margin-1 is-size-4"},"Get started >"))))}function g(){return l.a.createElement("section",{className:"container home-content"},l.a.createElement("div",{className:"columns features text-align-left"},l.a.createElement("div",{className:"column is-4"},l.a.createElement("div",{className:"card is-shady"},l.a.createElement("div",{className:"card-image has-text-centered"},l.a.createElement("i",{className:"fa fa-paw"})),l.a.createElement("div",{className:"card-content"},l.a.createElement("div",{className:"content"},l.a.createElement("h4",null,"Create dialogs"),l.a.createElement("p",null,"Purus semper eget duis at tellus at urna condimentum mattis. Non blandit massa enim nec. Integer enim neque volutpat ac tincidunt vitae semper quis. Accumsan tortor posuere ac ut consequat semper viverra nam."),l.a.createElement("p",null,l.a.createElement("a",{href:"/"},"Learn more")))))),l.a.createElement("div",{className:"column is-4"},l.a.createElement("div",{className:"card is-shady"},l.a.createElement("div",{className:"card-image has-text-centered"},l.a.createElement("i",{className:"fa fa-empire"})),l.a.createElement("div",{className:"card-content"},l.a.createElement("div",{className:"content"},l.a.createElement("h4",null,"Easy integration"),l.a.createElement("p",null,"Ut venenatis tellus in metus vulputate. Amet consectetur adipiscing elit pellentesque. Sed arcu non odio euismod lacinia at quis risus. Faucibus turpis in eu mi bibendum neque egestas cmonsu songue. Phasellus vestibulum lorem sed risus."),l.a.createElement("p",null,l.a.createElement("a",{href:"/"},"Learn more")))))),l.a.createElement("div",{className:"column is-4"},l.a.createElement("div",{className:"card is-shady"},l.a.createElement("div",{className:"card-image has-text-centered"},l.a.createElement("i",{className:"fa fa-apple"})),l.a.createElement("div",{className:"card-content"},l.a.createElement("div",{className:"content"},l.a.createElement("h4",null,"Save your dialogs"),l.a.createElement("p",null,"Imperdiet dui accumsan sit amet nulla facilisi morbi. Fusce ut placerat orci nulla pellentesque dignissim enim. Libero id faucibus nisl tincidunt eget nullam. Commodo viverra maecenas accumsan lacus vel facilisis."),l.a.createElement("p",null,l.a.createElement("a",{href:"/"},"Learn more"))))))))}function f(){return l.a.createElement(n.Fragment,null,l.a.createElement(h,null),l.a.createElement(g,null))}var N=t(8),b=t.n(N),y=t(11),w=t(14),x=t.n(w),j=function(e){function a(){return Object(o.a)(this,a),Object(d.a)(this,Object(p.a)(a).apply(this,arguments))}return Object(E.a)(a,e),Object(u.a)(a,[{key:"render",value:function(){return l.a.createElement("p",null,"Waterfall Dialog Maker")}}]),a}(n.Component),O=function(e){function a(){return Object(o.a)(this,a),Object(d.a)(this,Object(p.a)(a).apply(this,arguments))}return Object(E.a)(a,e),Object(u.a)(a,[{key:"render",value:function(){return l.a.createElement("p",null,"Standalone Prompt Dialog Maker")}}]),a}(n.Component),k=function(e){function a(){return Object(o.a)(this,a),Object(d.a)(this,Object(p.a)(a).apply(this,arguments))}return Object(E.a)(a,e),Object(u.a)(a,[{key:"render",value:function(){return l.a.createElement("p",null,"Component Dialog Maker")}}]),a}(n.Component),C=function(e){function a(){var e,t;Object(o.a)(this,a);for(var n=arguments.length,l=new Array(n),s=0;s"))),l.a.createElement("div",{className:"steps-actions"},l.a.createElement("div",{className:"steps-action"},l.a.createElement("a",{href:"/",onClick:this.onPreviousStep,"data-nav":"previous",className:"nes-btn has-text-primary"},"Previous")),l.a.createElement("div",{className:"steps-action"},l.a.createElement("a",{href:"/",onClick:this.onNextStep,"data-nav":"next",className:"nes-btn has-text-primary"},"Next")))))))}}]),a}(n.Component);function T(){return l.a.createElement("footer",{className:"footer"},l.a.createElement("div",{className:"content has-text-centered"},l.a.createElement("p",null,"Dialog Maker 2019. The source code is licensed MIT. The website content is licensed CC BY NC SA 4.0.")))}t(27);var S=function(){return l.a.createElement("div",{className:"App"},l.a.createElement(r.a,null,l.a.createElement("div",null,l.a.createElement(v,null),l.a.createElement(i.a,null,l.a.createElement(m.a,{exact:!0,path:"/",component:f}),l.a.createElement(m.a,{exact:!0,path:"/dialogs",component:C})),l.a.createElement(T,null))))};Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));c.a.render(l.a.createElement(S,null),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then(function(e){e.unregister()})}},[[16,1,2]]]); 2 | //# sourceMappingURL=main.acdff859.chunk.js.map -------------------------------------------------------------------------------- /public/static/js/main.acdff859.chunk.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["components/Navbar.js","components/Hero.js","components/HomeContent.js","components/Home.js","components/WaterfallDialogMaker.js","components/StandalonePromptDialogMaker.js","components/ComponentDialogMaker.js","components/DialogMaker.js","components/Footer.js","App.js","serviceWorker.js","index.js"],"names":["Navbar","react_default","a","createElement","className","role","aria-label","href","src","width","height","alt","id","Component","Hero","class","HomeContent","Home","react","WaterfallDialogMaker","StandalonePromptDialogMaker","ComponentDialogMaker","DialogMaker","state","step","dialogType","dialogSteps","onNextStep","_callee","event","regenerator_default","wrap","_context","prev","next","preventDefault","_this","setState","console","log","concat","stop","onPreviousStep","_callee2","_context2","onDialogTypeChange","_callee3","_context3","target","value","bulmaSteps","attach","this","onChange","WaterfallDialogMaker_WaterfallDialogMaker","StandalonePromptDialogMaker_StandalonePromptDialogMaker","ComponentDialogMaker_ComponentDialogMaker","onClick","data-nav","Footer","App","BrowserRouter","Navbar_Navbar","Switch","Route","exact","path","component","Boolean","window","location","hostname","match","ReactDOM","render","src_App","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.acdff859.chunk.js","sourcesContent":["import React, { Component } from 'react'\r\n\r\nexport default class Navbar extends Component {\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nexport default function Hero() {\r\n return (\r\n
\r\n
\r\n
\r\n

Easy dialog creation & integration for Bot Framework bots

\r\n Get started >\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react'\r\n\r\nexport default function HomeContent() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

Create dialogs

\r\n

Purus semper eget duis at tellus at urna condimentum mattis. Non blandit massa enim nec. Integer enim neque volutpat ac tincidunt vitae semper quis. Accumsan tortor posuere ac ut consequat semper viverra nam.

\r\n

Learn more

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

Easy integration

\r\n

Ut venenatis tellus in metus vulputate. Amet consectetur adipiscing elit pellentesque. Sed arcu non odio euismod lacinia at quis risus. Faucibus turpis in eu mi bibendum neque egestas cmonsu songue. Phasellus vestibulum lorem\r\n sed risus.

\r\n

Learn more

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

Save your dialogs

\r\n

Imperdiet dui accumsan sit amet nulla facilisi morbi. Fusce ut placerat orci nulla pellentesque dignissim enim. Libero id faucibus nisl tincidunt eget nullam. Commodo viverra maecenas accumsan lacus vel facilisis.

\r\n

Learn more

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React, { Fragment } from 'react';\r\nimport Hero from './Hero';\r\nimport HomeContent from './HomeContent';\r\n\r\nexport default function Home() {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport default class WaterfallDialogMaker extends Component {\r\n\r\n render() {\r\n return (\r\n

Waterfall Dialog Maker

\r\n )\r\n }\r\n}","import React, { Component } from 'react';\r\n\r\nexport default class StandalonePromptDialogMaker extends Component {\r\n\r\n render() {\r\n return (\r\n

Standalone Prompt Dialog Maker

\r\n )\r\n }\r\n}","import React, { Component } from 'react';\r\n\r\nexport default class ComponentDialogMaker extends Component {\r\n\r\n render() {\r\n return (\r\n

Component Dialog Maker

\r\n )\r\n }\r\n}","import React, { Component } from 'react';\r\nimport bulmaSteps from 'bulma-steps/dist/js/bulma-steps.min.js';\r\nimport WaterfallDialogMaker from './WaterfallDialogMaker';\r\nimport StandalonePromptDialogMaker from './StandalonePromptDialogMaker';\r\nimport ComponentDialogMaker from './ComponentDialogMaker';\r\n\r\nexport default class DialogMaker extends Component {\r\n \r\n state = {\r\n step: 1,\r\n dialogType: \"waterfalldialog\",\r\n dialogSteps: []\r\n }\r\n\r\n componentDidMount() {\r\n bulmaSteps.attach();\r\n }\r\n\r\n onNextStep = async (event) => {\r\n event.preventDefault();\r\n await this.setState({ step: this.state.step + 1 });\r\n console.log(`Dialog type: ${this.state.dialogType}`);\r\n }\r\n\r\n onPreviousStep = async (event) => {\r\n event.preventDefault();\r\n await this.setState({ step: this.state.step - 1 });\r\n console.log(`Dialog type: ${this.state.dialogType}`);\r\n }\r\n\r\n onDialogTypeChange = async (event) => {\r\n await this.setState({ dialogType: event.target.value });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n

Create a dialog

\r\n

Create a dialog for your bot using the form below. \r\n Then export the json file and drop it into your bot's 'dialogs' folder.\r\n

\r\n
\r\n
\r\n
\r\n
1
\r\n
\r\n

Choose dialog type

\r\n
\r\n
\r\n
\r\n
2
\r\n
\r\n

Create dialog steps

\r\n
\r\n
\r\n
\r\n
3
\r\n
\r\n

Review dialog

\r\n
\r\n
\r\n
\r\n
4
\r\n
\r\n

Export dialog

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {\r\n this.state.dialogType === 'waterfalldialog' &&\r\n \r\n }\r\n {\r\n this.state.dialogType === 'standaloneprompt' &&\r\n \r\n }\r\n {\r\n this.state.dialogType === 'componentdialog' &&\r\n \r\n }\r\n
\r\n
\r\n

Please review your dialog

\r\n
\r\n
\r\n Export dialog >\r\n
\r\n
\r\n
\r\n
\r\n Previous\r\n
\r\n
\r\n Next\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}","import React from 'react'\r\n\r\nexport default function Footer() {\r\n return (\r\n
\r\n
\r\n

\r\n Dialog Maker 2019. The source code is licensed MIT. The website content is licensed CC BY NC SA 4.0.\r\n

\r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react';\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\nimport Navbar from './components/Navbar';\nimport Home from './components/Home';\nimport DialogMaker from './components/DialogMaker';\nimport Footer from './components/Footer';\nimport './App.css';\n\nfunction App() {\n return (\n
\n \n
\n \n \n \n \n \n
\n
\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 'bulma/css/bulma.min.css';\nimport 'bulma-steps/dist/css/bulma-steps.min.css';\nimport 'nes.css/css/nes.min.css';\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":""} --------------------------------------------------------------------------------