@jupytergis/base 0.15.0 → 0.16.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 (393) hide show
  1. package/lib/commands/BaseCommandIDs.d.ts +5 -0
  2. package/lib/commands/BaseCommandIDs.js +5 -0
  3. package/lib/commands/index.js +218 -47
  4. package/lib/commands/operationCommands.js +2 -2
  5. package/lib/constants.js +5 -1
  6. package/lib/{panelview/annotationPanel.js → features/annotations/AnnotationsPanel.js} +1 -1
  7. package/lib/{annotations → features/annotations}/index.d.ts +1 -0
  8. package/lib/{annotations → features/annotations}/index.js +1 -0
  9. package/lib/{console → features/console}/consoleview.js +1 -1
  10. package/lib/{panelview/filter-panel → features/filter}/Filter.js +4 -4
  11. package/lib/{panelview/filter-panel → features/filter}/FilterRow.d.ts +3 -2
  12. package/lib/{panelview/filter-panel → features/filter}/FilterRow.js +2 -1
  13. package/lib/{panelview/identify-panel → features/identify}/IdentifyPanel.d.ts +2 -0
  14. package/lib/features/identify/IdentifyPanel.js +102 -0
  15. package/lib/features/identify/components/FeatureCard.d.ts +17 -0
  16. package/lib/features/identify/components/FeatureCard.js +26 -0
  17. package/lib/features/identify/components/FeatureCardHeader.d.ts +11 -0
  18. package/lib/features/identify/components/FeatureCardHeader.js +30 -0
  19. package/lib/features/identify/components/FeatureFloater.d.ts +7 -0
  20. package/lib/features/identify/components/FeatureFloater.js +19 -0
  21. package/lib/features/identify/components/FeaturePropertyList.d.ts +11 -0
  22. package/lib/features/identify/components/FeaturePropertyList.js +18 -0
  23. package/lib/features/identify/components/FeatureRow.d.ts +13 -0
  24. package/lib/features/identify/components/FeatureRow.js +25 -0
  25. package/lib/features/identify/components/PropertyEditors.d.ts +44 -0
  26. package/lib/features/identify/components/PropertyEditors.js +56 -0
  27. package/lib/features/identify/hooks/useIdentifyPropertyEditor.d.ts +11 -0
  28. package/lib/features/identify/hooks/useIdentifyPropertyEditor.js +132 -0
  29. package/lib/features/identify/types/editorTypes.d.ts +21 -0
  30. package/lib/features/identify/utils/getFeatureIdentifier.d.ts +5 -0
  31. package/lib/features/identify/utils/getFeatureIdentifier.js +14 -0
  32. package/lib/features/identify/utils/highlightLayer.d.ts +11 -0
  33. package/lib/features/identify/utils/highlightLayer.js +57 -0
  34. package/lib/features/identify/utils/highlightStyle.d.ts +7 -0
  35. package/lib/features/identify/utils/highlightStyle.js +40 -0
  36. package/lib/{dialogs/layerBrowserDialog.js → features/layer-browser/index.js} +2 -2
  37. package/lib/features/layers/forms/layer/geoTiffLayerForm.d.ts +3 -0
  38. package/lib/{formbuilder/objectform/layer/webGlLayerForm.js → features/layers/forms/layer/geoTiffLayerForm.js} +5 -5
  39. package/lib/{formbuilder/objectform → features/layers/forms}/layer/heatmapLayerForm.js +4 -4
  40. package/lib/{formbuilder/objectform → features/layers/forms}/layer/hillshadeLayerForm.js +4 -4
  41. package/lib/{formbuilder/objectform → features/layers/forms}/layer/index.d.ts +1 -1
  42. package/lib/{formbuilder/objectform → features/layers/forms}/layer/index.js +1 -1
  43. package/lib/{formbuilder/objectform → features/layers/forms}/layer/layerform.d.ts +1 -1
  44. package/lib/{formbuilder/objectform → features/layers/forms}/layer/layerform.js +4 -4
  45. package/lib/features/layers/forms/layer/storySegmentLayerForm.js +150 -0
  46. package/lib/{formbuilder/objectform → features/layers/forms}/layer/vectorlayerform.js +4 -4
  47. package/lib/{formbuilder/objectform → features/layers/forms}/source/geojsonsource.js +5 -5
  48. package/lib/features/layers/forms/source/geopackagesource.d.ts +3 -0
  49. package/lib/features/layers/forms/source/geopackagesource.js +93 -0
  50. package/lib/{formbuilder/objectform → features/layers/forms}/source/geotiffsource.js +5 -5
  51. package/lib/{formbuilder/objectform → features/layers/forms}/source/index.d.ts +1 -0
  52. package/lib/{formbuilder/objectform → features/layers/forms}/source/index.js +1 -0
  53. package/lib/{formbuilder/objectform → features/layers/forms}/source/pathbasedsource.js +5 -5
  54. package/lib/{formbuilder/objectform → features/layers/forms}/source/sourceform.d.ts +1 -1
  55. package/lib/{formbuilder/objectform → features/layers/forms}/source/sourceform.js +4 -4
  56. package/lib/{formbuilder/objectform → features/layers/forms}/source/tilesourceform.js +4 -4
  57. package/lib/{formbuilder/objectform → features/layers/forms}/source/wmsTileSource.d.ts +1 -1
  58. package/lib/{formbuilder/objectform → features/layers/forms}/source/wmsTileSource.js +6 -6
  59. package/lib/{dialogs → features/layers}/layerCreationFormDialog.d.ts +1 -1
  60. package/lib/{dialogs → features/layers}/layerCreationFormDialog.js +1 -1
  61. package/lib/features/layers/symbology/Grammar.d.ts +11 -0
  62. package/lib/features/layers/symbology/Grammar.js +235 -0
  63. package/lib/{dialogs/symbology/vector_layer/types → features/layers/symbology}/Heatmap.d.ts +1 -1
  64. package/lib/{dialogs/symbology/vector_layer/types → features/layers/symbology}/Heatmap.js +30 -10
  65. package/lib/{dialogs → features/layers}/symbology/classificationModes.d.ts +6 -6
  66. package/lib/{dialogs → features/layers}/symbology/classificationModes.js +48 -44
  67. package/lib/{dialogs → features/layers}/symbology/colorRampUtils.d.ts +1 -0
  68. package/lib/{dialogs → features/layers}/symbology/colorRampUtils.js +12 -1
  69. package/lib/features/layers/symbology/components/MappingRow.d.ts +40 -0
  70. package/lib/features/layers/symbology/components/MappingRow.js +516 -0
  71. package/lib/features/layers/symbology/components/NumericInput.d.ts +20 -0
  72. package/lib/features/layers/symbology/components/NumericInput.js +44 -0
  73. package/lib/features/layers/symbology/components/ScaleEditor.d.ts +33 -0
  74. package/lib/features/layers/symbology/components/ScaleEditor.js +221 -0
  75. package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampControls.d.ts +1 -1
  76. package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampControls.js +3 -2
  77. package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampSelector.d.ts +2 -1
  78. package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampSelector.js +6 -1
  79. package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ModeSelectRow.d.ts +1 -1
  80. package/lib/{dialogs → features/layers}/symbology/components/color_ramp/RgbaColorPicker.js +39 -9
  81. package/lib/{dialogs → features/layers}/symbology/components/color_stops/StopRow.d.ts +1 -1
  82. package/lib/{dialogs → features/layers}/symbology/components/color_stops/StopRow.js +1 -1
  83. package/lib/features/layers/symbology/grammarToOLLayer.d.ts +27 -0
  84. package/lib/features/layers/symbology/grammarToOLLayer.js +145 -0
  85. package/lib/features/layers/symbology/grammarToOLStyle.d.ts +32 -0
  86. package/lib/features/layers/symbology/grammarToOLStyle.js +467 -0
  87. package/lib/{dialogs → features/layers}/symbology/hooks/useGetBandInfo.d.ts +1 -1
  88. package/lib/{dialogs → features/layers}/symbology/hooks/useGetBandInfo.js +1 -1
  89. package/lib/{dialogs → features/layers}/symbology/hooks/useGetProperties.js +1 -1
  90. package/lib/{dialogs → features/layers}/symbology/hooks/useGetSymbology.js +4 -2
  91. package/lib/features/layers/symbology/styleBuilder.d.ts +21 -0
  92. package/lib/features/layers/symbology/styleBuilder.js +145 -0
  93. package/lib/{dialogs → features/layers}/symbology/symbologyDialog.d.ts +1 -1
  94. package/lib/{dialogs → features/layers}/symbology/symbologyDialog.js +12 -12
  95. package/lib/{dialogs → features/layers}/symbology/symbologyUtils.d.ts +18 -10
  96. package/lib/{dialogs → features/layers}/symbology/symbologyUtils.js +0 -84
  97. package/lib/{panelview/objectproperties.d.ts → features/objectproperties/index.d.ts} +1 -1
  98. package/lib/{panelview/objectproperties.js → features/objectproperties/index.js} +5 -10
  99. package/lib/{dialogs → features/processing}/ProcessingFormDialog.d.ts +1 -1
  100. package/lib/{dialogs → features/processing}/ProcessingFormDialog.js +28 -14
  101. package/lib/features/processing/forms/MapExtentToggle.d.ts +13 -0
  102. package/lib/features/processing/forms/MapExtentToggle.js +20 -0
  103. package/lib/features/processing/forms/clipRasterByExtentForm.d.ts +10 -0
  104. package/lib/features/processing/forms/clipRasterByExtentForm.js +99 -0
  105. package/lib/{formbuilder/objectform/process → features/processing/forms}/dissolveProcessForm.js +5 -5
  106. package/lib/{formbuilder/objectform → features/processing/forms}/processingForm.d.ts +1 -1
  107. package/lib/{formbuilder/objectform → features/processing/forms}/processingForm.js +6 -6
  108. package/lib/features/processing/forms/rasterizeForm.d.ts +10 -0
  109. package/lib/features/processing/forms/rasterizeForm.js +75 -0
  110. package/lib/features/processing/forms/useMapExtent.d.ts +22 -0
  111. package/lib/features/processing/forms/useMapExtent.js +57 -0
  112. package/lib/{processing → features/processing}/index.d.ts +19 -2
  113. package/lib/features/processing/index.js +1246 -0
  114. package/lib/{processing → features/processing}/processingCommands.d.ts +1 -1
  115. package/lib/features/processing/processingCommands.js +168 -0
  116. package/lib/features/processing/serverProcessing.d.ts +51 -0
  117. package/lib/features/processing/serverProcessing.js +99 -0
  118. package/lib/{stacBrowser → features/stac-browser}/components/StacPanel.js +2 -2
  119. package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/QueryableComboBox.js +5 -5
  120. package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/QueryableRow.js +1 -1
  121. package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/StacFilterExtensionPanel.js +2 -2
  122. package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/StacQueryableFilters.js +1 -1
  123. package/lib/{stacBrowser → features/stac-browser}/components/geodes/StacFilterSection.js +3 -3
  124. package/lib/{stacBrowser → features/stac-browser}/components/shared/StacPanelResults.js +3 -3
  125. package/lib/{stacBrowser → features/stac-browser}/components/shared/StacSpatialExtent.js +1 -1
  126. package/lib/{stacBrowser → features/stac-browser}/components/shared/StacTemporalExtent.js +1 -1
  127. package/lib/{stacBrowser → features/stac-browser}/context/StacResultsContext.js +2 -2
  128. package/lib/{stacBrowser → features/stac-browser}/hooks/useGeodesSearch.js +2 -2
  129. package/lib/{stacBrowser → features/stac-browser}/hooks/useStacFilterExtension.js +3 -3
  130. package/lib/{stacBrowser → features/stac-browser}/hooks/useStacSearch.js +1 -1
  131. package/lib/features/stac-browser/types/types.js +1 -0
  132. package/lib/{panelview/story-maps → features/story}/SpectaPanel.d.ts +4 -1
  133. package/lib/{panelview/story-maps → features/story}/SpectaPanel.js +3 -4
  134. package/lib/{panelview/story-maps → features/story}/StoryEditorPanel.js +1 -1
  135. package/lib/{panelview/story-maps → features/story}/StoryViewerPanel.d.ts +12 -11
  136. package/lib/features/story/StoryViewerPanel.js +64 -0
  137. package/lib/features/story/__tests__/fixtures/listStoryTestItems.d.ts +9 -0
  138. package/lib/features/story/__tests__/fixtures/listStoryTestItems.js +21 -0
  139. package/lib/features/story/components/ListStoryMapOverlayPanel.d.ts +10 -0
  140. package/lib/features/story/components/ListStoryMapOverlayPanel.js +11 -0
  141. package/lib/features/story/components/ListStoryMarkdownMeasurePane.d.ts +11 -0
  142. package/lib/features/story/components/ListStoryMarkdownMeasurePane.js +55 -0
  143. package/lib/features/story/components/ListStoryOverlayMarkdown.d.ts +15 -0
  144. package/lib/features/story/components/ListStoryOverlayMarkdown.js +93 -0
  145. package/lib/features/story/components/ListStoryStageOverlay.d.ts +12 -0
  146. package/lib/features/story/components/ListStoryStageOverlay.js +132 -0
  147. package/lib/features/story/components/ListStoryVirtualScrollTrack.d.ts +6 -0
  148. package/lib/features/story/components/ListStoryVirtualScrollTrack.js +7 -0
  149. package/lib/{panelview/story-maps → features/story}/components/SpectaDesktopView.d.ts +4 -2
  150. package/lib/features/story/components/SpectaDesktopView.js +67 -0
  151. package/lib/{panelview/story-maps → features/story}/components/SpectaMobileView.d.ts +2 -4
  152. package/lib/{panelview/story-maps → features/story}/components/SpectaMobileView.js +3 -3
  153. package/lib/features/story/components/SpectaSingleModeContent.d.ts +18 -0
  154. package/lib/features/story/components/SpectaSingleModeContent.js +8 -0
  155. package/lib/features/story/context/ListStoryScrollTrackContext.d.ts +15 -0
  156. package/lib/features/story/context/ListStoryScrollTrackContext.js +142 -0
  157. package/lib/features/story/hooks/useCurrentSegmentIndex.d.ts +3 -0
  158. package/lib/features/story/hooks/useCurrentSegmentIndex.js +17 -0
  159. package/lib/features/story/hooks/useListStoryScroll.d.ts +15 -0
  160. package/lib/features/story/hooks/useListStoryScroll.js +107 -0
  161. package/lib/features/story/hooks/useQueuedMarkdownHeightMeasure.d.ts +19 -0
  162. package/lib/features/story/hooks/useQueuedMarkdownHeightMeasure.js +56 -0
  163. package/lib/features/story/hooks/useStoryImagePreload.d.ts +1 -0
  164. package/lib/features/story/hooks/useStoryImagePreload.js +24 -0
  165. package/lib/{panelview/story-maps → features/story}/hooks/useStoryMap.d.ts +2 -7
  166. package/lib/{panelview/story-maps → features/story}/hooks/useStoryMap.js +20 -44
  167. package/lib/features/story/hooks/useStoryScrollState.d.ts +21 -0
  168. package/lib/features/story/hooks/useStoryScrollState.js +39 -0
  169. package/lib/features/story/hooks/useStorySegmentSync.d.ts +8 -0
  170. package/lib/features/story/hooks/useStorySegmentSync.js +51 -0
  171. package/lib/features/story/types/types.d.ts +38 -0
  172. package/lib/features/story/types/types.js +1 -0
  173. package/lib/features/story/utils/computeListStoryScrollState.d.ts +12 -0
  174. package/lib/features/story/utils/computeListStoryScrollState.js +70 -0
  175. package/lib/features/story/utils/listStoryMeasureQueue.d.ts +11 -0
  176. package/lib/features/story/utils/listStoryMeasureQueue.js +14 -0
  177. package/lib/features/story/utils/listStoryScrollTrack.d.ts +17 -0
  178. package/lib/features/story/utils/listStoryScrollTrack.js +72 -0
  179. package/lib/features/story/utils/spectaPresentation.d.ts +9 -0
  180. package/lib/features/story/utils/spectaPresentation.js +37 -0
  181. package/lib/features/story/utils/storySegmentViewItems.d.ts +5 -0
  182. package/lib/features/story/utils/storySegmentViewItems.js +30 -0
  183. package/lib/index.d.ts +11 -9
  184. package/lib/index.js +11 -9
  185. package/lib/keybindings.json +5 -0
  186. package/lib/mainview/OpenEOTileLayer.d.ts +49 -0
  187. package/lib/mainview/OpenEOTileLayer.js +179 -0
  188. package/lib/mainview/TemporalSlider.js +11 -9
  189. package/lib/mainview/geoJsonFeaturePatch.d.ts +9 -0
  190. package/lib/mainview/geoJsonFeaturePatch.js +43 -0
  191. package/lib/mainview/mainView.d.ts +90 -7
  192. package/lib/mainview/mainView.js +1196 -586
  193. package/lib/mainview/mainviewwidget.d.ts +5 -1
  194. package/lib/mainview/mainviewwidget.js +4 -2
  195. package/lib/shared/components/Button.d.ts +1 -1
  196. package/lib/shared/components/DropdownMenu.d.ts +1 -0
  197. package/lib/shared/components/DropdownMenu.js +3 -2
  198. package/lib/shared/components/NativeSelect.d.ts +8 -0
  199. package/lib/shared/components/NativeSelect.js +29 -0
  200. package/lib/shared/components/Tabs.d.ts +3 -3
  201. package/lib/shared/components/Tabs.js +5 -5
  202. package/lib/{formbuilder → shared/formbuilder}/creationform.js +71 -4
  203. package/lib/{formbuilder → shared/formbuilder}/editform.js +1 -1
  204. package/lib/{formbuilder → shared/formbuilder}/formselectors.d.ts +2 -2
  205. package/lib/{formbuilder → shared/formbuilder}/formselectors.js +10 -4
  206. package/lib/shared/formbuilder/index.d.ts +4 -0
  207. package/lib/shared/formbuilder/index.js +4 -0
  208. package/lib/{formbuilder → shared/formbuilder}/objectform/SchemaForm.d.ts +1 -1
  209. package/lib/{formbuilder → shared/formbuilder}/objectform/StoryEditorForm.d.ts +1 -1
  210. package/lib/{formbuilder → shared/formbuilder}/objectform/StoryEditorForm.js +1 -1
  211. package/lib/{formbuilder → shared/formbuilder}/objectform/components/LayerSelect.js +1 -1
  212. package/lib/{formbuilder → shared/formbuilder}/objectform/components/SegmentFormSymbology.js +4 -4
  213. package/lib/{formbuilder → shared/formbuilder}/objectform/components/SourcePropertiesField.js +1 -1
  214. package/lib/{formbuilder → shared/formbuilder}/objectform/components/StorySegmentReset.js +1 -1
  215. package/lib/{formbuilder → shared/formbuilder}/objectform/components/WmsTileSourceUrlInput.js +4 -4
  216. package/lib/{formbuilder → shared/formbuilder}/objectform/fileselectorwidget.js +8 -1
  217. package/lib/{formbuilder → shared/formbuilder}/objectform/schemaUtils.d.ts +3 -1
  218. package/lib/{formbuilder → shared/formbuilder}/objectform/schemaUtils.js +11 -0
  219. package/lib/{formbuilder → shared/formbuilder}/objectform/useSchemaFormState.d.ts +1 -1
  220. package/lib/{formbuilder → shared/formbuilder}/objectform/useSchemaFormState.js +1 -1
  221. package/lib/{icons.d.ts → shared/icons.d.ts} +2 -0
  222. package/lib/{icons.js → shared/icons.js} +28 -18
  223. package/lib/tools.d.ts +2 -0
  224. package/lib/tools.js +138 -4
  225. package/lib/types.d.ts +6 -1
  226. package/lib/types.js +6 -1
  227. package/lib/{menus.js → workspace/menus.js} +10 -2
  228. package/lib/workspace/panels/components/TabbedPanel.d.ts +17 -0
  229. package/lib/workspace/panels/components/TabbedPanel.js +19 -0
  230. package/lib/{panelview → workspace/panels}/components/layers.js +63 -18
  231. package/lib/workspace/panels/components/legendItem.js +680 -0
  232. package/lib/workspace/panels/hooks/useLayerTree.d.ts +19 -0
  233. package/lib/workspace/panels/hooks/useLayerTree.js +103 -0
  234. package/lib/workspace/panels/hooks/useRightPanelOptions.d.ts +27 -0
  235. package/lib/workspace/panels/hooks/useRightPanelOptions.js +72 -0
  236. package/lib/workspace/panels/hooks/useUIState.d.ts +2 -0
  237. package/lib/workspace/panels/hooks/useUIState.js +25 -0
  238. package/lib/{panelview → workspace/panels}/index.d.ts +1 -1
  239. package/lib/{panelview → workspace/panels}/index.js +1 -1
  240. package/lib/{panelview → workspace/panels}/leftpanel.d.ts +1 -1
  241. package/lib/workspace/panels/leftpanel.js +70 -0
  242. package/lib/{panelview/rightpanel.d.ts → workspace/panels/mergedpanel.d.ts} +6 -5
  243. package/lib/workspace/panels/mergedpanel.js +166 -0
  244. package/lib/workspace/panels/rightpanel.d.ts +25 -0
  245. package/lib/{panelview → workspace/panels}/rightpanel.js +53 -63
  246. package/lib/{statusbar → workspace/statusbar}/StatusBar.js +5 -4
  247. package/lib/{toolbar → workspace/toolbar}/widget.d.ts +2 -0
  248. package/lib/{toolbar → workspace/toolbar}/widget.js +33 -5
  249. package/lib/{widget.d.ts → workspace/widget.d.ts} +7 -5
  250. package/lib/{widget.js → workspace/widget.js} +16 -7
  251. package/package.json +16 -4
  252. package/style/base.css +109 -1
  253. package/style/icons/geopackage.svg +95 -0
  254. package/style/icons/pencil_solid.svg +7 -0
  255. package/style/identify.css +95 -0
  256. package/style/layerBrowser.css +28 -0
  257. package/style/leftPanel.css +25 -0
  258. package/style/shared/button.css +12 -0
  259. package/style/shared/dropdownMenu.css +9 -0
  260. package/style/shared/nativeSelect.css +75 -0
  261. package/style/shared/tabs.css +1 -1
  262. package/style/spectaProgressBar.css +0 -1
  263. package/style/storyPanel.css +140 -9
  264. package/style/storySpectaArticleOverlay.css +129 -0
  265. package/style/symbologyDialog.css +285 -27
  266. package/lib/dialogs/symbology/tiff_layer/TiffRendering.d.ts +0 -4
  267. package/lib/dialogs/symbology/tiff_layer/TiffRendering.js +0 -42
  268. package/lib/dialogs/symbology/tiff_layer/components/BandRow.d.ts +0 -23
  269. package/lib/dialogs/symbology/tiff_layer/components/BandRow.js +0 -59
  270. package/lib/dialogs/symbology/tiff_layer/types/MultibandColor.d.ts +0 -4
  271. package/lib/dialogs/symbology/tiff_layer/types/MultibandColor.js +0 -92
  272. package/lib/dialogs/symbology/tiff_layer/types/SingleBandPseudoColor.d.ts +0 -5
  273. package/lib/dialogs/symbology/tiff_layer/types/SingleBandPseudoColor.js +0 -313
  274. package/lib/dialogs/symbology/vector_layer/VectorRendering.d.ts +0 -4
  275. package/lib/dialogs/symbology/vector_layer/VectorRendering.js +0 -112
  276. package/lib/dialogs/symbology/vector_layer/components/ValueSelect.d.ts +0 -8
  277. package/lib/dialogs/symbology/vector_layer/components/ValueSelect.js +0 -9
  278. package/lib/dialogs/symbology/vector_layer/types/Canonical.d.ts +0 -4
  279. package/lib/dialogs/symbology/vector_layer/types/Canonical.js +0 -130
  280. package/lib/dialogs/symbology/vector_layer/types/Categorized.d.ts +0 -4
  281. package/lib/dialogs/symbology/vector_layer/types/Categorized.js +0 -243
  282. package/lib/dialogs/symbology/vector_layer/types/Graduated.d.ts +0 -4
  283. package/lib/dialogs/symbology/vector_layer/types/Graduated.js +0 -362
  284. package/lib/dialogs/symbology/vector_layer/types/SimpleSymbol.d.ts +0 -4
  285. package/lib/dialogs/symbology/vector_layer/types/SimpleSymbol.js +0 -120
  286. package/lib/formbuilder/index.d.ts +0 -4
  287. package/lib/formbuilder/index.js +0 -4
  288. package/lib/formbuilder/objectform/layer/storySegmentLayerForm.js +0 -95
  289. package/lib/formbuilder/objectform/layer/webGlLayerForm.d.ts +0 -3
  290. package/lib/formbuilder/objectform/process/index.d.ts +0 -1
  291. package/lib/formbuilder/objectform/process/index.js +0 -1
  292. package/lib/panelview/components/legendItem.js +0 -210
  293. package/lib/panelview/identify-panel/IdentifyPanel.js +0 -102
  294. package/lib/panelview/leftpanel.js +0 -139
  295. package/lib/panelview/story-maps/StoryViewerPanel.js +0 -116
  296. package/lib/panelview/story-maps/components/SpectaDesktopView.js +0 -49
  297. package/lib/processing/index.js +0 -200
  298. package/lib/processing/processingCommands.js +0 -67
  299. /package/lib/{panelview/annotationPanel.d.ts → features/annotations/AnnotationsPanel.d.ts} +0 -0
  300. /package/lib/{annotations → features/annotations}/components/Annotation.d.ts +0 -0
  301. /package/lib/{annotations → features/annotations}/components/Annotation.js +0 -0
  302. /package/lib/{annotations → features/annotations}/components/AnnotationFloater.d.ts +0 -0
  303. /package/lib/{annotations → features/annotations}/components/AnnotationFloater.js +0 -0
  304. /package/lib/{annotations → features/annotations}/components/Message.d.ts +0 -0
  305. /package/lib/{annotations → features/annotations}/components/Message.js +0 -0
  306. /package/lib/{annotations → features/annotations}/model.d.ts +0 -0
  307. /package/lib/{annotations → features/annotations}/model.js +0 -0
  308. /package/lib/{console → features/console}/consoleview.d.ts +0 -0
  309. /package/lib/{console → features/console}/index.d.ts +0 -0
  310. /package/lib/{console → features/console}/index.js +0 -0
  311. /package/lib/{panelview/filter-panel → features/filter}/Filter.d.ts +0 -0
  312. /package/lib/{stacBrowser/types/types.js → features/identify/types/editorTypes.js} +0 -0
  313. /package/lib/{dialogs/layerBrowserDialog.d.ts → features/layer-browser/index.d.ts} +0 -0
  314. /package/lib/{formbuilder/objectform → features/layers/forms}/layer/heatmapLayerForm.d.ts +0 -0
  315. /package/lib/{formbuilder/objectform → features/layers/forms}/layer/hillshadeLayerForm.d.ts +0 -0
  316. /package/lib/{formbuilder/objectform → features/layers/forms}/layer/storySegmentLayerForm.d.ts +0 -0
  317. /package/lib/{formbuilder/objectform → features/layers/forms}/layer/vectorlayerform.d.ts +0 -0
  318. /package/lib/{formbuilder/objectform → features/layers/forms}/source/geojsonsource.d.ts +0 -0
  319. /package/lib/{formbuilder/objectform → features/layers/forms}/source/geotiffsource.d.ts +0 -0
  320. /package/lib/{formbuilder/objectform → features/layers/forms}/source/pathbasedsource.d.ts +0 -0
  321. /package/lib/{formbuilder/objectform → features/layers/forms}/source/tilesourceform.d.ts +0 -0
  322. /package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampSelectorEntry.d.ts +0 -0
  323. /package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampSelectorEntry.js +0 -0
  324. /package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ModeSelectRow.js +0 -0
  325. /package/lib/{dialogs → features/layers}/symbology/components/color_ramp/RgbaColorPicker.d.ts +0 -0
  326. /package/lib/{dialogs → features/layers}/symbology/components/color_ramp/cmocean.json +0 -0
  327. /package/lib/{dialogs → features/layers}/symbology/components/color_stops/StopContainer.d.ts +0 -0
  328. /package/lib/{dialogs → features/layers}/symbology/components/color_stops/StopContainer.js +0 -0
  329. /package/lib/{dialogs → features/layers}/symbology/hooks/useEffectiveSymbologyParams.d.ts +0 -0
  330. /package/lib/{dialogs → features/layers}/symbology/hooks/useEffectiveSymbologyParams.js +0 -0
  331. /package/lib/{dialogs → features/layers}/symbology/hooks/useGetProperties.d.ts +0 -0
  332. /package/lib/{dialogs → features/layers}/symbology/hooks/useGetSymbology.d.ts +0 -0
  333. /package/lib/{dialogs → features/layers}/symbology/hooks/useOkSignal.d.ts +0 -0
  334. /package/lib/{dialogs → features/layers}/symbology/hooks/useOkSignal.js +0 -0
  335. /package/lib/{formbuilder/objectform/process → features/processing/forms}/dissolveProcessForm.d.ts +0 -0
  336. /package/lib/{processing → features/processing}/processingFormToParam.d.ts +0 -0
  337. /package/lib/{processing → features/processing}/processingFormToParam.js +0 -0
  338. /package/lib/{stacBrowser → features/stac-browser}/components/StacPanel.d.ts +0 -0
  339. /package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/QueryableComboBox.d.ts +0 -0
  340. /package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/QueryableRow.d.ts +0 -0
  341. /package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/StacFilterExtensionPanel.d.ts +0 -0
  342. /package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/StacQueryableFilters.d.ts +0 -0
  343. /package/lib/{stacBrowser → features/stac-browser}/components/geodes/StacFilterSection.d.ts +0 -0
  344. /package/lib/{stacBrowser → features/stac-browser}/components/geodes/StacGeodesFilterPanel.d.ts +0 -0
  345. /package/lib/{stacBrowser → features/stac-browser}/components/geodes/StacGeodesFilterPanel.js +0 -0
  346. /package/lib/{stacBrowser → features/stac-browser}/components/shared/StacPanelResults.d.ts +0 -0
  347. /package/lib/{stacBrowser → features/stac-browser}/components/shared/StacSpatialExtent.d.ts +0 -0
  348. /package/lib/{stacBrowser → features/stac-browser}/components/shared/StacTemporalExtent.d.ts +0 -0
  349. /package/lib/{stacBrowser → features/stac-browser}/constants.d.ts +0 -0
  350. /package/lib/{stacBrowser → features/stac-browser}/constants.js +0 -0
  351. /package/lib/{stacBrowser → features/stac-browser}/context/StacResultsContext.d.ts +0 -0
  352. /package/lib/{stacBrowser → features/stac-browser}/hooks/useGeodesSearch.d.ts +0 -0
  353. /package/lib/{stacBrowser → features/stac-browser}/hooks/useStacFilterExtension.d.ts +0 -0
  354. /package/lib/{stacBrowser → features/stac-browser}/hooks/useStacSearch.d.ts +0 -0
  355. /package/lib/{stacBrowser → features/stac-browser}/index.d.ts +0 -0
  356. /package/lib/{stacBrowser → features/stac-browser}/index.js +0 -0
  357. /package/lib/{stacBrowser → features/stac-browser}/types/types.d.ts +0 -0
  358. /package/lib/{panelview/story-maps → features/story}/StoryEditorPanel.d.ts +0 -0
  359. /package/lib/{panelview/story-maps → features/story}/components/PreviewModeSwitch.d.ts +0 -0
  360. /package/lib/{panelview/story-maps → features/story}/components/PreviewModeSwitch.js +0 -0
  361. /package/lib/{panelview/story-maps → features/story}/components/StoryContentSection.d.ts +0 -0
  362. /package/lib/{panelview/story-maps → features/story}/components/StoryContentSection.js +0 -0
  363. /package/lib/{panelview/story-maps → features/story}/components/StoryImageSection.d.ts +0 -0
  364. /package/lib/{panelview/story-maps → features/story}/components/StoryImageSection.js +0 -0
  365. /package/lib/{panelview/story-maps → features/story}/components/StoryNavBar.d.ts +0 -0
  366. /package/lib/{panelview/story-maps → features/story}/components/StoryNavBar.js +0 -0
  367. /package/lib/{panelview/story-maps → features/story}/components/StorySubtitleSection.d.ts +0 -0
  368. /package/lib/{panelview/story-maps → features/story}/components/StorySubtitleSection.js +0 -0
  369. /package/lib/{panelview/story-maps → features/story}/components/StoryTitleSection.d.ts +0 -0
  370. /package/lib/{panelview/story-maps → features/story}/components/StoryTitleSection.js +0 -0
  371. /package/lib/{formbuilder → shared/formbuilder}/creationform.d.ts +0 -0
  372. /package/lib/{formbuilder → shared/formbuilder}/editform.d.ts +0 -0
  373. /package/lib/{formbuilder → shared/formbuilder}/objectform/SchemaForm.js +0 -0
  374. /package/lib/{formbuilder → shared/formbuilder}/objectform/components/LayerSelect.d.ts +0 -0
  375. /package/lib/{formbuilder → shared/formbuilder}/objectform/components/OpacitySlider.d.ts +0 -0
  376. /package/lib/{formbuilder → shared/formbuilder}/objectform/components/OpacitySlider.js +0 -0
  377. /package/lib/{formbuilder → shared/formbuilder}/objectform/components/SegmentFormSymbology.d.ts +0 -0
  378. /package/lib/{formbuilder → shared/formbuilder}/objectform/components/SourcePropertiesField.d.ts +0 -0
  379. /package/lib/{formbuilder → shared/formbuilder}/objectform/components/StorySegmentReset.d.ts +0 -0
  380. /package/lib/{formbuilder → shared/formbuilder}/objectform/components/WmsTileSourceUrlInput.d.ts +0 -0
  381. /package/lib/{formbuilder → shared/formbuilder}/objectform/fileselectorwidget.d.ts +0 -0
  382. /package/lib/{store.d.ts → shared/store.d.ts} +0 -0
  383. /package/lib/{store.js → shared/store.js} +0 -0
  384. /package/lib/{menus.d.ts → workspace/menus.d.ts} +0 -0
  385. /package/lib/{panelview → workspace/panels}/components/layers.d.ts +0 -0
  386. /package/lib/{panelview → workspace/panels}/components/legendItem.d.ts +0 -0
  387. /package/lib/{panelview → workspace/panels}/header.d.ts +0 -0
  388. /package/lib/{panelview → workspace/panels}/header.js +0 -0
  389. /package/lib/{statusbar → workspace/statusbar}/SpectaPresentationProgressBar.d.ts +0 -0
  390. /package/lib/{statusbar → workspace/statusbar}/SpectaPresentationProgressBar.js +0 -0
  391. /package/lib/{statusbar → workspace/statusbar}/StatusBar.d.ts +0 -0
  392. /package/lib/{toolbar → workspace/toolbar}/index.d.ts +0 -0
  393. /package/lib/{toolbar → workspace/toolbar}/index.js +0 -0
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Inline scale editor for one IMapping.
3
+ * Renders a different UI for each scale scheme.
4
+ */
5
+ import { UUID } from '@lumino/coreutils';
6
+ import React, { useCallback, useEffect, useState } from 'react';
7
+ import { NumericInput } from "./NumericInput";
8
+ import ColorRampSelector from "./color_ramp/ColorRampSelector";
9
+ import RgbaColorPicker from "./color_ramp/RgbaColorPicker";
10
+ import StopContainer from "./color_stops/StopContainer";
11
+ import { computeCategorizedColorStops, computeGraduatedColorStops, } from "../styleBuilder";
12
+ function stopsToRows(stops) {
13
+ return stops.map(s => ({
14
+ id: UUID.uuid4(),
15
+ stop: s.stop,
16
+ output: s.color,
17
+ }));
18
+ }
19
+ function rowsToColorStops(rows) {
20
+ return rows
21
+ .filter(r => r.output !== undefined)
22
+ .map(r => ({ stop: r.stop, color: r.output }));
23
+ }
24
+ const MODE_OPTIONS = [
25
+ 'equal interval',
26
+ 'quantile',
27
+ 'jenks',
28
+ 'pretty',
29
+ 'logarithmic',
30
+ ];
31
+ export const ConstantEditor = ({ scale, onChange, }) => {
32
+ if (scale.scheme === 'constant_num') {
33
+ return (React.createElement("div", { className: "jp-gis-symbology-row" },
34
+ React.createElement("label", null, "Value"),
35
+ React.createElement(NumericInput, { className: "jp-mod-styled", value: scale.params.value, onChange: v => onChange({ scheme: 'constant_num', params: { value: v } }) })));
36
+ }
37
+ return (React.createElement("div", { className: "jp-gis-symbology-row" },
38
+ React.createElement("label", null, "Color"),
39
+ React.createElement(RgbaColorPicker, { color: scale.params.value, onChange: color => onChange({ scheme: 'constant_rgba', params: { value: color } }) })));
40
+ };
41
+ export const ColorRampEditor = ({ scale, field, featureValues, onChange, }) => {
42
+ var _a, _b, _c, _d;
43
+ const { params } = scale;
44
+ const [stopRows, setStopRows] = useState(params.colorStops ? stopsToRows(params.colorStops) : []);
45
+ const update = useCallback((patch) => onChange({ scheme: 'colorRamp', params: Object.assign(Object.assign({}, params), patch) }), [params, onChange]);
46
+ // Auto-populate domain from data when the field is known and domain is unset.
47
+ useEffect(() => {
48
+ var _a;
49
+ if (!field || params.domain) {
50
+ return;
51
+ }
52
+ const values = Array.from((_a = featureValues[field]) !== null && _a !== void 0 ? _a : []).filter((v) => Number.isFinite(v));
53
+ if (values.length === 0) {
54
+ return;
55
+ }
56
+ const min = Math.min(...values);
57
+ const max = Math.max(...values);
58
+ if (min !== max) {
59
+ update({ domain: [min, max] });
60
+ }
61
+ }, [field, featureValues]); // intentionally omits `update` to avoid loop
62
+ const classify = () => {
63
+ var _a, _b, _c;
64
+ if (!field) {
65
+ return;
66
+ }
67
+ const values = Array.from((_a = featureValues[field]) !== null && _a !== void 0 ? _a : []).filter((v) => Number.isFinite(v));
68
+ const computed = computeGraduatedColorStops({
69
+ renderType: 'Graduated',
70
+ nClasses: params.nShades,
71
+ mode: params.mode,
72
+ colorRamp: params.name,
73
+ reverseRamp: params.reverse,
74
+ vmin: (_b = params.domain) === null || _b === void 0 ? void 0 : _b[0],
75
+ vmax: (_c = params.domain) === null || _c === void 0 ? void 0 : _c[1],
76
+ }, values);
77
+ const rows = computed.map(s => ({
78
+ id: UUID.uuid4(),
79
+ stop: s.value,
80
+ output: s.color,
81
+ }));
82
+ setStopRows(rows);
83
+ update({
84
+ colorStops: computed.map(s => ({
85
+ stop: s.value,
86
+ color: s.color,
87
+ })),
88
+ });
89
+ };
90
+ const handleStopRowsChange = (rows) => {
91
+ setStopRows(rows);
92
+ update({
93
+ colorStops: rowsToColorStops(rows),
94
+ });
95
+ };
96
+ return (React.createElement("div", { className: "jp-gis-color-ramp-container" },
97
+ React.createElement("div", { className: "jp-gis-symbology-row" },
98
+ React.createElement("label", null, "Ramp"),
99
+ React.createElement(ColorRampSelector, { selectedRamp: params.name, setSelected: name => update({ name }), reverse: params.reverse, setReverse: v => update({ reverse: typeof v === 'function' ? v(params.reverse) : v }) })),
100
+ React.createElement("div", { className: "jp-gis-symbology-row" },
101
+ React.createElement("label", null, "Mode"),
102
+ React.createElement("div", { className: "jp-select-wrapper" },
103
+ React.createElement("select", { className: "jp-mod-styled", value: params.mode, onChange: e => update({ mode: e.target.value }) }, MODE_OPTIONS.map(m => (React.createElement("option", { key: m, value: m }, m)))))),
104
+ React.createElement("div", { className: "jp-gis-symbology-row" },
105
+ React.createElement("label", null, "Classes"),
106
+ React.createElement(NumericInput, { className: "jp-mod-styled", value: params.nShades, onChange: v => update({ nShades: v }) })),
107
+ React.createElement("div", { className: "jp-gis-symbology-row" },
108
+ React.createElement("label", null, "Domain"),
109
+ React.createElement("div", { className: "jp-gis-domain-inputs" },
110
+ React.createElement(NumericInput, { className: "jp-mod-styled", placeholder: "min", value: (_b = (_a = params.domain) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : 0, onChange: v => { var _a, _b; return update({ domain: [v, (_b = (_a = params.domain) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : v] }); } }),
111
+ React.createElement(NumericInput, { className: "jp-mod-styled", placeholder: "max", value: (_d = (_c = params.domain) === null || _c === void 0 ? void 0 : _c[1]) !== null && _d !== void 0 ? _d : 0, onChange: v => { var _a, _b; return update({ domain: [(_b = (_a = params.domain) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : v, v] }); } }))),
112
+ React.createElement("div", { className: "jp-gis-symbology-row" },
113
+ React.createElement("label", null, "Fallback"),
114
+ React.createElement(RgbaColorPicker, { color: params.fallback, onChange: color => update({ fallback: color }) })),
115
+ React.createElement("button", { className: "jp-Dialog-button jp-mod-accept jp-mod-styled", disabled: !field, onClick: classify }, "Classify"),
116
+ stopRows.length > 0 && (React.createElement(StopContainer, { selectedMethod: "color", stopRows: stopRows, setStopRows: handleStopRowsChange }))));
117
+ };
118
+ export const CategoricalEditor = ({ scale, field, featureValues, onChange, }) => {
119
+ var _a;
120
+ const { params } = scale;
121
+ const initialRows = params.colorStops
122
+ ? stopsToRows(params.colorStops)
123
+ : [];
124
+ const [stopRows, setStopRows] = useState(initialRows);
125
+ const update = useCallback((patch) => onChange({ scheme: 'categorical', params: Object.assign(Object.assign({}, params), patch) }), [params, onChange]);
126
+ const classify = () => {
127
+ var _a, _b;
128
+ if (!field) {
129
+ return;
130
+ }
131
+ const values = Array.from((_a = featureValues[field]) !== null && _a !== void 0 ? _a : []);
132
+ const computed = computeCategorizedColorStops({
133
+ renderType: 'Categorized',
134
+ colorRamp: params.colorRamp,
135
+ reverseRamp: (_b = params.reverse) !== null && _b !== void 0 ? _b : false,
136
+ }, values);
137
+ const rows = computed.map(s => ({
138
+ id: UUID.uuid4(),
139
+ stop: s.value,
140
+ output: s.color,
141
+ }));
142
+ setStopRows(rows);
143
+ update({
144
+ colorStops: computed.map(s => ({
145
+ stop: s.value,
146
+ color: s.color,
147
+ })),
148
+ });
149
+ };
150
+ const handleStopRowsChange = (rows) => {
151
+ setStopRows(rows);
152
+ update({ colorStops: rowsToColorStops(rows) });
153
+ };
154
+ return (React.createElement("div", { className: "jp-gis-color-ramp-container" },
155
+ React.createElement("div", { className: "jp-gis-symbology-row" },
156
+ React.createElement("label", null, "Ramp"),
157
+ React.createElement(ColorRampSelector, { selectedRamp: params.colorRamp, setSelected: colorRamp => update({ colorRamp }), reverse: (_a = params.reverse) !== null && _a !== void 0 ? _a : false, setReverse: v => {
158
+ var _a;
159
+ return update({
160
+ reverse: typeof v === 'function' ? v((_a = params.reverse) !== null && _a !== void 0 ? _a : false) : v,
161
+ });
162
+ } })),
163
+ React.createElement("div", { className: "jp-gis-symbology-row" },
164
+ React.createElement("label", null, "Fallback"),
165
+ React.createElement(RgbaColorPicker, { color: params.fallback, onChange: color => update({ fallback: color }) })),
166
+ React.createElement("button", { className: "jp-Dialog-button jp-mod-accept jp-mod-styled", disabled: !field, onClick: classify }, "Classify"),
167
+ stopRows.length > 0 && (React.createElement(StopContainer, { selectedMethod: "color", stopRows: stopRows, setStopRows: handleStopRowsChange }))));
168
+ };
169
+ export const ScalarEditor = ({ scale, field, featureValues, onChange, }) => {
170
+ const { params } = scale;
171
+ const update = useCallback((patch) => onChange({ scheme: 'scalar', params: Object.assign(Object.assign({}, params), patch) }), [params, onChange]);
172
+ const [stopRows, setStopRows] = useState(params.scalarStops
173
+ ? params.scalarStops.map(s => ({
174
+ id: UUID.uuid4(),
175
+ stop: s.stop,
176
+ output: s.output,
177
+ }))
178
+ : []);
179
+ const classify = () => {
180
+ const inMin = params.domain[0];
181
+ const inMax = params.domain[1];
182
+ const outMin = params.range[0];
183
+ const outMax = params.range[1];
184
+ const rows = [
185
+ { id: UUID.uuid4(), stop: inMin, output: outMin },
186
+ { id: UUID.uuid4(), stop: inMax, output: outMax },
187
+ ];
188
+ setStopRows(rows);
189
+ update({
190
+ scalarStops: [
191
+ { stop: inMin, output: outMin },
192
+ { stop: inMax, output: outMax },
193
+ ],
194
+ });
195
+ };
196
+ const handleStopRowsChange = (rows) => {
197
+ setStopRows(rows);
198
+ update({
199
+ scalarStops: rows.map(r => ({
200
+ stop: r.stop,
201
+ output: r.output,
202
+ })),
203
+ });
204
+ };
205
+ return (React.createElement("div", { className: "jp-gis-color-ramp-container" },
206
+ React.createElement("div", { className: "jp-gis-symbology-row" },
207
+ React.createElement("label", null, "Input range"),
208
+ React.createElement("div", { className: "jp-gis-domain-inputs" },
209
+ React.createElement(NumericInput, { className: "jp-mod-styled", placeholder: "min", value: params.domain[0], onChange: v => update({ domain: [v, params.domain[1]] }) }),
210
+ React.createElement(NumericInput, { className: "jp-mod-styled", placeholder: "max", value: params.domain[1], onChange: v => update({ domain: [params.domain[0], v] }) }))),
211
+ React.createElement("div", { className: "jp-gis-symbology-row" },
212
+ React.createElement("label", null, "Output range"),
213
+ React.createElement("div", { className: "jp-gis-domain-inputs" },
214
+ React.createElement(NumericInput, { className: "jp-mod-styled", placeholder: "min", value: params.range[0], onChange: v => update({ range: [v, params.range[1]] }) }),
215
+ React.createElement(NumericInput, { className: "jp-mod-styled", placeholder: "max", value: params.range[1], onChange: v => update({ range: [params.range[0], v] }) }))),
216
+ React.createElement("div", { className: "jp-gis-symbology-row" },
217
+ React.createElement("label", null, "Fallback"),
218
+ React.createElement(NumericInput, { className: "jp-mod-styled", value: params.fallback, onChange: v => update({ fallback: v }) })),
219
+ React.createElement("button", { className: "jp-Dialog-button jp-mod-accept jp-mod-styled", onClick: classify }, "Set stops"),
220
+ stopRows.length > 0 && (React.createElement(StopContainer, { selectedMethod: "radius", stopRows: stopRows, setStopRows: handleStopRowsChange }))));
221
+ };
@@ -18,7 +18,7 @@
18
18
  */
19
19
  import { IDict } from '@jupytergis/schema';
20
20
  import React from 'react';
21
- import { ClassificationMode } from "../../../../types";
21
+ import { ClassificationMode } from "../../../../../types";
22
22
  import { ColorRampName } from '../../colorRampUtils';
23
23
  interface IColorRampControlsProps {
24
24
  modeOptions: ClassificationMode[];
@@ -18,19 +18,20 @@
18
18
  */
19
19
  import { Button } from '@jupyterlab/ui-components';
20
20
  import React, { useEffect, useState } from 'react';
21
- import { LoadingIcon } from "../../../../shared/components/loading";
21
+ import { LoadingIcon } from "../../../../../shared/components/loading";
22
22
  import ColorRampSelector from './ColorRampSelector';
23
23
  import ModeSelectRow from './ModeSelectRow';
24
24
  import { COLOR_RAMP_DEFAULTS } from '../../colorRampUtils';
25
25
  const isValidNumberOfShades = (value) => !isNaN(value) && value > 0;
26
26
  const ColorRampControls = ({ layerParams, modeOptions, classifyFunc, showModeRow, showRampSelector, }) => {
27
+ var _a;
27
28
  const [selectedRamp, setSelectedRamp] = useState('viridis');
28
29
  const [selectedMode, setSelectedMode] = useState('equal interval');
29
30
  const [numberOfShades, setNumberOfShades] = useState(9);
30
31
  const [isLoading, setIsLoading] = useState(false);
31
32
  const [reverseRamp, setReverseRamp] = useState(false);
32
33
  const [warning, setWarning] = useState(null);
33
- const symbologyState = layerParams.symbologyState;
34
+ const symbologyState = (_a = layerParams.symbologyState) !== null && _a !== void 0 ? _a : {};
34
35
  useEffect(() => {
35
36
  if (symbologyState) {
36
37
  populateOptions();
@@ -11,12 +11,13 @@
11
11
  * - `setSelected`: Callback fired with the new ramp when selected.
12
12
  */
13
13
  import React from 'react';
14
- import { ColorRampName } from "../../colorRampUtils";
14
+ import { ColorRampName, IColorMap } from "../../colorRampUtils";
15
15
  interface IColorRampSelectorProps {
16
16
  selectedRamp: ColorRampName;
17
17
  setSelected: (value: ColorRampName) => void;
18
18
  reverse: boolean;
19
19
  setReverse: React.Dispatch<React.SetStateAction<boolean>>;
20
+ colorMaps?: IColorMap[];
20
21
  }
21
22
  declare const ColorRampSelector: React.FC<IColorRampSelectorProps>;
22
23
  export default ColorRampSelector;
@@ -14,13 +14,18 @@ import { Button } from '@jupyterlab/ui-components';
14
14
  import React, { useEffect, useRef, useState } from 'react';
15
15
  import { useColorMapList, drawColorRamp, } from "../../colorRampUtils";
16
16
  import ColorRampSelectorEntry from './ColorRampSelectorEntry';
17
- const ColorRampSelector = ({ selectedRamp, setSelected, reverse, setReverse, }) => {
17
+ const ColorRampSelector = ({ selectedRamp, setSelected, reverse, setReverse, colorMaps: propColorMaps, }) => {
18
18
  const containerRef = useRef(null);
19
19
  const [isOpen, setIsOpen] = useState(false);
20
20
  const [colorMaps, setColorMaps] = useState([]);
21
21
  const canvasWidth = 512;
22
22
  const canvasHeight = 30;
23
23
  useColorMapList(setColorMaps);
24
+ useEffect(() => {
25
+ if (propColorMaps) {
26
+ setColorMaps(propColorMaps);
27
+ }
28
+ }, [propColorMaps]);
24
29
  useEffect(() => {
25
30
  if (colorMaps.length > 0) {
26
31
  updateCanvas(selectedRamp);
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { ClassificationMode } from "../../../../types";
2
+ import { ClassificationMode } from "../../../../../types";
3
3
  interface IModeSelectRowProps {
4
4
  numberOfShades: number;
5
5
  setNumberOfShades: React.Dispatch<React.SetStateAction<number>>;
@@ -8,6 +8,12 @@ import { RGBA_INDEX, } from "../../colorRampUtils";
8
8
  const RgbaColorPicker = ({ color, onChange, }) => {
9
9
  const [open, setOpen] = useState(false);
10
10
  const containerRef = useRef(null);
11
+ const swatchRef = useRef(null);
12
+ const popupRef = useRef(null);
13
+ const [popupPos, setPopupPos] = useState({
14
+ top: 0,
15
+ left: 0,
16
+ });
11
17
  const [r, g, b, a] = color;
12
18
  const [inputs, setInputs] = useState({
13
19
  r: String(Math.round(r)),
@@ -24,14 +30,23 @@ const RgbaColorPicker = ({ color, onChange, }) => {
24
30
  a: String(Math.round(a * 100)),
25
31
  });
26
32
  }, [r, g, b, a]);
27
- const swatchStyle = {
28
- background: `rgba(${r},${g},${b},${a})`,
33
+ const swatchWrapStyle = {
34
+ position: 'relative',
29
35
  width: 28,
30
36
  height: 28,
31
37
  borderRadius: 4,
32
38
  border: '1px solid var(--jp-border-color1, #ccc)',
33
39
  cursor: 'pointer',
34
40
  flexShrink: 0,
41
+ overflow: 'hidden',
42
+ // Checkerboard to reveal transparency.
43
+ backgroundImage: 'repeating-conic-gradient(#bbb 0% 25%, #fff 0% 50%)',
44
+ backgroundSize: '8px 8px',
45
+ };
46
+ const swatchColorStyle = {
47
+ position: 'absolute',
48
+ inset: 0,
49
+ background: `rgba(${r},${g},${b},${a})`,
35
50
  };
36
51
  const handlePickerChange = useCallback((c) => {
37
52
  onChange([c.r, c.g, c.b, c.a]);
@@ -62,8 +77,11 @@ const RgbaColorPicker = ({ color, onChange, }) => {
62
77
  return;
63
78
  }
64
79
  const handleClickOutside = (e) => {
80
+ const target = e.target;
65
81
  if (containerRef.current &&
66
- !containerRef.current.contains(e.target)) {
82
+ !containerRef.current.contains(target) &&
83
+ popupRef.current &&
84
+ !popupRef.current.contains(target)) {
67
85
  setOpen(false);
68
86
  }
69
87
  };
@@ -71,12 +89,24 @@ const RgbaColorPicker = ({ color, onChange, }) => {
71
89
  return () => document.removeEventListener('mousedown', handleClickOutside);
72
90
  }, [open]);
73
91
  return (React.createElement("div", { ref: containerRef, className: "jp-gis-rgba-picker", style: { position: 'relative' } },
74
- React.createElement("div", { style: swatchStyle, onClick: () => setOpen(v => !v) }),
75
- open && (React.createElement("div", { style: {
76
- position: 'absolute',
77
- zIndex: 1000,
78
- top: '110%',
79
- left: 0,
92
+ React.createElement("div", { ref: swatchRef, style: swatchWrapStyle, onClick: () => {
93
+ if (!open && swatchRef.current) {
94
+ const rect = swatchRef.current.getBoundingClientRect();
95
+ // Prefer opening below; flip above if too close to bottom.
96
+ const popupH = 280;
97
+ const top = rect.bottom + popupH > window.innerHeight
98
+ ? rect.top - popupH - 4
99
+ : rect.bottom + 4;
100
+ setPopupPos({ top, left: rect.left });
101
+ }
102
+ setOpen(v => !v);
103
+ } },
104
+ React.createElement("div", { style: swatchColorStyle })),
105
+ open && (React.createElement("div", { ref: popupRef, style: {
106
+ position: 'fixed',
107
+ zIndex: 10000,
108
+ top: popupPos.top,
109
+ left: popupPos.left,
80
110
  background: 'var(--jp-layout-color1, #fff)',
81
111
  border: '1px solid var(--jp-border-color1, #ccc)',
82
112
  borderRadius: 6,
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { IStopRow } from "../../symbologyDialog";
3
- import { SymbologyValue } from "../../../../types";
3
+ import { SymbologyValue } from "../../../../../types";
4
4
  declare const StopRow: React.FC<{
5
5
  index: number;
6
6
  dataValue: number | string;
@@ -2,7 +2,7 @@ import { faTrash } from '@fortawesome/free-solid-svg-icons';
2
2
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
3
  import { Button } from '@jupyterlab/ui-components';
4
4
  import React, { useEffect, useRef } from 'react';
5
- import { colorToRgba } from "../../colorRampUtils";
5
+ import { colorToRgba, } from "../../colorRampUtils";
6
6
  import RgbaColorPicker from "../color_ramp/RgbaColorPicker";
7
7
  const StopRow = ({ index, dataValue, symbologyValue, stopRows, setStopRows, deleteRow, useNumber, }) => {
8
8
  const inputRef = useRef(null);
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Grammar → OL layer compiler.
3
+ *
4
+ * grammarToOLLayer compiles an IGrammarSymbologyState into a single OL layer:
5
+ *
6
+ * • one non-KDE grammar layer → VectorImageLayer
7
+ * • one KDE grammar layer → HeatmapLayer
8
+ * • multiple grammar layers → LayerGroup containing the above
9
+ *
10
+ * All multi-layer and transform decisions are encapsulated here; callers
11
+ * treat the result as an opaque OL Layer.
12
+ */
13
+ import { IGrammarSymbologyState } from '@jupytergis/schema';
14
+ import { Layer } from 'ol/layer';
15
+ import LayerGroup from 'ol/layer/Group';
16
+ import { Vector as VectorSource } from 'ol/source';
17
+ /**
18
+ * Compile a Grammar symbology state into a single OL layer.
19
+ *
20
+ * isRaster=true: each grammar layer → WebGLTile (pixel-color channel → color
21
+ * style), $band-N fields → ['band', N] expressions.
22
+ * isRaster=false (default): non-KDE → VectorImageLayer, KDE → HeatmapLayer.
23
+ *
24
+ * When the state contains multiple grammar layers a LayerGroup is returned;
25
+ * otherwise the appropriate single layer type is returned directly.
26
+ */
27
+ export declare function grammarToOLLayer(state: IGrammarSymbologyState, source: VectorSource | any, opacity: number, visible: boolean, featureValues?: unknown[], isRaster?: boolean): Layer | LayerGroup;
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Grammar → OL layer compiler.
3
+ *
4
+ * grammarToOLLayer compiles an IGrammarSymbologyState into a single OL layer:
5
+ *
6
+ * • one non-KDE grammar layer → VectorImageLayer
7
+ * • one KDE grammar layer → HeatmapLayer
8
+ * • multiple grammar layers → LayerGroup containing the above
9
+ *
10
+ * All multi-layer and transform decisions are encapsulated here; callers
11
+ * treat the result as an opaque OL Layer.
12
+ */
13
+ import { Heatmap as HeatmapLayer, VectorImage as VectorImageLayer, WebGLTile as WebGLTileLayer, } from 'ol/layer';
14
+ import LayerGroup from 'ol/layer/Group';
15
+ import { getColorMap } from './colorRampUtils';
16
+ import { grammarToOLStyle } from './grammarToOLStyle';
17
+ import { DEFAULT_FLAT_STYLE } from './styleBuilder';
18
+ // Default OL heatmap gradient (cool → warm).
19
+ const DEFAULT_GRADIENT = ['#00f', '#0ff', '#0f0', '#ff0', '#f00'];
20
+ // ---------------------------------------------------------------------------
21
+ // Public API
22
+ // ---------------------------------------------------------------------------
23
+ /**
24
+ * Compile a Grammar symbology state into a single OL layer.
25
+ *
26
+ * isRaster=true: each grammar layer → WebGLTile (pixel-color channel → color
27
+ * style), $band-N fields → ['band', N] expressions.
28
+ * isRaster=false (default): non-KDE → VectorImageLayer, KDE → HeatmapLayer.
29
+ *
30
+ * When the state contains multiple grammar layers a LayerGroup is returned;
31
+ * otherwise the appropriate single layer type is returned directly.
32
+ */
33
+ export function grammarToOLLayer(state, source, opacity, visible, featureValues = [], isRaster = false) {
34
+ var _a;
35
+ const grammarLayers = (_a = state.layers) !== null && _a !== void 0 ? _a : [];
36
+ if (isRaster) {
37
+ const subLayers = grammarLayers.map(grammarLayer => compileRasterLayer(grammarLayer, source, opacity, visible, featureValues));
38
+ if (subLayers.length === 1) {
39
+ return subLayers[0];
40
+ }
41
+ // Empty or multi-layer: wrap in a group (empty group renders nothing).
42
+ return new LayerGroup({ opacity, visible, layers: subLayers });
43
+ }
44
+ if (grammarLayers.length === 0) {
45
+ // No grammar layers defined yet — return an empty vector layer so the map
46
+ // has a valid layer object to call setVisible/setOpacity on.
47
+ return new VectorImageLayer({ opacity, visible, source });
48
+ }
49
+ const subLayers = grammarLayers.map(grammarLayer => compileGrammarLayer(grammarLayer, source, opacity, visible, featureValues));
50
+ if (subLayers.length === 1) {
51
+ return subLayers[0];
52
+ }
53
+ return new LayerGroup({ opacity, visible, layers: subLayers });
54
+ }
55
+ // ---------------------------------------------------------------------------
56
+ // Per grammar-layer compilation
57
+ // ---------------------------------------------------------------------------
58
+ function compileGrammarLayer(grammarLayer, source, opacity, visible, featureValues) {
59
+ var _a;
60
+ const kdeTransform = (_a = grammarLayer.preprocess) === null || _a === void 0 ? void 0 : _a.find((t) => t.type === 'kde');
61
+ if (kdeTransform) {
62
+ return compileKDELayer(grammarLayer, kdeTransform, source, opacity, visible);
63
+ }
64
+ return compileVectorLayer(grammarLayer, source, opacity, visible, featureValues);
65
+ }
66
+ // ---------------------------------------------------------------------------
67
+ // Raster → WebGLTileLayer
68
+ // ---------------------------------------------------------------------------
69
+ /**
70
+ * Compile a single Grammar layer to an OL WebGLTile layer.
71
+ * The pixel-color channel of the compiled style becomes the WebGL tile
72
+ * `color` expression. $band-N fields compile to ['band', N] in the style
73
+ * compiler; normalized GeoTIFF bands cover [0, 1] so featureValues [0, 1]
74
+ * produces sensible colorRamp stops by default.
75
+ */
76
+ function compileRasterLayer(grammarLayer, source, opacity, visible, featureValues) {
77
+ const singleLayerState = {
78
+ layers: [grammarLayer],
79
+ };
80
+ // Use [0, 1] as fallback values so colorRamp stops span the normalized
81
+ // band range when no explicit featureValues are provided.
82
+ const values = featureValues.length > 0 ? featureValues : [0, 1];
83
+ const flatStyle = grammarToOLStyle(singleLayerState, values);
84
+ const colorExpr = flatStyle['pixel-color'];
85
+ return new WebGLTileLayer(Object.assign({ opacity,
86
+ visible,
87
+ source }, (colorExpr !== undefined ? { style: { color: colorExpr } } : {})));
88
+ }
89
+ // ---------------------------------------------------------------------------
90
+ // KDE → HeatmapLayer
91
+ // ---------------------------------------------------------------------------
92
+ function compileKDELayer(grammarLayer, kdeTransform, source, opacity, visible) {
93
+ var _a, _b, _c;
94
+ const gradient = (_a = extractGradient(grammarLayer.rules)) !== null && _a !== void 0 ? _a : DEFAULT_GRADIENT;
95
+ const { weightField } = kdeTransform;
96
+ return new HeatmapLayer(Object.assign({ opacity,
97
+ visible,
98
+ source, blur: (_b = kdeTransform.blur) !== null && _b !== void 0 ? _b : 15, radius: (_c = kdeTransform.radius) !== null && _c !== void 0 ? _c : 10, gradient }, (weightField
99
+ ? {
100
+ weight: (feature) => {
101
+ const val = feature.get(weightField);
102
+ return typeof val === 'number' && isFinite(val) ? val : 1;
103
+ },
104
+ }
105
+ : {})));
106
+ }
107
+ /**
108
+ * Look for a pixel-color colorRamp mapping in the rules and convert it to an
109
+ * OL HeatmapLayer gradient string array. Returns undefined when absent.
110
+ */
111
+ function extractGradient(rules) {
112
+ for (const rule of rules) {
113
+ for (const mapping of rule.mappings) {
114
+ const isPixelChannel = mapping.channels.some(ch => ch === 'pixel-color' || ch.startsWith('pixel-'));
115
+ if (!isPixelChannel || mapping.scale.scheme !== 'colorRamp') {
116
+ continue;
117
+ }
118
+ const colorMap = getColorMap(mapping.scale.params.name);
119
+ if (!colorMap || colorMap.colors.length === 0) {
120
+ continue;
121
+ }
122
+ // Sample 5 evenly spaced stops from the 255-entry color array.
123
+ const n = 5;
124
+ const colors = colorMap.colors;
125
+ const step = (colors.length - 1) / (n - 1);
126
+ const gradient = Array.from({ length: n }, (_, i) => colors[Math.round(i * step)]);
127
+ return mapping.scale.params.reverse ? [...gradient].reverse() : gradient;
128
+ }
129
+ }
130
+ return undefined;
131
+ }
132
+ // ---------------------------------------------------------------------------
133
+ // Non-KDE → VectorImageLayer
134
+ // ---------------------------------------------------------------------------
135
+ function compileVectorLayer(grammarLayer, source, opacity, visible, featureValues) {
136
+ const singleLayerState = {
137
+ layers: [grammarLayer],
138
+ };
139
+ const flatStyle = grammarToOLStyle(singleLayerState, featureValues);
140
+ // If no rules produced output (e.g. empty rules list or all expressions dropped),
141
+ // fall back to the default style so the layer is visible rather than invisible.
142
+ const style = Object.keys(flatStyle).length === 0 ? DEFAULT_FLAT_STYLE : flatStyle;
143
+ const rule = { style };
144
+ return new VectorImageLayer({ opacity, visible, source, style: [rule] });
145
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Grammar → OL FlatStyle compiler.
3
+ *
4
+ * grammarToOLStyle(state) compiles an IGrammarSymbologyState into an OL
5
+ * FlatStyle object ready to be applied to a VectorLayer or VectorTileLayer.
6
+ *
7
+ * Compilation steps:
8
+ * 1. Expand rules into per-channel entries (guard + expression).
9
+ * 2. Build a case expression per channel (conditional entries first,
10
+ * last unconditional entry as the else branch).
11
+ * 3. Assemble sub-channels (fill-red/green/blue/alpha) into a composite
12
+ * fill-color ['array', r, g, b, a] expression.
13
+ */
14
+ import { IGrammarSymbologyState } from '@jupytergis/schema';
15
+ import { ExpressionValue } from 'ol/expr/expression';
16
+ export declare const DENSITY_FIELD = "$density";
17
+ /**
18
+ * Compile a Grammar symbology state to an OL FlatStyle object.
19
+ * Sub-channels (fill-red/green/blue/alpha) are assembled into fill-color.
20
+ *
21
+ * @param featureValues Feature attribute values for the rule field(s).
22
+ * Required for categorical and colorRamp scales so the compiler can
23
+ * enumerate unique values / compute classification breaks at render time,
24
+ * mirroring how buildVectorFlatStyle works.
25
+ */
26
+ export declare function grammarToOLStyle(state: IGrammarSymbologyState, featureValues?: unknown[]): Record<string, ExpressionValue>;
27
+ /**
28
+ * Extract the encoding field column from feature property rows.
29
+ * colorRamp and categorical scales take a single input field; this returns
30
+ * all values for that field so the compiler can compute classification breaks.
31
+ */
32
+ export declare function extractEncodingFieldValues(state: IGrammarSymbologyState, rows: Record<string, unknown>[]): unknown[];