@openneuro/app 4.33.4 → 4.34.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/package.json +4 -3
  2. package/src/client.jsx +2 -1
  3. package/src/scripts/authentication/signOut.ts +1 -1
  4. package/src/scripts/common/containers/footer.tsx +1 -1
  5. package/src/scripts/common/containers/header.tsx +3 -2
  6. package/src/scripts/common/content/affiliate-content.jsx +72 -0
  7. package/src/scripts/common/content/assets/affiliates/bids.jpg +0 -0
  8. package/src/scripts/common/content/assets/affiliates/datalad.jpg +0 -0
  9. package/src/scripts/common/content/assets/affiliates/nih-bi-logo.png +0 -0
  10. package/src/scripts/common/content/assets/front-page/brand_mark.png +0 -0
  11. package/src/scripts/common/content/assets/front-page/cube-get.png +0 -0
  12. package/src/scripts/common/content/assets/front-page/cube-share.png +0 -0
  13. package/src/scripts/common/content/assets/front-page/cube-use.png +0 -0
  14. package/src/scripts/common/content/assets/front-page/ljaf.png +0 -0
  15. package/src/scripts/common/content/assets/front-page/logo_app.png +0 -0
  16. package/src/scripts/common/content/assets/front-page/logo_cube.png +0 -0
  17. package/src/scripts/common/content/assets/front-page/logo_data.png +0 -0
  18. package/src/scripts/common/content/assets/front-page/logo_users.png +0 -0
  19. package/src/scripts/common/content/assets/front-page/novo-logo.png +0 -0
  20. package/src/scripts/common/content/assets/front-page/nru-logo.png +0 -0
  21. package/src/scripts/common/content/assets/front-page/nsf.png +0 -0
  22. package/src/scripts/common/content/assets/front-page/sqm-logo.png +0 -0
  23. package/src/scripts/common/content/assets/front-page/squishymedia.png +0 -0
  24. package/src/scripts/common/content/assets/front-page/stanford.png +0 -0
  25. package/src/scripts/common/content/assets/modality-cubes/brain-initiative.jpg +0 -0
  26. package/src/scripts/common/content/assets/modality-cubes/eeg.jpg +0 -0
  27. package/src/scripts/common/content/assets/modality-cubes/ieeg.jpg +0 -0
  28. package/src/scripts/common/content/assets/modality-cubes/meg.jpg +0 -0
  29. package/src/scripts/common/content/assets/modality-cubes/mri.jpg +0 -0
  30. package/src/scripts/common/content/assets/modality-cubes/nih_cube.jpg +0 -0
  31. package/src/scripts/common/content/assets/modality-cubes/nirs.jpg +0 -0
  32. package/src/scripts/common/content/assets/modality-cubes/pet-scan.jpg +0 -0
  33. package/src/scripts/common/content/assets/portal-content/nih-bi-brand.png +0 -0
  34. package/src/scripts/common/content/facet-content.jsx +186 -0
  35. package/src/scripts/common/content/front-page-content.jsx +177 -0
  36. package/src/scripts/common/content/image-attribution.tsx +3 -3
  37. package/src/scripts/common/content/modality-cube-content.jsx +92 -0
  38. package/src/scripts/common/content/portal-content.jsx +149 -0
  39. package/src/scripts/common/content/portal-grant-content.jsx +30 -0
  40. package/src/scripts/common/content/sortby-list.jsx +18 -0
  41. package/src/scripts/common/forms/warn-button.jsx +1 -1
  42. package/src/scripts/components/accordion/AccordionTab.tsx +68 -0
  43. package/src/scripts/components/accordion/AccordionWrap.tsx +22 -0
  44. package/src/scripts/components/accordion/__tests__/AccordionTab.spec.tsx +35 -0
  45. package/src/scripts/components/accordion/accordion.scss +68 -0
  46. package/src/scripts/components/activity-slider/ActivitySlider.tsx +121 -0
  47. package/src/scripts/components/activity-slider/slider.scss +130 -0
  48. package/src/scripts/components/affiliate-article/AffiliateArticle.tsx +26 -0
  49. package/src/scripts/components/affiliate-article/affiliate.scss +32 -0
  50. package/src/scripts/components/aggregate-count/AggregateCount.tsx +20 -0
  51. package/src/scripts/components/assets/activity-icon.png +0 -0
  52. package/src/scripts/components/assets/close-button.png +0 -0
  53. package/src/scripts/components/assets/favicon copy.ico +0 -0
  54. package/src/scripts/components/assets/favicon.ico +0 -0
  55. package/src/scripts/components/assets/get_data_browse.png +0 -0
  56. package/src/scripts/components/assets/get_data_download.png +0 -0
  57. package/src/scripts/components/assets/ljaf copy.png +0 -0
  58. package/src/scripts/components/assets/logo_app copy.png +0 -0
  59. package/src/scripts/components/assets/logo_cube copy.png +0 -0
  60. package/src/scripts/components/assets/logo_data copy.png +0 -0
  61. package/src/scripts/components/assets/logo_users copy.png +0 -0
  62. package/src/scripts/components/assets/mri-scan.jpg +0 -0
  63. package/src/scripts/components/assets/nih copy.png +0 -0
  64. package/src/scripts/components/assets/nih-bi-brand.jpg +0 -0
  65. package/src/scripts/components/assets/nih-stanford.jpg +0 -0
  66. package/src/scripts/components/assets/nih.png +0 -0
  67. package/src/scripts/components/assets/nimh.png +0 -0
  68. package/src/scripts/components/assets/nsf copy.png +0 -0
  69. package/src/scripts/components/assets/on-dark-horz.svg +1 -0
  70. package/src/scripts/components/assets/on-dark.svg +1 -0
  71. package/src/scripts/components/assets/on-light-horz.svg +1 -0
  72. package/src/scripts/components/assets/on-light.svg +1 -0
  73. package/src/scripts/components/assets/orcid_24x24 copy.png +0 -0
  74. package/src/scripts/components/assets/orcid_24x24.png +0 -0
  75. package/src/scripts/components/assets/share_data_collaborate.png +0 -0
  76. package/src/scripts/components/assets/share_data_publish.png +0 -0
  77. package/src/scripts/components/assets/share_data_validate.png +0 -0
  78. package/src/scripts/components/assets/squishymedia copy.png +0 -0
  79. package/src/scripts/components/assets/stanford copy.png +0 -0
  80. package/src/scripts/components/assets/tab-get_data.png +0 -0
  81. package/src/scripts/components/assets/tab-share_data.png +0 -0
  82. package/src/scripts/components/assets/tab-use_data.png +0 -0
  83. package/src/scripts/components/assets/use_data_analyze.png +0 -0
  84. package/src/scripts/components/assets/use_data_snapshot.png +0 -0
  85. package/src/scripts/components/button/Button.tsx +113 -0
  86. package/src/scripts/components/button/__tests__/Button.spec.tsx +21 -0
  87. package/src/scripts/components/button/button.scss +140 -0
  88. package/src/scripts/components/count-toggle/CountToggle.tsx +65 -0
  89. package/src/scripts/components/count-toggle/__tests__/CountToggle.spec.tsx +31 -0
  90. package/src/scripts/components/count-toggle/count-toggle.scss +34 -0
  91. package/src/scripts/components/dropdown/Dropdown.tsx +38 -0
  92. package/src/scripts/components/dropdown/dropdown.scss +29 -0
  93. package/src/scripts/components/facets/FacetRadio.tsx +43 -0
  94. package/src/scripts/components/facets/FacetRange.tsx +35 -0
  95. package/src/scripts/components/facets/FacetSearch.tsx +66 -0
  96. package/src/scripts/components/facets/FacetSelect.tsx +87 -0
  97. package/src/scripts/components/facets/SingleSelect.tsx +39 -0
  98. package/src/scripts/components/facets/__tests__/FacetSelect.spec.tsx +14 -0
  99. package/src/scripts/components/facets/__tests__/SingleSelect.spec.tsx +58 -0
  100. package/src/scripts/components/facets/facet.scss +244 -0
  101. package/src/scripts/components/footer/Footer.tsx +52 -0
  102. package/src/scripts/components/footer/footer.scss +20 -0
  103. package/src/scripts/components/formatting/__tests__/modality-label.spec.tsx +34 -0
  104. package/src/scripts/components/formatting/modality-label.tsx +34 -0
  105. package/src/scripts/components/front-page/ActivityHeader.tsx +12 -0
  106. package/src/scripts/components/front-page/AffiliateBlock.tsx +22 -0
  107. package/src/scripts/components/front-page/Contributors.tsx +28 -0
  108. package/src/scripts/components/front-page/GetUpdates.tsx +99 -0
  109. package/src/scripts/components/front-page/Infographic.tsx +36 -0
  110. package/src/scripts/components/front-page/front-page.scss +295 -0
  111. package/src/scripts/components/header/Header.tsx +151 -0
  112. package/src/scripts/components/header/LandingExpandedHeader.tsx +110 -0
  113. package/src/scripts/components/header/header.scss +409 -0
  114. package/src/scripts/components/icon/Icon.tsx +55 -0
  115. package/src/scripts/components/icon/__tests__/Icon.spec.tsx +10 -0
  116. package/src/scripts/components/icon/icon.scss +8 -0
  117. package/src/scripts/components/input/Input.tsx +137 -0
  118. package/src/scripts/components/input/TermSearch.tsx +101 -0
  119. package/src/scripts/components/input/input.scss +147 -0
  120. package/src/scripts/components/input/term-search.scss +68 -0
  121. package/src/scripts/components/json-tree/ExpandableProperty.tsx +35 -0
  122. package/src/scripts/components/json-tree/RecursiveProperty.tsx +67 -0
  123. package/src/scripts/components/json-tree/json-tree.scss +19 -0
  124. package/src/scripts/components/loading/Loading.tsx +19 -0
  125. package/src/scripts/components/loading/__tests__/Loading.spec.tsx +12 -0
  126. package/src/scripts/components/loading/loading.scss +141 -0
  127. package/src/scripts/components/logo/Logo.tsx +44 -0
  128. package/src/scripts/components/logo/__tests__/Logo.spec.tsx +22 -0
  129. package/src/scripts/components/modal/Modal.tsx +51 -0
  130. package/src/scripts/components/modal/ModalExample.tsx +25 -0
  131. package/src/scripts/components/modal/UserLoginModal.tsx +74 -0
  132. package/src/scripts/components/modal/__tests__/UserLoginModal.spec.tsx +37 -0
  133. package/src/scripts/components/modal/modal.scss +60 -0
  134. package/src/scripts/components/modality-cube/ModalityCube.tsx +60 -0
  135. package/src/scripts/components/modality-cube/modality-cube.scss +303 -0
  136. package/src/scripts/components/page/Page.tsx +61 -0
  137. package/src/scripts/components/page/page.scss +408 -0
  138. package/src/scripts/components/progress-bar/ProgressBar.tsx +16 -0
  139. package/src/scripts/components/progress-bar/progress-bar.scss +34 -0
  140. package/src/scripts/components/radio/Radio.tsx +33 -0
  141. package/src/scripts/components/radio/RadioGroup.tsx +45 -0
  142. package/src/scripts/components/radio/__tests__/RadioGroup.spec.tsx +31 -0
  143. package/src/scripts/components/radio/radio.scss +335 -0
  144. package/src/scripts/components/range/TwoHandleRange.scss +108 -0
  145. package/src/scripts/components/range/TwoHandleRange.tsx +128 -0
  146. package/src/scripts/components/range/__tests__/TwoHandleRange.spec.tsx +34 -0
  147. package/src/scripts/components/read-more/ReadMore.tsx +50 -0
  148. package/src/scripts/components/read-more/__tests__/ReadMore.spec.tsx +14 -0
  149. package/src/scripts/components/read-more/read-more.scss +79 -0
  150. package/src/scripts/components/scss/_flex-grid.scss +216 -0
  151. package/src/scripts/components/scss/_helper-classes.scss +162 -0
  152. package/src/scripts/components/scss/_normalize.scss +614 -0
  153. package/src/scripts/components/scss/_variables.scss +245 -0
  154. package/src/scripts/components/scss/global.scss +124 -0
  155. package/src/scripts/components/scss/toasts.scss +33 -0
  156. package/src/scripts/components/scss/upload-modal.scss +479 -0
  157. package/src/scripts/components/search-page/CommunityHeader.tsx +27 -0
  158. package/src/scripts/components/search-page/FacetBlockContainerExample.tsx +6 -0
  159. package/src/scripts/components/search-page/FilterDateItem.tsx +44 -0
  160. package/src/scripts/components/search-page/FilterListItem.tsx +62 -0
  161. package/src/scripts/components/search-page/FiltersBlock.tsx +277 -0
  162. package/src/scripts/components/search-page/ModalityHeader.tsx +64 -0
  163. package/src/scripts/components/search-page/NeurobagelSearch.tsx +59 -0
  164. package/src/scripts/components/search-page/SearchPage.tsx +114 -0
  165. package/src/scripts/components/search-page/SearchResultItem.tsx +417 -0
  166. package/src/scripts/components/search-page/SearchResultsList.tsx +48 -0
  167. package/src/scripts/components/search-page/SearchSort.tsx +52 -0
  168. package/src/scripts/components/search-page/SearchSortContainerExample.tsx +9 -0
  169. package/src/scripts/components/search-page/TermListItem.tsx +41 -0
  170. package/src/scripts/components/search-page/__tests__/NuerobagelSearch.spec.tsx +17 -0
  171. package/src/scripts/components/search-page/filters-block.scss +99 -0
  172. package/src/scripts/components/search-page/neurobagel_logo.svg +75 -0
  173. package/src/scripts/components/search-page/search-page.scss +505 -0
  174. package/src/scripts/components/search-page/search-result.scss +117 -0
  175. package/src/scripts/components/search-page/search-sort.scss +56 -0
  176. package/src/scripts/components/select/SelectGroup.tsx +41 -0
  177. package/src/scripts/components/select/__tests__/SelectGroup.spec.tsx +43 -0
  178. package/src/scripts/components/select/select.scss +40 -0
  179. package/src/scripts/components/textarea/Textarea.tsx +68 -0
  180. package/src/scripts/components/textarea/__tests__/Textarea.spec.tsx +53 -0
  181. package/src/scripts/components/tooltip/Tooltip.tsx +30 -0
  182. package/src/scripts/components/tooltip/__tests__/Tooltip.spec.tsx +14 -0
  183. package/src/scripts/components/tooltip/tooltip.scss +159 -0
  184. package/src/scripts/components/user/UserMenu.tsx +72 -0
  185. package/src/scripts/components/user/user-menu.scss +88 -0
  186. package/src/scripts/components/warn-button/WarnButton.tsx +97 -0
  187. package/src/scripts/components/warn-button/warn-button.scss +39 -0
  188. package/src/scripts/datalad/dataset/dataset-query-context.js +2 -0
  189. package/src/scripts/dataset/comments/comment.jsx +1 -1
  190. package/src/scripts/dataset/components/AnalyzeDropdown.tsx +2 -2
  191. package/src/scripts/dataset/components/CloneDropdown.tsx +2 -2
  192. package/src/scripts/dataset/components/DatasetEventItem.tsx +105 -0
  193. package/src/scripts/dataset/components/DatasetGitAccess.tsx +2 -2
  194. package/src/scripts/dataset/components/DatasetToolButton.tsx +2 -2
  195. package/src/scripts/dataset/components/ModalitiesMetaDataBlock.tsx +2 -10
  196. package/src/scripts/dataset/components/ValidationBlock.tsx +37 -2
  197. package/src/scripts/dataset/components/VersionList.tsx +1 -1
  198. package/src/scripts/dataset/components/scss/dataset-events.module.scss +41 -0
  199. package/src/scripts/dataset/dataset-query.jsx +12 -11
  200. package/src/scripts/dataset/download/__tests__/__snapshots__/download-command-line.spec.jsx.snap +7 -1
  201. package/src/scripts/dataset/download/__tests__/download-command-line.spec.jsx +2 -2
  202. package/src/scripts/dataset/download/download-command-line.jsx +17 -13
  203. package/src/scripts/dataset/download/download-datalad.jsx +6 -3
  204. package/src/scripts/dataset/download/download-link.jsx +1 -1
  205. package/src/scripts/dataset/download/download-s3.jsx +0 -4
  206. package/src/scripts/dataset/files/file-display.jsx +1 -1
  207. package/src/scripts/dataset/files/file-tree-unloaded-directory.jsx +1 -1
  208. package/src/scripts/dataset/files/file-tree.tsx +1 -1
  209. package/src/scripts/dataset/files/file-view.jsx +1 -1
  210. package/src/scripts/dataset/files/file-viewer-type.jsx +5 -1
  211. package/src/scripts/dataset/files/file.tsx +2 -2
  212. package/src/scripts/dataset/files/files.tsx +3 -3
  213. package/src/scripts/dataset/files/viewers/file-viewer-json.jsx +1 -1
  214. package/src/scripts/dataset/files/viewers/file-viewer-markdown.tsx +13 -0
  215. package/src/scripts/dataset/fragments/cancel-button.tsx +1 -1
  216. package/src/scripts/dataset/fragments/dataset-citation.jsx +2 -2
  217. package/src/scripts/dataset/fragments/edit-button.tsx +1 -1
  218. package/src/scripts/dataset/fragments/edit-list.jsx +1 -1
  219. package/src/scripts/dataset/fragments/save-button.tsx +1 -1
  220. package/src/scripts/dataset/mutations/admin-exports.jsx +1 -1
  221. package/src/scripts/dataset/mutations/cache-clear.jsx +1 -1
  222. package/src/scripts/dataset/mutations/create-anonymous-reviewer.tsx +2 -2
  223. package/src/scripts/dataset/mutations/dataset-events.tsx +187 -0
  224. package/src/scripts/dataset/mutations/dataset-relations.tsx +1 -1
  225. package/src/scripts/dataset/mutations/delete-anonymous-reviewer.tsx +1 -1
  226. package/src/scripts/dataset/mutations/delete-comment.jsx +1 -1
  227. package/src/scripts/dataset/mutations/delete-file.jsx +1 -1
  228. package/src/scripts/dataset/mutations/deprecate-version.tsx +1 -1
  229. package/src/scripts/dataset/mutations/flag-annex-object.jsx +2 -2
  230. package/src/scripts/dataset/mutations/follow.tsx +1 -1
  231. package/src/scripts/dataset/mutations/import-dataset.tsx +1 -1
  232. package/src/scripts/dataset/mutations/publish.jsx +1 -1
  233. package/src/scripts/dataset/mutations/remove-annex-object.jsx +2 -2
  234. package/src/scripts/dataset/mutations/remove-permissions.tsx +1 -1
  235. package/src/scripts/dataset/mutations/revalidate.jsx +2 -2
  236. package/src/scripts/dataset/mutations/snapshot.tsx +1 -1
  237. package/src/scripts/dataset/mutations/star.tsx +1 -1
  238. package/src/scripts/dataset/mutations/submit-metadata.jsx +1 -1
  239. package/src/scripts/dataset/mutations/undo-deprecate-version.tsx +2 -2
  240. package/src/scripts/dataset/mutations/update-permissions.tsx +1 -1
  241. package/src/scripts/dataset/routes/admin-datalad.jsx +4 -0
  242. package/src/scripts/dataset/routes/dataset-default.tsx +1 -1
  243. package/src/scripts/dataset/routes/delete-page.tsx +7 -3
  244. package/src/scripts/dataset/routes/deprecate-snapshot-page.tsx +1 -1
  245. package/src/scripts/dataset/routes/manage-permissions.jsx +1 -1
  246. package/src/scripts/dataset/routes/snapshot-default.tsx +1 -1
  247. package/src/scripts/dataset/routes/snapshot.tsx +1 -1
  248. package/src/scripts/dataset/snapshot-container.tsx +14 -8
  249. package/src/scripts/pages/admin/flagged-files.jsx +1 -1
  250. package/src/scripts/pages/admin/user-tools.tsx +1 -1
  251. package/src/scripts/pages/admin/users.tsx +2 -2
  252. package/src/scripts/pages/api.jsx +2 -2
  253. package/src/scripts/pages/front-page/aggregate-queries/aggregate-counts-container.tsx +6 -7
  254. package/src/scripts/pages/front-page/front-page.tsx +7 -9
  255. package/src/scripts/pages/metadata/dataset-metadata.tsx +1 -1
  256. package/src/scripts/search/__tests__/search-container.spec.tsx +7 -7
  257. package/src/scripts/search/filters-block-container.tsx +66 -9
  258. package/src/scripts/search/initial-search-params.tsx +7 -7
  259. package/src/scripts/search/inputs/__tests__/sort-by-select.spec.tsx +1 -1
  260. package/src/scripts/search/inputs/admin-allDatasets-toggle.tsx +1 -1
  261. package/src/scripts/search/inputs/age-range-input.tsx +3 -2
  262. package/src/scripts/search/inputs/author-input.tsx +3 -2
  263. package/src/scripts/search/inputs/dataset-type-select.tsx +3 -2
  264. package/src/scripts/search/inputs/date-radios.tsx +3 -2
  265. package/src/scripts/search/inputs/diagnosis-select.tsx +3 -2
  266. package/src/scripts/search/inputs/initiative-select.tsx +12 -6
  267. package/src/scripts/search/inputs/keyword-input.tsx +2 -2
  268. package/src/scripts/search/inputs/modality-select.tsx +28 -26
  269. package/src/scripts/search/inputs/pet/bodyParts_input.tsx +4 -3
  270. package/src/scripts/search/inputs/pet/scannerManufacturersModelNames_input.tsx +4 -3
  271. package/src/scripts/search/inputs/pet/scannerManufacturers_input.tsx +4 -3
  272. package/src/scripts/search/inputs/pet/tracerNames_input.tsx +4 -3
  273. package/src/scripts/search/inputs/pet/tracerRadionuclides_input.tsx +4 -3
  274. package/src/scripts/search/inputs/section-select.tsx +3 -2
  275. package/src/scripts/search/inputs/sex-radios.tsx +3 -2
  276. package/src/scripts/search/inputs/show-datasets-radios.tsx +4 -3
  277. package/src/scripts/search/inputs/sort-by-select.tsx +1 -1
  278. package/src/scripts/search/inputs/species-select.tsx +3 -2
  279. package/src/scripts/search/inputs/study-domain-input.tsx +4 -3
  280. package/src/scripts/search/inputs/subject-count-range-input.tsx +3 -2
  281. package/src/scripts/search/inputs/task-input.tsx +4 -3
  282. package/src/scripts/search/search-container.tsx +14 -17
  283. package/src/scripts/search/search-params-ctx.tsx +28 -5
  284. package/src/scripts/search/search-routes.tsx +2 -4
  285. package/src/scripts/search/use-search-results.tsx +14 -13
  286. package/src/scripts/uploader/upload-issues.tsx +1 -1
  287. package/src/scripts/uploader/upload-progress.jsx +1 -1
  288. package/src/scripts/uploader/uploader-modal.jsx +1 -1
  289. package/src/scripts/users/components/close-button.tsx +1 -1
  290. package/src/scripts/users/components/edit-button.tsx +1 -1
  291. package/src/scripts/users/components/edit-list.tsx +1 -1
  292. package/src/scripts/users/components/edit-string.tsx +1 -1
  293. package/src/scripts/users/dataset-card.tsx +2 -2
  294. package/src/scripts/users/user-notification-accordion.tsx +1 -1
  295. package/src/scripts/utils/user-login-modal-ctx.tsx +1 -1
  296. package/src/scripts/validation/validation-issues.tsx +2 -1
  297. package/src/scripts/validation/validation-panel.tsx +2 -1
  298. package/src/scripts/validation/validation-results.tsx +4 -3
  299. package/src/scripts/validation-legacy/validation-panel.jsx +2 -1
  300. package/src/scripts/validation-legacy/validation-results.issues.jsx +2 -3
  301. package/src/scripts/validation-legacy/validation-results.tsx +3 -4
  302. package/tsconfig.json +1 -4
