@jupytergis/schema 0.9.2 → 0.10.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.
@@ -575,10 +575,12 @@
575
575
  },
576
576
  "normalize": {
577
577
  "type": "boolean",
578
+ "description": "Enable to normalize values between 0 and 1 and displayed as RGB values; disable to keep raw band values",
578
579
  "default": true
579
580
  },
580
581
  "wrapX": {
581
582
  "type": "boolean",
583
+ "description": "Wrap the map horizontally?",
582
584
  "default": false
583
585
  },
584
586
  "interpolate": {
@@ -624,6 +626,36 @@
624
626
  }
625
627
  }
626
628
  },
629
+ "MarkerSource": {
630
+ "type": "object",
631
+ "required": [
632
+ "feature"
633
+ ],
634
+ "additionalProperties": false,
635
+ "properties": {
636
+ "color": {
637
+ "type": "string",
638
+ "description": "Color of the marker icon (hex, rgb, rgba, or named color)"
639
+ },
640
+ "feature": {
641
+ "type": "object",
642
+ "description": "Info for the marker",
643
+ "required": [
644
+ "coords"
645
+ ],
646
+ "properties": {
647
+ "coords": {
648
+ "type": "array",
649
+ "minItems": 2,
650
+ "maxItems": 2,
651
+ "items": {
652
+ "type": "number"
653
+ }
654
+ }
655
+ }
656
+ }
657
+ }
658
+ },
627
659
  "RasterDemSource": {
628
660
  "type": "object",
629
661
  "required": [
@@ -31,7 +31,8 @@ export type SourceType =
31
31
  | "ImageSource"
32
32
  | "ShapefileSource"
33
33
  | "GeoTiffSource"
34
- | "GeoParquetSource";
34
+ | "GeoParquetSource"
35
+ | "MarkerSource";
35
36
  /**
36
37
  * This interface was referenced by `IJGISContent`'s JSON-Schema
37
38
  * via the `definition` "jGISLayerItem".
@@ -26,7 +26,13 @@ export interface IGeoTiffSource {
26
26
  [k: string]: any;
27
27
  }[]
28
28
  ];
29
+ /**
30
+ * Enable to normalize values between 0 and 1 and displayed as RGB values; disable to keep raw band values
31
+ */
29
32
  normalize?: boolean;
33
+ /**
34
+ * Wrap the map horizontally?
35
+ */
30
36
  wrapX?: boolean;
31
37
  /**
32
38
  * Interpolate between grid cells when overzooming?
@@ -0,0 +1,23 @@
1
+ /* tslint:disable */
2
+ /**
3
+ * This file was automatically generated by json-schema-to-typescript.
4
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
5
+ * and run json-schema-to-typescript to regenerate this file.
6
+ */
7
+
8
+ /**
9
+ * MarkerSource
10
+ */
11
+ export interface IMarkerSource {
12
+ /**
13
+ * Color of the marker icon (hex, rgb, rgba, or named color)
14
+ */
15
+ color?: string;
16
+ /**
17
+ * Info for the marker
18
+ */
19
+ feature: {
20
+ coords: [number, number];
21
+ [k: string]: any;
22
+ };
23
+ }
@@ -11,6 +11,7 @@ import { SplitPanel } from '@lumino/widgets';
11
11
  import { FeatureLike } from 'ol/Feature';
12
12
  import { IJGISContent, IJGISLayer, IJGISLayerGroup, IJGISLayerItem, IJGISLayers, IJGISLayerTree, IJGISOptions, IJGISSource, IJGISSources, SourceType } from './_interface/project/jgis';
13
13
  import { IRasterSource } from './_interface/project/sources/rasterSource';
14
+ import { Modes } from './types';
14
15
  export { IGeoJSONSource } from './_interface/project/sources/geoJsonSource';
15
16
  export type JgisCoordinates = {
16
17
  x: number;
@@ -49,7 +50,6 @@ export type SelectionType = 'layer' | 'source' | 'group';
49
50
  export interface ISelection {
50
51
  type: SelectionType;
51
52
  parent?: string;
52
- selectedNodeId?: string;
53
53
  }
54
54
  export interface IJupyterGISClientState {
55
55
  selected: {
@@ -133,7 +133,7 @@ export interface IJupyterGISModel extends DocumentRegistry.IModel {
133
133
  geolocation: JgisCoordinates;
134
134
  localState: IJupyterGISClientState | null;
135
135
  annotationModel?: IAnnotationModel;
136
- currentMode: 'panning' | 'identifying';
136
+ currentMode: Modes;
137
137
  themeChanged: Signal<IJupyterGISModel, IChangedArgs<string, string | null, string>>;
138
138
  clientStateChanged: ISignal<IJupyterGISModel, Map<number, IJupyterGISClientState>>;
139
139
  sharedOptionsChanged: ISignal<IJupyterGISDoc, MapChange>;
@@ -186,6 +186,19 @@ export interface IJupyterGISModel extends DocumentRegistry.IModel {
186
186
  syncSelected(value: {
187
187
  [key: string]: ISelection;
188
188
  }, emitter?: string): void;
189
+ selected: {
190
+ [key: string]: ISelection;
191
+ } | undefined;
192
+ setEditingItem(type: SelectionType, itemId: string): void;
193
+ clearEditingItem(): void;
194
+ readonly editing: {
195
+ type: SelectionType;
196
+ itemId: string;
197
+ } | null;
198
+ editingChanged: ISignal<IJupyterGISModel, {
199
+ type: SelectionType;
200
+ itemId: string;
201
+ } | null>;
189
202
  syncPointer(pointer?: Pointer, emitter?: string): void;
190
203
  syncIdentifiedFeatures(features: IDict<any>, emitter?: string): void;
191
204
  setUserToFollow(userId?: number): void;
@@ -193,7 +206,7 @@ export interface IJupyterGISModel extends DocumentRegistry.IModel {
193
206
  addMetadata(key: string, value: string): void;
194
207
  removeMetadata(key: string): void;
195
208
  centerOnPosition(id: string): void;
196
- toggleIdentify(): void;
209
+ toggleMode(mode: Modes): void;
197
210
  isTemporalControllerActive: boolean;
198
211
  toggleTemporalController(): void;
199
212
  addFeatureAsMs(id: string, selectedFeature: string): void;
package/lib/model.d.ts CHANGED
@@ -7,7 +7,8 @@ import { PartialJSONObject } from '@lumino/coreutils';
7
7
  import { ISignal, Signal } from '@lumino/signaling';
8
8
  import { FeatureLike } from 'ol/Feature';
9
9
  import { IJGISContent, IJGISLayer, IJGISLayerGroup, IJGISLayerTree, IJGISLayers, IJGISOptions, IJGISSource, IJGISSources } from './_interface/project/jgis';
10
- import { IAnnotationModel, IDict, IJGISLayerDocChange, IJGISLayerTreeDocChange, IJGISSourceDocChange, IJupyterGISClientState, IJupyterGISDoc, IJupyterGISModel, ISelection, IUserData, IViewPortState, JgisCoordinates, Pointer, IJupyterGISSettings } from './interfaces';
10
+ import { IAnnotationModel, IDict, IJGISLayerDocChange, IJGISLayerTreeDocChange, IJGISSourceDocChange, IJupyterGISClientState, IJupyterGISDoc, IJupyterGISModel, ISelection, IUserData, IViewPortState, JgisCoordinates, Pointer, IJupyterGISSettings, SelectionType } from './interfaces';
11
+ import { Modes } from './types';
11
12
  export declare class JupyterGISModel implements IJupyterGISModel {
12
13
  constructor(options: JupyterGISModel.IOptions);
13
14
  /**
@@ -137,8 +138,24 @@ export declare class JupyterGISModel implements IJupyterGISModel {
137
138
  syncSelected(value: {
138
139
  [key: string]: ISelection;
139
140
  }, emitter?: string): void;
141
+ get selected(): {
142
+ [key: string]: ISelection;
143
+ } | undefined;
144
+ set selected(value: {
145
+ [key: string]: ISelection;
146
+ } | undefined);
140
147
  syncIdentifiedFeatures(features: IDict<any>, emitter?: string): void;
141
148
  setUserToFollow(userId?: number): void;
149
+ setEditingItem(type: SelectionType, itemId: string): void;
150
+ clearEditingItem(): void;
151
+ get editing(): {
152
+ type: SelectionType;
153
+ itemId: string;
154
+ } | null;
155
+ get editingChanged(): ISignal<this, {
156
+ type: SelectionType;
157
+ itemId: string;
158
+ } | null>;
142
159
  getClientId(): number;
143
160
  /**
144
161
  * Add an item in the layer tree.
@@ -160,9 +177,14 @@ export declare class JupyterGISModel implements IJupyterGISModel {
160
177
  private _removeLayerTreeItem;
161
178
  renameLayerGroup(groupName: string, newName: string): void;
162
179
  removeLayerGroup(groupName: string): void;
163
- toggleIdentify(): void;
164
- get currentMode(): 'panning' | 'identifying';
165
- set currentMode(value: 'panning' | 'identifying');
180
+ /**
181
+ * Toggle a map interaction mode on or off.
182
+ * Toggleing off sets the mode to 'panning'.
183
+ * @param mode The mode to be toggled
184
+ */
185
+ toggleMode(mode: Modes): void;
186
+ get currentMode(): Modes;
187
+ set currentMode(value: Modes);
166
188
  toggleTemporalController(): void;
167
189
  private _getLayerTreeInfo;
168
190
  private _onClientStateChanged;
@@ -200,6 +222,8 @@ export declare class JupyterGISModel implements IJupyterGISModel {
200
222
  private _addFeatureAsMsSignal;
201
223
  private _updateLayerSignal;
202
224
  private _isTemporalControllerActive;
225
+ private _editing;
226
+ private _editingChanged;
203
227
  static worker: Worker;
204
228
  private _geolocation;
205
229
  private _geolocationChanged;
package/lib/model.js CHANGED
@@ -3,6 +3,17 @@ import Ajv from 'ajv';
3
3
  import { JupyterGISDoc } from './doc';
4
4
  import jgisSchema from './schema/project/jgis.json';
5
5
  const SETTINGS_ID = '@jupytergis/jupytergis-core:jupytergis-settings';
6
+ const DEFAULT_SETTINGS = {
7
+ proxyUrl: 'https://corsproxy.io',
8
+ leftPanelDisabled: false,
9
+ rightPanelDisabled: false,
10
+ layersDisabled: false,
11
+ stacBrowserDisabled: false,
12
+ filtersDisabled: false,
13
+ objectPropertiesDisabled: false,
14
+ annotationsDisabled: false,
15
+ identifyDisabled: false,
16
+ };
6
17
  export class JupyterGISModel {
7
18
  constructor(options) {
8
19
  this._onSharedModelChanged = (sender, changes) => {
@@ -45,6 +56,8 @@ export class JupyterGISModel {
45
56
  this._addFeatureAsMsSignal = new Signal(this);
46
57
  this._updateLayerSignal = new Signal(this);
47
58
  this._isTemporalControllerActive = false;
59
+ this._editing = null;
60
+ this._editingChanged = new Signal(this);
48
61
  this._geolocationChanged = new Signal(this);
49
62
  this._tileFeatureCache = new Map();
50
63
  const { annotationModel, sharedModel, settingRegistry } = options;
@@ -61,17 +74,7 @@ export class JupyterGISModel {
61
74
  this.settingRegistry = settingRegistry;
62
75
  this._pathChanged = new Signal(this);
63
76
  this._settingsChanged = new Signal(this);
64
- this._jgisSettings = {
65
- proxyUrl: 'https://corsproxy.io',
66
- leftPanelDisabled: false,
67
- rightPanelDisabled: false,
68
- layersDisabled: false,
69
- stacBrowserDisabled: false,
70
- filtersDisabled: false,
71
- objectPropertiesDisabled: false,
72
- annotationsDisabled: false,
73
- identifyDisabled: false,
74
- };
77
+ this._jgisSettings = Object.assign({}, DEFAULT_SETTINGS);
75
78
  this.initSettings();
76
79
  }
77
80
  /**
@@ -87,17 +90,7 @@ export class JupyterGISModel {
87
90
  const oldSettings = Object.assign({}, this._jgisSettings);
88
91
  this._updateLocalSettings();
89
92
  const newSettings = this._jgisSettings;
90
- const keys = [
91
- 'proxyUrl',
92
- 'leftPanelDisabled',
93
- 'rightPanelDisabled',
94
- 'layersDisabled',
95
- 'stacBrowserDisabled',
96
- 'filtersDisabled',
97
- 'objectPropertiesDisabled',
98
- 'annotationsDisabled',
99
- 'identifyDisabled',
100
- ];
93
+ const keys = Object.keys(DEFAULT_SETTINGS);
101
94
  keys.forEach(key => {
102
95
  if (oldSettings[key] !== newSettings[key]) {
103
96
  this._settingsChanged.emit(key);
@@ -107,34 +100,18 @@ export class JupyterGISModel {
107
100
  }
108
101
  catch (error) {
109
102
  console.error(`Failed to load settings for ${SETTINGS_ID}:`, error);
110
- this._jgisSettings = {
111
- proxyUrl: 'https://corsproxy.io',
112
- leftPanelDisabled: false,
113
- rightPanelDisabled: false,
114
- layersDisabled: false,
115
- stacBrowserDisabled: false,
116
- filtersDisabled: false,
117
- objectPropertiesDisabled: false,
118
- annotationsDisabled: false,
119
- identifyDisabled: false,
120
- };
103
+ this._jgisSettings = Object.assign({}, DEFAULT_SETTINGS);
121
104
  }
122
105
  }
123
106
  }
124
107
  _updateLocalSettings() {
125
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
126
108
  const composite = this._settings.composite;
127
- this._jgisSettings = {
128
- proxyUrl: (_a = composite.proxyUrl) !== null && _a !== void 0 ? _a : 'https://corsproxy.io',
129
- leftPanelDisabled: (_b = composite.leftPanelDisabled) !== null && _b !== void 0 ? _b : false,
130
- rightPanelDisabled: (_c = composite.rightPanelDisabled) !== null && _c !== void 0 ? _c : false,
131
- layersDisabled: (_d = composite.layersDisabled) !== null && _d !== void 0 ? _d : false,
132
- stacBrowserDisabled: (_e = composite.stacBrowserDisabled) !== null && _e !== void 0 ? _e : false,
133
- filtersDisabled: (_f = composite.filtersDisabled) !== null && _f !== void 0 ? _f : false,
134
- objectPropertiesDisabled: (_g = composite.objectPropertiesDisabled) !== null && _g !== void 0 ? _g : false,
135
- annotationsDisabled: (_h = composite.annotationsDisabled) !== null && _h !== void 0 ? _h : false,
136
- identifyDisabled: (_j = composite.identifyDisabled) !== null && _j !== void 0 ? _j : false,
137
- };
109
+ this._jgisSettings = Object.entries(DEFAULT_SETTINGS).reduce((acc, [key, defaultValue]) => {
110
+ const typedKey = key;
111
+ const compositeValue = composite[typedKey];
112
+ acc[typedKey] = compositeValue !== null && compositeValue !== void 0 ? compositeValue : defaultValue;
113
+ return acc;
114
+ }, {});
138
115
  }
139
116
  get jgisSettings() {
140
117
  return this._jgisSettings;
@@ -458,6 +435,13 @@ export class JupyterGISModel {
458
435
  emitter,
459
436
  });
460
437
  }
438
+ get selected() {
439
+ var _a, _b;
440
+ return (_b = (_a = this.localState) === null || _a === void 0 ? void 0 : _a.selected) === null || _b === void 0 ? void 0 : _b.value;
441
+ }
442
+ set selected(value) {
443
+ this.syncSelected(value || {}, this.getClientId().toString());
444
+ }
461
445
  syncIdentifiedFeatures(features, emitter) {
462
446
  this.sharedModel.awareness.setLocalStateField('identifiedFeatures', {
463
447
  value: features,
@@ -469,6 +453,20 @@ export class JupyterGISModel {
469
453
  this._sharedModel.awareness.setLocalStateField('remoteUser', userId);
470
454
  }
471
455
  }
456
+ setEditingItem(type, itemId) {
457
+ this._editing = { type, itemId };
458
+ this._editingChanged.emit(this._editing);
459
+ }
460
+ clearEditingItem() {
461
+ this._editing = null;
462
+ this._editingChanged.emit(null);
463
+ }
464
+ get editing() {
465
+ return this._editing;
466
+ }
467
+ get editingChanged() {
468
+ return this._editingChanged;
469
+ }
472
470
  getClientId() {
473
471
  return this.sharedModel.awareness.clientID;
474
472
  }
@@ -588,7 +586,7 @@ export class JupyterGISModel {
588
586
  this._sharedModel.updateLayerTreeItem(layerTreeInfo.mainGroupIndex, layerTreeInfo.mainGroup);
589
587
  }
590
588
  else {
591
- console.log('Something went wrong when renaming layer');
589
+ console.error('Layer group rename failed -- could not get layer tree.');
592
590
  }
593
591
  }
594
592
  removeLayerGroup(groupName) {
@@ -612,13 +610,13 @@ export class JupyterGISModel {
612
610
  this._sharedModel.updateLayerTreeItem(layerTreeInfo.mainGroupIndex, updatedLayerTree[layerTreeInfo.mainGroupIndex]);
613
611
  }
614
612
  }
615
- toggleIdentify() {
616
- if (this._currentMode === 'identifying') {
617
- this._currentMode = 'panning';
618
- }
619
- else {
620
- this._currentMode = 'identifying';
621
- }
613
+ /**
614
+ * Toggle a map interaction mode on or off.
615
+ * Toggleing off sets the mode to 'panning'.
616
+ * @param mode The mode to be toggled
617
+ */
618
+ toggleMode(mode) {
619
+ this._currentMode = this._currentMode === mode ? 'panning' : mode;
622
620
  }
623
621
  get currentMode() {
624
622
  return this._currentMode;
@@ -1,6 +1,6 @@
1
- export * from '../../_interface/processing/dissolve';
2
1
  export * from '../../_interface/processing/centroids';
3
2
  export * from '../../_interface/processing/convexHull';
3
+ export * from '../../_interface/processing/concaveHull';
4
4
  export * from '../../_interface/processing/buffer';
5
+ export * from '../../_interface/processing/dissolve';
5
6
  export * from '../../_interface/processing/boundingBoxes';
6
- export * from '../../_interface/processing/concaveHull';
@@ -1,7 +1,7 @@
1
1
  //Generated automatically please don't modify directly
2
- export * from '../../_interface/processing/dissolve';
3
2
  export * from '../../_interface/processing/centroids';
4
3
  export * from '../../_interface/processing/convexHull';
4
+ export * from '../../_interface/processing/concaveHull';
5
5
  export * from '../../_interface/processing/buffer';
6
+ export * from '../../_interface/processing/dissolve';
6
7
  export * from '../../_interface/processing/boundingBoxes';
7
- export * from '../../_interface/processing/concaveHull';
@@ -1,2 +1,2 @@
1
- export type ProcessingType = 'Dissolve' | 'Centroids' | 'ConvexHull' | 'Buffer' | 'BoundingBoxes' | 'ConcaveHull';
1
+ export type ProcessingType = 'Centroids' | 'ConvexHull' | 'ConcaveHull' | 'Buffer' | 'Dissolve' | 'BoundingBoxes';
2
2
  export declare const processingList: string[];
@@ -1,8 +1,8 @@
1
1
  export const processingList = [
2
- 'Dissolve',
3
2
  'Centroids',
4
3
  'ConvexHull',
4
+ 'ConcaveHull',
5
5
  'Buffer',
6
+ 'Dissolve',
6
7
  'BoundingBoxes',
7
- 'ConcaveHull',
8
8
  ];
@@ -1,17 +1,4 @@
1
1
  [
2
- {
3
- "description": "Dissolve",
4
- "name": "dissolve",
5
- "operationParams": [
6
- "dissolveField"
7
- ],
8
- "label": "Dissolve",
9
- "operations": {
10
- "gdalFunction": "ogr2ogr",
11
- "sql": "SELECT ST_Union(geometry) AS geometry, {dissolveField} FROM \"{layerName}\" GROUP BY {dissolveField}"
12
- },
13
- "type": "vector"
14
- },
15
2
  {
16
3
  "description": "Centroids",
17
4
  "name": "centroids",
@@ -34,6 +21,20 @@
34
21
  },
35
22
  "type": "vector"
36
23
  },
24
+ {
25
+ "description": "ConcaveHull",
26
+ "name": "concaveHull",
27
+ "operationParams": [
28
+ "pctconvex",
29
+ "allowHoles"
30
+ ],
31
+ "label": "Concave Hull",
32
+ "operations": {
33
+ "sql": "SELECT ST_ConcaveHull(geometry,{pctconvex},{allowHoles}) AS geometry, * FROM \"{layerName}\"",
34
+ "gdalFunction": "ogr2ogr"
35
+ },
36
+ "type": "vector"
37
+ },
37
38
  {
38
39
  "description": "Buffer",
39
40
  "name": "buffer",
@@ -48,26 +49,25 @@
48
49
  "type": "vector"
49
50
  },
50
51
  {
51
- "description": "BoundingBoxes",
52
- "name": "boundingBoxes",
53
- "operationParams": [],
54
- "label": "Bounding Boxes",
52
+ "description": "Dissolve",
53
+ "name": "dissolve",
54
+ "operationParams": [
55
+ "dissolveField"
56
+ ],
57
+ "label": "Dissolve",
55
58
  "operations": {
56
- "sql": "SELECT ST_Envelope(geometry) AS geometry, * FROM \"{layerName}\"",
57
- "gdalFunction": "ogr2ogr"
59
+ "gdalFunction": "ogr2ogr",
60
+ "sql": "SELECT ST_Union(geometry) AS geometry, {dissolveField} FROM \"{layerName}\" GROUP BY {dissolveField}"
58
61
  },
59
62
  "type": "vector"
60
63
  },
61
64
  {
62
- "description": "ConcaveHull",
63
- "name": "concaveHull",
64
- "operationParams": [
65
- "pctconvex",
66
- "allowHoles"
67
- ],
68
- "label": "Concave Hull",
65
+ "description": "BoundingBoxes",
66
+ "name": "boundingBoxes",
67
+ "operationParams": [],
68
+ "label": "Bounding Boxes",
69
69
  "operations": {
70
- "sql": "SELECT ST_ConcaveHull(geometry,{pctconvex},{allowHoles}) AS geometry, * FROM \"{layerName}\"",
70
+ "sql": "SELECT ST_Envelope(geometry) AS geometry, * FROM \"{layerName}\"",
71
71
  "gdalFunction": "ogr2ogr"
72
72
  },
73
73
  "type": "vector"
@@ -55,7 +55,8 @@
55
55
  "ImageSource",
56
56
  "ShapefileSource",
57
57
  "GeoTiffSource",
58
- "GeoParquetSource"
58
+ "GeoParquetSource",
59
+ "MarkerSource"
59
60
  ]
60
61
  },
61
62
  "jGISLayer": {
@@ -26,10 +26,12 @@
26
26
  },
27
27
  "normalize": {
28
28
  "type": "boolean",
29
+ "description": "Enable to normalize values between 0 and 1 and displayed as RGB values; disable to keep raw band values",
29
30
  "default": true
30
31
  },
31
32
  "wrapX": {
32
33
  "type": "boolean",
34
+ "description": "Wrap the map horizontally?",
33
35
  "default": false
34
36
  },
35
37
  "interpolate": {
@@ -0,0 +1,28 @@
1
+ {
2
+ "type": "object",
3
+ "description": "MarkerSource",
4
+ "title": "IMarkerSource",
5
+ "required": ["feature"],
6
+ "additionalProperties": false,
7
+ "properties": {
8
+ "color": {
9
+ "type": "string",
10
+ "description": "Color of the marker icon (hex, rgb, rgba, or named color)"
11
+ },
12
+ "feature": {
13
+ "type": "object",
14
+ "description": "Info for the marker",
15
+ "required": ["coords"],
16
+ "properties": {
17
+ "coords": {
18
+ "type": "array",
19
+ "minItems": 2,
20
+ "maxItems": 2,
21
+ "items": {
22
+ "type": "number"
23
+ }
24
+ }
25
+ }
26
+ }
27
+ }
28
+ }
package/lib/types.d.ts CHANGED
@@ -8,6 +8,7 @@ export * from './_interface/project/sources/shapefileSource';
8
8
  export * from './_interface/project/sources/vectorTileSource';
9
9
  export * from './_interface/project/sources/videoSource';
10
10
  export * from './_interface/project/sources/geoParquetSource';
11
+ export * from './_interface/project/sources/markerSource';
11
12
  export * from './_interface/project/layers/heatmapLayer';
12
13
  export * from './_interface/project/layers/hillshadeLayer';
13
14
  export * from './_interface/project/layers/rasterLayer';
@@ -24,3 +25,4 @@ export * from './index';
24
25
  export * from './interfaces';
25
26
  export * from './model';
26
27
  export * from './token';
28
+ export type Modes = 'panning' | 'identifying' | 'marking';
package/lib/types.js CHANGED
@@ -9,6 +9,7 @@ export * from './_interface/project/sources/shapefileSource';
9
9
  export * from './_interface/project/sources/vectorTileSource';
10
10
  export * from './_interface/project/sources/videoSource';
11
11
  export * from './_interface/project/sources/geoParquetSource';
12
+ export * from './_interface/project/sources/markerSource';
12
13
  // Layers
13
14
  export * from './_interface/project/layers/heatmapLayer';
14
15
  export * from './_interface/project/layers/hillshadeLayer';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jupytergis/schema",
3
- "version": "0.9.2",
3
+ "version": "0.10.0",
4
4
  "description": "A JupyterGIS schema package.",
5
5
  "keywords": [
6
6
  "jupytergis"