gitextract_m8f95147/ ├── .babelrc ├── .circleci/ │ └── config.yml ├── .dockerignore ├── .eslintignore ├── .eslintrc.js ├── .flowconfig ├── .github/ │ ├── ISSUE_TEMPLATE.md │ └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .npmignore ├── .prettierignore ├── .prettierrc ├── LICENSE ├── README.md ├── api/ │ ├── apollo-server.js │ ├── authentication.js │ ├── index.js │ ├── loaders/ │ │ ├── channel.js │ │ ├── community.js │ │ ├── create-loader.js │ │ ├── directMessageThread.js │ │ ├── index.js │ │ ├── message.js │ │ ├── reaction.js │ │ ├── thread.js │ │ ├── threadReaction.js │ │ ├── types.js │ │ └── user.js │ ├── migrations/ │ │ ├── 20170410074258-initial-data.js │ │ ├── 20170613200350-notifications.js │ │ ├── 20170616113103-compound-indexes-for-ordering.js │ │ ├── 20170627104435-user-email-settings.js │ │ ├── 20170701173337-linkify-messages.js │ │ ├── 20170702194221-fix-images.js │ │ ├── 20170706114239-providerfield-indexes.js │ │ ├── 20170706205658-slack-import.js │ │ ├── 20170714171920-web-push-subscription.js │ │ ├── 20170724184557-notifications-entity-added-index.js │ │ ├── 20170803104302-dedupe-users-settings.js │ │ ├── 20170825220615-clean-recurring-payments.js │ │ ├── 20170829233734-userid-index-on-invoices.js │ │ ├── 20170831163211-invoice-data-model-update.js │ │ ├── 20170907222544-digest-email-notification-settings.js │ │ ├── 20170908230623-add-reputation-field-to-communities.js │ │ ├── 20170912000619-backfill-rep.js │ │ ├── 20170915201609-clean-up-bad-dm-data.js │ │ ├── 20170926003025-activate-daily-weekly-digest-settings.js │ │ ├── 20170926102527-speedy-gonzales.js │ │ ├── 20170927002438-communityid-index-on-reputation-events.js │ │ ├── 20170928143435-slate-to-draftjs.js.js │ │ ├── 20171005075445-remove-markdown-links-from-messages.js │ │ ├── 20171008101118-last-slate-to-draft.js │ │ ├── 20171013195530-core-metrics-table.js │ │ ├── 20171018235659-add-direst-message-user-settings.js │ │ ├── 20171029090619-users-channels-index.js │ │ ├── 20171029094352-users-threads-index.js │ │ ├── 20171103014955-add-mention-notification-settings.js │ │ ├── 20171129215512-index-communities-by-slug.js │ │ ├── 20171129221050-curated-content-table-creation.js │ │ ├── 20171208175038-index-users-for-search.js │ │ ├── 20171208180800-index-communities-for-search.js │ │ ├── 20171213002813-add-modified-at-field-to-users-and-communities.js │ │ ├── 20180209015734-github-provider-id-index.js │ │ ├── 20180214111357-expo-push-subscriptions.js │ │ ├── 20180309144845-create-community-settings-table.js │ │ ├── 20180316195507-create-channel-settings-table.js │ │ ├── 20180320122000-create-stripe-tables.js │ │ ├── 20180320173414-set-administrator-info-on-community.js │ │ ├── 20180411183454-lowercase-all-the-slugs.js │ │ ├── 20180428001543-reset-slack-import-records.js │ │ ├── 20180504003702-encrypt-existing-slack-data.js │ │ ├── 20180517180716-enable-private-communities.js │ │ ├── 20180517215503-add-ispending-to-userscommunities.js │ │ ├── 20180518135040-add-join-settings-to-community-settings.js │ │ ├── 20180621001409-thread-likes-table.js │ │ ├── 20180823115847-add-users-communities-indexes.js │ │ ├── 20181001061156-thread-metadata-denormalization.js │ │ ├── 20181001064151-fix-thread-metadata-message-counts.js │ │ ├── 20181002060237-remove-payments.js │ │ ├── 20181003233411-thread-reactions-useridandthreadid-index.js │ │ ├── 20181004222636-denormalize-channel-community-member-counts.js │ │ ├── 20181005143053-users-notifications-useridandnotificationid-index.js │ │ ├── 20181005144259-users-notifications-userIdAndIsSeen-index.js │ │ ├── 20181023160027-update-denormalized-member-counts.js │ │ ├── 20181024173616-indexes-for-digests.js │ │ ├── 20181027050052-remove-attachments-from-thread-model.js │ │ ├── 20181102025454-fix-old-image-urls-in-messages.js │ │ ├── 20181102040518-fix-old-image-urls-in-threads.js │ │ ├── 20181102044407-fix-old-image-urls-in-communities.js │ │ ├── 20181102045821-fix-old-image-urls-in-users.js │ │ ├── 20181102054523-fix-aws-static-url-community-photos.js │ │ ├── 20181116173949-add-terms-last-accepted-field-to-users.js │ │ ├── 20181121054300-resync-community-member-counts.js │ │ ├── 20181122162921-users-communities-useridandmember-index.js │ │ ├── 20181126094455-users-channels-roles.js │ │ ├── 20181127090014-communities-member-count-index.js │ │ ├── 20181205171559-remove-old-users-notifications.js │ │ ├── 20181211181146-add-usersthreads-user-id-and-participant-index.js │ │ ├── 20190226085909-bot-user-sam.js │ │ ├── 20190306125252-threads-watercooler-index.js │ │ ├── 20190315142923-backfill-userscommunities-last-seen-community-last-active.js │ │ ├── 20190327134509-delete-bot-messages.js │ │ ├── config.js │ │ └── seed/ │ │ ├── default/ │ │ │ ├── channelSettings.js │ │ │ ├── channels.js │ │ │ ├── communities.js │ │ │ ├── communitySettings.js │ │ │ ├── constants.js │ │ │ ├── directMessageThreads.js │ │ │ ├── index.js │ │ │ ├── messages.js │ │ │ ├── notifications.js │ │ │ ├── reactions.js │ │ │ ├── threads.js │ │ │ ├── users.js │ │ │ ├── usersChannels.js │ │ │ ├── usersCommunities.js │ │ │ ├── usersDirectMessageThreads.js │ │ │ ├── usersNotifications.js │ │ │ ├── usersSettings.js │ │ │ └── usersThreads.js │ │ ├── generate.js │ │ └── index.js │ ├── models/ │ │ ├── channel.js │ │ ├── channelSettings.js │ │ ├── community.js │ │ ├── communitySettings.js │ │ ├── curatedContent.js │ │ ├── directMessageThread.js │ │ ├── message.js │ │ ├── reaction.js │ │ ├── search.js │ │ ├── session.js │ │ ├── test/ │ │ │ ├── __snapshots__/ │ │ │ │ └── channel.test.js.snap │ │ │ └── channel.test.js │ │ ├── thread.js │ │ ├── threadReaction.js │ │ ├── usersChannels.js │ │ ├── usersCommunities.js │ │ ├── usersDirectMessageThreads.js │ │ ├── usersSettings.js │ │ ├── usersThreads.js │ │ └── utils.js │ ├── mutations/ │ │ ├── channel/ │ │ │ ├── deleteChannel.js │ │ │ ├── editChannel.js │ │ │ └── index.js │ │ ├── community/ │ │ │ ├── deleteCommunity.js │ │ │ ├── editCommunity.js │ │ │ ├── index.js │ │ │ ├── toggleCommunityNoindex.js │ │ │ └── toggleCommunityRedirect.js │ │ ├── files/ │ │ │ ├── index.js │ │ │ └── uploadImage.js │ │ ├── message/ │ │ │ ├── deleteMessage.js │ │ │ └── index.js │ │ ├── thread/ │ │ │ ├── deleteThread.js │ │ │ └── index.js │ │ └── user/ │ │ ├── banUser.js │ │ ├── deleteCurrentUser.js │ │ ├── editUser.js │ │ └── index.js │ ├── package.json │ ├── queries/ │ │ ├── channel/ │ │ │ ├── channelPermissions.js │ │ │ ├── community.js │ │ │ ├── communityPermissions.js │ │ │ ├── index.js │ │ │ ├── isArchived.js │ │ │ ├── joinSettings.js │ │ │ ├── memberConnection.js │ │ │ ├── memberCount.js │ │ │ ├── metaData.js │ │ │ ├── moderators.js │ │ │ ├── owners.js │ │ │ ├── rootChannel.js │ │ │ └── threadConnection.js │ │ ├── community/ │ │ │ ├── brandedLogin.js │ │ │ ├── channelConnection.js │ │ │ ├── communityPermissions.js │ │ │ ├── contextPermissions.js │ │ │ ├── coverPhoto.js │ │ │ ├── index.js │ │ │ ├── joinSettings.js │ │ │ ├── memberConnection.js │ │ │ ├── members.js │ │ │ ├── metaData.js │ │ │ ├── pinnedThread.js │ │ │ ├── profilePhoto.js │ │ │ ├── rootCommunities.js │ │ │ ├── rootCommunity.js │ │ │ ├── rootRecentCommunities.js │ │ │ ├── rootTopCommunities.js │ │ │ ├── slackSettings.js │ │ │ ├── threadConnection.js │ │ │ └── watercooler.js │ │ ├── communityMember/ │ │ │ ├── index.js │ │ │ ├── roles.js │ │ │ ├── rootCommunityMember.js │ │ │ └── user.js │ │ ├── directMessageThread/ │ │ │ ├── index.js │ │ │ ├── messageConnection.js │ │ │ ├── participants.js │ │ │ ├── rootDirectMessageThread.js │ │ │ ├── rootDirectMessageThreadByUserIds.js │ │ │ └── snippet.js │ │ ├── message/ │ │ │ ├── author.js │ │ │ ├── content.js │ │ │ ├── index.js │ │ │ ├── parent.js │ │ │ ├── reactions.js │ │ │ ├── rootGetMediaMessagesForThread.js │ │ │ ├── rootMessage.js │ │ │ ├── sender.js │ │ │ └── thread.js │ │ ├── reaction/ │ │ │ ├── index.js │ │ │ ├── message.js │ │ │ ├── reaction.js │ │ │ └── user.js │ │ ├── thread/ │ │ │ ├── attachments.js │ │ │ ├── author.js │ │ │ ├── channel.js │ │ │ ├── community.js │ │ │ ├── content.js │ │ │ ├── creator.js │ │ │ ├── editedBy.js │ │ │ ├── index.js │ │ │ ├── isAuthor.js │ │ │ ├── isCreator.js │ │ │ ├── messageConnection.js │ │ │ ├── metaImage.js │ │ │ ├── participants.js │ │ │ ├── reactions.js │ │ │ └── rootThread.js │ │ └── user/ │ │ ├── channelConnection.js │ │ ├── communityConnection.js │ │ ├── contextPermissions.js │ │ ├── coverPhoto.js │ │ ├── directMessageThreadsConnection.js │ │ ├── email.js │ │ ├── everything.js │ │ ├── githubProfile.js │ │ ├── index.js │ │ ├── isAdmin.js │ │ ├── profilePhoto.js │ │ ├── rootCurrentUser.js │ │ ├── rootUser.js │ │ ├── settings.js │ │ ├── threadConnection.js │ │ └── threadCount.js │ ├── routes/ │ │ ├── api/ │ │ │ ├── export-user-data.js │ │ │ └── index.js │ │ ├── auth/ │ │ │ ├── create-signin-routes.js │ │ │ ├── facebook.js │ │ │ ├── github.js │ │ │ ├── google.js │ │ │ ├── index.js │ │ │ ├── logout.js │ │ │ └── twitter.js │ │ ├── create-subscription-server.js │ │ └── middlewares/ │ │ └── index.js │ ├── schema.js │ ├── subscriptions/ │ │ ├── community.js │ │ ├── directMessageThread.js │ │ ├── message.js │ │ ├── notification.js │ │ └── thread.js │ ├── test/ │ │ ├── __snapshots__/ │ │ │ ├── community.test.js.snap │ │ │ ├── directMessageThread.test.js.snap │ │ │ └── user.test.js.snap │ │ ├── channel/ │ │ │ ├── mutations/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ ├── createChannel.test.js.snap │ │ │ │ │ ├── deleteChannel.test.js.snap │ │ │ │ │ └── editChannel.test.js.snap │ │ │ │ ├── createChannel.test.js │ │ │ │ ├── deleteChannel.test.js │ │ │ │ └── editChannel.test.js │ │ │ └── queries/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── channelSettings.test.js.snap │ │ │ │ ├── memberConnection.test.js.snap │ │ │ │ └── root.test.js.snap │ │ │ ├── channelSettings.test.js │ │ │ ├── memberConnection.test.js │ │ │ └── root.test.js │ │ ├── community/ │ │ │ ├── mutations/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── editCommunity.test.js.snap │ │ │ │ └── editCommunity.test.js │ │ │ └── queries/ │ │ │ ├── __snapshots__/ │ │ │ │ └── communitySettings.test.js.snap │ │ │ └── communitySettings.test.js │ │ ├── community.test.js │ │ ├── directMessageThread.test.js │ │ ├── message/ │ │ │ ├── __snapshots__/ │ │ │ │ └── queries.test.js.snap │ │ │ ├── mutations/ │ │ │ │ └── addMessage.test.js │ │ │ └── queries.test.js │ │ ├── thread/ │ │ │ ├── mutations/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ ├── deleteThread.test.js.snap │ │ │ │ │ └── publishThread.test.js.snap │ │ │ │ ├── deleteThread.test.js │ │ │ │ └── publishThread.test.js │ │ │ └── queries/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── messageConnection.test.js.snap │ │ │ │ └── root.test.js.snap │ │ │ ├── messageConnection.test.js │ │ │ ├── reversePagination.test.js │ │ │ └── root.test.js │ │ ├── user.test.js │ │ ├── utils/ │ │ │ ├── __mocks__/ │ │ │ │ └── debug.js │ │ │ ├── __snapshots__/ │ │ │ │ └── create-graphql-error-formatter.test.js.snap │ │ │ └── create-graphql-error-formatter.test.js │ │ └── utils.js │ ├── types/ │ │ ├── Channel.js │ │ ├── Community.js │ │ ├── CommunityMember.js │ │ ├── DirectMessageThread.js │ │ ├── Invoice.js │ │ ├── Message.js │ │ ├── Reaction.js │ │ ├── Thread.js │ │ ├── ThreadParticipant.js │ │ ├── User.js │ │ ├── custom-scalars/ │ │ │ └── LowercaseString.js │ │ ├── general.js │ │ └── scalars.js │ └── utils/ │ ├── UserError.js │ ├── base64.js │ ├── create-graphql-error-formatter.js │ ├── file-storage.js │ ├── file-system.js │ ├── generate-thread-meta-image-from-text.js │ ├── get-page-meta.js │ ├── get-random-default-photo.js │ ├── is-spectrum-url.js │ ├── markdown-linkify.js │ ├── paginate-arrays.js │ ├── permissions.js │ ├── s3.js │ ├── session-store.js │ └── validate-draft-js-input.js ├── backpack.config.js ├── config-overrides.js ├── cypress/ │ ├── fixtures/ │ │ └── example.json │ ├── integration/ │ │ ├── channel/ │ │ │ ├── settings/ │ │ │ │ ├── delete_spec.js │ │ │ │ └── edit_spec.js │ │ │ └── view/ │ │ │ ├── membership_spec.js │ │ │ ├── profile_spec.js │ │ │ └── threads_spec.js │ │ ├── community/ │ │ │ └── view/ │ │ │ └── profile_spec.js │ │ ├── community_settings_members_spec.js │ │ ├── community_settings_overview_spec.js │ │ ├── explore_spec.js │ │ ├── login_spec.js │ │ ├── messages_spec.js │ │ ├── modal_routes_spec.js │ │ ├── thread/ │ │ │ ├── action_bar_spec.js │ │ │ └── view_spec.js │ │ ├── thread_spec.js │ │ ├── toasts_spec.js │ │ ├── user/ │ │ │ ├── delete_user_spec.js │ │ │ ├── edit_user_spec.js │ │ │ └── me_redirect_spec.js │ │ └── user_spec.js │ ├── plugins/ │ │ └── index.js │ └── support/ │ ├── commands.js │ └── index.js ├── cypress.json ├── docker/ │ ├── Dockerfile.api │ └── Dockerfile.hyperion ├── docs/ │ ├── admin/ │ │ └── intro.md │ ├── api/ │ │ ├── graphql/ │ │ │ ├── fragments.md │ │ │ ├── intro.md │ │ │ ├── pagination.md │ │ │ ├── testing.md │ │ │ └── tips-and-tricks.md │ │ └── intro.md │ ├── backend/ │ │ └── api/ │ │ ├── README.md │ │ ├── fragments.md │ │ ├── pagination.md │ │ ├── testing.md │ │ └── tips-and-tricks.md │ ├── deployments.md │ ├── hyperion (server side rendering)/ │ │ ├── development.md │ │ └── intro.md │ ├── operations/ │ │ ├── hourly-backups.md │ │ ├── importing-rethinkdb-backups.md │ │ └── intro.md │ ├── readme.md │ └── testing/ │ ├── integration.md │ ├── intro.md │ └── unit.md ├── flow-typed/ │ ├── npm/ │ │ ├── @sendgrid/ │ │ │ └── mail_vx.x.x.js │ │ ├── @tippy.js/ │ │ │ └── react_vx.x.x.js │ │ ├── @vx/ │ │ │ ├── curve_vx.x.x.js │ │ │ ├── event_vx.x.x.js │ │ │ ├── gradient_vx.x.x.js │ │ │ ├── grid_vx.x.x.js │ │ │ ├── scale_vx.x.x.js │ │ │ ├── shape_vx.x.x.js │ │ │ └── tooltip_vx.x.x.js │ │ ├── amplitude_vx.x.x.js │ │ ├── apollo-cache-inmemory_vx.x.x.js │ │ ├── apollo-client_vx.x.x.js │ │ ├── apollo-engine_vx.x.x.js │ │ ├── apollo-link-http_vx.x.x.js │ │ ├── apollo-link-retry_vx.x.x.js │ │ ├── apollo-link-schema_vx.x.x.js │ │ ├── apollo-link-ws_vx.x.x.js │ │ ├── apollo-link_vx.x.x.js │ │ ├── apollo-local-query_vx.x.x.js │ │ ├── apollo-server-cache-redis_vx.x.x.js │ │ ├── apollo-server-express_vx.x.x.js │ │ ├── apollo-server-plugin-response-cache_vx.x.x.js │ │ ├── apollo-upload-client_vx.x.x.js │ │ ├── apollo-upload-server_vx.x.x.js │ │ ├── apollo-utilities_vx.x.x.js │ │ ├── aws-sdk_vx.x.x.js │ │ ├── axios_v0.17.x.js │ │ ├── axios_vx.x.x.js │ │ ├── b2a_vx.x.x.js │ │ ├── babel-cli_vx.x.x.js │ │ ├── babel-eslint_vx.x.x.js │ │ ├── babel-plugin-import-inspector_vx.x.x.js │ │ ├── babel-plugin-styled-components_vx.x.x.js │ │ ├── babel-plugin-syntax-async-generators_vx.x.x.js │ │ ├── babel-plugin-syntax-dynamic-import_vx.x.x.js │ │ ├── babel-plugin-transform-async-generator-functions_vx.x.x.js │ │ ├── babel-plugin-transform-class-properties_vx.x.x.js │ │ ├── babel-plugin-transform-flow-strip-types_vx.x.x.js │ │ ├── babel-plugin-transform-object-rest-spread_vx.x.x.js │ │ ├── babel-preset-env_vx.x.x.js │ │ ├── backpack-core_vx.x.x.js │ │ ├── bad-words_vx.x.x.js │ │ ├── bluebird_vx.x.x.js │ │ ├── body-parser_v1.x.x.js │ │ ├── casual_vx.x.x.js │ │ ├── cheerio_vx.x.x.js │ │ ├── common-tags_v1.4.x.js │ │ ├── compression_vx.x.x.js │ │ ├── cookie-parser_vx.x.x.js │ │ ├── cookie-session_vx.x.x.js │ │ ├── cors_vx.x.x.js │ │ ├── cross-env_vx.x.x.js │ │ ├── cryptr_vx.x.x.js │ │ ├── css.escape_vx.x.x.js │ │ ├── d3-array_vx.x.x.js │ │ ├── danger-plugin-flow_vx.x.x.js │ │ ├── danger-plugin-jest_vx.x.x.js │ │ ├── danger-plugin-labels_vx.x.x.js │ │ ├── danger-plugin-no-console_vx.x.x.js │ │ ├── danger-plugin-no-test-shortcuts_vx.x.x.js │ │ ├── danger-plugin-yarn_vx.x.x.js │ │ ├── danger_vx.x.x.js │ │ ├── datadog-metrics_vx.x.x.js │ │ ├── dataloader_vx.x.x.js │ │ ├── debounce_vx.x.x.js │ │ ├── debug_v2.x.x.js │ │ ├── decode-uri-component_vx.x.x.js │ │ ├── draft-js-code-editor-plugin_vx.x.x.js │ │ ├── draft-js-drag-n-drop-plugin_vx.x.x.js │ │ ├── draft-js-embed-plugin_vx.x.x.js │ │ ├── draft-js-export-markdown_vx.x.x.js │ │ ├── draft-js-focus-plugin_vx.x.x.js │ │ ├── draft-js-image-plugin_vx.x.x.js │ │ ├── draft-js-import-markdown_vx.x.x.js │ │ ├── draft-js-linkify-plugin_vx.x.x.js │ │ ├── draft-js-markdown-plugin_vx.x.x.js │ │ ├── draft-js-plugins-editor_vx.x.x.js │ │ ├── draft-js-prism-plugin_vx.x.x.js │ │ ├── draft-js_vx.x.x.js │ │ ├── draftjs-to-markdown_vx.x.x.js │ │ ├── electron-context-menu_vx.x.x.js │ │ ├── electron-is-dev_vx.x.x.js │ │ ├── electron-updater_vx.x.x.js │ │ ├── electron-window-state_vx.x.x.js │ │ ├── electron_vx.x.x.js │ │ ├── emoji-regex_vx.x.x.js │ │ ├── eslint-plugin-flowtype_vx.x.x.js │ │ ├── eslint-plugin-jest_vx.x.x.js │ │ ├── eslint-plugin-promise_vx.x.x.js │ │ ├── eslint-plugin-react_vx.x.x.js │ │ ├── eslint_vx.x.x.js │ │ ├── expo-server-sdk_vx.x.x.js │ │ ├── expo_vx.x.x.js │ │ ├── express-enforces-ssl_vx.x.x.js │ │ ├── express-hot-shots_vx.x.x.js │ │ ├── express-session_vx.x.x.js │ │ ├── express_v4.x.x.js │ │ ├── faker_vx.x.x.js │ │ ├── find-with-regex_vx.x.x.js │ │ ├── flow-bin_v0.x.x.js │ │ ├── flow-typed_vx.x.x.js │ │ ├── graphql-cost-analysis_vx.x.x.js │ │ ├── graphql-date_vx.x.x.js │ │ ├── graphql-depth-limit_vx.x.x.js │ │ ├── graphql-log_vx.x.x.js │ │ ├── graphql-redis-subscriptions_vx.x.x.js │ │ ├── graphql-server-express_vx.x.x.js │ │ ├── graphql-subscriptions_vx.x.x.js │ │ ├── graphql-tag_vx.x.x.js │ │ ├── graphql-tools_vx.x.x.js │ │ ├── graphql_vx.x.x.js │ │ ├── helmet_vx.x.x.js │ │ ├── highlight.js_vx.x.x.js │ │ ├── history_vx.x.x.js │ │ ├── hoist-non-react-statics_vx.x.x.js │ │ ├── host-validation_vx.x.x.js │ │ ├── hot-shots_vx.x.x.js │ │ ├── hpp_vx.x.x.js │ │ ├── hsts_vx.x.x.js │ │ ├── http-proxy-middleware_vx.x.x.js │ │ ├── idx_v2.x.x.js │ │ ├── imgix-core-js_vx.x.x.js │ │ ├── immutability-helper_vx.x.x.js │ │ ├── ioredis_vx.x.x.js │ │ ├── is-html_vx.x.x.js │ │ ├── isomorphic-fetch_v2.x.x.js │ │ ├── iterall_vx.x.x.js │ │ ├── jest_v22.x.x.js │ │ ├── json-stringify-pretty-compact_vx.x.x.js │ │ ├── jsonwebtoken_vx.x.x.js │ │ ├── keygrip_vx.x.x.js │ │ ├── linkify-it_vx.x.x.js │ │ ├── lint-staged_vx.x.x.js │ │ ├── localstorage-memory_vx.x.x.js │ │ ├── lodash.intersection_vx.x.x.js │ │ ├── lodash_v4.x.x.js │ │ ├── longjohn_vx.x.x.js │ │ ├── markdown-draft-js_vx.x.x.js │ │ ├── micromatch_vx.x.x.js │ │ ├── moment_v2.3.x.js │ │ ├── ms_vx.x.x.js │ │ ├── newrelic_vx.x.x.js │ │ ├── node-env-file_vx.x.x.js │ │ ├── node-fetch_vx.x.x.js │ │ ├── node-localstorage_vx.x.x.js │ │ ├── nodemon_vx.x.x.js │ │ ├── now-env_vx.x.x.js │ │ ├── offline-plugin_vx.x.x.js │ │ ├── optics-agent_vx.x.x.js │ │ ├── passport-facebook_vx.x.x.js │ │ ├── passport-github2_vx.x.x.js │ │ ├── passport-google-oauth2_vx.x.x.js │ │ ├── passport-twitter_vx.x.x.js │ │ ├── passport_vx.x.x.js │ │ ├── postmark_vx.x.x.js │ │ ├── pre-commit_vx.x.x.js │ │ ├── prettier_vx.x.x.js │ │ ├── prism-react-renderer_vx.x.x.js │ │ ├── prismjs_vx.x.x.js │ │ ├── puppeteer_vx.x.x.js │ │ ├── query-string_vx.x.x.js │ │ ├── raf_vx.x.x.js │ │ ├── raven-js_v3.17.x.js │ │ ├── raven-js_vx.x.x.js │ │ ├── raven_vx.x.x.js │ │ ├── raw-loader_vx.x.x.js │ │ ├── react-apollo_vx.x.x.js │ │ ├── react-app-rewire-styled-components_vx.x.x.js │ │ ├── react-app-rewired_vx.x.x.js │ │ ├── react-async-hook_vx.x.x.js │ │ ├── react-clipboard.js_vx.x.x.js │ │ ├── react-dropzone_vx.x.x.js │ │ ├── react-error-boundary_vx.x.x.js │ │ ├── react-flip-move_v2.9.x.js │ │ ├── react-helmet-async_vx.x.x.js │ │ ├── react-helmet_vx.x.x.js │ │ ├── react-hot-loader_vx.x.x.js │ │ ├── react-image_vx.x.x.js │ │ ├── react-infinite-scroller-fork-mxstbr_vx.x.x.js │ │ ├── react-infinite-scroller-with-scroll-element_vx.x.x.js │ │ ├── react-loadable_vx.x.x.js │ │ ├── react-mentions_vx.x.x.js │ │ ├── react-modal_vx.x.x.js │ │ ├── react-popper_vx.x.x.js │ │ ├── react-redux_v5.x.x.js │ │ ├── react-remarkable_vx.x.x.js │ │ ├── react-router-dom_vx.x.x.js │ │ ├── react-router_v4.x.x.js │ │ ├── react-router_vx.x.x.js │ │ ├── react-scripts_vx.x.x.js │ │ ├── react-stripe-checkout_vx.x.x.js │ │ ├── react-stripe-elements_vx.x.x.js │ │ ├── react-textarea-autosize_vx.x.x.js │ │ ├── react-transition-group_vx.x.x.js │ │ ├── react-trend_vx.x.x.js │ │ ├── react-visibility-sensor_vx.x.x.js │ │ ├── react_v16.8.0.js │ │ ├── recharts_vx.x.x.js │ │ ├── recompose_v0.x.x.js │ │ ├── recompose_vx.x.x.js │ │ ├── redis-tag-cache_vx.x.x.js │ │ ├── redraft_vx.x.x.js │ │ ├── redux-thunk_vx.x.x.js │ │ ├── redux_v3.x.x.js │ │ ├── request-ip_vx.x.x.js │ │ ├── rethinkdb-changefeed-reconnect_vx.x.x.js │ │ ├── rethinkdb-inspector_vx.x.x.js │ │ ├── rethinkdb-migrate_vx.x.x.js │ │ ├── rethinkdbdash_vx.x.x.js │ │ ├── rethinkhaberdashery_vx.x.x.js │ │ ├── rimraf_v2.x.x.js │ │ ├── rimraf_vx.x.x.js │ │ ├── sanitize-filename_vx.x.x.js │ │ ├── sentry-expo_vx.x.x.js │ │ ├── serialize-javascript_vx.x.x.js │ │ ├── session-rethinkdb_vx.x.x.js │ │ ├── sha1_vx.x.x.js │ │ ├── shortid_vx.x.x.js │ │ ├── slate-markdown_vx.x.x.js │ │ ├── slate_vx.x.x.js │ │ ├── slugg_vx.x.x.js │ │ ├── snarkdown_vx.x.x.js │ │ ├── stopword_vx.x.x.js │ │ ├── string-replace-to-array_vx.x.x.js │ │ ├── string-similarity_vx.x.x.js │ │ ├── stripe_vx.x.x.js │ │ ├── striptags_vx.x.x.js │ │ ├── styled-components_v2.x.x.js │ │ ├── styled-components_vx.x.x.js │ │ ├── subscriptions-transport-ws_vx.x.x.js │ │ ├── sw-precache-webpack-plugin_vx.x.x.js │ │ ├── then-queue_vx.x.x.js │ │ ├── toobusy-js_vx.x.x.js │ │ ├── uuid_v3.x.x.js │ │ ├── validator_vx.x.x.js │ │ ├── web-push_vx.x.x.js │ │ ├── webpack-bundle-analyzer_vx.x.x.js │ │ ├── webpack-module-manifest-plugin_vx.x.x.js │ │ └── write-file-webpack-plugin_vx.x.x.js │ └── react-native.js ├── hyperion/ │ ├── index.js │ └── renderer/ │ ├── browser-shim.js │ ├── html-template.js │ └── index.js ├── jest.config.js ├── now-secrets.example.json ├── now.json ├── package.json ├── public/ │ ├── index.html │ ├── install-raven.js │ ├── manifest.json │ ├── push-sw.js │ ├── robots.txt │ └── service-worker.js ├── robots.txt ├── rules-alpha.json ├── rules.json ├── scripts/ │ ├── deploy.js │ ├── generate-table-diagram.js │ ├── heroku-deploy.js │ ├── introspection-query.js │ └── utils/ │ ├── error.js │ └── parse-argv.js ├── set-heroku-config ├── shared/ │ ├── clients/ │ │ ├── draft-js/ │ │ │ ├── links-decorator/ │ │ │ │ ├── core.js │ │ │ │ └── index.js │ │ │ ├── mentions-decorator/ │ │ │ │ ├── core.js │ │ │ │ ├── index.js │ │ │ │ └── test/ │ │ │ │ ├── core.test.js │ │ │ │ └── mentions-decorator.test.js │ │ │ ├── message/ │ │ │ │ ├── renderer.js │ │ │ │ ├── test/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ └── renderer.test.js.snap │ │ │ │ │ └── renderer.test.js │ │ │ │ └── types.js │ │ │ ├── renderer/ │ │ │ │ └── index.js │ │ │ ├── thread/ │ │ │ │ └── renderer.js │ │ │ └── utils/ │ │ │ ├── getSnippet.js │ │ │ ├── getStringElements.js │ │ │ ├── hasStringElements.js │ │ │ ├── isShort.js │ │ │ └── plaintext.js │ │ ├── group-messages.js │ │ └── test/ │ │ ├── __snapshots__/ │ │ │ └── messages.test.js.snap │ │ └── messages.test.js │ ├── cookie-utils.js │ ├── db/ │ │ ├── constants.js │ │ ├── create-query.js │ │ ├── db.js │ │ ├── index.js │ │ ├── queries/ │ │ │ ├── channel.js │ │ │ ├── community.js │ │ │ ├── message.js │ │ │ ├── thread.js │ │ │ └── user.js │ │ └── query-cache.js │ ├── draft-utils/ │ │ ├── add-embeds-to-draft-js.js │ │ ├── index.js │ │ ├── message-types.js │ │ ├── process-message-content.js │ │ ├── process-thread-content.js │ │ └── test/ │ │ ├── __snapshots__/ │ │ │ └── add-embeds-to-draft-js.test.js.snap │ │ └── add-embeds-to-draft-js.test.js │ ├── encryption/ │ │ └── index.js │ ├── generate-meta-info.js │ ├── get-mentions.js │ ├── graphql/ │ │ ├── apollo-client-options.js │ │ ├── constants.js │ │ ├── fragments/ │ │ │ ├── channel/ │ │ │ │ ├── channelInfo.js │ │ │ │ ├── channelMemberConnection.js │ │ │ │ ├── channelMetaData.js │ │ │ │ └── channelThreadConnection.js │ │ │ ├── community/ │ │ │ │ ├── communityChannelConnection.js │ │ │ │ ├── communityInfo.js │ │ │ │ ├── communityMembers.js │ │ │ │ ├── communityMetaData.js │ │ │ │ ├── communitySettings.js │ │ │ │ └── communityThreadConnection.js │ │ │ ├── communityMember/ │ │ │ │ └── communityMemberInfo.js │ │ │ ├── directMessageThread/ │ │ │ │ ├── directMessageThreadInfo.js │ │ │ │ └── directMessageThreadMessageConnection.js │ │ │ ├── message/ │ │ │ │ ├── directMessageInfo.js │ │ │ │ └── messageInfo.js │ │ │ ├── notification/ │ │ │ │ └── notificationInfo.js │ │ │ ├── thread/ │ │ │ │ ├── threadInfo.js │ │ │ │ ├── threadMessageConnection.js │ │ │ │ └── threadParticipant.js │ │ │ └── user/ │ │ │ ├── userChannelConnection.js │ │ │ ├── userCommunityConnection.js │ │ │ ├── userDirectMessageThreadConnection.js │ │ │ ├── userEverythingConnection.js │ │ │ ├── userInfo.js │ │ │ ├── userSettings.js │ │ │ └── userThreadConnection.js │ │ ├── index.js │ │ ├── mutations/ │ │ │ ├── channel/ │ │ │ │ ├── deleteChannel.js │ │ │ │ └── editChannel.js │ │ │ ├── community/ │ │ │ │ ├── deleteCommunity.js │ │ │ │ ├── editCommunity.js │ │ │ │ ├── toggleCommunityNoindex.js │ │ │ │ └── toggleCommunityRedirect.js │ │ │ ├── message/ │ │ │ │ └── deleteMessage.js │ │ │ ├── thread/ │ │ │ │ └── deleteThread.js │ │ │ ├── uploadImage.js │ │ │ └── user/ │ │ │ ├── banUser.js │ │ │ ├── deleteCurrentUser.js │ │ │ └── editUser.js │ │ ├── queries/ │ │ │ ├── channel/ │ │ │ │ ├── getChannel.js │ │ │ │ ├── getChannelMemberConnection.js │ │ │ │ ├── getChannelSettings.js │ │ │ │ └── getChannelThreadConnection.js │ │ │ ├── community/ │ │ │ │ ├── getCommunities.js │ │ │ │ ├── getCommunity.js │ │ │ │ ├── getCommunityChannelConnection.js │ │ │ │ ├── getCommunityMembers.js │ │ │ │ ├── getCommunitySettings.js │ │ │ │ └── getCommunityThreadConnection.js │ │ │ ├── communityMember/ │ │ │ │ └── getCommunityMember.js │ │ │ ├── composer/ │ │ │ │ └── getComposerCommunitiesAndChannels.js │ │ │ ├── directMessageThread/ │ │ │ │ ├── getCurrentUserDMThreadConnection.js │ │ │ │ ├── getDirectMessageThread.js │ │ │ │ ├── getDirectMessageThreadByUserIds.js │ │ │ │ └── getDirectMessageThreadMessageConnection.js │ │ │ ├── message/ │ │ │ │ ├── getMediaMessagesForThread.js │ │ │ │ └── getMessage.js │ │ │ ├── thread/ │ │ │ │ ├── getThread.js │ │ │ │ └── getThreadMessageConnection.js │ │ │ └── user/ │ │ │ ├── getCurrentUserEverythingFeed.js │ │ │ ├── getCurrentUserSettings.js │ │ │ ├── getUser.js │ │ │ ├── getUserCommunityConnection.js │ │ │ ├── getUserGithubProfile.js │ │ │ └── getUserThreadConnection.js │ │ ├── schema.json │ │ └── subscriptions/ │ │ ├── index.js │ │ └── utils.js │ ├── graphql-cache-keys.js │ ├── imgix/ │ │ ├── getDefaultExpires.js │ │ ├── index.js │ │ ├── sign.js │ │ ├── signCommunity.js │ │ ├── signMessage.js │ │ ├── signThread.js │ │ └── signUser.js │ ├── install-dependencies.js │ ├── middlewares/ │ │ ├── cors.js │ │ ├── csrf.js │ │ ├── error-handler.js │ │ ├── logging.js │ │ ├── raven.js │ │ ├── security.js │ │ ├── session.js │ │ ├── statsd.js │ │ ├── thread-param.js │ │ └── toobusy.js │ ├── normalize-url.js │ ├── only-contains-emoji.js │ ├── raven/ │ │ └── index.js │ ├── regexps.js │ ├── sentencify.js │ ├── slate-utils.js │ ├── slug-deny-lists.js │ ├── sort-by-date.js │ ├── statsd.js │ ├── test/ │ │ ├── encryption.test.js │ │ ├── fixtures/ │ │ │ ├── CHANNEL_CREATED.json │ │ │ ├── COMMUNITY_INVITE.json │ │ │ ├── DIRECT_MESSAGE_CREATED.json │ │ │ ├── MEDIA_MESSAGE_CREATED.json │ │ │ ├── MENTION_MESSAGE.json │ │ │ ├── MENTION_THREAD.json │ │ │ ├── MESSAGE_CREATED.json │ │ │ ├── REACTION_CREATED.json │ │ │ ├── THREAD_CREATED.json │ │ │ ├── THREAD_REACTION_CREATED.json │ │ │ └── USER_JOINED_COMMUNITY.json │ │ ├── get-mentions.test.js │ │ └── normalize-url.test.js │ ├── testing/ │ │ ├── data.js │ │ ├── db.js │ │ ├── empty-db.js │ │ ├── setup-test-framework.js │ │ ├── setup.js │ │ └── teardown.js │ ├── theme/ │ │ └── index.js │ ├── time-difference.js │ ├── time-formatting.js │ ├── truncate.js │ ├── truthy-values.js │ ├── types.js │ └── unique-elements.js ├── spectrum-tmuxp.yaml └── src/ ├── actions/ │ ├── authentication.js │ ├── directMessageThreads.js │ ├── gallery.js │ ├── modals.js │ ├── threadSlider.js │ ├── titlebar.js │ └── toasts.js ├── api/ │ └── constants.js ├── components/ │ ├── announcementBanner/ │ │ ├── index.js │ │ └── style.js │ ├── appViewWrapper/ │ │ ├── index.js │ │ └── style.js │ ├── avatar/ │ │ ├── communityAvatar.js │ │ ├── image.js │ │ ├── index.js │ │ ├── style.js │ │ └── userAvatar.js │ ├── badges/ │ │ ├── index.js │ │ └── style.js │ ├── button/ │ │ ├── index.js │ │ └── style.js │ ├── card/ │ │ └── index.js │ ├── column/ │ │ └── index.js │ ├── communitySidebar/ │ │ └── index.js │ ├── conditionalWrap/ │ │ └── index.js │ ├── editForm/ │ │ └── style.js │ ├── entities/ │ │ ├── index.js │ │ ├── listItems/ │ │ │ ├── channel.js │ │ │ ├── community.js │ │ │ ├── index.js │ │ │ ├── style.js │ │ │ └── user.js │ │ └── profileCards/ │ │ ├── channel.js │ │ ├── community.js │ │ ├── components/ │ │ │ ├── channelActions.js │ │ │ ├── channelCommunityMeta.js │ │ │ ├── channelMeta.js │ │ │ ├── communityActions.js │ │ │ ├── communityMeta.js │ │ │ ├── userActions.js │ │ │ └── userMeta.js │ │ ├── index.js │ │ ├── style.js │ │ └── user.js │ ├── error/ │ │ ├── BlueScreen.js │ │ ├── ErrorBoundary.js │ │ ├── SettingsFallback.js │ │ └── index.js │ ├── flyout/ │ │ └── index.js │ ├── formElements/ │ │ ├── index.js │ │ └── style.js │ ├── fullscreenView/ │ │ ├── index.js │ │ └── style.js │ ├── gallery/ │ │ ├── browser.js │ │ ├── index.js │ │ └── style.js │ ├── githubProfile/ │ │ └── index.js │ ├── globals/ │ │ └── index.js │ ├── goop/ │ │ └── index.js │ ├── head/ │ │ └── index.js │ ├── hoverProfile/ │ │ ├── channelProfile.js │ │ ├── communityProfile.js │ │ ├── index.js │ │ ├── loadingHoverProfile.js │ │ ├── style.js │ │ ├── userContainer.js │ │ └── userProfile.js │ ├── icon/ │ │ └── index.js │ ├── illustrations/ │ │ └── index.js │ ├── inboxThread/ │ │ ├── activity.js │ │ ├── header/ │ │ │ ├── index.js │ │ │ ├── style.js │ │ │ ├── threadHeader.js │ │ │ ├── timestamp.js │ │ │ └── userProfileThreadHeader.js │ │ ├── index.js │ │ ├── messageCount.js │ │ └── style.js │ ├── infiniteScroll/ │ │ ├── deduplicateChildren.js │ │ ├── index.js │ │ └── tallViewports.js │ ├── layout/ │ │ └── index.js │ ├── listItems/ │ │ ├── channel/ │ │ │ ├── index.js │ │ │ └── style.js │ │ ├── index.js │ │ └── style.js │ ├── loading/ │ │ ├── index.js │ │ └── style.js │ ├── loginButtonSet/ │ │ ├── facebook.js │ │ ├── github.js │ │ ├── google.js │ │ ├── index.js │ │ ├── style.js │ │ └── twitter.js │ ├── logo/ │ │ └── index.js │ ├── maintenance/ │ │ └── index.js │ ├── menu/ │ │ ├── index.js │ │ └── style.js │ ├── message/ │ │ ├── authorByline.js │ │ ├── index.js │ │ ├── messageErrorFallback.js │ │ ├── style.js │ │ ├── threadAttachment/ │ │ │ ├── attachment.js │ │ │ ├── index.js │ │ │ └── style.js │ │ └── view.js │ ├── messageGroup/ │ │ ├── directMessage.js │ │ ├── index.js │ │ ├── style.js │ │ └── thread.js │ ├── modals/ │ │ ├── BanUserModal/ │ │ │ ├── index.js │ │ │ └── style.js │ │ ├── DeleteDoubleCheckModal/ │ │ │ ├── index.js │ │ │ └── style.js │ │ ├── modalContainer.js │ │ ├── modalRoot.js │ │ └── styles.js │ ├── nextPageButton/ │ │ ├── index.js │ │ └── style.js │ ├── outsideClickHandler/ │ │ └── index.js │ ├── profile/ │ │ ├── coverPhoto.js │ │ ├── index.js │ │ ├── metaData.js │ │ ├── style.js │ │ └── thread.js │ ├── reaction/ │ │ ├── index.js │ │ └── style.js │ ├── redirectHandler/ │ │ └── index.js │ ├── rich-text-editor/ │ │ ├── prism-theme.css │ │ └── style.js │ ├── scrollManager/ │ │ └── index.js │ ├── scrollRow/ │ │ ├── index.js │ │ └── style.js │ ├── segmentedControl/ │ │ ├── index.js │ │ └── style.js │ ├── select/ │ │ ├── index.js │ │ └── style.js │ ├── settingsViews/ │ │ ├── header.js │ │ ├── style.js │ │ └── subnav.js │ ├── themedSection/ │ │ └── index.js │ ├── threadFeed/ │ │ ├── index.js │ │ ├── nullState.js │ │ └── style.js │ ├── threadFeedCard/ │ │ └── style.js │ ├── threadRenderer/ │ │ └── index.js │ ├── titlebar/ │ │ ├── actions.js │ │ ├── base.js │ │ ├── index.js │ │ └── style.js │ ├── toasts/ │ │ ├── index.js │ │ └── style.js │ ├── tooltip/ │ │ └── index.js │ ├── upsell/ │ │ ├── index.js │ │ └── style.js │ ├── usernameSearch/ │ │ ├── index.js │ │ └── style.js │ ├── viewError/ │ │ ├── index.js │ │ └── style.js │ ├── viewNetworkHandler/ │ │ └── index.js │ ├── visuallyHidden/ │ │ └── index.js │ └── withCurrentUser/ │ └── index.js ├── helpers/ │ ├── directMessageThreads.js │ ├── get-thread-link.js │ ├── history.js │ ├── images.js │ ├── is-admin.js │ ├── is-viewing-marketing-page.js │ ├── keycodes.js │ ├── localStorage.js │ ├── navigation-context.js │ ├── notifications.js │ ├── realtimeThreads.js │ ├── regexps.js │ ├── render-text-with-markdown-links.js │ ├── sentry-redux-middleware.js │ ├── signed-out-fallback.js │ ├── utils.js │ └── web-push-manager.js ├── hooks/ │ ├── useAppScroller.js │ ├── useConnectionRestored.js │ ├── useDebounce.js │ └── usePrevious.js ├── hot-routes.js ├── index.js ├── reducers/ │ ├── connectionStatus.js │ ├── gallery.js │ ├── index.js │ ├── modals.js │ ├── threadSlider.js │ ├── titlebar.js │ └── toasts.js ├── registerServiceWorker.js ├── reset.css.js ├── routes.js ├── store/ │ └── index.js └── views/ ├── authViewHandler/ │ └── index.js ├── channel/ │ ├── components/ │ │ ├── MembersList.js │ │ └── PostsFeed.js │ ├── index.js │ └── style.js ├── channelSettings/ │ ├── components/ │ │ ├── channelMembers.js │ │ ├── editForm.js │ │ └── overview.js │ ├── index.js │ └── style.js ├── community/ │ ├── components/ │ │ ├── channelsList.js │ │ ├── communityFeeds.js │ │ ├── membersList.js │ │ ├── mobileCommunityInfoActions.js │ │ ├── postsFeeds.js │ │ └── teamMembersList.js │ ├── containers/ │ │ ├── privateCommunity.js │ │ └── signedIn.js │ ├── index.js │ └── style.js ├── communityLogin/ │ ├── index.js │ └── style.js ├── communityMembers/ │ ├── components/ │ │ ├── communityMembers.js │ │ ├── getMembers.js │ │ └── mutationWrapper.js │ ├── index.js │ └── style.js ├── communitySettings/ │ ├── components/ │ │ ├── channelList.js │ │ ├── editForm.js │ │ ├── overview.js │ │ └── redirect.js │ ├── index.js │ └── style.js ├── directMessages/ │ ├── components/ │ │ ├── avatars.js │ │ ├── header.js │ │ ├── loading.js │ │ ├── messageThreadListItem.js │ │ ├── messages.js │ │ ├── style.js │ │ └── threadsList.js │ ├── containers/ │ │ ├── existingThread.js │ │ └── index.js │ ├── index.js │ └── style.js ├── explore/ │ ├── collections.js │ ├── index.js │ ├── style.js │ └── view.js ├── globalTitlebar/ │ └── index.js ├── homeViewRedirect/ │ └── index.js ├── login/ │ ├── index.js │ └── style.js ├── navigation/ │ ├── accessibility.js │ ├── communityList.js │ ├── directMessagesTab.js │ ├── index.js │ ├── navHead.js │ └── style.js ├── newUserOnboarding/ │ ├── components/ │ │ └── setUsername/ │ │ ├── index.js │ │ └── style.js │ ├── index.js │ └── style.js ├── pages/ │ ├── components/ │ │ ├── communities.js │ │ ├── footer.js │ │ ├── logos.js │ │ └── nav.js │ ├── index.js │ ├── privacy/ │ │ └── index.js │ ├── style.js │ └── terms/ │ ├── index.js │ └── style.js ├── queryParamToastDispatcher/ │ └── index.js ├── status/ │ ├── index.js │ └── style.js ├── thread/ │ ├── components/ │ │ ├── actionBar.js │ │ ├── actionsDropdown.js │ │ ├── lockedMessages.js │ │ ├── messagesSubscriber.js │ │ ├── nullMessages.js │ │ ├── stickyHeader.js │ │ ├── threadByline.js │ │ ├── threadDetail.js │ │ └── threadHead.js │ ├── container/ │ │ └── index.js │ ├── index.js │ ├── redirect-old-route.js │ └── style.js ├── threadSlider/ │ ├── index.js │ └── style.js ├── user/ │ ├── components/ │ │ └── communityList.js │ ├── index.js │ └── style.js ├── userSettings/ │ ├── components/ │ │ ├── deleteAccountForm.js │ │ ├── downloadDataForm.js │ │ ├── editForm.js │ │ ├── logout.js │ │ └── overview.js │ ├── index.js │ └── style.js └── viewHelpers/ ├── errorView.js ├── fullScreenRedirect.js ├── index.js ├── loadingView.js ├── style.js └── textValidationHelper.js