@@ -0,0 +1,92 @@
1
+ import React from "react"
2
+ import petScan from "./assets/modality-cubes/pet-scan.jpg"
3
+ import nih from "./assets/modality-cubes/nih_cube.jpg"
4
+ import eeg from "./assets/modality-cubes/eeg.jpg"
5
+ import ieeg from "./assets/modality-cubes/ieeg.jpg"
6
+ import mri from "./assets/modality-cubes/mri.jpg"
7
+ import meg from "./assets/modality-cubes/meg.jpg"
8
+ import nirs from "./assets/modality-cubes/nirs.jpg"
9
+ import nih_logo from "./assets/portal-content/nih-bi-brand.png"
10
+
11
+ export const cubeData = [
12
+ {
13
+ label: "MRI",
14
+ cubeImage: mri,
15
+ stats: (
16
+ <>
17
+ 200 Datasets
18
+ <br />
19
+ 200 Participants
20
+ </>
21
+ ),
22
+ },
23
+ {
24
+ label: "PET",
25
+ cubeImage: petScan,
26
+ stats: (
27
+ <>
28
+ 200 Datasets
29
+ <br />
30
+ 200 Participants
31
+ </>
32
+ ),
33
+ },
34
+ {
35
+ label: "MEG",
36
+ cubeImage: meg,
37
+ stats: (
38
+ <>
39
+ 200 Datasets
40
+ <br />
41
+ 200 Participants
42
+ </>
43
+ ),
44
+ },
45
+ {
46
+ label: "EEG",
47
+ cubeImage: eeg,
48
+ stats: (
49
+ <>
50
+ 200 Datasets
51
+ <br />
52
+ 200 Participants
53
+ </>
54
+ ),
55
+ },
56
+ {
57
+ label: "iEEG",
58
+ cubeImage: ieeg,
59
+ stats: (
60
+ <>
61
+ 200 Datasets
62
+ <br />
63
+ 200 Participants
64
+ </>
65
+ ),
66
+ },
67
+ {
68
+ label: "NIRS",
69
+ cubeImage: nirs,
70
+ stats: (
71
+ <>
72
+ 200 Datasets
73
+ <br />
74
+ 200 Participants
75
+ </>
76
+ ),
77
+ },
78
+ {
79
+ label: "NIH",
80
+ altText: "NIH BRAIN Initiative",
81
+ portal: true,
82
+ cubeImage: nih,
83
+ cubeFaceImage: nih_logo,
84
+ stats: (
85
+ <>
86
+ 200 Datasets
87
+ <br />
88
+ 200 Participants
89
+ </>
90
+ ),
91
+ },
92
+ ]
@@ -0,0 +1,149 @@
1
+ import React from "react"
2
+
3
+ import pet from "./assets/modality-cubes/pet-scan.jpg"
4
+ import eeg from "./assets/modality-cubes/eeg.jpg"
5
+ import ieeg from "./assets/modality-cubes/ieeg.jpg"
6
+ import mri from "./assets/modality-cubes/mri.jpg"
7
+ import meg from "./assets/modality-cubes/meg.jpg"
8
+ import nirs from "./assets/modality-cubes/nirs.jpg"
9
+
10
+ export const portalContent = {
11
+ mri: {
12
+ modality: "mri", // corresponds to values in `modality_available` in (packages/openneuro-app/src/scripts/refactor_2021/search/initial-search-params.tsx)
13
+ className: "search-page-mri",
14
+ portalName: "OpenNeuro MRI",
15
+ portalPrimary: (
16
+ <>
17
+ The OpenNeuro platform was developed by the{" "}
18
+ <a href="https://reproducibility.stanford.edu/">
19
+ Stanford Center for Reproducible Neuroscience
20
+ </a>{" "}
21
+ as a tool to encourage and enhance data sharing and analysis of raw MRI
22
+ data, using <a href="https://bids.neuroimaging.io">BIDS</a>{" "}
23
+ to organize and standardize these data.
24
+ </>
25
+ ),
26
+ publicDatasetStat: 100,
27
+ participantsStat: 1100,
28
+ hexBackgroundImage: mri,
29
+ swoopBackgroundColorLight: "rgba(109,83,156,1)",
30
+ swoopBackgroundColorDark: "rgba(45,34,64,1)",
31
+ communityHeader: null,
32
+ communityPrimary: null,
33
+ communitySecondary: null,
34
+ },
35
+ eeg: {
36
+ modality: "eeg", // corresponds to values in `modality_available` in (packages/openneuro-app/src/scripts/refactor_2021/search/initial-search-params.tsx)
37
+ className: "search-page-eeg",
38
+ portalName: "OpenNeuro EEG",
39
+ portalPrimary: (
40
+ <>
41
+ OpenNeuro added support for EEG datasets in 2019 when{" "}
42
+ <a href="https://www.nature.com/articles/s41597-019-0104-8">
43
+ EEG was incorporated
44
+ </a>{" "}
45
+ into the <a href="https://bids.neuroimaging.io">BIDS</a> standard.
46
+ </>
47
+ ),
48
+ publicDatasetStat: 100,
49
+ participantsStat: 1100,
50
+ hexBackgroundImage: eeg,
51
+ swoopBackgroundColorLight: "rgba(109,83,156,1)",
52
+ swoopBackgroundColorDark: "rgba(45,34,64,1)",
53
+ communityHeader: null,
54
+ communityPrimary: null,
55
+ communitySecondary: null,
56
+ },
57
+ ieeg: {
58
+ modality: "ieeg", // corresponds to values in `modality_available` in (packages/openneuro-app/src/scripts/refactor_2021/search/initial-search-params.tsx)
59
+ className: "search-page-ieeg",
60
+ portalName: "OpenNeuro iEEG",
61
+ portalPrimary: (
62
+ <>
63
+ OpenNeuro added support for iEEG datasets in 2019 when{" "}
64
+ <a href="https://www.nature.com/articles/s41597-019-0105-7">
65
+ iEEG was incorporated
66
+ </a>{" "}
67
+ into the <a href="https://bids.neuroimaging.io">BIDS</a> standard.
68
+ </>
69
+ ),
70
+ publicDatasetStat: 100,
71
+ participantsStat: 1100,
72
+ hexBackgroundImage: ieeg,
73
+ swoopBackgroundColorLight: "rgba(109,83,156,1)",
74
+ swoopBackgroundColorDark: "rgba(45,34,64,1)",
75
+ communityHeader: null,
76
+ communityPrimary: null,
77
+ communitySecondary: null,
78
+ },
79
+ meg: {
80
+ modality: "meg", // corresponds to values in `modality_available` in (packages/openneuro-app/src/scripts/refactor_2021/search/initial-search-params.tsx)
81
+ className: "search-page-meg",
82
+ portalName: "OpenNeuro MEG",
83
+ portalPrimary: (
84
+ <>
85
+ OpenNeuro added support for MEG datasets in 2018 when{" "}
86
+ <a href="https://www.nature.com/articles/sdata2018110">
87
+ MEG was incorporated
88
+ </a>{" "}
89
+ into the <a href="https://bids.neuroimaging.io">BIDS</a> standard.
90
+ </>
91
+ ),
92
+ publicDatasetStat: 100,
93
+ participantsStat: 1100,
94
+ hexBackgroundImage: meg,
95
+ swoopBackgroundColorLight: "rgba(109,83,156,1)",
96
+ swoopBackgroundColorDark: "rgba(45,34,64,1)",
97
+ communityHeader: null,
98
+ communityPrimary: null,
99
+ communitySecondary: null,
100
+ },
101
+ pet: {
102
+ modality: "pet", // corresponds to values in `modality_available` in (packages/openneuro-app/src/scripts/refactor_2021/search/initial-search-params.tsx)
103
+ className: "search-page-pet",
104
+ portalName: "OpenNeuro PET",
105
+ portalPrimary: (
106
+ <>
107
+ The PET portal of OpenNeuro is supported by a collaboration between
108
+ Stanford University, NIH, MGH and the Neurobiology Research Unit (NRU)
109
+ at Copenhagen University Hospital through the{" "}
110
+ <a href="https://openneuropet.github.io/">OpenNeuroPET project</a>. The
111
+ project is funded through the BRAIN Initiative and the Novo Nordisk
112
+ Foundation. Besides developing data sharing, the OpenNeuroPET project
113
+ also aims at developing user friendly tools for the BIDS based data
114
+ curation of PET data as well as tools for automated QC and template
115
+ building.
116
+ </>
117
+ ),
118
+ publicDatasetStat: 100,
119
+ participantsStat: 1100,
120
+ hexBackgroundImage: pet,
121
+ swoopBackgroundColorLight: "rgba(109,83,156,1)",
122
+ swoopBackgroundColorDark: "rgba(45,34,64,1)",
123
+ communityHeader: null,
124
+ communityPrimary: null,
125
+ communitySecondary: null,
126
+ },
127
+ nirs: {
128
+ modality: "nirs", // corresponds to values in `modality_available` in (packages/openneuro-app/src/scripts/refactor_2021/search/initial-search-params.tsx)
129
+ className: "search-page-nirs",
130
+ portalName: "OpenNeuro NIRS",
131
+ portalPrimary: (
132
+ <>
133
+ OpenNeuro added support for NIRS datasets in 2022 when{" "}
134
+ <a href="https://www.nature.com/articles/s41597-024-04136-9">
135
+ NIRS was incorporated
136
+ </a>{" "}
137
+ into the <a href="https://bids.neuroimaging.io">BIDS</a> standard.
138
+ </>
139
+ ),
140
+ publicDatasetStat: 100,
141
+ participantsStat: 1100,
142
+ hexBackgroundImage: nirs,
143
+ swoopBackgroundColorLight: " rgb(68, 114, 143)",
144
+ swoopBackgroundColorDark: " rgb(36, 80, 108)",
145
+ communityHeader: null,
146
+ communityPrimary: null,
147
+ communitySecondary: null,
148
+ },
149
+ }
@@ -0,0 +1,30 @@
1
+ import React from "react"
2
+ import brain from "./assets/modality-cubes/brain-initiative.jpg"
3
+ import nihbibrand from "./assets/portal-content/nih-bi-brand.png"
4
+
5
+ export const portalGrantContent = {
6
+ nih: {
7
+ portal: true,
8
+ grant: "nih", // corresponds to values in `modality_available` in (packages/openneuro-app/src/scripts/refactor_2021/search/initial-search-params.tsx)
9
+ className: "search-page-nih",
10
+ portalName: "NIH BRAIN Initiative",
11
+ portalPrimary: (
12
+ <>
13
+ <a href="https://braininitiative.nih.gov/">The BRAIN Initiative®</a>, is
14
+ public-private research initiative with a common goal of accelerating
15
+ the development of innovative neurotechnologies. In 2019, OpenNeuro was
16
+ designated a BRAIN Initiative data archive. The datasets below were
17
+ collected under BRAIN Initiative-sponsored grants.
18
+ </>
19
+ ),
20
+ publicDatasetStat: 100,
21
+ participantsStat: 1100,
22
+ hexBackgroundImage: brain,
23
+ pageBrand: nihbibrand,
24
+ swoopBackgroundColorLight: "rgba(33, 85, 138, 1)",
25
+ swoopBackgroundColorDark: "rgba(155, 211, 221, 1)",
26
+ communityHeader: null,
27
+ communityPrimary: null,
28
+ communitySecondary: null,
29
+ },
30
+ }
@@ -0,0 +1,18 @@
1
+ export const sortBy = [
2
+ {
3
+ label: "Relevance",
4
+ value: "relevance",
5
+ },
6
+ {
7
+ label: "Newest",
8
+ value: "newest",
9
+ },
10
+ {
11
+ label: "Oldest",
12
+ value: "oldest",
13
+ },
14
+ {
15
+ label: "Activity",
16
+ value: "activity",
17
+ },
18
+ ]
@@ -2,7 +2,7 @@
2
2
 
