@jupytergis/base 0.11.1 → 0.12.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 (101) hide show
  1. package/lib/commands/BaseCommandIDs.d.ts +1 -0
  2. package/lib/commands/BaseCommandIDs.js +1 -0
  3. package/lib/commands/index.js +52 -0
  4. package/lib/constants.js +3 -0
  5. package/lib/dialogs/symbology/hooks/useGetBandInfo.d.ts +0 -6
  6. package/lib/dialogs/symbology/hooks/useGetBandInfo.js +2 -2
  7. package/lib/dialogs/symbology/tiff_layer/types/MultibandColor.js +4 -4
  8. package/lib/formbuilder/objectform/StoryEditorForm.d.ts +3 -2
  9. package/lib/formbuilder/objectform/StoryEditorForm.js +7 -1
  10. package/lib/mainview/mainView.d.ts +18 -0
  11. package/lib/mainview/mainView.js +243 -18
  12. package/lib/panelview/{components/filter-panel → filter-panel}/Filter.js +1 -1
  13. package/lib/panelview/leftpanel.js +4 -4
  14. package/lib/panelview/rightpanel.d.ts +2 -0
  15. package/lib/panelview/rightpanel.js +21 -14
  16. package/lib/panelview/{components/story-maps → story-maps}/PreviewModeSwitch.js +3 -2
  17. package/lib/panelview/story-maps/StoryEditorPanel.d.ts +9 -0
  18. package/lib/panelview/story-maps/StoryEditorPanel.js +34 -0
  19. package/lib/panelview/{components/story-maps → story-maps}/StoryNavBar.d.ts +2 -1
  20. package/lib/panelview/{components/story-maps → story-maps}/StoryNavBar.js +3 -3
  21. package/lib/panelview/story-maps/StoryViewerPanel.d.ts +13 -0
  22. package/lib/panelview/{components/story-maps → story-maps}/StoryViewerPanel.js +37 -24
  23. package/lib/panelview/story-maps/components/StoryContentSection.d.ts +6 -0
  24. package/lib/panelview/story-maps/components/StoryContentSection.js +10 -0
  25. package/lib/panelview/story-maps/components/StoryImageSection.d.ts +15 -0
  26. package/lib/panelview/story-maps/components/StoryImageSection.js +13 -0
  27. package/lib/panelview/story-maps/components/StorySubtitleSection.d.ts +11 -0
  28. package/lib/panelview/story-maps/components/StorySubtitleSection.js +9 -0
  29. package/lib/panelview/story-maps/components/StoryTitleSection.d.ts +12 -0
  30. package/lib/panelview/story-maps/components/StoryTitleSection.js +8 -0
  31. package/lib/shared/components/Combobox.d.ts +21 -0
  32. package/lib/shared/components/Combobox.js +32 -0
  33. package/lib/shared/components/Command.js +10 -10
  34. package/lib/shared/components/Input.d.ts +3 -0
  35. package/lib/shared/components/Input.js +18 -0
  36. package/lib/shared/components/Pagination.js +3 -2
  37. package/lib/shared/components/Select.d.ts +19 -0
  38. package/lib/shared/components/Select.js +28 -0
  39. package/lib/shared/components/SingleDatePicker.d.ts +11 -0
  40. package/lib/shared/components/SingleDatePicker.js +16 -0
  41. package/lib/stacBrowser/components/StacPanel.d.ts +9 -1
  42. package/lib/stacBrowser/components/StacPanel.js +53 -9
  43. package/lib/stacBrowser/components/filter-extension/QueryableComboBox.d.ts +9 -0
  44. package/lib/stacBrowser/components/filter-extension/QueryableComboBox.js +179 -0
  45. package/lib/stacBrowser/components/filter-extension/QueryableRow.d.ts +16 -0
  46. package/lib/stacBrowser/components/filter-extension/QueryableRow.js +16 -0
  47. package/lib/stacBrowser/components/filter-extension/StacFilterExtensionPanel.d.ts +7 -0
  48. package/lib/stacBrowser/components/filter-extension/StacFilterExtensionPanel.js +49 -0
  49. package/lib/stacBrowser/components/filter-extension/StacQueryableFilters.d.ts +11 -0
  50. package/lib/stacBrowser/components/filter-extension/StacQueryableFilters.js +19 -0
  51. package/lib/stacBrowser/components/{StacFilterSection.d.ts → geodes/StacFilterSection.d.ts} +1 -1
  52. package/lib/stacBrowser/components/{StacFilterSection.js → geodes/StacFilterSection.js} +3 -3
  53. package/lib/stacBrowser/components/geodes/StacGeodesFilterPanel.d.ts +7 -0
  54. package/lib/stacBrowser/components/geodes/StacGeodesFilterPanel.js +69 -0
  55. package/lib/stacBrowser/components/shared/StacPanelResults.d.ts +3 -0
  56. package/lib/stacBrowser/components/shared/StacPanelResults.js +68 -0
  57. package/lib/stacBrowser/components/shared/StacSpatialExtent.d.ts +8 -0
  58. package/lib/stacBrowser/components/shared/StacSpatialExtent.js +10 -0
  59. package/lib/stacBrowser/components/shared/StacTemporalExtent.d.ts +9 -0
  60. package/lib/stacBrowser/components/shared/StacTemporalExtent.js +9 -0
  61. package/lib/stacBrowser/context/StacResultsContext.d.ts +33 -0
  62. package/lib/stacBrowser/context/StacResultsContext.js +269 -0
  63. package/lib/stacBrowser/hooks/useGeodesSearch.d.ts +24 -0
  64. package/lib/stacBrowser/hooks/useGeodesSearch.js +178 -0
  65. package/lib/stacBrowser/hooks/useStacFilterExtension.d.ts +30 -0
  66. package/lib/stacBrowser/hooks/useStacFilterExtension.js +262 -0
  67. package/lib/stacBrowser/hooks/useStacSearch.d.ts +5 -16
  68. package/lib/stacBrowser/hooks/useStacSearch.js +30 -184
  69. package/lib/stacBrowser/types/types.d.ts +86 -3
  70. package/lib/toolbar/widget.d.ts +5 -0
  71. package/lib/toolbar/widget.js +23 -2
  72. package/lib/tools.d.ts +0 -7
  73. package/lib/tools.js +55 -14
  74. package/package.json +2 -2
  75. package/style/base.css +38 -3
  76. package/style/shared/button.css +5 -4
  77. package/style/shared/calendar.css +7 -1
  78. package/style/shared/combobox.css +75 -0
  79. package/style/shared/command.css +178 -0
  80. package/style/shared/input.css +59 -0
  81. package/style/shared/pagination.css +1 -1
  82. package/style/shared/popover.css +1 -0
  83. package/style/shared/tabs.css +1 -1
  84. package/style/shared/toggle.css +1 -1
  85. package/style/stacBrowser.css +169 -16
  86. package/style/statusBar.css +1 -0
  87. package/style/storyPanel.css +120 -3
  88. package/style/tabPanel.css +0 -86
  89. package/lib/panelview/components/story-maps/StoryEditorPanel.d.ts +0 -7
  90. package/lib/panelview/components/story-maps/StoryEditorPanel.js +0 -29
  91. package/lib/panelview/components/story-maps/StoryViewerPanel.d.ts +0 -7
  92. package/lib/stacBrowser/components/StacPanelFilters.d.ts +0 -14
  93. package/lib/stacBrowser/components/StacPanelFilters.js +0 -81
  94. package/lib/stacBrowser/components/StacPanelResults.d.ts +0 -13
  95. package/lib/stacBrowser/components/StacPanelResults.js +0 -48
  96. /package/lib/panelview/{components/filter-panel → filter-panel}/Filter.d.ts +0 -0
  97. /package/lib/panelview/{components/filter-panel → filter-panel}/FilterRow.d.ts +0 -0
  98. /package/lib/panelview/{components/filter-panel → filter-panel}/FilterRow.js +0 -0
  99. /package/lib/panelview/{components/identify-panel → identify-panel}/IdentifyPanel.d.ts +0 -0
  100. /package/lib/panelview/{components/identify-panel → identify-panel}/IdentifyPanel.js +0 -0
  101. /package/lib/panelview/{components/story-maps → story-maps}/PreviewModeSwitch.d.ts +0 -0
