@jupytergis/base 0.14.0 → 0.14.1

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.
@@ -33,7 +33,6 @@ export declare const toggleLeftPanel = "jupytergis:toggleLeftPanel";
33
33
  export declare const toggleRightPanel = "jupytergis:toggleRightPanel";
34
34
  export declare const showLayersTab = "jupytergis:showLayersTab";
35
35
  export declare const showStacBrowserTab = "jupytergis:showStacBrowserTab";
36
- export declare const showFiltersTab = "jupytergis:showFiltersTab";
37
36
  export declare const showObjectPropertiesTab = "jupytergis:showObjectPropertiesTab";
38
37
  export declare const showAnnotationsTab = "jupytergis:showAnnotationsTab";
39
38
  export declare const showIdentifyPanelTab = "jupytergis:showIdentifyPanelTab";
@@ -46,7 +46,6 @@ export const toggleRightPanel = 'jupytergis:toggleRightPanel';
46
46
  // Left panel tabs
47
47
  export const showLayersTab = 'jupytergis:showLayersTab';
48
48
  export const showStacBrowserTab = 'jupytergis:showStacBrowserTab';
49
- export const showFiltersTab = 'jupytergis:showFiltersTab';
50
49
  // Right panel tabs
51
50
  export const showObjectPropertiesTab = 'jupytergis:showObjectPropertiesTab';
52
51
  export const showAnnotationsTab = 'jupytergis:showAnnotationsTab';
@@ -1047,31 +1047,6 @@ export function addCommands(app, tracker, translator, formSchemaRegistry, layerB
1047
1047
  commands.notifyCommandChanged(CommandIDs.showStacBrowserTab);
1048
1048
  },
1049
1049
  });
1050
- commands.addCommand(CommandIDs.showFiltersTab, {
1051
- label: trans.__('Show Filters Tab'),
1052
- caption: 'Show the filters tab in the current JupyterGIS document.',
1053
- describedBy: {
1054
- args: {
1055
- type: 'object',
1056
- properties: {},
1057
- },
1058
- },
1059
- isEnabled: () => Boolean(tracker.currentWidget),
1060
- isToggled: () => tracker.currentWidget
1061
- ? !tracker.currentWidget.model.jgisSettings.filtersDisabled
1062
- : false,
1063
- execute: async () => {
1064
- var _a, _b, _c;
1065
- const current = tracker.currentWidget;
1066
- if (!current) {
1067
- return;
1068
- }
1069
- const settings = await current.model.getSettings();
1070
- const currentValue = (_c = (_b = (_a = settings === null || settings === void 0 ? void 0 : settings.composite) === null || _a === void 0 ? void 0 : _a.filtersDisabled) !== null && _b !== void 0 ? _b : current.model.jgisSettings.filtersDisabled) !== null && _c !== void 0 ? _c : false;
1071
- await (settings === null || settings === void 0 ? void 0 : settings.set('filtersDisabled', !currentValue));
1072
- commands.notifyCommandChanged(CommandIDs.showFiltersTab);
1073
- },
1074
- });
1075
1050
  // Right panel tabs
