mirror of
https://github.com/maputnik/editor.git
synced 2025-12-05 22:00:00 +00:00
chore(deps): Bump maplibre-gl from 5.5.0 to 5.6.2 (#1308)
Bumps [maplibre-gl](https://github.com/maplibre/maplibre-gl-js) from 5.5.0 to 5.6.2. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/maplibre/maplibre-gl-js/releases">maplibre-gl's releases</a>.</em></p> <blockquote> <h2>v5.6.2</h2> <p><a href="https://github.com/maplibre/maplibre-gl-js">https://github.com/maplibre/maplibre-gl-js</a> <a href="https://github.com/maplibre/maplibre-gl-js/compare/v5.6.1...v5.6.2">Changes</a> since <a href="https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.6.1">MapLibre GL JS v5.6.1</a>:</p> <h3>🐞 Bug fixes</h3> <ul> <li>Fix white artifacts when using non-zero elevation (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/6032">#6032</a>)</li> <li>Fix geolocate control lock loss on window resize and zoom (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/3504">#3504</a>)</li> <li>Fix a memory leak in <code>GeoJSONSource</code> when rapidly updating data (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/6163">#6163</a>)</li> <li>Fix <code>Map.setTransformRequest</code> parameter type to include <code>null</code> (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6179">#6179</a>)</li> <li>Fix typo <code>_rotatePitchHandler</code> in the <code>navigation_control.ts</code> file (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6207">#6207</a>)</li> </ul> <h2>v5.6.1</h2> <p><a href="https://github.com/maplibre/maplibre-gl-js">https://github.com/maplibre/maplibre-gl-js</a> <a href="https://github.com/maplibre/maplibre-gl-js/compare/v5.6.0...v5.6.1">Changes</a> since <a href="https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.6.0">MapLibre GL JS v5.6.0</a>:</p> <h3>🐞 Bug fixes</h3> <ul> <li>Fix use of <code>textureSize</code> call in color relief shader (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5980">#5980</a>)</li> <li>Fix Y axis transformation in projectFromLabelPlaneToClipSpace (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/6021">#6021</a>)</li> <li>Alpha-sort all examples (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/6049">#6049</a>)</li> <li>Ensure opacity is reset for popups when <code>locationOccludedOpacity</code> no longer applicable (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/6088">#6088</a>)</li> </ul> <h2>v5.6.0</h2> <p><a href="https://github.com/maplibre/maplibre-gl-js">https://github.com/maplibre/maplibre-gl-js</a> <a href="https://github.com/maplibre/maplibre-gl-js/compare/v5.5.0...v5.6.0">Changes</a> since <a href="https://github.com/maplibre/maplibre-gl-js/releases/tag/v5.5.0">MapLibre GL JS v5.5.0</a>:</p> <h3>✨ Features and improvements</h3> <ul> <li>Add <code>setGlobalStateProperty()</code> and <code>getGlobalState()</code> to the map public API (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5613">#5613</a>)</li> <li>Improve tile frustum culling for globe, leading to better performance and faster loading times. (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5865">#5865</a>)</li> <li>Add new <code>color-relief</code> layer type to render hypsometric tint from terrain-RGB tiles. (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5742">#5742</a>)</li> </ul> <h3>🐞 Bug fixes</h3> <ul> <li>Fix <code>queryRenderedFeatures</code> bounding box crossing antimeridian in globe view. (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5856">#5856</a>)</li> <li>Fix handling invalid glyph placement results along lines (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5118">#5118</a>)</li> <li>Fix <code>refreshTiles()</code> for vector tiles (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5875">#5875</a>)</li> <li>Revert changes to polygon intersection detection (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5590">#5590</a> caused issue <a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/5864">5864</a>)</li> <li>Fix breaking clusters when non-integer value provided for <code>clusterMaxZoom</code> (warning is shown) (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/5929">#5929</a>) + clarify API docs</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/maplibre/maplibre-gl-js/blob/main/CHANGELOG.md">maplibre-gl's changelog</a>.</em></p> <blockquote> <h2>5.6.2</h2> <h3>🐞 Bug fixes</h3> <ul> <li>Fix white artifacts when using non-zero elevation (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/6032">#6032</a>)</li> <li>Fix geolocate control lock loss on window resize and zoom (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/3504">#3504</a>)</li> <li>Fix a memory leak in <code>GeoJSONSource</code> when rapidly updating data (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/6163">#6163</a>)</li> <li>Fix <code>Map.setTransformRequest</code> parameter type to include <code>null</code> (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6179">#6179</a>)</li> <li>Fix typo <code>_rotatePitchHandler</code> in the <code>navigation_control.ts</code> file (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6207">#6207</a>)</li> </ul> <h2>5.6.1</h2> <h3>🐞 Bug fixes</h3> <ul> <li>Fix use of <code>textureSize</code> call in color relief shader (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5980">#5980</a>)</li> <li>Fix Y axis transformation in projectFromLabelPlaneToClipSpace (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/6021">#6021</a>)</li> <li>Alpha-sort all examples (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/6049">#6049</a>)</li> <li>Ensure opacity is reset for popups when <code>locationOccludedOpacity</code> no longer applicable (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/6088">#6088</a>)</li> </ul> <h2>5.6.0</h2> <h3>✨ Features and improvements</h3> <ul> <li>Add <code>setGlobalStateProperty()</code> and <code>getGlobalState()</code> to the map public API (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5613">#5613</a>)</li> <li>Improve tile frustum culling for globe, leading to better performance and faster loading times. (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5865">#5865</a>)</li> <li>Add new <code>color-relief</code> layer type to render hypsometric tint from terrain-RGB tiles. (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5742">#5742</a>)</li> </ul> <h3>🐞 Bug fixes</h3> <ul> <li>Fix <code>queryRenderedFeatures</code> bounding box crossing antimeridian in globe view. (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5856">#5856</a>)</li> <li>Fix handling invalid glyph placement results along lines (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5118">#5118</a>)</li> <li>Fix <code>refreshTiles()</code> for vector tiles (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5875">#5875</a>)</li> <li>Revert changes to polygon intersection detection (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5590">#5590</a> caused issue <a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/5864">5864</a>)</li> <li>Fix breaking clusters when non-integer value provided for <code>clusterMaxZoom</code> (warning is shown) (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/5929">#5929</a>) + clarify API docs</li> <li>Fix use of reserved GLSL <code>switch</code> statement in hillshade shader (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/pull/5972">#5972</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="7887f2c899"><code>7887f2c</code></a> Bump version to 5.6.2 (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6225">#6225</a>)</li> <li><a href="f3bf5d392e"><code>f3bf5d3</code></a> msft tier update (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6212">#6212</a>)</li> <li><a href="6a66c11936"><code>6a66c11</code></a> Fix: issue <a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/3504">#3504</a> geolocate lock loss zoom (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6219">#6219</a>)</li> <li><a href="627ddaf4ad"><code>627ddaf</code></a> chore(deps): bump <code>@mapbox/tiny-sdf</code> from 2.0.6 to 2.0.7 (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6224">#6224</a>)</li> <li><a href="5bbdd804ab"><code>5bbdd80</code></a> chore(deps-dev): bump <code>@typescript-eslint/eslint-plugin</code> (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6221">#6221</a>)</li> <li><a href="cb873a5833"><code>cb873a5</code></a> chore(deps-dev): bump <code>@types/node</code> from 24.1.0 to 24.2.0 (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6222">#6222</a>)</li> <li><a href="b20ddb1049"><code>b20ddb1</code></a> chore(deps-dev): bump <code>@typescript-eslint/parser</code> from 8.38.0 to 8.39.0 (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6220">#6220</a>)</li> <li><a href="34b050ca74"><code>34b050c</code></a> chore(deps-dev): bump devtools-protocol from 0.0.1493946 to 0.0.1495869 (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6218">#6218</a>)</li> <li><a href="cc4dfc25d5"><code>cc4dfc2</code></a> Fix _rotatePitchHandler typo (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6208">#6208</a>)</li> <li><a href="b1a2d89710"><code>b1a2d89</code></a> chore(deps-dev): bump stylelint-config-standard from 38.0.0 to 39.0.0 (<a href="https://redirect.github.com/maplibre/maplibre-gl-js/issues/6203">#6203</a>)</li> <li>Additional commits viewable in <a href="https://github.com/maplibre/maplibre-gl-js/compare/v5.5.0...v5.6.2">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Birk Skyum <74932975+birkskyum@users.noreply.github.com> Co-authored-by: Harel M <harel.mazor@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
200
package-lock.json
generated
200
package-lock.json
generated
@@ -37,7 +37,7 @@
|
||||
"lodash.get": "^4.4.2",
|
||||
"lodash.isequal": "^4.5.0",
|
||||
"lodash.throttle": "^4.1.1",
|
||||
"maplibre-gl": "^5.5.0",
|
||||
"maplibre-gl": "^5.6.2",
|
||||
"maputnik-design": "github:maputnik/design#172b06c",
|
||||
"ol": "^10.6.1",
|
||||
"ol-mapbox-style": "^13.1.0",
|
||||
@@ -1797,14 +1797,16 @@
|
||||
"license": "BSD-2-Clause"
|
||||
},
|
||||
"node_modules/@mapbox/point-geometry": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz",
|
||||
"integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ=="
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-1.1.0.tgz",
|
||||
"integrity": "sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/@mapbox/tiny-sdf": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz",
|
||||
"integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA=="
|
||||
"version": "2.0.7",
|
||||
"resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.7.tgz",
|
||||
"integrity": "sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==",
|
||||
"license": "BSD-2-Clause"
|
||||
},
|
||||
"node_modules/@mapbox/unitbezier": {
|
||||
"version": "0.0.1",
|
||||
@@ -1812,11 +1814,14 @@
|
||||
"integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw=="
|
||||
},
|
||||
"node_modules/@mapbox/vector-tile": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz",
|
||||
"integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==",
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-2.0.4.tgz",
|
||||
"integrity": "sha512-AkOLcbgGTdXScosBWwmmD7cDlvOjkg/DetGva26pIRiZPdeJYjYKarIlb4uxVzi6bwHO6EWH82eZ5Nuv4T5DUg==",
|
||||
"license": "BSD-3-Clause",
|
||||
"dependencies": {
|
||||
"@mapbox/point-geometry": "~0.1.0"
|
||||
"@mapbox/point-geometry": "~1.1.0",
|
||||
"@types/geojson": "^7946.0.16",
|
||||
"pbf": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@mapbox/whoots-js": {
|
||||
@@ -1860,9 +1865,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@maplibre/maplibre-gl-style-spec": {
|
||||
"version": "23.2.3",
|
||||
"resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-23.2.3.tgz",
|
||||
"integrity": "sha512-2PMt4fZEAxm4/uMyS9B4QXOknJ2DpzU3qsFKximwfsmHz4Z1RcWoIEHgOdv7UmDRaM2voDju5/VJdH53IydMqg==",
|
||||
"version": "23.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-23.3.0.tgz",
|
||||
"integrity": "sha512-IGJtuBbaGzOUgODdBRg66p8stnwj9iDXkgbYKoYcNiiQmaez5WVRfXm4b03MCDwmZyX93csbfHFWEJJYHnn5oA==",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@mapbox/jsonlint-lines-primitives": "~2.0.2",
|
||||
@@ -1879,6 +1884,21 @@
|
||||
"gl-style-validate": "dist/gl-style-validate.mjs"
|
||||
}
|
||||
},
|
||||
"node_modules/@maplibre/vt-pbf": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@maplibre/vt-pbf/-/vt-pbf-4.0.3.tgz",
|
||||
"integrity": "sha512-YsW99BwnT+ukJRkseBcLuZHfITB4puJoxnqPVjo72rhW/TaawVYsgQHcqWLzTxqknttYoDpgyERzWSa/XrETdA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@mapbox/point-geometry": "^1.1.0",
|
||||
"@mapbox/vector-tile": "^2.0.4",
|
||||
"@types/geojson-vt": "3.2.5",
|
||||
"@types/supercluster": "^7.1.3",
|
||||
"geojson-vt": "^4.0.2",
|
||||
"pbf": "^4.0.1",
|
||||
"supercluster": "^8.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@mdi/js": {
|
||||
"version": "7.4.47",
|
||||
"resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz",
|
||||
@@ -3028,21 +3048,6 @@
|
||||
"@types/lodash": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/mapbox__point-geometry": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz",
|
||||
"integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA=="
|
||||
},
|
||||
"node_modules/@types/mapbox__vector-tile": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz",
|
||||
"integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==",
|
||||
"dependencies": {
|
||||
"@types/geojson": "*",
|
||||
"@types/mapbox__point-geometry": "*",
|
||||
"@types/pbf": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/minimatch": {
|
||||
"version": "3.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
|
||||
@@ -3058,11 +3063,6 @@
|
||||
"undici-types": "~5.26.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/pbf": {
|
||||
"version": "3.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz",
|
||||
"integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA=="
|
||||
},
|
||||
"node_modules/@types/pixelmatch": {
|
||||
"version": "5.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/pixelmatch/-/pixelmatch-5.2.6.tgz",
|
||||
@@ -5325,9 +5325,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/earcut": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.1.tgz",
|
||||
"integrity": "sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw==",
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.2.tgz",
|
||||
"integrity": "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/eastasianwidth": {
|
||||
@@ -8702,6 +8702,7 @@
|
||||
"version": "6.0.3",
|
||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
|
||||
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
@@ -9057,37 +9058,33 @@
|
||||
"license": "BSD-2-Clause"
|
||||
},
|
||||
"node_modules/maplibre-gl": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-5.5.0.tgz",
|
||||
"integrity": "sha512-p8AOPuzzqn1ZA9gcXxKw0IED715we/2Owa/YUr6PANmgMvNMe/JG+V/C1hRra43Wm62Biz+Aa8AgbOLJimA8tA==",
|
||||
"version": "5.6.2",
|
||||
"resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-5.6.2.tgz",
|
||||
"integrity": "sha512-SEqYThhUCFf6Lm0TckpgpKnto5u4JsdPYdFJb6g12VtuaFsm3nYdBO+fOmnUYddc8dXihgoGnuXvPPooUcRv5w==",
|
||||
"license": "BSD-3-Clause",
|
||||
"dependencies": {
|
||||
"@mapbox/geojson-rewind": "^0.5.2",
|
||||
"@mapbox/jsonlint-lines-primitives": "^2.0.2",
|
||||
"@mapbox/point-geometry": "^0.1.0",
|
||||
"@mapbox/tiny-sdf": "^2.0.6",
|
||||
"@mapbox/point-geometry": "^1.1.0",
|
||||
"@mapbox/tiny-sdf": "^2.0.7",
|
||||
"@mapbox/unitbezier": "^0.0.1",
|
||||
"@mapbox/vector-tile": "^1.3.1",
|
||||
"@mapbox/vector-tile": "^2.0.4",
|
||||
"@mapbox/whoots-js": "^3.1.0",
|
||||
"@maplibre/maplibre-gl-style-spec": "^23.2.2",
|
||||
"@maplibre/maplibre-gl-style-spec": "^23.3.0",
|
||||
"@maplibre/vt-pbf": "^4.0.3",
|
||||
"@types/geojson": "^7946.0.16",
|
||||
"@types/geojson-vt": "3.2.5",
|
||||
"@types/mapbox__point-geometry": "^0.1.4",
|
||||
"@types/mapbox__vector-tile": "^1.3.4",
|
||||
"@types/pbf": "^3.0.5",
|
||||
"@types/supercluster": "^7.1.3",
|
||||
"earcut": "^3.0.1",
|
||||
"earcut": "^3.0.2",
|
||||
"geojson-vt": "^4.0.2",
|
||||
"gl-matrix": "^3.4.3",
|
||||
"global-prefix": "^4.0.0",
|
||||
"kdbush": "^4.0.2",
|
||||
"murmurhash-js": "^1.0.0",
|
||||
"pbf": "^3.3.0",
|
||||
"potpack": "^2.0.0",
|
||||
"pbf": "^4.0.1",
|
||||
"potpack": "^2.1.0",
|
||||
"quickselect": "^3.0.0",
|
||||
"supercluster": "^8.0.1",
|
||||
"tinyqueue": "^3.0.0",
|
||||
"vt-pbf": "^3.1.3"
|
||||
"tinyqueue": "^3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.14.0",
|
||||
@@ -9097,66 +9094,6 @@
|
||||
"url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/maplibre-gl/node_modules/global-prefix": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz",
|
||||
"integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ini": "^4.1.3",
|
||||
"kind-of": "^6.0.3",
|
||||
"which": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16"
|
||||
}
|
||||
},
|
||||
"node_modules/maplibre-gl/node_modules/ini": {
|
||||
"version": "4.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
|
||||
"integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/maplibre-gl/node_modules/isexe": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
|
||||
"integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">=16"
|
||||
}
|
||||
},
|
||||
"node_modules/maplibre-gl/node_modules/pbf": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz",
|
||||
"integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==",
|
||||
"license": "BSD-3-Clause",
|
||||
"dependencies": {
|
||||
"ieee754": "^1.1.12",
|
||||
"resolve-protobuf-schema": "^2.1.0"
|
||||
},
|
||||
"bin": {
|
||||
"pbf": "bin/pbf"
|
||||
}
|
||||
},
|
||||
"node_modules/maplibre-gl/node_modules/which": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
|
||||
"integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"isexe": "^3.1.1"
|
||||
},
|
||||
"bin": {
|
||||
"node-which": "bin/which.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^16.13.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/maputnik-design": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "git+ssh://git@github.com/maputnik/design.git#172b06cb062a82f62bb7239474533a110915ef3e"
|
||||
@@ -9870,18 +9807,6 @@
|
||||
"ol": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/ol/node_modules/pbf": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pbf/-/pbf-4.0.1.tgz",
|
||||
"integrity": "sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==",
|
||||
"license": "BSD-3-Clause",
|
||||
"dependencies": {
|
||||
"resolve-protobuf-schema": "^2.1.0"
|
||||
},
|
||||
"bin": {
|
||||
"pbf": "bin/pbf"
|
||||
}
|
||||
},
|
||||
"node_modules/once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
@@ -10176,11 +10101,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/pbf": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz",
|
||||
"integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==",
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pbf/-/pbf-4.0.1.tgz",
|
||||
"integrity": "sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==",
|
||||
"license": "BSD-3-Clause",
|
||||
"dependencies": {
|
||||
"ieee754": "^1.1.12",
|
||||
"resolve-protobuf-schema": "^2.1.0"
|
||||
},
|
||||
"bin": {
|
||||
@@ -10464,9 +10389,10 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/potpack": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz",
|
||||
"integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw=="
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/potpack/-/potpack-2.1.0.tgz",
|
||||
"integrity": "sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/prelude-ls": {
|
||||
"version": "1.2.1",
|
||||
@@ -13342,16 +13268,6 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vt-pbf": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz",
|
||||
"integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==",
|
||||
"dependencies": {
|
||||
"@mapbox/point-geometry": "0.1.0",
|
||||
"@mapbox/vector-tile": "^1.3.1",
|
||||
"pbf": "^3.2.1"
|
||||
}
|
||||
},
|
||||
"node_modules/walk-sync": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-2.2.0.tgz",
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
"lodash.get": "^4.4.2",
|
||||
"lodash.isequal": "^4.5.0",
|
||||
"lodash.throttle": "^4.1.1",
|
||||
"maplibre-gl": "^5.5.0",
|
||||
"maplibre-gl": "^5.6.2",
|
||||
"maputnik-design": "github:maputnik/design#172b06c",
|
||||
"ol": "^10.6.1",
|
||||
"ol-mapbox-style": "^13.1.0",
|
||||
|
||||
@@ -108,7 +108,7 @@ type AppState = {
|
||||
dirtyMapStyle?: StyleSpecification,
|
||||
selectedLayerIndex: number,
|
||||
selectedLayerOriginalId?: string,
|
||||
sources: {[key: string]: SourceSpecification},
|
||||
sources: {[key: string]: SourceSpecification & {layers: string[]} },
|
||||
vectorLayers: {},
|
||||
spec: any,
|
||||
mapView: {
|
||||
@@ -402,7 +402,6 @@ export default class App extends React.Component<any, AppState> {
|
||||
}
|
||||
|
||||
const errors: ValidationError[] = validateStyleMin(newStyle) || [];
|
||||
|
||||
// The validate function doesn't give us errors for duplicate error with
|
||||
// empty string for layer.id, manually deal with that here.
|
||||
const layerErrors: (Error | ValidationError)[] = [];
|
||||
@@ -643,21 +642,22 @@ export default class App extends React.Component<any, AppState> {
|
||||
this.onStyleChanged(styleObj)
|
||||
}
|
||||
|
||||
fetchSources() {
|
||||
const sourceList: {[key: string]: any} = {};
|
||||
|
||||
for(const [key, val] of Object.entries(this.state.mapStyle.sources)) {
|
||||
if(
|
||||
!Object.prototype.hasOwnProperty.call(this.state.sources, key) &&
|
||||
val.type === "vector" &&
|
||||
Object.prototype.hasOwnProperty.call(val, "url")
|
||||
) {
|
||||
async fetchSources() {
|
||||
const sourceList: {[key: string]: SourceSpecification & {layers: string[]}} = {};
|
||||
for(const key of Object.keys(this.state.mapStyle.sources)) {
|
||||
const source = this.state.mapStyle.sources[key];
|
||||
if(source.type !== "vector" || !('url' in source)) {
|
||||
sourceList[key] = this.state.sources[key] || {...this.state.mapStyle.sources[key]};
|
||||
if (sourceList[key].layers === undefined) {
|
||||
sourceList[key].layers = [];
|
||||
}
|
||||
} else {
|
||||
sourceList[key] = {
|
||||
type: val.type,
|
||||
type: source.type,
|
||||
layers: []
|
||||
};
|
||||
|
||||
let url = val.url;
|
||||
let url = source.url;
|
||||
|
||||
try {
|
||||
url = setFetchAccessToken(url!, this.state.mapStyle)
|
||||
@@ -670,44 +670,28 @@ export default class App extends React.Component<any, AppState> {
|
||||
return;
|
||||
}
|
||||
|
||||
// Create new objects before setState
|
||||
const sources = Object.assign({}, {
|
||||
[key]: this.state.sources[key],
|
||||
});
|
||||
|
||||
for(const layer of json.vector_layers) {
|
||||
(sources[key] as any).layers.push(layer.id)
|
||||
sourceList[key].layers.push(layer.id)
|
||||
}
|
||||
|
||||
this.setState({
|
||||
sources: sources
|
||||
});
|
||||
};
|
||||
|
||||
if (url!.startsWith("pmtiles://")) {
|
||||
(new PMTiles(url!.substr(10))).getTileJson("")
|
||||
.then(json => setVectorLayers(json))
|
||||
.catch(err => {
|
||||
console.error("Failed to process sources for '%s'", url, err);
|
||||
});
|
||||
} else {
|
||||
fetch(url!, {
|
||||
mode: 'cors',
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(json => setVectorLayers(json))
|
||||
.catch(err => {
|
||||
console.error("Failed to process sources for '%s'", url, err);
|
||||
});
|
||||
try {
|
||||
if (url!.startsWith("pmtiles://")) {
|
||||
const json = await (new PMTiles(url!.substring(10))).getTileJson("");
|
||||
setVectorLayers(json);
|
||||
} else {
|
||||
const response = await fetch(url!, { mode: 'cors' });
|
||||
const json = await response.json();
|
||||
setVectorLayers(json);
|
||||
}
|
||||
} catch(err) {
|
||||
console.error(`Failed to process source for url: '${url}', ${err}`);
|
||||
}
|
||||
}
|
||||
else {
|
||||
sourceList[key] = this.state.sources[key] || this.state.mapStyle.sources[key];
|
||||
}
|
||||
}
|
||||
|
||||
if(!isEqual(this.state.sources, sourceList)) {
|
||||
console.debug("Setting sources");
|
||||
console.debug("Setting sources", sourceList);
|
||||
this.setState({
|
||||
sources: sourceList
|
||||
})
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import React from 'react'
|
||||
|
||||
import latest from '@maplibre/maplibre-gl-style-spec/dist/latest.json'
|
||||
import {v8} from '@maplibre/maplibre-gl-style-spec'
|
||||
import Block from './Block'
|
||||
import InputSelect from './InputSelect'
|
||||
import InputString from './InputString'
|
||||
import { WithTranslation, withTranslation } from 'react-i18next';
|
||||
import { startCase } from 'lodash'
|
||||
|
||||
type FieldTypeInternalProps = {
|
||||
value: string
|
||||
@@ -16,8 +16,9 @@ type FieldTypeInternalProps = {
|
||||
|
||||
const FieldTypeInternal: React.FC<FieldTypeInternalProps> = (props) => {
|
||||
const t = props.t;
|
||||
const layerstypes: [string, string][] = Object.keys(v8.layer.type.values || {}).map(v => [v, startCase(v.replace(/-/g, ' '))]);
|
||||
return (
|
||||
<Block label={t('Type')} fieldSpec={latest.layer.type}
|
||||
<Block label={t('Type')} fieldSpec={v8.layer.type}
|
||||
data-wd-key={props.wdKey}
|
||||
error={props.error}
|
||||
>
|
||||
@@ -26,17 +27,7 @@ const FieldTypeInternal: React.FC<FieldTypeInternalProps> = (props) => {
|
||||
)}
|
||||
{!props.disabled && (
|
||||
<InputSelect
|
||||
options={[
|
||||
['background', 'Background'],
|
||||
['fill', 'Fill'],
|
||||
['line', 'Line'],
|
||||
['symbol', 'Symbol'],
|
||||
['raster', 'Raster'],
|
||||
['circle', 'Circle'],
|
||||
['fill-extrusion', 'Fill Extrusion'],
|
||||
['hillshade', 'Hillshade'],
|
||||
['heatmap', 'Heatmap'],
|
||||
]}
|
||||
options={layerstypes}
|
||||
onChange={props.onChange}
|
||||
value={props.value}
|
||||
data-wd-key={props.wdKey + '.select'}
|
||||
|
||||
@@ -4,6 +4,7 @@ import {Accordion} from 'react-accessible-accordion';
|
||||
import {MdMoreVert} from 'react-icons/md'
|
||||
import { IconContext } from 'react-icons'
|
||||
import {BackgroundLayerSpecification, LayerSpecification, SourceSpecification} from 'maplibre-gl';
|
||||
import {v8} from '@maplibre/maplibre-gl-style-spec';
|
||||
|
||||
import FieldJson from './FieldJson'
|
||||
import FilterEditor from './FilterEditor'
|
||||
@@ -17,23 +18,78 @@ import FieldComment from './FieldComment'
|
||||
import FieldSource from './FieldSource'
|
||||
import FieldSourceLayer from './FieldSourceLayer'
|
||||
import { changeType, changeProperty } from '../libs/layer'
|
||||
import layout from '../config/layout.json'
|
||||
import {formatLayerId} from '../libs/format';
|
||||
import { WithTranslation, withTranslation } from 'react-i18next';
|
||||
import { TFunction } from 'i18next';
|
||||
import { NON_SOURCE_LAYERS } from '../libs/non-source-layers';
|
||||
|
||||
type MaputnikLayoutGroup = {
|
||||
id: string;
|
||||
title: string;
|
||||
type: string;
|
||||
fields: string[];
|
||||
}
|
||||
|
||||
function getLayoutForType(type: LayerSpecification["type"], t: TFunction) {
|
||||
return layout[type] ? {
|
||||
...layout[type],
|
||||
groups: layout[type].groups.map(group => {
|
||||
return {
|
||||
...group,
|
||||
id: group.title.replace(/ /g, "_"),
|
||||
title: t(group.title)
|
||||
};
|
||||
}),
|
||||
} : layout.invalid;
|
||||
function getLayoutForSymbolType(t: TFunction): MaputnikLayoutGroup[] {
|
||||
const groups: MaputnikLayoutGroup[] = [];
|
||||
groups.push({
|
||||
title: t("General layout properties"),
|
||||
id: "General_layout_properties",
|
||||
type: "properties",
|
||||
fields: Object.keys(v8["layout_symbol"]).filter(f => f.startsWith("symbol-"))
|
||||
});
|
||||
groups.push({
|
||||
title: t("Text layout properties"),
|
||||
id: "Text_layout_properties",
|
||||
type: "properties",
|
||||
fields: Object.keys(v8["layout_symbol"]).filter(f => f.startsWith("text-"))
|
||||
});
|
||||
groups.push({
|
||||
title: t("Icon layout properties"),
|
||||
id: "Icon_layout_properties",
|
||||
type: "properties",
|
||||
fields: Object.keys(v8["layout_symbol"]).filter(f => f.startsWith("icon-"))
|
||||
});
|
||||
groups.push({
|
||||
title: t("Text paint properties"),
|
||||
id: "Text_paint_properties",
|
||||
type: "properties",
|
||||
fields: Object.keys(v8["paint_symbol"]).filter(f => f.startsWith("text-"))
|
||||
});
|
||||
groups.push({
|
||||
title: t("Icon paint properties"),
|
||||
id: "Icon_paint_properties",
|
||||
type: "properties",
|
||||
fields: Object.keys(v8["paint_symbol"]).filter(f => f.startsWith("icon-"))
|
||||
});
|
||||
return groups;
|
||||
}
|
||||
|
||||
function getLayoutForType(type: LayerSpecification["type"], t: TFunction): MaputnikLayoutGroup[] {
|
||||
if (Object.keys(v8.layer.type.values).indexOf(type) < 0) {
|
||||
return []
|
||||
}
|
||||
if (type === "symbol") {
|
||||
return getLayoutForSymbolType(t);
|
||||
}
|
||||
const groups: MaputnikLayoutGroup[] = [];
|
||||
if (Object.keys(v8["paint_" + type]).length > 0) {
|
||||
groups.push({
|
||||
title: t("Paint properties"),
|
||||
id: "Paint_properties",
|
||||
type: "properties",
|
||||
fields: Object.keys(v8["paint_" + type]),
|
||||
});
|
||||
}
|
||||
if (Object.keys(v8["layout_" + type]).length > 0) {
|
||||
groups.push({
|
||||
title: t("Layout properties"),
|
||||
id: "Layout_properties",
|
||||
type: "properties",
|
||||
fields: Object.keys(v8["layout_" + type])
|
||||
});
|
||||
}
|
||||
return groups;
|
||||
}
|
||||
|
||||
function layoutGroups(layerType: LayerSpecification["type"], t: TFunction): {id: string, title: string, type: string, fields?: string[]}[] {
|
||||
@@ -53,13 +109,13 @@ function layoutGroups(layerType: LayerSpecification["type"], t: TFunction): {id:
|
||||
type: 'jsoneditor'
|
||||
}
|
||||
return [layerGroup, filterGroup]
|
||||
.concat(getLayoutForType(layerType, t).groups)
|
||||
.concat(getLayoutForType(layerType, t))
|
||||
.concat([editorGroup])
|
||||
}
|
||||
|
||||
type LayerEditorInternalProps = {
|
||||
layer: LayerSpecification
|
||||
sources: {[key: string]: SourceSpecification}
|
||||
sources: {[key: string]: SourceSpecification & {layers: string[]}}
|
||||
vectorLayers: {[key: string]: any}
|
||||
spec: object
|
||||
onLayerChanged(...args: unknown[]): unknown
|
||||
@@ -89,11 +145,10 @@ class LayerEditorInternal extends React.Component<LayerEditorInternalProps, Laye
|
||||
constructor(props: LayerEditorInternalProps) {
|
||||
super(props)
|
||||
|
||||
//TODO: Clean this up and refactor into function
|
||||
const editorGroups: {[keys:string]: boolean} = {}
|
||||
layoutGroups(this.props.layer.type, props.t).forEach(group => {
|
||||
for (const group of layoutGroups(this.props.layer.type, props.t)) {
|
||||
editorGroups[group.title] = true
|
||||
})
|
||||
}
|
||||
|
||||
this.state = { editorGroups }
|
||||
}
|
||||
@@ -101,11 +156,11 @@ class LayerEditorInternal extends React.Component<LayerEditorInternalProps, Laye
|
||||
static getDerivedStateFromProps(props: Readonly<LayerEditorInternalProps>, state: LayerEditorState) {
|
||||
const additionalGroups = { ...state.editorGroups }
|
||||
|
||||
getLayoutForType(props.layer.type, props.t).groups.forEach(group => {
|
||||
for (const group of getLayoutForType(props.layer.type, props.t)) {
|
||||
if(!(group.title in additionalGroups)) {
|
||||
additionalGroups[group.title] = true
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return {
|
||||
editorGroups: additionalGroups
|
||||
@@ -153,7 +208,7 @@ class LayerEditorInternal extends React.Component<LayerEditorInternalProps, Laye
|
||||
let sourceLayerIds;
|
||||
const layer = this.props.layer as Exclude<LayerSpecification, BackgroundLayerSpecification>;
|
||||
if(Object.prototype.hasOwnProperty.call(this.props.sources, layer.source)) {
|
||||
sourceLayerIds = (this.props.sources[layer.source] as any).layers;
|
||||
sourceLayerIds = this.props.sources[layer.source].layers;
|
||||
}
|
||||
|
||||
switch(type) {
|
||||
@@ -180,7 +235,7 @@ class LayerEditorInternal extends React.Component<LayerEditorInternalProps, Laye
|
||||
onChange={v => this.changeProperty(null, 'source', v)}
|
||||
/>
|
||||
}
|
||||
{['background', 'raster', 'hillshade', 'heatmap'].indexOf(this.props.layer.type) < 0 &&
|
||||
{!NON_SOURCE_LAYERS.includes(this.props.layer.type) &&
|
||||
<FieldSourceLayer
|
||||
error={errorData['source-layer']}
|
||||
sourceLayerIds={sourceLayerIds}
|
||||
|
||||
@@ -7,7 +7,7 @@ import LayerListItem from './LayerListItem'
|
||||
import ModalAdd from './ModalAdd'
|
||||
|
||||
import {SortEndHandler, SortableContainer} from 'react-sortable-hoc';
|
||||
import type {LayerSpecification} from 'maplibre-gl';
|
||||
import type {LayerSpecification, SourceSpecification} from 'maplibre-gl';
|
||||
import generateUniqueId from '../libs/document-uid';
|
||||
import { findClosestCommonPrefix, layerPrefix } from '../libs/layer';
|
||||
import { WithTranslation, withTranslation } from 'react-i18next';
|
||||
@@ -20,7 +20,7 @@ type LayerListContainerProps = {
|
||||
onLayerDestroy?(...args: unknown[]): unknown
|
||||
onLayerCopy(...args: unknown[]): unknown
|
||||
onLayerVisibilityToggle(...args: unknown[]): unknown
|
||||
sources: object
|
||||
sources: Record<string, SourceSpecification & {layers: string[]}>;
|
||||
errors: any[]
|
||||
};
|
||||
type LayerListContainerInternalProps = LayerListContainerProps & WithTranslation;
|
||||
|
||||
@@ -6,8 +6,9 @@ import FieldType from './FieldType'
|
||||
import FieldId from './FieldId'
|
||||
import FieldSource from './FieldSource'
|
||||
import FieldSourceLayer from './FieldSourceLayer'
|
||||
import type {LayerSpecification} from 'maplibre-gl'
|
||||
import type {LayerSpecification, SourceSpecification} from 'maplibre-gl'
|
||||
import { WithTranslation, withTranslation } from 'react-i18next';
|
||||
import { NON_SOURCE_LAYERS } from '../libs/non-source-layers'
|
||||
|
||||
type ModalAddInternalProps = {
|
||||
layers: LayerSpecification[]
|
||||
@@ -15,7 +16,7 @@ type ModalAddInternalProps = {
|
||||
isOpen: boolean
|
||||
onOpenToggle(open: boolean): unknown
|
||||
// A dict of source id's and the available source layers
|
||||
sources: any
|
||||
sources: Record<string, SourceSpecification & {layers: string[]}>;
|
||||
} & WithTranslation;
|
||||
|
||||
type ModalAddState = {
|
||||
@@ -41,7 +42,7 @@ class ModalAddInternal extends React.Component<ModalAddInternalProps, ModalAddSt
|
||||
|
||||
if(this.state.type !== 'background') {
|
||||
layer.source = this.state.source
|
||||
if(this.state.type !== 'raster' && this.state['source-layer']) {
|
||||
if(!NON_SOURCE_LAYERS.includes(this.state.type) && this.state['source-layer']) {
|
||||
layer['source-layer'] = this.state['source-layer']
|
||||
}
|
||||
}
|
||||
@@ -61,9 +62,12 @@ class ModalAddInternal extends React.Component<ModalAddInternalProps, ModalAddSt
|
||||
error: null,
|
||||
}
|
||||
|
||||
if(props.sources.length > 0) {
|
||||
if(Object.keys(props.sources).length > 0) {
|
||||
state.source = Object.keys(this.props.sources)[0];
|
||||
state['source-layer'] = this.props.sources[state.source as keyof ModalAddInternalProps["sources"]][0]
|
||||
const sourceLayers = this.props.sources[state.source].layers || []
|
||||
if (sourceLayers.length > 0) {
|
||||
state['source-layer'] = sourceLayers[0];
|
||||
}
|
||||
}
|
||||
this.state = state;
|
||||
}
|
||||
@@ -97,39 +101,26 @@ class ModalAddInternal extends React.Component<ModalAddInternalProps, ModalAddSt
|
||||
return sourceObj.layers || [];
|
||||
}
|
||||
|
||||
getSources(type: string) {
|
||||
const sources = [];
|
||||
getSources(type: LayerSpecification["type"]) {
|
||||
|
||||
const types = {
|
||||
vector: [
|
||||
"fill",
|
||||
"line",
|
||||
"symbol",
|
||||
"circle",
|
||||
"fill-extrusion",
|
||||
"heatmap"
|
||||
],
|
||||
raster: [
|
||||
"raster"
|
||||
],
|
||||
geojson: [
|
||||
"fill",
|
||||
"line",
|
||||
"symbol",
|
||||
"circle",
|
||||
"fill-extrusion",
|
||||
"heatmap"
|
||||
]
|
||||
switch(type) {
|
||||
case 'background':
|
||||
return [];
|
||||
case 'hillshade':
|
||||
case 'color-relief':
|
||||
return Object.entries(this.props.sources).filter(([_, v]) => v.type === 'raster-dem').map(([k, _]) => k);
|
||||
case 'raster':
|
||||
return Object.entries(this.props.sources).filter(([_, v]) => v.type === 'raster').map(([k, _]) => k);
|
||||
case 'heatmap':
|
||||
case 'circle':
|
||||
case 'fill':
|
||||
case 'fill-extrusion':
|
||||
case 'line':
|
||||
case 'symbol':
|
||||
return Object.entries(this.props.sources).filter(([_, v]) => v.type === 'vector' || v.type === 'geojson').map(([k, _]) => k);
|
||||
default:
|
||||
return [];
|
||||
}
|
||||
|
||||
for(const [key, val] of Object.entries(this.props.sources) as any) {
|
||||
const valType = val.type as keyof typeof types;
|
||||
if(types[valType] && types[valType].indexOf(type) > -1) {
|
||||
sources.push(key);
|
||||
}
|
||||
}
|
||||
|
||||
return sources;
|
||||
}
|
||||
|
||||
|
||||
@@ -182,7 +173,7 @@ class ModalAddInternal extends React.Component<ModalAddInternalProps, ModalAddSt
|
||||
onChange={(v: string) => this.setState({ source: v })}
|
||||
/>
|
||||
}
|
||||
{['background', 'raster', 'hillshade', 'heatmap'].indexOf(this.state.type) < 0 &&
|
||||
{!NON_SOURCE_LAYERS.includes(this.state.type) &&
|
||||
<FieldSourceLayer
|
||||
isFixed={true}
|
||||
sourceLayerIds={layers}
|
||||
|
||||
@@ -17,7 +17,7 @@ class FunctionInputButtonsInternal extends React.Component<FunctionInputButtonsI
|
||||
const t = this.props.t;
|
||||
let makeZoomInputButton, makeDataInputButton, expressionInputButton;
|
||||
|
||||
if (this.props.fieldSpec.expression.parameters.includes('zoom')) {
|
||||
if (this.props.fieldSpec.expression?.parameters.includes('zoom')) {
|
||||
expressionInputButton = (
|
||||
<InputButton
|
||||
className="maputnik-make-zoom-function"
|
||||
|
||||
@@ -1,240 +0,0 @@
|
||||
{
|
||||
"line": {
|
||||
"groups": [
|
||||
{
|
||||
"title": "Paint properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"line-opacity",
|
||||
"line-color",
|
||||
"line-width",
|
||||
"line-offset",
|
||||
"line-blur",
|
||||
"line-dasharray",
|
||||
"line-pattern",
|
||||
"line-translate",
|
||||
"line-translate-anchor",
|
||||
"line-gap-width"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Layout properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"line-cap",
|
||||
"line-join",
|
||||
"line-miter-limit",
|
||||
"line-round-limit"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"background": {
|
||||
"groups": [
|
||||
{
|
||||
"title": "Paint properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"background-color",
|
||||
"background-pattern",
|
||||
"background-opacity"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"fill": {
|
||||
"groups": [
|
||||
{
|
||||
"title": "Paint properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"fill-opacity",
|
||||
"fill-color",
|
||||
"fill-antialias",
|
||||
"fill-outline-color",
|
||||
"fill-pattern",
|
||||
"fill-translate",
|
||||
"fill-translate-anchor"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"fill-extrusion": {
|
||||
"groups": [
|
||||
{
|
||||
"title": "Paint properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"fill-extrusion-opacity",
|
||||
"fill-extrusion-color",
|
||||
"fill-extrusion-translate",
|
||||
"fill-extrusion-translate-anchor",
|
||||
"fill-extrusion-pattern",
|
||||
"fill-extrusion-height",
|
||||
"fill-extrusion-base",
|
||||
"fill-extrusion-vertical-gradient"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"circle": {
|
||||
"groups": [
|
||||
{
|
||||
"title": "Paint properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"circle-color",
|
||||
"circle-opacity",
|
||||
"circle-stroke-color",
|
||||
"circle-stroke-opacity",
|
||||
"circle-blur",
|
||||
"circle-radius",
|
||||
"circle-stroke-width",
|
||||
"circle-pitch-scale",
|
||||
"circle-translate",
|
||||
"circle-translate-anchor",
|
||||
"circle-pitch-alignment"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"symbol": {
|
||||
"groups": [
|
||||
{
|
||||
"title": "General layout properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"symbol-placement",
|
||||
"symbol-spacing",
|
||||
"symbol-avoid-edges",
|
||||
"symbol-z-order"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Text layout properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"text-field",
|
||||
"text-font",
|
||||
"text-size",
|
||||
"text-line-height",
|
||||
"text-padding",
|
||||
"text-allow-overlap",
|
||||
"text-ignore-placement",
|
||||
"text-pitch-alignment",
|
||||
"text-rotation-alignment",
|
||||
"text-max-width",
|
||||
"text-letter-spacing",
|
||||
"text-justify",
|
||||
"text-anchor",
|
||||
"text-max-angle",
|
||||
"text-writing-mode",
|
||||
"text-rotate",
|
||||
"text-keep-upright",
|
||||
"text-transform",
|
||||
"text-offset",
|
||||
"text-optional",
|
||||
"text-variable-anchor",
|
||||
"text-radial-offset"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Icon layout properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"icon-image",
|
||||
"icon-allow-overlap",
|
||||
"icon-ignore-placement",
|
||||
"icon-optional",
|
||||
"icon-rotation-alignment",
|
||||
"icon-size",
|
||||
"icon-text-fit",
|
||||
"icon-text-fit-padding",
|
||||
"icon-rotate",
|
||||
"icon-padding",
|
||||
"icon-keep-upright",
|
||||
"icon-offset",
|
||||
"icon-anchor",
|
||||
"icon-pitch-alignment"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Text paint properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"text-color",
|
||||
"text-opacity",
|
||||
"text-halo-color",
|
||||
"text-halo-width",
|
||||
"text-halo-blur",
|
||||
"text-translate",
|
||||
"text-translate-anchor"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Icon paint properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"icon-color",
|
||||
"icon-opacity",
|
||||
"icon-halo-color",
|
||||
"icon-halo-width",
|
||||
"icon-halo-blur",
|
||||
"icon-translate",
|
||||
"icon-translate-anchor"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"raster": {
|
||||
"groups": [
|
||||
{
|
||||
"title": "Paint properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"raster-opacity",
|
||||
"raster-hue-rotate",
|
||||
"raster-brightness-min",
|
||||
"raster-brightness-max",
|
||||
"raster-saturation",
|
||||
"raster-contrast",
|
||||
"raster-fade-duration",
|
||||
"raster-resampling"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"hillshade": {
|
||||
"groups": [
|
||||
{
|
||||
"title": "Paint properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"hillshade-illumination-direction",
|
||||
"hillshade-illumination-anchor",
|
||||
"hillshade-exaggeration",
|
||||
"hillshade-shadow-color",
|
||||
"hillshade-highlight-color",
|
||||
"hillshade-accent-color"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"heatmap": {
|
||||
"groups": [
|
||||
{
|
||||
"title": "Paint properties",
|
||||
"type": "properties",
|
||||
"fields": [
|
||||
"heatmap-radius",
|
||||
"heatmap-weight",
|
||||
"heatmap-intensity",
|
||||
"heatmap-opacity"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"invalid": {
|
||||
"groups": []
|
||||
}
|
||||
}
|
||||
1
src/libs/non-source-layers.ts
Normal file
1
src/libs/non-source-layers.ts
Normal file
@@ -0,0 +1 @@
|
||||
export const NON_SOURCE_LAYERS = ['background', 'raster', 'hillshade', 'heatmap', 'color-relief']
|
||||
@@ -59,6 +59,13 @@
|
||||
"Must provide protocol: <1>https://</1>": "Protokoll erforderlich: <1>https://</1>",
|
||||
"Must provide protocol: <1>http://</1> or <3>https://</3>": "Protokoll erforderlich: <1>http://</1> oder <3>https://</3>",
|
||||
"CORS policy won't allow fetching resources served over http from https, use a <1>https://</1> domain": "Die CORS-Politik erlaubt es nicht, Ressourcen über http von https zu laden, benutze eine <1>https://</1>-Domain",
|
||||
"General layout properties": "Allgemeine Layouteigenschaften",
|
||||
"Text layout properties": "Text-Layouteigenschaften",
|
||||
"Icon layout properties": "Icon-Layouteigenschaften",
|
||||
"Text paint properties": "Text-Darstellungseigenschaften",
|
||||
"Icon paint properties": "Icon-Darstellungseigenschaften",
|
||||
"Paint properties": "Darstellungseigenschaften",
|
||||
"Layout properties": "Layouteigenschaften",
|
||||
"Layer": "Ebene",
|
||||
"JSON Editor": "JSON-Editor",
|
||||
"Delete": "Löschen",
|
||||
@@ -72,7 +79,6 @@
|
||||
"Collapse": "Einklappen",
|
||||
"Expand": "Ausklappen",
|
||||
"Add Layer": "Ebene hinzufügen",
|
||||
"Layer ID already exists": "Layer-ID existiert bereits",
|
||||
"Search": "Suche",
|
||||
"Zoom:": "Zoom:",
|
||||
"Close popup": "Popup schließen",
|
||||
@@ -80,6 +86,7 @@
|
||||
"center:": "Zentrum:",
|
||||
"rotation:": "Rotation:",
|
||||
"Close modal": "Modale Fenster schließen",
|
||||
"Layer ID already exists": "Layer-ID existiert bereits",
|
||||
"Debug": "Debug",
|
||||
"Options": "Optionen",
|
||||
"Save Style": "Stil Speichern",
|
||||
@@ -187,18 +194,11 @@
|
||||
"Public access token for LocationIQ services.": "Öffentlicher Zugriffstoken für LocationIQ-Dienste.",
|
||||
"Style Renderer": "Stil-Renderer",
|
||||
"Choose the default Maputnik renderer for this style.": "Wähle den Standard-Renderer für diesen Stil aus.",
|
||||
"Paint properties": "Darstellungseigenschaften",
|
||||
"Opacity": "Deckkraft",
|
||||
"Radius": "Radius",
|
||||
"Text paint properties": "Text-Darstellungseigenschaften",
|
||||
"Icon paint properties": "Icon-Darstellungseigenschaften",
|
||||
"Text layout properties": "Text-Layouteigenschaften",
|
||||
"Icon layout properties": "Icon-Layouteigenschaften",
|
||||
"General layout properties": "Allgemeine Layouteigenschaften",
|
||||
"Color": "Farbe",
|
||||
"Outline color": "Umrissfarbe",
|
||||
"Language": "Sprache",
|
||||
"Layout properties": "Layouteigenschaften",
|
||||
"Width": "Breite",
|
||||
"Height": "Höhe",
|
||||
"Field": "Feld",
|
||||
|
||||
@@ -59,6 +59,13 @@
|
||||
"Must provide protocol: <1>https://</1>": "Protocole requis : <1>https://</1>",
|
||||
"Must provide protocol: <1>http://</1> or <3>https://</3>": "Protocole requis : <1>http://</1> ou <3>https://</3>",
|
||||
"CORS policy won't allow fetching resources served over http from https, use a <1>https://</1> domain": "La politique CORS ne permet pas de récupérer des ressources servies sur http depuis https, utilisez un protocole <1>https://</1>",
|
||||
"General layout properties": "Propriétés générales de mise en page",
|
||||
"Text layout properties": "Propriétés de mise en page du texte",
|
||||
"Icon layout properties": "Propriétés de mise en page de l'icône",
|
||||
"Text paint properties": "Propriétés de peinture du texte",
|
||||
"Icon paint properties": "Propriétés de peinture de l'icône",
|
||||
"Paint properties": "Propriétés de peinture",
|
||||
"Layout properties": "Propriétés de mise en page",
|
||||
"Layer": "Calque",
|
||||
"JSON Editor": "Éditeur JSON",
|
||||
"Delete": "Supprimer",
|
||||
@@ -72,7 +79,6 @@
|
||||
"Collapse": "Réduire",
|
||||
"Expand": "Développer",
|
||||
"Add Layer": "Ajouter un calque",
|
||||
"Layer ID already exists": "L'identifiant du calque existe déjà",
|
||||
"Search": "Recherche",
|
||||
"Zoom:": "Zoom :",
|
||||
"Close popup": "Fermer la fenêtre",
|
||||
@@ -80,6 +86,7 @@
|
||||
"center:": "centre :",
|
||||
"rotation:": "rotation :",
|
||||
"Close modal": "Fermer la fenêtre modale",
|
||||
"Layer ID already exists": "L'identifiant du calque existe déjà",
|
||||
"Debug": "Déboguer",
|
||||
"Options": "Options",
|
||||
"Save Style": "Enregistrer le style",
|
||||
@@ -188,12 +195,5 @@
|
||||
"Style Renderer": "Moteur de rendu pour le style",
|
||||
"Choose the default Maputnik renderer for this style.": "Choisissez le moteur de rendu Maputnik par défaut pour ce style.",
|
||||
"Language": "Langue",
|
||||
"Layer options": "Options du calque",
|
||||
"Paint properties": "Propriétés de peinture",
|
||||
"Layout properties": "Propriétés de mise en page",
|
||||
"General layout properties": "Propriétés générales de mise en page",
|
||||
"Text layout properties": "Propriétés de mise en page du texte",
|
||||
"Icon layout properties": "Propriétés de mise en page de l'icône",
|
||||
"Text paint properties": "Propriétés de peinture du texte",
|
||||
"Icon paint properties": "Propriétés de peinture de l'icône"
|
||||
"Layer options": "Options du calque"
|
||||
}
|
||||
|
||||
@@ -59,6 +59,13 @@
|
||||
"Must provide protocol: <1>https://</1>": "נדרש פרוטוקול: <1>https://</1>",
|
||||
"Must provide protocol: <1>http://</1> or <3>https://</3>": "נדרשים פרוטוקולים: <1>http://</1> או <3>https://</3>",
|
||||
"CORS policy won't allow fetching resources served over http from https, use a <1>https://</1> domain": "CORS policy won't allow fetching resources served over http from https, use a <1>https://</1> domain",
|
||||
"General layout properties": "תכונות פריסה כלליות",
|
||||
"Text layout properties": "תכונות פריסה של טקסט",
|
||||
"Icon layout properties": "תכונות פריסה של סמליל",
|
||||
"Text paint properties": "תכונות ציור של טקסט",
|
||||
"Icon paint properties": "תכונות ציור של סמליל",
|
||||
"Paint properties": "תכונות ציור",
|
||||
"Layout properties": "תכונות פריסה",
|
||||
"Layer": "שכבה",
|
||||
"JSON Editor": "עורך JSON",
|
||||
"Delete": "מחיקה",
|
||||
@@ -72,7 +79,6 @@
|
||||
"Collapse": "הקטנה",
|
||||
"Expand": "הגדלה",
|
||||
"Add Layer": "הוספת שכבה",
|
||||
"Layer ID already exists": "מזהה השכבה כבר קיים",
|
||||
"Search": "חיפוש",
|
||||
"Zoom:": "זום:",
|
||||
"Close popup": "סגירת החלון",
|
||||
@@ -80,6 +86,7 @@
|
||||
"center:": "מרכז:",
|
||||
"rotation:": "סיבוב:",
|
||||
"Close modal": "סגירת חלונית",
|
||||
"Layer ID already exists": "מזהה השכבה כבר קיים",
|
||||
"Debug": "דיבאג",
|
||||
"Options": "אפשרויות",
|
||||
"Save Style": "שמירת הסטייל",
|
||||
|
||||
@@ -59,6 +59,13 @@
|
||||
"Must provide protocol: <1>https://</1>": "Protocollo richiesto: <1>https://</1>",
|
||||
"Must provide protocol: <1>http://</1> or <3>https://</3>": "Protocollo richiesto: <1>http://</1> o <3>https://</3>",
|
||||
"CORS policy won't allow fetching resources served over http from https, use a <1>https://</1> domain": "La politica CORS non permette di caricare risorse tramite http da https, utilizza un dominio <1>https://</1>.",
|
||||
"General layout properties": "Proprietà generali del layout",
|
||||
"Text layout properties": "Proprietà di layout del testo",
|
||||
"Icon layout properties": "Proprietà di layout dell'icona",
|
||||
"Text paint properties": "Proprietà di pittura del testo",
|
||||
"Icon paint properties": "Proprietà di pittura dell'icona",
|
||||
"Paint properties": "Proprietà di pittura",
|
||||
"Layout properties": "Proprietà di layout",
|
||||
"Layer": "Livello",
|
||||
"JSON Editor": "Editor JSON",
|
||||
"Delete": "Elimina",
|
||||
@@ -72,7 +79,6 @@
|
||||
"Collapse": "Coprimi",
|
||||
"Expand": "Espandi",
|
||||
"Add Layer": "Aggiungi Livello",
|
||||
"Layer ID already exists": "L'ID del layer esiste già",
|
||||
"Search": "Cerca",
|
||||
"Zoom:": "Zoom:",
|
||||
"Close popup": "Chiudi popup",
|
||||
@@ -80,6 +86,7 @@
|
||||
"center:": "centro:",
|
||||
"rotation:": "rotazione:",
|
||||
"Close modal": "Chiudi finestra modale",
|
||||
"Layer ID already exists": "L'ID del layer esiste già",
|
||||
"Debug": "Debug",
|
||||
"Options": "Opzioni",
|
||||
"Save Style": "Opzioni stile",
|
||||
|
||||
@@ -59,6 +59,13 @@
|
||||
"Must provide protocol: <1>https://</1>": "プロトコルを指定してください: <1>https://</1>",
|
||||
"Must provide protocol: <1>http://</1> or <3>https://</3>": "プロトコルを指定してください: <1>http://</1> または <3>https://</3>",
|
||||
"CORS policy won't allow fetching resources served over http from https, use a <1>https://</1> domain": "CORS使用時は、http経由で提供されるリソースをhttpsから取得することはできません。<1>https://</1> ドメインを使用してください。",
|
||||
"General layout properties": "一般レイアウトプロパティ",
|
||||
"Text layout properties": "文字レイアウトプロパティ",
|
||||
"Icon layout properties": "アイコンレイアウトプロパティ",
|
||||
"Text paint properties": "文字ペイントプロパティ",
|
||||
"Icon paint properties": "アイコンペイントプロパティ",
|
||||
"Paint properties": "ペイントプロパティ",
|
||||
"Layout properties": "レイアウトプロパティ",
|
||||
"Layer": "レイヤー",
|
||||
"JSON Editor": "JSONエディタ",
|
||||
"Delete": "削除",
|
||||
@@ -72,7 +79,6 @@
|
||||
"Collapse": "畳む",
|
||||
"Expand": "展開",
|
||||
"Add Layer": "レイヤー追加",
|
||||
"Layer ID already exists": "レイヤーIDは既に存在します",
|
||||
"Search": "検索",
|
||||
"Zoom:": "ズーム:",
|
||||
"Close popup": "ポップアップを閉じる",
|
||||
@@ -80,6 +86,7 @@
|
||||
"center:": "中央:",
|
||||
"rotation:": "回転角度:",
|
||||
"Close modal": "モーダルを閉じる",
|
||||
"Layer ID already exists": "レイヤーIDは既に存在します",
|
||||
"Debug": "デバッグ",
|
||||
"Options": "設定",
|
||||
"Save Style": "スタイルを保存",
|
||||
@@ -189,12 +196,5 @@
|
||||
"Choose the default Maputnik renderer for this style.": "このスタイルのデフォルトの Maputnik レンダラを選択してください",
|
||||
"Language": "言語",
|
||||
"<0>Open in OSM</0> — Opens the current view on openstreetmap.org": "現在のビューを <0>openstreetmap.org で開く</0>",
|
||||
"Layer options": "レイヤー設定",
|
||||
"Paint properties": "ペイントプロパティ",
|
||||
"Layout properties": "レイアウトプロパティ",
|
||||
"General layout properties": "一般レイアウトプロパティ",
|
||||
"Text layout properties": "文字レイアウトプロパティ",
|
||||
"Icon layout properties": "アイコンレイアウトプロパティ",
|
||||
"Text paint properties": "文字ペイントプロパティ",
|
||||
"Icon paint properties": "アイコンペイントプロパティ"
|
||||
"Layer options": "レイヤー設定"
|
||||
}
|
||||
|
||||
@@ -59,6 +59,13 @@
|
||||
"Must provide protocol: <1>https://</1>": "必须提供协议:<1>https://</1>",
|
||||
"Must provide protocol: <1>http://</1> or <3>https://</3>": "必须提供协议:<1>http://</1> 或 <3>https://</3>",
|
||||
"CORS policy won't allow fetching resources served over http from https, use a <1>https://</1> domain": "CORS 策略不允许从 https 访问通过 http 提供的资源,请使用 <1>https://</1> 域名。",
|
||||
"General layout properties": "常规布局属性",
|
||||
"Text layout properties": "文本布局属性",
|
||||
"Icon layout properties": "图标布局属性",
|
||||
"Text paint properties": "文本绘制属性",
|
||||
"Icon paint properties": "图标绘制属性",
|
||||
"Paint properties": "绘制属性",
|
||||
"Layout properties": "布局属性",
|
||||
"Layer": "图层",
|
||||
"JSON Editor": "JSON编辑器",
|
||||
"Delete": "删除",
|
||||
@@ -72,7 +79,6 @@
|
||||
"Collapse": "折叠",
|
||||
"Expand": "展开",
|
||||
"Add Layer": "添加图层",
|
||||
"Layer ID already exists": "图层ID已存在",
|
||||
"Search": "搜索",
|
||||
"Zoom:": "缩放:",
|
||||
"Close popup": "关闭弹出窗口",
|
||||
@@ -80,6 +86,7 @@
|
||||
"center:": "中心:",
|
||||
"rotation:": "旋转:",
|
||||
"Close modal": "关闭模态框",
|
||||
"Layer ID already exists": "图层ID已存在",
|
||||
"Debug": "调试",
|
||||
"Options": "选项",
|
||||
"Save Style": "保存样式",
|
||||
@@ -189,12 +196,5 @@
|
||||
"Choose the default Maputnik renderer for this style.": "为这种样式选择默认的Maputnik渲染器。",
|
||||
"Language": "语言",
|
||||
"<0>Open in OSM</0> — Opens the current view on openstreetmap.org": "在 openstreetmap.org 打开当前视图",
|
||||
"Layer options": "图层选项",
|
||||
"Paint properties": "绘制属性",
|
||||
"Layout properties": "布局属性",
|
||||
"General layout properties": "常规布局属性",
|
||||
"Text layout properties": "文本布局属性",
|
||||
"Icon layout properties": "图标布局属性",
|
||||
"Text paint properties": "文本绘制属性",
|
||||
"Icon paint properties": "图标绘制属性"
|
||||
"Layer options": "图层选项"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user