├── .eslintignore ├── .eslintrc.json ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE.md ├── PULL_REQUEST_TEMPLATE.md ├── neo4j-browser-screenshot.png └── workflows │ ├── pr-e2e-tests.yml │ ├── pr-sso-tests.yml │ └── pr-unit-tests.yml ├── .gitignore ├── .npmignore ├── .npmrc ├── .nvmrc ├── .prettierrc ├── CONTRIBUTING.md ├── LICENSE ├── LICENSES.txt ├── NOTICE.txt ├── README.md ├── auth_server ├── keys │ ├── cert.csr │ ├── certificate.pem │ └── private.key ├── public │ ├── getDelegationTokenNewBrowser.html │ ├── index.html │ ├── indexNewBrowser.html │ └── silentAuthNewBrowser.html └── server.js ├── babel.config.js ├── build_scripts ├── generate-manifest-helpers.js ├── wait-on-config.js ├── webpack-helpers.js ├── webpack-plugins.js ├── webpack-rules.js └── webpack.config.js ├── cypress.json ├── docker └── sso-keycloak │ ├── .env │ ├── docker-compose.yml │ └── resources │ ├── keycloak-config │ └── config.json │ └── neo4j-config │ ├── admin-db.json │ ├── admins.cypher │ ├── movies-db.json │ ├── movies.cypher │ └── role-analyst.json ├── docs ├── .gitignore ├── README.adoc ├── antora.yml ├── modules │ └── ROOT │ │ ├── content-nav.adoc │ │ ├── images │ │ ├── README.md │ │ ├── about.png │ │ ├── adjust-settings.png │ │ ├── aura-query.png │ │ ├── browser-style1.png │ │ ├── browser-style2.png │ │ ├── browser-style3.png │ │ ├── browser-style4.png │ │ ├── browser-style5.png │ │ ├── browser-with-aura.png │ │ ├── browser-with-desktop.png │ │ ├── browser-with-sandbox.png │ │ ├── code.png │ │ ├── command-palette.png │ │ ├── configs.png │ │ ├── database-information.png │ │ ├── dismiss-node.png │ │ ├── download-csv-json.png │ │ ├── download-graph.png │ │ ├── download_csv.png │ │ ├── download_graph.png │ │ ├── expand-collapse.png │ │ ├── expand.svg │ │ ├── favorites.png │ │ ├── favorites1.png │ │ ├── find-replace.png │ │ ├── graph-result-frame.png │ │ ├── graph.png │ │ ├── graph_result_frame_style_node_selected_properties.png │ │ ├── graph_result_frame_style_overview.png │ │ ├── graph_result_frame_style_overview_node.png │ │ ├── graph_result_frame_style_overview_relationship.png │ │ ├── graph_result_frame_style_relationship_selected_properties.png │ │ ├── guides.png │ │ ├── help.png │ │ ├── home-screen.png │ │ ├── inline-result-editor.gif │ │ ├── overview.png │ │ ├── overview1.png │ │ ├── param-assist.png │ │ ├── play-start.png │ │ ├── product_analytics_consent_browser_running_in_aura.png │ │ ├── product_analytics_consent_browser_running_in_desktop.png │ │ ├── product_analytics_consent_browser_settings.png │ │ ├── rbac-count.png │ │ ├── result-frame.png │ │ ├── reusable-frame.png │ │ ├── sample-scripts.png │ │ ├── screen_editor.png │ │ ├── screen_stream.png │ │ ├── settings.png │ │ ├── sync.png │ │ ├── sysinfo_stats.png │ │ ├── table.png │ │ ├── text.png │ │ ├── unlock-relayout.png │ │ └── visual-tour.graffle │ │ └── pages │ │ ├── about-browser.adoc │ │ ├── deployment-modes │ │ ├── dedicated-web-server.adoc │ │ ├── index.adoc │ │ ├── neo4j-aura.adoc │ │ ├── neo4j-desktop.adoc │ │ ├── neo4j-sandbox.adoc │ │ ├── neo4j-server.adoc │ │ └── web-application.adoc │ │ ├── index.adoc │ │ ├── operations │ │ ├── browser-rbac-count.adoc │ │ ├── browser-settings.adoc │ │ ├── browser-sso.adoc │ │ ├── browser-styling.adoc │ │ ├── browser-url-parameters.adoc │ │ ├── credentials-handling.adoc │ │ ├── dbms-connection.adoc │ │ ├── export-results.adoc │ │ ├── index.adoc │ │ ├── initial-command.adoc │ │ ├── product-analytics.adoc │ │ ├── query-parameters.adoc │ │ ├── rest-requests.adoc │ │ └── result-frames.adoc │ │ ├── reference-commands.adoc │ │ └── visual-tour.adoc ├── package.json ├── preview.yml ├── publish.yml └── server.js ├── e2e_tests ├── files │ └── import.csv ├── fixtures │ └── getGuide.html ├── integration │ ├── 0.index.spec.ts │ ├── auto-prefix.spec.ts │ ├── bolt.spec.ts │ ├── commands.spec.ts │ ├── composite-db.spec.ts │ ├── connect-form.spec.ts │ ├── data-export.spec.ts │ ├── debug-command.spec.ts │ ├── desktop-env-url.spec.ts │ ├── desktop-env.spec.ts │ ├── editor.spec.ts │ ├── frame-interactions.spec.ts │ ├── guide-command.spec.ts │ ├── help-command.spec.ts │ ├── loadcsv.spec.ts │ ├── multi-db.spec.ts │ ├── multistatements.spec.ts │ ├── params.spec.ts │ ├── plan.spec.ts │ ├── play-command.spec.ts │ ├── saved-scripts.spec.ts │ ├── schema-frame.spec.ts │ ├── settings.spec.ts │ ├── style.spec.ts │ ├── sysinfo-command.spec.ts │ ├── topics.spec.ts │ ├── types.spec.ts │ ├── user.spec.ts │ └── viz.spec.ts ├── plugins │ └── index.ts ├── sso │ └── single-sign-on.spec.ts ├── support │ ├── commands.ts │ ├── defaults.ts │ ├── global.d.ts │ ├── index.ts │ └── utils.ts └── tsconfig.json ├── jest.config.js ├── package.json ├── pom.xml ├── postcss.config.js ├── scripts ├── convert-to-canary-manifest.js ├── generate_licenses.sh ├── generate_licenses_xml.js ├── prepare-mvn-package.js ├── set-pom-version.js └── static_data │ ├── LICENSES_HEADER.txt │ ├── NOTICE_HEADER.txt │ ├── NOTICE_XML_HEADER.txt │ └── external_dependencies.js ├── src ├── browser │ ├── AppInit.tsx │ ├── components │ │ ├── Accordion │ │ │ ├── Accordion.test.tsx │ │ │ ├── Accordion.tsx │ │ │ └── styled.tsx │ │ ├── Centered.tsx │ │ ├── DataTables.tsx │ │ ├── Directives.test.tsx │ │ ├── Directives.tsx │ │ ├── Display.test.tsx │ │ ├── Display.tsx │ │ ├── EditionView.tsx │ │ ├── Ellipsis.tsx │ │ ├── ErrorBoundary.tsx │ │ ├── FileDrop │ │ │ ├── FileDrop.tsx │ │ │ ├── file-drop.utils.test.ts │ │ │ ├── file-drop.utils.ts │ │ │ └── styled.tsx │ │ ├── Form.tsx │ │ ├── InputEnterStepping │ │ │ ├── InputEnterStepping.test.tsx │ │ │ ├── InputEnterStepping.tsx │ │ │ └── __snapshots__ │ │ │ │ └── InputEnterStepping.test.tsx.snap │ │ ├── ManualLink.test.tsx │ │ ├── ManualLink.tsx │ │ ├── ProjectFiles │ │ │ ├── ProjectFilesList.tsx │ │ │ ├── ProjectFilesListItem.tsx │ │ │ ├── ProjectsFilesScripts.tsx │ │ │ ├── projectFilesConstants.ts │ │ │ └── projectFilesUtils.ts │ │ ├── SavedScripts │ │ │ ├── SavedScripts.tsx │ │ │ ├── SavedScriptsButton.tsx │ │ │ ├── SavedScriptsFolder.tsx │ │ │ ├── SavedScriptsListItem.tsx │ │ │ ├── hooks.ts │ │ │ ├── index.ts │ │ │ ├── styled.ts │ │ │ ├── utils.test.ts │ │ │ └── utils.ts │ │ ├── TabNavigation │ │ │ ├── Navigation.test.tsx │ │ │ ├── Navigation.tsx │ │ │ └── styled.tsx │ │ ├── Tables.tsx │ │ ├── Text.tsx │ │ ├── VersionConditionalDoc.test.tsx │ │ ├── VersionConditionalDoc.tsx │ │ ├── __snapshots__ │ │ │ ├── Directives.test.tsx.snap │ │ │ └── Display.test.tsx.snap │ │ ├── buttons │ │ │ ├── ConfirmationButton.test.tsx │ │ │ ├── ConfirmationButton.tsx │ │ │ ├── __snapshots__ │ │ │ │ └── ConfirmationButton.test.tsx.snap │ │ │ ├── index.test.tsx │ │ │ ├── index.tsx │ │ │ └── style.css │ │ ├── desktop-api │ │ │ ├── desktop-api.handlers.ts │ │ │ ├── desktop-api.test.tsx │ │ │ ├── desktop-api.tsx │ │ │ ├── desktop-api.utils.test.ts │ │ │ └── desktop-api.utils.ts │ │ ├── drawer │ │ │ └── drawer-styled.tsx │ │ ├── headers │ │ │ ├── Headers.test.tsx │ │ │ ├── Headers.tsx │ │ │ ├── index.ts │ │ │ └── style.css │ │ └── icons │ │ │ ├── IconContainer.tsx │ │ │ ├── LegacyIcons.tsx │ │ │ └── svgs │ │ │ ├── add-circle.svg │ │ │ ├── app-window-code.svg │ │ │ ├── arrow-down.svg │ │ │ ├── arrow-left.svg │ │ │ ├── arrow-right.svg │ │ │ ├── arrow-up.svg │ │ │ ├── back-arrow.svg │ │ │ ├── button-refresh-arrow.svg │ │ │ ├── canny-feedback.svg │ │ │ ├── canny-notifications.svg │ │ │ ├── close.svg │ │ │ ├── cloud-check.svg │ │ │ ├── cloud-remove.svg │ │ │ ├── cloud-sync.svg │ │ │ ├── cog.svg │ │ │ ├── controls-play.svg │ │ │ ├── database-check.svg │ │ │ ├── download-bottom.svg │ │ │ ├── eraser.svg │ │ │ ├── expand.svg │ │ │ ├── external-link.svg │ │ │ ├── favorite.svg │ │ │ ├── file.svg │ │ │ ├── files.svg │ │ │ ├── floppy-disk.svg │ │ │ ├── folder-add.svg │ │ │ ├── folder-empty.svg │ │ │ ├── frame-close.svg │ │ │ ├── frame-collapse.svg │ │ │ ├── frame-expand.svg │ │ │ ├── frame-fullscreen.svg │ │ │ ├── frame-pin.svg │ │ │ ├── frame-shrink.svg │ │ │ ├── help.svg │ │ │ ├── hierarchy-9.svg │ │ │ ├── hollow-run-icon.svg │ │ │ ├── layers-hide.svg │ │ │ ├── lock-unlock.svg │ │ │ ├── monitor-heart-beat.svg │ │ │ ├── monitor-play.svg │ │ │ ├── navigation-menu-vertical.svg │ │ │ ├── neo-world.svg │ │ │ ├── neo4j-icon.svg │ │ │ ├── pencil.svg │ │ │ ├── pin.svg │ │ │ ├── rating-star.svg │ │ │ ├── run-icon.svg │ │ │ ├── save-favorite.svg │ │ │ ├── save.svg │ │ │ ├── shop.svg │ │ │ ├── shrink.svg │ │ │ ├── skip-prev.svg │ │ │ ├── stop-icon.svg │ │ │ ├── table.svg │ │ │ ├── task-list-download.svg │ │ │ ├── text.svg │ │ │ ├── update-favorite.svg │ │ │ └── update-file.svg │ ├── custom.d.ts │ ├── documentation │ │ ├── dynamic │ │ │ ├── bolt.tsx │ │ │ ├── commands.tsx │ │ │ ├── cypher.tsx │ │ │ ├── help.tsx │ │ │ └── play.tsx │ │ ├── help │ │ │ ├── alter-user.tsx │ │ │ ├── auto.tsx │ │ │ ├── bolt-encryption.tsx │ │ │ ├── bolt-routing.tsx │ │ │ ├── clear.tsx │ │ │ ├── contains.tsx │ │ │ ├── create-constraint.tsx │ │ │ ├── create-database.tsx │ │ │ ├── create-index.tsx │ │ │ ├── create-role.tsx │ │ │ ├── create-user.tsx │ │ │ ├── create.tsx │ │ │ ├── delete.tsx │ │ │ ├── deny.tsx │ │ │ ├── detach-delete.tsx │ │ │ ├── drop-constraint.tsx │ │ │ ├── drop-database.tsx │ │ │ ├── drop-index.tsx │ │ │ ├── drop-role.tsx │ │ │ ├── drop-user.tsx │ │ │ ├── ends-with.tsx │ │ │ ├── explain.tsx │ │ │ ├── foreach.tsx │ │ │ ├── grant-role.tsx │ │ │ ├── grant.tsx │ │ │ ├── history-clear.tsx │ │ │ ├── history.tsx │ │ │ ├── keys.tsx │ │ │ ├── load-csv.tsx │ │ │ ├── match.tsx │ │ │ ├── merge.tsx │ │ │ ├── param.tsx │ │ │ ├── params.tsx │ │ │ ├── partials │ │ │ │ ├── admin-on-systemdb.tsx │ │ │ │ ├── dbs-on-systemdb.tsx │ │ │ │ └── params-on-systemdb.tsx │ │ │ ├── profile.tsx │ │ │ ├── queries.tsx │ │ │ ├── query-plan.tsx │ │ │ ├── remove.tsx │ │ │ ├── rest-delete.tsx │ │ │ ├── rest-get.tsx │ │ │ ├── rest-post.tsx │ │ │ ├── rest-put.tsx │ │ │ ├── rest.tsx │ │ │ ├── return.tsx │ │ │ ├── revoke-role.tsx │ │ │ ├── revoke.tsx │ │ │ ├── schema.tsx │ │ │ ├── server-user.tsx │ │ │ ├── server.tsx │ │ │ ├── set.tsx │ │ │ ├── show-databases.tsx │ │ │ ├── show-privileges.tsx │ │ │ ├── show-roles.tsx │ │ │ ├── show-users.tsx │ │ │ ├── starts-with.tsx │ │ │ ├── style.tsx │ │ │ ├── template.tsx │ │ │ ├── unfound.tsx │ │ │ ├── unknown.tsx │ │ │ ├── unwind.tsx │ │ │ ├── where.tsx │ │ │ └── with.tsx │ │ ├── index.ts │ │ ├── play-guides │ │ │ ├── concepts.tsx │ │ │ ├── cypher.tsx │ │ │ ├── iconography.tsx │ │ │ ├── intro.tsx │ │ │ ├── learn.tsx │ │ │ ├── movie-graph.tsx │ │ │ ├── northwind-graph.tsx │ │ │ ├── start.tsx │ │ │ ├── typography.tsx │ │ │ ├── unfound.tsx │ │ │ └── write-code.tsx │ │ ├── sidebar-guides │ │ │ ├── concepts.tsx │ │ │ ├── cypher.tsx │ │ │ ├── intro.tsx │ │ │ ├── movie-graph.tsx │ │ │ ├── northwind-graph.tsx │ │ │ ├── styled.tsx │ │ │ └── unfound.tsx │ │ └── templates │ │ │ └── DynamicTopics.tsx │ ├── hooks │ │ ├── testUtils.ts │ │ ├── useAutoTheme.test.tsx │ │ ├── useAutoTheme.tsx │ │ ├── useDerivedTheme.test.tsx │ │ ├── useDerivedTheme.tsx │ │ ├── useDetectColorScheme.test.tsx │ │ └── useDetectColorScheme.ts │ ├── images │ │ ├── Favorites.mp4 │ │ ├── Keystrokes.mp4 │ │ ├── ProjectFiles.mp4 │ │ ├── ReusableFrame.mp4 │ │ ├── SidebarDB_Iinfo.png │ │ ├── Stream.png │ │ ├── aura-logo-inverted.svg │ │ ├── aura-logo.svg │ │ ├── books.png │ │ ├── clusters.svg │ │ ├── community.jpg │ │ ├── device-icons │ │ │ ├── android-icon-144x144.png │ │ │ ├── android-icon-192x192.png │ │ │ ├── android-icon-36x36.png │ │ │ ├── android-icon-48x48.png │ │ │ ├── android-icon-72x72.png │ │ │ ├── android-icon-96x96.png │ │ │ ├── apple-icon-114x114.png │ │ │ ├── apple-icon-120x120.png │ │ │ ├── apple-icon-144x144.png │ │ │ ├── apple-icon-152x152.png │ │ │ ├── apple-icon-180x180.png │ │ │ ├── apple-icon-57x57.png │ │ │ ├── apple-icon-60x60.png │ │ │ ├── apple-icon-72x72.png │ │ │ ├── apple-icon-76x76.png │ │ │ ├── apple-icon-precomposed.png │ │ │ ├── apple-icon.png │ │ │ ├── browserconfig.xml │ │ │ ├── favicon-16x16.png │ │ │ ├── favicon-32x32.png │ │ │ ├── favicon-96x96.png │ │ │ ├── favicon.ico │ │ │ ├── manifest.json │ │ │ ├── ms-icon-144x144.png │ │ │ ├── ms-icon-150x150.png │ │ │ ├── ms-icon-310x310.png │ │ │ ├── ms-icon-70x70.png │ │ │ ├── neo4j-browser-canary.svg │ │ │ └── neo4j-browser.svg │ │ ├── labeled_node.png │ │ ├── more_nodes.png │ │ ├── neo4j-favicon.ico │ │ ├── neo4j-logo-inverted.svg │ │ ├── neo4j-logo.svg │ │ ├── northwind │ │ │ ├── customer-orders.png │ │ │ ├── order-graph.png │ │ │ ├── product-category-supplier.png │ │ │ └── product-graph.png │ │ ├── one_node.png │ │ ├── query-plan-operator-cost.svg │ │ ├── query-plan-operator-details.svg │ │ ├── query-plan-operator-rows.svg │ │ ├── query-plan.svg │ │ ├── rel-props.png │ │ ├── relationships.png │ │ ├── screen_code_frame.png │ │ ├── screen_cypher_warn.png │ │ ├── screen_editor.png │ │ ├── screen_sidebar.png │ │ └── screen_stream.png │ ├── index.html │ ├── index.test.tsx │ ├── index.tsx │ ├── init.ts │ ├── manifest-base.json │ ├── modules │ │ ├── App │ │ │ ├── App.test.tsx │ │ │ ├── App.tsx │ │ │ ├── PerformanceOverlay.tsx │ │ │ ├── keyboardShortcuts.ts │ │ │ └── styled.tsx │ │ ├── Carousel │ │ │ ├── Carousel.tsx │ │ │ ├── CarouselSlidePicker.tsx │ │ │ ├── Slide.tsx │ │ │ ├── style.less │ │ │ └── styled.tsx │ │ ├── ClickToCode │ │ │ ├── __snapshots__ │ │ │ │ └── index.test.tsx.snap │ │ │ ├── index.test.tsx │ │ │ ├── index.tsx │ │ │ └── styled.tsx │ │ ├── D3Visualization │ │ │ └── queryPlan │ │ │ │ ├── arrays.ts │ │ │ │ └── queryPlan.ts │ │ ├── DBMSInfo │ │ │ ├── DBMSInfo.tsx │ │ │ ├── DatabaseKernelInfo.tsx │ │ │ ├── DatabaseSelector.test.tsx │ │ │ ├── DatabaseSelector.tsx │ │ │ ├── MetaItems.test.tsx │ │ │ ├── MetaItems.tsx │ │ │ ├── UserDetails.tsx │ │ │ ├── __snapshots__ │ │ │ │ └── MetaItems.test.tsx.snap │ │ │ ├── style_meta.css │ │ │ └── styled.tsx │ │ ├── DecoratedText │ │ │ └── TextCommand.tsx │ │ ├── DocTitle │ │ │ ├── titleStringBuilder.test.ts │ │ │ └── titleStringBuilder.ts │ │ ├── Docs │ │ │ ├── Docs.tsx │ │ │ └── MD │ │ │ │ ├── MdSlide.test.tsx │ │ │ │ ├── MdSlide.tsx │ │ │ │ ├── splitMd.ts │ │ │ │ └── styled.tsx │ │ ├── Editor │ │ │ ├── MainEditor.tsx │ │ │ ├── consoleCommands.ts │ │ │ └── styled.tsx │ │ ├── FeatureToggle │ │ │ ├── FeatureToggle.test.tsx │ │ │ ├── FeatureToggle.tsx │ │ │ ├── FeatureToggleProvider.test.tsx │ │ │ └── FeatureToggleProvider.tsx │ │ ├── Frame │ │ │ ├── ExportButton.tsx │ │ │ ├── FrameAside.tsx │ │ │ ├── FrameBodyTemplate.tsx │ │ │ ├── FrameEditor.tsx │ │ │ ├── FrameError.tsx │ │ │ ├── FrameSidebar.tsx │ │ │ ├── FrameSuccess.tsx │ │ │ ├── FrameTitlebar.tsx │ │ │ └── styled.tsx │ │ ├── GuideCarousel │ │ │ ├── GuideCarousel.tsx │ │ │ ├── Pagination.test.ts │ │ │ ├── Pagination.tsx │ │ │ └── styled.tsx │ │ ├── Main │ │ │ ├── Main.test.tsx │ │ │ ├── Main.tsx │ │ │ ├── main.hooks.tsx │ │ │ ├── styled.tsx │ │ │ └── tests │ │ │ │ ├── slow-connection-connected.test.ts │ │ │ │ ├── slow-connection-disconnected.test.ts │ │ │ │ ├── slow-connection-long.test.ts │ │ │ │ ├── slow-connection-pending.test.ts │ │ │ │ └── slow-connection-short.test.ts │ │ ├── Segment │ │ │ └── index.tsx │ │ ├── Sidebar │ │ │ ├── About.tsx │ │ │ ├── DocumentItems.tsx │ │ │ ├── Documents.tsx │ │ │ ├── GuideDrawer.test.tsx │ │ │ ├── GuideDrawer.tsx │ │ │ ├── GuidePicker.tsx │ │ │ ├── NewSavedScript.tsx │ │ │ ├── ProjectFiles.tsx │ │ │ ├── Sidebar.tsx │ │ │ ├── UserSettings.test.tsx │ │ │ ├── UserSettings.tsx │ │ │ ├── __snapshots__ │ │ │ │ ├── GuideDrawer.test.tsx.snap │ │ │ │ └── UserSettings.test.tsx.snap │ │ │ ├── docsUtils.test.ts │ │ │ ├── docsUtils.ts │ │ │ ├── favorites.ts │ │ │ ├── static-scripts.test.tsx │ │ │ ├── static-scripts.ts │ │ │ └── styled.tsx │ │ ├── Stream │ │ │ ├── Auth │ │ │ │ ├── ChangePasswordForm.tsx │ │ │ │ ├── ChangePasswordFrame.tsx │ │ │ │ ├── ConnectForm.tsx │ │ │ │ ├── ConnectedView.tsx │ │ │ │ ├── ConnectionFormController.test.tsx │ │ │ │ ├── ConnectionFormController.tsx │ │ │ │ ├── ConnectionFrame.tsx │ │ │ │ ├── DbsFrame.tsx │ │ │ │ ├── DisconnectFrame.tsx │ │ │ │ ├── ServerStatusFrame.test.tsx │ │ │ │ ├── ServerStatusFrame.tsx │ │ │ │ ├── ServerSwitchFrame.test.tsx │ │ │ │ ├── ServerSwitchFrame.tsx │ │ │ │ ├── UseDbFrame.tsx │ │ │ │ ├── revealable-password-input.tsx │ │ │ │ ├── styled.tsx │ │ │ │ ├── utils.test.ts │ │ │ │ ├── utils.ts │ │ │ │ └── words.ts │ │ │ ├── AutoRefresh │ │ │ │ ├── styled.tsx │ │ │ │ └── toggleStyles.css │ │ │ ├── CypherFrame │ │ │ │ ├── AsciiView.test.tsx │ │ │ │ ├── AsciiView.tsx │ │ │ │ ├── CancelView.tsx │ │ │ │ ├── CodeView.test.tsx │ │ │ │ ├── CodeView.tsx │ │ │ │ ├── CypherFrame.test.tsx │ │ │ │ ├── CypherFrame.tsx │ │ │ │ ├── ErrorsView │ │ │ │ │ ├── ErrorsStatusbar.test.tsx │ │ │ │ │ ├── ErrorsStatusbar.tsx │ │ │ │ │ ├── ErrorsView.test.tsx │ │ │ │ │ ├── ErrorsView.tsx │ │ │ │ │ ├── MissingParamsTemplateLink.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ ├── ErrorsStatusbar.test.tsx.snap │ │ │ │ │ │ └── ErrorsView.test.tsx.snap │ │ │ │ ├── PlanView.styled.tsx │ │ │ │ ├── PlanView.test.tsx │ │ │ │ ├── PlanView.tsx │ │ │ │ ├── RelatableView │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── relatable-view.test.tsx.snap │ │ │ │ │ ├── relatable-view.styled.ts │ │ │ │ │ ├── relatable-view.test.tsx │ │ │ │ │ ├── relatable-view.tsx │ │ │ │ │ └── relatable │ │ │ │ │ │ ├── add-ons │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── with-expanded.add-on.ts │ │ │ │ │ │ ├── with-filters.add-on.ts │ │ │ │ │ │ ├── with-grouping.add-on.ts │ │ │ │ │ │ ├── with-pagination.add-on.ts │ │ │ │ │ │ ├── with-selection.add-on.ts │ │ │ │ │ │ └── with-sorting.add-on.ts │ │ │ │ │ │ ├── assets │ │ │ │ │ │ ├── filter.svg │ │ │ │ │ │ ├── group-by.svg │ │ │ │ │ │ ├── sort.svg │ │ │ │ │ │ ├── sort1.svg │ │ │ │ │ │ └── sort2.svg │ │ │ │ │ │ ├── components │ │ │ │ │ │ ├── column-actions.tsx │ │ │ │ │ │ ├── pagination.tsx │ │ │ │ │ │ ├── relatable-icon.tsx │ │ │ │ │ │ ├── relatable │ │ │ │ │ │ │ ├── relatable.hooks.ts │ │ │ │ │ │ │ ├── relatable.styled.ts │ │ │ │ │ │ │ └── relatable.tsx │ │ │ │ │ │ ├── renderers │ │ │ │ │ │ │ ├── aggregates │ │ │ │ │ │ │ │ └── value-aggregate.tsx │ │ │ │ │ │ │ ├── body-cell.tsx │ │ │ │ │ │ │ ├── body-row.tsx │ │ │ │ │ │ │ ├── cells │ │ │ │ │ │ │ │ ├── date-cell.tsx │ │ │ │ │ │ │ │ ├── json-cell.tsx │ │ │ │ │ │ │ │ ├── number-cell.tsx │ │ │ │ │ │ │ │ └── text-cell.tsx │ │ │ │ │ │ │ ├── expanded-row.tsx │ │ │ │ │ │ │ ├── filter.tsx │ │ │ │ │ │ │ ├── filters │ │ │ │ │ │ │ │ └── text-filter.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── row-actions.tsx │ │ │ │ │ │ ├── table.tsx │ │ │ │ │ │ └── toolbar │ │ │ │ │ │ │ ├── filterable.toolbar.tsx │ │ │ │ │ │ │ ├── groupable.toolbar.tsx │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── selectable.toolbar.tsx │ │ │ │ │ │ │ ├── sortable.toolbar.tsx │ │ │ │ │ │ │ ├── toolbar-popup.tsx │ │ │ │ │ │ │ └── toolbar.tsx │ │ │ │ │ │ ├── constants.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── relatable.types.ts │ │ │ │ │ │ ├── states.ts │ │ │ │ │ │ └── utils │ │ │ │ │ │ ├── array-has-items.ts │ │ │ │ │ │ ├── column-actions.ts │ │ │ │ │ │ ├── get-final-depth-subrows.ts │ │ │ │ │ │ ├── get-relatable-add-ons.ts │ │ │ │ │ │ ├── get-row-number.ts │ │ │ │ │ │ ├── get-semantic-table-props.ts │ │ │ │ │ │ ├── is-action-available.ts │ │ │ │ │ │ ├── is-last-index.ts │ │ │ │ │ │ ├── relatable-actions.ts │ │ │ │ │ │ ├── relatable-state-classes.ts │ │ │ │ │ │ └── set-has-items.ts │ │ │ │ ├── VisualizationView │ │ │ │ │ ├── PropertiesPanelContent │ │ │ │ │ │ ├── DetailsPane.test.tsx │ │ │ │ │ │ ├── DetailsPane.tsx │ │ │ │ │ │ ├── GrassEditor.test.tsx │ │ │ │ │ │ ├── GrassEditor.tsx │ │ │ │ │ │ ├── OverviewPane.test.tsx │ │ │ │ │ │ ├── OverviewPane.tsx │ │ │ │ │ │ ├── StyleableNodeLabel.tsx │ │ │ │ │ │ ├── StyleableRelType.tsx │ │ │ │ │ │ └── styled.tsx │ │ │ │ │ ├── VisualizationView.styled.tsx │ │ │ │ │ ├── VisualizationView.test.tsx │ │ │ │ │ ├── VisualizationView.tsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ └── VisualizationView.test.tsx.snap │ │ │ │ ├── WarningsView.test.tsx │ │ │ │ ├── WarningsView.tsx │ │ │ │ ├── __snapshots__ │ │ │ │ │ ├── AsciiView.test.tsx.snap │ │ │ │ │ ├── CodeView.test.tsx.snap │ │ │ │ │ └── WarningsView.test.tsx.snap │ │ │ │ ├── errorUtils.test.ts │ │ │ │ ├── errorUtils.ts │ │ │ │ ├── gqlStatusUtils.test.ts │ │ │ │ ├── gqlStatusUtils.ts │ │ │ │ ├── helpers.test.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── warningUtils.test.ts │ │ │ │ └── warningUtilts.ts │ │ │ ├── CypherScriptFrame │ │ │ │ ├── CypherScriptFrame.tsx │ │ │ │ ├── Icon.tsx │ │ │ │ ├── Summary.tsx │ │ │ │ └── styled.tsx │ │ │ ├── DebugConnectivityFrame.tsx │ │ │ ├── ErrorFrame.test.tsx │ │ │ ├── ErrorFrame.tsx │ │ │ ├── Extras │ │ │ │ ├── SnakeFrame │ │ │ │ │ ├── Score.tsx │ │ │ │ │ ├── Snake.test.tsx │ │ │ │ │ ├── Snake.tsx │ │ │ │ │ ├── helpers.ts │ │ │ │ │ └── index.tsx │ │ │ │ └── index.ts │ │ │ ├── FrameContainer.tsx │ │ │ ├── HelpFrame.tsx │ │ │ ├── HistoryFrame.tsx │ │ │ ├── HistoryRow.test.tsx │ │ │ ├── HistoryRow.tsx │ │ │ ├── InfoView.tsx │ │ │ ├── ParamsFrame.tsx │ │ │ ├── PlayFrame.tsx │ │ │ ├── PreFrame.tsx │ │ │ ├── Queries │ │ │ │ ├── LegacyQueriesFrame.test.tsx │ │ │ │ ├── LegacyQueriesFrame.tsx │ │ │ │ ├── QueriesFrame.tsx │ │ │ │ ├── styled.tsx │ │ │ │ └── toggleStyles.css │ │ │ ├── SchemaFrame.test.tsx │ │ │ ├── SchemaFrame.tsx │ │ │ ├── StartPreviewFrame.tsx │ │ │ ├── Stream.tsx │ │ │ ├── StyleFrame.tsx │ │ │ ├── SysInfoFrame │ │ │ │ ├── LegacySysInfoFrame │ │ │ │ │ ├── LegacySysInfoFrame.test.tsx │ │ │ │ │ ├── LegacySysInfoFrame.tsx │ │ │ │ │ ├── SysInfoDisplay.test.tsx │ │ │ │ │ ├── SysInfoDisplay.tsx │ │ │ │ │ ├── sysinfoHelpers.tsx │ │ │ │ │ ├── sysinfoUtils.test.ts │ │ │ │ │ └── sysinfoUtils.tsx │ │ │ │ ├── SysInfoFrame.test.tsx │ │ │ │ ├── SysInfoFrame.tsx │ │ │ │ ├── SysInfoTable.tsx │ │ │ │ ├── styled.tsx │ │ │ │ ├── sysinfoHelpers.tsx │ │ │ │ ├── sysinfoUtils.test.ts │ │ │ │ └── sysinfoUtils.tsx │ │ │ ├── __snapshots__ │ │ │ │ ├── HistoryRow.test.tsx.snap │ │ │ │ └── SchemaFrame.test.tsx.snap │ │ │ ├── auto-exec-button.test.tsx │ │ │ ├── auto-exec-button.tsx │ │ │ ├── errorMessageFormater.ts │ │ │ ├── errorMessageFormatter.test.ts │ │ │ ├── stream.utils.ts │ │ │ └── styled.tsx │ │ ├── Sync │ │ │ ├── BrowserSync.tsx │ │ │ ├── BrowserSyncAuthIframes.ts │ │ │ ├── BrowserSyncAuthWindow.tsx │ │ │ ├── BrowserSyncInit.tsx │ │ │ └── styled.tsx │ │ ├── User │ │ │ ├── RolesSelector.tsx │ │ │ ├── UserAdd.test.tsx │ │ │ ├── UserAdd.tsx │ │ │ ├── UserInformation.tsx │ │ │ ├── UserList.test.tsx │ │ │ ├── UserList.tsx │ │ │ └── styled.tsx │ │ └── UserInteraction │ │ │ └── index.tsx │ ├── services │ │ ├── canny.ts │ │ └── preview-optin-service.ts │ ├── styles │ │ ├── animations.ts │ │ ├── bootstrap.grid-only.min.css │ │ ├── constants.ts │ │ ├── fira-code.css │ │ ├── font-awesome.min.css │ │ ├── fonts │ │ │ ├── FiraCode │ │ │ │ ├── eot │ │ │ │ │ ├── FiraCode-Bold.eot │ │ │ │ │ ├── FiraCode-Light.eot │ │ │ │ │ ├── FiraCode-Medium.eot │ │ │ │ │ └── FiraCode-Regular.eot │ │ │ │ ├── otf │ │ │ │ │ ├── FiraCode-Bold.otf │ │ │ │ │ ├── FiraCode-Light.otf │ │ │ │ │ ├── FiraCode-Medium.otf │ │ │ │ │ ├── FiraCode-Regular.otf │ │ │ │ │ └── FiraCode-Retina.otf │ │ │ │ ├── ttf │ │ │ │ │ ├── FiraCode-Bold.ttf │ │ │ │ │ ├── FiraCode-Light.ttf │ │ │ │ │ ├── FiraCode-Medium.ttf │ │ │ │ │ ├── FiraCode-Regular.ttf │ │ │ │ │ └── FiraCode-Retina.ttf │ │ │ │ ├── woff │ │ │ │ │ ├── FiraCode-Bold.woff │ │ │ │ │ ├── FiraCode-Light.woff │ │ │ │ │ ├── FiraCode-Medium.woff │ │ │ │ │ └── FiraCode-Regular.woff │ │ │ │ └── woff2 │ │ │ │ │ ├── FiraCode-Bold.woff2 │ │ │ │ │ ├── FiraCode-Light.woff2 │ │ │ │ │ ├── FiraCode-Medium.woff2 │ │ │ │ │ └── FiraCode-Regular.woff2 │ │ │ ├── FontAwesome.otf │ │ │ ├── Inconsolata-Bold.ttf │ │ │ ├── Inconsolata-Regular.ttf │ │ │ ├── OpenSans-Bold.ttf │ │ │ ├── OpenSans-BoldItalic.ttf │ │ │ ├── OpenSans-ExtraBold.ttf │ │ │ ├── OpenSans-ExtraBoldItalic.ttf │ │ │ ├── OpenSans-Italic.ttf │ │ │ ├── OpenSans-Light.ttf │ │ │ ├── OpenSans-LightItalic.ttf │ │ │ ├── OpenSans-Regular.ttf │ │ │ ├── OpenSans-Semibold.ttf │ │ │ ├── OpenSans-SemiboldItalic.ttf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ ├── fontawesome-webfont.woff2 │ │ │ ├── neo-font.eot │ │ │ ├── neo-font.svg │ │ │ ├── neo-font.ttf │ │ │ ├── neo-font.woff │ │ │ ├── neo4j-world.eot │ │ │ ├── neo4j-world.svg │ │ │ ├── neo4j-world.ttf │ │ │ ├── neo4j-world.woff │ │ │ ├── streamline.eot │ │ │ ├── streamline.svg │ │ │ ├── streamline.ttf │ │ │ └── streamline.woff │ │ ├── inconsolata.css │ │ ├── neo4j-world.css │ │ ├── open-sans.css │ │ ├── relate-by-ui │ │ │ └── relate-by-PARTS.css │ │ ├── streamline.css │ │ ├── themes.ts │ │ ├── typography.css │ │ ├── util-classes.css │ │ └── utils.ts │ └── svg.d.ts ├── neo4j-arc │ ├── common │ │ ├── components │ │ │ ├── ClickableUrls.test.tsx │ │ │ ├── ClickableUrls.tsx │ │ │ ├── ClipboardCopier.tsx │ │ │ ├── LabelAndReltypes.ts │ │ │ ├── PropertiesTable │ │ │ │ ├── PropertiesTable.style.ts │ │ │ │ ├── PropertiesTable.test.tsx │ │ │ │ └── PropertiesTable.tsx │ │ │ ├── ShowMoreOrAll │ │ │ │ ├── ShowMoreOrAll.test.tsx │ │ │ │ ├── ShowMoreOrAll.tsx │ │ │ │ └── styled.tsx │ │ │ └── WarningMessage.tsx │ │ ├── icons │ │ │ └── Icons.tsx │ │ ├── index.ts │ │ ├── styles │ │ │ └── themes.tsx │ │ ├── types │ │ │ ├── arcTypes.ts │ │ │ └── cypherDataTypes.ts │ │ └── utils │ │ │ ├── cypherTypeUtils.test.ts │ │ │ ├── cypherTypeUtils.ts │ │ │ ├── driverUtils.test.ts │ │ │ ├── driverUtils.ts │ │ │ ├── objectUtils.test.ts │ │ │ ├── objectUtils.ts │ │ │ ├── platformUtils.ts │ │ │ ├── stringUtils.test.ts │ │ │ └── stringUtils.ts │ ├── cypher-language-support │ │ ├── cypher-editor │ │ │ ├── CypherEditor.test.tsx │ │ │ ├── CypherEditor.tsx │ │ │ ├── CypherMonacoThemes.ts │ │ │ ├── editorSchemaConverter.test.ts │ │ │ ├── editorSchemaConverter.ts │ │ │ └── editorSupport.ts │ │ ├── index.ts │ │ ├── language │ │ │ ├── CypherTokensProvider.test.ts │ │ │ ├── CypherTokensProvider.ts │ │ │ └── cypherBaseFunctions.ts │ │ └── types.ts │ ├── graph-visualization │ │ ├── GraphVisualizer │ │ │ ├── DefaultPanelContent │ │ │ │ ├── DefaultDetailsPane.test.tsx │ │ │ │ ├── DefaultDetailsPane.tsx │ │ │ │ ├── DefaultOverviewPane.test.tsx │ │ │ │ ├── DefaultOverviewPane.tsx │ │ │ │ ├── NodeLabel.tsx │ │ │ │ ├── RelType.tsx │ │ │ │ └── styled.tsx │ │ │ ├── Graph │ │ │ │ ├── Graph.tsx │ │ │ │ ├── GraphEventHandlerModel.ts │ │ │ │ ├── WheelZoomInfoOverlay.tsx │ │ │ │ ├── styled.tsx │ │ │ │ └── visualization │ │ │ │ │ ├── ForceSimulation.ts │ │ │ │ │ ├── GraphGeometryModel.ts │ │ │ │ │ ├── Renderer.ts │ │ │ │ │ ├── Visualization.ts │ │ │ │ │ ├── mouseEventHandlers.ts │ │ │ │ │ ├── renderers │ │ │ │ │ ├── d3Icons.ts │ │ │ │ │ ├── init.ts │ │ │ │ │ └── menu.ts │ │ │ │ │ └── utils │ │ │ │ │ ├── PairwiseArcsRelationshipRouting.ts │ │ │ │ │ └── circularLayout.ts │ │ │ ├── GraphVisualizer.tsx │ │ │ ├── NodeInspectorDrawer.tsx │ │ │ ├── NodeInspectorPanel.tsx │ │ │ └── styled.tsx │ │ ├── constants.ts │ │ ├── index.ts │ │ ├── models │ │ │ ├── Graph.ts │ │ │ ├── GraphStyle.test.ts │ │ │ ├── GraphStyle.ts │ │ │ ├── Node.ts │ │ │ └── Relationship.ts │ │ ├── types.ts │ │ └── utils │ │ │ ├── ArcArrow.ts │ │ │ ├── LoopArrow.ts │ │ │ ├── StraightArrow.ts │ │ │ ├── mapper.ts │ │ │ ├── textMeasurement.ts │ │ │ ├── utils.test.ts │ │ │ └── utils.ts │ └── index.ts └── shared │ ├── globalState.ts │ ├── modules │ ├── app │ │ ├── appDuck.test.ts │ │ └── appDuck.ts │ ├── commands │ │ ├── commandsDuck.test.ts │ │ ├── commandsDuck.ts │ │ ├── cypher.test.ts │ │ ├── helpers │ │ │ ├── config.test.ts │ │ │ ├── config.ts │ │ │ ├── cypher.ts │ │ │ ├── grass.test.ts │ │ │ ├── grass.ts │ │ │ ├── http.test.ts │ │ │ ├── http.ts │ │ │ ├── lambdas.ts │ │ │ ├── params.test.ts │ │ │ ├── params.ts │ │ │ ├── playAndGuides.ts │ │ │ └── server.ts │ │ ├── multiCommands.test.ts │ │ ├── postConnectCmdEpic.test.ts │ │ ├── remoteGuides.test.ts │ │ └── use-db-ww.test.ts │ ├── connections │ │ ├── connectionsDuck.test.ts │ │ ├── connectionsDuck.ts │ │ └── forceResetPasswordQueryHelper.ts │ ├── credentialsPolicy │ │ └── credentialsPolicyDuck.ts │ ├── currentUser │ │ ├── currentUserDuck.test.ts │ │ └── currentUserDuck.ts │ ├── cypher │ │ ├── boltUserHelper.ts │ │ ├── cypherDuck.ts │ │ ├── cypherRequestEpic.test.ts │ │ ├── functionsAndProceduresHelper.ts │ │ └── queriesProcedureHelper.ts │ ├── dbMeta │ │ ├── __snapshots__ │ │ │ └── dbMetaDuck.test.ts.snap │ │ ├── dbMetaDuck.test.ts │ │ ├── dbMetaDuck.ts │ │ ├── dbMetaEpics.test.ts │ │ ├── dbMetaEpics.ts │ │ └── utils.ts │ ├── discovery │ │ ├── discoveryDuck.test.ts │ │ ├── discoveryDuck.ts │ │ ├── discoveryHelpers.test.ts │ │ ├── discoveryHelpers.ts │ │ └── discoveryMocks.ts │ ├── editor │ │ ├── editorDuck.test.ts │ │ └── editorDuck.ts │ ├── experimentalFeatures │ │ ├── experimentalFeaturesDuck.test.ts │ │ └── experimentalFeaturesDuck.ts │ ├── favorites │ │ ├── favoritesDuck.test.ts │ │ ├── favoritesDuck.ts │ │ ├── foldersDuck.ts │ │ └── staticScripts.ts │ ├── features │ │ ├── featureDuck.utils.test.ts │ │ ├── featureDuck.utils.ts │ │ ├── featuresDuck.test.ts │ │ ├── featuresDuck.ts │ │ └── versionedFeatures.ts │ ├── frames │ │ ├── frameViewTypes.ts │ │ ├── framesDuck.test.ts │ │ └── framesDuck.ts │ ├── grass │ │ ├── grassDuck.test.ts │ │ └── grassDuck.ts │ ├── guides │ │ └── guidesDuck.ts │ ├── history │ │ ├── historyDuck.test.ts │ │ └── historyDuck.ts │ ├── localstorage │ │ └── localstorageDuck.ts │ ├── params │ │ ├── paramsDuck.test.ts │ │ └── paramsDuck.ts │ ├── preview │ │ ├── previewDuck.test.ts │ │ └── previewDuck.ts │ ├── requests │ │ └── requestsDuck.ts │ ├── settings │ │ ├── __snapshots__ │ │ │ └── settingsDuck.test.ts.snap │ │ ├── settingsDuck.test.ts │ │ └── settingsDuck.ts │ ├── sidebar │ │ ├── sidebarDuck.test.ts │ │ └── sidebarDuck.ts │ ├── sync │ │ ├── SyncSignInManager.ts │ │ └── syncDuck.ts │ ├── udc │ │ └── udcDuck.ts │ └── userInteraction │ │ └── userInteractionDuck.ts │ ├── rootEpic.ts │ ├── rootReducer.ts │ ├── services │ ├── WorkPool.test.ts │ ├── WorkPool.ts │ ├── bolt │ │ ├── __mocks__ │ │ │ └── boltWorker.ts │ │ ├── applyGraphTypes.test.ts │ │ ├── bolt.ts │ │ ├── boltConnection.test.ts │ │ ├── boltConnection.ts │ │ ├── boltConnectionErrors.ts │ │ ├── boltHelpers.test.ts │ │ ├── boltHelpers.ts │ │ ├── boltMappings.test.ts │ │ ├── boltMappings.ts │ │ ├── boltWorker.ts │ │ ├── boltWorkerMessages.ts │ │ ├── cypherTypesFormatting.test.ts │ │ ├── cypherTypesFormatting.ts │ │ ├── driverFactory.ts │ │ ├── globalDrivers.ts │ │ ├── handleBoltWorkerMessage.ts │ │ ├── setup-bolt-worker.ts │ │ ├── transactions.ts │ │ ├── txMetadata.ts │ │ └── updateStatisticsFields.ts │ ├── boltscheme.utils.test.ts │ ├── boltscheme.utils.ts │ ├── browserSyncService.ts │ ├── commandInterpreterHelper.test.ts │ ├── commandInterpreterHelper.ts │ ├── commandUtils.test.ts │ ├── commandUtils.ts │ ├── cypherErrorsHelper.ts │ ├── dom-helpers.ts │ ├── duckUtils.test.ts │ ├── duckUtils.ts │ ├── exceptions.ts │ ├── exporting │ │ ├── favoriteUtils.ts │ │ ├── imageUtils.ts │ │ └── svgUtils.ts │ ├── grassUtils.test.ts │ ├── grassUtils.ts │ ├── guideResolverHelper.test.ts │ ├── guideResolverHelper.tsx │ ├── localstorage.test.ts │ ├── localstorage.ts │ ├── remote.ts │ ├── remoteUtils.test.ts │ ├── remoteUtils.ts │ ├── serializer.test.ts │ ├── serializer.ts │ ├── utils.test.ts │ └── utils.ts │ └── utils │ ├── array-has-items.ts │ ├── deepPartial.ts │ ├── selectors.ts │ ├── strings.ts │ ├── typeSafeActions.test.ts │ ├── typeSafeActions.ts │ └── typeguards.ts ├── test_utils ├── __mocks__ │ ├── fileMock.js │ ├── styleMock.js │ └── workerLoaderMock.js └── setupTests.js ├── tsconfig.json └── yarn.lock /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | dist 4 | mvn 5 | cypress 6 | yarn-cache 7 | coverage/ 8 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | .github/ @neo4j/team-browser 2 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 12 | 13 | -------------------------------------------------------------------------------- /.github/neo4j-browser-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/.github/neo4j-browser-screenshot.png -------------------------------------------------------------------------------- /.github/workflows/pr-unit-tests.yml: -------------------------------------------------------------------------------- 1 | name: 'Browser PR unit tests' 2 | 3 | on: 4 | pull_request: 5 | branches: [master] 6 | 7 | jobs: 8 | run-tests: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - uses: actions/checkout@v3 13 | - uses: actions/setup-node@v3 14 | with: 15 | node-version-file: '.nvmrc' 16 | - run: npm -g install yarn 17 | - run: yarn install --frozen-lockfile 18 | - name: run unit tests 19 | env: 20 | NODE_OPTIONS: '--max-old-space-size=8192' 21 | run: yarn test 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | npm-debug.log 3 | coverage/ 4 | .DS_Store 5 | .vscode 6 | /yarn-error.log 7 | .idea/ 8 | /build 9 | /bundle-report.html 10 | /target 11 | /e2e_tests/screenshots/ 12 | /e2e_tests/videos/ 13 | mvn/ 14 | dist/ 15 | NOTICE.xml 16 | *.tgz 17 | *.tar.gz 18 | release-notes.md 19 | /stats.json 20 | signature.pem 21 | HEAD 22 | neo4j-enterprise-*/ 23 | 24 | ./src/neo4j-arc/dist 25 | ./src/neo4j-arc/node_modules 26 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | __mocks__/ 2 | .github/ 3 | auth_server/ 4 | browser/ 5 | e2e_tests/ 6 | mvn/ 7 | scripts/ 8 | src/ 9 | target/ 10 | cypress/ 11 | coverage/ 12 | test_utils/ 13 | build_scripts/ 14 | .babelrc 15 | .eslintignore 16 | .eslintrc.json 17 | .yarnrc 18 | cypress.json 19 | jsconfig.json 20 | pom.xml 21 | postcss.config.js 22 | yarn.lock 23 | README.md 24 | bundle-report.html 25 | now.json 26 | yarn-error.log 27 | *.tgz 28 | jest.config.js 29 | .babelrc.js 30 | .vscode 31 | Dockerfile 32 | NOTICE.xml 33 | HEAD 34 | babel.config.js 35 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | tag-version-prefix="" 2 | scripts-prepend-node-path=true 3 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 16.10.0 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "bracketSpacing": true, 3 | "singleQuote": true, 4 | "tabWidth": 2, 5 | "printWidth": 80, 6 | "semi": false, 7 | "trailingComma": "none", 8 | "arrowParens": "avoid", 9 | "jsxSingleQuote": false, 10 | "importOrderSeparation": true, 11 | "importOrderSortSpecifiers": true, 12 | "importOrder": [ 13 | "^@testing-library/react-hooks/dont-cleanup-after-each.js$", 14 | "", 15 | "^neo4j-arc/(.*)$", 16 | "^browser/(.*)$|^project-root/(.*)$|^browser-(.*)$|^shared/(.*)$|^services/(.*)$|^icons/(.*)$|^[./]" 17 | ], 18 | "overrides": [ 19 | { 20 | "files": "*.ts", 21 | "options": { 22 | "importOrderParserPlugins": ["typescript"] 23 | } 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /auth_server/keys/cert.csr: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE REQUEST----- 2 | MIIBhDCB7gIBADBFMQswCQYDVQQGEwJTRTETMBEGA1UECBMKU29tZS1TdGF0ZTEh 3 | MB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEB 4 | AQUAA4GNADCBiQKBgQCaVADtpr4KlR0nDQAT5zdDu77iMJcvAJnAeJFK7HixPkRL 5 | sFHpZwi9BnffnGnF3vKtRn+K5KS02kZrCiOxCK9Q9uu4iPL1WBUx/MHOq1CSxzHK 6 | Eja4JDwexYx+pQ747bAguAtFbo0eoXJgrM/31wJQPyj+FCw15A9CsyKPfp2QKQID 7 | AQABoAAwDQYJKoZIhvcNAQEFBQADgYEADR6NbutYai6VXkvFh5UHjJSvOji3+RwC 8 | ttu4sPlY3+qR4e13JYItTvuRqyrY8U2Amg1Zk8lUdufkNl7vMB/rdHbMzLgVzCU9 9 | HdJ9c/svCqTh9Ek6U1Ur3YXww6O3t624y8uCI1A0p6x25GSFMrnwO2Y6h6RfIRh9 10 | BGcZR+izRY0= 11 | -----END CERTIFICATE REQUEST----- 12 | -------------------------------------------------------------------------------- /auth_server/keys/certificate.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICATCCAWoCCQCTS5Hk7nWnBDANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJT 3 | RTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0 4 | cyBQdHkgTHRkMB4XDTE1MTIwNzEzMjkzMFoXDTE2MDEwNjEzMjkzMFowRTELMAkG 5 | A1UEBhMCU0UxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0 6 | IFdpZGdpdHMgUHR5IEx0ZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmlQA 7 | 7aa+CpUdJw0AE+c3Q7u+4jCXLwCZwHiRSux4sT5ES7BR6WcIvQZ335xpxd7yrUZ/ 8 | iuSktNpGawojsQivUPbruIjy9VgVMfzBzqtQkscxyhI2uCQ8HsWMfqUO+O2wILgL 9 | RW6NHqFyYKzP99cCUD8o/hQsNeQPQrMij36dkCkCAwEAATANBgkqhkiG9w0BAQUF 10 | AAOBgQBF/uW6LdQ8Iwq1VmV41ngiv4dQgeSjoN+3sFA8xScADdBF3RSLXuULNzeU 11 | aUkdqWltGY3ehA800sYf+dttvGFXCCQ8o8TuZwoxUv3RO7SRlQqS+YO8rNuyrFcj 12 | eYr+XLXXkMiLNS2c8A26mZUSXvqDBowK4USykyCub9uoWNvYKw== 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /auth_server/keys/private.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIICXAIBAAKBgQCaVADtpr4KlR0nDQAT5zdDu77iMJcvAJnAeJFK7HixPkRLsFHp 3 | Zwi9BnffnGnF3vKtRn+K5KS02kZrCiOxCK9Q9uu4iPL1WBUx/MHOq1CSxzHKEja4 4 | JDwexYx+pQ747bAguAtFbo0eoXJgrM/31wJQPyj+FCw15A9CsyKPfp2QKQIDAQAB 5 | AoGAY/xgzZfmMD0DsjU+A6cdqwiMV0db69vbwVNb7sreNxc8cD1AFJPomW8DYyCX 6 | dtdHKvQt1fLkszdnwBnFngEec7iXjAGK8Rw5eRHmduC68nPyCoghR8dfCbbAM2Yc 7 | QqQBvCqfZEMUB+JRfJwF/0MXAoYX63oPzYW5NKVLOuSG6gECQQDNGBkyOZEwPIqf 8 | y/WomiixIIMm/YBK4KpXpsPaYsh3BydBY+9POu+LbUqeVVF5sWsjGBEPA9aArnPz 9 | rqDDNtSZAkEAwKIt6Sr3JxVGj9+t/bWZbybrQwiyF+AK4iD+7o98W4bAbNEQswK5 10 | q9NEbJE0EYDOKvrNIDJujGiVQy3+HrpCEQJBALiZdDRMtG3iUDO8dQSonO+w/9tc 11 | WNkMlsYGCErMlvrrqV2mAYQi2/F3Ea6pxIfwNSqFQvVs0ulIHH29NF4BQCECQA5u 12 | mB31+BpXf7fbvD9b0akAM3QMPLuJL4eNjUv2OAzrZZNBfozK0XpME75Giq4dBlU2 13 | ARQ+cwXV+AjWc0l+DuECQAXNhoMmLh4mcGM7x6+JIVBuSjge8oXyqluBYmDIaf9q 14 | 86qcuguze9ZTS4C5rgqCOP5jeilZGtRemLpoT6xZ1/Y= 15 | -----END RSA PRIVATE KEY----- 16 | -------------------------------------------------------------------------------- /auth_server/public/silentAuthNewBrowser.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /auth_server/server.js: -------------------------------------------------------------------------------- 1 | var express = require('express') 2 | var https = require('https') 3 | var fs = require('fs') 4 | const path = require('path') 5 | var app = express() 6 | 7 | app.use(express.static(path.join(__dirname, './public'))) 8 | 9 | var options = { 10 | key: fs.readFileSync(path.join(__dirname, './keys/private.key')), 11 | cert: fs.readFileSync(path.join(__dirname, './keys/certificate.pem')) 12 | } 13 | var secureServer = https.createServer(options, app).listen(9001, function () { 14 | var host = secureServer.address().address 15 | var port = secureServer.address().port 16 | 17 | console.log('Sync server listening at https://%s:%s', host, port) 18 | }) 19 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | const isTest = String(process.env.NODE_ENV) === 'test' // Jest sets this 2 | 3 | const toExport = { 4 | plugins: [ 5 | 'react-hot-loader/babel', 6 | '@babel/plugin-proposal-class-properties', 7 | 'babel-plugin-dynamic-import-node' 8 | ], 9 | presets: [ 10 | '@babel/preset-react', 11 | [ 12 | '@babel/preset-env', 13 | { 14 | useBuiltIns: 'entry', 15 | corejs: 3, 16 | modules: isTest ? 'commonjs' : false, 17 | targets: { 18 | browsers: ['last 1 version', 'not ie > 0'] 19 | } 20 | } 21 | ] 22 | ] 23 | } 24 | 25 | module.exports = toExport 26 | -------------------------------------------------------------------------------- /build_scripts/wait-on-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | strictSSL: false, 3 | timeout: 60000 4 | } 5 | -------------------------------------------------------------------------------- /build_scripts/webpack-helpers.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2002-2021 "Neo4j," 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | const path = require('path') 22 | const nodeEnv = process.env.NODE_ENV || 'development' 23 | exports.nodeEnv = nodeEnv 24 | exports.isProduction = nodeEnv === 'production' 25 | 26 | exports.buildPath = path.join(__dirname, '../dist') 27 | exports.assetsPath = path.join(__dirname, '../dist/assets') 28 | exports.browserPath = path.join(__dirname, '../src/browser') 29 | exports.sourcePath = path.join(__dirname, '../src') 30 | exports.projectPath = path.join(__dirname, '../') 31 | -------------------------------------------------------------------------------- /cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "animationDistanceThreshold": 1, 3 | "baseUrl": "http://localhost:8080", 4 | "chromeWebSecurity": false, 5 | "defaultCommandTimeout": 10000, 6 | "environmentVariables": {}, 7 | "execTimeout": 60000, 8 | "fileServerFolder": "", 9 | "fixturesFolder": "e2e_tests/fixtures", 10 | "hosts": null, 11 | "integrationFolder": "e2e_tests/integration", 12 | "numTestsKeptInMemory": 2, 13 | "pageLoadTimeout": 60000, 14 | "pluginsFile": "e2e_tests/plugins/index.ts", 15 | "port": null, 16 | "reporter": "spec", 17 | "reporterOptions": null, 18 | "requestTimeout": 5000, 19 | "responseTimeout": 30000, 20 | "screenshotsFolder": "e2e_tests/screenshots", 21 | "supportFile": "e2e_tests/support/index.ts", 22 | "trashAssetsBeforeRuns": true, 23 | "videoCompression": false, 24 | "video": true, 25 | "videosFolder": "e2e_tests/videos", 26 | "videoUploadOnPasses": false, 27 | "viewportHeight": 720, 28 | "viewportWidth": 1280, 29 | "waitForAnimations": true, 30 | "watchForFileChanges": true, 31 | "retries": { 32 | "runMode": 1, 33 | "openMode": 0 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /docker/sso-keycloak/.env: -------------------------------------------------------------------------------- 1 | NEO4J_VERSION=4.4.9-enterprise 2 | NEO4J_PASSWORD=password 3 | KEYCLOAK_VERSION=19.0.1 4 | KEYCLOAK_ADMIN_USER=admin 5 | KEYCLOAK_ADMIN_PASSWORD=password 6 | KEYCLOAK_CONFIG_VERSION=latest-19.0.3 7 | -------------------------------------------------------------------------------- /docker/sso-keycloak/resources/neo4j-config/admin-db.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "Database", 3 | "name": "admins", 4 | "dropIfExists": true, 5 | "skipCreate": false, 6 | "indexes": { 7 | "fulltext": [ 8 | { 9 | "labels": ["Person"], 10 | "properties": ["name"], 11 | "name": "Person" 12 | } 13 | ] 14 | }, 15 | "seeds": ["admins.cypher"] 16 | } 17 | -------------------------------------------------------------------------------- /docker/sso-keycloak/resources/neo4j-config/admins.cypher: -------------------------------------------------------------------------------- 1 | CREATE (n:Admin {name: "Dave Lister"}); 2 | -------------------------------------------------------------------------------- /docker/sso-keycloak/resources/neo4j-config/movies-db.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "Database", 3 | "name": "movies", 4 | "dropIfExists": true, 5 | "skipCreate": false, 6 | "indexes": { 7 | "fulltext": [ 8 | { 9 | "labels": ["Person"], 10 | "properties": ["name"], 11 | "name": "Person" 12 | } 13 | ] 14 | }, 15 | "constraints": { 16 | "unique": [ 17 | { 18 | "label": "Movie", 19 | "property": "title" 20 | } 21 | ] 22 | }, 23 | "seeds": ["movies.cypher"] 24 | } 25 | -------------------------------------------------------------------------------- /docker/sso-keycloak/resources/neo4j-config/role-analyst.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "Role", 3 | "name": "analyst", 4 | "dropIfExists": true, 5 | "privileges": [ 6 | { 7 | "graph": "movies", 8 | "access": true, 9 | "rules": [ 10 | { 11 | "target": "node", 12 | "labels": "*", 13 | "action": "match", 14 | "resource": "all_properties", 15 | "access": "GRANTED" 16 | }, 17 | { 18 | "target": "relationship", 19 | "labels": "*", 20 | "action": "read", 21 | "resource": "*", 22 | "access": "GRANTED" 23 | }, 24 | { 25 | "target": "relationship", 26 | "labels": "*", 27 | "action": "traverse", 28 | "resource": "*", 29 | "access": "GRANTED" 30 | }, 31 | { 32 | "target": "node", 33 | "labels": "Person", 34 | "action": "read", 35 | "resource": "born", 36 | "access": "DENIED" 37 | } 38 | ] 39 | } 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | release/ 4 | out/ 5 | e2e/* 6 | .gradle/ 7 | .idea/ 8 | .vscode/ 9 | .vagrant/ 10 | .awcache/ 11 | *.iml 12 | *.iws 13 | *.ipr 14 | yarn-error.log 15 | package-lock.json 16 | /offline 17 | /test-data 18 | Electron-Path/ 19 | lib/ 20 | build/ 21 | -------------------------------------------------------------------------------- /docs/README.adoc: -------------------------------------------------------------------------------- 1 | To build the Browser Manual locally: 2 | 3 | 1. Create a fork of https://github.com/neo4j/neo4j-browser. 4 | 2. In your working directory, clone https://github.com/neo4j/neo4j-browser using `git clone git@github.com:neo4j/neo4j-browser.git`. 5 | 3. Add your user as a remote using `git remote add git@github.com:/neo4j-browser.git` 6 | 4. Rename `origin` to `upstream` using `git remote rename origin upstream`. 7 | 5. Checkout the `master` branch using `git checkout master`. 8 | 6. Run `git pull`. 9 | 7. (Optional) Create your own branch using `git checkout -b `if you want to create a Pull Request. 10 | 6. `cd` into the _docs_ directory. 11 | 7. Run `npm install`. 12 | 8. Run `npm start`. 13 | 9. Open http://localhost:8002 in a browser. 14 | -------------------------------------------------------------------------------- /docs/antora.yml: -------------------------------------------------------------------------------- 1 | name: browser-manual 2 | title: Neo4j Browser 3 | version: '5' 4 | start_page: ROOT:index.adoc 5 | nav: 6 | - modules/ROOT/content-nav.adoc 7 | asciidoc: 8 | attributes: 9 | neo4j-version: '5' 10 | neo4j-version-exact: '5.25.0' 11 | neo4j-buildnumber: '5.25' 12 | neo4j-browser-version: '5.25.0' 13 | docs-version: '5' 14 | -------------------------------------------------------------------------------- /docs/modules/ROOT/content-nav.adoc: -------------------------------------------------------------------------------- 1 | * xref:index.adoc[] 2 | * xref:about-browser.adoc[About Neo4j Browser] 3 | 4 | * xref:deployment-modes/index.adoc[Deployment modes] 5 | ** xref:deployment-modes/neo4j-server.adoc[] 6 | ** xref:deployment-modes/neo4j-desktop.adoc[] 7 | ** xref:deployment-modes/web-application.adoc[] 8 | ** xref:deployment-modes/neo4j-sandbox.adoc[] 9 | ** xref:deployment-modes/neo4j-aura.adoc[] 10 | ** xref:deployment-modes/dedicated-web-server.adoc[] 11 | 12 | * xref:visual-tour.adoc[Visual tour] 13 | 14 | * xref:operations/index.adoc[Browser operations] 15 | ** xref:operations/dbms-connection.adoc[] 16 | ** xref:operations/credentials-handling.adoc[] 17 | ** xref:operations/browser-sso.adoc[] 18 | ** xref:operations/browser-settings.adoc[] 19 | ** xref:operations/initial-command.adoc[] 20 | ** xref:operations/result-frames.adoc[] 21 | ** xref:operations/export-results.adoc[] 22 | ** xref:operations/browser-styling.adoc[] 23 | ** xref:operations/query-parameters.adoc[] 24 | ** xref:operations/browser-url-parameters.adoc[] 25 | ** xref:operations/rest-requests.adoc[] 26 | ** xref:operations/browser-rbac-count.adoc[] 27 | ** xref:operations/product-analytics.adoc[] 28 | 29 | * xref:reference-commands.adoc[Command reference] 30 | -------------------------------------------------------------------------------- /docs/modules/ROOT/images/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/about.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/adjust-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/adjust-settings.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/aura-query.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/aura-query.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/browser-style1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/browser-style1.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/browser-style2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/browser-style2.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/browser-style3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/browser-style3.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/browser-style4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/browser-style4.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/browser-style5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/browser-style5.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/browser-with-aura.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/browser-with-aura.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/browser-with-desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/browser-with-desktop.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/browser-with-sandbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/browser-with-sandbox.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/code.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/command-palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/command-palette.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/configs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/configs.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/database-information.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/database-information.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/dismiss-node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/dismiss-node.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/download-csv-json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/download-csv-json.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/download-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/download-graph.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/download_csv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/download_csv.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/download_graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/download_graph.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/expand-collapse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/expand-collapse.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/favorites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/favorites.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/favorites1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/favorites1.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/find-replace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/find-replace.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/graph-result-frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/graph-result-frame.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/graph.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/graph_result_frame_style_node_selected_properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/graph_result_frame_style_node_selected_properties.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/graph_result_frame_style_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/graph_result_frame_style_overview.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/graph_result_frame_style_overview_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/graph_result_frame_style_overview_node.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/graph_result_frame_style_overview_relationship.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/graph_result_frame_style_overview_relationship.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/graph_result_frame_style_relationship_selected_properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/graph_result_frame_style_relationship_selected_properties.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/guides.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/guides.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/help.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/home-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/home-screen.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/inline-result-editor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/inline-result-editor.gif -------------------------------------------------------------------------------- /docs/modules/ROOT/images/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/overview.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/overview1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/overview1.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/param-assist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/param-assist.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/play-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/play-start.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/product_analytics_consent_browser_running_in_aura.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/product_analytics_consent_browser_running_in_aura.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/product_analytics_consent_browser_running_in_desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/product_analytics_consent_browser_running_in_desktop.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/product_analytics_consent_browser_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/product_analytics_consent_browser_settings.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/rbac-count.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/rbac-count.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/result-frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/result-frame.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/reusable-frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/reusable-frame.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/sample-scripts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/sample-scripts.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/screen_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/screen_editor.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/screen_stream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/screen_stream.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/settings.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/sync.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/sync.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/sysinfo_stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/sysinfo_stats.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/table.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/text.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/unlock-relayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/unlock-relayout.png -------------------------------------------------------------------------------- /docs/modules/ROOT/images/visual-tour.graffle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/docs/modules/ROOT/images/visual-tour.graffle -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/deployment-modes/neo4j-aura.adoc: -------------------------------------------------------------------------------- 1 | :description: Neo4j Browser with Neo4j Aura. 2 | 3 | 4 | [[aura]] 5 | = Neo4j Aura 6 | 7 | link:https://neo4j.com/cloud/aura/[Neo4j Aura^] is Neo4j’s fully managed cloud service. 8 | Neo4j Aura is a fast, reliable, scalable and completely automated graph database as a cloud service. 9 | 10 | Neo4j Browser can be accessed as an integrated tool within the user interface of link:https://console.neo4j.io/[Neo4j Aura console^], and is there referred to as *Query*. 11 | For more information about Browser/Query in Aura, see link:{neo4j-docs-base-uri}/aura/query/introduction/[Aura Documentation -> Query]. 12 | 13 | image:aura-query.png[] 14 | 15 | -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/deployment-modes/neo4j-sandbox.adoc: -------------------------------------------------------------------------------- 1 | :description: Neo4j Sandbox includes Neo4j Browser. 2 | 3 | 4 | [[sandbox]] 5 | = Neo4j Sandbox 6 | 7 | link:https://neo4j.com/sandbox/[Neo4j Sandbox^] is a free, cloud-based instance of Neo4j, where you can learn about Neo4j, test your ideas, or play around with the pre-built data examples. 8 | 9 | When you launch a project, it opens Neo4j Browser as a web application. 10 | The Neo4j Browser web application connects to your Neo4j instance that the sandbox created for you, without having to enter any connection URI. 11 | 12 | image:browser-with-sandbox.png[] 13 | 14 | -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/deployment-modes/web-application.adoc: -------------------------------------------------------------------------------- 1 | :description: Neo4j Browser web application. 2 | 3 | 4 | [[web-application]] 5 | = Web application 6 | 7 | Neo4j Browser is available as a web application at link:https://browser.neo4j.io/[_https://browser.neo4j.io/_^]. 8 | To setup up a connection to Neo4j with this web application (Neo4j Browser), you need a remote Neo4j instance that is configured with TLS. 9 | -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/operations/browser-rbac-count.adoc: -------------------------------------------------------------------------------- 1 | [[rbac-node-rel-count]] 2 | = Node and relationship counts with role-based access control 3 | 4 | Normally Neo4j Browser can look up node and relationship counts quickly, as they are cached in the database. 5 | However, if role-based access control is configured (see link:https://neo4j.com/docs/operations-manual/current/authentication-authorization/access-control/[Operations Manual -> Fine-grained access control^] for more information), Neo4j counts the nodes and relationships the current user has access to on-demand, which is computationally expensive and thus potentially time-consuming. 6 | If Neo4j Browser detects that the counts are slow, it automatically stops polling counts and instead show a button for manual refresh. 7 | 8 | image:rbac-count.png[width=300] -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/operations/export-results.adoc: -------------------------------------------------------------------------------- 1 | :description: Export results. 2 | 3 | 4 | [[export-results]] 5 | = Export results 6 | 7 | You can download your query results using the down-pointed arrow on the right side of the result frame. 8 | 9 | The following download options available: 10 | 11 | * Export CSV. 12 | * Export JSON. 13 | * Export PNG. 14 | * Export SVG. 15 | 16 | Depending on the result frame these options can vary. 17 | 18 | 19 | .Export result, _graph result frame_. 20 | [#download_graph] 21 | [caption="Export as an image"] 22 | image:download-graph.png[Export graph, width=50%] 23 | 24 | 25 | .Export result, _table_, _plain text_, and _code_ result frames. 26 | [#download_csv] 27 | [caption="Export as a CSV file"] 28 | image:download-csv-json.png[Export table, width=50%] 29 | 30 | 31 | [NOTE] 32 | ==== 33 | The *Save as project file* is available only in Neo4j Desktop. 34 | For more information, see xref:visual-tour.adoc#saved-files[Project files]. 35 | ==== 36 | 37 | -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/operations/index.adoc: -------------------------------------------------------------------------------- 1 | :description: This section describes how to administer and use Neo4j Browser. 2 | 3 | 4 | [[operations]] 5 | = Browser operations 6 | 7 | * xref:operations/dbms-connection.adoc[] -- How to establish a connection to a Neo4j DBMS. 8 | * xref:operations/credentials-handling.adoc[] -- Explaining how credentials are cached for Neo4j Browser. 9 | * xref:operations/browser-sso.adoc[] -- Supported Single Sign-On providers. label:enterprise[] 10 | * xref:operations/browser-settings.adoc[] -- Available browser settings. 11 | * xref:operations/initial-command.adoc[] -- An initial command at startup. 12 | * xref:operations/result-frames.adoc[] -- Explaining available result frames. 13 | * xref:operations/export-results.adoc[] -- How to export results. 14 | * xref:operations/browser-styling.adoc[] -- Customize your graph query result. 15 | * xref:operations/query-parameters.adoc[] -- Using parameters for Cypher queries. 16 | * xref:operations/browser-url-parameters.adoc[] -- Available URL parameters. 17 | * xref:operations/rest-requests.adoc[] -- HTTP REST commands. 18 | * xref:operations/browser-rbac-count.adoc[] -- Manual refresh of counts due to RBAC. 19 | * xref:operations/product-analytics.adoc[] -- Configure consent for anonymous usage statistics. 20 | 21 | -------------------------------------------------------------------------------- /docs/modules/ROOT/pages/operations/initial-command.adoc: -------------------------------------------------------------------------------- 1 | :description: Execute an initial command at startup. 2 | 3 | 4 | [[initial-command]] 5 | = Initial command 6 | 7 | When you first open Neo4j Browser and connect to a Neo4j DBMS, it automatically executes the command: 8 | 9 | [source, browser command, role="noheader"] 10 | ---- 11 | :play start 12 | ---- 13 | 14 | The `:play start` browser command outputs an entry page containing interactive guides that you can use to learn some Neo4j concepts, try Neo4j with live data (MovieGraph), and write some basic Cypher queries. 15 | 16 | Besides, you can also navigate to the *Help & Learn* drawer in the sidebar, where you will find more information about useful commands, a lot of built-in guides, and links to documentation. 17 | 18 | If you want to change the initially executed command, navigate to the *Browser Settings* drawer in the sidebar and add a new value for the *Initial command to execute* setting. 19 | 20 | [TIP] 21 | ==== 22 | For more information on how to enter and run Cypher queries and commands, see xref:visual-tour.adoc#editor[Cypher editor]. + 23 | For more information about Cypher, see link:https://neo4j.com/docs/cypher-manual/{neo4j-version}/[Cypher Manual^] and link:https://neo4j.com/docs/cypher-refcard/{neo4j-version}/[Neo4j Cypher Refcard^]. 24 | ==== 25 | 26 | -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "browser-manual", 3 | "version": "1.0.0", 4 | "description": "= Neo4j Browser Manual", 5 | "main": "server.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "nodemon -e adoc --exec \"npm run build && npm run serve\"", 9 | "serve": "node server.js", 10 | "build": "antora --stacktrace preview.yml", 11 | "lint": "node scripts/lint-links.js" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/neo4j/neo4j-browser/.git" 16 | }, 17 | "keywords": [], 18 | "author": "", 19 | "license": "ISC", 20 | "bugs": { 21 | "url": "https://github.com/neo4j/neo4j-browser/issues" 22 | }, 23 | "homepage": "https://github.com/neo4j/neo4j-browser/docs#readme", 24 | "dependencies": { 25 | "@antora/cli": "^3.0.0", 26 | "@antora/site-generator-default": "^3.0.0", 27 | "@neo4j-antora/antora-add-notes": "^0.1.6", 28 | "@neo4j-antora/antora-modify-sitemaps": "^0.4.2", 29 | "@neo4j-documentation/macros": "^1.0.0", 30 | "@neo4j-documentation/remote-include": "^1.0.0" 31 | }, 32 | "devDependencies": { 33 | "express": "^4.17.1", 34 | "nodemon": "^2.0.15" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /docs/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | 3 | const app = express() 4 | app.use(express.static('./build/site')) 5 | 6 | app.use('/static/assets', express.static('./build/site/assets')) 7 | 8 | app.get('/', (req, res) => res.redirect('/docs/')) 9 | 10 | app.listen(8002, () => console.log('📘 http://localhost:8002')) 11 | -------------------------------------------------------------------------------- /e2e_tests/files/import.csv: -------------------------------------------------------------------------------- 1 | name,born,city,comment 2 | Molly Hane,2015,Borås,Food please 3 | Stella Hane,2012,Borås,"I like unicorns, and ""flying unicorns""" 4 | Oskar Hane,1980,Borås, 5 | -------------------------------------------------------------------------------- /e2e_tests/plugins/index.ts: -------------------------------------------------------------------------------- 1 | module.exports = () => {} 2 | -------------------------------------------------------------------------------- /e2e_tests/support/defaults.ts: -------------------------------------------------------------------------------- 1 | /* global Cypress */ 2 | 3 | Cypress.config('serverVersion', parseFloat(Cypress.env('server')) || 4.3) 4 | Cypress.config('serverEdition', Cypress.env('edition') || 'enterprise') 5 | 6 | Cypress.config( 7 | 'includeImportTests', 8 | Cypress.env('include-import-tests') || false 9 | ) 10 | 11 | // Don't set initial pw on local or aura 12 | Cypress.config( 13 | 'setInitialPassword', 14 | !['local', 'aura'].includes(Cypress.env('E2E_TEST_ENV')) 15 | ) 16 | 17 | Cypress.config('url', '/') 18 | Cypress.config('password', Cypress.env('browser-password') || 'newpassword') 19 | Cypress.config( 20 | 'boltHost', 21 | Cypress.env('bolt-url') 22 | ? removeUriScheme(Cypress.env('bolt-url')).split(':')[0] 23 | : 'localhost' 24 | ) 25 | Cypress.config( 26 | 'boltPort', 27 | Cypress.env('bolt-url') 28 | ? removeUriScheme(Cypress.env('bolt-url')).split(':')[1] 29 | : '7687' 30 | ) 31 | Cypress.config( 32 | 'boltUrl', 33 | Cypress.env('bolt-url') 34 | ? Cypress.env('bolt-url') 35 | : 'bolt://' + Cypress.config('boltHost') + ':' + Cypress.config('boltPort') 36 | ) 37 | 38 | function removeUriScheme(uri = '') { 39 | const SEPARATOR = '://' 40 | const [, ...rest] = uri.includes(SEPARATOR) ? uri.split(SEPARATOR) : [, uri] 41 | return rest.join(SEPARATOR) 42 | } 43 | -------------------------------------------------------------------------------- /e2e_tests/support/index.ts: -------------------------------------------------------------------------------- 1 | import './commands' 2 | import './defaults' 3 | 4 | /* global Cypress */ 5 | before(() => { 6 | const log = console.error 7 | console.error = (e: any) => { 8 | const error = JSON.stringify(e) 9 | log(error) 10 | cy.log(`Got error: ${error}`) 11 | cy.writeFile('e2e_tests/error.log', error) 12 | throw new Error('Stopped because of console error') 13 | } 14 | }) 15 | 16 | function abortEarly() { 17 | if ( 18 | this.currentTest.state === 'failed' && 19 | this.currentTest.currentRetry() === this.currentTest.retries() 20 | ) { 21 | Cypress.runner.stop() 22 | } 23 | } 24 | 25 | beforeEach(abortEarly) 26 | afterEach(abortEarly) 27 | -------------------------------------------------------------------------------- /e2e_tests/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "baseUrl": "../node_modules", 5 | "target": "es5", 6 | "lib": ["es6", "dom", "es2017"], 7 | "types": ["cypress", "node"], 8 | "allowJs": true, 9 | "noEmit": true 10 | }, 11 | "include": ["**/*.ts"] 12 | } 13 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2002-2021 "Neo4j," 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | module.exports = { 22 | plugins: { 23 | precss: {}, 24 | autoprefixer: { 25 | browsers: ['last 1 version', 'not ie > 0'] 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /scripts/convert-to-canary-manifest.js: -------------------------------------------------------------------------------- 1 | const { 2 | loadDataFromFile, 3 | writeDataToFile 4 | } = require('../build_scripts/generate-manifest-helpers') 5 | 6 | const manifestPath = process.argv[2] 7 | if (!manifestPath) { 8 | console.error('Please provide path to the manifest to be replaced') 9 | process.exit(1) 10 | } 11 | 12 | const manifest = loadDataFromFile(manifestPath) 13 | 14 | const canaryManifest = { 15 | ...manifest, 16 | ...{ 17 | name: 'Neo4j Browser Canary', 18 | short_name: 'Neo4j Browser Canary', 19 | icons: [ 20 | { 21 | src: './assets/images/device-icons/neo4j-browser-canary.svg', 22 | type: 'svg' 23 | } 24 | ] 25 | } 26 | } 27 | 28 | writeDataToFile(manifestPath, canaryManifest) 29 | -------------------------------------------------------------------------------- /scripts/generate_licenses.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | NOTICE_FILE="./NOTICE.txt" 4 | NOTICE_FILE_XML="./NOTICE.xml" 5 | LICENSES_FILE="./LICENSES.txt" 6 | 7 | # Generate NOTICE.txt with list of dependencies and their license 8 | # Limit to runtime dependencies 9 | cat ./scripts/static_data/NOTICE_HEADER.txt > $NOTICE_FILE && yarn licenses list --production >> $NOTICE_FILE; 10 | cat ./scripts/static_data/NOTICE_XML_HEADER.txt > $NOTICE_FILE_XML && yarn licenses list --production --json --no-progress | node ./scripts/generate_licenses_xml.js >> $NOTICE_FILE_XML; 11 | 12 | # Generate LICENSES.txt with list of full text version of the licenses that dependecies use 13 | # Limit to runtime licenses 14 | cat ./scripts/static_data/LICENSES_HEADER.txt > $LICENSES_FILE && yarn licenses generate-disclaimer --production >> $LICENSES_FILE; 15 | 16 | exit 0; -------------------------------------------------------------------------------- /scripts/static_data/LICENSES_HEADER.txt: -------------------------------------------------------------------------------- 1 | This file contains the full license text of the included third party 2 | libraries. For an overview of the licenses see the NOTICE.txt file. 3 | 4 | 5 | ----- -------------------------------------------------------------------------------- /scripts/static_data/NOTICE_HEADER.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) "Neo4j," 2 | Neo4j Sweden AB [http://neo4j.com] 3 | 4 | This product includes software ("Software") developed by Neo Technology. 5 | 6 | The copyright in the bundled Neo4j graph database (including the 7 | Software) is owned by Neo Technology. The Software developed and owned 8 | by Neo Technology is licensed under the GNU GENERAL PUBLIC LICENSE 9 | Version 3 (http://www.fsf.org/licensing/licenses/gpl-3.0.html) ("GPL") 10 | to all third parties and that license, as required by the GPL, is 11 | included in the LICENSE.txt file. 12 | 13 | However, if you have executed an End User Software License and Services 14 | Agreement or an OEM Software License and Support Services Agreement, or 15 | another commercial license agreement with Neo Technology or one of its 16 | affiliates (each, a "Commercial Agreement"), the terms of the license in 17 | such Commercial Agreement will supersede the GPL and you may use the 18 | software solely pursuant to the terms of the relevant Commercial 19 | Agreement. 20 | 21 | Full license texts are found in LICENSES.txt. 22 | 23 | Third-party licenses 24 | -------------------- 25 | -------------------------------------------------------------------------------- /scripts/static_data/NOTICE_XML_HEADER.txt: -------------------------------------------------------------------------------- 1 | 2 | 23 | -------------------------------------------------------------------------------- /scripts/static_data/external_dependencies.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | ['font-awesome', 'Font Awesome', 'SIL OFL 1.1'], 3 | ['font-awesome-css', 'Font Awesome CSS', 'MIT'], 4 | ['bootstrap', 'bootstrap', 'MIT'], 5 | // ['inconsolata', 'Inconsolata Font', 'SIL OFL 1.1'], 6 | ['fira-code', 'Fira Code', 'SIL OFL 1.1'], 7 | ['open-sans', 'Open Sans Font', 'SIL OFL 1.1'] 8 | ] 9 | -------------------------------------------------------------------------------- /src/browser/components/Accordion/styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const BorderedWrapper = styled.div` 4 | border-left: 1px solid rgba(34, 36, 38, 0.15); 5 | border-right: 1px solid rgba(34, 36, 38, 0.15); 6 | border-bottom: 1px solid rgba(34, 36, 38, 0.15); 7 | ` 8 | 9 | export const TitleBar = styled.div` 10 | border-top: 1px solid rgba(34, 36, 38, 0.15); 11 | height: 39px; 12 | display: flex; 13 | cursor: pointer; 14 | ` 15 | 16 | export const ContentArea = styled.div` 17 | background-color: ${props => props.theme.accordionContentBackground}; 18 | min-height: 50px; 19 | ` 20 | -------------------------------------------------------------------------------- /src/browser/components/Centered.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import styled from 'styled-components' 21 | 22 | const Centered = styled.div` 23 | width: 100%; 24 | text-align: center; 25 | ` 26 | export default Centered 27 | -------------------------------------------------------------------------------- /src/browser/components/Ellipsis.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import styled from 'styled-components' 21 | 22 | const Ellipsis = styled.div` 23 | text-overflow: ellipsis; 24 | overflow: hidden; 25 | white-space: nowrap; 26 | ` 27 | export default Ellipsis 28 | -------------------------------------------------------------------------------- /src/browser/components/InputEnterStepping/__snapshots__/InputEnterStepping.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`focuses correctly and submits on enter in last input 1`] = ` 4 |
5 | 8 | 11 |
12 | `; 13 | 14 | exports[`renders the render prop 1`] = ` 15 |
16 |
17 | hello 18 |
19 |
20 | `; 21 | 22 | exports[`submits on button click 1`] = ` 23 |
24 | 27 | 30 | 33 |
34 | `; 35 | -------------------------------------------------------------------------------- /src/browser/components/SavedScripts/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import SavedScripts from './SavedScripts' 21 | 22 | export default SavedScripts 23 | export { getScriptDisplayName, defaultNameFromDisplayContent } from './utils' 24 | -------------------------------------------------------------------------------- /src/browser/components/SavedScripts/utils.test.ts: -------------------------------------------------------------------------------- 1 | import { getScriptDisplayName } from './utils' 2 | 3 | describe('saved-scripts.utils', () => { 4 | describe('getScriptDisplayName', () => { 5 | const scriptNoNameNoCommentSingleLine = { 6 | content: 'Foo bar' 7 | } 8 | const scriptNoNameNoCommentMultiLine = { 9 | content: 'Foo bar\nBar baz' 10 | } 11 | const scriptNoNameWithComment = { 12 | content: '//Comment\nBar baz' 13 | } 14 | const scriptNoNameWithCommentWhiteSpace = { 15 | content: '// Comment\nBar baz' 16 | } 17 | 18 | test('Uses content as name when nothing else available', () => { 19 | expect(getScriptDisplayName(scriptNoNameNoCommentSingleLine)).toBe( 20 | 'Foo bar' 21 | ) 22 | }) 23 | 24 | test('Uses only first line of content', () => { 25 | expect(getScriptDisplayName(scriptNoNameNoCommentMultiLine)).toBe( 26 | 'Foo bar' 27 | ) 28 | }) 29 | 30 | test('Uses comment as name when available', () => { 31 | expect(getScriptDisplayName(scriptNoNameWithComment)).toBe('Comment') 32 | }) 33 | 34 | test('Uses comment as name when available, stripping leading whitespace', () => { 35 | expect(getScriptDisplayName(scriptNoNameWithCommentWhiteSpace)).toBe( 36 | 'Comment' 37 | ) 38 | }) 39 | }) 40 | }) 41 | -------------------------------------------------------------------------------- /src/browser/components/SavedScripts/utils.ts: -------------------------------------------------------------------------------- 1 | import { Favorite } from 'shared/modules/favorites/favoritesDuck' 2 | 3 | export function getScriptDisplayName(script: Favorite): string { 4 | return defaultNameFromDisplayContent(script.content) 5 | } 6 | 7 | export function defaultNameFromDisplayContent(content: string): string { 8 | const nameLine = content.split('\n')[0] 9 | return nameLine.startsWith('//') ? nameLine.substr(2).trimLeft() : nameLine 10 | } 11 | -------------------------------------------------------------------------------- /src/browser/components/Text.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import styled from 'styled-components' 21 | 22 | export const Lead = styled.p` 23 | font-weight: 300; 24 | font-size: 15px; 25 | line-height: 22px; 26 | font-family: ${props => props.theme.primaryFontFamily}; 27 | color: ${props => props.theme.headerText}; 28 | ` 29 | -------------------------------------------------------------------------------- /src/browser/components/buttons/index.test.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import { render } from '@testing-library/react' 21 | import React from 'react' 22 | 23 | import { CloseButton } from './index' 24 | 25 | test('CloseButton renders', () => { 26 | render() 27 | }) 28 | -------------------------------------------------------------------------------- /src/browser/components/buttons/style.css: -------------------------------------------------------------------------------- 1 | .tooltip { 2 | position: absolute; 3 | background-color: grey; 4 | } 5 | .action { 6 | padding: 0px !important; 7 | font-size: 0.8em !important; 8 | min-width: 50px !important; 9 | } 10 | .remove { 11 | color: #bcc0c9 !important; 12 | } 13 | -------------------------------------------------------------------------------- /src/browser/components/headers/Headers.test.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import { render } from '@testing-library/react' 21 | import React from 'react' 22 | 23 | import { H3 } from './Headers' 24 | 25 | describe('headers', () => { 26 | test('H3 renders', () => { 27 | render(

) 28 | }) 29 | }) 30 | -------------------------------------------------------------------------------- /src/browser/components/headers/Headers.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import styled from 'styled-components' 21 | 22 | export const H3 = styled.h3` 23 | font-weight: 500; 24 | font-size: 24px; 25 | font-family: ${props => props.theme.primaryFontFamily}; 26 | color: ${props => props.theme.headerText}; 27 | ` 28 | -------------------------------------------------------------------------------- /src/browser/components/headers/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import { H3 } from './Headers' 21 | 22 | export { H3 } 23 | -------------------------------------------------------------------------------- /src/browser/components/headers/style.css: -------------------------------------------------------------------------------- 1 | .h1, 2 | .h2, 3 | .h3, 4 | .h4 { 5 | } 6 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/add-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/app-window-code.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/arrow-down.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/arrow-left.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/arrow-right.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/arrow-up.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/back-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/button-refresh-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | button-refresh-arrow 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/canny-feedback.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/canny-notifications.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | close 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/cloud-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | cloud-check 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/cloud-remove.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | cloud-remove 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/cloud-sync.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | cloud-sync 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/cog.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | cog 14 | 16 | 17 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/controls-play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | controls-play 14 | 16 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/database-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | database-check 14 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/download-bottom.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | download-bottom 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/eraser.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | eraser-2 14 | 16 | 18 | 19 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/expand.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | expand 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/external-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/favorite.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/files.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 10 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/floppy-disk.svg: -------------------------------------------------------------------------------- 1 | 3 | floppy-disk 4 | 6 | 7 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/folder-empty.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/frame-close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/frame-collapse.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/frame-expand.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/frame-fullscreen.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/frame-pin.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/frame-shrink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/hollow-run-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | hollow-run 3 | 6 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/layers-hide.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | layers-hide 14 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/lock-unlock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | lock-unlock 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/monitor-heart-beat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | monitor-heart-beat 14 | 15 | 17 | 19 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/navigation-menu-vertical.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | navigation-menu-vertical 4 | 5 | 8 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/pencil.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | pencil 14 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/pin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | pin 14 | 16 | 17 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/rating-star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | rating-star 14 | 16 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/run-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/save-favorite.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/save.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/shop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | shop-1 14 | 15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/shrink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | shrink-2 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/skip-prev.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/stop-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/table.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | table 14 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/task-list-download.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | 12 | task-list-download 13 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/text.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | Text2 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/browser/components/icons/svgs/update-favorite.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /src/browser/documentation/help/partials/admin-on-systemdb.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import React from 'react' 21 | 22 | export default function AdminOnSystemDb() { 23 | return ( 24 |

25 | A note on system database 26 |
27 | Neo4j has a complex security model stored in the system graph, maintained 28 | in a special database called the system database. All 29 | administrative commands need to be executed against the{' '} 30 | system database. 31 |

32 | ) 33 | } 34 | -------------------------------------------------------------------------------- /src/browser/documentation/help/partials/params-on-systemdb.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import React from 'react' 21 | 22 | export default function ParamsOnSystemDb() { 23 | return ( 24 |

25 | A note on system database 26 |
27 | If you are using a multi-database DBMS, parameters cannot be declared when 28 | using the system database. Switch to a different database and declare, 29 | then switch back to system database and use them. 30 |

31 | ) 32 | } 33 | -------------------------------------------------------------------------------- /src/browser/documentation/sidebar-guides/styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const NoBulletsUl = styled.div` 4 | list-style-type: none; 5 | ` 6 | 7 | export const MarginTopLi = styled.li` 8 | margin-top: 15px; 9 | ` 10 | 11 | export const MarginBottomLi = styled.li` 12 | margin-bottom: 15px; 13 | ` 14 | 15 | export const MarginTop = styled.div<{ pixels?: number }>` 16 | margin-top: ${props => (props.pixels === undefined ? 5 : props.pixels)}px; 17 | ` 18 | 19 | export const LinkContainer = styled.div` 20 | margin-top: 15px; 21 | display: flex; 22 | justify-content: flex-end; 23 | width: 100%; 24 | ` 25 | 26 | export const Clickable = styled.span` 27 | cursor: pointer; 28 | color: ${props => props.theme.error}; 29 | 30 | visibility: hidden; 31 | font-size: 14px; 32 | margin-left: 20px; 33 | ` 34 | 35 | export const GuideListEntry = styled.li` 36 | margin-bottom: 15px; 37 | :hover ${Clickable} { 38 | visibility: visible; 39 | } 40 | ` 41 | -------------------------------------------------------------------------------- /src/browser/hooks/testUtils.ts: -------------------------------------------------------------------------------- 1 | export function createMediaListenerMatch(media: any) { 2 | return { 3 | matches: true, 4 | media 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/browser/images/Favorites.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/Favorites.mp4 -------------------------------------------------------------------------------- /src/browser/images/Keystrokes.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/Keystrokes.mp4 -------------------------------------------------------------------------------- /src/browser/images/ProjectFiles.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/ProjectFiles.mp4 -------------------------------------------------------------------------------- /src/browser/images/ReusableFrame.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/ReusableFrame.mp4 -------------------------------------------------------------------------------- /src/browser/images/SidebarDB_Iinfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/SidebarDB_Iinfo.png -------------------------------------------------------------------------------- /src/browser/images/Stream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/Stream.png -------------------------------------------------------------------------------- /src/browser/images/books.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/books.png -------------------------------------------------------------------------------- /src/browser/images/community.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/community.jpg -------------------------------------------------------------------------------- /src/browser/images/device-icons/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/android-icon-144x144.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/android-icon-192x192.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/android-icon-36x36.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/android-icon-48x48.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/android-icon-72x72.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/android-icon-96x96.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/apple-icon-114x114.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/apple-icon-120x120.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/apple-icon-144x144.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/apple-icon-152x152.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/apple-icon-180x180.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/apple-icon-57x57.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/apple-icon-60x60.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/apple-icon-72x72.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/apple-icon-76x76.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/apple-icon-precomposed.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/apple-icon.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /src/browser/images/device-icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/favicon-16x16.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/favicon-32x32.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/favicon-96x96.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/favicon.ico -------------------------------------------------------------------------------- /src/browser/images/device-icons/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Neo4j Browser", 3 | "icons": [ 4 | { 5 | "src": "/images/device-icons/android-icon-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "/images/device-icons/android-icon-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "/images/device-icons/android-icon-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "/images/device-icons/android-icon-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "/images/device-icons/android-icon-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "/images/device-icons/android-icon-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /src/browser/images/device-icons/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/ms-icon-144x144.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/ms-icon-150x150.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/ms-icon-310x310.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/device-icons/ms-icon-70x70.png -------------------------------------------------------------------------------- /src/browser/images/device-icons/neo4j-browser-canary.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 13 | 14 | 15 | 17 | 18 | 19 | 22 | 23 | 24 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/browser/images/device-icons/neo4j-browser.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 13 | 14 | 15 | 17 | 18 | 19 | 22 | 23 | 24 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/browser/images/labeled_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/labeled_node.png -------------------------------------------------------------------------------- /src/browser/images/more_nodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/more_nodes.png -------------------------------------------------------------------------------- /src/browser/images/neo4j-favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/neo4j-favicon.ico -------------------------------------------------------------------------------- /src/browser/images/northwind/customer-orders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/northwind/customer-orders.png -------------------------------------------------------------------------------- /src/browser/images/northwind/order-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/northwind/order-graph.png -------------------------------------------------------------------------------- /src/browser/images/northwind/product-category-supplier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/northwind/product-category-supplier.png -------------------------------------------------------------------------------- /src/browser/images/northwind/product-graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/northwind/product-graph.png -------------------------------------------------------------------------------- /src/browser/images/one_node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/one_node.png -------------------------------------------------------------------------------- /src/browser/images/rel-props.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/rel-props.png -------------------------------------------------------------------------------- /src/browser/images/relationships.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/relationships.png -------------------------------------------------------------------------------- /src/browser/images/screen_code_frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/screen_code_frame.png -------------------------------------------------------------------------------- /src/browser/images/screen_cypher_warn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/screen_cypher_warn.png -------------------------------------------------------------------------------- /src/browser/images/screen_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/screen_editor.png -------------------------------------------------------------------------------- /src/browser/images/screen_sidebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/screen_sidebar.png -------------------------------------------------------------------------------- /src/browser/images/screen_stream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/images/screen_stream.png -------------------------------------------------------------------------------- /src/browser/index.test.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import { render } from '@testing-library/react' 21 | import React from 'react' 22 | 23 | import AppInit from './AppInit' 24 | 25 | describe('browser entry', () => { 26 | it('renders', () => { 27 | render() 28 | }) 29 | }) 30 | -------------------------------------------------------------------------------- /src/browser/manifest-base.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Neo4j Browser", 3 | "short_name": "Neo4j Browser", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#fff", 7 | "icons": [ 8 | { 9 | "src": "./assets/images/device-icons/neo4j-browser.svg", 10 | "type": "svg" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /src/browser/modules/ClickToCode/__snapshots__/index.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`ClickToCode does not render if no children 1`] = `
`; 4 | 5 | exports[`ClickToCode renders all children 1`] = ` 6 |
7 | 10 |
11 | 12 | hello 13 | 14 | hi! 15 |
16 |
17 |
18 | `; 19 | 20 | exports[`ClickToCode renders children as code if no code is provided 1`] = ` 21 |
22 | 25 | hellohi! 26 | 27 |
28 | `; 29 | 30 | exports[`ClickToCode renders code as the code when code is available 1`] = ` 31 |
32 | 35 | hello 36 | 37 |
38 | `; 39 | 40 | exports[`ClickToCode renders if no CodeComponent is provided 1`] = `
`; 41 | -------------------------------------------------------------------------------- /src/browser/modules/ClickToCode/styled.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import styled from 'styled-components' 21 | 22 | export const StyledCodeBlock = styled.code` 23 | background-color: black; 24 | color: white; 25 | cursor: pointer; 26 | border: none; 27 | border-radius: 4px; 28 | padding: 2px 4px; 29 | ` 30 | -------------------------------------------------------------------------------- /src/browser/modules/DBMSInfo/style_meta.css: -------------------------------------------------------------------------------- 1 | .section { 2 | padding: 10px 0 !important; 3 | color: white !important; 4 | } 5 | 6 | .wrapper { 7 | display: flex; 8 | flex-wrap: wrap; 9 | } 10 | 11 | .label-wrapper { 12 | .chip { 13 | border-radius: 20px !important; 14 | } 15 | } 16 | 17 | .relationship-wrapper { 18 | .chip { 19 | border-radius: 3px !important; 20 | } 21 | } 22 | 23 | .property-key-wrapper { 24 | .chip { 25 | border-radius: 2px !important; 26 | background-color: transparent !important; 27 | border: 1px solid #ccc !important; 28 | span { 29 | color: #ccc !important; 30 | } 31 | } 32 | } 33 | 34 | .chip { 35 | margin: 4px !important; 36 | padding: 0 !important; 37 | span { 38 | line-height: normal !important; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/browser/modules/Docs/MD/splitMd.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | export const splitMdSlides = (md = '') => md.split(/\r?\n---\r?\n/) 22 | export const splitMdRows = (md = '') => md.split('-| - |-') 23 | export const splitMdColumns = (md = '') => md.split('-| | |-') 24 | -------------------------------------------------------------------------------- /src/browser/modules/Docs/MD/styled.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import styled from 'styled-components' 21 | 22 | export const StyledSlide = styled.div` 23 | display: flex; 24 | flex-direction: column; 25 | padding: 20px; 26 | ` 27 | export const StyledRow = styled.div` 28 | display: flex; 29 | flex-direction: row; 30 | ` 31 | export const StyledColumn = styled.div` 32 | width: 100%; 33 | padding: 0 20px; 34 | ` 35 | -------------------------------------------------------------------------------- /src/browser/modules/FeatureToggle/FeatureToggle.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { Consumer } from './FeatureToggleProvider' 4 | 5 | const FeatureToggle = ({ name, on, off }: any) => { 6 | return ( 7 | 8 | {(showFeature: any) => { 9 | if (!name) { 10 | throw new Error( 11 | 'No "name" property provided to FeatureToggle component.' 12 | ) 13 | } 14 | const shouldShow = showFeature(name) 15 | if (!shouldShow && !off) { 16 | return null 17 | } 18 | if (shouldShow && !on) { 19 | throw new Error( 20 | `No "on" property available for this enabled feature: ${name} for FeatureToggle component.` 21 | ) 22 | } 23 | return shouldShow ? on : off 24 | }} 25 | 26 | ) 27 | } 28 | 29 | export default FeatureToggle 30 | -------------------------------------------------------------------------------- /src/browser/modules/Frame/FrameSidebar.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import React from 'react' 21 | 22 | import { StyledFrameSidebar } from './styled' 23 | 24 | const FrameSidebar = (props: any) => { 25 | if (!props || !props.children) return null 26 | return {props.children} 27 | } 28 | 29 | export default FrameSidebar 30 | -------------------------------------------------------------------------------- /src/browser/modules/Frame/FrameSuccess.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import React from 'react' 21 | 22 | const FrameSuccess = (props: any) => { 23 | if (!props || !props.message) return null 24 | return ( 25 | 26 | {props.message} 27 | 28 | ) 29 | } 30 | 31 | export default FrameSuccess 32 | -------------------------------------------------------------------------------- /src/browser/modules/GuideCarousel/styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const PaginationItem = styled.span<{ active: boolean }>` 4 | padding: 0 3px; 5 | color: ${props => (props.active ? 'white' : '#888')}; 6 | cursor: pointer; 7 | ` 8 | 9 | export const Dots = styled.span` 10 | color: #888; 11 | ` 12 | -------------------------------------------------------------------------------- /src/browser/modules/Sidebar/docsUtils.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import semver from 'semver' 21 | 22 | export const formatDocVersion = (v: string | null = ''): string => { 23 | if (!v || !semver.valid(v)) { 24 | // All non-strings return 25 | return 'current' 26 | } 27 | if (semver.compareLoose(v, '6.0.0') === 1) { 28 | return 'current' 29 | } else if (semver.prerelease(v)) { 30 | return `${semver.major(v)}.${semver.minor(v)}-preview` 31 | } 32 | return `${semver.major(v)}.${semver.minor(v)}` || 'current' 33 | } 34 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/Auth/utils.test.ts: -------------------------------------------------------------------------------- 1 | import { getRandomWords } from './utils' 2 | 3 | describe('getRandomWords', () => { 4 | test('gives list of random words', () => { 5 | const oneWord = getRandomWords(1) 6 | const threeWords = getRandomWords(3) 7 | 8 | expect(getRandomWords(0)).toEqual([]) 9 | expect(oneWord.length).toEqual(1) 10 | expect(oneWord[0].length).toBeGreaterThan(2) 11 | expect(threeWords.length).toEqual(3) 12 | threeWords.forEach(word => expect(word.length).toBeGreaterThan(2)) 13 | }) 14 | }) 15 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/Auth/utils.ts: -------------------------------------------------------------------------------- 1 | import words from './words' 2 | 3 | export function getRandomWords(count: number): string[] { 4 | return Array.from({ length: count }).map( 5 | () => words[Math.floor(Math.random() * words.length)] 6 | ) 7 | } 8 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/AutoRefresh/toggleStyles.css: -------------------------------------------------------------------------------- 1 | .toggle-check-input { 2 | width: 1px; 3 | height: 1px; 4 | position: absolute; 5 | display: none; 6 | } 7 | 8 | .toggle-check-text { 9 | display: inline-block; 10 | position: relative; 11 | text-transform: uppercase; 12 | background: #ccc; 13 | padding: 0.25em 0.5em 0.25em 1.75em; 14 | border-radius: 1em; 15 | width: 50px; 16 | height: 21px; 17 | color: #fff; 18 | cursor: pointer; 19 | transition: background-color 0.15s; 20 | line-height: initial; 21 | } 22 | .toggle-check-text:after { 23 | content: ' '; 24 | display: block; 25 | background: #fff; 26 | width: 1.1em; 27 | height: 1.1em; 28 | border-radius: 1em; 29 | position: absolute; 30 | left: 0.3em; 31 | top: 0.25em; 32 | transition: left 0.15s, margin-left 0.15s; 33 | } 34 | .toggle-check-text:before { 35 | font-size: 90%; 36 | content: 'OFF'; 37 | } 38 | .toggle-check-input:checked ~ .toggle-check-text { 39 | color: #319113; 40 | padding-left: 0.5em; 41 | padding-right: 2em; 42 | } 43 | .toggle-check-input:checked ~ .toggle-check-text:before { 44 | font-size: 90%; 45 | content: 'ON'; 46 | } 47 | 48 | .toggle-check-input:checked ~ .toggle-check-text:after { 49 | left: 100%; 50 | margin-left: -1.4em; 51 | } 52 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/ErrorsView/__snapshots__/ErrorsStatusbar.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`ErrorsStatusbar displays error 1`] = ` 4 |
5 |
8 | 12 | 16 | 17 | Test.Error: Test error description 18 | 19 |
20 |
21 | `; 22 | 23 | exports[`ErrorsStatusbar displays nothing if no error 1`] = `
`; 24 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/PlanView.styled.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import styled from 'styled-components' 21 | 22 | export const PlanSVG = styled.svg` 23 | width: 100%; 24 | ` 25 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/assets/filter.svg: -------------------------------------------------------------------------------- 1 | 2 | Asset 5 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/assets/group-by.svg: -------------------------------------------------------------------------------- 1 | 2 | Asset 7 3 | 5 | 7 | 9 | 11 | 13 | 15 | 16 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/assets/sort.svg: -------------------------------------------------------------------------------- 1 | 2 | Asset 4 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/assets/sort1.svg: -------------------------------------------------------------------------------- 1 | 2 | Asset 2 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/assets/sort2.svg: -------------------------------------------------------------------------------- 1 | 2 | Asset 3 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/components/renderers/aggregates/value-aggregate.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | import React from 'react' 18 | 19 | import { ICellProps } from '../index' 20 | 21 | export default function ValueAggregate({ cell: { value } }: ICellProps) { 22 | return {value} Values 23 | } 24 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/components/renderers/cells/date-cell.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | import React from 'react' 18 | 19 | import { ICellProps } from '../index' 20 | 21 | export default function DateCell({ cell }: ICellProps) { 22 | const { value = '' } = cell 23 | 24 | return ( 25 | 26 | {new Date(value).toLocaleString()} 27 | 28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/components/renderers/cells/json-cell.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | import React from 'react' 18 | 19 | import { ICellProps } from '../index' 20 | 21 | export default function JSONCell({ cell }: ICellProps) { 22 | const { value = '' } = cell 23 | 24 | return ( 25 |
26 |       {JSON.stringify(value, null, 2)}
27 |     
28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/components/renderers/cells/number-cell.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | import React from 'react' 18 | 19 | import { ICellProps } from '../index' 20 | 21 | export default function NumberCell({ cell }: ICellProps) { 22 | const { value = '' } = cell 23 | 24 | return ( 25 | 26 | {Number(value).toLocaleString()} 27 | 28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/components/renderers/cells/text-cell.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | import React from 'react' 18 | 19 | import { ICellProps } from '../index' 20 | 21 | export default function TextCell({ cell }: ICellProps) { 22 | const { value = '' } = cell 23 | 24 | return ( 25 | 26 | {String(value)} 27 | 28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/components/renderers/filter.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | import React from 'react' 18 | import { Form } from 'semantic-ui-react' 19 | 20 | import { IFilterFieldProps } from './index' 21 | 22 | export default function Filter({ column, onChange }: IFilterFieldProps) { 23 | if (!column) return null 24 | 25 | const { Filter: ColumnFilter } = column 26 | 27 | return ( 28 | 29 | 30 | 31 | ) 32 | } 33 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/components/toolbar/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | export { default as Toolbar } from './toolbar' 18 | export { default as FilterableToolbar } from './filterable.toolbar' 19 | export { default as GroupableToolbar } from './groupable.toolbar' 20 | export { default as SelectableToolbar } from './selectable.toolbar' 21 | export { default as SortableToolbar } from './sortable.toolbar' 22 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/utils/array-has-items.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | export default function arrayHasItems(arr: any[]) { 18 | return Array.isArray(arr) && arr.length > 0 19 | } 20 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/utils/get-final-depth-subrows.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | import { flatMap } from 'lodash-es' 18 | 19 | import arrayHasItems from './array-has-items' 20 | 21 | export default function getFinalDepthSubRows(row: any): any[] { 22 | const { subRows = [] } = row 23 | 24 | if (arrayHasItems(subRows)) { 25 | return flatMap(subRows, getFinalDepthSubRows) 26 | } 27 | 28 | return [row.values] 29 | } 30 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/utils/get-row-number.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | export default function getRowNumber( 18 | rowIndex: number, 19 | pageIndex: number, 20 | pageSize: number 21 | ) { 22 | return rowIndex + (pageIndex * pageSize + 1) 23 | } 24 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/utils/get-semantic-table-props.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | import { pick } from 'lodash-es' 18 | 19 | import { SEMANTIC_TABLE_PROPS } from '../constants' 20 | 21 | export default function getSemanticTableProps(props: any) { 22 | return pick(props, SEMANTIC_TABLE_PROPS) 23 | } 24 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/utils/is-action-available.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | import { some } from 'lodash-es' 18 | 19 | import { RelatableAction } from '../relatable.types' 20 | 21 | export default function isActionAvailable( 22 | availableActions: RelatableAction[], 23 | name: string 24 | ): boolean { 25 | return some(availableActions, ([actionName]) => actionName === name) 26 | } 27 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/utils/is-last-index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | export default function isLastIndex(arr: any[], index: number) { 18 | return index === arr.length - 1 19 | } 20 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/RelatableView/relatable/utils/set-has-items.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | export default function setHasItems(set: Set) { 18 | return set && set.constructor === Set && set.size > 0 19 | } 20 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherFrame/VisualizationView/__snapshots__/VisualizationView.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`Visualization renders empty content 1`] = `
`; 4 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/CypherScriptFrame/styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import { StyledFrameCommand } from 'browser/modules/Frame/styled' 4 | import { StyledStatsBar } from 'browser/modules/Stream/styled' 5 | 6 | export const WrapperCenter = styled.div` 7 | display: flex; 8 | width: 90%; 9 | margin: 35px auto; 10 | ` 11 | 12 | export const ContentSizer = styled.div` 13 | flex: 1; 14 | min-width: 0; 15 | ` 16 | 17 | export const MessageArea = styled.pre` 18 | padding-left: 10px; 19 | background-color: ${props => props.theme.preBackground}; 20 | white-space: pre-wrap; 21 | ` 22 | 23 | export const PaddedStatsBar = styled(StyledStatsBar)` 24 | padding: 0 15px 15px 24px; 25 | ` 26 | 27 | export const PointerFrameCommand = styled(StyledFrameCommand)` 28 | cursor: pointer; 29 | ` 30 | 31 | export const WarningSpan = styled.span` 32 | color: ${props => props.theme.warning}; 33 | ` 34 | export const ErrorSpan = styled.span` 35 | color: ${props => props.theme.error}; 36 | ` 37 | export const SuccessSpan = styled.span` 38 | color: ${props => props.theme.success}; 39 | ` 40 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/Extras/SnakeFrame/Score.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const Score = ({ score, initialLoad, playing }: any) => { 4 | if (initialLoad) { 5 | return null 6 | } 7 | return ( 8 |

9 | {playing ? 'Current' : 'Final'} score: {score} 10 |

11 | ) 12 | } 13 | 14 | export default Score 15 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/Extras/SnakeFrame/Snake.test.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import { fireEvent, render } from '@testing-library/react' 21 | import React from 'react' 22 | 23 | import Snake from './Snake' 24 | import { SnakeFrame } from './index' 25 | 26 | test('Frame renders', () => { 27 | const { getByText } = render() 28 | const startBtn = getByText(/start the game!/i) 29 | fireEvent.click(startBtn) 30 | }) 31 | test('Extras renders', () => { 32 | render() 33 | }) 34 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/Extras/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | import SnakeFrame from './SnakeFrame' 22 | export default { SnakeFrame } 23 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/HistoryRow.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import React from 'react' 21 | 22 | import { StyledHistoryRow } from './styled' 23 | 24 | const HistoryRow = ({ entry, handleEntryClick }: any) => { 25 | return ( 26 | handleEntryClick(entry)}> 27 | {entry} 28 | 29 | ) 30 | } 31 | export default HistoryRow 32 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/Queries/toggleStyles.css: -------------------------------------------------------------------------------- 1 | .toggle-check-input { 2 | width: 1px; 3 | height: 1px; 4 | position: absolute; 5 | display: none; 6 | } 7 | 8 | .toggle-check-text { 9 | display: inline-block; 10 | position: relative; 11 | text-transform: uppercase; 12 | background: #ccc; 13 | padding: 0.25em 0.5em 0.25em 1.75em; 14 | border-radius: 1em; 15 | width: 50px; 16 | height: 21px; 17 | color: #fff; 18 | cursor: pointer; 19 | transition: background-color 0.15s; 20 | line-height: initial; 21 | } 22 | .toggle-check-text:after { 23 | content: ' '; 24 | display: block; 25 | background: #fff; 26 | width: 1.1em; 27 | height: 1.1em; 28 | border-radius: 1em; 29 | position: absolute; 30 | left: 0.3em; 31 | top: 0.25em; 32 | transition: left 0.15s, margin-left 0.15s; 33 | } 34 | .toggle-check-text:before { 35 | font-size: 90%; 36 | content: 'OFF'; 37 | } 38 | .toggle-check-input:checked ~ .toggle-check-text { 39 | color: #319113; 40 | padding-left: 0.5em; 41 | padding-right: 2em; 42 | } 43 | .toggle-check-input:checked ~ .toggle-check-text:before { 44 | font-size: 90%; 45 | content: 'ON'; 46 | } 47 | 48 | .toggle-check-input:checked ~ .toggle-check-text:after { 49 | left: 100%; 50 | margin-left: -1.4em; 51 | } 52 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/SysInfoFrame/styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const InlineError = styled.span` 4 | color: ${props => props.theme.error}; 5 | padding-left: 15px; 6 | ` 7 | 8 | export const SpinnerContainer = styled.div` 9 | margin: 20px 0 20px 0; 10 | width: 100%; 11 | text-align: center; 12 | ` 13 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/__snapshots__/HistoryRow.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`HistoryRow triggers function on click 1`] = ` 4 |
5 |
  • 8 | :clear 9 |
  • 10 |
    11 | `; 12 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/errorMessageFormater.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | const error = (title: any) => ({ 22 | title, 23 | message: title 24 | }) 25 | 26 | export const errorMessageFormater = (code: any, message?: any) => { 27 | const title = `${code || code === 0 ? code : ''}${ 28 | code && message ? ': ' : '' 29 | }${message || ''}` 30 | return error(title) 31 | } 32 | -------------------------------------------------------------------------------- /src/browser/modules/Stream/stream.utils.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import { Frame, FrameStack } from 'shared/modules/frames/framesDuck' 21 | 22 | export function getLatestFromFrameStack(frameObj: FrameStack): Frame | null { 23 | if (!frameObj.stack) { 24 | return null 25 | } 26 | return frameObj.stack[0] 27 | } 28 | -------------------------------------------------------------------------------- /src/browser/services/preview-optin-service.ts: -------------------------------------------------------------------------------- 1 | const notOptedOutOfPreview = (): boolean => { 2 | const prefersOldBrowser = localStorage.getItem('prefersOldBrowser') 3 | const doesPreferQuery = prefersOldBrowser === 'false' 4 | 5 | return doesPreferQuery || prefersOldBrowser === null 6 | } 7 | 8 | export const optedInByLocalhost = (): boolean => { 9 | return notOptedOutOfPreview() && window.location.hostname === 'localhost' 10 | } 11 | -------------------------------------------------------------------------------- /src/browser/styles/animations.ts: -------------------------------------------------------------------------------- 1 | import { keyframes } from 'styled-components' 2 | 3 | export const bounceRight = keyframes` 4 | 0%, 90% { 5 | transform: translate3d(0, 0, 0); 6 | } 7 | 8 | 95% { 9 | transform: translate3d(5px, 0, 0); 10 | } 11 | 12 | 100% { 13 | transform: translate3d(0, 0, 0); 14 | } 15 | ` 16 | -------------------------------------------------------------------------------- /src/browser/styles/constants.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | export const dim = { 22 | // Editor bar 23 | editorbarHeight: 71, 24 | // Frame 25 | frameBodyHeight: 550, 26 | frameTitlebarHeight: 41, 27 | frameStatusbarHeight: 39, 28 | frameBodyPadding: 20, 29 | frameButtonWidth: 41 30 | } 31 | -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/eot/FiraCode-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/eot/FiraCode-Bold.eot -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/eot/FiraCode-Light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/eot/FiraCode-Light.eot -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/eot/FiraCode-Medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/eot/FiraCode-Medium.eot -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/eot/FiraCode-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/eot/FiraCode-Regular.eot -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/otf/FiraCode-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/otf/FiraCode-Bold.otf -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/otf/FiraCode-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/otf/FiraCode-Light.otf -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/otf/FiraCode-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/otf/FiraCode-Medium.otf -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/otf/FiraCode-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/otf/FiraCode-Regular.otf -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/otf/FiraCode-Retina.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/otf/FiraCode-Retina.otf -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/ttf/FiraCode-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/ttf/FiraCode-Bold.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/ttf/FiraCode-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/ttf/FiraCode-Light.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/ttf/FiraCode-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/ttf/FiraCode-Medium.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/ttf/FiraCode-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/ttf/FiraCode-Regular.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/ttf/FiraCode-Retina.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/ttf/FiraCode-Retina.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/woff/FiraCode-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/woff/FiraCode-Bold.woff -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/woff/FiraCode-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/woff/FiraCode-Light.woff -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/woff/FiraCode-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/woff/FiraCode-Medium.woff -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/woff/FiraCode-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/woff/FiraCode-Regular.woff -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/woff2/FiraCode-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/woff2/FiraCode-Bold.woff2 -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/woff2/FiraCode-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/woff2/FiraCode-Light.woff2 -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/woff2/FiraCode-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/woff2/FiraCode-Medium.woff2 -------------------------------------------------------------------------------- /src/browser/styles/fonts/FiraCode/woff2/FiraCode-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FiraCode/woff2/FiraCode-Regular.woff2 -------------------------------------------------------------------------------- /src/browser/styles/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/browser/styles/fonts/Inconsolata-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/Inconsolata-Bold.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/Inconsolata-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/Inconsolata-Regular.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/OpenSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/OpenSans-Bold.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/OpenSans-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/OpenSans-BoldItalic.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/OpenSans-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/OpenSans-ExtraBold.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/OpenSans-ExtraBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/OpenSans-ExtraBoldItalic.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/OpenSans-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/OpenSans-Italic.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/OpenSans-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/OpenSans-Light.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/OpenSans-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/OpenSans-LightItalic.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/OpenSans-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/OpenSans-Semibold.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/OpenSans-SemiboldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/OpenSans-SemiboldItalic.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/browser/styles/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/browser/styles/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/browser/styles/fonts/neo-font.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/neo-font.eot -------------------------------------------------------------------------------- /src/browser/styles/fonts/neo-font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/neo-font.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/neo-font.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/neo-font.woff -------------------------------------------------------------------------------- /src/browser/styles/fonts/neo4j-world.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/neo4j-world.eot -------------------------------------------------------------------------------- /src/browser/styles/fonts/neo4j-world.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/neo4j-world.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/neo4j-world.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/neo4j-world.woff -------------------------------------------------------------------------------- /src/browser/styles/fonts/streamline.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/streamline.eot -------------------------------------------------------------------------------- /src/browser/styles/fonts/streamline.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/streamline.ttf -------------------------------------------------------------------------------- /src/browser/styles/fonts/streamline.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j/neo4j-browser/6a668a02381ed3c5eed879f21e2c58d14af16c2d/src/browser/styles/fonts/streamline.woff -------------------------------------------------------------------------------- /src/browser/styles/inconsolata.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Inconsolata'; 3 | font-style: normal; 4 | font-weight: 400; 5 | src: local('Inconsolata Regular'), local('Inconsolata-Regular'), 6 | url('fonts/Inconsolata-Regular.ttf') format('truetype'); 7 | } 8 | 9 | @font-face { 10 | font-family: 'Inconsolata'; 11 | font-style: normal; 12 | font-weight: 700; 13 | src: local('Inconsolata Bold'), local('Inconsolata-Bold'), 14 | url('fonts/Inconsolata-Bold.ttf') format('truetype'); 15 | } 16 | -------------------------------------------------------------------------------- /src/browser/styles/util-classes.css: -------------------------------------------------------------------------------- 1 | .centeredSvgIcon > svg { 2 | display: inline-block; 3 | vertical-align: middle; 4 | } 5 | -------------------------------------------------------------------------------- /src/browser/styles/utils.ts: -------------------------------------------------------------------------------- 1 | export const hexToRgba = (hex: any, opacity = 1) => { 2 | const localHex = hex.replace( 3 | /^#?([a-f\d])([a-f\d])([a-f\d])$/i, 4 | (_m: any, r: any, g: any, b: any) => r + r + g + g + b + b 5 | ) 6 | const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(localHex) 7 | return result 8 | ? `rgba(${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt( 9 | result[3], 10 | 16 11 | )}, ${opacity})` 12 | : '' 13 | } 14 | -------------------------------------------------------------------------------- /src/browser/svg.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | const content: string 3 | export default content 4 | } 5 | -------------------------------------------------------------------------------- /src/neo4j-arc/common/components/LabelAndReltypes.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | const chip = styled.div` 4 | word-break: break-all; 5 | cursor: pointer; 6 | font-family: ${props => props.theme.primaryFontFamily}; 7 | font-weight: bold; 8 | font-size: 12px; 9 | background-color: #9195a0; 10 | color: #30333a; 11 | margin: 4px; 12 | padding: 3px 7px 3px 7px; 13 | span { 14 | line-height: normal; 15 | } 16 | display: inline-block; 17 | ` 18 | 19 | export const StyledLabelChip = styled(chip)` 20 | border-radius: 20px; 21 | &:hover { 22 | background-color: #fff; 23 | } 24 | ` 25 | export const StyledRelationshipChip = styled(chip)` 26 | border-radius: 3px; 27 | &:hover, 28 | &:focus, 29 | &:visited { 30 | background-color: #fff; 31 | } 32 | ` 33 | export const StyledPropertyChip = styled(chip)` 34 | border-radius: 2px; 35 | background-color: transparent; 36 | border: 1px solid #595d66; 37 | color: #9195a0; 38 | span { 39 | color: #ccc; 40 | } 41 | &:hover { 42 | color: #fff; 43 | border-color: #fff; 44 | } 45 | ` 46 | -------------------------------------------------------------------------------- /src/neo4j-arc/common/components/ShowMoreOrAll/styled.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import styled from 'styled-components' 21 | 22 | export const StyledShowMoreButton = styled.button` 23 | border: none; 24 | outline: none; 25 | background-color: inherit; 26 | color: ${props => props.theme.link}; 27 | ` 28 | -------------------------------------------------------------------------------- /src/neo4j-arc/common/utils/platformUtils.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | export const isMac = /Mac|iPad/.test(navigator.platform) 21 | -------------------------------------------------------------------------------- /src/neo4j-arc/cypher-language-support/types.ts: -------------------------------------------------------------------------------- 1 | declare module 'monaco-editor/esm/vs/base/parts/quickinput/browser/quickInputList' { 2 | export class QuickInputList { 3 | layout: (maxHeight: number) => void 4 | list: { 5 | getHTMLElement: () => HTMLElement 6 | layout: () => void 7 | } 8 | } 9 | } 10 | 11 | declare module '@neo4j-cypher/extract-statements' { 12 | export function extractStatements(query: string): any 13 | } 14 | 15 | declare module '@neo4j-cypher/antlr4' { 16 | export class CypherLexer { 17 | getAllTokens: () => { type: number; column: number }[] 18 | static symbolicNames: Record 19 | static literalNames: Record 20 | } 21 | export class Lexer {} 22 | } 23 | -------------------------------------------------------------------------------- /src/neo4j-arc/index.ts: -------------------------------------------------------------------------------- 1 | export * from './common' 2 | export * from './graph-visualization' 3 | export * from './cypher-language-support' 4 | -------------------------------------------------------------------------------- /src/shared/modules/cypher/queriesProcedureHelper.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | export const getClusterAddresses = 'CALL dbms.cluster.overview YIELD addresses' 22 | 23 | export function listQueriesProcedure() { 24 | return 'CALL dbms.listQueries' 25 | } 26 | 27 | export function killQueriesProcedure(queryIdList: any) { 28 | return `CALL dbms.killQueries([${queryIdList 29 | .map((q: any) => `"${q}"`) 30 | .join()}])` 31 | } 32 | -------------------------------------------------------------------------------- /src/shared/modules/features/featuresDuck.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | import reducer from './featuresDuck' 21 | import { dehydrate } from 'services/duckUtils' 22 | 23 | describe('features reducer', () => { 24 | test('handles initial value', () => { 25 | const nextState = reducer(undefined, { type: '' }) 26 | expect(dehydrate(nextState)).toEqual({ 27 | browserSync: true, 28 | clientConfig: null, 29 | userCapabilities: { 30 | serverConfigReadable: false 31 | } 32 | }) 33 | }) 34 | }) 35 | -------------------------------------------------------------------------------- /src/shared/modules/settings/__snapshots__/settingsDuck.test.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`settings reducer handles REPLACE 1`] = ` 4 | Object { 5 | "allowCrashReports": true, 6 | "allowUserStats": true, 7 | "autoComplete": true, 8 | "browserSyncDebugServer": null, 9 | "codeFontLigatures": true, 10 | "connectionTimeout": 30000, 11 | "editorLint": false, 12 | "enableMultiStatementMode": true, 13 | "initCmd": ":play start", 14 | "initialNodeDisplay": 300, 15 | "maxFieldItems": 500, 16 | "maxFrames": 15, 17 | "maxHistory": 30, 18 | "maxNeighbours": 100, 19 | "maxRows": 1000, 20 | "new": "conf", 21 | "playImplicitInitCommands": true, 22 | "scrollToTop": true, 23 | "showPerformanceOverlay": false, 24 | "showSampleScripts": true, 25 | "showWheelZoomInfo": true, 26 | "theme": "auto", 27 | "useBoltRouting": false, 28 | "useReadTransactions": false, 29 | } 30 | `; 31 | -------------------------------------------------------------------------------- /src/shared/modules/userInteraction/userInteractionDuck.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | // Constants 22 | export const NAME = 'userInteraction' 23 | export const USER_INTERACTION = `${NAME}/USER_INTERACTION` 24 | -------------------------------------------------------------------------------- /src/shared/services/bolt/__mocks__/boltWorker.ts: -------------------------------------------------------------------------------- 1 | import { handleBoltWorkerMessage } from '../handleBoltWorkerMessage' 2 | 3 | export default class BoltWorker { 4 | onmessage = (_msg: any) => {} 5 | 6 | postMessage(msg: any) { 7 | const postMessageToMainThread = (msg: any) => this.onmessage({ data: msg }) 8 | handleBoltWorkerMessage(postMessageToMainThread)({ data: msg }) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/shared/services/bolt/boltConnectionErrors.ts: -------------------------------------------------------------------------------- 1 | export const UnauthorizedDriverError = 'Neo.ClientError.Security.Unauthorized' 2 | export const TokenExpiredDriverError = 'Neo.ClientError.Security.TokenExpired' 3 | 4 | const BoltConnectionErrors = [ 5 | 'ServiceUnavailable', 6 | 'Neo.ClientError.Security.AuthenticationRateLimit', 7 | 'Neo.ClientError.Security.CredentialsExpired', 8 | UnauthorizedDriverError, 9 | TokenExpiredDriverError 10 | ] 11 | 12 | export const isBoltConnectionErrorCode = (code: any) => 13 | BoltConnectionErrors.includes(code) 14 | -------------------------------------------------------------------------------- /src/shared/services/bolt/boltWorker.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | /* eslint-env serviceworker */ 22 | import 'core-js/stable' 23 | 24 | import { handleBoltWorkerMessage } from './handleBoltWorkerMessage' 25 | 26 | declare const self: ServiceWorker 27 | self.addEventListener( 28 | 'message', 29 | handleBoltWorkerMessage(self.postMessage) as any 30 | ) 31 | -------------------------------------------------------------------------------- /src/shared/services/cypherErrorsHelper.ts: -------------------------------------------------------------------------------- 1 | import { BrowserError } from 'services/exceptions' 2 | 3 | export const isUnknownProcedureError = ({ code }: BrowserError): boolean => 4 | code === 'Neo.ClientError.Procedure.ProcedureNotFound' 5 | 6 | export const isNoDbAccessError = ({ code, message }: BrowserError): boolean => 7 | code === 'Neo.ClientError.Security.Forbidden' && 8 | /Database access is not allowed/i.test(message) 9 | 10 | const isCallInTransactionError = ({ code, message }: BrowserError) => 11 | (code === 'Neo.DatabaseError.Statement.ExecutionFailed' || 12 | code === 'Neo.DatabaseError.Transaction.TransactionStartFailed') && 13 | /in an implicit transaction/.test(message) 14 | 15 | const isPeriodicCommitError = ({ code, message }: BrowserError) => 16 | code === 'Neo.ClientError.Statement.SemanticError' && 17 | [ 18 | /in an open transaction is not possible/i, 19 | /tried to execute in an explicit transaction/i 20 | ].some(reg => reg.test(message)) 21 | 22 | export const isImplicitTransactionError = (error: BrowserError): boolean => 23 | isPeriodicCommitError(error) || isCallInTransactionError(error) 24 | 25 | export const isParameterMissingError = ({ code }: BrowserError): boolean => 26 | code === 'Neo.ClientError.Statement.ParameterMissing' 27 | -------------------------------------------------------------------------------- /src/shared/services/duckUtils.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | export const hydrate = (initialState: any, state: any) => { 22 | if (!state) return state 23 | return state.hydrated ? state : { ...initialState, ...state, hydrated: true } 24 | } 25 | 26 | export const dehydrate = (state: any) => { 27 | if (state) { 28 | delete state.hydrated 29 | } 30 | return state 31 | } 32 | -------------------------------------------------------------------------------- /src/shared/utils/array-has-items.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * This file is part of Neo4j. 5 | * Neo4j is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | * 16 | */ 17 | 18 | export default function arrayHasItems(arr: any) { 19 | return Array.isArray(arr) && arr.length > 0 20 | } 21 | -------------------------------------------------------------------------------- /src/shared/utils/deepPartial.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | export type DeepPartial = T extends object 22 | ? { 23 | [P in keyof T]?: DeepPartial 24 | } 25 | : T 26 | -------------------------------------------------------------------------------- /src/shared/utils/strings.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) "Neo4j" 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | export const capitalize = (s: string): string => 22 | s.charAt(0).toUpperCase() + s.slice(1) 23 | 24 | export const isNonEmptyString = (s: unknown): s is string => 25 | typeof s === 'string' && s !== '' 26 | -------------------------------------------------------------------------------- /src/shared/utils/typeguards.ts: -------------------------------------------------------------------------------- 1 | import { BrowserError } from 'services/exceptions' 2 | 3 | export function isError(error: unknown): error is Error { 4 | return error instanceof Error 5 | } 6 | 7 | export function isBrowserError(error: unknown): error is BrowserError { 8 | return error instanceof Error && 'code' in error 9 | } 10 | -------------------------------------------------------------------------------- /test_utils/__mocks__/fileMock.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2002-2021 "Neo4j," 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | module.exports = '' // To have the component not throwing 22 | -------------------------------------------------------------------------------- /test_utils/__mocks__/styleMock.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2002-2021 "Neo4j," 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | module.exports = {} 22 | -------------------------------------------------------------------------------- /test_utils/__mocks__/workerLoaderMock.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2002-2021 "Neo4j," 3 | * Neo4j Sweden AB [http://neo4j.com] 4 | * 5 | * This file is part of Neo4j. 6 | * 7 | * Neo4j is free software: you can redistribute it and/or modify 8 | * it under the terms of the GNU General Public License as published by 9 | * the Free Software Foundation, either version 3 of the License, or 10 | * (at your option) any later version. 11 | * 12 | * This program is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU General Public License for more details. 16 | * 17 | * You should have received a copy of the GNU General Public License 18 | * along with this program. If not, see . 19 | */ 20 | 21 | module.exports = {} 22 | --------------------------------------------------------------------------------