@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.
Files changed (95) hide show
  1. package/lib/annotations/components/Annotation.js +2 -2
  2. package/lib/annotations/model.d.ts +6 -7
  3. package/lib/annotations/model.js +15 -15
  4. package/lib/commands.d.ts +2 -3
  5. package/lib/commands.js +146 -62
  6. package/lib/constants.d.ts +3 -0
  7. package/lib/constants.js +5 -1
  8. package/lib/dialogs/formdialog.d.ts +5 -0
  9. package/lib/dialogs/formdialog.js +2 -2
  10. package/lib/dialogs/layerBrowserDialog.d.ts +4 -5
  11. package/lib/dialogs/layerBrowserDialog.js +9 -9
  12. package/lib/dialogs/symbology/components/color_ramp/ModeSelectRow.js +2 -1
  13. package/lib/dialogs/symbology/hooks/useGetBandInfo.d.ts +26 -0
  14. package/lib/dialogs/symbology/hooks/useGetBandInfo.js +64 -0
  15. package/lib/dialogs/symbology/hooks/useGetProperties.d.ts +1 -1
  16. package/lib/dialogs/symbology/hooks/useGetProperties.js +12 -9
  17. package/lib/dialogs/symbology/symbologyDialog.d.ts +2 -3
  18. package/lib/dialogs/symbology/symbologyDialog.js +10 -9
  19. package/lib/dialogs/symbology/tiff_layer/TiffRendering.d.ts +1 -1
  20. package/lib/dialogs/symbology/tiff_layer/TiffRendering.js +16 -3
  21. package/lib/dialogs/symbology/tiff_layer/components/BandRow.d.ts +16 -3
  22. package/lib/dialogs/symbology/tiff_layer/components/BandRow.js +21 -7
  23. package/lib/dialogs/symbology/tiff_layer/types/MultibandColor.d.ts +4 -0
  24. package/lib/dialogs/symbology/tiff_layer/types/MultibandColor.js +85 -0
  25. package/lib/dialogs/symbology/tiff_layer/types/SingleBandPseudoColor.d.ts +1 -20
  26. package/lib/dialogs/symbology/tiff_layer/types/SingleBandPseudoColor.js +25 -65
  27. package/lib/dialogs/symbology/vector_layer/VectorRendering.d.ts +1 -1
  28. package/lib/dialogs/symbology/vector_layer/VectorRendering.js +18 -13
  29. package/lib/dialogs/symbology/vector_layer/types/Categorized.d.ts +1 -1
  30. package/lib/dialogs/symbology/vector_layer/types/Categorized.js +30 -19
  31. package/lib/dialogs/symbology/vector_layer/types/Graduated.d.ts +1 -1
  32. package/lib/dialogs/symbology/vector_layer/types/Graduated.js +16 -13
  33. package/lib/dialogs/symbology/vector_layer/types/Heatmap.d.ts +4 -0
  34. package/lib/dialogs/symbology/vector_layer/types/Heatmap.js +77 -0
  35. package/lib/dialogs/symbology/vector_layer/types/SimpleSymbol.d.ts +1 -1
  36. package/lib/dialogs/symbology/vector_layer/types/SimpleSymbol.js +4 -3
  37. package/lib/formbuilder/creationform.d.ts +6 -2
  38. package/lib/formbuilder/creationform.js +6 -6
  39. package/lib/formbuilder/editform.d.ts +2 -2
  40. package/lib/formbuilder/editform.js +14 -9
  41. package/lib/formbuilder/formselectors.js +11 -1
  42. package/lib/formbuilder/objectform/baseform.d.ts +12 -3
  43. package/lib/formbuilder/objectform/baseform.js +39 -0
  44. package/lib/formbuilder/objectform/fileselectorwidget.d.ts +2 -0
  45. package/lib/formbuilder/objectform/fileselectorwidget.js +88 -0
  46. package/lib/formbuilder/objectform/geojsonsource.d.ts +5 -7
  47. package/lib/formbuilder/objectform/geojsonsource.js +8 -24
  48. package/lib/formbuilder/objectform/geotiffsource.d.ts +5 -1
  49. package/lib/formbuilder/objectform/geotiffsource.js +64 -18
  50. package/lib/formbuilder/objectform/heatmapLayerForm.d.ts +11 -0
  51. package/lib/formbuilder/objectform/heatmapLayerForm.js +60 -0
  52. package/lib/formbuilder/objectform/layerform.d.ts +2 -0
  53. package/lib/formbuilder/objectform/layerform.js +6 -0
  54. package/lib/formbuilder/objectform/pathbasedsource.d.ts +19 -0
  55. package/lib/formbuilder/objectform/pathbasedsource.js +98 -0
  56. package/lib/formbuilder/objectform/vectorlayerform.d.ts +0 -2
  57. package/lib/formbuilder/objectform/vectorlayerform.js +0 -59
  58. package/lib/icons.d.ts +1 -0
  59. package/lib/icons.js +5 -0
  60. package/lib/keybindings.json +62 -0
  61. package/lib/mainview/TemporalSlider.d.ts +8 -0
  62. package/lib/mainview/TemporalSlider.js +303 -0
  63. package/lib/mainview/mainView.d.ts +46 -8
  64. package/lib/mainview/mainView.js +431 -144
  65. package/lib/mainview/mainviewmodel.d.ts +4 -0
  66. package/lib/mainview/mainviewmodel.js +4 -0
  67. package/lib/mainview/mainviewwidget.d.ts +0 -2
  68. package/lib/mainview/mainviewwidget.js +0 -2
  69. package/lib/panelview/annotationPanel.js +5 -5
  70. package/lib/panelview/components/filter-panel/Filter.js +8 -24
  71. package/lib/panelview/components/identify-panel/IdentifyPanel.js +1 -1
  72. package/lib/panelview/components/layers.js +2 -2
  73. package/lib/panelview/components/sources.js +1 -1
  74. package/lib/panelview/leftpanel.d.ts +3 -0
  75. package/lib/panelview/leftpanel.js +5 -1
  76. package/lib/panelview/model.js +8 -8
  77. package/lib/panelview/objectproperties.js +10 -10
  78. package/lib/panelview/rightpanel.d.ts +1 -1
  79. package/lib/panelview/rightpanel.js +10 -10
  80. package/lib/statusbar/StatusBar.d.ts +13 -0
  81. package/lib/statusbar/StatusBar.js +52 -0
  82. package/lib/toolbar/widget.d.ts +1 -1
  83. package/lib/toolbar/widget.js +44 -37
  84. package/lib/tools.d.ts +50 -7
  85. package/lib/tools.js +394 -12
  86. package/lib/types.d.ts +2 -0
  87. package/lib/widget.d.ts +29 -5
  88. package/lib/widget.js +41 -7
  89. package/package.json +17 -5
  90. package/style/base.css +11 -0
  91. package/style/icons/logo_mini_qgz.svg +31 -0
  92. package/style/leftPanel.css +8 -0
  93. package/style/statusBar.css +16 -0
  94. package/style/symbologyDialog.css +7 -1
  95. 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 { Signal } from '@lumino/signaling';
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
- export class JupyterGISWidget extends DocumentWidget {
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.2.1",
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.2.1",
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>
@@ -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: 375px;
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
+ }