jupytergis-lab 0.4.4__py3-none-any.whl → 0.5.0__py3-none-any.whl
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.
- jupytergis_lab/__init__.py +1 -0
- jupytergis_lab/_version.py +1 -1
- jupytergis_lab/notebook/explore.py +127 -0
- jupytergis_lab/notebook/gis_document.py +55 -54
- jupytergis_lab/notebook/tests/test_api.py +0 -11
- {jupytergis_lab-0.4.4.data → jupytergis_lab-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/package.json +4 -4
- jupytergis_lab-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/432.c9ac1551a28b0189d4b3.js +1 -0
- jupytergis_lab-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/484.1e1e78276dfe49d0de97.js +1 -0
- jupytergis_lab-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/remoteEntry.5cdf3f10821b0262016a.js +1 -0
- {jupytergis_lab-0.4.4.data → jupytergis_lab-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/third-party-licenses.json +2 -2
- {jupytergis_lab-0.4.4.dist-info → jupytergis_lab-0.5.0.dist-info}/METADATA +2 -1
- jupytergis_lab-0.5.0.dist-info/RECORD +21 -0
- jupytergis_lab/notebook/objects/__init__.py +0 -22
- jupytergis_lab/notebook/objects/_schema/__init__.py +0 -3
- jupytergis_lab/notebook/objects/_schema/export/__init__.py +0 -3
- jupytergis_lab/notebook/objects/_schema/export/exportGeojson.py +0 -18
- jupytergis_lab/notebook/objects/_schema/export/exportGeotiff.py +0 -28
- jupytergis_lab/notebook/objects/_schema/geojson.py +0 -502
- jupytergis_lab/notebook/objects/_schema/geojsonsource.py +0 -20
- jupytergis_lab/notebook/objects/_schema/processing/__init__.py +0 -3
- jupytergis_lab/notebook/objects/_schema/processing/buffer.py +0 -23
- jupytergis_lab/notebook/objects/_schema/processing/dissolve.py +0 -24
- jupytergis_lab/notebook/objects/_schema/project/__init__.py +0 -3
- jupytergis_lab/notebook/objects/_schema/project/jgis.py +0 -135
- jupytergis_lab/notebook/objects/_schema/project/layers/__init__.py +0 -3
- jupytergis_lab/notebook/objects/_schema/project/layers/heatmapLayer.py +0 -30
- jupytergis_lab/notebook/objects/_schema/project/layers/hillshadeLayer.py +0 -19
- jupytergis_lab/notebook/objects/_schema/project/layers/imageLayer.py +0 -19
- jupytergis_lab/notebook/objects/_schema/project/layers/rasterlayer.py +0 -19
- jupytergis_lab/notebook/objects/_schema/project/layers/vectorTileLayer.py +0 -30
- jupytergis_lab/notebook/objects/_schema/project/layers/vectorlayer.py +0 -64
- jupytergis_lab/notebook/objects/_schema/project/layers/webGlLayer.py +0 -57
- jupytergis_lab/notebook/objects/_schema/project/sources/__init__.py +0 -3
- jupytergis_lab/notebook/objects/_schema/project/sources/geoTiffSource.py +0 -27
- jupytergis_lab/notebook/objects/_schema/project/sources/imageSource.py +0 -29
- jupytergis_lab/notebook/objects/_schema/project/sources/rasterDemSource.py +0 -23
- jupytergis_lab/notebook/objects/_schema/project/sources/rastersource.py +0 -36
- jupytergis_lab/notebook/objects/_schema/project/sources/shapefileSource.py +0 -31
- jupytergis_lab/notebook/objects/_schema/project/sources/vectortilesource.py +0 -27
- jupytergis_lab/notebook/objects/_schema/project/sources/videoSource.py +0 -30
- jupytergis_lab-0.4.4.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/432.febf6149ed25e4ffd72b.js +0 -1
- jupytergis_lab-0.4.4.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/484.1c6c90a0cb08445648d8.js +0 -1
- jupytergis_lab-0.4.4.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/remoteEntry.34c2a234101e54e44f1f.js +0 -1
- jupytergis_lab-0.4.4.dist-info/RECORD +0 -48
- {jupytergis_lab-0.4.4.data → jupytergis_lab-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/install.json +0 -0
- {jupytergis_lab-0.4.4.data → jupytergis_lab-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/234.c2d7ed33ae9ca2244b0d.js +0 -0
- {jupytergis_lab-0.4.4.data → jupytergis_lab-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/style.js +0 -0
- {jupytergis_lab-0.4.4.dist-info → jupytergis_lab-0.5.0.dist-info}/WHEEL +0 -0
- {jupytergis_lab-0.4.4.dist-info → jupytergis_lab-0.5.0.dist-info}/licenses/LICENSE +0 -0
jupytergis_lab/__init__.py
CHANGED
jupytergis_lab/_version.py
CHANGED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import Any, Literal, Optional
|
|
4
|
+
import re
|
|
5
|
+
|
|
6
|
+
from jupytergis_lab import GISDocument
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass
|
|
10
|
+
class Basemap:
|
|
11
|
+
name: str
|
|
12
|
+
url: str
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
BasemapChoice = Literal["light", "dark", "topo"]
|
|
16
|
+
_basemaps: dict[BasemapChoice, list[Basemap]] = {
|
|
17
|
+
"light": [
|
|
18
|
+
Basemap(
|
|
19
|
+
name="ArcGIS light basemap",
|
|
20
|
+
url="https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}.pbf",
|
|
21
|
+
),
|
|
22
|
+
Basemap(
|
|
23
|
+
name="ArcGIS light basemap reference",
|
|
24
|
+
url="https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer/tile/{z}/{y}/{x}.pbf",
|
|
25
|
+
),
|
|
26
|
+
],
|
|
27
|
+
"dark": [
|
|
28
|
+
Basemap(
|
|
29
|
+
name="ArcGIS dark basemap",
|
|
30
|
+
url="https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}.pbf",
|
|
31
|
+
),
|
|
32
|
+
Basemap(
|
|
33
|
+
name="ArcGIS dark basemap reference",
|
|
34
|
+
url="https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Reference/MapServer/tile/{z}/{y}/{x}.pbf",
|
|
35
|
+
),
|
|
36
|
+
],
|
|
37
|
+
"topo": [
|
|
38
|
+
Basemap(
|
|
39
|
+
name="USGS topographic basemap",
|
|
40
|
+
url="https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}",
|
|
41
|
+
),
|
|
42
|
+
],
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def explore(
|
|
47
|
+
data: str | Path | Any,
|
|
48
|
+
*,
|
|
49
|
+
layer_name: Optional[str] = "Exploration layer",
|
|
50
|
+
basemap: BasemapChoice = "topo",
|
|
51
|
+
) -> GISDocument:
|
|
52
|
+
"""Run a JupyterGIS data interaction interface alongside a Notebook.
|
|
53
|
+
|
|
54
|
+
:param data: A GeoDataFrame or path to a GeoJSON file.
|
|
55
|
+
|
|
56
|
+
:raises FileNotFoundError: Received a file path that doesn't exist.
|
|
57
|
+
:raises NotImplementedError: Received an input value that isn't supported yet.
|
|
58
|
+
:raises TypeError: Received an object type that isn't supported.
|
|
59
|
+
:raises ValueError: Received an input value that isn't supported.
|
|
60
|
+
"""
|
|
61
|
+
doc = GISDocument()
|
|
62
|
+
|
|
63
|
+
for basemap_obj in _basemaps[basemap]:
|
|
64
|
+
doc.add_raster_layer(basemap_obj.url, name=basemap_obj.name)
|
|
65
|
+
|
|
66
|
+
_add_layer(doc=doc, data=data, name=layer_name)
|
|
67
|
+
|
|
68
|
+
# TODO: Zoom to layer. Currently not exposed in Python API.
|
|
69
|
+
|
|
70
|
+
doc.sidecar(title="JupyterGIS explorer")
|
|
71
|
+
|
|
72
|
+
# TODO: should we return `doc`? It enables the exploration environment more usable,
|
|
73
|
+
# but by default, `explore(...)` would display a widget in the notebook _and_ open a
|
|
74
|
+
# sidecar for the same widget. The user would need to append a semicolon to disable
|
|
75
|
+
# that behavior. We can't disable that behavior from within this function to the
|
|
76
|
+
# best of my knowlwedge.
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def _add_layer(
|
|
80
|
+
*,
|
|
81
|
+
doc: GISDocument,
|
|
82
|
+
data: Any,
|
|
83
|
+
name: str,
|
|
84
|
+
) -> str:
|
|
85
|
+
"""Add a layer to the document, autodetecting its type.
|
|
86
|
+
|
|
87
|
+
This method currently supports only GeoDataFrames and GeoJSON files.
|
|
88
|
+
|
|
89
|
+
:param doc: A GISDocument to add the layer to.
|
|
90
|
+
:param data: A data object. Valid data objects include geopandas GeoDataFrames and paths to GeoJSON files.
|
|
91
|
+
:param name: The name that will be used for the layer.
|
|
92
|
+
|
|
93
|
+
:return: A layer ID string.
|
|
94
|
+
|
|
95
|
+
:raises FileNotFoundError: Received a file path that doesn't exist.
|
|
96
|
+
:raises NotImplementedError: Received an input value that isn't supported yet.
|
|
97
|
+
:raises TypeError: Received an object type that isn't supported.
|
|
98
|
+
:raises ValueError: Received an input value that isn't supported.
|
|
99
|
+
"""
|
|
100
|
+
if isinstance(data, str):
|
|
101
|
+
if re.match(r"^(http|https)://", data) is not None:
|
|
102
|
+
raise NotImplementedError("URLs not yet supported.")
|
|
103
|
+
else:
|
|
104
|
+
data = Path(data)
|
|
105
|
+
|
|
106
|
+
if isinstance(data, Path):
|
|
107
|
+
if not data.exists():
|
|
108
|
+
raise FileNotFoundError(f"File not found: {data}")
|
|
109
|
+
|
|
110
|
+
ext = data.suffix.lower()
|
|
111
|
+
|
|
112
|
+
if ext in [".geojson", ".json"]:
|
|
113
|
+
return doc.add_geojson_layer(path=data, name=name)
|
|
114
|
+
elif ext in [".tif", ".tiff"]:
|
|
115
|
+
raise NotImplementedError("GeoTIFFs not yet supported.")
|
|
116
|
+
else:
|
|
117
|
+
raise ValueError(f"Unsupported file type: {data}")
|
|
118
|
+
|
|
119
|
+
try:
|
|
120
|
+
from geopandas import GeoDataFrame
|
|
121
|
+
|
|
122
|
+
if isinstance(data, GeoDataFrame):
|
|
123
|
+
return doc.add_geojson_layer(data=data.to_geo_dict(), name=name)
|
|
124
|
+
except ImportError:
|
|
125
|
+
pass
|
|
126
|
+
|
|
127
|
+
raise TypeError(f"Unsupported input type: {type(data)}")
|
|
@@ -2,16 +2,16 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
import logging
|
|
5
|
-
import os
|
|
6
5
|
from pathlib import Path
|
|
7
6
|
from typing import Any, Dict, List, Literal, Optional, Union
|
|
8
7
|
from uuid import uuid4
|
|
9
8
|
|
|
10
|
-
from pycrdt import Array,
|
|
9
|
+
from pycrdt import Array, Map
|
|
11
10
|
from pydantic import BaseModel
|
|
11
|
+
from sidecar import Sidecar
|
|
12
12
|
from ypywidgets.comm import CommWidget
|
|
13
13
|
|
|
14
|
-
from .
|
|
14
|
+
from jupytergis_core.schema import (
|
|
15
15
|
IGeoJSONSource,
|
|
16
16
|
IGeoTiffSource,
|
|
17
17
|
IHeatmapLayer,
|
|
@@ -43,11 +43,9 @@ class GISDocument(CommWidget):
|
|
|
43
43
|
"""
|
|
44
44
|
Create a new GISDocument object.
|
|
45
45
|
|
|
46
|
-
:param path: the path to the file that you would like to open. If not provided, a new
|
|
46
|
+
:param path: the path to the file that you would like to open. If not provided, a new ephemeral widget will be created.
|
|
47
47
|
"""
|
|
48
48
|
|
|
49
|
-
path: Optional[Path]
|
|
50
|
-
|
|
51
49
|
def __init__(
|
|
52
50
|
self,
|
|
53
51
|
path: Optional[str | Path] = None,
|
|
@@ -59,18 +57,14 @@ class GISDocument(CommWidget):
|
|
|
59
57
|
pitch: Optional[float] = None,
|
|
60
58
|
projection: Optional[str] = None,
|
|
61
59
|
):
|
|
62
|
-
if isinstance(path,
|
|
63
|
-
path =
|
|
64
|
-
|
|
65
|
-
self.path = path
|
|
66
|
-
|
|
67
|
-
comm_metadata = GISDocument._path_to_comm(str(self.path) if self.path else None)
|
|
68
|
-
|
|
69
|
-
ydoc = Doc()
|
|
60
|
+
if isinstance(path, Path):
|
|
61
|
+
path = str(path)
|
|
70
62
|
|
|
71
63
|
super().__init__(
|
|
72
|
-
comm_metadata=
|
|
73
|
-
|
|
64
|
+
comm_metadata={
|
|
65
|
+
"ymodel_name": "@jupytergis:widget",
|
|
66
|
+
**self._make_comm(path=path),
|
|
67
|
+
}
|
|
74
68
|
)
|
|
75
69
|
|
|
76
70
|
self.ydoc["layers"] = self._layers = Map()
|
|
@@ -79,21 +73,20 @@ class GISDocument(CommWidget):
|
|
|
79
73
|
self.ydoc["layerTree"] = self._layerTree = Array()
|
|
80
74
|
self.ydoc["metadata"] = self._metadata = Map()
|
|
81
75
|
|
|
82
|
-
if
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
self._options["projection"] = projection
|
|
76
|
+
if latitude is not None:
|
|
77
|
+
self._options["latitude"] = latitude
|
|
78
|
+
if longitude is not None:
|
|
79
|
+
self._options["longitude"] = longitude
|
|
80
|
+
if extent is not None:
|
|
81
|
+
self._options["extent"] = extent
|
|
82
|
+
if zoom is not None:
|
|
83
|
+
self._options["zoom"] = zoom
|
|
84
|
+
if bearing is not None:
|
|
85
|
+
self._options["bearing"] = bearing
|
|
86
|
+
if pitch is not None:
|
|
87
|
+
self._options["pitch"] = pitch
|
|
88
|
+
if projection is not None:
|
|
89
|
+
self._options["projection"] = projection
|
|
97
90
|
|
|
98
91
|
@property
|
|
99
92
|
def layers(self) -> Dict:
|
|
@@ -109,23 +102,29 @@ class GISDocument(CommWidget):
|
|
|
109
102
|
"""
|
|
110
103
|
return self._layerTree.to_py()
|
|
111
104
|
|
|
112
|
-
def
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
105
|
+
def sidecar(
|
|
106
|
+
self,
|
|
107
|
+
*,
|
|
108
|
+
title: str = "JupyterGIS sidecar",
|
|
109
|
+
anchor: Literal[
|
|
110
|
+
"split-right",
|
|
111
|
+
"split-left",
|
|
112
|
+
"split-top",
|
|
113
|
+
"split-bottom",
|
|
114
|
+
"tab-before",
|
|
115
|
+
"tab-after",
|
|
116
|
+
"right",
|
|
117
|
+
] = "split-right",
|
|
118
|
+
):
|
|
119
|
+
"""Open the document in a new sidecar panel.
|
|
124
120
|
|
|
125
|
-
|
|
126
|
-
|
|
121
|
+
:param anchor: Where to position the new sidecar panel.
|
|
122
|
+
"""
|
|
123
|
+
sidecar = Sidecar(title=title, anchor=anchor)
|
|
124
|
+
with sidecar:
|
|
125
|
+
display(self)
|
|
127
126
|
|
|
128
|
-
def
|
|
127
|
+
def export_to_qgis(self, path: str | Path) -> bool:
|
|
129
128
|
# Lazy import, jupytergis_qgis of qgis may not be installed
|
|
130
129
|
from jupytergis_qgis.qgis_loader import export_project_to_qgis
|
|
131
130
|
|
|
@@ -735,13 +734,13 @@ class GISDocument(CommWidget):
|
|
|
735
734
|
layer["filters"]["appliedFilters"] = []
|
|
736
735
|
self._layers[layer_id] = layer
|
|
737
736
|
|
|
738
|
-
def _add_source(self, new_object: "JGISObject"):
|
|
739
|
-
_id = str(uuid4())
|
|
737
|
+
def _add_source(self, new_object: "JGISObject", id: str | None = None) -> str:
|
|
738
|
+
_id = str(uuid4()) if id is None else id
|
|
740
739
|
obj_dict = json.loads(new_object.json())
|
|
741
740
|
self._sources[_id] = obj_dict
|
|
742
741
|
return _id
|
|
743
742
|
|
|
744
|
-
def _add_layer(self, new_object: "JGISObject"):
|
|
743
|
+
def _add_layer(self, new_object: "JGISObject") -> str:
|
|
745
744
|
_id = str(uuid4())
|
|
746
745
|
obj_dict = json.loads(new_object.json())
|
|
747
746
|
self._layers[_id] = obj_dict
|
|
@@ -749,13 +748,11 @@ class GISDocument(CommWidget):
|
|
|
749
748
|
return _id
|
|
750
749
|
|
|
751
750
|
@classmethod
|
|
752
|
-
def
|
|
753
|
-
path = None
|
|
751
|
+
def _make_comm(cls, *, path: Optional[str]) -> Dict:
|
|
754
752
|
format = None
|
|
755
753
|
contentType = None
|
|
756
754
|
|
|
757
|
-
if
|
|
758
|
-
path = filePath
|
|
755
|
+
if path is not None:
|
|
759
756
|
file_name = Path(path).name
|
|
760
757
|
try:
|
|
761
758
|
ext = file_name.split(".")[1].lower()
|
|
@@ -773,8 +770,12 @@ class GISDocument(CommWidget):
|
|
|
773
770
|
contentType = "QGS"
|
|
774
771
|
else:
|
|
775
772
|
raise ValueError("File extension is not supported!")
|
|
773
|
+
|
|
776
774
|
return dict(
|
|
777
|
-
path=path,
|
|
775
|
+
path=path,
|
|
776
|
+
format=format,
|
|
777
|
+
contentType=contentType,
|
|
778
|
+
create_ydoc=path is None,
|
|
778
779
|
)
|
|
779
780
|
|
|
780
781
|
def to_py(self) -> dict:
|
|
@@ -44,14 +44,3 @@ class TestLayerManipulation(TestDocument):
|
|
|
44
44
|
def test_remove_nonexistent_layer_raises(self):
|
|
45
45
|
with pytest.raises(KeyError):
|
|
46
46
|
self.doc.remove_layer("foo")
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
def test_save_as(tmp_path):
|
|
50
|
-
os.chdir(tmp_path)
|
|
51
|
-
|
|
52
|
-
doc = GISDocument()
|
|
53
|
-
assert not list(tmp_path.iterdir())
|
|
54
|
-
|
|
55
|
-
fn = "test.jgis"
|
|
56
|
-
doc.save_as(fn)
|
|
57
|
-
assert (tmp_path / fn).is_file()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupytergis/jupytergis-lab",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "JupyterGIS Lab extension.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jupyter",
|
|
@@ -53,8 +53,8 @@
|
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@jupyter/collaborative-drive": "^3.0.0",
|
|
56
|
-
"@jupytergis/base": "^0.
|
|
57
|
-
"@jupytergis/schema": "^0.
|
|
56
|
+
"@jupytergis/base": "^0.5.0",
|
|
57
|
+
"@jupytergis/schema": "^0.5.0",
|
|
58
58
|
"@jupyterlab/application": "^4.3.0",
|
|
59
59
|
"@jupyterlab/apputils": "^4.3.0",
|
|
60
60
|
"@jupyterlab/completer": "^4.3.0",
|
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
}
|
|
125
125
|
},
|
|
126
126
|
"_build": {
|
|
127
|
-
"load": "static/remoteEntry.
|
|
127
|
+
"load": "static/remoteEntry.5cdf3f10821b0262016a.js",
|
|
128
128
|
"extension": "./extension",
|
|
129
129
|
"style": "./style"
|
|
130
130
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_jupytergis_jupytergis_lab=self.webpackChunk_jupytergis_jupytergis_lab||[]).push([[432],{4:(n,o,e)=>{e.d(o,{A:()=>l});var r=e(758),t=e.n(r),i=e(935),a=e.n(i)()(t());a.push([n.id,':root,\n:host {\n --ol-background-color: white;\n --ol-accent-background-color: #F5F5F5;\n --ol-subtle-background-color: rgba(128, 128, 128, 0.25);\n --ol-partial-background-color: rgba(255, 255, 255, 0.75);\n --ol-foreground-color: #333333;\n --ol-subtle-foreground-color: #666666;\n --ol-brand-color: #00AAFF;\n}\n\n.ol-box {\n box-sizing: border-box;\n border-radius: 2px;\n border: 1.5px solid var(--ol-background-color);\n background-color: var(--ol-partial-background-color);\n}\n\n.ol-mouse-position {\n top: 8px;\n right: 8px;\n position: absolute;\n}\n\n.ol-scale-line {\n background: var(--ol-partial-background-color);\n border-radius: 4px;\n bottom: 8px;\n left: 8px;\n padding: 2px;\n position: absolute;\n}\n\n.ol-scale-line-inner {\n border: 1px solid var(--ol-subtle-foreground-color);\n border-top: none;\n color: var(--ol-foreground-color);\n font-size: 10px;\n text-align: center;\n margin: 1px;\n will-change: contents, width;\n transition: all 0.25s;\n}\n\n.ol-scale-bar {\n position: absolute;\n bottom: 8px;\n left: 8px;\n}\n\n.ol-scale-bar-inner {\n display: flex;\n}\n\n.ol-scale-step-marker {\n width: 1px;\n height: 15px;\n background-color: var(--ol-foreground-color);\n float: right;\n z-index: 10;\n}\n\n.ol-scale-step-text {\n position: absolute;\n bottom: -5px;\n font-size: 10px;\n z-index: 11;\n color: var(--ol-foreground-color);\n text-shadow: -1.5px 0 var(--ol-partial-background-color), 0 1.5px var(--ol-partial-background-color), 1.5px 0 var(--ol-partial-background-color), 0 -1.5px var(--ol-partial-background-color);\n}\n\n.ol-scale-text {\n position: absolute;\n font-size: 12px;\n text-align: center;\n bottom: 25px;\n color: var(--ol-foreground-color);\n text-shadow: -1.5px 0 var(--ol-partial-background-color), 0 1.5px var(--ol-partial-background-color), 1.5px 0 var(--ol-partial-background-color), 0 -1.5px var(--ol-partial-background-color);\n}\n\n.ol-scale-singlebar {\n position: relative;\n height: 10px;\n z-index: 9;\n box-sizing: border-box;\n border: 1px solid var(--ol-foreground-color);\n}\n\n.ol-scale-singlebar-even {\n background-color: var(--ol-subtle-foreground-color);\n}\n\n.ol-scale-singlebar-odd {\n background-color: var(--ol-background-color);\n}\n\n.ol-unsupported {\n display: none;\n}\n\n.ol-viewport,\n.ol-unselectable {\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n}\n\n.ol-viewport canvas {\n all: unset;\n overflow: hidden;\n}\n\n.ol-viewport {\n touch-action: pan-x pan-y;\n}\n\n.ol-selectable {\n -webkit-touch-callout: default;\n -webkit-user-select: text;\n -moz-user-select: text;\n user-select: text;\n}\n\n.ol-grabbing {\n cursor: -webkit-grabbing;\n cursor: -moz-grabbing;\n cursor: grabbing;\n}\n\n.ol-grab {\n cursor: move;\n cursor: -webkit-grab;\n cursor: -moz-grab;\n cursor: grab;\n}\n\n.ol-control {\n position: absolute;\n background-color: var(--ol-subtle-background-color);\n border-radius: 4px;\n}\n\n.ol-zoom {\n top: .5em;\n left: .5em;\n}\n\n.ol-rotate {\n top: .5em;\n right: .5em;\n transition: opacity .25s linear, visibility 0s linear;\n}\n\n.ol-rotate.ol-hidden {\n opacity: 0;\n visibility: hidden;\n transition: opacity .25s linear, visibility 0s linear .25s;\n}\n\n.ol-zoom-extent {\n top: 4.643em;\n left: .5em;\n}\n\n.ol-full-screen {\n right: .5em;\n top: .5em;\n}\n\n.ol-control button {\n display: block;\n margin: 1px;\n padding: 0;\n color: var(--ol-subtle-foreground-color);\n font-weight: bold;\n text-decoration: none;\n font-size: inherit;\n text-align: center;\n height: 1.375em;\n width: 1.375em;\n line-height: .4em;\n background-color: var(--ol-background-color);\n border: none;\n border-radius: 2px;\n}\n\n.ol-control button::-moz-focus-inner {\n border: none;\n padding: 0;\n}\n\n.ol-zoom-extent button {\n line-height: 1.4em;\n}\n\n.ol-compass {\n display: block;\n font-weight: normal;\n will-change: transform;\n}\n\n.ol-touch .ol-control button {\n font-size: 1.5em;\n}\n\n.ol-touch .ol-zoom-extent {\n top: 5.5em;\n}\n\n.ol-control button:hover,\n.ol-control button:focus {\n text-decoration: none;\n outline: 1px solid var(--ol-subtle-foreground-color);\n color: var(--ol-foreground-color);\n}\n\n.ol-zoom .ol-zoom-in {\n border-radius: 2px 2px 0 0;\n}\n\n.ol-zoom .ol-zoom-out {\n border-radius: 0 0 2px 2px;\n}\n\n.ol-attribution {\n text-align: right;\n bottom: .5em;\n right: .5em;\n max-width: calc(100% - 1.3em);\n display: flex;\n flex-flow: row-reverse;\n align-items: center;\n}\n\n.ol-attribution a {\n color: var(--ol-subtle-foreground-color);\n text-decoration: none;\n}\n\n.ol-attribution ul {\n margin: 0;\n padding: 1px .5em;\n color: var(--ol-foreground-color);\n text-shadow: 0 0 2px var(--ol-background-color);\n font-size: 12px;\n}\n\n.ol-attribution li {\n display: inline;\n list-style: none;\n}\n\n.ol-attribution li:not(:last-child):after {\n content: " ";\n}\n\n.ol-attribution img {\n max-height: 2em;\n max-width: inherit;\n vertical-align: middle;\n}\n\n.ol-attribution button {\n flex-shrink: 0;\n}\n\n.ol-attribution.ol-collapsed ul {\n display: none;\n}\n\n.ol-attribution:not(.ol-collapsed) {\n background: var(--ol-partial-background-color);\n}\n\n.ol-attribution.ol-uncollapsible {\n bottom: 0;\n right: 0;\n border-radius: 4px 0 0;\n}\n\n.ol-attribution.ol-uncollapsible img {\n margin-top: -.2em;\n max-height: 1.6em;\n}\n\n.ol-attribution.ol-uncollapsible button {\n display: none;\n}\n\n.ol-zoomslider {\n top: 4.5em;\n left: .5em;\n height: 200px;\n}\n\n.ol-zoomslider button {\n position: relative;\n height: 10px;\n}\n\n.ol-touch .ol-zoomslider {\n top: 5.5em;\n}\n\n.ol-overviewmap {\n left: 0.5em;\n bottom: 0.5em;\n}\n\n.ol-overviewmap.ol-uncollapsible {\n bottom: 0;\n left: 0;\n border-radius: 0 4px 0 0;\n}\n\n.ol-overviewmap .ol-overviewmap-map,\n.ol-overviewmap button {\n display: block;\n}\n\n.ol-overviewmap .ol-overviewmap-map {\n border: 1px solid var(--ol-subtle-foreground-color);\n height: 150px;\n width: 150px;\n}\n\n.ol-overviewmap:not(.ol-collapsed) button {\n bottom: 0;\n left: 0;\n position: absolute;\n}\n\n.ol-overviewmap.ol-collapsed .ol-overviewmap-map,\n.ol-overviewmap.ol-uncollapsible button {\n display: none;\n}\n\n.ol-overviewmap:not(.ol-collapsed) {\n background: var(--ol-subtle-background-color);\n}\n\n.ol-overviewmap-box {\n border: 1.5px dotted var(--ol-subtle-foreground-color);\n}\n\n.ol-overviewmap .ol-overviewmap-box:hover {\n cursor: move;\n}\n\n.ol-overviewmap .ol-viewport:hover {\n cursor: pointer;\n}\n',""]);const l=a},51:n=>{n.exports=function(n){var o=document.createElement("style");return n.setAttributes(o,n.attributes),n.insert(o,n.options),o}},62:n=>{n.exports=function(n,o){return o||(o={}),n?(n=String(n.__esModule?n.default:n),/^['"].*['"]$/.test(n)&&(n=n.slice(1,-1)),o.hash&&(n+=o.hash),/["'() \t\n]|(%20)/.test(n)||o.needQuotes?'"'.concat(n.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):n):n}},79:(n,o,e)=>{e.d(o,{A:()=>m});var r=e(758),t=e.n(r),i=e(935),a=e.n(i),l=e(564),p=e(365),s=e(633),d=e(606),c=e(781),g=e(367),u=e(301),b=e(4),f=a()(t());f.i(l.A),f.i(p.A),f.i(s.A),f.i(d.A),f.i(c.A),f.i(g.A),f.i(u.A),f.i(b.A),f.push([n.id,"/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|---------------------------------------------------------------------------- */\n\n.jGIS-Toolbar-GroupName {\n font-size: var(--jp-ui-font-size0);\n padding-left: 3px;\n}\n\n/* Overwrite forms CSS */\n.jGIS-property-panel .array-item-list {\n display: flex;\n gap: 1rem;\n}\n\n.jGIS-property-panel .rjsf .array-item:not(:last-child) {\n border-bottom: none;\n margin-bottom: unset;\n padding-bottom: unset;\n}\n\n.jGIS-property-panel .rjsf .array-item {\n flex: 1 0 0%;\n align-items: center;\n}\n\n.jGIS-property-panel .rjsf fieldset fieldset {\n padding-left: unset;\n border-left: none;\n}\n\n.jGIS-property-panel .rjsf .array-item-list:has(.field-array) {\n flex-direction: column;\n}\n\n.jp-gis-text-label {\n margin: 0;\n padding: 0;\n font-weight: bold;\n display: block;\n position: relative;\n}\n\n/*This is being upstreamed. Will remove once upstream's been fixed.*/\nbutton.jp-mod-styled.jp-mod-accept {\n background-color: var(--jp-brand-color1) !important;\n}\n\nbutton.jp-mod-styled.jp-mod-reject {\n background-color: var(--jp-layout-color4) !important;\n}\n",""]);const m=f},128:n=>{var o={};n.exports=function(n,e){var r=function(n){if(void 0===o[n]){var e=document.querySelector(n);if(window.HTMLIFrameElement&&e instanceof window.HTMLIFrameElement)try{e=e.contentDocument.head}catch(n){e=null}o[n]=e}return o[n]}(n);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(e)}},248:n=>{n.exports="data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2716%27 viewBox=%270 0 20 20%27%3e %3cg class=%27jp-icon3%27 fill=%27%23616161%27 shape-rendering=%27geometricPrecision%27%3e %3cpolygon class=%27st1%27 points=%279.9%2c13.6 3.6%2c7.4 4.4%2c6.6 9.9%2c12.2 15.4%2c6.7 16.1%2c7.4 %27/%3e %3c/g%3e %3c/svg%3e"},296:(n,o,e)=>{e.d(o,{A:()=>u});var r=e(758),t=e.n(r),i=e(935),a=e.n(i),l=e(378),p=e(62),s=e.n(p),d=new URL(e(248),e.b),c=a()(t());c.i(l.A);var g=s()(d);c.push([n.id,`.jGIS-Spinner {\n position: absolute;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 10;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n outline: none;\n background: #00000075;\n}\n\n.jGIS-SpinnerContent {\n border: solid #f376269e;\n margin: 50px auto;\n text-indent: -9999em;\n width: 6em;\n height: 6em;\n border-radius: 50%;\n position: relative;\n animation:\n load3 1s infinite linear,\n fadeIn 1s;\n}\n\n.jGIS-SpinnerContent:before {\n width: 50%;\n height: 50%;\n background: #f3762605;\n border-radius: 100% 0 100% 0;\n box-shadow: inset 6px 5px 0 1px #f37626;\n position: absolute;\n top: 0;\n left: 0;\n content: '';\n}\n\n.jGIS-SpinnerContent:after {\n width: 75%;\n height: 75%;\n border-radius: 50%;\n content: '';\n margin: auto;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n}\n\n.jGIS-camera-client {\n width: 15px;\n height: 15px;\n position: absolute;\n z-index: 10;\n background-color: var(--jp-private-notebook-active-color);\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.jGIS-control-panel {\n color: var(--jp-ui-font-color1);\n background: var(--jp-layout-color1);\n height: 100%;\n}\n\n.jGIS-control-panel * {\n font-family: var(--jp-ui-font-family);\n}\n\n.jGIS-control-panel-title {\n border-bottom: solid var(--jp-border-width) var(--jp-border-color1);\n box-shadow: var(--jp-toolbar-box-shadow);\n display: flex;\n flex-direction: row;\n align-items: center;\n min-height: 24px;\n height: var(--jp-debugger-header-height);\n background-color: var(--jp-layout-color2);\n}\n\n.jGIS-control-panel-title h2 {\n text-transform: uppercase;\n font-weight: 600;\n font-size: var(--jp-ui-font-size0);\n color: var(--jp-ui-font-color1);\n padding-left: 8px;\n padding-right: 4px;\n}\n\n.jGIS-sidepanel-widget {\n overflow: auto;\n height: 100%;\n}\n\n.jGIS-sidebar-treepanel {\n display: flex;\n flex-direction: column;\n min-height: 50px;\n padding-top: 3px;\n}\n\n.jGIS-sidebar-propertiespanel {\n display: flex;\n flex-direction: column;\n min-height: 50px;\n padding-top: 3px;\n}\n\n.jGIS-treeview-wrapper {\n overflow: auto;\n height: 100%;\n}\n\n.jGIS-treeview-wrapper > div {\n padding: 0 !important;\n}\n/* TODO: More robust selector */\n.jGIS-treeview-wrapper div[style*='align-items: center;']:first-of-type {\n flex-grow: 1;\n}\n\n.jGIS-control-panel-tree {\n flex-grow: 1;\n}\n\n.jGIS-sidebar-propertiespanel > div {\n overflow: auto;\n}\n\n.jGIS-property-outer {\n padding: 10px;\n flex-grow: 1;\n overflow: auto;\n}\n\n.jGIS-property-buttons {\n display: flex;\n justify-content: end;\n padding: 10px;\n}\n\n.jGIS-property-panel {\n display: flex;\n flex-flow: column;\n height: 100%;\n overflow: hidden;\n}\n\n.jGIS-hidden-field {\n display: none;\n}\n\ndiv.field.field-array > label + span {\n display: none;\n}\n\n.jGIS-layer-CreationFormDialog .jp-Dialog-content {\n width: 60%;\n}\n\n.jGIS-layer-CreationFormDialog form {\n padding: 10px;\n}\n\n/* TODO Upstream this to jupyterlab jrfs */\n.jGIS-property-panel .rjsf .control-label,\n.jGIS-property-panel .rjsf legend {\n position: inherit;\n text-transform: capitalize;\n}\n\ndiv.jGIS-toolbar-widget > div.jp-Toolbar-item:last-child {\n flex-grow: 1;\n}\n\n.jGIS-toolbar-usertoolbar {\n flex-grow: 1;\n display: flex;\n flex-direction: row-reverse;\n}\n.jGIS-toolbar-react-widget {\n display: flex;\n flex-direction: row;\n align-items: center;\n flex-grow: 1;\n}\n\n.jGIS-Toolbar-Separator {\n min-height: 25px;\n width: var(--jp-border-width);\n background-color: var(--jp-border-color1);\n padding-left: 0px !important;\n padding-right: 0px !important;\n}\n\n.jGIS-toolbar-usertoolbar .jp-MenuBar-anonymousIcon,\n.jGIS-toolbar-usertoolbar .jp-MenuBar-imageIcon {\n position: unset !important;\n margin-right: 2px;\n height: 22px;\n box-sizing: border-box;\n}\n\n.jGIS-toolbar-usertoolbar .jp-MenuBar-anonymousIcon.selected,\n.jGIS-toolbar-usertoolbar .jp-MenuBar-imageIcon.selected {\n border: solid 1.5px red;\n}\n\n.jGIS-Mainview-Container {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.jGIS-Mainview {\n width: 100%;\n box-sizing: border-box;\n flex: 1;\n}\n\n.jGIS-Popup-Wrapper {\n position: absolute;\n opacity: 1;\n transition: opacity 0.1s linear 0.15s;\n}\n\n.jGIS-Annotation {\n z-index: 1;\n margin-left: 1px;\n margin-top: 1px;\n padding: 1em;\n color: var(--jp-ui-font-color0);\n background: var(--jp-layout-color1);\n border-radius: 0.5em;\n font-size: 12px;\n line-height: 1.2;\n transition: opacity 0.5s;\n}\n\n.jGIS-FloatingAnnotation {\n position: absolute;\n width: 250px;\n box-shadow: var(--jp-elevation-z6);\n z-index: 40;\n max-height: 400px;\n overflow: auto;\n}\n\n.jGIS-Annotation-Card {\n max-height: 400px;\n overflow: auto;\n}\n\n.jGIS-Annotations-Separator {\n border-color: var(--jp-layout-color4);\n border-style: solid;\n border-width: 1px;\n}\n\n.jGIS-Annotation-Handler {\n position: absolute;\n top: -5px;\n left: -5px;\n width: 8px;\n height: 8px;\n border: 1px solid #ffffffc2;\n border-radius: 50%;\n background: rgb(0 0 0 / 63%);\n cursor: pointer;\n transition-property: width, height, left, top;\n transition-duration: 0.2s;\n z-index: 20;\n}\n\n.jGIS-Annotation-Handler:hover {\n top: -9px;\n left: -9px;\n width: 16px;\n height: 16px;\n}\n\n.jGIS-Annotation-Message {\n display: flex;\n margin-top: 10px;\n gap: 5px;\n align-items: center;\n justify-content: center;\n}\n\n.jGIS-Annotation-Message .jGIS-Annotation-User-Icon {\n border-radius: 100%;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n vertical-align: middle;\n color: var(--jp-ui-font-color1);\n}\n\n.jGIS-Annotation-Message textarea {\n border-radius: var(--jp-border-radius);\n background: var(--jp-layout-color2);\n color: var(--jp-ui-font-color2);\n flex-grow: 1;\n resize: none;\n border: none;\n padding: 0.5em;\n outline: thin solid var(--jp-border-color0);\n}\n\n.jGIS-Annotation-Message-Content {\n background: var(--jp-layout-color2);\n color: var(--jp-ui-font-color2);\n border-radius: var(--jp-border-radius);\n flex-grow: 1;\n}\n\n.jGIS-Popup-Topbar {\n display: flex;\n flex-direction: row-reverse;\n}\n\n.jGIS-Popup-TopBarIcon {\n cursor: pointer;\n transform: rotate(180deg);\n}\n\n.jGIS-Annotation-Submit > svg {\n width: 30px;\n height: 30px;\n}\n\n.jGIS-Annotation-Submit g {\n fill: #f6f7f8 !important;\n}\n\n.jGIS-Annotation-Submit:hover {\n opacity: 70%;\n cursor: pointer;\n}\n\n.jGIS-Annotation-Submit {\n background-color: var(--jp-brand-color1);\n border-radius: 100%;\n width: 30px;\n height: 30px;\n}\n\n.jGIS-Annotation-Buttons {\n display: flex;\n justify-content: space-around;\n padding-top: 1em;\n}\n\n.jGIS-Annotation-Buttons > button {\n border-radius: var(--jp-border-radius);\n flex-grow: 1;\n max-width: 68px;\n}\n\n.jGIS-Remote-Pointer {\n position: absolute;\n transition-property: left, top, width, height;\n transition-duration: 150ms;\n transition-timing-function: ease;\n z-index: 20;\n}\n\n.jGIS-Remote-Pointer-Icon {\n filter: drop-shadow(-1px 0px white) drop-shadow(1px 0px white)\n drop-shadow(0px -1px white) drop-shadow(0px 1px white)\n drop-shadow(0px 0px 1px black);\n}\n.jGIS-Remote-Pointer-Icon:hover {\n scale: 1.3;\n}\n\n.jGIS-Floating-Pointer-Popup {\n position: absolute;\n width: 160px;\n box-shadow: var(--jp-elevation-z6);\n z-index: 40;\n max-height: 400px;\n overflow: auto;\n}\n\n.jGIS-Remote-Pointer-Popup {\n margin-left: 7px;\n margin-top: 14px;\n color: #fff;\n padding: 1em;\n border-radius: 0.5em;\n font-size: 12px;\n line-height: 1.2;\n}\n\n.jGIS-Remote-Pointer-Popup-Name {\n font-size: 16px;\n color: #333;\n}\n\n.jGIS-Remote-Pointer-Popup-Coordinates {\n font-size: 14px;\n}\n\n/* Hack to remove the malformed form button */\n.object-property-expand {\n display: none;\n}\n\n.highlight {\n background-color: var(--jp-layout-color2) !important;\n}\n.jupytergis-notebook-widget {\n height: 600px;\n width: 100%;\n}\n\n/* Support output views, created with "Create new view for cell output" context menu */\n.jp-LinkedOutputView .jp-OutputArea-child:only-child {\n /* NOTE: This will eventually be supported directly in JupyterLab\n * (https://github.com/jupyterlab/jupyterlab/pull/17487), but we should keep\n * it around for a while for backwards compatibility. */\n height: 100%;\n}\n.jp-LinkedOutputView .jupytergis-notebook-widget {\n height: 100%;\n}\n\n.jupytergis-notebook-widget > div {\n height: 100%;\n width: 100%;\n}\n\n.jGIS-property-panel .rjsf .control-label,\n.jGIS-property-panel .rjsf legend {\n width: 100%;\n}\n\n.jpgis-console {\n border-top: var(--jp-border-width) solid var(--jp-toolbar-border-color);\n}\n\n.jpgis-console .jp-CodeConsole-banner {\n display: none;\n}\n\n/* FormComponent CSS */\n.jGIS-property-panel .rjsf {\n color: var(--jp-ui-font-color1);\n}\n\n.jGIS-property-panel .rjsf > form {\n padding: var(--jp-ui-font-size1);\n}\n\n.jGIS-property-panel .rjsf fieldset {\n border: 0;\n margin: 0;\n padding: 0;\n}\n\n.jGIS-property-panel .rjsf button[type='submit'] {\n display: none;\n}\n\n.jGIS-property-panel .rjsf .control-label,\n.jGIS-property-panel .rjsf legend {\n margin: 0;\n padding: 0;\n font-weight: bold;\n position: relative;\n width: 100%;\n}\n\n.jGIS-property-panel .rjsf legend > :first-child,\n.jGIS-property-panel .rjsf .control-label > :first-child {\n margin-top: 0;\n padding-top: 0;\n}\n\n.jGIS-property-panel .rjsf .form-group .form-group {\n margin-bottom: var(--jp-ui-font-size1);\n}\n\n.jGIS-property-panel .rjsf .form-group:last-child {\n margin-bottom: 0;\n}\n\n.jGIS-property-panel .rjsf .jp-FormGroup-description,\n.jGIS-property-panel .rjsf .field-description,\n.jGIS-property-panel .rjsf .help-block {\n color: var(--jp-ui-font-color2);\n margin-top: 2px;\n margin-bottom: 2px;\n}\n\n.jGIS-property-panel\n .jp-FormGroup-content\n fieldset\n .jp-inputFieldWrapper\n > input {\n box-sizing: border-box;\n border: var(--jp-border-width) solid var(--jp-border-color1);\n background-color: var(--jp-layout-color0);\n color: var(--jp-ui-font-color0);\n font-size: var(--jp-ui-font-size2);\n min-width: 0;\n outline: none !important;\n padding: 2px 7px;\n width: 100%;\n max-width: 100%;\n}\n\n.jGIS-property-panel\n .jp-FormGroup-content\n fieldset\n .jp-inputFieldWrapper\n > input#root_Color,\n.jGIS-property-panel\n .jp-FormGroup-content\n fieldset\n .jp-inputFieldWrapper\n > input#root_shadowColor {\n height: revert;\n}\n\n.jGIS-property-panel .jp-FormGroup-contentNormal {\n display: flex;\n flex-direction: column;\n align-items: inherit;\n}\n\n.jGIS-property-panel .jp-FormGroup-contentNormal .jp-FormGroup-fieldLabel {\n font-weight: bold;\n order: 1;\n margin-top: 2px;\n margin-bottom: 2px;\n text-transform: capitalize;\n}\n\n.jGIS-property-panel\n .jp-FormGroup-content\n .jp-FormGroup-contentNormal\n .jp-FormGroup-description,\n.jGIS-property-panel .field-description {\n order: 2;\n color: var(--jp-ui-font-color2);\n}\n\n.jGIS-property-panel .jp-FormGroup-content .jp-inputFieldWrapper {\n order: 3;\n}\n\n.jGIS-property-panel .jp-FormGroup-contentNormal .validationErrors,\n.jGIS-property-panel .jp-FormGroup-contentNormal .validationErrors ul {\n order: 4;\n list-style: none;\n color: var(--jp-warn-color0);\n margin: 0;\n padding: 0;\n}\n\n.jGIS-property-panel .jp-objectFieldWrapper,\n.jGIS-property-panel .jp-arrayFieldWrapper {\n padding-left: var(--jp-notebook-padding);\n border-left: solid 4px var(--jp-border-color3);\n}\n\n.jGIS-property-panel .array-item {\n border: none;\n}\n\n.jGIS-property-panel\n .jp-FormGroup-content\n .jp-FormGroup-contentNormal\n .jp-arrayFieldWrapper\n + .jp-FormGroup-description {\n display: none;\n}\n\n.jGIS-property-panel .rjsf .errors {\n color: var(--jp-warn-color0);\n}\n\n.jGIS-property-panel .rjsf .errors ul,\n.jGIS-property-panel .rjsf .validationErrors ul,\n.jGIS-property-panel .rjsf .validationErrors li,\n.jGIS-property-panel .rjsf .errors li {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.jGIS-property-panel .rjsf .jp-ArrayOperationsButton {\n display: none;\n}\n\n/* Hide additional property fields with remove buttons that should not be displayed in the form */\n.jGIS-property-panel\n .form-group:has(.jp-FormGroup-removeButton):not(:has(.jp-root)) {\n display: none;\n}\n\n.jGIS-property-panel .jp-arrayFieldWrapper .array-item legend,\n.jGIS-property-panel\n .jp-arrayFieldWrapper\n .field-array-of-array\n .field-array-of-number\n legend,\n.jGIS-property-panel\n .jp-arrayFieldWrapper\n .field-array-of-array\n .field-array-of-number\n .jp-FormGroup-fieldLabel {\n display: none;\n}\n.jGIS-property-panel\n .jp-arrayFieldWrapper\n .field-array-of-array\n .array-item\n .form-group\n .field-array-of-number {\n display: flex;\n}\n\n.jGIS-property-panel\n .jp-arrayFieldWrapper\n .field-array-of-array\n .array-item\n .form-group\n .field-array-of-number\n > div:nth-child(1) {\n order: 2;\n}\n\n.jGIS-property-panel\n .jp-arrayFieldWrapper\n .field-array-of-array\n .array-item\n .form-group\n .field-array-of-number\n > div:nth-child(2) {\n order: 1;\n}\n\n.jGIS-property-panel .required {\n font-size: var(--jp-ui-font-size3);\n color: var(--jp-warn-color1);\n font-weight: 800;\n position: absolute;\n top: 0;\n right: 0;\n display: block;\n}\n\n.jGIS-property-panel\n .jp-FormGroup-content\n fieldset\n .jp-inputFieldWrapper\n select {\n width: 100%;\n font-size: var(--jp-ui-font-size1);\n background: var(--jp-input-background);\n color: var(--jp-ui-font-color0);\n padding: calc(var(--jp-ui-font-size1) / 2);\n padding-right: var(--jp-ui-font-size3);\n background-image: url(${g});\n background-repeat: no-repeat;\n background-position: 99% center;\n background-size: 18px;\n border: var(--jp-border-width) solid var(--jp-input-border-color);\n border-radius: 0;\n outline: none;\n appearance: none;\n}\n\n.jGIS-property-panel .jp-select-wrapper select {\n background-image: unset !important;\n}\n\n.lm-TabBar-tabIcon .jgis-main-logo[fill] {\n fill: var(--jp-inverse-layout-color3);\n}\n\n.jGIS-identify-tool {\n cursor: crosshair;\n}\n\n.jgis-identify-grid-item {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-rows: auto auto;\n position: relative;\n gap: 1px;\n}\n\n.jgis-identify-grid-item-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n grid-column: span 2;\n font-weight: bold;\n font-size: var(--jp-ui-font-size1);\n padding: 2px 0;\n cursor: pointer;\n margin: 0 5px;\n line-height: 25px;\n}\n\n.jgis-identify-grid-item:not(:last-of-type)::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n width: 90%;\n border-bottom: 1px solid var(--jp-border-color0);\n}\n\n.jgis-identify-grid-body {\n display: contents;\n}\n\n.jgis-identify-grid-body span a:link {\n color: var(--jp-content-link-color);\n cursor: pointer;\n text-decoration: underline;\n}\n\n.jgis-identify-grid-body span a:visited {\n color: var(--jp-content-link-visited-color);\n cursor: pointer;\n text-decoration: underline;\n}\n\n.jgis-identify-grid-body strong {\n grid-column: 1;\n text-transform: capitalize;\n margin-left: 21px;\n}\n\n.jgis-identify-grid-body span {\n grid-column: 2;\n}\n\n.jgis-identify-grid-body:last-of-type strong:last-of-type {\n padding-bottom: 8px;\n}\n\n.jgis-scrollable {\n overflow: auto;\n height: 100%;\n}\n\n/* Style the file path text */\n.file-container {\n display: flex;\n align-items: center;\n margin-bottom: 16px;\n gap: 10px;\n}\n\n.jgis-highlight-button {\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n min-height: 28px;\n}\n\n.jgis-highlight-button:hover {\n color: var(--jp-brand-color1);\n}\n\n.jgis-highlight-button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: auto;\n}\n`,""]);const u=c},301:(n,o,e)=>{e.d(o,{A:()=>l});var r=e(758),t=e.n(r),i=e(935),a=e.n(i)()(t());a.push([n.id,".jp-gis-temporal-slider-container {\n display: flex;\n flex-direction: column;\n gap: 0.2rem;\n padding: 0.5rem;\n background-color: var(--jp-layout-color1);\n border-bottom: 1px solid var(--jp-border-color1);\n}\n\n.jp-gis-temporal-slider-container span,\n.jp-gis-temporal-slider-container label {\n font-weight: bold;\n}\n\n.jp-gis-temporal-slider-row {\n display: flex;\n gap: 0.25rem;\n justify-content: space-between;\n align-items: center;\n}\n\n.jp-gis-temporal-slider-controls {\n display: flex;\n flex-grow: 1;\n justify-content: space-around;\n}\n\n.jp-gis-temporal-slider-sub-controls {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 0.25rem;\n}\n\n.jp-gis-temporal-slider-sub-controls > input {\n width: 35px;\n}\n\nselect,\nselect option {\n text-transform: capitalize;\n}\n\n.jp-gis-temporal-slider {\n flex: 1 0 40%;\n min-width: 300px;\n}\n",""]);const l=a},365:(n,o,e)=>{e.d(o,{A:()=>l});var r=e(758),t=e.n(r),i=e(935),a=e.n(i)()(t());a.push([n.id,".jGIS-layerbrowser-FormDialog .jp-Dialog-header {\n padding: 0;\n}\n\n.jGIS-layerbrowser-FormDialog .jp-Dialog-content {\n width: calc(100% - 4rem);\n max-width: 100%;\n height: calc(100% - 2rem);\n max-height: 100%;\n}\n\n.jGIS-layerbrowser-FormDialog form {\n padding: 10px;\n}\n\n.jGIS-customlayer-form {\n height: 100%;\n overflow: auto;\n}\n\n.jGIS-layer-browser-container * {\n box-sizing: border-box;\n}\n\n.jGIS-layer-browser-container {\n display: flex;\n flex-direction: column;\n}\n\n.jGIS-layer-browser-header-container {\n position: sticky;\n top: 0;\n z-index: 40;\n background-color: var(--jp-layout-color1);\n}\n\n.jGIS-layer-browser-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 20px;\n padding: 1rem 2rem;\n}\n\n.jGIS-layer-browser-header-text {\n padding-right: 1rem;\n font-weight: bold;\n}\n\n.jGIS-layer-browser-header-search-container {\n display: flex;\n align-items: center;\n flex-grow: 1;\n position: relative;\n}\n\n.jGIS-layer-browser-header-search-icon {\n position: absolute;\n top: 50%;\n left: 0.75rem;\n transform: translateY(-50%);\n}\n\n.jGIS-layer-browser-header-search {\n box-shadow: none;\n flex: 1 1 0%;\n height: 40px;\n padding: 1rem 2rem;\n padding-left: 2.5rem;\n background-color: transparent;\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n color: var(--jp-ui-font-color1);\n}\n\n.jGIS-layer-browser-grid {\n display: grid;\n gap: 1.25rem;\n grid-template-rows: 1fr;\n grid-template-columns: repeat(3, minmax(0px, 1fr));\n padding: 1rem 2rem;\n}\n\n@media (min-width: 1400px) {\n .jGIS-layer-browser-grid {\n grid-template-columns: repeat(5, minmax(0px, 1fr));\n }\n}\n\n.jGIS-layer-browser-categories {\n display: flex;\n gap: 2rem;\n padding: 0 2rem;\n border-bottom: 2px solid var(--jp-border-color1);\n}\n\n.jGIS-layer-browser-category {\n position: relative;\n opacity: 0.7;\n padding: 4px 0 14px;\n cursor: pointer;\n text-decoration: none;\n}\n\n.jGIS-layer-browser-category::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n width: 0px;\n height: 3px;\n transition:\n background-color 300ms ease-in,\n width 300ms ease-in,\n opacity 300ms ease-in;\n background-color: transparent;\n}\n\n.jGIS-layer-browser-category.jGIS-layer-browser-category-selected::after {\n width: 100%;\n background-color: var(--jp-inverse-layout-color2);\n}\n\n.jGIS-layer-browser-category.jGIS-layer-browser-category-selected {\n opacity: 1;\n font-weight: bold;\n}\n\n.jGIS-layer-browser-tile {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n position: relative;\n margin-top: 4px;\n padding: 8px;\n transition: transform 150ms ease-out;\n cursor: pointer;\n border: 1px solid var(--jp-border-color1);\n background-color: var(--jp-layout-color1);\n border-radius: 8px;\n}\n\n.jGIS-layer-browser-custom-tile {\n border: 1px solid var(--jp-border-color2);\n background-color: var(--jp-layout-color2);\n}\n\n.jGIS-layer-browser-tile:hover {\n box-shadow: var(--jp-layout-color2);\n transform: translateY(-4px);\n background-color: var(--jp-brand-color2);\n}\n\n.jGIS-layer-browser-tile-img-container {\n /* isolation: isolate; */\n /* border: medium; */\n /* background: transparent; */\n /* padding: 0px; */\n /* width: 100%; */\n aspect-ratio: 16 / 10;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n overflow: hidden;\n border-radius: 8px;\n}\n\n.jGIS-layer-browser-img {\n /* position: absolute; */\n /* height: 100%; */\n /* object-fit: cover; */\n /* box-sizing: border-box; */\n width: 100%;\n}\n\n.jGIS-layer-browser-icon {\n padding-inline: 8px;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n overflow: hidden;\n box-sizing: border-box;\n width: 32px;\n height: 32px;\n transition:\n width 125ms ease-in-out,\n background-color 125ms ease-in-out,\n opacity 150ms ease-out;\n background-color: var(--jp-accent-color1);\n border-radius: 20px;\n}\n\n.jGIS-layer-browser-tile:not(.jGIS-layer-browser-tile:hover)\n .jGIS-layer-browser-icon {\n opacity: 0;\n}\n\n.jGIS-layer-browser-added {\n display: inline-flex;\n gap: 0.35rem;\n opacity: 1 !important;\n width: 7rem;\n color: var(--jp-ui-inverse-font-color1);\n}\n\n.jGIS-layer-browser-text-container {\n padding-inline: 4px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n gap: 8px;\n flex: 1 1 0%;\n box-sizing: border-box;\n}\n\n.jGIS-layer-browser-text-info {\n display: flex;\n flex-direction: column;\n gap: 8px;\n box-sizing: border-box;\n}\n\n.jGIS-layer-browser-text-header {\n overflow: hidden;\n font-weight: bold;\n text-transform: capitalize;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.jGIS-layer-browser-text-p {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.jGIS-layer-browser-text-source {\n overflow: hidden;\n font-size: 0.75rem;\n font-weight: lighter;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.jGIS-layer-browser-text-description {\n -webkit-line-clamp: 2;\n -moz-box-orient: vertical;\n display: -webkit-box;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.jGIS-layer-browser-text-general {\n margin: 0;\n}\n",""]);const l=a},367:(n,o,e)=>{e.d(o,{A:()=>l});var r=e(758),t=e.n(r),i=e(935),a=e.n(i)()(t());a.push([n.id,".jgis-status-bar {\n display: flex;\n justify-content: space-around;\n align-items: center;\n height: 16px;\n background-color: var(--jp-layout-color1);\n font-size: var(--jp-ui-font-size0);\n}\n\n.jgis-status-bar-item {\n flex: 0 0 content;\n}\n\n.jgis-status-bar-coords {\n min-width: 160px;\n}\n",""]);const l=a},378:(n,o,e)=>{e.d(o,{A:()=>s});var r=e(758),t=e.n(r),i=e(935),a=e.n(i),l=e(79),p=a()(t());p.i(l.A),p.push([n.id,"/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|---------------------------------------------------------------------------- */\n",""]);const s=p},432:(n,o,e)=>{var r=e(591),t=e.n(r),i=e(740),a=e.n(i),l=e(128),p=e.n(l),s=e(855),d=e.n(s),c=e(51),g=e.n(c),u=e(656),b=e.n(u),f=e(296),m={};m.styleTagTransform=b(),m.setAttributes=d(),m.insert=p().bind(null,"head"),m.domAPI=a(),m.insertStyleElement=g(),t()(f.A,m),f.A&&f.A.locals&&f.A.locals},564:(n,o,e)=>{e.d(o,{A:()=>l});var r=e(758),t=e.n(r),i=e(935),a=e.n(i)()(t());a.push([n.id,"/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|---------------------------------------------------------------------------- */\n\n.jGIS-property-panel .rjsf .jp-select-wrapper select {\n background-image: unset;\n}\n",""]);const l=a},591:n=>{var o=[];function e(n){for(var e=-1,r=0;r<o.length;r++)if(o[r].identifier===n){e=r;break}return e}function r(n,r){for(var i={},a=[],l=0;l<n.length;l++){var p=n[l],s=r.base?p[0]+r.base:p[0],d=i[s]||0,c="".concat(s," ").concat(d);i[s]=d+1;var g=e(c),u={css:p[1],media:p[2],sourceMap:p[3],supports:p[4],layer:p[5]};if(-1!==g)o[g].references++,o[g].updater(u);else{var b=t(u,r);r.byIndex=l,o.splice(l,0,{identifier:c,updater:b,references:1})}a.push(c)}return a}function t(n,o){var e=o.domAPI(o);return e.update(n),function(o){if(o){if(o.css===n.css&&o.media===n.media&&o.sourceMap===n.sourceMap&&o.supports===n.supports&&o.layer===n.layer)return;e.update(n=o)}else e.remove()}}n.exports=function(n,t){var i=r(n=n||[],t=t||{});return function(n){n=n||[];for(var a=0;a<i.length;a++){var l=e(i[a]);o[l].references--}for(var p=r(n,t),s=0;s<i.length;s++){var d=e(i[s]);0===o[d].references&&(o[d].updater(),o.splice(d,1))}i=p}}},606:(n,o,e)=>{e.d(o,{A:()=>l});var r=e(758),t=e.n(r),i=e(935),a=e.n(i)()(t());a.push([n.id,".jp-gis-filter-main {\n display: flex;\n flex-direction: column;\n padding: 10px;\n gap: 1rem;\n}\n\n.jp-gis-filter-list {\n display: flex;\n flex-direction: column;\n}\n\n.jp-gis-filter-button-container {\n display: flex;\n justify-content: space-between;\n}\n\n.jp-gis-filter-main > .jp-Dialog-button {\n width: fit-content;\n align-self: flex-end;\n}\n\n.jp-gis-logical-select {\n width: fit-content !important;\n padding: 0 8px !important;\n text-align: center;\n}\n\n.jp-gis-filter-select-container {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.jp-gis-filter-row {\n display: flex;\n justify-content: space-around;\n width: 100%;\n gap: 0.25rem;\n}\n\n.jp-gis-filter-row > select {\n text-transform: capitalize;\n padding: 0;\n text-align: center;\n}\n\n.jp-gis-filter-row > option {\n text-transform: capitalize;\n font-size: var(--jp-ui-font-size1);\n}\n\n.jp-gis-filter-row > button {\n color: var(--jp-ui-font-color0);\n background: none;\n}\n\n.jp-gis-filter-row > button:hover {\n color: var(--jp-warn-color-hover);\n}\n\n.jp-gis-filter-icon:hover {\n scale: 1.3;\n cursor: pointer;\n}\n\n.jp-gis-filter-icon > svg {\n height: 16px;\n width: 16px;\n}\n",""]);const l=a},633:(n,o,e)=>{e.d(o,{A:()=>l});var r=e(758),t=e.n(r),i=e(935),a=e.n(i)()(t());a.push([n.id,"/* -----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|---------------------------------------------------------------------------- */\n\n.jp-gis-layerPanel {\n min-height: 3em;\n}\n\n.jp-gis-layerItem,\n.jp-gis-source {\n padding: 2px 0 2px 12px;\n}\n\n.jp-gis-layerGroup {\n display: flex;\n flex-direction: column;\n}\n\n.jp-gis-layerGroupHeader {\n display: flex;\n margin-left: -2px;\n padding-bottom: 4px;\n}\n\n.jp-gis-layerGroupHeader:hover {\n cursor: pointer;\n}\n\n.jp-gis-layerGroupCollapser {\n transform: rotate(-90deg);\n margin: auto 0;\n height: 16px;\n}\n\n.jp-gis-layerGroupCollapser.jp-mod-expanded {\n transform: rotate(0deg);\n}\n\n.jp-gis-layer,\n.jp-gis-source {\n display: flex;\n flex-direction: row;\n align-items: center;\n color: var(--jp-ui-font-color1);\n}\n\n.jp-gis-layer.jp-mod-selected,\n.jp-gis-source.jp-mod-selected,\n.jp-gis-layerGroupHeader.jp-mod-selected {\n color: var(--jp-ui-inverse-font-color1);\n background: var(--jp-brand-color1);\n}\n\n.jp-gis-layer:hover:not(.jp-mod-selected),\n.jp-gis-source:hover:not(.jp-mod-selected) {\n cursor: pointer;\n background: var(--jp-layout-color2);\n}\n\n.jp-gis-layer.jp-mod-selected .jp-icon-selectable,\n.jp-gis-source.jp-mod-selected .jp-icon-selectable,\n.jp-gis-layerGroupHeader.jp-mod-selected .jp-icon-selectable {\n fill: var(--jp-ui-inverse-font-color1);\n}\n.jp-gis-layer.jp-mod-selected path,\n.jp-gis-source.jp-mod-selected path {\n fill: var(--jp-ui-inverse-font-color1);\n}\n.jp-gis-layer.jp-mod-selected button:hover,\n.jp-gis-source.jp-mod-selected button:hover {\n background: none;\n}\n\n.jp-gis-layer button,\n.jp-gis-source button {\n min-height: unset;\n min-width: unset;\n padding: unset;\n margin-right: 4px;\n}\n\n.jp-gis-layer.jp-mod-selected button:hover .jp-icon-selectable,\n.jp-gis-source.jp-mod-selected button:hover .jp-icon-selectable {\n fill: var(--jp-ui-font-color1);\n}\n\n.jp-gis-layerIcon,\n.jp-gis-sourceIcon {\n display: flex;\n align-items: center;\n}\n\n.jp-gis-layerIcon > svg,\n.jp-gis-sourceIcon > svg {\n height: 16px;\n width: 16px;\n}\n\n.jp-gis-layerTitle,\n.jp-gis-sourceTitle {\n display: flex;\n flex-grow: 1;\n align-items: center;\n}\n\n.jp-gis-layerText:focus,\n.jp-gis-sourceText:focus {\n outline: none;\n}\n\n.jp-gis-layerTitle .jp-gis-layerIcon,\n.jp-gis-sourceTitle .jp-gis-sourceIcon {\n padding-right: 4px;\n}\n\n.jp-gis-layerIcon.jp-gis-mod-hidden path,\n.jp-gis-sourceIcon.jp-gis-mod-hidden path {\n fill: var(--jp-warn-color0);\n}\n\n.jp-gis-left-panel-input {\n background-color: transparent;\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n color: var(--jp-ui-font-color1);\n flex-grow: 1;\n margin-right: 4px;\n outline: none;\n padding: 2px 7px;\n}\n\n.jp-gis-left-panel-input:focus {\n border: 1px solid var(--jp-brand-color1);\n}\n\n.jp-gis-layerText,\n.jp-gis-sourceText {\n padding: 3px 0;\n cursor: pointer;\n}\n\nli .lm-Menu-itemLabel {\n text-transform: capitalize;\n}\n\n.jp-gis-sourceInfo {\n font-size: var(--jp-ui-font-size0);\n font-style: italic;\n padding-left: 5px;\n color: var(--jp-ui-font-color2);\n}\n\n#jp-drag-indicator {\n top: calc(-1 * var(--jp-border-width) + 1px);\n left: calc(-1 * var(--jp-border-width));\n content: '';\n height: var(--jp-private-horizontal-tab-active-top-border);\n width: calc(100% + 2 * var(--jp-border-width));\n background: var(--jp-brand-color1);\n}\n",""]);const l=a},656:n=>{n.exports=function(n,o){if(o.styleSheet)o.styleSheet.cssText=n;else{for(;o.firstChild;)o.removeChild(o.firstChild);o.appendChild(document.createTextNode(n))}}},740:n=>{n.exports=function(n){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var o=n.insertStyleElement(n);return{update:function(e){!function(n,o,e){var r="";e.supports&&(r+="@supports (".concat(e.supports,") {")),e.media&&(r+="@media ".concat(e.media," {"));var t=void 0!==e.layer;t&&(r+="@layer".concat(e.layer.length>0?" ".concat(e.layer):""," {")),r+=e.css,t&&(r+="}"),e.media&&(r+="}"),e.supports&&(r+="}");var i=e.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),o.styleTagTransform(r,n,o.options)}(o,n,e)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(o)}}}},758:n=>{n.exports=function(n){return n[1]}},781:(n,o,e)=>{e.d(o,{A:()=>l});var r=e(758),t=e.n(r),i=e(935),a=e.n(i)()(t());a.push([n.id,"select,\nselect option {\n text-transform: capitalize;\n}\n\n.jp-gis-symbology-dialog .jp-Dialog-header {\n font-weight: bold;\n}\n\n.jp-gis-symbology-dialog .jp-Dialog-content {\n width: calc(80% - 4rem);\n max-width: 80%;\n height: fit-content;\n max-height: 80%;\n}\n\n.jp-gis-symbology-row {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n gap: 2rem;\n}\n\n.jp-gis-symbology-row label {\n font-size: var(--jp-ui-font-size2);\n flex: 0 1 20%;\n}\n\n.jp-gis-symbology-row > .jp-select-wrapper,\n.jp-gis-symbology-row > .jp-mod-styled {\n flex: 1 0 50%;\n max-width: 50%;\n}\n\n.jp-gis-color-ramp-div {\n display: flex;\n flex: 1 1 50%;\n max-width: 50%;\n justify-content: space-between;\n align-items: baseline;\n}\n\n.jp-gis-color-ramp-div > .jp-select-wrapper {\n flex: 1 0 40%;\n}\n\n.jp-gis-color-ramp-div:last-child {\n flex-shrink: 0;\n}\n\n.jp-gis-color-ramp-div > input {\n max-width: 25%;\n}\n\n.jp-gis-band-container {\n display: flex;\n flex-direction: column;\n gap: 13px;\n}\n\n.jp-gis-layer-symbology-container {\n display: flex;\n flex-direction: column;\n gap: 13px;\n border-top: 1px solid var(--jp-border-color2);\n padding-top: 8px;\n}\n\n.jp-gis-layer-symbology-container .jp-select-wrapper {\n margin-bottom: unset;\n}\n\n.jp-gis-color-ramp-container {\n display: flex;\n flex-direction: column;\n gap: 13px;\n}\n\n.jp-gis-stop-container {\n display: flex;\n flex-direction: column;\n gap: 0.1rem;\n}\n\n.jp-gis-stop-labels {\n display: flex;\n font-weight: bold;\n font-size: var(--jp-ui-font-size1);\n gap: 0.25rem;\n padding-bottom: 0.25rem;\n}\n\n.jp-gis-stop-labels > span {\n flex: 0 0 18%;\n}\n\n.jp-gis-color-row {\n display: flex;\n width: 100%;\n gap: 0.25rem;\n height: 32px;\n}\n\n.jp-gis-color-row-value-input {\n flex: 0 1 18%;\n min-width: 0px;\n}\n\n.jp-gis-color-row-output-input {\n flex-grow: 1;\n}\n\n.jp-gis-color-row > button {\n color: var(--jp-ui-font-color0);\n background: none;\n padding-right: 0px;\n}\n\n.jp-gis-symbology-button-container {\n padding-top: 0.5rem;\n}\n\n.jp-gis-band-info-loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 2rem;\n margin: auto;\n}\n\n.jp-gis-loading-spinner {\n animation: spin 4s linear infinite;\n font-size: 1.5rem;\n padding: 1rem 0;\n margin: auto;\n}\n\n.jp-gis-band-info-loading-container > span {\n font-size: 1rem;\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.jp-gis-color-ramp-dropdown {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n position: absolute;\n overflow-x: hidden;\n overflow-y: auto;\n visibility: hidden;\n z-index: 40;\n flex: 1 1 auto;\n width: 97%;\n max-height: 20rem;\n background: var(--jp-input-background);\n padding-left: 8px;\n border: var(--jp-border-width) solid var(--jp-input-border-color);\n border-radius: 0;\n outline: none;\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n}\n\n.jp-gis-open {\n visibility: visible;\n}\n\n.jp-gis-color-ramp-entry {\n display: flex;\n align-items: center;\n font-size: var(--jp-ui-font-size2);\n color: var(--jp-ui-font-color0);\n appearance: none;\n text-transform: capitalize;\n cursor: pointer;\n -webkit-appearance: none;\n -moz-appearance: none;\n}\n\n.jp-gis-color-label {\n color: white;\n position: absolute;\n transition: transform 0.3s ease;\n}\n\n.jp-gis-color-ramp-entry:hover .jp-gis-color-label {\n transform: scale(1.2);\n}\n\n.jp-gis-color-canvas {\n margin: 0 -7px;\n border-radius: 4px;\n width: 100%;\n max-height: 38px;\n}\n\n.jp-gis-color-canvas-display {\n width: 100%;\n height: 30px;\n visibility: initial;\n border-radius: var(--jp-border-radius);\n}\n\n.jp-Dialog-content:has(.jp-gis-heatmap),\n.jp-Dialog-body:has(.jp-gis-heatmap) {\n overflow: visible;\n}\n\n.jp-gis-canvas-button-wrapper {\n flex: 1 0 50%;\n max-width: 50%;\n position: relative;\n}\n\n#jp-gis-canvas-button.jp-gis-canvas-button {\n visibility: hidden;\n margin: 0;\n padding: 0 1px 0 0;\n width: 100%;\n}\n",""]);const l=a},855:(n,o,e)=>{n.exports=function(n){var o=e.nc;o&&n.setAttribute("nonce",o)}},935:n=>{n.exports=function(n){var o=[];return o.toString=function(){return this.map((function(o){var e="",r=void 0!==o[5];return o[4]&&(e+="@supports (".concat(o[4],") {")),o[2]&&(e+="@media ".concat(o[2]," {")),r&&(e+="@layer".concat(o[5].length>0?" ".concat(o[5]):""," {")),e+=n(o),r&&(e+="}"),o[2]&&(e+="}"),o[4]&&(e+="}"),e})).join("")},o.i=function(n,e,r,t,i){"string"==typeof n&&(n=[[null,n,void 0]]);var a={};if(r)for(var l=0;l<this.length;l++){var p=this[l][0];null!=p&&(a[p]=!0)}for(var s=0;s<n.length;s++){var d=[].concat(n[s]);r&&a[d[0]]||(void 0!==i&&(void 0===d[5]||(d[1]="@layer".concat(d[5].length>0?" ".concat(d[5]):""," {").concat(d[1],"}")),d[5]=i),e&&(d[2]?(d[1]="@media ".concat(d[2]," {").concat(d[1],"}"),d[2]=e):d[2]=e),t&&(d[4]?(d[1]="@supports (".concat(d[4],") {").concat(d[1],"}"),d[4]=t):d[4]="".concat(t)),o.push(d))}},o}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_jupytergis_jupytergis_lab=self.webpackChunk_jupytergis_jupytergis_lab||[]).push([[484],{484:(e,t,o)=>{o.r(t),o.d(t,{default:()=>k});var n=o(152),a=o(558),r=o(118),s=o(273),d=o(226),i=o(801),l=o(981),m=o(256),c=o(903),u=o(551),g=o(999),p=o(266),y=o(263),I=o(230),h=o(173);class M extends h.JupyterYModel{}class j extends m.Panel{constructor(e){super(),this._buildWidget=e=>{const{commands:t,model:o,externalCommands:a,tracker:r}=e,s=new n.JupyterGISPanel({model:o,commandRegistry:t});let d;o.filePath&&(d=new n.ToolbarWidget({commands:t,model:o,externalCommands:(null==a?void 0:a.getCommands())||[]})),this._jgisWidget=new n.JupyterGISOutputWidget({model:o,content:s,toolbar:d}),this.addWidget(this._jgisWidget),null==r||r.add(this._jgisWidget)};const{model:t}=e;this.addClass("jupytergis-notebook-widget"),this._buildWidget(e),t.sharedModel.changed.connect(((t,o)=>{o.stateChange&&o.stateChange.forEach((t=>{var o;"path"===t.name&&(null===(o=this.layout)||void 0===o||o.removeWidget(this._jgisWidget),this._jgisWidget.dispose(),this._buildWidget(e))}))}))}get jgisWidget(){return this._jgisWidget}}const b={id:"jupytergis:yjswidget-plugin",autoStart:!0,optional:[a.IJGISExternalCommandRegistryToken,a.IJupyterGISDocTracker,h.IJupyterYWidgetManager,c.ICollaborativeDrive],activate:(e,t,o,n,r)=>{n?n.registerWidget("@jupytergis:widget",class extends M{async initialize(t){const{path:o,format:n,contentType:s}=t,d=n;if(!r)throw(0,u.showErrorMessage)("Error using the JupyterGIS Python API","You cannot use the JupyterGIS Python API without a collaborative drive. You need to install a package providing collaboration features (e.g. jupyter-collaboration)."),new Error("Failed to create the YDoc without a collaborative drive");let i="";const l=e.shell.currentWidget;(l instanceof y.NotebookPanel||l instanceof g.ConsolePanel)&&(i=l.sessionContext.path);let m="";if(o){m=p.PathExt.join(p.PathExt.dirname(i),o);try{await e.serviceManager.contents.get(m)}catch(t){await e.serviceManager.contents.save(m,{content:btoa("{}"),format:"base64"})}}else m=p.PathExt.join(p.PathExt.dirname(i),"unsaved_project");const c=r.sharedModelFactory.createNew({path:m,format:d,contentType:s,collaborative:!0});this.jupyterGISModel=new a.JupyterGISModel({sharedModel:c}),this.jupyterGISModel.contentsManager=e.serviceManager.contents,this.jupyterGISModel.filePath=m,this.ydoc=this.jupyterGISModel.sharedModel.ydoc,this.sharedModel=new h.JupyterYDoc(t,this.ydoc)}},class{constructor(n,a){this.yModel=n,this.node=a;const r=new j({commands:e.commands,model:n.jupyterGISModel,externalCommands:t,tracker:o});this._jgisWidget=r.jgisWidget,I.MessageLoop.sendMessage(r,m.Widget.Msg.BeforeAttach),a.appendChild(r.node),I.MessageLoop.sendMessage(r,m.Widget.Msg.AfterAttach)}dispose(){this._jgisWidget.dispose()}}):console.error("Missing IJupyterYWidgetManager token!")}},v="jupytergis",k=[{id:"jupytergis:lab:main-menu",autoStart:!0,requires:[a.IJupyterGISDocTracker,a.IJGISFormSchemaRegistryToken,a.IJGISLayerBrowserRegistryToken,i.IStateDB],optional:[d.IMainMenu,l.ITranslator,s.ICompletionProviderManager],activate:(e,t,o,a,r,s,d,i)=>{console.log("jupytergis:lab:main-menu is activated!"),d=null!=d?d:l.nullTranslator;(0,n.createDefaultLayerRegistry)(a),n.GlobalStateDbManager.getInstance().initialize(r),(0,n.addCommands)(e,t,d,o,a,r,i),e.contextMenu.addItem({selector:".jp-gis-source.jp-gis-sourceUnused",rank:1,command:n.CommandIDs.removeSource}),e.contextMenu.addItem({selector:".jp-gis-source",rank:1,command:n.CommandIDs.renameSource}),e.contextMenu.addItem({command:n.CommandIDs.symbology,selector:".jp-gis-layerItem",rank:1}),e.contextMenu.addItem({type:"separator",selector:".jp-gis-layerPanel",rank:1}),e.contextMenu.addItem({command:n.CommandIDs.removeLayer,selector:".jp-gis-layerItem",rank:2}),e.contextMenu.addItem({command:n.CommandIDs.renameLayer,selector:".jp-gis-layerItem",rank:2}),e.contextMenu.addItem({command:n.CommandIDs.zoomToLayer,selector:".jp-gis-layerItem",rank:2});const c=new m.Menu({commands:e.commands});c.title.label=d.load("jupyterlab").__("Download"),c.id="jp-gis-contextmenu-download",c.addItem({command:n.CommandIDs.downloadGeoJSON}),e.contextMenu.addItem({type:"submenu",selector:".jp-gis-layerItem",rank:2,submenu:c});const u=new m.Menu({commands:e.commands});u.title.label=d.load("jupyterlab").__("Processing"),u.id="jp-gis-contextmenu-processing",u.addItem({command:n.CommandIDs.buffer}),u.addItem({command:n.CommandIDs.dissolve}),e.contextMenu.addItem({type:"submenu",selector:".jp-gis-layerItem",rank:2,submenu:u});const g=new m.Menu({commands:e.commands});g.title.label=d.load("jupyterlab").__("Move Selected Layers to Group"),g.id="jp-gis-contextmenu-movelayer",e.contextMenu.addItem({type:"submenu",selector:".jp-gis-layerItem",rank:2,submenu:g}),e.contextMenu.opened.connect((()=>function(e,t){var o,a,r,s;if(!(null===(o=t.currentWidget)||void 0===o?void 0:o.model))return;const d=null===(a=t.currentWidget)||void 0===a?void 0:a.model,i=null!==(s=null===(r=e.menu.items.find((e=>{var t;return"submenu"===e.type&&"jp-gis-contextmenu-movelayer"===(null===(t=e.submenu)||void 0===t?void 0:t.id)})))||void 0===r?void 0:r.submenu)&&void 0!==s?s:null;if(!i)return;i.clearItems();const l=function e(t){const o=[];for(const n of t)if("string"!=typeof n&&n.layers){o.push(n.name);const t=e(n.layers);o.push(...t)}return o}(d.getLayerTree());i.addItem({command:n.CommandIDs.moveLayersToGroup,args:{label:""}}),l.forEach((e=>{i.addItem({command:n.CommandIDs.moveLayersToGroup,args:{label:e}})})),i.addItem({command:n.CommandIDs.moveLayerToNewGroup})}(e.contextMenu,t))),e.contextMenu.addItem({command:n.CommandIDs.removeGroup,selector:".jp-gis-layerGroupHeader",rank:2}),e.contextMenu.addItem({command:n.CommandIDs.renameGroup,selector:".jp-gis-layerGroupHeader",rank:2}),e.contextMenu.addItem({type:"separator",selector:".jp-gis-layerPanel",rank:2});const p=new m.Menu({commands:e.commands});p.title.label=d.load("jupyterlab").__("Add Layer"),p.id="jp-gis-contextmenu-addLayer",p.addItem({type:"submenu",submenu:(0,n.rasterSubMenu)(e.commands)}),p.addItem({type:"submenu",submenu:(0,n.vectorSubMenu)(e.commands)}),e.contextMenu.addItem({type:"submenu",selector:".jp-gis-layerPanel",rank:3,submenu:p}),s&&function(e,t){e.editMenu.undoers.redo.add({id:n.CommandIDs.redo,isEnabled:t}),e.editMenu.undoers.undo.add({id:n.CommandIDs.undo,isEnabled:t})}(s,(()=>null!==t.currentWidget&&t.currentWidget===e.shell.currentWidget))}},{id:"jupytergis:lab:controlpanel",autoStart:!0,requires:[r.ILayoutRestorer,a.IJupyterGISDocTracker,a.IJGISFormSchemaRegistryToken,i.IStateDB,a.IAnnotationToken],activate:(e,t,o,a,r,s)=>{const d=new n.ControlPanelModel({tracker:o}),i=new n.LeftPanelWidget({model:d,tracker:o,state:r,commands:e.commands});i.id="jupytergis::leftControlPanel",i.title.caption="JupyterGIS Control Panel",i.title.icon=n.logoMiniIcon;const l=new n.RightPanelWidget({model:d,tracker:o,formSchemaRegistry:a,annotationModel:s});l.id="jupytergis::rightControlPanel",l.title.caption="JupyterGIS Control Panel",l.title.icon=n.logoMiniIcon,t&&(t.add(i,v),t.add(l,v)),e.shell.add(i,"left",{rank:2e3}),e.shell.add(l,"right",{rank:2e3})}},b]}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var _JUPYTERLAB;(()=>{"use strict";var e,r,t,n,a,o,i,u,l,s,f,d,p,c,h,v,b,g,y,m,j,w,S,k={450:(e,r,t)=>{var n={"./index":()=>t.e(484).then((()=>()=>t(484))),"./extension":()=>t.e(484).then((()=>()=>t(484))),"./style":()=>t.e(432).then((()=>()=>t(432)))},a=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),t.R=void 0,r),o=(e,r)=>{if(t.S){var n="default",a=t.S[n];if(a&&a!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)}};t.d(r,{get:()=>a,init:()=>o})}},E={};function P(e){var r=E[e];if(void 0!==r)return r.exports;var t=E[e]={id:e,exports:{}};return k[e](t,t.exports,P),t.exports}P.m=k,P.c=E,P.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return P.d(r,{a:r}),r},P.d=(e,r)=>{for(var t in r)P.o(r,t)&&!P.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},P.f={},P.e=e=>Promise.all(Object.keys(P.f).reduce(((r,t)=>(P.f[t](e,r),r)),[])),P.u=e=>e+"."+{234:"c2d7ed33ae9ca2244b0d",432:"c9ac1551a28b0189d4b3",484:"1e1e78276dfe49d0de97"}[e]+".js?v="+{234:"c2d7ed33ae9ca2244b0d",432:"c9ac1551a28b0189d4b3",484:"1e1e78276dfe49d0de97"}[e],P.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),P.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="@jupytergis/jupytergis-lab:",P.l=(t,n,a,o)=>{if(e[t])e[t].push(n);else{var i,u;if(void 0!==a)for(var l=document.getElementsByTagName("script"),s=0;s<l.length;s++){var f=l[s];if(f.getAttribute("src")==t||f.getAttribute("data-webpack")==r+a){i=f;break}}i||(u=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,P.nc&&i.setAttribute("nonce",P.nc),i.setAttribute("data-webpack",r+a),i.src=t),e[t]=[n];var d=(r,n)=>{i.onerror=i.onload=null,clearTimeout(p);var a=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach((e=>e(n))),r)return r(n)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),u&&document.head.appendChild(i)}},P.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{P.S={};var e={},r={};P.I=(t,n)=>{n||(n=[]);var a=r[t];if(a||(a=r[t]={}),!(n.indexOf(a)>=0)){if(n.push(a),e[t])return e[t];P.o(P.S,t)||(P.S[t]={});var o=P.S[t],i="@jupytergis/jupytergis-lab",u=(e,r,t,n)=>{var a=o[e]=o[e]||{},u=a[r];(!u||!u.loaded&&(!n!=!u.eager?n:i>u.from))&&(a[r]={get:t,from:i,eager:!!n})},l=[];return"default"===t&&(u("@jupyter/collaborative-drive","3.1.2",(()=>P.e(234).then((()=>()=>P(234))))),u("@jupytergis/jupytergis-lab","0.5.0",(()=>P.e(484).then((()=>()=>P(484)))))),e[t]=l.length?Promise.all(l).then((()=>e[t]=1)):1}}})(),(()=>{var e;P.g.importScripts&&(e=P.g.location+"");var r=P.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=t[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),P.p=e})(),t=e=>{var r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=t[1]?r(t[1]):[];return t[2]&&(n.length++,n.push.apply(n,r(t[2]))),t[3]&&(n.push([]),n.push.apply(n,r(t[3]))),n},n=(e,r)=>{e=t(e),r=t(r);for(var n=0;;){if(n>=e.length)return n<r.length&&"u"!=(typeof r[n])[0];var a=e[n],o=(typeof a)[0];if(n>=r.length)return"u"==o;var i=r[n],u=(typeof i)[0];if(o!=u)return"o"==o&&"n"==u||"s"==u||"u"==o;if("o"!=o&&"u"!=o&&a!=i)return a<i;n++}},a=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var n=1,o=1;o<e.length;o++)n--,t+="u"==(typeof(u=e[o]))[0]?"-":(n>0?".":"")+(n=2,u);return t}var i=[];for(o=1;o<e.length;o++){var u=e[o];i.push(0===u?"not("+l()+")":1===u?"("+l()+" || "+l()+")":2===u?i.pop()+" "+i.pop():a(u))}return l();function l(){return i.pop().replace(/^\((.+)\)$/,"$1")}},o=(e,r)=>{if(0 in e){r=t(r);var n=e[0],a=n<0;a&&(n=-n-1);for(var i=0,u=1,l=!0;;u++,i++){var s,f,d=u<e.length?(typeof e[u])[0]:"";if(i>=r.length||"o"==(f=(typeof(s=r[i]))[0]))return!l||("u"==d?u>n&&!a:""==d!=a);if("u"==f){if(!l||"u"!=d)return!1}else if(l)if(d==f)if(u<=n){if(s!=e[u])return!1}else{if(a?s>e[u]:s<e[u])return!1;s!=e[u]&&(l=!1)}else if("s"!=d&&"n"!=d){if(a||u<=n)return!1;l=!1,u--}else{if(u<=n||f<d!=a)return!1;l=!1}else"s"!=d&&"n"!=d&&(l=!1,u--)}}var p=[],c=p.pop.bind(p);for(i=1;i<e.length;i++){var h=e[i];p.push(1==h?c()|c():2==h?c()&c():h?o(h,r):!c())}return!!c()},i=(e,r)=>e&&P.o(e,r),u=e=>(e.loaded=1,e.get()),l=e=>Object.keys(e).reduce(((r,t)=>(e[t].eager&&(r[t]=e[t]),r)),{}),s=(e,r,t,a)=>{var i=a?l(e[r]):e[r];return(r=Object.keys(i).reduce(((e,r)=>!o(t,r)||e&&!n(e,r)?e:r),0))&&i[r]},f=(e,r,t)=>{var a=t?l(e[r]):e[r];return Object.keys(a).reduce(((e,r)=>!e||!a[e].loaded&&n(e,r)?r:e),0)},d=(e,r,t,n)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+a(n)+")",p=(e,r,t,n,o)=>{var i=e[t];return"No satisfying version ("+a(n)+")"+(o?" for eager consumption":"")+" of shared module "+t+" found in shared scope "+r+".\nAvailable versions: "+Object.keys(i).map((e=>e+" from "+i[e].from)).join(", ")},c=e=>{throw new Error(e)},h=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},b=(e,r,t)=>t?t():((e,r)=>c("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),g=(v=e=>function(r,t,n,a,o){var i=P.I(r);return i&&i.then&&!n?i.then(e.bind(e,r,P.S[r],t,!1,a,o)):e(r,P.S[r],t,n,a,o)})(((e,r,t,n,a,o)=>{if(!i(r,t))return b(e,t,o);var l=s(r,t,a,n);return l?u(l):o?o():void c(p(r,e,t,a,n))})),y=v(((e,r,t,n,a,l)=>{if(!i(r,t))return b(e,t,l);var s=f(r,t,n);return o(a,s)||h(d(r,t,s,a)),u(r[t][s])})),m={},j={118:()=>y("default","@jupyterlab/application",!1,[1,4,4,2]),152:()=>y("default","@jupytergis/base",!1,[2,0,5,0]),173:()=>y("default","yjs-widgets",!1,[2,0,4]),226:()=>y("default","@jupyterlab/mainmenu",!1,[1,4,4,2]),230:()=>y("default","@lumino/messaging",!1,[1,2,0,0]),256:()=>y("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",0]),263:()=>y("default","@jupyterlab/notebook",!1,[1,4,4,2]),266:()=>y("default","@jupyterlab/coreutils",!1,[1,6,4,2]),273:()=>y("default","@jupyterlab/completer",!1,[1,4,4,2]),551:()=>y("default","@jupyterlab/apputils",!1,[1,4,5,2]),558:()=>y("default","@jupytergis/schema",!1,[2,0,5,0]),801:()=>y("default","@jupyterlab/statedb",!1,[1,4,4,2]),903:()=>g("default","@jupyter/collaborative-drive",!1,[1,3,0,0],(()=>P.e(234).then((()=>()=>P(234))))),981:()=>y("default","@jupyterlab/translation",!1,[1,4,4,2]),999:()=>y("default","@jupyterlab/console",!1,[1,4,4,2]),262:()=>y("default","@lumino/coreutils",!1,[1,2,0,0])},w={234:[262],484:[118,152,173,226,230,256,263,266,273,551,558,801,903,981,999]},S={},P.f.consumes=(e,r)=>{P.o(w,e)&&w[e].forEach((e=>{if(P.o(m,e))return r.push(m[e]);if(!S[e]){var t=r=>{m[e]=0,P.m[e]=t=>{delete P.c[e],t.exports=r()}};S[e]=!0;var n=r=>{delete m[e],P.m[e]=t=>{throw delete P.c[e],r}};try{var a=j[e]();a.then?r.push(m[e]=a.then(t).catch(n)):t(a)}catch(e){n(e)}}}))},(()=>{P.b=document.baseURI||self.location.href;var e={738:0};P.f.j=(r,t)=>{var n=P.o(e,r)?e[r]:void 0;if(0!==n)if(n)t.push(n[2]);else{var a=new Promise(((t,a)=>n=e[r]=[t,a]));t.push(n[2]=a);var o=P.p+P.u(r),i=new Error;P.l(o,(t=>{if(P.o(e,r)&&(0!==(n=e[r])&&(e[r]=void 0),n)){var a=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+a+": "+o+")",i.name="ChunkLoadError",i.type=a,i.request=o,n[1](i)}}),"chunk-"+r,r)}};var r=(r,t)=>{var n,a,[o,i,u]=t,l=0;if(o.some((r=>0!==e[r]))){for(n in i)P.o(i,n)&&(P.m[n]=i[n]);u&&u(P)}for(r&&r(t);l<o.length;l++)a=o[l],P.o(e,a)&&e[a]&&e[a][0](),e[a]=0},t=self.webpackChunk_jupytergis_jupytergis_lab=self.webpackChunk_jupytergis_jupytergis_lab||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),P.nc=void 0;var _=P(450);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["@jupytergis/jupytergis-lab"]=_})();
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"packages": [
|
|
3
3
|
{
|
|
4
4
|
"name": "@jupyter/collaborative-drive",
|
|
5
|
-
"versionInfo": "3.1.
|
|
5
|
+
"versionInfo": "3.1.2",
|
|
6
6
|
"licenseId": "BSD-3-Clause",
|
|
7
7
|
"extractedText": ""
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
"name": "@jupytergis/base",
|
|
11
|
-
"versionInfo": "0.
|
|
11
|
+
"versionInfo": "0.5.0",
|
|
12
12
|
"licenseId": "BSD-3-Clause",
|
|
13
13
|
"extractedText": ""
|
|
14
14
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jupytergis_lab
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Dynamic: Keywords
|
|
5
5
|
Summary: JupyterGIS Lab extension.
|
|
6
6
|
Project-URL: Homepage, https://github.com/geojupyter/jupytergis
|
|
@@ -56,6 +56,7 @@ Requires-Dist: jupyter-ydoc<4,>=2
|
|
|
56
56
|
Requires-Dist: jupytergis-core<1,>=0.1.0
|
|
57
57
|
Requires-Dist: pydantic<3,>=2
|
|
58
58
|
Requires-Dist: requests
|
|
59
|
+
Requires-Dist: sidecar>=0.7.0
|
|
59
60
|
Requires-Dist: yjs-widgets<0.5,>=0.4
|
|
60
61
|
Requires-Dist: ypywidgets<0.10.0,>=0.9.0
|
|
61
62
|
Description-Content-Type: text/markdown
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
jupytergis_lab/__init__.py,sha256=QRBE8GcqAQSZk4d8oB6dMgU0jPXZIU1vuhjLAixF_y4,579
|
|
2
|
+
jupytergis_lab/_version.py,sha256=5mZtFlP8jOukh3f-P2E13kgXbd530p5BV0VWJJCdLIs,171
|
|
3
|
+
jupytergis_lab/notebook/__init__.py,sha256=YFLWhp-9CMd5HIXVEVlFwzBiS7sZKvHUArEEz8xhP6I,46
|
|
4
|
+
jupytergis_lab/notebook/explore.py,sha256=_tRCdpYwVFulfkJIYOBY7yAU5gTPPRb8jnoDrfuZN7o,4368
|
|
5
|
+
jupytergis_lab/notebook/gis_document.py,sha256=T32In4JKbLJSNiS2yRU5bpwpwpuZjb66nCTgpgC6va0,29172
|
|
6
|
+
jupytergis_lab/notebook/utils.py,sha256=x9HkieWVS35Q8HtaQHDH2AKU0lTMKQbRZDpJZ5Hfk9Y,348
|
|
7
|
+
jupytergis_lab/notebook/y_connector.py,sha256=KkkKDFvwY6ZWQ-1tubmiS9ib4LsmxYKS0bx0pPJoPGU,1029
|
|
8
|
+
jupytergis_lab/notebook/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
jupytergis_lab/notebook/tests/test_api.py,sha256=4aecq70FINp1SLHF6fpWlnkWwprNKYGKpTk1UTpslO4,1465
|
|
10
|
+
jupytergis_lab-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/package.json,sha256=QNwLO3PPyAcDl1KowNad6I0rcT1B8m_V0vaGC32hngU,4105
|
|
11
|
+
jupytergis_lab-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/234.c2d7ed33ae9ca2244b0d.js,sha256=wtftM66coiRLDYAUn7Z5LURKJAkNR0xn7TKRdUkwS18,349
|
|
12
|
+
jupytergis_lab-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/432.c9ac1551a28b0189d4b3.js,sha256=yawVUaKLAYnUs8KNLSYqbbG81LmfBMLZw4GSwrV0ff0,46209
|
|
13
|
+
jupytergis_lab-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/484.1e1e78276dfe49d0de97.js,sha256=Hh54J23-SdDel7UjMAuiT9ofzXcNdCBORKbxpqS01lU,7174
|
|
14
|
+
jupytergis_lab-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/remoteEntry.5cdf3f10821b0262016a.js,sha256=XN8_EIIbAmIBam3LDaxx17qqgC33-HujLiQQBKTq_Ok,8290
|
|
15
|
+
jupytergis_lab-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/style.js,sha256=pog22wM5nCMkQO0YWJ94eDKAF1OlO1ZvCDGi_rO335U,169
|
|
16
|
+
jupytergis_lab-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/static/third-party-licenses.json,sha256=SIu7OvLg7i04k6JN-fmjLDcJ7o1BsNrHoj5cyMZ_GhA,4230
|
|
17
|
+
jupytergis_lab-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-lab/install.json,sha256=t_TWPC6MDZMygRm9ujZ63nap014Sb5htaW5QEOjrmgI,189
|
|
18
|
+
jupytergis_lab-0.5.0.dist-info/METADATA,sha256=rVvlAO1e4GcUVF8W-pmWGdK8dKxjx7EO-9aXRTteios,3151
|
|
19
|
+
jupytergis_lab-0.5.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
20
|
+
jupytergis_lab-0.5.0.dist-info/licenses/LICENSE,sha256=VblFgHMsSan_kg15lNsI-YHIqUOUNXGptcoaX2yDDhU,1531
|
|
21
|
+
jupytergis_lab-0.5.0.dist-info/RECORD,,
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
from ._schema.project.jgis import * # noqa
|
|
2
|
-
|
|
3
|
-
from ._schema.project.layers.rasterlayer import IRasterLayer # noqa
|
|
4
|
-
from ._schema.project.layers.vectorlayer import IVectorLayer # noqa
|
|
5
|
-
from ._schema.project.layers.vectorTileLayer import IVectorTileLayer # noqa
|
|
6
|
-
from ._schema.project.layers.hillshadeLayer import IHillshadeLayer # noqa
|
|
7
|
-
from ._schema.project.layers.imageLayer import IImageLayer # noqa
|
|
8
|
-
from ._schema.project.layers.webGlLayer import IWebGlLayer # noqa
|
|
9
|
-
from ._schema.project.layers.heatmapLayer import IHeatmapLayer # noqa
|
|
10
|
-
|
|
11
|
-
from ._schema.project.sources.vectortilesource import IVectorTileSource # noqa
|
|
12
|
-
from ._schema.project.sources.rastersource import IRasterSource # noqa
|
|
13
|
-
from ._schema.geojsonsource import IGeoJSONSource # noqa
|
|
14
|
-
from ._schema.project.sources.videoSource import IVideoSource # noqa
|
|
15
|
-
from ._schema.project.sources.imageSource import IImageSource # noqa
|
|
16
|
-
from ._schema.project.sources.geoTiffSource import IGeoTiffSource # noqa
|
|
17
|
-
from ._schema.project.sources.rasterDemSource import IRasterDemSource # noqa
|
|
18
|
-
|
|
19
|
-
from ._schema.processing.buffer import IBuffer # noqa
|
|
20
|
-
|
|
21
|
-
from ._schema.export.exportGeojson import IExportGeoJSON # noqa
|
|
22
|
-
from ._schema.export.exportGeotiff import IExportGeoTIFF # noqa
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# generated by datamodel-codegen:
|
|
2
|
-
# filename: export/exportGeojson.json
|
|
3
|
-
# timestamp: 2025-04-08T07:03:18+00:00
|
|
4
|
-
|
|
5
|
-
from __future__ import annotations
|
|
6
|
-
|
|
7
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class IExportGeoJSON(BaseModel):
|
|
11
|
-
model_config = ConfigDict(
|
|
12
|
-
extra='forbid',
|
|
13
|
-
)
|
|
14
|
-
exportFileName: str = Field(
|
|
15
|
-
...,
|
|
16
|
-
description='The name of the exported GeoJSON file.',
|
|
17
|
-
title='GeoJSON File Name',
|
|
18
|
-
)
|