1076
1051
  commands.addCommand(CommandIDs.showObjectPropertiesTab, {
1077
1052
  label: trans.__('Show Object Properties Tab'),
@@ -1,5 +1,6 @@
1
1
  import React, { useEffect, useState } from 'react';
2
2
  import { useGetProperties } from "../hooks/useGetProperties";
3
+ import FilterComponent from "../../../panelview/filter-panel/Filter";
3
4
  import { getColorCodeFeatureAttributes, getFeatureAttributes, getNumericFeatureAttributes, objectEntries, } from "../../../tools";
4
5
  import Canonical from './types/Canonical';
5
6
  import Categorized from './types/Categorized';
@@ -92,8 +93,8 @@ const VectorRendering = ({ model, okSignalPromise, layerId, isStorySegmentOverri
92
93
  const selectableRenderTypes = getSelectableRenderTypes(featureProperties, layer.type);
93
94
  const selectedRenderTypeProps = selectableRenderTypes[selectedRenderType];
94
95
  return (React.createElement(React.Fragment, null,
95
- selectedRenderTypeProps.isTabbed && (React.createElement("div", { className: "jp-gis-symbology-tabs" }, ['color', 'radius'].map(tab => (React.createElement("button", { key: tab, className: `jp-gis-tab ${symbologyTab === tab ? 'active' : ''}`, onClick: () => setSymbologyTab(tab) }, tab.charAt(0).toUpperCase() + tab.slice(1)))))),
96
- React.createElement("div", { className: "jp-gis-symbology-row" },
96
+ selectedRenderTypeProps.isTabbed && (React.createElement("div", { className: "jp-gis-symbology-tabs" }, ['color', 'radius', 'filters'].map(tab => (React.createElement("button", { key: tab, className: `jp-gis-tab ${symbologyTab === tab ? 'active' : ''}`, onClick: () => setSymbologyTab(tab) }, tab.charAt(0).toUpperCase() + tab.slice(1)))))),
97
+ symbologyTab !== 'filters' && (React.createElement("div", { className: "jp-gis-symbology-row" },
97
98
  React.createElement("label", { htmlFor: "render-type-select" }, "Render Type:"),
98
99
  React.createElement("div", { className: "jp-select-wrapper" },
99
100
  React.createElement("select", { name: "render-type-select", id: "render-type-select", className: "jp-mod-styled", value: selectedRenderType, onChange: event => {
@@ -101,11 +102,11 @@ const VectorRendering = ({ model, okSignalPromise, layerId, isStorySegmentOverri
101
102
  } }, objectEntries(selectableRenderTypes)
102
103
  .filter(([renderType, renderTypeProps]) => renderTypeProps.layerTypeSupported &&
103
104
  !(renderType === 'Heatmap' && symbologyTab === 'radius'))
104
- .map(([renderType, _]) => (React.createElement("option", { key: renderType, value: renderType }, renderType)))))),
105
- React.createElement(selectedRenderTypeProps.component, Object.assign({ model: model, okSignalPromise: okSignalPromise, layerId: layerId, isStorySegmentOverride: isStorySegmentOverride, segmentId: segmentId }, (selectedRenderTypeProps.isTabbed ? { symbologyTab } : {}), (selectedRenderTypeProps.selectableAttributesAndValues
105
+ .map(([renderType, _]) => (React.createElement("option", { key: renderType, value: renderType }, renderType))))))),
106
+ symbologyTab === 'filters' ? (React.createElement(FilterComponent, { model: model, okSignalPromise: okSignalPromise })) : (React.createElement(selectedRenderTypeProps.component, Object.assign({ model: model, okSignalPromise: okSignalPromise, layerId: layerId, isStorySegmentOverride: isStorySegmentOverride, segmentId: segmentId }, (selectedRenderTypeProps.isTabbed ? { symbologyTab } : {}), (selectedRenderTypeProps.selectableAttributesAndValues
106
107
  ? {
107
108
  selectableAttributesAndValues: selectedRenderTypeProps.selectableAttributesAndValues,
108
109
  }
109
- : {})))));
110
+ : {}))))));
110
111
  };
111
112
  export default VectorRendering;
@@ -2,6 +2,8 @@ import React from 'react';
2
2
  const ValueSelect = ({ featureProperties, selectedValue, setSelectedValue, }) => {
3
3
  return (React.createElement("div", { className: "jp-gis-symbology-row" },
4
4
  React.createElement("label", { htmlFor: 'vector-value-select' }, "Value:"),
5
- React.createElement("select", { name: 'vector-value-select', onChange: event => setSelectedValue(event.target.value), className: "jp-mod-styled" }, Object.keys(featureProperties).map((feature, index) => (React.createElement("option", { key: index, value: feature, selected: feature === selectedValue, className: "jp-mod-styled" }, feature))))));
5
+ React.createElement("select", { name: 'vector-value-select', onChange: event => setSelectedValue(event.target.value), className: "jp-mod-styled" }, Object.keys(featureProperties)
6
+ .sort((a, b) => a.localeCompare(b))
7
+ .map((feature, index) => (React.createElement("option", { key: index, value: feature, selected: feature === selectedValue, className: "jp-mod-styled" }, feature))))));
6
8
  };
