├── .editorconfig ├── .eslintrc.js ├── .gitattributes ├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── feature_request.md │ └── stale.yml ├── .gitignore ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── .stylelintrc ├── .travis.yml ├── .vscode └── settings.json ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE.md ├── Procfile ├── README.md ├── app ├── .htaccess ├── .nginx.conf ├── app.js ├── components │ ├── A │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── AppBar │ │ ├── Loadable.js │ │ ├── index.js │ │ ├── messages.js │ │ └── tests │ │ │ └── index.test.js │ ├── BackButton │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── Breadcrumb │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── Bubbles │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── Button │ │ ├── A.js │ │ ├── StyledButton.js │ │ ├── Wrapper.js │ │ ├── buttonStyles.js │ │ ├── index.js │ │ └── tests │ │ │ ├── A.test.js │ │ │ ├── StyledButton.test.js │ │ │ ├── Wrapper.test.js │ │ │ └── index.test.js │ ├── Cards │ │ ├── ChartCard.js │ │ ├── ProfileCard.js │ │ ├── RegularCard.js │ │ ├── StatsCard.js │ │ └── placeholder-male.png │ ├── Expansion │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── FlexCheckbox │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── FlexColumn │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── FlexRow │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── Footer │ │ ├── Wrapper.js │ │ ├── index.js │ │ ├── messages.js │ │ └── tests │ │ │ ├── Wrapper.test.js │ │ │ └── index.test.js │ ├── Grid │ │ ├── ItemGrid.js │ │ └── Wrapper.js │ ├── H1 │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── H2 │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── H3 │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── Header │ │ ├── A.js │ │ ├── HeaderLink.js │ │ ├── Img.js │ │ ├── NavBar.js │ │ ├── banner.jpg │ │ ├── index.js │ │ ├── messages.js │ │ └── tests │ │ │ ├── A.test.js │ │ │ ├── Img.test.js │ │ │ ├── __snapshots__ │ │ │ ├── A.test.js.snap │ │ │ └── Img.test.js.snap │ │ │ └── index.test.js │ ├── Img │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── IssueIcon │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── List │ │ ├── Ul.js │ │ ├── Wrapper.js │ │ ├── index.js │ │ └── tests │ │ │ ├── Ul.test.js │ │ │ ├── Wrapper.test.js │ │ │ └── index.test.js │ ├── ListItem │ │ ├── Item.js │ │ ├── Wrapper.js │ │ ├── index.js │ │ └── tests │ │ │ ├── Item.test.js │ │ │ ├── Wrapper.test.js │ │ │ └── index.test.js │ ├── LoadingIndicator │ │ ├── Circle.js │ │ ├── Wrapper.js │ │ ├── index.js │ │ └── tests │ │ │ ├── Circle.test.js │ │ │ ├── Wrapper.test.js │ │ │ ├── __snapshots__ │ │ │ └── index.test.js.snap │ │ │ └── index.test.js │ ├── Node │ │ ├── index.js │ │ ├── messages.js │ │ └── tests │ │ │ └── index.test.js │ ├── RightSidebarContent │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── RightSidebarDrawer │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── Snackbar │ │ └── SnackbarContent.js │ ├── StyledTextField │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ ├── Table │ │ ├── EnhancedTable.js │ │ ├── GenericTable.js │ │ └── Table.js │ ├── Timer │ │ └── Timer.js │ ├── Toggle │ │ ├── Select.js │ │ ├── index.js │ │ └── tests │ │ │ ├── Select.test.js │ │ │ └── index.test.js │ ├── ToggleOption │ │ ├── index.js │ │ └── tests │ │ │ └── index.test.js │ └── variables │ │ ├── general.js │ │ ├── styles.js │ │ └── styles │ │ ├── buttonStyle.js │ │ ├── chartCardStyle.js │ │ ├── customInputStyle.js │ │ ├── dashboardStyle.js │ │ ├── footerStyle.js │ │ ├── headerLinksStyle.js │ │ ├── headerStyle.js │ │ ├── iconButtonStyle.js │ │ ├── iconsStyle.js │ │ ├── profileCardStyle.js │ │ ├── regularCardStyle.js │ │ ├── sidebarStyle.js │ │ ├── snackbarContentStyle.js │ │ ├── statsCardStyle.js │ │ ├── tableStyle.js │ │ ├── tasksCardStyle.js │ │ ├── tasksStyle.js │ │ └── typographyStyle.js ├── configureStore.js ├── containers │ ├── Agents │ │ ├── Loadable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── newAgent.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── App │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── reducer.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── actions.test.js │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ └── selectors.test.js │ ├── Chatbot │ │ ├── Loadable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── DashboardPage │ │ ├── Loadable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── EditNode │ │ ├── Loadable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── form │ │ │ ├── quickReplies.js │ │ │ ├── slots.js │ │ │ ├── styles.js │ │ │ ├── validate.js │ │ │ └── webhook.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── responses.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── Entities │ │ ├── Loadable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── Expression │ │ ├── Add │ │ │ ├── Add.js │ │ │ └── Variant.js │ │ ├── ExpressionTable.js │ │ ├── Loadable.js │ │ ├── Text.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── Feedback │ │ ├── Loadable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── actions.test.js │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── History │ │ ├── Loadable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── actions.test.js │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── HomePage │ │ ├── Drawer.js │ │ ├── Loadable.js │ │ ├── Snackbar.js │ │ ├── Styling │ │ │ ├── AtPrefix.js │ │ │ ├── CenteredSection.js │ │ │ ├── Form.js │ │ │ ├── Input.js │ │ │ └── Section.js │ │ ├── ToolBar.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tileData.js │ ├── IntentPage │ │ ├── EditAgent.js │ │ ├── Loadable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── LanguageProvider │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── reducer.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── actions.test.js │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ └── selectors.test.js │ ├── LocaleToggle │ │ ├── Wrapper.js │ │ ├── index.js │ │ ├── messages.js │ │ └── tests │ │ │ ├── Wrapper.test.js │ │ │ └── index.test.js │ ├── LoginPage │ │ ├── Auth.js │ │ ├── Loadable.js │ │ ├── LoginForm.js │ │ ├── RegisterForm.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── NotFoundPage │ │ ├── Loadable.js │ │ ├── index.js │ │ ├── messages.js │ │ └── tests │ │ │ └── index.test.js │ ├── Permissions │ │ ├── Loadable.js │ │ ├── PermSelect.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── RightSidebar │ │ ├── Loadable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── rasa.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── SingleTalkFlow │ │ ├── Loadable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── SmallTalk │ │ ├── Loadable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── actions.test.js │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── Synonyms │ │ ├── Loadable.js │ │ ├── SynonymSelect.js │ │ ├── Table.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── Talk │ │ ├── EditTalkWrapper.js │ │ ├── Loadable.js │ │ ├── Overview │ │ │ └── table.js │ │ ├── TalkTable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── TalkWrapper │ │ ├── AddTalkWrapper.js │ │ ├── Loadable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ ├── ThirdParty │ │ ├── Loadable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ │ ├── index.test.js │ │ │ ├── reducer.test.js │ │ │ ├── saga.test.js │ │ │ └── selectors.test.js │ └── Training │ │ ├── Loadable.js │ │ ├── Status.js │ │ ├── TrainingTable.js │ │ ├── actions.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── saga.js │ │ ├── selectors.js │ │ └── tests │ │ ├── index.test.js │ │ ├── reducer.test.js │ │ ├── saga.test.js │ │ └── selectors.test.js ├── global-styles.js ├── i18n.js ├── images │ ├── agent.png │ ├── button.png │ ├── favicon.ico │ ├── iIcon.png │ ├── iIcon.svg │ ├── icon-512x512.png │ ├── link.png │ ├── logo.png │ └── logoText.png ├── index.html ├── reducers.js ├── tests │ ├── i18n.test.js │ └── store.test.js ├── translations │ ├── de.json │ └── en.json └── utils │ ├── checkStore.js │ ├── constants.js │ ├── history.js │ ├── injectReducer.js │ ├── injectSaga.js │ ├── reducerInjectors.js │ ├── request.js │ ├── sagaInjectors.js │ ├── tests │ ├── checkStore.test.js │ ├── injectReducer.test.js │ ├── injectSaga.test.js │ ├── reducerInjectors.test.js │ ├── request.test.js │ └── sagaInjectors.test.js │ └── validators.js ├── appveyor.yml ├── docker-compose.yml ├── example.env ├── internals ├── config.js ├── docker │ ├── .dockerignore │ └── Dockerfile ├── generators │ ├── component │ │ ├── class.js.hbs │ │ ├── index.js │ │ ├── loadable.js.hbs │ │ ├── messages.js.hbs │ │ ├── stateless.js.hbs │ │ └── test.js.hbs │ ├── container │ │ ├── actions.js.hbs │ │ ├── actions.test.js.hbs │ │ ├── class.js.hbs │ │ ├── constants.js.hbs │ │ ├── index.js │ │ ├── index.js.hbs │ │ ├── messages.js.hbs │ │ ├── reducer.js.hbs │ │ ├── reducer.test.js.hbs │ │ ├── saga.js.hbs │ │ ├── saga.test.js.hbs │ │ ├── selectors.js.hbs │ │ ├── selectors.test.js.hbs │ │ ├── stateless.js.hbs │ │ └── test.js.hbs │ ├── index.js │ ├── language │ │ ├── add-locale-data.hbs │ │ ├── app-locale.hbs │ │ ├── format-translation-messages.hbs │ │ ├── index.js │ │ ├── intl-locale-data.hbs │ │ ├── polyfill-intl-locale.hbs │ │ ├── translation-messages.hbs │ │ └── translations-json.hbs │ └── utils │ │ └── componentExists.js ├── mocks │ ├── cssModule.js │ └── image.js ├── scripts │ ├── analyze.js │ ├── clean.js │ ├── dependencies.js │ ├── extract-intl.js │ ├── generate-templates-for-linting.js │ ├── helpers │ │ ├── checkmark.js │ │ ├── progress.js │ │ └── xmark.js │ └── npmcheckversion.js ├── testing │ ├── enzyme-setup.js │ └── test-bundler.js └── webpack │ ├── webpack.base.babel.js │ ├── webpack.dev.babel.js │ ├── webpack.dll.babel.js │ └── webpack.prod.babel.js ├── jsconfig.json ├── package.json ├── server ├── api_tests │ └── auth.http ├── argv.js ├── authentication │ ├── auth-router.js │ ├── auth.js │ ├── authenitcation.http │ ├── config.json │ ├── guard.js │ ├── isAuthenticated.js │ ├── local-signin.js │ ├── local-signup.js │ └── models │ │ ├── index.js │ │ └── user.js ├── index.js ├── logger.js ├── middlewares │ ├── addDevMiddlewares.js │ ├── addProdMiddlewares.js │ └── frontendMiddleware.js ├── mongo │ ├── controllers │ │ ├── agents.js │ │ ├── analytics.js │ │ ├── converstions.js │ │ ├── dialog │ │ │ ├── add.js │ │ │ ├── get.js │ │ │ ├── move.js │ │ │ ├── remove.js │ │ │ ├── update.js │ │ │ └── wrapper.js │ │ ├── entities.js │ │ ├── expressions.js │ │ ├── intents.js │ │ ├── message_history.js │ │ ├── options.js │ │ ├── parameters.js │ │ ├── permissions │ │ │ ├── defaultData.json │ │ │ └── permissions.js │ │ ├── session.js │ │ ├── smallTalk.js │ │ ├── thirdParty.js │ │ └── training.js │ ├── direct │ │ ├── SlotFiller.js │ │ ├── generateResponse.js │ │ ├── traverseNodes.js │ │ └── webhook.js │ ├── router.js │ ├── schemas │ │ ├── agentsSchema.js │ │ ├── analyticsSchema.js │ │ ├── chatbot_db_connect.js │ │ ├── entitiesSchema.js │ │ ├── expressionsSchema.js │ │ ├── messageHistorySchema.js │ │ ├── nodeSchema.js │ │ ├── nodeWrapperSchema.js │ │ ├── optionsSchema.js │ │ ├── permissionsSchema.js │ │ ├── sessionSchema.js │ │ ├── smallTalkSchema.js │ │ ├── synonymSchema.js │ │ ├── thirdPartySchema.js │ │ └── trainingSchema.js │ ├── test │ │ └── TestCase.js │ └── utils │ │ ├── cache.js │ │ ├── generateUID.js │ │ └── validators.js ├── port.js └── thirdparties │ ├── facebook.js │ └── telegram.js └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | end_of_line = lf 8 | insert_final_newline = true 9 | indent_style = space 10 | indent_size = 2 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | trim_trailing_whitespace = false 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | 5 | --- 6 | 7 | **Describe the bug** 8 | A clear and concise description of what the bug is. 9 | 10 | **To Reproduce** 11 | Steps to reproduce the behavior: 12 | 1. Go to '...' 13 | 2. Click on '....' 14 | 3. Scroll down to '....' 15 | 4. See error 16 | 17 | **Expected behavior** 18 | A clear and concise description of what you expected to happen. 19 | 20 | **Screenshots** 21 | If applicable, add screenshots to help explain your problem. 22 | 23 | **Desktop (please complete the following information):** 24 | - OS: [e.g. iOS] 25 | - Browser [e.g. chrome, safari] 26 | - Version [e.g. 22] 27 | 28 | **Smartphone (please complete the following information):** 29 | - Device: [e.g. iPhone6] 30 | - OS: [e.g. iOS8.1] 31 | - Browser [e.g. stock browser, safari] 32 | - Version [e.g. 22] 33 | 34 | **Additional context** 35 | Add any other context about the problem here. 36 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | 5 | --- 6 | 7 | **Is your feature request related to a problem? Please describe.** 8 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 9 | 10 | **Describe the solution you'd like** 11 | A clear and concise description of what you want to happen. 12 | 13 | **Describe alternatives you've considered** 14 | A clear and concise description of any alternative solutions or features you've considered. 15 | 16 | **Additional context** 17 | Add any other context or screenshots about the feature request here. 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Don't check auto-generated stuff into git 2 | coverage 3 | build 4 | node_modules 5 | stats.json 6 | 7 | # Cruft 8 | .DS_Store 9 | npm-debug.log 10 | .idea 11 | .env 12 | /data 13 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | lts/carbon 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | build/ 2 | node_modules/ 3 | internals/generators/ 4 | internals/scripts/ 5 | package-lock.json 6 | yarn.lock 7 | package.json 8 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "semi": true, 6 | "singleQuote": true, 7 | "trailingComma": "all" 8 | } 9 | -------------------------------------------------------------------------------- /.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "processors": ["stylelint-processor-styled-components"], 3 | "extends": [ 4 | "stylelint-config-recommended", 5 | "stylelint-config-styled-components" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | node_js: 4 | - 9 5 | - 8 6 | 7 | script: 8 | - node ./internals/scripts/generate-templates-for-linting 9 | - npm test -- --maxWorkers=4 10 | - npm run build 11 | 12 | before_install: 13 | - export CHROME_BIN=chromium-browser 14 | - export DISPLAY=:99.0 15 | - sh -e /etc/init.d/xvfb start 16 | 17 | notifications: 18 | email: 19 | on_failure: change 20 | 21 | after_success: 'npm run coveralls' 22 | 23 | cache: 24 | yarn: true 25 | directories: 26 | - node_modules 27 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "prettier.eslintIntegration": true, 4 | "eslint.run": "onSave" 5 | } 6 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 Maximilian Stoiber 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: npm run start:prod 2 | -------------------------------------------------------------------------------- /app/components/A/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * A link to a certain page, an anchor tag 3 | */ 4 | 5 | import styled from 'styled-components'; 6 | 7 | const A = styled.a` 8 | color: #41addd; 9 | 10 | &:hover { 11 | color: #6cc0e5; 12 | } 13 | `; 14 | 15 | export default A; 16 | -------------------------------------------------------------------------------- /app/components/AppBar/Loadable.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * Asynchronously loads the component for AppBar 4 | * 5 | */ 6 | 7 | import Loadable from 'react-loadable'; 8 | 9 | export default Loadable({ 10 | loader: () => import('./index'), 11 | loading: () => null, 12 | }); 13 | -------------------------------------------------------------------------------- /app/components/AppBar/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackdh/RasaTalk/757630b3ce9ba9e7ee827a6ff35b400158961e84/app/components/AppBar/index.js -------------------------------------------------------------------------------- /app/components/AppBar/messages.js: -------------------------------------------------------------------------------- 1 | /* 2 | * AppBar Messages 3 | * 4 | * This contains all the text for the AppBar component. 5 | */ 6 | import { defineMessages } from 'react-intl'; 7 | 8 | export default defineMessages({ 9 | header: { 10 | id: 'app.components.AppBar.header', 11 | defaultMessage: 'This is the AppBar component !', 12 | }, 13 | }); 14 | -------------------------------------------------------------------------------- /app/components/AppBar/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react'; 2 | // import { shallow } from 'enzyme'; 3 | 4 | // import AppBar from '../index'; 5 | 6 | describe('', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /app/components/BackButton/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * BackButton 4 | * 5 | */ 6 | 7 | import React from 'react'; 8 | import PropTypes from 'prop-types'; 9 | import styled from 'styled-components'; 10 | import Button from '@material-ui/core/Button'; 11 | import Back from '@material-ui/icons/ArrowBack'; 12 | import Tooltip from '@material-ui/core/Tooltip'; 13 | import { Link } from 'react-router-dom'; 14 | 15 | const StyledButton = styled(Button)` 16 | && { 17 | position: fixed; 18 | left: 99px; 19 | bottom: 15px; 20 | } 21 | `; 22 | 23 | function BackButton(props) { 24 | return ( 25 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | ); 37 | } 38 | 39 | BackButton.propTypes = { 40 | link: PropTypes.string.isRequired, 41 | tooltip: PropTypes.string.isRequired, 42 | }; 43 | 44 | export default BackButton; 45 | -------------------------------------------------------------------------------- /app/components/BackButton/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react'; 2 | // import { shallow } from 'enzyme'; 3 | 4 | // import BackButton from '../index'; 5 | 6 | describe('', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /app/components/Breadcrumb/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react'; 2 | // import { shallow } from 'enzyme'; 3 | 4 | // import Breadcrumb from '../index'; 5 | 6 | describe('', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /app/components/Bubbles/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react'; 2 | // import { shallow } from 'enzyme'; 3 | 4 | // import Bubbles from '../index'; 5 | 6 | describe('', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /app/components/Button/A.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | import buttonStyles from './buttonStyles'; 4 | 5 | const A = styled.a` 6 | ${buttonStyles}; 7 | `; 8 | 9 | export default A; 10 | -------------------------------------------------------------------------------- /app/components/Button/StyledButton.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | import buttonStyles from './buttonStyles'; 4 | 5 | const StyledButton = styled.button` 6 | ${buttonStyles}; 7 | `; 8 | 9 | export default StyledButton; 10 | -------------------------------------------------------------------------------- /app/components/Button/Wrapper.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | const Wrapper = styled.div` 4 | width: 100%; 5 | text-align: center; 6 | margin: 4em 0; 7 | `; 8 | 9 | export default Wrapper; 10 | -------------------------------------------------------------------------------- /app/components/Button/buttonStyles.js: -------------------------------------------------------------------------------- 1 | import { css } from 'styled-components'; 2 | 3 | const buttonStyles = css` 4 | display: inline-block; 5 | box-sizing: border-box; 6 | padding: 0.25em 2em; 7 | text-decoration: none; 8 | border-radius: 4px; 9 | -webkit-font-smoothing: antialiased; 10 | -webkit-touch-callout: none; 11 | user-select: none; 12 | cursor: pointer; 13 | outline: 0; 14 | font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; 15 | font-weight: bold; 16 | font-size: 16px; 17 | border: 2px solid #41addd; 18 | color: #41addd; 19 | 20 | &:active { 21 | background: #41addd; 22 | color: #fff; 23 | } 24 | `; 25 | 26 | export default buttonStyles; 27 | -------------------------------------------------------------------------------- /app/components/Button/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * Button.js 4 | * 5 | * A common button, if you pass it a prop "route" it'll render a link to a react-router route 6 | * otherwise it'll render a link with an onclick 7 | */ 8 | 9 | import React, { Children } from 'react'; 10 | import PropTypes from 'prop-types'; 11 | 12 | import A from './A'; 13 | import StyledButton from './StyledButton'; 14 | import Wrapper from './Wrapper'; 15 | 16 | function Button(props) { 17 | // Render an anchor tag 18 | let button = ( 19 | 20 | {Children.toArray(props.children)} 21 | 22 | ); 23 | 24 | // If the Button has a handleRoute prop, we want to render a button 25 | if (props.handleRoute) { 26 | button = ( 27 | 28 | {Children.toArray(props.children)} 29 | 30 | ); 31 | } 32 | 33 | return {button}; 34 | } 35 | 36 | Button.propTypes = { 37 | handleRoute: PropTypes.func, 38 | href: PropTypes.string, 39 | onClick: PropTypes.func, 40 | children: PropTypes.node.isRequired, 41 | }; 42 | 43 | export default Button; 44 | -------------------------------------------------------------------------------- /app/components/Button/tests/A.test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | 4 | import A from '../A'; 5 | 6 | describe('', () => { 7 | it('should render an tag', () => { 8 | const renderedComponent = shallow(); 9 | expect(renderedComponent.type()).toEqual('a'); 10 | }); 11 | 12 | it('should have a className attribute', () => { 13 | const renderedComponent = shallow(); 14 | expect(renderedComponent.prop('className')).toBeDefined(); 15 | }); 16 | 17 | it('should adopt a valid attribute', () => { 18 | const id = 'test'; 19 | const renderedComponent = shallow(); 20 | expect(renderedComponent.prop('id')).toEqual(id); 21 | }); 22 | 23 | it('should not adopt an invalid attribute', () => { 24 | const renderedComponent = shallow(); 25 | expect(renderedComponent.prop('attribute')).toBeUndefined(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /app/components/Button/tests/StyledButton.test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { shallow } from 'enzyme'; 3 | 4 | import StyledButton from '../StyledButton'; 5 | 6 | describe('', () => { 7 | it('should render an