@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,78 @@
1
+ import React, { useEffect, useMemo, useState } from 'react';
2
+ import { SchemaForm } from "../../../../shared/formbuilder/objectform/SchemaForm";
3
+ import { WmsTileSourceUrlInput } from "../../../../shared/formbuilder/objectform/components/WmsTileSourceUrlInput";
4
+ import { processBaseSchema, removeFormEntry, } from "../../../../shared/formbuilder/objectform/schemaUtils";
5
+ import { useSchemaFormState } from "../../../../shared/formbuilder/objectform/useSchemaFormState";
6
+ import { GlobalStateDbManager } from "../../../../shared/store";
7
+ import { deepCopy } from "../../../../tools";
8
+ export const WMS_AVAILABLE_LAYERS_CACHE = 'jgis:wmsTileSource:availableLayers';
9
+ export function WmsTileSourceForm(props) {
10
+ const { schema: schemaProp, sourceData, syncData, model, filePath, formContext, dialogOptions, cancel, formErrorSignal, } = props;
11
+ const { formData, schema, formContextValue, hasSchema, handleChangeBase, handleSubmitBase, } = useSchemaFormState({
12
+ sourceData,
13
+ schemaProp,
14
+ model,
15
+ syncData,
16
+ cancel,
17
+ onAfterChange: dialogOptions
18
+ ? (data) => {
19
+ dialogOptions.sourceData = Object.assign({}, data);
20
+ }
21
+ : undefined,
22
+ });
23
+ const [wmsAvailableLayers, setWmsAvailableLayers] = useState([]);
24
+ const stateDb = GlobalStateDbManager.getInstance().getStateDb();
25
+ // Rehydrate available WMS layers from StateDB to avoid having to refetch on remount.
26
+ useEffect(() => {
27
+ const wmsUrl = formData === null || formData === void 0 ? void 0 : formData.url;
28
+ if (!stateDb || !wmsUrl) {
29
+ return;
30
+ }
31
+ const db = stateDb;
32
+ const cacheKey = `${WMS_AVAILABLE_LAYERS_CACHE}:${wmsUrl}`;
33
+ async function loadLayersFromCache() {
34
+ var _a, _b;
35
+ const cached = (await db.fetch(cacheKey));
36
+ if (cached && cached.length > 0) {
37
+ setWmsAvailableLayers(cached);
38
+ }
39
+ else {
40
+ setWmsAvailableLayers([]);
41
+ handleChangeBase(Object.assign(Object.assign({}, (formData !== null && formData !== void 0 ? formData : {})), { params: Object.assign(Object.assign({}, ((_b = ((_a = formData === null || formData === void 0 ? void 0 : formData.params) !== null && _a !== void 0 ? _a : {})) !== null && _b !== void 0 ? _b : {})), { layers: undefined }) }));
42
+ }
43
+ }
44
+ void loadLayersFromCache();
45
+ }, [stateDb, formData === null || formData === void 0 ? void 0 : formData.url]);
46
+ const uiSchema = useMemo(() => {
47
+ var _a, _b, _c, _d;
48
+ const builtUiSchema = {};
49
+ const dataCopy = deepCopy(formData);
50
+ processBaseSchema(dataCopy, schema, builtUiSchema, formContext, removeFormEntry);
51
+ const layerNames = wmsAvailableLayers
52
+ .map(layer => layer.name)
53
+ .filter(name => name !== '');
54
+ // Populate schema enum dynamically so RJSF renders a select for params.layers
55
+ const params = ((_b = (_a = schema.properties) === null || _a === void 0 ? void 0 : _a.params) !== null && _b !== void 0 ? _b : {});
56
+ const paramsProperties = ((_c = params.properties) !== null && _c !== void 0 ? _c : {});
57
+ if (paramsProperties.layers) {
58
+ // Keep select options in sync with the cached/available layers list.
59
+ if (layerNames.length > 0) {
60
+ paramsProperties.layers.enum = layerNames;
61
+ }
62
+ else {
63
+ // Avoid invalid schema (`enum` must be a non-empty array).
64
+ delete paramsProperties.layers.enum;
65
+ }
66
+ }
67
+ builtUiSchema.url = {
68
+ 'ui:widget': WmsTileSourceUrlInput,
69
+ };
70
+ builtUiSchema.params = Object.assign(Object.assign({}, builtUiSchema.params), { 'ui:title': false, layers: Object.assign(Object.assign({}, (_d = builtUiSchema.params) === null || _d === void 0 ? void 0 : _d.layers), { 'ui:widget': 'select', 'ui:placeholder': 'Select a layer', 'ui:enumNames': wmsAvailableLayers.map(layer => layer.title) }) });
71
+ return builtUiSchema;
72
+ }, [schema, formData, formContext, wmsAvailableLayers]);
73
+ if (!hasSchema) {
74
+ return null;
75
+ }
76
+ return (React.createElement(SchemaForm, { schema: schema, formData: formData, onChange: handleChangeBase, onSubmit: handleSubmitBase, formContext: Object.assign(Object.assign({}, formContextValue), { wmsAvailableLayers,
77
+ setWmsAvailableLayers }), filePath: filePath, uiSchema: uiSchema, formErrorSignal: formErrorSignal }));
78
+ }
@@ -3,7 +3,7 @@ import { Dialog } from '@jupyterlab/apputils';
3
3
  import { PromiseDelegate } from '@lumino/coreutils';
