@jupytergis/base 0.14.1 → 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 (397) hide show
  1. package/lib/commands/BaseCommandIDs.d.ts +6 -0
  2. package/lib/commands/BaseCommandIDs.js +6 -0
  3. package/lib/commands/index.js +245 -55
  4. package/lib/commands/operationCommands.js +2 -2
  5. package/lib/constants.js +6 -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 +2 -0
  52. package/lib/{formbuilder/objectform → features/layers/forms}/source/index.js +2 -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/features/layers/forms/source/wmsTileSource.d.ts +4 -0
  58. package/lib/features/layers/forms/source/wmsTileSource.js +78 -0
  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 +57 -57
  67. package/lib/features/layers/symbology/colorRampUtils.d.ts +65 -0
  68. package/lib/features/layers/symbology/colorRampUtils.js +242 -0
  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 +12 -15
  79. package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampSelectorEntry.d.ts +2 -2
  80. package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampSelectorEntry.js +3 -11
  81. package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ModeSelectRow.d.ts +1 -1
  82. package/lib/features/layers/symbology/components/color_ramp/RgbaColorPicker.d.ts +13 -0
  83. package/lib/features/layers/symbology/components/color_ramp/RgbaColorPicker.js +128 -0
  84. package/lib/{dialogs → features/layers}/symbology/components/color_stops/StopContainer.js +3 -1
  85. package/lib/{dialogs → features/layers}/symbology/components/color_stops/StopRow.d.ts +2 -2
  86. package/lib/{dialogs → features/layers}/symbology/components/color_stops/StopRow.js +12 -7
  87. package/lib/features/layers/symbology/grammarToOLLayer.d.ts +27 -0
  88. package/lib/features/layers/symbology/grammarToOLLayer.js +145 -0
  89. package/lib/features/layers/symbology/grammarToOLStyle.d.ts +32 -0
  90. package/lib/features/layers/symbology/grammarToOLStyle.js +467 -0
  91. package/lib/{dialogs → features/layers}/symbology/hooks/useGetBandInfo.d.ts +1 -1
  92. package/lib/{dialogs → features/layers}/symbology/hooks/useGetBandInfo.js +1 -1
  93. package/lib/{dialogs → features/layers}/symbology/hooks/useGetProperties.js +1 -1
  94. package/lib/{dialogs → features/layers}/symbology/hooks/useGetSymbology.js +4 -2
  95. package/lib/features/layers/symbology/styleBuilder.d.ts +21 -0
  96. package/lib/features/layers/symbology/styleBuilder.js +145 -0
  97. package/lib/{dialogs → features/layers}/symbology/symbologyDialog.d.ts +3 -2
  98. package/lib/{dialogs → features/layers}/symbology/symbologyDialog.js +12 -12
  99. package/lib/features/layers/symbology/symbologyUtils.d.ts +41 -0
  100. package/lib/features/layers/symbology/symbologyUtils.js +114 -0
  101. package/lib/{panelview/objectproperties.d.ts → features/objectproperties/index.d.ts} +1 -1
  102. package/lib/{panelview/objectproperties.js → features/objectproperties/index.js} +5 -10
  103. package/lib/{dialogs → features/processing}/ProcessingFormDialog.d.ts +1 -1
  104. package/lib/{dialogs → features/processing}/ProcessingFormDialog.js +28 -14
  105. package/lib/features/processing/forms/MapExtentToggle.d.ts +13 -0
  106. package/lib/features/processing/forms/MapExtentToggle.js +20 -0
  107. package/lib/features/processing/forms/clipRasterByExtentForm.d.ts +10 -0
  108. package/lib/features/processing/forms/clipRasterByExtentForm.js +99 -0
  109. package/lib/{formbuilder/objectform/process → features/processing/forms}/dissolveProcessForm.js +5 -5
  110. package/lib/{formbuilder/objectform → features/processing/forms}/processingForm.d.ts +1 -1
  111. package/lib/{formbuilder/objectform → features/processing/forms}/processingForm.js +6 -6
  112. package/lib/features/processing/forms/rasterizeForm.d.ts +10 -0
  113. package/lib/features/processing/forms/rasterizeForm.js +75 -0
  114. package/lib/features/processing/forms/useMapExtent.d.ts +22 -0
  115. package/lib/features/processing/forms/useMapExtent.js +57 -0
  116. package/lib/{processing → features/processing}/index.d.ts +19 -2
  117. package/lib/features/processing/index.js +1246 -0
  118. package/lib/{processing → features/processing}/processingCommands.d.ts +1 -1
  119. package/lib/features/processing/processingCommands.js +168 -0
  120. package/lib/features/processing/serverProcessing.d.ts +51 -0
  121. package/lib/features/processing/serverProcessing.js +99 -0
  122. package/lib/{stacBrowser → features/stac-browser}/components/StacPanel.js +2 -2
  123. package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/QueryableComboBox.js +64 -21
  124. package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/QueryableRow.js +1 -1
  125. package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/StacFilterExtensionPanel.js +2 -2
  126. package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/StacQueryableFilters.js +1 -1
  127. package/lib/{stacBrowser → features/stac-browser}/components/geodes/StacFilterSection.js +3 -3
  128. package/lib/{stacBrowser → features/stac-browser}/components/shared/StacPanelResults.js +3 -3
  129. package/lib/{stacBrowser → features/stac-browser}/components/shared/StacSpatialExtent.js +1 -1
  130. package/lib/{stacBrowser → features/stac-browser}/components/shared/StacTemporalExtent.js +1 -1
  131. package/lib/{stacBrowser → features/stac-browser}/context/StacResultsContext.js +2 -2
  132. package/lib/{stacBrowser → features/stac-browser}/hooks/useGeodesSearch.js +2 -2
  133. package/lib/{stacBrowser → features/stac-browser}/hooks/useStacFilterExtension.d.ts +1 -1
  134. package/lib/{stacBrowser → features/stac-browser}/hooks/useStacFilterExtension.js +198 -114
  135. package/lib/{stacBrowser → features/stac-browser}/hooks/useStacSearch.d.ts +1 -0
  136. package/lib/{stacBrowser → features/stac-browser}/hooks/useStacSearch.js +19 -11
  137. package/lib/features/stac-browser/types/types.js +1 -0
  138. package/lib/{panelview/story-maps → features/story}/SpectaPanel.d.ts +4 -1
  139. package/lib/{panelview/story-maps → features/story}/SpectaPanel.js +3 -4
  140. package/lib/{panelview/story-maps → features/story}/StoryEditorPanel.js +1 -1
  141. package/lib/{panelview/story-maps → features/story}/StoryViewerPanel.d.ts +12 -11
  142. package/lib/features/story/StoryViewerPanel.js +64 -0
  143. package/lib/features/story/__tests__/fixtures/listStoryTestItems.d.ts +9 -0
  144. package/lib/features/story/__tests__/fixtures/listStoryTestItems.js +21 -0
  145. package/lib/features/story/components/ListStoryMapOverlayPanel.d.ts +10 -0
  146. package/lib/features/story/components/ListStoryMapOverlayPanel.js +11 -0
  147. package/lib/features/story/components/ListStoryMarkdownMeasurePane.d.ts +11 -0
  148. package/lib/features/story/components/ListStoryMarkdownMeasurePane.js +55 -0
  149. package/lib/features/story/components/ListStoryOverlayMarkdown.d.ts +15 -0
  150. package/lib/features/story/components/ListStoryOverlayMarkdown.js +93 -0
  151. package/lib/features/story/components/ListStoryStageOverlay.d.ts +12 -0
  152. package/lib/features/story/components/ListStoryStageOverlay.js +132 -0
  153. package/lib/features/story/components/ListStoryVirtualScrollTrack.d.ts +6 -0
  154. package/lib/features/story/components/ListStoryVirtualScrollTrack.js +7 -0
  155. package/lib/{panelview/story-maps → features/story}/components/SpectaDesktopView.d.ts +4 -2
  156. package/lib/features/story/components/SpectaDesktopView.js +67 -0
  157. package/lib/{panelview/story-maps → features/story}/components/SpectaMobileView.d.ts +2 -4
  158. package/lib/{panelview/story-maps → features/story}/components/SpectaMobileView.js +3 -3
  159. package/lib/features/story/components/SpectaSingleModeContent.d.ts +18 -0
  160. package/lib/features/story/components/SpectaSingleModeContent.js +8 -0
  161. package/lib/features/story/context/ListStoryScrollTrackContext.d.ts +15 -0
  162. package/lib/features/story/context/ListStoryScrollTrackContext.js +142 -0
  163. package/lib/features/story/hooks/useCurrentSegmentIndex.d.ts +3 -0
  164. package/lib/features/story/hooks/useCurrentSegmentIndex.js +17 -0
  165. package/lib/features/story/hooks/useListStoryScroll.d.ts +15 -0
  166. package/lib/features/story/hooks/useListStoryScroll.js +107 -0
  167. package/lib/features/story/hooks/useQueuedMarkdownHeightMeasure.d.ts +19 -0
  168. package/lib/features/story/hooks/useQueuedMarkdownHeightMeasure.js +56 -0
  169. package/lib/features/story/hooks/useStoryImagePreload.d.ts +1 -0
  170. package/lib/features/story/hooks/useStoryImagePreload.js +24 -0
  171. package/lib/{panelview/story-maps → features/story}/hooks/useStoryMap.d.ts +2 -7
  172. package/lib/{panelview/story-maps → features/story}/hooks/useStoryMap.js +20 -44
  173. package/lib/features/story/hooks/useStoryScrollState.d.ts +21 -0
  174. package/lib/features/story/hooks/useStoryScrollState.js +39 -0
  175. package/lib/features/story/hooks/useStorySegmentSync.d.ts +8 -0
  176. package/lib/features/story/hooks/useStorySegmentSync.js +51 -0
  177. package/lib/features/story/types/types.d.ts +38 -0
  178. package/lib/features/story/types/types.js +1 -0
  179. package/lib/features/story/utils/computeListStoryScrollState.d.ts +12 -0
  180. package/lib/features/story/utils/computeListStoryScrollState.js +70 -0
  181. package/lib/features/story/utils/listStoryMeasureQueue.d.ts +11 -0
  182. package/lib/features/story/utils/listStoryMeasureQueue.js +14 -0
  183. package/lib/features/story/utils/listStoryScrollTrack.d.ts +17 -0
  184. package/lib/features/story/utils/listStoryScrollTrack.js +72 -0
  185. package/lib/features/story/utils/spectaPresentation.d.ts +9 -0
  186. package/lib/features/story/utils/spectaPresentation.js +37 -0
  187. package/lib/features/story/utils/storySegmentViewItems.d.ts +5 -0
  188. package/lib/features/story/utils/storySegmentViewItems.js +30 -0
  189. package/lib/index.d.ts +11 -9
  190. package/lib/index.js +11 -9
  191. package/lib/keybindings.json +5 -0
  192. package/lib/mainview/OpenEOTileLayer.d.ts +49 -0
  193. package/lib/mainview/OpenEOTileLayer.js +179 -0
  194. package/lib/mainview/TemporalSlider.js +11 -9
  195. package/lib/mainview/geoJsonFeaturePatch.d.ts +9 -0
  196. package/lib/mainview/geoJsonFeaturePatch.js +43 -0
  197. package/lib/mainview/mainView.d.ts +93 -8
  198. package/lib/mainview/mainView.js +1286 -529
  199. package/lib/mainview/mainviewwidget.d.ts +5 -1
  200. package/lib/mainview/mainviewwidget.js +4 -2
  201. package/lib/shared/components/Button.d.ts +1 -1
  202. package/lib/shared/components/DropdownMenu.d.ts +1 -0
  203. package/lib/shared/components/DropdownMenu.js +3 -2
  204. package/lib/shared/components/NativeSelect.d.ts +8 -0
  205. package/lib/shared/components/NativeSelect.js +29 -0
  206. package/lib/shared/components/Tabs.d.ts +3 -3
  207. package/lib/shared/components/Tabs.js +5 -5
  208. package/lib/{formbuilder → shared/formbuilder}/creationform.js +71 -4
  209. package/lib/{formbuilder → shared/formbuilder}/editform.js +1 -1
  210. package/lib/{formbuilder → shared/formbuilder}/formselectors.d.ts +2 -2
  211. package/lib/{formbuilder → shared/formbuilder}/formselectors.js +13 -4
  212. package/lib/shared/formbuilder/index.d.ts +4 -0
  213. package/lib/shared/formbuilder/index.js +4 -0
  214. package/lib/{formbuilder → shared/formbuilder}/objectform/SchemaForm.d.ts +1 -1
  215. package/lib/{formbuilder → shared/formbuilder}/objectform/StoryEditorForm.d.ts +1 -1
  216. package/lib/{formbuilder → shared/formbuilder}/objectform/StoryEditorForm.js +1 -1
  217. package/lib/{formbuilder → shared/formbuilder}/objectform/components/LayerSelect.js +1 -1
  218. package/lib/{formbuilder → shared/formbuilder}/objectform/components/SegmentFormSymbology.js +4 -4
  219. package/lib/{formbuilder → shared/formbuilder}/objectform/components/SourcePropertiesField.js +1 -1
  220. package/lib/{formbuilder → shared/formbuilder}/objectform/components/StorySegmentReset.js +1 -1
  221. package/lib/shared/formbuilder/objectform/components/WmsTileSourceUrlInput.d.ts +3 -0
  222. package/lib/shared/formbuilder/objectform/components/WmsTileSourceUrlInput.js +84 -0
  223. package/lib/{formbuilder → shared/formbuilder}/objectform/fileselectorwidget.js +8 -1
  224. package/lib/{formbuilder → shared/formbuilder}/objectform/schemaUtils.d.ts +3 -1
  225. package/lib/{formbuilder → shared/formbuilder}/objectform/schemaUtils.js +11 -0
  226. package/lib/{formbuilder → shared/formbuilder}/objectform/useSchemaFormState.d.ts +2 -2
  227. package/lib/{formbuilder → shared/formbuilder}/objectform/useSchemaFormState.js +1 -1
  228. package/lib/{icons.d.ts → shared/icons.d.ts} +2 -0
  229. package/lib/{icons.js → shared/icons.js} +28 -18
  230. package/lib/tools.d.ts +3 -1
  231. package/lib/tools.js +140 -6
  232. package/lib/types.d.ts +12 -1
  233. package/lib/types.js +6 -1
  234. package/lib/{menus.js → workspace/menus.js} +14 -2
  235. package/lib/workspace/panels/components/TabbedPanel.d.ts +17 -0
  236. package/lib/workspace/panels/components/TabbedPanel.js +19 -0
  237. package/lib/{panelview → workspace/panels}/components/layers.js +82 -20
  238. package/lib/workspace/panels/components/legendItem.js +680 -0
  239. package/lib/workspace/panels/hooks/useLayerTree.d.ts +19 -0
  240. package/lib/workspace/panels/hooks/useLayerTree.js +103 -0
  241. package/lib/workspace/panels/hooks/useRightPanelOptions.d.ts +27 -0
  242. package/lib/workspace/panels/hooks/useRightPanelOptions.js +72 -0
  243. package/lib/workspace/panels/hooks/useUIState.d.ts +2 -0
  244. package/lib/workspace/panels/hooks/useUIState.js +25 -0
  245. package/lib/{panelview → workspace/panels}/index.d.ts +1 -1
  246. package/lib/{panelview → workspace/panels}/index.js +1 -1
  247. package/lib/{panelview → workspace/panels}/leftpanel.d.ts +1 -1
  248. package/lib/workspace/panels/leftpanel.js +70 -0
  249. package/lib/{panelview/rightpanel.d.ts → workspace/panels/mergedpanel.d.ts} +6 -5
  250. package/lib/workspace/panels/mergedpanel.js +166 -0
  251. package/lib/workspace/panels/rightpanel.d.ts +25 -0
  252. package/lib/{panelview → workspace/panels}/rightpanel.js +53 -63
  253. package/lib/{statusbar → workspace/statusbar}/StatusBar.js +5 -4
  254. package/lib/{toolbar → workspace/toolbar}/widget.d.ts +2 -0
  255. package/lib/{toolbar → workspace/toolbar}/widget.js +33 -5
  256. package/lib/{widget.d.ts → workspace/widget.d.ts} +7 -5
  257. package/lib/{widget.js → workspace/widget.js} +16 -7
  258. package/package.json +19 -4
  259. package/style/base.css +109 -1
  260. package/style/icons/geopackage.svg +95 -0
  261. package/style/icons/pencil_solid.svg +7 -0
  262. package/style/identify.css +95 -0
  263. package/style/layerBrowser.css +28 -0
  264. package/style/leftPanel.css +25 -0
  265. package/style/shared/button.css +12 -0
  266. package/style/shared/dropdownMenu.css +9 -0
  267. package/style/shared/nativeSelect.css +75 -0
  268. package/style/shared/tabs.css +3 -3
  269. package/style/spectaProgressBar.css +0 -1
  270. package/style/storyPanel.css +142 -9
  271. package/style/storySpectaArticleOverlay.css +129 -0
  272. package/style/symbologyDialog.css +330 -28
  273. package/lib/dialogs/symbology/colorRampUtils.d.ts +0 -20
  274. package/lib/dialogs/symbology/colorRampUtils.js +0 -132
  275. package/lib/dialogs/symbology/symbologyUtils.d.ts +0 -33
  276. package/lib/dialogs/symbology/symbologyUtils.js +0 -180
  277. package/lib/dialogs/symbology/tiff_layer/TiffRendering.d.ts +0 -4
  278. package/lib/dialogs/symbology/tiff_layer/TiffRendering.js +0 -42
  279. package/lib/dialogs/symbology/tiff_layer/components/BandRow.d.ts +0 -23
  280. package/lib/dialogs/symbology/tiff_layer/components/BandRow.js +0 -59
  281. package/lib/dialogs/symbology/tiff_layer/types/MultibandColor.d.ts +0 -4
  282. package/lib/dialogs/symbology/tiff_layer/types/MultibandColor.js +0 -92
  283. package/lib/dialogs/symbology/tiff_layer/types/SingleBandPseudoColor.d.ts +0 -5
  284. package/lib/dialogs/symbology/tiff_layer/types/SingleBandPseudoColor.js +0 -301
  285. package/lib/dialogs/symbology/vector_layer/VectorRendering.d.ts +0 -4
  286. package/lib/dialogs/symbology/vector_layer/VectorRendering.js +0 -112
  287. package/lib/dialogs/symbology/vector_layer/components/ValueSelect.d.ts +0 -8
  288. package/lib/dialogs/symbology/vector_layer/components/ValueSelect.js +0 -9
  289. package/lib/dialogs/symbology/vector_layer/types/Canonical.d.ts +0 -4
  290. package/lib/dialogs/symbology/vector_layer/types/Canonical.js +0 -65
  291. package/lib/dialogs/symbology/vector_layer/types/Categorized.d.ts +0 -4
  292. package/lib/dialogs/symbology/vector_layer/types/Categorized.js +0 -196
  293. package/lib/dialogs/symbology/vector_layer/types/Graduated.d.ts +0 -4
  294. package/lib/dialogs/symbology/vector_layer/types/Graduated.js +0 -250
  295. package/lib/dialogs/symbology/vector_layer/types/SimpleSymbol.d.ts +0 -4
  296. package/lib/dialogs/symbology/vector_layer/types/SimpleSymbol.js +0 -105
  297. package/lib/formbuilder/index.d.ts +0 -4
  298. package/lib/formbuilder/index.js +0 -4
  299. package/lib/formbuilder/objectform/layer/storySegmentLayerForm.js +0 -95
  300. package/lib/formbuilder/objectform/layer/webGlLayerForm.d.ts +0 -3
  301. package/lib/formbuilder/objectform/process/index.d.ts +0 -1
  302. package/lib/formbuilder/objectform/process/index.js +0 -1
  303. package/lib/panelview/components/legendItem.js +0 -200
  304. package/lib/panelview/identify-panel/IdentifyPanel.js +0 -102
  305. package/lib/panelview/leftpanel.js +0 -139
  306. package/lib/panelview/story-maps/StoryViewerPanel.js +0 -116
  307. package/lib/panelview/story-maps/components/SpectaDesktopView.js +0 -49
  308. package/lib/processing/index.js +0 -200
  309. package/lib/processing/processingCommands.js +0 -67
  310. /package/lib/{panelview/annotationPanel.d.ts → features/annotations/AnnotationsPanel.d.ts} +0 -0
  311. /package/lib/{annotations → features/annotations}/components/Annotation.d.ts +0 -0
  312. /package/lib/{annotations → features/annotations}/components/Annotation.js +0 -0
  313. /package/lib/{annotations → features/annotations}/components/AnnotationFloater.d.ts +0 -0
  314. /package/lib/{annotations → features/annotations}/components/AnnotationFloater.js +0 -0
  315. /package/lib/{annotations → features/annotations}/components/Message.d.ts +0 -0
  316. /package/lib/{annotations → features/annotations}/components/Message.js +0 -0
  317. /package/lib/{annotations → features/annotations}/model.d.ts +0 -0
  318. /package/lib/{annotations → features/annotations}/model.js +0 -0
  319. /package/lib/{console → features/console}/consoleview.d.ts +0 -0
  320. /package/lib/{console → features/console}/index.d.ts +0 -0
  321. /package/lib/{console → features/console}/index.js +0 -0
  322. /package/lib/{panelview/filter-panel → features/filter}/Filter.d.ts +0 -0
  323. /package/lib/{stacBrowser/types/types.js → features/identify/types/editorTypes.js} +0 -0
  324. /package/lib/{dialogs/layerBrowserDialog.d.ts → features/layer-browser/index.d.ts} +0 -0
  325. /package/lib/{formbuilder/objectform → features/layers/forms}/layer/heatmapLayerForm.d.ts +0 -0
  326. /package/lib/{formbuilder/objectform → features/layers/forms}/layer/hillshadeLayerForm.d.ts +0 -0
  327. /package/lib/{formbuilder/objectform → features/layers/forms}/layer/storySegmentLayerForm.d.ts +0 -0
  328. /package/lib/{formbuilder/objectform → features/layers/forms}/layer/vectorlayerform.d.ts +0 -0
  329. /package/lib/{formbuilder/objectform → features/layers/forms}/source/geojsonsource.d.ts +0 -0
  330. /package/lib/{formbuilder/objectform → features/layers/forms}/source/geotiffsource.d.ts +0 -0
  331. /package/lib/{formbuilder/objectform → features/layers/forms}/source/pathbasedsource.d.ts +0 -0
  332. /package/lib/{formbuilder/objectform → features/layers/forms}/source/tilesourceform.d.ts +0 -0
  333. /package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ModeSelectRow.js +0 -0
  334. /package/lib/{dialogs → features/layers}/symbology/components/color_ramp/cmocean.json +0 -0
  335. /package/lib/{dialogs → features/layers}/symbology/components/color_stops/StopContainer.d.ts +0 -0
  336. /package/lib/{dialogs → features/layers}/symbology/hooks/useEffectiveSymbologyParams.d.ts +0 -0
  337. /package/lib/{dialogs → features/layers}/symbology/hooks/useEffectiveSymbologyParams.js +0 -0
  338. /package/lib/{dialogs → features/layers}/symbology/hooks/useGetProperties.d.ts +0 -0
  339. /package/lib/{dialogs → features/layers}/symbology/hooks/useGetSymbology.d.ts +0 -0
  340. /package/lib/{dialogs → features/layers}/symbology/hooks/useOkSignal.d.ts +0 -0
  341. /package/lib/{dialogs → features/layers}/symbology/hooks/useOkSignal.js +0 -0
  342. /package/lib/{formbuilder/objectform/process → features/processing/forms}/dissolveProcessForm.d.ts +0 -0
  343. /package/lib/{processing → features/processing}/processingFormToParam.d.ts +0 -0
  344. /package/lib/{processing → features/processing}/processingFormToParam.js +0 -0
  345. /package/lib/{stacBrowser → features/stac-browser}/components/StacPanel.d.ts +0 -0
  346. /package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/QueryableComboBox.d.ts +0 -0
  347. /package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/QueryableRow.d.ts +0 -0
  348. /package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/StacFilterExtensionPanel.d.ts +0 -0
  349. /package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/StacQueryableFilters.d.ts +0 -0
  350. /package/lib/{stacBrowser → features/stac-browser}/components/geodes/StacFilterSection.d.ts +0 -0
  351. /package/lib/{stacBrowser → features/stac-browser}/components/geodes/StacGeodesFilterPanel.d.ts +0 -0
  352. /package/lib/{stacBrowser → features/stac-browser}/components/geodes/StacGeodesFilterPanel.js +0 -0
  353. /package/lib/{stacBrowser → features/stac-browser}/components/shared/StacPanelResults.d.ts +0 -0
  354. /package/lib/{stacBrowser → features/stac-browser}/components/shared/StacSpatialExtent.d.ts +0 -0
  355. /package/lib/{stacBrowser → features/stac-browser}/components/shared/StacTemporalExtent.d.ts +0 -0
  356. /package/lib/{stacBrowser → features/stac-browser}/constants.d.ts +0 -0
  357. /package/lib/{stacBrowser → features/stac-browser}/constants.js +0 -0
  358. /package/lib/{stacBrowser → features/stac-browser}/context/StacResultsContext.d.ts +0 -0
  359. /package/lib/{stacBrowser → features/stac-browser}/hooks/useGeodesSearch.d.ts +0 -0
  360. /package/lib/{stacBrowser → features/stac-browser}/index.d.ts +0 -0
  361. /package/lib/{stacBrowser → features/stac-browser}/index.js +0 -0
  362. /package/lib/{stacBrowser → features/stac-browser}/types/types.d.ts +0 -0
  363. /package/lib/{panelview/story-maps → features/story}/StoryEditorPanel.d.ts +0 -0
  364. /package/lib/{panelview/story-maps → features/story}/components/PreviewModeSwitch.d.ts +0 -0
  365. /package/lib/{panelview/story-maps → features/story}/components/PreviewModeSwitch.js +0 -0
  366. /package/lib/{panelview/story-maps → features/story}/components/StoryContentSection.d.ts +0 -0
  367. /package/lib/{panelview/story-maps → features/story}/components/StoryContentSection.js +0 -0
  368. /package/lib/{panelview/story-maps → features/story}/components/StoryImageSection.d.ts +0 -0
  369. /package/lib/{panelview/story-maps → features/story}/components/StoryImageSection.js +0 -0
  370. /package/lib/{panelview/story-maps → features/story}/components/StoryNavBar.d.ts +0 -0
  371. /package/lib/{panelview/story-maps → features/story}/components/StoryNavBar.js +0 -0
  372. /package/lib/{panelview/story-maps → features/story}/components/StorySubtitleSection.d.ts +0 -0
  373. /package/lib/{panelview/story-maps → features/story}/components/StorySubtitleSection.js +0 -0
  374. /package/lib/{panelview/story-maps → features/story}/components/StoryTitleSection.d.ts +0 -0
  375. /package/lib/{panelview/story-maps → features/story}/components/StoryTitleSection.js +0 -0
  376. /package/lib/{formbuilder → shared/formbuilder}/creationform.d.ts +0 -0
  377. /package/lib/{formbuilder → shared/formbuilder}/editform.d.ts +0 -0
  378. /package/lib/{formbuilder → shared/formbuilder}/objectform/SchemaForm.js +0 -0
  379. /package/lib/{formbuilder → shared/formbuilder}/objectform/components/LayerSelect.d.ts +0 -0
  380. /package/lib/{formbuilder → shared/formbuilder}/objectform/components/OpacitySlider.d.ts +0 -0
  381. /package/lib/{formbuilder → shared/formbuilder}/objectform/components/OpacitySlider.js +0 -0
  382. /package/lib/{formbuilder → shared/formbuilder}/objectform/components/SegmentFormSymbology.d.ts +0 -0
  383. /package/lib/{formbuilder → shared/formbuilder}/objectform/components/SourcePropertiesField.d.ts +0 -0
  384. /package/lib/{formbuilder → shared/formbuilder}/objectform/components/StorySegmentReset.d.ts +0 -0
  385. /package/lib/{formbuilder → shared/formbuilder}/objectform/fileselectorwidget.d.ts +0 -0
  386. /package/lib/{store.d.ts → shared/store.d.ts} +0 -0
  387. /package/lib/{store.js → shared/store.js} +0 -0
  388. /package/lib/{menus.d.ts → workspace/menus.d.ts} +0 -0
  389. /package/lib/{panelview → workspace/panels}/components/layers.d.ts +0 -0
  390. /package/lib/{panelview → workspace/panels}/components/legendItem.d.ts +0 -0
  391. /package/lib/{panelview → workspace/panels}/header.d.ts +0 -0
  392. /package/lib/{panelview → workspace/panels}/header.js +0 -0
  393. /package/lib/{statusbar → workspace/statusbar}/SpectaPresentationProgressBar.d.ts +0 -0
  394. /package/lib/{statusbar → workspace/statusbar}/SpectaPresentationProgressBar.js +0 -0
  395. /package/lib/{statusbar → workspace/statusbar}/StatusBar.d.ts +0 -0
  396. /package/lib/{toolbar → workspace/toolbar}/index.d.ts +0 -0
  397. /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;
@@ -12,15 +12,20 @@
12
12
  */
13
13
  import { Button } from '@jupyterlab/ui-components';
14
14
  import React, { useEffect, useRef, useState } from 'react';
15
- import { useColorMapList, } from "../../colorRampUtils";
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);
@@ -49,23 +54,15 @@ const ColorRampSelector = ({ selectedRamp, setSelected, reverse, setReverse, })
49
54
  return;
50
55
  }
51
56
  canvas.style.visibility = 'hidden';
52
- const ctx = canvas.getContext('2d');
53
- if (!ctx) {
57
+ const ramp = colorMaps.find(c => c.name === rampName);
58
+ if (!ramp) {
54
59
  return;
55
60
  }
56
- const ramp = colorMaps.filter(c => c.name === rampName)[0];
57
- let colors = ramp.colors;
58
- if (reverse) {
59
- colors = [...colors].reverse();
60
- }
61
+ const displayRamp = reverse
62
+ ? Object.assign(Object.assign({}, ramp), { colors: [...ramp.colors].reverse() }) : ramp;
61
63
  canvas.width = canvasWidth;
62
64
  canvas.height = canvasHeight;
63
- for (let i = 0; i <= 255; i++) {
64
- ctx.beginPath();
65
- const color = colors[i];
66
- ctx.fillStyle = color;
67
- ctx.fillRect(i * 2, 0, 2, canvasHeight);
68
- }
65
+ drawColorRamp(canvas, displayRamp);
69
66
  canvas.style.visibility = 'initial';
70
67
  };