@@ -46,7 +46,7 @@
46
46
  }
47
47
 
48
48
  .jgis-toggle-outline {
49
- border: 1px solid var(--jp-accent-color0);
49
+ border: 1px solid var(--jp-border-color0);
50
50
  background-color: transparent;
51
51
  transition:
52
52
  background-color 0.3s,
@@ -4,15 +4,15 @@
4
4
  }
5
5
 
6
6
  .jgis-stac-browser-section-item {
7
- border-radius: 1rem !important;
7
+ border-radius: 1rem;
8
8
  cursor: pointer;
9
9
  }
10
10
 
11
- .jgis-stac-browser-results-item {
12
- border-radius: 1rem !important;
11
+ .jgis-button.jgis-stac-browser-results-item {
12
+ border-radius: var(--jp-border-radius);
13
13
  cursor: pointer;
14
- white-space: normal !important;
15
- height: auto !important;
14
+ white-space: normal;
15
+ height: auto;
16
16
  }
17
17
 
18
18
  .jgis-stac-browser-results-list {
@@ -22,16 +22,20 @@
22
22
  word-break: break-word;
23
23
  padding: 0.25rem;
24
24
  margin-right: 0.5rem;
25
+ align-self: center;
25
26
  }
26
27
 
27
- .jgis-stac-browser-date-picker {
28
- display: flex;
29
- justify-content: space-around;
30
- flex-wrap: wrap;
31
- gap: 0.5rem;
28
+ .jgis-stac-datepicker-full-width {
29
+ width: 100%;
30
+ }
31
+
32
+ .jgis-stac-datepicker-button {
33
+ padding: 0 0.5rem;
34
+ width: 100%;
32
35
  }
33
36
 
34
37
  .jgis-stac-browser-filters-panel {
38
+ min-height: 145px;
35
39
  display: flex;
36
40
  flex-direction: column;
37
41
  gap: 0.5rem;
@@ -73,13 +77,162 @@
73
77
 
74
78
  .jgis-stac-badge {
75
79
  gap: 0.25rem;
76
- padding-right: 0.3rem !important;
80
+ padding-right: 0.3rem;
77
81
  }
78
82
 
79
83
  .jgis-stac-badge-icon:hover {
80
- background-color: color-mix(
81
- in srgb,
82
- var(--jp-error-color0),
83
- transparent 20%
84
- ) !important;
84
+ background-color: color-mix(in srgb, var(--jp-error-color0), transparent 20%);
85
+ }
86
+
87
+ .jgis-stac-filter-extension-panel {
88
+ padding: 0 1rem;
89
+ display: flex;
90
+ flex-direction: column;
91
+ gap: 1rem;
92
+ }
93
+
94
+ .jgis-stac-filter-extension-section {
95
+ display: flex;
96
+ flex-direction: column;
97
+ gap: 0.5rem;
98
+ }
99
+
100
+ .jgis-stac-filter-extension-label {
101
+ font-size: 0.875rem;
102
+ font-weight: 500;
103
+ }
104
+
105
+ /* Modifier for filter extension select - uses shared combobox base */
106
+ .jgis-stac-filter-extension-select {
107
+ max-width: 200px;
108
+ }
109
+
110
+ .jgis-stac-filter-extension-input[data-slot='input'] {
111
+ height: 1.5rem;
112
+ padding: 1rem 0.5rem;
113
+ }
114
+
115
+ .jgis-stac-filter-extension-button-container {
116
+ padding-top: 0.5rem;
117
+ border-top: 1px solid var(--jp-border-color0);
118
+ }
119
+
120
+ .jgis-stac-filter-extension-button {
121
+ padding: 0.5rem 1rem;
122
+ border-radius: var(--jp-border-radius, 0.375rem);
123
+ border: 1px solid var(--jp-border-color0);
124
+ background-color: var(--jp-layout-color0);
125
+ color: var(--jp-ui-font-color0);
126
+ cursor: pointer;
127
+ box-sizing: border-box;
128
+ }
129
+
130
+ .jgis-stac-panel-tabs-list {
131
+ border-radius: 0;
132
+ }
133
+
134
+ .jgis-stac-panel-placeholder {
135
+ padding: 1rem;
136
+ text-align: center;
137
+ color: var(--jp-ui-font-color2);
138
+ }
139
+
140
+ .jgis-stac-panel-provider-select-container {
141
+ margin: 0 1rem 1rem 1rem;
142
+ }
143
+
144
+ .jgis-stac-panel-provider-select {
145
+ width: 100%;
146
+ padding: 0.5rem;
147
+ }
148
+
149
+ /* QueryableComboBox styles */
150
+ .jgis-queryable-combo-container {
151
+ display: flex;
152
+ flex-direction: column;
153
+ gap: 1rem;
154
+ }
155
+
156
+ /* Modifiers for queryable combo - uses shared combobox base */
157
+ .jgis-queryable-combo-button {
158
+ width: 100%;
159
+ }
160
+
161
+ /* More specific selector to override [data-slot="input"] styles for Input components */
162
+ .jgis-queryable-combo-input[data-slot='input'] {
163
+ padding: 0.5rem;
164
+ /* padding-left: 1rem; */
165
+ height: 1.5rem;
166
+ }
167
+
168
+ /* More specific selector to override combobox button styles for operator Select */
169
+ .jgis-button.jgis-combobox-button.jgis-queryable-combo-operator {
170
+ padding: 0.25rem;
171
+ }
172
+
173
+ /* More specific selector to override button base styles for Select/SingleDatePicker buttons */
174
+ /* Include jgis-combobox-button to increase specificity for Select components */
175
+ .jgis-button.jgis-combobox-button.jgis-queryable-combo-input,
176
+ .jgis-button.jgis-queryable-combo-input {
177
+ padding: 0.5rem;
178
+ /* padding-left: 1rem; */
179
+ height: 1.5rem;
180
+ }
181
+
182
+ .jgis-button.jgis-combobox-button.jgis-queryable-combo-input
183
+ > .jgis-combobox-button-text {
184
+ text-align: left;
185
+ }
186
+
187
+ /* More specific selector to override button base styles */
188
+ .jgis-button.jgis-queryable-combo-input-date-picker {
189
+ justify-content: flex-start;
190
+ }
191
+
192
+ .jgis-queryable-combo-input.jgis-combobox-button-text {
193
+ display: flex;
194
+ justify-content: flex-start;
195
+ }
196
+
197
+ .jgis-queryable-rows-container {
198
+ display: grid;
199
+ grid-template-columns: auto auto 1fr;
200
+ align-items: center;
201
+ gap: 0.5rem;
202
+ }
203
+
204
+ .jgis-queryable-row {
205
+ display: contents;
206
+ }
207
+
208
+ .jgis-stac-queryable-filters {
209
+ display: flex;
210
+ flex-direction: column;
211
+ gap: 0.5rem;
212
+ }
213
+
214
+ .jgis-stac-queryable-filters-radio-group {
215
+ display: flex;
216
+ gap: 0.5rem;
217
+ }
218
+
219
+ .jgis-stac-queryable-filters-radio-item {
220
+ display: flex;
221
+ align-items: center;
222
+ gap: 0.5rem;
223
+ }
224
+
225
+ /* StacPanelResults styles */
226
+ .jgis-stac-panel-results-pagination {
227
+ margin-top: 0;
228
+ }
229
+
230
+ .jgis-panel-tab-content.jgis-panel-tab-content-stac-panel {
231
+ padding-top: 0;
232
+ border-top: 1px solid var(--jp-border-color0);
233
+ }
234
+
235
+ .jgis-panel-tab-content.jgis-panel-tab-content-stac-panel
236
+ .jgis-stac-panel-tabs-list {
237
+ border-radius: 0;
85
238
  }
@@ -5,6 +5,7 @@
5
5
  height: 16px;
6
6
  background-color: var(--jp-layout-color1);
7
7
  font-size: var(--jp-ui-font-size0);
8
+ z-index: 1000;
8
9
  }
9
10
 
10
11
  .jgis-status-bar-item {
@@ -1,5 +1,22 @@
1
1
  .jgis-story-viewer-panel {
2
+ padding: 1rem;
2
3
  overflow: hidden;
4
+ position: relative;
5
+ }
6
+
7
+ .jgis-story-segment-container {
8
+ width: 100%;
9
+ animation: fadeIn 0.3s ease;
10
+ /* animation-duration is set dynamically via inline style from segment.transition.time */
11
+ }
12
+
13
+ @keyframes fadeIn {
14
+ from {
15
+ opacity: 0;
16
+ }
17
+ to {
18
+ opacity: 1;
19
+ }
3
20
  }
4
21
 
5
22
  .jgis-story-viewer-panel * {
@@ -15,9 +32,10 @@
15
32
  .jgis-story-viewer-image {
16
33
  width: 100%;
17
34
  height: 100%;
18
- max-height: 240px;
19
- object-fit: cover;
35
+ max-height: 50vh;
36
+ object-fit: contain;
20
37
  display: block;
38
+ border-radius: var(--jp-border-radius);
21
39
  }
22
40
 
23
41
  .jgis-story-viewer-image-title {
@@ -45,16 +63,49 @@
45
63
  padding-bottom: 0.25rem;
46
64
  }
47
65
 
66
+ .jgis-panels-wrapper .jgis-story-viewer-nav-container-specta-mod {
67
+ position: fixed;
68
+ left: 0;
69
+ right: 0;
70
+ width: 100vw;
71
+ z-index: 1000;
72
+ }
73
+
74
+ .jgis-story-navbar {
75
+ display: flex;
76
+ gap: 8px;
77
+ justify-content: center;
78
+ }
79
+
80
+ .jgis-story-viewer-subtitle-container {
81
+ display: flex;
82
+ align-items: center;
83
+ /* justify-content: space-between; */
84
+ /* gap: 1rem; */
85
+ padding-top: 1rem;
86
+ }
87
+
88
+ .jgis-story-navbar.jgis-story-navbar-specta-mod {
89
+ position: fixed;
90
+ top: 50%;
91
+ width: 100%;
92
+ justify-content: space-between;
93
+ }
94
+
95
+ .jgis-story-navbar-specta-mod > .jgis-button {
96
+ padding: 0;
97
+ }
98
+
48
99
  .jgis-story-viewer-title {
49
100
  text-align: center;
50
101
  }
51
102
 
52
103
  .jgis-story-viewer-subtitle {
53
104
  text-align: center;
105
+ margin: 0 auto;
54
106
  }
55
107
 
56
108
  .jgis-story-viewer-content {
57
- padding-left: 16px;
58
109
  }
59
110
 
60
111
  .jgis-story-viewer-content p,
@@ -66,3 +117,69 @@
66
117
  .jgis-story-viewer-content > ul {
67
118
  padding-left: 1rem;
68
119
  }
120
+
121
+ .jgis-story-viewer-specta-right-panel-mod {
122
+ scale: 1.5;
123
+ top: 3.5rem !important;
124
+ right: 5.5rem !important;
125
+ font-size: var(--jp-ui-font-size2);
126
+ }
127
+
128
+ .jgis-panel-tab-content-mod {
129
+ background-color: plum;
130
+ }
131
+
132
+ .jgis-right-panel-container.jgis-specta-right-panel-container-mod {
133
+ width: 55%;
134
+ height: 100%;
135
+ margin: unset;
136
+ top: unset;
137
+ }
138
+
139
+ .jgis-specta-story-panel-container {
140
+ width: 100%;
141
+ height: 100%;
142
+ display: flex;
143
+ justify-content: flex-end;
144
+ align-items: center;
145
+ overflow: auto;
146
+ background: linear-gradient(
147
+ to left,
148
+ var(--jgis-specta-bg-color, rgba(221, 160, 221, 0.9)) 49%,
149
+ color-mix(
150
+ in srgb,
151
+ var(--jgis-specta-bg-color, rgba(221, 160, 221, 0.9)) 60%,
152
+ transparent
153
+ )
154
+ 65%,
155
+ color-mix(
156
+ in srgb,
157
+ var(--jgis-specta-bg-color, rgba(221, 160, 221, 0.9)) 50%,
158
+ transparent
159
+ )
160
+ 70%,
161
+ transparent 100%
162
+ );
163
+ }
164
+
165
+ .jgis-story-viewer-panel-specta-mod {
166
+ width: 50%;
167
+ font-size: var(--jp-ui-font-size3);
168
+ padding-right: 1.7rem;
169
+ color: var(--jgis-specta-text-color, var(--jp-ui-inverse-font-color1));
170
+ overflow-y: auto;
171
+ max-height: 100%;
172
+ }
173
+
174
+ .jGIS-property-panel
175
+ .jp-FormGroup-content
176
+ fieldset
177
+ .jp-inputFieldWrapper
178
+ > input#root_presentaionBgColor,
179
+ .jGIS-property-panel
180
+ .jp-FormGroup-content
181
+ fieldset
182
+ .jp-inputFieldWrapper
183
+ > input#root_presentaionTextColor {
184
+ height: revert;
185
+ }
@@ -2,89 +2,3 @@
2
2
  font-size: var(--jp-ui-font-size0);
3
3
  padding-bottom: 50px;
4
4
  }
5
-
6
- .jgis-stac-browser-collection {
7
- flex-wrap: wrap;
8
- margin-top: 0.5rem;
9
- }
10
-
11
- .jgis-stac-browser-section-item {
12
- border-radius: 1rem !important;
13
- cursor: pointer;
14
- }
15
-
16
- .jgis-stac-browser-results-item {
17
- border-radius: 1rem !important;
18
- cursor: pointer;
19
- white-space: normal !important;
20
- height: auto !important;
21
- }
22
-
23
- .jgis-stac-browser-results-list {
24
- display: flex;
25
- flex-direction: column;
26
- gap: 1rem;
27
- word-break: break-word;
28
- padding: 0.25rem;
29
- margin-right: 0.5rem;
30
- }
31
-
32
- .jgis-stac-browser-date-picker {
33
- display: flex;
34
- justify-content: space-around;
35
- flex-wrap: wrap;
36
- gap: 0.5rem;
37
- }
38
-
39
- .jgis-stac-browser-filters-panel {
40
- display: flex;
41
- flex-direction: column;
42
- gap: 0.5rem;
43
- align-items: flex-start;
44
- padding: 0 0.5rem;
45
- }
46
-
47
- .jgis-stac-filter-trigger {
48
- max-width: fit-content;
49
- border: 1px solid var(--jp-border-color0);
50
- padding: 0.5rem;
51
- cursor: pointer;
52
- font-weight: bold;
53
- display: flex;
54
- align-items: center;
55
- gap: 0.15rem;
56
- }
57
-
58
- .jgis-stac-filter-trigger:disabled {
59
- cursor: not-allowed;
60
- }
61
-
62
- .jgis-stac-filter-section-container {
63
- display: flex;
64
- flex-direction: column;
65
- gap: 0.25rem;
66
- }
67
-
68
- .jgis-stac-filter-section-badges {
69
- display: flex;
70
- flex-wrap: wrap;
71
- gap: 0.25rem;
72
- }
73
-
74
- .jgis-stac-datepicker-icon {
75
- width: 1rem;
76
- height: 1rem;
77
- }
78
-
79
- .jgis-stac-badge {
80
- gap: 0.25rem;
81
- padding-right: 0.3rem !important;
82
- }
83
-
84
- .jgis-stac-badge-icon:hover {
85
- background-color: color-mix(
86
- in srgb,
87
- var(--jp-error-color0),
88
- transparent 20%
89
- ) !important;
90
- }
@@ -1,7 +0,0 @@
1
- import { IJupyterGISModel } from '@jupytergis/schema';
2
- import React from 'react';
3
- interface IStoryPanelProps {
4
- model: IJupyterGISModel;
5
- }
6
- export declare function StoryEditorPanel({ model }: IStoryPanelProps): React.JSX.Element;
7
- export default StoryEditorPanel;
@@ -1,29 +0,0 @@
1
- import { faLink } from '@fortawesome/free-solid-svg-icons';
2
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
- import jgisSchema from '@jupytergis/schema/lib/schema/project/jgis.json';
4
- import React, { useMemo } from 'react';
5
- import { StoryEditorPropertiesForm } from "../../../formbuilder/objectform/StoryEditorForm";
6
- import { Button } from "../../../shared/components/Button";
7
- import { deepCopy } from "../../../tools";
8
- const storyMapSchema = deepCopy(jgisSchema.definitions.jGISStoryMap);
9
- const AddStorySegmentButton = ({ model }) => (React.createElement(Button, { onClick: () => model.addStorySegment() },
10
- React.createElement(FontAwesomeIcon, { icon: faLink }),
11
- " Add Story Segment"));
12
- export function StoryEditorPanel({ model }) {
13
- const { storySegmentId, story } = useMemo(() => {
14
- return model.getSelectedStory();
15
- }, [model, model.sharedModel.stories]);
16
- const syncStoryData = (properties) => {
17
- model.sharedModel.updateStoryMap(storySegmentId, properties);
18
- };
19
- if (!story) {
20
- return (React.createElement("div", null,
21
- React.createElement("p", null, "No Story Map available."),
22
- React.createElement("p", null, "Add a Story Segment from the Add Layer menu. A segment captures the current map view. You can add markdown text and an image to each segment to tell your story."),
23
- React.createElement(AddStorySegmentButton, { model: model })));
24
- }
25
- return (React.createElement("div", { style: { padding: '0 0.5rem 0.5rem 0.5rem' } },
26
- React.createElement(StoryEditorPropertiesForm, { formContext: "update", sourceData: story, model: model, schema: storyMapSchema, syncData: syncStoryData, filePath: model.filePath }),
27
- React.createElement(AddStorySegmentButton, { model: model })));
28
- }
29
- export default StoryEditorPanel;
@@ -1,7 +0,0 @@
1
- import { IJupyterGISModel } from '@jupytergis/schema';
2
- import React from 'react';
3
- interface IStoryViewerPanelProps {
4
- model: IJupyterGISModel;
5
- }
6
- declare function StoryViewerPanel({ model }: IStoryViewerPanelProps): React.JSX.Element;
7
- export default StoryViewerPanel;
@@ -1,14 +0,0 @@
1
- import React from 'react';
2
- import { StacFilterState, StacFilterSetters } from "../types/types";
3
- interface IStacPanelFiltersProps {
4
- filterState: StacFilterState;
5
- filterSetters: StacFilterSetters;
6
- startTime: Date | undefined;
7
- setStartTime: (date: Date | undefined) => void;
8
- endTime: Date | undefined;
9
- setEndTime: (date: Date | undefined) => void;
10
- useWorldBBox: boolean;
11
- setUseWorldBBox: (val: boolean) => void;
12
- }
13
- declare const StacPanelFilters: ({ filterState, filterSetters, startTime, setStartTime, endTime, setEndTime, useWorldBBox, setUseWorldBBox, }: IStacPanelFiltersProps) => React.JSX.Element;
14
- export default StacPanelFilters;
@@ -1,81 +0,0 @@
1
- import { format } from 'date-fns';
2
- import { CalendarIcon } from 'lucide-react';
3
- import React from 'react';
4
- import { Button } from "../../shared/components/Button";
5
- import { Calendar } from "../../shared/components/Calendar";
6
- import Checkbox from "../../shared/components/Checkbox";
7
- import { Popover, PopoverContent, PopoverTrigger, } from "../../shared/components/Popover";
8
- import StacFilterSection from "./StacFilterSection";
9
- import { datasets as datasetsList, platforms as platformsList, products as productsList, } from "../constants";
10
- const StacPanelFilters = ({ filterState, filterSetters, startTime, setStartTime, endTime, setEndTime, useWorldBBox, setUseWorldBBox, }) => {
11
- const handleDatasetSelection = (dataset, collection) => {
12
- const collections = new Set(filterState.collections);
13
- const datasets = new Set(filterState.datasets);
14
- if (datasets.has(dataset)) {
15
- datasets.delete(dataset);
16
- // Remove the collection if no datasets remain for it
17
- const datasetsForCollection = Array.from(datasets).filter(d => {
18
- return datasetsList.some(entry => entry.collection === collection && entry.datasets.includes(d));
19
- });
20
- if (datasetsForCollection.length === 0) {
21
- collections.delete(collection);
22
- const platforms = new Set(filterState.platforms);
23
- const products = new Set(filterState.products);
24
- // Remove platforms belonging to this collection
25
- if (platformsList[collection]) {
26
- platformsList[collection].forEach(platform => {
27
- platforms.delete(platform);
28
- });
29
- }
30
- // Remove products belonging to this collection
31
- productsList
32
- .filter(product => product.collections.includes(collection))
33
- .forEach(product => {
34
- products.delete(product.productCode);
35
- });
36
- filterSetters.platforms(platforms);
37
- filterSetters.products(products);
38
- }
39
- }
40
- else {
41
- datasets.add(dataset);
42
- collections.add(collection);
43
- }
44
- filterSetters.collections(collections);
45
- filterSetters.datasets(datasets);
46
- };
47
- const handleToggle = (key, value) => {
48
- const updated = new Set(filterState[key]);
49
- if (updated.has(value)) {
50
- updated.delete(value);
51
- }
52
- else {
53
- updated.add(value);
54
- }
55
- filterSetters[key](updated);
56
- };
57
- return (React.createElement("div", { className: "jgis-stac-browser-filters-panel" },
58
- React.createElement("div", null,
59
- React.createElement("span", { style: { display: 'flex', alignItems: 'center', gap: '0.5rem' } },
60
- React.createElement(Checkbox, { checked: useWorldBBox, onCheckedChange: setUseWorldBBox }),
61
- "Use whole world as bounding box")),
62
- React.createElement("div", { className: "jgis-stac-browser-date-picker" },
63
- React.createElement(Popover, null,
64
- React.createElement(PopoverTrigger, { asChild: true },
65
- React.createElement(Button, { style: { padding: '0 0.5rem' }, variant: 'outline' },
66
- React.createElement(CalendarIcon, { className: "jgis-stac-datepicker-icon" }),
67
- startTime ? format(startTime, 'PPP') : React.createElement("span", null, "Start Date"))),
68
- React.createElement(PopoverContent, null,
69
- React.createElement(Calendar, { mode: "single", selected: startTime, onSelect: setStartTime, autoFocus: true }))),
70
- React.createElement(Popover, null,
71
- React.createElement(PopoverTrigger, { asChild: true },
72
- React.createElement(Button, { style: { padding: '0 0.5rem' }, variant: 'outline' },
73
- React.createElement(CalendarIcon, { className: "jgis-stac-datepicker-icon" }),
74
- endTime ? format(endTime, 'PPP') : React.createElement("span", null, "End Date"))),
75
- React.createElement(PopoverContent, null,
76
- React.createElement(Calendar, { mode: "single", selected: endTime, onSelect: setEndTime, autoFocus: true })))),
77
- React.createElement(StacFilterSection, { section: "Collection", data: datasetsList, selectedCollections: Array.from(filterState.collections), selectedData: Array.from(filterState.datasets), handleCheckedChange: handleDatasetSelection }),
78
- React.createElement(StacFilterSection, { section: "Platform", data: platformsList, selectedCollections: Array.from(filterState.collections), selectedData: Array.from(filterState.platforms), handleCheckedChange: platform => handleToggle('platforms', platform) }),
79
- React.createElement(StacFilterSection, { section: "Data / Product", data: productsList, selectedCollections: Array.from(filterState.collections), selectedData: Array.from(filterState.products), handleCheckedChange: product => handleToggle('products', product) })));
80
- };
81
- export default StacPanelFilters;
@@ -1,13 +0,0 @@
1
- import React from 'react';
2
- import { IStacItem } from "../types/types";
3
- interface IStacPanelResultsProps {
4
- results: IStacItem[];
5
- currentPage: number;
6
- totalPages: number;
7
- handlePaginationClick: (page: number) => void;
8
- handleResultClick: (id: string) => void;
9
- formatResult: (item: IStacItem) => string;
10
- isLoading: boolean;
11
- }
12
- declare const StacPanelResults: ({ results, currentPage, totalPages, handlePaginationClick, handleResultClick, formatResult, isLoading, }: IStacPanelResultsProps) => React.JSX.Element;
13
- export default StacPanelResults;
@@ -1,48 +0,0 @@
1
- import React from 'react';
2
- import { Button } from "../../shared/components/Button";
3
- import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "../../shared/components/Pagination";
4
- function getPageItems(currentPage, totalPages) {
5
- if (totalPages <= 5) {
6
- return Array.from({ length: totalPages }, (_, i) => i + 1);
7
- }
8
- if (currentPage <= 3) {
9
- return [1, 2, 3, 'ellipsis', totalPages];
10
- }
11
- if (currentPage >= totalPages - 2) {
12
- return [
13
- totalPages - 4,
14
- totalPages - 3,
15
- totalPages - 2,
16
- totalPages - 1,
17
- totalPages,
18
- ];
19
- }
20
- return [
21
- currentPage - 2,
22
- currentPage - 1,
23
- currentPage,
24
- 'ellipsis',
25
- totalPages,
26
- ];
27
- }
28
- const StacPanelResults = ({ results, currentPage, totalPages, handlePaginationClick, handleResultClick, formatResult, isLoading, }) => {
29
- return (React.createElement("div", { className: "jgis-stac-browser-filters-panel" },
30
- React.createElement(Pagination, null,
31
- React.createElement(PaginationContent, { style: { marginTop: 0 } },
32
- React.createElement(PaginationItem, null,
33
- React.createElement(PaginationPrevious, { onClick: () => handlePaginationClick(Math.max(1, currentPage - 1)), disabled: currentPage === 1 })),
34
- totalPages <= 0 ? (React.createElement("div", null, "No Matches Found")) : (getPageItems(currentPage, totalPages).map(item => {
35
- if (item === 'ellipsis') {
36
- return (React.createElement(PaginationItem, { key: "ellipsis" },
37
- React.createElement(PaginationEllipsis, null)));
38
- }
39
- return (React.createElement(PaginationItem, { key: item },
40
- React.createElement(PaginationLink, { isActive: item === currentPage, onClick: () => handlePaginationClick(item) }, item)));
41
- })),
42
- React.createElement(PaginationItem, null,
43
- React.createElement(PaginationNext, { onClick: () => handlePaginationClick(Math.min(totalPages, currentPage + 1)), disabled: currentPage === totalPages })))),
44
- React.createElement("div", { className: "jgis-stac-browser-results-list" }, isLoading ? (
45
- // TODO: Fancy spinner
46
- React.createElement("div", null, "Loading results...")) : (results.map(result => (React.createElement(Button, { key: result.id, className: "jgis-stac-browser-results-item", onClick: () => handleResultClick(result.id) }, formatResult(result))))))));
47
- };
48
- export default StacPanelResults;