@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.
- package/lib/commands/BaseCommandIDs.d.ts +6 -0
- package/lib/commands/BaseCommandIDs.js +6 -0
- package/lib/commands/index.js +245 -55
- package/lib/commands/operationCommands.js +2 -2
- package/lib/constants.js +6 -1
- package/lib/{panelview/annotationPanel.js → features/annotations/AnnotationsPanel.js} +1 -1
- package/lib/{annotations → features/annotations}/index.d.ts +1 -0
- package/lib/{annotations → features/annotations}/index.js +1 -0
- package/lib/{console → features/console}/consoleview.js +1 -1
- package/lib/{panelview/filter-panel → features/filter}/Filter.js +4 -4
- package/lib/{panelview/filter-panel → features/filter}/FilterRow.d.ts +3 -2
- package/lib/{panelview/filter-panel → features/filter}/FilterRow.js +2 -1
- package/lib/{panelview/identify-panel → features/identify}/IdentifyPanel.d.ts +2 -0
- package/lib/features/identify/IdentifyPanel.js +102 -0
- package/lib/features/identify/components/FeatureCard.d.ts +17 -0
- package/lib/features/identify/components/FeatureCard.js +26 -0
- package/lib/features/identify/components/FeatureCardHeader.d.ts +11 -0
- package/lib/features/identify/components/FeatureCardHeader.js +30 -0
- package/lib/features/identify/components/FeatureFloater.d.ts +7 -0
- package/lib/features/identify/components/FeatureFloater.js +19 -0
- package/lib/features/identify/components/FeaturePropertyList.d.ts +11 -0
- package/lib/features/identify/components/FeaturePropertyList.js +18 -0
- package/lib/features/identify/components/FeatureRow.d.ts +13 -0
- package/lib/features/identify/components/FeatureRow.js +25 -0
- package/lib/features/identify/components/PropertyEditors.d.ts +44 -0
- package/lib/features/identify/components/PropertyEditors.js +56 -0
- package/lib/features/identify/hooks/useIdentifyPropertyEditor.d.ts +11 -0
- package/lib/features/identify/hooks/useIdentifyPropertyEditor.js +132 -0
- package/lib/features/identify/types/editorTypes.d.ts +21 -0
- package/lib/features/identify/utils/getFeatureIdentifier.d.ts +5 -0
- package/lib/features/identify/utils/getFeatureIdentifier.js +14 -0
- package/lib/features/identify/utils/highlightLayer.d.ts +11 -0
- package/lib/features/identify/utils/highlightLayer.js +57 -0
- package/lib/features/identify/utils/highlightStyle.d.ts +7 -0
- package/lib/features/identify/utils/highlightStyle.js +40 -0
- package/lib/{dialogs/layerBrowserDialog.js → features/layer-browser/index.js} +2 -2
- package/lib/features/layers/forms/layer/geoTiffLayerForm.d.ts +3 -0
- package/lib/{formbuilder/objectform/layer/webGlLayerForm.js → features/layers/forms/layer/geoTiffLayerForm.js} +5 -5
- package/lib/{formbuilder/objectform → features/layers/forms}/layer/heatmapLayerForm.js +4 -4
- package/lib/{formbuilder/objectform → features/layers/forms}/layer/hillshadeLayerForm.js +4 -4
- package/lib/{formbuilder/objectform → features/layers/forms}/layer/index.d.ts +1 -1
- package/lib/{formbuilder/objectform → features/layers/forms}/layer/index.js +1 -1
- package/lib/{formbuilder/objectform → features/layers/forms}/layer/layerform.d.ts +1 -1
- package/lib/{formbuilder/objectform → features/layers/forms}/layer/layerform.js +4 -4
- package/lib/features/layers/forms/layer/storySegmentLayerForm.js +150 -0
- package/lib/{formbuilder/objectform → features/layers/forms}/layer/vectorlayerform.js +4 -4
- package/lib/{formbuilder/objectform → features/layers/forms}/source/geojsonsource.js +5 -5
- package/lib/features/layers/forms/source/geopackagesource.d.ts +3 -0
- package/lib/features/layers/forms/source/geopackagesource.js +93 -0
- package/lib/{formbuilder/objectform → features/layers/forms}/source/geotiffsource.js +5 -5
- package/lib/{formbuilder/objectform → features/layers/forms}/source/index.d.ts +2 -0
- package/lib/{formbuilder/objectform → features/layers/forms}/source/index.js +2 -0
- package/lib/{formbuilder/objectform → features/layers/forms}/source/pathbasedsource.js +5 -5
- package/lib/{formbuilder/objectform → features/layers/forms}/source/sourceform.d.ts +1 -1
- package/lib/{formbuilder/objectform → features/layers/forms}/source/sourceform.js +4 -4
- package/lib/{formbuilder/objectform → features/layers/forms}/source/tilesourceform.js +4 -4
- package/lib/features/layers/forms/source/wmsTileSource.d.ts +4 -0
- package/lib/features/layers/forms/source/wmsTileSource.js +78 -0
- package/lib/{dialogs → features/layers}/layerCreationFormDialog.d.ts +1 -1
- package/lib/{dialogs → features/layers}/layerCreationFormDialog.js +1 -1
- package/lib/features/layers/symbology/Grammar.d.ts +11 -0
- package/lib/features/layers/symbology/Grammar.js +235 -0
- package/lib/{dialogs/symbology/vector_layer/types → features/layers/symbology}/Heatmap.d.ts +1 -1
- package/lib/{dialogs/symbology/vector_layer/types → features/layers/symbology}/Heatmap.js +30 -10
- package/lib/{dialogs → features/layers}/symbology/classificationModes.d.ts +6 -6
- package/lib/{dialogs → features/layers}/symbology/classificationModes.js +57 -57
- package/lib/features/layers/symbology/colorRampUtils.d.ts +65 -0
- package/lib/features/layers/symbology/colorRampUtils.js +242 -0
- package/lib/features/layers/symbology/components/MappingRow.d.ts +40 -0
- package/lib/features/layers/symbology/components/MappingRow.js +516 -0
- package/lib/features/layers/symbology/components/NumericInput.d.ts +20 -0
- package/lib/features/layers/symbology/components/NumericInput.js +44 -0
- package/lib/features/layers/symbology/components/ScaleEditor.d.ts +33 -0
- package/lib/features/layers/symbology/components/ScaleEditor.js +221 -0
- package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampControls.d.ts +1 -1
- package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampControls.js +3 -2
- package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampSelector.d.ts +2 -1
- package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampSelector.js +12 -15
- package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampSelectorEntry.d.ts +2 -2
- package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ColorRampSelectorEntry.js +3 -11
- package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ModeSelectRow.d.ts +1 -1
- package/lib/features/layers/symbology/components/color_ramp/RgbaColorPicker.d.ts +13 -0
- package/lib/features/layers/symbology/components/color_ramp/RgbaColorPicker.js +128 -0
- package/lib/{dialogs → features/layers}/symbology/components/color_stops/StopContainer.js +3 -1
- package/lib/{dialogs → features/layers}/symbology/components/color_stops/StopRow.d.ts +2 -2
- package/lib/{dialogs → features/layers}/symbology/components/color_stops/StopRow.js +12 -7
- package/lib/features/layers/symbology/grammarToOLLayer.d.ts +27 -0
- package/lib/features/layers/symbology/grammarToOLLayer.js +145 -0
- package/lib/features/layers/symbology/grammarToOLStyle.d.ts +32 -0
- package/lib/features/layers/symbology/grammarToOLStyle.js +467 -0
- package/lib/{dialogs → features/layers}/symbology/hooks/useGetBandInfo.d.ts +1 -1
- package/lib/{dialogs → features/layers}/symbology/hooks/useGetBandInfo.js +1 -1
- package/lib/{dialogs → features/layers}/symbology/hooks/useGetProperties.js +1 -1
- package/lib/{dialogs → features/layers}/symbology/hooks/useGetSymbology.js +4 -2
- package/lib/features/layers/symbology/styleBuilder.d.ts +21 -0
- package/lib/features/layers/symbology/styleBuilder.js +145 -0
- package/lib/{dialogs → features/layers}/symbology/symbologyDialog.d.ts +3 -2
- package/lib/{dialogs → features/layers}/symbology/symbologyDialog.js +12 -12
- package/lib/features/layers/symbology/symbologyUtils.d.ts +41 -0
- package/lib/features/layers/symbology/symbologyUtils.js +114 -0
- package/lib/{panelview/objectproperties.d.ts → features/objectproperties/index.d.ts} +1 -1
- package/lib/{panelview/objectproperties.js → features/objectproperties/index.js} +5 -10
- package/lib/{dialogs → features/processing}/ProcessingFormDialog.d.ts +1 -1
- package/lib/{dialogs → features/processing}/ProcessingFormDialog.js +28 -14
- package/lib/features/processing/forms/MapExtentToggle.d.ts +13 -0
- package/lib/features/processing/forms/MapExtentToggle.js +20 -0
- package/lib/features/processing/forms/clipRasterByExtentForm.d.ts +10 -0
- package/lib/features/processing/forms/clipRasterByExtentForm.js +99 -0
- package/lib/{formbuilder/objectform/process → features/processing/forms}/dissolveProcessForm.js +5 -5
- package/lib/{formbuilder/objectform → features/processing/forms}/processingForm.d.ts +1 -1
- package/lib/{formbuilder/objectform → features/processing/forms}/processingForm.js +6 -6
- package/lib/features/processing/forms/rasterizeForm.d.ts +10 -0
- package/lib/features/processing/forms/rasterizeForm.js +75 -0
- package/lib/features/processing/forms/useMapExtent.d.ts +22 -0
- package/lib/features/processing/forms/useMapExtent.js +57 -0
- package/lib/{processing → features/processing}/index.d.ts +19 -2
- package/lib/features/processing/index.js +1246 -0
- package/lib/{processing → features/processing}/processingCommands.d.ts +1 -1
- package/lib/features/processing/processingCommands.js +168 -0
- package/lib/features/processing/serverProcessing.d.ts +51 -0
- package/lib/features/processing/serverProcessing.js +99 -0
- package/lib/{stacBrowser → features/stac-browser}/components/StacPanel.js +2 -2
- package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/QueryableComboBox.js +64 -21
- package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/QueryableRow.js +1 -1
- package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/StacFilterExtensionPanel.js +2 -2
- package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/StacQueryableFilters.js +1 -1
- package/lib/{stacBrowser → features/stac-browser}/components/geodes/StacFilterSection.js +3 -3
- package/lib/{stacBrowser → features/stac-browser}/components/shared/StacPanelResults.js +3 -3
- package/lib/{stacBrowser → features/stac-browser}/components/shared/StacSpatialExtent.js +1 -1
- package/lib/{stacBrowser → features/stac-browser}/components/shared/StacTemporalExtent.js +1 -1
- package/lib/{stacBrowser → features/stac-browser}/context/StacResultsContext.js +2 -2
- package/lib/{stacBrowser → features/stac-browser}/hooks/useGeodesSearch.js +2 -2
- package/lib/{stacBrowser → features/stac-browser}/hooks/useStacFilterExtension.d.ts +1 -1
- package/lib/{stacBrowser → features/stac-browser}/hooks/useStacFilterExtension.js +198 -114
- package/lib/{stacBrowser → features/stac-browser}/hooks/useStacSearch.d.ts +1 -0
- package/lib/{stacBrowser → features/stac-browser}/hooks/useStacSearch.js +19 -11
- package/lib/features/stac-browser/types/types.js +1 -0
- package/lib/{panelview/story-maps → features/story}/SpectaPanel.d.ts +4 -1
- package/lib/{panelview/story-maps → features/story}/SpectaPanel.js +3 -4
- package/lib/{panelview/story-maps → features/story}/StoryEditorPanel.js +1 -1
- package/lib/{panelview/story-maps → features/story}/StoryViewerPanel.d.ts +12 -11
- package/lib/features/story/StoryViewerPanel.js +64 -0
- package/lib/features/story/__tests__/fixtures/listStoryTestItems.d.ts +9 -0
- package/lib/features/story/__tests__/fixtures/listStoryTestItems.js +21 -0
- package/lib/features/story/components/ListStoryMapOverlayPanel.d.ts +10 -0
- package/lib/features/story/components/ListStoryMapOverlayPanel.js +11 -0
- package/lib/features/story/components/ListStoryMarkdownMeasurePane.d.ts +11 -0
- package/lib/features/story/components/ListStoryMarkdownMeasurePane.js +55 -0
- package/lib/features/story/components/ListStoryOverlayMarkdown.d.ts +15 -0
- package/lib/features/story/components/ListStoryOverlayMarkdown.js +93 -0
- package/lib/features/story/components/ListStoryStageOverlay.d.ts +12 -0
- package/lib/features/story/components/ListStoryStageOverlay.js +132 -0
- package/lib/features/story/components/ListStoryVirtualScrollTrack.d.ts +6 -0
- package/lib/features/story/components/ListStoryVirtualScrollTrack.js +7 -0
- package/lib/{panelview/story-maps → features/story}/components/SpectaDesktopView.d.ts +4 -2
- package/lib/features/story/components/SpectaDesktopView.js +67 -0
- package/lib/{panelview/story-maps → features/story}/components/SpectaMobileView.d.ts +2 -4
- package/lib/{panelview/story-maps → features/story}/components/SpectaMobileView.js +3 -3
- package/lib/features/story/components/SpectaSingleModeContent.d.ts +18 -0
- package/lib/features/story/components/SpectaSingleModeContent.js +8 -0
- package/lib/features/story/context/ListStoryScrollTrackContext.d.ts +15 -0
- package/lib/features/story/context/ListStoryScrollTrackContext.js +142 -0
- package/lib/features/story/hooks/useCurrentSegmentIndex.d.ts +3 -0
- package/lib/features/story/hooks/useCurrentSegmentIndex.js +17 -0
- package/lib/features/story/hooks/useListStoryScroll.d.ts +15 -0
- package/lib/features/story/hooks/useListStoryScroll.js +107 -0
- package/lib/features/story/hooks/useQueuedMarkdownHeightMeasure.d.ts +19 -0
- package/lib/features/story/hooks/useQueuedMarkdownHeightMeasure.js +56 -0
- package/lib/features/story/hooks/useStoryImagePreload.d.ts +1 -0
- package/lib/features/story/hooks/useStoryImagePreload.js +24 -0
- package/lib/{panelview/story-maps → features/story}/hooks/useStoryMap.d.ts +2 -7
- package/lib/{panelview/story-maps → features/story}/hooks/useStoryMap.js +20 -44
- package/lib/features/story/hooks/useStoryScrollState.d.ts +21 -0
- package/lib/features/story/hooks/useStoryScrollState.js +39 -0
- package/lib/features/story/hooks/useStorySegmentSync.d.ts +8 -0
- package/lib/features/story/hooks/useStorySegmentSync.js +51 -0
- package/lib/features/story/types/types.d.ts +38 -0
- package/lib/features/story/types/types.js +1 -0
- package/lib/features/story/utils/computeListStoryScrollState.d.ts +12 -0
- package/lib/features/story/utils/computeListStoryScrollState.js +70 -0
- package/lib/features/story/utils/listStoryMeasureQueue.d.ts +11 -0
- package/lib/features/story/utils/listStoryMeasureQueue.js +14 -0
- package/lib/features/story/utils/listStoryScrollTrack.d.ts +17 -0
- package/lib/features/story/utils/listStoryScrollTrack.js +72 -0
- package/lib/features/story/utils/spectaPresentation.d.ts +9 -0
- package/lib/features/story/utils/spectaPresentation.js +37 -0
- package/lib/features/story/utils/storySegmentViewItems.d.ts +5 -0
- package/lib/features/story/utils/storySegmentViewItems.js +30 -0
- package/lib/index.d.ts +11 -9
- package/lib/index.js +11 -9
- package/lib/keybindings.json +5 -0
- package/lib/mainview/OpenEOTileLayer.d.ts +49 -0
- package/lib/mainview/OpenEOTileLayer.js +179 -0
- package/lib/mainview/TemporalSlider.js +11 -9
- package/lib/mainview/geoJsonFeaturePatch.d.ts +9 -0
- package/lib/mainview/geoJsonFeaturePatch.js +43 -0
- package/lib/mainview/mainView.d.ts +93 -8
- package/lib/mainview/mainView.js +1286 -529
- package/lib/mainview/mainviewwidget.d.ts +5 -1
- package/lib/mainview/mainviewwidget.js +4 -2
- package/lib/shared/components/Button.d.ts +1 -1
- package/lib/shared/components/DropdownMenu.d.ts +1 -0
- package/lib/shared/components/DropdownMenu.js +3 -2
- package/lib/shared/components/NativeSelect.d.ts +8 -0
- package/lib/shared/components/NativeSelect.js +29 -0
- package/lib/shared/components/Tabs.d.ts +3 -3
- package/lib/shared/components/Tabs.js +5 -5
- package/lib/{formbuilder → shared/formbuilder}/creationform.js +71 -4
- package/lib/{formbuilder → shared/formbuilder}/editform.js +1 -1
- package/lib/{formbuilder → shared/formbuilder}/formselectors.d.ts +2 -2
- package/lib/{formbuilder → shared/formbuilder}/formselectors.js +13 -4
- package/lib/shared/formbuilder/index.d.ts +4 -0
- package/lib/shared/formbuilder/index.js +4 -0
- package/lib/{formbuilder → shared/formbuilder}/objectform/SchemaForm.d.ts +1 -1
- package/lib/{formbuilder → shared/formbuilder}/objectform/StoryEditorForm.d.ts +1 -1
- package/lib/{formbuilder → shared/formbuilder}/objectform/StoryEditorForm.js +1 -1
- package/lib/{formbuilder → shared/formbuilder}/objectform/components/LayerSelect.js +1 -1
- package/lib/{formbuilder → shared/formbuilder}/objectform/components/SegmentFormSymbology.js +4 -4
- package/lib/{formbuilder → shared/formbuilder}/objectform/components/SourcePropertiesField.js +1 -1
- package/lib/{formbuilder → shared/formbuilder}/objectform/components/StorySegmentReset.js +1 -1
- package/lib/shared/formbuilder/objectform/components/WmsTileSourceUrlInput.d.ts +3 -0
- package/lib/shared/formbuilder/objectform/components/WmsTileSourceUrlInput.js +84 -0
- package/lib/{formbuilder → shared/formbuilder}/objectform/fileselectorwidget.js +8 -1
- package/lib/{formbuilder → shared/formbuilder}/objectform/schemaUtils.d.ts +3 -1
- package/lib/{formbuilder → shared/formbuilder}/objectform/schemaUtils.js +11 -0
- package/lib/{formbuilder → shared/formbuilder}/objectform/useSchemaFormState.d.ts +2 -2
- package/lib/{formbuilder → shared/formbuilder}/objectform/useSchemaFormState.js +1 -1
- package/lib/{icons.d.ts → shared/icons.d.ts} +2 -0
- package/lib/{icons.js → shared/icons.js} +28 -18
- package/lib/tools.d.ts +3 -1
- package/lib/tools.js +140 -6
- package/lib/types.d.ts +12 -1
- package/lib/types.js +6 -1
- package/lib/{menus.js → workspace/menus.js} +14 -2
- package/lib/workspace/panels/components/TabbedPanel.d.ts +17 -0
- package/lib/workspace/panels/components/TabbedPanel.js +19 -0
- package/lib/{panelview → workspace/panels}/components/layers.js +82 -20
- package/lib/workspace/panels/components/legendItem.js +680 -0
- package/lib/workspace/panels/hooks/useLayerTree.d.ts +19 -0
- package/lib/workspace/panels/hooks/useLayerTree.js +103 -0
- package/lib/workspace/panels/hooks/useRightPanelOptions.d.ts +27 -0
- package/lib/workspace/panels/hooks/useRightPanelOptions.js +72 -0
- package/lib/workspace/panels/hooks/useUIState.d.ts +2 -0
- package/lib/workspace/panels/hooks/useUIState.js +25 -0
- package/lib/{panelview → workspace/panels}/index.d.ts +1 -1
- package/lib/{panelview → workspace/panels}/index.js +1 -1
- package/lib/{panelview → workspace/panels}/leftpanel.d.ts +1 -1
- package/lib/workspace/panels/leftpanel.js +70 -0
- package/lib/{panelview/rightpanel.d.ts → workspace/panels/mergedpanel.d.ts} +6 -5
- package/lib/workspace/panels/mergedpanel.js +166 -0
- package/lib/workspace/panels/rightpanel.d.ts +25 -0
- package/lib/{panelview → workspace/panels}/rightpanel.js +53 -63
- package/lib/{statusbar → workspace/statusbar}/StatusBar.js +5 -4
- package/lib/{toolbar → workspace/toolbar}/widget.d.ts +2 -0
- package/lib/{toolbar → workspace/toolbar}/widget.js +33 -5
- package/lib/{widget.d.ts → workspace/widget.d.ts} +7 -5
- package/lib/{widget.js → workspace/widget.js} +16 -7
- package/package.json +19 -4
- package/style/base.css +109 -1
- package/style/icons/geopackage.svg +95 -0
- package/style/icons/pencil_solid.svg +7 -0
- package/style/identify.css +95 -0
- package/style/layerBrowser.css +28 -0
- package/style/leftPanel.css +25 -0
- package/style/shared/button.css +12 -0
- package/style/shared/dropdownMenu.css +9 -0
- package/style/shared/nativeSelect.css +75 -0
- package/style/shared/tabs.css +3 -3
- package/style/spectaProgressBar.css +0 -1
- package/style/storyPanel.css +142 -9
- package/style/storySpectaArticleOverlay.css +129 -0
- package/style/symbologyDialog.css +330 -28
- package/lib/dialogs/symbology/colorRampUtils.d.ts +0 -20
- package/lib/dialogs/symbology/colorRampUtils.js +0 -132
- package/lib/dialogs/symbology/symbologyUtils.d.ts +0 -33
- package/lib/dialogs/symbology/symbologyUtils.js +0 -180
- package/lib/dialogs/symbology/tiff_layer/TiffRendering.d.ts +0 -4
- package/lib/dialogs/symbology/tiff_layer/TiffRendering.js +0 -42
- package/lib/dialogs/symbology/tiff_layer/components/BandRow.d.ts +0 -23
- package/lib/dialogs/symbology/tiff_layer/components/BandRow.js +0 -59
- package/lib/dialogs/symbology/tiff_layer/types/MultibandColor.d.ts +0 -4
- package/lib/dialogs/symbology/tiff_layer/types/MultibandColor.js +0 -92
- package/lib/dialogs/symbology/tiff_layer/types/SingleBandPseudoColor.d.ts +0 -5
- package/lib/dialogs/symbology/tiff_layer/types/SingleBandPseudoColor.js +0 -301
- package/lib/dialogs/symbology/vector_layer/VectorRendering.d.ts +0 -4
- package/lib/dialogs/symbology/vector_layer/VectorRendering.js +0 -112
- package/lib/dialogs/symbology/vector_layer/components/ValueSelect.d.ts +0 -8
- package/lib/dialogs/symbology/vector_layer/components/ValueSelect.js +0 -9
- package/lib/dialogs/symbology/vector_layer/types/Canonical.d.ts +0 -4
- package/lib/dialogs/symbology/vector_layer/types/Canonical.js +0 -65
- package/lib/dialogs/symbology/vector_layer/types/Categorized.d.ts +0 -4
- package/lib/dialogs/symbology/vector_layer/types/Categorized.js +0 -196
- package/lib/dialogs/symbology/vector_layer/types/Graduated.d.ts +0 -4
- package/lib/dialogs/symbology/vector_layer/types/Graduated.js +0 -250
- package/lib/dialogs/symbology/vector_layer/types/SimpleSymbol.d.ts +0 -4
- package/lib/dialogs/symbology/vector_layer/types/SimpleSymbol.js +0 -105
- package/lib/formbuilder/index.d.ts +0 -4
- package/lib/formbuilder/index.js +0 -4
- package/lib/formbuilder/objectform/layer/storySegmentLayerForm.js +0 -95
- package/lib/formbuilder/objectform/layer/webGlLayerForm.d.ts +0 -3
- package/lib/formbuilder/objectform/process/index.d.ts +0 -1
- package/lib/formbuilder/objectform/process/index.js +0 -1
- package/lib/panelview/components/legendItem.js +0 -200
- package/lib/panelview/identify-panel/IdentifyPanel.js +0 -102
- package/lib/panelview/leftpanel.js +0 -139
- package/lib/panelview/story-maps/StoryViewerPanel.js +0 -116
- package/lib/panelview/story-maps/components/SpectaDesktopView.js +0 -49
- package/lib/processing/index.js +0 -200
- package/lib/processing/processingCommands.js +0 -67
- /package/lib/{panelview/annotationPanel.d.ts → features/annotations/AnnotationsPanel.d.ts} +0 -0
- /package/lib/{annotations → features/annotations}/components/Annotation.d.ts +0 -0
- /package/lib/{annotations → features/annotations}/components/Annotation.js +0 -0
- /package/lib/{annotations → features/annotations}/components/AnnotationFloater.d.ts +0 -0
- /package/lib/{annotations → features/annotations}/components/AnnotationFloater.js +0 -0
- /package/lib/{annotations → features/annotations}/components/Message.d.ts +0 -0
- /package/lib/{annotations → features/annotations}/components/Message.js +0 -0
- /package/lib/{annotations → features/annotations}/model.d.ts +0 -0
- /package/lib/{annotations → features/annotations}/model.js +0 -0
- /package/lib/{console → features/console}/consoleview.d.ts +0 -0
- /package/lib/{console → features/console}/index.d.ts +0 -0
- /package/lib/{console → features/console}/index.js +0 -0
- /package/lib/{panelview/filter-panel → features/filter}/Filter.d.ts +0 -0
- /package/lib/{stacBrowser/types/types.js → features/identify/types/editorTypes.js} +0 -0
- /package/lib/{dialogs/layerBrowserDialog.d.ts → features/layer-browser/index.d.ts} +0 -0
- /package/lib/{formbuilder/objectform → features/layers/forms}/layer/heatmapLayerForm.d.ts +0 -0
- /package/lib/{formbuilder/objectform → features/layers/forms}/layer/hillshadeLayerForm.d.ts +0 -0
- /package/lib/{formbuilder/objectform → features/layers/forms}/layer/storySegmentLayerForm.d.ts +0 -0
- /package/lib/{formbuilder/objectform → features/layers/forms}/layer/vectorlayerform.d.ts +0 -0
- /package/lib/{formbuilder/objectform → features/layers/forms}/source/geojsonsource.d.ts +0 -0
- /package/lib/{formbuilder/objectform → features/layers/forms}/source/geotiffsource.d.ts +0 -0
- /package/lib/{formbuilder/objectform → features/layers/forms}/source/pathbasedsource.d.ts +0 -0
- /package/lib/{formbuilder/objectform → features/layers/forms}/source/tilesourceform.d.ts +0 -0
- /package/lib/{dialogs → features/layers}/symbology/components/color_ramp/ModeSelectRow.js +0 -0
- /package/lib/{dialogs → features/layers}/symbology/components/color_ramp/cmocean.json +0 -0
- /package/lib/{dialogs → features/layers}/symbology/components/color_stops/StopContainer.d.ts +0 -0
- /package/lib/{dialogs → features/layers}/symbology/hooks/useEffectiveSymbologyParams.d.ts +0 -0
- /package/lib/{dialogs → features/layers}/symbology/hooks/useEffectiveSymbologyParams.js +0 -0
- /package/lib/{dialogs → features/layers}/symbology/hooks/useGetProperties.d.ts +0 -0
- /package/lib/{dialogs → features/layers}/symbology/hooks/useGetSymbology.d.ts +0 -0
- /package/lib/{dialogs → features/layers}/symbology/hooks/useOkSignal.d.ts +0 -0
- /package/lib/{dialogs → features/layers}/symbology/hooks/useOkSignal.js +0 -0
- /package/lib/{formbuilder/objectform/process → features/processing/forms}/dissolveProcessForm.d.ts +0 -0
- /package/lib/{processing → features/processing}/processingFormToParam.d.ts +0 -0
- /package/lib/{processing → features/processing}/processingFormToParam.js +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/components/StacPanel.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/QueryableComboBox.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/QueryableRow.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/StacFilterExtensionPanel.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/components/filter-extension/StacQueryableFilters.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/components/geodes/StacFilterSection.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/components/geodes/StacGeodesFilterPanel.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/components/geodes/StacGeodesFilterPanel.js +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/components/shared/StacPanelResults.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/components/shared/StacSpatialExtent.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/components/shared/StacTemporalExtent.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/constants.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/constants.js +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/context/StacResultsContext.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/hooks/useGeodesSearch.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/index.d.ts +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/index.js +0 -0
- /package/lib/{stacBrowser → features/stac-browser}/types/types.d.ts +0 -0
- /package/lib/{panelview/story-maps → features/story}/StoryEditorPanel.d.ts +0 -0
- /package/lib/{panelview/story-maps → features/story}/components/PreviewModeSwitch.d.ts +0 -0
- /package/lib/{panelview/story-maps → features/story}/components/PreviewModeSwitch.js +0 -0
- /package/lib/{panelview/story-maps → features/story}/components/StoryContentSection.d.ts +0 -0
- /package/lib/{panelview/story-maps → features/story}/components/StoryContentSection.js +0 -0
- /package/lib/{panelview/story-maps → features/story}/components/StoryImageSection.d.ts +0 -0
- /package/lib/{panelview/story-maps → features/story}/components/StoryImageSection.js +0 -0
- /package/lib/{panelview/story-maps → features/story}/components/StoryNavBar.d.ts +0 -0
- /package/lib/{panelview/story-maps → features/story}/components/StoryNavBar.js +0 -0
- /package/lib/{panelview/story-maps → features/story}/components/StorySubtitleSection.d.ts +0 -0
- /package/lib/{panelview/story-maps → features/story}/components/StorySubtitleSection.js +0 -0
- /package/lib/{panelview/story-maps → features/story}/components/StoryTitleSection.d.ts +0 -0
- /package/lib/{panelview/story-maps → features/story}/components/StoryTitleSection.js +0 -0
- /package/lib/{formbuilder → shared/formbuilder}/creationform.d.ts +0 -0
- /package/lib/{formbuilder → shared/formbuilder}/editform.d.ts +0 -0
- /package/lib/{formbuilder → shared/formbuilder}/objectform/SchemaForm.js +0 -0
- /package/lib/{formbuilder → shared/formbuilder}/objectform/components/LayerSelect.d.ts +0 -0
- /package/lib/{formbuilder → shared/formbuilder}/objectform/components/OpacitySlider.d.ts +0 -0
- /package/lib/{formbuilder → shared/formbuilder}/objectform/components/OpacitySlider.js +0 -0
- /package/lib/{formbuilder → shared/formbuilder}/objectform/components/SegmentFormSymbology.d.ts +0 -0
- /package/lib/{formbuilder → shared/formbuilder}/objectform/components/SourcePropertiesField.d.ts +0 -0
- /package/lib/{formbuilder → shared/formbuilder}/objectform/components/StorySegmentReset.d.ts +0 -0
- /package/lib/{formbuilder → shared/formbuilder}/objectform/fileselectorwidget.d.ts +0 -0
- /package/lib/{store.d.ts → shared/store.d.ts} +0 -0
- /package/lib/{store.js → shared/store.js} +0 -0
- /package/lib/{menus.d.ts → workspace/menus.d.ts} +0 -0
- /package/lib/{panelview → workspace/panels}/components/layers.d.ts +0 -0
- /package/lib/{panelview → workspace/panels}/components/legendItem.d.ts +0 -0
- /package/lib/{panelview → workspace/panels}/header.d.ts +0 -0
- /package/lib/{panelview → workspace/panels}/header.js +0 -0
- /package/lib/{statusbar → workspace/statusbar}/SpectaPresentationProgressBar.d.ts +0 -0
- /package/lib/{statusbar → workspace/statusbar}/SpectaPresentationProgressBar.js +0 -0
- /package/lib/{statusbar → workspace/statusbar}/StatusBar.d.ts +0 -0
- /package/lib/{toolbar → workspace/toolbar}/index.d.ts +0 -0
- /package/lib/{toolbar → workspace/toolbar}/index.js +0 -0
|
@@ -4,24 +4,26 @@
|
|
|
4
4
|
*/
|
|
5
5
|
// This file is based on iconimports.ts in @jupyterlab/ui-components, but is manually generated.
|
|
6
6
|
import { LabIcon } from '@jupyterlab/ui-components';
|
|
7
|
-
import bookOpenSvgStr from '
|
|
8
|
-
import clockSvgStr from '
|
|
9
|
-
import geoJsonSvgStr from '
|
|
10
|
-
import geolocationSvgStr from '
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
import
|
|
20
|
-
import
|
|
21
|
-
import
|
|
22
|
-
import
|
|
23
|
-
import
|
|
24
|
-
import
|
|
7
|
+
import bookOpenSvgStr from '../../style/icons/book_open.svg';
|
|
8
|
+
import clockSvgStr from '../../style/icons/clock-solid.svg';
|
|
9
|
+
import geoJsonSvgStr from '../../style/icons/geojson.svg';
|
|
10
|
+
import geolocationSvgStr from '../../style/icons/geolocation.svg';
|
|
11
|
+
import geoPackageSvgStr from '../../style/icons/geopackage.svg';
|
|
12
|
+
import infoSvgStr from '../../style/icons/info-solid.svg';
|
|
13
|
+
import logoSvgStr from '../../style/icons/logo.svg';
|
|
14
|
+
import logoMiniSvgStr from '../../style/icons/logo_mini.svg';
|
|
15
|
+
import logoMiniAlternativeSvgStr from '../../style/icons/logo_mini_alternative.svg';
|
|
16
|
+
import logoMiniQGZ from '../../style/icons/logo_mini_qgz.svg';
|
|
17
|
+
import markerSvgStr from '../../style/icons/marker.svg';
|
|
18
|
+
import moundSvgStr from '../../style/icons/mound.svg';
|
|
19
|
+
import nonVisibilitySvgStr from '../../style/icons/nonvisibility.svg';
|
|
20
|
+
import pencilSolidSvgStr from '../../style/icons/pencil_solid.svg';
|
|
21
|
+
import rasterSvgStr from '../../style/icons/raster.svg';
|
|
22
|
+
import targetWithCenterSvgStr from '../../style/icons/target_with_center.svg';
|
|
23
|
+
import targetWithoutCenterSvgStr from '../../style/icons/target_without_center.svg';
|
|
24
|
+
import terminalToolbarSvgStr from '../../style/icons/terminal_toolbar.svg';
|
|
25
|
+
import vectorSquareSvgStr from '../../style/icons/vector_square.svg';
|
|
26
|
+
import visibilitySvgStr from '../../style/icons/visibility.svg';
|
|
25
27
|
export const logoIcon = new LabIcon({
|
|
26
28
|
name: 'jupytergis::logo',
|
|
27
29
|
svgstr: logoSvgStr,
|
|
@@ -90,7 +92,15 @@ export const targetWithCenterIcon = new LabIcon({
|
|
|
90
92
|
name: 'jupytergis::targetWithoutCenter',
|
|
91
93
|
svgstr: targetWithoutCenterSvgStr,
|
|
92
94
|
});
|
|
95
|
+
export const geoPackageIcon = new LabIcon({
|
|
96
|
+
name: 'jupytergis::geoPackage',
|
|
97
|
+
svgstr: geoPackageSvgStr,
|
|
98
|
+
});
|
|
93
99
|
export const markerIcon = new LabIcon({
|
|
94
100
|
name: 'jupytergis::marker',
|
|
95
101
|
svgstr: markerSvgStr,
|
|
96
102
|
});
|
|
103
|
+
export const pencilSolidIcon = new LabIcon({
|
|
104
|
+
name: 'jupytergis::pencilSolid',
|
|
105
|
+
svgstr: pencilSolidSvgStr,
|
|
106
|
+
});
|
package/lib/tools.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export declare function getLayerTileInfo(tileUrl: string, mapOptions: Pick<IJGIS
|
|
|
27
27
|
export interface IParsedStyle {
|
|
28
28
|
fillColor: string;
|
|
29
29
|
strokeColor: string;
|
|
30
|
-
strokeWidth:
|
|
30
|
+
strokeWidth: string;
|
|
31
31
|
joinStyle: string;
|
|
32
32
|
capStyle: string;
|
|
33
33
|
radius?: number;
|
|
@@ -78,6 +78,7 @@ export declare const loadGeoTiff: (sourceInfo: {
|
|
|
78
78
|
sourceUrl: string;
|
|
79
79
|
metadata?: undefined;
|
|
80
80
|
} | null>;
|
|
81
|
+
export declare function getGeoPackageTableNames(filepath: string, type: 'GeoPackageVectorSource' | 'GeoPackageRasterSource'): Promise<string[]>;
|
|
81
82
|
/**
|
|
82
83
|
* Generalized file reader for different source types.
|
|
83
84
|
*
|
|
@@ -100,6 +101,7 @@ export declare const base64ToBlob: (base64: string, mimeType: string) => Promise
|
|
|
100
101
|
/**
|
|
101
102
|
* A mapping of file extensions to their corresponding MIME types.
|
|
102
103
|
*/
|
|
104
|
+
export declare const INTERNAL_PROXY_BASE = "/jupytergis_core/proxy";
|
|
103
105
|
export declare const MIME_TYPES: {
|
|
104
106
|
[ext: string]: string;
|
|
105
107
|
};
|
package/lib/tools.js
CHANGED
|
@@ -2,10 +2,14 @@ import { showErrorMessage } from '@jupyterlab/apputils';
|
|
|
2
2
|
import { PathExt, URLExt } from '@jupyterlab/coreutils';
|
|
3
3
|
import { ServerConnection } from '@jupyterlab/services';
|
|
4
4
|
import { VectorTile } from '@mapbox/vector-tile';
|
|
5
|
+
import { GeoPackageAPI, GeoPackageTileRetriever } from '@ngageoint/geopackage';
|
|
5
6
|
import { compressors } from 'hyparquet-compressors';
|
|
7
|
+
import loadGpkg from 'ol-load-geopackage';
|
|
6
8
|
import Protobuf from 'pbf';
|
|
7
9
|
import shp from 'shpjs';
|
|
8
|
-
import LAYER_GALLERY from "../layer_gallery.json";
|
|
10
|
+
import LAYER_GALLERY from "../_generated/layer_gallery.json";
|
|
11
|
+
import { DEFAULT_STROKE_WIDTH } from "./features/layers/symbology/colorRampUtils";
|
|
12
|
+
import { getGdal } from './gdal';
|
|
9
13
|
export const debounce = (func, timeout = 100) => {
|
|
10
14
|
let timeoutId;
|
|
11
15
|
return (...args) => {
|
|
@@ -122,7 +126,7 @@ export function createDefaultLayerRegistry(layerBrowserRegistry) {
|
|
|
122
126
|
LAYER_THUMBNAILS[imageName] = r(key);
|
|
123
127
|
});
|
|
124
128
|
};
|
|
125
|
-
const context = require.context('../
|
|
129
|
+
const context = require.context('../layer_gallery_thumbnails', false, /\.(png|jpe?g|gif|svg)$/);
|
|
126
130
|
importAll(context);
|
|
127
131
|
for (const entry of Object.keys(LAYER_GALLERY)) {
|
|
128
132
|
const layerProvider = LAYER_GALLERY[entry];
|
|
@@ -219,7 +223,7 @@ export function parseColor(style) {
|
|
|
219
223
|
radius: (_a = style['circle-radius']) !== null && _a !== void 0 ? _a : 5,
|
|
220
224
|
fillColor: (_c = (_b = style['circle-fill-color']) !== null && _b !== void 0 ? _b : style['fill-color']) !== null && _c !== void 0 ? _c : '#3399CC',
|
|
221
225
|
strokeColor: (_e = (_d = style['circle-stroke-color']) !== null && _d !== void 0 ? _d : style['stroke-color']) !== null && _e !== void 0 ? _e : '#3399CC',
|
|
222
|
-
strokeWidth: (_g = (_f = style['circle-stroke-width']) !== null && _f !== void 0 ? _f : style['stroke-width']) !== null && _g !== void 0 ? _g :
|
|
226
|
+
strokeWidth: String((_g = (_f = style['circle-stroke-width']) !== null && _f !== void 0 ? _f : style['stroke-width']) !== null && _g !== void 0 ? _g : DEFAULT_STROKE_WIDTH),
|
|
223
227
|
joinStyle: (_j = (_h = style['circle-stroke-line-join']) !== null && _h !== void 0 ? _h : style['stroke-line-join']) !== null && _j !== void 0 ? _j : 'round',
|
|
224
228
|
capStyle: (_l = (_k = style['circle-stroke-line-cap']) !== null && _k !== void 0 ? _k : style['stroke-line-cap']) !== null && _l !== void 0 ? _l : 'round',
|
|
225
229
|
};
|
|
@@ -293,7 +297,7 @@ export const fetchWithProxies = async (url, model, parseResponse, options, strat
|
|
|
293
297
|
const proxyUrl = settings && settings.proxyUrl ? settings.proxyUrl : 'https://corsproxy.io';
|
|
294
298
|
const strategies = {
|
|
295
299
|
direct: url => url,
|
|
296
|
-
internal: url =>
|
|
300
|
+
internal: url => `${INTERNAL_PROXY_BASE}?url=${encodeURIComponent(url)}`,
|
|
297
301
|
external: url => `${proxyUrl}/?url=${encodeURIComponent(url)}`,
|
|
298
302
|
};
|
|
299
303
|
const defaultOrder = ['direct', 'internal', 'external'];
|
|
@@ -353,6 +357,106 @@ export const loadGeoTiff = async (sourceInfo, model, file) => {
|
|
|
353
357
|
sourceUrl: url,
|
|
354
358
|
};
|
|
355
359
|
};
|
|
360
|
+
const geoPackageCache = new Map();
|
|
361
|
+
/**
|
|
362
|
+
* Convert curved geometries to linear geometries for a given GeoPackage vector file, and reproject the data
|
|
363
|
+
*
|
|
364
|
+
* @param fileBlob GeoPackage file as a blob
|
|
365
|
+
* @returns Blob URL created from converted file
|
|
366
|
+
*/
|
|
367
|
+
async function linearizeReprojectGpkg(fileBlob, projection) {
|
|
368
|
+
const gdal = await getGdal();
|
|
369
|
+
const file = new File([fileBlob], 'input.gpkg', {
|
|
370
|
+
type: 'application/geopackage+sqlite3',
|
|
371
|
+
});
|
|
372
|
+
const ds = await gdal.open(file);
|
|
373
|
+
await gdal.ogr2ogr(ds.datasets[0], ['-f', 'GPKG', '-nlt', 'CONVERT_TO_LINEAR', '-t_srs', projection], 'output');
|
|
374
|
+
const bytes = await gdal.getFileBytes('/output/output.gpkg');
|
|
375
|
+
const blob = new Blob([new Uint8Array(bytes)], {
|
|
376
|
+
type: 'application/geopackage+sqlite3',
|
|
377
|
+
});
|
|
378
|
+
const url = URL.createObjectURL(blob);
|
|
379
|
+
return url;
|
|
380
|
+
}
|
|
381
|
+
function loadGeoPackageVectorFile(fileBlob, projection, cacheFilename) {
|
|
382
|
+
if (geoPackageCache.has(cacheFilename)) {
|
|
383
|
+
return geoPackageCache.get(cacheFilename);
|
|
384
|
+
}
|
|
385
|
+
const loader = (async () => {
|
|
386
|
+
try {
|
|
387
|
+
const url = await linearizeReprojectGpkg(fileBlob, projection);
|
|
388
|
+
const [tables, slds] = await loadGpkg(url, projection);
|
|
389
|
+
const tableMap = {};
|
|
390
|
+
for (const name of Object.keys(tables)) {
|
|
391
|
+
tableMap[name] = {
|
|
392
|
+
source: tables[name],
|
|
393
|
+
sld: slds[name],
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
return tableMap;
|
|
397
|
+
}
|
|
398
|
+
catch (e) {
|
|
399
|
+
showErrorMessage('Failed to load GeoPackage file', e);
|
|
400
|
+
throw e;
|
|
401
|
+
}
|
|
402
|
+
})();
|
|
403
|
+
geoPackageCache.set(cacheFilename, loader);
|
|
404
|
+
return loader;
|
|
405
|
+
}
|
|
406
|
+
async function loadGeoPackageRasterFile(filepath, cacheFilename, model, file_content) {
|
|
407
|
+
if (geoPackageCache.has(cacheFilename)) {
|
|
408
|
+
return geoPackageCache.get(cacheFilename);
|
|
409
|
+
}
|
|
410
|
+
const loader = (async () => {
|
|
411
|
+
try {
|
|
412
|
+
let bytes;
|
|
413
|
+
if (filepath.startsWith('http://') || filepath.startsWith('https://')) {
|
|
414
|
+
bytes = await loadGkpgFromUrl(filepath, model);
|
|
415
|
+
}
|
|
416
|
+
else {
|
|
417
|
+
const arrayBuffer = await stringToArrayBuffer(file_content);
|
|
418
|
+
bytes = new Uint8Array(arrayBuffer);
|
|
419
|
+
}
|
|
420
|
+
const geoPackage = await GeoPackageAPI.open(bytes);
|
|
421
|
+
const tileTables = await geoPackage.getTileTables();
|
|
422
|
+
const tableMap = {};
|
|
423
|
+
tileTables.forEach(tableName => {
|
|
424
|
+
const tileDao = geoPackage.getTileDao(tableName);
|
|
425
|
+
const tileWidth = tileDao.tileMatrices[0].tile_width;
|
|
426
|
+
const tileHeight = tileDao.tileMatrices[0].tile_height;
|
|
427
|
+
tableMap[tableName] = {
|
|
428
|
+
gpr: new GeoPackageTileRetriever(tileDao, tileWidth, tileHeight),
|
|
429
|
+
tileDao,
|
|
430
|
+
};
|
|
431
|
+
});
|
|
432
|
+
return tableMap;
|
|
433
|
+
}
|
|
434
|
+
catch (error) {
|
|
435
|
+
showErrorMessage(`Failed to load GeoPackage file: ${cacheFilename}`, error);
|
|
436
|
+
throw error;
|
|
437
|
+
}
|
|
438
|
+
})();
|
|
439
|
+
geoPackageCache.set(cacheFilename, loader);
|
|
440
|
+
return loader;
|
|
441
|
+
}
|
|
442
|
+
async function loadGkpgFromUrl(filepath, model) {
|
|
443
|
+
const response = await fetchWithProxies(filepath, model, async (response) => {
|
|
444
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
445
|
+
return new Uint8Array(arrayBuffer);
|
|
446
|
+
});
|
|
447
|
+
if (!response) {
|
|
448
|
+
throw new Error(`Failed to fetch GeoPackage from URL: ${filepath}`);
|
|
449
|
+
}
|
|
450
|
+
return response;
|
|
451
|
+
}
|
|
452
|
+
export async function getGeoPackageTableNames(filepath, type) {
|
|
453
|
+
const cacheKey = filepath + (type === 'GeoPackageRasterSource' ? 'Raster' : 'Vector');
|
|
454
|
+
const tableMap = await geoPackageCache.get(cacheKey);
|
|
455
|
+
if (!tableMap) {
|
|
456
|
+
return [];
|
|
457
|
+
}
|
|
458
|
+
return Object.keys(tableMap);
|
|
459
|
+
}
|
|
356
460
|
/**
|
|
357
461
|
* Generalized file reader for different source types.
|
|
358
462
|
*
|
|
@@ -361,6 +465,9 @@ export const loadGeoTiff = async (sourceInfo, model, file) => {
|
|
|
361
465
|
*/
|
|
362
466
|
export const loadFile = async (fileInfo) => {
|
|
363
467
|
const { filepath, type, model } = fileInfo;
|
|
468
|
+
if (!filepath) {
|
|
469
|
+
return;
|
|
470
|
+
}
|
|
364
471
|
if (filepath.startsWith('http://') || filepath.startsWith('https://')) {
|
|
365
472
|
switch (type) {
|
|
366
473
|
case 'ImageSource': {
|
|
@@ -411,6 +518,21 @@ export const loadFile = async (fileInfo) => {
|
|
|
411
518
|
showErrorMessage('Network error', `Failed to fetch ${filepath}`);
|
|
412
519
|
throw new Error(`Failed to fetch ${filepath}`);
|
|
413
520
|
}
|
|
521
|
+
case 'GeoPackageVectorSource': {
|
|
522
|
+
const projection = model.sharedModel.options.projection;
|
|
523
|
+
if (!projection) {
|
|
524
|
+
throw new Error(`Projection is not specified for ${filepath}`);
|
|
525
|
+
}
|
|
526
|
+
const fileBlob = await fetchWithProxies(filepath, model, async (response) => response.blob());
|
|
527
|
+
if (!fileBlob) {
|
|
528
|
+
showErrorMessage('Network error', `Failed to fetch ${filepath}`);
|
|
529
|
+
throw new Error(`Failed to fetch ${filepath}`);
|
|
530
|
+
}
|
|
531
|
+
return loadGeoPackageVectorFile(fileBlob, projection, filepath + 'Vector');
|
|
532
|
+
}
|
|
533
|
+
case 'GeoPackageRasterSource': {
|
|
534
|
+
return loadGeoPackageRasterFile(filepath, filepath + 'Raster', model);
|
|
535
|
+
}
|
|
414
536
|
case 'GeoParquetSource': {
|
|
415
537
|
const cached = await getFromIndexedDB(filepath);
|
|
416
538
|
if (cached) {
|
|
@@ -505,6 +627,17 @@ export const loadFile = async (fileInfo) => {
|
|
|
505
627
|
throw new Error('Invalid file format for tiff content.');
|
|
506
628
|
}
|
|
507
629
|
}
|
|
630
|
+
case 'GeoPackageVectorSource': {
|
|
631
|
+
const projection = model.sharedModel.options.projection;
|
|
632
|
+
if (!projection) {
|
|
633
|
+
throw new Error(`Projection is not specified for ${filepath}`);
|
|
634
|
+
}
|
|
635
|
+
const blob = await base64ToBlob(file.content, getMimeType(filepath));
|
|
636
|
+
return loadGeoPackageVectorFile(blob, projection, filepath + 'Vector');
|
|
637
|
+
}
|
|
638
|
+
case 'GeoPackageRasterSource': {
|
|
639
|
+
return loadGeoPackageRasterFile(filepath, filepath + 'Raster', undefined, file.content);
|
|
640
|
+
}
|
|
508
641
|
case 'GeoParquetSource': {
|
|
509
642
|
let buffer;
|
|
510
643
|
switch (file.format) {
|
|
@@ -562,6 +695,7 @@ export const base64ToBlob = async (base64, mimeType) => {
|
|
|
562
695
|
/**
|
|
563
696
|
* A mapping of file extensions to their corresponding MIME types.
|
|
564
697
|
*/
|
|
698
|
+
export const INTERNAL_PROXY_BASE = '/jupytergis_core/proxy';
|
|
565
699
|
export const MIME_TYPES = {
|
|
566
700
|
// from https://github.com/python/cpython/blob/3.9/Lib/mimetypes.py
|
|
567
701
|
'.a': 'application/octet-stream',
|
|
@@ -590,6 +724,7 @@ export const MIME_TYPES = {
|
|
|
590
724
|
'.etx': 'text/x-setext',
|
|
591
725
|
'.exe': 'application/octet-stream',
|
|
592
726
|
'.gif': 'image/gif',
|
|
727
|
+
'.gpkg': 'application/geopackage+vnd.sqlite3',
|
|
593
728
|
'.gtar': 'application/x-gtar',
|
|
594
729
|
'.h': 'text/plain',
|
|
595
730
|
'.hdf': 'application/x-hdf',
|
|
@@ -767,8 +902,7 @@ export const getNumericFeatureAttributes = (featureProperties) => {
|
|
|
767
902
|
*/
|
|
768
903
|
export const getColorCodeFeatureAttributes = (featureProperties) => {
|
|
769
904
|
return getFeatureAttributes(featureProperties, (_, value) => {
|
|
770
|
-
|
|
771
|
-
return typeof value === 'string' && regex.test(value);
|
|
905
|
+
return typeof value === 'string' && /^#[0-9a-fA-F]{6}$/.test(value);
|
|
772
906
|
});
|
|
773
907
|
};
|
|
774
908
|
export function downloadFile(content, fileName, mimeType) {
|
package/lib/types.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ type InternalRgbArray = number[];
|
|
|
13
13
|
export type ColorValue = RgbColorValue | HexColorValue;
|
|
14
14
|
export type SizeValue = number;
|
|
15
15
|
export type SymbologyValue = SizeValue | ColorValue | InternalRgbArray;
|
|
16
|
-
export type VectorRenderType = '
|
|
16
|
+
export type VectorRenderType = 'Heatmap' | 'Grammar';
|
|
17
17
|
/**
|
|
18
18
|
* Add jupytergisMaps object to the global variables.
|
|
19
19
|
*/
|
|
@@ -30,10 +30,21 @@ declare global {
|
|
|
30
30
|
declare const classificationModes: readonly ["quantile", "equal interval", "jenks", "pretty", "logarithmic", "continuous"];
|
|
31
31
|
export type ClassificationMode = (typeof classificationModes)[number];
|
|
32
32
|
export declare const SYMBOLOGY_VALID_LAYER_TYPES: string[];
|
|
33
|
+
export declare const STORY_TYPE: {
|
|
34
|
+
readonly guided: "guided";
|
|
35
|
+
readonly unguided: "unguided";
|
|
36
|
+
readonly verticalScroll: "Vertical Scroll";
|
|
37
|
+
};
|
|
38
|
+
export interface IWmsLayerInfo {
|
|
39
|
+
name: string;
|
|
40
|
+
title: string;
|
|
41
|
+
}
|
|
33
42
|
/** Form context passed to SchemaForm and custom fields. */
|
|
34
43
|
export interface IJupyterGISFormContext<TFormData = IDict | undefined> {
|
|
35
44
|
model: IJupyterGISModel;
|
|
36
45
|
formData: TFormData;
|
|
46
|
+
wmsAvailableLayers?: IWmsLayerInfo[];
|
|
47
|
+
setWmsAvailableLayers?: (layers: IWmsLayerInfo[]) => void;
|
|
37
48
|
formSchemaRegistry?: IJGISFormSchemaRegistry;
|
|
38
49
|
}
|
|
39
50
|
/** Optional form state (schema, extraErrors). */
|
package/lib/types.js
CHANGED
|
@@ -9,6 +9,11 @@ const classificationModes = [
|
|
|
9
9
|
export const SYMBOLOGY_VALID_LAYER_TYPES = [
|
|
10
10
|
'VectorLayer',
|
|
11
11
|
'VectorTileLayer',
|
|
12
|
-
'
|
|
12
|
+
'GeoTiffLayer',
|
|
13
13
|
'HeatmapLayer',
|
|
14
14
|
];
|
|
15
|
+
export const STORY_TYPE = {
|
|
16
|
+
guided: 'guided',
|
|
17
|
+
unguided: 'unguided',
|
|
18
|
+
verticalScroll: 'Vertical Scroll',
|
|
19
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Menu } from '@lumino/widgets';
|
|
2
|
-
import { CommandIDs } from '
|
|
3
|
-
import { rasterIcon } from '
|
|
2
|
+
import { CommandIDs } from '../constants';
|
|
3
|
+
import { rasterIcon } from '../shared/icons';
|
|
4
4
|
export const vectorSubMenu = (commands) => {
|
|
5
5
|
const subMenu = new Menu({ commands });
|
|
6
6
|
subMenu.title.label = 'Add Vector Layer';
|
|
@@ -22,6 +22,10 @@ export const vectorSubMenu = (commands) => {
|
|
|
22
22
|
type: 'command',
|
|
23
23
|
command: CommandIDs.openNewGeoParquetDialog,
|
|
24
24
|
});
|
|
25
|
+
subMenu.addItem({
|
|
26
|
+
type: 'command',
|
|
27
|
+
command: CommandIDs.newGeoPackageVectorEntry,
|
|
28
|
+
});
|
|
25
29
|
return subMenu;
|
|
26
30
|
};
|
|
27
31
|
export const rasterSubMenu = (commands) => {
|
|
@@ -33,6 +37,10 @@ export const rasterSubMenu = (commands) => {
|
|
|
33
37
|
type: 'command',
|
|
34
38
|
command: CommandIDs.openNewRasterDialog,
|
|
35
39
|
});
|
|
40
|
+
subMenu.addItem({
|
|
41
|
+
type: 'command',
|
|
42
|
+
command: CommandIDs.openNewWmsDialog,
|
|
43
|
+
});
|
|
36
44
|
subMenu.addItem({
|
|
37
45
|
type: 'command',
|
|
38
46
|
command: CommandIDs.openNewHillshadeDialog,
|
|
@@ -45,5 +53,9 @@ export const rasterSubMenu = (commands) => {
|
|
|
45
53
|
type: 'command',
|
|
46
54
|
command: CommandIDs.openNewGeoTiffDialog,
|
|
47
55
|
});
|
|
56
|
+
subMenu.addItem({
|
|
57
|
+
type: 'command',
|
|
58
|
+
command: CommandIDs.newGeoPackageRasterEntry,
|
|
59
|
+
});
|
|
48
60
|
return subMenu;
|
|
49
61
|
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface ITabConfig {
|
|
3
|
+
name: string;
|
|
4
|
+
title: string;
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
contentClassName?: string;
|
|
7
|
+
content: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
interface ITabbedPanelProps {
|
|
10
|
+
tabs: ITabConfig[];
|
|
11
|
+
curTab: string;
|
|
12
|
+
onTabClick: (name: string) => void;
|
|
13
|
+
onTabListMouseDown?: React.MouseEventHandler<HTMLDivElement>;
|
|
14
|
+
onTabListTouchStart?: React.TouchEventHandler<HTMLDivElement>;
|
|
15
|
+
}
|
|
16
|
+
export declare const TabbedPanel: React.FC<ITabbedPanelProps>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { TabsRoot, TabsContent, TabsList, TabsTrigger, } from '../../../shared/components/Tabs';
|
|
3
|
+
import { cn } from '../../../shared/components/utils';
|
|
4
|
+
export const TabbedPanel = ({ tabs, curTab, onTabClick, onTabListMouseDown, onTabListTouchStart, }) => {
|
|
5
|
+
const enabledTabs = tabs.filter(tab => tab.enabled);
|
|
6
|
+
const tabsListRef = React.useRef(null);
|
|
7
|
+
React.useEffect(() => {
|
|
8
|
+
const list = tabsListRef.current;
|
|
9
|
+
const active = list === null || list === void 0 ? void 0 : list.querySelector('[data-state="active"]');
|
|
10
|
+
if (list && active) {
|
|
11
|
+
const listCenter = list.offsetWidth / 2;
|
|
12
|
+
const triggerCenter = active.offsetLeft + active.offsetWidth / 2;
|
|
13
|
+
list.scrollLeft = triggerCenter - listCenter;
|
|
14
|
+
}
|
|
15
|
+
}, [curTab]);
|
|
16
|
+
return (React.createElement(TabsRoot, { className: "jgis-panel-tabs", curTab: curTab },
|
|
17
|
+
React.createElement(TabsList, { ref: tabsListRef, onMouseDown: onTabListMouseDown, onTouchStart: onTabListTouchStart }, enabledTabs.map(tab => (React.createElement(TabsTrigger, { className: "jGIS-layer-browser-category", key: tab.name, value: tab.name, onClick: () => onTabClick(tab.name) }, tab.title)))),
|
|
18
|
+
enabledTabs.map(tab => (React.createElement(TabsContent, { key: tab.name, value: tab.name, className: cn('jgis-panel-tab-content', tab.contentClassName) }, tab.content)))));
|
|
19
|
+
};
|
|
@@ -1,9 +1,22 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { faEllipsisVertical } from '@fortawesome/free-solid-svg-icons';
|
|
13
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
1
14
|
import { DOMUtils } from '@jupyterlab/apputils';
|
|
2
15
|
import { Button, LabIcon, caretDownIcon, caretRightIcon, } from '@jupyterlab/ui-components';
|
|
3
16
|
import React, { useEffect, useState, } from 'react';
|
|
4
|
-
import { CommandIDs, icons } from "
|
|
5
|
-
import { useGetSymbology } from "
|
|
6
|
-
import { nonVisibilityIcon, targetWithCenterIcon, visibilityIcon, } from "
|
|
17
|
+
import { CommandIDs, icons } from "../../../constants";
|
|
18
|
+
import { useGetSymbology } from "../../../features/layers/symbology/hooks/useGetSymbology";
|
|
19
|
+
import { nonVisibilityIcon, targetWithCenterIcon, visibilityIcon, } from "../../../shared/icons";
|
|
7
20
|
import { LegendItem } from './legendItem';
|
|
8
21
|
const LAYER_GROUP_CLASS = 'jp-gis-layerGroup';
|
|
9
22
|
const LAYER_GROUP_HEADER_CLASS = 'jp-gis-layerGroupHeader';
|
|
@@ -21,6 +34,7 @@ export const LayersBodyComponent = props => {
|
|
|
21
34
|
// Notify commands that need updating
|
|
22
35
|
props.commands.notifyCommandChanged(CommandIDs.identify);
|
|
23
36
|
props.commands.notifyCommandChanged(CommandIDs.temporalController);
|
|
37
|
+
props.commands.notifyCommandChanged(CommandIDs.toggleDrawFeatures);
|
|
24
38
|
};
|
|
25
39
|
const _onDragOver = (e) => {
|
|
26
40
|
e.stopPropagation();
|
|
@@ -104,8 +118,14 @@ export const LayersBodyComponent = props => {
|
|
|
104
118
|
};
|
|
105
119
|
}
|
|
106
120
|
else {
|
|
107
|
-
// If types are the same
|
|
108
|
-
|
|
121
|
+
// If types are the same modify the selection (either add or remove to multi-selection)
|
|
122
|
+
if (item in selectedValue) {
|
|
123
|
+
const _a = selectedValue, _b = item, _ = _a[_b], rest = __rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
|
|
124
|
+
newSelection = rest;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
newSelection = Object.assign(Object.assign({}, selectedValue), { [item]: { type } });
|
|
128
|
+
}
|
|
109
129
|
}
|
|
110
130
|
}
|
|
111
131
|
// Set the selection
|
|
@@ -157,13 +177,14 @@ const LayerGroupComponent = props => {
|
|
|
157
177
|
* Listen to the changes on the current layer.
|
|
158
178
|
*/
|
|
159
179
|
useEffect(() => {
|
|
160
|
-
const
|
|
180
|
+
const handleSelectedChanged = () => {
|
|
161
181
|
// TODO Support follow mode and remoteUser state
|
|
162
182
|
setSelected(isSelected(group.name, gisModel));
|
|
163
183
|
};
|
|
164
|
-
gisModel === null || gisModel === void 0 ? void 0 : gisModel.
|
|
184
|
+
gisModel === null || gisModel === void 0 ? void 0 : gisModel.selectedChanged.connect(handleSelectedChanged);
|
|
185
|
+
handleSelectedChanged();
|
|
165
186
|
return () => {
|
|
166
|
-
gisModel === null || gisModel === void 0 ? void 0 : gisModel.
|
|
187
|
+
gisModel === null || gisModel === void 0 ? void 0 : gisModel.selectedChanged.disconnect(handleSelectedChanged);
|
|
167
188
|
};
|
|
168
189
|
}, [gisModel, group.name]);
|
|
169
190
|
/**
|
|
@@ -193,6 +214,21 @@ const LayerGroupComponent = props => {
|
|
|
193
214
|
const handleRightClick = (event) => {
|
|
194
215
|
onClick({ type: 'group', item: name, event });
|
|
195
216
|
};
|
|
217
|
+
const handleGroupMoreClick = (e) => {
|
|
218
|
+
e.stopPropagation();
|
|
219
|
+
onClick({
|
|
220
|
+
type: 'group',
|
|
221
|
+
item: name,
|
|
222
|
+
event: e,
|
|
223
|
+
});
|
|
224
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
225
|
+
e.currentTarget.dispatchEvent(new MouseEvent('contextmenu', {
|
|
226
|
+
bubbles: true,
|
|
227
|
+
cancelable: true,
|
|
228
|
+
clientX: rect.left,
|
|
229
|
+
clientY: rect.bottom,
|
|
230
|
+
}));
|
|
231
|
+
};
|
|
196
232
|
const handleExpand = async () => {
|
|
197
233
|
state.save(`jupytergis:${group.name}`, { expanded: !open });
|
|
198
234
|
setOpen(!open);
|
|
@@ -228,7 +264,9 @@ const LayerGroupComponent = props => {
|
|
|
228
264
|
padding: '2px 4px',
|
|
229
265
|
fontSize: 'inherit',
|
|
230
266
|
fontFamily: 'inherit',
|
|
231
|
-
}, autoFocus: true })) : (React.createElement("span", { id: id, className: LAYER_TEXT_CLASS, tabIndex: -2 }, name))
|
|
267
|
+
}, autoFocus: true })) : (React.createElement("span", { id: id, className: LAYER_TEXT_CLASS, tabIndex: -2 }, name)),
|
|
268
|
+
React.createElement(Button, { className: "jp-gis-layer-more-btn", minimal: true, onClick: handleGroupMoreClick, title: "More options" },
|
|
269
|
+
React.createElement(FontAwesomeIcon, { icon: faEllipsisVertical }))),
|
|
232
270
|
open && (React.createElement("div", null, layers
|
|
233
271
|
.slice()
|
|
234
272
|
.reverse()
|
|
@@ -253,7 +291,7 @@ const LayerComponent = props => {
|
|
|
253
291
|
const [selected, setSelected] = useState(
|
|
254
292
|
// TODO Support multi-selection as `model?.jGISModel?.localState?.selected.value` does
|
|
255
293
|
isSelected(layerId, gisModel));
|
|
256
|
-
const [expanded, setExpanded] = useState(
|
|
294
|
+
const [expanded, setExpanded] = useState(true);
|
|
257
295
|
const [isEditing, setIsEditing] = useState(false);
|
|
258
296
|
const [editValue, setEditValue] = useState('');
|
|
259
297
|
const { symbology } = useGetSymbology({
|
|
@@ -270,13 +308,14 @@ const LayerComponent = props => {
|
|
|
270
308
|
* Listen to the changes on the current layer.
|
|
271
309
|
*/
|
|
272
310
|
useEffect(() => {
|
|
273
|
-
const
|
|
311
|
+
const handleSelectedChanged = () => {
|
|
274
312
|
// TODO Support follow mode and remoteUser state
|
|
275
313
|
setSelected(isSelected(layerId, gisModel));
|
|
276
314
|
};
|
|
277
|
-
gisModel === null || gisModel === void 0 ? void 0 : gisModel.
|
|
315
|
+
gisModel === null || gisModel === void 0 ? void 0 : gisModel.selectedChanged.connect(handleSelectedChanged);
|
|
316
|
+
handleSelectedChanged();
|
|
278
317
|
return () => {
|
|
279
|
-
gisModel === null || gisModel === void 0 ? void 0 : gisModel.
|
|
318
|
+
gisModel === null || gisModel === void 0 ? void 0 : gisModel.selectedChanged.disconnect(handleSelectedChanged);
|
|
280
319
|
};
|
|
281
320
|
}, [gisModel, layerId]);
|
|
282
321
|
/**
|
|
@@ -318,6 +357,21 @@ const LayerComponent = props => {
|
|
|
318
357
|
event,
|
|
319
358
|
});
|
|
320
359
|
};
|
|
360
|
+
const handleLayerMoreClick = (e) => {
|
|
361
|
+
e.stopPropagation();
|
|
362
|
+
onClick({
|
|
363
|
+
type: 'layer',
|
|
364
|
+
item: layerId,
|
|
365
|
+
event: e,
|
|
366
|
+
});
|
|
367
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
368
|
+
e.currentTarget.dispatchEvent(new MouseEvent('contextmenu', {
|
|
369
|
+
bubbles: true,
|
|
370
|
+
cancelable: true,
|
|
371
|
+
clientX: rect.left,
|
|
372
|
+
clientY: rect.bottom,
|
|
373
|
+
}));
|
|
374
|
+
};
|
|
321
375
|
const handleRenameSave = () => {
|
|
322
376
|
const newName = editValue.trim();
|
|
323
377
|
if (newName && newName !== name && gisModel) {
|
|
@@ -366,11 +420,17 @@ const LayerComponent = props => {
|
|
|
366
420
|
${isStorySegmentLayer ? 'jp-gis-storySegmentLayer' : ''}
|
|
367
421
|
${selected ? ' jp-mod-selected' : ''}`, draggable: true, onDragStart: Private.onDragStart, onDragOver: Private.onDragOver, onDragEnd: Private.onDragEnd, "data-id": layerId, style: { display: 'flex', flexDirection: 'column' } },
|
|
368
422
|
React.createElement("div", { className: LAYER_TITLE_CLASS, onClick: setSelection, onContextMenu: setSelection, style: { display: 'flex' } },
|
|
369
|
-
|
|
370
|
-
e
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
423
|
+
React.createElement(Button, { minimal: true, onClick: hasSupportedSymbology
|
|
424
|
+
? e => {
|
|
425
|
+
e.stopPropagation();
|
|
426
|
+
setExpanded(v => !v);
|
|
427
|
+
}
|
|
428
|
+
: undefined, title: hasSupportedSymbology
|
|
429
|
+
? expanded
|
|
430
|
+
? 'Hide legend'
|
|
431
|
+
: 'Show legend'
|
|
432
|
+
: undefined, style: { visibility: hasSupportedSymbology ? 'visible' : 'hidden' } },
|
|
433
|
+
React.createElement(LabIcon.resolveReact, { icon: expanded ? caretDownIcon : caretRightIcon, tag: "span" })),
|
|
374
434
|
isStorySegmentLayer ? (React.createElement("span", { className: LAYER_SLIDE_NUMBER_CLASS, title: "Slide number" }, getSlideNumber())) : (React.createElement(Button, { title: layer.visible ? 'Hide layer' : 'Show layer', onClick: toggleVisibility, minimal: true },
|
|
375
435
|
React.createElement(LabIcon.resolveReact, { icon: layer.visible ? visibilityIcon : nonVisibilityIcon, className: `${LAYER_ICON_CLASS}${layer.visible ? '' : ' jp-gis-mod-hidden'}`, tag: "span" }))),
|
|
376
436
|
icons.has(layer.type) && (React.createElement(LabIcon.resolveReact, Object.assign({}, icons.get(layer.type), { className: LAYER_ICON_CLASS }))),
|
|
@@ -383,8 +443,10 @@ const LayerComponent = props => {
|
|
|
383
443
|
fontFamily: 'inherit',
|
|
384
444
|
}, autoFocus: true })) : (React.createElement("span", { id: id, className: LAYER_TEXT_CLASS, tabIndex: -2, onDoubleClick: handleDoubleClick, title: "Double-click to zoom to layer" }, name)),
|
|
385
445
|
React.createElement(Button, { title: 'Move map to the extent of the layer', onClick: moveToExtent, minimal: true },
|
|
386
|
-
React.createElement(LabIcon.resolveReact, { icon: targetWithCenterIcon, className: LAYER_ICON_CLASS, tag: "span" }))
|
|
387
|
-
|
|
446
|
+
React.createElement(LabIcon.resolveReact, { icon: targetWithCenterIcon, className: LAYER_ICON_CLASS, tag: "span" })),
|
|
447
|
+
React.createElement(Button, { className: "jp-gis-layer-more-btn", minimal: true, onClick: handleLayerMoreClick, title: "More options" },
|
|
448
|
+
React.createElement(FontAwesomeIcon, { icon: faEllipsisVertical }))),
|
|
449
|
+
expanded && gisModel && hasSupportedSymbology && (React.createElement("div", { style: { marginTop: 6, width: '100%' }, onClick: setSelection },
|
|
388
450
|
React.createElement(LegendItem, { layerId: layerId, model: gisModel })))));
|
|
389
451
|
};
|
|
390
452
|
var Private;
|