3
3
  import React from "react"
4
4
  import PropTypes from "prop-types"
5
- import { Tooltip } from "@openneuro/components/tooltip"
5
+ import { Tooltip } from "../../components/tooltip/Tooltip"
6
6
  import { toast } from "react-toastify"
7
7
  import ToastContent from "../partials/toast-content.jsx"
8
8
 
@@ -0,0 +1,68 @@
1
+ import React from "react"
2
+
3
+ import { Icon } from "../icon/Icon"
4
+ import "./accordion.scss"
5
+
6
+ export type AccordionTabStyle = "plain" | "file-tree" | "bids-wrapper"
7
+
8
+ export interface AccordionTabProps {
9
+ children: React.ReactNode
10
+ id?: string
11
+ className?: string
12
+ label: string | number | React.ReactNode
13
+ startOpen?: boolean
14
+ dropdown?: boolean
15
+ accordionStyle: AccordionTabStyle
16
+ onClick?: (expanded?: boolean) => void
17
+ }
18
+
19
+ /**
20
+ * Primary UI component for user interaction
21
+ */
22
+ export const AccordionTab: React.FC<AccordionTabProps> = ({
23
+ children,
24
+ id,
25
+ label,
26
+ className,
27
+ accordionStyle,
28
+ startOpen,
29
+ dropdown,
30
+ onClick,
31
+ }) => {
32
+ const [isOpen, setOpen] = React.useState(startOpen)
33
+ const fileTreeIcon = accordionStyle == "file-tree"
34
+ ? (
35
+ <Icon
36
+ className="file-icon"
37
+ icon={isOpen ? "fas fa-folder-open" : "fas fa-folder"}
38
+ label={label}
39
+ />
40
+ )
41
+ : null
42
+
43
+ return (
44
+ <article
45
+ className={`${accordionStyle || ""}` + " accordion " +
46
+ `${className || ""}`}
47
+ id={id}
48
+ >
49
+ <div
50
+ className={`accordion-title ${isOpen ? "open" : ""}`}
51
+ role="switch"
52
+ onClick={() => {
53
+ onClick?.(!isOpen)
54
+ setOpen(!isOpen)
55
+ }}
56
+ >
57
+ {fileTreeIcon || label}
58
+ </div>
59
+ <div
60
+ className={`accordion-item ${!isOpen ? " collapsed" : ""} ${
61
+ dropdown ? " dropdown-style" : ""
62
+ }`}
63
+ >
64
+ {isOpen && <div className="accordion-content">{children}</div>}
65
+ </div>
66
+ </article>
67
+ )
68
+ }
@@ -0,0 +1,22 @@
1
+ import React from "react"
2
+ import "./accordion.scss"
3
+
4
+ export interface AccordionWrapProps {
5
+ children: React.ReactNode
6
+ className?: string
7
+ }
8
+
9
+ /**
10
+ * Primary UI component for user interaction
11
+ */
12
+ export const AccordionWrap: React.FC<AccordionWrapProps> = ({
13
+ children,
14
+ className,
15
+ ...props
16
+ }) => {
17
+ return (
18
+ <div className={`${className || ""}` + " on-accordion-wrapper"} {...props}>
19
+ {children}
20
+ </div>
21
+ )
22
+ }
@@ -0,0 +1,35 @@
1
+ import React from "react"
2
+ import { render, screen } from "@testing-library/react"
3
+ import { AccordionTab } from "../AccordionTab"
4
+
5
+ describe("AccordionTab component", () => {
6
+ it("is open by default with startOpen prop", async () => {
7
+ render(
8
+ <AccordionTab
9
+ id="test"
10
+ className=""
11
+ label="test"
12
+ startOpen
13
+ accordionStyle="plain"
14
+ >
15
+ Child Element Text
16
+ </AccordionTab>,
17
+ )
18
+ expect(await screen.getByText(/Child Element Text/)).toBeVisible()
19
+ })
20
+ it('displays an icon when accordionStyle = "fileTree"', async () => {
21
+ render(
22
+ <AccordionTab
23
+ id="test"
24
+ className=""
25
+ label="test"
26
+ startOpen
27
+ accordionStyle="file-tree"
28
+ >
29
+ Child Element Text
30
+ </AccordionTab>,
31
+ )
32
+ expect(await screen.getByText(/Child Element Text/)).toBeInTheDocument()
33
+ expect(await screen.getByRole("img")).toBeInTheDocument()
34
+ })
35
+ })
@@ -0,0 +1,68 @@
1
+ @import '../scss/variables';
2
+ /* Accordion styles */
3
+
4
+ .on-accordion-wrapper {
5
+ background-color: #fff;
6
+ position: relative;
7
+ .accordion {
8
+ box-sizing: border-box;
9
+ }
10
+ .accordion-item {
11
+ overflow: hidden;
12
+ transition: max-height 0.3s cubic-bezier(1, 0, 1, 0);
13
+ height: auto;
14
+ }
15
+
16
+ .accordion-item.collapsed {
17
+ max-height: 0;
18
+ transition: max-height 0.35s cubic-bezier(0, 1, 0, 1);
19
+ }
20
+ .accordion-item.dropdown-style {
21
+ position: absolute;
22
+ background-color: #fff;
23
+ left: 0;
24
+ right: 0;
25
+ .accordion-content {
26
+ padding: 10px;
27
+ }
28
+ }
29
+
30
+ .accordion-title {
31
+ color: $charcoal;
32
+ cursor: pointer;
33
+ display: flex;
34
+ justify-content: flex-start;
35
+ align-items: center;
36
+
37
+ &::after {
38
+ margin-left: 10px;
39
+ font-family: FontAwesome;
40
+ content: '\f078';
41
+ }
42
+
43
+ &:hover,
44
+ &.open {
45
+ color: var(--current-theme-primary-hover);
46
+ color: black;
47
+ }
48
+
49
+ &.open {
50
+ &::after {
51
+ content: '\f077';
52
+ border-top: 0;
53
+ }
54
+ }
55
+
56
+ .file-icon {
57
+ margin-right: 10px;
58
+ }
59
+ }
60
+
61
+ .accordion-content {
62
+ padding: 0;
63
+ }
64
+ }
65
+
66
+ .file-tree .accordion-content {
67
+ margin-left: 10px;
68
+ }
@@ -0,0 +1,121 @@
1
+ import React from "react"
2
+ import formatDistanceToNow from "date-fns/formatDistanceToNow"
3
+ import parseISO from "date-fns/parseISO"
4
+ import { Link } from "react-router-dom"
5
+ import Carousel from "react-multi-carousel/lib/Carousel"
6
+ import type { ArrowProps, ResponsiveType } from "react-multi-carousel/lib/types"
7
+ import "react-multi-carousel/lib/styles.css"
8
+ import "./slider.scss"
9
+
10
+ export interface ActivitySliderProps {
11
+ className?: string
12
+ showDots?: boolean
13
+ infinite?: boolean
14
+ keyBoardControl?: boolean
15
+ containerClass?: string
16
+ itemClass?: string
17
+ slideHeader?: React.ReactNode
18
+ responsive: ResponsiveType
19
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
20
+ data: any[]
21
+ }
22
+
23
+ const LeftArrow = ({ onClick }: ArrowProps) => (
24
+ <i
25
+ className="fas fa-chevron-left"
26
+ onClick={() => onClick()}
27
+ />
28
+ )
29
+
30
+ const RightArrow = ({ onClick }: ArrowProps) => (
31
+ <i
32
+ className="fas fa-chevron-right"
33
+ onClick={() => onClick()}
34
+ />
35
+ )
36
+
37
+ export const ActivitySlider = ({
38
+ className,
39
+ data,
40
+ showDots,
41
+ slideHeader,
42
+ responsive,
43
+ infinite,
44
+ keyBoardControl,
45
+ containerClass,
46
+ itemClass,
47
+ }: ActivitySliderProps) => {
48
+ return (
49
+ <div className={"activity-slider" + " " + className}>
50
+ <h3>{slideHeader}</h3>
51
+ {/* @ts-expect-error type issues with react-multi-carousel package */}
52
+ <Carousel
53
+ infinite={infinite}
54
+ keyBoardControl={keyBoardControl}
55
+ containerClass={containerClass}
56
+ itemClass={itemClass}
57
+ showDots={showDots}
58
+ responsive={responsive}
59
+ customLeftArrow={<LeftArrow />}
60
+ customRightArrow={<RightArrow />}
61
+ >
62
+ {data.map(({ node }) => (
63
+ <div className="activity-slider-node" key={node.id}>
64
+ <div className="ds-modality">
65
+ <div className="hexagon-wrapper">
66
+ {node.latestSnapshot.summary?.primaryModality
67
+ ? (
68
+ <>
69
+ <div
70
+ className={"hexagon " +
71
+ node.latestSnapshot.summary?.primaryModality
72
+ .toLowerCase()}
73
+ >
74
+ </div>
75
+ <div className="label">
76
+ {node.latestSnapshot.summary?.primaryModality}
77
+ </div>
78
+ </>
79
+ )
80
+ : (
81
+ <>
82
+ <div className="hexagon no-modality"></div>
83
+ <div className="label">N/A</div>
84
+ </>
85
+ )}
86
+ </div>
87
+ </div>
88
+ <div className="ds-name">
89
+ <h4>
90
+ <Link
91
+ to={"datasets/" +
92
+ node.id +
93
+ "/versions/" +
94
+ node.latestSnapshot.tag}
95
+ >
96
+ {node.latestSnapshot.description.Name}
97
+ </Link>
98
+ </h4>
99
+ </div>
100
+
101
+ {node.publishDate
102
+ ? (
103
+ <div className="ds-pub-date">
104
+ {formatDistanceToNow(parseISO(node.publishDate))} ago
105
+ </div>
106
+ )
107
+ : null}
108
+
109
+ {node.analytics
110
+ ? (
111
+ <div className="ds-pub-views">
112
+ {node.analytics.views.toLocaleString()} views
113
+ </div>
114
+ )
115
+ : null}
116
+ </div>
117
+ ))}
118
+ </Carousel>
119
+ </div>
120
+ )
121
+ }