7
9
  export default ValueSelect;
@@ -1,7 +1,10 @@
1
1
  import { IJupyterGISModel } from '@jupytergis/schema';
2
+ import { PromiseDelegate } from '@lumino/coreutils';
3
+ import { Signal } from '@lumino/signaling';
2
4
  import React from 'react';
3
5
  interface IFilterComponentProps {
4
6
  model: IJupyterGISModel;
7
+ okSignalPromise: PromiseDelegate<Signal<any, null>>;
5
8
  }
6
9
  declare const FilterComponent: React.FC<IFilterComponentProps>;
7
10
  export default FilterComponent;
@@ -1,9 +1,10 @@
1
1
  import { Button } from '@jupyterlab/ui-components';
2
2
  import { cloneDeep } from 'lodash';
3
3
  import React, { useEffect, useRef, useState } from 'react';
4
+ import { useOkSignal } from "../../dialogs/symbology/hooks/useOkSignal";
4
5
  import { debounce, loadFile } from "../../tools";
5
6
  import FilterRow from './FilterRow';
6
- const FilterComponent = ({ model }) => {
7
+ const FilterComponent = ({ model, okSignalPromise, }) => {
7
8
  const featuresInLayerRef = useRef({});
8
9
  const [logicalOp, setLogicalOp] = useState('all');
9
10
  const [selectedLayer, setSelectedLayer] = useState('');
@@ -48,6 +49,9 @@ const FilterComponent = ({ model }) => {
48
49
  model === null || model === void 0 ? void 0 : model.sharedOptionsChanged.disconnect(handleSharedOptionsChanged);
49
50
  };
50
51
  }, [model]);
52
+ useOkSignal(okSignalPromise, () => {
53
+ updateLayerFilters(filterRows, logicalOp);
54
+ });
51
55
  useEffect(() => {
52
56
  var _a, _b, _c, _d;
53
57
  // Reset filter stuff for new layer
@@ -141,9 +145,6 @@ const FilterComponent = ({ model }) => {
141
145
  updateLayerFilters([]);
142
146
  setFilterRows([]);
143
147
  };
144
- const submitFilter = () => {
145
- updateLayerFilters(filterRows);
146
- };
147
148
  const updateLayerFilters = (filters, op) => {
148
149
  const layer = model === null || model === void 0 ? void 0 : model.getLayer(selectedLayer);
149
150
  if (!layer) {
@@ -158,17 +159,16 @@ const FilterComponent = ({ model }) => {
158
159
  return (React.createElement(React.Fragment, null,
159
160
  shouldDisplay && (React.createElement("div", { className: "jp-gis-filter-main" },
160
161
  React.createElement("div", { id: "filter-container", className: "jp-gis-filter-select-container" },
161
- React.createElement("select", { className: "jp-mod-styled rjsf jp-gis-logical-select", onChange: handleLogicalOpChange },
162
- React.createElement("option", { key: "all", value: "all", selected: logicalOp === 'all' }, "All"),
163
- React.createElement("option", { key: "any", value: "any", selected: logicalOp === 'any' }, "Any")),
162
+ React.createElement("select", { className: "jp-mod-styled rjsf jp-gis-logical-select", value: logicalOp, onChange: handleLogicalOpChange },
163
+ React.createElement("option", { value: "all" }, "All"),
164
+ React.createElement("option", { value: "any" }, "Any")),
164
165
  filterRows.map((row, index) => (React.createElement(FilterRow, { key: index, index: index, features: featuresInLayer, filterRows: filterRows, setFilterRows: setFilterRows, deleteRow: () => deleteRow(index) })))),
165
166
  React.createElement("div", { className: "jp-gis-filter-button-container" },
166
167
  React.createElement("div", { style: {
167
168
  justifyContent: 'flex-start',
168
169
  } },
169
170
  React.createElement(Button, { className: "jp-Dialog-button jp-mod-accept jp-mod-styled", onClick: addFilterRow, "data-testid": "add-filter-button" }, "Add"),
170
- React.createElement(Button, { className: "jp-Dialog-button jp-mod-reject jp-mod-styled", onClick: clearFilters }, "Clear")),
171
- React.createElement(Button, { className: "jp-Dialog-button jp-mod-accept jp-mod-styled", onClick: submitFilter }, "Submit")))),
171
+ React.createElement(Button, { className: "jp-Dialog-button jp-mod-reject jp-mod-styled", onClick: clearFilters }, "Clear"))))),
172
172
  !shouldDisplay && (React.createElement("div", { style: { textAlign: 'center' } }, "No layer selected"))));
173
173
  };
