├── src ├── ui │ ├── config │ │ ├── index.ts │ │ └── configCmp │ │ │ └── config.style.css │ ├── help │ │ ├── index.ts │ │ ├── howToCite │ │ │ ├── howToCite.style.css │ │ │ ├── howToCite.template.html │ │ │ └── howToCite.component.ts │ │ ├── helpOnePager │ │ │ ├── helpOnePager.style.css │ │ │ └── helpOnePager.template.html │ │ └── about │ │ │ └── about.style.css │ ├── topMenu │ │ ├── index.ts │ │ └── topMenuCmp │ │ │ └── topMenu.style.css │ ├── cookieAgreement │ │ ├── index.ts │ │ ├── data │ │ │ └── aboutMatomo.md │ │ └── cookieAgreement │ │ │ └── cookieAgreement.style.css │ ├── dialogInfo │ │ ├── tmpl │ │ │ ├── tmpl.stories.ts │ │ │ └── tmpl.style.css │ │ └── index.ts │ ├── kgtos │ │ ├── kgtos │ │ │ └── kgtos.style.css │ │ ├── index.ts │ │ └── module.ts │ ├── bottomMenu │ │ └── index.ts │ ├── logoContainer │ │ ├── logoContainer.template.html │ │ └── logoContainer.style.css │ └── quickTour │ │ └── index.ts ├── getFileInput │ ├── index.ts │ ├── type.ts │ └── fileInputModal │ │ └── fileInputModal.style.css ├── keyframesModule │ ├── index.ts │ ├── constants.ts │ └── keyframeCtrl │ │ └── keyframeCtrl.style.css ├── res │ ├── .gitignore │ └── icons │ │ ├── iav-icons.ttf │ │ ├── iav-icons.woff │ │ ├── meta.json │ │ └── iav-icons.css ├── components │ ├── parseAttribute.ts │ ├── dialog │ │ └── dialog.style.css │ ├── overlay │ │ ├── overlay.style.scss │ │ ├── index.ts │ │ └── overlay.template.html │ ├── confirmDialog │ │ └── confirmDialog.style.css │ ├── textareaCopyExport │ │ └── textareaCopyExport.style.css │ ├── flatHierarchy │ │ ├── index.ts │ │ ├── const.ts │ │ └── spacer.pipe.ts │ ├── markdown │ │ ├── markdownCmp │ │ │ ├── markdown.style.css │ │ │ └── markdown.template.html │ │ ├── index.ts │ │ └── module.ts │ ├── dynamicMaterialBtn │ │ └── dynamicMaterialBtn.style.css │ ├── tab │ │ ├── tab.style.scss │ │ └── tab.template.html │ ├── spinner │ │ ├── spinnerCmp │ │ │ ├── spinner.template.html │ │ │ └── spinner.component.ts │ │ ├── index.ts │ │ └── module.ts │ ├── readmore │ │ └── index.ts │ ├── index.ts │ ├── snackDialog │ │ ├── index.ts │ │ └── snackDialog.style.scss │ ├── smartChip │ │ ├── index.ts │ │ ├── smartChip.menu.directive.ts │ │ ├── smartChip.action.directive.ts │ │ ├── smartChip.header.directive.ts │ │ ├── smartChip.content.directive.ts │ │ └── hasSubmenu.pipe.ts │ ├── coordTextBox │ │ ├── coordTextBox.style.css │ │ ├── index.ts │ │ └── coordTextBox.template.html │ ├── fabSpeedDial │ │ └── index.ts │ ├── vButton │ │ ├── vButton.style.css │ │ └── vButton.template.html │ └── safeHtml.pipe.ts ├── state │ ├── userInterface │ │ ├── ui.ts │ │ ├── const.ts │ │ ├── index.ts │ │ └── selectors.ts │ ├── annotations │ │ ├── const.ts │ │ └── index.ts │ ├── userInteraction │ │ ├── const.ts │ │ └── index.ts │ ├── plugins │ │ ├── const.ts │ │ ├── index.ts │ │ ├── actions.ts │ │ └── selectors.ts │ ├── userPreference │ │ ├── index.ts │ │ └── const.ts │ ├── atlasAppearance │ │ └── index.ts │ ├── atlasSelection │ │ └── index.ts │ └── state.module.ts ├── util │ ├── regionFlattener.spec.ts │ ├── side-panel │ │ ├── side-panel.component.scss │ │ └── side-panel.component.ts │ ├── recursivePartial.ts │ ├── windowResize │ │ ├── index.ts │ │ └── module.ts │ ├── df-to-ds.pipe.spec.ts │ ├── regionFlattener.ts │ ├── pretty-present.pipe.spec.ts │ ├── index.ts │ ├── pipes │ │ ├── getUnique.pipe.ts │ │ ├── nmToMm.pipe.ts │ │ ├── mapToProperty.pipe.ts │ │ ├── combineFn.pipe.ts │ │ ├── getProperty.pipe.ts │ │ ├── filterArray.pipe.ts │ │ ├── doiPipe.pipe.ts │ │ ├── parseAsNumber.pipe.ts │ │ ├── getNthElement.pipe.ts │ │ ├── getFilename.pipe.ts │ │ └── safeResource.pipe.ts │ ├── siibraApiConstants │ │ └── fn.ts │ ├── mergeObj.pipe.ts │ ├── directives │ │ ├── trigger.directive.ts │ │ └── destroy.directive.ts │ ├── array.ts │ └── includes.pipe.ts ├── viewerModule │ ├── constants.ts │ ├── leap │ │ ├── index.ts │ │ ├── leapSignal │ │ │ └── leapSignal.style.css │ │ └── signal.directive.ts │ ├── nehuba │ │ ├── util.spec.ts │ │ ├── ngLayerCtlModule │ │ │ ├── index.ts │ │ │ └── ngLayerCtl │ │ │ │ └── ngLayerCtrl.style.css │ │ ├── navigation.service │ │ │ └── index.ts │ │ ├── config.service │ │ │ └── config.service.spec.ts │ │ ├── nehubaViewerInterface │ │ │ ├── nehubaViewerContainer.style.css │ │ │ └── nehubaViewerContainer.template.html │ │ ├── viewerCtrl │ │ │ ├── index.ts │ │ │ ├── snapPerspectiveOrientation │ │ │ │ └── snapPerspectiveOrientation.style.sass │ │ │ └── viewerCtrlCmp │ │ │ │ └── viewerCtrlCmp.style.css │ │ ├── layoutOverlay │ │ │ └── index.ts │ │ ├── mesh.service │ │ │ └── index.ts │ │ ├── statusCard │ │ │ └── statusCard.style.css │ │ ├── userLayers │ │ │ ├── index.ts │ │ │ └── userlayerInfo │ │ │ │ └── userlayerInfo.style.scss │ │ ├── layerCtrl.service │ │ │ └── index.ts │ │ ├── nehubaViewer │ │ │ ├── nehubaViewer.style.css │ │ │ └── nehubaViewer.template.html │ │ ├── index.ts │ │ └── store │ │ │ ├── selectors.ts │ │ │ ├── index.ts │ │ │ └── type.ts │ ├── threeSurfer │ │ ├── util.ts │ │ ├── tsViewerConfig │ │ │ ├── tsViewerConfig.style.css │ │ │ ├── tsViewerConfig.template.html │ │ │ └── tsViewerConfig.component.ts │ │ ├── store │ │ │ ├── const.ts │ │ │ ├── index.ts │ │ │ ├── actions.ts │ │ │ └── selectors.ts │ │ ├── index.ts │ │ └── threeSurferGlue │ │ │ └── threeSurfer.style.css │ ├── viewerWrapper │ │ └── viewerWrapper.style.css │ ├── index.ts │ └── viewerCmp │ │ └── viewerCmp.component.spec.ts ├── main-aot.ts ├── messaging │ └── nmvSwc │ │ ├── index.spec.ts │ │ └── type.ts ├── assets │ ├── images │ │ ├── persp-view │ │ │ ├── .gitattributes │ │ │ ├── allen_axial_0.png │ │ │ ├── allen_axial_1.png │ │ │ ├── mni152_axial_0.png │ │ │ ├── mni152_axial_1.png │ │ │ ├── allen_coronal_0.png │ │ │ ├── allen_coronal_1.png │ │ │ ├── allen_sagittal_0.png │ │ │ ├── allen_sagittal_1.png │ │ │ ├── bigbrain_axial_0.png │ │ │ ├── bigbrain_axial_1.png │ │ │ ├── colin27_axial_0.png │ │ │ ├── colin27_axial_1.png │ │ │ ├── mebrains_axial_0.png │ │ │ ├── mebrains_axial_1.png │ │ │ ├── mni152_coronal_0.png │ │ │ ├── mni152_coronal_1.png │ │ │ ├── waxholm_axial_0.png │ │ │ ├── waxholm_axial_1.png │ │ │ ├── bigbrain_coronal_0.png │ │ │ ├── bigbrain_coronal_1.png │ │ │ ├── bigbrain_sagittal_0.png │ │ │ ├── bigbrain_sagittal_1.png │ │ │ ├── colin27_coronal_0.png │ │ │ ├── colin27_coronal_1.png │ │ │ ├── colin27_sagittal_0.png │ │ │ ├── colin27_sagittal_1.png │ │ │ ├── mebrains_coronal_0.png │ │ │ ├── mebrains_coronal_1.png │ │ │ ├── mebrains_sagittal_0.png │ │ │ ├── mebrains_sagittal_1.png │ │ │ ├── mni152_sagittal_0.png │ │ │ ├── mni152_sagittal_1.png │ │ │ ├── waxholm_coronal_0.png │ │ │ ├── waxholm_coronal_1.png │ │ │ ├── waxholm_sagittal_0.png │ │ │ └── waxholm_sagittal_1.png │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 1-100.png │ │ ├── 1-200.png │ │ ├── 1-300.png │ │ ├── 1-400.png │ │ ├── 2-100.png │ │ ├── 2-200.png │ │ ├── 2-300.png │ │ ├── 2-400.png │ │ ├── 3-100.png │ │ ├── 3-200.png │ │ ├── 3-300.png │ │ ├── 3-400.png │ │ ├── MNIColin27.png │ │ ├── big-brain.png │ │ ├── MNIColin27-100.png │ │ ├── MNIColin27-200.png │ │ ├── MNIColin27-300.png │ │ ├── MNIColin27-400.png │ │ ├── how-to-cite-1.png │ │ ├── how-to-cite-2.png │ │ ├── how-to-cite-3.png │ │ ├── BigBrainHistology.png │ │ ├── BigBrainHistology-100.png │ │ ├── BigBrainHistology-200.png │ │ ├── BigBrainHistology-300.png │ │ ├── BigBrainHistology-400.png │ │ ├── WaxholmSpaceratbrainMRIDTI.png │ │ ├── ICBM2009cNonlinearAsymmetric.png │ │ ├── WaxholmSpaceratbrainMRIDTI-100.png │ │ ├── WaxholmSpaceratbrainMRIDTI-200.png │ │ ├── WaxholmSpaceratbrainMRIDTI-300.png │ │ ├── WaxholmSpaceratbrainMRIDTI-400.png │ │ ├── ICBM2009cNonlinearAsymmetric-100.png │ │ ├── ICBM2009cNonlinearAsymmetric-200.png │ │ ├── ICBM2009cNonlinearAsymmetric-300.png │ │ ├── ICBM2009cNonlinearAsymmetric-400.png │ │ ├── MNI152ICBM2009cNonlinearAsymmetric.png │ │ ├── MNI152ICBM2009cNonlinearAsymmetric-100.png │ │ ├── MNI152ICBM2009cNonlinearAsymmetric-200.png │ │ ├── MNI152ICBM2009cNonlinearAsymmetric-300.png │ │ ├── MNI152ICBM2009cNonlinearAsymmetric-400.png │ │ ├── AllenMouseCommonCoordinateFrameworkv32015.png │ │ ├── AllenMouseCommonCoordinateFrameworkv32015-100.png │ │ ├── AllenMouseCommonCoordinateFrameworkv32015-200.png │ │ ├── AllenMouseCommonCoordinateFrameworkv32015-300.png │ │ └── AllenMouseCommonCoordinateFrameworkv32015-400.png │ ├── favicons │ │ └── favicon-128-light.png │ ├── academicons │ │ └── fonts │ │ │ ├── academicons.eot │ │ │ ├── academicons.ttf │ │ │ └── academicons.woff │ ├── logo │ │ ├── HBP_Primary_RGB_BlackText.png │ │ └── HBP_Primary_RGB_WhiteText.png │ └── fontawesome │ │ └── webfonts │ │ ├── fa-brands-400.eot │ │ ├── fa-brands-400.ttf │ │ ├── fa-solid-900.eot │ │ ├── fa-solid-900.ttf │ │ ├── fa-solid-900.woff │ │ ├── fa-brands-400.woff │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.eot │ │ ├── fa-regular-400.ttf │ │ ├── fa-regular-400.woff │ │ ├── fa-regular-400.woff2 │ │ └── fa-solid-900.woff2 ├── atlasComponents │ ├── annotations │ │ ├── module.ts │ │ └── index.ts │ ├── sapi │ │ ├── core │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── codeSnippets │ │ │ └── codeSnippet.style.scss │ │ └── README.md │ ├── sapiViews │ │ ├── core │ │ │ ├── rich │ │ │ │ ├── index.ts │ │ │ │ ├── regionsListSearch │ │ │ │ │ ├── regionListSearch.style.css │ │ │ │ │ └── regionListSearchTmpl.directive.ts │ │ │ │ ├── ATPSelector │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── pureDumbDropdown │ │ │ │ │ │ └── pureATPDropDown.style.css │ │ │ │ │ ├── wrapper │ │ │ │ │ │ └── wrapper.style.css │ │ │ │ │ └── pureDumb │ │ │ │ │ │ └── pureATPSelector.components.ts │ │ │ │ └── regionsHierarchy │ │ │ │ │ └── regionsHierarchy.style.css │ │ │ ├── atlas │ │ │ │ ├── index.ts │ │ │ │ └── splashScreen │ │ │ │ │ ├── splashScreen.style.css │ │ │ │ │ └── splashScreen.template.html │ │ │ ├── region │ │ │ │ ├── index.ts │ │ │ │ └── region │ │ │ │ │ └── listItem │ │ │ │ │ ├── region.listItem.style.css │ │ │ │ │ └── region.listItem.template.html │ │ │ ├── index.ts │ │ │ ├── space │ │ │ │ └── index.ts │ │ │ └── parcellation │ │ │ │ ├── groupedParcellation.ts │ │ │ │ ├── index.ts │ │ │ │ ├── isGroupedParcellation.pipe.ts │ │ │ │ └── parcTmplDoi.pipe.ts │ │ ├── util │ │ │ ├── index.ts │ │ │ ├── numbers.pipe.ts │ │ │ ├── parseDoi.pipe.ts │ │ │ ├── addUnitAndJoin.pipe.ts │ │ │ └── equality.pipe.ts │ │ ├── index.ts │ │ ├── module.ts │ │ └── volumes │ │ │ └── sandsToNum.pipe.ts │ ├── userAnnotations │ │ ├── tools │ │ │ ├── point │ │ │ │ └── point.style.css │ │ │ ├── line │ │ │ │ └── line.style.css │ │ │ └── poly │ │ │ │ └── poly.style.css │ │ ├── singleAnnotationUnit │ │ │ └── singleAnnotationUnit.style.css │ │ ├── constants.ts │ │ ├── index.ts │ │ ├── annotationMode │ │ │ └── annotationMode.style.css │ │ ├── annotationVisible.pipe.ts │ │ └── annotationList │ │ │ └── annotationList.style.css │ └── constants.ts ├── features │ ├── TPBRView │ │ └── TPBRView.style.scss │ ├── atlas-colormap-intents │ │ ├── intents.style.css │ │ ├── intents.template.html │ │ └── index.ts │ ├── pointcloud-intents │ │ ├── intents.style.css │ │ ├── intents.template.html │ │ └── index.ts │ ├── index.ts │ ├── plotly │ │ ├── plot │ │ │ ├── plot.component.html │ │ │ └── plot.component.scss │ │ └── index.ts │ ├── compoundFeatureIndices │ │ ├── compoundFeatureIndices.style.css │ │ ├── index.ts │ │ ├── util.ts │ │ └── idxToText.pipe.ts │ ├── connectivity │ │ ├── connectivityBrowser │ │ │ └── connectivityBrowser.style.scss │ │ └── index.ts │ ├── category-acc.directive.spec.ts │ ├── featureName.pipe.ts │ ├── guards.ts │ ├── grpFeatToName.pipe.ts │ ├── grpFeatToTotal.pipe.ts │ └── feature-view │ │ └── feature-view.component.scss ├── share │ ├── shareSheet │ │ └── shareSheet.style.css │ ├── index.ts │ ├── type.ts │ └── share.directive.ts ├── freeModeModule │ ├── freemode-ui │ │ └── freemode-ui.style.scss │ └── index.ts ├── main.ts ├── routerModule │ ├── const.ts │ └── index.ts ├── plugin │ ├── index.ts │ ├── types.ts │ ├── pluginBanner │ │ └── pluginBanner.style.css │ └── const.ts ├── sharedModules │ ├── icon │ │ ├── icon.style.scss │ │ └── index.ts │ └── index.ts ├── version.css ├── auth │ ├── index.ts │ ├── signinModal │ │ └── signinModal.style.css │ └── auth.directive.ts ├── logging │ ├── index.ts │ └── logging.module.ts ├── layouts │ ├── currentLayout │ │ └── currentLayout.style.css │ ├── layouts │ │ ├── single │ │ │ ├── single.template.html │ │ │ ├── single.style.css │ │ │ └── single.component.ts │ │ ├── h13 │ │ │ ├── h13.style.css │ │ │ └── h13.component.ts │ │ ├── v13 │ │ │ ├── v13.style.css │ │ │ └── v13.component.ts │ │ ├── fourPanel │ │ │ ├── fourPanel.style.css │ │ │ ├── fourPanel.component.ts │ │ │ └── fourPanel.template.html │ │ └── pip │ │ │ ├── pip.style.css │ │ │ ├── pip.template.html │ │ │ └── pip.component.ts │ └── fourCorners │ │ └── fourCorners.component.ts ├── mouseoverModule │ ├── index.ts │ └── mouseover.style.css ├── strictLocal │ ├── index.ts │ └── strictLocalCmp │ │ └── strictLocalCmp.component.ts ├── spotlight │ ├── spotlight-backdrop │ │ ├── spotlight-backdrop.component.html │ │ ├── spotlight-backdrop.component.spec.ts │ │ └── spotlight-backdrop.component.css │ ├── const.ts │ ├── spot-light-overlay.directive.ts │ ├── sl-spotlight.directive.spec.ts │ ├── sl-service.service.spec.ts │ ├── spot-light-overlay.directive.spec.ts │ └── sl-spotlight.directive.ts ├── zipFilesOutput │ └── type.ts ├── dragDropFile │ ├── index.ts │ └── module.ts ├── environments │ ├── environment.ts │ └── environment.prod.ts ├── screenshot │ ├── index.ts │ ├── util.ts │ └── screenshotCmp │ │ └── screenshot.style.css ├── api │ ├── index.ts │ ├── request │ │ ├── sxplr.exit__toSxplr__response.json │ │ ├── sxplr.loadLayers__toSxplr__response.json │ │ ├── sxplr.navigateTo__toSxplr__response.json │ │ ├── sxplr.selectAtlas__toSxplr__response.json │ │ ├── sxplr.addAnnotations__toSxplr__response.json │ │ ├── sxplr.cancelRequest__toSxplr__response.json │ │ ├── sxplr.removeLayers__toSxplr__response.json │ │ ├── sxplr.rmAnnotations__toSxplr__response.json │ │ ├── sxplr.selectTemplate__toSxplr__response.json │ │ ├── sxplr.setAuxMeshAlpha__toSxplr__response.json │ │ ├── sxplr.setOctantRemoval__toSxplr__response.json │ │ ├── sxplr.updateLayers__toSxplr__response.json │ │ ├── sxplr.selectParcellation__toSxplr__response.json │ │ ├── sxplr.getAllAtlases__toSxplr__request.json │ │ ├── sxplr.getSupportedTemplates__toSxplr__request.json │ │ ├── sxplr.getSupportedParcellations__toSxplr__request.json │ │ ├── sxplr.cancelRequest__toSxplr__request.json │ │ ├── sxplr.setAuxMeshAlpha__toSxplr__request.json │ │ └── sxplr.setOctantRemoval__toSxplr__request.json │ └── handshake │ │ ├── sxplr.init__fromSxplr__request.json │ │ ├── sxplr.init__fromSxplr__response.json │ │ └── README.md ├── contextMenuModule │ └── index.ts ├── notSupportedCmp │ └── notSupported.style.css ├── widget │ ├── index.ts │ └── widgetCanvas.directive.ts ├── atlasViewer │ └── atlasViewer.animation.ts ├── experimental │ └── experimental.service.ts └── atlas-download │ └── atlas-download.module.ts ├── .dockerignore ├── .prettierrc ├── docs ├── .gitignore ├── develop │ └── update_plugin_deployment.md ├── basics │ └── helperOnePager.md ├── requirements.txt ├── releases │ ├── v2.5.3.md │ ├── v2.14.9.md │ ├── v2.6.10.md │ ├── v2.14.19.md │ ├── v2.5.2.md │ ├── v2.4.6.md │ ├── v2.3.4.md │ ├── v2.3.6.md │ ├── v2.4.1.md │ ├── v2.6.9.md │ ├── v2.3.2.md │ ├── v2.3.7.md │ ├── v2.3.8.md │ ├── v2.3.9.md │ ├── v2.6.1.md │ ├── v2.7.7.md │ ├── v2.6.8.md │ ├── legacy.md │ ├── v2.11.4.md │ ├── v2.4.5.md │ ├── v2.7.1.md │ ├── v2.14.14.md │ ├── v2.5.6.md │ ├── v2.6.4.md │ ├── v2.3.10.md │ ├── v2.13.5.md │ ├── v2.2.7.md │ ├── v2.7.4.md │ ├── v2.14.17.md │ ├── v2.2.1.md │ ├── v2.3.5.md │ ├── v2.6.3.md │ ├── v2.14.25.md │ ├── v2.2.5.md │ ├── v2.14.21.md │ ├── v2.4.3.md │ ├── v0.2.0.md │ ├── v2.11.3.md │ ├── v2.2.4.md │ ├── v2.5.8.md │ ├── v0.1.0.md │ ├── v2.13.3.md │ ├── v2.14.8.md │ ├── v2.14.6.md │ ├── v2.3.11.md │ ├── v2.10.3.md │ ├── v2.5.5.md │ ├── v2.3.1.md │ ├── v2.4.2.md │ ├── v2.12.1.md │ ├── v2.12.4.md │ ├── v2.3.3.md │ ├── v2.6.7.md │ ├── v2.10.2.md │ ├── v2.13.2.md │ ├── v2.5.0.md │ ├── v2.12.5.md │ ├── v2.4.4.md │ ├── v2.2.6.md │ ├── v2.1.2.md │ ├── v2.13.1.md │ ├── v2.4.7.md │ ├── v2.9.1.md │ ├── v2.5.4.md │ ├── v2.1.1.md │ ├── v2.1.3.md │ ├── v2.5.1.md │ ├── v2.0.1.md │ ├── v2.10.1.md │ ├── v2.6.6.md │ ├── v2.14.24.md │ ├── v2.6.5.md │ ├── v2.14.22.md │ ├── v2.7.3.md │ ├── v2.14.12.md │ ├── v2.7.0.md │ ├── v2.14.1.md │ ├── v2.7.6.md │ ├── v2.12.2.md │ ├── v2.12.3.md │ ├── v2.9.0.md │ ├── v2.14.4.md │ ├── v2.7.2.md │ ├── v2.10.0.md │ ├── v2.14.15.md │ ├── v2.14.7.md │ ├── v2.14.3.md │ ├── v2.14.18.md │ ├── v2.2.3.md │ ├── v2.6.2.md │ ├── v2.14.20.md │ ├── v2.14.11.md │ ├── v2.4.8.md │ ├── v2.13.0.md │ ├── v0.3.0-beta.md │ ├── v2.13.4.md │ ├── v2.5.7.md │ └── v0.2.9.md ├── images │ └── siibra-explorer-square.jpeg ├── advanced │ ├── differential_gene_expression_analysis.md │ ├── api │ │ ├── request │ │ │ ├── sxplr.exit__toSxplr__response.json │ │ │ ├── sxplr.loadLayers__toSxplr__response.json │ │ │ ├── sxplr.navigateTo__toSxplr__response.json │ │ │ ├── sxplr.selectAtlas__toSxplr__response.json │ │ │ ├── sxplr.addAnnotations__toSxplr__response.json │ │ │ ├── sxplr.cancelRequest__toSxplr__response.json │ │ │ ├── sxplr.removeLayers__toSxplr__response.json │ │ │ ├── sxplr.rmAnnotations__toSxplr__response.json │ │ │ ├── sxplr.selectTemplate__toSxplr__response.json │ │ │ ├── sxplr.setAuxMeshAlpha__toSxplr__response.json │ │ │ ├── sxplr.setOctantRemoval__toSxplr__response.json │ │ │ ├── sxplr.updateLayers__toSxplr__response.json │ │ │ ├── sxplr.selectParcellation__toSxplr__response.json │ │ │ ├── sxplr.getAllAtlases__toSxplr__request.json │ │ │ ├── sxplr.getSupportedTemplates__toSxplr__request.json │ │ │ ├── sxplr.getSupportedParcellations__toSxplr__request.json │ │ │ ├── sxplr.cancelRequest__toSxplr__request.json │ │ │ ├── sxplr.setAuxMeshAlpha__toSxplr__request.json │ │ │ └── sxplr.setOctantRemoval__toSxplr__request.json │ │ └── handshake │ │ │ ├── sxplr.init__fromSxplr__request.json │ │ │ └── sxplr.init__fromSxplr__response.json │ └── annotating_structures.md ├── extra.css └── Dockerfile ├── .helm ├── adhoc │ ├── .gitignore │ ├── service-redis.yml │ └── example-secret-siibra-explorer.yml ├── trafficcop │ ├── templates │ │ ├── service.yaml │ │ ├── serviceaccount.yaml │ │ └── tests │ │ │ └── test-connection.yaml │ └── .helmignore └── siibra-explorer │ ├── .helmignore │ └── templates │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ └── test-connection.yaml ├── backend ├── app │ ├── well-known │ │ ├── robot.txt │ │ └── security.txt │ └── cors.py ├── .gitignore ├── pytest.ini ├── requirements.txt └── test_app │ └── test_sane_url.py ├── .gitattributes ├── .eslintignore ├── .storybook ├── typings.d.ts ├── tsconfig.json └── main.js ├── third_party ├── extra_js.js ├── vanilla_nehuba.js └── preinit_vanilla.html ├── .metaSpec ├── example.min.meta.json └── meta.schema.json ├── tsconfig.spec.json ├── typings └── index.d.ts ├── tsconfig.app.json ├── features ├── docs-storing-sharing-3dview.feature └── doc-launch-quicktour.feature ├── .gitignore ├── e2e_env.md ├── cypress.config.js └── .github └── workflows └── code └── create-checklist-comment.js /src/ui/config/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ui/help/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ui/topMenu/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /src/getFileInput/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/keyframesModule/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/res/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | -------------------------------------------------------------------------------- /src/components/parseAttribute.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/state/userInterface/ui.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ui/cookieAgreement/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/util/regionFlattener.spec.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/viewerModule/constants.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/viewerModule/leap/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false 3 | } -------------------------------------------------------------------------------- /src/components/dialog/dialog.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main-aot.ts: -------------------------------------------------------------------------------- 1 | import './main-common' -------------------------------------------------------------------------------- /src/messaging/nmvSwc/index.spec.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ui/dialogInfo/tmpl/tmpl.stories.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ui/kgtos/kgtos/kgtos.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/util.spec.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/viewerModule/threeSurfer/util.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | autogen_images 2 | venv 3 | -------------------------------------------------------------------------------- /docs/develop/update_plugin_deployment.md: -------------------------------------------------------------------------------- 1 | TBD -------------------------------------------------------------------------------- /src/assets/images/persp-view/.gitattributes: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/atlasComponents/annotations/module.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/atlasComponents/sapi/core/index.ts: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/components/overlay/overlay.style.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/features/TPBRView/TPBRView.style.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/share/shareSheet/shareSheet.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ui/help/howToCite/howToCite.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.helm/adhoc/.gitignore: -------------------------------------------------------------------------------- 1 | secret-siibra-explorer.yml -------------------------------------------------------------------------------- /backend/app/well-known/robot.txt: -------------------------------------------------------------------------------- 1 | User-agent: * -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/rich/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/ui/help/helpOnePager/helpOnePager.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/.gitignore: -------------------------------------------------------------------------------- 1 | venv 2 | __pycache__ 3 | .env 4 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/atlas/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/confirmDialog/confirmDialog.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/features/atlas-colormap-intents/intents.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/features/pointcloud-intents/intents.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/features/pointcloud-intents/intents.template.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/freeModeModule/freemode-ui/freemode-ui.style.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/ngLayerCtlModule/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/basics/helperOnePager.md: -------------------------------------------------------------------------------- 1 | ../../common/helpOnePager.md -------------------------------------------------------------------------------- /src/features/atlas-colormap-intents/intents.template.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/navigation.service/index.ts: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/viewerModule/viewerWrapper/viewerWrapper.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/atlasComponents/userAnnotations/tools/point/point.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/textareaCopyExport/textareaCopyExport.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/features/index.ts: -------------------------------------------------------------------------------- 1 | export { FeatureModule } from "./module" -------------------------------------------------------------------------------- /src/viewerModule/nehuba/config.service/config.service.spec.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import 'reflect-metadata' 2 | import './main-common' 3 | -------------------------------------------------------------------------------- /src/routerModule/const.ts: -------------------------------------------------------------------------------- 1 | export const STATE_DEBOUNCE_MS = 160 2 | -------------------------------------------------------------------------------- /src/share/index.ts: -------------------------------------------------------------------------------- 1 | export { ShareModule } from './share.module' 2 | -------------------------------------------------------------------------------- /src/viewerModule/threeSurfer/tsViewerConfig/tsViewerConfig.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/freeModeModule/index.ts: -------------------------------------------------------------------------------- 1 | export { FreeModeModule } from "./module" 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | src/atlasComponents/sapi/schema.ts linguist-generated=true 2 | -------------------------------------------------------------------------------- /docs/requirements.txt: -------------------------------------------------------------------------------- 1 | mkdocs 2 | mkdocs-material 3 | mdx_truly_sane_lists 4 | -------------------------------------------------------------------------------- /src/features/plotly/plot/plot.component.html: -------------------------------------------------------------------------------- 1 |
-------------------------------------------------------------------------------- /src/plugin/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | PluginModule 3 | } from './plugin.module' -------------------------------------------------------------------------------- /src/sharedModules/icon/icon.style.scss: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | margin: auto; 4 | } -------------------------------------------------------------------------------- /src/state/annotations/const.ts: -------------------------------------------------------------------------------- 1 | export const nameSpace = `[state.annotations]` -------------------------------------------------------------------------------- /src/ui/bottomMenu/index.ts: -------------------------------------------------------------------------------- 1 | export { BottomMenuModule } from "./module" 2 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/nehubaViewerInterface/nehubaViewerContainer.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | *.spec.ts 2 | src/atlasComponents/sapi/schema.ts 3 | **/*.stories.ts -------------------------------------------------------------------------------- /docs/releases/v2.5.3.md: -------------------------------------------------------------------------------- 1 | # v2.5.3 2 | 3 | ## Bugfixes 4 | 5 | - revert v2.5.2 6 | -------------------------------------------------------------------------------- /src/components/overlay/index.ts: -------------------------------------------------------------------------------- 1 | export { SxplrOverlaySvc } from "./overlay.service" -------------------------------------------------------------------------------- /src/routerModule/index.ts: -------------------------------------------------------------------------------- 1 | export { AtlasViewerRouterModule } from './module' 2 | -------------------------------------------------------------------------------- /src/sharedModules/icon/index.ts: -------------------------------------------------------------------------------- 1 | export { IconComponent } from "./icon.component" -------------------------------------------------------------------------------- /src/viewerModule/threeSurfer/store/const.ts: -------------------------------------------------------------------------------- 1 | export const nameSpace = `[threeSurfer]` -------------------------------------------------------------------------------- /backend/pytest.ini: -------------------------------------------------------------------------------- 1 | [pytest] 2 | pythonpath = . 3 | testpaths = 4 | test_app 5 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/rich/regionsListSearch/regionListSearch.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/atlasComponents/userAnnotations/singleAnnotationUnit/singleAnnotationUnit.style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/flatHierarchy/index.ts: -------------------------------------------------------------------------------- 1 | export { SxplrFlatHierarchyModule } from "./module" -------------------------------------------------------------------------------- /src/state/userInteraction/const.ts: -------------------------------------------------------------------------------- 1 | export const nameSpace = `[state.userInteraction]` -------------------------------------------------------------------------------- /src/version.css: -------------------------------------------------------------------------------- 1 | /* fall back */ 2 | body::after 3 | { 4 | content: 'dev build'; 5 | } -------------------------------------------------------------------------------- /src/viewerModule/threeSurfer/index.ts: -------------------------------------------------------------------------------- 1 | export { ThreeSurferModule } from './module' 2 | -------------------------------------------------------------------------------- /docs/releases/v2.14.9.md: -------------------------------------------------------------------------------- 1 | # v2.14.9 2 | 3 | ## Bugfix 4 | 5 | - Fix deployment issues 6 | -------------------------------------------------------------------------------- /docs/releases/v2.6.10.md: -------------------------------------------------------------------------------- 1 | # 2.6.9 2 | 3 | ## Bugfix 4 | 5 | - Remove empty quick tour. 6 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/util/index.ts: -------------------------------------------------------------------------------- 1 | export { SapiViewsUtilModule } from "./module" -------------------------------------------------------------------------------- /src/components/markdown/markdownCmp/markdown.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | display: block; 4 | } -------------------------------------------------------------------------------- /src/features/plotly/plot/plot.component.scss: -------------------------------------------------------------------------------- 1 | .plotly-root 2 | { 3 | width:100%; 4 | } 5 | -------------------------------------------------------------------------------- /src/util/side-panel/side-panel.component.scss: -------------------------------------------------------------------------------- 1 | mat-card-header 2 | { 3 | padding: 16px; 4 | } -------------------------------------------------------------------------------- /src/viewerModule/nehuba/viewerCtrl/index.ts: -------------------------------------------------------------------------------- 1 | export { ViewerCtrlModule } from './module' 2 | -------------------------------------------------------------------------------- /src/viewerModule/threeSurfer/tsViewerConfig/tsViewerConfig.template.html: -------------------------------------------------------------------------------- 1 | tsviewer config 2 | -------------------------------------------------------------------------------- /docs/releases/v2.14.19.md: -------------------------------------------------------------------------------- 1 | # v2.14.19 2 | 3 | ## Bugfix 4 | 5 | - Fixed Safari not loading bug -------------------------------------------------------------------------------- /docs/releases/v2.5.2.md: -------------------------------------------------------------------------------- 1 | # v2.5.2 2 | 3 | ## Bugfixes 4 | 5 | - fix big brain high resolution maps -------------------------------------------------------------------------------- /docs/releases/v2.4.6.md: -------------------------------------------------------------------------------- 1 | # v2.4.6 2 | 3 | ## Bugfixes 4 | 5 | - Fix space press issue on full view 6 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/region/index.ts: -------------------------------------------------------------------------------- 1 | export { SapiViewsCoreRegionModule } from "./module" -------------------------------------------------------------------------------- /src/components/dynamicMaterialBtn/dynamicMaterialBtn.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | background: none; 4 | } -------------------------------------------------------------------------------- /src/features/atlas-colormap-intents/index.ts: -------------------------------------------------------------------------------- 1 | export { AtlasColorMapIntents } from "./intents.component" -------------------------------------------------------------------------------- /src/features/plotly/index.ts: -------------------------------------------------------------------------------- 1 | export { PlotComponent as PlotlyComponent } from "./plot/plot.component" -------------------------------------------------------------------------------- /src/plugin/types.ts: -------------------------------------------------------------------------------- 1 | export type PluginManifest = { 2 | name: string 3 | iframeUrl: string 4 | } 5 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/viewerCtrl/snapPerspectiveOrientation/snapPerspectiveOrientation.style.sass: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/releases/v2.3.4.md: -------------------------------------------------------------------------------- 1 | # v2.3.4 2 | 3 | ## Bugfixes 4 | 5 | - fix connectivity dataset external link 6 | -------------------------------------------------------------------------------- /docs/releases/v2.3.6.md: -------------------------------------------------------------------------------- 1 | # v2.3.6 2 | 3 | ## Bugfixes 4 | 5 | - fix backwards compatibility with some URLs -------------------------------------------------------------------------------- /docs/releases/v2.4.1.md: -------------------------------------------------------------------------------- 1 | # v2.4.1 2 | 3 | ## Bugfixes 4 | 5 | - fix JulichBrain v2.5.0/v1.18 URL redirection -------------------------------------------------------------------------------- /docs/releases/v2.6.9.md: -------------------------------------------------------------------------------- 1 | # 2.6.9 2 | 3 | ## Bugfix 4 | 5 | - Bumped version of ng-layer-tune dependency 6 | -------------------------------------------------------------------------------- /src/atlasComponents/userAnnotations/constants.ts: -------------------------------------------------------------------------------- 1 | export const userAnnotationRouteKey = 'x-user-anntn' 2 | -------------------------------------------------------------------------------- /src/auth/index.ts: -------------------------------------------------------------------------------- 1 | export { AuthModule } from './auth.module' 2 | export { AuthService } from './auth.service' -------------------------------------------------------------------------------- /src/plugin/pluginBanner/pluginBanner.style.css: -------------------------------------------------------------------------------- 1 | .sub 2 | { 3 | transform: translate(25%, 25%); 4 | } 5 | -------------------------------------------------------------------------------- /docs/releases/v2.3.2.md: -------------------------------------------------------------------------------- 1 | # v2.3.2 2 | 3 | ## Bugfixes 4 | 5 | - change URL source for connectivity browser. 6 | -------------------------------------------------------------------------------- /docs/releases/v2.3.7.md: -------------------------------------------------------------------------------- 1 | # v2.3.7 2 | 3 | ## Under the hood stuff 4 | 5 | - Enable CI for release workflow. 6 | -------------------------------------------------------------------------------- /docs/releases/v2.3.8.md: -------------------------------------------------------------------------------- 1 | # v2.3.8 2 | 3 | ## New Features 4 | 5 | - Adding control allowing delineation control -------------------------------------------------------------------------------- /docs/releases/v2.3.9.md: -------------------------------------------------------------------------------- 1 | # v2.3.9 2 | 3 | ## Bugfixes 4 | 5 | - Explore in other templates sometimes bugs out. -------------------------------------------------------------------------------- /docs/releases/v2.6.1.md: -------------------------------------------------------------------------------- 1 | # v2.6.1 2 | 3 | ## Bugfix 4 | 5 | - Fixed perspective view orientation button colors -------------------------------------------------------------------------------- /docs/releases/v2.7.7.md: -------------------------------------------------------------------------------- 1 | # v2.7.7 2 | 3 | ## Bugfix 4 | 5 | - Fixed region hierarchy losing interactivity 6 | -------------------------------------------------------------------------------- /src/assets/images/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/1.png -------------------------------------------------------------------------------- /src/assets/images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/2.png -------------------------------------------------------------------------------- /src/assets/images/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/3.png -------------------------------------------------------------------------------- /src/auth/signinModal/signinModal.style.css: -------------------------------------------------------------------------------- 1 | a 2 | { 3 | display:inline-block; 4 | margin-top: 0.25rem; 5 | } -------------------------------------------------------------------------------- /src/components/tab/tab.style.scss: -------------------------------------------------------------------------------- 1 | i 2 | { 3 | margin-left:0.5rem; 4 | margin-right:-0.5rem; 5 | } 6 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/layoutOverlay/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | NehubaLayoutOverlayModule 3 | } from "./module" 4 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/mesh.service/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | NehubaMeshService 3 | } from './mesh.service' 4 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/statusCard/statusCard.style.css: -------------------------------------------------------------------------------- 1 | .expandedContainer 2 | { 3 | width: 26rem; 4 | } 5 | -------------------------------------------------------------------------------- /.storybook/typings.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.md' { 2 | const content: string; 3 | export default content; 4 | } 5 | -------------------------------------------------------------------------------- /docs/releases/v2.6.8.md: -------------------------------------------------------------------------------- 1 | # 2.6.8 2 | 3 | ## Bugfix 4 | 5 | - increment siibra-api version, fix ebrains dataset 6 | -------------------------------------------------------------------------------- /src/assets/images/1-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/1-100.png -------------------------------------------------------------------------------- /src/assets/images/1-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/1-200.png -------------------------------------------------------------------------------- /src/assets/images/1-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/1-300.png -------------------------------------------------------------------------------- /src/assets/images/1-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/1-400.png -------------------------------------------------------------------------------- /src/assets/images/2-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/2-100.png -------------------------------------------------------------------------------- /src/assets/images/2-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/2-200.png -------------------------------------------------------------------------------- /src/assets/images/2-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/2-300.png -------------------------------------------------------------------------------- /src/assets/images/2-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/2-400.png -------------------------------------------------------------------------------- /src/assets/images/3-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/3-100.png -------------------------------------------------------------------------------- /src/assets/images/3-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/3-200.png -------------------------------------------------------------------------------- /src/assets/images/3-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/3-300.png -------------------------------------------------------------------------------- /src/assets/images/3-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/3-400.png -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/rich/ATPSelector/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | ATPSelectorModule 3 | } from "./module" -------------------------------------------------------------------------------- /src/res/icons/iav-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/res/icons/iav-icons.ttf -------------------------------------------------------------------------------- /docs/releases/legacy.md: -------------------------------------------------------------------------------- 1 | # legacy 2 | 3 | Apr 2018 4 | 5 | First prototype of interactive atlas viewer wrapping nehuba 6 | -------------------------------------------------------------------------------- /src/components/spinner/spinnerCmp/spinner.template.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /src/features/compoundFeatureIndices/compoundFeatureIndices.style.css: -------------------------------------------------------------------------------- 1 | .mat-mdc-cell 2 | { 3 | cursor: pointer; 4 | } 5 | -------------------------------------------------------------------------------- /src/logging/index.ts: -------------------------------------------------------------------------------- 1 | export { LoggingModule } from './logging.module' 2 | export { LoggingService } from './logging.service' -------------------------------------------------------------------------------- /src/res/icons/iav-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/res/icons/iav-icons.woff -------------------------------------------------------------------------------- /src/ui/help/howToCite/howToCite.template.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/releases/v2.11.4.md: -------------------------------------------------------------------------------- 1 | # v2.11.4 2 | 3 | ## Bugfixes 4 | 5 | - fix fsaverage label issue (by bumping siibra-api version) 6 | -------------------------------------------------------------------------------- /docs/releases/v2.4.5.md: -------------------------------------------------------------------------------- 1 | # v2.4.5 2 | 3 | ## README 4 | - Modify the readme file with integration into the Siibra naming. 5 | -------------------------------------------------------------------------------- /docs/releases/v2.7.1.md: -------------------------------------------------------------------------------- 1 | # v2.7.1 2 | 3 | ## Bugfix 4 | 5 | - fixed region detail fetching using duplicated id as endpoint 6 | -------------------------------------------------------------------------------- /src/assets/images/MNIColin27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/MNIColin27.png -------------------------------------------------------------------------------- /src/assets/images/big-brain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/big-brain.png -------------------------------------------------------------------------------- /src/layouts/currentLayout/currentLayout.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | width: 100%; 4 | height: 100%; 5 | display: block; 6 | } -------------------------------------------------------------------------------- /src/mouseoverModule/index.ts: -------------------------------------------------------------------------------- 1 | export { MouseOver } from "./mouseover.component" 2 | export { MouseOverSvc } from "./service" 3 | -------------------------------------------------------------------------------- /src/strictLocal/index.ts: -------------------------------------------------------------------------------- 1 | export { StrictLocalModule } from "./module" 2 | export { HideWhenLocal } from "./strictLocal.directive" -------------------------------------------------------------------------------- /src/util/recursivePartial.ts: -------------------------------------------------------------------------------- 1 | export type RecursivePartial = Partial<{ 2 | [K in keyof T]: RecursivePartial 3 | }> 4 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/viewerCtrl/viewerCtrlCmp/viewerCtrlCmp.style.css: -------------------------------------------------------------------------------- 1 | mat-divider 2 | { 3 | margin-top: 1rem; 4 | } 5 | -------------------------------------------------------------------------------- /docs/releases/v2.14.14.md: -------------------------------------------------------------------------------- 1 | # v2.14.14 2 | 3 | ## Bugfix 4 | 5 | - bigbrain download current view now properly parse bounding box 6 | -------------------------------------------------------------------------------- /docs/releases/v2.5.6.md: -------------------------------------------------------------------------------- 1 | # v2.5.6 2 | 3 | ## Bugfix 4 | 5 | - re-introduced explore in KG button for parcellation citations 6 | 7 | -------------------------------------------------------------------------------- /src/atlasComponents/userAnnotations/tools/line/line.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | display: flex; 4 | flex-direction: column; 5 | } -------------------------------------------------------------------------------- /src/components/flatHierarchy/const.ts: -------------------------------------------------------------------------------- 1 | export type TreeNode = { 2 | node: T 3 | level: number 4 | expandable: boolean 5 | } -------------------------------------------------------------------------------- /src/spotlight/spotlight-backdrop/spotlight-backdrop.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/state/plugins/const.ts: -------------------------------------------------------------------------------- 1 | export const nameSpace = `[state.plugins]` 2 | export const INIT_MANIFEST_SRC = `__INIT_MANFEST_SRC__` 3 | -------------------------------------------------------------------------------- /docs/releases/v2.6.4.md: -------------------------------------------------------------------------------- 1 | # v2.6.4 2 | 3 | ## Bugfixes 4 | 5 | - Temporarily fixed an issue where saneurl queries were paginated 6 | 7 | -------------------------------------------------------------------------------- /src/assets/images/MNIColin27-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/MNIColin27-100.png -------------------------------------------------------------------------------- /src/assets/images/MNIColin27-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/MNIColin27-200.png -------------------------------------------------------------------------------- /src/assets/images/MNIColin27-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/MNIColin27-300.png -------------------------------------------------------------------------------- /src/assets/images/MNIColin27-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/MNIColin27-400.png -------------------------------------------------------------------------------- /src/assets/images/how-to-cite-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/how-to-cite-1.png -------------------------------------------------------------------------------- /src/assets/images/how-to-cite-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/how-to-cite-2.png -------------------------------------------------------------------------------- /src/assets/images/how-to-cite-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/how-to-cite-3.png -------------------------------------------------------------------------------- /src/atlasComponents/userAnnotations/tools/poly/poly.style.css: -------------------------------------------------------------------------------- 1 | point-update-cmp 2 | { 3 | width: 100%; 4 | display: block; 5 | } 6 | -------------------------------------------------------------------------------- /src/features/connectivity/connectivityBrowser/connectivityBrowser.style.scss: -------------------------------------------------------------------------------- 1 | ::ng-deep label { 2 | margin-bottom: 0 !important; 3 | } -------------------------------------------------------------------------------- /src/layouts/layouts/single/single.template.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | -------------------------------------------------------------------------------- /src/viewerModule/index.ts: -------------------------------------------------------------------------------- 1 | export { ViewerModule } from "./module" 2 | export { ViewerCommonEffects } from "./viewer.common.effects" 3 | -------------------------------------------------------------------------------- /src/zipFilesOutput/type.ts: -------------------------------------------------------------------------------- 1 | export type TZipFileConfig = { 2 | filename: string 3 | filecontent: string 4 | base64?: boolean 5 | } -------------------------------------------------------------------------------- /backend/app/well-known/security.txt: -------------------------------------------------------------------------------- 1 | # If you would like to report a security issue, please contact us via: 2 | Contact: inm1-bda@fz-juelich.de -------------------------------------------------------------------------------- /docs/images/siibra-explorer-square.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/docs/images/siibra-explorer-square.jpeg -------------------------------------------------------------------------------- /docs/releases/v2.3.10.md: -------------------------------------------------------------------------------- 1 | # v2.3.10 2 | 3 | ## Hotfixes 4 | 5 | - Update the logic saneURL, as object storage was no longer available. (#923) -------------------------------------------------------------------------------- /src/assets/images/BigBrainHistology.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/BigBrainHistology.png -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | SapiViewsModule 3 | } from "./module" 4 | export { SapiViewsUtilModule } from "./util" -------------------------------------------------------------------------------- /src/components/markdown/index.ts: -------------------------------------------------------------------------------- 1 | export { MarkdownModule } from "./module" 2 | export { MarkdownDom } from "./markdownCmp/markdown.component" -------------------------------------------------------------------------------- /src/dragDropFile/index.ts: -------------------------------------------------------------------------------- 1 | export { DragDropFileModule } from "./module" 2 | export { DragDropFileDirective } from "./dragDrop.directive" 3 | -------------------------------------------------------------------------------- /docs/releases/v2.13.5.md: -------------------------------------------------------------------------------- 1 | # v2.13.5 2 | 3 | ## Bugfix 4 | 5 | - Fix saneurl generation. Logged in user can generate long lived saneurls again 6 | -------------------------------------------------------------------------------- /docs/releases/v2.2.7.md: -------------------------------------------------------------------------------- 1 | # v2.2.7 2 | 3 | 03 Nov 2020 4 | 5 | ## Bugfixes 6 | 7 | - Changed the name of Julich-Brain to better reflect the atlas -------------------------------------------------------------------------------- /docs/releases/v2.7.4.md: -------------------------------------------------------------------------------- 1 | # v2.7.4 2 | 3 | ## Bugfix 4 | 5 | - Properly use fallback when detecting fault 6 | - Minor wording/cosmetic change 7 | -------------------------------------------------------------------------------- /src/assets/favicons/favicon-128-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/favicons/favicon-128-light.png -------------------------------------------------------------------------------- /src/components/readmore/index.ts: -------------------------------------------------------------------------------- 1 | export { ReadmoreModule } from './module' 2 | export { ReadmoreComponent } from './readmoreCmp/readmore.component' -------------------------------------------------------------------------------- /src/keyframesModule/constants.ts: -------------------------------------------------------------------------------- 1 | import { ARIA_LABELS } from 'common/constants' 2 | export const KEYFRAME_VIEWMODE = ARIA_LABELS.VIEWER_MODE_KEYFRAME -------------------------------------------------------------------------------- /src/ui/logoContainer/logoContainer.template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /docs/releases/v2.14.17.md: -------------------------------------------------------------------------------- 1 | # v2.14.17 2 | 3 | ## Documentation 4 | 5 | - added video tutorial on drag and drop nifti 6 | - fixed latest release script -------------------------------------------------------------------------------- /docs/releases/v2.2.1.md: -------------------------------------------------------------------------------- 1 | # v2.2.1 2 | 3 | 26 May 2020 4 | 5 | ## Bugfixes 6 | 7 | - fixed connectivity menu showing non existent connectivity data 8 | -------------------------------------------------------------------------------- /docs/releases/v2.3.5.md: -------------------------------------------------------------------------------- 1 | # v2.3.5 2 | 3 | ## Under the hood stuff 4 | 5 | - Temporarily disable Colin 27 template. 6 | - Update to JulichBrain v2.5 7 | -------------------------------------------------------------------------------- /docs/releases/v2.6.3.md: -------------------------------------------------------------------------------- 1 | # v2.6.3 2 | 3 | ## Bugfixes 4 | 5 | - Fixed an issue where inter-space selection of parcellation was not possible. 6 | 7 | -------------------------------------------------------------------------------- /src/assets/academicons/fonts/academicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/academicons/fonts/academicons.eot -------------------------------------------------------------------------------- /src/assets/academicons/fonts/academicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/academicons/fonts/academicons.ttf -------------------------------------------------------------------------------- /src/assets/images/BigBrainHistology-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/BigBrainHistology-100.png -------------------------------------------------------------------------------- /src/assets/images/BigBrainHistology-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/BigBrainHistology-200.png -------------------------------------------------------------------------------- /src/assets/images/BigBrainHistology-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/BigBrainHistology-300.png -------------------------------------------------------------------------------- /src/assets/images/BigBrainHistology-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/BigBrainHistology-400.png -------------------------------------------------------------------------------- /src/atlasComponents/constants.ts: -------------------------------------------------------------------------------- 1 | export enum EnumClassicalView { 2 | CORONAL = "Coronal", 3 | SAGITTAL = "Sagittal", 4 | AXIAL = "Axial", 5 | } 6 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | import { environment as commonEnv } from './environment.common' 2 | export const environment = { 3 | ...commonEnv 4 | } -------------------------------------------------------------------------------- /src/util/windowResize/index.ts: -------------------------------------------------------------------------------- 1 | export { WindowResizeModule } from './module' 2 | export { ResizeObserverDirective } from './windowResize.directive' 3 | -------------------------------------------------------------------------------- /docs/releases/v2.14.25.md: -------------------------------------------------------------------------------- 1 | # v2.14.25 2 | 3 | ## Features 4 | 5 | - bumped siibra-api version - added regional connectivity support to Julich Brain 3.1 6 | -------------------------------------------------------------------------------- /src/assets/academicons/fonts/academicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/academicons/fonts/academicons.woff -------------------------------------------------------------------------------- /src/assets/images/persp-view/allen_axial_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/allen_axial_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/allen_axial_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/allen_axial_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/mni152_axial_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/mni152_axial_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/mni152_axial_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/mni152_axial_1.png -------------------------------------------------------------------------------- /src/assets/logo/HBP_Primary_RGB_BlackText.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/logo/HBP_Primary_RGB_BlackText.png -------------------------------------------------------------------------------- /src/assets/logo/HBP_Primary_RGB_WhiteText.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/logo/HBP_Primary_RGB_WhiteText.png -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/rich/ATPSelector/pureDumbDropdown/pureATPDropDown.style.css: -------------------------------------------------------------------------------- 1 | .option-container 2 | { 3 | text-wrap: nowrap; 4 | } 5 | -------------------------------------------------------------------------------- /src/components/spinner/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | SpinnerModule 3 | } from "./module" 4 | export { 5 | SpinnerCmp 6 | } from "./spinnerCmp/spinner.component" -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | import { environment as commonEnv } from './environment.common' 2 | export const environment = { 3 | ...commonEnv 4 | } -------------------------------------------------------------------------------- /src/sharedModules/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | AngularMaterialModule 3 | } from './angularMaterial.module' 4 | 5 | export * from './angularMaterial.exports' 6 | -------------------------------------------------------------------------------- /third_party/extra_js.js: -------------------------------------------------------------------------------- 1 | // disable zone patching of raf. This hampers NG performance significantly 2 | window['__Zone_disable_requestAnimationFrame'] = true -------------------------------------------------------------------------------- /src/assets/fontawesome/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/fontawesome/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /src/assets/fontawesome/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/fontawesome/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /src/assets/fontawesome/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/fontawesome/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /src/assets/fontawesome/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/fontawesome/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /src/assets/fontawesome/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/fontawesome/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /src/assets/images/WaxholmSpaceratbrainMRIDTI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/WaxholmSpaceratbrainMRIDTI.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/allen_coronal_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/allen_coronal_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/allen_coronal_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/allen_coronal_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/allen_sagittal_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/allen_sagittal_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/allen_sagittal_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/allen_sagittal_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/bigbrain_axial_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/bigbrain_axial_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/bigbrain_axial_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/bigbrain_axial_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/colin27_axial_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/colin27_axial_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/colin27_axial_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/colin27_axial_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/mebrains_axial_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/mebrains_axial_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/mebrains_axial_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/mebrains_axial_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/mni152_coronal_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/mni152_coronal_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/mni152_coronal_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/mni152_coronal_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/waxholm_axial_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/waxholm_axial_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/waxholm_axial_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/waxholm_axial_1.png -------------------------------------------------------------------------------- /src/components/overlay/overlay.template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ data.message }} 4 | 5 | 6 | -------------------------------------------------------------------------------- /.metaSpec/example.min.meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./meta.schema.json", 3 | "version": 1, 4 | "preferredColormap": ["magma", "plasma", "greyscale"] 5 | } 6 | -------------------------------------------------------------------------------- /.metaSpec/meta.schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema", 3 | "oneOf": [{ 4 | "$ref": "meta.schema.v1.json" 5 | }] 6 | } -------------------------------------------------------------------------------- /src/assets/fontawesome/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/fontawesome/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /src/assets/fontawesome/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/fontawesome/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /src/assets/fontawesome/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/fontawesome/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /src/assets/fontawesome/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/fontawesome/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /src/assets/fontawesome/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/fontawesome/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /src/assets/fontawesome/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/fontawesome/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /src/assets/fontawesome/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/fontawesome/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /src/assets/images/ICBM2009cNonlinearAsymmetric.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/ICBM2009cNonlinearAsymmetric.png -------------------------------------------------------------------------------- /src/assets/images/WaxholmSpaceratbrainMRIDTI-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/WaxholmSpaceratbrainMRIDTI-100.png -------------------------------------------------------------------------------- /src/assets/images/WaxholmSpaceratbrainMRIDTI-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/WaxholmSpaceratbrainMRIDTI-200.png -------------------------------------------------------------------------------- /src/assets/images/WaxholmSpaceratbrainMRIDTI-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/WaxholmSpaceratbrainMRIDTI-300.png -------------------------------------------------------------------------------- /src/assets/images/WaxholmSpaceratbrainMRIDTI-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/WaxholmSpaceratbrainMRIDTI-400.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/bigbrain_coronal_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/bigbrain_coronal_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/bigbrain_coronal_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/bigbrain_coronal_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/bigbrain_sagittal_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/bigbrain_sagittal_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/bigbrain_sagittal_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/bigbrain_sagittal_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/colin27_coronal_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/colin27_coronal_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/colin27_coronal_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/colin27_coronal_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/colin27_sagittal_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/colin27_sagittal_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/colin27_sagittal_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/colin27_sagittal_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/mebrains_coronal_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/mebrains_coronal_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/mebrains_coronal_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/mebrains_coronal_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/mebrains_sagittal_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/mebrains_sagittal_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/mebrains_sagittal_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/mebrains_sagittal_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/mni152_sagittal_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/mni152_sagittal_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/mni152_sagittal_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/mni152_sagittal_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/waxholm_coronal_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/waxholm_coronal_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/waxholm_coronal_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/waxholm_coronal_1.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/waxholm_sagittal_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/waxholm_sagittal_0.png -------------------------------------------------------------------------------- /src/assets/images/persp-view/waxholm_sagittal_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/persp-view/waxholm_sagittal_1.png -------------------------------------------------------------------------------- /tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "files": [ 4 | "spec/test.ts" 5 | ], 6 | "include": [ 7 | "src/**/*.spec.ts" 8 | ] 9 | } -------------------------------------------------------------------------------- /docs/releases/v2.2.5.md: -------------------------------------------------------------------------------- 1 | # v2.2.5 2 | 3 | 28 July 2020 4 | 5 | ## Bugfixes 6 | 7 | - Fixed status panel voxel/real toggle ineffective bug (Thanks to Dr El Mysteryo) 8 | -------------------------------------------------------------------------------- /src/assets/images/ICBM2009cNonlinearAsymmetric-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/ICBM2009cNonlinearAsymmetric-100.png -------------------------------------------------------------------------------- /src/assets/images/ICBM2009cNonlinearAsymmetric-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/ICBM2009cNonlinearAsymmetric-200.png -------------------------------------------------------------------------------- /src/assets/images/ICBM2009cNonlinearAsymmetric-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/ICBM2009cNonlinearAsymmetric-300.png -------------------------------------------------------------------------------- /src/assets/images/ICBM2009cNonlinearAsymmetric-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/ICBM2009cNonlinearAsymmetric-400.png -------------------------------------------------------------------------------- /src/atlasComponents/sapi/index.ts: -------------------------------------------------------------------------------- 1 | export { SAPIModule } from './module' 2 | 3 | export { SAPI } from "./sapi.service" 4 | 5 | export { 6 | IDS 7 | } from "./constants" -------------------------------------------------------------------------------- /src/features/pointcloud-intents/index.ts: -------------------------------------------------------------------------------- 1 | export { isPoint, FilterPointTransformer, CFIndex } from "./util" 2 | // export { PointCloudIntents } from "./intents.component" 3 | -------------------------------------------------------------------------------- /src/screenshot/index.ts: -------------------------------------------------------------------------------- 1 | export { ScreenshotModule } from './module' 2 | export { 3 | HANDLE_SCREENSHOT_PROMISE, 4 | TypeHandleScrnShotPromise, 5 | } from './util' 6 | -------------------------------------------------------------------------------- /docs/releases/v2.14.21.md: -------------------------------------------------------------------------------- 1 | # v2.14.21 2 | 3 | ## Bugfix 4 | 5 | - fix the URL of older versions of explorer incorrectly showing delineation flag 6 | - fix annotation vary header -------------------------------------------------------------------------------- /docs/releases/v2.4.3.md: -------------------------------------------------------------------------------- 1 | # v2.4.3 2 | 3 | ## Bugfixes 4 | 5 | - fix some of the big brain maps 6 | - added UI indication for deprecation/unavailability of functionalities 7 | -------------------------------------------------------------------------------- /src/assets/images/MNI152ICBM2009cNonlinearAsymmetric.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/MNI152ICBM2009cNonlinearAsymmetric.png -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | SapiViewsCoreModule 3 | } from "./module" 4 | 5 | export { 6 | SapiViewsCoreSpaceBoundingBox 7 | } from "./space" -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/rich/ATPSelector/wrapper/wrapper.style.css: -------------------------------------------------------------------------------- 1 | [parcellation-chip-suffix] 2 | { 3 | margin-right: -1rem; 4 | margin-left: 0.2rem; 5 | } 6 | -------------------------------------------------------------------------------- /src/components/index.ts: -------------------------------------------------------------------------------- 1 | export { ComponentsModule } from './components.module' 2 | export { SxplrSnackBarCfg, SxplrSnackDialogCmp, SxplrSnackBarSvc } from "./snackDialog" 3 | -------------------------------------------------------------------------------- /src/components/snackDialog/index.ts: -------------------------------------------------------------------------------- 1 | export { SxplrSnackBarCfg, SxplrSnackDialogCmp } from "./snackDialog.component" 2 | export { SxplrSnackBarSvc } from "./snackDialog.service" -------------------------------------------------------------------------------- /src/spotlight/const.ts: -------------------------------------------------------------------------------- 1 | import { InjectionToken, TemplateRef } from "@angular/core"; 2 | 3 | export const TMPL_INJ_TOKEN = new InjectionToken>('TMPL_INJ_TOKEN') -------------------------------------------------------------------------------- /src/viewerModule/nehuba/userLayers/index.ts: -------------------------------------------------------------------------------- 1 | export { NehubaUserLayerModule } from "./module" 2 | export { UserLayerDragDropDirective } from "./userlayerDragdrop.directive" 3 | -------------------------------------------------------------------------------- /docs/releases/v0.2.0.md: -------------------------------------------------------------------------------- 1 | # v0.2.0 2 | 3 | 6 Apr 2018 4 | 5 | [release](https://github.com/HumanBrainProject/interactive-viewer/releases/tag/v0.2.0) 6 | 7 | Updated plugin APIs. 8 | -------------------------------------------------------------------------------- /docs/releases/v2.11.3.md: -------------------------------------------------------------------------------- 1 | # v2.11.3 2 | 3 | ## Bugfixes 4 | 5 | - Fix ng-layer-tune not persisting shader selection 6 | 7 | ## Behind the scene 8 | 9 | - Bump siibra-api version -------------------------------------------------------------------------------- /docs/releases/v2.2.4.md: -------------------------------------------------------------------------------- 1 | # v2.2.4 2 | 3 | 15 June 2020 4 | 5 | ## Bugfixes 6 | 7 | - Fixed parcellation region colors are invisible after template change when region selected #543 -------------------------------------------------------------------------------- /docs/releases/v2.5.8.md: -------------------------------------------------------------------------------- 1 | # v2.5.8 2 | 3 | ## Bugfix 4 | 5 | - fixed user annotation with saneurl 6 | 7 | ## Under the hood 8 | 9 | - remove unnecessary UI refreshes 10 | -------------------------------------------------------------------------------- /src/atlasComponents/annotations/index.ts: -------------------------------------------------------------------------------- 1 | export { TNgAnnotationAABBox, AnnotationLayer, TNgAnnotationPoint, TNgAnnotationLine, promiseViewer, getViewer } from "./annotation.service" -------------------------------------------------------------------------------- /docs/releases/v0.1.0.md: -------------------------------------------------------------------------------- 1 | # v0.1.0 2 | 3 | 3 Apr 2018 4 | 5 | [release](https://github.com/HumanBrainProject/interactive-viewer/releases/tag/v0.1.0) 6 | 7 | Implemented plugin APIs. 8 | -------------------------------------------------------------------------------- /docs/releases/v2.13.3.md: -------------------------------------------------------------------------------- 1 | # v2.13.3 2 | 3 | ## Feature 4 | 5 | - 1um section now does not move x,z position 6 | 7 | ## Behind the scene 8 | 9 | - user added layer now sits on index 1 -------------------------------------------------------------------------------- /src/assets/images/MNI152ICBM2009cNonlinearAsymmetric-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/MNI152ICBM2009cNonlinearAsymmetric-100.png -------------------------------------------------------------------------------- /src/assets/images/MNI152ICBM2009cNonlinearAsymmetric-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/MNI152ICBM2009cNonlinearAsymmetric-200.png -------------------------------------------------------------------------------- /src/assets/images/MNI152ICBM2009cNonlinearAsymmetric-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/MNI152ICBM2009cNonlinearAsymmetric-300.png -------------------------------------------------------------------------------- /src/assets/images/MNI152ICBM2009cNonlinearAsymmetric-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/MNI152ICBM2009cNonlinearAsymmetric-400.png -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/space/index.ts: -------------------------------------------------------------------------------- 1 | export { SapiViewsCoreSpaceModule } from "./module" 2 | export { 3 | SapiViewsCoreSpaceBoundingBox 4 | } from "./boundingBox.directive" -------------------------------------------------------------------------------- /docs/releases/v2.14.8.md: -------------------------------------------------------------------------------- 1 | # v2.14.8 2 | 3 | ## Bugfix 4 | 5 | - fixed issue of displaying statistical maps 6 | 7 | ## Behind the Scenes 8 | 9 | - Minor tweak on e2e screenshots 10 | -------------------------------------------------------------------------------- /src/assets/images/AllenMouseCommonCoordinateFrameworkv32015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/AllenMouseCommonCoordinateFrameworkv32015.png -------------------------------------------------------------------------------- /src/state/userInterface/const.ts: -------------------------------------------------------------------------------- 1 | export const nameSpace = `[state.ui]` 2 | export type PanelMode = 'FOUR_PANEL' 3 | | 'V_ONE_THREE' 4 | | 'H_ONE_THREE' 5 | | 'SINGLE_PANEL' 6 | | 'PIP_PANEL' -------------------------------------------------------------------------------- /src/ui/dialogInfo/index.ts: -------------------------------------------------------------------------------- 1 | export { DialogDirective } from "./dialog.directive" 2 | export { DialogModule } from "./module" 3 | export { DialogFallbackCmp } from "./tmpl/tmpl.component" 4 | -------------------------------------------------------------------------------- /src/assets/images/AllenMouseCommonCoordinateFrameworkv32015-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/AllenMouseCommonCoordinateFrameworkv32015-100.png -------------------------------------------------------------------------------- /src/assets/images/AllenMouseCommonCoordinateFrameworkv32015-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/AllenMouseCommonCoordinateFrameworkv32015-200.png -------------------------------------------------------------------------------- /src/assets/images/AllenMouseCommonCoordinateFrameworkv32015-300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/AllenMouseCommonCoordinateFrameworkv32015-300.png -------------------------------------------------------------------------------- /src/assets/images/AllenMouseCommonCoordinateFrameworkv32015-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FZJ-INM1-BDA/siibra-explorer/HEAD/src/assets/images/AllenMouseCommonCoordinateFrameworkv32015-400.png -------------------------------------------------------------------------------- /src/components/markdown/markdownCmp/markdown.template.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | 6 | 7 |
-------------------------------------------------------------------------------- /src/ui/help/about/about.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | display: flex; 4 | flex-wrap: wrap; 5 | justify-content: center; 6 | } 7 | 8 | .newline 9 | { 10 | flex: 1 1 100%; 11 | } 12 | -------------------------------------------------------------------------------- /src/api/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | JRPCRequest, 3 | JRPCResp, 4 | JRPCSuccessResp, 5 | JRPCErrorResp, 6 | } from "./jsonrpc" 7 | 8 | export { 9 | ApiService, 10 | } from "./service" 11 | -------------------------------------------------------------------------------- /src/layouts/layouts/h13/h13.style.css: -------------------------------------------------------------------------------- 1 | .major-column 2 | { 3 | flex: 0 0 67%; 4 | } 5 | .minor-column 6 | { 7 | flex: 0 0 33%; 8 | } 9 | .layout-31-cell 10 | { 11 | flex: 0 0 33.33%; 12 | } -------------------------------------------------------------------------------- /src/layouts/layouts/v13/v13.style.css: -------------------------------------------------------------------------------- 1 | .major-column 2 | { 3 | flex: 0 0 67%; 4 | } 5 | .minor-column 6 | { 7 | flex: 0 0 33%; 8 | } 9 | .layout-31-cell 10 | { 11 | flex: 0 0 33.33%; 12 | } -------------------------------------------------------------------------------- /docs/advanced/differential_gene_expression_analysis.md: -------------------------------------------------------------------------------- 1 | # Differential Gene Expression Analysis 2 | 3 | (TBD) 4 | 7 | -------------------------------------------------------------------------------- /src/features/connectivity/index.ts: -------------------------------------------------------------------------------- 1 | export { ConnectivityBrowserComponent } from "./connectivityBrowser/connectivityBrowser.component"; 2 | export { SapiViewsFeatureConnectivityModule } from "./module"; 3 | -------------------------------------------------------------------------------- /src/layouts/layouts/single/single.style.css: -------------------------------------------------------------------------------- 1 | .major-column 2 | { 3 | flex: 0 0 100%; 4 | } 5 | .minor-column 6 | { 7 | flex: 0 0 0%; 8 | } 9 | .layout-31-cell 10 | { 11 | flex: 0 0 33%; 12 | } -------------------------------------------------------------------------------- /docs/releases/v2.14.6.md: -------------------------------------------------------------------------------- 1 | # v2.14.6 2 | 3 | ## Feature 4 | 5 | - (experimental) support `.pointcloud` drag-and-drop 6 | 7 | ## Bugfix 8 | 9 | - Fixed dependency support for new GCS JSON API 10 | 11 | -------------------------------------------------------------------------------- /docs/releases/v2.3.11.md: -------------------------------------------------------------------------------- 1 | # v2.3.11 2 | 3 | ## Bugfixes 4 | 5 | - Fix issues with not fetching datasets 6 | 7 | ## Under the hood stuff 8 | 9 | - Added CI for removing deploy on branch deletion 10 | -------------------------------------------------------------------------------- /src/components/smartChip/index.ts: -------------------------------------------------------------------------------- 1 | export { SmartChipModule } from "./module" 2 | export { SmartChip } from "./component/smartChip.component" 3 | export { SmartChipContent } from "./smartChip.content.directive" 4 | -------------------------------------------------------------------------------- /src/ui/kgtos/index.ts: -------------------------------------------------------------------------------- 1 | import { InjectionToken } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | 4 | export const TOS_OBS_INJECTION_TOKEN = new InjectionToken>('TOS_STRING') 5 | -------------------------------------------------------------------------------- /src/mouseoverModule/mouseover.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | display: inline-block; 4 | } 5 | 6 | .centered 7 | { 8 | display: flex; 9 | justify-content: center; 10 | align-items: center; 11 | } 12 | -------------------------------------------------------------------------------- /src/spotlight/spot-light-overlay.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive } from '@angular/core'; 2 | 3 | @Directive({ 4 | selector: '[sl-spotlight-overlay]' 5 | }) 6 | export class SpotLightOverlayDirective { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /docs/releases/v2.10.3.md: -------------------------------------------------------------------------------- 1 | # v2.10.3 2 | 3 | ## Bugfix 4 | 5 | - restore the wireframe for VOI (enable via toggle) 6 | - added "no spatial features found" where appropriate 7 | - fixed messaging for adding swc layer 8 | -------------------------------------------------------------------------------- /src/contextMenuModule/index.ts: -------------------------------------------------------------------------------- 1 | export { ContextMenuModule } from './module' 2 | export { TContextMenuReg, ContextMenuService } from './service' 3 | export { DismissCtxMenuDirective } from './dismissCtxMenu.directive' 4 | -------------------------------------------------------------------------------- /src/features/compoundFeatureIndices/index.ts: -------------------------------------------------------------------------------- 1 | export { CompoundFeatureIndices } from "./compoundFeatureIndices.component" 2 | export { CFIndex } from "./util" 3 | export { CompoundFeatureIndicesModule } from "./module" 4 | -------------------------------------------------------------------------------- /docs/releases/v2.5.5.md: -------------------------------------------------------------------------------- 1 | # v2.5.5 2 | 3 | ## Feature 4 | 5 | - Added pre-release warning 6 | 7 | ## Under the hood 8 | 9 | - Temporarily use up-to-date endpoint for MEBRAINS 10 | - Add fsaverage to checklist 11 | -------------------------------------------------------------------------------- /src/spotlight/sl-spotlight.directive.spec.ts: -------------------------------------------------------------------------------- 1 | import { SlSpotlightDirective } from './sl-spotlight.directive'; 2 | 3 | describe('SlSpotlightDirective', () => { 4 | it('should create an instance', () => { 5 | }); 6 | }); 7 | -------------------------------------------------------------------------------- /src/ui/quickTour/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | QuickTourModule 3 | } from './module' 4 | 5 | export { 6 | QuickTourThis 7 | } from './quickTourThis.directive' 8 | 9 | export { 10 | IQuickTourData 11 | } from './constrants' 12 | -------------------------------------------------------------------------------- /src/components/spinner/spinnerCmp/spinner.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: 'spinner-cmp', 5 | templateUrl: './spinner.template.html' 6 | }) 7 | 8 | export class SpinnerCmp{} 9 | -------------------------------------------------------------------------------- /docs/releases/v2.3.1.md: -------------------------------------------------------------------------------- 1 | # v2.3.1 2 | 3 | ## Bugfixes 4 | 5 | - fixes iEEG panel sometimes not loading spatial data (#816 #744) 6 | - fixes fetching of non-existent data when in big brain reference space (#817) 7 | - restore CI for staging/release -------------------------------------------------------------------------------- /docs/releases/v2.4.2.md: -------------------------------------------------------------------------------- 1 | # v2.4.2 2 | 3 | ## Bugfixes 4 | 5 | - fix template/parcellation selector vertical scroll on small devices 6 | - fix atlas order (human -> rat -> mouse) 7 | - fsaverage use pial as default viewing mode (if possible) 8 | -------------------------------------------------------------------------------- /src/components/coordTextBox/coordTextBox.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | display: flex; 4 | width: 100%; 5 | } 6 | 7 | mat-form-field 8 | { 9 | flex: 1 1 auto; 10 | } 11 | 12 | .suffix 13 | { 14 | flex: 0 0 auto; 15 | } 16 | -------------------------------------------------------------------------------- /src/notSupportedCmp/notSupported.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | display: grid; 4 | grid-template-rows: min-content 1fr; 5 | height: 100%; 6 | } 7 | 8 | div.image-container 9 | { 10 | background: no-repeat center / contain; 11 | } 12 | -------------------------------------------------------------------------------- /typings/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.html' { 2 | const contents:string 3 | export = contents 4 | } 5 | 6 | declare module '*.css' { 7 | const contents:string 8 | export = contents 9 | } 10 | 11 | declare module '*.md' 12 | 13 | -------------------------------------------------------------------------------- /src/logging/logging.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from "@angular/core"; 2 | import { LoggingService } from "./logging.service"; 3 | 4 | @NgModule({ 5 | providers:[ 6 | LoggingService 7 | ] 8 | }) 9 | 10 | export class LoggingModule{} -------------------------------------------------------------------------------- /src/util/df-to-ds.pipe.spec.ts: -------------------------------------------------------------------------------- 1 | import { DfToDsPipe } from './df-to-ds.pipe'; 2 | 3 | describe('DfToDsPipe', () => { 4 | it('create an instance', () => { 5 | const pipe = new DfToDsPipe(); 6 | expect(pipe).toBeTruthy(); 7 | }); 8 | }); 9 | -------------------------------------------------------------------------------- /docs/releases/v2.12.1.md: -------------------------------------------------------------------------------- 1 | # v2.12.1 2 | 3 | # Feature 4 | 5 | - added the option to use red/green/blue colormaps (#1366) 6 | 7 | ## Bugfix 8 | 9 | - fixed touch devices unable to navigate viewer 10 | - fixed some volume controls not working 11 | -------------------------------------------------------------------------------- /docs/releases/v2.12.4.md: -------------------------------------------------------------------------------- 1 | # v2.12.4 2 | 3 | ## Bugfix 4 | 5 | - minor fix of ng-layer-tune incorrectly applying color map (#1390) 6 | - prepare for MEBRAINS update 7 | - fixed traverse in z direction (`` + `[wheel]`/`` + `[wheel]`) (#1334) 8 | -------------------------------------------------------------------------------- /docs/releases/v2.3.3.md: -------------------------------------------------------------------------------- 1 | # v2.3.3 2 | 3 | ## Bugfixes 4 | 5 | - fix backwards compatibility with some URLs 6 | - fix bug where fetching of regional features does not complete for logged in users (#826). (the viewer will only fetch released datasets) 7 | -------------------------------------------------------------------------------- /src/atlasComponents/userAnnotations/index.ts: -------------------------------------------------------------------------------- 1 | export { AnnotationMode } from "./annotationMode/annotationMode.component"; 2 | export { AnnotationList } from "./annotationList/annotationList.component"; 3 | export { UserAnnotationsModule } from "./module"; 4 | -------------------------------------------------------------------------------- /src/state/userInteraction/index.ts: -------------------------------------------------------------------------------- 1 | export { Effect } from "./effects" 2 | export { nameSpace } from "./const" 3 | export * as actions from "./actions" 4 | export * as selectors from "./selectors" 5 | export { reducer, UserInteraction, defaultState } from "./store" -------------------------------------------------------------------------------- /src/ui/logoContainer/logoContainer.style.css: -------------------------------------------------------------------------------- 1 | .hbpLogoContainer 2 | { 3 | display:inline-block; 4 | background-size: cover; 5 | height: 100%; 6 | } 7 | 8 | .hbpLogoContainer > img 9 | { 10 | visibility: hidden; 11 | height: 100%; 12 | } 13 | -------------------------------------------------------------------------------- /tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": [ 4 | "**/*.spec.ts", 5 | "./spec/*", 6 | "src/atlasViewerExports/*", 7 | "**/*.stories.*" 8 | ], 9 | "files": [ 10 | "src/main-aot.ts" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /backend/requirements.txt: -------------------------------------------------------------------------------- 1 | fastapi 2 | markdown 3 | authlib 4 | uvicorn[standard] # required as a asgi 5 | itsdangerous # required for starlette session middleware 6 | httpx # required for async uvicorn 7 | redis 8 | ebrains-drive>=0.6.0 9 | geoip2==5.1.0 10 | -------------------------------------------------------------------------------- /src/layouts/layouts/fourPanel/fourPanel.style.css: -------------------------------------------------------------------------------- 1 | .four-panel-cell 2 | { 3 | flex: 0 0 50%; 4 | } 5 | 6 | .four-panel-container 7 | { 8 | display: grid; 9 | grid-template-columns: 50% 50%; 10 | grid-template-rows: 50% 50%; 11 | height: 100%; 12 | } -------------------------------------------------------------------------------- /src/state/userPreference/index.ts: -------------------------------------------------------------------------------- 1 | export { UserPreference, reducer, defaultState } from "./store" 2 | export { nameSpace } from "./const" 3 | export * as actions from "./actions" 4 | export * as selectors from "./selectors" 5 | export { Effects } from "./effects" 6 | -------------------------------------------------------------------------------- /docs/releases/v2.6.7.md: -------------------------------------------------------------------------------- 1 | # 2.6.7 2 | 3 | ## Bugfix 4 | 5 | - set max height of descriptions to show rich elements 6 | - fix mkdocs configuration 7 | - fix docs links 8 | 9 | ## Behind the scene 10 | 11 | - temporarily disabled explore in other templates 12 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/region/region/listItem/region.listItem.style.css: -------------------------------------------------------------------------------- 1 | .container 2 | { 3 | display: inline-flex; 4 | width: 100%; 5 | align-items: center; 6 | } 7 | 8 | .container .mat-body 9 | { 10 | text-wrap: nowrap; 11 | } 12 | -------------------------------------------------------------------------------- /src/layouts/layouts/pip/pip.style.css: -------------------------------------------------------------------------------- 1 | .major-column 2 | { 3 | flex: 0 0 100%; 4 | } 5 | .minor-column 6 | { 7 | flex: 0 0 0%; 8 | } 9 | .picture-in-picture-margin { 10 | bottom: 5rem; 11 | right: 2rem; 12 | max-width: calc(100dvw - 4rem); 13 | } 14 | -------------------------------------------------------------------------------- /src/share/type.ts: -------------------------------------------------------------------------------- 1 | import { Observable } from "rxjs"; 2 | 3 | export class NotFoundError extends Error{} 4 | 5 | export interface IKeyValStore { 6 | getKeyVal(key: string): Observable 7 | setKeyVal(key: string, val: unknown): Observable 8 | } 9 | -------------------------------------------------------------------------------- /src/state/atlasAppearance/index.ts: -------------------------------------------------------------------------------- 1 | export * as actions from "./action" 2 | export * as selectors from "./selector" 3 | export * as const from "./const" 4 | export { nameSpace } from "./const" 5 | export { reducer, AtlasAppearanceStore, defaultState } from "./store" 6 | -------------------------------------------------------------------------------- /src/state/plugins/index.ts: -------------------------------------------------------------------------------- 1 | export * as selectors from "./selectors" 2 | export * as actions from "./actions" 3 | export { reducer, PluginStore, defaultState } from "./store" 4 | export { Effects } from "./effects" 5 | export { nameSpace, INIT_MANIFEST_SRC } from "./const" -------------------------------------------------------------------------------- /src/state/userInterface/index.ts: -------------------------------------------------------------------------------- 1 | export * as actions from "./actions" 2 | export * as selectors from "./selectors" 3 | export { nameSpace, PanelMode } from "./const" 4 | export { reducer, UiStore, defaultState } from "./store" 5 | export { Effects } from "./effects" 6 | -------------------------------------------------------------------------------- /src/state/userPreference/const.ts: -------------------------------------------------------------------------------- 1 | export const nameSpace = `[state.userPreference]` 2 | 3 | export const maxGpuLimit = 1e9 4 | export const minGpuLimit = 1e8 5 | 6 | export interface CSP{ 7 | 'connect-src'?: string[] 8 | 'script-src'?: string[] 9 | } 10 | -------------------------------------------------------------------------------- /src/util/regionFlattener.ts: -------------------------------------------------------------------------------- 1 | export function regionFlattener(region: any) { 2 | return[ 3 | [ region ], 4 | ...((region.children && region.children.map && region.children.map(regionFlattener)) || []), 5 | ].reduce((acc, item) => acc.concat(item), []) 6 | } 7 | -------------------------------------------------------------------------------- /.helm/adhoc/service-redis.yml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: cache-redis-service 5 | spec: 6 | ports: 7 | - port: 6379 8 | protocol: TCP 9 | targetPort: 6379 10 | selector: 11 | app: sxplr-redis 12 | type: ClusterIP 13 | -------------------------------------------------------------------------------- /src/messaging/nmvSwc/type.ts: -------------------------------------------------------------------------------- 1 | import { TMat3, TVec3 } from "../types"; 2 | 3 | export interface INmvTransform { 4 | ['@type']: 'bas:AffineTransformation' 5 | fromSpace: string 6 | toSpace: string 7 | params: { 8 | A: TMat3 9 | b: TVec3 10 | } 11 | } -------------------------------------------------------------------------------- /src/viewerModule/threeSurfer/store/index.ts: -------------------------------------------------------------------------------- 1 | export { reducer, Store, defaultStore } from "./store" 2 | export * as actions from "./actions" 3 | export * as selectors from "./selectors" 4 | export { nameSpace } from "./const" 5 | export { ThreeSurferEffects } from "./effects" -------------------------------------------------------------------------------- /docs/releases/v2.10.2.md: -------------------------------------------------------------------------------- 1 | # v2.10.2 2 | 3 | ## Bugfix 4 | 5 | - paginate feature requests to hopefully improve server performance 6 | - bump siibra-api version 7 | - fix ng layer control style pollution 8 | 9 | ## Behind the scenes 10 | 11 | - added zenodo badge 12 | -------------------------------------------------------------------------------- /docs/releases/v2.13.2.md: -------------------------------------------------------------------------------- 1 | # v2.13.2 2 | 3 | ## Features 4 | 5 | - added visual display of errors relating to siibra-api 6 | 7 | ## Bugfixes 8 | 9 | - fixed displaying annotation in `saneurl` 10 | - fixed feature fetching spinner 11 | - fixed feature fetching logic 12 | -------------------------------------------------------------------------------- /docs/releases/v2.5.0.md: -------------------------------------------------------------------------------- 1 | # v2.5.0 2 | 3 | ## New features 4 | 5 | - allow local NiFTi's to be visualised 6 | 7 | ## Under the hood stuff 8 | 9 | - refactor: remove unneeded code 10 | - upgrade to angular v12 11 | - removed SO implementations to comply with licenses 12 | -------------------------------------------------------------------------------- /src/layouts/layouts/pip/pip.template.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 | 6 |
7 | 8 |
9 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/layerCtrl.service/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | NehubaLayerControlService, 3 | } from './layerCtrl.service' 4 | 5 | export { 6 | IColorMap, 7 | SET_COLORMAP_OBS, 8 | SET_LAYER_VISIBILITY, 9 | getRgb, 10 | 11 | } from './layerCtrl.util' 12 | -------------------------------------------------------------------------------- /src/widget/index.ts: -------------------------------------------------------------------------------- 1 | export { WidgetModule } from './widget.module' 2 | export { WidgetPortal } from "./widgetPortal/widgetPortal.component" 3 | export { WidgetService } from "./service" 4 | export { EnumActionToWidget, TypeActionToWidget, IActionWidgetOption } from './constants' 5 | -------------------------------------------------------------------------------- /docs/releases/v2.12.5.md: -------------------------------------------------------------------------------- 1 | # v2.12.5 2 | 3 | ## Feature 4 | 5 | - enable connectivity for Julich Brain v3 6 | - added version inspector in UI 7 | - (experimental) add keyframe support for NG viewer 8 | - allow experimental flag to be toggled via `setExperimentalFlag` global method 9 | -------------------------------------------------------------------------------- /src/components/coordTextBox/index.ts: -------------------------------------------------------------------------------- 1 | import { TAffine } from "./coordTextBox.component" 2 | 3 | export * from "./coordTextBox.component" 4 | 5 | export const ID_AFFINE = [ 6 | [1, 0, 0, 0], 7 | [0, 1, 0, 0], 8 | [0, 0, 1, 0], 9 | [0, 0, 0, 1], 10 | ] as TAffine 11 | -------------------------------------------------------------------------------- /src/state/plugins/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction, props } from "@ngrx/store"; 2 | import { nameSpace } from "./const" 3 | 4 | export const clearInitManifests = createAction( 5 | `${nameSpace} clearInitManifests`, 6 | props<{ 7 | nameSpace: string 8 | }>() 9 | ) 10 | -------------------------------------------------------------------------------- /src/util/pretty-present.pipe.spec.ts: -------------------------------------------------------------------------------- 1 | import { PrettyPresentPipe } from './pretty-present.pipe'; 2 | 3 | describe('PrettyPresentPipe', () => { 4 | it('create an instance', () => { 5 | const pipe = new PrettyPresentPipe(); 6 | expect(pipe).toBeTruthy(); 7 | }); 8 | }); 9 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/nehubaViewerInterface/nehubaViewerContainer.template.html: -------------------------------------------------------------------------------- 1 |
6 |
-------------------------------------------------------------------------------- /third_party/vanilla_nehuba.js: -------------------------------------------------------------------------------- 1 | (() => { 2 | if (!export_nehuba) { 3 | console.warn(`export_nehuba is not defined. Did you forget to import vanilla nehuba?`) 4 | return 5 | } 6 | window.nehubaViewer = export_nehuba.createNehubaViewer({}, err => console.error(err)) 7 | })() -------------------------------------------------------------------------------- /docs/releases/v2.4.4.md: -------------------------------------------------------------------------------- 1 | # v2.4.4 2 | 3 | # Features 4 | 5 | - Allow name and description of annotations to be exported 6 | 7 | ## Bugfixes 8 | 9 | - Fix version of connectivity web component 10 | 11 | ## Under the hood stuff 12 | 13 | - Respond in csp violation reports 14 | -------------------------------------------------------------------------------- /docs/releases/v2.2.6.md: -------------------------------------------------------------------------------- 1 | # v2.2.6 2 | 3 | ## Feat 4 | 5 | - Added Julich Brain v2.4 to the supported atlases 6 | 7 | ## Bugfixes 8 | 9 | - Fixed matomo CSP issues 10 | - Updated kg dataset previewer URL 11 | 12 | # Under the hood 13 | 14 | - CI/CD: auto tag releases on github 15 | -------------------------------------------------------------------------------- /src/ui/dialogInfo/tmpl/tmpl.style.css: -------------------------------------------------------------------------------- 1 | mat-dialog-actions a i 2 | { 3 | margin-right: 0.5rem; 4 | } 5 | 6 | mat-dialog-content 7 | { 8 | display: block; 9 | max-height: 24dvh; 10 | } 11 | 12 | .sxplr-dialog-body 13 | { 14 | font-size: 16px; 15 | padding: 0 16px; 16 | } 17 | -------------------------------------------------------------------------------- /docs/releases/v2.1.2.md: -------------------------------------------------------------------------------- 1 | # v2.1.2 2 | 3 | 20 April 2020 4 | 5 | ## Bugfixes 6 | 7 | - Fixed a bug where selected region is not persisting via URL. (#501) 8 | 9 | ## Under the hood stuff 10 | 11 | - added `check_all.sh`, allowing for quick git-push check 12 | - consolidated user docs 13 | -------------------------------------------------------------------------------- /src/state/annotations/index.ts: -------------------------------------------------------------------------------- 1 | export * as actions from "./actions" 2 | export { Annotation, AnnotationState, reducer, defaultState, TypesOfDetailedAnnotations, UnionAnnotation, AnnotationColor } from "./store" 3 | export { nameSpace } from "./const" 4 | export * as selectors from "./selectors" 5 | -------------------------------------------------------------------------------- /docs/releases/v2.13.1.md: -------------------------------------------------------------------------------- 1 | # v2.13.1 2 | 3 | ## Bugfixes 4 | 5 | - fixed saneurl query without accept header 6 | - added `saneurl` also to the acceptable route 7 | - fixes `Unknown` on hover prompt, fixes some issues where context menu behaves 8 | - fixes unscrollable feature container on touch devices 9 | -------------------------------------------------------------------------------- /docs/releases/v2.4.7.md: -------------------------------------------------------------------------------- 1 | # v2.4.7 2 | 3 | ## Bugfixes 4 | 5 | - Fix unnamed point landmark naming 6 | - Fix multiregion legacy links (#1022) 7 | 8 | ## Under the hood stuff 9 | 10 | - Remove unused imports in the backend 11 | - Use `stable` branch of siibra-api by default (supercedes #997) 12 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/atlas/splashScreen/splashScreen.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | display: inline-block; 4 | overflow: auto; 5 | height: 100%; 6 | width: 100%; 7 | } 8 | 9 | :host > h4 10 | { 11 | margin: 2rem; 12 | } 13 | 14 | mat-card 15 | { 16 | margin: 0.5rem; 17 | } -------------------------------------------------------------------------------- /src/viewerModule/threeSurfer/store/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction, props } from "@ngrx/store"; 2 | import { nameSpace } from "./const" 3 | 4 | export const selectSurfaceVariant = createAction( 5 | `${nameSpace} selectSurfaceVariant`, 6 | props<{ 7 | variant: string 8 | }>() 9 | ) 10 | -------------------------------------------------------------------------------- /features/docs-storing-sharing-3dview.feature: -------------------------------------------------------------------------------- 1 | Feature: Doc Storing and Sharing 3D view 2 | 3 | Scenario: Taking Screenshots 4 | Given User launched siibra-explorer 5 | When User takes a screenshot with the built in screenshot plugin 6 | Then the screenshot should work as intended 7 | -------------------------------------------------------------------------------- /src/state/atlasSelection/index.ts: -------------------------------------------------------------------------------- 1 | export * as selectors from "./selectors" 2 | export { fromRootStore } from "./util" 3 | export { nameSpace, AtlasSelectionState } from "./const" 4 | export { reducer, defaultState } from "./store" 5 | export * as actions from "./actions" 6 | export { Effect } from "./effects" -------------------------------------------------------------------------------- /docs/releases/v2.9.1.md: -------------------------------------------------------------------------------- 1 | # v2.9.1 2 | 3 | ## Feature 4 | 5 | - On clicking the connectivity diagram, the viewer navigates to the connected region 6 | 7 | ## Bugfix 8 | 9 | - Fix connectivity bug on cohort filter 10 | ## Behind the scenes 11 | 12 | - Fixed some CSP issues 13 | - Removed VK/DK atlases 14 | -------------------------------------------------------------------------------- /src/spotlight/sl-service.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { SlServiceService } from './sl-service.service'; 4 | import { SpotLightModule } from './spot-light.module'; 5 | 6 | describe('SlServiceService', () => { 7 | // TO BE IMPLEMENTED 8 | 9 | }) 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.angular/cache 2 | node_modules 3 | dist 4 | src/res/raw 5 | src/plugin_examples/*/ 6 | .vscode 7 | .idea 8 | deploy/datasets/data/ 9 | .DS_Store 10 | venv/ 11 | site 12 | 13 | *.log 14 | cachedKgDataset.json 15 | tmp 16 | storybook-static 17 | documentation.json 18 | 19 | .k8s/secret-*.yml 20 | -------------------------------------------------------------------------------- /docs/extra.css: -------------------------------------------------------------------------------- 1 | div.autodoc-docstring { 2 | padding-left: 20px; 3 | margin-bottom: 30px; 4 | border-left: 5px solid rgba(230, 230, 230); 5 | } 6 | 7 | div.autodoc-members { 8 | padding-left: 20px; 9 | margin-bottom: 15px; 10 | } 11 | 12 | img { 13 | width: 100%; 14 | display: inline-block; 15 | } -------------------------------------------------------------------------------- /docs/releases/v2.5.4.md: -------------------------------------------------------------------------------- 1 | # v2.5.4 2 | 3 | ## Feature 4 | 5 | - Added MEBRAINS (Pre-release) 6 | 7 | ## Under the hood 8 | 9 | - Added version check for siibra-api 10 | - Updated deploy template 11 | - Remove unused components 12 | - Clean up siibra-api types 13 | - temporarily added hardcoded redirects 14 | -------------------------------------------------------------------------------- /src/components/fabSpeedDial/index.ts: -------------------------------------------------------------------------------- 1 | export { FabSpeedDialModule } from './fabSpeedDial.module' 2 | export { FabSpeedDialChild } from './fabSpeedDialChild.directive' 3 | export { FabSpeedDialContainer } from './fabSpeedDialContainer.directive' 4 | export { FabSpeedDialTrigger } from './fabSpeedDialTrigger.directive' 5 | -------------------------------------------------------------------------------- /src/features/category-acc.directive.spec.ts: -------------------------------------------------------------------------------- 1 | import { CategoryAccDirective } from './category-acc.directive'; 2 | 3 | describe('CategoryAccDirective', () => { 4 | it('should create an instance', () => { 5 | const directive = new CategoryAccDirective(); 6 | expect(directive).toBeTruthy(); 7 | }); 8 | }); 9 | -------------------------------------------------------------------------------- /src/res/icons/meta.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "content": "t", 3 | "class": "translation", 4 | "svg": "./translation/glyph.svg" 5 | },{ 6 | "content": "s", 7 | "class": "scaling", 8 | "svg": "./scaling/glyph.svg" 9 | },{ 10 | "content": "r", 11 | "class": "rotation", 12 | "svg": "./rotation/glyph.svg" 13 | }] -------------------------------------------------------------------------------- /src/components/snackDialog/snackDialog.style.scss: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | display: flex; 4 | justify-content: flex-start; 5 | align-items: center; 6 | 7 | } 8 | 9 | i,mat-icon 10 | { 11 | flex: 0 0 auto; 12 | margin: 0 1rem; 13 | } 14 | 15 | markdown-dom,span 16 | { 17 | flex: 1 1 auto; 18 | } -------------------------------------------------------------------------------- /src/components/tab/tab.template.html: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /src/layouts/layouts/h13/h13.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: 'layout-horizontal-one-three', 5 | templateUrl: './h13.template.html', 6 | styleUrls: [ 7 | './h13.style.css', 8 | ], 9 | }) 10 | 11 | export class HorizontalOneThree { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/layouts/layouts/pip/pip.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: 'picture-in-picture-panel', 5 | templateUrl: './pip.template.html', 6 | styleUrls: [ 7 | './pip.style.css', 8 | ], 9 | }) 10 | 11 | export class PictureInPicturePanel { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/layouts/layouts/single/single.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: 'layout-single-panel', 5 | templateUrl: './single.template.html', 6 | styleUrls: [ 7 | './single.style.css', 8 | ], 9 | }) 10 | 11 | export class SinglePanel { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/layouts/layouts/v13/v13.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: 'layout-vertical-one-three', 5 | templateUrl: './v13.template.html', 6 | styleUrls: [ 7 | './v13.style.css', 8 | ], 9 | }) 10 | 11 | export class VerticalOneThree { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/util/index.ts: -------------------------------------------------------------------------------- 1 | export { UtilModule } from './util.module' 2 | export { CLICK_INTERCEPTOR_INJECTOR, ClickInterceptor, CONTEXT_MENU_ITEM_INJECTOR, TClickInterceptorConfig, TContextMenu } from './injectionTokens' 3 | export { 4 | DoublyLinkedList, 5 | FindInLinkedList, 6 | IDoublyLinkedItem 7 | } from './LinkedList' 8 | -------------------------------------------------------------------------------- /src/util/pipes/getUnique.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'getUniquePipe', 5 | pure: true 6 | }) 7 | 8 | export class GetUniquePipe implements PipeTransform { 9 | public transform(arr: any[]) { 10 | return Array.from(new Set(arr)) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/util/pipes/nmToMm.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'nmToMm', 5 | pure: true 6 | }) 7 | 8 | export class NmToMm implements PipeTransform{ 9 | public transform(nums: number[]): number[] { 10 | return nums.map(num => (num / 1e6)) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/util/siibraApiConstants/fn.ts: -------------------------------------------------------------------------------- 1 | import { TRegionDetail } from "./types"; 2 | 3 | export function getPosFromRegion(region: TRegionDetail){ 4 | if (!!region?.props?.components?.[0]?.centroid) { 5 | return region.props.components[0].centroid.map(v => v*1e6) as [number, number, number] 6 | } 7 | return null 8 | } -------------------------------------------------------------------------------- /docs/releases/v2.1.1.md: -------------------------------------------------------------------------------- 1 | # v2.1.1 2 | 3 | 15 April 2020 4 | 5 | ## Bugfixes 6 | 7 | - Fixed a bug where viewer at ebrains.eu domain was not displaying properly (#497) 8 | - Clarified inline script for catching Safari 10 bug 9 | 10 | ## Under the hood stuff 11 | 12 | - Using iam.ebrains.eu for HBP Keycloak authentication -------------------------------------------------------------------------------- /src/spotlight/spotlight-backdrop/spotlight-backdrop.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { SpotlightBackdropComponent } from './spotlight-backdrop.component'; 4 | 5 | describe('SpotlightBackdropComponent', () => { 6 | 7 | // TO BE IMPLEMENTED 8 | }); 9 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/nehubaViewer/nehubaViewer.style.css: -------------------------------------------------------------------------------- 1 | div#neuroglancer-container 2 | { 3 | height:100%; 4 | width: 100%; 5 | } 6 | 7 | [placeholder] 8 | { 9 | height:100%; 10 | width: 100%; 11 | justify-content: center; 12 | align-items: center; 13 | display:flex; 14 | flex-direction: column; 15 | } -------------------------------------------------------------------------------- /docs/releases/v2.1.3.md: -------------------------------------------------------------------------------- 1 | # v2.1.3 2 | 3 | 28 April 2020 4 | 5 | ## Bugfixes 6 | 7 | - Fixed a bug preventing users from scrolling the fetched dataset containers (#508) 8 | - Fixed a bug - change template from region menu was showing irrelevant regions (#507) 9 | - Fixed a bug taking screenshot again does not work (#482) 10 | -------------------------------------------------------------------------------- /docs/releases/v2.5.1.md: -------------------------------------------------------------------------------- 1 | # v2.5.1 2 | 3 | ## Bugfixes 4 | 5 | - fix ieeg and receptor data features 6 | - fix region spatial props 7 | - fix region origin datasets 8 | - Connectivity matrix: Fix connectivity matrix export feature 9 | - Connectivity profile: Fix connectivity profile 10 | - Add monkey brain preview images 11 | -------------------------------------------------------------------------------- /src/components/smartChip/smartChip.menu.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, Inject, TemplateRef } from "@angular/core"; 2 | 3 | @Directive({ 4 | selector: `ng-template[sxplrSmartChipMenu]` 5 | }) 6 | 7 | export class SmartChipMenu { 8 | constructor(@Inject(TemplateRef) public templateRef: TemplateRef){} 9 | } 10 | -------------------------------------------------------------------------------- /docs/releases/v2.0.1.md: -------------------------------------------------------------------------------- 1 | # v2.0.1 2 | 3 | 21 Oct 2019 4 | 5 | [release](https://github.com/HumanBrainProject/interactive-viewer/releases/tag/v2.0.1) 6 | 7 | - Bugfix: 8 | - fixed commonsense filter 9 | - fixed fetching allen, waxholm datasets 10 | 11 | - Chore: 12 | - Changed `Mouse` to `Cursor` 13 | - Fixed terms of use -------------------------------------------------------------------------------- /docs/releases/v2.10.1.md: -------------------------------------------------------------------------------- 1 | # v2.10.1 2 | 3 | ## Bugfix 4 | 5 | - fsaverage on change variant, showing multiple meshes 6 | - fsaverage erroneous URL encoding of selected region 7 | - some annotations no longe rwork properly 8 | 9 | ## Behind the scenes 10 | 11 | - Housekeeping CI/CD 12 | - Simplify some behind the scenes code 13 | -------------------------------------------------------------------------------- /src/components/smartChip/smartChip.action.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, Inject, TemplateRef } from "@angular/core"; 2 | 3 | @Directive({ 4 | selector: `ng-template[sxplrSmartChipAction]` 5 | }) 6 | 7 | export class SmartChipAction { 8 | constructor(@Inject(TemplateRef) public templateRef: TemplateRef){} 9 | } 10 | -------------------------------------------------------------------------------- /src/components/smartChip/smartChip.header.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, Inject, TemplateRef } from "@angular/core"; 2 | 3 | @Directive({ 4 | selector: `ng-template[sxplrSmartChipHeader]` 5 | }) 6 | 7 | export class SmartChipHeader { 8 | constructor(@Inject(TemplateRef) public templateRef: TemplateRef){} 9 | } 10 | -------------------------------------------------------------------------------- /src/layouts/layouts/fourPanel/fourPanel.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: 'layout-four-panel', 5 | templateUrl: './fourPanel.template.html', 6 | styleUrls: [ 7 | './fourPanel.style.css', 8 | ], 9 | }) 10 | 11 | export class FourPanelLayout { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /docs/releases/v2.6.6.md: -------------------------------------------------------------------------------- 1 | # v2.6.6 2 | 3 | ## Feature 4 | 5 | - (experimental) link to 1um VOI 6 | 7 | ## Bugfix 8 | 9 | - plugin manifests no longer fails all, and can now timeout properly 10 | - fixed plugin cache key 11 | - fixed area 44 receptor incorrectly fetching receptor data 12 | - fixed receptor when to show PR and AR 13 | -------------------------------------------------------------------------------- /src/components/smartChip/smartChip.content.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, Inject, TemplateRef } from "@angular/core"; 2 | 3 | @Directive({ 4 | selector: `ng-template[sxplrSmartChipContent]` 5 | }) 6 | 7 | export class SmartChipContent { 8 | constructor(@Inject(TemplateRef) public templateRef: TemplateRef){} 9 | } 10 | -------------------------------------------------------------------------------- /src/features/featureName.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'featureNamePipe', 5 | pure: true, 6 | }) 7 | 8 | export class FeatureNamePipe implements PipeTransform{ 9 | public transform(name: string): string { 10 | return name.split(".").slice(-1)[0] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/features/guards.ts: -------------------------------------------------------------------------------- 1 | import { VoiFeature } from "src/atlasComponents/sapi/sxplrTypes" 2 | 3 | export { VoiFeature } 4 | 5 | export function isVoiData(feature: unknown): feature is VoiFeature { 6 | return !!(feature?.['bbox']) 7 | } 8 | 9 | export function notQuiteRight(_feature: unknown): string[] { 10 | return [] 11 | } 12 | -------------------------------------------------------------------------------- /src/spotlight/spot-light-overlay.directive.spec.ts: -------------------------------------------------------------------------------- 1 | import { SpotLightOverlayDirective } from './spot-light-overlay.directive'; 2 | 3 | describe('SpotLightOverlayDirective', () => { 4 | it('should create an instance', () => { 5 | const directive = new SpotLightOverlayDirective(); 6 | expect(directive).toBeTruthy(); 7 | }); 8 | }); 9 | -------------------------------------------------------------------------------- /src/ui/topMenu/topMenuCmp/topMenu.style.css: -------------------------------------------------------------------------------- 1 | :host > * 2 | { 3 | flex: 0 0 0; 4 | margin-right: 0.4em; 5 | display:inline-block; 6 | } 7 | 8 | :host > * 9 | { 10 | pointer-events: all; 11 | } 12 | 13 | .btnWrapper 14 | { 15 | margin: 0.5rem 0; 16 | } 17 | 18 | .mat-tab-content 19 | { 20 | padding: 0.8rem 1.2rem; 21 | } 22 | -------------------------------------------------------------------------------- /docs/releases/v2.14.24.md: -------------------------------------------------------------------------------- 1 | # v2.14.24 2 | 3 | ## Feature 4 | 5 | - Selecting region will now navigate to the region's centroid 6 | - Add warning text when warping, region deselection and/or when cortical layers is selected 7 | 8 | ## Behind the scene 9 | 10 | - Fix prepare_release script 11 | - Added SOP for ebrains deployment 12 | 13 | -------------------------------------------------------------------------------- /docs/releases/v2.6.5.md: -------------------------------------------------------------------------------- 1 | # v2.6.5 2 | 3 | ## Feature 4 | 5 | - Re-enabled autoradiographs for receptor datasets 6 | - Added how-to-cite as a part of quick tour (#1085) 7 | - Added VIP routes 8 | 9 | ## Bugfix 10 | 11 | - saneUrl store now properly uses redis 12 | - updated several packages to fix potential security vulnerabilities 13 | -------------------------------------------------------------------------------- /src/api/request/sxplr.exit__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/region/region/listItem/region.listItem.template.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{ region.name }} 5 | 6 | 7 |
8 | -------------------------------------------------------------------------------- /src/api/request/sxplr.loadLayers__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/api/request/sxplr.navigateTo__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/api/request/sxplr.selectAtlas__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.exit__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/api/handshake/sxplr.init__fromSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.init" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/api/request/sxplr.addAnnotations__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/api/request/sxplr.cancelRequest__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/api/request/sxplr.removeLayers__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/api/request/sxplr.rmAnnotations__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/api/request/sxplr.selectTemplate__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/api/request/sxplr.setAuxMeshAlpha__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/api/request/sxplr.setOctantRemoval__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/api/request/sxplr.updateLayers__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/components/coordTextBox/coordTextBox.template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ label }} 4 | 5 | 6 | 8 | 9 | 10 | 11 |
12 | 13 |
14 | -------------------------------------------------------------------------------- /src/spotlight/spotlight-backdrop/spotlight-backdrop.component.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | position: absolute; 4 | top: 0; 5 | left: 0; 6 | z-index: 9999; 7 | width: 100%; 8 | height: 100%; 9 | 10 | background-color: rgba(128,128,128,0.6); 11 | transition: all ease-in-out 200ms; 12 | 13 | pointer-events: all; 14 | opacity: 1; 15 | } 16 | -------------------------------------------------------------------------------- /src/state/plugins/selectors.ts: -------------------------------------------------------------------------------- 1 | import { createSelector } from "@ngrx/store"; 2 | import { PluginStore } from "./store" 3 | import { nameSpace } from "./const" 4 | 5 | const storeSelector = state => state[nameSpace] as PluginStore 6 | 7 | export const initManfests = createSelector( 8 | storeSelector, 9 | state => state.initManifests 10 | ) 11 | -------------------------------------------------------------------------------- /src/util/pipes/mapToProperty.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'mapToProperty', 5 | pure: true 6 | }) 7 | 8 | export class MapToPropertyPipe implements PipeTransform{ 9 | public transform(arr: any[], prop: string){ 10 | return arr.map(item => prop ? item[prop] : item) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/viewerModule/leap/leapSignal/leapSignal.style.css: -------------------------------------------------------------------------------- 1 | .leap-spinner 2 | { 3 | animation: spinning 1400ms linear infinite running; 4 | } 5 | 6 | @keyframes spinning 7 | { 8 | from { 9 | transform: rotate(0deg); 10 | } 11 | to{ 12 | transform: rotate(359deg); 13 | } 14 | } 15 | 16 | .leap-muted 17 | { 18 | opacity: 0.5; 19 | } 20 | -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.loadLayers__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.navigateTo__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.selectAtlas__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/api/request/sxplr.selectParcellation__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /src/ui/cookieAgreement/data/aboutMatomo.md: -------------------------------------------------------------------------------- 1 | Siibra explorer uses the opensource hosted on EBRAINS infrastructure to track usage statistics. 2 | 3 | **do not track**: if you enable [do not track](https://en.wikipedia.org/wiki/Do_Not_Track), matomo is configured to not track you on this site. 4 | 5 | You can opt out of tracking manually below. -------------------------------------------------------------------------------- /docs/advanced/api/handshake/sxplr.init__fromSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.init" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.addAnnotations__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.cancelRequest__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.removeLayers__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.rmAnnotations__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.selectTemplate__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.setAuxMeshAlpha__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.setOctantRemoval__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.updateLayers__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.selectParcellation__toSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "const": "OK" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /docs/releases/v2.14.22.md: -------------------------------------------------------------------------------- 1 | # v2.14.22 2 | 3 | ## Feature 4 | 5 | - added tooltip why log 6 | - (experimental) added toggle to show all meshes 7 | 8 | ## Bugfix 9 | 10 | - Improved stability of feature panel and fetching 11 | 12 | ## Behind the scene 13 | 14 | - Preparing for Julich Brain Big Brain releases 15 | - Add scripts for deploying on new k8s cluster 16 | -------------------------------------------------------------------------------- /docs/releases/v2.7.3.md: -------------------------------------------------------------------------------- 1 | # v2.7.3 2 | 3 | ## Bugfix 4 | 5 | - fixed matomo visitor counting (broke since 2.7.0 release) 6 | - fixed sane url generation 7 | - fixed reset navigation buttons in navigation card 8 | 9 | ## Under the hood 10 | 11 | - minor refactor of unused code 12 | - added mirrors to siibra-api 13 | - experimental support for drag and drop swc 14 | -------------------------------------------------------------------------------- /src/util/pipes/combineFn.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'combineFn', 5 | pure: true 6 | }) 7 | export class CombineFnPipe implements PipeTransform{ 8 | public transform(fns: CallableFunction[]): CallableFunction{ 9 | return () => { 10 | for (const fn of fns) fn() 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /docs/advanced/annotating_structures.md: -------------------------------------------------------------------------------- 1 | # Annotating Structures in the Brain 2 | 3 | (TBD) 4 | 5 | 11 | -------------------------------------------------------------------------------- /docs/releases/v2.14.12.md: -------------------------------------------------------------------------------- 1 | # v2.14.12 2 | 3 | ## Behind the scenes 4 | 5 | - Reverting point assignment panel behaviors 6 | 7 | ## Known regressions 8 | 9 | - Labelled assignment now does not work. This will be addressed in a future update. (The temporary regression allows for significant performant statistical assignment, as well more accurate label assignment.) 10 | -------------------------------------------------------------------------------- /docs/releases/v2.7.0.md: -------------------------------------------------------------------------------- 1 | # v2.7.0 2 | 3 | ## Breaking changes 4 | 5 | - plugin in interactive atlas viewer has been completely redesigned 6 | 7 | ## New feature 8 | 9 | - added storybook for component development 10 | - Add first implementation of fetching VOI from siibra-api 11 | 12 | ## Under the hood 13 | 14 | - Major refactor to use new siibra-api schema 15 | -------------------------------------------------------------------------------- /src/atlasComponents/sapi/codeSnippets/codeSnippet.style.scss: -------------------------------------------------------------------------------- 1 | .textarea 2 | { 3 | width: 75vw; 4 | 5 | } 6 | 7 | textarea-copy-export 8 | { 9 | display: block; 10 | width: 75vw; 11 | 12 | ::ng-deep mat-form-field { 13 | width: 100%; 14 | 15 | textarea 16 | { 17 | resize: none; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/features/compoundFeatureIndices/util.ts: -------------------------------------------------------------------------------- 1 | import { Point, SimpleCompoundFeature } from "src/atlasComponents/sapi/sxplrTypes"; 2 | 3 | export type CFIndex = SimpleCompoundFeature['indices'][number] 4 | 5 | export function isPoint(val: string|Point): val is Point{ 6 | return !!(val as any).spaceId && !!(val as any).loc 7 | } 8 | -------------------------------------------------------------------------------- /docs/releases/v2.14.1.md: -------------------------------------------------------------------------------- 1 | # v2.4.1 2 | 3 | ## Bugfixes 4 | 5 | - fixed PLI best view point 6 | - fixed font size of section header under feature 7 | - temporarily fixed nehuba navigation panel 8 | 9 | ## Under the hood stuff 10 | 11 | - updated backend requirements, removed unused environment variable definitions 12 | - added k8s deployment config 13 | - updated docs 14 | -------------------------------------------------------------------------------- /docs/releases/v2.7.6.md: -------------------------------------------------------------------------------- 1 | # v2.7.6 2 | 3 | ## Features 4 | 5 | - Emitting navigation state for plugin API 6 | - Reintroduced snap perspective orientation functionality 7 | 8 | ## Bugfix 9 | 10 | - Fixed drag and drop in nehuba viewer 11 | 12 | ## Under the hood 13 | 14 | - bumped siibra-api version for updated julich brain hierarchy 15 | - updated some dependencies 16 | -------------------------------------------------------------------------------- /src/dragDropFile/module.ts: -------------------------------------------------------------------------------- 1 | import { CommonModule } from "@angular/common"; 2 | import { NgModule } from "@angular/core"; 3 | import { DragDropFileDirective } from "./dragDrop.directive"; 4 | 5 | @NgModule({ 6 | imports: [CommonModule], 7 | declarations: [DragDropFileDirective], 8 | exports: [DragDropFileDirective], 9 | }) 10 | export class DragDropFileModule {} 11 | -------------------------------------------------------------------------------- /src/util/mergeObj.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | type TObj = Record 4 | 5 | @Pipe({ 6 | name: 'mergeObj', 7 | pure: true 8 | }) 9 | 10 | export class MergeObjPipe implements PipeTransform{ 11 | public transform(o1: TObj, o2: TObj){ 12 | return { 13 | ...o1, 14 | ...o2 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/util/pipes/getProperty.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'getProperty', 5 | pure: true 6 | }) 7 | 8 | export class GetPropertyPipe> implements PipeTransform{ 9 | public transform(input: R, property: keyof R) { 10 | return input && input[property] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/index.ts: -------------------------------------------------------------------------------- 1 | export { NehubaGlueCmp } from "./nehubaViewerGlue/nehubaViewerGlue.component" 2 | export { NehubaViewerTouchDirective } from "./nehubaViewerInterface/nehubaViewerTouch.directive" 3 | export { NehubaModule } from "./module" 4 | export { NehubaViewerUnit } from "./nehubaViewer/nehubaViewer.component" 5 | export { NEHUBA_INSTANCE_INJTKN } from "./util" 6 | -------------------------------------------------------------------------------- /src/viewerModule/threeSurfer/tsViewerConfig/tsViewerConfig.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: 'three-surfer-viewer-config', 5 | templateUrl: './tsViewerConfig.template.html', 6 | styleUrls: [ 7 | './tsViewerConfig.style.css' 8 | ] 9 | }) 10 | 11 | export class ThreeSurferViewerConfig { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/atlas/splashScreen/splashScreen.template.html: -------------------------------------------------------------------------------- 1 |

2 | siibra-explorer 3 |

4 | 5 | 8 | 9 | 10 | {{ atlas.name }} 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/util/pipes/filterArray.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'filterArray', 5 | pure: true 6 | }) 7 | 8 | export class FilterArrayPipe implements PipeTransform{ 9 | public transform(arr: T[], filterFn: (item: T, index?: number, array?: T[]) => boolean){ 10 | return (arr || []).filter(filterFn) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/widget/widgetCanvas.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, ViewContainerRef } from "@angular/core"; 2 | import { WidgetService } from "./service"; 3 | 4 | @Directive({ 5 | selector: `[widget-canvas]` 6 | }) 7 | 8 | export class WidgetCanvas { 9 | constructor( 10 | wSvc: WidgetService, 11 | vcr: ViewContainerRef, 12 | ){ 13 | wSvc.vcr = vcr 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/util/numbers.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'numbers', 5 | pure: true 6 | }) 7 | 8 | export class NumbersPipe implements PipeTransform{ 9 | public transform(nums: number[], decimal: number = 2): number[] { 10 | return nums.map(num => num.toFixed(decimal)).map(Number) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/atlasViewer/atlasViewer.animation.ts: -------------------------------------------------------------------------------- 1 | import { animate, style, transition, trigger } from "@angular/animations"; 2 | 3 | export const colorAnimation = trigger('newEvent', [ 4 | transition('* => *', [ 5 | animate('180ms ease-in', style({ 6 | opacity : '1.0', 7 | })), 8 | animate('380ms ease-out', style({ 9 | opacity : '0.0', 10 | })), 11 | ]), 12 | ]) 13 | -------------------------------------------------------------------------------- /src/components/smartChip/hasSubmenu.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'hasSubMenu', 5 | pure: true 6 | }) 7 | 8 | export class HasSubMenuPipe implements PipeTransform{ 9 | public transform(item: T, getChildren: (obj: T) => T[]): boolean { 10 | return (getChildren(item) || []).length > 0 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/util/directives/trigger.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, EventEmitter, OnInit, Output } from "@angular/core"; 2 | 3 | @Directive({ 4 | selector: '[sxplr-triggers]', 5 | standalone: true 6 | }) 7 | 8 | export class SxplrTriggers implements OnInit{ 9 | @Output('init') 10 | init = new EventEmitter() 11 | 12 | ngOnInit(): void { 13 | this.init.emit(null) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/viewerModule/threeSurfer/store/selectors.ts: -------------------------------------------------------------------------------- 1 | import { createSelector } from "@ngrx/store" 2 | import { nameSpace } from "./const" 3 | import { Store } from "./store" 4 | 5 | const selectStore = state => state[nameSpace] as Store 6 | 7 | export const getSelectedSurfaceVariant = createSelector( 8 | selectStore, 9 | ({ selectedSurfaceVariant }) => selectedSurfaceVariant 10 | ) 11 | -------------------------------------------------------------------------------- /docs/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.7 as builder 2 | 3 | COPY . /iav 4 | WORKDIR /iav 5 | 6 | RUN pip install mkdocs mkdocs-material mdx_truly_sane_lists errandkun 7 | 8 | RUN mkdocs build 9 | 10 | FROM nginx:alpine 11 | COPY --from=builder /iav/site /usr/share/nginx/html 12 | COPY --from=builder /iav/docs/nginx.conf /etc/nginx/nginx.conf 13 | 14 | ENTRYPOINT ["nginx", "-g", "daemon off;"] 15 | -------------------------------------------------------------------------------- /docs/releases/v2.12.2.md: -------------------------------------------------------------------------------- 1 | # v2.12.2 2 | 3 | ## Bugfixes 4 | 5 | - fixes screenshot in fsaverage 6 | - on hover region label in fsaverage now display properly 7 | - fixes annotation mode (export annotations, annotations fail to render in viewer on startup (via shared link, local storage etc)) 8 | - fixes an issue where region definition in full assignment table can also be clicked to select the region 9 | -------------------------------------------------------------------------------- /docs/releases/v2.12.3.md: -------------------------------------------------------------------------------- 1 | # v2.12.3 2 | 3 | ## Bugfix 4 | 5 | - Visually distinguish regions that are mapped in a space to those that are not 6 | - Remove experimental flag to VOI 7 | - siibra-explorer now displays description and doi for more regions correctly (Julich Brain 3.0 in all MRI spaces and Julich Brain detailed maps in Big Brain spaces) 8 | - Do not display connectivity in big brain space 9 | -------------------------------------------------------------------------------- /docs/releases/v2.9.0.md: -------------------------------------------------------------------------------- 1 | # v2.9.0 2 | 3 | ## Feature 4 | 5 | - Added minimap picture-in-picture in single panel mode 6 | 7 | ## Behind the scenes 8 | 9 | - Updated dependencies 10 | - Add built bundles to release artefacts 11 | 12 | ## Bugfix 13 | 14 | - Select default connectivity profile 15 | - Show connectivity dataset info 16 | - Mini region search on Enter no longer resets the page 17 | -------------------------------------------------------------------------------- /src/util/pipes/doiPipe.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'doiParserPipe', 5 | }) 6 | 7 | export class DoiParserPipe implements PipeTransform { 8 | public transform(s: string, prefix: string = 'https://doi.org/') { 9 | const hasProtocol = /^https?:\/\//.test(s) 10 | return `${hasProtocol ? '' : prefix}${s}` 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/util/pipes/parseAsNumber.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'parseAsNumber' 5 | }) 6 | 7 | export class ParseAsNumberPipe implements PipeTransform{ 8 | public transform(input: string | string[]): number | number[]{ 9 | if (input instanceof Array) return input.map(v => Number(v)) 10 | return Number(input) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /docs/releases/v2.14.4.md: -------------------------------------------------------------------------------- 1 | # v2.14.4 2 | 3 | ## Feature 4 | 5 | - Sagittal view of perspective PiP changes hemisphere when user navigates to the other hemisphere 6 | - Adds an additional degree adjustment to perspective PiP 7 | - Encode maximised panel state 8 | 9 | ## Behind the Scenes 10 | 11 | - Fix CI/CD deploy on rancher 12 | - Update API docs 13 | - Update github action checkout/setupnode 14 | -------------------------------------------------------------------------------- /docs/releases/v2.7.2.md: -------------------------------------------------------------------------------- 1 | # v2.7.2 2 | 3 | ## Feature 4 | 5 | - (re)introduced the parcellation info button 6 | 7 | ## Bugfix 8 | 9 | - fix the position of quick tour panel of slice view panels 10 | - fix the atlas selection logic. This should reduce 4xx/5xx calls significantly 11 | - minor update to parcellation chip appearance 12 | - clicking on feature badge now properly selects the feature 13 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/parcellation/groupedParcellation.ts: -------------------------------------------------------------------------------- 1 | import { SxplrParcellation } from "src/atlasComponents/sapi/sxplrTypes" 2 | 3 | export class GroupedParcellation{ 4 | name: string 5 | parcellations: SxplrParcellation[] 6 | constructor(name: string, parcellations: SxplrParcellation[]){ 7 | this.name = name 8 | this.parcellations = parcellations 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/parcellation/index.ts: -------------------------------------------------------------------------------- 1 | export { SapiViewsCoreParcellationModule } from "./module" 2 | export { FilterGroupedParcellationPipe } from "./filterGroupedParcellations.pipe" 3 | export { GroupedParcellation } from "./groupedParcellation" 4 | export { ParcTmplDoiPipe } from "./parcTmplDoi.pipe" 5 | export { ParcellationGroupSelectedPipe } from "./parcellationGroupSelected.pipe" 6 | -------------------------------------------------------------------------------- /src/util/directives/destroy.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, OnDestroy } from "@angular/core"; 2 | import { Subject } from "rxjs"; 3 | 4 | @Directive({ 5 | standalone: true 6 | }) 7 | export class DestroyDirective implements OnDestroy{ 8 | public destroyed$ = new Subject() 9 | ngOnDestroy(): void { 10 | this.destroyed$.next() 11 | this.destroyed$.complete() 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/components/spinner/module.ts: -------------------------------------------------------------------------------- 1 | import { CommonModule } from "@angular/common"; 2 | import { NgModule } from "@angular/core"; 3 | import { SpinnerCmp } from "./spinnerCmp/spinner.component"; 4 | 5 | @NgModule({ 6 | imports: [ 7 | CommonModule 8 | ], 9 | declarations: [ 10 | SpinnerCmp 11 | ], 12 | exports: [ 13 | SpinnerCmp 14 | ] 15 | }) 16 | 17 | export class SpinnerModule{} -------------------------------------------------------------------------------- /src/viewerModule/nehuba/store/selectors.ts: -------------------------------------------------------------------------------- 1 | import { createSelector } from "@ngrx/store"; 2 | import { NEHUBA_VIEWER_FEATURE_KEY } from '../constants' 3 | import { INehubaFeature, IAuxMesh } from "./type"; 4 | 5 | export const selectorAuxMeshes = createSelector( 6 | state => state[NEHUBA_VIEWER_FEATURE_KEY], 7 | nehubaFeatureStore => nehubaFeatureStore['auxMeshes'] 8 | ) 9 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/util/parseDoi.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'parseDoi', 5 | }) 6 | 7 | export class ParseDoiPipe implements PipeTransform { 8 | public transform(s: string, prefix: string = 'https://doi.org/') { 9 | const hasProtocol = /^https?:\/\//.test(s) 10 | return `${hasProtocol ? '' : prefix}${s}` 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/util/addUnitAndJoin.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'addUnitAndJoin', 5 | pure: true 6 | }) 7 | 8 | export class AddUnitAndJoin implements PipeTransform{ 9 | public transform(arr: (string | number)[], unit: string, separator: string = ', '): string { 10 | return arr.map(v => `${v}${unit}`).join(separator) 11 | } 12 | } -------------------------------------------------------------------------------- /src/components/markdown/module.ts: -------------------------------------------------------------------------------- 1 | import { CommonModule } from "@angular/common"; 2 | import { NgModule } from "@angular/core"; 3 | import { MarkdownDom } from "./markdownCmp/markdown.component"; 4 | 5 | @NgModule({ 6 | imports: [ 7 | CommonModule, 8 | ], 9 | declarations: [ 10 | MarkdownDom 11 | ], 12 | exports: [ 13 | MarkdownDom 14 | ] 15 | }) 16 | 17 | export class MarkdownModule{} 18 | -------------------------------------------------------------------------------- /docs/releases/v2.10.0.md: -------------------------------------------------------------------------------- 1 | # v2.10.0 2 | 3 | ## Feature 4 | 5 | - classifies features more intuitively 6 | - spatial feature now leverages siibra-python 7 | 8 | ## Bugfix 9 | 10 | - panel maximisation, change atlas/template results in incorrect panel order 11 | - build artefacts properly 12 | 13 | ## Behind the scenes 14 | 15 | - Updates to siibra-api v3/siibra-python v0.4 16 | - Shed request as a dependency 17 | -------------------------------------------------------------------------------- /src/atlasComponents/sapi/README.md: -------------------------------------------------------------------------------- 1 | # SAPI (siibra-api) 2 | 3 | siibra-explorer gets the atlas metadata from siibra-api (http://github.com/fzj-inm1-bda/siibra-api) 4 | 5 | Production instance of siibra-api is at: https://siibra-api-stable.apps.hbp.eu/v2_0/docs 6 | 7 | As siibra-api implements openapi, the schema of the responses can be automatically populated by: 8 | 9 | ```sh 10 | npm run sapi-schema 11 | ``` 12 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from "@angular/core"; 2 | import { SapiViewsCoreModule } from "./core"; 3 | import { VolumesModule } from "./volumes/volumes.module"; 4 | 5 | @NgModule({ 6 | imports: [ 7 | SapiViewsCoreModule, 8 | VolumesModule, 9 | ], 10 | exports: [ 11 | SapiViewsCoreModule, 12 | VolumesModule, 13 | ] 14 | }) 15 | export class SapiViewsModule{} 16 | -------------------------------------------------------------------------------- /src/components/flatHierarchy/spacer.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | import { TreeNode } from "./const" 3 | 4 | @Pipe({ 5 | name: 'flatHierarchySpacer', 6 | pure: true 7 | }) 8 | 9 | export class FlatHierarchySpacer implements PipeTransform{ 10 | public transform(inputNode: TreeNode, ..._args: any[]) { 11 | return Array(inputNode.level).fill(null) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/layouts/layouts/fourPanel/fourPanel.template.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 | 7 |
8 |
9 | 10 |
11 |
12 | 13 |
14 |
15 | -------------------------------------------------------------------------------- /e2e_env.md: -------------------------------------------------------------------------------- 1 | # End-to-end Tests Environment Variables 2 | 3 | | name | description | default | example | 4 | | --- | --- | --- | --- | 5 | | PROTRACTOR_SPECS | specs relative to `./e2e/` | `./src/**/*.prod.e2e-spec.js` | | 6 | | DISABLE_CHROME_HEADLESS | disable headless chrome, spawns chrome window | `unset` (falsy) | 1 | 7 | | ENABLE_GPU | uses GPU. nb, in headless mode, will show requirement not met | `unset` (falsy) | 1 | 8 | -------------------------------------------------------------------------------- /src/api/request/sxplr.getAllAtlases__toSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.getAllAtlases" 13 | }, 14 | "params": { 15 | "const": null 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /src/strictLocal/strictLocalCmp/strictLocalCmp.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: `strict-local-info`, 5 | template: ` 6 | `, 9 | }) 10 | 11 | export class StrictLocalInfo{ 12 | tooltip = "External links are hidden in strict local mode." 13 | } 14 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/store/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | actionRemoveAuxMesh, 3 | actionSetAuxMesh, 4 | actionSetAuxMeshes, 5 | } from './actions' 6 | export { 7 | selectorAuxMeshes 8 | } from './selectors' 9 | export { 10 | reducer 11 | } from './store' 12 | export { 13 | IAuxMesh, 14 | INehubaFeature, 15 | } from './type' 16 | 17 | export * as selectors from "./selectors" 18 | export * as actions from "./actions" -------------------------------------------------------------------------------- /docs/releases/v2.14.15.md: -------------------------------------------------------------------------------- 1 | # v2.14.15 2 | 3 | ## Feature 4 | 5 | - drag/drop nifti: allow sform to be used if qform not set 6 | - support zarr/n5 datasource 7 | - support datasource hosted on GCP (via JSON API) 8 | 9 | ## Documentation 10 | 11 | - fixed up some wordings related to drag/drop nifti 12 | 13 | ## Bugfix 14 | 15 | - fix the visual bug where full name of the space/parcellation is not been properly displayed 16 | -------------------------------------------------------------------------------- /docs/releases/v2.14.7.md: -------------------------------------------------------------------------------- 1 | # v2.14.7 2 | 3 | ## Bugfix 4 | 5 | - fixed issue on iOS/Safari volumetric viewer not displaying. (update called before config was populated). (Thanks to Minji Ma for reporting the bug) 6 | 7 | ## Behind the Scenes 8 | 9 | - Minor refactor to remove unneeded code. 10 | - Fixed typos/errors in release notes 11 | - Removed unused tests (e2e) 12 | - Added simple cypress for basic viewer rendering 13 | -------------------------------------------------------------------------------- /src/util/pipes/getNthElement.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | // TODO use getProperty pipe instead 4 | 5 | @Pipe({ 6 | name: 'getNthElement' 7 | }) 8 | export class GetNthElementPipe implements PipeTransform{ 9 | public transform(array: T[], idx: number): T{ 10 | if (!array[idx]) throw new Error(`[GetNthElementPipe] accessor error`) 11 | return array[idx] 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.getAllAtlases__toSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.getAllAtlases" 13 | }, 14 | "params": { 15 | "const": null 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /docs/releases/v2.14.3.md: -------------------------------------------------------------------------------- 1 | # v2.14.3 2 | 3 | ## Bugfixes 4 | 5 | - Fixed minor theme issue. 6 | - Fixed issue with drag/drop nifti with multiple dimensions. 7 | - Fixed showing user dropped nifti filename. 8 | - Fix Safari 17 nehuba issue 9 | 10 | ## Behind the Scenes 11 | 12 | - Added loading progress bar when plotly is loading. 13 | - Restored displaying warnings to user dragged volume. 14 | - Fine tune helm deploy scripts 15 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/volumes/sandsToNum.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | import { TSandsPoint } from "src/util/types"; 3 | 4 | @Pipe({ 5 | name: 'sandsToNum', 6 | pure: true 7 | }) 8 | export class SandsToNumPipe implements PipeTransform{ 9 | public transform(val: TSandsPoint) { 10 | return { 11 | coords: val.coordinates.map(v => v.value / 1e6) 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/util/pipes/getFilename.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | @Pipe({ 4 | name: 'getFilenamePipe', 5 | }) 6 | 7 | export class GetFilenamePipe implements PipeTransform { 8 | private regex: RegExp = new RegExp('/([^/]+)$') 9 | public transform(fullname: string): string { 10 | return this.regex.test(fullname) 11 | ? this.regex.exec(fullname)[1] 12 | : fullname 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/api/request/sxplr.getSupportedTemplates__toSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.getSupportedTemplates" 13 | }, 14 | "params": { 15 | "const": null 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /docs/releases/v2.14.18.md: -------------------------------------------------------------------------------- 1 | # v2.14.18 2 | 3 | ## Bugfix 4 | 5 | - Fixed x-overlay-layer nifti, swc 6 | - Fixed `ctrl+c` string copy in viewer 7 | - Fixed parcellation visibility toggle 8 | 9 | ## Feature 10 | 11 | - Remove dependency on unpkg 12 | - (experimental) keyframe support for nehuba viewer 13 | 14 | ## Behind the scenes 15 | 16 | - unify colormap shader generation and access 17 | - do not track perspective images with git-lfs 18 | -------------------------------------------------------------------------------- /docs/releases/v2.2.3.md: -------------------------------------------------------------------------------- 1 | # v2.2.3 2 | 3 | 9 June 2020 4 | 5 | ## New features 6 | 7 | - Import "Individual Brain Charting (IBC)" data to explorable datasets 8 | 9 | ## Bugfixes 10 | 11 | - Fixed `undefined` showing for hemisphere metadata (#537) 12 | - Fixed non atlas image e2e test URL 13 | - Fixed backend test specs 14 | - Fixed redi deploy configuration 15 | 16 | ## Under the hood stuff 17 | 18 | - renamed css class for consistency 19 | -------------------------------------------------------------------------------- /src/api/request/sxplr.getSupportedParcellations__toSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.getSupportedParcellations" 13 | }, 14 | "params": { 15 | "const": null 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /src/viewerModule/nehuba/userLayers/userlayerInfo/userlayerInfo.style.scss: -------------------------------------------------------------------------------- 1 | .spinner 2 | { 3 | justify-self: center; 4 | display: inline-block; 5 | margin: 1rem; 6 | } 7 | 8 | :has(> .spinner) 9 | { 10 | display: grid; 11 | } 12 | 13 | .filename-container 14 | { 15 | flex: 1 1 auto; 16 | } 17 | 18 | button[mat-icon-button] 19 | { 20 | display: flex; 21 | justify-content: center; 22 | align-items: center; 23 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.getSupportedTemplates__toSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.getSupportedTemplates" 13 | }, 14 | "params": { 15 | "const": null 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /docs/releases/v2.6.2.md: -------------------------------------------------------------------------------- 1 | # v2.6.2 2 | 3 | ## Bugfixes 4 | 5 | - Added indication when annotations were overwritten (partial fix to #1128) 6 | 7 | ## Under the hood stuff 8 | 9 | - update deploy depedencies 10 | - update deployment configurations 11 | - fixed some CSP issues 12 | - fixed favicons 13 | - added build debug messages 14 | - increment siibra-api version expectation 15 | - remove unused tests 16 | - update compressor image to 22.04 17 | -------------------------------------------------------------------------------- /src/state/userInterface/selectors.ts: -------------------------------------------------------------------------------- 1 | import { createSelector } from "@ngrx/store"; 2 | import { nameSpace } from "./const" 3 | import { UiStore } from "./store" 4 | 5 | const selectStore = state => state[nameSpace] as UiStore 6 | 7 | export const panelMode = createSelector( 8 | selectStore, 9 | state => state.panelMode 10 | ) 11 | 12 | export const panelOrder = createSelector( 13 | selectStore, 14 | state => state.panelOrder 15 | ) 16 | -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.getSupportedParcellations__toSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.getSupportedParcellations" 13 | }, 14 | "params": { 15 | "const": null 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /src/ui/config/configCmp/config.style.css: -------------------------------------------------------------------------------- 1 | .config-transition 2 | { 3 | transition: background-color ease-in-out 200ms; 4 | } 5 | 6 | .config-transition:hover 7 | { 8 | background-color: rgba(128,128,128,0.1); 9 | } 10 | 11 | .onDragOver 12 | { 13 | background-color: rgba(128,128,128,0.2); 14 | } 15 | 16 | .chunky 17 | { 18 | width: 100%; 19 | height: 100%; 20 | } 21 | 22 | .uncollapsable 23 | { 24 | width: 10em; 25 | height: 7em; 26 | } -------------------------------------------------------------------------------- /src/ui/kgtos/module.ts: -------------------------------------------------------------------------------- 1 | import { CommonModule } from "@angular/common"; 2 | import { NgModule } from "@angular/core"; 3 | import { ComponentsModule } from "src/components"; 4 | import { KGToS } from "./kgtos/kgtos.component"; 5 | 6 | @NgModule({ 7 | imports: [ 8 | CommonModule, 9 | ComponentsModule, 10 | ], 11 | declarations: [ 12 | KGToS 13 | ], 14 | exports: [ 15 | KGToS 16 | ] 17 | }) 18 | 19 | export class KgTosModule{} -------------------------------------------------------------------------------- /src/api/handshake/sxplr.init__fromSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "properties": { 13 | "name": { 14 | "type": "string" 15 | } 16 | }, 17 | "type": "object" 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/rich/regionsListSearch/regionListSearchTmpl.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, TemplateRef } from "@angular/core"; 2 | import { SxplrRegion } from "src/atlasComponents/sapi/sxplrTypes"; 3 | 4 | @Directive({ 5 | selector: 'ng-template[region-template],ng-template[regionTemplate]' 6 | }) 7 | 8 | export class SapiViewsCoreRichRegionListTemplateDirective{ 9 | constructor(public tmplRef: TemplateRef){} 10 | } 11 | -------------------------------------------------------------------------------- /src/getFileInput/type.ts: -------------------------------------------------------------------------------- 1 | import { TemplateRef } from "@angular/core"; 2 | 3 | export interface IFileInputConfig { 4 | title: string 5 | allowText: boolean 6 | allowFile: boolean 7 | messageTmpl?: TemplateRef 8 | } 9 | 10 | export type TFileInput = { 11 | text: { input: string } 12 | file: { files: File[] } 13 | } 14 | 15 | export type TFileInputEvent = { 16 | type: Evt 17 | payload: TFileInput[Evt] 18 | } -------------------------------------------------------------------------------- /.storybook/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.app.json", 3 | "compilerOptions": { 4 | "types": [ 5 | "node" 6 | ], 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "exclude": [ 10 | "../src/test.ts", 11 | "../src/**/*.spec.ts", 12 | "../projects/**/*.spec.ts" 13 | ], 14 | "include": [ 15 | "../src/**/*", 16 | "../projects/**/*" 17 | ], 18 | "files": [ 19 | "./typings.d.ts" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /src/features/grpFeatToName.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | interface MetaDisplayName { 4 | meta: { 5 | displayName: string 6 | } 7 | } 8 | 9 | @Pipe({ 10 | name: 'grpFeatToName', 11 | pure: true 12 | }) 13 | 14 | export class GroupFeaturesToName implements PipeTransform{ 15 | public transform(groupFeats: MetaDisplayName[]): string[] { 16 | return groupFeats.map(f => f.meta.displayName) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/screenshot/util.ts: -------------------------------------------------------------------------------- 1 | import { InjectionToken } from "@angular/core" 2 | 3 | interface IScrnShot{ 4 | x: number 5 | y: number 6 | width: number 7 | height: number 8 | } 9 | 10 | /** 11 | * if param is not provided, screenshot entire screen 12 | */ 13 | export type TypeHandleScrnShotPromise = (param?: IScrnShot) => Promise<{ revoke: () => void, url: string }> 14 | export const HANDLE_SCREENSHOT_PROMISE = new InjectionToken('HANDLE_SCREENSHOT_PROMISE') -------------------------------------------------------------------------------- /docs/advanced/api/handshake/sxplr.init__fromSxplr__response.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "jsonrpc": { 6 | "const": "2.0" 7 | }, 8 | "id": { 9 | "type": "string" 10 | }, 11 | "result": { 12 | "properties": { 13 | "name": { 14 | "type": "string" 15 | } 16 | }, 17 | "type": "object" 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/rich/regionsHierarchy/regionsHierarchy.style.css: -------------------------------------------------------------------------------- 1 | .region-tmpl 2 | { 3 | text-overflow: clip; 4 | white-space: nowrap; 5 | } 6 | 7 | :host 8 | { 9 | display: flex; 10 | flex-direction: column; 11 | } 12 | 13 | sxplr-flat-hierarchy-tree-view 14 | { 15 | flex: 0px 1 1; 16 | } 17 | 18 | .legend-container 19 | { 20 | margin: 1rem; 21 | margin-top: -4rem; 22 | flex-direction: row-reverse; 23 | display: flex; 24 | } 25 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/util/equality.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe } from "@angular/core"; 2 | 3 | type TTrackBy = (input: T) => O 4 | 5 | const defaultTrackBy: TTrackBy = i => i 6 | 7 | @Pipe({ 8 | name: 'equality', 9 | pure: true 10 | }) 11 | 12 | export class EqualityPipe{ 13 | public transform(c1: T, c2: T, trackBy: TTrackBy = defaultTrackBy): boolean { 14 | return trackBy(c1) === trackBy(c2) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/components/vButton/vButton.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | padding: 1rem 2rem; 4 | /* background-color:rgba(128,128,128,0.3) */ 5 | } 6 | 7 | :host:hover 8 | { 9 | cursor: pointer; 10 | } 11 | 12 | .icon-container 13 | { 14 | flex-basis: 2.5rem; 15 | } 16 | 17 | .text-container 18 | { 19 | flex-basis: 0; 20 | overflow: visible; 21 | text-align: center; 22 | } 23 | 24 | .footer-container 25 | { 26 | flex-basis: 0rem; 27 | margin-bottom: -1rem; 28 | } -------------------------------------------------------------------------------- /third_party/preinit_vanilla.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | nehuba 8 | 9 | 10 | 11 | 12 |
13 | 14 | -------------------------------------------------------------------------------- /.helm/trafficcop/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "trafficcop.fullname" . }} 5 | labels: 6 | {{- include "trafficcop.labels" . | nindent 4 }} 7 | spec: 8 | type: {{ .Values.service.type }} 9 | ports: 10 | - port: {{ .Values.service.port }} 11 | targetPort: http 12 | protocol: TCP 13 | name: http 14 | selector: 15 | {{- include "trafficcop.selectorLabels" . | nindent 4 }} 16 | -------------------------------------------------------------------------------- /src/components/safeHtml.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform, SecurityContext } from '@angular/core'; 2 | import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; 3 | 4 | @Pipe({ 5 | name : 'safeHtml', 6 | }) 7 | 8 | export class SafeHtmlPipe implements PipeTransform { 9 | constructor(private ds: DomSanitizer){ 10 | 11 | } 12 | public transform(html: string): SafeHtml { 13 | return this.ds.sanitize(SecurityContext.HTML, html) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/util/windowResize/module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from "@angular/core"; 2 | import { ResizeObserverDirective } from "./windowResize.directive"; 3 | import { ResizeObserverService } from "./windowResize.service"; 4 | 5 | @NgModule({ 6 | declarations: [ 7 | ResizeObserverDirective 8 | ], 9 | exports: [ 10 | ResizeObserverDirective 11 | ], 12 | providers: [ 13 | ResizeObserverService 14 | ] 15 | }) 16 | 17 | export class WindowResizeModule{} 18 | -------------------------------------------------------------------------------- /src/viewerModule/viewerCmp/viewerCmp.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from "@angular/core/testing" 2 | import { MockStore, provideMockStore } from "@ngrx/store/testing" 3 | 4 | 5 | describe('> viewerCmp.component.ts', () => { 6 | let mockStore: MockStore 7 | beforeEach(() => { 8 | TestBed.configureTestingModule({ 9 | providers: [ 10 | provideMockStore() 11 | ] 12 | }) 13 | mockStore = TestBed.inject(MockStore) 14 | }) 15 | }) 16 | -------------------------------------------------------------------------------- /.helm/trafficcop/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /docs/releases/v2.14.20.md: -------------------------------------------------------------------------------- 1 | # v2.14.20 2 | 3 | ## Feature 4 | 5 | - Show/Hide delineation now persist in state 6 | - (experimental) glass brain 7 | 8 | ## Bugfix 9 | 10 | - Fixed some instability of annotation mode. 11 | 12 | ## Behind the scenes 13 | 14 | - Clarified authors & contributors 15 | - Improve performance by batching adding & removing layers 16 | - Added text to reflect that annoations will also be shared 17 | - Enabled viewer config in experimental mode 18 | -------------------------------------------------------------------------------- /src/atlasComponents/userAnnotations/annotationMode/annotationMode.style.css: -------------------------------------------------------------------------------- 1 | .tool-btn-container 2 | { 3 | display: flex; 4 | flex-direction: column-reverse; 5 | } 6 | 7 | button 8 | { 9 | pointer-events: all; 10 | 11 | margin-left: -1rem; 12 | margin-right: 1rem; 13 | margin-top: -0.2rem; 14 | 15 | padding-right: 0.75rem; 16 | text-align: right; 17 | } 18 | 19 | .leave-me-alone 20 | { 21 | margin-top: 0.5rem; 22 | margin-bottom: 0.5rem; 23 | } 24 | -------------------------------------------------------------------------------- /src/features/grpFeatToTotal.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | interface MetaHasTotal { 4 | meta: { 5 | total: number 6 | } 7 | } 8 | 9 | @Pipe({ 10 | name: 'grpFeatTally', 11 | pure: true 12 | }) 13 | 14 | export class GroupFeatureTallyPipe implements PipeTransform{ 15 | public transform(groupFeats: MetaHasTotal[]): number { 16 | return groupFeats.map(f => f.meta.total).reduce((v, acc) => v + acc, 0) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/util/side-panel/side-panel.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'sxplr-side-panel', 5 | templateUrl: './side-panel.component.html', 6 | styleUrls: ['./side-panel.component.scss'] 7 | }) 8 | export class SidePanelComponent { 9 | @Input('sxplr-side-panel-card-color') 10 | cardColor: string = `rgb(200, 200, 200)` 11 | 12 | @Input('sxplr-side-panel-card-color') 13 | darktheme: boolean = false 14 | } 15 | -------------------------------------------------------------------------------- /.helm/adhoc/example-secret-siibra-explorer.yml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: siibra-sxplr-secret 5 | type: Opaque 6 | data: 7 | # n.b. echo -n "foobar" | base64 8 | # or else the new line will also be encoded, and you will 9 | # wonder why your application does not work 10 | HBP_CLIENTID_V2: Zm9vYmFy 11 | HBP_CLIENTSECRET_V2: Zm9vYmFy 12 | SXPLR_EBRAINS_IAM_SA_CLIENT_ID: Zm9vYmFy 13 | SXPLR_EBRAINS_IAM_SA_CLIENT_SECRET: Zm9vYmFy 14 | 15 | -------------------------------------------------------------------------------- /.helm/siibra-explorer/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /src/screenshot/screenshotCmp/screenshot.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | display: block; 4 | width:100%; 5 | } 6 | 7 | .cover 8 | { 9 | background-color: rgba(0,0,0, 0.5); 10 | } 11 | 12 | .box 13 | { 14 | /* background: none; */ 15 | box-sizing: content-box; 16 | width: 0; 17 | height: 0; 18 | transform-origin: top left; 19 | } 20 | 21 | .inner-box 22 | { 23 | border: 1px white solid; 24 | } 25 | 26 | img 27 | { 28 | max-width: 50vw; 29 | min-width: 20vw; 30 | } -------------------------------------------------------------------------------- /src/ui/help/howToCite/howToCite.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | 3 | // eslint-disable-next-line @typescript-eslint/no-var-requires 4 | const { default: HOWTOCITE } = require('!!raw-loader!common/howToCite.md') 5 | 6 | @Component({ 7 | selector: 'how-to-cite', 8 | templateUrl: './howToCite.template.html', 9 | styleUrls: [ 10 | './howToCite.style.css' 11 | ] 12 | }) 13 | 14 | export class HowToCite{ 15 | public HOWTOCITE = HOWTOCITE 16 | } -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/parcellation/isGroupedParcellation.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core" 2 | import { GroupedParcellation } from "./groupedParcellation" 3 | 4 | @Pipe({ 5 | name: 'isGroupedParcellation', 6 | pure: true 7 | }) 8 | 9 | export class IsGroupedParcellation implements PipeTransform{ 10 | public transform(input: unknown): input is GroupedParcellation { 11 | return input['parcellations'] instanceof Array 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/util/pipes/safeResource.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | import { DomSanitizer, SafeResourceUrl } from "@angular/platform-browser"; 3 | 4 | @Pipe({ 5 | name: 'safeResource' 6 | }) 7 | 8 | export class SafeResourcePipe implements PipeTransform{ 9 | constructor( 10 | private ds: DomSanitizer 11 | ){ 12 | 13 | } 14 | 15 | transform(input: string): SafeResourceUrl{ 16 | return this.ds.bypassSecurityTrustResourceUrl(input) 17 | } 18 | } -------------------------------------------------------------------------------- /.helm/siibra-explorer/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "siibra-explorer.fullname" . }} 5 | labels: 6 | {{- include "siibra-explorer.labels" . | nindent 4 }} 7 | spec: 8 | type: {{ .Values.service.type }} 9 | ports: 10 | - port: {{ .Values.service.port }} 11 | targetPort: http 12 | protocol: TCP 13 | name: http 14 | selector: 15 | {{- include "siibra-explorer.selectorLabels" . | nindent 4 }} 16 | -------------------------------------------------------------------------------- /.helm/trafficcop/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "trafficcop.serviceAccountName" . }} 6 | labels: 7 | {{- include "trafficcop.labels" . | nindent 4 }} 8 | {{- with .Values.serviceAccount.annotations }} 9 | annotations: 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | automountServiceAccountToken: {{ .Values.serviceAccount.automount }} 13 | {{- end }} 14 | -------------------------------------------------------------------------------- /cypress.config.js: -------------------------------------------------------------------------------- 1 | const { defineConfig } = require("cypress"); 2 | 3 | module.exports = defineConfig({ 4 | e2e: { 5 | defaultCommandTimeout: 15000, 6 | supportFile: false, 7 | setupNodeEvents(on, config) { 8 | // implement node event listeners here 9 | }, 10 | }, 11 | env: { 12 | SCREENSHOT_URL: process.env.SCREENSHOT_URL, 13 | SCREENSHOT_PATH: process.env.SCREENSHOT_PATH, 14 | }, 15 | experimentalWebKitSupport: !!process.env.USE_SAFARI 16 | }); 17 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/parcellation/parcTmplDoi.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | import { SxplrParcellation, SxplrTemplate } from "src/atlasComponents/sapi/sxplrTypes"; 3 | 4 | @Pipe({ 5 | name: 'parcTmplDoiPipe', 6 | pure: true 7 | }) 8 | 9 | export class ParcTmplDoiPipe implements PipeTransform { 10 | public transform(_parc: SxplrParcellation|SxplrTemplate): string[] { 11 | return (_parc.link || []).map(v => v.href) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/auth/auth.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive } from "@angular/core"; 2 | import { Observable } from "rxjs"; 3 | import { IUser, AuthService } from './auth.service' 4 | 5 | @Directive({ 6 | selector: '[iav-auth-auth-state]', 7 | exportAs: 'iavAuthAuthState' 8 | }) 9 | 10 | export class AuthStateDdirective{ 11 | public user$: Observable 12 | 13 | constructor( 14 | private authService: AuthService, 15 | ){ 16 | this.user$ = this.authService.user$ 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/features/compoundFeatureIndices/idxToText.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | import { CFIndex } from "./util" 3 | 4 | @Pipe({ 5 | name: 'indexToStr', 6 | pure: true 7 | }) 8 | export class IndexToStrPipe implements PipeTransform{ 9 | public transform(value: CFIndex['index']): string { 10 | if (typeof value === "string") { 11 | return value 12 | } 13 | return `Point(${value.loc.map(v => v.toFixed(2)).join(", ")})` 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/plugin/const.ts: -------------------------------------------------------------------------------- 1 | import { InjectionToken } from "@angular/core" 2 | 3 | const PLUGIN_SRC_KEY = "x-plugin-portal-src" 4 | 5 | export function setPluginSrc(src: string, record: Record = {}){ 6 | return { 7 | ...record, 8 | [PLUGIN_SRC_KEY]: src 9 | } 10 | } 11 | 12 | export function getPluginSrc(record: Record = {}){ 13 | return record[PLUGIN_SRC_KEY] 14 | } 15 | 16 | export const SET_PLUGIN_NAME = new InjectionToken('SET_PLUGIN_NAME') 17 | -------------------------------------------------------------------------------- /docs/releases/v2.14.11.md: -------------------------------------------------------------------------------- 1 | # v2.14.11 2 | 3 | ## Feature 4 | 5 | - (experimental) showing coordinates of all warped spaces 6 | 7 | ## Bugfix 8 | 9 | - Fixed inconsistent saneurl creation (Thanks to Sebastian Bludau for reporting this) 10 | 11 | 12 | ## Known regressions 13 | 14 | - Labelled assignment now does not work. This will be addressed in a future update. (The temporary regression allows for significant performant statistical assignment, as well more accurate label assignment.) 15 | -------------------------------------------------------------------------------- /docs/releases/v2.4.8.md: -------------------------------------------------------------------------------- 1 | # v2.4.8 2 | 3 | ## Enhancements 4 | 5 | - Added badges to annotation tab button to show number of annotations added (#1007) 6 | - Added some feedbacks when annotations are being loaded 7 | - Added delete all annotation button 8 | - Added feedbacks when annotation from different reference spaces are added 9 | 10 | ## Under the hood stuff 11 | 12 | - Tweaked space bar capture 13 | - Allow branches with `hotfix` in its name to target production siibra-api endpoints 14 | -------------------------------------------------------------------------------- /src/experimental/experimental.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from "@angular/core"; 2 | import { select, Store } from "@ngrx/store"; 3 | import { MainState, userPreference } from "src/state"; 4 | 5 | @Injectable({ 6 | providedIn: "root" 7 | }) 8 | 9 | export class ExperimentalService { 10 | 11 | showExperimentalFlag$ = this.store.pipe( 12 | select(userPreference.selectors.showExperimental) 13 | ) 14 | 15 | constructor(private store: Store){ 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.helm/trafficcop/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "trafficcop.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "trafficcop.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "trafficcop.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /src/atlasComponents/userAnnotations/annotationVisible.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | import { IAnnotationGeometry } from "./tools/type"; 3 | 4 | @Pipe({ 5 | name: 'annotationVisiblePipe', 6 | pure: true 7 | }) 8 | 9 | export class AnnotationVisiblePipe implements PipeTransform{ 10 | public transform(hiddenAnns: IAnnotationGeometry[], thisAnn: IAnnotationGeometry): boolean { 11 | return hiddenAnns.findIndex(a => a.id === thisAnn.id) < 0 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/getFileInput/fileInputModal/fileInputModal.style.css: -------------------------------------------------------------------------------- 1 | .file-input-label-container 2 | { 3 | box-sizing: border-box; 4 | padding: 1rem; 5 | } 6 | 7 | .file-input-label 8 | { 9 | display: flex; 10 | align-items: center; 11 | justify-content: center; 12 | border-radius: 1rem; 13 | border: 2px dashed rgba(128,128,128,0.4); 14 | opacity: 0.7; 15 | transition: opacity 200ms ease-in-out; 16 | } 17 | 18 | .file-input-label:hover 19 | { 20 | cursor: pointer; 21 | opacity: 1.0; 22 | } -------------------------------------------------------------------------------- /src/keyframesModule/keyframeCtrl/keyframeCtrl.style.css: -------------------------------------------------------------------------------- 1 | .cdk-drop-list-dragging :not(.cdk-drag-placeholder) 2 | { 3 | transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); 4 | } 5 | .cdk-drag-placeholder { 6 | opacity: 0.2; 7 | } 8 | [cdkDragHandle] 9 | { 10 | cursor:ns-resize; 11 | } 12 | 13 | mat-form-field 14 | { 15 | margin-right: 0.25rem; 16 | } 17 | 18 | .duration-container 19 | { 20 | width: 3.5rem; 21 | } 22 | 23 | .controller-container > * 24 | { 25 | display: block; 26 | } 27 | -------------------------------------------------------------------------------- /src/layouts/fourCorners/fourCorners.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component, Input } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: 'iav-layout-fourcorners', 5 | templateUrl: './fourCorners.template.html', 6 | styleUrls: [ 7 | './fourCorners.style.css' 8 | ], 9 | changeDetection: ChangeDetectionStrategy.OnPush 10 | }) 11 | 12 | export class FourCornersCmp{ 13 | @Input('iav-layout-fourcorners-cnr-cntr-ngclass') 14 | cornerContainerClasses = {} 15 | } 16 | -------------------------------------------------------------------------------- /src/spotlight/sl-spotlight.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, TemplateRef } from '@angular/core'; 2 | import { SlServiceService } from './sl-service.service'; 3 | 4 | @Directive({ 5 | selector: '[sl-spotlight]', 6 | exportAs: 'sl-spotlight' 7 | }) 8 | export class SlSpotlightDirective { 9 | 10 | constructor( 11 | private slService: SlServiceService 12 | ) { 13 | 14 | } 15 | 16 | showBackdrop(tmpl?: TemplateRef){ 17 | this.slService.showBackdrop(tmpl) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /.helm/siibra-explorer/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "siibra-explorer.serviceAccountName" . }} 6 | labels: 7 | {{- include "siibra-explorer.labels" . | nindent 4 }} 8 | {{- with .Values.serviceAccount.annotations }} 9 | annotations: 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | automountServiceAccountToken: {{ .Values.serviceAccount.automount }} 13 | {{- end }} 14 | -------------------------------------------------------------------------------- /.storybook/main.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "stories": [ 3 | "../src/**/*.stories.mdx", 4 | "../src/**/*.stories.@(js|jsx|ts|tsx)" 5 | ], 6 | "addons": [ 7 | "storybook-dark-mode", 8 | "@storybook/addon-links", 9 | "@storybook/addon-essentials", 10 | "@storybook/addon-interactions" 11 | ], 12 | "framework": "@storybook/angular", 13 | "core": { 14 | "builder": "@storybook/builder-webpack5" 15 | }, 16 | features: { 17 | interactionsDebugger: true, 18 | }, 19 | } 20 | -------------------------------------------------------------------------------- /src/ui/help/helpOnePager/helpOnePager.template.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 10 | 14 | 15 |
16 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/ngLayerCtlModule/ngLayerCtl/ngLayerCtrl.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | padding: 0.5rem 0; 4 | } 5 | 6 | .nglayer-container 7 | { 8 | display: flex; 9 | width: 100%; 10 | align-items: center; 11 | } 12 | 13 | button 14 | { 15 | flex: 0 0 auto; 16 | } 17 | 18 | .layer-name 19 | { 20 | flex: 1 1 0px; 21 | overflow: hidden; 22 | } 23 | 24 | spinner-cmp:has(+ .hydrated) 25 | { 26 | display: none; 27 | } 28 | 29 | ng-layer-tune 30 | { 31 | width: 100%; 32 | } 33 | -------------------------------------------------------------------------------- /.helm/siibra-explorer/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "siibra-explorer.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "siibra-explorer.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "siibra-explorer.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /src/api/handshake/README.md: -------------------------------------------------------------------------------- 1 | # Handshake API 2 | 3 | Handshake messages are meant for siibra-explorer to probe if the plugin is alive and well (and also a way for the plugin to check if siibra-explorer is responsive) 4 | 5 | ## API 6 | 7 | 8 | 9 | | event name | initiator | request | response | 10 | | --- | --- | --- | --- | 11 | | sxplr.init | viewer | [jsonschema](sxplr.init__fromSxplr__request.json) | [jsonschema](sxplr.init__fromSxplr__response.json) | 12 | -------------------------------------------------------------------------------- /src/viewerModule/threeSurfer/threeSurferGlue/threeSurfer.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | display: block; 4 | height: 100%; 5 | width: 100%; 6 | } 7 | 8 | .button-container 9 | { 10 | z-index: 1; 11 | position: fixed; 12 | bottom: 1rem; 13 | right: 1rem; 14 | width: 0px; 15 | height:0px; 16 | 17 | display: flex; 18 | justify-content: flex-end; 19 | align-items: flex-end; 20 | } 21 | 22 | span.mouseover 23 | { 24 | z-index: 1; 25 | position: fixed; 26 | bottom: 3rem; 27 | right: 1rem; 28 | } 29 | -------------------------------------------------------------------------------- /.github/workflows/code/create-checklist-comment.js: -------------------------------------------------------------------------------- 1 | module.exports = async ({github, context}) => { 2 | const pathToChecklist = './checklist.md' 3 | const fs = require('fs') 4 | const { promisify } = require('util') 5 | const asyncReadFile = promisify(fs.readFile) 6 | const text = await asyncReadFile(pathToChecklist, 'utf-8') 7 | github.rest.issues.createComment({ 8 | issue_number: context.issue.number, 9 | owner: context.repo.owner, 10 | repo: context.repo.repo, 11 | body: text 12 | }) 13 | } 14 | -------------------------------------------------------------------------------- /src/atlasComponents/userAnnotations/annotationList/annotationList.style.css: -------------------------------------------------------------------------------- 1 | .inactive-filter { 2 | color: #bababa; 3 | } 4 | 5 | :host-context([darktheme="true"]) .hovering-header { 6 | background-color: #737373; 7 | } 8 | :host-context([darktheme="false"]) .hovering-header { 9 | background-color: rgb(245, 245, 245); 10 | } 11 | 12 | .single-annotation-grid-container 13 | { 14 | display: grid; 15 | grid-template-columns: 3em auto; 16 | gap: 0px 0px; 17 | grid-template-areas: ". ."; 18 | } 19 | -------------------------------------------------------------------------------- /src/components/vButton/vButton.template.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 |
6 |
7 | 8 | 9 |
10 | 14 |
-------------------------------------------------------------------------------- /src/share/share.directive.ts: -------------------------------------------------------------------------------- 1 | import { Directive, HostListener } from "@angular/core"; 2 | import { MatBottomSheet } from 'src/sharedModules/angularMaterial.exports' 3 | import { ShareSheetComponent } from "./shareSheet/shareSheet.component" 4 | 5 | 6 | @Directive({ 7 | selector: `[sxplr-share-view]` 8 | }) 9 | 10 | export class ShareDirective{ 11 | constructor(private btmSht: MatBottomSheet){ 12 | 13 | } 14 | @HostListener('click') 15 | onClick(){ 16 | this.btmSht.open(ShareSheetComponent) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/state/state.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from "@angular/core"; 2 | import { StateAggregator } from "./stateAggregator.directive"; 3 | 4 | // TODO 5 | // perhaps this should be called StateUtilModule? 6 | // or alternatively, slowly move all state related components to this module? 7 | // urlutil should also be at least in this module folder 8 | 9 | @NgModule({ 10 | declarations: [ 11 | StateAggregator 12 | ], 13 | exports: [ 14 | StateAggregator 15 | ] 16 | }) 17 | 18 | export class StateModule{} 19 | -------------------------------------------------------------------------------- /src/viewerModule/nehuba/store/type.ts: -------------------------------------------------------------------------------- 1 | import { atlasAppearance } from "src/state" 2 | 3 | export interface IAuxMesh { 4 | ['@id']: string 5 | name: string 6 | displayName?: string 7 | ngId: string 8 | labelIndicies: number[] 9 | rgb: [number, number, number] 10 | visible: boolean 11 | } 12 | 13 | 14 | export interface INehubaFeature { 15 | layers: atlasAppearance.const.NgLayerCustomLayer[] 16 | panelMode: string 17 | panelOrder: string 18 | octantRemoval: boolean 19 | auxMeshes: IAuxMesh[] 20 | } 21 | -------------------------------------------------------------------------------- /backend/test_app/test_sane_url.py: -------------------------------------------------------------------------------- 1 | from app.app import app 2 | from fastapi.testclient import TestClient 3 | 4 | client = TestClient(app) 5 | 6 | def test_annotation_redirect(): 7 | resp = client.get("/go/stnr", headers={ 8 | "Accept": "text/html" 9 | }, follow_redirects=False) 10 | loc = resp.headers.get("Location") 11 | assert loc, "Expected location header to be present, but was not" 12 | assert "x-user-anntn:stnr" in loc, f"Expected the string 'x-user-anntn:stnr' in {loc!r}, but was not" 13 | 14 | -------------------------------------------------------------------------------- /src/api/request/sxplr.cancelRequest__toSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.cancelRequest" 13 | }, 14 | "params": { 15 | "properties": { 16 | "id": { 17 | "type": "string" 18 | } 19 | }, 20 | "type": "object" 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /src/ui/cookieAgreement/cookieAgreement/cookieAgreement.style.css: -------------------------------------------------------------------------------- 1 | :host 2 | { 3 | display: block; 4 | margin-bottom:1rem; 5 | } 6 | 7 | .expansion-panel .mat-expansion-panel-header-title, 8 | .expansion-panel .mat-expansion-panel-header-description 9 | { 10 | flex-basis: 0; 11 | } 12 | 13 | .expansion-panel .mat-expansion-panel-header-description 14 | { 15 | justify-content: space-between; 16 | align-items: center; 17 | } 18 | 19 | iframe 20 | { 21 | width: 100%; 22 | padding: 1rem; 23 | height: 20rem; 24 | } 25 | -------------------------------------------------------------------------------- /src/api/request/sxplr.setAuxMeshAlpha__toSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.setAuxMeshAlpha" 13 | }, 14 | "params": { 15 | "properties": { 16 | "alpha": { 17 | "type": "number" 18 | } 19 | }, 20 | "type": "object" 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /src/viewerModule/nehuba/nehubaViewer/nehubaViewer.template.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | loading nehuba viewer 5 |

6 |

7 | 8 | 9 | 10 |

11 |
12 |
-------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.cancelRequest__toSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.cancelRequest" 13 | }, 14 | "params": { 15 | "properties": { 16 | "id": { 17 | "type": "string" 18 | } 19 | }, 20 | "type": "object" 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /src/api/request/sxplr.setOctantRemoval__toSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.setOctantRemoval" 13 | }, 14 | "params": { 15 | "properties": { 16 | "flag": { 17 | "type": "boolean" 18 | } 19 | }, 20 | "type": "object" 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /src/res/icons/iav-icons.css: -------------------------------------------------------------------------------- 1 | .iavic{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;}@font-face{font-family:"iav-custom-icons";font-style:normal;font-weight:900;font-display:auto;src:url(./iav-icons.woff)format("woff"),url(./iav-icons.ttf)format("truetype"),url(./iav-icons.svg)format("svg");}.iavic{font-family:"iav-custom-icons";}.iavic-translation:before{content:"t";}.iavic-scaling:before{content:"s";}.iavic-rotation:before{content:"r";} -------------------------------------------------------------------------------- /src/viewerModule/leap/signal.directive.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFactoryResolver, Directive, ViewContainerRef } from "@angular/core"; 2 | import { LeapSignal } from "./leapSignal/leapSignal.component"; 3 | 4 | @Directive({ 5 | selector: '[leap-control-view-ref]' 6 | }) 7 | export class LeapControlViewRef { 8 | constructor( 9 | private vcr: ViewContainerRef, 10 | private cfr: ComponentFactoryResolver, 11 | ){ 12 | const cf = this.cfr.resolveComponentFactory(LeapSignal) 13 | this.vcr.createComponent(cf) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /backend/app/cors.py: -------------------------------------------------------------------------------- 1 | from starlette.middleware.base import BaseHTTPMiddleware 2 | from starlette.responses import Response 3 | 4 | class CorsMW(BaseHTTPMiddleware): 5 | async def dispatch(self, request, call_next): 6 | if request.method == "OPTIONS": 7 | res = Response(b"", 200, { 8 | "Access-Control-Allow-Origin": "*" 9 | }) 10 | return res 11 | 12 | resp = await call_next(request) 13 | resp.headers["Access-Control-Allow-Origin"] = "*" 14 | return resp 15 | -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.setAuxMeshAlpha__toSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.setAuxMeshAlpha" 13 | }, 14 | "params": { 15 | "properties": { 16 | "alpha": { 17 | "type": "number" 18 | } 19 | }, 20 | "type": "object" 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /docs/advanced/api/request/sxplr.setOctantRemoval__toSxplr__request.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "jsonrpc": { 9 | "const": "2.0" 10 | }, 11 | "method": { 12 | "const": "sxplr.setOctantRemoval" 13 | }, 14 | "params": { 15 | "properties": { 16 | "flag": { 17 | "type": "boolean" 18 | } 19 | }, 20 | "type": "object" 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /docs/releases/v2.13.0.md: -------------------------------------------------------------------------------- 1 | # v2.13.0 2 | 3 | ## Feature 4 | 5 | - reworked UI 6 | - allow fsaverage grid to be toggled on/off 7 | - disable surface face selection (until it becomes fully supported) 8 | - allow feature to be downloaded 9 | - main download button also downloads selected feature 10 | - added javascript disabled page 11 | 12 | ## Behind the scene 13 | 14 | - ported the backend to use python rather than nodejs 15 | 16 | ## Bugfixes 17 | 18 | - fix URL encoded annotations 19 | - improved reliability of URL encoding of viewer state 20 | -------------------------------------------------------------------------------- /src/atlas-download/atlas-download.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { AtlasDownloadDirective } from './atlas-download.directive'; 4 | import { AngularMaterialModule } from 'src/sharedModules'; 5 | 6 | 7 | @NgModule({ 8 | declarations: [ 9 | AtlasDownloadDirective 10 | ], 11 | imports: [ 12 | CommonModule, 13 | AngularMaterialModule, 14 | ], 15 | exports: [ 16 | AtlasDownloadDirective 17 | ] 18 | }) 19 | export class AtlasDownloadModule { } 20 | -------------------------------------------------------------------------------- /src/atlasComponents/sapiViews/core/rich/ATPSelector/pureDumb/pureATPSelector.components.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from "@angular/core" 2 | import { PureATPSelectorDirective } from "../pureATP.directive" 3 | 4 | @Component({ 5 | selector: 'sxplr-pure-atp-selector', 6 | templateUrl: `./pureATPSelector.template.html`, 7 | styleUrls: [ 8 | `./pureATPSelector.style.scss` 9 | ], 10 | changeDetection: ChangeDetectionStrategy.OnPush, 11 | }) 12 | 13 | export class PureATPSelector extends PureATPSelectorDirective{} 14 | -------------------------------------------------------------------------------- /src/util/array.ts: -------------------------------------------------------------------------------- 1 | const defaultCmFn = (o: T, n: T) => o === n 2 | export function arrayEqual(compareFn: (o1: T, o2: T) => boolean = defaultCmFn, order = false) { 3 | return function(array1: T[], array2: T[]){ 4 | if (order) { 5 | for (const idx in array1) { 6 | if (!compareFn(array1[idx], array2[idx])) return false 7 | } 8 | return true 9 | } 10 | return !!array1.every(it1 => array2.find(it2 => compareFn(it1, it2))) 11 | && !!array2.every(it2 => array1.find(it1 => compareFn(it1, it2))) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /docs/releases/v0.3.0-beta.md: -------------------------------------------------------------------------------- 1 | # v0.3.0-beta 2 | 3 | 26 Apr 2019 4 | 5 | [release](https://github.com/HumanBrainProject/interactive-viewer/releases/tag/v0.3.0-beta) 6 | 7 | - Using Bootstrap 4 8 | - Using webgl 2 9 | - Supporting Andorid mobile devices 10 | - Allow querying of Knowledge Graph on semantically linked data 11 | - Landmark sizes now scale with brain sizes (Because mouse brains are a lot smaller than human brains) 12 | - Allow setting of GPU limit. On lower end devices, this can reduce the likelihood of a crash. 13 | - Allow user login via HBP OIDC -------------------------------------------------------------------------------- /docs/releases/v2.13.4.md: -------------------------------------------------------------------------------- 1 | # v2.13.4 2 | 3 | ## Feature 4 | 5 | - Properly navigate to volume of interest based on volume meta: 6 | - properly calculate the orientation 7 | - properly calculate enclosed, and navigate to closest point if outside 8 | - Added button to navigate to the point assignment UI 9 | 10 | ## Bugfix 11 | 12 | - Fixed expected siibra-api version 13 | - Fixed previously selected point not rendering 14 | 15 | ## Behind the scenes 16 | 17 | - Temporary workaround for volume meta 18 | - More efficient caching of meta retrieval 19 | -------------------------------------------------------------------------------- /src/util/includes.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from "@angular/core"; 2 | 3 | const defaultCompareFn = (item: T, comparator: T): boolean => item === comparator 4 | 5 | @Pipe({ 6 | name: 'includes', 7 | }) 8 | 9 | export class IncludesPipe implements PipeTransform { 10 | public transform(array: T[], item: T, compareFn: (a: T, b:T) => boolean = defaultCompareFn): boolean { 11 | if (!array) { return false } 12 | if (!(array instanceof Array)) { return false } 13 | return array.some(it => compareFn(it, item)) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /docs/releases/v2.5.7.md: -------------------------------------------------------------------------------- 1 | # v2.5.7 2 | 3 | ## Bugfix 4 | 5 | - fixed version in console 6 | - fixed UI bug: multiple doi overlap 7 | - fixed UI bug: sometimes missing doi are also rendered 8 | - fixed waxholm v4 preview image 9 | 10 | ## Feature 11 | 12 | - Add menu to change perspective orientation by coronal/sagittal/axial views. 13 | - re-introduced saneUrl 14 | 15 | ## Under the hood 16 | 17 | - added saneurl for bigbrain isocortex, allen CCFv3 2017 18 | - fixed csp issues 19 | - optimised build (assets should be smaller) 20 | - added git hash in console 21 | -------------------------------------------------------------------------------- /features/doc-launch-quicktour.feature: -------------------------------------------------------------------------------- 1 | Feature: Doc Launch and Quicktour 2 | 3 | From doc - Launch and Quicktour 4 | 5 | Scenario: Accessing quicktour on startup 6 | Given User first launched siibra-explorer 7 | Then User should be asked if they would like a quick tour 8 | 9 | Scenario: Accessing quicktour on return 10 | Given User launched siibra-explorer second time 11 | When User hit `?` key or clicks `(?)` button (top right) 12 | Then User should be able to find `Quick Tour` button at the modal dialog -------------------------------------------------------------------------------- /src/features/feature-view/feature-view.component.scss: -------------------------------------------------------------------------------- 1 | .feature-title 2 | { 3 | max-height: 12rem; 4 | overflow-x: hidden; 5 | overflow-y: auto; 6 | } 7 | 8 | .feature-detail 9 | { 10 | width: 100%; 11 | } 12 | 13 | spinner-cmp 14 | { 15 | margin: auto; 16 | margin-left: 0.5rem; 17 | } 18 | 19 | readmore-component 20 | { 21 | width: 100%; 22 | } 23 | 24 | .header-card { 25 | background-color: #fee; 26 | } 27 | 28 | :host-context([darktheme="true"]) 29 | { 30 | .header-card { 31 | background-color: #433; 32 | } 33 | } -------------------------------------------------------------------------------- /docs/releases/v0.2.9.md: -------------------------------------------------------------------------------- 1 | # v0.2.9 2 | 3 | 19 Nov 2018 4 | 5 | !!! info 6 | v0.2.9 is the last version that supports Bootstrap v3 7 | 8 | !!! info 9 | v0.2.9 is the last version that is purely frontend. From [v0.3.0-beta](v0.3.0-beta.md) onwards, interactive atlas viewer requires a backend to function properly. 10 | 11 | [release](https://github.com/HumanBrainProject/interactive-viewer/releases/tag/v0.2.9) 12 | 13 | - Refactor to allow for faster transpiling, faster loading (via Angular AOT compilation) 14 | - Improving performance on rendering nested hierarchy --------------------------------------------------------------------------------