@openneuro/app 4.36.1 → 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.
Files changed (74) hide show
  1. package/package.json +5 -3
  2. package/src/scripts/components/accordion/accordion.scss +1 -1
  3. package/src/scripts/components/activity-slider/ActivitySlider.tsx +4 -22
  4. package/src/scripts/components/activity-slider/slider.scss +1 -82
  5. package/src/scripts/components/button/button.scss +1 -1
  6. package/src/scripts/components/count-toggle/count-toggle.scss +1 -1
  7. package/src/scripts/components/dropdown/dropdown.scss +1 -1
  8. package/src/scripts/components/facets/facet.scss +5 -4
  9. package/src/scripts/components/footer/footer.scss +1 -1
  10. package/src/scripts/components/front-page/front-page.scss +1 -1
  11. package/src/scripts/components/header/header.scss +1 -1
  12. package/src/scripts/components/input/input.scss +1 -1
  13. package/src/scripts/components/input/term-search.scss +1 -1
  14. package/src/scripts/components/loading/loading.scss +1 -1
  15. package/src/scripts/components/modal/modal.scss +1 -1
  16. package/src/scripts/components/modality-cube/ModalityHexagon.tsx +29 -0
  17. package/src/scripts/components/modality-cube/modality-cube.scss +1 -1
  18. package/src/scripts/components/modality-cube/modality-hexagon.scss +93 -0
  19. package/src/scripts/components/page/page.scss +1 -1
  20. package/src/scripts/components/progress-bar/progress-bar.scss +1 -1
  21. package/src/scripts/components/radio/radio.scss +2 -2
  22. package/src/scripts/components/range/TwoHandleRange.scss +3 -3
  23. package/src/scripts/components/read-more/read-more.scss +1 -1
  24. package/src/scripts/components/scss/upload-modal.scss +1 -1
  25. package/src/scripts/components/tooltip/tooltip.scss +1 -1
  26. package/src/scripts/dataset/__tests__/__snapshots__/snapshot-container.spec.tsx.snap +132 -128
  27. package/src/scripts/dataset/__tests__/draft-container.spec.tsx +136 -0
  28. package/src/scripts/dataset/common/follow-toggles.tsx +1 -1
  29. package/src/scripts/dataset/components/DatasetHeader.tsx +13 -16
  30. package/src/scripts/dataset/components/DatasetToolButton.tsx +6 -7
  31. package/src/scripts/dataset/components/DatasetTools.tsx +6 -2
  32. package/src/scripts/dataset/draft-container.tsx +30 -24
  33. package/src/scripts/dataset/files/{file-display.jsx → file-display.tsx} +32 -19
  34. package/src/scripts/dataset/routes/tab-routes-draft.tsx +6 -1
  35. package/src/scripts/dataset/routes/tab-routes-snapshot.tsx +5 -1
  36. package/src/scripts/dataset/snapshot-container.tsx +37 -43
  37. package/src/scripts/scss/dataset/dataset-page.scss +44 -120
  38. package/src/scripts/scss/variables.scss +65 -13
  39. package/src/scripts/{components/search-page → search}/__tests__/NuerobagelSearch.spec.tsx +1 -1
  40. package/src/scripts/search/components/DatasetsRadioTabs.tsx +103 -0
  41. package/src/scripts/{components/search-page → search/components}/FilterListItem.tsx +1 -1
  42. package/src/scripts/{components/search-page → search/components}/FiltersBlock.tsx +5 -8
  43. package/src/scripts/search/components/MetaListItemList.tsx +31 -0
  44. package/src/scripts/{components/search-page → search/components}/SearchPage.tsx +15 -8
  45. package/src/scripts/search/components/SearchResultDetails.tsx +167 -0
  46. package/src/scripts/{components/search-page → search/components}/SearchResultItem.tsx +57 -173
  47. package/src/scripts/search/components/SearchResultsList.tsx +45 -0
  48. package/src/scripts/{components/search-page → search/components}/SearchSort.tsx +2 -2
  49. package/src/scripts/search/filters-block-container.tsx +1 -1
  50. package/src/scripts/search/inputs/index.ts +0 -4
  51. package/src/scripts/search/inputs/sliding-radio-group.tsx +127 -0
  52. package/src/scripts/search/inputs/sort-by-select.tsx +1 -1
  53. package/src/scripts/{components/search-page → search/scss}/filters-block.scss +1 -1
  54. package/src/scripts/{components/search-page → search/scss}/search-page.scss +123 -92
  55. package/src/scripts/search/scss/search-result-details.scss +70 -0
  56. package/src/scripts/{components/search-page → search/scss}/search-result.scss +29 -56
  57. package/src/scripts/{components/search-page → search/scss}/search-sort.scss +1 -1
  58. package/src/scripts/search/scss/sliding-radio-group.scss +115 -0
  59. package/src/scripts/search/search-container.tsx +90 -24
  60. package/src/scripts/search/use-search-results.tsx +3 -0
  61. package/src/scripts/users/github-auth-button.tsx +1 -1
  62. package/src/scripts/components/scss/_variables.scss +0 -245
  63. package/src/scripts/components/search-page/SearchResultsList.tsx +0 -29
  64. package/src/scripts/dataset/files/index.tsx +0 -6
  65. package/src/scripts/search/inputs/admin-allDatasets-toggle.tsx +0 -47
  66. package/src/scripts/search/inputs/show-datasets-radios.tsx +0 -74
  67. /package/src/scripts/{components/search-page → search/components}/CommunityHeader.tsx +0 -0
  68. /package/src/scripts/{components/search-page → search/components}/FacetBlockContainerExample.tsx +0 -0
  69. /package/src/scripts/{components/search-page → search/components}/FilterDateItem.tsx +0 -0
  70. /package/src/scripts/{components/search-page → search/components}/ModalityHeader.tsx +0 -0
  71. /package/src/scripts/{components/search-page → search/components}/NeurobagelSearch.tsx +0 -0
  72. /package/src/scripts/{components/search-page → search/components}/SearchSortContainerExample.tsx +0 -0
  73. /package/src/scripts/{components/search-page → search/components}/TermListItem.tsx +0 -0
  74. /package/src/scripts/{components/search-page → search/components}/neurobagel_logo.svg +0 -0