174
174
  export default FilterComponent;
@@ -2,7 +2,6 @@ import * as React from 'react';
2
2
  import Draggable from 'react-draggable';
3
3
  import { CommandIDs } from '../constants';
4
4
  import { LayersBodyComponent } from './components/layers';
5
- import FilterComponent from './filter-panel/Filter';
6
5
  import { PanelTabs, TabsContent, TabsList, TabsTrigger, } from '../shared/components/Tabs';
7
6
  import StacPanel from '../stacBrowser/components/StacPanel';
8
7
  export const LeftPanel = (props) => {
@@ -18,9 +17,6 @@ export const LeftPanel = (props) => {
18
17
  !props.settings.stacBrowserDisabled && !storyMapPresentationMode
19
18
  ? { name: 'stac', title: 'Stac Browser' }
20
19
  : false,
21
- !props.settings.filtersDisabled && !storyMapPresentationMode
22
- ? { name: 'filters', title: 'Filters' }
23
- : false,
24
20
  !props.settings.storyMapsDisabled
25
21
  ? { name: 'segments', title: 'Segments' }
26
22
  : false,
@@ -121,7 +117,6 @@ export const LeftPanel = (props) => {
121
117
  }, [storySegmentLayerTree]);
122
118
  const allLeftTabsDisabled = props.settings.layersDisabled &&
123
119
  props.settings.stacBrowserDisabled &&
124
- props.settings.filtersDisabled &&
125
120
  props.settings.storyMapsDisabled;
126
121
  const leftPanelVisible = !props.settings.leftPanelDisabled && !allLeftTabsDisabled;
127
122
  return (React.createElement(Draggable, { handle: ".jgis-tabs-list", cancel: ".jgis-tabs-trigger", bounds: ".jGIS-Mainview-Container" },
@@ -139,8 +134,6 @@ export const LeftPanel = (props) => {
139
134
  React.createElement(LayersBodyComponent, { model: props.model, commands: props.commands, state: props.state, layerTree: filteredLayerTree }))),
140
135
  !props.settings.stacBrowserDisabled && (React.createElement(TabsContent, { value: "stac", className: "jgis-panel-tab-content jgis-panel-tab-content-stac-panel" },
141
136
  React.createElement(StacPanel, { model: props.model }))),
142
- !props.settings.filtersDisabled && (React.createElement(TabsContent, { value: "filters", className: "jgis-panel-tab-content" },
143
- React.createElement(FilterComponent, { model: props.model }))),
144
137
  !props.settings.storyMapsDisabled && (React.createElement(TabsContent, { value: "segments", className: "jgis-panel-tab-content" },
145
138
  React.createElement(LayersBodyComponent, { model: props.model, commands: props.commands, state: props.state, layerTree: storySegmentLayerTree })))))));
146
139
  };