71
68
  useEffect(() => {
@@ -10,11 +10,11 @@
10
10
  * - `onClick`: Callback fired with the ramp name when clicked.
11
11
  */
12
12
  import React from 'react';
13
- import { IColorMap } from "../../colorRampUtils";
13
+ import { ColorRampName, IColorMap } from "../../colorRampUtils";
14
14
  interface IColorRampSelectorEntryProps {
15
15
  index: number;
16
16
  colorMap: IColorMap;
17
- onClick: (item: any) => void;
17
+ onClick: (item: ColorRampName) => void;
18
18
  }
19
19
  declare const ColorRampSelectorEntry: React.FC<IColorRampSelectorEntryProps>;
20
20
  export default ColorRampSelectorEntry;
@@ -10,6 +10,7 @@
10
10
  * - `onClick`: Callback fired with the ramp name when clicked.
11
11
  */
12
12
  import React, { useEffect } from 'react';
13
+ import { drawColorRamp, } from "../../colorRampUtils";
13
14
  const ColorRampSelectorEntry = ({ index, colorMap, onClick, }) => {
14
15
  const canvasWidth = 512;
15
16
  const canvasHeight = 30;
@@ -20,17 +21,8 @@ const ColorRampSelectorEntry = ({ index, colorMap, onClick, }) => {
20
21
  }
21
22
  canvas.width = canvasWidth;
22
23
  canvas.height = canvasHeight;
23
- const ctx = canvas.getContext('2d');
24
- if (!ctx) {
25
- return;
26
- }
27
- for (let i = 0; i <= 255; i++) {
28
- ctx.beginPath();
29
- const color = colorMap.colors[i];
30
- ctx.fillStyle = color;
31
- ctx.fillRect(i * 2, 0, 2, canvasHeight);
32
- }
33
- }, []);
24
+ drawColorRamp(canvas, colorMap);
25
+ }, [colorMap, index]);
34
26
  return (React.createElement("div", { key: colorMap.name, onClick: () => onClick(colorMap.name), className: "jp-gis-color-ramp-entry" },
35
27
  React.createElement("span", { className: "jp-gis-color-label" }, colorMap.name),
36
28
  React.createElement("canvas", { id: `cv-${index}`, width: canvasWidth, height: canvasHeight, className: "jp-gis-color-canvas" })));
