jupytergis-lab 0.4.1__tar.gz → 0.4.3__tar.gz
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-0.4.1 → jupytergis_lab-0.4.3}/PKG-INFO +1 -1
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/_version.py +1 -1
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/labextension/package.json +4 -4
- jupytergis_lab-0.4.3/jupytergis_lab/labextension/static/432.febf6149ed25e4ffd72b.js +1 -0
- jupytergis_lab-0.4.3/jupytergis_lab/labextension/static/484.7ce50cb2a1c1d2537baa.js +1 -0
- jupytergis_lab-0.4.3/jupytergis_lab/labextension/static/remoteEntry.0d5125e69d7ff6400cc3.js +1 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/labextension/static/third-party-licenses.json +2 -2
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/notebook/gis_document.py +77 -43
- jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/__init__.py +22 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/notebook/objects/_schema/__init__.py +1 -1
- jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/export/__init__.py +3 -0
- jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/export/exportGeojson.py +18 -0
- jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/export/exportGeotiff.py +28 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/notebook/objects/_schema/geojson.py +1 -1
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/notebook/objects/_schema/geojsonsource.py +1 -1
- jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/processing/__init__.py +3 -0
- jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/processing/buffer.py +23 -0
- jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/processing/dissolve.py +24 -0
- jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/__init__.py +3 -0
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project}/jgis.py +2 -2
- jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/layers/__init__.py +3 -0
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/layers}/heatmapLayer.py +2 -2
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/layers}/hillshadeLayer.py +2 -2
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/layers}/imageLayer.py +2 -2
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/layers}/rasterlayer.py +2 -2
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/layers}/vectorTileLayer.py +2 -2
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/layers}/vectorlayer.py +2 -2
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/layers}/webGlLayer.py +2 -2
- jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/sources/__init__.py +3 -0
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/sources}/geoTiffSource.py +5 -2
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/sources}/imageSource.py +6 -3
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/sources}/rasterDemSource.py +5 -2
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/sources}/rastersource.py +5 -2
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/sources}/shapefileSource.py +2 -2
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/sources}/vectortilesource.py +2 -2
- {jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/_schema → jupytergis_lab-0.4.3/jupytergis_lab/notebook/objects/_schema/project/sources}/videoSource.py +2 -2
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/notebook/tests/test_api.py +11 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/notebook/y_connector.py +3 -2
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/lib/index.js +32 -1
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/package.json +3 -3
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/pyproject.toml +3 -3
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/src/index.ts +39 -2
- jupytergis_lab-0.4.3/tsconfig.tsbuildinfo +1 -0
- jupytergis_lab-0.4.1/jupytergis_lab/labextension/static/432.d7ed0878eaa23b81e79c.js +0 -1
- jupytergis_lab-0.4.1/jupytergis_lab/labextension/static/484.c5b0d12b4b3b6fd6544a.js +0 -1
- jupytergis_lab-0.4.1/jupytergis_lab/labextension/static/remoteEntry.d33f261eb14f21c8d4a0.js +0 -1
- jupytergis_lab-0.4.1/jupytergis_lab/notebook/objects/__init__.py +0 -17
- jupytergis_lab-0.4.1/tsconfig.tsbuildinfo +0 -1
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/.gitignore +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/.prettierignore +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/LICENSE +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/README.md +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/install.json +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/__init__.py +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/labextension/static/234.c2d7ed33ae9ca2244b0d.js +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/labextension/static/style.js +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/notebook/__init__.py +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/notebook/tests/__init__.py +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/jupytergis_lab/notebook/utils.py +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/lib/index.d.ts +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/lib/notebookrenderer.d.ts +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/lib/notebookrenderer.js +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/scripts/bump-version.py +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/setup.py +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/src/notebookrenderer.ts +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/style/base.css +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/style/index.css +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/style/index.js +0 -0
- {jupytergis_lab-0.4.1 → jupytergis_lab-0.4.3}/tsconfig.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupytergis/jupytergis-lab",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
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.4.
|
|
57
|
-
"@jupytergis/schema": "^0.4.
|
|
56
|
+
"@jupytergis/base": "^0.4.3",
|
|
57
|
+
"@jupytergis/schema": "^0.4.3",
|
|
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.0d5125e69d7ff6400cc3.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(162),g=e(367),u=e(301),f=e(4),b=a()(t());b.i(l.A),b.i(p.A),b.i(s.A),b.i(d.A),b.i(c.A),b.i(g.A),b.i(u.A),b.i(f.A),b.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=b},162:(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},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 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: #fff;\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-Annotations {\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: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.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 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/* Style the file path text */\n.file-container {\n display: flex;\n align-items: center;\n margin-bottom: 16px;\n gap: 10px;\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(747),p=e.n(l),s=e(855),d=e.n(s),c=e(51),g=e.n(c),u=e(656),f=e.n(u),b=e(296),m={};m.styleTagTransform=f(),m.setAttributes=d(),m.insert=p().bind(null,"head"),m.domAPI=a(),m.insertStyleElement=g(),t()(b.A,m),b.A&&b.A.locals&&b.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 f=t(u,r);r.byIndex=l,o.splice(l,0,{identifier:c,updater:f,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-sourcePanel,\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)}}}},747: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)}},758:n=>{n.exports=function(n){return n[1]}},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:()=>x});var n=o(974),a=o(384),r=o(908),d=o(543),s=o(128),m=o(135),i=o(579),c=o(256),l=o(903),u=o(569),g=o(545),p=o(808),I=o(369),y=o(230),h=o(173);class M extends h.JupyterYModel{}class j extends c.Panel{constructor(e){super(),this._buildWidget=e=>{const{commands:t,model:o,externalCommands:a,tracker:r}=e,d=new n.JupyterGISPanel({model:o,commandRegistry:t});let s;o.filePath&&(s=new n.ToolbarWidget({commands:t,model:o,externalCommands:(null==a?void 0:a.getCommands())||[]})),this._jgisWidget=new n.JupyterGISOutputWidget({model:o,content:d,toolbar:s}),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,l.ICollaborativeDrive],activate:(e,t,o,n,r)=>{n?n.registerWidget("@jupytergis:widget",class extends M{async initialize(t){const{path:o,format:n,contentType:d}=t,s=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 m="";const i=e.shell.currentWidget;(i instanceof I.NotebookPanel||i instanceof g.ConsolePanel)&&(m=i.sessionContext.path);let c="";if(o){c=p.PathExt.join(p.PathExt.dirname(m),o);try{await e.serviceManager.contents.get(c)}catch(t){await e.serviceManager.contents.save(c,{content:btoa("{}"),format:"base64"})}}else c=p.PathExt.join(p.PathExt.dirname(m),"unsaved_project");const l=r.sharedModelFactory.createNew({path:c,format:s,contentType:d,collaborative:!0});this.jupyterGISModel=new a.JupyterGISModel({sharedModel:l}),this.jupyterGISModel.contentsManager=e.serviceManager.contents,this.jupyterGISModel.filePath=c,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,y.MessageLoop.sendMessage(r,c.Widget.Msg.BeforeAttach),a.appendChild(r.node),y.MessageLoop.sendMessage(r,c.Widget.Msg.AfterAttach)}dispose(){this._jgisWidget.dispose()}}):console.error("Missing IJupyterYWidgetManager token!")}},C="jupytergis",x=[{id:"jupytergis:lab:main-menu",autoStart:!0,requires:[a.IJupyterGISDocTracker,a.IJGISFormSchemaRegistryToken,a.IJGISLayerBrowserRegistryToken,m.IStateDB],optional:[s.IMainMenu,i.ITranslator,d.ICompletionProviderManager],activate:(e,t,o,a,r,d,s,m)=>{console.log("jupytergis:lab:main-menu is activated!"),s=null!=s?s:i.nullTranslator;(0,n.createDefaultLayerRegistry)(a),n.GlobalStateDbManager.getInstance().initialize(r),(0,n.addCommands)(e,t,s,o,a,r,m);const l=new c.Menu({commands:e.commands});l.title.label=s.load("jupyterlab").__("Add Source"),l.id="jp-gis-contextmenu-addSource",e.contextMenu.addItem({type:"submenu",selector:".jp-gis-sourcePanel",rank:3,submenu:l}),l.addItem({command:n.CommandIDs.newRasterSource,args:{from:"contextMenu"}}),l.addItem({command:n.CommandIDs.newVectorSource,args:{from:"contextMenu"}}),l.addItem({command:n.CommandIDs.newGeoJSONSource,args:{from:"contextMenu"}}),l.addItem({command:n.CommandIDs.newRasterDemSource,args:{from:"contextMenu"}}),l.addItem({command:n.CommandIDs.newImageSource,args:{from:"contextMenu"}}),e.contextMenu.addItem({type:"separator",selector:".jp-gis-sourcePanel",rank:2}),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 u=new c.Menu({commands:e.commands});u.title.label=s.load("jupyterlab").__("Download"),u.id="jp-gis-contextmenu-download",u.addItem({command:n.CommandIDs.downloadGeoJSON}),e.contextMenu.addItem({type:"submenu",selector:".jp-gis-layerItem",rank:2,submenu:u});const g=new c.Menu({commands:e.commands});g.title.label=s.load("jupyterlab").__("Processing"),g.id="jp-gis-contextmenu-processing",g.addItem({command:n.CommandIDs.buffer}),g.addItem({command:n.CommandIDs.dissolve}),e.contextMenu.addItem({type:"submenu",selector:".jp-gis-layerItem",rank:2,submenu:g});const p=new c.Menu({commands:e.commands});p.title.label=s.load("jupyterlab").__("Move Selected Layers to Group"),p.id="jp-gis-contextmenu-movelayer",e.contextMenu.addItem({type:"submenu",selector:".jp-gis-layerItem",rank:2,submenu:p}),e.contextMenu.opened.connect((()=>function(e,t){var o,a,r,d;if(!(null===(o=t.currentWidget)||void 0===o?void 0:o.model))return;const s=null===(a=t.currentWidget)||void 0===a?void 0:a.model,m=null!==(d=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!==d?d:null;if(!m)return;m.clearItems();const i=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}(s.getLayerTree());m.addItem({command:n.CommandIDs.moveLayersToGroup,args:{label:""}}),i.forEach((e=>{m.addItem({command:n.CommandIDs.moveLayersToGroup,args:{label:e}})})),m.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 I=new c.Menu({commands:e.commands});I.title.label=s.load("jupyterlab").__("Add Layer"),I.id="jp-gis-contextmenu-addLayer",e.contextMenu.addItem({type:"submenu",selector:".jp-gis-layerPanel",rank:3,submenu:I}),I.addItem({command:n.CommandIDs.newRasterLayer,args:{from:"contextMenu"}}),I.addItem({command:n.CommandIDs.newVectorLayer,args:{from:"contextMenu"}}),I.addItem({command:n.CommandIDs.newHillshadeLayer,args:{from:"contextMenu"}}),I.addItem({command:n.CommandIDs.newImageLayer,args:{from:"contextMenu"}}),I.addItem({command:n.CommandIDs.newHeatmapLayer,args:{from:"contextMenu"}}),d&&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})}(d,(()=>null!==t.currentWidget&&t.currentWidget===e.shell.currentWidget))}},{id:"jupytergis:lab:controlpanel",autoStart:!0,requires:[r.ILayoutRestorer,a.IJupyterGISDocTracker,a.IJGISFormSchemaRegistryToken,m.IStateDB,a.IAnnotationToken],activate:(e,t,o,a,r,d)=>{const s=new n.ControlPanelModel({tracker:o}),m=new n.LeftPanelWidget({model:s,tracker:o,state:r,commands:e.commands});m.id="jupytergis::leftControlPanel",m.title.caption="JupyterGIS Control Panel",m.title.icon=n.logoMiniIcon;const i=new n.RightPanelWidget({model:s,tracker:o,formSchemaRegistry:a,annotationModel:d});i.id="jupytergis::rightControlPanel",i.title.caption="JupyterGIS Control Panel",i.title.icon=n.logoMiniIcon,t&&(t.add(m,C),t.add(i,C)),e.shell.add(m,"left",{rank:2e3}),e.shell.add(i,"right",{rank:2e3})}},b]}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var _JUPYTERLAB;(()=>{"use strict";var e,r,t,a,n,o,i,u,l,s,d,f,p,c,h,v,b,g,y,m,j,w,S,k={450:(e,r,t)=>{var a={"./index":()=>t.e(484).then((()=>()=>t(484))),"./extension":()=>t.e(484).then((()=>()=>t(484))),"./style":()=>t.e(432).then((()=>()=>t(432)))},n=(e,r)=>(t.R=r,r=t.o(a,e)?a[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 a="default",n=t.S[a];if(n&&n!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[a]=e,t.I(a,r)}};t.d(r,{get:()=>n,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:"febf6149ed25e4ffd72b",484:"7ce50cb2a1c1d2537baa"}[e]+".js?v="+{234:"c2d7ed33ae9ca2244b0d",432:"febf6149ed25e4ffd72b",484:"7ce50cb2a1c1d2537baa"}[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,a,n,o)=>{if(e[t])e[t].push(a);else{var i,u;if(void 0!==n)for(var l=document.getElementsByTagName("script"),s=0;s<l.length;s++){var d=l[s];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==r+n){i=d;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+n),i.src=t),e[t]=[a];var f=(r,a)=>{i.onerror=i.onload=null,clearTimeout(p);var n=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach((e=>e(a))),r)return r(a)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.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,a)=>{a||(a=[]);var n=r[t];if(n||(n=r[t]={}),!(a.indexOf(n)>=0)){if(a.push(n),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,a)=>{var n=o[e]=o[e]||{},u=n[r];(!u||!u.loaded&&(!a!=!u.eager?a:i>u.from))&&(n[r]={get:t,from:i,eager:!!a})},l=[];return"default"===t&&(u("@jupyter/collaborative-drive","3.1.0",(()=>P.e(234).then((()=>()=>P(234))))),u("@jupytergis/jupytergis-lab","0.4.3",(()=>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 a=t.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=t[a--].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),a=t[1]?r(t[1]):[];return t[2]&&(a.length++,a.push.apply(a,r(t[2]))),t[3]&&(a.push([]),a.push.apply(a,r(t[3]))),a},a=(e,r)=>{e=t(e),r=t(r);for(var a=0;;){if(a>=e.length)return a<r.length&&"u"!=(typeof r[a])[0];var n=e[a],o=(typeof n)[0];if(a>=r.length)return"u"==o;var i=r[a],u=(typeof i)[0];if(o!=u)return"o"==o&&"n"==u||"s"==u||"u"==o;if("o"!=o&&"u"!=o&&n!=i)return n<i;a++}},n=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 a=1,o=1;o<e.length;o++)a--,t+="u"==(typeof(u=e[o]))[0]?"-":(a>0?".":"")+(a=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():n(u))}return l();function l(){return i.pop().replace(/^\((.+)\)$/,"$1")}},o=(e,r)=>{if(0 in e){r=t(r);var a=e[0],n=a<0;n&&(a=-a-1);for(var i=0,u=1,l=!0;;u++,i++){var s,d,f=u<e.length?(typeof e[u])[0]:"";if(i>=r.length||"o"==(d=(typeof(s=r[i]))[0]))return!l||("u"==f?u>a&&!n:""==f!=n);if("u"==d){if(!l||"u"!=f)return!1}else if(l)if(f==d)if(u<=a){if(s!=e[u])return!1}else{if(n?s>e[u]:s<e[u])return!1;s!=e[u]&&(l=!1)}else if("s"!=f&&"n"!=f){if(n||u<=a)return!1;l=!1,u--}else{if(u<=a||d<f!=n)return!1;l=!1}else"s"!=f&&"n"!=f&&(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,n)=>{var i=n?l(e[r]):e[r];return(r=Object.keys(i).reduce(((e,r)=>!o(t,r)||e&&!a(e,r)?e:r),0))&&i[r]},d=(e,r,t)=>{var n=t?l(e[r]):e[r];return Object.keys(n).reduce(((e,r)=>!e||!n[e].loaded&&a(e,r)?r:e),0)},f=(e,r,t,a)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+n(a)+")",p=(e,r,t,a,o)=>{var i=e[t];return"No satisfying version ("+n(a)+")"+(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,a,n,o){var i=P.I(r);return i&&i.then&&!a?i.then(e.bind(e,r,P.S[r],t,!1,n,o)):e(r,P.S[r],t,a,n,o)})(((e,r,t,a,n,o)=>{if(!i(r,t))return b(e,t,o);var l=s(r,t,n,a);return l?u(l):o?o():void c(p(r,e,t,n,a))})),y=v(((e,r,t,a,n,l)=>{if(!i(r,t))return b(e,t,l);var s=d(r,t,a);return o(n,s)||h(f(r,t,s,n)),u(r[t][s])})),m={},j={128:()=>y("default","@jupyterlab/mainmenu",!1,[1,4,4,0]),135:()=>y("default","@jupyterlab/statedb",!1,[1,4,4,0]),173:()=>y("default","yjs-widgets",!1,[2,0,4]),230:()=>y("default","@lumino/messaging",!1,[1,2,0,0]),256:()=>y("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",0]),369:()=>y("default","@jupyterlab/notebook",!1,[1,4,4,0]),384:()=>y("default","@jupytergis/schema",!1,[2,0,4,3]),543:()=>y("default","@jupyterlab/completer",!1,[1,4,4,0]),545:()=>y("default","@jupyterlab/console",!1,[1,4,4,0]),569:()=>y("default","@jupyterlab/apputils",!1,[1,4,5,0]),579:()=>y("default","@jupyterlab/translation",!1,[1,4,4,0]),808:()=>y("default","@jupyterlab/coreutils",!1,[1,6,4,0]),903:()=>g("default","@jupyter/collaborative-drive",!1,[1,3,0,0],(()=>P.e(234).then((()=>()=>P(234))))),908:()=>y("default","@jupyterlab/application",!1,[1,4,4,0]),974:()=>y("default","@jupytergis/base",!1,[2,0,4,3]),262:()=>y("default","@lumino/coreutils",!1,[1,2,0,0])},w={234:[262],484:[128,135,173,230,256,369,384,543,545,569,579,808,903,908,974]},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 a=r=>{delete m[e],P.m[e]=t=>{throw delete P.c[e],r}};try{var n=j[e]();n.then?r.push(m[e]=n.then(t).catch(a)):t(n)}catch(e){a(e)}}}))},(()=>{P.b=document.baseURI||self.location.href;var e={738:0};P.f.j=(r,t)=>{var a=P.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else{var n=new Promise(((t,n)=>a=e[r]=[t,n]));t.push(a[2]=n);var o=P.p+P.u(r),i=new Error;P.l(o,(t=>{if(P.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+n+": "+o+")",i.name="ChunkLoadError",i.type=n,i.request=o,a[1](i)}}),"chunk-"+r,r)}};var r=(r,t)=>{var a,n,[o,i,u]=t,l=0;if(o.some((r=>0!==e[r]))){for(a in i)P.o(i,a)&&(P.m[a]=i[a]);u&&u(P)}for(r&&r(t);l<o.length;l++)n=o[l],P.o(e,n)&&e[n]&&e[n][0](),e[n]=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"]=_})();
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
"name": "@jupytergis/base",
|
|
11
|
-
"versionInfo": "0.4.
|
|
11
|
+
"versionInfo": "0.4.3",
|
|
12
12
|
"licenseId": "BSD-3-Clause",
|
|
13
13
|
"extractedText": ""
|
|
14
14
|
},
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
"name": "ol",
|
|
23
|
-
"versionInfo": "10.
|
|
23
|
+
"versionInfo": "10.5.0",
|
|
24
24
|
"licenseId": "BSD-2-Clause",
|
|
25
25
|
"extractedText": "BSD 2-Clause License\n\nCopyright 2005-present, OpenLayers Contributors\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
|
|
26
26
|
},
|
|
@@ -43,10 +43,11 @@ 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.
|
|
47
|
-
If not provided, a new empty document will be created.
|
|
46
|
+
:param path: the path to the file that you would like to open. If not provided, a new empty document will be created.
|
|
48
47
|
"""
|
|
49
48
|
|
|
49
|
+
path: Optional[Path]
|
|
50
|
+
|
|
50
51
|
def __init__(
|
|
51
52
|
self,
|
|
52
53
|
path: Optional[str | Path] = None,
|
|
@@ -58,10 +59,12 @@ class GISDocument(CommWidget):
|
|
|
58
59
|
pitch: Optional[float] = None,
|
|
59
60
|
projection: Optional[str] = None,
|
|
60
61
|
):
|
|
61
|
-
if isinstance(path,
|
|
62
|
-
path =
|
|
62
|
+
if isinstance(path, str):
|
|
63
|
+
path = Path(path)
|
|
63
64
|
|
|
64
|
-
|
|
65
|
+
self.path = path
|
|
66
|
+
|
|
67
|
+
comm_metadata = GISDocument._path_to_comm(str(self.path) if self.path else None)
|
|
65
68
|
|
|
66
69
|
ydoc = Doc()
|
|
67
70
|
|
|
@@ -106,19 +109,33 @@ class GISDocument(CommWidget):
|
|
|
106
109
|
"""
|
|
107
110
|
return self._layerTree.to_py()
|
|
108
111
|
|
|
109
|
-
def
|
|
112
|
+
def save_as(self, path: str | Path) -> None:
|
|
113
|
+
"""Save the document at a new path."""
|
|
114
|
+
if isinstance(path, str):
|
|
115
|
+
path = Path(path)
|
|
116
|
+
|
|
117
|
+
if path.name.lower().endswith(".qgz"):
|
|
118
|
+
_export_to_qgis(path)
|
|
119
|
+
self.path = path
|
|
120
|
+
return
|
|
121
|
+
|
|
122
|
+
if not path.name.lower().endswith(".jgis"):
|
|
123
|
+
path = Path(str(path) + ".jGIS")
|
|
124
|
+
|
|
125
|
+
path.write_text(json.dumps(self.to_py()))
|
|
126
|
+
self.path = path
|
|
127
|
+
|
|
128
|
+
def _export_to_qgis(self, path: str | Path) -> bool:
|
|
110
129
|
# Lazy import, jupytergis_qgis of qgis may not be installed
|
|
111
130
|
from jupytergis_qgis.qgis_loader import export_project_to_qgis
|
|
112
131
|
|
|
113
132
|
if isinstance(path, Path):
|
|
114
133
|
path = str(path)
|
|
115
134
|
|
|
116
|
-
virtual_file =
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
"options": self._options.to_py(),
|
|
121
|
-
}
|
|
135
|
+
virtual_file = self.to_py()
|
|
136
|
+
virtual_file["layerTree"] = reversed_tree(virtual_file["layerTree"])
|
|
137
|
+
del virtual_file["metadata"]
|
|
138
|
+
|
|
122
139
|
return export_project_to_qgis(path, virtual_file)
|
|
123
140
|
|
|
124
141
|
def add_raster_layer(
|
|
@@ -234,7 +251,7 @@ class GISDocument(CommWidget):
|
|
|
234
251
|
logical_op: str | None = None,
|
|
235
252
|
feature: str | None = None,
|
|
236
253
|
operator: str | None = None,
|
|
237
|
-
value: Union[str,
|
|
254
|
+
value: Union[str, int, float] | None = None,
|
|
238
255
|
color_expr=None,
|
|
239
256
|
):
|
|
240
257
|
"""
|
|
@@ -244,7 +261,6 @@ class GISDocument(CommWidget):
|
|
|
244
261
|
:param path: The path to the JSON file to embed into the jGIS file.
|
|
245
262
|
:param data: The raw GeoJSON data to embed into the jGIS file.
|
|
246
263
|
:param type: The type of the vector layer to create.
|
|
247
|
-
:param color: The color to apply to features.
|
|
248
264
|
:param opacity: The opacity, between 0 and 1.
|
|
249
265
|
:param color_expr: The style expression used to style the layer, defaults to None
|
|
250
266
|
"""
|
|
@@ -334,9 +350,9 @@ class GISDocument(CommWidget):
|
|
|
334
350
|
|
|
335
351
|
def add_video_layer(
|
|
336
352
|
self,
|
|
337
|
-
urls:
|
|
353
|
+
urls: List,
|
|
338
354
|
name: str = "Image Layer",
|
|
339
|
-
coordinates: [] =
|
|
355
|
+
coordinates: Optional[List] = None,
|
|
340
356
|
opacity: float = 1,
|
|
341
357
|
):
|
|
342
358
|
"""
|
|
@@ -347,6 +363,8 @@ class GISDocument(CommWidget):
|
|
|
347
363
|
:param coordinates: Corners of video specified in longitude, latitude pairs.
|
|
348
364
|
:param opacity: The opacity, between 0 and 1.
|
|
349
365
|
"""
|
|
366
|
+
if coordinates is None:
|
|
367
|
+
coordinates = []
|
|
350
368
|
|
|
351
369
|
if urls is None or coordinates is None:
|
|
352
370
|
raise ValueError("URLs and Coordinates are required")
|
|
@@ -383,14 +401,14 @@ class GISDocument(CommWidget):
|
|
|
383
401
|
"""
|
|
384
402
|
Add a tiff layer
|
|
385
403
|
|
|
386
|
-
:param
|
|
387
|
-
:param
|
|
388
|
-
:param
|
|
389
|
-
:param
|
|
390
|
-
:param
|
|
391
|
-
:param
|
|
392
|
-
:param
|
|
393
|
-
:param
|
|
404
|
+
:param url: URL of the tif
|
|
405
|
+
:param min: Minimum pixel value to be displayed, defaults to letting the map display set the value
|
|
406
|
+
:param max: Maximum pixel value to be displayed, defaults to letting the map display set the value
|
|
407
|
+
:param name: The name that will be used for the object in the document, defaults to "Tiff Layer"
|
|
408
|
+
:param normalize: Select whether to normalize values between 0..1, if false than min/max have no effect, defaults to True
|
|
409
|
+
:param wrapX: Render tiles beyond the tile grid extent, defaults to False
|
|
410
|
+
:param opacity: The opacity, between 0 and 1, defaults to 1.0
|
|
411
|
+
:param color_expr: The style expression used to style the layer, defaults to None
|
|
394
412
|
"""
|
|
395
413
|
|
|
396
414
|
source = {
|
|
@@ -421,7 +439,7 @@ class GISDocument(CommWidget):
|
|
|
421
439
|
self,
|
|
422
440
|
url: str,
|
|
423
441
|
name: str = "Hillshade Layer",
|
|
424
|
-
urlParameters: Dict =
|
|
442
|
+
urlParameters: Optional[Dict] = None,
|
|
425
443
|
attribution: str = "",
|
|
426
444
|
):
|
|
427
445
|
"""
|
|
@@ -431,6 +449,8 @@ class GISDocument(CommWidget):
|
|
|
431
449
|
:param str name: The name that will be used for the object in the document, defaults to "Hillshade Layer"
|
|
432
450
|
:param attribution: The attribution.
|
|
433
451
|
"""
|
|
452
|
+
if urlParameters is None:
|
|
453
|
+
urlParameters = {}
|
|
434
454
|
|
|
435
455
|
source = {
|
|
436
456
|
"type": SourceType.RasterDemSource,
|
|
@@ -454,14 +474,14 @@ class GISDocument(CommWidget):
|
|
|
454
474
|
|
|
455
475
|
def add_heatmap_layer(
|
|
456
476
|
self,
|
|
457
|
-
feature:
|
|
477
|
+
feature: str,
|
|
458
478
|
path: str | Path | None = None,
|
|
459
479
|
data: Dict | None = None,
|
|
460
480
|
name: str = "Heatmap Layer",
|
|
461
481
|
opacity: float = 1,
|
|
462
|
-
blur:
|
|
463
|
-
radius:
|
|
464
|
-
gradient: List[str] =
|
|
482
|
+
blur: int = 15,
|
|
483
|
+
radius: int = 8,
|
|
484
|
+
gradient: Optional[List[str]] = None,
|
|
465
485
|
):
|
|
466
486
|
"""
|
|
467
487
|
Add a Heatmap Layer to the document.
|
|
@@ -495,6 +515,9 @@ class GISDocument(CommWidget):
|
|
|
495
515
|
if data is not None:
|
|
496
516
|
parameters = {"data": data}
|
|
497
517
|
|
|
518
|
+
if gradient is None:
|
|
519
|
+
gradient = ["#00f", "#0ff", "#0f0", "#ff0", "#f00"]
|
|
520
|
+
|
|
498
521
|
source = {
|
|
499
522
|
"type": SourceType.GeoJSONSource,
|
|
500
523
|
"name": f"{name} Source",
|
|
@@ -609,16 +632,16 @@ class GISDocument(CommWidget):
|
|
|
609
632
|
logical_op: str,
|
|
610
633
|
feature: str,
|
|
611
634
|
operator: str,
|
|
612
|
-
value: Union[str,
|
|
635
|
+
value: Union[str, int, float],
|
|
613
636
|
):
|
|
614
637
|
"""
|
|
615
638
|
Add a filter to a layer
|
|
616
639
|
|
|
617
|
-
:param
|
|
618
|
-
:param
|
|
619
|
-
:param
|
|
620
|
-
:param
|
|
621
|
-
:param
|
|
640
|
+
:param layer_id: The ID of the layer to filter
|
|
641
|
+
:param logical_op: The logical combination to apply to filters. Must be "any" or "all"
|
|
642
|
+
:param feature: The feature to be filtered on
|
|
643
|
+
:param operator: The operator used to compare the feature and value
|
|
644
|
+
:param value: The value to be filtered on
|
|
622
645
|
"""
|
|
623
646
|
layer = self._layers.get(layer_id)
|
|
624
647
|
|
|
@@ -655,16 +678,16 @@ class GISDocument(CommWidget):
|
|
|
655
678
|
logical_op: str,
|
|
656
679
|
feature: str,
|
|
657
680
|
operator: str,
|
|
658
|
-
value: Union[str,
|
|
681
|
+
value: Union[str, int, float],
|
|
659
682
|
):
|
|
660
683
|
"""
|
|
661
684
|
Update a filter applied to a layer
|
|
662
685
|
|
|
663
|
-
:param
|
|
664
|
-
:param
|
|
665
|
-
:param
|
|
666
|
-
:param
|
|
667
|
-
:param
|
|
686
|
+
:param layer_id: The ID of the layer to filter
|
|
687
|
+
:param logical_op: The logical combination to apply to filters. Must be "any" or "all"
|
|
688
|
+
:param feature: The feature to update the value for
|
|
689
|
+
:param operator: The operator used to compare the feature and value
|
|
690
|
+
:param value: The new value to be filtered on
|
|
668
691
|
"""
|
|
669
692
|
layer = self._layers.get(layer_id)
|
|
670
693
|
|
|
@@ -736,8 +759,9 @@ class GISDocument(CommWidget):
|
|
|
736
759
|
file_name = Path(path).name
|
|
737
760
|
try:
|
|
738
761
|
ext = file_name.split(".")[1].lower()
|
|
739
|
-
except Exception:
|
|
740
|
-
raise ValueError("Can not detect file extension!")
|
|
762
|
+
except Exception as e:
|
|
763
|
+
raise ValueError("Can not detect file extension!") from e
|
|
764
|
+
|
|
741
765
|
if ext == "jgis":
|
|
742
766
|
format = "text"
|
|
743
767
|
contentType = "jgis"
|
|
@@ -753,6 +777,16 @@ class GISDocument(CommWidget):
|
|
|
753
777
|
path=path, format=format, contentType=contentType, create_ydoc=path is None
|
|
754
778
|
)
|
|
755
779
|
|
|
780
|
+
def to_py(self) -> dict:
|
|
781
|
+
"""Get the document structure as a Python dictionary."""
|
|
782
|
+
return {
|
|
783
|
+
"layers": self._layers.to_py(),
|
|
784
|
+
"sources": self._sources.to_py(),
|
|
785
|
+
"layerTree": self._layerTree.to_py(),
|
|
786
|
+
"options": self._options.to_py(),
|
|
787
|
+
"metadata": self._metadata.to_py(),
|
|
788
|
+
}
|
|
789
|
+
|
|
756
790
|
|
|
757
791
|
class JGISLayer(BaseModel):
|
|
758
792
|
class Config:
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: export/exportGeojson.json
|
|
3
|
+
# timestamp: 2025-04-07T14:43:32+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
|
+
)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: export/exportGeotiff.json
|
|
3
|
+
# timestamp: 2025-04-07T14:43:32+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from pydantic import BaseModel, ConfigDict, Field, confloat
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class IExportGeoTIFF(BaseModel):
|
|
11
|
+
model_config = ConfigDict(
|
|
12
|
+
extra='forbid',
|
|
13
|
+
)
|
|
14
|
+
exportFileName: str = Field(
|
|
15
|
+
...,
|
|
16
|
+
description='The name of the exported GeoTIFF file.',
|
|
17
|
+
title='GeoTiFF File Name',
|
|
18
|
+
)
|
|
19
|
+
resolutionX: confloat(ge=1.0, le=10000.0) = Field(
|
|
20
|
+
...,
|
|
21
|
+
description='The width resolution for the raster export.',
|
|
22
|
+
title='Resolution (Width)',
|
|
23
|
+
)
|
|
24
|
+
resolutionY: confloat(ge=1.0, le=10000.0) = Field(
|
|
25
|
+
...,
|
|
26
|
+
description='The height resolution for the raster export.',
|
|
27
|
+
title='Resolution (Height)',
|
|
28
|
+
)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: processing/buffer.json
|
|
3
|
+
# timestamp: 2025-04-07T14:43:32+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Optional
|
|
8
|
+
|
|
9
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class IBuffer(BaseModel):
|
|
13
|
+
model_config = ConfigDict(
|
|
14
|
+
extra='forbid',
|
|
15
|
+
)
|
|
16
|
+
inputLayer: str = Field(..., description='The input layer for buffering.')
|
|
17
|
+
bufferDistance: float = Field(
|
|
18
|
+
...,
|
|
19
|
+
description='The distance used for buffering the geometry (in projection units).',
|
|
20
|
+
)
|
|
21
|
+
embedOutputLayer: Optional[bool] = Field(
|
|
22
|
+
True, title='Embed output buffered layer in file'
|
|
23
|
+
)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: processing/dissolve.json
|
|
3
|
+
# timestamp: 2025-04-07T14:43:32+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Optional
|
|
8
|
+
|
|
9
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class IDissolve(BaseModel):
|
|
13
|
+
model_config = ConfigDict(
|
|
14
|
+
extra='forbid',
|
|
15
|
+
)
|
|
16
|
+
inputLayer: str = Field(
|
|
17
|
+
..., description='The input layer for the dissolve operation.'
|
|
18
|
+
)
|
|
19
|
+
dissolveField: str = Field(
|
|
20
|
+
..., description='The field based on which geometries will be dissolved.'
|
|
21
|
+
)
|
|
22
|
+
embedOutputLayer: Optional[bool] = Field(
|
|
23
|
+
True, title='Embed output dissolved layer in file'
|
|
24
|
+
)
|