@@ -5,7 +5,7 @@ import { useStoryMap } from './hooks/useStoryMap';
5
5
  export function SpectaPanel({ model, isSpecta, isMobile, onSegmentTransitionEnd, containerRef, storyViewerPanelRef, addLayer, removeLayer, }) {
6
6
  const overrideLayerEntriesRef = useRef([]);
7
7
  const segmentContainerRef = useRef(null);
8
- const { storyData, currentIndex, setIndex, handlePrev, handleNext, hasPrev, hasNext, activeSlide, layerName, } = useStoryMap({
8
+ const { storyData, currentIndex, setIndex, handlePrev, handleNext, hasPrev, hasNext, activeSlide, layerName, showGradient, } = useStoryMap({
9
9
  model,
10
10
  overrideLayerEntriesRef,
11
11
  removeLayer,
@@ -31,5 +31,5 @@ export function SpectaPanel({ model, isSpecta, isMobile, onSegmentTransitionEnd,
31
31
  if (isMobile) {
32
32
  return (React.createElement(SpectaMobileView, { model: model, segmentContainerRef: segmentContainerRef, storyData: storyData, currentIndex: currentIndex, activeSlide: activeSlide, layerName: layerName, handlePrev: handlePrev, handleNext: handleNext, hasPrev: hasPrev, hasNext: hasNext, setIndex: setIndex }));
33
33
  }
34
- return (React.createElement(SpectaDesktopView, { model: model, isSpecta: isSpecta, containerRef: containerRef, storyViewerPanelRef: storyViewerPanelRef, segmentContainerRef: segmentContainerRef, storyData: storyData, currentIndex: currentIndex, activeSlide: activeSlide, layerName: layerName, handlePrev: handlePrev, handleNext: handleNext, hasPrev: hasPrev, hasNext: hasNext, setIndex: setIndex }));
34
+ return (React.createElement(SpectaDesktopView, { model: model, isSpecta: isSpecta, containerRef: containerRef, storyViewerPanelRef: storyViewerPanelRef, segmentContainerRef: segmentContainerRef, storyData: storyData, currentIndex: currentIndex, activeSlide: activeSlide, layerName: layerName, handlePrev: handlePrev, handleNext: handleNext, hasPrev: hasPrev, hasNext: hasNext, showGradient: showGradient, setIndex: setIndex }));
35
35
  }
@@ -5,7 +5,6 @@ interface IStoryViewerPanelProps {
5
5
  model: IJupyterGISModel;
6
6
  isSpecta: boolean;
7
7
  isMobile?: boolean;
8
- className?: string;
9
8
  /** Ref for the segment container (SpectaPanel uses it for animationend). */
10
9
  segmentContainerRef?: RefObject<HTMLDivElement>;
11
10
  storyData: IJGISStoryMap | null;
@@ -41,7 +40,7 @@ export type StoryNavPlacement = 'below-title' | 'over-image' | 'subtitle-specta'
41
40
  * Story viewer (presentational). Receives story state and callbacks from parent.
42
41
  * Desktop scroll/sentinel/imperative handle live in SpectaDesktopView.
43
42
  */
44
- declare function StoryViewerPanel({ model, isSpecta, isMobile, className, segmentContainerRef, storyData, currentIndex, activeSlide, layerName, handlePrev, handleNext, hasPrev, hasNext, setIndex, }: IStoryViewerPanelProps): React.JSX.Element;
43
+ declare function StoryViewerPanel({ model, isSpecta, isMobile, segmentContainerRef, storyData, currentIndex, activeSlide, layerName, handlePrev, handleNext, hasPrev, hasNext, setIndex, }: IStoryViewerPanelProps): React.JSX.Element;
45
44
  declare namespace StoryViewerPanel {
46
45
  var displayName: string;
47
46
  }
@@ -20,7 +20,7 @@ function getStoryNavPlacement(isSpecta, hasImage, storyType, isMobile) {
20
20
  * Story viewer (presentational). Receives story state and callbacks from parent.
21
21
  * Desktop scroll/sentinel/imperative handle live in SpectaDesktopView.
22
22
  */
23
- function StoryViewerPanel({ model, isSpecta, isMobile = false, className, segmentContainerRef, storyData, currentIndex, activeSlide, layerName, handlePrev, handleNext, hasPrev, hasNext, setIndex, }) {
23
+ function StoryViewerPanel({ model, isSpecta, isMobile = false, segmentContainerRef, storyData, currentIndex, activeSlide, layerName, handlePrev, handleNext, hasPrev, hasNext, setIndex, }) {
24
24
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
25
25
  const [imageLoaded, setImageLoaded] = useState(false);
26
26
  // Prefetch image when slide changes
@@ -15,7 +15,8 @@ interface ISpectaDesktopViewProps {
15
15
  handleNext: () => void;
16
16
  hasPrev: boolean;
17
17
  hasNext: boolean;
18
+ showGradient: boolean;
18
19
  setIndex: (index: number) => void;
19
20
  }
20
- export declare function SpectaDesktopView({ model, isSpecta, containerRef, storyViewerPanelRef, segmentContainerRef, storyData, currentIndex, activeSlide, layerName, handlePrev, handleNext, hasPrev, hasNext, setIndex, }: ISpectaDesktopViewProps): JSX.Element;
21
+ export declare function SpectaDesktopView({ model, isSpecta, containerRef, storyViewerPanelRef, segmentContainerRef, storyData, currentIndex, activeSlide, layerName, handlePrev, handleNext, hasPrev, hasNext, showGradient, setIndex, }: ISpectaDesktopViewProps): JSX.Element;
21
22
  export {};
@@ -1,7 +1,7 @@
1
1
  import React, { useEffect, useImperativeHandle, useRef, } from 'react';
2
2
  import StoryViewerPanel from "../StoryViewerPanel";
3
3
  import SpectaPresentationProgressBar from "../../../statusbar/SpectaPresentationProgressBar";
4
- export function SpectaDesktopView({ model, isSpecta, containerRef, storyViewerPanelRef, segmentContainerRef, storyData, currentIndex, activeSlide, layerName, handlePrev, handleNext, hasPrev, hasNext, setIndex, }) {
4
+ export function SpectaDesktopView({ model, isSpecta, containerRef, storyViewerPanelRef, segmentContainerRef, storyData, currentIndex, activeSlide, layerName, handlePrev, handleNext, hasPrev, hasNext, showGradient, setIndex, }) {
5
5
  const scrollContainerRef = useRef(null);
6
6
  const topSentinelRef = useRef(null);
7
7
  const bottomSentinelRef = useRef(null);
@@ -39,11 +39,11 @@ export function SpectaDesktopView({ model, isSpecta, containerRef, storyViewerPa
39
39
  getScrollContainer: () => scrollContainerRef.current,
40
40
  }), [handlePrev, handleNext, isSpecta, hasPrev, hasNext]);
41
41
  return (React.createElement(React.Fragment, null,
42
- React.createElement("div", { className: "jgis-specta-right-panel-container-mod jgis-right-panel-container" },
42
+ React.createElement("div", { className: "jgis-specta-right-panel-container-mod jgis-right-panel-container", style: showGradient ? undefined : { width: '25%', borderRadius: 0 } },
43
43
  React.createElement("div", { ref: containerRef, className: "jgis-specta-story-panel-container" },
44
- React.createElement("div", { ref: scrollContainerRef, className: "jgis-story-viewer-panel-specta-mod", id: "jgis-story-segment-panel" },
44
+ React.createElement("div", { ref: scrollContainerRef, className: "jgis-story-viewer-panel-specta-mod", id: "jgis-story-segment-panel", style: showGradient ? undefined : { width: 'unset' } },
45
45
  React.createElement("div", { ref: topSentinelRef, "aria-hidden": true, "data-story-scroll-sentinel": "top", style: { height: 1, minHeight: 1, pointerEvents: 'none' } }),
46
- React.createElement(StoryViewerPanel, { model: model, isSpecta: isSpecta, className: "jgis-story-viewer-panel-specta-mod", segmentContainerRef: segmentContainerRef, storyData: storyData, currentIndex: currentIndex, activeSlide: activeSlide, layerName: layerName, handlePrev: handlePrev, handleNext: handleNext, hasPrev: hasPrev, hasNext: hasNext, setIndex: setIndex }),
46
+ React.createElement(StoryViewerPanel, { model: model, isSpecta: isSpecta, segmentContainerRef: segmentContainerRef, storyData: storyData, currentIndex: currentIndex, activeSlide: activeSlide, layerName: layerName, handlePrev: handlePrev, handleNext: handleNext, hasPrev: hasPrev, hasNext: hasNext, setIndex: setIndex }),
47
47
  React.createElement("div", { ref: bottomSentinelRef, "aria-hidden": true, "data-story-scroll-sentinel": "bottom", style: { height: 1, minHeight: 1, pointerEvents: 'none' } })))),
48
48
  React.createElement(SpectaPresentationProgressBar, { model: model })));
49
49
  }
@@ -22,6 +22,7 @@ export declare function useStoryMap({ model, overrideLayerEntriesRef, removeLaye
22
22
  storyData: IJGISStoryMap | null;
23
23
  storySegments: IJGISLayer[];
24
24
  currentIndex: number;
25
+ showGradient: boolean;
25
26
  clearOverrideLayers: () => void;
26
27
  setIndex: (index: number) => void;
27
28
  handlePrev: () => void;
@@ -16,6 +16,7 @@ export function getSpectaPresentationStyle(story) {
16
16
  return style;
17
17
  }
18
18
  export function useStoryMap({ model, overrideLayerEntriesRef, removeLayer, addLayer, panelRef, isSpecta, }) {
19
+ var _a;
19
20
  const [currentIndex, setCurrentIndex] = useState(() => { var _a; return (_a = model.getCurrentSegmentIndex()) !== null && _a !== void 0 ? _a : 0; });
20
21
  const [storyData, setStoryData] = useState(() => { var _a; return (_a = model.getSelectedStory().story) !== null && _a !== void 0 ? _a : null; });
21
22
  const storySegments = useMemo(() => {
@@ -32,6 +33,7 @@ export function useStoryMap({ model, overrideLayerEntriesRef, removeLayer, addLa
32
33
  const activeSlide = useMemo(() => currentStorySegment === null || currentStorySegment === void 0 ? void 0 : currentStorySegment.parameters, [currentStorySegment]);
33
34
  const layerName = useMemo(() => { var _a; return (_a = currentStorySegment === null || currentStorySegment === void 0 ? void 0 : currentStorySegment.name) !== null && _a !== void 0 ? _a : ''; }, [currentStorySegment]);
34
35
  const currentStorySegmentId = useMemo(() => storySegmentIds === null || storySegmentIds === void 0 ? void 0 : storySegmentIds[currentIndex], [storySegmentIds, currentIndex]);
36
+ const showGradient = (_a = storyData === null || storyData === void 0 ? void 0 : storyData.showGradient) !== null && _a !== void 0 ? _a : true;
35
37
  const hasPrev = currentIndex > 0;
36
38
  const hasNext = currentIndex < segmentCount - 1;
37
39
  const clearOverrideLayers = useCallback(() => {
@@ -236,6 +238,7 @@ export function useStoryMap({ model, overrideLayerEntriesRef, removeLayer, addLa
236
238
  storyData,
237
239
  storySegments,
238
240
  currentIndex,
241
+ showGradient,
239
242
  clearOverrideLayers,
240
243
  setIndex,
241
244
  handlePrev,
@@ -105,9 +105,7 @@ export function QueryableComboBox({ queryables, selectedQueryables, updateSelect
105
105
  };
106
106
  return (React.createElement(SingleDatePicker, { date: parseDate(currentValue), onDateChange: handleDateChange, dateFormat: "P", showIcon: true, placeholder: "Select date", className: "jgis-queryable-combo-input jgis-queryable-combo-input-date-picker" }));
107
107
  }
108
- return (React.createElement(Input, { type: "text", className: "jgis-queryable-combo-input",
109
- // style={{borderRadius: 0}}
110
- value: currentValue || '', onChange: e => onChange(e.target.value) }));
108
+ return (React.createElement(Input, { type: "text", value: currentValue || '', onChange: e => onChange(e.target.value) }));
111
109
  case 'number':
112
110
  case 'integer':
113
111
  if (val.enum) {
package/lib/types.d.ts CHANGED
@@ -6,7 +6,7 @@ import { Map } from 'ol';
6
6
  export { IDict };
7
7
  export type ValueOf<T> = T[keyof T];
8
8
  export type JupyterGISTracker = WidgetTracker<IJupyterGISWidget>;
9
- export type SymbologyTab = 'color' | 'radius';
9
+ export type SymbologyTab = 'color' | 'radius' | 'filters';
10
10
  type RgbColorValue = [number, number, number] | [number, number, number, number];
11
11
  type HexColorValue = string;
12
12
  type InternalRgbArray = number[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jupytergis/base",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "description": "A JupyterLab extension for 3D modelling.",
5
5
  "keywords": [
6
6
  "jupyter",
@@ -44,7 +44,7 @@
44
44
  "@jupyter/collaboration": "^4",
45
45
  "@jupyter/react-components": "^0.16.6",
46
46
  "@jupyter/ydoc": "^2.0.0 || ^3.0.0",
47
- "@jupytergis/schema": "^0.14.0",
47
+ "@jupytergis/schema": "^0.14.1",
48
48
  "@jupyterlab/application": "^4.3.0",
49
49
  "@jupyterlab/apputils": "^4.3.0",
50
50
  "@jupyterlab/completer": "^4.3.0",
@@ -13,11 +13,8 @@
13
13
  border: 0.0375rem solid
14
14
  color-mix(in srgb, var(--jp-border-color1), transparent 20%);
15
15
  transition: background-color 0.2s ease;
16
- height: 2.25rem;
17
- padding-left: 1rem;
18
- padding-right: 1rem;
19
- padding-top: 0.5rem;
20
- padding-bottom: 0.5rem;
16
+ height: 1.5rem;
17
+ padding: 1rem 0.5rem;
21
18
  max-width: 20rem;
22
19
  gap: 0.25rem;
23
20
  }
@@ -1,12 +1,12 @@
1
1
  [data-slot='input'] {
2
2
  box-sizing: border-box;
3
- height: 1.125rem;
3
+ height: 2.25rem;
4
4
  width: auto;
5
5
  min-width: 0;
6
6
  border-radius: var(--jp-border-radius, 0.375rem);
7
7
  border: 1px solid var(--jp-border-color1);
8
8
  background-color: transparent;
9
- padding: 0.25rem 0.75rem;
9
+ padding: 0.25rem 0.5rem;
10
10
  font-size: 1rem;
11
11
  box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
12
12
  transition:
@@ -1,5 +1,6 @@
1
1
  .jgis-story-viewer-panel {
2
2
  padding: 1rem;
3
+ padding-right: 0;
3
4
  overflow: auto;
4
5
  position: relative;
5
6
  }
@@ -187,10 +188,14 @@
187
188
  }
188
189
 
189
190
  .jgis-story-viewer-panel-specta-mod {
191
+ display: flex;
192
+ height: 100%;
190
193
  width: 45%;
194
+ align-items: center;
191
195
  font-size: var(--jp-ui-font-size3);
192
196
  padding-right: 1.7rem;
193
197
  color: var(--jgis-specta-text-color, var(--jp-ui-font-color1));
198
+ background-color: var(--jgis-specta-bg-color, var(--jp-layout-color0));
194
199
  overflow-y: auto;
195
200
  max-height: 100%;
196
201
  }