@@ -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>>;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { RgbaColor } from "../../colorRampUtils";
3
+ export type { RgbaColor };
4
+ interface IRgbaColorPickerProps {
5
+ color: RgbaColor;
6
+ onChange: (color: RgbaColor) => void;
7
+ }
8
+ /**
9
+ * A swatch button that opens a floating RGBA color picker on click.
10
+ * Color is stored as [r, g, b, a] where r/g/b are 0-255 and a is 0-1.
11
+ */
12
+ declare const RgbaColorPicker: React.FC<IRgbaColorPickerProps>;
13
+ export default RgbaColorPicker;
@@ -0,0 +1,128 @@
1
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
2
+ import { RgbaColorPicker as ReactColorfulRgba } from 'react-colorful';
3
+ import { RGBA_INDEX, } from "../../colorRampUtils";
4
+ /**
5
+ * A swatch button that opens a floating RGBA color picker on click.
6
+ * Color is stored as [r, g, b, a] where r/g/b are 0-255 and a is 0-1.
7
+ */
8
+ const RgbaColorPicker = ({ color, onChange, }) => {
9
+ const [open, setOpen] = useState(false);
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
+ });
17
+ const [r, g, b, a] = color;
18
+ const [inputs, setInputs] = useState({
19
+ r: String(Math.round(r)),
20
+ g: String(Math.round(g)),
21
+ b: String(Math.round(b)),
22
+ a: String(Math.round(a * 100)),
23
+ });
24
+ // Sync text inputs when color changes externally (e.g. picker drag)
25
+ useEffect(() => {
26
+ setInputs({
27
+ r: String(Math.round(r)),
28
+ g: String(Math.round(g)),
29
+ b: String(Math.round(b)),
30
+ a: String(Math.round(a * 100)),
31
+ });
32
+ }, [r, g, b, a]);
33
+ const swatchWrapStyle = {
34
+ position: 'relative',
35
+ width: 28,
36
+ height: 28,
37
+ borderRadius: 4,
38
+ border: '1px solid var(--jp-border-color1, #ccc)',
39
+ cursor: 'pointer',
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})`,
50
+ };
51
+ const handlePickerChange = useCallback((c) => {
52
+ onChange([c.r, c.g, c.b, c.a]);
53
+ }, [onChange]);
54
+ const handleChannelInput = (channel, value) => {
55
+ setInputs(prev => (Object.assign(Object.assign({}, prev), { [channel]: value })));
56
+ const num = Number(value);
57
+ if (channel === 'a') {
58
+ if (num >= 0 && num <= 100) {
59
+ onChange([r, g, b, num / 100]);
60
+ }
61
+ }
62
+ else {
63
+ if (num >= 0 && num <= 255) {
64
+ const newColor = [...color];
65
+ newColor[RGBA_INDEX[channel]] = Math.round(num);
66
+ onChange(newColor);
67
+ }
68
+ }
69
+ };
70
+ const handleTransparentChange = (checked) => {
71
+ // Always restore to fully opaque rather than the previous alpha,
72
+ // which could have been near-zero and appear broken to the user.
73
+ onChange([r, g, b, checked ? 0 : 1]);
74
+ };
75
+ useEffect(() => {
76
+ if (!open) {
77
+ return;
78
+ }
79
+ const handleClickOutside = (e) => {
80
+ const target = e.target;
81
+ if (containerRef.current &&
82
+ !containerRef.current.contains(target) &&
83
+ popupRef.current &&
84
+ !popupRef.current.contains(target)) {
85
+ setOpen(false);
86
+ }
87
+ };
88
+ document.addEventListener('mousedown', handleClickOutside);
89
+ return () => document.removeEventListener('mousedown', handleClickOutside);
90
+ }, [open]);
91
+ return (React.createElement("div", { ref: containerRef, className: "jp-gis-rgba-picker", style: { position: 'relative' } },
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,
110
+ background: 'var(--jp-layout-color1, #fff)',
111
+ border: '1px solid var(--jp-border-color1, #ccc)',
112
+ borderRadius: 6,
113
+ padding: 8,
114
+ boxShadow: '0 4px 12px rgba(0,0,0,0.2)',
115
+ } },
116
+ React.createElement(ReactColorfulRgba, { color: { r, g, b, a }, onChange: handlePickerChange }),
117
+ React.createElement("div", { className: "jp-gis-rgba-inputs" },
118
+ ['r', 'g', 'b'].map(ch => (React.createElement("div", { key: ch, className: "jp-gis-rgba-field" },
119
+ React.createElement("label", null, ch.toUpperCase()),
120
+ React.createElement("input", { className: "jp-mod-styled", type: "number", min: 0, max: 255, value: inputs[ch], onChange: e => handleChannelInput(ch, e.target.value) })))),
121
+ React.createElement("div", { className: "jp-gis-rgba-field" },
122
+ React.createElement("label", null, "A%"),
123
+ React.createElement("input", { className: "jp-mod-styled", type: "number", min: 0, max: 100, value: inputs.a, onChange: e => handleChannelInput('a', e.target.value) }))),
124
+ React.createElement("label", { className: "jp-gis-transparent-label" },
125
+ React.createElement("input", { type: "checkbox", checked: a === 0, onChange: e => handleTransparentChange(e.target.checked) }),
126
+ "No color")))));
127
+ };
128
+ export default RgbaColorPicker;
@@ -1,10 +1,12 @@
1
1
  import { Button } from '@jupyterlab/ui-components';
2
+ import { UUID } from '@lumino/coreutils';
2
3
  import React from 'react';
3
4
  import StopRow from './StopRow';
4
5
  const StopContainer = ({ selectedMethod, stopRows, setStopRows, }) => {
5
6
  const addStopRow = () => {
6
7
  setStopRows([
7
8
  {
9
+ id: UUID.uuid4(),
8
10
  stop: 0,
9
11
  output: [0, 0, 0, 1],
10
12
  },
@@ -21,7 +23,7 @@ const StopContainer = ({ selectedMethod, stopRows, setStopRows, }) => {
21
23
  React.createElement("div", { className: "jp-gis-stop-labels", style: { display: 'flex', gap: 6 } },
22
24
  React.createElement("span", { style: { flex: '0 0 18%' } }, "Value"),
23
25
  React.createElement("span", null, "Output Value")),
24
- stopRows.map((stop, index) => (React.createElement(StopRow, { key: `${index}-${stop.output}`, index: index, dataValue: stop.stop, symbologyValue: stop.output, stopRows: stopRows, setStopRows: setStopRows, deleteRow: () => deleteStopRow(index), useNumber: selectedMethod === 'radius' ? true : false })))),
26
+ stopRows.map((stop, index) => (React.createElement(StopRow, { key: stop.id, index: index, dataValue: stop.stop, symbologyValue: stop.output, stopRows: stopRows, setStopRows: setStopRows, deleteRow: () => deleteStopRow(index), useNumber: selectedMethod === 'radius' ? true : false })))),
25
27
  React.createElement("div", { className: "jp-gis-symbology-button-container" },
26
28
  React.createElement(Button, { className: "jp-Dialog-button jp-mod-accept jp-mod-styled", onClick: addStopRow }, "Add Stop"))));
27
29
  };
@@ -1,9 +1,9 @@
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
- dataValue: number;
6
+ dataValue: number | string;
7
7
  symbologyValue: SymbologyValue;
8
8
  stopRows: IStopRow[];
9
9
  setStopRows: (stopRows: IStopRow[]) => void;
@@ -2,7 +2,8 @@ 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 { ensureHexColorCode, hexToRgb, } from "../../colorRampUtils";
5
+ import { colorToRgba, } from "../../colorRampUtils";
6
+ import RgbaColorPicker from "../color_ramp/RgbaColorPicker";
6
7
  const StopRow = ({ index, dataValue, symbologyValue, stopRows, setStopRows, deleteRow, useNumber, }) => {
7
8
  const inputRef = useRef(null);
8
9
  useEffect(() => {
@@ -13,7 +14,8 @@ const StopRow = ({ index, dataValue, symbologyValue, stopRows, setStopRows, dele
13
14
  }, [stopRows]);
14
15
  const handleStopChange = (event) => {
15
16
  const newRows = [...stopRows];
16
- newRows[index].stop = +event.target.value;
17
+ const value = event.target.value;
18
+ newRows[index].stop = useNumber ? +value : value;
17
19
  setStopRows(newRows);
18
20
  };
19
21
  const handleBlur = () => {
@@ -31,14 +33,17 @@ const StopRow = ({ index, dataValue, symbologyValue, stopRows, setStopRows, dele
31
33
  };
32
34
  const handleOutputChange = (event) => {
33
35
  const newRows = [...stopRows];
34
- useNumber
35
- ? (newRows[index].output = +event.target.value)
36
- : (newRows[index].output = hexToRgb(event.target.value));
36
+ newRows[index].output = +event.target.value;
37
+ setStopRows(newRows);
38
+ };
39
+ const handleColorOutputChange = (color) => {
40
+ const newRows = [...stopRows];
41
+ newRows[index].output = color;
37
42
  setStopRows(newRows);
38
43
  };
39
44
  return (React.createElement("div", { className: "jp-gis-color-row" },
40
- React.createElement("input", { id: `jp-gis-color-value-${index}`, type: "number", value: dataValue, onChange: handleStopChange, onBlur: handleBlur, className: "jp-mod-styled jp-gis-color-row-value-input" }),
41
- useNumber ? (React.createElement("input", { type: "number", ref: inputRef, value: symbologyValue, onChange: handleOutputChange, className: "jp-mod-styled jp-gis-color-row-output-input" })) : (React.createElement("input", { id: `jp-gis-color-color-${index}`, ref: inputRef, value: ensureHexColorCode(symbologyValue), type: "color", onChange: handleOutputChange, className: "jp-mod-styled jp-gis-color-row-output-input" })),
45
+ React.createElement("input", { id: `jp-gis-color-value-${index}`, type: useNumber ? 'number' : 'text', value: dataValue, onChange: handleStopChange, onBlur: handleBlur, className: "jp-mod-styled jp-gis-color-row-value-input" }),
46
+ useNumber ? (React.createElement("input", { type: "number", ref: inputRef, value: symbologyValue, onChange: handleOutputChange, className: "jp-mod-styled jp-gis-color-row-output-input" })) : (React.createElement(RgbaColorPicker, { color: colorToRgba(symbologyValue), onChange: handleColorOutputChange })),
42
47
  React.createElement(Button, { id: `jp-gis-remove-color-${index}`, className: "jp-Button jp-gis-filter-icon" },
43
48
  React.createElement(FontAwesomeIcon, { icon: faTrash, onClick: deleteRow }))));
44
49
  };
@@ -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;