@@ -1,9 +1,29 @@
1
- @import '../scss/variables';
1
+ @import '../../scss/variables';
2
+
3
+ // Common styles for portal headers (can be extended)
4
+ .search-page-portal-header,
5
+ .search-page-coms {
6
+ .primary-content {
7
+ font-weight: 300;
8
+ }
9
+ .secondary-content {
10
+ font-weight: 300;
11
+ margin-top: 25px;
12
+ display: flex;
13
+ }
14
+ }
2
15
 
3
16
  .search-page-portal-header {
4
17
  position: relative;
5
18
  color: #fff;
6
19
  z-index: 1100;
20
+ background-color: var(--current-theme-primary);
21
+ background: linear-gradient(
22
+ 16deg,
23
+ var(--current-theme-primary-dark) 0%,
24
+ var(--current-theme-primary) 70%
25
+ );
26
+
7
27
  @media (max-width: 980px) {
8
28
  z-index: 3;
9
29
  }
@@ -19,6 +39,7 @@
19
39
  display: none;
20
40
  }
21
41
  }
42
+
22
43
  @media (max-width: 767px) {
23
44
  .portal-primary {
24
45
  width: 100%;
@@ -27,12 +48,8 @@
27
48
  }
28
49
  }
29
50
 
30
- .primary-content,
31
- .secondary-content {
32
- font-weight: 300;
33
- font-size: 24px;
34
- }
35
51
  .primary-content {
52
+ font-size: 24px;
36
53
  a {
37
54
  color: #fff;
38
55
  }
@@ -41,8 +58,7 @@
41
58
  }
42
59
  }
43
60
  .secondary-content {
44
- margin: 25px 0 50px;
45
- display: flex;
61
+ margin: 25px 0 50px; // This margin is specific to portal-header
46
62
  @media (max-width: 450px) {
47
63
  flex-direction: column;
48
64
  font-size: 17px;
@@ -56,31 +72,19 @@
56
72
  }
57
73
  }
58
74
 
