@openneuro/app 4.36.2 → 4.37.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.
- package/package.json +5 -3
- package/src/scripts/components/accordion/accordion.scss +1 -1
- package/src/scripts/components/activity-slider/ActivitySlider.tsx +4 -22
- package/src/scripts/components/activity-slider/slider.scss +1 -82
- package/src/scripts/components/button/button.scss +1 -1
- package/src/scripts/components/count-toggle/count-toggle.scss +1 -1
- package/src/scripts/components/dropdown/dropdown.scss +1 -1
- package/src/scripts/components/facets/facet.scss +5 -4
- package/src/scripts/components/footer/footer.scss +1 -1
- package/src/scripts/components/front-page/front-page.scss +1 -1
- package/src/scripts/components/header/header.scss +1 -1
- package/src/scripts/components/input/input.scss +1 -1
- package/src/scripts/components/input/term-search.scss +1 -1
- package/src/scripts/components/loading/loading.scss +1 -1
- package/src/scripts/components/modal/modal.scss +1 -1
- package/src/scripts/components/modality-cube/ModalityHexagon.tsx +29 -0
- package/src/scripts/components/modality-cube/modality-cube.scss +1 -1
- package/src/scripts/components/modality-cube/modality-hexagon.scss +93 -0
- package/src/scripts/components/page/page.scss +1 -1
- package/src/scripts/components/progress-bar/progress-bar.scss +1 -1
- package/src/scripts/components/radio/radio.scss +2 -2
- package/src/scripts/components/range/TwoHandleRange.scss +3 -3
- package/src/scripts/components/read-more/read-more.scss +1 -1
- package/src/scripts/components/scss/upload-modal.scss +1 -1
- package/src/scripts/components/tooltip/tooltip.scss +1 -1
- package/src/scripts/dataset/__tests__/__snapshots__/snapshot-container.spec.tsx.snap +132 -128
- package/src/scripts/dataset/__tests__/draft-container.spec.tsx +136 -0
- package/src/scripts/dataset/common/follow-toggles.tsx +1 -1
- package/src/scripts/dataset/components/DatasetHeader.tsx +13 -16
- package/src/scripts/dataset/components/DatasetToolButton.tsx +6 -7
- package/src/scripts/dataset/components/DatasetTools.tsx +6 -2
- package/src/scripts/dataset/draft-container.tsx +30 -24
- package/src/scripts/dataset/files/{file-display.jsx → file-display.tsx} +32 -19
- package/src/scripts/dataset/routes/tab-routes-draft.tsx +6 -1
- package/src/scripts/dataset/routes/tab-routes-snapshot.tsx +5 -1
- package/src/scripts/dataset/snapshot-container.tsx +37 -43
- package/src/scripts/scss/dataset/dataset-page.scss +44 -120
- package/src/scripts/scss/variables.scss +65 -13
- package/src/scripts/{components/search-page → search}/__tests__/NuerobagelSearch.spec.tsx +1 -1
- package/src/scripts/search/components/DatasetsRadioTabs.tsx +103 -0
- package/src/scripts/{components/search-page → search/components}/FilterListItem.tsx +1 -1
- package/src/scripts/{components/search-page → search/components}/FiltersBlock.tsx +5 -8
- package/src/scripts/search/components/MetaListItemList.tsx +31 -0
- package/src/scripts/{components/search-page → search/components}/SearchPage.tsx +15 -8
- package/src/scripts/search/components/SearchResultDetails.tsx +167 -0
- package/src/scripts/{components/search-page → search/components}/SearchResultItem.tsx +57 -173
- package/src/scripts/search/components/SearchResultsList.tsx +45 -0
- package/src/scripts/{components/search-page → search/components}/SearchSort.tsx +2 -2
- package/src/scripts/search/filters-block-container.tsx +1 -1
- package/src/scripts/search/inputs/index.ts +0 -4
- package/src/scripts/search/inputs/sliding-radio-group.tsx +127 -0
- package/src/scripts/search/inputs/sort-by-select.tsx +1 -1
- package/src/scripts/{components/search-page → search/scss}/filters-block.scss +1 -1
- package/src/scripts/{components/search-page → search/scss}/search-page.scss +123 -92
- package/src/scripts/search/scss/search-result-details.scss +70 -0
- package/src/scripts/{components/search-page → search/scss}/search-result.scss +29 -56
- package/src/scripts/{components/search-page → search/scss}/search-sort.scss +1 -1
- package/src/scripts/search/scss/sliding-radio-group.scss +115 -0
- package/src/scripts/search/search-container.tsx +90 -24
- package/src/scripts/search/use-search-results.tsx +3 -0
- package/src/scripts/users/github-auth-button.tsx +1 -1
- package/src/scripts/components/scss/_variables.scss +0 -245
- package/src/scripts/components/search-page/SearchResultsList.tsx +0 -29
- package/src/scripts/dataset/files/index.tsx +0 -6
- package/src/scripts/search/inputs/admin-allDatasets-toggle.tsx +0 -47
- package/src/scripts/search/inputs/show-datasets-radios.tsx +0 -74
- /package/src/scripts/{components/search-page → search/components}/CommunityHeader.tsx +0 -0
- /package/src/scripts/{components/search-page → search/components}/FacetBlockContainerExample.tsx +0 -0
- /package/src/scripts/{components/search-page → search/components}/FilterDateItem.tsx +0 -0
- /package/src/scripts/{components/search-page → search/components}/ModalityHeader.tsx +0 -0
- /package/src/scripts/{components/search-page → search/components}/NeurobagelSearch.tsx +0 -0
- /package/src/scripts/{components/search-page → search/components}/SearchSortContainerExample.tsx +0 -0
- /package/src/scripts/{components/search-page → search/components}/TermListItem.tsx +0 -0
- /package/src/scripts/{components/search-page → search/components}/neurobagel_logo.svg +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openneuro/app",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.37.0-alpha.0",
|
|
4
4
|
"description": "React JS web frontend for the OpenNeuro platform.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "public/client.js",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@apollo/client": "3.13.8",
|
|
18
18
|
"@artsy/fresnel": "^1.3.1",
|
|
19
|
-
"@bids/validator": "npm:@jsr/bids__validator@^2.0.
|
|
19
|
+
"@bids/validator": "npm:@jsr/bids__validator@^2.0.7",
|
|
20
20
|
"@emotion/react": "11.11.1",
|
|
21
21
|
"@emotion/styled": "11.11.0",
|
|
22
22
|
"@niivue/niivue": "0.57.0",
|
|
@@ -51,8 +51,10 @@
|
|
|
51
51
|
"universal-cookie": "^4.0.4"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
+
"@testing-library/dom": "^10.4.0",
|
|
54
55
|
"@testing-library/jest-dom": "6.4.2",
|
|
55
56
|
"@testing-library/react": "^14.2.1",
|
|
57
|
+
"@testing-library/user-event": "^14.6.1",
|
|
56
58
|
"@types/dompurify": "^3",
|
|
57
59
|
"@types/jsdom": "^16",
|
|
58
60
|
"@types/node": "20.12.7",
|
|
@@ -75,5 +77,5 @@
|
|
|
75
77
|
"publishConfig": {
|
|
76
78
|
"access": "public"
|
|
77
79
|
},
|
|
78
|
-
"gitHead": "
|
|
80
|
+
"gitHead": "01cd2b234a23c76a234dfb2c2839857041da777b"
|
|
79
81
|
}
|
|
@@ -6,6 +6,7 @@ import Carousel from "react-multi-carousel/lib/Carousel"
|
|
|
6
6
|
import type { ArrowProps, ResponsiveType } from "react-multi-carousel/lib/types"
|
|
7
7
|
import "react-multi-carousel/lib/styles.css"
|
|
8
8
|
import "./slider.scss"
|
|
9
|
+
import { ModalityHexagon } from "../../components/modality-cube/ModalityHexagon"
|
|
9
10
|
|
|
10
11
|
export interface ActivitySliderProps {
|
|
11
12
|
className?: string
|
|
@@ -62,28 +63,9 @@ export const ActivitySlider = ({
|
|
|
62
63
|
{data.map(({ node }) => (
|
|
63
64
|
<div className="activity-slider-node" key={node.id}>
|
|
64
65
|
<div className="ds-modality">
|
|
65
|
-
<
|
|
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>
|
|
66
|
+
<ModalityHexagon
|
|
67
|
+
primaryModality={node.latestSnapshot.summary?.primaryModality}
|
|
68
|
+
/>
|
|
87
69
|
</div>
|
|
88
70
|
<div className="ds-name">
|
|
89
71
|
<h4>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@import '
|
|
1
|
+
@import '../../scss/variables';
|
|
2
2
|
|
|
3
3
|
.activity-slider {
|
|
4
4
|
h3 {
|
|
@@ -32,87 +32,6 @@
|
|
|
32
32
|
margin: 10px 0 0;
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
.activity-slider-node {
|
|
36
|
-
.hexagon-wrapper {
|
|
37
|
-
text-align: center;
|
|
38
|
-
margin: 20px auto 0;
|
|
39
|
-
position: relative;
|
|
40
|
-
display: inline-block;
|
|
41
|
-
width: 45px;
|
|
42
|
-
height: 45px;
|
|
43
|
-
div.label {
|
|
44
|
-
position: absolute;
|
|
45
|
-
top: 0;
|
|
46
|
-
text-align: center;
|
|
47
|
-
width: 100%;
|
|
48
|
-
left: 0;
|
|
49
|
-
right: 0;
|
|
50
|
-
bottom: 0;
|
|
51
|
-
display: flex;
|
|
52
|
-
justify-content: center;
|
|
53
|
-
align-items: center;
|
|
54
|
-
color: #fff;
|
|
55
|
-
font-weight: 600;
|
|
56
|
-
font-size: 13px;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.hexagon {
|
|
61
|
-
height: 100%;
|
|
62
|
-
width: calc(100% * 0.57735);
|
|
63
|
-
display: inline-block;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.hexagon:before {
|
|
67
|
-
position: absolute;
|
|
68
|
-
top: 0;
|
|
69
|
-
right: calc((100% / 2) - ((100% * 0.57735) / 2));
|
|
70
|
-
background-color: inherit;
|
|
71
|
-
height: inherit;
|
|
72
|
-
width: inherit;
|
|
73
|
-
content: '';
|
|
74
|
-
transform: rotateZ(60deg);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
.hexagon:after {
|
|
78
|
-
position: absolute;
|
|
79
|
-
top: 0;
|
|
80
|
-
right: calc((100% / 2) - ((100% * 0.57735) / 2));
|
|
81
|
-
background-color: inherit;
|
|
82
|
-
height: inherit;
|
|
83
|
-
width: inherit;
|
|
84
|
-
content: '';
|
|
85
|
-
transform: rotateZ(-60deg);
|
|
86
|
-
}
|
|
87
|
-
.hexagon {
|
|
88
|
-
transition: background-color 0.3s;
|
|
89
|
-
background-color: $on-dark-aqua;
|
|
90
|
-
|
|
91
|
-
&.mri {
|
|
92
|
-
background-color: $mri-theme;
|
|
93
|
-
}
|
|
94
|
-
&.eeg {
|
|
95
|
-
background-color: $eeg-theme;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
&.pet {
|
|
99
|
-
background-color: $pet-theme;
|
|
100
|
-
}
|
|
101
|
-
&.ieeg {
|
|
102
|
-
background-color: $ieeg-theme;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
&.meg {
|
|
106
|
-
background-color: $meg-theme;
|
|
107
|
-
}
|
|
108
|
-
&.eeg {
|
|
109
|
-
background-color: $on-light-green;
|
|
110
|
-
}
|
|
111
|
-
&.nirs{
|
|
112
|
-
background-color: $nirs-theme;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
35
|
}
|
|
117
36
|
.react-multi-carousel-dot--active button {
|
|
118
37
|
background-color: var(--current-theme-primary);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@import '
|
|
1
|
+
@import '../../scss/variables';
|
|
2
2
|
|
|
3
3
|
.facet-accordion.on-accordion-wrapper {
|
|
4
4
|
padding: 0 15px;
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
.level-1 > li {
|
|
46
46
|
border-top: 1px solid #dfdfdf;
|
|
47
47
|
> span:hover {
|
|
48
|
-
background-color: var(--current-theme-primary-
|
|
48
|
+
background-color: var(--current-theme-primary-ultralight);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
> .label {
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
display: flex;
|
|
61
61
|
justify-content: flex-start;
|
|
62
62
|
&:hover {
|
|
63
|
-
background-color: var(--current-theme-primary-
|
|
63
|
+
background-color: var(--current-theme-primary-ultralight);
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
.label {
|
|
@@ -165,7 +165,8 @@
|
|
|
165
165
|
.search-nav .facet-open.modality-facet {
|
|
166
166
|
margin: 20px 0;
|
|
167
167
|
border: 0;
|
|
168
|
-
background:
|
|
168
|
+
background: var(--current-theme-primary-ultralight);
|
|
169
|
+
border: 1px solid var(--current-theme-primary-light);
|
|
169
170
|
border-radius: $border-radius-default;
|
|
170
171
|
padding: 10px;
|
|
171
172
|
|
|
@@ -18,7 +18,7 @@ $spinner-hexagon-bg-color: var(--current-theme-primary);
|
|
|
18
18
|
width: $spinner-width;
|
|
19
19
|
height: $spinner-height;
|
|
20
20
|
border-radius: 0;
|
|
21
|
-
background: var(--current-theme-primary-
|
|
21
|
+
background: var(--current-theme-primary-ultralight);
|
|
22
22
|
opacity: 1;
|
|
23
23
|
top: $spinner-base-value;
|
|
24
24
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from "react"
|
|
2
|
+
import type { FC } from "react"
|
|
3
|
+
import { modalityShortMapping } from "../../components/formatting/modality-label"
|
|
4
|
+
import "./modality-hexagon.scss"
|
|
5
|
+
interface ModalityHexagonProps {
|
|
6
|
+
primaryModality: string | null | undefined
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
//ModalityHexagon component displays a colored hexagon and label
|
|
10
|
+
// based on the provided primaryModality.
|
|
11
|
+
|
|
12
|
+
export const ModalityHexagon: FC<ModalityHexagonProps> = ({
|
|
13
|
+
primaryModality,
|
|
14
|
+
}) => {
|
|
15
|
+
const hexagonClass = primaryModality
|
|
16
|
+
? primaryModality.toLowerCase()
|
|
17
|
+
: "no-modality"
|
|
18
|
+
|
|
19
|
+
const labelText = primaryModality
|
|
20
|
+
? modalityShortMapping(primaryModality)
|
|
21
|
+
: <i className="fa fa-circle-o-notch fa-spin"></i>
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<div className="hexagon-wrapper">
|
|
25
|
+
<div className={`hexagon ${hexagonClass}`}></div>
|
|
26
|
+
<div className="label">{labelText}</div>
|
|
27
|
+
</div>
|
|
28
|
+
)
|
|
29
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
@import '../../scss/variables';
|
|
2
|
+
|
|
3
|
+
.hexagon-wrapper {
|
|
4
|
+
text-align: center;
|
|
5
|
+
position: relative;
|
|
6
|
+
display: inline-block;
|
|
7
|
+
width: 45px;
|
|
8
|
+
height: 45px;
|
|
9
|
+
|
|
10
|
+
div.label {
|
|
11
|
+
position: absolute;
|
|
12
|
+
top: 0;
|
|
13
|
+
text-align: center;
|
|
14
|
+
width: 100%;
|
|
15
|
+
left: 0;
|
|
16
|
+
right: 0;
|
|
17
|
+
bottom: 0;
|
|
18
|
+
display: flex;
|
|
19
|
+
justify-content: center;
|
|
20
|
+
align-items: center;
|
|
21
|
+
font-weight: 600;
|
|
22
|
+
font-size: 13px;
|
|
23
|
+
color: #fff; // Default label color
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.hexagon {
|
|
27
|
+
height: 100%;
|
|
28
|
+
width: calc(100% * 0.57735);
|
|
29
|
+
display: inline-block;
|
|
30
|
+
transition: background-color 0.3s;
|
|
31
|
+
background-color: $on-dark-aqua; // Default hexagon background
|
|
32
|
+
|
|
33
|
+
&:before,
|
|
34
|
+
&:after {
|
|
35
|
+
position: absolute;
|
|
36
|
+
top: 0;
|
|
37
|
+
right: calc((100% / 2) - ((100% * 0.57735) / 2));
|
|
38
|
+
background-color: inherit;
|
|
39
|
+
height: inherit;
|
|
40
|
+
width: inherit;
|
|
41
|
+
content: '';
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
&:before {
|
|
45
|
+
transform: rotateZ(60deg);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
&:after {
|
|
49
|
+
transform: rotateZ(-60deg);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&.mri { background-color: $mri-theme; }
|
|
53
|
+
&.eeg { background-color: $on-light-green; } // EEG uses on-light-green
|
|
54
|
+
&.pet { background-color: $pet-theme; }
|
|
55
|
+
&.ieeg { background-color: $ieeg-theme; }
|
|
56
|
+
&.meg { background-color: $meg-theme; }
|
|
57
|
+
&.nirs { background-color: $nirs-theme; }
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
a {
|
|
62
|
+
.hexagon-wrapper {
|
|
63
|
+
margin: 20px auto;
|
|
64
|
+
|
|
65
|
+
div.label {
|
|
66
|
+
color: unset;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.hexagon {
|
|
70
|
+
transition: color 0.3s;
|
|
71
|
+
background-color: #fff;
|
|
72
|
+
|
|
73
|
+
// Modality specific colors (when inside 'a')
|
|
74
|
+
&.mri { background-color: #fff; color: $mri-theme; }
|
|
75
|
+
&.eeg { background-color: #fff; color: $eeg-theme; }
|
|
76
|
+
&.pet { background-color: #fff; color: $pet-theme; }
|
|
77
|
+
&.ieeg { background-color: #fff; color: $ieeg-theme; }
|
|
78
|
+
&.meg { background-color: #fff; color: $meg-theme; }
|
|
79
|
+
&.nirs { background-color: #fff; color: $nirs-theme; }
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
&:hover {
|
|
83
|
+
.hexagon {
|
|
84
|
+
color: lighten($on-dark-aqua, 15%);
|
|
85
|
+
&.mri { color: lighten($mri-theme, 10%); }
|
|
86
|
+
&.eeg { color: lighten($eeg-theme, 10%); }
|
|
87
|
+
&.pet { color: lighten($pet-theme, 10%); }
|
|
88
|
+
&.ieeg { color: lighten($ieeg-theme, 10%); }
|
|
89
|
+
&.meg { color: lighten($meg-theme, 10%); }
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@import '
|
|
1
|
+
@import '../../scss/variables';
|
|
2
2
|
.custom-radio {
|
|
3
3
|
margin: 10px 0 20px;
|
|
4
4
|
[type='radio']:checked,
|
|
@@ -319,7 +319,7 @@
|
|
|
319
319
|
}
|
|
320
320
|
}
|
|
321
321
|
[type='radio']:not(:checked) + label:hover {
|
|
322
|
-
background-color: var(--current-theme-primary-
|
|
322
|
+
background-color: var(--current-theme-primary-ultralight);
|
|
323
323
|
}
|
|
324
324
|
[type='radio']:checked + label {
|
|
325
325
|
color: #fff;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@import '
|
|
1
|
+
@import '../../scss/variables';
|
|
2
2
|
$rangeWidth: 90%;
|
|
3
3
|
|
|
4
4
|
.formRange-inner {
|
|
@@ -82,7 +82,7 @@ $rangeWidth: 90%;
|
|
|
82
82
|
/* For Chrome browsers */
|
|
83
83
|
.thumb::-webkit-slider-thumb {
|
|
84
84
|
background-color: #fff;
|
|
85
|
-
border: 1px solid var(--current-theme-primary-
|
|
85
|
+
border: 1px solid var(--current-theme-primary-ultralight);
|
|
86
86
|
border-radius: 50%;
|
|
87
87
|
box-shadow: 0 0 5px -1px var(--current-theme-primary);
|
|
88
88
|
cursor: pointer;
|
|
@@ -96,7 +96,7 @@ $rangeWidth: 90%;
|
|
|
96
96
|
/* For Firefox browsers */
|
|
97
97
|
.thumb::-moz-range-thumb {
|
|
98
98
|
background-color: #fff;
|
|
99
|
-
border: 1px solid var(--current-theme-primary-
|
|
99
|
+
border: 1px solid var(--current-theme-primary-ultralight);
|
|
100
100
|
border-radius: 50%;
|
|
101
101
|
box-shadow: 0 0 5px -1px var(--current-theme-primary);
|
|
102
102
|
cursor: pointer;
|