4
4
  import { Signal } from '@lumino/signaling';
5
5
  import * as React from 'react';
6
- import { ICreationFormProps } from "../formbuilder";
6
+ import { ICreationFormProps } from "../../shared/formbuilder";
7
7
  export interface ICreationFormWrapperProps extends ICreationFormProps {
8
8
  /**
9
9
  * A promise resolving when the dialog is ready.
@@ -2,7 +2,7 @@ import { Dialog } from '@jupyterlab/apputils';
2
2
  import { PromiseDelegate } from '@lumino/coreutils';
3
3
  import { Signal } from '@lumino/signaling';
4
4
  import * as React from 'react';
5
- import { CreationForm } from "../formbuilder";
5
+ import { CreationForm } from "../../shared/formbuilder";
6
6
  export const CreationFormWrapper = props => {
7
7
  var _a;
8
8
  const [ready, setReady] = React.useState(false);
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Grammar symbology panel.
3
+ *
4
+ * Shows encoding rules grouped by layer. Each layer has optional render-side
5
+ * transforms (KDE, cluster) followed by (field → scale → channels) mapping rows.
6
+ * Multiple layers allow independent rendering pipelines on the same source.
7
+ */
8
+ import React from 'react';
9
+ import { ISymbologyDialogProps } from "./symbologyDialog";
10
+ declare const Grammar: React.FC<ISymbologyDialogProps>;
11
+ export default Grammar;
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Grammar symbology panel.
3
+ *
4
+ * Shows encoding rules grouped by layer. Each layer has optional render-side
5
+ * transforms (KDE, cluster) followed by (field → scale → channels) mapping rows.
6
+ * Multiple layers allow independent rendering pipelines on the same source.
7
+ */
8
+ import { faPlus, faTrash, faXmark } from '@fortawesome/free-solid-svg-icons';
9
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
10
+ import { UUID } from '@lumino/coreutils';
11
+ import React, { useCallback, useEffect, useState } from 'react';
12
+ import MappingRow, { WhenAddForm, formatPredicate, } from "./components/MappingRow";
13
+ import { NumericInput } from "./components/NumericInput";
14
+ import { useEffectiveSymbologyParams } from "./hooks/useEffectiveSymbologyParams";
15
+ import useGetBandInfo from "./hooks/useGetBandInfo";
16
+ import { useGetProperties } from "./hooks/useGetProperties";
17
+ import { useOkSignal } from "./hooks/useOkSignal";
18
+ import { saveSymbology, } from "./symbologyUtils";
19
+ import { Button } from "../../../shared/components/Button";
20
+ import { NativeSelect, NativeSelectOption, } from "../../../shared/components/NativeSelect";
21
+ const DEFAULT_CHANNELS = ['fill-color', 'circle-fill-color'];
22
+ const DEFAULT_RGBA = [128, 128, 128, 1];
23
+ // ---------------------------------------------------------------------------
24
+ // Canonical → Grammar conversion
25
+ // ---------------------------------------------------------------------------
26
+ // ---------------------------------------------------------------------------
27
+ // Transform row
28
+ // ---------------------------------------------------------------------------
29
+ const TRANSFORM_TYPES = [
30
+ { value: 'kde', label: 'KDE (heatmap)' },
31
+ { value: 'cluster', label: 'cluster' },
32
+ ];
33
+ function defaultTransform(type) {
34
+ switch (type) {
35
+ case 'kde':
36
+ return { type: 'kde', radius: 10, blur: 15 };
37
+ case 'cluster':
38
+ return { type: 'cluster', radius: 40 };
39
+ }
40
+ }
41
+ const TransformRow = ({ transform, availableFields, onChange, onDelete, }) => {
42
+ var _a;
43
+ const handleTypeChange = (type) => {
44
+ onChange(defaultTransform(type));
45
+ };
46
+ return (React.createElement("div", { className: "jp-gis-grammar-transform-row" },
47
+ React.createElement(NativeSelect, { value: transform.type, onChange: e => handleTypeChange(e.target.value) }, TRANSFORM_TYPES.map(({ value, label }) => (React.createElement(NativeSelectOption, { key: value, value: value }, label)))),
48
+ transform.type === 'kde' && (React.createElement(React.Fragment, null,
49
+ React.createElement("label", null, "radius"),
50
+ React.createElement(NumericInput, { style: { width: 52 }, value: transform.radius, onChange: v => onChange(Object.assign(Object.assign({}, transform), { radius: v })) }),
51
+ React.createElement("label", null, "blur"),
52
+ React.createElement(NumericInput, { style: { width: 52 }, value: transform.blur, onChange: v => onChange(Object.assign(Object.assign({}, transform), { blur: v })) }),
53
+ React.createElement("label", null, "weight"),
54
+ React.createElement(NativeSelect, { value: (_a = transform.weightField) !== null && _a !== void 0 ? _a : '', onChange: e => onChange(Object.assign(Object.assign({}, transform), { weightField: e.target.value || undefined })) },
55
+ React.createElement(NativeSelectOption, { value: "" }, "(none)"),
56
+ availableFields.map(field => (React.createElement(NativeSelectOption, { key: field, value: field }, field)))))),
57
+ transform.type === 'cluster' && (React.createElement(React.Fragment, null,
58
+ React.createElement("label", null, "radius"),
59
+ React.createElement(NumericInput, { style: { width: 52 }, value: transform.radius, onChange: v => onChange(Object.assign(Object.assign({}, transform), { radius: v })) }))),
60
+ React.createElement(Button, { type: "button", className: "jp-gis-grammar-delete-btn", onClick: onDelete, title: "Remove transform", style: { marginLeft: 'auto' } },
61
+ React.createElement(FontAwesomeIcon, { icon: faTrash }))));
62
+ };
63
+ const LayerSection = ({ layer, layerIndex, totalLayers, availableFields, featureValues, isRasterLayer = false, onChange, onDelete, }) => {
64
+ var _a, _b, _c, _d;
65
+ const [addingLayerWhen, setAddingLayerWhen] = useState(false);
66
+ const addLayerPredicate = useCallback((pred) => {
67
+ var _a;
68
+ onChange(Object.assign(Object.assign({}, layer), { when: [...((_a = layer.when) !== null && _a !== void 0 ? _a : []), pred] }));
69
+ setAddingLayerWhen(false);
70
+ }, [layer, onChange]);
71
+ const removeLayerPredicate = useCallback((index) => {
72
+ var _a;
73
+ const next = ((_a = layer.when) !== null && _a !== void 0 ? _a : []).filter((_, i) => i !== index);
74
+ onChange(Object.assign(Object.assign({}, layer), { when: next.length > 0 ? next : undefined }));
75
+ }, [layer, onChange]);
76
+ const updateTransform = useCallback((index, t) => {
77
+ const next = [...layer.transforms];
78
+ next[index] = t;
79
+ onChange(Object.assign(Object.assign({}, layer), { transforms: next }));
80
+ }, [layer, onChange]);
81
+ const removeTransform = useCallback((index) => {
82
+ onChange(Object.assign(Object.assign({}, layer), { transforms: layer.transforms.filter((_, i) => i !== index) }));
83
+ }, [layer, onChange]);
84
+ const addTransform = useCallback(() => {
85
+ onChange(Object.assign(Object.assign({}, layer), { transforms: [...layer.transforms, defaultTransform('kde')] }));
86
+ }, [layer, onChange]);
87
+ const updateRow = useCallback((index, row) => {
88
+ const next = [...layer.rows];
89
+ next[index] = row;
90
+ onChange(Object.assign(Object.assign({}, layer), { rows: next }));
91
+ }, [layer, onChange]);
92
+ const removeRow = useCallback((index) => {
93
+ onChange(Object.assign(Object.assign({}, layer), { rows: layer.rows.filter((_, i) => i !== index) }));
94
+ }, [layer, onChange]);
95
+ const hasKDE = layer.transforms.some(t => t.type === 'kde');
96
+ const isRaster = isRasterLayer || hasKDE;
97
+ const addRow = useCallback(() => {
98
+ const defaultChannels = isRaster
99
+ ? ['pixel-color']
100
+ : DEFAULT_CHANNELS;
101
+ onChange(Object.assign(Object.assign({}, layer), { rows: [
102
+ ...layer.rows,
103
+ {
104
+ id: UUID.uuid4(),
105
+ scale: { scheme: 'constant_rgba', params: { value: DEFAULT_RGBA } },
106
+ channels: [...defaultChannels],
107
+ },
108
+ ] }));
109
+ }, [layer, onChange, isRaster]);
110
+ // KDE layers expose '$density'; raster layers expose $band-N fields.
111
+ // Both cases suppress the raw feature attribute list.
112
+ const encodingFields = hasKDE ? ['$density'] : availableFields;
113
+ return (React.createElement("div", { className: "jp-gis-grammar-layer-section" },
114
+ React.createElement("div", { className: "jp-gis-grammar-layer-header" },
115
+ React.createElement("span", { className: "jp-gis-grammar-layer-label" },
116
+ "Layer ",
117
+ layerIndex + 1),
118
+ React.createElement(Button, { type: "button", variant: "outline", onClick: addTransform, title: "Add transform" },
119
+ React.createElement(FontAwesomeIcon, { "data-icon": "inline-start", icon: faPlus }),
120
+ "Transform"),
121
+ totalLayers > 1 && (React.createElement(Button, { type: "button", variant: "outline", style: { height: 32, width: 32 }, onClick: onDelete, title: "Remove layer" },
122
+ React.createElement(FontAwesomeIcon, { icon: faTrash })))),
123
+ React.createElement("div", { className: "jp-gis-grammar-when-row" },
124
+ React.createElement("span", { className: "jp-gis-grammar-when-label" }, "when"),
125
+ ((_b = (_a = layer.when) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 1 && (React.createElement(Button, { type: "button", className: "jp-gis-grammar-when-op", onClick: () => {
126
+ var _a;
127
+ return onChange(Object.assign(Object.assign({}, layer), { whenOp: ((_a = layer.whenOp) !== null && _a !== void 0 ? _a : 'all') === 'all' ? 'any' : 'all' }));
128
+ } }, (_c = layer.whenOp) !== null && _c !== void 0 ? _c : 'all')), (_d = layer.when) === null || _d === void 0 ? void 0 :
129
+ _d.map((pred, i) => (React.createElement("span", { key: i, className: "jp-gis-grammar-when-chip" },
130
+ formatPredicate(pred),
131
+ React.createElement(Button, { type: "button", onClick: () => removeLayerPredicate(i), title: "Remove condition" },
132
+ React.createElement(FontAwesomeIcon, { icon: faXmark }))))),
133
+ addingLayerWhen ? (React.createElement(WhenAddForm, { availableFields: availableFields, onAdd: addLayerPredicate, onCancel: () => setAddingLayerWhen(false) })) : (React.createElement(Button, { type: "button", className: "jp-gis-grammar-when-add-btn", onClick: () => setAddingLayerWhen(true) },
134
+ React.createElement(FontAwesomeIcon, { icon: faPlus })))),
135
+ layer.transforms.map((t, i) => (React.createElement(TransformRow, { key: i, transform: t, availableFields: availableFields, onChange: updated => updateTransform(i, updated), onDelete: () => removeTransform(i) }))),
136
+ layer.rows.map((row, i) => (React.createElement(MappingRow, { key: row.id, row: row, availableFields: encodingFields, featureValues: featureValues, isRaster: isRaster, onChange: updated => updateRow(i, updated), onDelete: () => removeRow(i) }))),
137
+ React.createElement("div", { className: "jp-gis-symbology-button-container" },
138
+ React.createElement(Button, { className: "jp-Dialog-button jp-mod-accept jp-mod-styled", style: { margin: '0 0 0.5rem 1rem' }, onClick: addRow }, "Add Mapping"))));
139
+ };
140
+ // ---------------------------------------------------------------------------
141
+ // Grammar panel
142
+ // ---------------------------------------------------------------------------
143
+ const Grammar = ({ model, okSignalPromise, layerId, isStorySegmentOverride, segmentId, }) => {
144
+ const layer = layerId !== undefined ? model.getLayer(layerId) : null;
145
+ const isRasterLayer = (layer === null || layer === void 0 ? void 0 : layer.type) === 'GeoTiffLayer';
146
+ const { featureProperties: selectableAttributesAndValues } = useGetProperties({ layerId, model });
147
+ // For raster layers, expose $band-N pseudo-fields derived from band metadata.
148
+ const { bandRows } = useGetBandInfo(model, layer);
149
+ const params = useEffectiveSymbologyParams({
150
+ model,
151
+ layerId,
152
+ layer,
153
+ isStorySegmentOverride,
154
+ segmentId,
155
+ });
156
+ const [layers, setLayers] = useState([
157
+ { id: UUID.uuid4(), transforms: [], rows: [] },
158
+ ]);
159
+ useEffect(() => {
160
+ if (!(params === null || params === void 0 ? void 0 : params.symbologyState)) {
161
+ return;
162
+ }
163
+ const rawState = params.symbologyState;
164
+ if (!Array.isArray(rawState.layers) ||
165
+ !rawState.layers.length) {
166
+ setLayers([{ id: UUID.uuid4(), transforms: [], rows: [] }]);
167
+ return;
168
+ }
169
+ const state = rawState;
170
+ setLayers(state.layers.map(grammarLayer => {
171
+ var _a, _b;
172
+ return (Object.assign(Object.assign(Object.assign({ id: grammarLayer.id, transforms: (_a = grammarLayer.preprocess) !== null && _a !== void 0 ? _a : [] }, (((_b = grammarLayer.when) === null || _b === void 0 ? void 0 : _b.length) ? { when: grammarLayer.when } : {})), (grammarLayer.whenOp ? { whenOp: grammarLayer.whenOp } : {})), { rows: grammarLayer.rules.flatMap(rule => rule.mappings.map((mapping, mi) => {
173
+ var _a;
174
+ return (Object.assign(Object.assign({
175
+ // Preserve the rule's stable id so React keys and story-segment
176
+ // override merging stay consistent across dialog opens.
177
+ // When a rule has multiple mappings, suffix with the mapping index.
178
+ id: rule.mappings.length === 1 ? rule.id : `${rule.id}-${mi}`, fields: ((_a = rule.fields) === null || _a === void 0 ? void 0 : _a.length) ? rule.fields : undefined, scale: mapping.scale, channels: [...mapping.channels] }, (rule.when ? { when: rule.when } : {})), (rule.whenOp ? { whenOp: rule.whenOp } : {})));
179
+ })) }));
180
+ }));
181
+ }, [params]);
182
+ const handleOk = () => {
183
+ if (!layerId || !(layer === null || layer === void 0 ? void 0 : layer.parameters)) {
184
+ return;
185
+ }
186
+ const grammarLayers = layers.map(uiLayer => {
187
+ var _a;
188
+ const rules = uiLayer.rows
189
+ .filter(row => row.channels.length > 0)
190
+ .map(row => {
191
+ var _a, _b;
192
+ return (Object.assign(Object.assign(Object.assign(Object.assign({ id: row.id }, (((_a = row.fields) === null || _a === void 0 ? void 0 : _a.length) ? { fields: row.fields } : {})), (((_b = row.when) === null || _b === void 0 ? void 0 : _b.length) ? { when: row.when } : {})), (row.whenOp ? { whenOp: row.whenOp } : {})), { mappings: [
193
+ {
194
+ scale: row.scale,
195
+ channels: row.channels,
196
+ },
197
+ ] }));
198
+ });
199
+ return Object.assign(Object.assign(Object.assign(Object.assign({ id: uiLayer.id }, (uiLayer.transforms.length
200
+ ? { preprocess: uiLayer.transforms }
201
+ : {})), (((_a = uiLayer.when) === null || _a === void 0 ? void 0 : _a.length) ? { when: uiLayer.when } : {})), (uiLayer.whenOp ? { whenOp: uiLayer.whenOp } : {})), { rules });
202
+ });
203
+ const symbologyState = {
204
+ layers: grammarLayers,
205
+ };
206
+ saveSymbology({
207
+ model,
208
+ layerId,
209
+ isStorySegmentOverride,
210
+ segmentId,
211
+ payload: { symbologyState },
212
+ mutateLayerBeforeSave: targetLayer => {
213
+ var _a;
214
+ if (((_a = targetLayer.parameters) === null || _a === void 0 ? void 0 : _a.color) !== undefined) {
215
+ delete targetLayer.parameters.color;
216
+ }
217
+ },
218
+ });
219
+ };
220
+ useOkSignal(okSignalPromise, handleOk);
221
+ const addLayer = () => {
222
+ setLayers(prev => [
223
+ ...prev,
224
+ { id: UUID.uuid4(), transforms: [], rows: [] },
225
+ ]);
226
+ };
227
+ const availableFields = isRasterLayer
228
+ ? bandRows.map(b => `$band-${b.band}`)
229
+ : Object.keys(selectableAttributesAndValues);
230
+ return (React.createElement("div", { className: "jp-gis-layer-symbology-container" },
231
+ layers.map((uiLayer, i) => (React.createElement(LayerSection, { key: uiLayer.id, layer: uiLayer, layerIndex: i, totalLayers: layers.length, availableFields: availableFields, featureValues: selectableAttributesAndValues, isRasterLayer: isRasterLayer, onChange: updated => setLayers(prev => prev.map((l, j) => (j === i ? updated : l))), onDelete: () => setLayers(prev => prev.filter((_, j) => j !== i)) }))),
232
+ React.createElement("div", { className: "jp-gis-symbology-button-container" },
233
+ React.createElement(Button, { className: "jp-Dialog-button jp-mod-accept jp-mod-styled", onClick: addLayer }, "Add Layer"))));
234
+ };
235
+ export default Grammar;
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
- import { ISymbologyDialogProps } from "../../symbologyDialog";
2
+ import { ISymbologyDialogProps } from "./symbologyDialog";
3
3
  declare const Heatmap: React.FC<ISymbologyDialogProps>;
4
4
  export default Heatmap;
@@ -1,10 +1,11 @@
1
1
  import colormap from 'colormap';
2
2
  import React, { useEffect, useState } from 'react';
3
- import ColorRampSelector from "../../components/color_ramp/ColorRampSelector";
4
- import { useOkSignal } from "../../hooks/useOkSignal";
5
- import { saveSymbology, } from "../../symbologyUtils";
6
- import { useLatest } from "../../../../shared/hooks/useLatest";
7
- import { useEffectiveSymbologyParams } from '../../hooks/useEffectiveSymbologyParams';
3
+ import ColorRampSelector from "./components/color_ramp/ColorRampSelector";
4
+ import { useOkSignal } from "./hooks/useOkSignal";
5
+ import { saveSymbology, } from "./symbologyUtils";
6
+ import { useLatest } from "../../../shared/hooks/useLatest";
7
+ import { useColorMapList, COLOR_RAMP_DEFAULTS, } from './colorRampUtils';
8
+ import { useEffectiveSymbologyParams } from './hooks/useEffectiveSymbologyParams';
8
9
  const Heatmap = ({ model, okSignalPromise, layerId, isStorySegmentOverride, segmentId, }) => {
9
10
  if (!layerId) {
10
11
  return;
@@ -26,9 +27,20 @@ const Heatmap = ({ model, okSignalPromise, layerId, isStorySegmentOverride, segm
26
27
  blur: 15,
27
28
  });
28
29
  const [reverseRamp, setReverseRamp] = useState(false);
30
+ const [colorMaps, setColorMaps] = useState([]);
29
31
  const selectedRampRef = useLatest(selectedRamp);
30
32
  const heatmapOptionsRef = useLatest(heatmapOptions);
31
33
  const reverseRampRef = useLatest(reverseRamp);
34
+ useColorMapList(setColorMaps);
35
+ // Filter: only continuous colormaps with class requirement <= 9 nshades
36
+ // because heatmap does not support nshades > 9
37
+ const continuousMaps = colorMaps.filter(m => {
38
+ if (m.type !== 'continuous') {
39
+ return false;
40
+ }
41
+ const minShades = COLOR_RAMP_DEFAULTS[m.name];
42
+ return !minShades || minShades <= 9;
43
+ });
32
44
  useEffect(() => {
33
45
  populateOptions();
34
46
  }, []);
@@ -38,8 +50,8 @@ const Heatmap = ({ model, okSignalPromise, layerId, isStorySegmentOverride, segm
38
50
  if ((_a = params.symbologyState) === null || _a === void 0 ? void 0 : _a.colorRamp) {
39
51
  colorRamp = params.symbologyState.colorRamp;
40
52
  }
41
- if (typeof ((_b = params.symbologyState) === null || _b === void 0 ? void 0 : _b.reverse) === 'boolean') {
42
- setReverseRamp(params.symbologyState.reverse);
53
+ if (typeof ((_b = params.symbologyState) === null || _b === void 0 ? void 0 : _b.reverseRamp) === 'boolean') {
54
+ setReverseRamp(params.symbologyState.reverseRamp);
43
55
  }
44
56
  setSelectedRamp(colorRamp);
45
57
  };
@@ -52,10 +64,15 @@ const Heatmap = ({ model, okSignalPromise, layerId, isStorySegmentOverride, segm
52
64
  if (reverseRampRef.current) {
53
65
  colorMap = [...colorMap].reverse();
54
66
  }
67
+ // The Heatmap dialog converts a vector layer to a heatmap layer via
68
+ // mutateLayerBeforeSave; the symbologyState it writes is structurally
69
+ // a heatmap state (renderType: 'Heatmap', with a gradient array) but
70
+ // needs to be accepted on VectorSymbologyParams here, hence the cast.
55
71
  const symbologyState = {
56
72
  renderType: 'Heatmap',
57
73
  colorRamp: selectedRampRef.current,
58
- reverse: reverseRampRef.current,
74
+ reverseRamp: reverseRampRef.current,
75
+ gradient: colorMap,
59
76
  };
60
77
  saveSymbology({
61
78
  model,
@@ -64,12 +81,15 @@ const Heatmap = ({ model, okSignalPromise, layerId, isStorySegmentOverride, segm
64
81
  segmentId,
65
82
  payload: {
66
83
  symbologyState,
67
- color: colorMap,
68
84
  },
69
85
  mutateLayerBeforeSave: targetLayer => {
86
+ var _a;
70
87
  targetLayer.parameters.blur = heatmapOptionsRef.current.blur;
71
88
  targetLayer.parameters.radius = heatmapOptionsRef.current.radius;
72
89
  targetLayer.type = 'HeatmapLayer';
90
+ if (((_a = targetLayer.parameters) === null || _a === void 0 ? void 0 : _a.color) !== undefined) {
91
+ delete targetLayer.parameters.color;
92
+ }
73
93
  },
74
94
  });
75
95
  };
@@ -78,7 +98,7 @@ const Heatmap = ({ model, okSignalPromise, layerId, isStorySegmentOverride, segm
78
98
  React.createElement("p", null, "Represent features based on their density using a heatmap."),
79
99
  React.createElement("div", { className: "jp-gis-symbology-row jp-gis-heatmap" },
80
100
  React.createElement("label", { htmlFor: "color-ramp-select" }, "Color Ramp:"),
81
- React.createElement(ColorRampSelector, { selectedRamp: selectedRamp, setSelected: setSelectedRamp, reverse: reverseRamp, setReverse: setReverseRamp })),
101
+ React.createElement(ColorRampSelector, { selectedRamp: selectedRamp, setSelected: setSelectedRamp, reverse: reverseRamp, setReverse: setReverseRamp, colorMaps: continuousMaps })),
82
102
  React.createElement("div", { className: "jp-gis-symbology-row" },
83
103
  React.createElement("label", { htmlFor: 'vector-value-select' }, "Radius:"),
84
104
  React.createElement("input", { type: "number", value: heatmapOptions.radius, className: "jp-mod-styled", onChange: event => setHetamapOptions(prevState => (Object.assign(Object.assign({}, prevState), { radius: +event.target.value }))) })),
@@ -1,10 +1,10 @@
1
- import { InterpolationType } from './tiff_layer/types/SingleBandPseudoColor';
1
+ export type InterpolationType = 'discrete' | 'linear' | 'exact';
2
2
  export declare namespace VectorClassifications {
3
- const calculateQuantileBreaks: (values: number[], nClasses: number) => number[];
4
- const calculateEqualIntervalBreaks: (values: number[], nClasses: number) => number[];
5
- const calculateJenksBreaks: (values: number[], nClasses: number) => any[];
6
- const calculatePrettyBreaks: (values: number[], nClasses: number) => number[];
7
- const calculateLogarithmicBreaks: (values: number[], nClasses: number) => number[];
3
+ const calculateQuantileBreaks: (values: number[], nStops: number) => number[];
4
+ const calculateEqualIntervalBreaks: (values: number[], nStops: number) => number[];
5
+ const calculateJenksBreaks: (values: number[], nStops: number) => any[];
6
+ const calculatePrettyBreaks: (values: number[], nStops: number) => number[];
7
+ const calculateLogarithmicBreaks: (values: number[], nStops: number) => number[];
8
8
  }
9
9
  export declare namespace GeoTiffClassifications {
10
10
  const classifyQuantileBreaks: (nClasses: number, bandNumber: number, url: string, colorRampType: string) => Promise<number[]>;