├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── prototypes ├── babelInBrowser │ ├── babel.config.json │ ├── bundle.js │ ├── index.html │ ├── index.js │ ├── package-lock.json │ ├── package.json │ └── rollup.config.js ├── computeReferences │ ├── src │ │ ├── computeReferences.ts │ │ └── index.ts │ └── test │ │ └── test.ts ├── gist-fetching │ ├── .prettierignore │ ├── package-lock.json │ ├── package.json │ ├── public │ │ └── favicon.ico │ └── src │ │ ├── build.js │ │ └── server.js ├── idealExport │ ├── .prettierignore │ ├── README.md │ ├── babel.config.json │ ├── index.html │ ├── loader.js │ ├── package-lock.json │ ├── package.json │ └── rollup.config.js ├── open-core-first-attempt │ ├── .gitignore │ ├── .prettierignore │ ├── LICENSE │ ├── README.md │ ├── package.json │ └── packages │ │ ├── vizhub-ce │ │ ├── package.json │ │ ├── public │ │ │ ├── favicon.ico │ │ │ ├── images │ │ │ │ └── touch │ │ │ │ │ └── logoBlackSquare.png │ │ │ └── manifest.json │ │ └── src │ │ │ ├── build.js │ │ │ ├── client.js │ │ │ ├── server.js │ │ │ ├── styles.scss │ │ │ └── test.js │ │ ├── vizhub-core │ │ ├── VizHubError.js │ │ ├── build.js │ │ ├── client.js │ │ ├── coreTests.js │ │ ├── index.js │ │ ├── package.json │ │ ├── server.js │ │ ├── src │ │ │ ├── client │ │ │ │ └── index.js │ │ │ ├── coreTests.js │ │ │ ├── entities │ │ │ │ ├── User.js │ │ │ │ ├── VizContent.js │ │ │ │ ├── VizContentTest.js │ │ │ │ ├── VizInfo.js │ │ │ │ ├── VizInfoTest.js │ │ │ │ ├── createInstance.js │ │ │ │ └── index.js │ │ │ ├── isomorphic │ │ │ │ ├── App.js │ │ │ │ ├── URLStateContext.js │ │ │ │ ├── classed.js │ │ │ │ ├── getPages.js │ │ │ │ ├── index.js │ │ │ │ ├── indexHTML.js │ │ │ │ ├── isClient.js │ │ │ │ ├── jsDelivrCombine.js │ │ │ │ ├── stringifyPageData.js │ │ │ │ └── stringifyPageDataTest.js │ │ │ ├── plugins │ │ │ │ └── homePagePlugin │ │ │ │ │ ├── Body.js │ │ │ │ │ ├── HomePage.js │ │ │ │ │ ├── client.js │ │ │ │ │ └── server.js │ │ │ ├── server │ │ │ │ ├── gateways.js │ │ │ │ ├── getShareDBSnapshot.js │ │ │ │ ├── identifyAgent.js │ │ │ │ └── index.js │ │ │ ├── styles │ │ │ │ ├── base.scss │ │ │ │ ├── index.scss │ │ │ │ ├── link.scss │ │ │ │ └── variables.scss │ │ │ └── svg │ │ │ │ ├── ArrowSVG.js │ │ │ │ ├── CloseSVG.js │ │ │ │ ├── DirectoryArrowSVG.js │ │ │ │ ├── ExportSVG.js │ │ │ │ ├── ForkSVG.js │ │ │ │ ├── FullExitSVG.js │ │ │ │ ├── FullSVG.js │ │ │ │ ├── LockOpenSVG.js │ │ │ │ ├── LockSVG.js │ │ │ │ ├── LogoSVG.js │ │ │ │ ├── MicroSVG.js │ │ │ │ ├── MiniSVG.js │ │ │ │ ├── NewSVG.js │ │ │ │ ├── PeopleSVG.js │ │ │ │ ├── PlanExcludedSVG.js │ │ │ │ ├── PlanIncludedSVG.js │ │ │ │ ├── PlayPauseSVG.js │ │ │ │ ├── PrettierSVG.js │ │ │ │ ├── PullSVG.js │ │ │ │ ├── RadioButtonSVG.js │ │ │ │ ├── SearchSVG.js │ │ │ │ ├── SettingsSVG.js │ │ │ │ ├── ShareSVG.js │ │ │ │ ├── SharedWithMeSVG.js │ │ │ │ ├── SpinnerSVG.js │ │ │ │ ├── SplitSVG.js │ │ │ │ ├── TrashSVG.js │ │ │ │ ├── VimSVG.js │ │ │ │ ├── VoteSVG.js │ │ │ │ ├── index.js │ │ │ │ └── svgGallery.js │ │ └── worker.js │ │ ├── vizhub-plugin-access-control │ │ ├── package.json │ │ ├── server.js │ │ └── src │ │ │ ├── accessControlServerPlugin.js │ │ │ ├── getVizInfoForRequest.js │ │ │ ├── vizRead.js │ │ │ └── vizWrite.js │ │ └── vizhub-plugin-viz-page │ │ ├── build.js │ │ ├── client.js │ │ ├── package.json │ │ ├── server.js │ │ └── src │ │ ├── Editor │ │ ├── EditorSidebar.js │ │ ├── EditorToggleButton.js │ │ ├── ToggleButton.js │ │ ├── index.js │ │ └── styles.scss │ │ ├── SecondaryModulesContextDraft.js │ │ ├── VizPage │ │ ├── Body.js │ │ ├── Head.js │ │ ├── Navigation.js │ │ ├── Readme │ │ │ ├── index.js │ │ │ ├── markdown-body.scss │ │ │ ├── markdownRenderingWorker.js │ │ │ ├── renderREADME.js │ │ │ └── useReadmeHTML.js │ │ ├── VizContext.js │ │ └── index.js │ │ ├── styles.scss │ │ ├── vizPageBuildPlugin.js │ │ ├── vizPageClientPlugin.js │ │ └── vizPageServerPlugin.js ├── vizhub-v2-false-start │ ├── .gitignore │ ├── README.md │ ├── deploy.sh │ ├── lerna.json │ ├── package.json │ └── packages │ │ ├── backend │ │ ├── .gitignore │ │ ├── package.json │ │ └── src │ │ │ ├── index.js │ │ │ ├── initializeSampleStudioData.js │ │ │ ├── serveFrontend.js │ │ │ ├── serveShareDB.js │ │ │ ├── serveStudioData.js │ │ │ └── snapshot.js │ │ ├── common │ │ ├── entities.dia │ │ ├── package.json │ │ ├── src │ │ │ ├── VizHubError.js │ │ │ ├── computeDiffOps.js │ │ │ ├── fork.js │ │ │ ├── index.js │ │ │ └── sampleStudioData │ │ │ │ ├── index.js │ │ │ │ ├── sampleCode.js │ │ │ │ ├── userData.js │ │ │ │ └── vizData.js │ │ └── test │ │ │ ├── computeDiffOps.js │ │ │ └── fork.js │ │ ├── forks-graph │ │ ├── .gitignore │ │ ├── README.md │ │ ├── index.html │ │ ├── index.js │ │ ├── metadata.json │ │ ├── package.json │ │ ├── rollup.config.js │ │ └── styles.css │ │ └── frontend │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── public │ │ ├── favicon.ico │ │ ├── fonts │ │ │ ├── DejaVuSansMonoArrowized.woff │ │ │ ├── DejaVuSansMonoLigaturized.woff │ │ │ ├── FiraCode.woff │ │ │ ├── FiraCodeArrowized.woff │ │ │ ├── Inconsolata-gArrowized.woff │ │ │ ├── Inconsolata-gLigaturized.woff │ │ │ ├── README.md │ │ │ ├── SourceCodeProArrowized.woff │ │ │ ├── SourceCodeProLigaturized.woff │ │ │ ├── UbuntuMonoArrowized.woff │ │ │ └── UbuntuMonoLigaturized.woff │ │ ├── index.html │ │ └── manifest.json │ │ ├── src │ │ ├── App.js │ │ ├── App.test.js │ │ ├── Home.js │ │ ├── LoadingScreen │ │ │ ├── index.js │ │ │ └── styles.js │ │ ├── Studio │ │ │ ├── Configurator │ │ │ │ ├── Foldable │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── Menu.js │ │ │ │ ├── RadioMenu.js │ │ │ │ ├── Section.js │ │ │ │ ├── index.js │ │ │ │ ├── sections │ │ │ │ │ ├── FilesSection │ │ │ │ │ │ ├── FileTree.js │ │ │ │ │ │ ├── getFileTree.js │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── PreferencesSection.js │ │ │ │ │ ├── SettingsSection.js │ │ │ │ │ ├── StateSection.js │ │ │ │ │ └── index.js │ │ │ │ ├── styles.js │ │ │ │ └── usePreloadFont.js │ │ │ ├── Editor │ │ │ │ ├── CodeMirror.js │ │ │ │ ├── EditorViewPool.js │ │ │ │ ├── PresenceDisplay │ │ │ │ │ ├── getFileId.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── css.js │ │ │ │ ├── extension.js │ │ │ │ ├── extension.test.js │ │ │ │ ├── index.js │ │ │ │ ├── presence.js │ │ │ │ ├── styles.js │ │ │ │ ├── useCodeMirror.js │ │ │ │ ├── useEditorView.js │ │ │ │ ├── useEditorView.test.js │ │ │ │ ├── useEditorViewPool.js │ │ │ │ ├── useEditorViewPool.test.js │ │ │ │ └── useMode.js │ │ │ ├── ErrorPage.js │ │ │ ├── StudioBody.js │ │ │ ├── Viewer │ │ │ │ ├── Actions │ │ │ │ │ ├── Action.js │ │ │ │ │ ├── Download.js │ │ │ │ │ ├── Edit.js │ │ │ │ │ ├── Fork.js │ │ │ │ │ ├── FullScreen.js │ │ │ │ │ ├── Share.js │ │ │ │ │ ├── UpvoteDownvote.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── Comments │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── ForkedFrom │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── Header │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── OwnerInfo │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── Runner │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── avatarUrl.js │ │ │ │ ├── formatViewCount.js │ │ │ │ ├── index.js │ │ │ │ └── styles.js │ │ │ ├── index.js │ │ │ ├── styles.js │ │ │ └── useEditorTheme.js │ │ ├── contexts │ │ │ ├── error │ │ │ │ └── index.js │ │ │ ├── index.js │ │ │ ├── preferences │ │ │ │ ├── index.js │ │ │ │ ├── options.js │ │ │ │ ├── preferencesMemoryGateway.js │ │ │ │ └── usePreference.js │ │ │ ├── studioData │ │ │ │ ├── actions.js │ │ │ │ ├── fetchStudioData.js │ │ │ │ ├── index.js │ │ │ │ ├── reducer.js │ │ │ │ ├── useStudioData.js │ │ │ │ └── wait.js │ │ │ ├── urlState │ │ │ │ ├── accessors.js │ │ │ │ ├── index.js │ │ │ │ └── withURLState.js │ │ │ └── viz │ │ │ │ ├── Viz.js │ │ │ │ ├── getConnection.js │ │ │ │ ├── index.js │ │ │ │ ├── useVizShareDB.js │ │ │ │ └── useVizStub.js │ │ ├── environment.js │ │ ├── index.js │ │ ├── styles.js │ │ ├── svg │ │ │ ├── ArrowBackSVG.js │ │ │ ├── CheckBoxSVG.js │ │ │ ├── CloseSVG.js │ │ │ ├── DownloadSVG.js │ │ │ ├── DownvoteSVG.js │ │ │ ├── EditSVG.js │ │ │ ├── FoldableArrowsSVG.js │ │ │ ├── ForkSVG.js │ │ │ ├── FullScreenSVG.js │ │ │ ├── LogoSVG.js │ │ │ ├── LogoSquareSVG.js │ │ │ ├── RadioButtonSVG.js │ │ │ ├── SVG.js │ │ │ ├── ShareSVG.js │ │ │ ├── UpvoteSVG.js │ │ │ └── index.js │ │ ├── testUtils │ │ │ └── codemirrorGlobalShim.js │ │ └── themes │ │ │ ├── dracula.js │ │ │ ├── index.js │ │ │ ├── light.js │ │ │ ├── material.js │ │ │ ├── monokai.js │ │ │ ├── oneDark.js │ │ │ └── ubuntu.js │ │ └── transferred.csv └── vizhub-v3-false-start │ ├── .gitignore │ ├── .prettierignore │ ├── README.md │ ├── buildCSS.js │ ├── deploy.sh │ ├── ecosystem.config.js │ ├── package.json │ ├── public │ ├── favicon.ico │ ├── images │ │ └── touch │ │ │ └── logoBlackSquare.png │ └── manifest.json │ ├── rollup.config.js │ └── src │ ├── App │ ├── Navigation.js │ ├── VizPreview.js │ ├── classed.js │ ├── index.js │ ├── isClient.js │ └── pages │ │ ├── HomePage.js │ │ ├── SanityCheckPage.js │ │ ├── TestPage.js │ │ ├── VizNotFoundPage.js │ │ ├── VizPage.js │ │ └── index.js │ ├── client │ ├── RequireContext.js │ ├── client2.js │ ├── index.js │ ├── serviceWorker.js │ └── useModule.js │ ├── entities │ ├── User.js │ ├── VizInfo.js │ ├── createInstance.js │ └── vizInfoTest.js │ ├── globals.js │ ├── interactors │ ├── getHomePageData.js │ ├── getHomePageDataTest.js │ └── getVizPageData.js │ ├── pageData.js │ ├── pageDataTest.js │ ├── presenters │ ├── homePagePresenter.js │ ├── homePagePresenterTest.js │ ├── vizPagePresenter.js │ └── vizPagePresenterTest.js │ ├── server │ ├── database │ │ ├── databaseTest.js │ │ ├── generateId.js │ │ ├── index.js │ │ └── mongoMethods.js │ ├── index.js │ └── renderPage │ │ ├── index.js │ │ ├── indexHTML.js │ │ ├── renderPageTest.js │ │ └── renderPageTestExpected.html │ ├── styles │ ├── base.scss │ ├── home-page.scss │ ├── index.scss │ ├── link.scss │ ├── markdown-body.scss │ ├── navigation.scss │ ├── variables.scss │ ├── viz-page.scss │ └── viz-preview.scss │ ├── svg │ └── LogoSVG.js │ └── test.js ├── vizhub-v2 ├── .eslintignore ├── .gitignore ├── LICENSE ├── README.md ├── buildFrontend.sh ├── deploy.sh ├── deployFirstTime.sh ├── docs │ ├── blog.css │ ├── forum.css │ └── nginx.conf.sample ├── ecosystem.config.js ├── lerna.json ├── logo │ ├── favicon.ico │ ├── logo-XL.png │ ├── logo.svg │ ├── logoBlackSmall.png │ ├── logoBlackSquare.png │ ├── logoSquare.svg │ ├── logoSquare_large.png │ ├── logoWhiteSmall.png │ ├── logoWhiteSquare.png │ ├── mugDesign.png │ └── square Main Files-03.svg ├── package-lock.json ├── package.json └── packages │ ├── .gitignore │ ├── controllers │ ├── .eslintrc.js │ ├── package-lock.json │ ├── package.json │ └── src │ │ ├── Error │ │ ├── ErrorResponse.js │ │ ├── index.js │ │ ├── toErrorResponse.js │ │ └── toVizHubAPIError.js │ │ ├── apiController │ │ ├── datasetAPIController │ │ │ ├── createDatasetController.js │ │ │ ├── getDatasetController.js │ │ │ └── index.js │ │ ├── eventRecordsAPIController │ │ │ ├── getEventRecords.js │ │ │ ├── index.js │ │ │ └── sendEvent.js │ │ ├── index.js │ │ ├── paymentsAPIController │ │ │ ├── README.md │ │ │ └── index.js │ │ ├── userAPIController │ │ │ ├── getProfileDataController.js │ │ │ ├── getUserSearchResultsData.js │ │ │ ├── getUsers.js │ │ │ └── index.js │ │ └── visualizationAPIController │ │ │ ├── createVisualizationController.js │ │ │ ├── deleteVisualizationController.js │ │ │ ├── exportVisualizationController.js │ │ │ ├── forkVisualizationController.js │ │ │ ├── getAllVisualizationInfosController.js │ │ │ ├── getForksController.js │ │ │ ├── getHomePageDataController.js │ │ │ ├── getPreviewController.js │ │ │ ├── getPrivateVisualizationsController.js │ │ │ ├── getPublicVisualizationsController.js │ │ │ ├── getSearchResultsPageData.js │ │ │ ├── getSharedVisualizationsController.js │ │ │ ├── getTemplatesDataController.js │ │ │ ├── getThumbnailController.js │ │ │ ├── getVisualizationController.js │ │ │ ├── index.js │ │ │ └── saveVisualizationController.js │ │ ├── index.js │ │ ├── jwtAuth │ │ ├── getAccessToken.js │ │ ├── getFBAccessToken.js │ │ ├── getFBUser.js │ │ ├── getGitHubUser.js │ │ ├── getGoogleUser.js │ │ ├── getUserAvatar.js │ │ ├── index.js │ │ ├── jwt.js │ │ └── routes │ │ │ ├── authCI.js │ │ │ ├── authFB.js │ │ │ ├── authGitHub.js │ │ │ ├── authGoogle.js │ │ │ ├── authMe.js │ │ │ ├── authSignOut.js │ │ │ ├── createAuthController.js │ │ │ └── index.js │ │ ├── oembedController.js │ │ ├── plainText.js │ │ ├── sanitize.js │ │ ├── serveHomePage.js │ │ ├── servePage.js │ │ ├── serveVizPage.js │ │ ├── userController.js │ │ └── userIdFromReq.js │ ├── database │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── collectionName.js │ │ ├── constants.js │ │ ├── createUser.js │ │ ├── createVisualization.js │ │ ├── deleteVisualization.js │ │ ├── eventRecords.js │ │ ├── fetchShareDBDoc.js │ │ ├── fetchShareDBQuery.js │ │ ├── forksCount.js │ │ ├── getAllVisualizationInfos.js │ │ ├── getDataset.js │ │ ├── getDatasetInfosByUserId.js │ │ ├── getForks.js │ │ ├── getHomePageVisualizationInfos.js │ │ ├── getPreview.js │ │ ├── getThumbnail.js │ │ ├── getUser.js │ │ ├── getUserByEmail.js │ │ ├── getUserByEmailOrId.js │ │ ├── getUserByUserName.js │ │ ├── getUsers.js │ │ ├── getVisualization.js │ │ ├── getVisualizationInfo.js │ │ ├── getVisualizationInfos.js │ │ ├── getVisualizationInfosByUserId.js │ │ ├── index.js │ │ ├── save.js │ │ ├── saveUser.js │ │ ├── saveVisualization.js │ │ ├── searchUsers.js │ │ ├── searchVisualizationInfos.js │ │ ├── setImagesUpdatedTimestamp.js │ │ ├── updateImages.js │ │ └── updateScores.js │ └── test │ │ └── test.js │ ├── entities │ ├── .eslintrc.js │ ├── .gitignore │ ├── classDiagram.dia │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── VizHubAPIError.js │ │ ├── ciUser.js │ │ ├── commit.js │ │ ├── dataset.js │ │ ├── datasetContent.js │ │ ├── datasetInfo.js │ │ ├── documentContent.js │ │ ├── documentInfo.js │ │ ├── documentPart.js │ │ ├── documentTypes.js │ │ ├── edge.js │ │ ├── file.js │ │ ├── index.js │ │ ├── testData.js │ │ ├── timestamp.js │ │ ├── user.js │ │ ├── visualization.js │ │ ├── visualizationContent.js │ │ └── visualizationInfo.js │ └── test │ │ ├── revisionHistory.js │ │ └── test.js │ ├── gateways │ ├── .eslintrc.js │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── databaseDatasetGateway.js │ │ ├── databaseEventRecordsGateway.js │ │ ├── databaseImageStorageGateway.js │ │ ├── databaseUserGateway.js │ │ ├── databaseVisualizationGateway.js │ │ └── index.js │ └── test │ │ └── test.js │ ├── i18n │ ├── index.js │ └── package.json │ ├── imageGenerationService │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── computeImageDimensions.js │ │ ├── dimensions.js │ │ ├── generateImages.js │ │ ├── generateScreenshot.js │ │ ├── index.js │ │ ├── resize.js │ │ └── service.js │ └── test │ │ ├── expectedImages.js │ │ └── test.js │ ├── json0-with-presence │ ├── index.js │ ├── package-lock.json │ └── package.json │ ├── neoBackend │ ├── .eslintrc.js │ ├── .gitignore │ ├── README.md │ ├── package.json │ └── src │ │ ├── index.js │ │ ├── serveFrontend.js │ │ └── serveShareDB │ │ ├── index.js │ │ └── shareDBMiddleware │ │ ├── accessControl │ │ ├── getVizInfo.js │ │ ├── index.js │ │ ├── vizRead.js │ │ └── vizWrite.js │ │ ├── identifyAgent.js │ │ └── index.js │ ├── neoCI │ ├── .eslintrc.js │ ├── .gitignore │ ├── package-lock.json │ ├── package.json │ └── test │ │ ├── authentication │ │ ├── index.js │ │ ├── navigateToAuthPage.js │ │ ├── signIn.js │ │ └── signOut.js │ │ ├── editorStates │ │ ├── closeMobilePage.js │ │ ├── codeEditorIndependence.js │ │ ├── getPage.js │ │ ├── index.js │ │ ├── openMobilePage.js │ │ ├── restoreEditorSection.js │ │ ├── toggleCodeEditor.js │ │ ├── toggleEditor.js │ │ ├── toggleFullEditor.js │ │ ├── toggleFullScreen.js │ │ ├── toggleMini.js │ │ └── verifyHomeState.js │ │ ├── navClick.js │ │ ├── openPage.js │ │ ├── privacy │ │ ├── excludePrivateFromHomePage.js │ │ ├── excludePrivateFromPage.js │ │ ├── excludePrivateFromProfilePage.js │ │ ├── forkToPrivate.js │ │ ├── getVizIdList.js │ │ ├── goToHomeState.js │ │ ├── includePrivateOnProfilePage.js │ │ ├── index.js │ │ ├── setupPrivateViz.js │ │ ├── shareDBBlockReads.js │ │ ├── switchPrivacy.js │ │ ├── vizFound.js │ │ └── vizNotFound.js │ │ ├── realtime │ │ ├── index.js │ │ ├── saveAndRestoreChanges.js │ │ └── setupRealtimeViz.js │ │ ├── retry.js │ │ ├── test.js │ │ ├── toPort.js │ │ └── vizCreation │ │ ├── createVizFromScratch.js │ │ ├── fork.js │ │ ├── index.js │ │ └── navigateToCreateVizPage.js │ ├── neoFrontend │ ├── .eslintrc.json │ ├── .gitignore │ ├── package.json │ ├── public │ │ ├── favicon.ico │ │ ├── images │ │ │ ├── GitHub-Mark-120px-plus.png │ │ │ ├── mountains.png │ │ │ └── unfurl-logo.png │ │ ├── index.html │ │ ├── manifest.json │ │ └── terms.md │ ├── scripts │ │ └── server.js │ └── src │ │ ├── AlertDialogContext │ │ └── index.js │ │ ├── App.js │ │ ├── Author │ │ ├── index.js │ │ └── styles.js │ │ ├── Avatar │ │ ├── index.js │ │ └── styles.js │ │ ├── Button │ │ └── index.js │ │ ├── ConnectionContext │ │ ├── createWebSocket.js │ │ ├── index.js │ │ └── useConnection.js │ │ ├── ErrorContext │ │ └── index.js │ │ ├── ExitableWrapper.js │ │ ├── ForksLink │ │ ├── index.js │ │ └── styles.js │ │ ├── Input │ │ ├── Autocomplete.js │ │ ├── Input.js │ │ ├── PreviewList.js │ │ ├── index.js │ │ ├── styles.js │ │ └── usePreviewController.js │ │ ├── LoadingScreen │ │ ├── animationDelay.js │ │ ├── index.js │ │ ├── styles.js │ │ └── waitForSpinner.js │ │ ├── Modal │ │ ├── index.js │ │ └── styles.js │ │ ├── NavBar │ │ ├── NeoNavBar │ │ │ ├── DesktopLayout │ │ │ │ ├── index.js │ │ │ │ └── styles.js │ │ │ ├── MobileLayout │ │ │ │ ├── index.js │ │ │ │ └── styles.js │ │ │ ├── Search │ │ │ │ ├── index.js │ │ │ │ └── styles.js │ │ │ ├── UserActionsMenu │ │ │ │ ├── arrowDown.svg │ │ │ │ ├── index.js │ │ │ │ ├── styles.js │ │ │ │ └── useCloseOnGlobalClick.js │ │ │ ├── index.js │ │ │ └── styles.js │ │ └── index.js │ │ ├── PrivacyNotice │ │ ├── index.js │ │ └── styles.js │ │ ├── RealtimeModulesContext │ │ ├── index.js │ │ ├── realtimeModules.js │ │ └── useRealtimeModules.js │ │ ├── SavingIndicator │ │ ├── index.js │ │ └── styles.js │ │ ├── UserPreviewList │ │ ├── UserPreviewList.js │ │ ├── fetchUserSearchResults.js │ │ ├── index.js │ │ ├── styles.js │ │ ├── useUserPreviewController.js │ │ └── useUsers.js │ │ ├── VizPreview │ │ ├── LiveVizPreview.js │ │ ├── VizPreview.js │ │ ├── index.js │ │ └── styles.js │ │ ├── VizzesGrid │ │ ├── Vizzes │ │ │ ├── index.js │ │ │ └── styles.js │ │ ├── VizzesSortForm │ │ │ ├── VizzesSortForm.js │ │ │ ├── index.js │ │ │ ├── selectArrow.svg │ │ │ ├── styles.js │ │ │ └── useVizzesSort.js │ │ └── usePaginatedVizzes.js │ │ ├── Voter │ │ ├── index.js │ │ └── styles.js │ │ ├── WarningContext │ │ └── index.js │ │ ├── authentication │ │ ├── AuthContext │ │ │ ├── fetchMe.js │ │ │ └── index.js │ │ ├── constants.js │ │ ├── getJWT.js │ │ ├── getJWTForGoogle.js │ │ ├── index.js │ │ ├── postMessageToOpener.js │ │ ├── signInFlow │ │ │ ├── index.js │ │ │ ├── listenForMe.js │ │ │ └── openPopup.js │ │ └── signOutFlow │ │ │ ├── fetchSignOut.js │ │ │ └── index.js │ │ ├── constants.js │ │ ├── featureFlags.js │ │ ├── index.js │ │ ├── mobileMods.js │ │ ├── pages │ │ ├── AccountPage │ │ │ ├── index.js │ │ │ └── styles.js │ │ ├── AuthPage │ │ │ ├── index.js │ │ │ └── styles.js │ │ ├── AuthPopupPage │ │ │ ├── index.js │ │ │ ├── useOpener.js │ │ │ └── useTokenGetter.js │ │ ├── ContactPage │ │ │ └── index.js │ │ ├── CreateVizPage │ │ │ ├── CuratedVizzes.js │ │ │ ├── FromScratchSection.js │ │ │ ├── index.js │ │ │ ├── styles.js │ │ │ ├── useTemplates.js │ │ │ └── vizLists.js │ │ ├── CreatingVizFromScratchPage │ │ │ ├── createVizFromScratch.js │ │ │ ├── fetchCreateVizFromScratch.js │ │ │ └── index.js │ │ ├── Datavis2020Page │ │ │ ├── data.js │ │ │ ├── index.js │ │ │ └── styles.js │ │ ├── ErrorPage │ │ │ ├── index.js │ │ │ └── styles.js │ │ ├── ForksPage │ │ │ ├── fetchPageData.js │ │ │ ├── index.js │ │ │ ├── styles.js │ │ │ └── usePageData.js │ │ ├── HomePage │ │ │ ├── Banner │ │ │ │ ├── index.js │ │ │ │ └── styles.js │ │ │ ├── EventBanner │ │ │ │ └── index.js │ │ │ ├── HomePageDataContext.js │ │ │ ├── Sort │ │ │ │ ├── index.js │ │ │ │ └── styles.js │ │ │ ├── Vizzes.js │ │ │ ├── fetchHomePageData.js │ │ │ ├── index.js │ │ │ ├── styles.js │ │ │ └── useHomePageData.js │ │ ├── NotFoundPage │ │ │ ├── index.js │ │ │ └── styles.js │ │ ├── PricingPage │ │ │ ├── featuresAndPlans.js │ │ │ ├── index.js │ │ │ ├── stripe.js │ │ │ └── styles.js │ │ ├── ProfilePage │ │ │ ├── Body │ │ │ │ ├── createVizzFetcherHook.js │ │ │ │ ├── index.js │ │ │ │ ├── styles.js │ │ │ │ ├── usePrivateVizFetcher.js │ │ │ │ ├── useProfileVizzes.js │ │ │ │ ├── usePublicVizFetcher.js │ │ │ │ └── useSharedVizFetcher.js │ │ │ ├── LinkWithIcon │ │ │ │ ├── index.js │ │ │ │ └── styles.js │ │ │ ├── ProfilePageDataContext │ │ │ │ ├── fetchProfilePageData.js │ │ │ │ ├── index.js │ │ │ │ └── useProfilePageData.js │ │ │ ├── ProfilePane │ │ │ │ ├── index.js │ │ │ │ └── styles.js │ │ │ ├── index.js │ │ │ ├── profilepage.test.js │ │ │ └── styles.js │ │ ├── SearchResultsPage │ │ │ ├── PageDataContext.js │ │ │ ├── Vizzes.js │ │ │ ├── fetchPageData.js │ │ │ ├── index.js │ │ │ └── usePageData.js │ │ ├── TermsPage │ │ │ └── index.js │ │ ├── UpgradeCanceledPage │ │ │ └── index.js │ │ ├── UpgradeSuccessPage │ │ │ ├── index.js │ │ │ ├── styles.js │ │ │ └── useCheckoutSession.js │ │ ├── VizHubStatsPage │ │ │ ├── RecordViz │ │ │ │ ├── index.js │ │ │ │ └── styles.js │ │ │ ├── index.js │ │ │ └── styles.js │ │ ├── VizPage │ │ │ ├── Body │ │ │ │ ├── Editor │ │ │ │ │ ├── BottomButtons │ │ │ │ │ │ ├── DeleteTop.js │ │ │ │ │ │ ├── ExportTop.js │ │ │ │ │ │ ├── NewTop.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── styles.js │ │ │ │ │ ├── CodeEditor │ │ │ │ │ │ ├── CodeArea │ │ │ │ │ │ │ ├── CodeAreaCodeMirror5 │ │ │ │ │ │ │ │ ├── CodeMirrorCSS.js │ │ │ │ │ │ │ │ ├── CodeMirrorDialogCSS.js │ │ │ │ │ │ │ │ ├── CodeMirrorGlobalStyle.js │ │ │ │ │ │ │ │ ├── CodeMirrorHintCSS.js │ │ │ │ │ │ │ │ ├── CodeMirrorLintCSS.js │ │ │ │ │ │ │ │ ├── CodeMirrorReactBinding.js │ │ │ │ │ │ │ │ ├── PresenceWidget │ │ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ │ │ └── styles.js │ │ │ │ │ │ │ │ ├── changeObjToOp.js │ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ │ ├── overlays │ │ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ │ │ └── linkOverlay.js │ │ │ │ │ │ │ │ ├── styles.js │ │ │ │ │ │ │ │ └── useStateLocalStorage.js │ │ │ │ │ │ │ ├── CodeAreaPre │ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ │ └── styles.js │ │ │ │ │ │ │ ├── CodeAreaTextarea │ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ │ └── styles.js │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── CodeEditorHeader │ │ │ │ │ │ │ ├── Header.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── styles.js │ │ │ │ │ │ ├── CodeSnippet.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── styles.js │ │ │ │ │ │ ├── useFileIndex.js │ │ │ │ │ │ ├── usePath.js │ │ │ │ │ │ └── useUpdateURLOnRename.js │ │ │ │ │ ├── FilesSection │ │ │ │ │ │ ├── EditableFileEntry │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ └── styles.js │ │ │ │ │ │ ├── FileTree │ │ │ │ │ │ │ ├── Directory │ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ │ └── styles.js │ │ │ │ │ │ │ ├── File.js │ │ │ │ │ │ │ ├── addPath.js │ │ │ │ │ │ │ ├── getFileTree.js │ │ │ │ │ │ │ ├── getFileTree.test.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── sortFileTree.js │ │ │ │ │ │ │ └── styles.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── initialOpenDirectories.js │ │ │ │ │ │ ├── styles.js │ │ │ │ │ │ ├── useCreateNewFile.js │ │ │ │ │ │ ├── useOpenDirectories.js │ │ │ │ │ │ └── useRenameActiveFile.js │ │ │ │ │ ├── Section │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── styles.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── styles.js │ │ │ │ │ ├── themes │ │ │ │ │ │ ├── dracula.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── light.js │ │ │ │ │ │ ├── material.js │ │ │ │ │ │ ├── monokai.js │ │ │ │ │ │ ├── oneDark.js │ │ │ │ │ │ ├── ubuntu.js │ │ │ │ │ │ └── vizHub.js │ │ │ │ │ └── useEditorTheme.js │ │ │ │ ├── EditorModePresenter.js │ │ │ │ ├── EmbedModePresenter.js │ │ │ │ ├── FullScreen │ │ │ │ │ ├── EmbedFooter │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── styles.js │ │ │ │ │ ├── FullScreen.js │ │ │ │ │ ├── FullScreenFooter.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── FullScreenModePresenter.js │ │ │ │ ├── Head │ │ │ │ │ ├── EditorToggler │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── styles.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── MicroConsole │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── Mini │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── PlayPauseControl │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── RecoveryModeBanner │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── SnippetModePresenter.js │ │ │ │ ├── TrashIcon.js │ │ │ │ ├── Viewer │ │ │ │ │ ├── DescriptionSection │ │ │ │ │ │ ├── Forks.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── renderMarkdown.js │ │ │ │ │ │ ├── responsiveYouTube.js │ │ │ │ │ │ └── styles.js │ │ │ │ │ ├── GlobalScrollbarStyle.js │ │ │ │ │ ├── Resizer │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── styles.js │ │ │ │ │ ├── TitleBar │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── styles.js │ │ │ │ │ ├── VizFrame │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ └── styles.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── styles.js │ │ │ │ │ └── useLicenseToHtmlRenderer.js │ │ │ │ ├── index.js │ │ │ │ ├── styles.js │ │ │ │ ├── useDimensions │ │ │ │ │ ├── index.js │ │ │ │ │ └── useDimensionsDetector.js │ │ │ │ └── useListener.js │ │ │ ├── CheckBox │ │ │ │ └── index.js │ │ │ ├── DeleteVizContext │ │ │ │ ├── fetchDeleteViz.js │ │ │ │ ├── index.js │ │ │ │ └── useDeleteViz.js │ │ │ ├── EditorModulesContext │ │ │ │ ├── codemirrorAddons │ │ │ │ │ ├── highlightLinesDocExtentions.js │ │ │ │ │ └── lint │ │ │ │ │ │ ├── eslintrc.js │ │ │ │ │ │ └── jsxLint.js │ │ │ │ ├── editorModules.js │ │ │ │ ├── index.js │ │ │ │ └── useEditorModules.js │ │ │ ├── ForkingContext │ │ │ │ ├── fetchFork.js │ │ │ │ ├── index.js │ │ │ │ └── useForking.js │ │ │ ├── PrettierContext │ │ │ │ ├── index.js │ │ │ │ ├── prettierModules.js │ │ │ │ └── usePrettier.js │ │ │ ├── RadioButton │ │ │ │ ├── index.js │ │ │ │ └── styles.js │ │ │ ├── RunContext │ │ │ │ ├── createChangesChecker.js │ │ │ │ ├── generateRunId.js │ │ │ │ ├── index.js │ │ │ │ ├── onlyBundleJSChanged.js │ │ │ │ ├── updateBundleIfNeeded.js │ │ │ │ ├── updateDescriptionIfNeeded.js │ │ │ │ ├── updateLastUpdatedTimestamp.js │ │ │ │ ├── updateTitleIfNeeded.js │ │ │ │ ├── useRun.js │ │ │ │ └── useVizContentDoc.js │ │ │ ├── SettingsContext │ │ │ │ ├── SetHeight │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── index.js │ │ │ │ ├── styles.js │ │ │ │ └── useSettings.js │ │ │ ├── ShareContext │ │ │ │ ├── CollaboratorsBody │ │ │ │ │ ├── AnyoneCanEdit.js │ │ │ │ │ ├── Collaborator │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── styles.js │ │ │ │ │ │ └── useCache.js │ │ │ │ │ ├── CollaboratorList.js │ │ │ │ │ ├── fetchUser.js │ │ │ │ │ ├── fetchUsers.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── styles.js │ │ │ │ │ └── useCollaborators.js │ │ │ │ ├── EmbedBody │ │ │ │ │ └── index.js │ │ │ │ ├── LinkBody │ │ │ │ │ └── index.js │ │ │ │ ├── SnippetBody │ │ │ │ │ └── index.js │ │ │ │ ├── Tabs │ │ │ │ │ ├── index.js │ │ │ │ │ └── styles.js │ │ │ │ ├── TextCopier.js │ │ │ │ ├── index.js │ │ │ │ ├── styles.js │ │ │ │ └── useShare.js │ │ │ ├── SplitPaneResizeContext │ │ │ │ └── index.js │ │ │ ├── URLStateContext │ │ │ │ ├── index.js │ │ │ │ ├── modes.js │ │ │ │ ├── reducer.js │ │ │ │ ├── useURLState.js │ │ │ │ └── useURLStateReducer.js │ │ │ ├── VimModeContext │ │ │ │ ├── index.js │ │ │ │ └── useVimMode.js │ │ │ ├── VizContext │ │ │ │ └── index.js │ │ │ ├── VizPageDataContext │ │ │ │ ├── fetchVizPageData.js │ │ │ │ ├── index.js │ │ │ │ └── useVizPageData.js │ │ │ ├── VizRunnerContext │ │ │ │ ├── generateErrorMessageSrcDoc.js │ │ │ │ ├── generateRunErrorMessage.js │ │ │ │ ├── index.js │ │ │ │ └── setVizRunnerMode.js │ │ │ ├── index.js │ │ │ └── styles.js │ │ ├── fakeDataLoaded.js │ │ ├── index.js │ │ └── styles.js │ │ ├── sendEvent.js │ │ ├── styles.js │ │ ├── svg │ │ ├── ArrowSVG.js │ │ ├── CloseSVG.js │ │ ├── DirectoryArrowSVG.js │ │ ├── ExportSVG.js │ │ ├── ForkSVG.js │ │ ├── FullExitSVG.js │ │ ├── FullSVG.js │ │ ├── LockOpenSVG.js │ │ ├── LockSVG.js │ │ ├── LogoSVG.js │ │ ├── MicroSVG.js │ │ ├── MiniSVG.js │ │ ├── NewSVG.js │ │ ├── PeopleSVG.js │ │ ├── PlanExcludedSVG.js │ │ ├── PlanIncludedSVG.js │ │ ├── PlayPauseSVG.js │ │ ├── PrettierSVG.js │ │ ├── PullSVG.js │ │ ├── RadioButtonSVG.js │ │ ├── SearchSVG.js │ │ ├── SettingsSVG.js │ │ ├── ShareSVG.js │ │ ├── SharedWithMeSVG.js │ │ ├── SpinnerSVG.js │ │ ├── SplitSVG.js │ │ ├── TrashSVG.js │ │ ├── VimSVG.js │ │ ├── VoteSVG.js │ │ ├── index.js │ │ └── svgGallery.js │ │ ├── theme │ │ ├── defaultTheme.js │ │ ├── index.js │ │ ├── neoTheme.js │ │ └── text.js │ │ ├── useSearchQuery.js │ │ ├── useValue.js │ │ ├── utils │ │ ├── array.js │ │ ├── css │ │ │ └── index.js │ │ ├── number.js │ │ ├── object.js │ │ └── viz.js │ │ └── vizRealTimeHooks │ │ ├── index.js │ │ ├── useOpSourceTracker.js │ │ ├── useOpStream.js │ │ ├── usePending.js │ │ ├── usePresence.js │ │ ├── usePresenceStream.js │ │ ├── useShareDBDoc.js │ │ ├── useSubmitOp.js │ │ ├── useSubmitPresence.js │ │ ├── useViz.js │ │ └── useVizInfo.js │ ├── presenters │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── accessors.js │ │ ├── bubleJSXOnly.js │ │ ├── bundle.js │ │ ├── computeSrcDoc.js │ │ ├── datasetViewModel.js │ │ ├── featureFlags.js │ │ ├── getComputedIndexHtml.js │ │ ├── getLibraries.js │ │ ├── hypothetical.js │ │ ├── index.js │ │ ├── magicSandbox.js │ │ ├── packageJson.js │ │ ├── rollup.browser.js │ │ ├── svelte.js │ │ └── visualizationViewModel.js │ └── test │ │ └── test.js │ ├── scoringService │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── index.js │ │ └── service.js │ └── test │ │ └── test.js │ ├── serverGateways │ ├── .gitignore │ ├── package-lock.json │ ├── package.json │ └── src │ │ ├── constants.js │ │ ├── index.js │ │ ├── mongodb.js │ │ └── shareDB.js │ └── useCases │ ├── .eslintrc.js │ ├── createVisualization.md │ ├── docs │ ├── useCaseTemplate.md │ └── useCasesDiagram.dia │ ├── package-lock.json │ ├── package.json │ ├── saveVisualization.md │ ├── src │ ├── accessControl │ │ ├── allowRead.js │ │ ├── allowWrite.js │ │ ├── index.js │ │ ├── isCollaborator.js │ │ └── isOwner.js │ ├── index.js │ ├── interactors │ │ ├── createCommit.js │ │ ├── createDataset │ │ │ ├── datasetDefaults.js │ │ │ └── index.js │ │ ├── createEdge.js │ │ ├── createUser.js │ │ ├── createVisualization │ │ │ ├── index.js │ │ │ └── visualizationDefaults.js │ │ ├── deleteVisualization.js │ │ ├── exportVisualization │ │ │ ├── index.js │ │ │ └── zipFiles.js │ │ ├── forkVisualization.js │ │ ├── getAllVisualizationInfos.js │ │ ├── getDataset.js │ │ ├── getEventRecords.js │ │ ├── getForks.js │ │ ├── getForksPageData.js │ │ ├── getHomePageData.js │ │ ├── getOrCreateUser.js │ │ ├── getPreview.js │ │ ├── getSearchResultsPageData.js │ │ ├── getThumbnail.js │ │ ├── getUser.js │ │ ├── getUserByEmail.js │ │ ├── getUserByEmailOrId.js │ │ ├── getUserProfileData.js │ │ ├── getUserSearchResultsData.js │ │ ├── getUsers.js │ │ ├── getVisualization.js │ │ ├── getVisualizationInfo.js │ │ ├── getVisualizationInfos.js │ │ ├── getVisualizationsOwners.js │ │ ├── getVizAtCommit.js │ │ ├── index.js │ │ ├── saveVisualization.js │ │ ├── sendEvent.js │ │ ├── updateImages.js │ │ ├── updateScores.js │ │ ├── updateUser.js │ │ └── upgradeUser.js │ └── utils │ │ ├── generateId.js │ │ └── removeExtension.js │ └── test │ ├── eventRecords.js │ ├── revisionHistory.js │ └── test.js └── vizhub-v3 ├── Dockerfile ├── README.md ├── package-lock.json ├── package.json ├── vizhub-app ├── .dockerignore ├── .gitignore ├── .prettierignore ├── babel.config.json ├── deploy.sh ├── package.json ├── public │ └── favicon.ico ├── rollup.config.mjs ├── scss │ ├── _home-page.scss │ ├── _profile-page.scss │ ├── _spinner.scss │ ├── _variables.scss │ ├── _viz-page.scss │ ├── _viz-preview.scss │ ├── _vizhub-banner.scss │ └── vizhub-app.scss └── src │ ├── App.js │ ├── client.js │ ├── environment.js │ ├── featureFlags.js │ ├── jsDelivrCombine.js │ ├── presenters │ ├── HomePagePresenter │ │ ├── index.js │ │ └── useVizInfos.js │ ├── LogInWidgetPresenter.js │ ├── LoginPagePresenter │ │ └── index.js │ ├── VizPagePresenter │ │ ├── CodeEditor.js │ │ ├── index.js │ │ ├── useEditorModules.js │ │ └── useViz.js │ ├── index.js │ ├── logShareDBError.js │ └── useShareDBConnection.js │ ├── queries.js │ ├── server │ ├── authentication.js │ ├── html.js │ ├── index.js │ ├── pages.js │ └── vizBot.js │ └── ui │ ├── AuthenticatedUserDropdown.js │ ├── Bootstrap.js │ ├── DemoApp │ ├── MarkdownExample.js │ └── index.js │ ├── ForkModal.js │ ├── HomePage.js │ ├── Layout.js │ ├── Navigation.js │ ├── ProfilePage.js │ ├── README.md │ ├── ShareModal.js │ ├── Spinner.js │ ├── VizPage.js │ ├── VizPreview.js │ └── index.js ├── vizhub-build ├── .prettierignore ├── index.js └── package.json ├── vizhub-codemirror ├── .gitignore ├── .prettierignore ├── README.md ├── index.html ├── package.json ├── rollup.config.mjs └── src │ ├── index.js │ ├── server.js │ └── vizhubHighlightStyle.js ├── vizhub-entities ├── .prettierignore ├── package.json └── src │ ├── entities.ts │ └── index.ts ├── vizhub-interactors ├── .eslintignore ├── .eslintrc.cjs ├── .prettierignore ├── babel.config.json ├── constants.js ├── package.json ├── rollup.config.js ├── src │ ├── DatabaseGateways.ts │ ├── DatabaseGatewaysConstants.ts │ ├── DeleteViz.ts │ ├── FindOrCreateUser.ts │ ├── ForkViz.ts │ ├── Gateways.ts │ ├── GetVizSnapshot.ts │ ├── MemoryGateways.ts │ ├── SaveViz.ts │ ├── errorCodes.ts │ ├── errors.ts │ ├── generateRandomId.js │ ├── index.ts │ └── ot.ts └── test │ ├── DeleteVizTest.ts │ ├── FindOrCreateUserTest.ts │ ├── ForkVizTest.ts │ ├── GatewaysTest.ts │ ├── fixtures.ts │ ├── initGateways.ts │ └── test.ts ├── vizhub-runtime ├── .prettierignore ├── README.md ├── package-lock.json ├── package.json ├── rollup.config.mjs ├── src │ ├── Runner.js │ ├── build.js │ ├── cdn.js │ ├── constants.js │ ├── generateSrcdoc.js │ ├── getGlobals.js │ ├── index.js │ └── virtual.js └── test │ ├── expectedValues │ ├── index.js │ ├── modules.js │ ├── singleFileUMD.js │ ├── srcdocCodeAndConfig.js │ ├── srcdocCodeAndDependencies.js │ └── srcdocCodeOnly.js │ ├── index.js │ └── updateExpectedSrcdocValue.js └── vizhub-ui ├── .gitignore ├── .prettierignore ├── README.md ├── babel.config.json ├── deployment.md ├── icons ├── Arrow.svg ├── README.md ├── chevron.svg ├── close.svg ├── download.svg ├── exit-fullscreen.svg ├── fork.svg ├── fullscreen.svg ├── gear.svg ├── mini-mode.svg ├── new.svg ├── pause.svg ├── play.svg ├── side-by-side-mode.svg ├── trash.svg ├── upload.svg └── upvote.svg ├── index.html ├── package.json └── scss ├── _buttons.scss ├── _forms.scss ├── _icons.scss ├── _markdown-body.scss ├── _modal.scss ├── _nav.scss ├── _navbar.scss ├── _overrides.scss ├── _root.scss ├── _util.scss ├── _variables.scss └── vizhub-ui.scss /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | *.swp 4 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "vizhub-v3/codemirror-ot"] 2 | path = vizhub-v3/codemirror-ot 3 | url = git@github.com:vizhub-core/codemirror-ot.git 4 | -------------------------------------------------------------------------------- /prototypes/babelInBrowser/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [], 3 | "plugins": ["@babel/plugin-syntax-jsx", "@babel/plugin-transform-react-jsx"] 4 | } 5 | -------------------------------------------------------------------------------- /prototypes/babelInBrowser/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /prototypes/babelInBrowser/index.js: -------------------------------------------------------------------------------- 1 | import * as babel from "@babel/core"; 2 | 3 | console.log(babel); 4 | 5 | -------------------------------------------------------------------------------- /prototypes/gist-fetching/.prettierignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | .prettierignore 3 | build 4 | package-lock.json 5 | *.swp 6 | *.map 7 | *.svg 8 | *.ico 9 | -------------------------------------------------------------------------------- /prototypes/gist-fetching/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vizhub-core/vizhub-legacy/2a41920a083e08aa5e3729dd437c629678e71093/prototypes/gist-fetching/public/favicon.ico -------------------------------------------------------------------------------- /prototypes/idealExport/.prettierignore: -------------------------------------------------------------------------------- 1 | .prettierignore 2 | *.swp 3 | *.csv 4 | -------------------------------------------------------------------------------- /prototypes/idealExport/README.md: -------------------------------------------------------------------------------- 1 | An implementation of the [Keeling Curve](https://en.wikipedia.org/wiki/Keeling_Curve). 2 | 3 | Data: [NOAA Mauna Loa CO2 records](https://gml.noaa.gov/ccgg/trends/data.html). 4 | -------------------------------------------------------------------------------- /prototypes/idealExport/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [], 3 | "plugins": ["@babel/plugin-syntax-jsx", "@babel/plugin-transform-react-jsx"] 4 | } 5 | -------------------------------------------------------------------------------- /prototypes/idealExport/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |