@jupytergis/base 0.2.1 → 0.4.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/annotations/components/Annotation.js +2 -2
- package/lib/annotations/model.d.ts +6 -7
- package/lib/annotations/model.js +15 -15
- package/lib/commands.d.ts +2 -3
- package/lib/commands.js +146 -62
- package/lib/constants.d.ts +3 -0
- package/lib/constants.js +5 -1
- package/lib/dialogs/formdialog.d.ts +5 -0
- package/lib/dialogs/formdialog.js +2 -2
- package/lib/dialogs/layerBrowserDialog.d.ts +4 -5
- package/lib/dialogs/layerBrowserDialog.js +9 -9
- package/lib/dialogs/symbology/components/color_ramp/ModeSelectRow.js +2 -1
- package/lib/dialogs/symbology/hooks/useGetBandInfo.d.ts +26 -0
- package/lib/dialogs/symbology/hooks/useGetBandInfo.js +64 -0
- package/lib/dialogs/symbology/hooks/useGetProperties.d.ts +1 -1
- package/lib/dialogs/symbology/hooks/useGetProperties.js +12 -9
- package/lib/dialogs/symbology/symbologyDialog.d.ts +2 -3
- package/lib/dialogs/symbology/symbologyDialog.js +10 -9
- package/lib/dialogs/symbology/tiff_layer/TiffRendering.d.ts +1 -1
- package/lib/dialogs/symbology/tiff_layer/TiffRendering.js +16 -3
- package/lib/dialogs/symbology/tiff_layer/components/BandRow.d.ts +16 -3
- package/lib/dialogs/symbology/tiff_layer/components/BandRow.js +21 -7
- package/lib/dialogs/symbology/tiff_layer/types/MultibandColor.d.ts +4 -0
- package/lib/dialogs/symbology/tiff_layer/types/MultibandColor.js +85 -0
- package/lib/dialogs/symbology/tiff_layer/types/SingleBandPseudoColor.d.ts +1 -20
- package/lib/dialogs/symbology/tiff_layer/types/SingleBandPseudoColor.js +25 -65
- package/lib/dialogs/symbology/vector_layer/VectorRendering.d.ts +1 -1
- package/lib/dialogs/symbology/vector_layer/VectorRendering.js +18 -13
- package/lib/dialogs/symbology/vector_layer/types/Categorized.d.ts +1 -1
- package/lib/dialogs/symbology/vector_layer/types/Categorized.js +30 -19
- package/lib/dialogs/symbology/vector_layer/types/Graduated.d.ts +1 -1
- package/lib/dialogs/symbology/vector_layer/types/Graduated.js +16 -13
- package/lib/dialogs/symbology/vector_layer/types/Heatmap.d.ts +4 -0
- package/lib/dialogs/symbology/vector_layer/types/Heatmap.js +77 -0
- package/lib/dialogs/symbology/vector_layer/types/SimpleSymbol.d.ts +1 -1
- package/lib/dialogs/symbology/vector_layer/types/SimpleSymbol.js +4 -3
- package/lib/formbuilder/creationform.d.ts +6 -2
- package/lib/formbuilder/creationform.js +6 -6
- package/lib/formbuilder/editform.d.ts +2 -2
- package/lib/formbuilder/editform.js +14 -9
- package/lib/formbuilder/formselectors.js +11 -1
- package/lib/formbuilder/objectform/baseform.d.ts +12 -3
- package/lib/formbuilder/objectform/baseform.js +39 -0
- package/lib/formbuilder/objectform/fileselectorwidget.d.ts +2 -0
- package/lib/formbuilder/objectform/fileselectorwidget.js +88 -0
- package/lib/formbuilder/objectform/geojsonsource.d.ts +5 -7
- package/lib/formbuilder/objectform/geojsonsource.js +8 -24
- package/lib/formbuilder/objectform/geotiffsource.d.ts +5 -1
- package/lib/formbuilder/objectform/geotiffsource.js +64 -18
- package/lib/formbuilder/objectform/heatmapLayerForm.d.ts +11 -0
- package/lib/formbuilder/objectform/heatmapLayerForm.js +60 -0
- package/lib/formbuilder/objectform/layerform.d.ts +2 -0
- package/lib/formbuilder/objectform/layerform.js +6 -0
- package/lib/formbuilder/objectform/pathbasedsource.d.ts +19 -0
- package/lib/formbuilder/objectform/pathbasedsource.js +98 -0
- package/lib/formbuilder/objectform/vectorlayerform.d.ts +0 -2
- package/lib/formbuilder/objectform/vectorlayerform.js +0 -59
- package/lib/icons.d.ts +1 -0
- package/lib/icons.js +5 -0
- package/lib/keybindings.json +62 -0
- package/lib/mainview/TemporalSlider.d.ts +8 -0
- package/lib/mainview/TemporalSlider.js +303 -0
- package/lib/mainview/mainView.d.ts +46 -8
- package/lib/mainview/mainView.js +431 -144
- package/lib/mainview/mainviewmodel.d.ts +4 -0
- package/lib/mainview/mainviewmodel.js +4 -0
- package/lib/mainview/mainviewwidget.d.ts +0 -2
- package/lib/mainview/mainviewwidget.js +0 -2
- package/lib/panelview/annotationPanel.js +5 -5
- package/lib/panelview/components/filter-panel/Filter.js +8 -24
- package/lib/panelview/components/identify-panel/IdentifyPanel.js +1 -1
- package/lib/panelview/components/layers.js +2 -2
- package/lib/panelview/components/sources.js +1 -1
- package/lib/panelview/leftpanel.d.ts +3 -0
- package/lib/panelview/leftpanel.js +5 -1
- package/lib/panelview/model.js +8 -8
- package/lib/panelview/objectproperties.js +10 -10
- package/lib/panelview/rightpanel.d.ts +1 -1
- package/lib/panelview/rightpanel.js +10 -10
- package/lib/statusbar/StatusBar.d.ts +13 -0
- package/lib/statusbar/StatusBar.js +52 -0
- package/lib/toolbar/widget.d.ts +1 -1
- package/lib/toolbar/widget.js +44 -37
- package/lib/tools.d.ts +50 -7
- package/lib/tools.js +394 -12
- package/lib/types.d.ts +2 -0
- package/lib/widget.d.ts +29 -5
- package/lib/widget.js +41 -7
- package/package.json +17 -5
- package/style/base.css +11 -0
- package/style/icons/logo_mini_qgz.svg +31 -0
- package/style/leftPanel.css +8 -0
- package/style/statusBar.css +16 -0
- package/style/symbologyDialog.css +7 -1
- package/style/temporalSlider.css +47 -0
package/lib/widget.js
CHANGED
|
@@ -9,20 +9,26 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
9
9
|
}
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
|
-
import {
|
|
13
|
-
import { SplitPanel } from '@lumino/widgets';
|
|
12
|
+
import { MainAreaWidget } from '@jupyterlab/apputils';
|
|
14
13
|
import { DocumentWidget } from '@jupyterlab/docregistry';
|
|
15
14
|
import { ObservableMap } from '@jupyterlab/observables';
|
|
15
|
+
import { Signal } from '@lumino/signaling';
|
|
16
|
+
import { SplitPanel, Widget } from '@lumino/widgets';
|
|
16
17
|
import { JupyterGISMainViewPanel } from './mainview';
|
|
17
18
|
import { MainViewModel } from './mainview/mainviewmodel';
|
|
18
19
|
import { ConsoleView } from './console';
|
|
19
|
-
|
|
20
|
+
import { MessageLoop } from '@lumino/messaging';
|
|
21
|
+
const CELL_OUTPUT_WIDGET_CLASS = 'jgis-cell-output-widget';
|
|
22
|
+
export class JupyterGISDocumentWidget extends DocumentWidget {
|
|
20
23
|
constructor(options) {
|
|
21
24
|
super(options);
|
|
22
25
|
this.onResize = (msg) => {
|
|
23
26
|
window.dispatchEvent(new Event('resize'));
|
|
24
27
|
};
|
|
25
28
|
}
|
|
29
|
+
get model() {
|
|
30
|
+
return this.context.model;
|
|
31
|
+
}
|
|
26
32
|
/**
|
|
27
33
|
* Dispose of the resources held by the widget.
|
|
28
34
|
*/
|
|
@@ -31,12 +37,39 @@ export class JupyterGISWidget extends DocumentWidget {
|
|
|
31
37
|
super.dispose();
|
|
32
38
|
}
|
|
33
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* A main area widget designed to be used as Notebook cell output widget, to ease the
|
|
42
|
+
* integration of toolbar and tracking.
|
|
43
|
+
*/
|
|
44
|
+
export class JupyterGISOutputWidget extends MainAreaWidget {
|
|
45
|
+
constructor(options) {
|
|
46
|
+
super(options);
|
|
47
|
+
this.addClass(CELL_OUTPUT_WIDGET_CLASS);
|
|
48
|
+
this.model = options.model;
|
|
49
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
50
|
+
// Send a resize message to the widget, to update the child size.
|
|
51
|
+
MessageLoop.sendMessage(this, Widget.ResizeMessage.UnknownSize);
|
|
52
|
+
});
|
|
53
|
+
this.resizeObserver.observe(this.node);
|
|
54
|
+
this.model.disposed.connect(() => this.dispose());
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Dispose of the resources held by the widget.
|
|
58
|
+
*/
|
|
59
|
+
dispose() {
|
|
60
|
+
if (!this.isDisposed) {
|
|
61
|
+
this.resizeObserver.disconnect();
|
|
62
|
+
this.content.dispose();
|
|
63
|
+
super.dispose();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
34
67
|
export class JupyterGISPanel extends SplitPanel {
|
|
35
68
|
constructor(options) {
|
|
36
69
|
super({ orientation: 'vertical', spacing: 0 });
|
|
37
70
|
this._consoleOpened = false;
|
|
38
|
-
const { model, consoleTracker } = options, consoleOption = __rest(options, ["model", "consoleTracker"]);
|
|
39
|
-
this._initModel({ model });
|
|
71
|
+
const { model, consoleTracker, commandRegistry } = options, consoleOption = __rest(options, ["model", "consoleTracker", "commandRegistry"]);
|
|
72
|
+
this._initModel({ model, commandRegistry });
|
|
40
73
|
this._initView();
|
|
41
74
|
this._consoleOption = consoleOption;
|
|
42
75
|
this._consoleTracker = consoleTracker;
|
|
@@ -45,7 +78,8 @@ export class JupyterGISPanel extends SplitPanel {
|
|
|
45
78
|
this._view = new ObservableMap();
|
|
46
79
|
this._mainViewModel = new MainViewModel({
|
|
47
80
|
jGISModel: options.model,
|
|
48
|
-
viewSetting: this._view
|
|
81
|
+
viewSetting: this._view,
|
|
82
|
+
commands: options.commandRegistry
|
|
49
83
|
});
|
|
50
84
|
}
|
|
51
85
|
_initView() {
|
|
@@ -116,10 +150,10 @@ export class JupyterGISPanel extends SplitPanel {
|
|
|
116
150
|
const { consolePanel } = this._consoleView;
|
|
117
151
|
this._consoleTracker.widgetAdded.emit(consolePanel);
|
|
118
152
|
await consolePanel.sessionContext.ready;
|
|
119
|
-
await consolePanel.console.inject(`from jupytergis_lab import GISDocument\ndoc = GISDocument("${jgisPath}")`);
|
|
120
153
|
this.addWidget(this._consoleView);
|
|
121
154
|
this.setRelativeSizes([2, 1]);
|
|
122
155
|
this._consoleOpened = true;
|
|
156
|
+
await consolePanel.console.inject(`from jupytergis import GISDocument\ndoc = GISDocument("${jgisPath}")`);
|
|
123
157
|
consolePanel.console.sessionContext.kernelChanged.connect((_, arg) => {
|
|
124
158
|
if (!arg.newValue) {
|
|
125
159
|
this.removeConsole();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupytergis/base",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "A JupyterLab extension for 3D modelling.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jupyter",
|
|
@@ -38,8 +38,12 @@
|
|
|
38
38
|
"watch": "tsc -w"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
+
"@fortawesome/fontawesome-svg-core": "^6.5.2",
|
|
42
|
+
"@fortawesome/free-solid-svg-icons": "^6.5.2",
|
|
43
|
+
"@fortawesome/react-fontawesome": "latest",
|
|
44
|
+
"@jupyter/react-components": "^0.16.6",
|
|
41
45
|
"@jupyter/ydoc": "^2.0.0 || ^3.0.0",
|
|
42
|
-
"@jupytergis/schema": "^0.
|
|
46
|
+
"@jupytergis/schema": "^0.4.0",
|
|
43
47
|
"@jupyterlab/application": "^4.3.0",
|
|
44
48
|
"@jupyterlab/apputils": "^4.3.0",
|
|
45
49
|
"@jupyterlab/completer": "^4.3.0",
|
|
@@ -61,13 +65,19 @@
|
|
|
61
65
|
"@naisutech/react-tree": "^3.0.1",
|
|
62
66
|
"@rjsf/core": "^4.2.0",
|
|
63
67
|
"@rjsf/validator-ajv8": "^5.23.1",
|
|
64
|
-
"@types/d3-color": "^3.1.0",
|
|
65
|
-
"@types/three": "^0.134.0",
|
|
66
68
|
"ajv": "^8.14.0",
|
|
69
|
+
"colormap": "^2.3.2",
|
|
67
70
|
"d3-color": "^3.1.0",
|
|
71
|
+
"date-fns": "^4.1.0",
|
|
68
72
|
"gdal3.js": "^2.8.1",
|
|
73
|
+
"geojson-vt": "^4.0.2",
|
|
74
|
+
"geotiff": "^2.1.3",
|
|
75
|
+
"ol": "^10.1.0",
|
|
69
76
|
"ol-pmtiles": "^0.5.0",
|
|
70
77
|
"pbf": "^4.0.1",
|
|
78
|
+
"pmtiles": "^3.0.7",
|
|
79
|
+
"proj4": "^2.14.0",
|
|
80
|
+
"proj4-list": "^1.0.4",
|
|
71
81
|
"react": "^18.0.1",
|
|
72
82
|
"shpjs": "^6.1.0",
|
|
73
83
|
"styled-components": "^5.3.6",
|
|
@@ -77,9 +87,11 @@
|
|
|
77
87
|
},
|
|
78
88
|
"devDependencies": {
|
|
79
89
|
"@apidevtools/json-schema-ref-parser": "^9.0.9",
|
|
90
|
+
"@types/colormap": "^2.3.4",
|
|
91
|
+
"@types/d3-color": "^3.1.0",
|
|
80
92
|
"@types/node": "^18.15.11",
|
|
93
|
+
"@types/proj4": "^2.5.5",
|
|
81
94
|
"@types/shpjs": "^3.4.7",
|
|
82
|
-
"@types/three": "^0.135.0",
|
|
83
95
|
"@types/uuid": "^10.0.0",
|
|
84
96
|
"rimraf": "^3.0.2",
|
|
85
97
|
"typescript": "^5"
|
package/style/base.css
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
@import url('./leftPanel.css');
|
|
9
9
|
@import url('./filterPanel.css');
|
|
10
10
|
@import url('./symbologyDialog.css');
|
|
11
|
+
@import url('./statusBar.css');
|
|
12
|
+
@import url('./temporalSlider.css');
|
|
11
13
|
@import url('ol/ol.css');
|
|
12
14
|
|
|
13
15
|
.jGIS-Toolbar-GroupName {
|
|
@@ -48,3 +50,12 @@
|
|
|
48
50
|
display: block;
|
|
49
51
|
position: relative;
|
|
50
52
|
}
|
|
53
|
+
|
|
54
|
+
/*This is being upstreamed. Will remove once upstream's been fixed.*/
|
|
55
|
+
button.jp-mod-styled.jp-mod-accept {
|
|
56
|
+
background-color: var(--jp-brand-color1) !important;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
button.jp-mod-styled.jp-mod-reject {
|
|
60
|
+
background-color: var(--jp-layout-color4) !important;
|
|
61
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
+
version="1.1"
|
|
4
|
+
width="256"
|
|
5
|
+
height="256"
|
|
6
|
+
viewBox="0 0 256 256"
|
|
7
|
+
class="jp-icon-selectable">
|
|
8
|
+
<g class="jp-icon-selectable">
|
|
9
|
+
<path
|
|
10
|
+
class="jp-icon-selectable"
|
|
11
|
+
d="M137.607,136.899 L172.044,136.899 L142.898,108.083 L107.19,108.083 L107.19,142.392 L137.607,172.708 z"
|
|
12
|
+
fill="#EE7913" />
|
|
13
|
+
<path
|
|
14
|
+
class="jp-icon-selectable"
|
|
15
|
+
d="M248.061,212.048 L186.618,151.306 L152.01,151.306 L152.01,187.067 L210.891,245.749 L248.061,245.749 z"
|
|
16
|
+
fill="#589632" />
|
|
17
|
+
<path
|
|
18
|
+
class="jp-icon-selectable"
|
|
19
|
+
d="M152.01,151.306 L186.618,151.306 L172.044,136.899 L137.607,136.899 L137.607,172.708 L152.01,187.067 z"
|
|
20
|
+
fill="#F0E64A" />
|
|
21
|
+
<path
|
|
22
|
+
class="jp-icon-selectable"
|
|
23
|
+
d="M144.826,199.3 C139.606,200.502 134.183,201.154 128.588,201.154 C88.561,201.154 54.516,168.24 54.516,125.564 C54.516,82.887 88.182,50.695 128.588,50.695 C168.989,50.695 201.158,82.882 201.158,125.564 C201.158,132.501 200.295,139.183 198.697,145.509 L235.744,182.551 C245.296,165.815 250.64,146.354 250.64,125.277 C250.64,59.499 198.147,10.251 127.839,10.251 C57.849,10.251 5.36,59.178 5.36,125.277 C5.36,191.698 57.849,241.598 127.839,241.598 C145.905,241.598 162.791,238.275 177.916,232.227 L144.826,199.3 z"
|
|
24
|
+
fill="#93B023" />
|
|
25
|
+
<path
|
|
26
|
+
class="jp-icon-selectable"
|
|
27
|
+
d="M107.19,108.083 L248.061,245.749 L248.061,212.048 L186.618,151.306 L172.044,136.898 L142.898,108.083 z"
|
|
28
|
+
fill="#FFFFFF"
|
|
29
|
+
fill-opacity="0.172" />
|
|
30
|
+
</g>
|
|
31
|
+
</svg>
|
package/style/leftPanel.css
CHANGED
|
@@ -64,6 +64,14 @@
|
|
|
64
64
|
.jp-gis-layerGroupHeader.jp-mod-selected .jp-icon-selectable {
|
|
65
65
|
fill: var(--jp-ui-inverse-font-color1);
|
|
66
66
|
}
|
|
67
|
+
.jp-gis-layer.jp-mod-selected path,
|
|
68
|
+
.jp-gis-source.jp-mod-selected path {
|
|
69
|
+
fill: var(--jp-ui-inverse-font-color1);
|
|
70
|
+
}
|
|
71
|
+
.jp-gis-layer.jp-mod-selected button:hover,
|
|
72
|
+
.jp-gis-source.jp-mod-selected button:hover {
|
|
73
|
+
background: none;
|
|
74
|
+
}
|
|
67
75
|
|
|
68
76
|
.jp-gis-layer button,
|
|
69
77
|
.jp-gis-source button {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
.jgis-status-bar {
|
|
2
|
+
display: flex;
|
|
3
|
+
justify-content: space-around;
|
|
4
|
+
align-items: center;
|
|
5
|
+
height: 16px;
|
|
6
|
+
background-color: var(--jp-layout-color1);
|
|
7
|
+
font-size: var(--jp-ui-font-size0);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.jgis-status-bar-item {
|
|
11
|
+
flex: 0 0 content;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.jgis-status-bar-coords {
|
|
15
|
+
min-width: 160px;
|
|
16
|
+
}
|
|
@@ -159,7 +159,7 @@ select option {
|
|
|
159
159
|
z-index: 40;
|
|
160
160
|
flex: 1 1 auto;
|
|
161
161
|
width: 97%;
|
|
162
|
-
max-height:
|
|
162
|
+
max-height: 20rem;
|
|
163
163
|
background: var(--jp-input-background);
|
|
164
164
|
padding-left: 8px;
|
|
165
165
|
border: var(--jp-border-width) solid var(--jp-input-border-color);
|
|
@@ -207,6 +207,12 @@ select option {
|
|
|
207
207
|
width: 100%;
|
|
208
208
|
height: 30px;
|
|
209
209
|
visibility: initial;
|
|
210
|
+
border-radius: var(--jp-border-radius);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.jp-Dialog-content:has(.jp-gis-heatmap),
|
|
214
|
+
.jp-Dialog-body:has(.jp-gis-heatmap) {
|
|
215
|
+
overflow: visible;
|
|
210
216
|
}
|
|
211
217
|
|
|
212
218
|
.jp-gis-canvas-button-wrapper {
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
.jp-gis-temporal-slider-container {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
gap: 0.2rem;
|
|
5
|
+
padding: 0.5rem;
|
|
6
|
+
background-color: var(--jp-layout-color1);
|
|
7
|
+
border-bottom: 1px solid var(--jp-border-color1);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.jp-gis-temporal-slider-container span,
|
|
11
|
+
.jp-gis-temporal-slider-container label {
|
|
12
|
+
font-weight: bold;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.jp-gis-temporal-slider-row {
|
|
16
|
+
display: flex;
|
|
17
|
+
gap: 0.25rem;
|
|
18
|
+
justify-content: space-between;
|
|
19
|
+
align-items: center;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.jp-gis-temporal-slider-controls {
|
|
23
|
+
display: flex;
|
|
24
|
+
flex-grow: 1;
|
|
25
|
+
justify-content: space-around;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.jp-gis-temporal-slider-sub-controls {
|
|
29
|
+
display: flex;
|
|
30
|
+
justify-content: center;
|
|
31
|
+
align-items: center;
|
|
32
|
+
gap: 0.25rem;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.jp-gis-temporal-slider-sub-controls > input {
|
|
36
|
+
width: 35px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
select,
|
|
40
|
+
select option {
|
|
41
|
+
text-transform: capitalize;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.jp-gis-temporal-slider {
|
|
45
|
+
flex: 1 0 40%;
|
|
46
|
+
min-width: 300px;
|
|
47
|
+
}
|