59
- .search-page-portal-header {
60
- background-color: var(--current-theme-primary);
61
- background: linear-gradient(
62
- 16deg,
63
- var(--current-theme-primary-dark) 0%,
64
- var(--current-theme-primary) 70%
65
- );
66
- }
67
-
68
75
  .search-page-coms {
69
- position: relative;
70
76
  background-color: #f3f7f6;
71
77
  padding: 20px 0 40px;
78
+ position: relative; // Only defined here for .search-page-coms
79
+
72
80
  h2 {
73
81
  font-size: 19px;
74
82
  }
75
83
  .primary-content {
76
- font-weight: 300;
77
84
  font-size: 19px;
78
85
  }
79
86
  .secondary-content {
80
- font-weight: 300;
81
87
  font-size: 15px;
82
- margin-top: 25px;
83
- display: flex;
84
88
  }
85
89
  }
86
90
 
@@ -89,7 +93,6 @@
89
93
  width: 250px;
90
94
  height: 144.34px;
91
95
  margin: 72.17px 0;
92
-
93
96
  background-size: auto 288.6751px;
94
97
  background-position: center;
95
98
 
@@ -104,8 +107,6 @@
104
107
  background: inherit;
105
108
  left: 36.61px;
106
109
 
107
- /*counter transform the bg image on the caps*/
108
- &:after,
109
110
  &:after {
110
111
  content: '';
111
112
  position: absolute;
@@ -125,7 +126,6 @@
125
126
 
126
127
  .hexBottom {
127
128
  bottom: -88.3883px;
128
-
129
129
  &:after {
130
130
  background-position: center bottom;
131
131
  }
@@ -163,13 +163,13 @@
163
163
  width: 100%;
164
164
  color: #000;
165
165
  font-weight: bold;
166
+
166
167
  &.front {
167
168
  transform: translateZ(69px);
168
169
  display: flex;
169
170
  flex-direction: column;
170
171
  justify-content: center;
171
172
  align-items: center;
172
-
173
173
  background-color: rgba(0, 0, 0, 0.32);
174
174
  }
175
175
  &.top {
@@ -184,9 +184,6 @@
184
184
  }
185
185
  }
186
186
 
187
- .search {
188
- padding: 0 0 50px;
189
- }
190
187
  .search-heading {
191
188
  margin: 20px 0;
192
189
  @media (max-width: 450px) {
@@ -202,40 +199,48 @@
202
199
  font-size: 14px;
203
200
  }
204
201
  }
202
+
205
203
  .search-wrapper {
204
+ box-sizing: border-box;
205
+ flex: 0 0 auto;
206
+ flex-grow: 1;
207
+ flex-basis: 100%;
208
+ max-width: 100%;
209
+ min-width: 0;
206
210
  display: flex;
211
+ position: relative;
212
+ padding: 20px 35px;
207
213
  }
208
214
 
209
215
  .close-filters-btn,
210
216
  .show-filters-btn {
211
- display: none;
212
- }
217
+ display: none; // Hidden by default
213
218
 
214
- @media (max-width: 980px) {
215
- .close-filters-btn,
216
- .show-filters-btn {
217
- display: block;
219
+ @media (max-width: 980px) {
220
+ display: block; // Show on smaller screens
218
221
  position: absolute;
219
- top: 40px;
222
+ top: 20px;
220
223
  right: 0;
221
224
  background: none;
222
225
  border: 0;
223
226
  font-size: 12px;
224
227
  margin: 10px;
225
228
  padding: 0;
229
+ z-index: 1100;
230
+ cursor: pointer;
226
231
  }
227
- }
228
232
 
229
- @media (max-width: 450px) {
230
- .close-filters-btn,
231
- .show-filters-btn {
233
+ @media (max-width: 450px) {
232
234
  top: 0px;
233
235
  left: 0;
234
236
  margin: 10px 0 20px;
235
237
  border: 1px solid #ccc;
236
238
  padding: 10px;
237
- display: block;
238
239
  }
240
+ }
241
+
242
+ // Specific placement for close button on smaller screens
243
+ @media (max-width: 450px) {
239
244
  .close-filters-btn {
240
245
  left: 20px;
241
246
  }
@@ -243,8 +248,9 @@
243
248
 
244
249
  .search-nav {
245
250
  flex: 0 0 auto;
246
- padding: 0;
247
- width: 430px;
251
+ padding: 20px 30px;
252
+ width: 40%;
253
+ max-width: 450px;
248
254
 
249
255
  @media (max-width: 980px) {
250
256
  opacity: 0;
@@ -261,13 +267,15 @@
261
267
  min-height: 100%;
262
268
  overflow: scroll;
263
269
  position: fixed;
264
- z-index: 1205;
270
+ z-index: 1205; // Higher z-index for fixed overlay
265
271
  top: 0;
266
272
  padding: 80px 25px;
273
+
267
274
  &.show-mobile-filters {
268
275
  opacity: 1;
269
276
  transform: translateX(0);
270
277
  transition: opacity 1s;
278
+ max-width: 100vw;
271
279
  }
272
280
  }
273
281
 
@@ -288,21 +296,47 @@
288
296
 
289
297
  .search-content {
290
298
  flex: 1;
291
- padding: 0 0 0 30px;
299
+ padding: 20px 50px 20px 20px;
292
300
  position: relative;
293
- max-width: 100%;
301
+ max-width: calc(100% - 450px - 380px);
302
+ @media screen and (max-width: 1410px) {
303
+ max-width: 100%;
304
+ }
294
305
  @media (max-width: 980px) {
295
- padding: 0;
306
+ padding: 0 10px;
296
307
  }
297
308
  .search-results {
298
- border: 1px solid $newspaper;
299
- border-radius: $border-radius-default;
300
309
  max-width: 100%;
310
+
301
311
  .search-result {
302
- border-bottom: 1px solid $newspaper;
312
+ border: 1px solid transparent;
313
+ &:nth-child(odd) {
314
+ background-color: var(--cloud);
315
+ }
316
+ &.expanded {
317
+ border-top-color: var(--current-theme-primary-light);
318
+ border-bottom-color: var(--current-theme-primary-light);
319
+ background-color: var(--current-theme-primary-ultralight);
320
+ }
303
321
  }
304
322
  }
323
+ }
305
324
 
325
+ .search-details {
326
+ flex-grow: 1;
327
+ max-width: 380px;
328
+ @media screen and (max-width: 1410px) {
329
+ position: fixed;
330
+ top: 0;
331
+ right: 0;
332
+ bottom: 0;
333
+ left: 0;
334
+ width: 100%;
335
+ max-width: 100%;
336
+ z-index: 5000;
337
+ padding: 20px;
338
+ overflow-y: auto;
339
+ }
306
340
  }
307
341
 
308
342
  .search-sort {
@@ -323,42 +357,42 @@
323
357
  flex-basis: 50%;
324
358
  }
325
359
 
326
- .on-accordion-wrapper .keyword-accordion {
327
- .accordion-title {
328
- background: #e9e9e9;
329
- width: 18px;
330
- border-radius: 50%;
331
- line-height: 0;
332
- display: flex;
333
- justify-content: center;
334
- align-items: center;
335
- height: 18px;
336
- font-size: 12px;
337
- align-content: space-around;
338
- flex-direction: row;
339
- font-weight: 600;
340
- color: #515151;
341
- font-family: monospace;
342
- &:after {
343
- display: none;
360
+ .on-accordion-wrapper {
361
+ .keyword-accordion {
362
+ .accordion-title {
363
+ background: #e9e9e9;
364
+ width: 18px;
365
+ border-radius: 50%;
366
+ line-height: 0;
367
+ display: flex;
368
+ justify-content: center;
369
+ align-items: center;
370
+ height: 18px;
371
+ font-size: 12px;
372
+ align-content: space-around;
373
+ flex-direction: row;
374
+ font-weight: 600;
375
+ color: #515151;
376
+ font-family: monospace;
377
+ &:after {
378
+ display: none;
379
+ }
344
380
  }
345
- }
346
- .accordion-content {
347
- font-size: 12px;
348
- margin: 10px 0;
349
- .on-icon {
350
- font-size: 10px;
351
- padding: 1px 4px;
352
- border-radius: $border-radius-default;
353
- line-height: 1;
354
- background-color: var(--current-theme-primary);
355
- color: #fff;
381
+ .accordion-content {
382
+ font-size: 12px;
383
+ margin: 10px 0;
384
+ .on-icon {
385
+ font-size: 10px;
386
+ padding: 1px 4px;
387
+ border-radius: $border-radius-default;
388
+ line-height: 1;
389
+ background-color: var(--current-theme-primary);
390
+ color: #fff;
391
+ }
356
392
  }
357
393
  }
358
- }
359
-
360
- .on-accordion-wrapper .keyword-accordion {
361
- .accordion-title {
394
+ // Specific placement for keyword-accordion title
395
+ .keyword-accordion .accordion-title {
362
396
  position: absolute;
363
397
  top: -20px;
364
398
  left: 70px;
@@ -388,13 +422,11 @@
388
422
  cursor: pointer;
389
423
  align-items: center;
390
424
  justify-content: flex-start;
391
-
392
425
  font-size: 14px;
393
426
  border-top: 1px solid $newspaper;
394
427
  padding: 10px;
395
428
  display: block;
396
429
  font-weight: 500;
397
- font-weight: 500;
398
430
  &.selected-item {
399
431
  color: var(--current-theme-primary);
400
432
  }
@@ -406,10 +438,12 @@
406
438
  .search-facet-wrapper {
407
439
  .modality-facet.facet-accordion.on-accordion-wrapper {
408
440
  margin: 20px 0;
409
- border: 0;
410
- background: #e5f4f7;
441
+ border: 0; // Explicitly override border for mobile
442
+ background: var(--current-theme-primary-ultralight);
443
+ border: 1px solid var(--current-theme-primary-light);
411
444
  border-radius: $border-radius-default;
412
445
  padding: 10px;
446
+
413
447
  .accordion-item.collapsed {
414
448
  max-height: initial;
415
449
  }
@@ -421,7 +455,7 @@
421
455
  color: var(--current-theme-primary);
422
456
  }
423
457
  .accordion-title {
424
- margin: 10px 0 15px 0;
458
+ margin: 10px 0 15px 0; // Explicitly override margin for accordion title
425
459
  padding: 0;
426
460
  &:after {
427
461
  display: none;
@@ -442,7 +476,6 @@
442
476
  display: flex;
443
477
  align-items: center;
444
478
  justify-content: flex-start;
445
-
446
479
  span {
447
480
  margin-left: 10px;
448
481
  display: inline-block;
@@ -452,7 +485,6 @@
452
485
 
453
486
  .level-1 > li {
454
487
  border-top: 1px solid $newspaper;
455
-
456
488
  > .label {
457
489
  padding: 10px;
458
490
  font-weight: 500;
@@ -465,7 +497,6 @@
465
497
  > li {
466
498
  display: flex;
467
499
  justify-content: flex-start;
468
-
469
500
  .label {
470
501
  margin-left: 15px;
471
502
  }
@@ -0,0 +1,70 @@
1
+ @import '../../scss/variables';
2
+
3
+ .search-details {
4
+ border-left: 1px solid var(--current-theme-primary-light);
5
+ background-color: var(--current-theme-primary-ultralight);
6
+ padding: 20px;
7
+ font-size: 14px;
8
+ min-height: calc(100vh - 106px);
9
+ h4 {
10
+ font-size: 16px;
11
+ }
12
+
13
+ .result-summary-meta {
14
+ margin-bottom: 10px;
15
+
16
+ label {
17
+ font-weight: 600;
18
+ color: #000;
19
+ margin-bottom: 5px;
20
+ display: inline-block;
21
+ }
22
+ }
23
+
24
+ .search-details-scroll {
25
+ position: sticky;
26
+ top: 10px;
27
+ align-self: flex-start;
28
+ width: 100%;
29
+ padding: 15px;
30
+ z-index: 100;
31
+ max-height: calc(100vh - 20px);
32
+ overflow-y: auto;
33
+ overflow-x: hidden;
34
+
35
+ }
36
+
37
+ .task-list,
38
+ .modality-list {
39
+ .list-item {
40
+ display: inline-block;
41
+ font-weight: 600;
42
+ padding: 3px 6px;
43
+ margin: 0 10px 5px 0;
44
+ color: var(--current-theme-secondary);
45
+ border: 1px solid;
46
+ border-radius: $border-radius-default;
47
+ }
48
+ }
49
+
50
+
51
+
52
+ .close-details-button {
53
+ cursor: pointer;
54
+ position: absolute;
55
+ top: 0;
56
+ right: 0;
57
+ border: 0;
58
+ background-color: transparent;
59
+ color: #000;
60
+ font-size: 20px;
61
+ padding: 2px 5px;
62
+ margin-right: 10px;
63
+ &:hover {
64
+ font-weight: bold;
65
+ }
66
+ &:focus {
67
+ outline: -webkit-focus-ring-color auto 1px;
68
+ }
69
+ }
70
+ }
@@ -1,8 +1,9 @@
1
- @import '../scss/variables';
1
+ @import '../../scss/variables';
2
2
  .search-result {
3
- padding: 20px;
3
+ padding: 30px 20px;
4
4
  h3 {
5
5
  margin: 0 0 5px;
6
+ font-size: 19px;
6
7
  a {
7
8
  color: var(--current-theme-primary);
8
9
  &:hover {
@@ -10,11 +11,26 @@
10
11
  }
11
12
  }
12
13
  }
14
+ cite {
15
+ color: var(--text-citation);
16
+ }
13
17
 
18
+ .hexagon-wrapper {
19
+ margin-left: 10px;
20
+ width: 28px;
21
+ height: 28px;
22
+ div.label {
23
+ font-size: 10px;
24
+ font-weight: normal;
25
+ }
26
+ }
27
+ .dataset-permissions-tag,
14
28
  .result-icon-wrap,
15
29
  .owner-icon-wrap {
16
30
  display: flex;
17
31
  justify-content: flex-end;
32
+ align-items: center;
33
+ padding: 0;
18
34
  @media (max-width: 480px) {
19
35
  justify-content: flex-start;
20
36
  margin-bottom: 10px;
@@ -26,7 +42,6 @@
26
42
  .result-activity-icon {
27
43
  width: 18px;
28
44
  height: 19px;
29
-
30
45
  &[data-tooltip]::after {
31
46
  width: 130px;
32
47
  padding: 5px;
@@ -36,65 +51,23 @@
36
51
  }
37
52
  }
38
53
 
39
- .result-meta-body > div {
40
- font-size: 14px;
41
- margin-bottom: 10px;
42
- display: flex;
43
- flex-direction: column;
44
-
45
- strong {
46
- text-transform: uppercase;
47
- color: #666;
48
- margin-bottom: 5px;
49
- }
50
- .list-item {
51
- display: inline-block;
52
-
53
- border-right: 1px solid #cacaca;
54
- font-weight: 600;
55
- padding: 3px 6px;
56
- margin: 0 10px 5px 0;
57
- color: var(--current-theme-secondary);
58
- border: 1px solid;
59
- border-radius: $border-radius-default;
60
- }
61
- }
62
-
63
- .result-meta-footer {
64
- display: flex;
65
- flex-wrap: wrap;
66
- .result-summary-meta {
67
- margin: 0 10px 10px 0;
68
- padding: 0 40px 0 0;
69
- font-size: 14px;
70
- font-weight: 600;
71
- &:last-child {
72
- padding-right: 0;
73
- }
74
- strong {
75
- text-transform: uppercase;
76
- color: #666;
77
- }
78
- }
79
- }
80
-
81
54
  .updated-divider {
82
55
  margin: 0 10px;
83
56
  @media (max-width: 767px) {
84
57
  display: none;
85
58
  }
86
59
  }
87
- .result-upload-info {
88
- text-align: left;
89
- font-size: 12px;
90
- margin: 0 0 20px;
91
- display: flex;
92
- justify-content: flex-start;
93
- @media (max-width: 767px) {
94
- flex-direction: column;
95
- }
96
- span {
97
- color: #666;
60
+
61
+ .result-actions {
62
+ text-align: right;
63
+ padding: 0;
64
+ .on-button {
65
+ border: 1px solid var(--current-theme-secondary);
66
+ background-color: #fff;
67
+ &.expanded {
68
+ color: #fff;
69
+ background-color: var(--current-theme-secondary);
70
+ }
98
71
  }
99
72
  }
100
73
  }
@@ -1,4 +1,4 @@
1
- @import '../scss/variables';
1
+ @import '../../scss/variables';
2
2
 
3
3
  .search-sort-list-label {
4
4
  padding: 0 0 5px;